aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-04-28 03:05:39 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-04-28 03:05:39 +0000
commitba4fb26c192bca675a334fdab4a46285c7cd5232 (patch)
tree6f2dd3d1fefacccdeecfa74317972d9c7e36c114
parent20e9adfc02fe14a057fd270fe2f06d36ad0e6e37 (diff)
parentb775dea081bb2e671628125b23a6705a866822ef (diff)
downloadglslang-ndk-r25-release.tar.gz
Snap for 8508678 from b775dea081bb2e671628125b23a6705a866822ef to ndk-r25-releasendk-r25cndk-r25bndk-r25ndk-r25-release
Change-Id: Iceb7a342c32e98df7127df2e52e7d051eb3518f5
-rw-r--r--.github/workflows/continuous_deployment.yml168
-rw-r--r--.github/workflows/continuous_integration.yml157
-rw-r--r--.github/workflows/deploy.js73
-rw-r--r--.travis.yml141
-rw-r--r--BUILD.gn9
-rw-r--r--CHANGES.md12
-rw-r--r--CMakeLists.txt13
-rw-r--r--LICENSE.txt692
-rw-r--r--README.md14
-rw-r--r--SPIRV/CMakeLists.txt3
-rw-r--r--SPIRV/GlslangToSpv.cpp115
-rw-r--r--SPIRV/SPVRemapper.cpp18
-rw-r--r--SPIRV/SpvBuilder.cpp31
-rw-r--r--SPIRV/SpvBuilder.h1
-rw-r--r--SPIRV/SpvTools.cpp3
-rw-r--r--SPIRV/disassemble.cpp47
-rw-r--r--SPIRV/doc.cpp6
-rw-r--r--SPIRV/spirv.hpp4823
-rw-r--r--SPIRV/spvIR.h22
-rw-r--r--StandAlone/StandAlone.cpp121
-rw-r--r--Test/150.frag34
-rw-r--r--Test/BestMatchFunction.vert20
-rw-r--r--Test/EndStreamPrimitive.geom20
-rw-r--r--Test/GL_ARB_fragment_coord_conventions.vert27
-rw-r--r--Test/baseLegalResults/hlsl.flattenSubset.frag.out6
-rw-r--r--Test/baseLegalResults/hlsl.flattenSubset2.frag.out6
-rw-r--r--Test/baseResults/150.frag.out15
-rw-r--r--Test/baseResults/150.geom.out24
-rw-r--r--Test/baseResults/150.tesc.out12
-rw-r--r--Test/baseResults/310.geom.out2
-rw-r--r--Test/baseResults/310.tesc.out4
-rw-r--r--Test/baseResults/310.tese.out4
-rw-r--r--Test/baseResults/320.geom.out2
-rw-r--r--Test/baseResults/320.tesc.out4
-rw-r--r--Test/baseResults/320.tese.out2
-rw-r--r--Test/baseResults/410.geom.out2
-rw-r--r--Test/baseResults/420.tesc.out2
-rw-r--r--Test/baseResults/450.geom.out2
-rw-r--r--Test/baseResults/BestMatchFunction.vert.out206
-rw-r--r--Test/baseResults/EndStreamPrimitive.geom.out97
-rw-r--r--Test/baseResults/GL_ARB_fragment_coord_conventions.vert.out143
-rw-r--r--Test/baseResults/constantUnaryConversion.comp.out156
-rw-r--r--Test/baseResults/coord_conventions.frag.out255
-rw-r--r--Test/baseResults/enhanced.0.frag.out6
-rw-r--r--Test/baseResults/enhanced.1.frag.out6
-rw-r--r--Test/baseResults/enhanced.2.frag.out6
-rw-r--r--Test/baseResults/enhanced.3.link.out8
-rw-r--r--Test/baseResults/enhanced.4.link.out7
-rw-r--r--Test/baseResults/enhanced.5.link.out8
-rw-r--r--Test/baseResults/enhanced.6.link.out7
-rw-r--r--Test/baseResults/enhanced.7.link.out7
-rw-r--r--Test/baseResults/floatBitsToInt.vert.out217
-rw-r--r--Test/baseResults/gl_FragCoord.frag.out269
-rw-r--r--Test/baseResults/glsl.versionOverride.comp.out1
-rw-r--r--Test/baseResults/glsl.versionOverride.frag.out1
-rw-r--r--Test/baseResults/glsl.versionOverride.geom.out1
-rw-r--r--Test/baseResults/glsl.versionOverride.tesc.out1
-rw-r--r--Test/baseResults/glsl.versionOverride.tese.out1
-rw-r--r--Test/baseResults/glsl.versionOverride.vert.out1
-rw-r--r--Test/baseResults/hlsl.namespace.frag.out97
-rw-r--r--Test/baseResults/hlsl.spv.1.6.discard.frag.out195
-rw-r--r--Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out140
-rw-r--r--Test/baseResults/hlsl.w-recip.frag.out268
-rw-r--r--Test/baseResults/hlsl.w-recip2.frag.out305
-rw-r--r--Test/baseResults/iomap.blockOutVariableIn.2.vert.out413
-rw-r--r--Test/baseResults/iomap.blockOutVariableIn.vert.out234
-rw-r--r--Test/baseResults/iomap.crossStage.2.vert.out5
-rw-r--r--Test/baseResults/iomap.crossStage.vert.out5
-rw-r--r--Test/baseResults/iomap.crossStage.vk.vert.out5
-rw-r--r--Test/baseResults/iomap.variableOutBlockIn.2.vert.out276
-rw-r--r--Test/baseResults/iomap.variableOutBlockIn.vert.out236
-rw-r--r--Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out23
-rw-r--r--Test/baseResults/link.multiBlocksInvalid.0.0.vert.out42
-rw-r--r--Test/baseResults/link.multiBlocksValid.1.0.vert.out15
-rw-r--r--Test/baseResults/link.vk.differentPC.0.0.frag.out6
-rw-r--r--Test/baseResults/link.vk.differentPC.1.0.frag.out10
-rw-r--r--Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out20
-rw-r--r--Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out25
-rw-r--r--Test/baseResults/link.vk.pcNamingValid.0.0.vert.out5
-rw-r--r--Test/baseResults/noMatchingFunction.frag.out52
-rw-r--r--Test/baseResults/spv.1.6.conditionalDiscard.frag.out60
-rw-r--r--Test/baseResults/spv.1.6.helperInvocation.frag.out41
-rw-r--r--Test/baseResults/spv.1.6.specConstant.comp.out69
-rw-r--r--Test/baseResults/spv.ClosestHitShaderMotion.rchit.out1
-rw-r--r--Test/baseResults/spv.MissShaderMotion.rmiss.out1
-rw-r--r--Test/baseResults/spv.RayGenShaderMotion.rgen.out1
-rw-r--r--Test/baseResults/spv.constConstruct.vert.out4
-rw-r--r--Test/baseResults/spv.ext.AnyHitShader.rahit.out1
-rw-r--r--Test/baseResults/spv.ext.ClosestHitShader.rchit.out2
-rw-r--r--Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out1
-rw-r--r--Test/baseResults/spv.ext.MissShader.rmiss.out2
-rw-r--r--Test/baseResults/spv.ext.RayCallable.rcall.out2
-rw-r--r--Test/baseResults/spv.ext.RayConstants.rgen.out1
-rw-r--r--Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out1
-rw-r--r--Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out1
-rw-r--r--Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out1
-rw-r--r--Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out1
-rw-r--r--Test/baseResults/spv.ext.RayGenShader.rgen.out1
-rw-r--r--Test/baseResults/spv.ext.RayGenShader11.rgen.out1
-rw-r--r--Test/baseResults/spv.ext.RayGenShaderArray.rgen.out1
-rw-r--r--Test/baseResults/spv.ext.World3x4.rahit.out1
-rw-r--r--Test/baseResults/spv.float16NoRelaxed.vert.out72
-rw-r--r--Test/baseResults/spv.intrinsicsSpecConst.vert.out35
-rw-r--r--Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out8
-rw-r--r--Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out2
-rw-r--r--Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out65
-rw-r--r--Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out20
-rw-r--r--Test/baseResults/spv.intrinsicsSpirvType.rgen.out6
-rw-r--r--Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out43
-rw-r--r--Test/baseResults/spv.textureError.frag.out6
-rw-r--r--Test/baseResults/textureQueryLOD.frag.out115
-rwxr-xr-xTest/baseResults/vk.relaxed.stagelink.0.0.vert.out10697
-rw-r--r--Test/baseResults/vulkan.frag.out53
-rw-r--r--Test/baseResults/xfbUnsizedArray.error.tese.out35
-rw-r--r--Test/constantUnaryConversion.comp23
-rw-r--r--Test/coord_conventions.frag36
-rw-r--r--Test/enhanced.0.frag9
-rw-r--r--Test/enhanced.1.frag11
-rw-r--r--Test/enhanced.2.frag7
-rw-r--r--Test/enhanced.3.frag16
-rw-r--r--Test/enhanced.3.vert22
-rw-r--r--Test/enhanced.4.frag16
-rw-r--r--Test/enhanced.4.vert22
-rw-r--r--Test/enhanced.5.frag16
-rw-r--r--Test/enhanced.5.vert22
-rw-r--r--Test/enhanced.6.frag16
-rw-r--r--Test/enhanced.6.vert22
-rw-r--r--Test/enhanced.7.frag20
-rw-r--r--Test/enhanced.7.vert27
-rw-r--r--Test/floatBitsToInt.vert18
-rw-r--r--Test/gl_FragCoord.frag31
-rw-r--r--Test/glsl.versionOverride.comp11
-rw-r--r--Test/glsl.versionOverride.frag11
-rw-r--r--Test/glsl.versionOverride.geom16
-rw-r--r--Test/glsl.versionOverride.tesc13
-rw-r--r--Test/glsl.versionOverride.tese13
-rw-r--r--Test/glsl.versionOverride.vert11
-rw-r--r--Test/hlsl.namespace.frag2
-rw-r--r--Test/hlsl.spv.1.6.discard.frag14
-rw-r--r--Test/hlsl.structbuffer.rwbyte2.comp10
-rw-r--r--Test/hlsl.w-recip.frag12
-rw-r--r--Test/hlsl.w-recip2.frag19
-rw-r--r--Test/iomap.blockOutVariableIn.2.vert14
-rw-r--r--Test/iomap.blockOutVariableIn.frag11
-rw-r--r--Test/iomap.blockOutVariableIn.geom28
-rw-r--r--Test/iomap.blockOutVariableIn.vert14
-rw-r--r--Test/iomap.variableOutBlockIn.2.vert11
-rw-r--r--Test/iomap.variableOutBlockIn.frag13
-rw-r--r--Test/iomap.variableOutBlockIn.geom19
-rw-r--r--Test/iomap.variableOutBlockIn.vert11
-rw-r--r--Test/noMatchingFunction.frag19
-rwxr-xr-xTest/runtests49
-rw-r--r--Test/spv.1.6.conditionalDiscard.frag14
-rw-r--r--Test/spv.1.6.helperInvocation.frag10
-rw-r--r--Test/spv.1.6.specConstant.comp18
-rw-r--r--Test/spv.float16NoRelaxed.vert16
-rw-r--r--Test/spv.intrinsicsSpecConst.vert14
-rw-r--r--Test/spv.intrinsicsSpirvInstruction.vert12
-rw-r--r--Test/spv.intrinsicsSpirvTypeLocalVar.vert14
-rw-r--r--Test/spv.textureError.frag10
-rw-r--r--Test/textureQueryLOD.frag39
-rwxr-xr-xTest/vk.relaxed.stagelink.0.0.frag139
-rwxr-xr-xTest/vk.relaxed.stagelink.0.0.vert126
-rwxr-xr-xTest/vk.relaxed.stagelink.0.1.frag504
-rwxr-xr-xTest/vk.relaxed.stagelink.0.1.vert242
-rwxr-xr-xTest/vk.relaxed.stagelink.0.2.frag9
-rwxr-xr-xTest/vk.relaxed.stagelink.0.2.vert320
-rw-r--r--Test/vulkan.frag3
-rw-r--r--Test/xfbUnsizedArray.error.tese8
-rwxr-xr-xbuild_info.py2
-rwxr-xr-x[-rw-r--r--]gen_extension_headers.py4
-rw-r--r--glslang/CInterface/glslang_c_interface.cpp41
-rw-r--r--glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl16
-rw-r--r--glslang/HLSL/hlslParseHelper.cpp80
-rw-r--r--glslang/HLSL/hlslParseHelper.h1
-rw-r--r--glslang/Include/Common.h33
-rw-r--r--glslang/Include/Types.h511
-rw-r--r--glslang/Include/glslang_c_interface.h5
-rw-r--r--glslang/Include/glslang_c_shader_types.h31
-rw-r--r--glslang/Include/intermediate.h2
-rw-r--r--glslang/MachineIndependent/Constant.cpp33
-rw-r--r--glslang/MachineIndependent/Initialize.cpp77
-rw-r--r--glslang/MachineIndependent/Intermediate.cpp10
-rw-r--r--glslang/MachineIndependent/ParseContextBase.cpp3
-rw-r--r--glslang/MachineIndependent/ParseHelper.cpp163
-rw-r--r--glslang/MachineIndependent/ShaderLang.cpp27
-rw-r--r--glslang/MachineIndependent/SymbolTable.cpp13
-rw-r--r--glslang/MachineIndependent/SymbolTable.h2
-rw-r--r--glslang/MachineIndependent/Versions.cpp3
-rw-r--r--glslang/MachineIndependent/Versions.h1
-rw-r--r--glslang/MachineIndependent/glslang.m46
-rw-r--r--glslang/MachineIndependent/glslang.y6
-rw-r--r--glslang/MachineIndependent/glslang_tab.cpp6
-rw-r--r--glslang/MachineIndependent/intermOut.cpp31
-rw-r--r--glslang/MachineIndependent/iomapper.cpp59
-rw-r--r--glslang/MachineIndependent/iomapper.h9
-rw-r--r--glslang/MachineIndependent/linkValidate.cpp334
-rw-r--r--glslang/MachineIndependent/localintermediate.h34
-rw-r--r--glslang/Public/ShaderLang.h20
-rw-r--r--gtests/AST.FromFile.cpp9
-rw-r--r--gtests/GlslMapIO.FromFile.cpp53
-rw-r--r--gtests/Hlsl.FromFile.cpp19
-rw-r--r--gtests/Spv.FromFile.cpp23
-rw-r--r--gtests/VkRelaxed.FromFile.cpp5
-rw-r--r--known_good.json4
-rw-r--r--license-checker.cfg2
-rwxr-xr-xupdate_glslang_sources.py2
207 files changed, 22186 insertions, 3436 deletions
diff --git a/.github/workflows/continuous_deployment.yml b/.github/workflows/continuous_deployment.yml
new file mode 100644
index 00000000..86f439db
--- /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 00000000..feec0dc2
--- /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 00000000..82ebb1bd
--- /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 cb0392ef..00000000
--- 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/BUILD.gn b/BUILD.gn
index 06d3c4b8..4dd0a553 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
]
diff --git a/CHANGES.md b/CHANGES.md
index ad4fa400..6d3bd6d9 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.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
+* Add support for targeting Vulkan 1.2 in the C API
+
## 11.6.0 2021-08-25
### Other changes
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d5b727ac..43533c14 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -106,10 +106,17 @@ 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(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()
@@ -163,7 +170,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.
diff --git a/LICENSE.txt b/LICENSE.txt
index 5f58565d..054e68a4 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -303,41 +303,647 @@ 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 <http://www.gnu.org/licenses/>.
-
- 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. <http://fsf.org/>
+ 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
--------------------------------------------------------------------------------
================================================================================
--------------------------------------------------------------------------------
-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 +988,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.
+*/
diff --git a/README.md b/README.md
index 9b8cfb3f..48118b29 100644
--- a/README.md
+++ b/README.md
@@ -19,8 +19,8 @@ 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 Deployment](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_deployment.yml/badge.svg)
# Glslang Components and Status
@@ -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)
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index 22f767d7..775466e0 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}
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 43aba9cb..6cdf2346 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;
@@ -1662,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<spv::Id> 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);
@@ -1768,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<spv::Id> 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());
@@ -3777,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);
@@ -4148,23 +4185,23 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
const auto& spirvType = type.getSpirvType();
const auto& spirvInst = spirvType.spirvInst;
- std::vector<spv::Id> operands;
+ std::vector<spv::IdImmediate> operands;
for (const auto& typeParam : spirvType.typeParams) {
// Constant expression
if (typeParam.constant->isLiteral()) {
if (typeParam.constant->getBasicType() == glslang::EbtFloat) {
float floatValue = static_cast<float>(typeParam.constant->getConstArray()[0].getDConst());
unsigned literal = *reinterpret_cast<unsigned*>(&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 +4213,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<char*>(&literal);
charCount = 0;
}
@@ -4186,20 +4223,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<spv::Op>(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<spv::Op>(spirvInst.id), operands);
+
break;
}
#endif
@@ -8717,8 +8751,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);
@@ -8752,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
@@ -9025,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:
@@ -9046,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
@@ -9074,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:
@@ -9095,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/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index 56d6d5d4..fdfbeb90 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<const char*>(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/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index e83306eb..36a3f097 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<spv::IdImmediate>& operands)
+{
+ // try to find it
+ Instruction* type;
+ for (int t = 0; t < (int)groupedTypes[opcode].size(); ++t) {
+ type = groupedTypes[opcode][t];
+ if (static_cast<size_t>(type->getNumOperands()) != operands.size())
+ continue; // Number mismatch, find next
+
+ bool match = true;
+ 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)
+ return type->getResultId();
+ }
+
+ // not found, make it
+ type = new Instruction(getUniqueId(), NoType, opcode);
+ for (size_t 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<Instruction>(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 251b9ee8..c72d9b28 100644
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -181,6 +181,7 @@ public:
Id makeSamplerType();
Id makeSampledImageType(Id imageType);
Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols);
+ Id makeGenericType(spv::Op opcode, std::vector<spv::IdImmediate>& operands);
// accelerationStructureNV type
Id makeAccelerationStructureType();
diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp
index 8acf9b13..8cc17cca 100644
--- a/SPIRV/SpvTools.cpp
+++ b/SPIRV/SpvTools.cpp
@@ -68,6 +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::EShTargetVulkan_1_3:
+ return spv_target_env::SPV_ENV_VULKAN_1_3;
default:
break;
}
@@ -210,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());
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index 73c988c5..74dd6054 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -43,6 +43,7 @@
#include <stack>
#include <sstream>
#include <cstring>
+#include <utility>
#include "disassemble.h"
#include "doc.h"
@@ -100,6 +101,7 @@ protected:
void outputMask(OperandClass operandClass, unsigned mask);
void disassembleImmediates(int numOperands);
void disassembleIds(int numOperands);
+ std::pair<int, std::string> 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<int, std::string> 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<int, std::string> 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/doc.cpp b/SPIRV/doc.cpp
index dbdf7077..9a569e0d 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/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index e0fe2498..a8642006 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,
- OpConstFunctionPointerINTEL = 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 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 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
+
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 486e80d0..5249a5ba 100644
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -111,27 +111,23 @@ public:
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);
}
}
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 23e510c2..37282f2d 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -177,6 +177,8 @@ const char* shaderStageName = nullptr;
const char* variableName = nullptr;
bool HlslEnable16BitTypes = false;
bool HlslDX9compatible = false;
+bool HlslDxPositionW = false;
+bool EnhancedMsgs = false;
bool DumpBuiltinSymbols = false;
std::vector<std::string> IncludeDirectoryList;
@@ -190,6 +192,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<std::string> Processes; // what should be recorded by OpModuleProcessed, or equivalent
// Per descriptor-set binding base data
@@ -652,6 +657,48 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& 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" ||
@@ -662,6 +709,10 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
HlslEnable16BitTypes = true;
} else if (lowerword == "hlsl-dx9-compatible") {
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
@@ -764,6 +815,9 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& 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;
@@ -785,9 +839,13 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& 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"
+ "vulkan1.3, opengl, spirv1.0, spirv1.1, spirv1.2, spirv1.3,\n"
+ "spirv1.4, spirv1.5 or spirv1.6");
}
bumpArg();
} else if (lowerword == "undef-macro" ||
@@ -1012,6 +1070,10 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& 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;
@@ -1059,6 +1121,8 @@ void SetMessageOptions(EShMessages& messages)
messages = (EShMessages)(messages | EShMsgHlslDX9Compatible);
if (DumpBuiltinSymbols)
messages = (EShMessages)(messages | EShMsgBuiltinSymbolTable);
+ if (EnhancedMsgs)
+ messages = (EShMessages)(messages | EShMsgEnhanced);
}
//
@@ -1149,6 +1213,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<std::string>& binaryFiles, const std::vector<std::string>& sources)
{
@@ -1156,10 +1241,12 @@ bool writeDepFile(std::string depfile, std::vector<std::string>& 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;
}
@@ -1209,6 +1296,8 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
shader->setSourceEntryPoint(sourceEntryPointName);
}
+ shader->setOverrideVersion(GlslVersion);
+
std::string intrinsicString = getIntrinsic(compUnit.text, compUnit.count);
PreambleString = "";
@@ -1284,6 +1373,12 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
if (Options & EOptionInvertY)
shader->setInvertY(true);
+ 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) {
@@ -1840,6 +1935,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"
@@ -1847,7 +1947,10 @@ 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"
+ " --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"
@@ -1922,8 +2025,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 | 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"
" generated code will be executed in.\n"
" Defaults to:\n"
@@ -1932,6 +2036,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 <name>\n"
" --vn <name> creates a C header file that contains a\n"
diff --git a/Test/150.frag b/Test/150.frag
index 228e4f0d..90b1e274 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/BestMatchFunction.vert b/Test/BestMatchFunction.vert
new file mode 100644
index 00000000..eb092339
--- /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/EndStreamPrimitive.geom b/Test/EndStreamPrimitive.geom
new file mode 100644
index 00000000..a654ebc4
--- /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/GL_ARB_fragment_coord_conventions.vert b/Test/GL_ARB_fragment_coord_conventions.vert
new file mode 100644
index 00000000..962734f4
--- /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/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
index 0edf7120..46d3afba 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 00bd55be..408c0eac 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/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out
index 2192e14a..ba15b5cb 100644
--- a/Test/baseResults/150.frag.out
+++ b/Test/baseResults/150.frag.out
@@ -2,22 +2,23 @@
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
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
-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.
+ERROR: 17 compilation errors. No code generated.
Shader version: 150
diff --git a/Test/baseResults/150.geom.out b/Test/baseResults/150.geom.out
index 92b8e1aa..c5a31f55 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/150.tesc.out b/Test/baseResults/150.tesc.out
index 535a8a62..78b32da2 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 b0dabc3b..2fa5d111 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 25ce6ee9..bd4c1bdc 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 2f23d9ba..5eecaffa 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 f3337660..cdaacb91 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 6bb52b30..67848d9b 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 014eeb0a..ba51b9c8 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 498da5ac..3cc7900c 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 a1f881cb..4410c846 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 e75bf939..b51a674f 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/BestMatchFunction.vert.out b/Test/baseResults/BestMatchFunction.vert.out
new file mode 100644
index 00000000..843ffd79
--- /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/Test/baseResults/EndStreamPrimitive.geom.out b/Test/baseResults/EndStreamPrimitive.geom.out
new file mode 100644
index 00000000..702c3f97
--- /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/Test/baseResults/GL_ARB_fragment_coord_conventions.vert.out b/Test/baseResults/GL_ARB_fragment_coord_conventions.vert.out
new file mode 100644
index 00000000..3b55ae0d
--- /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/Test/baseResults/constantUnaryConversion.comp.out b/Test/baseResults/constantUnaryConversion.comp.out
index fcaf6f22..78372f06 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)
@@ -29,6 +29,12 @@ local_size = (1, 1, 1)
0:? 'float32_t_init' ( const float)
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)
@@ -77,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)
@@ -101,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)
@@ -125,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)
@@ -149,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)
@@ -173,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)
@@ -197,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)
@@ -221,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)
@@ -245,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)
@@ -269,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)
@@ -293,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)
@@ -317,6 +323,54 @@ 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:? '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
@@ -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)
@@ -353,6 +407,12 @@ local_size = (1, 1, 1)
0:? 'float32_t_init' ( const float)
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)
@@ -401,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)
@@ -425,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)
@@ -449,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)
@@ -473,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)
@@ -497,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)
@@ -521,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)
@@ -545,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)
@@ -569,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)
@@ -593,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)
@@ -617,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)
@@ -641,5 +701,53 @@ 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:? '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/baseResults/coord_conventions.frag.out b/Test/baseResults/coord_conventions.frag.out
new file mode 100644
index 00000000..656c6087
--- /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/baseResults/enhanced.0.frag.out b/Test/baseResults/enhanced.0.frag.out
new file mode 100644
index 00000000..1171bfaf
--- /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 00000000..42f5b72d
--- /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 00000000..a7e48de4
--- /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 00000000..c0e6a202
--- /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 00000000..2c0acf41
--- /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 00000000..929cfcef
--- /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 00000000..99626282
--- /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 00000000..a6333be9
--- /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/floatBitsToInt.vert.out b/Test/baseResults/floatBitsToInt.vert.out
new file mode 100644
index 00000000..6d5185c8
--- /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/baseResults/gl_FragCoord.frag.out b/Test/baseResults/gl_FragCoord.frag.out
new file mode 100644
index 00000000..da9e8dcc
--- /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/baseResults/glsl.versionOverride.comp.out b/Test/baseResults/glsl.versionOverride.comp.out
new file mode 100644
index 00000000..591ce4d9
--- /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 00000000..b759a47f
--- /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 00000000..758d9d49
--- /dev/null
+++ b/Test/baseResults/glsl.versionOverride.geom.out
@@ -0,0 +1 @@
+glsl.versionOverride.geom
diff --git a/Test/baseResults/glsl.versionOverride.tesc.out b/Test/baseResults/glsl.versionOverride.tesc.out
new file mode 100644
index 00000000..4aedf0d8
--- /dev/null
+++ b/Test/baseResults/glsl.versionOverride.tesc.out
@@ -0,0 +1 @@
+glsl.versionOverride.tesc
diff --git a/Test/baseResults/glsl.versionOverride.tese.out b/Test/baseResults/glsl.versionOverride.tese.out
new file mode 100644
index 00000000..c3632e8a
--- /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 00000000..d42dc3d8
--- /dev/null
+++ b/Test/baseResults/glsl.versionOverride.vert.out
@@ -0,0 +1 @@
+glsl.versionOverride.vert
diff --git a/Test/baseResults/hlsl.namespace.frag.out b/Test/baseResults/hlsl.namespace.frag.out
index 5346c44a..e224eb92 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/baseResults/hlsl.spv.1.6.discard.frag.out b/Test/baseResults/hlsl.spv.1.6.discard.frag.out
new file mode 100644
index 00000000..d5219144
--- /dev/null
+++ b/Test/baseResults/hlsl.spv.1.6.discard.frag.out
@@ -0,0 +1,195 @@
+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:
+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
+gl_FragCoord origin is upper left
+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 OriginUpperLeft
+ 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/hlsl.structbuffer.rwbyte2.comp.out b/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out
new file mode 100644
index 00000000..127d52cc
--- /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/baseResults/hlsl.w-recip.frag.out b/Test/baseResults/hlsl.w-recip.frag.out
new file mode 100644
index 00000000..b72f361e
--- /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/baseResults/hlsl.w-recip2.frag.out b/Test/baseResults/hlsl.w-recip2.frag.out
new file mode 100644
index 00000000..6fee15c4
--- /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/baseResults/iomap.blockOutVariableIn.2.vert.out b/Test/baseResults/iomap.blockOutVariableIn.2.vert.out
new file mode 100644
index 00000000..0b4c0ac9
--- /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 00000000..dd12cbc2
--- /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.crossStage.2.vert.out b/Test/baseResults/iomap.crossStage.2.vert.out
index 325c1b46..85139cc7 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 5338b807..13ff58c9 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 e137bdfc..0a2eae84 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/iomap.variableOutBlockIn.2.vert.out b/Test/baseResults/iomap.variableOutBlockIn.2.vert.out
new file mode 100644
index 00000000..6ef7d4e3
--- /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 00000000..8fef640d
--- /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/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out
index 404ae849..c34401cb 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 ad609e86..d94debbf 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 0015cab4..69513f05 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 d7cfd220..d78ba54a 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 632f18b1..07ed124a 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 bdabab18..29a4df04 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 b0456a08..4005f601 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 e1d5c888..f84877e0 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/baseResults/noMatchingFunction.frag.out b/Test/baseResults/noMatchingFunction.frag.out
new file mode 100644
index 00000000..85aa3f6c
--- /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/baseResults/spv.1.6.conditionalDiscard.frag.out b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out
new file mode 100644
index 00000000..f538fd93
--- /dev/null
+++ b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out
@@ -0,0 +1,60 @@
+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 OriginUpperLeft
+ 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
+ Decorate 34(gl_FragColor) 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 00000000..7df2a2ac
--- /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 OriginUpperLeft
+ 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 00000000..7485f04a
--- /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/baseResults/spv.ClosestHitShaderMotion.rchit.out b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out
index e89abb45..45679eb0 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 2f183381..185c934b 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 f9b9fa5f..a6af2365 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.constConstruct.vert.out b/Test/baseResults/spv.constConstruct.vert.out
index db637a94..a8d50975 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"
diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
index 880be339..df779bdd 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 40903e60..9a4eb288 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 7f5af89d..24ab4f46 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 d2dfc176..1acd5ae6 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 d429116c..50e7fd8f 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 afd50833..6ef9dd4d 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 95d92136..88e3c004 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 f5e32c13..ce5c3063 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 d952adfd..7462abd9 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 c6d65304..35734556 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 bfaf64b1..46f920ac 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 048b02b2..b31ebd9a 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 ee39e358..08f72b28 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 40d73d1b..8c60912c 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
diff --git a/Test/baseResults/spv.float16NoRelaxed.vert.out b/Test/baseResults/spv.float16NoRelaxed.vert.out
new file mode 100644
index 00000000..8872b463
--- /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/baseResults/spv.intrinsicsSpecConst.vert.out b/Test/baseResults/spv.intrinsicsSpecConst.vert.out
deleted file mode 100644
index 11751d64..00000000
--- 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/baseResults/spv.intrinsicsSpirvDecorate.frag.out b/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out
index cbd46b00..c41dcc9c 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 22bc53b0..cdea3820 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 0e2780cf..0e95e42b 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.intrinsicsSpirvLiteral.vert.out b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out
index 68ad949b..096cc611 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
diff --git a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out
index ac0c9464..f3937b49 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,12 +16,13 @@ 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
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 +36,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 00000000..75515be0
--- /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/baseResults/spv.textureError.frag.out b/Test/baseResults/spv.textureError.frag.out
new file mode 100644
index 00000000..d5ef59ce
--- /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/baseResults/textureQueryLOD.frag.out b/Test/baseResults/textureQueryLOD.frag.out
new file mode 100644
index 00000000..b565a005
--- /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/baseResults/vk.relaxed.stagelink.0.0.vert.out b/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out
new file mode 100755
index 00000000..bcd4e2af
--- /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/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index 28134aed..78aea821 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/baseResults/xfbUnsizedArray.error.tese.out b/Test/baseResults/xfbUnsizedArray.error.tese.out
new file mode 100644
index 00000000..df3495f1
--- /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/constantUnaryConversion.comp b/Test/constantUnaryConversion.comp
index 3c479ae6..f0710cd0 100644
--- a/Test/constantUnaryConversion.comp
+++ b/Test/constantUnaryConversion.comp
@@ -13,11 +13,18 @@ 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);
+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() {}
diff --git a/Test/coord_conventions.frag b/Test/coord_conventions.frag
new file mode 100644
index 00000000..4ae6060e
--- /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/Test/enhanced.0.frag b/Test/enhanced.0.frag
new file mode 100644
index 00000000..7a42c053
--- /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 00000000..9aab34d7
--- /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 00000000..c3c194ce
--- /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 00000000..1de9f4b2
--- /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 00000000..043ee246
--- /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 00000000..9c16606d
--- /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 00000000..043ee246
--- /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 00000000..b2a51e26
--- /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 00000000..043ee246
--- /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 00000000..e1cf6857
--- /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 00000000..876a903e
--- /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 00000000..f6e5279d
--- /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 00000000..4e70a617
--- /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/floatBitsToInt.vert b/Test/floatBitsToInt.vert
new file mode 100644
index 00000000..a6bb18a6
--- /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/Test/gl_FragCoord.frag b/Test/gl_FragCoord.frag
new file mode 100644
index 00000000..7bb17920
--- /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/Test/glsl.versionOverride.comp b/Test/glsl.versionOverride.comp
new file mode 100644
index 00000000..f72663e3
--- /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 110
+
+void main()
+{
+}
diff --git a/Test/glsl.versionOverride.frag b/Test/glsl.versionOverride.frag
new file mode 100644
index 00000000..12679940
--- /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 110
+
+void main()
+{
+}
diff --git a/Test/glsl.versionOverride.geom b/Test/glsl.versionOverride.geom
new file mode 100644
index 00000000..bcfc2f22
--- /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 110
+
+layout (points) in;
+layout (line_strip, max_vertices = 2) out;
+
+void main() {
+ EmitVertex();
+ EmitVertex();
+ EndPrimitive();
+}
diff --git a/Test/glsl.versionOverride.tesc b/Test/glsl.versionOverride.tesc
new file mode 100644
index 00000000..3b7b1e3c
--- /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 110
+
+layout(vertices = 3) out;
+
+void main()
+{
+}
diff --git a/Test/glsl.versionOverride.tese b/Test/glsl.versionOverride.tese
new file mode 100644
index 00000000..e92d5a98
--- /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 110
+
+layout(triangles) in;
+
+void main()
+{
+}
diff --git a/Test/glsl.versionOverride.vert b/Test/glsl.versionOverride.vert
new file mode 100644
index 00000000..2d5effcd
--- /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 110
+
+void main()
+{
+}
diff --git a/Test/hlsl.namespace.frag b/Test/hlsl.namespace.frag
index 76c3062d..d2b04458 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; }
};
}
}
diff --git a/Test/hlsl.spv.1.6.discard.frag b/Test/hlsl.spv.1.6.discard.frag
new file mode 100644
index 00000000..7d9271c9
--- /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/hlsl.structbuffer.rwbyte2.comp b/Test/hlsl.structbuffer.rwbyte2.comp
new file mode 100644
index 00000000..42d61c00
--- /dev/null
+++ b/Test/hlsl.structbuffer.rwbyte2.comp
@@ -0,0 +1,10 @@
+RWStructuredBuffer<uint> g_sbuf;
+RWByteAddressBuffer g_bbuf;
+
+
+void main()
+{
+ uint f = g_bbuf.Load(16);
+ g_sbuf[0] = f;
+}
+
diff --git a/Test/hlsl.w-recip.frag b/Test/hlsl.w-recip.frag
new file mode 100644
index 00000000..4812d269
--- /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/hlsl.w-recip2.frag b/Test/hlsl.w-recip2.frag
new file mode 100644
index 00000000..8ef49c9e
--- /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/iomap.blockOutVariableIn.2.vert b/Test/iomap.blockOutVariableIn.2.vert
new file mode 100644
index 00000000..67f45c97
--- /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 00000000..f2cb26e7
--- /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 00000000..feefdd13
--- /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 00000000..67f45c97
--- /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 00000000..f9b80b46
--- /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 00000000..967d7698
--- /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 00000000..637ddabb
--- /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 00000000..f9b80b46
--- /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/Test/noMatchingFunction.frag b/Test/noMatchingFunction.frag
new file mode 100644
index 00000000..d0956452
--- /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/Test/runtests b/Test/runtests
index a7bdda79..2ee0db0d 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -255,6 +255,15 @@ run -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-3.vert > $TARGETDIR/hlsl
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
+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
#
echo "Testing hlsl_functionality1"
@@ -289,6 +298,46 @@ 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
+
+#
+# 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
+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.1.6.conditionalDiscard.frag b/Test/spv.1.6.conditionalDiscard.frag
new file mode 100644
index 00000000..ea803374
--- /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 00000000..4d306db2
--- /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 00000000..6b47515b
--- /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/Test/spv.float16NoRelaxed.vert b/Test/spv.float16NoRelaxed.vert
new file mode 100644
index 00000000..d594a1d4
--- /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/Test/spv.intrinsicsSpecConst.vert b/Test/spv.intrinsicsSpecConst.vert
deleted file mode 100644
index 19cc5ef4..00000000
--- 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/Test/spv.intrinsicsSpirvInstruction.vert b/Test/spv.intrinsicsSpirvInstruction.vert
index a4efb7da..2cc1842b 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/Test/spv.intrinsicsSpirvTypeLocalVar.vert b/Test/spv.intrinsicsSpirvTypeLocalVar.vert
new file mode 100644
index 00000000..203d9007
--- /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/Test/spv.textureError.frag b/Test/spv.textureError.frag
new file mode 100644
index 00000000..a40ea363
--- /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/Test/textureQueryLOD.frag b/Test/textureQueryLOD.frag
new file mode 100644
index 00000000..0d0ae3c7
--- /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/Test/vk.relaxed.stagelink.0.0.frag b/Test/vk.relaxed.stagelink.0.0.frag
new file mode 100755
index 00000000..1f9f1025
--- /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 00000000..7f31c377
--- /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 00000000..2a82b65d
--- /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 00000000..3c5de986
--- /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 00000000..27bd540d
--- /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 00000000..69c0b21b
--- /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/Test/vulkan.frag b/Test/vulkan.frag
index 25bfefec..6cf7ccfa 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/Test/xfbUnsizedArray.error.tese b/Test/xfbUnsizedArray.error.tese
new file mode 100644
index 00000000..a59069bb
--- /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/build_info.py b/build_info.py
index 7c1998f6..06d613b0 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
index a787f9a9..2838c962 100644..100755
--- 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/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp
index 4fdeff7a..53892bc5 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;
}
@@ -271,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:
@@ -346,6 +350,38 @@ 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);
+ }
+
+ 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->shader->setOverrideVersion(version);
+}
+
GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader)
{
return shader->preprocessedGLSL.c_str();
@@ -419,6 +455,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/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl b/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl
index f74df6fc..7cf545d9 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/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp
index 39b3ecac..2d0a8e92 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) {
@@ -2452,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
@@ -3071,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);
@@ -6935,6 +7008,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/glslang/HLSL/hlslParseHelper.h b/glslang/HLSL/hlslParseHelper.h
index 2d7165cf..8bebb0e2 100644
--- a/glslang/HLSL/hlslParseHelper.h
+++ b/glslang/HLSL/hlslParseHelper.h
@@ -94,6 +94,7 @@ public:
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);
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index e7b5e072..9042a1aa 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -39,6 +39,11 @@
#include <algorithm>
#include <cassert>
+#ifdef _MSC_VER
+#include <cfloat>
+#else
+#include <cmath>
+#endif
#include <cstdio>
#include <cstdlib>
#include <list>
@@ -302,6 +307,34 @@ template <class T> 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/Include/Types.h b/glslang/Include/Types.h
index e87f2583..91fcd4eb 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -1865,10 +1865,12 @@ public:
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.
@@ -2140,7 +2142,8 @@ public:
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;
@@ -2148,232 +2151,335 @@ public:
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;
@@ -2442,13 +2548,27 @@ public:
// 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
{
+ // 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;
+ if (!isStruct() || !right.isStruct())
+ return false;
+
// Structure names have to match
if (*typeName != *right.typeName)
return false;
@@ -2458,12 +2578,17 @@ public:
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 (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<int>(li);
+ *rpidx = static_cast<int>(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)
@@ -2493,11 +2618,19 @@ public:
}
// 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;
+ }
}
}
@@ -2521,10 +2654,15 @@ public:
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
@@ -2558,15 +2696,20 @@ public:
#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
{
- return sampler == right.sampler &&
+ if (lpidx != nullptr) {
+ *lpidx = -1;
+ *rpidx = -1;
+ }
+ return ((basicType != EbtSampler && right.basicType != EbtSampler) || 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_interface.h b/glslang/Include/glslang_c_interface.h
index 4b32e2b8..a98a7e17 100644
--- a/glslang/Include/glslang_c_interface.h
+++ b/glslang/Include/glslang_c_interface.h
@@ -224,6 +224,10 @@ 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 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);
@@ -234,6 +238,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 f100a9aa..dc9009f3 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 */
@@ -113,13 +114,16 @@ 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 */
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,
@@ -153,6 +157,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;
@@ -181,6 +186,26 @@ 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 = (1 << 1),
+ GLSLANG_SHADER_VULKAN_RULES_RELAXED = (1 << 2),
+ 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
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 595bd623..a64ed683 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -1155,7 +1155,7 @@ public:
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/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
index 7f5d4c4f..5fc61dbb 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/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 728cd4a6..03fdce9f 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 },
@@ -4269,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);"
@@ -4553,11 +4554,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");
}
@@ -6245,38 +6248,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(");\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");
}
//
@@ -8061,7 +8070,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) {
@@ -8324,6 +8333,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);
@@ -8341,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/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 1283f449..14fd053a 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;
@@ -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; \
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index 1da50d62..616580f9 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 7f2f171b..496a9a13 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,14 +1324,14 @@ 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 {
//
// 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
@@ -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<TIntermTyped*>(arguments)->getCompleteString().c_str());
+ static_cast<TIntermTyped*>(arguments)->getCompleteString(intermediate.getEnhancedMsgs()).c_str());
} else if (result->getAsOperator())
builtInOpCheck(loc, function, *result->getAsOperator());
@@ -2495,6 +2505,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;
@@ -2597,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;
}
}
@@ -2786,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);
@@ -3196,6 +3212,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) {
@@ -3253,7 +3275,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;
@@ -3283,13 +3305,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");
}
}
}
@@ -3303,9 +3325,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:
@@ -3316,9 +3338,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:
@@ -3329,9 +3351,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;
@@ -3413,7 +3435,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;
}
@@ -3421,7 +3443,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;
}
@@ -3434,7 +3456,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;
}
@@ -3451,7 +3473,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;
}
@@ -3461,51 +3483,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;
}
@@ -4589,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" ||
@@ -4658,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())
@@ -4668,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)
@@ -5499,12 +5524,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;
}
@@ -6210,11 +6242,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
@@ -6334,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", "");
@@ -6652,8 +6690,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
@@ -7424,14 +7464,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;
}
@@ -7494,7 +7534,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;
}
@@ -7565,7 +7605,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
@@ -7576,20 +7616,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;
}
@@ -8097,8 +8137,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 a2dd71cf..a5ba40e6 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);
}
@@ -1498,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,
+ "", optLevel, resources, defaultVersion, ENoProfile, false, 0,
forwardCompatible, messages, intermediate, includer);
//
@@ -1759,7 +1765,7 @@ public:
};
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;
@@ -1828,7 +1834,14 @@ 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::setEnhancedMsgs() { intermediate->setEnhancedMsgs(); }
void TShader::setNanMinMaxClamp(bool useNonNan) { intermediate->setNanMinMaxClamp(useNonNan); }
#ifndef GLSLANG_WEB
@@ -1908,7 +1921,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);
}
@@ -1935,7 +1948,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);
}
@@ -2048,6 +2061,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/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 5b7e27fa..a3ffa0c4 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<bool> 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;
diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h
index 720999a3..31312ecb 100644
--- a/glslang/MachineIndependent/SymbolTable.h
+++ b/glslang/MachineIndependent/SymbolTable.h
@@ -84,7 +84,7 @@ typedef TVector<const char*> 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
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 2fc0d9e0..8d96e0e1 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 2dbac0b4..96a6e1fc 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/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4
index d4cc5bc9..624add5a 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 df53eb5b..93c98995 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 5ba6a6d4..0b216b62 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -5878,7 +5878,7 @@ yyreduce:
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 @@ yyreduce:
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 @@ yyreduce:
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/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index a0fade16..d8a3aab5 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -48,37 +48,6 @@
#endif
#include <cstdint>
-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 {
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 19eabdf4..4250e92d 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -203,11 +203,7 @@ struct TResolverUniformAdaptor {
inline void operator()(std::pair<const TString, TVarEntryInfo>& 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<const TString, TVarEntryInfo>& 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);
@@ -514,6 +506,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;
@@ -827,7 +837,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
@@ -855,8 +865,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;
}
@@ -942,8 +952,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
@@ -1024,7 +1034,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
@@ -1651,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;
}
}
@@ -1658,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 c43864e3..ba7bc3bb 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; }
};
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index b1adfc93..9b45570e 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
}
@@ -312,6 +318,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);
@@ -579,9 +586,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() ||
@@ -628,44 +632,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<unsigned int, unsigned int>& 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<unsigned int, unsigned int>& memberIndexUpdates;
-
- virtual void visitSymbol(TIntermSymbol* symbol)
+ TMergeBlockTraverser(const TIntermSymbol* newSym)
+ : newSymbol(newSym), unitType(nullptr), unit(nullptr), memberIndexUpdates(nullptr)
+ {
+ }
+ TMergeBlockTraverser(const TIntermSymbol* newSym, const glslang::TType* unitType, glslang::TIntermediate* unit,
+ const std::map<unsigned int, unsigned int>* memberIdxUpdates)
+ : newSymbol(newSym), unitType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates)
{
- glslang::TType& symType = symbol->getWritableType();
+ }
+ 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<unsigned int, unsigned int>* 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
@@ -673,8 +675,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;
@@ -683,10 +685,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);
@@ -759,7 +771,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";
}
@@ -815,6 +830,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
{
@@ -846,11 +865,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;
- error(infoSink, "Types must match:");
+ printType = true;
+ } else if (!symbol.getType().sameTypeParameters(unitSymbol.getType())) {
+ error(infoSink, "Type parameters must match:", unitStage);
+ writeTypeComparison = true;
+ printType = true;
}
}
@@ -871,13 +927,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;
@@ -891,8 +969,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
@@ -900,33 +979,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...
@@ -940,57 +1022,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
}
@@ -1798,7 +1960,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/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 6aa9399d..581e9aa2 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -290,6 +290,8 @@ public:
resources(TBuiltInResource{}),
numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
invertY(false),
+ dxPositionW(false),
+ enhancedMsgs(false),
useStorageBuffer(false),
invariantAll(false),
nanMinMaxClamp(false),
@@ -307,7 +309,7 @@ public:
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),
@@ -397,6 +399,9 @@ public:
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;
@@ -415,6 +420,9 @@ public:
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;
@@ -460,6 +468,20 @@ public:
}
bool getInvertY() const { return invertY; }
+ void setDxPositionW(bool dxPosW)
+ {
+ 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; }
@@ -812,6 +834,8 @@ public:
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)
@@ -1016,8 +1040,8 @@ public:
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&);
@@ -1070,6 +1094,8 @@ protected:
int numPushConstants;
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
@@ -1098,6 +1124,7 @@ protected:
TLayoutGeometry outputPrimitive;
bool pixelCenterInteger;
bool originUpperLeft;
+ bool texCoordBuiltinRedeclared;
TVertexSpacing vertexSpacing;
TVertexOrder vertexOrder;
TInterlockOrdering interlockOrdering;
@@ -1158,6 +1185,7 @@ protected:
// for callableData/callableDataIn
// set of names of statically read/written I/O that might need extra checking
std::set<TString> ioAccessed;
+
// source code of shader, useful as part of debug information
std::string sourceFile;
std::string sourceText;
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index d2a4bf40..e44339db 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;
@@ -166,8 +166,9 @@ typedef enum {
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;
@@ -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 {
@@ -262,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),
};
@@ -468,6 +471,7 @@ public:
GLSLANG_EXPORT void setSourceEntryPoint(const char* sourceEntryPointName);
GLSLANG_EXPORT void addProcesses(const std::vector<std::string>&);
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);
@@ -485,6 +489,8 @@ public:
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);
+ GLSLANG_EXPORT void setEnhancedMsgs();
#ifdef ENABLE_HLSL
GLSLANG_EXPORT void setHlslIoMapping(bool hlslIoMap);
GLSLANG_EXPORT void setFlattenUniformArrays(bool flatten);
@@ -512,6 +518,9 @@ public:
// 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.
@@ -703,6 +712,9 @@ protected:
// 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/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index f9680dd6..1d975464 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -233,8 +233,10 @@ INSTANTIATE_TEST_SUITE_P(
"precise_struct_block.vert",
"maxClipDistances.vert",
"findFunction.frag",
+ "noMatchingFunction.frag",
"constantUnaryConversion.comp",
"xfbUnsizedArray.error.vert",
+ "xfbUnsizedArray.error.tese",
"glsl.140.layoutOffset.error.vert",
"glsl.430.layoutOffset.error.vert",
"glsl.450.subgroup.frag",
@@ -284,9 +286,16 @@ INSTANTIATE_TEST_SUITE_P(
"textureoffset_sampler2darrayshadow.vert",
"atomicAdd.comp",
"GL_ARB_gpu_shader5.u2i.vert",
+ "textureQueryLOD.frag",
"atomicCounterARBOps.vert",
"GL_EXT_shader_integer_mix.vert",
"GL_ARB_draw_instanced.vert",
+ "GL_ARB_fragment_coord_conventions.vert",
+ "BestMatchFunction.vert",
+ "EndStreamPrimitive.geom",
+ "floatBitsToInt.vert",
+ "coord_conventions.frag",
+ "gl_FragCoord.frag"
})),
FileNameAsCustomTestSuffix
);
diff --git a/gtests/GlslMapIO.FromFile.cpp b/gtests/GlslMapIO.FromFile.cpp
index 574e905f..aabb4ae2 100644
--- a/gtests/GlslMapIO.FromFile.cpp
+++ b/gtests/GlslMapIO.FromFile.cpp
@@ -109,7 +109,52 @@ 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 :
+ std::numeric_limits<unsigned int>::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 != std::numeric_limits<unsigned int>::max()) {
+ 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 (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 != std::numeric_limits<unsigned int>::max()) {
+ 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 +340,10 @@ INSTANTIATE_TEST_SUITE_P(
::testing::ValuesIn(std::vector<IoMapData>({
{{"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},
}))
@@ -303,4 +352,4 @@ INSTANTIATE_TEST_SUITE_P(
} // anonymous namespace
} // namespace glslangtest
-#endif \ No newline at end of file
+#endif
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 5e1cbdae..519be254 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -59,6 +59,7 @@ std::string FileNameAsCustomTestSuffix(
using HlslCompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
using HlslVulkan1_1CompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslSpv1_6CompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
using HlslLegalizeTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
using HlslDebugTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
@@ -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::EShTargetVulkan_1_3, glslang::EShTargetSpv_1_6,
+ Target::BothASTAndSpv, true, GetParam().entryPoint);
+}
+
TEST_P(HlslCompileAndFlattenTest, FromFile)
{
loadFileCompileFlattenUniformsAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
@@ -385,6 +393,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"},
@@ -451,6 +460,16 @@ INSTANTIATE_TEST_SUITE_P(
// clang-format off
INSTANTIATE_TEST_SUITE_P(
+ ToSpirv, HlslSpv1_6CompileTest,
+ ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+ {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"}
+ }),
+ FileNameAsCustomTestSuffix
+);
+// clang-format on
+
+// clang-format off
+INSTANTIATE_TEST_SUITE_P(
ToSpirv, HlslCompileAndFlattenTest,
::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
{"hlsl.array.flatten.frag", "main"},
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index ef117640..db4ac268 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<std::string>>;
using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
using CompileToSpirv14Test = GlslangTest<::testing::TestWithParam<std::string>>;
+using CompileToSpirv16Test = GlslangTest<::testing::TestWithParam<std::string>>;
using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
using VulkanSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
using OpenGLSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
@@ -122,6 +123,13 @@ TEST_P(CompileToSpirv14Test, FromFile)
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.
TEST_P(CompileOpenGLToSpirvTest, FromFile)
@@ -365,7 +373,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",
@@ -373,6 +380,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",
@@ -520,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",
@@ -623,6 +632,18 @@ INSTANTIATE_TEST_SUITE_P(
// clang-format off
INSTANTIATE_TEST_SUITE_P(
+ Glsl, CompileToSpirv16Test,
+ ::testing::ValuesIn(std::vector<std::string>({
+ "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,
::testing::ValuesIn(std::vector<IoMapData>{
{ "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, 30, true, false },
diff --git a/gtests/VkRelaxed.FromFile.cpp b/gtests/VkRelaxed.FromFile.cpp
index 777134d9..96cd3cf6 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<vkRelaxedData>({
{{"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"} } },
diff --git a/known_good.json b/known_good.json
index bed5dd80..f87405e2 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" : "b3c1790632737f6be2c0e1c2ea5bd844da9f17a9"
},
{
"name" : "spirv-tools/external/spirv-headers",
"site" : "github",
"subrepo" : "KhronosGroup/SPIRV-Headers",
"subdir" : "External/spirv-tools/external/spirv-headers",
- "commit" : "29817199b7069bac971e5365d180295d4b077ebe"
+ "commit" : "4995a2f2723c401eb0ea3e10c81298906bf1422b"
}
]
}
diff --git a/license-checker.cfg b/license-checker.cfg
index 409f18ef..51ce2762 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",
diff --git a/update_glslang_sources.py b/update_glslang_sources.py
index 65be2f6a..20f303ba 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.
#