Ver Fonte

Updated glslang.

Бранимир Караџић há 6 anos atrás
pai
commit
0bac1a719c
29 ficheiros alterados com 446 adições e 273 exclusões
  1. 13 1
      3rdparty/glslang/BUILD.gn
  2. 30 5
      3rdparty/glslang/CMakeLists.txt
  3. 2 1
      3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt
  4. 1 1
      3rdparty/glslang/README.md
  5. 13 6
      3rdparty/glslang/SPIRV/CMakeLists.txt
  6. 5 5
      3rdparty/glslang/SPIRV/GlslangToSpv.cpp
  7. 10 4
      3rdparty/glslang/StandAlone/CMakeLists.txt
  8. 9 0
      3rdparty/glslang/Test/130.frag
  9. 14 1
      3rdparty/glslang/Test/330.frag
  10. 10 1
      3rdparty/glslang/Test/baseResults/130.frag.out
  11. 11 1
      3rdparty/glslang/Test/baseResults/330.frag.out
  12. 226 216
      3rdparty/glslang/Test/baseResults/glsl.450.subgroup.frag.out
  13. 40 0
      3rdparty/glslang/Test/baseResults/spv.volatileAtomic.comp.out
  14. 4 0
      3rdparty/glslang/Test/glsl.450.subgroup.frag
  15. 14 9
      3rdparty/glslang/Test/runtests
  16. 8 0
      3rdparty/glslang/Test/spv.volatileAtomic.comp
  17. 6 3
      3rdparty/glslang/glslang/CMakeLists.txt
  18. 2 2
      3rdparty/glslang/glslang/Include/Types.h
  19. 6 3
      3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
  20. 1 1
      3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h
  21. 2 0
      3rdparty/glslang/glslang/MachineIndependent/Versions.cpp
  22. 1 0
      3rdparty/glslang/glslang/MachineIndependent/Versions.h
  23. 6 6
      3rdparty/glslang/glslang/MachineIndependent/iomapper.h
  24. 2 1
      3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt
  25. 2 1
      3rdparty/glslang/glslang/OSDependent/Windows/CMakeLists.txt
  26. 2 2
      3rdparty/glslang/glslang/Public/ShaderLang.h
  27. 2 1
      3rdparty/glslang/gtests/CMakeLists.txt
  28. 1 0
      3rdparty/glslang/gtests/Spv.FromFile.cpp
  29. 3 2
      3rdparty/glslang/hlsl/CMakeLists.txt

+ 13 - 1
3rdparty/glslang/BUILD.gn

@@ -159,7 +159,7 @@ source_set("glslang_sources") {
   }
 
   if (is_clang) {
-    cflags_cc = [
+    cflags = [
       "-Wno-extra-semi",
       "-Wno-ignored-qualifiers",
       "-Wno-implicit-fallthrough",
@@ -181,6 +181,9 @@ source_set("glslang_sources") {
     "${spirv_tools_dir}:spvtools_opt",
     "${spirv_tools_dir}:spvtools_val",
   ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
 }
 
 source_set("glslang_default_resource_limits_sources") {
@@ -192,6 +195,9 @@ source_set("glslang_default_resource_limits_sources") {
     ":glslang_sources",
   ]
   public_configs = [ ":glslang_public" ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
 }
 
 executable("glslang_validator") {
@@ -207,6 +213,9 @@ executable("glslang_validator") {
     ":glslang_default_resource_limits_sources",
     ":glslang_sources",
   ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
 }
 
 executable("spirv-remap") {
@@ -217,4 +226,7 @@ executable("spirv-remap") {
   deps = [
     ":glslang_sources",
   ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
 }

+ 30 - 5
3rdparty/glslang/CMakeLists.txt

@@ -13,6 +13,7 @@ include(GNUInstallDirs)
 include(CMakeDependentOption)
 
 option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
+option(BUILD_EXTERNAL "Build external dependencies in /External" ON)
 
 set(LIB_TYPE STATIC)
 
@@ -36,6 +37,7 @@ option(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE "If using Emscripten, builds to run on
 CMAKE_DEPENDENT_OPTION(ENABLE_HLSL "Enables HLSL input support" ON "NOT ENABLE_GLSLANG_WEB" OFF)
 
 option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
+option(ENABLE_PCH "Enables Precompiled header" ON)
 
 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
     set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
@@ -51,7 +53,7 @@ endif()
 
 # Precompiled header macro. Parameters are source file list and filename for pch cpp file.
 macro(glslang_pch SRCS PCHCPP)
-  if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio")
+  if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio" AND ENABLE_PCH)
     set(PCH_NAME "$(IntDir)\\pch.pch")
     # make source files use/depend on PCH_NAME
     set_source_files_properties(${${SRCS}} PROPERTIES COMPILE_FLAGS "/Yupch.h /FIpch.h /Fp${PCH_NAME} /Zm300" OBJECT_DEPENDS "${PCH_NAME}")
@@ -148,12 +150,12 @@ endfunction(glslang_set_link_args)
 
 # CMake needs to find the right version of python, right from the beginning,
 # otherwise, it will find the wrong version and fail later
-if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
+if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
     find_package(PythonInterp 3 REQUIRED)
-endif()
 
-# We depend on these for later projects, so they should come first.
-add_subdirectory(External)
+	# We depend on these for later projects, so they should come first.
+	add_subdirectory(External)
+endif()
 
 if(NOT TARGET SPIRV-Tools-opt)
     set(ENABLE_OPT OFF)
@@ -179,3 +181,26 @@ if(ENABLE_HLSL)
     add_subdirectory(hlsl)
 endif(ENABLE_HLSL)
 add_subdirectory(gtests)
+
+if(BUILD_TESTING)
+    # glslang-testsuite runs a bash script on Windows.
+    # Make sure to use '-o igncr' flag to ignore carriage returns (\r).
+    set(IGNORE_CR_FLAG "")
+    if(WIN32)
+        set(IGNORE_CR_FLAG -o igncr)
+    endif()
+
+    if (CMAKE_CONFIGURATION_TYPES)
+        set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/localResults)
+        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/glslangValidator)
+        set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/spirv-remap)
+    else(CMAKE_CONFIGURATION_TYPES)
+        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)
+
+    add_test(NAME glslang-testsuite
+        COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH}
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/)
+endif(BUILD_TESTING)

+ 2 - 1
3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt

@@ -9,6 +9,7 @@ if(WIN32)
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OGLCompiler
+    install(TARGETS OGLCompiler EXPORT OGLCompilerTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OGLCompilerTargets DESTINATION lib/cmake)
 endif(ENABLE_GLSLANG_INSTALL)

+ 1 - 1
3rdparty/glslang/README.md

@@ -307,7 +307,7 @@ See `ShaderLang.h` and the usage of it in `StandAlone/StandAlone.cpp` for more
 details. There is a block comment giving more detail above the calls for
 `setEnvInput, setEnvClient, and setEnvTarget`.
 
-### C Functional Interface (orignal)
+### C Functional Interface (original)
 
 This interface is in roughly the first 2/3 of `ShaderLang.h`, and referred to
 as the `Sh*()` interface, as all the entry points start `Sh`.

+ 13 - 6
3rdparty/glslang/SPIRV/CMakeLists.txt

@@ -36,7 +36,9 @@ set(SPVREMAP_HEADERS
 add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS})
 set_property(TARGET SPIRV PROPERTY FOLDER glslang)
 set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
-target_include_directories(SPIRV PUBLIC ..)
+target_include_directories(SPIRV PUBLIC 
+	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
 if (ENABLE_SPVREMAPPER)
     add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
@@ -57,7 +59,9 @@ if(ENABLE_OPT)
         PRIVATE ${spirv-tools_SOURCE_DIR}/source
     )
     target_link_libraries(SPIRV glslang SPIRV-Tools-opt)
-    target_include_directories(SPIRV PUBLIC ../External)
+    target_include_directories(SPIRV PUBLIC
+		$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
+		$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
 else()
     target_link_libraries(SPIRV glslang)
 endif(ENABLE_OPT)
@@ -70,22 +74,25 @@ endif(WIN32)
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
         if (ENABLE_SPVREMAPPER)
-            install(TARGETS SPVRemapper
+            install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
                     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
         endif()
-        install(TARGETS SPIRV
+        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
+            install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
                     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
         endif()
-        install(TARGETS SPIRV
+        install(TARGETS SPIRV EXPORT SPIRVTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+	
+	install(EXPORT SPVRemapperTargets DESTINATION lib/cmake)
+	install(EXPORT SPIRVTargets DESTINATION lib/cmake)
 
     install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/)
 endif(ENABLE_GLSLANG_INSTALL)

+ 5 - 5
3rdparty/glslang/SPIRV/GlslangToSpv.cpp

@@ -100,11 +100,11 @@ struct OpDecorations {
     spv::Decoration precision;
 
 #ifdef GLSLANG_WEB
-        void addNoContraction(spv::Builder&, spv::Id) const { };
-        void addNonUniform(spv::Builder&, spv::Id) const { };
+        void addNoContraction(spv::Builder&, spv::Id) const { }
+        void addNonUniform(spv::Builder&, spv::Id) const { }
 #else
-        void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); };
-        void addNonUniform(spv::Builder& builder, spv::Id t)  { builder.addDecoration(t, nonUniform); };
+        void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); }
+        void addNonUniform(spv::Builder& builder, spv::Id t)  { builder.addDecoration(t, nonUniform); }
     protected:
         spv::Decoration noContraction;
         spv::Decoration nonUniform;
@@ -6401,7 +6401,7 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
         scopeId = builder.makeUintConstant(spv::ScopeDevice);
     }
     // semantics default to relaxed 
-    spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() ? 
+    spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() && glslangIntermediate->usingVulkanMemoryModel() ?
                                                     spv::MemorySemanticsVolatileMask :
                                                     spv::MemorySemanticsMaskNone);
     spv::Id semanticsId2 = semanticsId;

+ 10 - 4
3rdparty/glslang/StandAlone/CMakeLists.txt

@@ -33,21 +33,27 @@ endif(WIN32)
 
 target_link_libraries(glslangValidator ${LIBRARIES})
 target_link_libraries(spirv-remap ${LIBRARIES})
-target_include_directories(glslangValidator PUBLIC ../External)
+target_include_directories(glslangValidator PUBLIC 
+	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES})
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS glslangValidator
+    install(TARGETS glslangValidator EXPORT glslangValidatorTargets
             RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
 
-    install(TARGETS spirv-remap
+    install(TARGETS spirv-remap EXPORT spirv-remapTargets
             RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+	
+	install(EXPORT glslangValidatorTargets DESTINATION lib/cmake)
+	install(EXPORT spirv-remapTargets DESTINATION lib/cmake)
             
     if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang-default-resource-limits
+        install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+		install(EXPORT glslang-default-resource-limitsTargets DESTINATION lib/cmake)
     endif()
 endif(ENABLE_GLSLANG_INSTALL)

+ 9 - 0
3rdparty/glslang/Test/130.frag

@@ -167,3 +167,12 @@ void qux2()
 }
 
 layout(early_fragment_tests) out;         // ERROR
+
+#extension GL_ARB_explicit_uniform_location : enable
+
+layout(location = 3) uniform vec4 ucolor0; // ERROR: explicit attrib location is also required for version < 330
+
+#extension GL_ARB_explicit_attrib_location : enable
+
+layout(location = 4) uniform vec4 ucolor1;
+

+ 14 - 1
3rdparty/glslang/Test/330.frag

@@ -149,4 +149,17 @@ void fooKeyMem()
     KeyMem.precise;
 }
 
-layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range
+layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range
+
+layout(location=4) uniform vec4 ucolor0; // ERROR: extension is not enabled
+
+#extension GL_ARB_explicit_uniform_location : enable
+
+layout(location=5) uniform vec4 ucolor1;
+
+layout(location=6) uniform ColorsBuffer // ERROR: location cannot be applied in uniform buffer block
+{
+    vec4 colors[128];
+} colorsBuffer;
+
+

+ 10 - 1
3rdparty/glslang/Test/baseResults/130.frag.out

@@ -29,10 +29,13 @@ ERROR: 0:153: 'early_fragment_tests' : not supported for this version or the ena
 ERROR: 0:154: 'image load store' : not supported for this version or the enabled extensions 
 ERROR: 0:154: 'iimage2D' : Reserved word. 
 ERROR: 0:169: 'early_fragment_tests' : can only apply to 'in' 
-ERROR: 28 compilation errors.  No code generated.
+ERROR: 0:173: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 29 compilation errors.  No code generated.
 
 
 Shader version: 130
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_gpu_shader5
 Requested GL_ARB_separate_shader_objects
 Requested GL_ARB_shader_image_load_store
@@ -402,12 +405,16 @@ ERROR: node is still EOpNull!
 0:?     'gl_FogFragCoord' ( smooth in float)
 0:?     'iimg2Dbad' (layout( r32i) uniform iimage2D)
 0:?     'iimg2D' (layout( r32i) uniform iimage2D)
+0:?     'ucolor0' (layout( location=3) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=4) uniform 4-component vector of float)
 
 
 Linked fragment stage:
 
 
 Shader version: 130
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_gpu_shader5
 Requested GL_ARB_separate_shader_objects
 Requested GL_ARB_shader_image_load_store
@@ -457,4 +464,6 @@ ERROR: node is still EOpNull!
 0:?     'gl_FogFragCoord' ( smooth in float)
 0:?     'iimg2Dbad' (layout( r32i) uniform iimage2D)
 0:?     'iimg2D' (layout( r32i) uniform iimage2D)
+0:?     'ucolor0' (layout( location=3) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=4) uniform 4-component vector of float)
 

+ 11 - 1
3rdparty/glslang/Test/baseResults/330.frag.out

@@ -40,11 +40,14 @@ ERROR: 0:140: 'assign' :  cannot convert from ' const float' to ' temp 2-compone
 ERROR: 0:141: 'textureQueryLod' : no matching overloaded function found 
 ERROR: 0:141: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
 ERROR: 0:152: 'index' : value must be 0 or 1 
-ERROR: 41 compilation errors.  No code generated.
+ERROR: 0:154: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 0:160: 'location' : cannot apply to uniform or buffer block 
+ERROR: 43 compilation errors.  No code generated.
 
 
 Shader version: 330
 Requested GL_ARB_enhanced_layouts
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_separate_shader_objects
 ERROR: node is still EOpNull!
 0:8  Function Definition: main( ( global void)
@@ -126,6 +129,9 @@ ERROR: node is still EOpNull!
 0:?     'precise' ( global int)
 0:?     'KeyMem' ( global structure{ global int precise})
 0:?     'outIndex2' (layout( location=28 index=0) out 4-component vector of float)
+0:?     'ucolor0' (layout( location=4) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=5) uniform 4-component vector of float)
+0:?     'colorsBuffer' (layout( location=6 column_major shared) uniform block{layout( column_major shared) uniform 128-element array of 4-component vector of float colors})
 
 
 Linked fragment stage:
@@ -135,6 +141,7 @@ ERROR: Linking fragment stage: Cannot use both gl_FragColor and gl_FragData
 
 Shader version: 330
 Requested GL_ARB_enhanced_layouts
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_separate_shader_objects
 ERROR: node is still EOpNull!
 0:8  Function Definition: main( ( global void)
@@ -191,4 +198,7 @@ ERROR: node is still EOpNull!
 0:?     'precise' ( global int)
 0:?     'KeyMem' ( global structure{ global int precise})
 0:?     'outIndex2' (layout( location=28 index=0) out 4-component vector of float)
+0:?     'ucolor0' (layout( location=4) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=5) uniform 4-component vector of float)
+0:?     'colorsBuffer' (layout( location=6 column_major shared) uniform block{layout( column_major shared) uniform 128-element array of 4-component vector of float colors})
 

+ 226 - 216
3rdparty/glslang/Test/baseResults/glsl.450.subgroup.frag.out

@@ -85,11 +85,13 @@ ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques
 ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
 ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
 ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
-ERROR: 0:232: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 0:233: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 0:234: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 0:235: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 90 compilation errors.  No code generated.
+ERROR: 0:124: 'id' : argument must be compile-time constant 
+ERROR: 0:199: 'id' : argument must be compile-time constant 
+ERROR: 0:236: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:237: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:238: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:239: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 92 compilation errors.  No code generated.
 
 
 Shader version: 450
@@ -352,270 +354,278 @@ ERROR: node is still EOpNull!
 0:116  Function Definition: ballot_works(vf4; ( global void)
 0:116    Function Parameters: 
 0:116      'f4' ( in 4-component vector of float)
-0:117    Sequence
-0:117      'gl_SubgroupEqMask' ( flat in 4-component vector of uint SubgroupEqMask)
-0:118      'gl_SubgroupGeMask' ( flat in 4-component vector of uint SubgroupGeMask)
-0:119      'gl_SubgroupGtMask' ( flat in 4-component vector of uint SubgroupGtMask)
-0:120      'gl_SubgroupLeMask' ( flat in 4-component vector of uint SubgroupLeMask)
-0:121      'gl_SubgroupLtMask' ( flat in 4-component vector of uint SubgroupLtMask)
-0:122      subgroupBroadcast ( global 4-component vector of float)
-0:122        'f4' ( in 4-component vector of float)
-0:122        Constant:
-0:122          0 (const uint)
-0:123      subgroupBroadcastFirst ( global 4-component vector of float)
+0:?     Sequence
+0:118      'gl_SubgroupEqMask' ( flat in 4-component vector of uint SubgroupEqMask)
+0:119      'gl_SubgroupGeMask' ( flat in 4-component vector of uint SubgroupGeMask)
+0:120      'gl_SubgroupGtMask' ( flat in 4-component vector of uint SubgroupGtMask)
+0:121      'gl_SubgroupLeMask' ( flat in 4-component vector of uint SubgroupLeMask)
+0:122      'gl_SubgroupLtMask' ( flat in 4-component vector of uint SubgroupLtMask)
+0:123      subgroupBroadcast ( global 4-component vector of float)
 0:123        'f4' ( in 4-component vector of float)
-0:124      Sequence
-0:124        move second child to first child ( temp 4-component vector of uint)
-0:124          'ballot' ( temp 4-component vector of uint)
-0:124          subgroupBallot ( global 4-component vector of uint)
-0:124            Constant:
-0:124              false (const bool)
-0:125      subgroupInverseBallot ( global bool)
-0:125        Constant:
-0:125          1 (const uint)
-0:125          1 (const uint)
-0:125          1 (const uint)
-0:125          1 (const uint)
-0:126      subgroupBallotBitExtract ( global bool)
-0:126        'ballot' ( temp 4-component vector of uint)
-0:126        Constant:
-0:126          0 (const uint)
-0:127      subgroupBallotBitCount ( global uint)
-0:127        'ballot' ( temp 4-component vector of uint)
-0:128      subgroupBallotInclusiveBitCount ( global uint)
+0:123        Constant:
+0:123          0 (const uint)
+0:124      subgroupBroadcast ( global 4-component vector of float)
+0:124        'f4' ( in 4-component vector of float)
+0:124        Convert int to uint ( temp uint)
+0:124          'i' ( temp int)
+0:125      subgroupBroadcastFirst ( global 4-component vector of float)
+0:125        'f4' ( in 4-component vector of float)
+0:126      Sequence
+0:126        move second child to first child ( temp 4-component vector of uint)
+0:126          'ballot' ( temp 4-component vector of uint)
+0:126          subgroupBallot ( global 4-component vector of uint)
+0:126            Constant:
+0:126              false (const bool)
+0:127      subgroupInverseBallot ( global bool)
+0:127        Constant:
+0:127          1 (const uint)
+0:127          1 (const uint)
+0:127          1 (const uint)
+0:127          1 (const uint)
+0:128      subgroupBallotBitExtract ( global bool)
 0:128        'ballot' ( temp 4-component vector of uint)
-0:129      subgroupBallotExclusiveBitCount ( global uint)
+0:128        Constant:
+0:128          0 (const uint)
+0:129      subgroupBallotBitCount ( global uint)
 0:129        'ballot' ( temp 4-component vector of uint)
-0:130      subgroupBallotFindLSB ( global uint)
+0:130      subgroupBallotInclusiveBitCount ( global uint)
 0:130        'ballot' ( temp 4-component vector of uint)
-0:131      subgroupBallotFindMSB ( global uint)
+0:131      subgroupBallotExclusiveBitCount ( global uint)
 0:131        'ballot' ( temp 4-component vector of uint)
-0:135  Function Definition: vote_works(vf4; ( global void)
-0:135    Function Parameters: 
-0:135      'f4' ( in 4-component vector of float)
-0:137    Sequence
-0:137      subgroupAll ( global bool)
-0:137        Constant:
-0:137          true (const bool)
-0:138      subgroupAny ( global bool)
-0:138        Constant:
-0:138          false (const bool)
-0:139      subgroupAllEqual ( global bool)
-0:139        'f4' ( in 4-component vector of float)
-0:144  Function Definition: shuffle_works(vf4; ( global void)
-0:144    Function Parameters: 
-0:144      'f4' ( in 4-component vector of float)
-0:146    Sequence
-0:146      subgroupShuffle ( global 4-component vector of float)
-0:146        'f4' ( in 4-component vector of float)
-0:146        Constant:
-0:146          0 (const uint)
-0:147      subgroupShuffleXor ( global 4-component vector of float)
-0:147        'f4' ( in 4-component vector of float)
-0:147        Constant:
-0:147          1 (const uint)
-0:148      subgroupShuffleUp ( global 4-component vector of float)
+0:132      subgroupBallotFindLSB ( global uint)
+0:132        'ballot' ( temp 4-component vector of uint)
+0:133      subgroupBallotFindMSB ( global uint)
+0:133        'ballot' ( temp 4-component vector of uint)
+0:137  Function Definition: vote_works(vf4; ( global void)
+0:137    Function Parameters: 
+0:137      'f4' ( in 4-component vector of float)
+0:139    Sequence
+0:139      subgroupAll ( global bool)
+0:139        Constant:
+0:139          true (const bool)
+0:140      subgroupAny ( global bool)
+0:140        Constant:
+0:140          false (const bool)
+0:141      subgroupAllEqual ( global bool)
+0:141        'f4' ( in 4-component vector of float)
+0:146  Function Definition: shuffle_works(vf4; ( global void)
+0:146    Function Parameters: 
+0:146      'f4' ( in 4-component vector of float)
+0:148    Sequence
+0:148      subgroupShuffle ( global 4-component vector of float)
 0:148        'f4' ( in 4-component vector of float)
 0:148        Constant:
-0:148          1 (const uint)
-0:149      subgroupShuffleDown ( global 4-component vector of float)
+0:148          0 (const uint)
+0:149      subgroupShuffleXor ( global 4-component vector of float)
 0:149        'f4' ( in 4-component vector of float)
 0:149        Constant:
 0:149          1 (const uint)
-0:153  Function Definition: arith_works(vf4; ( global void)
-0:153    Function Parameters: 
-0:153      'f4' ( in 4-component vector of float)
+0:150      subgroupShuffleUp ( global 4-component vector of float)
+0:150        'f4' ( in 4-component vector of float)
+0:150        Constant:
+0:150          1 (const uint)
+0:151      subgroupShuffleDown ( global 4-component vector of float)
+0:151        'f4' ( in 4-component vector of float)
+0:151        Constant:
+0:151          1 (const uint)
+0:155  Function Definition: arith_works(vf4; ( global void)
+0:155    Function Parameters: 
+0:155      'f4' ( in 4-component vector of float)
 0:?     Sequence
-0:156      subgroupAdd ( global 4-component vector of float)
-0:156        'f4' ( in 4-component vector of float)
-0:157      subgroupMul ( global 4-component vector of float)
-0:157        'f4' ( in 4-component vector of float)
-0:158      subgroupMin ( global 4-component vector of float)
+0:158      subgroupAdd ( global 4-component vector of float)
 0:158        'f4' ( in 4-component vector of float)
-0:159      subgroupMax ( global 4-component vector of float)
+0:159      subgroupMul ( global 4-component vector of float)
 0:159        'f4' ( in 4-component vector of float)
-0:160      subgroupAnd ( global 4-component vector of uint)
-0:160        'ballot' ( temp 4-component vector of uint)
-0:161      subgroupOr ( global 4-component vector of uint)
-0:161        'ballot' ( temp 4-component vector of uint)
-0:162      subgroupXor ( global 4-component vector of uint)
+0:160      subgroupMin ( global 4-component vector of float)
+0:160        'f4' ( in 4-component vector of float)
+0:161      subgroupMax ( global 4-component vector of float)
+0:161        'f4' ( in 4-component vector of float)
+0:162      subgroupAnd ( global 4-component vector of uint)
 0:162        'ballot' ( temp 4-component vector of uint)
-0:163      subgroupInclusiveAdd ( global 4-component vector of float)
-0:163        'f4' ( in 4-component vector of float)
-0:164      subgroupInclusiveMul ( global 4-component vector of float)
-0:164        'f4' ( in 4-component vector of float)
-0:165      subgroupInclusiveMin ( global 4-component vector of float)
+0:163      subgroupOr ( global 4-component vector of uint)
+0:163        'ballot' ( temp 4-component vector of uint)
+0:164      subgroupXor ( global 4-component vector of uint)
+0:164        'ballot' ( temp 4-component vector of uint)
+0:165      subgroupInclusiveAdd ( global 4-component vector of float)
 0:165        'f4' ( in 4-component vector of float)
-0:166      subgroupInclusiveMax ( global 4-component vector of float)
+0:166      subgroupInclusiveMul ( global 4-component vector of float)
 0:166        'f4' ( in 4-component vector of float)
-0:167      subgroupInclusiveAnd ( global 4-component vector of uint)
-0:167        'ballot' ( temp 4-component vector of uint)
-0:168      subgroupInclusiveOr ( global 4-component vector of uint)
-0:168        'ballot' ( temp 4-component vector of uint)
-0:169      subgroupInclusiveXor ( global 4-component vector of uint)
+0:167      subgroupInclusiveMin ( global 4-component vector of float)
+0:167        'f4' ( in 4-component vector of float)
+0:168      subgroupInclusiveMax ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:169      subgroupInclusiveAnd ( global 4-component vector of uint)
 0:169        'ballot' ( temp 4-component vector of uint)
-0:170      subgroupExclusiveAdd ( global 4-component vector of float)
-0:170        'f4' ( in 4-component vector of float)
-0:171      subgroupExclusiveMul ( global 4-component vector of float)
-0:171        'f4' ( in 4-component vector of float)
-0:172      subgroupExclusiveMin ( global 4-component vector of float)
+0:170      subgroupInclusiveOr ( global 4-component vector of uint)
+0:170        'ballot' ( temp 4-component vector of uint)
+0:171      subgroupInclusiveXor ( global 4-component vector of uint)
+0:171        'ballot' ( temp 4-component vector of uint)
+0:172      subgroupExclusiveAdd ( global 4-component vector of float)
 0:172        'f4' ( in 4-component vector of float)
-0:173      subgroupExclusiveMax ( global 4-component vector of float)
+0:173      subgroupExclusiveMul ( global 4-component vector of float)
 0:173        'f4' ( in 4-component vector of float)
-0:174      subgroupExclusiveAnd ( global 4-component vector of uint)
-0:174        'ballot' ( temp 4-component vector of uint)
-0:175      subgroupExclusiveOr ( global 4-component vector of uint)
-0:175        'ballot' ( temp 4-component vector of uint)
-0:176      subgroupExclusiveXor ( global 4-component vector of uint)
+0:174      subgroupExclusiveMin ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:175      subgroupExclusiveMax ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupExclusiveAnd ( global 4-component vector of uint)
 0:176        'ballot' ( temp 4-component vector of uint)
-0:180  Function Definition: clustered_works(vf4; ( global void)
-0:180    Function Parameters: 
-0:180      'f4' ( in 4-component vector of float)
-0:182    Sequence
-0:182      Sequence
-0:182        move second child to first child ( temp 4-component vector of uint)
-0:182          'ballot' ( temp 4-component vector of uint)
-0:182          Constant:
-0:182            85 (const uint)
-0:182            0 (const uint)
-0:182            0 (const uint)
-0:182            0 (const uint)
-0:183      subgroupClusteredAdd ( global 4-component vector of float)
-0:183        'f4' ( in 4-component vector of float)
-0:183        Constant:
-0:183          2 (const uint)
-0:184      subgroupClusteredMul ( global 4-component vector of float)
-0:184        'f4' ( in 4-component vector of float)
-0:184        Constant:
-0:184          2 (const uint)
-0:185      subgroupClusteredMin ( global 4-component vector of float)
+0:177      subgroupExclusiveOr ( global 4-component vector of uint)
+0:177        'ballot' ( temp 4-component vector of uint)
+0:178      subgroupExclusiveXor ( global 4-component vector of uint)
+0:178        'ballot' ( temp 4-component vector of uint)
+0:182  Function Definition: clustered_works(vf4; ( global void)
+0:182    Function Parameters: 
+0:182      'f4' ( in 4-component vector of float)
+0:184    Sequence
+0:184      Sequence
+0:184        move second child to first child ( temp 4-component vector of uint)
+0:184          'ballot' ( temp 4-component vector of uint)
+0:184          Constant:
+0:184            85 (const uint)
+0:184            0 (const uint)
+0:184            0 (const uint)
+0:184            0 (const uint)
+0:185      subgroupClusteredAdd ( global 4-component vector of float)
 0:185        'f4' ( in 4-component vector of float)
 0:185        Constant:
 0:185          2 (const uint)
-0:186      subgroupClusteredMax ( global 4-component vector of float)
+0:186      subgroupClusteredMul ( global 4-component vector of float)
 0:186        'f4' ( in 4-component vector of float)
 0:186        Constant:
 0:186          2 (const uint)
-0:187      subgroupClusteredAnd ( global 4-component vector of uint)
-0:187        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupClusteredMin ( global 4-component vector of float)
+0:187        'f4' ( in 4-component vector of float)
 0:187        Constant:
 0:187          2 (const uint)
-0:188      subgroupClusteredOr ( global 4-component vector of uint)
-0:188        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupClusteredMax ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
 0:188        Constant:
 0:188          2 (const uint)
-0:189      subgroupClusteredXor ( global 4-component vector of uint)
+0:189      subgroupClusteredAnd ( global 4-component vector of uint)
 0:189        'ballot' ( temp 4-component vector of uint)
 0:189        Constant:
 0:189          2 (const uint)
-0:193  Function Definition: quad_works(vf4; ( global void)
-0:193    Function Parameters: 
-0:193      'f4' ( in 4-component vector of float)
-0:195    Sequence
-0:195      subgroupQuadBroadcast ( global 4-component vector of float)
-0:195        'f4' ( in 4-component vector of float)
-0:195        Constant:
-0:195          0 (const uint)
-0:196      subgroupQuadSwapHorizontal ( global 4-component vector of float)
-0:196        'f4' ( in 4-component vector of float)
-0:197      subgroupQuadSwapVertical ( global 4-component vector of float)
-0:197        'f4' ( in 4-component vector of float)
-0:198      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:190      subgroupClusteredOr ( global 4-component vector of uint)
+0:190        'ballot' ( temp 4-component vector of uint)
+0:190        Constant:
+0:190          2 (const uint)
+0:191      subgroupClusteredXor ( global 4-component vector of uint)
+0:191        'ballot' ( temp 4-component vector of uint)
+0:191        Constant:
+0:191          2 (const uint)
+0:195  Function Definition: quad_works(vf4; ( global void)
+0:195    Function Parameters: 
+0:195      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:198      subgroupQuadBroadcast ( global 4-component vector of float)
 0:198        'f4' ( in 4-component vector of float)
-0:202  Function Definition: partitioned_works(vf4; ( global void)
-0:202    Function Parameters: 
-0:202      'f4' ( in 4-component vector of float)
-0:204    Sequence
-0:204      Sequence
-0:204        move second child to first child ( temp 4-component vector of uint)
-0:204          'parti' ( temp 4-component vector of uint)
-0:204          subgroupPartitionNV ( global 4-component vector of uint)
-0:204            'f4' ( in 4-component vector of float)
-0:205      Sequence
-0:205        move second child to first child ( temp 4-component vector of uint)
-0:205          'ballot' ( temp 4-component vector of uint)
-0:205          Constant:
-0:205            85 (const uint)
-0:205            0 (const uint)
-0:205            0 (const uint)
-0:205            0 (const uint)
-0:206      subgroupPartitionedAddNV ( global 4-component vector of float)
-0:206        'f4' ( in 4-component vector of float)
-0:206        'parti' ( temp 4-component vector of uint)
-0:207      subgroupPartitionedMulNV ( global 4-component vector of float)
-0:207        'f4' ( in 4-component vector of float)
-0:207        'parti' ( temp 4-component vector of uint)
-0:208      subgroupPartitionedMinNV ( global 4-component vector of float)
-0:208        'f4' ( in 4-component vector of float)
-0:208        'parti' ( temp 4-component vector of uint)
-0:209      subgroupPartitionedMaxNV ( global 4-component vector of float)
-0:209        'f4' ( in 4-component vector of float)
-0:209        'parti' ( temp 4-component vector of uint)
-0:210      subgroupPartitionedAndNV ( global 4-component vector of uint)
-0:210        'ballot' ( temp 4-component vector of uint)
+0:198        Constant:
+0:198          0 (const uint)
+0:199      subgroupQuadBroadcast ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:199        Convert int to uint ( temp uint)
+0:199          'i' ( temp int)
+0:200      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:201      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:202      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:206  Function Definition: partitioned_works(vf4; ( global void)
+0:206    Function Parameters: 
+0:206      'f4' ( in 4-component vector of float)
+0:208    Sequence
+0:208      Sequence
+0:208        move second child to first child ( temp 4-component vector of uint)
+0:208          'parti' ( temp 4-component vector of uint)
+0:208          subgroupPartitionNV ( global 4-component vector of uint)
+0:208            'f4' ( in 4-component vector of float)
+0:209      Sequence
+0:209        move second child to first child ( temp 4-component vector of uint)
+0:209          'ballot' ( temp 4-component vector of uint)
+0:209          Constant:
+0:209            85 (const uint)
+0:209            0 (const uint)
+0:209            0 (const uint)
+0:209            0 (const uint)
+0:210      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
 0:210        'parti' ( temp 4-component vector of uint)
-0:211      subgroupPartitionedOrNV ( global 4-component vector of uint)
-0:211        'ballot' ( temp 4-component vector of uint)
+0:211      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
 0:211        'parti' ( temp 4-component vector of uint)
-0:212      subgroupPartitionedXorNV ( global 4-component vector of uint)
-0:212        'ballot' ( temp 4-component vector of uint)
+0:212      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
 0:212        'parti' ( temp 4-component vector of uint)
-0:213      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:213      subgroupPartitionedMaxNV ( global 4-component vector of float)
 0:213        'f4' ( in 4-component vector of float)
 0:213        'parti' ( temp 4-component vector of uint)
-0:214      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
-0:214        'f4' ( in 4-component vector of float)
+0:214      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:214        'ballot' ( temp 4-component vector of uint)
 0:214        'parti' ( temp 4-component vector of uint)
-0:215      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
-0:215        'f4' ( in 4-component vector of float)
+0:215      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:215        'ballot' ( temp 4-component vector of uint)
 0:215        'parti' ( temp 4-component vector of uint)
-0:216      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
-0:216        'f4' ( in 4-component vector of float)
+0:216      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:216        'ballot' ( temp 4-component vector of uint)
 0:216        'parti' ( temp 4-component vector of uint)
-0:217      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
-0:217        'ballot' ( temp 4-component vector of uint)
+0:217      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:217        'f4' ( in 4-component vector of float)
 0:217        'parti' ( temp 4-component vector of uint)
-0:218      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
-0:218        'ballot' ( temp 4-component vector of uint)
+0:218      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:218        'f4' ( in 4-component vector of float)
 0:218        'parti' ( temp 4-component vector of uint)
-0:219      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
-0:219        'ballot' ( temp 4-component vector of uint)
+0:219      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:219        'f4' ( in 4-component vector of float)
 0:219        'parti' ( temp 4-component vector of uint)
-0:220      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:220      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
 0:220        'f4' ( in 4-component vector of float)
 0:220        'parti' ( temp 4-component vector of uint)
-0:221      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
-0:221        'f4' ( in 4-component vector of float)
+0:221      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:221        'ballot' ( temp 4-component vector of uint)
 0:221        'parti' ( temp 4-component vector of uint)
-0:222      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
-0:222        'f4' ( in 4-component vector of float)
+0:222      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:222        'ballot' ( temp 4-component vector of uint)
 0:222        'parti' ( temp 4-component vector of uint)
-0:223      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
-0:223        'f4' ( in 4-component vector of float)
+0:223      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:223        'ballot' ( temp 4-component vector of uint)
 0:223        'parti' ( temp 4-component vector of uint)
-0:224      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
-0:224        'ballot' ( temp 4-component vector of uint)
+0:224      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:224        'f4' ( in 4-component vector of float)
 0:224        'parti' ( temp 4-component vector of uint)
-0:225      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
-0:225        'ballot' ( temp 4-component vector of uint)
+0:225      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
 0:225        'parti' ( temp 4-component vector of uint)
-0:226      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
-0:226        'ballot' ( temp 4-component vector of uint)
+0:226      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:226        'f4' ( in 4-component vector of float)
 0:226        'parti' ( temp 4-component vector of uint)
-0:230  Function Definition: sm_builtins_err( ( global void)
-0:230    Function Parameters: 
-0:232    Sequence
-0:232      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
-0:233      'gl_SMCountNV' ( flat in uint SMCountNV)
-0:234      'gl_WarpIDNV' ( flat in uint WarpIDNV)
-0:235      'gl_SMIDNV' ( flat in uint SMIDNV)
-0:242  Function Definition: sm_builtins( ( global void)
-0:242    Function Parameters: 
-0:244    Sequence
-0:244      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
-0:245      'gl_SMCountNV' ( flat in uint SMCountNV)
-0:246      'gl_WarpIDNV' ( flat in uint WarpIDNV)
-0:247      'gl_SMIDNV' ( flat in uint SMIDNV)
+0:227      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:227        'f4' ( in 4-component vector of float)
+0:227        'parti' ( temp 4-component vector of uint)
+0:228      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:228        'ballot' ( temp 4-component vector of uint)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:229        'ballot' ( temp 4-component vector of uint)
+0:229        'parti' ( temp 4-component vector of uint)
+0:230      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:230        'ballot' ( temp 4-component vector of uint)
+0:230        'parti' ( temp 4-component vector of uint)
+0:234  Function Definition: sm_builtins_err( ( global void)
+0:234    Function Parameters: 
+0:236    Sequence
+0:236      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
+0:237      'gl_SMCountNV' ( flat in uint SMCountNV)
+0:238      'gl_WarpIDNV' ( flat in uint WarpIDNV)
+0:239      'gl_SMIDNV' ( flat in uint SMIDNV)
+0:246  Function Definition: sm_builtins( ( global void)
+0:246    Function Parameters: 
+0:248    Sequence
+0:248      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
+0:249      'gl_SMCountNV' ( flat in uint SMCountNV)
+0:250      'gl_WarpIDNV' ( flat in uint WarpIDNV)
+0:251      'gl_SMIDNV' ( flat in uint SMIDNV)
 0:?   Linker Objects
 0:?     'data' (layout( location=0) out 4-component vector of uint)
 

+ 40 - 0
3rdparty/glslang/Test/baseResults/spv.volatileAtomic.comp.out

@@ -0,0 +1,40 @@
+spv.volatileAtomic.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 18
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "D"
+                              MemberName 8(D) 0  "d"
+                              Name 10  "d"
+                              Decorate 7 ArrayStride 4
+                              MemberDecorate 8(D) 0 Volatile
+                              MemberDecorate 8(D) 0 Coherent
+                              MemberDecorate 8(D) 0 Offset 0
+                              Decorate 8(D) BufferBlock
+                              Decorate 10(d) DescriptorSet 0
+                              Decorate 10(d) Binding 3
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeRuntimeArray 6(int)
+            8(D):             TypeStruct 7
+               9:             TypePointer Uniform 8(D)
+           10(d):      9(ptr) Variable Uniform
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+              13:             TypePointer Uniform 6(int)
+              15:      6(int) Constant 0
+              16:      6(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+              14:     13(ptr) AccessChain 10(d) 12 12
+              17:      6(int) AtomicExchange 14 16 15 15
+                              Return
+                              FunctionEnd

+ 4 - 0
3rdparty/glslang/Test/glsl.450.subgroup.frag

@@ -114,12 +114,14 @@ void main (void)
 
 #extension GL_KHR_shader_subgroup_ballot: enable
 void ballot_works(vec4 f4) {
+  int i;
   gl_SubgroupEqMask;
   gl_SubgroupGeMask;
   gl_SubgroupGtMask;
   gl_SubgroupLeMask;
   gl_SubgroupLtMask;
   subgroupBroadcast(f4, 0);
+  subgroupBroadcast(f4, i);
   subgroupBroadcastFirst(f4);
   uvec4 ballot = subgroupBallot(false);
   subgroupInverseBallot(uvec4(0x1));
@@ -192,7 +194,9 @@ void clustered_works(vec4 f4)
 #extension GL_KHR_shader_subgroup_quad: enable
 void quad_works(vec4 f4)
 {
+  int i;
   subgroupQuadBroadcast(f4, 0);
+  subgroupQuadBroadcast(f4, i);
   subgroupQuadSwapHorizontal(f4);
   subgroupQuadSwapVertical(f4);
   subgroupQuadSwapDiagonal(f4);

+ 14 - 9
3rdparty/glslang/Test/runtests

@@ -1,11 +1,16 @@
 #!/usr/bin/env bash
 
-TARGETDIR=localResults
+# Arguments:
+#  1- TargetDirectory, where to write test results and intermediary files
+#  2- Path to glslangValidator
+#  3- Path to spirv-remap
+
+TARGETDIR=${1:-localResults}
 BASEDIR=baseResults
-EXE=../build/install/bin/glslangValidator
-REMAPEXE=../build/install/bin/spirv-remap
+EXE=${2:-../build/install/bin/glslangValidator}
+REMAPEXE=${3:-../build/install/bin/spirv-remap}
 HASERROR=0
-mkdir -p localResults
+mkdir -p $TARGETDIR
 
 if [ -a localtestlist ]
   then
@@ -55,13 +60,13 @@ diff -b $BASEDIR/hlsl.automap.frag.out $TARGETDIR/hlsl.automap.frag.out || HASER
 # multi-threaded test
 #
 echo Comparing single thread to multithread for all tests in current directory...
-$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > singleThread.out
-$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > multiThread.out
-diff singleThread.out multiThread.out || HASERROR=1
+$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > $TARGETDIR/singleThread.out
+$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > $TARGETDIR/multiThread.out
+diff $TARGETDIR/singleThread.out $TARGETDIR/multiThread.out || HASERROR=1
 if [ $HASERROR -eq 0 ]
 then
-    rm singleThread.out
-    rm multiThread.out
+    rm $TARGETDIR/singleThread.out
+    rm $TARGETDIR/multiThread.out
 fi
 
 #

+ 8 - 0
3rdparty/glslang/Test/spv.volatileAtomic.comp

@@ -0,0 +1,8 @@
+#version 450 core
+
+layout(set=0, binding=3) volatile buffer D { uint d[]; } d;
+
+void main()
+{
+    atomicExchange(d.d[0], 0);
+}

+ 6 - 3
3rdparty/glslang/glslang/CMakeLists.txt

@@ -82,7 +82,9 @@ add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${H
 set_property(TARGET glslang PROPERTY FOLDER glslang)
 set_property(TARGET glslang PROPERTY POSITION_INDEPENDENT_CODE ON)
 target_link_libraries(glslang OGLCompiler OSDependent)
-target_include_directories(glslang PUBLIC ..)
+target_include_directories(glslang PUBLIC 
+	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
 if(WIN32 AND BUILD_SHARED_LIBS)
     set_target_properties(glslang PROPERTIES PREFIX "")
@@ -102,14 +104,15 @@ endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang
+        install(TARGETS glslang EXPORT glslangTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
-        install(TARGETS glslang
+        install(TARGETS glslang EXPORT glslangTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+	install(EXPORT glslangTargets DESTINATION lib/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
 
 if(ENABLE_GLSLANG_INSTALL)

+ 2 - 2
3rdparty/glslang/glslang/Include/Types.h

@@ -135,8 +135,8 @@ struct TSampler {   // misnomer now; includes images, textures without sampler,
     bool isYuv()         const { return yuv; }
 #endif
     void setCombined(bool c) { combined = c; }
-    void setBasicType(TBasicType t) { type = t; };
-    TBasicType getBasicType()  const { return type; };
+    void setBasicType(TBasicType t) { type = t; }
+    TBasicType getBasicType()  const { return type; }
     bool isShadow()      const { return shadow; }
     bool isArrayed()     const { return arrayed; }
 

+ 6 - 3
3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp

@@ -2155,6 +2155,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
         break;
 
     case EOpSubgroupBroadcast:
+    case EOpSubgroupQuadBroadcast:
         if (spvVersion.spv < EShTargetSpv_1_5) {
             // <id> must be an integral constant expression.
             if ((*argp)[1]->getAsConstantUnion() == nullptr)
@@ -5149,7 +5150,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
         return;
     } else if (id == "location") {
         profileRequires(loc, EEsProfile, 300, nullptr, "location");
-        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
+        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; 
+        // GL_ARB_explicit_uniform_location requires 330 or GL_ARB_explicit_attrib_location we do not need to add it here
         profileRequires(loc, ~EEsProfile, 330, 2, exts, "location");
         if ((unsigned int)value >= TQualifier::layoutLocationEnd)
             error(loc, "location is too large", id.c_str(), "");
@@ -5909,8 +5911,9 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier
         case EvqBuffer:
         {
             const char* feature = "location qualifier on uniform or buffer";
-            requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
-            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, feature);
+            requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile | ENoProfile, feature);
+            profileRequires(loc, ~EEsProfile, 330, E_GL_ARB_explicit_attrib_location, feature);
+            profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_explicit_uniform_location, feature);
             profileRequires(loc, EEsProfile, 310, nullptr, feature);
             break;
         }

+ 1 - 1
3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h

@@ -283,7 +283,7 @@ public:
                   const TString* entryPoint = nullptr);
     virtual ~TParseContext();
 
-    bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); };
+    bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); }
     void setPrecisionDefaults();
 
     void setLimits(const TBuiltInResource&) override;

+ 2 - 0
3rdparty/glslang/glslang/MachineIndependent/Versions.cpp

@@ -174,6 +174,7 @@ void TParseVersions::initializeExtensionBehavior()
     extensionBehavior[E_GL_ARB_texture_cube_map_array]       = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_texture_lod]           = EBhDisable;
     extensionBehavior[E_GL_ARB_explicit_attrib_location]     = EBhDisable;
+    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_draw_parameters]       = EBhDisable;
@@ -378,6 +379,7 @@ void TParseVersions::getPreamble(std::string& preamble)
             "#define GL_ARB_texture_cube_map_array 1\n"
             "#define GL_ARB_shader_texture_lod 1\n"
             "#define GL_ARB_explicit_attrib_location 1\n"
+            "#define GL_ARB_explicit_uniform_location 1\n"
             "#define GL_ARB_shader_image_load_store 1\n"
             "#define GL_ARB_shader_atomic_counters 1\n"
             "#define GL_ARB_shader_draw_parameters 1\n"

+ 1 - 0
3rdparty/glslang/glslang/MachineIndependent/Versions.h

@@ -126,6 +126,7 @@ const char* const E_GL_ARB_enhanced_layouts             = "GL_ARB_enhanced_layou
 const char* const E_GL_ARB_texture_cube_map_array       = "GL_ARB_texture_cube_map_array";
 const char* const E_GL_ARB_shader_texture_lod           = "GL_ARB_shader_texture_lod";
 const char* const E_GL_ARB_explicit_attrib_location     = "GL_ARB_explicit_attrib_location";
+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_draw_parameters       = "GL_ARB_shader_draw_parameters";

+ 6 - 6
3rdparty/glslang/glslang/MachineIndependent/iomapper.h

@@ -114,7 +114,7 @@ public:
     bool doAutoLocationMapping() const;
     TSlotSet::iterator findSlot(int set, int slot);
     bool checkEmpty(int set, int slot);
-    bool validateInOut(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; };
+    bool validateInOut(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
     int reserveSlot(int set, int slot, int size = 1);
     int getFreeSlot(int set, int base, int size = 1);
     int resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
@@ -125,7 +125,7 @@ public:
     void addStage(EShLanguage stage) override {
         if (stage < EShLangCount)
             stageMask[stage] = true;
-    };
+    }
     uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage);
 
     TSlotSetMap slots;
@@ -191,7 +191,7 @@ public:
     typedef std::map<TString, int> TVarSlotMap;  // <resourceName, location/binding>
     typedef std::map<int, TVarSlotMap> TSlotMap; // <resourceKey, TVarSlotMap>
     TDefaultGlslIoResolver(const TIntermediate& intermediate);
-    bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; };
+    bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
     TResourceType getResourceType(const glslang::TType& type) override;
     int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override;
     int resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
@@ -209,7 +209,7 @@ public:
     int buildStorageKey(EShLanguage stage, TStorageQualifier type) {
         assert(static_cast<uint32_t>(stage) <= 0x0000ffff && static_cast<uint32_t>(type) <= 0x0000ffff);
         return (stage << 16) | type;
-    };
+    }
 
 protected:
     // Use for mark pre stage, to get more interface symbol information.
@@ -242,7 +242,7 @@ struct TVarLivePair : std::pair<const TString, TVarEntryInfo> {
         const_cast<TString&>(first) = _Right.first;
         second = _Right.second;
         return (*this);
-    };
+    }
 };
 typedef std::vector<TVarLivePair> TVarLiveVector;
 
@@ -253,7 +253,7 @@ public:
     virtual ~TIoMapper() {}
     // grow the reflection stage by stage
     bool virtual addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
-    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; };
+    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; }
 };
 
 // I/O mapper for OpenGL

+ 2 - 1
3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt

@@ -20,6 +20,7 @@ else()
 endif()
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OSDependent
+    install(TARGETS OSDependent EXPORT OSDependentTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OSDependentTargets DESTINATION lib/cmake)
 endif(ENABLE_GLSLANG_INSTALL)

+ 2 - 1
3rdparty/glslang/glslang/OSDependent/Windows/CMakeLists.txt

@@ -15,6 +15,7 @@ if(WIN32)
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OSDependent
+    install(TARGETS OSDependent EXPORT OSDependentTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OSDependentTargets DESTINATION lib/cmake)
 endif(ENABLE_GLSLANG_INSTALL)

+ 2 - 2
3rdparty/glslang/glslang/Public/ShaderLang.h

@@ -487,7 +487,7 @@ public:
         environment.target.version = version;
     }
 
-    void getStrings(const char* const* &s, int& n) { s = strings; n = numStrings; };
+    void getStrings(const char* const* &s, int& n) { s = strings; n = numStrings; }
 
 #ifdef ENABLE_HLSL
     void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; }
@@ -775,7 +775,7 @@ public:
     TProgram();
     virtual ~TProgram();
     void addShader(TShader* shader) { stages[shader->stage].push_back(shader); }
-    std::list<TShader*>& getShaders(EShLanguage stage) { return stages[stage]; };
+    std::list<TShader*>& getShaders(EShLanguage stage) { return stages[stage]; }
     // Link Validation interface
     bool link(EShMessages);
     const char* getInfoLog();

+ 2 - 1
3rdparty/glslang/gtests/CMakeLists.txt

@@ -31,8 +31,9 @@ if(BUILD_TESTING)
         set_property(TARGET glslangtests PROPERTY FOLDER tests)
         glslang_set_link_args(glslangtests)
         if(ENABLE_GLSLANG_INSTALL)
-            install(TARGETS glslangtests
+            install(TARGETS glslangtests EXPORT glslangtestsTargets
                     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+			install(EXPORT glslangtestsTargets DESTINATION lib/cmake)
         endif(ENABLE_GLSLANG_INSTALL)
 
         set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")

+ 1 - 0
3rdparty/glslang/gtests/Spv.FromFile.cpp

@@ -404,6 +404,7 @@ INSTANTIATE_TEST_CASE_P(
         "spv.storageBuffer.vert",
         "spv.precise.tese",
         "spv.precise.tesc",
+        "spv.volatileAtomic.comp",
         "spv.vulkan100.subgroupArithmetic.comp",
         "spv.vulkan100.subgroupPartitioned.comp",
         "spv.xfb.vert",

+ 3 - 2
3rdparty/glslang/hlsl/CMakeLists.txt

@@ -33,12 +33,13 @@ endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
-        install(TARGETS HLSL
+        install(TARGETS HLSL EXPORT HLSLTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
-        install(TARGETS HLSL
+        install(TARGETS HLSL EXPORT HLSLTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+	install(EXPORT HLSLTargets DESTINATION lib/cmake)
 endif(ENABLE_GLSLANG_INSTALL)