diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index bf8c572603..0000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,108 +0,0 @@ -# Windows Build Configuration for AppVeyor -# http://www.appveyor.com/docs/appveyor-yml - -# build version format -version: "{build}" - -os: Visual Studio 2015 - -platform: - - x64 - -configuration: - - Debug - - Release - -branches: - only: - - master - -# changes to these files don't need to trigger testing -skip_commits: - files: - - README.md - - README-spirv-remap.txt - - LICENSE.txt - - CODE_OF_CONDUCT.md - - BUILD.* - - WORKSPACE - - kokoro/* - - make-revision - - Android.mk - - _config.yml - -# Travis advances the master-tot tag to current top of the tree after -# each push into the master branch, because it relies on that tag to -# upload build artifacts to the master-tot release. This will cause -# double testing for each push on Appveyor: one for the push, one for -# the tag advance. Disable testing tags. -skip_tags: true - -clone_depth: 5 - -matrix: - fast_finish: true # Show final status immediately if a test fails. - -# scripts that run after cloning repository -install: - - C:/Python27/python.exe update_glslang_sources.py - - set PATH=C:\ninja;C:\Python36;%PATH% - - git clone https://github.com/google/googletest.git External/googletest - -build: - parallel: true # enable MSBuild parallel builds - verbosity: minimal - -build_script: - - mkdir build && cd build - - cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX=install .. - - cmake --build . --config %CONFIGURATION% --target install - -test_script: - - ctest -C %CONFIGURATION% --output-on-failure - - cd ../Test && bash runtests - - cd ../build - -after_test: - # For debug build, the generated dll has a postfix "d" in its name. - - ps: >- - If ($env:configuration -Match "Debug") { - $env:SUFFIX="d" - } Else { - $env:SUFFIX="" - } - - cd install - # Zip all glslang artifacts for uploading and deploying - - 7z a glslang-master-windows-"%PLATFORM%"-"%CONFIGURATION%".zip - bin\glslangValidator.exe - bin\spirv-remap.exe - include\glslang\* - lib\GenericCodeGen%SUFFIX%.lib - lib\glslang%SUFFIX%.lib - lib\glslang-default-resource-limits%SUFFIX%.lib - lib\HLSL%SUFFIX%.lib - lib\MachineIndependent%SUFFIX%.lib - lib\OGLCompiler%SUFFIX%.lib - lib\OSDependent%SUFFIX%.lib - lib\SPIRV%SUFFIX%.lib - lib\SPVRemapper%SUFFIX%.lib - lib\SPIRV-Tools%SUFFIX%.lib - lib\SPIRV-Tools-opt%SUFFIX%.lib - -artifacts: - - path: build\install\*.zip - name: artifacts-zip - -deploy: - - provider: GitHub - auth_token: - secure: YglcSYdl0TylEa59H4K6lylBEDr586NAt2EMgZquSo+iuPrwgZQuJLPCoihSm9y6 - release: master-tot - description: "Continuous build of the latest master branch by Appveyor and Travis CI" - artifact: artifacts-zip - draft: false - prerelease: false - force_update: true - on: - branch: master - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..2190055972 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,22 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +version: 2 +updates: + - package-ecosystem: "github-actions" # Necessary to update action hashes + directory: "/" + schedule: + interval: "weekly" + # Allow up to 3 opened pull requests for github-actions versions + open-pull-requests-limit: 3 diff --git a/.github/workflows/continuous_deployment.yml b/.github/workflows/continuous_deployment.yml index 86f439db8a..53d84084e5 100644 --- a/.github/workflows/continuous_deployment.yml +++ b/.github/workflows/continuous_deployment.yml @@ -1,9 +1,3 @@ -# 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 @@ -20,11 +14,26 @@ on: workflow_dispatch: push: branches: - - master + - main + paths-ignore: + - 'README.md' + - 'README-spirv-remap.txt' + - 'LICENSE.txt' + - 'CODE_OF_CONDUCT.md' + - 'BUILD.*' + - 'WORKSPACE' + - 'kokoro/*' + - 'make-revision' + - 'Android.mk' + - '_config.yml' + +permissions: read-all jobs: linux: runs-on: ${{matrix.os.genus}} + permissions: + contents: write strategy: fail-fast: false matrix: @@ -32,29 +41,16 @@ jobs: compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}] cmake_build_type: [Debug, Release] steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 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 + - run: ./update_glslang_sources.py - name: Build env: CC: ${{matrix.compiler.cc}} @@ -66,33 +62,32 @@ jobs: - name: Test run: | cd build - ctest --output-on-failure && - cd ../Test && ./runtests + ctest --output-on-failure - name: Zip if: ${{ matrix.compiler.cc == 'clang' }} env: - ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip + ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip run: | cd build/install zip ${ARCHIVE} \ + bin/glslang \ bin/glslangValidator \ include/glslang/* \ - lib/libGenericCodeGen${SUFFIX}.a \ - lib/libglslang${SUFFIX}.a \ - lib/libglslang-default-resource-limits${SUFFIX}.a \ - lib/libHLSL${SUFFIX}.a \ - lib/libMachineIndependent${SUFFIX}.a \ - lib/libOGLCompiler${SUFFIX}.a \ - lib/libOSDependent${SUFFIX}.a \ - lib/libSPIRV${SUFFIX}.a \ - lib/libSPVRemapper${SUFFIX}.a \ - lib/libSPIRV-Tools${SUFFIX}.a \ - lib/libSPIRV-Tools-opt${SUFFIX}.a + include/glslang/**/* \ + lib/libGenericCodeGen.a \ + lib/libglslang.a \ + lib/libglslang-default-resource-limits.a \ + lib/libMachineIndependent.a \ + lib/libOSDependent.a \ + lib/libSPIRV.a \ + lib/libSPVRemapper.a \ + lib/libSPIRV-Tools.a \ + lib/libSPIRV-Tools-opt.a - name: Deploy if: ${{ matrix.compiler.cc == 'clang' }} env: - ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip - uses: actions/github-script@v5 + ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | const script = require('.github/workflows/deploy.js') @@ -100,32 +95,21 @@ jobs: macos: runs-on: ${{matrix.os.genus}} + permissions: + contents: write strategy: fail-fast: false matrix: - os: [{genus: macos-10.15, family: osx}] + os: [{genus: macos-12, family: osx}] compiler: [{cc: clang, cxx: clang++}] cmake_build_type: [Debug, Release] steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 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 + - run: ./update_glslang_sources.py - name: Build env: CC: ${{matrix.compiler.cc}} @@ -137,31 +121,103 @@ jobs: - name: Test run: | cd build - ctest --output-on-failure && - cd ../Test && ./runtests + ctest --output-on-failure - name: Zip env: - ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip + ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip run: | cd build/install zip ${ARCHIVE} \ + bin/glslang \ bin/glslangValidator \ include/glslang/* \ - lib/libGenericCodeGen${SUFFIX}.a \ - lib/libglslang${SUFFIX}.a \ - lib/libglslang-default-resource-limits${SUFFIX}.a \ - lib/libHLSL${SUFFIX}.a \ - lib/libMachineIndependent${SUFFIX}.a \ - lib/libOGLCompiler${SUFFIX}.a \ - lib/libOSDependent${SUFFIX}.a \ - lib/libSPIRV${SUFFIX}.a \ - lib/libSPVRemapper${SUFFIX}.a \ - lib/libSPIRV-Tools${SUFFIX}.a \ - lib/libSPIRV-Tools-opt${SUFFIX}.a + include/glslang/**/* \ + lib/libGenericCodeGen.a \ + lib/libglslang.a \ + lib/libglslang-default-resource-limits.a \ + lib/libMachineIndependent.a \ + lib/libOSDependent.a \ + lib/libSPIRV.a \ + lib/libSPVRemapper.a \ + lib/libSPIRV-Tools.a \ + lib/libSPIRV-Tools-opt.a + - name: Deploy + env: + ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + const script = require('.github/workflows/deploy.js') + await script({github, context, core}) + + windows: + runs-on: ${{matrix.os.genus}} + permissions: + contents: write + strategy: + fail-fast: false + matrix: + os: [{genus: windows-2019, family: windows}] + cmake_build_type: [Debug, Release] + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + with: + python-version: '3.7' + - run: python update_glslang_sources.py + - name: Build + run: | + cmake -S. -Bbuild -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX="$PWD/build/install" + cmake --build build --config ${{matrix.cmake_build_type}} --target install + - name: Test + run: | + cd build + ctest -C ${{matrix.cmake_build_type}} --output-on-failure + - name: Zip + if: ${{ matrix.cmake_build_type == 'Debug' }} + env: + ARCHIVE: glslang-master-${{matrix.os.family}}-Debug.zip + run: | + cd build/install + 7z a ${{env.ARCHIVE}} ` + bin/glslang.exe ` + bin/glslangValidator.exe ` + bin/spirv-remap.exe ` + include/glslang/* ` + lib/GenericCodeGend.lib ` + lib/glslangd.lib ` + lib/glslang-default-resource-limitsd.lib ` + lib/MachineIndependentd.lib ` + lib/OSDependentd.lib ` + lib/SPIRVd.lib ` + lib/SPVRemapperd.lib ` + lib/SPIRV-Toolsd.lib ` + lib/SPIRV-Tools-optd.lib + - name: Zip + if: ${{ matrix.cmake_build_type == 'Release' }} + env: + ARCHIVE: glslang-master-${{matrix.os.family}}-Release.zip + run: | + cd build/install + 7z a ${{env.ARCHIVE}} ` + bin/glslang.exe ` + bin/glslangValidator.exe ` + bin/spirv-remap.exe ` + include/glslang/* ` + lib/GenericCodeGen.lib ` + lib/glslang.lib ` + lib/glslang-default-resource-limits.lib ` + lib/MachineIndependent.lib ` + lib/OSDependent.lib ` + lib/SPIRV.lib ` + lib/SPVRemapper.lib ` + lib/SPIRV-Tools.lib ` + lib/SPIRV-Tools-opt.lib - name: Deploy env: ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip - uses: actions/github-script@v5 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | const script = require('.github/workflows/deploy.js') diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index feec0dc227..9cfd998b4c 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -1,157 +1,312 @@ -# 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 + workflow_dispatch: + pull_request: + branches: + - main + +permissions: read-all 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 + linux: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}] + cmake_build_type: [Debug, Release] + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + with: + python-version: '3.7' + - name: Setup ccache + uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14 + with: + key: ubuntu-22-${{ matrix.cmake_build_type }}-${{ matrix.compiler.cc }}-${{matrix.compiler.cxx}} + - run: ./update_glslang_sources.py + - name: Configure + run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON + env: + CC: ${{matrix.compiler.cc}} + CXX: ${{matrix.compiler.cxx}} + CMAKE_GENERATOR: Ninja + CMAKE_C_COMPILER_LAUNCHER: ccache + CMAKE_CXX_COMPILER_LAUNCHER: ccache + - name: Build + run: cmake --build build + - name: Install + run: cmake --install build --prefix build/install + - name: Test + run: ctest --output-on-failure --test-dir build + - name: Check known validation failure list + run: grep -l 'Validation failed' Test/baseResults/* | sort -fd | diff -u Test/baseResults/validation_fails.txt - + + linux-shared: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}] + cmake_build_type: [Release] + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + with: + python-version: '3.7' + - name: Setup ccache + uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14 + with: + key: ubuntu-22-${{ matrix.cmake_build_type }}-${{ matrix.compiler.cc }}-${{matrix.compiler.cxx}} + - run: ./update_glslang_sources.py + - name: Configure + run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON -DBUILD_SHARED_LIBS=ON + env: + CC: ${{matrix.compiler.cc}} + CXX: ${{matrix.compiler.cxx}} + CMAKE_GENERATOR: Ninja + CMAKE_C_COMPILER_LAUNCHER: ccache + CMAKE_CXX_COMPILER_LAUNCHER: ccache + - name: Build + run: cmake --build build + - name: Install + run: cmake --install build --prefix build/install + - name: Test + run: ctest --output-on-failure --test-dir build + + linux-asan: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + compiler: [{cc: gcc, cxx: g++}] + cmake_build_type: [Debug] + flags: ['-fsanitize=address', '-fsanitize=thread', '-fsanitize=undefined'] + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + with: + python-version: '3.7' + - name: Setup ccache + uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14 + with: + key: ubuntu-22-${{ matrix.cmake_build_type }}-${{ matrix.compiler.cc }}-${{matrix.compiler.cxx}}-${{matrix.flags}} + # This is to combat a bug when using 6.6 linux kernels with thread/address sanitizer + # https://github.com/google/sanitizers/issues/1716 + - run: sudo sysctl vm.mmap_rnd_bits=28 + - run: ./update_glslang_sources.py + - name: Configure + run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} -D GLSLANG_TESTS=ON + env: + CC: ${{matrix.compiler.cc}} + CXX: ${{matrix.compiler.cxx}} + CMAKE_GENERATOR: Ninja + CMAKE_C_COMPILER_LAUNCHER: ccache + CMAKE_CXX_COMPILER_LAUNCHER: ccache + CFLAGS: ${{matrix.flags}} + CXXFLAGS: ${{matrix.flags}} + LDFLAGS: ${{matrix.flags}} + - name: Build + run: cmake --build build + - name: Install + run: cmake --install build --prefix build/install + - name: Test + env: + UBSAN_OPTIONS: 'halt_on_error=1:print_stacktrace=1' + run: ctest --output-on-failure --test-dir build + + # Ensure we can compile/run on an older distro + linux_min: + name: Linux Backcompat + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + with: + python-version: '3.7' + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + with: + cmakeVersion: 3.17.2 + - name: Setup ccache + uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14 + with: + key: linux_backcompat + - run: ./update_glslang_sources.py + - name: Configure + run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Release -D GLSLANG_TESTS=ON + env: + CMAKE_C_COMPILER_LAUNCHER: ccache + CMAKE_CXX_COMPILER_LAUNCHER: ccache + - name: Build + run: cmake --build build + - name: Install + run: cmake --install build --prefix build/install + - name: Test + run: ctest --output-on-failure --test-dir build + + macos: + runs-on: ${{matrix.os}} + strategy: + fail-fast: false + matrix: + os: [macos-14, macos-13] + compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}] + cmake_build_type: [Debug, Release] + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - run: ./update_glslang_sources.py + - run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -G Ninja -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON + env: + CC: ${{matrix.compiler.cc}} + CXX: ${{matrix.compiler.cxx}} + - run: cmake --build build + - run: cmake --install build --prefix build/install + - run: ctest --output-on-failure --test-dir build + + macos-shared: + runs-on: ${{matrix.os}} + strategy: + fail-fast: false + matrix: + os: [macos-14] + compiler: [{cc: clang, cxx: clang++}] + cmake_build_type: [Release] + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - run: ./update_glslang_sources.py + - run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -G Ninja -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON -DBUILD_SHARED_LIBS=ON + env: + CC: ${{matrix.compiler.cc}} + CXX: ${{matrix.compiler.cxx}} + - run: cmake --build build + - run: cmake --install build --prefix build/install + - run: ctest --output-on-failure --test-dir build + + windows: + runs-on: ${{matrix.os.genus}} + permissions: + contents: write + strategy: + fail-fast: false + matrix: + os: [{genus: windows-2019, family: windows}] + cmake_build_type: [Debug, Release] + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + with: + python-version: '3.7' + - run: python update_glslang_sources.py + - name: Build + run: | + cmake -S. -Bbuild -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX="$PWD/build/install" -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON + cmake --build build --config ${{matrix.cmake_build_type}} --target install + - name: Test + run: ctest -C ${{matrix.cmake_build_type}} --output-on-failure --test-dir build + + windows-shared: + runs-on: ${{matrix.os.genus}} + permissions: + contents: write + strategy: + fail-fast: false + matrix: + os: [{genus: windows-2019, family: windows}] + cmake_build_type: [Debug, Release] + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + with: + python-version: '3.7' + - run: python update_glslang_sources.py + - name: Build + run: | + cmake -S. -Bbuild -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX="$PWD/build/install" -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON -DBUILD_SHARED_LIBS=ON + cmake --build build --config ${{matrix.cmake_build_type}} --target install + # disabled until we figure out DLL issues. + # - name: Test + # run: ctest -C ${{matrix.cmake_build_type}} --output-on-failure --test-dir build + + iOS: + runs-on: macos-13 + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - name: Setup ccache + uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14 + with: + key: IOS + - run: ./update_glslang_sources.py + # NOTE: The MacOS SDK ships universal binaries. CI should reflect this. + - name: Configure Universal Binary for iOS + run: | + cmake -S . -B build \ + -D CMAKE_BUILD_TYPE=Debug \ + -D CMAKE_SYSTEM_NAME=iOS \ + "-D CMAKE_OSX_ARCHITECTURES=arm64;x86_64" \ + -G Ninja + env: + CMAKE_C_COMPILER_LAUNCHER: ccache + CMAKE_CXX_COMPILER_LAUNCHER: ccache + - run: cmake --build build + - run: cmake --install build --prefix /tmp - 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: ubuntu-22.04 + strategy: + matrix: + # Android NDK currently offers 2 different toolchains. + # Test both to ensure we are compatible with either approach. + LEGACY: [ON, OFF] + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - name: Setup ccache + uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14 + with: + key: android-${{ matrix.LEGACY }} + - run: ./update_glslang_sources.py + - name: Configure for Android + run: | + cmake -S . -B build/ --toolchain $ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \ + -D CMAKE_BUILD_TYPE=Release \ + -D ANDROID_ABI=armeabi-v7a \ + -D ANDROID_USE_LEGACY_TOOLCHAIN_FILE=${{ matrix.LEGACY }} \ + -G Ninja + env: + CMAKE_C_COMPILER_LAUNCHER: ccache + CMAKE_CXX_COMPILER_LAUNCHER: ccache + - run: cmake --build build/ + - run: cmake --install build/ --prefix /tmp - 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 + emscripten: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + with: + python-version: '3.7' + - uses: lukka/get-cmake@070a0507a7abe157ef918deec391da1be197d2d1 # v3.30.3 + - name: Setup ccache + uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14 + with: + key: ubuntu-emscripten + - uses: mymindstorm/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14 + - name: Update Glslang Sources + run: ./update_glslang_sources.py + - name: Configure + run: emcmake cmake -GNinja -Bbuild/web -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_JS=ON -DENABLE_OPT=OFF + env: + CMAKE_GENERATOR: Ninja + CMAKE_C_COMPILER_LAUNCHER: ccache + CMAKE_CXX_COMPILER_LAUNCHER: ccache + - name: Build + run: cmake --build build/web diff --git a/.github/workflows/deploy.js b/.github/workflows/deploy.js index 82ebb1bd9e..3f1b7e4b4e 100644 --- a/.github/workflows/deploy.js +++ b/.github/workflows/deploy.js @@ -1,73 +1,73 @@ module.exports = async ({github, context, core}) => { try { - await github.rest.git.updateRef({ - owner: context.repo.owner, - repo: context.repo.repo, - ref: 'tags/master-tot', - sha: context.sha - }) + await github.rest.git.updateRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: 'tags/main-tot', + sha: context.sha + }) } catch (error) { - core.setFailed(`upload master-tot tag; ${error.name}; ${error.message}`) + core.setFailed(`upload main-tot tag; ${error.name}; ${error.message}`) } let release try { - release = await github.rest.repos.getReleaseByTag({ - owner: context.repo.owner, - repo: context.repo.repo, - tag: 'master-tot' - }) + release = await github.rest.repos.getReleaseByTag({ + owner: context.repo.owner, + repo: context.repo.repo, + tag: 'main-tot' + }) } catch (error) { - core.setFailed(`get the master release; ${error.name}; ${error.message}`) + core.setFailed(`get the main release; ${error.name}; ${error.message}`) } try { - await github.rest.repos.updateRelease({ - owner: context.repo.owner, - repo: context.repo.repo, - release_id: release.data.id - }) + await github.rest.repos.updateRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id + }) } catch (error) { - core.setFailed(`update the master release; ${error.name}; ${error.message}`) + core.setFailed(`update the main release; ${error.name}; ${error.message}`) } let release_assets try { - release_assets = await github.rest.repos.listReleaseAssets({ - owner: context.repo.owner, - repo: context.repo.repo, - release_id: release.data.id - }) + release_assets = await github.rest.repos.listReleaseAssets({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id + }) } catch (error) { - core.setFailed(`list release assets; ${error.name}; ${error.message}`) + core.setFailed(`list release assets; ${error.name}; ${error.message}`) } const { ARCHIVE } = process.env for (const release_asset of release_assets.data) { - if (release_asset.name === `${ ARCHIVE }`) { - try { - await github.rest.repos.deleteReleaseAsset({ - owner: context.repo.owner, - repo: context.repo.repo, - asset_id: release_asset.id - }) - } catch (error) { - core.setFailed(`delete ${ ARCHIVE }; ${error.name}; ${error.message}`) - } - } + if (release_asset.name === `${ ARCHIVE }`) { + try { + await github.rest.repos.deleteReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + asset_id: release_asset.id + }) + } catch (error) { + core.setFailed(`delete ${ ARCHIVE }; ${error.name}; ${error.message}`) + } + } } try { - const asset_path = `./build/install/${ ARCHIVE }` - const fs = require("fs") - await github.rest.repos.uploadReleaseAsset({ - owner: context.repo.owner, - repo: context.repo.repo, - release_id: release.data.id, - name: `${ ARCHIVE }`, - data: fs.readFileSync(asset_path) - }) + const asset_path = `./build/install/${ ARCHIVE }` + const fs = require("fs") + await github.rest.repos.uploadReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id, + name: `${ ARCHIVE }`, + data: fs.readFileSync(asset_path) + }) } catch (error) { - core.setFailed(`upload ${ ARCHIVE }; ${error.name}; ${error.message}`) + core.setFailed(`upload ${ ARCHIVE }; ${error.name}; ${error.message}`) } } diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml new file mode 100644 index 0000000000..2419a345e0 --- /dev/null +++ b/.github/workflows/scorecard.yml @@ -0,0 +1,53 @@ +name: Scorecard supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + schedule: + - cron: '36 17 * * 5' + push: + branches: [ "main" ] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + security-events: write # to upload the results to code-scanning dashboard + id-token: write # to publish results and get a badge + + steps: + - name: "Checkout code" + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + with: + results_file: results.sarif + results_format: sarif + # To enable Branch-Protection uncomment the `repo_token` line below + # To create the Fine-grained PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-fine-grained-pat-optional. + # repo_token: ${{ secrets.SCORECARD_TOKEN }} + publish_results: true # allows the repo to include the Scorecard badge + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@294a9d92911152fe08befb9ec03e240add280cb3 # v3.26.8 + with: + sarif_file: results.sarif diff --git a/.gitignore b/.gitignore index ab25cec2de..732b345973 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ Test/localResults/ External/googletest External/spirv-tools out/ +CMakeUserPresets.json # GN generated files .cipd/ @@ -18,3 +19,7 @@ out/ third_party/ buildtools/ tools/ + +# Random OS stuff +.DS_Store +._* diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000000..946b24095f --- /dev/null +++ b/.mailmap @@ -0,0 +1,3 @@ +Faith Ekstrand +Faith Ekstrand +Faith Ekstrand diff --git a/Android.mk b/Android.mk index c9b221f1a9..3cd88c829a 100644 --- a/Android.mk +++ b/Android.mk @@ -1,4 +1,4 @@ -# Copyright (C) 2020 The Khronos Group Inc. +# Copyright (C) 2020-2023 The Khronos Group Inc. # # All rights reserved. # @@ -53,36 +53,14 @@ $(eval $(call gen_glslang_build_info_h)) GLSLANG_OS_FLAGS := -DGLSLANG_OSINCLUDE_UNIX # AMD and NV extensions are turned on by default in upstream Glslang. -GLSLANG_DEFINES:= -DAMD_EXTENSIONS -DNV_EXTENSIONS -DENABLE_HLSL $(GLSLANG_OS_FLAGS) +GLSLANG_DEFINES:= -DENABLE_HLSL $(GLSLANG_OS_FLAGS) include $(CLEAR_VARS) LOCAL_MODULE:=OSDependent -LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) +LOCAL_CXXFLAGS:=-std=c++17 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) -LOCAL_SRC_FILES:=glslang/OSDependent/Unix/ossource.cpp -LOCAL_C_INCLUDES:=$(LOCAL_PATH) $(LOCAL_PATH)/glslang/OSDependent/Unix/ -LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/glslang/OSDependent/Unix/ -include $(BUILD_STATIC_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE:=OGLCompiler -LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) -LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) -LOCAL_SRC_FILES:=OGLCompilersDLL/InitializeDll.cpp -LOCAL_C_INCLUDES:=$(LOCAL_PATH)/OGLCompiler -LOCAL_STATIC_LIBRARIES:=OSDependent -include $(BUILD_STATIC_LIBRARY) - -# Build the stubbed HLSL library. -# The HLSL source is now directly referenced by the glslang static library -# instead. -include $(CLEAR_VARS) -LOCAL_MODULE:=HLSL -LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) -LOCAL_SRC_FILES:= \ - hlsl/stub.cpp -LOCAL_C_INCLUDES:=$(LOCAL_PATH) \ - $(LOCAL_PATH)/glslang/HLSL +LOCAL_SRC_FILES:=glslang/stub.cpp +LOCAL_C_INCLUDES:=$(LOCAL_PATH) include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) @@ -93,9 +71,11 @@ $(LOCAL_PATH)/glslang/MachineIndependent/ShaderLang.cpp: \ $(GLSLANG_BUILD_INFO_H) LOCAL_MODULE:=glslang -LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) -LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) +LOCAL_CXXFLAGS:=-std=c++17 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) +LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) \ + $(LOCAL_PATH)/glslang/OSDependent/Unix LOCAL_SRC_FILES:= \ + glslang/CInterface/glslang_c_interface.cpp \ glslang/GenericCodeGen/CodeGen.cpp \ glslang/GenericCodeGen/Link.cpp \ glslang/HLSL/hlslAttributes.cpp \ @@ -132,12 +112,24 @@ LOCAL_SRC_FILES:= \ glslang/MachineIndependent/preprocessor/PpContext.cpp \ glslang/MachineIndependent/preprocessor/Pp.cpp \ glslang/MachineIndependent/preprocessor/PpScanner.cpp \ - glslang/MachineIndependent/preprocessor/PpTokens.cpp + glslang/MachineIndependent/preprocessor/PpTokens.cpp \ + glslang/OSDependent/Unix/ossource.cpp \ + SPIRV/CInterface/spirv_c_interface.cpp \ + SPIRV/GlslangToSpv.cpp \ + SPIRV/InReadableOrder.cpp \ + SPIRV/Logger.cpp \ + SPIRV/SPVRemapper.cpp \ + SPIRV/SpvBuilder.cpp \ + SPIRV/SpvPostProcess.cpp \ + SPIRV/SpvTools.cpp \ + SPIRV/disassemble.cpp \ + SPIRV/doc.cpp LOCAL_C_INCLUDES:=$(LOCAL_PATH) \ $(LOCAL_PATH)/glslang/MachineIndependent \ + $(LOCAL_PATH)/glslang/OSDependent/Unix \ + $(LOCAL_PATH)/SPIRV \ $(GLSLANG_GENERATED_INCLUDEDIR) \ $(GLSLANG_OUT_PATH) -LOCAL_STATIC_LIBRARIES:=OSDependent OGLCompiler HLSL include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) @@ -147,20 +139,8 @@ $(LOCAL_PATH)/SPIRV/GlslangToSpv.cpp: \ $(GLSLANG_BUILD_INFO_H) LOCAL_MODULE:=SPIRV -LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti -Werror $(GLSLANG_DEFINES) -LOCAL_SRC_FILES:= \ - SPIRV/GlslangToSpv.cpp \ - SPIRV/InReadableOrder.cpp \ - SPIRV/Logger.cpp \ - SPIRV/SPVRemapper.cpp \ - SPIRV/SpvBuilder.cpp \ - SPIRV/SpvPostProcess.cpp \ - SPIRV/SpvTools.cpp \ - SPIRV/disassemble.cpp \ - SPIRV/doc.cpp -LOCAL_C_INCLUDES:=$(LOCAL_PATH) \ - $(LOCAL_PATH)/glslang/SPIRV \ - $(GLSLANG_GENERATED_INCLUDEDIR) -LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/glslang/SPIRV -LOCAL_STATIC_LIBRARIES:=glslang +LOCAL_CXXFLAGS:=-std=c++17 -fno-exceptions -fno-rtti -Werror $(GLSLANG_DEFINES) +LOCAL_SRC_FILES:=glslang/stub.cpp +LOCAL_C_INCLUDES:=$(LOCAL_PATH) +LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) include $(BUILD_STATIC_LIBRARY) diff --git a/BUILD.bazel b/BUILD.bazel deleted file mode 100644 index 1115b7de82..0000000000 --- a/BUILD.bazel +++ /dev/null @@ -1,309 +0,0 @@ -# Copyright (C) 2020 The Khronos Group Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of The Khronos Group Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -package( - default_visibility = ["//visibility:public"], -) - -# Description: -# -# Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator. - -licenses(["notice"]) - -exports_files(["LICENSE"]) - -# Build information generation script -py_binary( - name = "build_info", - srcs = ["build_info.py"], -) - -py_binary( - name = "gen_extension_headers", - srcs = ["gen_extension_headers.py"], -) - -genrule( - name = "gen_build_info_h", - srcs = ["CHANGES.md", "build_info.h.tmpl"], - outs = ["glslang/build_info.h"], - cmd_bash = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)", - cmd_bat = "for %F in ($(location CHANGES.md)) do $(location build_info) %~dpF -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)", - tools = [":build_info"], -) - -genrule( - name = "gen_extension_headers_h", - srcs = ["glslang/ExtensionHeaders", "gen_extension_headers.py"], - outs = ["glslang/glsl_intrinsic_header.h"], - cmd_bash = "$(location gen_extension_headers) -i $(location glslang/ExtensionHeaders) -o $(location glslang/glsl_intrinsic_header.h)", - tools = [":gen_extension_headers"], -) - -COMMON_COPTS = select({ - "@bazel_tools//src/conditions:windows": [""], - "//conditions:default": [ - "-Wall", - "-Wuninitialized", - "-Wunused", - "-Wunused-local-typedefs", - "-Wunused-parameter", - "-Wunused-value", - "-Wunused-variable", - "-Wno-reorder", - "-std=c++11", - "-fvisibility=hidden", - "-fvisibility-inlines-hidden", - "-fno-exceptions", - "-fno-rtti", - ], -}) - -cc_library( - name = "glslang", - srcs = glob( - [ - "glslang/GenericCodeGen/*.cpp", - "glslang/HLSL/*.cpp", - "glslang/MachineIndependent/*.cpp", - "glslang/MachineIndependent/preprocessor/*.cpp", - ], - exclude = [ - "glslang/HLSL/pch.h", - "glslang/MachineIndependent/pch.h", - ], - ) + [ - "OGLCompilersDLL/InitializeDll.cpp", - ] + select({ - "@bazel_tools//src/conditions:windows": - ["glslang/OSDependent/Windows/ossource.cpp"], - "//conditions:default": - ["glslang/OSDependent/Unix/ossource.cpp"], - }), - hdrs = glob([ - "glslang/HLSL/*.h", - "glslang/Include/*.h", - "glslang/MachineIndependent/*.h", - "glslang/MachineIndependent/preprocessor/*.h", - ]) + [ - "OGLCompilersDLL/InitializeDll.h", - "StandAlone/DirStackFileIncluder.h", - "glslang/OSDependent/osinclude.h", - "glslang/Public/ShaderLang.h", - ":gen_build_info_h", - ], - copts = COMMON_COPTS, - defines = [ - "AMD_EXTENSIONS", - "ENABLE_HLSL=0", - "ENABLE_OPT=0", - "NV_EXTENSIONS", - ], - linkopts = select({ - "@bazel_tools//src/conditions:windows": [""], - "//conditions:default": ["-lm", "-lpthread"], - }), - linkstatic = 1, -) - -genrule( - name = "export_spirv_headers", - srcs = [ - "SPIRV/GLSL.ext.AMD.h", - "SPIRV/GLSL.ext.EXT.h", - "SPIRV/GLSL.ext.KHR.h", - "SPIRV/GLSL.ext.NV.h", - "SPIRV/GLSL.std.450.h", - "SPIRV/NonSemanticDebugPrintf.h", - "SPIRV/spirv.hpp", - ], - outs = [ - "include/SPIRV/GLSL.ext.AMD.h", - "include/SPIRV/GLSL.ext.EXT.h", - "include/SPIRV/GLSL.ext.KHR.h", - "include/SPIRV/GLSL.ext.NV.h", - "include/SPIRV/GLSL.std.450.h", - "include/SPIRV/NonSemanticDebugPrintf.h", - "include/SPIRV/spirv.hpp", - ], - cmd_bash = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/", - cmd_bat = "(if not exist $(@D)\\include\\SPIRV mkdir $(@D)\\include\\SPIRV) && (for %S in ($(SRCS)) do @xcopy /q %S $(@D)\\include\\SPIRV\\ >NUL)", -) - -cc_library( - name = "SPIRV_headers", - hdrs = [":export_spirv_headers"], - copts = COMMON_COPTS, - includes = [ - "include", - "include/SPIRV", - ], - linkstatic = 1, -) - -cc_library( - name = "SPIRV", - srcs = glob( - ["SPIRV/*.cpp"], - exclude = [ - "SPIRV/SpvTools.cpp", - ], - ), - hdrs = [ - "SPIRV/GlslangToSpv.h", - "SPIRV/Logger.h", - "SPIRV/SPVRemapper.h", - "SPIRV/SpvBuilder.h", - "SPIRV/SpvTools.h", - "SPIRV/bitutils.h", - "SPIRV/disassemble.h", - "SPIRV/doc.h", - "SPIRV/hex_float.h", - "SPIRV/spvIR.h", - ], - copts = COMMON_COPTS, - includes = ["SPIRV"], - linkopts = select({ - "@bazel_tools//src/conditions:windows": [""], - "//conditions:default": ["-lm"], - }), - linkstatic = 1, - deps = [ - ":SPIRV_headers", - ":glslang", - ], -) - -cc_library( - name = "glslang-default-resource-limits", - srcs = ["StandAlone/ResourceLimits.cpp"], - hdrs = ["StandAlone/ResourceLimits.h"], - copts = COMMON_COPTS, - linkstatic = 1, - deps = [":glslang"], -) - -cc_binary( - name = "glslangValidator", - srcs = [ - "StandAlone/StandAlone.cpp", - "StandAlone/Worklist.h", - ":glslang/glsl_intrinsic_header.h" - ], - copts = COMMON_COPTS, - deps = [ - ":SPIRV", - ":glslang", - ":glslang-default-resource-limits", - ], -) - -cc_binary( - name = "spirv-remap", - srcs = ["StandAlone/spirv-remap.cpp"], - copts = COMMON_COPTS, - deps = [ - ":SPIRV", - ":glslang", - ":glslang-default-resource-limits", - ], -) - -filegroup( - name = "test_files", - srcs = glob( - ["Test/**"], - exclude = [ - "Test/bump", - "Test/glslangValidator", - "Test/runtests", - ], - ), -) - -cc_library( - name = "glslang_test_lib", - testonly = 1, - srcs = [ - "gtests/HexFloat.cpp", - "gtests/Initializer.h", - "gtests/Settings.cpp", - "gtests/Settings.h", - "gtests/TestFixture.cpp", - "gtests/TestFixture.h", - "gtests/main.cpp", - ], - copts = COMMON_COPTS, - data = [":test_files"], - defines = select({ - # Unfortunately we can't use $(location) in cc_library at the moment. - # See https://github.com/bazelbuild/bazel/issues/1023 - # So we'll specify the path manually. - "@bazel_tools//src/conditions:windows": - ["GLSLANG_TEST_DIRECTORY='\"../../../../../Test\"'"], - "//conditions:default": - ["GLSLANG_TEST_DIRECTORY='\"Test\"'"], - }), - linkstatic = 1, - deps = [ - ":SPIRV", - ":glslang", - ":glslang-default-resource-limits", - "@com_google_googletest//:gtest", - ], -) - -GLSLANG_TESTS = glob( - ["gtests/*.FromFile.cpp"], - # Since we are not building the SPIRV-Tools dependency, the following tests - # cannot be performed. - exclude = [ - "gtests/Hlsl.FromFile.cpp", - "gtests/Spv.FromFile.cpp", - ], -) - -[cc_test( - name = test_file.replace("gtests/", "").replace(".FromFile.cpp", "") + "_test", - srcs = [test_file], - copts = COMMON_COPTS, - data = [ - ":test_files", - ], - deps = [ - ":SPIRV", - ":glslang", - ":glslang_test_lib", - ], -) for test_file in GLSLANG_TESTS] diff --git a/BUILD.gn b/BUILD.gn index 4dd0a55396..894cd95b9d 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -96,9 +96,6 @@ action("glslang_extension_headers") { } spirv_tools_dir = glslang_spirv_tools_dir -if (!defined(glslang_angle)) { - glslang_angle = false -} config("glslang_public") { include_dirs = [ "." ] @@ -120,12 +117,12 @@ template("glslang_sources_common") { } sources = [ - "OGLCompilersDLL/InitializeDll.cpp", - "OGLCompilersDLL/InitializeDll.h", "SPIRV/GLSL.ext.AMD.h", "SPIRV/GLSL.ext.EXT.h", "SPIRV/GLSL.ext.KHR.h", "SPIRV/GLSL.ext.NV.h", + "SPIRV/GLSL.ext.ARM.h", + "SPIRV/GLSL.ext.QCOM.h", "SPIRV/GLSL.std.450.h", "SPIRV/GlslangToSpv.cpp", "SPIRV/GlslangToSpv.h", @@ -133,6 +130,7 @@ template("glslang_sources_common") { "SPIRV/Logger.cpp", "SPIRV/Logger.h", "SPIRV/NonSemanticDebugPrintf.h", + "SPIRV/NonSemanticShaderDebugInfo100.h", "SPIRV/SPVRemapper.cpp", "SPIRV/SPVRemapper.h", "SPIRV/SpvBuilder.cpp", @@ -161,6 +159,7 @@ template("glslang_sources_common") { "glslang/Include/Types.h", "glslang/Include/arrays.h", "glslang/Include/intermediate.h", + "glslang/Include/visibility.h", "glslang/MachineIndependent/Constant.cpp", "glslang/MachineIndependent/InfoSink.cpp", "glslang/MachineIndependent/Initialize.cpp", @@ -236,14 +235,11 @@ template("glslang_sources_common") { ] } - defines = [] + defines = [ "ENABLE_SPIRV=1" ] if (invoker.enable_opt) { sources += [ "SPIRV/SpvTools.cpp" ] defines += [ "ENABLE_OPT=1" ] } - if (invoker.is_angle) { - defines += [ "GLSLANG_ANGLE" ] - } if (is_win) { sources += [ "glslang/OSDependent/Windows/ossource.cpp" ] @@ -292,22 +288,21 @@ template("glslang_sources_common") { } glslang_sources_common("glslang_lib_sources") { - enable_opt = !glslang_angle - enable_hlsl = !glslang_angle - is_angle = glslang_angle + enable_opt = true + enable_hlsl = true } glslang_sources_common("glslang_sources") { enable_opt = true enable_hlsl = true - is_angle = false } source_set("glslang_default_resource_limits_sources") { sources = [ - "StandAlone/ResourceLimits.cpp", - "StandAlone/ResourceLimits.h", + "glslang/ResourceLimits/ResourceLimits.cpp", + "glslang/Public/ResourceLimits.h", "glslang/Include/ResourceLimits.h", + "glslang/Include/visibility.h", ] public_configs = [ ":glslang_public" ] @@ -323,7 +318,10 @@ executable("glslang_validator") { if (!is_win) { cflags = [ "-Woverflow" ] } - defines = [ "ENABLE_OPT=1" ] + defines = [ + "ENABLE_OPT=1", + "ENABLE_SPIRV=1", + ] deps = [ ":glslang_build_info", ":glslang_default_resource_limits_sources", @@ -343,7 +341,10 @@ executable("glslang_validator") { executable("spirv-remap") { sources = [ "StandAlone/spirv-remap.cpp" ] - defines = [ "ENABLE_OPT=1" ] + defines = [ + "ENABLE_OPT=1", + "ENABLE_SPIRV=1", + ] deps = [ ":glslang_sources" ] include_dirs = [ "${spirv_tools_dir}/include" ] diff --git a/CHANGES.md b/CHANGES.md index ebab4da0c7..60a7667aa3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,253 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 15.0.0 2024-09-23 +### Breaking changes +* Explicitly export all symbols that are part of the public API and hide other symbols by default + +### Other changes +* Allow building glslang without the SPIR-V backend using the new ENABLE_SPIRV build option +* Add setResourceSetBinding method to the API +* Add interface to get the GLSL IO mapper and resolver +* Allow compute derivative modes when the workgroup dimensions are spec constants +* Improve debug location of branch/return instructions +* Silence preprocessor '#' error reporting in inactive #if/#ifdef/#elif/#else blocks +* Apply GLSL memory decorations to top-level OpVariable +* Move definition of GLSLANG_EXPORT to visibility.h +* Merge ancillary libraries into main glslang library and stub originals +* Add public setSourceFile and addSourceText methods to TShader class +* Add type checks for hitObjectNV +* Add optimizerAllowExpandedIDBound to SpvOptions +* Add SpvTools.h back to public headers +* Add cross-stage check for missing outputs +* Fix HLSL offsets for non-buffers +* Add types and functions for IO mapping to API +* Add function to set preprocessed code to API +* Add set/get version functions to API +* Expose setGlobalUniform functions to API +* Don't emit debug instructions before an OpPhi +* Add command-line and API option to enable reporting column location for compiler errors +* Improve location aliasing checks +* Support constant expression calculated by matrixCompMult +* Fix crash caused by atomicCounter() use without arguments +* Fix multi-line function call line numbers +* Add line info to OpDebugDeclare for function parameters +* Fix HLSL OpDebugFunction file name +* Fix duplicate decorations +* Enable compilation of glslang without thread support for WASI + +## 14.3.0 2024-06-25 +* Generate vector constructions more efficiently when sizes match +* Skip identity conversions for 8-bit and 16-bit types +* Add cmake aliases for public libraries +* Support ARM extended matrix layout +* Emit debug info for buffer references +* Add support for OpExtInstWithForwardRefsKHR +* Generate SPV_EXT_replicated_compisites when requested by pragma +* Reuse loads generated for repeated function arguments +* Fix gl_HitT alias of gl_RayTmax +* Fix some cases where invalid SPIR-V was being generated when using separate samplers +* Add back layoutLocation to public API + +## 14.2.0 2024-05-02 +* Improve checking for location aliasing errors +* Fix undefined behavior in parser +* Add bounds check to gl_SampleMask +* Fix alignment and padding of matrices consuming one vector +* Remove duplicate SPIR-V decorations +* Check for exponent overflow in float parser +* Fix bug in relaxed verification rules +* Fix disassembly of debugBreak +* Fix bug when importing SPIR-V extended intruction set +* Fix issues with the interaction of cooperative_matrix and spirv_intrinsics +* Support SPV_QCOM_image_processing2 +* Support files with UTF8BOM character + +## 14.1.0 2024-03-08 +* Add a new --abosute-path command-line option to output absolute paths in error messages +* Support GL_EXT_control_flow_attributes2 +* Support GL_ARB_shading_language_include +* Fix HLSL built-in passthrough via inout +* Enable -Wimplicit-fallthrough and fix warnings +* Fix -Wmissing_field_initializer warnings +* Document supported dependencies in known_good.json +* Clear spirv vector before use +* Emit debug info for accelerationStructure and rayQuery variables +* Support NV_shader_atomic_fp16_vector +* Support GL_EXT_expect_assume_support +* Allow external control of whether glslang will be tested or installed +* Improve debug source and line info +* Support GL_KHR_shader_subgroup_rotate +* Add SPIRV-Tools-opt dependency if ENABLE_OPT +* Support EXT_shader_quad_control +* Add OpAssumeTrueKHR and OpExpectKHR +* Support GL_EXT_maximal_reconvergence +* Remove generation of deprecated Target.cmake files +* Fix array size of gl_SampleMask and gl_SampleMaskIn +* Support GL_ARB_texture_multisample_extension +* Emit DebugTypePointer when non-semantic debug info is enabled + +## 14.0.0 2023-12-21 + +### Breaking changes +* The legacy libraries named HLSL and OGLCompiler have been removed. To avoid future disruptions, please use cmake's find_package mechanism rather than hardcoding library dependencies. +* Only the headers that are part of glslang's public interface are included in the install target. +* Remove OVERRIDE_MSVCCRT cmake option. + +### Other changes +* Fix spv_options initialization +* Fix line number for OpDebugFunction and OpDebugScope for function +* Fix SPV_KHR_cooperative_matrix enumerants +* Fix nullptr crash +* Fix GL_ARB_shader_storage_buffer_object version +* Fix interpolant ES error +* Generate DebugValue for constant arguments +* Overflow/underflow out-of-range floats to infinity/0.0 respectively +* Support SV_ViewID keywords for HLSL +* Implement relaxed rule for opaque struct members +* Add BUILD_WERROR cmake option +* Add GLSLANG_TESTS cmake option +* Always generate OpDebugBasicType for bool type +* Fix GLSL parsing of '#' when not preceded by space or tab +* Fix GL_ARB_bindless_texture availability +* Support GL_EXT_draw_instanced extension +* Support GL_EXT_texture_array extension +* Fix conversion of 64-bit unsigned integer constants to bool +* Output 8-bit and 16-bit capabilities when appropriate for OpSpecConstant + +## 13.1.1 2023-10-16 +* Initialize compile_only field in C interface + +## 13.1.0 2023-10-13 +* Support GL_EXT_texture_shadow_lod +* Support GL_NV_displacement_micromap +* Fix ByteAddressBuffer when used a function parameter +* Add more verbose messages if SPIRV-Tools is not found +* Fix names for explicitly sized types when emitting nonsemantic debug info +* Emit error for r-value arguments in atomic memory operations +* Add --no-link option +* Beautify preprocessor output format +* Fix race condition in glslangValidator +* Only set LocalSizeId mode when necessary +* Don't emit invalid debug info for buffer references + +## 13.0.0 2023-08-23 + +### Breaking changes +* Simplify PoolAlloc via thread_local + * Remove InitializeDLL functions + * Remove OSDependent TLS functions +* Remove GLSLANG_WEB and GLSLANG_WEB_DEVEL code paths + +### Other changes +* Raise CMAKE minimum to 3.17.2 +* Support GL_KHR_cooperative_matrix +* Support GL_QCOM_image_processing_support +* Support outputting each module to a filename with spirv-remap +* Generate an error when gl_PrimitiveShaderRateEXT is used without enabling the extension +* Improve layout checking when GL_EXT_spirv_intrinsics is enabled + +## 12.3.1 2023-07-20 + +### Other changes +* Improve backward compatibility for glslangValidator rename on Windows + +## 12.3.0 2023-07-19 + +### Other changes +* Rename glslangValidator to glslang and create glslangValidator symlink +* Support HLSL binary literals +* Add missing initialization members for web +* Improve push_constant upgrading +* Fix race condition in spirv remap +* Support pre and post HLSL qualifier validation +* Force generateDebugInfo when non-semantic debug info is enabled +* Exit with error if output file cannot be written +* Fix struct member buffer reference decorations + +## 12.2.0 2023-05-17 + +### Other changes +* Support GLSL_EXT_shader_tile_image +* Support GL_EXT_ray_tracing_position_fetch +* Support custom include callbacks via the C API +* Add preamble-text command-line option +* Accept variables as parameters of spirv_decorate_id +* Fix generation of conditionals with a struct result +* Fix double expansion of macros +* Fix DebugCompilationUnit scope +* Improve line information + +## 12.1.0 2023-03-21 + +### Other changes +* Reject non-float inputs/outputs for version less than 120 +* Fix invalid BufferBlock decoration for SPIR-V 1.3 and above +* Add HLSL relaxed-precision float/int matrix expansions +* Block decorate Vulkan structs with RuntimeArrays +* Support InterlockedAdd on float types + +## 12.0.0 2023-01-18 + +### Breaking changes +* An ABI was accidentally broken in #3014. Consequently, we have incremented the major revision number. + +### Other changes +* Add support for ARB_bindless_texture. +* Add support for GL_NV_shader_invocation_reorder. +* Fix const parameter debug types when using NonSemantic.Shader.DebugInfo.100. +* Fix NonSemantic.Shader.DebugInfo.100 disassembly. +* Fix MaxDualSourceDrawBuffersEXT usage. +* Fix structure member reference crash. + +## 11.13.0 2022-12-06 + +### Other changes +* Make HelperInvocation accesses volatile for SPIR-V 1.6. +* Improve forward compatibility of ResourceLimits interface +* Remove GLSLANG_ANGLE + +## 11.12.0 2022-10-12 + +### Other changes +* Update generator version +* Add support for GL_EXT_mesh_shader +* Add support for NonSemantic.Shader.DebugInfo.100 +* Make OpEmitMeshTasksEXT a terminal instruction +* Make gl_SubGroupARB a flat in int in Vulkan +* Add support for GL_EXT_opacity_micromap +* Add preamble support to C interface + +## 11.11.0 2022-08-11 + +### Other changes +* Add OpSource support to C interface +* Deprecate samplerBuffer for spirv1.6 and later +* Add support for SPV_AMD_shader_early_and_late_fragment_tests + +## 11.10.0 2022-06-02 + +### Other changes +* Generate OpLine before OpFunction +* Add support for VK_EXT_fragment_shader_barycentric +* Add whitelist filtering for debug comments in SPIRV-Remap +* Add support for GL_EXT_ray_cull_mask + +## 11.9.0 2022-04-06 + +### Other changes +* Add GLSL version override functionality +* Add eliminate-dead-input-components to -Os +* Add enhanced-msgs option +* Explicitly use Python 3 for builds + +## 11.8.0 2022-01-27 + +### Other changes +* 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 diff --git a/CMakeLists.txt b/CMakeLists.txt index 43533c14d3..1b97ecd549 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2020 The Khronos Group Inc. +# Copyright (C) 2020-2023 The Khronos Group Inc. # # All rights reserved. # @@ -30,32 +30,29 @@ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. +cmake_minimum_required(VERSION 3.17.2) +project(glslang) -# increase to 3.1 once all major distributions -# include a version of CMake >= 3.1 -cmake_minimum_required(VERSION 2.8.12) -if (POLICY CMP0048) - cmake_policy(SET CMP0048 NEW) -endif() -if(POLICY CMP0054) - cmake_policy(SET CMP0054 NEW) +if (CMAKE_VERSION VERSION_LESS "3.21") + # https://cmake.org/cmake/help/latest/variable/PROJECT_IS_TOP_LEVEL.html + string(COMPARE EQUAL ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} PROJECT_IS_TOP_LEVEL) endif() -project(glslang LANGUAGES CXX) +set(GLSLANG_TESTS_DEFAULT ON) # Can be turned off, below, based on environment. +set(GLSLANG_ENABLE_INSTALL_DEFAULT ON) # Can be turned off, below, based on environment. set_property(GLOBAL PROPERTY USE_FOLDERS ON) -# Enable compile commands database -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - # Adhere to GNU filesystem layout conventions include(GNUInstallDirs) +include(CMakePackageConfigHelpers) # Needed for CMAKE_DEPENDENT_OPTION macro include(CMakeDependentOption) -option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF) +option(BUILD_SHARED_LIBS "Build Shared Libraries") option(BUILD_EXTERNAL "Build external dependencies in /External" ON) +option(BUILD_WERROR "Enable warnings as errors (default is OFF)" OFF) set(LIB_TYPE STATIC) @@ -71,24 +68,41 @@ if ("${CMAKE_BUILD_TYPE}" STREQUAL "") set(CMAKE_BUILD_TYPE "Debug") endif() -option(SKIP_GLSLANG_INSTALL "Skip installation" ${SKIP_GLSLANG_INSTALL}) -if(NOT ${SKIP_GLSLANG_INSTALL}) - set(ENABLE_GLSLANG_INSTALL ON) +# Currently iOS and Android are very similar. +# They both have their own packaging (APP/APK). +# Which makes regular executables/testing problematic. +# +# Currently the only deliverables for these platforms are +# libraries (either STATIC or SHARED). +# +# Furthermore testing is equally problematic. +if (IOS OR ANDROID) + set(ENABLE_GLSLANG_BINARIES OFF) + set(GLSLANG_TESTS_DEFAULT OFF) endif() + +# Simplify the default case of including this project. +# Otherwise add_subdirectory users have a harder time consuming the library. +# Since glslang will pollute the installation and add undesirable testing. +if(NOT PROJECT_IS_TOP_LEVEL) + set(GLSLANG_TESTS_DEFAULT OFF) + set(GLSLANG_ENABLE_INSTALL_DEFAULT OFF) +endif() + +# Control whether Glslang self-tests are built and tested. +# Always expose this as an option, so the defaults can be overridden. +option(GLSLANG_TESTS "Enable glslang testing" ${GLSLANG_TESTS_DEFAULT}) + +# Control whether to install Glslang. +# Always expose this as an option, so the defaults can be overridden. +option(GLSLANG_ENABLE_INSTALL "Enable glslang installation" ${GLSLANG_ENABLE_INSTALL_DEFAULT}) + +option(ENABLE_SPIRV "Enables SPIRV output support" ON) option(ENABLE_SPVREMAPPER "Enables building of SPVRemapper" ON) -option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON) +option(ENABLE_GLSLANG_BINARIES "Builds glslang and spirv-remap" ON) -option(ENABLE_GLSLANG_JS - "If using Emscripten, build glslang.js. Otherwise, builds a sample executable for binary-size testing." OFF) -CMAKE_DEPENDENT_OPTION(ENABLE_GLSLANG_WEBMIN - "Reduces glslang to minimum needed for web use" - OFF "ENABLE_GLSLANG_JS" - OFF) -CMAKE_DEPENDENT_OPTION(ENABLE_GLSLANG_WEBMIN_DEVEL - "For ENABLE_GLSLANG_WEBMIN builds, enables compilation error messages" - OFF "ENABLE_GLSLANG_WEBMIN" - OFF) +option(ENABLE_GLSLANG_JS "If using Emscripten, build glslang.js. Otherwise, builds a sample executable for binary-size testing.") CMAKE_DEPENDENT_OPTION(ENABLE_EMSCRIPTEN_SINGLE_FILE "If using Emscripten, enables SINGLE_FILE build" OFF "ENABLE_GLSLANG_JS AND EMSCRIPTEN" @@ -98,68 +112,40 @@ CMAKE_DEPENDENT_OPTION(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE OFF "ENABLE_GLSLANG_JS AND EMSCRIPTEN" OFF) -CMAKE_DEPENDENT_OPTION(ENABLE_HLSL - "Enables HLSL input support" - ON "NOT ENABLE_GLSLANG_WEBMIN" - OFF) - -option(ENABLE_RTTI "Enables RTTI" OFF) -option(ENABLE_EXCEPTIONS "Enables Exceptions" OFF) -option(ENABLE_OPT "Enables spirv-opt capability if present" ON) +option(ENABLE_HLSL "Enables HLSL input support" ON) +option(ENABLE_RTTI "Enables RTTI") +option(ENABLE_EXCEPTIONS "Enables Exceptions") +CMAKE_DEPENDENT_OPTION(ENABLE_OPT "Enables spirv-opt capability if present" ON "ENABLE_SPIRV" OFF) -if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") +if(MINGW OR (APPLE 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) + set(ENABLE_PCH OFF) + message(NOTICE "Disabling PCH") endif() -option(ENABLE_CTEST "Enables testing" ON) -if(ENABLE_GLSLANG_INSTALL AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32) - set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE) -endif() +option(ENABLE_PCH "Enables Precompiled header" ON) -option(USE_CCACHE "Use ccache" OFF) -if(USE_CCACHE) - find_program(CCACHE_FOUND ccache) - if(CCACHE_FOUND) - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) - endif() -endif() - -if(ENABLE_CTEST) - include(CTest) +if(ENABLE_SPIRV) + add_compile_definitions(ENABLE_SPIRV) endif() if(ENABLE_HLSL) - add_definitions(-DENABLE_HLSL) -endif() - -if(ENABLE_GLSLANG_WEBMIN) - add_definitions(-DGLSLANG_WEB) - if(ENABLE_GLSLANG_WEBMIN_DEVEL) - add_definitions(-DGLSLANG_WEB_DEVEL) - endif() + add_compile_definitions(ENABLE_HLSL) endif() if(WIN32) set(CMAKE_DEBUG_POSTFIX "d") - option(OVERRIDE_MSVCCRT "Overrides runtime of MSVC " ON) - if(MSVC AND OVERRIDE_MSVCCRT) - include(ChooseMSVCCRT.cmake) - endif() add_definitions(-DGLSLANG_OSINCLUDE_WIN32) -elseif(UNIX) +elseif(UNIX OR ANDROID) add_definitions(-DGLSLANG_OSINCLUDE_UNIX) else() message("unknown platform") endif() if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") - add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs + add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs -Wimplicit-fallthrough -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable -fno-exceptions) - add_compile_options(-Wno-reorder) # disable this from -Wall, since it happens all over. if(NOT ENABLE_RTTI) add_compile_options(-fno-rtti) endif() @@ -170,16 +156,15 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") add_compile_options(-Werror=deprecated-copy) endif() - 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. - add_link_options("-Wl,--no-undefined") + if(NOT (CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")) + if (NOT APPLE) + # Error if there's symbols that are not found at link time. + add_link_options("-Wl,--no-undefined") + endif() endif() elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC) - add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs + add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs -Wimplicit-fallthrough -Wunused-parameter -Wunused-value -Wunused-variable) - add_compile_options(-Wno-reorder) # disable this from -Wall, since it happens all over. if(NOT ENABLE_RTTI) add_compile_options(-fno-rtti) endif() @@ -187,11 +172,11 @@ elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC) add_compile_options(-fno-exceptions) endif() - if(NOT CMAKE_VERSION VERSION_LESS "3.13") - # Error if there's symbols that are not found at link time. - # add_link_options() was added in CMake 3.13 - if using an earlier - # version don't set this - it should be caught by presubmits anyway. - add_link_options("-Wl,-undefined,error") + if(NOT (CMAKE_SYSTEM_NAME MATCHES "OpenBSD|Emscripten")) + # Error if there's symbols that are not found at link time. Some linkers do not support this flag. + if(NOT APPLE) + add_link_options("-Wl,--no-undefined") + endif() endif() elseif(MSVC) if(NOT ENABLE_RTTI) @@ -210,6 +195,15 @@ elseif(MSVC) endif() endif() +# NOTE we could potentially replace this logic with COMPILE_WARNING_AS_ERROR if cmake minimum is bumped to >= 3.24 +if (BUILD_WERROR) + if (NOT MSVC) + add_compile_options(-Werror) + else() + add_compile_options(/WX) + endif() +endif() + if(ENABLE_GLSLANG_JS) if(MSVC) add_compile_options(/Os /GR-) @@ -222,32 +216,21 @@ if(ENABLE_GLSLANG_JS) endif() endif() -# Request C++11 -if(${CMAKE_VERSION} VERSION_LESS 3.1) - # CMake versions before 3.1 do not understand CMAKE_CXX_STANDARD - # remove this block once CMake >=3.1 has fixated in the ecosystem - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -else() - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_STANDARD_REQUIRED ON) - set(CMAKE_CXX_EXTENSIONS OFF) -endif() +# Request C++17 +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) function(glslang_set_link_args TARGET) # For MinGW compiles, statically link against the GCC and C++ runtimes. # This avoids the need to ship those runtimes as DLLs. - if(WIN32 AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") + # This is supported by GCC and Clang. + if(WIN32 AND NOT MSVC) set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "-static -static-libgcc -static-libstdc++") endif() endfunction(glslang_set_link_args) -if(NOT COMMAND find_host_package) - macro(find_host_package) - find_package(${ARGN}) - endmacro() -endif() - # Root directory for build-time generated include files set(GLSLANG_GENERATED_INCLUDEDIR "${CMAKE_BINARY_DIR}/include") @@ -284,10 +267,10 @@ endfunction() function(glslang_only_export_explicit_symbols target) if(BUILD_SHARED_LIBS) target_compile_definitions(${target} PUBLIC "GLSLANG_IS_SHARED_LIBRARY=1") + set_target_properties(${target} PROPERTIES CXX_VISIBILITY_PRESET hidden) + set_target_properties(${target} PROPERTIES C_VISIBILITY_PRESET hidden) if(WIN32) target_compile_definitions(${target} PRIVATE "GLSLANG_EXPORTING=1") - else() - target_compile_options(${target} PRIVATE "-fvisibility=hidden") endif() endif() endfunction() @@ -295,27 +278,35 @@ endfunction() # glslang_pch() adds precompiled header rules to for the pre-compiled # header file . As target_precompile_headers() was added in CMake 3.16, # this is a no-op if called on earlier versions of CMake. -if(NOT CMAKE_VERSION VERSION_LESS "3.16" AND ENABLE_PCH) - function(glslang_pch target pch) - target_precompile_headers(${target} PRIVATE ${pch}) - endfunction() -else() - function(glslang_pch target pch) - endfunction() +function(glslang_pch target pch) if(ENABLE_PCH) - message("Your CMake version is ${CMAKE_VERSION}. Update to at least 3.16 to enable precompiled headers to speed up incremental builds") + target_precompile_headers(${target} PRIVATE ${pch}) endif() -endif() +endfunction() if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External) - find_host_package(PythonInterp 3 REQUIRED) - # We depend on these for later projects, so they should come first. add_subdirectory(External) endif() +option(ALLOW_EXTERNAL_SPIRV_TOOLS "Allows to build against installed SPIRV-Tools-opt. This is unsupported if the commit isn't the one in known_good.json") if(NOT TARGET SPIRV-Tools-opt) - set(ENABLE_OPT OFF) + if(ALLOW_EXTERNAL_SPIRV_TOOLS) + # Look for external SPIR-V Tools build, if not building in-tree + message(STATUS "Trying to find local SPIR-V tools") + find_package(SPIRV-Tools-opt) + if(NOT TARGET SPIRV-Tools-opt) + if(ENABLE_OPT) + message(WARNING "ENABLE_OPT set but SPIR-V tools not found! Disabling SPIR-V optimization.") + endif() + set(ENABLE_OPT OFF) + endif() + else() + if(ENABLE_OPT) + message(SEND_ERROR "ENABLE_OPT set but SPIR-V tools not found. Please run update_glslang_sources.py, " + "set the ALLOW_EXTERNAL_SPIRV_TOOLS option to use a local install of SPIRV-Tools, or set ENABLE_OPT=0.") + endif() + endif() endif() if(ENABLE_OPT) @@ -328,38 +319,82 @@ else() add_definitions(-DENABLE_OPT=0) endif() +if(ENABLE_SPIRV) + add_subdirectory(SPIRV) +endif() add_subdirectory(glslang) -add_subdirectory(OGLCompilersDLL) if(ENABLE_GLSLANG_BINARIES) add_subdirectory(StandAlone) endif() -add_subdirectory(SPIRV) -if(ENABLE_HLSL) - add_subdirectory(hlsl) -endif() -if(ENABLE_CTEST) + +if(GLSLANG_TESTS) + enable_testing() add_subdirectory(gtests) -endif() -if(ENABLE_CTEST AND BUILD_TESTING) # glslang-testsuite runs a bash script on Windows. # Make sure to use '-o igncr' flag to ignore carriage returns (\r). set(IGNORE_CR_FLAG "") if(WIN32) - set(IGNORE_CR_FLAG -o igncr) + set(IGNORE_CR_FLAG -o igncr) endif() if (CMAKE_CONFIGURATION_TYPES) - set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$/localResults) - set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$/glslangValidator) - set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$/spirv-remap) + set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$/localResults) + set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$/glslang) + set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$/spirv-remap) else() - set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults) - set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslangValidator) - set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap) + set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults) + set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslang) + set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap) endif() add_test(NAME glslang-testsuite - COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/) -endif() + COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/) +endif(GLSLANG_TESTS) + +if (GLSLANG_ENABLE_INSTALL) + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in" [=[ + @PACKAGE_INIT@ + include(CMakeFindDependencyMacro) + if(@ENABLE_OPT@) + find_dependency(SPIRV-Tools-opt) + endif() + @INSTALL_CONFIG_UNIX@ + include("@PACKAGE_PATH_EXPORT_TARGETS@") + ]=]) + + set(PATH_EXPORT_TARGETS "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake") + if(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia") + set(INSTALL_CONFIG_UNIX [=[ + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_dependency(Threads) + ]=]) + endif() + configure_package_config_file( + "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake" + PATH_VARS + PATH_EXPORT_TARGETS + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} + ) + + write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glslang-config-version.cmake" + VERSION ${GLSLANG_VERSION} + COMPATIBILITY SameMajorVersion + ) + + install( + EXPORT glslang-targets + NAMESPACE "glslang::" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + ) + + install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/glslang-config-version.cmake" + DESTINATION + "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + ) +endif(GLSLANG_ENABLE_INSTALL) diff --git a/ChooseMSVCCRT.cmake b/ChooseMSVCCRT.cmake deleted file mode 100644 index b1561263c7..0000000000 --- a/ChooseMSVCCRT.cmake +++ /dev/null @@ -1,138 +0,0 @@ -# Copyright (C) 2020 The Khronos Group Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of The Khronos Group Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# The macro choose_msvc_crt() takes a list of possible -# C runtimes to choose from, in the form of compiler flags, -# to present to the user. (MTd for /MTd, etc) -# -# The macro is invoked at the end of the file. -# -# CMake already sets CRT flags in the CMAKE_CXX_FLAGS_* and -# CMAKE_C_FLAGS_* variables by default. To let the user -# override that for each build type: -# 1. Detect which CRT is already selected, and reflect this in -# LLVM_USE_CRT_* so the user can have a better idea of what -# changes they're making. -# 2. Replace the flags in both variables with the new flag via a regex. -# 3. set() the variables back into the cache so the changes -# are user-visible. - -### Helper macros: ### -macro(make_crt_regex regex crts) - set(${regex} "") - foreach(crt ${${crts}}) - # Trying to match the beginning or end of the string with stuff - # like [ ^]+ didn't work, so use a bunch of parentheses instead. - set(${regex} "${${regex}}|(^| +)/${crt}($| +)") - endforeach(crt) - string(REGEX REPLACE "^\\|" "" ${regex} "${${regex}}") -endmacro(make_crt_regex) - -macro(get_current_crt crt_current regex flagsvar) - # Find the selected-by-CMake CRT for each build type, if any. - # Strip off the leading slash and any whitespace. - string(REGEX MATCH "${${regex}}" ${crt_current} "${${flagsvar}}") - string(REPLACE "/" " " ${crt_current} "${${crt_current}}") - string(STRIP "${${crt_current}}" ${crt_current}) -endmacro(get_current_crt) - -# Replaces or adds a flag to a variable. -# Expects 'flag' to be padded with spaces. -macro(set_flag_in_var flagsvar regex flag) - string(REGEX MATCH "${${regex}}" current_flag "${${flagsvar}}") - if("${current_flag}" STREQUAL "") - set(${flagsvar} "${${flagsvar}}${${flag}}") - else() - string(REGEX REPLACE "${${regex}}" "${${flag}}" ${flagsvar} "${${flagsvar}}") - endif() - string(STRIP "${${flagsvar}}" ${flagsvar}) - # Make sure this change gets reflected in the cache/gui. - # CMake requires the docstring parameter whenever set() touches the cache, - # so get the existing docstring and re-use that. - get_property(flagsvar_docs CACHE ${flagsvar} PROPERTY HELPSTRING) - set(${flagsvar} "${${flagsvar}}" CACHE STRING "${flagsvar_docs}" FORCE) -endmacro(set_flag_in_var) - - -macro(choose_msvc_crt MSVC_CRT) - if(LLVM_USE_CRT) - message(FATAL_ERROR - "LLVM_USE_CRT is deprecated. Use the CMAKE_BUILD_TYPE-specific -variables (LLVM_USE_CRT_DEBUG, etc) instead.") - endif() - - make_crt_regex(MSVC_CRT_REGEX ${MSVC_CRT}) - - foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE}) - string(TOUPPER "${build_type}" build) - if (NOT LLVM_USE_CRT_${build}) - get_current_crt(LLVM_USE_CRT_${build} - MSVC_CRT_REGEX - CMAKE_CXX_FLAGS_${build}) - set(LLVM_USE_CRT_${build} - "${LLVM_USE_CRT_${build}}" - CACHE STRING "Specify VC++ CRT to use for ${build_type} configurations." - FORCE) - set_property(CACHE LLVM_USE_CRT_${build} - PROPERTY STRINGS ;${${MSVC_CRT}}) - endif(NOT LLVM_USE_CRT_${build}) - endforeach(build_type) - - foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE}) - string(TOUPPER "${build_type}" build) - if ("${LLVM_USE_CRT_${build}}" STREQUAL "") - set(flag_string " ") - else() - set(flag_string " /${LLVM_USE_CRT_${build}} ") - list(FIND ${MSVC_CRT} ${LLVM_USE_CRT_${build}} idx) - if (idx LESS 0) - message(FATAL_ERROR - "Invalid value for LLVM_USE_CRT_${build}: ${LLVM_USE_CRT_${build}}. Valid options are one of: ${${MSVC_CRT}}") - endif (idx LESS 0) - message(STATUS "Using ${build_type} VC++ CRT: ${LLVM_USE_CRT_${build}}") - endif() - foreach(lang C CXX) - set_flag_in_var(CMAKE_${lang}_FLAGS_${build} MSVC_CRT_REGEX flag_string) - endforeach(lang) - endforeach(build_type) -endmacro(choose_msvc_crt MSVC_CRT) - - -# List of valid CRTs for MSVC -set(MSVC_CRT - MD - MDd - MT - MTd) - -choose_msvc_crt(MSVC_CRT) diff --git a/External/CMakeLists.txt b/External/CMakeLists.txt index cbabd2e3b4..46284fd5ba 100644 --- a/External/CMakeLists.txt +++ b/External/CMakeLists.txt @@ -34,7 +34,7 @@ # Suppress all warnings from external projects. set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -w) -if(BUILD_TESTING) +if(GLSLANG_TESTS) if(TARGET gmock) message(STATUS "Google Mock already configured - use it") elseif(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/googletest) @@ -71,7 +71,7 @@ endif() if(ENABLE_OPT AND NOT TARGET SPIRV-Tools-opt) if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools) set(SPIRV_SKIP_TESTS ON CACHE BOOL "Skip building SPIRV-Tools tests") - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools spirv-tools) + add_subdirectory(spirv-tools) endif() endif() diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt deleted file mode 100644 index 0b007d45c6..0000000000 --- a/OGLCompilersDLL/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (C) 2020 The Khronos Group Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of The Khronos Group Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -set(SOURCES InitializeDll.cpp InitializeDll.h) - -add_library(OGLCompiler STATIC ${SOURCES}) -set_property(TARGET OGLCompiler PROPERTY FOLDER glslang) -set_property(TARGET OGLCompiler PROPERTY POSITION_INDEPENDENT_CODE ON) - -if(WIN32) - source_group("Source" FILES ${SOURCES}) -endif(WIN32) - -if(ENABLE_GLSLANG_INSTALL) - install(TARGETS OGLCompiler EXPORT OGLCompilerTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(EXPORT OGLCompilerTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) -endif(ENABLE_GLSLANG_INSTALL) diff --git a/OGLCompilersDLL/InitializeDll.cpp b/OGLCompilersDLL/InitializeDll.cpp deleted file mode 100644 index abea9108b1..0000000000 --- a/OGLCompilersDLL/InitializeDll.cpp +++ /dev/null @@ -1,165 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#define SH_EXPORTING - -#include - -#include "InitializeDll.h" -#include "../glslang/Include/InitializeGlobals.h" -#include "../glslang/Public/ShaderLang.h" -#include "../glslang/Include/PoolAlloc.h" - -namespace glslang { - -OS_TLSIndex ThreadInitializeIndex = OS_INVALID_TLS_INDEX; - -// Per-process initialization. -// Needs to be called at least once before parsing, etc. is done. -// Will also do thread initialization for the calling thread; other -// threads will need to do that explicitly. -bool InitProcess() -{ - glslang::GetGlobalLock(); - - if (ThreadInitializeIndex != OS_INVALID_TLS_INDEX) { - // - // Function is re-entrant. - // - - glslang::ReleaseGlobalLock(); - return true; - } - - ThreadInitializeIndex = OS_AllocTLSIndex(); - - if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) { - assert(0 && "InitProcess(): Failed to allocate TLS area for init flag"); - - glslang::ReleaseGlobalLock(); - return false; - } - - if (! InitializePoolIndex()) { - assert(0 && "InitProcess(): Failed to initialize global pool"); - - glslang::ReleaseGlobalLock(); - return false; - } - - if (! InitThread()) { - assert(0 && "InitProcess(): Failed to initialize thread"); - - glslang::ReleaseGlobalLock(); - return false; - } - - glslang::ReleaseGlobalLock(); - return true; -} - -// Per-thread scoped initialization. -// Must be called at least once by each new thread sharing the -// symbol tables, etc., needed to parse. -bool InitThread() -{ - // - // This function is re-entrant - // - if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) { - assert(0 && "InitThread(): Process hasn't been initalised."); - return false; - } - - if (OS_GetTLSValue(ThreadInitializeIndex) != 0) - return true; - - if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) { - assert(0 && "InitThread(): Unable to set init flag."); - return false; - } - - glslang::SetThreadPoolAllocator(nullptr); - - return true; -} - -// Not necessary to call this: InitThread() is reentrant, and the need -// to do per thread tear down has been removed. -// -// This is kept, with memory management removed, to satisfy any exiting -// calls to it that rely on it. -bool DetachThread() -{ - bool success = true; - - if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) - return true; - - // - // Function is re-entrant and this thread may not have been initialized. - // - if (OS_GetTLSValue(ThreadInitializeIndex) != 0) { - if (!OS_SetTLSValue(ThreadInitializeIndex, (void *)0)) { - assert(0 && "DetachThread(): Unable to clear init flag."); - success = false; - } - } - - return success; -} - -// Not necessary to call this: InitProcess() is reentrant. -// -// This is kept, with memory management removed, to satisfy any exiting -// calls to it that rely on it. -// -// Users of glslang should call shFinalize() or glslang::FinalizeProcess() for -// process-scoped memory tear down. -bool DetachProcess() -{ - bool success = true; - - if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) - return true; - - success = DetachThread(); - - OS_FreeTLSIndex(ThreadInitializeIndex); - ThreadInitializeIndex = OS_INVALID_TLS_INDEX; - - return success; -} - -} // end namespace glslang diff --git a/README-spirv-remap.txt b/README-spirv-remap.txt index 3e5288aac5..59938d86ec 100644 --- a/README-spirv-remap.txt +++ b/README-spirv-remap.txt @@ -28,10 +28,9 @@ workload. FEEDBACK --------------------------------------------------------------------------------- -Report defects, enhancements requests, code improvements, etc to: - spvremapper@lunarg.com - +--------------------------------------------------------------------------------- +Report defects, enhancement requests, code improvements, etc by creating +issues in the glslang repository at https://github.com/KhronosGroup/glslang COMMAND LINE USAGE: -------------------------------------------------------------------------------- @@ -112,7 +111,7 @@ BUILD DEPENDENCIES: BUILDING -------------------------------------------------------------------------------- -The standalone remapper is built along side glslangValidator through its +The standalone remapper is built along side glslang through its normal build process. diff --git a/README.md b/README.md index 1eba3c6066..8c740ef461 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,18 @@ -# News - -1. Visual Studio 2013 is no longer supported +![Continuous Integration](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_integration.yml/badge.svg) +![Continuous Deployment](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_deployment.yml/badge.svg) +[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/KhronosGroup/glslang/badge)](https://securityscorecards.dev/viewer/?uri=github.com/KhronosGroup/glslang) - [As scheduled](https://github.com/KhronosGroup/glslang/blob/9eef54b2513ca6b40b47b07d24f453848b65c0df/README.md#planned-deprecationsremovals), -Microsoft Visual Studio 2013 is no longer officially supported. \ - Please upgrade to at least Visual Studio 2015. +# News -2. The versioning scheme is being improved, and you might notice some differences. This is currently WIP, but will be coming soon. See, for example, PR #2277. +1. Building glslang as a DLL or shared library is now possible and supported. -3. If you get a new **compilation error due to a missing header**, it might be caused by this planned removal: +2. The `GenericCodeGen`, `MachineIndependent`, `OSDependent`, and `SPIRV` libraries have been integrated into the main `glslang` library. The old separate libraries have replaced with empty stubs for a temporary compatibility period, and they will be removed entirely in the future. -**SPIRV Folder, 1-May, 2020.** Glslang, when installed through CMake, -will install a `SPIRV` folder into `${CMAKE_INSTALL_INCLUDEDIR}`. -This `SPIRV` folder is being moved to `glslang/SPIRV`. -During the transition the `SPIRV` folder will be installed into both locations. -The old install of `SPIRV/` will be removed as a CMake install target no sooner than May 1, 2020. -See issue #1964. +3. A new CMake `ENABLE_SPIRV` option has been added to control whether glslang is built with SPIR-V support. Its default value is `ON`. -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. +4. `OGLCompiler` and `HLSL` stub libraries have been fully removed from the build. -[![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) +Users are encouraged to utilize the standard approach via [CMAKE_MSVC_RUNTIME_LIBRARY](https://cmake.org/cmake/help/latest/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html). # Glslang Components and Status @@ -55,7 +47,7 @@ An API for getting reflection information from the AST, reflection types/variabl ### Standalone Wrapper -`glslangValidator` is command-line tool for accessing the functionality above. +`glslang` is command-line tool for accessing the functionality above. Status: Complete. @@ -73,7 +65,7 @@ The above page, while not kept up to date, includes additional information regar ## Execution of Standalone Wrapper -To use the standalone binary form, execute `glslangValidator`, and it will print +To use the standalone binary form, execute `glslang`, and it will print a usage statement. Basic operation is to give it a file containing a shader, and it will print out warnings/errors and optionally an AST. @@ -85,21 +77,29 @@ 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) Instead of building manually, you can also download the binaries for your -platform directly from the [master-tot release][master-tot-release] on GitHub. +platform directly from the [main-tot release][main-tot-release] on GitHub. Those binaries are automatically uploaded by the buildbots after successful -testing and they always reflect the current top of the tree of the master +testing and they always reflect the current top of the tree of the main branch. ### Dependencies -* A C++11 compiler. - (For MSVS: use 2015 or later.) +* A C++17 compiler. + (For MSVS: use 2019 or later.) * [CMake][cmake]: for generating compilation targets. * make: _Linux_, ninja is an alternative, if configured. * [Python 3.x][python]: for executing SPIRV-Tools scripts. (Optional if not using SPIRV-Tools and the 'External' subdirectory does not exist.) @@ -120,24 +120,6 @@ git clone https://github.com/KhronosGroup/glslang.git #### 2) Check-Out External Projects -```bash -cd -git clone https://github.com/google/googletest.git External/googletest -``` - -TEMPORARY NOTICE: additionally perform the following to avoid a current -breakage in googletest: - -```bash -cd External/googletest -git checkout 0c400f67fcf305869c5fb113dd296eca266c9725 -cd ../.. -``` - -If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan, -wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, or wish to run the -integrated test suite, install spirv-tools with this: - ```bash ./update_glslang_sources.py ``` @@ -161,8 +143,8 @@ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" $SOURCE For building on Android: ```bash -cmake $SOURCE_DIR -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_STL=c++_static -DANDROID_PLATFORM=android-24 -DCMAKE_SYSTEM_NAME=Android -DANDROID_TOOLCHAIN=clang -DANDROID_ARM_MODE=arm -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_ROOT/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake -# If on Windows will be -DCMAKE_MAKE_PROGRAM=%ANDROID_NDK_ROOT%\prebuilt\windows-x86_64\bin\make.exe +cmake $SOURCE_DIR -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_STL=c++_static -DANDROID_PLATFORM=android-24 -DCMAKE_SYSTEM_NAME=Android -DANDROID_TOOLCHAIN=clang -DANDROID_ARM_MODE=arm -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_HOME/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake +# If on Windows will be -DCMAKE_MAKE_PROGRAM=%ANDROID_NDK_HOME%\prebuilt\windows-x86_64\bin\make.exe # -G is needed for building on Windows # -DANDROID_ABI can also be armeabi-v7a for 32 bit ``` @@ -193,6 +175,10 @@ cmake --build . --config Release --target install If using MSVC, after running CMake to configure, use the Configuration Manager to check the `INSTALL` project. +If you want to enable testing via CMake set `GLSLANG_TESTS=ON` when configuring the build. + +`GLSLANG_TESTS` is off by default to streamline the packaging / Vulkan SDK process. + ### Building (GN) glslang can also be built with the [GN build system](https://gn.googlesource.com/gn/). @@ -234,16 +220,13 @@ changes are quite infrequent. For windows you can get binaries from The command to rebuild is: ```bash -m4 -P MachineIndependent/glslang.m4 > MachineIndependent/glslang.y bison --defines=MachineIndependent/glslang_tab.cpp.h -t MachineIndependent/glslang.y -o MachineIndependent/glslang_tab.cpp ``` -The above commands are also available in the bash script in `updateGrammar`, +The above command is also available in the bash script in `updateGrammar`, when executed from the glslang subdirectory of the glslang repository. -With no arguments it builds the full grammar, and with a "web" argument, -the web grammar subset (see more about the web subset in the next section). ### Building to WASM for the Web and Node ### Building a standalone JS/WASM library for the Web and Node @@ -253,23 +236,21 @@ Use the steps in [Build Steps](#build-steps), with the following notes/exception Bash-like environments: + [Instructions located here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install) * Wrap cmake call: `emcmake cmake` -* Set `-DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF`. +* Set `-DENABLE_OPT=OFF`. * Set `-DENABLE_HLSL=OFF` if HLSL is not needed. * For a standalone JS/WASM library, turn on `-DENABLE_GLSLANG_JS=ON`. -* For building a minimum-size web subset of core glslang: - + turn on `-DENABLE_GLSLANG_WEBMIN=ON` (disables HLSL) - + execute `updateGrammar web` from the glslang subdirectory - (or if using your own scripts, `m4` needs a `-DGLSLANG_WEB` argument) - + optionally, for GLSL compilation error messages, turn on - `-DENABLE_GLSLANG_WEBMIN_DEVEL=ON` * To get a fully minimized build, make sure to use `brotli` to compress the .js and .wasm files +* Note that by default, Emscripten allocates a very small stack size, which may + cause stack overflows when compiling large shaders. Use the + [STACK_SIZE](https://emscripten.org/docs/tools_reference/settings_reference.html?highlight=environment#stack-size) + compiler setting to increase the stack size. Example: ```sh emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_JS=ON \ - -DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF .. + -DENABLE_HLSL=OFF -DENABLE_OPT=OFF .. ``` ## Building glslang - Using vcpkg @@ -291,6 +272,9 @@ Test](gtests/), one is the [`runtests` script](Test/runtests). The former runs unit tests and single-shader single-threaded integration tests, while the latter runs multiple-shader linking tests and multi-threaded tests. +Tests may erroneously fail or pass if using `ALLOW_EXTERNAL_SPIRV_TOOLS` with +any commit other than the one specified in `known_good.json`. + ### Running tests The [`runtests` script](Test/runtests) requires compiled binaries to be @@ -421,6 +405,91 @@ ShCompile(shader, compiler) -> compiler(AST) -> In practice, `ShCompile()` takes shader strings, default version, and warning/error and other options for controlling compilation. +### C Functional Interface (new) + +This interface is located `glslang_c_interface.h` and exposes functionality similar to the C++ interface. The following snippet is a complete example showing how to compile GLSL into SPIR-V 1.5 for Vulkan 1.2. + +```c +#include + +// Required for use of glslang_default_resource +#include + +typedef struct SpirVBinary { + uint32_t *words; // SPIR-V words + int size; // number of words in SPIR-V binary +} SpirVBinary; + +SpirVBinary compileShaderToSPIRV_Vulkan(glslang_stage_t stage, const char* shaderSource, const char* fileName) { + const glslang_input_t input = { + .language = GLSLANG_SOURCE_GLSL, + .stage = stage, + .client = GLSLANG_CLIENT_VULKAN, + .client_version = GLSLANG_TARGET_VULKAN_1_2, + .target_language = GLSLANG_TARGET_SPV, + .target_language_version = GLSLANG_TARGET_SPV_1_5, + .code = shaderSource, + .default_version = 100, + .default_profile = GLSLANG_NO_PROFILE, + .force_default_version_and_profile = false, + .forward_compatible = false, + .messages = GLSLANG_MSG_DEFAULT_BIT, + .resource = glslang_default_resource(), + }; + + glslang_shader_t* shader = glslang_shader_create(&input); + + SpirVBinary bin = { + .words = NULL, + .size = 0, + }; + if (!glslang_shader_preprocess(shader, &input)) { + printf("GLSL preprocessing failed %s\n", fileName); + printf("%s\n", glslang_shader_get_info_log(shader)); + printf("%s\n", glslang_shader_get_info_debug_log(shader)); + printf("%s\n", input.code); + glslang_shader_delete(shader); + return bin; + } + + if (!glslang_shader_parse(shader, &input)) { + printf("GLSL parsing failed %s\n", fileName); + printf("%s\n", glslang_shader_get_info_log(shader)); + printf("%s\n", glslang_shader_get_info_debug_log(shader)); + printf("%s\n", glslang_shader_get_preprocessed_code(shader)); + glslang_shader_delete(shader); + return bin; + } + + glslang_program_t* program = glslang_program_create(); + glslang_program_add_shader(program, shader); + + if (!glslang_program_link(program, GLSLANG_MSG_SPV_RULES_BIT | GLSLANG_MSG_VULKAN_RULES_BIT)) { + printf("GLSL linking failed %s\n", fileName); + printf("%s\n", glslang_program_get_info_log(program)); + printf("%s\n", glslang_program_get_info_debug_log(program)); + glslang_program_delete(program); + glslang_shader_delete(shader); + return bin; + } + + glslang_program_SPIRV_generate(program, stage); + + bin.size = glslang_program_SPIRV_get_size(program); + bin.words = malloc(bin.size * sizeof(uint32_t)); + glslang_program_SPIRV_get(program, bin.words); + + const char* spirv_messages = glslang_program_SPIRV_get_messages(program); + if (spirv_messages) + printf("(%s) %s\b", fileName, spirv_messages); + + glslang_program_delete(program); + glslang_shader_delete(shader); + + return bin; +} +``` + ## Basic Internal Operation * Initial lexical analysis is done by the preprocessor in @@ -476,4 +545,4 @@ warning/error and other options for controlling compilation. [bison]: https://www.gnu.org/software/bison/ [googletest]: https://github.com/google/googletest [bison-gnu-win32]: http://gnuwin32.sourceforge.net/packages/bison.htm -[master-tot-release]: https://github.com/KhronosGroup/glslang/releases/tag/master-tot +[main-tot-release]: https://github.com/KhronosGroup/glslang/releases/tag/main-tot diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..ffa39bf7a2 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,6 @@ +# Security Policy + +To report a security issue, please disclose it at [security advisory](https://github.com/KhronosGroup/glslang/security/advisories/new). + +This project is maintained by a team of volunteers on a reasonable-effort basis. As +such, please give us at least 90 days to work on a fix before public exposure. diff --git a/SPIRV/CInterface/spirv_c_interface.cpp b/SPIRV/CInterface/spirv_c_interface.cpp index a0790f48f1..631d19d799 100644 --- a/SPIRV/CInterface/spirv_c_interface.cpp +++ b/SPIRV/CInterface/spirv_c_interface.cpp @@ -32,10 +32,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "glslang/Include/glslang_c_interface.h" +#include +#include "glslang/Public/ShaderLang.h" #include "SPIRV/GlslangToSpv.h" #include "SPIRV/Logger.h" #include "SPIRV/SpvTools.h" +static_assert(sizeof(glslang_spv_options_t) == sizeof(glslang::SpvOptions), ""); + typedef struct glslang_program_s { glslang::TProgram* program; std::vector spirv; @@ -57,22 +61,22 @@ static EShLanguage c_shader_stage(glslang_stage_t stage) return EShLangFragment; case GLSLANG_STAGE_COMPUTE: return EShLangCompute; - case GLSLANG_STAGE_RAYGEN_NV: + case GLSLANG_STAGE_RAYGEN: return EShLangRayGen; - case GLSLANG_STAGE_INTERSECT_NV: + case GLSLANG_STAGE_INTERSECT: return EShLangIntersect; - case GLSLANG_STAGE_ANYHIT_NV: + case GLSLANG_STAGE_ANYHIT: return EShLangAnyHit; - case GLSLANG_STAGE_CLOSESTHIT_NV: + case GLSLANG_STAGE_CLOSESTHIT: return EShLangClosestHit; - case GLSLANG_STAGE_MISS_NV: + case GLSLANG_STAGE_MISS: return EShLangMiss; - case GLSLANG_STAGE_CALLABLE_NV: + case GLSLANG_STAGE_CALLABLE: return EShLangCallable; - case GLSLANG_STAGE_TASK_NV: - return EShLangTaskNV; - case GLSLANG_STAGE_MESH_NV: - return EShLangMeshNV; + case GLSLANG_STAGE_TASK: + return EShLangTask; + case GLSLANG_STAGE_MESH: + return EShLangMesh; default: break; } @@ -81,13 +85,21 @@ static EShLanguage c_shader_stage(glslang_stage_t stage) GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage) { + glslang_spv_options_t spv_options {}; + spv_options.disable_optimizer = true; + spv_options.validate = true; + + glslang_program_SPIRV_generate_with_options(program, stage, &spv_options); +} + +GLSLANG_EXPORT void glslang_program_SPIRV_generate_with_options(glslang_program_t* program, glslang_stage_t stage, glslang_spv_options_t* spv_options) { spv::SpvBuildLogger logger; - glslang::SpvOptions spvOptions; - spvOptions.validate = true; const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); - glslang::GlslangToSpv(*intermediate, program->spirv, &logger, &spvOptions); + program->spirv.clear(); + + glslang::GlslangToSpv(*intermediate, program->spirv, &logger, reinterpret_cast(spv_options)); program->loggerMessages = logger.getAllMessages(); } diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt index 22f767d7dc..b5fd5b6c26 100644 --- a/SPIRV/CMakeLists.txt +++ b/SPIRV/CMakeLists.txt @@ -31,56 +31,76 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -set(SOURCES - GlslangToSpv.cpp - InReadableOrder.cpp - Logger.cpp - SpvBuilder.cpp - SpvPostProcess.cpp - doc.cpp - SpvTools.cpp - disassemble.cpp - CInterface/spirv_c_interface.cpp) +set(SPIRV_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/GlslangToSpv.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/InReadableOrder.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/Logger.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/SpvBuilder.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/SpvPostProcess.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/doc.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/SpvTools.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/disassemble.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/CInterface/spirv_c_interface.cpp + PARENT_SCOPE) set(SPVREMAP_SOURCES SPVRemapper.cpp doc.cpp) -set(HEADERS - bitutils.h - spirv.hpp - GLSL.std.450.h - GLSL.ext.EXT.h - GLSL.ext.KHR.h - GlslangToSpv.h - hex_float.h - Logger.h - SpvBuilder.h - spvIR.h - doc.h - SpvTools.h - disassemble.h - GLSL.ext.AMD.h - GLSL.ext.NV.h - NonSemanticDebugPrintf.h) +set(SPIRV_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/bitutils.h + ${CMAKE_CURRENT_SOURCE_DIR}/spirv.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.std.450.h + ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.EXT.h + ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.KHR.h + ${CMAKE_CURRENT_SOURCE_DIR}/GlslangToSpv.h + ${CMAKE_CURRENT_SOURCE_DIR}/hex_float.h + ${CMAKE_CURRENT_SOURCE_DIR}/Logger.h + ${CMAKE_CURRENT_SOURCE_DIR}/SpvBuilder.h + ${CMAKE_CURRENT_SOURCE_DIR}/spvIR.h + ${CMAKE_CURRENT_SOURCE_DIR}/doc.h + ${CMAKE_CURRENT_SOURCE_DIR}/SpvTools.h + ${CMAKE_CURRENT_SOURCE_DIR}/disassemble.h + ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.AMD.h + ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.NV.h + ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.ARM.h + ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.QCOM.h + ${CMAKE_CURRENT_SOURCE_DIR}/NonSemanticDebugPrintf.h + ${CMAKE_CURRENT_SOURCE_DIR}/NonSemanticShaderDebugInfo100.h + PARENT_SCOPE) set(SPVREMAP_HEADERS SPVRemapper.h doc.h) -add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS}) -set_property(TARGET SPIRV PROPERTY FOLDER glslang) -set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON) +set(PUBLIC_HEADERS + GlslangToSpv.h + disassemble.h + Logger.h + spirv.hpp + SPVRemapper.h + SpvTools.h) + +add_library(SPIRV ${LIB_TYPE} ${CMAKE_CURRENT_SOURCE_DIR}/../glslang/stub.cpp) +add_library(glslang::SPIRV ALIAS SPIRV) +set_target_properties(SPIRV PROPERTIES + FOLDER glslang + POSITION_INDEPENDENT_CODE ON + VERSION "${GLSLANG_VERSION}" + SOVERSION "${GLSLANG_VERSION_MAJOR}") target_include_directories(SPIRV PUBLIC $ $) -glslang_add_build_info_dependency(SPIRV) - if (ENABLE_SPVREMAPPER) add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS}) - set_property(TARGET SPVRemapper PROPERTY FOLDER glslang) - set_property(TARGET SPVRemapper PROPERTY POSITION_INDEPENDENT_CODE ON) + add_library(glslang::SPVRemapper ALIAS SPVRemapper) + set_target_properties(SPVRemapper PROPERTIES + FOLDER glslang + POSITION_INDEPENDENT_CODE ON + VERSION "${GLSLANG_VERSION}" + SOVERSION "${GLSLANG_VERSION_MAJOR}") + glslang_only_export_explicit_symbols(SPVRemapper) endif() if(WIN32 AND BUILD_SHARED_LIBS) @@ -91,16 +111,11 @@ if(WIN32 AND BUILD_SHARED_LIBS) endif() if(ENABLE_OPT) - target_include_directories(SPIRV - PRIVATE ${spirv-tools_SOURCE_DIR}/include - PRIVATE ${spirv-tools_SOURCE_DIR}/source - ) - target_link_libraries(SPIRV PRIVATE MachineIndependent SPIRV-Tools-opt) + target_link_libraries(SPIRV PRIVATE glslang PUBLIC SPIRV-Tools-opt) target_include_directories(SPIRV PUBLIC - $ - $) + $) else() - target_link_libraries(SPIRV PRIVATE MachineIndependent) + target_link_libraries(SPIRV PRIVATE glslang) endif() if(WIN32) @@ -108,31 +123,12 @@ if(WIN32) source_group("Source" FILES ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS}) endif() -if(ENABLE_GLSLANG_INSTALL) - if(BUILD_SHARED_LIBS) - if (ENABLE_SPVREMAPPER) - install(TARGETS SPVRemapper EXPORT SPVRemapperTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif() - install(TARGETS SPIRV EXPORT SPIRVTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - else() - if (ENABLE_SPVREMAPPER) - install(TARGETS SPVRemapper EXPORT SPVRemapperTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif() - install(TARGETS SPIRV EXPORT SPIRVTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif() - +if(GLSLANG_ENABLE_INSTALL) if (ENABLE_SPVREMAPPER) - install(EXPORT SPVRemapperTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + install(TARGETS SPVRemapper EXPORT glslang-targets) endif() - install(EXPORT SPIRVTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + install(TARGETS SPIRV EXPORT glslang-targets) - install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/) + install(FILES ${PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/) endif() diff --git a/SPIRV/GLSL.ext.ARM.h b/SPIRV/GLSL.ext.ARM.h new file mode 100644 index 0000000000..14425be1e3 --- /dev/null +++ b/SPIRV/GLSL.ext.ARM.h @@ -0,0 +1,35 @@ +/* +** Copyright (c) 2022 ARM Limited +** +** 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. +*/ + +#ifndef GLSLextARM_H +#define GLSLextARM_H + +static const int GLSLextARMVersion = 100; +static const int GLSLextARMRevision = 1; + +static const char * const E_SPV_ARM_core_builtins = "SPV_ARM_core_builtins"; + +#endif // #ifndef GLSLextARM_H diff --git a/SPIRV/GLSL.ext.EXT.h b/SPIRV/GLSL.ext.EXT.h index f48f1304d6..07f3c3026a 100644 --- a/SPIRV/GLSL.ext.EXT.h +++ b/SPIRV/GLSL.ext.EXT.h @@ -39,5 +39,8 @@ static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_ato static const char* const E_SPV_EXT_shader_atomic_float16_add = "SPV_EXT_shader_atomic_float16_add"; static const char* const E_SPV_EXT_shader_atomic_float_min_max = "SPV_EXT_shader_atomic_float_min_max"; static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64"; +static const char* const E_SPV_EXT_shader_tile_image = "SPV_EXT_shader_tile_image"; +static const char* const E_SPV_EXT_mesh_shader = "SPV_EXT_mesh_shader"; +static const char* const E_SPV_ARM_cooperative_matrix_layouts = "SPV_ARM_cooperative_matrix_layouts"; #endif // #ifndef GLSLextEXT_H diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h index 5eb3e94482..38d3b974b0 100644 --- a/SPIRV/GLSL.ext.KHR.h +++ b/SPIRV/GLSL.ext.KHR.h @@ -1,5 +1,6 @@ /* ** Copyright (c) 2014-2020 The Khronos Group Inc. +** Copyright (C) 2022-2024 Arm Limited. ** Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. ** ** Permission is hereby granted, free of charge, to any person obtaining a copy @@ -29,7 +30,7 @@ #define GLSLextKHR_H static const int GLSLextKHRVersion = 100; -static const int GLSLextKHRRevision = 2; +static const int GLSLextKHRRevision = 3; static const char* const E_SPV_KHR_shader_ballot = "SPV_KHR_shader_ballot"; static const char* const E_SPV_KHR_subgroup_vote = "SPV_KHR_subgroup_vote"; @@ -52,5 +53,15 @@ static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragm static const char* const E_SPV_KHR_terminate_invocation = "SPV_KHR_terminate_invocation"; static const char* const E_SPV_KHR_workgroup_memory_explicit_layout = "SPV_KHR_workgroup_memory_explicit_layout"; static const char* const E_SPV_KHR_subgroup_uniform_control_flow = "SPV_KHR_subgroup_uniform_control_flow"; +static const char* const E_SPV_KHR_fragment_shader_barycentric = "SPV_KHR_fragment_shader_barycentric"; +static const char* const E_SPV_KHR_quad_control = "SPV_KHR_quad_control"; +static const char* const E_SPV_AMD_shader_early_and_late_fragment_tests = "SPV_AMD_shader_early_and_late_fragment_tests"; +static const char* const E_SPV_KHR_ray_tracing_position_fetch = "SPV_KHR_ray_tracing_position_fetch"; +static const char* const E_SPV_KHR_cooperative_matrix = "SPV_KHR_cooperative_matrix"; +static const char* const E_SPV_KHR_maximal_reconvergence = "SPV_KHR_maximal_reconvergence"; +static const char* const E_SPV_KHR_subgroup_rotate = "SPV_KHR_subgroup_rotate"; +static const char* const E_SPV_KHR_expect_assume = "SPV_KHR_expect_assume"; +static const char* const E_SPV_EXT_replicated_composites = "SPV_EXT_replicated_composites"; +static const char* const E_SPV_KHR_relaxed_extended_instruction = "SPV_KHR_relaxed_extended_instruction"; #endif // #ifndef GLSLextKHR_H diff --git a/SPIRV/GLSL.ext.NV.h b/SPIRV/GLSL.ext.NV.h index 93c98bf626..e4f11e4bfc 100644 --- a/SPIRV/GLSL.ext.NV.h +++ b/SPIRV/GLSL.ext.NV.h @@ -81,4 +81,13 @@ const char* const E_SPV_NV_cooperative_matrix = "SPV_NV_cooperative_matrix"; //SPV_NV_shader_sm_builtins const char* const E_SPV_NV_shader_sm_builtins = "SPV_NV_shader_sm_builtins"; +//SPV_NV_shader_execution_reorder +const char* const E_SPV_NV_shader_invocation_reorder = "SPV_NV_shader_invocation_reorder"; + +//SPV_NV_displacement_micromap +const char* const E_SPV_NV_displacement_micromap = "SPV_NV_displacement_micromap"; + +//SPV_NV_shader_atomic_fp16_vector +const char* const E_SPV_NV_shader_atomic_fp16_vector = "SPV_NV_shader_atomic_fp16_vector"; + #endif // #ifndef GLSLextNV_H diff --git a/SPIRV/GLSL.ext.QCOM.h b/SPIRV/GLSL.ext.QCOM.h new file mode 100644 index 0000000000..b52990f023 --- /dev/null +++ b/SPIRV/GLSL.ext.QCOM.h @@ -0,0 +1,43 @@ +/* +** Copyright (c) 2021 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. +*/ + +#ifndef GLSLextQCOM_H +#define GLSLextQCOM_H + +enum BuiltIn; +enum Decoration; +enum Op; +enum Capability; + +static const int GLSLextQCOMVersion = 100; +static const int GLSLextQCOMRevision = 1; + +//SPV_QCOM_image_processing +const char* const E_SPV_QCOM_image_processing = "SPV_QCOM_image_processing"; +//SPV_QCOM_image_processing2 +const char* const E_SPV_QCOM_image_processing2 = "SPV_QCOM_image_processing2"; + +#endif // #ifndef GLSLextQCOM_H diff --git a/SPIRV/GLSL.std.450.h b/SPIRV/GLSL.std.450.h index df31092bec..86d3da8065 100644 --- a/SPIRV/GLSL.std.450.h +++ b/SPIRV/GLSL.std.450.h @@ -13,7 +13,7 @@ ** ** 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/ +** 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, diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 39941d3752..50851889ec 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1,7 +1,7 @@ // // Copyright (C) 2014-2016 LunarG, Inc. // Copyright (C) 2015-2020 Google, Inc. -// Copyright (C) 2017 ARM Limited. +// Copyright (C) 2017, 2022-2024 Arm Limited. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // // All rights reserved. @@ -43,12 +43,15 @@ #include "spirv.hpp" #include "GlslangToSpv.h" #include "SpvBuilder.h" +#include "SpvTools.h" namespace spv { #include "GLSL.std.450.h" #include "GLSL.ext.KHR.h" #include "GLSL.ext.EXT.h" #include "GLSL.ext.AMD.h" #include "GLSL.ext.NV.h" + #include "GLSL.ext.ARM.h" + #include "GLSL.ext.QCOM.h" #include "NonSemanticDebugPrintf.h" } @@ -64,6 +67,7 @@ namespace spv { #include #include #include +#include #include #include #include @@ -94,26 +98,18 @@ struct OpDecorations { public: OpDecorations(spv::Decoration precision, spv::Decoration noContraction, spv::Decoration nonUniform) : precision(precision) -#ifndef GLSLANG_WEB , noContraction(noContraction), nonUniform(nonUniform) -#endif { } spv::Decoration precision; -#ifdef GLSLANG_WEB - void addNoContraction(spv::Builder&, spv::Id) const { } - void addNonUniform(spv::Builder&, spv::Id) const { } -#else void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); } void addNonUniform(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, nonUniform); } protected: spv::Decoration noContraction; spv::Decoration nonUniform; -#endif - }; } // namespace @@ -139,7 +135,7 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { bool visitLoop(glslang::TVisit, glslang::TIntermLoop*); bool visitBranch(glslang::TVisit visit, glslang::TIntermBranch*); - void finishSpv(); + void finishSpv(bool compileOnly); void dumpSpv(std::vector& out); protected: @@ -170,12 +166,14 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { spv::Id convertGlslangToSpvType(const glslang::TType& type, bool forwardReferenceOnly = false); spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&, bool lastBufferBlockMember, bool forwardReferenceOnly = false); + void applySpirvDecorate(const glslang::TType& type, spv::Id id, std::optional member); bool filterMember(const glslang::TType& member); spv::Id convertGlslangStructToSpvType(const glslang::TType&, const glslang::TTypeList* glslangStruct, glslang::TLayoutPacking, const glslang::TQualifier&); + spv::LinkageType convertGlslangLinkageToSpv(glslang::TLinkType glslangLinkType); void decorateStructType(const glslang::TType&, const glslang::TTypeList* glslangStruct, glslang::TLayoutPacking, - const glslang::TQualifier&, spv::Id); - spv::Id makeArraySizeId(const glslang::TArraySizes&, int dim); + const glslang::TQualifier&, spv::Id, const std::vector& spvMembers); + spv::Id makeArraySizeId(const glslang::TArraySizes&, int dim, bool allowZero = false); spv::Id accessChainLoad(const glslang::TType& type); void accessChainStore(const glslang::TType& type, spv::Id rvalue); void multiTypeStore(const glslang::TType&, spv::Id rValue); @@ -206,16 +204,18 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { spv::Id createBinaryMatrixOperation(spv::Op, OpDecorations&, spv::Id typeId, spv::Id left, spv::Id right); spv::Id createUnaryOperation(glslang::TOperator op, OpDecorations&, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy, - const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags); + const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags, + const glslang::TType &opType); spv::Id createUnaryMatrixOperation(spv::Op op, OpDecorations&, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy); spv::Id createConversion(glslang::TOperator op, OpDecorations&, spv::Id destTypeId, spv::Id operand, glslang::TBasicType typeProxy); - spv::Id createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize); + spv::Id createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize, spv::Id destType); spv::Id makeSmearedConstant(spv::Id constant, int vectorSize); spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy, - const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags); + const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags, + const glslang::TType &opType); spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy); spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, @@ -227,6 +227,9 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId); spv::Id getSymbolId(const glslang::TIntermSymbol* node); void addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier & qualifier); + bool hasQCOMImageProceessingDecoration(spv::Id id, spv::Decoration decor); + void addImageProcessingQCOMDecoration(spv::Id id, spv::Decoration decor); + void addImageProcessing2QCOMDecoration(spv::Id id, bool isForGather); spv::Id createSpvConstant(const glslang::TIntermTyped&); spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst, bool specConstant); @@ -260,6 +263,7 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { std::unordered_map extBuiltinMap; std::unordered_map symbolValues; + std::unordered_map builtInVariableIds; std::unordered_set rValueParameters; // set of formal function parameters passed as rValues, // rather than a pointer std::unordered_map functionMap; @@ -276,9 +280,11 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { // requiring local translation to and from SPIR-V type on every access. // Maps AST-required-type-id> std::unordered_map forceType; - - // Used later for generating OpTraceKHR/OpExecuteCallableKHR - std::unordered_map locationToSymbol[2]; + // Used by Task shader while generating opearnds for OpEmitMeshTasksEXT + spv::Id taskPayloadID; + // Used later for generating OpTraceKHR/OpExecuteCallableKHR/OpHitObjectRecordHit*/OpHitObjectGetShaderBindingTableData + std::unordered_map locationToSymbol[4]; + std::unordered_map > idToQCOMDecorations; }; // @@ -288,12 +294,6 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { // Translate glslang profile to SPIR-V source language. spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile profile) { -#ifdef GLSLANG_WEB - return spv::SourceLanguageESSL; -#elif defined(GLSLANG_ANGLE) - return spv::SourceLanguageGLSL; -#endif - switch (source) { case glslang::EShSourceGlsl: switch (profile) { @@ -314,13 +314,12 @@ spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile } // Translate glslang language (stage) to SPIR-V execution model. -spv::ExecutionModel TranslateExecutionModel(EShLanguage stage) +spv::ExecutionModel TranslateExecutionModel(EShLanguage stage, bool isMeshShaderEXT = false) { switch (stage) { case EShLangVertex: return spv::ExecutionModelVertex; case EShLangFragment: return spv::ExecutionModelFragment; case EShLangCompute: return spv::ExecutionModelGLCompute; -#ifndef GLSLANG_WEB case EShLangTessControl: return spv::ExecutionModelTessellationControl; case EShLangTessEvaluation: return spv::ExecutionModelTessellationEvaluation; case EShLangGeometry: return spv::ExecutionModelGeometry; @@ -330,9 +329,8 @@ spv::ExecutionModel TranslateExecutionModel(EShLanguage stage) case EShLangClosestHit: return spv::ExecutionModelClosestHitKHR; case EShLangMiss: return spv::ExecutionModelMissKHR; case EShLangCallable: return spv::ExecutionModelCallableKHR; - case EShLangTaskNV: return spv::ExecutionModelTaskNV; - case EShLangMeshNV: return spv::ExecutionModelMeshNV; -#endif + case EShLangTask: return (isMeshShaderEXT)? spv::ExecutionModelTaskEXT : spv::ExecutionModelTaskNV; + case EShLangMesh: return (isMeshShaderEXT)? spv::ExecutionModelMeshEXT: spv::ExecutionModelMeshNV; default: assert(0); return spv::ExecutionModelFragment; @@ -350,6 +348,7 @@ spv::Dim TranslateDimensionality(const glslang::TSampler& sampler) case glslang::EsdRect: return spv::DimRect; case glslang::EsdBuffer: return spv::DimBuffer; case glslang::EsdSubpass: return spv::DimSubpassData; + case glslang::EsdAttachmentEXT: return spv::DimTileImageDataEXT; default: assert(0); return spv::Dim2D; @@ -374,26 +373,23 @@ spv::Decoration TranslatePrecisionDecoration(const glslang::TType& type) } // Translate glslang type to SPIR-V block decorations. -spv::Decoration TranslateBlockDecoration(const glslang::TType& type, bool useStorageBuffer) +spv::Decoration TranslateBlockDecoration(const glslang::TStorageQualifier storage, bool useStorageBuffer) { - if (type.getBasicType() == glslang::EbtBlock) { - switch (type.getQualifier().storage) { - case glslang::EvqUniform: return spv::DecorationBlock; - case glslang::EvqBuffer: return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock; - case glslang::EvqVaryingIn: return spv::DecorationBlock; - case glslang::EvqVaryingOut: return spv::DecorationBlock; - case glslang::EvqShared: return spv::DecorationBlock; -#ifndef GLSLANG_WEB - case glslang::EvqPayload: return spv::DecorationBlock; - case glslang::EvqPayloadIn: return spv::DecorationBlock; - case glslang::EvqHitAttr: return spv::DecorationBlock; - case glslang::EvqCallableData: return spv::DecorationBlock; - case glslang::EvqCallableDataIn: return spv::DecorationBlock; -#endif - default: - assert(0); - break; - } + switch (storage) { + case glslang::EvqUniform: return spv::DecorationBlock; + case glslang::EvqBuffer: return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock; + case glslang::EvqVaryingIn: return spv::DecorationBlock; + case glslang::EvqVaryingOut: return spv::DecorationBlock; + case glslang::EvqShared: return spv::DecorationBlock; + case glslang::EvqPayload: return spv::DecorationBlock; + case glslang::EvqPayloadIn: return spv::DecorationBlock; + case glslang::EvqHitAttr: return spv::DecorationBlock; + case glslang::EvqCallableData: return spv::DecorationBlock; + case glslang::EvqCallableDataIn: return spv::DecorationBlock; + case glslang::EvqHitObjectAttrNV: return spv::DecorationBlock; + default: + assert(0); + break; } return spv::DecorationMax; @@ -404,11 +400,11 @@ void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector bool useVulkanMemoryModel) { if (!useVulkanMemoryModel) { - if (qualifier.isCoherent()) - memory.push_back(spv::DecorationCoherent); if (qualifier.isVolatile()) { memory.push_back(spv::DecorationVolatile); memory.push_back(spv::DecorationCoherent); + } else if (qualifier.isCoherent()) { + memory.push_back(spv::DecorationCoherent); } } if (qualifier.isRestrict()) @@ -460,14 +456,13 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T assert(type.getQualifier().layoutPacking == glslang::ElpNone); } return spv::DecorationMax; -#ifndef GLSLANG_WEB case glslang::EvqPayload: case glslang::EvqPayloadIn: case glslang::EvqHitAttr: case glslang::EvqCallableData: case glslang::EvqCallableDataIn: + case glslang::EvqHitObjectAttrNV: return spv::DecorationMax; -#endif default: assert(0); return spv::DecorationMax; @@ -503,14 +498,12 @@ spv::Decoration TGlslangToSpvTraverser::TranslateAuxiliaryStorageDecoration(cons { if (qualifier.centroid) return spv::DecorationCentroid; -#ifndef GLSLANG_WEB else if (qualifier.patch) return spv::DecorationPatch; else if (qualifier.sample) { builder.addCapability(spv::CapabilitySampleRateShading); return spv::DecorationSample; } -#endif return spv::DecorationMax; } @@ -527,24 +520,20 @@ spv::Decoration TranslateInvariantDecoration(const glslang::TQualifier& qualifie // If glslang type is noContraction, return SPIR-V NoContraction decoration. spv::Decoration TranslateNoContractionDecoration(const glslang::TQualifier& qualifier) { -#ifndef GLSLANG_WEB if (qualifier.isNoContraction()) return spv::DecorationNoContraction; else -#endif return spv::DecorationMax; } // If glslang type is nonUniform, return SPIR-V NonUniform decoration. spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glslang::TQualifier& qualifier) { -#ifndef GLSLANG_WEB if (qualifier.isNonUniform()) { builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); builder.addCapability(spv::CapabilityShaderNonUniformEXT); return spv::DecorationNonUniformEXT; } else -#endif return spv::DecorationMax; } @@ -552,13 +541,11 @@ spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glsl spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration( const spv::Builder::AccessChain::CoherentFlags& coherentFlags) { -#ifndef GLSLANG_WEB if (coherentFlags.isNonUniform()) { builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); builder.addCapability(spv::CapabilityShaderNonUniformEXT); return spv::DecorationNonUniformEXT; } else -#endif return spv::DecorationMax; } @@ -567,7 +554,6 @@ spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess( { spv::MemoryAccessMask mask = spv::MemoryAccessMaskNone; -#ifndef GLSLANG_WEB if (!glslangIntermediate->usingVulkanMemoryModel() || coherentFlags.isImage) return mask; @@ -585,7 +571,6 @@ spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess( if (mask != spv::MemoryAccessMaskNone) { builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); } -#endif return mask; } @@ -595,7 +580,6 @@ spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands( { spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone; -#ifndef GLSLANG_WEB if (!glslangIntermediate->usingVulkanMemoryModel()) return mask; @@ -613,7 +597,6 @@ spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands( if (mask != spv::ImageOperandsMaskNone) { builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); } -#endif return mask; } @@ -621,7 +604,6 @@ spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands( spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCoherent(const glslang::TType& type) { spv::Builder::AccessChain::CoherentFlags flags = {}; -#ifndef GLSLANG_WEB flags.coherent = type.getQualifier().coherent; flags.devicecoherent = type.getQualifier().devicecoherent; flags.queuefamilycoherent = type.getQualifier().queuefamilycoherent; @@ -636,7 +618,6 @@ spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCohere flags.anyCoherent() || flags.volatil; flags.isImage = type.getBasicType() == glslang::EbtSampler; -#endif flags.nonUniform = type.getQualifier().nonUniform; return flags; } @@ -646,7 +627,6 @@ spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope( { spv::Scope scope = spv::ScopeMax; -#ifndef GLSLANG_WEB if (coherentFlags.volatil || coherentFlags.coherent) { // coherent defaults to Device scope in the old model, QueueFamilyKHR scope in the new model scope = glslangIntermediate->usingVulkanMemoryModel() ? spv::ScopeQueueFamilyKHR : spv::ScopeDevice; @@ -664,7 +644,6 @@ spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope( if (glslangIntermediate->usingVulkanMemoryModel() && scope == spv::ScopeDevice) { builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR); } -#endif return scope; } @@ -679,7 +658,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI { switch (builtIn) { case glslang::EbvPointSize: -#ifndef GLSLANG_WEB // Defer adding the capability until the built-in is actually used. if (! memberDeclaration) { switch (glslangIntermediate->getStage()) { @@ -694,7 +672,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI break; } } -#endif return spv::BuiltInPointSize; case glslang::EbvPosition: return spv::BuiltInPosition; @@ -715,7 +692,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI case glslang::EbvLocalInvocationIndex: return spv::BuiltInLocalInvocationIndex; case glslang::EbvGlobalInvocationId: return spv::BuiltInGlobalInvocationId; -#ifndef GLSLANG_WEB // These *Distance capabilities logically belong here, but if the member is declared and // then never used, consumers of SPIR-V prefer the capability not be declared. // They are now generated when used, rather than here when declared. @@ -762,7 +738,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI return spv::BuiltInSampleMask; case glslang::EbvLayer: - if (glslangIntermediate->getStage() == EShLangMeshNV) { + if (glslangIntermediate->getStage() == EShLangMesh) { return spv::BuiltInLayer; } if (glslangIntermediate->getStage() == EShLangGeometry || @@ -1007,20 +983,12 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI return spv::BuiltInRayTminKHR; case glslang::EbvRayTmax: return spv::BuiltInRayTmaxKHR; + case glslang::EbvCullMask: + return spv::BuiltInCullMaskKHR; + case glslang::EbvPositionFetch: + return spv::BuiltInHitTriangleVertexPositionsKHR; case glslang::EbvInstanceCustomIndex: return spv::BuiltInInstanceCustomIndexKHR; - case glslang::EbvHitT: - { - // this is a GLSL alias of RayTmax - // in SPV_NV_ray_tracing it has a dedicated builtin - // but in SPV_KHR_ray_tracing it gets mapped to RayTmax - auto& extensions = glslangIntermediate->getRequestedExtensions(); - if (extensions.find("GL_NV_ray_tracing") != extensions.end()) { - return spv::BuiltInHitTNV; - } else { - return spv::BuiltInRayTmaxKHR; - } - } case glslang::EbvHitKind: return spv::BuiltInHitKindKHR; case glslang::EbvObjectToWorld: @@ -1037,6 +1005,22 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI builder.addExtension(spv::E_SPV_NV_ray_tracing_motion_blur); builder.addCapability(spv::CapabilityRayTracingMotionBlurNV); return spv::BuiltInCurrentRayTimeNV; + case glslang::EbvMicroTrianglePositionNV: + builder.addCapability(spv::CapabilityRayTracingDisplacementMicromapNV); + builder.addExtension("SPV_NV_displacement_micromap"); + return spv::BuiltInHitMicroTriangleVertexPositionsNV; + case glslang::EbvMicroTriangleBaryNV: + builder.addCapability(spv::CapabilityRayTracingDisplacementMicromapNV); + builder.addExtension("SPV_NV_displacement_micromap"); + return spv::BuiltInHitMicroTriangleVertexBarycentricsNV; + case glslang::EbvHitKindFrontFacingMicroTriangleNV: + builder.addCapability(spv::CapabilityRayTracingDisplacementMicromapNV); + builder.addExtension("SPV_NV_displacement_micromap"); + return spv::BuiltInHitKindFrontFacingMicroTriangleNV; + case glslang::EbvHitKindBackFacingMicroTriangleNV: + builder.addCapability(spv::CapabilityRayTracingDisplacementMicromapNV); + builder.addExtension("SPV_NV_displacement_micromap"); + return spv::BuiltInHitKindBackFacingMicroTriangleNV; // barycentrics case glslang::EbvBaryCoordNV: @@ -1048,6 +1032,15 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI builder.addCapability(spv::CapabilityFragmentBarycentricNV); return spv::BuiltInBaryCoordNoPerspNV; + case glslang::EbvBaryCoordEXT: + builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric); + builder.addCapability(spv::CapabilityFragmentBarycentricKHR); + return spv::BuiltInBaryCoordKHR; + case glslang::EbvBaryCoordNoPerspEXT: + builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric); + builder.addCapability(spv::CapabilityFragmentBarycentricKHR); + return spv::BuiltInBaryCoordNoPerspKHR; + // mesh shaders case glslang::EbvTaskCountNV: return spv::BuiltInTaskCountNV; @@ -1066,6 +1059,16 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI case glslang::EbvMeshViewIndicesNV: return spv::BuiltInMeshViewIndicesNV; + // SPV_EXT_mesh_shader + case glslang::EbvPrimitivePointIndicesEXT: + return spv::BuiltInPrimitivePointIndicesEXT; + case glslang::EbvPrimitiveLineIndicesEXT: + return spv::BuiltInPrimitiveLineIndicesEXT; + case glslang::EbvPrimitiveTriangleIndicesEXT: + return spv::BuiltInPrimitiveTriangleIndicesEXT; + case glslang::EbvCullPrimitiveEXT: + return spv::BuiltInCullPrimitiveEXT; + // sm builtins case glslang::EbvWarpsPerSM: builder.addExtension(spv::E_SPV_NV_shader_sm_builtins); @@ -1083,7 +1086,28 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI builder.addExtension(spv::E_SPV_NV_shader_sm_builtins); builder.addCapability(spv::CapabilityShaderSMBuiltinsNV); return spv::BuiltInSMIDNV; -#endif + + // ARM builtins + case glslang::EbvCoreCountARM: + builder.addExtension(spv::E_SPV_ARM_core_builtins); + builder.addCapability(spv::CapabilityCoreBuiltinsARM); + return spv::BuiltInCoreCountARM; + case glslang::EbvCoreIDARM: + builder.addExtension(spv::E_SPV_ARM_core_builtins); + builder.addCapability(spv::CapabilityCoreBuiltinsARM); + return spv::BuiltInCoreIDARM; + case glslang::EbvCoreMaxIDARM: + builder.addExtension(spv::E_SPV_ARM_core_builtins); + builder.addCapability(spv::CapabilityCoreBuiltinsARM); + return spv::BuiltInCoreMaxIDARM; + case glslang::EbvWarpIDARM: + builder.addExtension(spv::E_SPV_ARM_core_builtins); + builder.addCapability(spv::CapabilityCoreBuiltinsARM); + return spv::BuiltInWarpIDARM; + case glslang::EbvWarpMaxIDARM: + builder.addExtension(spv::E_SPV_ARM_core_builtins); + builder.addCapability(spv::CapabilityCoreBuiltinsARM); + return spv::BuiltInWarpMaxIDARM; default: return spv::BuiltInMax; @@ -1095,10 +1119,6 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy { assert(type.getBasicType() == glslang::EbtSampler); -#ifdef GLSLANG_WEB - return spv::ImageFormatUnknown; -#endif - // Check for capabilities switch (type.getQualifier().getFormat()) { case glslang::ElfRg32f: @@ -1136,6 +1156,7 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy case glslang::ElfR64i: builder.addExtension(spv::E_SPV_EXT_shader_image_int64); builder.addCapability(spv::CapabilityInt64ImageEXT); + break; default: break; } @@ -1253,24 +1274,27 @@ spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang: // Translate glslang type to SPIR-V storage class. spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type) { - if (type.getBasicType() == glslang::EbtRayQuery) + if (type.getBasicType() == glslang::EbtRayQuery || type.getBasicType() == glslang::EbtHitObjectNV) return spv::StorageClassPrivate; -#ifndef GLSLANG_WEB if (type.getQualifier().isSpirvByReference()) { if (type.getQualifier().isParamInput() || type.getQualifier().isParamOutput()) return spv::StorageClassFunction; } -#endif if (type.getQualifier().isPipeInput()) return spv::StorageClassInput; if (type.getQualifier().isPipeOutput()) return spv::StorageClassOutput; + if (type.getQualifier().storage == glslang::EvqTileImageEXT || type.isAttachmentEXT()) { + builder.addExtension(spv::E_SPV_EXT_shader_tile_image); + builder.addCapability(spv::CapabilityTileImageColorReadAccessEXT); + return spv::StorageClassTileImageEXT; + } if (glslangIntermediate->getSource() != glslang::EShSourceHlsl || type.getQualifier().storage == glslang::EvqUniform) { if (type.isAtomic()) return spv::StorageClassAtomicCounter; - if (type.containsOpaque()) + if (type.containsOpaque() && !glslangIntermediate->getBindlessMode()) return spv::StorageClassUniformConstant; } @@ -1303,14 +1327,14 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T case glslang::EvqConstReadOnly: return spv::StorageClassFunction; case glslang::EvqTemporary: return spv::StorageClassFunction; case glslang::EvqShared: return spv::StorageClassWorkgroup; -#ifndef GLSLANG_WEB case glslang::EvqPayload: return spv::StorageClassRayPayloadKHR; case glslang::EvqPayloadIn: return spv::StorageClassIncomingRayPayloadKHR; case glslang::EvqHitAttr: return spv::StorageClassHitAttributeKHR; case glslang::EvqCallableData: return spv::StorageClassCallableDataKHR; case glslang::EvqCallableDataIn: return spv::StorageClassIncomingCallableDataKHR; + case glslang::EvqtaskPayloadSharedEXT : return spv::StorageClassTaskPayloadWorkgroupEXT; + case glslang::EvqHitObjectAttrNV: return spv::StorageClassHitObjectAttributeNV; case glslang::EvqSpirvStorageClass: return static_cast(type.getQualifier().spirvStorageClass); -#endif default: assert(0); break; @@ -1326,7 +1350,9 @@ void TGlslangToSpvTraverser::TranslateLiterals(const glslang::TVectorgetBasicType() == glslang::EbtFloat) { float floatValue = static_cast(constant->getConstArray()[0].getDConst()); - unsigned literal = *reinterpret_cast(&floatValue); + unsigned literal; + static_assert(sizeof(literal) == sizeof(floatValue), "sizeof(unsigned) != sizeof(float)"); + memcpy(&literal, &floatValue, sizeof(literal)); literals.push_back(literal); } else if (constant->getBasicType() == glslang::EbtInt) { unsigned literal = constant->getConstArray()[0].getIConst(); @@ -1369,7 +1395,6 @@ void TGlslangToSpvTraverser::TranslateLiterals(const glslang::TVectorgetNanMinMaxClamp()), - nonSemanticDebugPrintf(0) + nonSemanticDebugPrintf(0), + taskPayloadID(0) { - spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage()); + bool isMeshShaderExt = (glslangIntermediate->getRequestedExtensions().find(glslang::E_GL_EXT_mesh_shader) != + glslangIntermediate->getRequestedExtensions().end()); + spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage(), isMeshShaderExt); builder.clearAccessChain(); builder.setSource(TranslateSourceLanguage(glslangIntermediate->getSource(), glslangIntermediate->getProfile()), glslangIntermediate->getVersion()); - if (options.generateDebugInfo) { - builder.setEmitOpLines(); - builder.setSourceFile(glslangIntermediate->getSourceFile()); + if (options.emitNonSemanticShaderDebugSource) + this->options.emitNonSemanticShaderDebugInfo = true; + if (options.emitNonSemanticShaderDebugInfo) + this->options.generateDebugInfo = true; + + if (this->options.generateDebugInfo) { + if (this->options.emitNonSemanticShaderDebugInfo) { + builder.setEmitNonSemanticShaderDebugInfo(this->options.emitNonSemanticShaderDebugSource); + } + else { + builder.setEmitSpirvDebugInfo(); + } + builder.setDebugMainSourceFile(glslangIntermediate->getSourceFile()); // Set the source shader's text. If for SPV version 1.0, include // a preamble in comments stating the OpModuleProcessed instructions. @@ -1545,6 +1582,9 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, for (auto iItr = include_txt.begin(); iItr != include_txt.end(); ++iItr) builder.addInclude(iItr->first, iItr->second); } + + builder.setUseReplicatedComposites(glslangIntermediate->usingReplicatedComposites()); + stdBuiltins = builder.import("GLSL.std.450"); spv::AddressingModel addressingModel = spv::AddressingModelLogical; @@ -1566,8 +1606,12 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addCapability(spv::CapabilityVariablePointers); } - shaderEntry = builder.makeEntryPoint(glslangIntermediate->getEntryPointName().c_str()); - entryPoint = builder.addEntryPoint(executionModel, shaderEntry, glslangIntermediate->getEntryPointName().c_str()); + // If not linking, there is no entry point + if (!options.compileOnly) { + shaderEntry = builder.makeEntryPoint(glslangIntermediate->getEntryPointName().c_str()); + entryPoint = + builder.addEntryPoint(executionModel, shaderEntry, glslangIntermediate->getEntryPointName().c_str()); + } // Add the source extensions const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions(); @@ -1585,12 +1629,28 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingKHR); } -#ifndef GLSLANG_WEB if (glslangIntermediate->getSubgroupUniformControlFlow()) { builder.addExtension(spv::E_SPV_KHR_subgroup_uniform_control_flow); builder.addExecutionMode(shaderEntry, spv::ExecutionModeSubgroupUniformControlFlowKHR); } -#endif + if (glslangIntermediate->getMaximallyReconverges()) { + builder.addExtension(spv::E_SPV_KHR_maximal_reconvergence); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeMaximallyReconvergesKHR); + } + + if (glslangIntermediate->getQuadDerivMode()) + { + builder.addCapability(spv::CapabilityQuadControlKHR); + builder.addExtension(spv::E_SPV_KHR_quad_control); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeQuadDerivativesKHR); + } + + if (glslangIntermediate->getReqFullQuadsMode()) + { + builder.addCapability(spv::CapabilityQuadControlKHR); + builder.addExtension(spv::E_SPV_KHR_quad_control); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeRequireFullQuadsKHR); + } unsigned int mode; switch (glslangIntermediate->getStage()) { @@ -1611,16 +1671,41 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, if (glslangIntermediate->getEarlyFragmentTests()) builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyFragmentTests); + if (glslangIntermediate->getEarlyAndLateFragmentTestsAMD()) + { + builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyAndLateFragmentTestsAMD); + builder.addExtension(spv::E_SPV_AMD_shader_early_and_late_fragment_tests); + } + if (glslangIntermediate->getPostDepthCoverage()) { builder.addCapability(spv::CapabilitySampleMaskPostDepthCoverage); builder.addExecutionMode(shaderEntry, spv::ExecutionModePostDepthCoverage); builder.addExtension(spv::E_SPV_KHR_post_depth_coverage); } + if (glslangIntermediate->getNonCoherentColorAttachmentReadEXT()) { + builder.addCapability(spv::CapabilityTileImageColorReadAccessEXT); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentColorAttachmentReadEXT); + builder.addExtension(spv::E_SPV_EXT_shader_tile_image); + } + + if (glslangIntermediate->getNonCoherentDepthAttachmentReadEXT()) { + builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentDepthAttachmentReadEXT); + builder.addExtension(spv::E_SPV_EXT_shader_tile_image); + } + + if (glslangIntermediate->getNonCoherentStencilAttachmentReadEXT()) { + builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentStencilAttachmentReadEXT); + builder.addExtension(spv::E_SPV_EXT_shader_tile_image); + } + if (glslangIntermediate->isDepthReplacing()) builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing); -#ifndef GLSLANG_WEB + if (glslangIntermediate->isStencilReplacing()) + builder.addExecutionMode(shaderEntry, spv::ExecutionModeStencilRefReplacingEXT); switch(glslangIntermediate->getDepth()) { case glslang::EldGreater: mode = spv::ExecutionModeDepthGreater; break; @@ -1628,6 +1713,20 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, case glslang::EldUnchanged: mode = spv::ExecutionModeDepthUnchanged; break; default: mode = spv::ExecutionModeMax; break; } + + if (mode != spv::ExecutionModeMax) + builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + + switch (glslangIntermediate->getStencil()) { + case glslang::ElsRefUnchangedFrontAMD: mode = spv::ExecutionModeStencilRefUnchangedFrontAMD; break; + case glslang::ElsRefGreaterFrontAMD: mode = spv::ExecutionModeStencilRefGreaterFrontAMD; break; + case glslang::ElsRefLessFrontAMD: mode = spv::ExecutionModeStencilRefLessFrontAMD; break; + case glslang::ElsRefUnchangedBackAMD: mode = spv::ExecutionModeStencilRefUnchangedBackAMD; break; + case glslang::ElsRefGreaterBackAMD: mode = spv::ExecutionModeStencilRefGreaterBackAMD; break; + case glslang::ElsRefLessBackAMD: mode = spv::ExecutionModeStencilRefLessBackAMD; break; + default: mode = spv::ExecutionModeMax; break; + } + if (mode != spv::ExecutionModeMax) builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); switch (glslangIntermediate->getInterlockOrdering()) { @@ -1659,26 +1758,33 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, } builder.addExtension(spv::E_SPV_EXT_fragment_shader_interlock); } -#endif break; - case EShLangCompute: + case EShLangCompute: { builder.addCapability(spv::CapabilityShader); - if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { - std::vector dimConstId; - for (int dim = 0; dim < 3; ++dim) { - bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); - dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst)); - if (specConst) { - builder.addDecoration(dimConstId.back(), spv::DecorationSpecId, - glslangIntermediate->getLocalSizeSpecId(dim)); + bool needSizeId = false; + for (int dim = 0; dim < 3; ++dim) { + if ((glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet)) { + needSizeId = true; + break; } - } - builder.addExecutionModeId(shaderEntry, spv::ExecutionModeLocalSizeId, dimConstId); + } + if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6 && needSizeId) { + std::vector dimConstId; + for (int dim = 0; dim < 3; ++dim) { + bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); + dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst)); + if (specConst) { + builder.addDecoration(dimConstId.back(), spv::DecorationSpecId, + glslangIntermediate->getLocalSizeSpecId(dim)); + needSizeId = true; + } + } + builder.addExecutionModeId(shaderEntry, spv::ExecutionModeLocalSizeId, dimConstId); } else { - builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0), - glslangIntermediate->getLocalSize(1), - glslangIntermediate->getLocalSize(2)); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0), + glslangIntermediate->getLocalSize(1), + glslangIntermediate->getLocalSize(2)); } if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupQuads) { builder.addCapability(spv::CapabilityComputeDerivativeGroupQuadsNV); @@ -1690,7 +1796,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives); } break; -#ifndef GLSLANG_WEB + } case EShLangTessEvaluation: case EShLangTessControl: builder.addCapability(spv::CapabilityTessellation); @@ -1766,7 +1872,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, case EShLangAnyHit: case EShLangClosestHit: case EShLangMiss: - case EShLangCallable: + case EShLangCallable: { auto& extensions = glslangIntermediate->getRequestedExtensions(); if (extensions.find("GL_NV_ray_tracing") == extensions.end()) { @@ -1777,12 +1883,27 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addCapability(spv::CapabilityRayTracingNV); builder.addExtension("SPV_NV_ray_tracing"); } + if (glslangIntermediate->getStage() != EShLangRayGen && glslangIntermediate->getStage() != EShLangCallable) { + if (extensions.find("GL_EXT_ray_cull_mask") != extensions.end()) { + builder.addCapability(spv::CapabilityRayCullMaskKHR); + builder.addExtension("SPV_KHR_ray_cull_mask"); + } + if (extensions.find("GL_EXT_ray_tracing_position_fetch") != extensions.end()) { + builder.addCapability(spv::CapabilityRayTracingPositionFetchKHR); + builder.addExtension("SPV_KHR_ray_tracing_position_fetch"); + } + } break; } - case EShLangTaskNV: - case EShLangMeshNV: - builder.addCapability(spv::CapabilityMeshShadingNV); - builder.addExtension(spv::E_SPV_NV_mesh_shader); + case EShLangTask: + case EShLangMesh: + if(isMeshShaderExt) { + builder.addCapability(spv::CapabilityMeshShadingEXT); + builder.addExtension(spv::E_SPV_EXT_mesh_shader); + } else { + builder.addCapability(spv::CapabilityMeshShadingNV); + builder.addExtension(spv::E_SPV_NV_mesh_shader); + } if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { std::vector dimConstId; for (int dim = 0; dim < 3; ++dim) { @@ -1799,7 +1920,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, glslangIntermediate->getLocalSize(1), glslangIntermediate->getLocalSize(2)); } - if (glslangIntermediate->getStage() == EShLangMeshNV) { + if (glslangIntermediate->getStage() == EShLangMesh) { builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices()); builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputPrimitivesNV, @@ -1815,13 +1936,11 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); } break; -#endif default: break; } -#ifndef GLSLANG_WEB // // Add SPIR-V requirements (GL_EXT_spirv_intrinsics) // @@ -1866,27 +1985,30 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addExecutionModeId(shaderEntry, static_cast(modeId.first), operandIds); } } -#endif } // Finish creating SPV, after the traversal is complete. -void TGlslangToSpvTraverser::finishSpv() +void TGlslangToSpvTraverser::finishSpv(bool compileOnly) { - // Finish the entry point function - if (! entryPointTerminated) { - builder.setBuildPoint(shaderEntry->getLastBlock()); - builder.leaveFunction(); - } + // If not linking, an entry point is not expected + if (!compileOnly) { + // Finish the entry point function + if (!entryPointTerminated) { + builder.setBuildPoint(shaderEntry->getLastBlock()); + builder.leaveFunction(); + } - // finish off the entry-point SPV instruction by adding the Input/Output - for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it) - entryPoint->addIdOperand(*it); + // finish off the entry-point SPV instruction by adding the Input/Output + entryPoint->reserveOperands(iOSet.size()); + for (auto id : iOSet) + entryPoint->addIdOperand(id); + } // Add capabilities, extensions, remove unneeded decorations, etc., // based on the resulting SPIR-V. // Note: WebGPU code generation must have the opportunity to aggressively // prune unreachable merge blocks and continue targets. - builder.postProcess(); + builder.postProcess(compileOnly); } // Write the SPV into 'out'. @@ -1912,13 +2034,18 @@ void TGlslangToSpvTraverser::dumpSpv(std::vector& out) // void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) { + // We update the line information even though no code might be generated here + // This is helpful to yield correct lines for control flow instructions + if (!linkageOnly) { + builder.setDebugSourceLocation(symbol->getLoc().line, symbol->getLoc().getFilename()); + } + SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); if (symbol->getType().isStruct()) glslangTypeToIdMap[symbol->getType().getStruct()] = symbol->getId(); if (symbol->getType().getQualifier().isSpecConstant()) spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); - #ifdef ENABLE_HLSL // Skip symbol handling if it is string-typed if (symbol->getBasicType() == glslang::EbtString) @@ -1929,6 +2056,9 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) // Formal function parameters were mapped during makeFunctions(). spv::Id id = getSymbolId(symbol); + if (symbol->getType().getQualifier().isTaskPayload()) + taskPayloadID = id; // cache the taskPayloadID to be used it as operand for OpEmitMeshTasksEXT + if (builder.isPointer(id)) { if (!symbol->getType().getQualifier().isParamInput() && !symbol->getType().getQualifier().isParamOutput()) { @@ -1939,7 +2069,7 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) spv::StorageClass sc = builder.getStorageClass(id); // Before SPIR-V 1.4, we only want to include Input and Output. // Starting with SPIR-V 1.4, we want all globals. - if ((glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4 && builder.isGlobalStorage(id)) || + if ((glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4 && builder.isGlobalVariable(id)) || (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)) { iOSet.insert(id); } @@ -2017,7 +2147,7 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node) { - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); if (node->getLeft()->getAsSymbolNode() != nullptr && node->getLeft()->getType().isStruct()) { glslangTypeToIdMap[node->getLeft()->getType().getStruct()] = node->getLeft()->getAsSymbolNode()->getId(); } @@ -2061,6 +2191,9 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T node->getRight()->traverse(this); spv::Id rValue = accessChainLoad(node->getRight()->getType()); + // reset line number for assignment + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); + if (node->getOp() != glslang::EOpAssign) { // the left is also an r-value builder.setAccessChain(lValue); @@ -2392,7 +2525,7 @@ spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object) bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node) { - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); if (node->getType().getQualifier().isSpecConstant()) @@ -2425,12 +2558,15 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI spv::Id length; if (node->getOperand()->getType().isCoopMat()) { - spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); - spv::Id typeId = convertGlslangToSpvType(node->getOperand()->getType()); assert(builder.isCooperativeMatrixType(typeId)); - length = builder.createCooperativeMatrixLength(typeId); + if (node->getOperand()->getType().isCoopMatKHR()) { + length = builder.createCooperativeMatrixLengthKHR(typeId); + } else { + spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); + length = builder.createCooperativeMatrixLengthNV(typeId); + } } else { glslang::TIntermTyped* block = node->getOperand()->getAsBinaryNode()->getLeft(); block->traverse(this); @@ -2456,6 +2592,14 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI return false; } + // Force variable declaration - Debug Mode Only + if (node->getOp() == glslang::EOpDeclare) { + builder.clearAccessChain(); + node->getOperand()->traverse(this); + builder.clearAccessChain(); + return false; + } + // Start by evaluating the operand // Does it need a swizzle inversion? If so, evaluation is inverted; @@ -2472,14 +2616,42 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI operandNode = node->getOperand()->getAsBinaryNode()->getLeft(); else operandNode = node->getOperand(); - + operandNode->traverse(this); spv::Id operand = spv::NoResult; spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags; -#ifndef GLSLANG_WEB + const auto hitObjectOpsWithLvalue = [](glslang::TOperator op) { + switch(op) { + case glslang::EOpReorderThreadNV: + case glslang::EOpHitObjectGetCurrentTimeNV: + case glslang::EOpHitObjectGetHitKindNV: + case glslang::EOpHitObjectGetPrimitiveIndexNV: + case glslang::EOpHitObjectGetGeometryIndexNV: + case glslang::EOpHitObjectGetInstanceIdNV: + case glslang::EOpHitObjectGetInstanceCustomIndexNV: + case glslang::EOpHitObjectGetObjectRayDirectionNV: + case glslang::EOpHitObjectGetObjectRayOriginNV: + case glslang::EOpHitObjectGetWorldRayDirectionNV: + case glslang::EOpHitObjectGetWorldRayOriginNV: + case glslang::EOpHitObjectGetWorldToObjectNV: + case glslang::EOpHitObjectGetObjectToWorldNV: + case glslang::EOpHitObjectGetRayTMaxNV: + case glslang::EOpHitObjectGetRayTMinNV: + case glslang::EOpHitObjectIsEmptyNV: + case glslang::EOpHitObjectIsHitNV: + case glslang::EOpHitObjectIsMissNV: + case glslang::EOpHitObjectRecordEmptyNV: + case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV: + case glslang::EOpHitObjectGetShaderRecordBufferHandleNV: + return true; + default: + return false; + } + }; + if (node->getOp() == glslang::EOpAtomicCounterIncrement || node->getOp() == glslang::EOpAtomicCounterDecrement || node->getOp() == glslang::EOpAtomicCounter || @@ -2493,16 +2665,15 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI node->getOp() == glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque || node->getOp() == glslang::EOpRayQueryTerminate || node->getOp() == glslang::EOpRayQueryConfirmIntersection || - (node->getOp() == glslang::EOpSpirvInst && operandNode->getAsTyped()->getQualifier().isSpirvByReference())) { + (node->getOp() == glslang::EOpSpirvInst && operandNode->getAsTyped()->getQualifier().isSpirvByReference()) || + hitObjectOpsWithLvalue(node->getOp())) { operand = builder.accessChainGetLValue(); // Special case l-value operands lvalueCoherentFlags = builder.getAccessChain().coherentFlags; lvalueCoherentFlags |= TranslateCoherent(operandNode->getAsTyped()->getType()); } else if (operandNode->getAsTyped()->getQualifier().isSpirvLiteral()) { // Will be translated to a literal value, make a placeholder here operand = spv::NoResult; - } else -#endif - { + } else { operand = accessChainLoad(node->getOperand()->getType()); } @@ -2518,9 +2689,8 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI // if not, then possibly an operation if (! result) result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, - node->getOperand()->getBasicType(), lvalueCoherentFlags); + node->getOperand()->getBasicType(), lvalueCoherentFlags, node->getType()); -#ifndef GLSLANG_WEB // it could be attached to a SPIR-V intruction if (!result) { if (node->getOp() == glslang::EOpSpirvInst) { @@ -2550,7 +2720,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI return false; // done with this node } } -#endif if (result) { if (invertedType) { @@ -2575,7 +2744,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI spv::Id one = 0; if (node->getBasicType() == glslang::EbtFloat) one = builder.makeFloatConstant(1.0F); -#ifndef GLSLANG_WEB else if (node->getBasicType() == glslang::EbtDouble) one = builder.makeDoubleConstant(1.0); else if (node->getBasicType() == glslang::EbtFloat16) @@ -2586,7 +2754,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI one = builder.makeInt16Constant(1); else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64) one = builder.makeInt64Constant(1); -#endif else one = builder.makeIntConstant(1); glslang::TOperator op; @@ -2615,7 +2782,11 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI return false; -#ifndef GLSLANG_WEB + case glslang::EOpAssumeEXT: + builder.addCapability(spv::CapabilityExpectAssumeKHR); + builder.addExtension(spv::E_SPV_KHR_expect_assume); + builder.createNoResultOp(spv::OpAssumeTrueKHR, operand); + return false; case glslang::EOpEmitStreamVertex: builder.createNoResultOp(spv::OpEmitStreamVertex, operand); return false; @@ -2628,7 +2799,12 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI case glslang::EOpRayQueryConfirmIntersection: builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR, operand); return false; -#endif + case glslang::EOpReorderThreadNV: + builder.createNoResultOp(spv::OpReorderThreadWithHitObjectNV, operand); + return false; + case glslang::EOpHitObjectRecordEmptyNV: + builder.createNoResultOp(spv::OpHitObjectRecordEmptyNV, operand); + return false; default: logger->missingFunctionality("unknown glslang unary"); @@ -2693,15 +2869,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt builder.setAccessChainRValue(result); return false; - } -#ifndef GLSLANG_WEB - else if (node->getOp() == glslang::EOpImageStore || + } else if (node->getOp() == glslang::EOpImageStore || node->getOp() == glslang::EOpImageStoreLod || node->getOp() == glslang::EOpImageAtomicStore) { // "imageStore" is a special case, which has no result return false; } -#endif glslang::TOperator binOp = glslang::EOpNull; bool reduceComparison = true; @@ -2716,32 +2889,41 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision()); switch (node->getOp()) { + case glslang::EOpScope: case glslang::EOpSequence: { - if (preVisit) + if (visit == glslang::EvPreVisit) { ++sequenceDepth; - else - --sequenceDepth; - - if (sequenceDepth == 1) { - // If this is the parent node of all the functions, we want to see them - // early, so all call points have actual SPIR-V functions to reference. - // In all cases, still let the traverser visit the children for us. - makeFunctions(node->getAsAggregate()->getSequence()); - - // Also, we want all globals initializers to go into the beginning of the entry point, before - // anything else gets there, so visit out of order, doing them all now. - makeGlobalInitializers(node->getAsAggregate()->getSequence()); + if (sequenceDepth == 1) { + // If this is the parent node of all the functions, we want to see them + // early, so all call points have actual SPIR-V functions to reference. + // In all cases, still let the traverser visit the children for us. + makeFunctions(node->getAsAggregate()->getSequence()); + + // Global initializers is specific to the shader entry point, which does not exist in compile-only mode + if (!options.compileOnly) { + // Also, we want all globals initializers to go into the beginning of the entry point, before + // anything else gets there, so visit out of order, doing them all now. + makeGlobalInitializers(node->getAsAggregate()->getSequence()); + } - //Pre process linker objects for ray tracing stages - if (glslangIntermediate->isRayTracingStage()) - collectRayTracingLinkerObjects(); + //Pre process linker objects for ray tracing stages + if (glslangIntermediate->isRayTracingStage()) + collectRayTracingLinkerObjects(); - // Initializers are done, don't want to visit again, but functions and link objects need to be processed, - // so do them manually. - visitFunctions(node->getAsAggregate()->getSequence()); + // Initializers are done, don't want to visit again, but functions and link objects need to be processed, + // so do them manually. + visitFunctions(node->getAsAggregate()->getSequence()); - return false; + return false; + } else { + if (node->getOp() == glslang::EOpScope) + builder.enterLexicalBlock(0); + } + } else { + if (sequenceDepth > 1 && node->getOp() == glslang::EOpScope) + builder.leaveLexicalBlock(); + --sequenceDepth; } return true; @@ -2767,14 +2949,30 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt } case glslang::EOpFunction: if (visit == glslang::EvPreVisit) { + if (options.generateDebugInfo) { + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); + } if (isShaderEntryPoint(node)) { inEntryPoint = true; builder.setBuildPoint(shaderEntry->getLastBlock()); + builder.enterFunction(shaderEntry); currentFunction = shaderEntry; } else { handleFunctionEntry(node); } + if (options.generateDebugInfo && !options.emitNonSemanticShaderDebugInfo) { + const auto& loc = node->getLoc(); + const char* sourceFileName = loc.getFilename(); + spv::Id sourceFileId = sourceFileName ? builder.getStringId(sourceFileName) : builder.getMainFileId(); + currentFunction->setDebugLineInfo(sourceFileId, loc.line, loc.column); + } } else { + if (options.generateDebugInfo) { + if (glslangIntermediate->getSource() == glslang::EShSourceGlsl && node->getSequence().size() > 1) { + auto endLoc = node->getSequence()[1]->getAsAggregate()->getEndLoc(); + builder.setDebugSourceLocation(endLoc.line, endLoc.getFilename()); + } + } if (inEntryPoint) entryPointTerminated = true; builder.leaveFunction(); @@ -2789,7 +2987,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt return false; case glslang::EOpFunctionCall: { - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); if (node->isUserDefined()) result = handleUserFunctionCall(node); if (result) { @@ -2855,7 +3053,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpConstructF16Mat4x3: case glslang::EOpConstructF16Mat4x4: isMatrix = true; - // fall through + [[fallthrough]]; case glslang::EOpConstructFloat: case glslang::EOpConstructVec2: case glslang::EOpConstructVec3: @@ -2907,16 +3105,26 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpConstructStruct: case glslang::EOpConstructTextureSampler: case glslang::EOpConstructReference: - case glslang::EOpConstructCooperativeMatrix: + case glslang::EOpConstructCooperativeMatrixNV: + case glslang::EOpConstructCooperativeMatrixKHR: { - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); std::vector arguments; translateArguments(*node, arguments, lvalueCoherentFlags); spv::Id constructed; - if (node->getOp() == glslang::EOpConstructTextureSampler) - constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments); - else if (node->getOp() == glslang::EOpConstructStruct || - node->getOp() == glslang::EOpConstructCooperativeMatrix || + if (node->getOp() == glslang::EOpConstructTextureSampler) { + const glslang::TType& texType = node->getSequence()[0]->getAsTyped()->getType(); + if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6 && + texType.getSampler().isBuffer()) { + // SamplerBuffer is not supported in spirv1.6 so + // `samplerBuffer(textureBuffer, sampler)` is a no-op + // and textureBuffer is the result going forward + constructed = arguments[0]; + } else + constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments); + } else if (node->getOp() == glslang::EOpConstructStruct || + node->getOp() == glslang::EOpConstructCooperativeMatrixNV || + node->getOp() == glslang::EOpConstructCooperativeMatrixKHR || node->getType().isArray()) { std::vector constituents; for (int c = 0; c < (int)arguments.size(); ++c) @@ -3014,10 +3222,9 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt atomic = true; break; -#ifndef GLSLANG_WEB case glslang::EOpAtomicStore: noReturnValue = true; - // fallthrough + [[fallthrough]]; case glslang::EOpAtomicLoad: atomic = true; break; @@ -3047,6 +3254,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt binOp = node->getOp(); break; + case glslang::EOpExpectEXT: + builder.addCapability(spv::CapabilityExpectAssumeKHR); + builder.addExtension(spv::E_SPV_KHR_expect_assume); + binOp = node->getOp(); + break; + case glslang::EOpIgnoreIntersectionNV: case glslang::EOpTerminateRayNV: case glslang::EOpTraceNV: @@ -3055,6 +3268,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpExecuteCallableNV: case glslang::EOpExecuteCallableKHR: case glslang::EOpWritePackedPrimitiveIndices4x8NV: + case glslang::EOpEmitMeshTasksEXT: + case glslang::EOpSetMeshOutputsEXT: noReturnValue = true; break; case glslang::EOpRayQueryInitialize: @@ -3089,6 +3304,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt break; case glslang::EOpCooperativeMatrixLoad: case glslang::EOpCooperativeMatrixStore: + case glslang::EOpCooperativeMatrixLoadNV: + case glslang::EOpCooperativeMatrixStoreNV: noReturnValue = true; break; case glslang::EOpBeginInvocationInterlock: @@ -3096,7 +3313,84 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt builder.addExtension(spv::E_SPV_EXT_fragment_shader_interlock); noReturnValue = true; break; -#endif + + case glslang::EOpHitObjectTraceRayNV: + case glslang::EOpHitObjectTraceRayMotionNV: + case glslang::EOpHitObjectGetAttributesNV: + case glslang::EOpHitObjectExecuteShaderNV: + case glslang::EOpHitObjectRecordEmptyNV: + case glslang::EOpHitObjectRecordMissNV: + case glslang::EOpHitObjectRecordMissMotionNV: + case glslang::EOpHitObjectRecordHitNV: + case glslang::EOpHitObjectRecordHitMotionNV: + case glslang::EOpHitObjectRecordHitWithIndexNV: + case glslang::EOpHitObjectRecordHitWithIndexMotionNV: + case glslang::EOpReorderThreadNV: + noReturnValue = true; + [[fallthrough]]; + case glslang::EOpHitObjectIsEmptyNV: + case glslang::EOpHitObjectIsMissNV: + case glslang::EOpHitObjectIsHitNV: + case glslang::EOpHitObjectGetRayTMinNV: + case glslang::EOpHitObjectGetRayTMaxNV: + case glslang::EOpHitObjectGetObjectRayOriginNV: + case glslang::EOpHitObjectGetObjectRayDirectionNV: + case glslang::EOpHitObjectGetWorldRayOriginNV: + case glslang::EOpHitObjectGetWorldRayDirectionNV: + case glslang::EOpHitObjectGetObjectToWorldNV: + case glslang::EOpHitObjectGetWorldToObjectNV: + case glslang::EOpHitObjectGetInstanceCustomIndexNV: + case glslang::EOpHitObjectGetInstanceIdNV: + case glslang::EOpHitObjectGetGeometryIndexNV: + case glslang::EOpHitObjectGetPrimitiveIndexNV: + case glslang::EOpHitObjectGetHitKindNV: + case glslang::EOpHitObjectGetCurrentTimeNV: + case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV: + case glslang::EOpHitObjectGetShaderRecordBufferHandleNV: + builder.addExtension(spv::E_SPV_NV_shader_invocation_reorder); + builder.addCapability(spv::CapabilityShaderInvocationReorderNV); + break; + case glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: + builder.addExtension(spv::E_SPV_KHR_ray_tracing_position_fetch); + builder.addCapability(spv::CapabilityRayQueryPositionFetchKHR); + noReturnValue = true; + break; + + case glslang::EOpImageSampleWeightedQCOM: + builder.addCapability(spv::CapabilityTextureSampleWeightedQCOM); + builder.addExtension(spv::E_SPV_QCOM_image_processing); + break; + case glslang::EOpImageBoxFilterQCOM: + builder.addCapability(spv::CapabilityTextureBoxFilterQCOM); + builder.addExtension(spv::E_SPV_QCOM_image_processing); + break; + case glslang::EOpImageBlockMatchSADQCOM: + case glslang::EOpImageBlockMatchSSDQCOM: + builder.addCapability(spv::CapabilityTextureBlockMatchQCOM); + builder.addExtension(spv::E_SPV_QCOM_image_processing); + break; + + case glslang::EOpImageBlockMatchWindowSSDQCOM: + case glslang::EOpImageBlockMatchWindowSADQCOM: + builder.addCapability(spv::CapabilityTextureBlockMatchQCOM); + builder.addExtension(spv::E_SPV_QCOM_image_processing); + builder.addCapability(spv::CapabilityTextureBlockMatch2QCOM); + builder.addExtension(spv::E_SPV_QCOM_image_processing2); + break; + + case glslang::EOpImageBlockMatchGatherSSDQCOM: + case glslang::EOpImageBlockMatchGatherSADQCOM: + builder.addCapability(spv::CapabilityTextureBlockMatchQCOM); + builder.addExtension(spv::E_SPV_QCOM_image_processing); + builder.addCapability(spv::CapabilityTextureBlockMatch2QCOM); + builder.addExtension(spv::E_SPV_QCOM_image_processing2); + break; + + case glslang::EOpFetchMicroTriangleVertexPositionNV: + case glslang::EOpFetchMicroTriangleVertexBarycentricNV: + builder.addExtension(spv::E_SPV_NV_displacement_micromap); + builder.addCapability(spv::CapabilityDisplacementMicromapNV); + break; case glslang::EOpDebugPrintf: noReturnValue = true; @@ -3122,7 +3416,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt right->traverse(this); spv::Id rightId = accessChainLoad(right->getType()); - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); OpDecorations decorations = { precision, TranslateNoContractionDecoration(node->getType().getQualifier()), TranslateNonUniformDecoration(node->getType().getQualifier()) }; @@ -3153,6 +3447,22 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt lvalue = true; break; + + + case glslang::EOpHitObjectRecordHitNV: + case glslang::EOpHitObjectRecordHitMotionNV: + case glslang::EOpHitObjectRecordHitWithIndexNV: + case glslang::EOpHitObjectRecordHitWithIndexMotionNV: + case glslang::EOpHitObjectTraceRayNV: + case glslang::EOpHitObjectTraceRayMotionNV: + case glslang::EOpHitObjectExecuteShaderNV: + case glslang::EOpHitObjectRecordMissNV: + case glslang::EOpHitObjectRecordMissMotionNV: + case glslang::EOpHitObjectGetAttributesNV: + if (arg == 0) + lvalue = true; + break; + case glslang::EOpRayQueryInitialize: case glslang::EOpRayQueryTerminate: case glslang::EOpRayQueryConfirmIntersection: @@ -3188,7 +3498,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt lvalue = true; break; -#ifndef GLSLANG_WEB case glslang::EOpFrexp: if (arg == 1) lvalue = true; @@ -3242,10 +3551,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt lvalue = true; break; case glslang::EOpCooperativeMatrixLoad: + case glslang::EOpCooperativeMatrixLoadNV: if (arg == 0 || arg == 1) lvalue = true; break; case glslang::EOpCooperativeMatrixStore: + case glslang::EOpCooperativeMatrixStoreNV: if (arg == 1) lvalue = true; break; @@ -3253,7 +3564,15 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt if (glslangOperands[arg]->getAsTyped()->getQualifier().isSpirvByReference()) lvalue = true; break; -#endif + case glslang::EOpReorderThreadNV: + //Three variants of reorderThreadNV, two of them use hitObjectNV + if (arg == 0 && glslangOperands.size() != 2) + lvalue = true; + break; + case glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: + if (arg == 0 || arg == 2) + lvalue = true; + break; default: break; } @@ -3263,9 +3582,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt else glslangOperands[arg]->traverse(this); -#ifndef GLSLANG_WEB if (node->getOp() == glslang::EOpCooperativeMatrixLoad || - node->getOp() == glslang::EOpCooperativeMatrixStore) { + node->getOp() == glslang::EOpCooperativeMatrixStore || + node->getOp() == glslang::EOpCooperativeMatrixLoadNV || + node->getOp() == glslang::EOpCooperativeMatrixStoreNV) { if (arg == 1) { // fold "element" parameter into the access chain @@ -3286,9 +3606,11 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt unsigned int alignment = builder.getAccessChain().alignment; int memoryAccess = TranslateMemoryAccess(coherentFlags); - if (node->getOp() == glslang::EOpCooperativeMatrixLoad) + if (node->getOp() == glslang::EOpCooperativeMatrixLoad || + node->getOp() == glslang::EOpCooperativeMatrixLoadNV) memoryAccess &= ~spv::MemoryAccessMakePointerAvailableKHRMask; - if (node->getOp() == glslang::EOpCooperativeMatrixStore) + if (node->getOp() == glslang::EOpCooperativeMatrixStore || + node->getOp() == glslang::EOpCooperativeMatrixStoreNV) memoryAccess &= ~spv::MemoryAccessMakePointerVisibleKHRMask; if (builder.getStorageClass(builder.getAccessChain().base) == spv::StorageClassPhysicalStorageBufferEXT) { @@ -3310,7 +3632,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt continue; } } -#endif // for l-values, pass the address, for r-values, pass the value if (lvalue) { @@ -3330,7 +3651,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt lvalueCoherentFlags = builder.getAccessChain().coherentFlags; lvalueCoherentFlags |= TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType()); } else { - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); glslang::TOperator glslangOp = node->getOp(); if (arg == 1 && (glslangOp == glslang::EOpRayQueryGetIntersectionType || @@ -3345,69 +3666,147 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt glslangOp == glslang::EOpRayQueryGetIntersectionObjectRayDirection || glslangOp == glslang::EOpRayQueryGetIntersectionObjectRayOrigin || glslangOp == glslang::EOpRayQueryGetIntersectionObjectToWorld || - glslangOp == glslang::EOpRayQueryGetIntersectionWorldToObject + glslangOp == glslang::EOpRayQueryGetIntersectionWorldToObject || + glslangOp == glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT )) { bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst(); operands.push_back(builder.makeIntConstant(cond ? 1 : 0)); } else if ((arg == 10 && glslangOp == glslang::EOpTraceKHR) || (arg == 11 && glslangOp == glslang::EOpTraceRayMotionNV) || - (arg == 1 && glslangOp == glslang::EOpExecuteCallableKHR)) { - const int opdNum = glslangOp == glslang::EOpTraceKHR ? 10 : (glslangOp == glslang::EOpTraceRayMotionNV ? 11 : 1); + (arg == 1 && glslangOp == glslang::EOpExecuteCallableKHR) || + (arg == 1 && glslangOp == glslang::EOpHitObjectExecuteShaderNV) || + (arg == 11 && glslangOp == glslang::EOpHitObjectTraceRayNV) || + (arg == 12 && glslangOp == glslang::EOpHitObjectTraceRayMotionNV)) { const int set = glslangOp == glslang::EOpExecuteCallableKHR ? 1 : 0; - - const int location = glslangOperands[opdNum]->getAsConstantUnion()->getConstArray()[0].getUConst(); + const int location = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getUConst(); + auto itNode = locationToSymbol[set].find(location); + visitSymbol(itNode->second); + spv::Id symId = getSymbolId(itNode->second); + operands.push_back(symId); + } else if ((arg == 12 && glslangOp == glslang::EOpHitObjectRecordHitNV) || + (arg == 13 && glslangOp == glslang::EOpHitObjectRecordHitMotionNV) || + (arg == 11 && glslangOp == glslang::EOpHitObjectRecordHitWithIndexNV) || + (arg == 12 && glslangOp == glslang::EOpHitObjectRecordHitWithIndexMotionNV) || + (arg == 1 && glslangOp == glslang::EOpHitObjectGetAttributesNV)) { + const int location = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getUConst(); + const int set = 2; auto itNode = locationToSymbol[set].find(location); visitSymbol(itNode->second); spv::Id symId = getSymbolId(itNode->second); operands.push_back(symId); -#ifndef GLSLANG_WEB } else if (glslangOperands[arg]->getAsTyped()->getQualifier().isSpirvLiteral()) { // Will be translated to a literal value, make a placeholder here operands.push_back(spv::NoResult); -#endif } else { operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType())); } } } - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); -#ifndef GLSLANG_WEB - if (node->getOp() == glslang::EOpCooperativeMatrixLoad) { + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); + if (node->getOp() == glslang::EOpCooperativeMatrixLoad || + node->getOp() == glslang::EOpCooperativeMatrixLoadNV) { std::vector idImmOps; idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf - idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride - idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor + if (node->getOp() == glslang::EOpCooperativeMatrixLoad) { + idImmOps.push_back(spv::IdImmediate(true, operands[3])); // matrixLayout + auto layout = builder.getConstantScalar(operands[3]); + if (layout == spv::CooperativeMatrixLayoutRowBlockedInterleavedARM || + layout == spv::CooperativeMatrixLayoutColumnBlockedInterleavedARM) { + builder.addExtension(spv::E_SPV_ARM_cooperative_matrix_layouts); + builder.addCapability(spv::CapabilityCooperativeMatrixLayoutsARM); + } + idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride + } else { + idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride + idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor + } idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end()); // get the pointee type spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0])); assert(builder.isCooperativeMatrixType(typeId)); // do the op - spv::Id result = builder.createOp(spv::OpCooperativeMatrixLoadNV, typeId, idImmOps); + spv::Id result = node->getOp() == glslang::EOpCooperativeMatrixLoad + ? builder.createOp(spv::OpCooperativeMatrixLoadKHR, typeId, idImmOps) + : builder.createOp(spv::OpCooperativeMatrixLoadNV, typeId, idImmOps); // store the result to the pointer (out param 'm') builder.createStore(result, operands[0]); result = 0; - } else if (node->getOp() == glslang::EOpCooperativeMatrixStore) { + } else if (node->getOp() == glslang::EOpCooperativeMatrixStore || + node->getOp() == glslang::EOpCooperativeMatrixStoreNV) { std::vector idImmOps; idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf idImmOps.push_back(spv::IdImmediate(true, operands[0])); // object - idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride - idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor + if (node->getOp() == glslang::EOpCooperativeMatrixStore) { + idImmOps.push_back(spv::IdImmediate(true, operands[3])); // matrixLayout + auto layout = builder.getConstantScalar(operands[3]); + if (layout == spv::CooperativeMatrixLayoutRowBlockedInterleavedARM || + layout == spv::CooperativeMatrixLayoutColumnBlockedInterleavedARM) { + builder.addExtension(spv::E_SPV_ARM_cooperative_matrix_layouts); + builder.addCapability(spv::CapabilityCooperativeMatrixLayoutsARM); + } + idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride + } else { + idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride + idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor + } idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end()); - builder.createNoResultOp(spv::OpCooperativeMatrixStoreNV, idImmOps); + if (node->getOp() == glslang::EOpCooperativeMatrixStore) + builder.createNoResultOp(spv::OpCooperativeMatrixStoreKHR, idImmOps); + else + builder.createNoResultOp(spv::OpCooperativeMatrixStoreNV, idImmOps); result = 0; - } else -#endif - if (atomic) { + } else if (node->getOp() == glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT) { + std::vector idImmOps; + + idImmOps.push_back(spv::IdImmediate(true, operands[0])); // q + idImmOps.push_back(spv::IdImmediate(true, operands[1])); // committed + + spv::Id typeId = builder.makeArrayType(builder.makeVectorType(builder.makeFloatType(32), 3), + builder.makeUintConstant(3), 0); + // do the op + + spv::Op spvOp = spv::OpRayQueryGetIntersectionTriangleVertexPositionsKHR; + + spv::Id result = builder.createOp(spvOp, typeId, idImmOps); + // store the result to the pointer (out param 'm') + builder.createStore(result, operands[2]); + result = 0; + } else if (node->getOp() == glslang::EOpCooperativeMatrixMulAdd) { + uint32_t matrixOperands = 0; + + // If the optional operand is present, initialize matrixOperands to that value. + if (glslangOperands.size() == 4 && glslangOperands[3]->getAsConstantUnion()) { + matrixOperands = glslangOperands[3]->getAsConstantUnion()->getConstArray()[0].getIConst(); + } + + // Determine Cooperative Matrix Operands bits from the signedness of the types. + if (isTypeSignedInt(glslangOperands[0]->getAsTyped()->getBasicType())) + matrixOperands |= spv::CooperativeMatrixOperandsMatrixASignedComponentsKHRMask; + if (isTypeSignedInt(glslangOperands[1]->getAsTyped()->getBasicType())) + matrixOperands |= spv::CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask; + if (isTypeSignedInt(glslangOperands[2]->getAsTyped()->getBasicType())) + matrixOperands |= spv::CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask; + if (isTypeSignedInt(node->getBasicType())) + matrixOperands |= spv::CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask; + + std::vector idImmOps; + idImmOps.push_back(spv::IdImmediate(true, operands[0])); + idImmOps.push_back(spv::IdImmediate(true, operands[1])); + idImmOps.push_back(spv::IdImmediate(true, operands[2])); + if (matrixOperands != 0) + idImmOps.push_back(spv::IdImmediate(false, matrixOperands)); + + result = builder.createOp(spv::OpCooperativeMatrixMulAddKHR, resultType(), idImmOps); + } else if (atomic) { // Handle all atomics glslang::TBasicType typeProxy = (node->getOp() == glslang::EOpAtomicStore) ? node->getSequence()[0]->getAsTyped()->getBasicType() : node->getBasicType(); result = createAtomicOperation(node->getOp(), precision, resultType(), operands, typeProxy, - lvalueCoherentFlags); -#ifndef GLSLANG_WEB + lvalueCoherentFlags, node->getType()); } else if (node->getOp() == glslang::EOpSpirvInst) { const auto& spirvInst = node->getSpirvInstruction(); if (spirvInst.set == "") { @@ -3434,7 +3833,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt spirvInst.id, operands); } noReturnValue = node->getBasicType() == glslang::EbtVoid; -#endif } else if (node->getOp() == glslang::EOpDebugPrintf) { if (!nonSemanticDebugPrintf) { nonSemanticDebugPrintf = builder.import("NonSemantic.DebugPrintf"); @@ -3449,13 +3847,13 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt break; case 1: { - OpDecorations decorations = { precision, + OpDecorations decorations = { precision, TranslateNoContractionDecoration(node->getType().getQualifier()), TranslateNonUniformDecoration(node->getType().getQualifier()) }; result = createUnaryOperation( node->getOp(), decorations, resultType(), operands.front(), - glslangOperands[0]->getAsTyped()->getBasicType(), lvalueCoherentFlags); + glslangOperands[0]->getAsTyped()->getBasicType(), lvalueCoherentFlags, node->getType()); } break; default: @@ -3551,35 +3949,44 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang // Find a way of executing both sides and selecting the right result. const auto executeBothSides = [&]() -> void { // execute both sides + spv::Id resultType = convertGlslangToSpvType(node->getType()); node->getTrueBlock()->traverse(this); spv::Id trueValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()); node->getFalseBlock()->traverse(this); - spv::Id falseValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()); + spv::Id falseValue = accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()); - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); // done if void if (node->getBasicType() == glslang::EbtVoid) return; // emit code to select between trueValue and falseValue - - // see if OpSelect can handle it + // see if OpSelect can handle the result type, and that the SPIR-V types + // of the inputs match the result type. if (isOpSelectable()) { // Emit OpSelect for this selection. // smear condition to vector, if necessary (AST is always scalar) // Before 1.4, smear like for mix(), starting with 1.4, keep it scalar if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_4 && builder.isVector(trueValue)) { - condition = builder.smearScalar(spv::NoPrecision, condition, + condition = builder.smearScalar(spv::NoPrecision, condition, builder.makeVectorType(builder.makeBoolType(), builder.getNumComponents(trueValue))); } + // If the types do not match, it is because of mismatched decorations on aggregates. + // Since isOpSelectable only lets us get here for SPIR-V >= 1.4, we can use OpCopyObject + // to get matching types. + if (builder.getTypeId(trueValue) != resultType) { + trueValue = builder.createUnaryOp(spv::OpCopyLogical, resultType, trueValue); + } + if (builder.getTypeId(falseValue) != resultType) { + falseValue = builder.createUnaryOp(spv::OpCopyLogical, resultType, falseValue); + } + // OpSelect - result = builder.createTriOp(spv::OpSelect, - convertGlslangToSpvType(node->getType()), condition, - trueValue, falseValue); + result = builder.createTriOp(spv::OpSelect, resultType, condition, trueValue, falseValue); builder.clearAccessChain(); builder.setAccessChainRValue(result); @@ -3587,7 +3994,7 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang // We need control flow to select the result. // TODO: Once SPIR-V OpSelect allows arbitrary types, eliminate this path. result = builder.createVariable(TranslatePrecisionDecoration(node->getType()), - spv::StorageClassFunction, convertGlslangToSpvType(node->getType())); + spv::StorageClassFunction, resultType); // Selection control: const spv::SelectionControlMask control = TranslateSelectionControl(*node); @@ -3596,10 +4003,15 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang spv::Builder::If ifBuilder(condition, control, builder); // emit the "then" statement - builder.createStore(trueValue, result); + builder.clearAccessChain(); + builder.setAccessChainLValue(result); + multiTypeStore(node->getType(), trueValue); + ifBuilder.makeBeginElse(); // emit the "else" statement - builder.createStore(falseValue, result); + builder.clearAccessChain(); + builder.setAccessChainLValue(result); + multiTypeStore(node->getType(), falseValue); // finish off the control flow ifBuilder.makeEndIf(); @@ -3626,16 +4038,26 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang // emit the "then" statement if (node->getTrueBlock() != nullptr) { node->getTrueBlock()->traverse(this); - if (result != spv::NoResult) - builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result); + if (result != spv::NoResult) { + spv::Id load = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()); + + builder.clearAccessChain(); + builder.setAccessChainLValue(result); + multiTypeStore(node->getType(), load); + } } if (node->getFalseBlock() != nullptr) { ifBuilder.makeBeginElse(); // emit the "else" statement node->getFalseBlock()->traverse(this); - if (result != spv::NoResult) - builder.createStore(accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()), result); + if (result != spv::NoResult) { + spv::Id load = accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()); + + builder.clearAccessChain(); + builder.setAccessChainLValue(result); + multiTypeStore(node->getType(), load); + } } // finish off the control flow @@ -3704,7 +4126,7 @@ bool TGlslangToSpvTraverser::visitSwitch(glslang::TVisit /* visit */, glslang::T if (codeSegments[s]) codeSegments[s]->traverse(this); else - builder.addSwitchBreak(); + builder.addSwitchBreak(true); } breakForLoop.pop(); @@ -3715,10 +4137,8 @@ bool TGlslangToSpvTraverser::visitSwitch(glslang::TVisit /* visit */, glslang::T void TGlslangToSpvTraverser::visitConstantUnion(glslang::TIntermConstantUnion* node) { -#ifndef GLSLANG_WEB if (node->getQualifier().isSpirvLiteral()) return; // Translated to a literal value, skip further processing -#endif int nextConst = 0; spv::Id constant = createSpvConstantFromConstUnionArray(node->getType(), node->getConstArray(), nextConst, false); @@ -3730,7 +4150,7 @@ void TGlslangToSpvTraverser::visitConstantUnion(glslang::TIntermConstantUnion* n bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIntermLoop* node) { auto blocks = builder.makeNewLoop(); - builder.createBranch(&blocks.head); + builder.createBranch(true, &blocks.head); // Loop control: std::vector operands; @@ -3742,12 +4162,12 @@ bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIn // by a block-ending branch. But we don't want to put any other body/test // instructions in it, since the body/test may have arbitrary instructions, // including merges of its own. - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); builder.setBuildPoint(&blocks.head); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); builder.createLoopMerge(&blocks.merge, &blocks.continue_target, control, operands); if (node->testFirst() && node->getTest()) { spv::Block& test = builder.makeNewBlock(); - builder.createBranch(&test); + builder.createBranch(true, &test); builder.setBuildPoint(&test); node->getTest()->traverse(this); @@ -3758,22 +4178,22 @@ bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIn breakForLoop.push(true); if (node->getBody()) node->getBody()->traverse(this); - builder.createBranch(&blocks.continue_target); + builder.createBranch(true, &blocks.continue_target); breakForLoop.pop(); builder.setBuildPoint(&blocks.continue_target); if (node->getTerminal()) node->getTerminal()->traverse(this); - builder.createBranch(&blocks.head); + builder.createBranch(true, &blocks.head); } else { - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); - builder.createBranch(&blocks.body); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); + builder.createBranch(true, &blocks.body); breakForLoop.push(true); builder.setBuildPoint(&blocks.body); if (node->getBody()) node->getBody()->traverse(this); - builder.createBranch(&blocks.continue_target); + builder.createBranch(true, &blocks.continue_target); breakForLoop.pop(); builder.setBuildPoint(&blocks.continue_target); @@ -3788,7 +4208,7 @@ bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIn // TODO: unless there was a break/return/discard instruction // somewhere in the body, this is an infinite loop, so we should // issue a warning. - builder.createBranch(&blocks.head); + builder.createBranch(true, &blocks.head); } } builder.setBuildPoint(&blocks.merge); @@ -3801,7 +4221,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T if (node->getExpression()) node->getExpression()->traverse(this); - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); switch (node->getFlowOp()) { case glslang::EOpKill: @@ -3824,7 +4244,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T if (breakForLoop.top()) builder.createLoopExit(); else - builder.addSwitchBreak(); + builder.addSwitchBreak(false); break; case glslang::EOpContinue: builder.createLoopContinue(); @@ -3849,7 +4269,6 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T builder.clearAccessChain(); break; -#ifndef GLSLANG_WEB case glslang::EOpDemote: builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT); builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation); @@ -3861,7 +4280,6 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T case glslang::EOpIgnoreIntersectionKHR: builder.makeStatementTerminator(spv::OpIgnoreIntersectionKHR, "post-ignoreIntersectionKHR"); break; -#endif default: assert(0); @@ -3903,7 +4321,6 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* else builder.addCapability(spv::CapabilityStorageUniform16); break; -#ifndef GLSLANG_WEB case spv::StorageClassPushConstant: builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3); builder.addCapability(spv::CapabilityStoragePushConstant16); @@ -3913,7 +4330,6 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3); builder.addCapability(spv::CapabilityStorageUniformBufferBlock16); break; -#endif default: if (storageClass == spv::StorageClassWorkgroup && node->getType().getBasicType() == glslang::EbtBlock) { @@ -3962,7 +4378,14 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* initializer = builder.makeNullConstant(spvType); } - return builder.createVariable(spv::NoPrecision, storageClass, spvType, name, initializer); + spv::Id var = builder.createVariable(spv::NoPrecision, storageClass, spvType, name, initializer, false); + std::vector topLevelDecorations; + glslang::TQualifier typeQualifier = node->getType().getQualifier(); + TranslateMemoryDecoration(typeQualifier, topLevelDecorations, glslangIntermediate->usingVulkanMemoryModel()); + for (auto deco : topLevelDecorations) { + builder.addDecoration(var, deco); + } + return var; } // Return type Id of the sampled type. @@ -3972,7 +4395,6 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler) case glslang::EbtInt: return builder.makeIntType(32); case glslang::EbtUint: return builder.makeUintType(32); case glslang::EbtFloat: return builder.makeFloatType(32); -#ifndef GLSLANG_WEB case glslang::EbtFloat16: builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch); builder.addCapability(spv::CapabilityFloat16ImageAMD); @@ -3985,7 +4407,6 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler) builder.addExtension(spv::E_SPV_EXT_shader_image_int64); builder.addCapability(spv::CapabilityInt64ImageEXT); return builder.makeUintType(64); -#endif default: assert(0); return builder.makeFloatType(32); @@ -4030,6 +4451,16 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty return convertGlslangToSpvType(type, getExplicitLayout(type), type.getQualifier(), false, forwardReferenceOnly); } +spv::LinkageType TGlslangToSpvTraverser::convertGlslangLinkageToSpv(glslang::TLinkType linkType) +{ + switch (linkType) { + case glslang::ELinkExport: + return spv::LinkageTypeExport; + default: + return spv::LinkageTypeMax; + } +} + // Do full recursive conversion of an arbitrary glslang type to a SPIR-V Id. // explicitLayout can be kept the same throughout the hierarchical recursive walk. // Mutually recursive with convertGlslangStructToSpvType(). @@ -4061,7 +4492,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty case glslang::EbtFloat: spvType = builder.makeFloatType(32); break; -#ifndef GLSLANG_WEB case glslang::EbtDouble: spvType = builder.makeFloatType(64); break; @@ -4139,7 +4569,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty } } break; -#endif case glslang::EbtSampler: { const glslang::TSampler& sampler = type.getSampler(); @@ -4150,8 +4579,10 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler), sampler.isShadow(), sampler.isArrayed(), sampler.isMultiSample(), sampler.isImageClass() ? 2 : 1, TranslateImageFormat(type)); - if (sampler.isCombined()) { - // already has both image and sampler, make the combined type + if (sampler.isCombined() && + (!sampler.isBuffer() || glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_6)) { + // Already has both image and sampler, make the combined type. Only combine sampler to + // buffer if before SPIR-V 1.6. spvType = builder.makeSampledImageType(spvType); } } @@ -4179,7 +4610,13 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty case glslang::EbtString: // no type used for OpString return 0; -#ifndef GLSLANG_WEB + + case glslang::EbtHitObjectNV: { + builder.addExtension(spv::E_SPV_NV_shader_invocation_reorder); + builder.addCapability(spv::CapabilityShaderInvocationReorderNV); + spvType = builder.makeHitObjectNVType(); + } + break; case glslang::EbtSpirvType: { // GL_EXT_spirv_intrinsics const auto& spirvType = type.getSpirvType(); @@ -4187,48 +4624,57 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty std::vector operands; for (const auto& typeParam : spirvType.typeParams) { - // Constant expression - if (typeParam.constant->isLiteral()) { - if (typeParam.constant->getBasicType() == glslang::EbtFloat) { - float floatValue = static_cast(typeParam.constant->getConstArray()[0].getDConst()); - unsigned literal = *reinterpret_cast(&floatValue); - operands.push_back({false, literal}); - } else if (typeParam.constant->getBasicType() == glslang::EbtInt) { - unsigned literal = typeParam.constant->getConstArray()[0].getIConst(); - operands.push_back({false, literal}); - } else if (typeParam.constant->getBasicType() == glslang::EbtUint) { - unsigned literal = typeParam.constant->getConstArray()[0].getUConst(); - operands.push_back({false, literal}); - } else if (typeParam.constant->getBasicType() == glslang::EbtBool) { - unsigned literal = typeParam.constant->getConstArray()[0].getBConst(); - operands.push_back({false, literal}); - } else if (typeParam.constant->getBasicType() == glslang::EbtString) { - auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str(); - unsigned literal = 0; - char* literalPtr = reinterpret_cast(&literal); - unsigned charCount = 0; - char ch = 0; - do { - ch = *(str++); - *(literalPtr++) = ch; - ++charCount; - if (charCount == 4) { + if (typeParam.getAsConstant() != nullptr) { + // Constant expression + auto constant = typeParam.getAsConstant(); + if (constant->isLiteral()) { + if (constant->getBasicType() == glslang::EbtFloat) { + float floatValue = static_cast(constant->getConstArray()[0].getDConst()); + unsigned literal; + static_assert(sizeof(literal) == sizeof(floatValue), "sizeof(unsigned) != sizeof(float)"); + memcpy(&literal, &floatValue, sizeof(literal)); + operands.push_back({false, literal}); + } else if (constant->getBasicType() == glslang::EbtInt) { + unsigned literal = constant->getConstArray()[0].getIConst(); + operands.push_back({false, literal}); + } else if (constant->getBasicType() == glslang::EbtUint) { + unsigned literal = constant->getConstArray()[0].getUConst(); + operands.push_back({false, literal}); + } else if (constant->getBasicType() == glslang::EbtBool) { + unsigned literal = constant->getConstArray()[0].getBConst(); + operands.push_back({false, literal}); + } else if (constant->getBasicType() == glslang::EbtString) { + auto str = constant->getConstArray()[0].getSConst()->c_str(); + unsigned literal = 0; + char* literalPtr = reinterpret_cast(&literal); + unsigned charCount = 0; + char ch = 0; + do { + ch = *(str++); + *(literalPtr++) = ch; + ++charCount; + if (charCount == 4) { + operands.push_back({false, literal}); + literalPtr = reinterpret_cast(&literal); + charCount = 0; + } + } while (ch != 0); + + // Partial literal is padded with 0 + if (charCount > 0) { + for (; charCount < 4; ++charCount) + *(literalPtr++) = 0; operands.push_back({false, literal}); - literalPtr = reinterpret_cast(&literal); - charCount = 0; } - } while (ch != 0); - - // Partial literal is padded with 0 - if (charCount > 0) { - for (; charCount < 4; ++charCount) - *(literalPtr++) = 0; - operands.push_back({false, literal}); - } + } else + assert(0); // Unexpected type } else - assert(0); // Unexpected type - } else - operands.push_back({true, createSpvConstant(*typeParam.constant)}); + operands.push_back({true, createSpvConstant(*constant)}); + } else { + // Type specifier + assert(typeParam.getAsType() != nullptr); + operands.push_back({true, convertGlslangToSpvType(*typeParam.getAsType())}); + } } assert(spirvInst.set == ""); // Currently, couldn't be extended instructions. @@ -4236,7 +4682,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty break; } -#endif default: assert(0); break; @@ -4250,9 +4695,10 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty spvType = builder.makeVectorType(spvType, type.getVectorSize()); } - if (type.isCoopMat()) { + if (type.isCoopMatNV()) { builder.addCapability(spv::CapabilityCooperativeMatrixNV); builder.addExtension(spv::E_SPV_NV_cooperative_matrix); + if (type.getBasicType() == glslang::EbtFloat16) builder.addCapability(spv::CapabilityFloat16); if (type.getBasicType() == glslang::EbtUint8 || @@ -4260,11 +4706,29 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty builder.addCapability(spv::CapabilityInt8); } - spv::Id scope = makeArraySizeId(*type.getTypeParameters(), 1); - spv::Id rows = makeArraySizeId(*type.getTypeParameters(), 2); - spv::Id cols = makeArraySizeId(*type.getTypeParameters(), 3); + spv::Id scope = makeArraySizeId(*type.getTypeParameters()->arraySizes, 1); + spv::Id rows = makeArraySizeId(*type.getTypeParameters()->arraySizes, 2); + spv::Id cols = makeArraySizeId(*type.getTypeParameters()->arraySizes, 3); - spvType = builder.makeCooperativeMatrixType(spvType, scope, rows, cols); + spvType = builder.makeCooperativeMatrixTypeNV(spvType, scope, rows, cols); + } + + if (type.isCoopMatKHR()) { + builder.addCapability(spv::CapabilityCooperativeMatrixKHR); + builder.addExtension(spv::E_SPV_KHR_cooperative_matrix); + + if (type.getBasicType() == glslang::EbtFloat16) + builder.addCapability(spv::CapabilityFloat16); + if (type.getBasicType() == glslang::EbtUint8 || type.getBasicType() == glslang::EbtInt8) { + builder.addCapability(spv::CapabilityInt8); + } + + spv::Id scope = makeArraySizeId(*type.getTypeParameters()->arraySizes, 0); + spv::Id rows = makeArraySizeId(*type.getTypeParameters()->arraySizes, 1); + spv::Id cols = makeArraySizeId(*type.getTypeParameters()->arraySizes, 2); + spv::Id use = builder.makeUintConstant(type.getCoopMatKHRuse()); + + spvType = builder.makeCooperativeMatrixTypeKHR(spvType, scope, rows, cols, use); } if (type.isArray()) { @@ -4305,12 +4769,10 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty if (type.isSizedArray()) spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), stride); else { -#ifndef GLSLANG_WEB if (!lastBufferBlockMember) { builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); builder.addCapability(spv::CapabilityRuntimeDescriptorArrayEXT); } -#endif spvType = builder.makeRuntimeArray(spvType); } if (stride > 0) @@ -4320,13 +4782,70 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty return spvType; } +// Apply SPIR-V decorations to the SPIR-V object (provided by SPIR-V ID). If member index is provided, the +// decorations are applied to this member. +void TGlslangToSpvTraverser::applySpirvDecorate(const glslang::TType& type, spv::Id id, std::optional member) +{ + assert(type.getQualifier().hasSpirvDecorate()); + + const glslang::TSpirvDecorate& spirvDecorate = type.getQualifier().getSpirvDecorate(); + + // Add spirv_decorate + for (auto& decorate : spirvDecorate.decorates) { + if (!decorate.second.empty()) { + std::vector literals; + TranslateLiterals(decorate.second, literals); + if (member.has_value()) + builder.addMemberDecoration(id, *member, static_cast(decorate.first), literals); + else + builder.addDecoration(id, static_cast(decorate.first), literals); + } else { + if (member.has_value()) + builder.addMemberDecoration(id, *member, static_cast(decorate.first)); + else + builder.addDecoration(id, static_cast(decorate.first)); + } + } + + // Add spirv_decorate_id + if (member.has_value()) { + // spirv_decorate_id not applied to members + assert(spirvDecorate.decorateIds.empty()); + } else { + for (auto& decorateId : spirvDecorate.decorateIds) { + std::vector operandIds; + assert(!decorateId.second.empty()); + for (auto extraOperand : decorateId.second) { + if (extraOperand->getQualifier().isFrontEndConstant()) + operandIds.push_back(createSpvConstant(*extraOperand)); + else + operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode())); + } + builder.addDecorationId(id, static_cast(decorateId.first), operandIds); + } + } + + // Add spirv_decorate_string + for (auto& decorateString : spirvDecorate.decorateStrings) { + std::vector strings; + assert(!decorateString.second.empty()); + for (auto extraOperand : decorateString.second) { + const char* string = extraOperand->getConstArray()[0].getSConst()->c_str(); + strings.push_back(string); + } + if (member.has_value()) + builder.addMemberDecoration(id, *member, static_cast(decorateString.first), strings); + else + builder.addDecoration(id, static_cast(decorateString.first), strings); + } +} + // TODO: this functionality should exist at a higher level, in creating the AST // // Identify interface members that don't have their required extension turned on. // bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member) { -#ifndef GLSLANG_WEB auto& extensions = glslangIntermediate->getRequestedExtensions(); if (member.getFieldName() == "gl_SecondaryViewportMaskNV" && @@ -4336,7 +4855,13 @@ bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member) extensions.find("GL_NV_stereo_view_rendering") == extensions.end()) return true; - if (glslangIntermediate->getStage() != EShLangMeshNV) { + if (glslangIntermediate->getStage() == EShLangMesh) { + if (member.getFieldName() == "gl_PrimitiveShadingRateEXT" && + extensions.find("GL_EXT_fragment_shading_rate") == extensions.end()) + return true; + } + + if (glslangIntermediate->getStage() != EShLangMesh) { if (member.getFieldName() == "gl_ViewportMask" && extensions.find("GL_NV_viewport_array2") == extensions.end()) return true; @@ -4347,7 +4872,6 @@ bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member) extensions.find("GL_NVX_multiview_per_view_attributes") == extensions.end()) return true; } -#endif return false; }; @@ -4366,14 +4890,14 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy // except sometimes for blocks std::vector > deferredForwardPointers; for (int i = 0; i < (int)glslangMembers->size(); i++) { - glslang::TType& glslangMember = *(*glslangMembers)[i].type; - if (glslangMember.hiddenMember()) { + auto& glslangMember = (*glslangMembers)[i]; + if (glslangMember.type->hiddenMember()) { ++memberDelta; if (type.getBasicType() == glslang::EbtBlock) memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = -1; } else { if (type.getBasicType() == glslang::EbtBlock) { - if (filterMember(glslangMember)) { + if (filterMember(*glslangMember.type)) { memberDelta++; memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = -1; continue; @@ -4381,7 +4905,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = i - memberDelta; } // modify just this child's view of the qualifier - glslang::TQualifier memberQualifier = glslangMember.getQualifier(); + glslang::TQualifier memberQualifier = glslangMember.type->getQualifier(); InheritQualifiers(memberQualifier, qualifier); // manually inherit location @@ -4392,30 +4916,43 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy bool lastBufferBlockMember = qualifier.storage == glslang::EvqBuffer && i == (int)glslangMembers->size() - 1; - // Make forward pointers for any pointer members, and create a list of members to - // convert to spirv types after creating the struct. - if (glslangMember.isReference()) { - if (forwardPointers.find(glslangMember.getReferentType()) == forwardPointers.end()) { - deferredForwardPointers.push_back(std::make_pair(&glslangMember, memberQualifier)); - } - spvMembers.push_back( - convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember, - true)); - } else { - spvMembers.push_back( - convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember, - false)); + // Make forward pointers for any pointer members. + if (glslangMember.type->isReference() && + forwardPointers.find(glslangMember.type->getReferentType()) == forwardPointers.end()) { + deferredForwardPointers.push_back(std::make_pair(glslangMember.type, memberQualifier)); + } + + // Create the member type. + auto const spvMember = convertGlslangToSpvType(*glslangMember.type, explicitLayout, memberQualifier, lastBufferBlockMember, + glslangMember.type->isReference()); + spvMembers.push_back(spvMember); + + // Update the builder with the type's location so that we can create debug types for the structure members. + // There doesn't exist a "clean" entry point for this information to be passed along to the builder so, for now, + // it is stored in the builder and consumed during the construction of composite debug types. + // TODO: This probably warrants further investigation. This approach was decided to be the least ugly of the + // quick and dirty approaches that were tried. + // Advantages of this approach: + // + Relatively clean. No direct calls into debug type system. + // + Handles nested recursive structures. + // Disadvantages of this approach: + // + Not as clean as desired. Traverser queries/sets persistent state. This is fragile. + // + Table lookup during creation of composite debug types. This really shouldn't be necessary. + if(options.emitNonSemanticShaderDebugInfo) { + builder.debugTypeLocs[spvMember].name = glslangMember.type->getFieldName().c_str(); + builder.debugTypeLocs[spvMember].line = glslangMember.loc.line; + builder.debugTypeLocs[spvMember].column = glslangMember.loc.column; } } } // Make the SPIR-V type - spv::Id spvType = builder.makeStructType(spvMembers, type.getTypeName().c_str()); + spv::Id spvType = builder.makeStructType(spvMembers, type.getTypeName().c_str(), false); if (! HasNonLayoutQualifiers(type, qualifier)) structMap[explicitLayout][qualifier.layoutMatrix][glslangMembers] = spvType; // Decorate it - decorateStructType(type, glslangMembers, explicitLayout, qualifier, spvType); + decorateStructType(type, glslangMembers, explicitLayout, qualifier, spvType, spvMembers); for (int i = 0; i < (int)deferredForwardPointers.size(); ++i) { auto it = deferredForwardPointers[i]; @@ -4429,7 +4966,8 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, const glslang::TTypeList* glslangMembers, glslang::TLayoutPacking explicitLayout, const glslang::TQualifier& qualifier, - spv::Id spvType) + spv::Id spvType, + const std::vector& spvMembers) { // Name and decorate the non-hidden members int offset = -1; @@ -4464,14 +5002,11 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, glslangIntermediate->getSource() == glslang::EShSourceHlsl) { builder.addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier)); builder.addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier)); -#ifndef GLSLANG_WEB addMeshNVDecoration(spvType, member, memberQualifier); -#endif } } builder.addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier)); -#ifndef GLSLANG_WEB if (type.getBasicType() == glslang::EbtBlock && qualifier.storage == glslang::EvqBuffer) { // Add memory decorations only to top-level members of shader storage block @@ -4481,8 +5016,6 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, builder.addMemberDecoration(spvType, member, memory[i]); } -#endif - // Location assignment was already completed correctly by the front end, // just track whether a member needs to be decorated. // Ignore member locations if the container is an array, as that's @@ -4515,7 +5048,6 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, if (builtIn != spv::BuiltInMax) builder.addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn); -#ifndef GLSLANG_WEB // nonuniform builder.addMemberDecoration(spvType, member, TranslateNonUniformDecoration(glslangMember.getQualifier())); @@ -4546,50 +5078,33 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough); } - // - // Add SPIR-V decorations for members (GL_EXT_spirv_intrinsics) - // - if (glslangMember.getQualifier().hasSprivDecorate()) { - const glslang::TSpirvDecorate& spirvDecorate = glslangMember.getQualifier().getSpirvDecorate(); - - // Add spirv_decorate - for (auto& decorate : spirvDecorate.decorates) { - if (!decorate.second.empty()) { - std::vector literals; - TranslateLiterals(decorate.second, literals); - builder.addMemberDecoration(spvType, member, static_cast(decorate.first), literals); - } - else - builder.addMemberDecoration(spvType, member, static_cast(decorate.first)); - } - - // spirv_decorate_id not applied to members - assert(spirvDecorate.decorateIds.empty()); - - // Add spirv_decorate_string - for (auto& decorateString : spirvDecorate.decorateStrings) { - std::vector strings; - assert(!decorateString.second.empty()); - for (auto extraOperand : decorateString.second) { - const char* string = extraOperand->getConstArray()[0].getSConst()->c_str(); - strings.push_back(string); - } - builder.addDecoration(spvType, static_cast(decorateString.first), strings); - } - } -#endif + // Add SPIR-V decorations (GL_EXT_spirv_intrinsics) + if (glslangMember.getQualifier().hasSpirvDecorate()) + applySpirvDecorate(glslangMember, spvType, member); } // Decorate the structure builder.addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix)); - builder.addDecoration(spvType, TranslateBlockDecoration(type, glslangIntermediate->usingStorageBuffer())); + const auto basicType = type.getBasicType(); + const auto typeStorageQualifier = type.getQualifier().storage; + if (basicType == glslang::EbtBlock) { + builder.addDecoration(spvType, TranslateBlockDecoration(typeStorageQualifier, glslangIntermediate->usingStorageBuffer())); + } else if (basicType == glslang::EbtStruct && glslangIntermediate->getSpv().vulkan > 0) { + const auto hasRuntimeArray = !spvMembers.empty() && builder.getOpCode(spvMembers.back()) == spv::OpTypeRuntimeArray; + if (hasRuntimeArray) { + builder.addDecoration(spvType, TranslateBlockDecoration(typeStorageQualifier, glslangIntermediate->usingStorageBuffer())); + } + } + + if (qualifier.hasHitObjectShaderRecordNV()) + builder.addDecoration(spvType, spv::DecorationHitObjectShaderRecordBufferNV); } // Turn the expression forming the array size into an id. // This is not quite trivial, because of specialization constants. // Sometimes, a raw constant is turned into an Id, and sometimes // a specialization constant expression is. -spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arraySizes, int dim) +spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arraySizes, int dim, bool allowZero) { // First, see if this is sized with a node, meaning a specialization constant: glslang::TIntermTyped* specNode = arraySizes.getDimNode(dim); @@ -4603,7 +5118,10 @@ spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arra // Otherwise, need a compile-time (front end) size, get it: int size = arraySizes.getDimSize(dim); - assert(size > 0); + + if (!allowZero) + assert(size > 0); + return builder.makeUintConstant(size); } @@ -4619,6 +5137,16 @@ spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type) spv::Builder::AccessChain::CoherentFlags coherentFlags = builder.getAccessChain().coherentFlags; coherentFlags |= TranslateCoherent(type); + spv::MemoryAccessMask accessMask = spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask); + // If the value being loaded is HelperInvocation, SPIR-V 1.6 is being generated (so that + // SPV_EXT_demote_to_helper_invocation is in core) and the memory model is in use, add + // the Volatile MemoryAccess semantic. + if (type.getQualifier().builtIn == glslang::EbvHelperInvocation && + glslangIntermediate->usingVulkanMemoryModel() && + glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { + accessMask = spv::MemoryAccessMask(accessMask | spv::MemoryAccessVolatileMask); + } + unsigned int alignment = builder.getAccessChain().alignment; alignment |= type.getBufferReferenceAlignment(); @@ -4626,7 +5154,7 @@ spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type) TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags), TranslateNonUniformDecoration(type.getQualifier()), nominalTypeId, - spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask), + accessMask, TranslateMemoryScope(coherentFlags), alignment); @@ -4868,17 +5396,37 @@ void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType int memberAlignment = glslangIntermediate->getMemberAlignment(memberType, memberSize, dummyStride, explicitLayout, matrixLayout == glslang::ElmRowMajor); + bool isVectorLike = memberType.isVector(); + if (memberType.isMatrix()) { + if (matrixLayout == glslang::ElmRowMajor) + isVectorLike = memberType.getMatrixRows() == 1; + else + isVectorLike = memberType.getMatrixCols() == 1; + } + // Adjust alignment for HLSL rules // TODO: make this consistent in early phases of code: // adjusting this late means inconsistencies with earlier code, which for reflection is an issue // Until reflection is brought in sync with these adjustments, don't apply to $Global, // which is the most likely to rely on reflection, and least likely to rely implicit layouts if (glslangIntermediate->usingHlslOffsets() && - ! memberType.isArray() && memberType.isVector() && structType.getTypeName().compare("$Global") != 0) { - int dummySize; - int componentAlignment = glslangIntermediate->getBaseAlignmentScalar(memberType, dummySize); - if (componentAlignment <= 4) + ! memberType.isStruct() && structType.getTypeName().compare("$Global") != 0) { + int componentSize; + int componentAlignment = glslangIntermediate->getBaseAlignmentScalar(memberType, componentSize); + if (! memberType.isArray() && isVectorLike && componentAlignment <= 4) memberAlignment = componentAlignment; + + // Don't add unnecessary padding after this member + // (undo std140 bumping size to a mutliple of vec4) + if (explicitLayout == glslang::ElpStd140) { + if (memberType.isMatrix()) { + if (matrixLayout == glslang::ElmRowMajor) + memberSize -= componentSize * (4 - memberType.getMatrixCols()); + else + memberSize -= componentSize * (4 - memberType.getMatrixRows()); + } else if (memberType.isArray()) + memberSize -= componentSize * (4 - memberType.getVectorSize()); + } } // Bump up to member alignment @@ -4886,7 +5434,7 @@ void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType // Bump up to vec4 if there is a bad straddle if (explicitLayout != glslang::ElpScalar && glslangIntermediate->improperStraddle(memberType, memberSize, - currentOffset)) + currentOffset, isVectorLike)) glslang::RoundToPow2(currentOffset, 16); nextOffset = currentOffset + memberSize; @@ -4898,7 +5446,6 @@ void TGlslangToSpvTraverser::declareUseOfStructMember(const glslang::TTypeList& switch (glslangBuiltIn) { case glslang::EbvPointSize: -#ifndef GLSLANG_WEB case glslang::EbvClipDistance: case glslang::EbvCullDistance: case glslang::EbvViewportMaskNV: @@ -4914,7 +5461,6 @@ void TGlslangToSpvTraverser::declareUseOfStructMember(const glslang::TTypeList& case glslang::EbvLayerPerViewNV: case glslang::EbvMeshViewCountNV: case glslang::EbvMeshViewIndicesNV: -#endif // Generate the associated capability. Delegate to TranslateBuiltInDecoration. // Alternately, we could just call this for any glslang built-in, since the // capability already guards against duplicates. @@ -4953,10 +5499,8 @@ bool TGlslangToSpvTraverser::originalParam(glslang::TStorageQualifier qualifier, return true; if (glslangIntermediate->getSource() == glslang::EShSourceHlsl) return paramType.getBasicType() == glslang::EbtBlock; - return paramType.containsOpaque() || // sampler, etc. -#ifndef GLSLANG_WEB + return (paramType.containsOpaque() && !glslangIntermediate->getBindlessMode()) || // sampler, etc. paramType.getQualifier().isSpirvByReference() || // spirv_by_reference -#endif (paramType.getBasicType() == glslang::EbtBlock && qualifier == glslang::EvqBuffer); // SSBO } @@ -4975,8 +5519,10 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF // memory and use RestrictPointer/AliasedPointer. if (originalParam(type.getQualifier().storage, type, false) || !writableParam(type.getQualifier().storage)) { - decorations.push_back(type.getQualifier().isRestrict() ? spv::DecorationRestrict : - spv::DecorationAliased); + // TranslateMemoryDecoration added Restrict decoration already. + if (!type.getQualifier().isRestrict()) { + decorations.push_back(spv::DecorationAliased); + } } else { decorations.push_back(type.getQualifier().isRestrict() ? spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT); @@ -4986,9 +5532,21 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF for (int f = 0; f < (int)glslFunctions.size(); ++f) { glslang::TIntermAggregate* glslFunction = glslFunctions[f]->getAsAggregate(); - if (! glslFunction || glslFunction->getOp() != glslang::EOpFunction || isShaderEntryPoint(glslFunction)) + if (! glslFunction || glslFunction->getOp() != glslang::EOpFunction) continue; + builder.setDebugSourceLocation(glslFunction->getLoc().line, glslFunction->getLoc().getFilename()); + + if (isShaderEntryPoint(glslFunction)) { + // For HLSL, the entry function is actually a compiler generated function to resolve the difference of + // entry function signature between HLSL and SPIR-V. So we don't emit debug information for that. + if (glslangIntermediate->getSource() != glslang::EShSourceHlsl) { + builder.setupFunctionDebugInfo(shaderEntry, glslangIntermediate->getEntryPointMangledName().c_str(), + std::vector(), // main function has no param + std::vector()); + } + continue; + } // We're on a user function. Set up the basic interface for the function now, // so that it's available to call. Translating the body will happen later. // @@ -5004,6 +5562,7 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF // GLSL has copy-in/copy-out semantics. They can be handled though with a pointer to a copy. std::vector paramTypes; + std::vector paramNames; std::vector> paramDecorations; // list of decorations per parameter glslang::TIntermSequence& parameters = glslFunction->getSequence()[0]->getAsAggregate()->getSequence(); @@ -5028,11 +5587,16 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF paramTypes.push_back(typeId); } + for (auto const parameter:parameters) { + paramNames.push_back(parameter->getAsSymbolNode()->getName().c_str()); + } + spv::Block* functionBlock; - spv::Function *function = builder.makeFunctionEntry(TranslatePrecisionDecoration(glslFunction->getType()), - convertGlslangToSpvType(glslFunction->getType()), - glslFunction->getName().c_str(), paramTypes, - paramDecorations, &functionBlock); + spv::Function* function = builder.makeFunctionEntry( + TranslatePrecisionDecoration(glslFunction->getType()), convertGlslangToSpvType(glslFunction->getType()), + glslFunction->getName().c_str(), convertGlslangLinkageToSpv(glslFunction->getLinkType()), paramTypes, + paramDecorations, &functionBlock); + builder.setupFunctionDebugInfo(function, glslFunction->getName().c_str(), paramTypes, paramNames); if (implicitThis) function->setImplicitThis(); @@ -5095,6 +5659,10 @@ void TGlslangToSpvTraverser::collectRayTracingLinkerObjects() set = 1; break; + case glslang::EvqHitObjectAttrNV: + set = 2; + break; + default: set = -1; } @@ -5121,6 +5689,7 @@ void TGlslangToSpvTraverser::handleFunctionEntry(const glslang::TIntermAggregate currentFunction = functionMap[node->getName().c_str()]; spv::Block* functionBlock = currentFunction->getEntryBlock(); builder.setBuildPoint(functionBlock); + builder.enterFunction(currentFunction); } void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector& arguments, @@ -5130,23 +5699,18 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& glslang::TSampler sampler = {}; bool cubeCompare = false; -#ifndef GLSLANG_WEB bool f16ShadowCompare = false; -#endif if (node.isTexture() || node.isImage()) { sampler = glslangArguments[0]->getAsTyped()->getType().getSampler(); cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow; -#ifndef GLSLANG_WEB f16ShadowCompare = sampler.shadow && glslangArguments[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16; -#endif } for (int i = 0; i < (int)glslangArguments.size(); ++i) { builder.clearAccessChain(); glslangArguments[i]->traverse(this); -#ifndef GLSLANG_WEB // Special case l-value operands bool lvalue = false; switch (node.getOp()) { @@ -5242,6 +5806,10 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& if (i == 7) lvalue = true; break; + case glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: + if (i == 2) + lvalue = true; + break; default: break; } @@ -5252,9 +5820,16 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& lvalueCoherentFlags = builder.getAccessChain().coherentFlags; builder.addDecoration(lvalue_id, TranslateNonUniformDecoration(lvalueCoherentFlags)); lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType()); - } else -#endif - arguments.push_back(accessChainLoad(glslangArguments[i]->getAsTyped()->getType())); + } else { + if (i > 0 && + glslangArguments[i]->getAsSymbolNode() && glslangArguments[i-1]->getAsSymbolNode() && + glslangArguments[i]->getAsSymbolNode()->getId() == glslangArguments[i-1]->getAsSymbolNode()->getId()) { + // Reuse the id if possible + arguments.push_back(arguments[i-1]); + } else { + arguments.push_back(accessChainLoad(glslangArguments[i]->getAsTyped()->getType())); + } + } } } @@ -5270,7 +5845,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO if (! node->isImage() && ! node->isTexture()) return spv::NoResult; - builder.setLine(node->getLoc().line, node->getLoc().getFilename()); + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); // Process a GLSL texturing op (will be SPV image) @@ -5278,13 +5853,9 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType() : node->getAsUnaryNode()->getOperand()->getAsTyped()->getType(); const glslang::TSampler sampler = imageType.getSampler(); -#ifdef GLSLANG_WEB - const bool f16ShadowCompare = false; -#else bool f16ShadowCompare = (sampler.shadow && node->getAsAggregate()) ? node->getAsAggregate()->getSequence()[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16 : false; -#endif const auto signExtensionMask = [&]() { if (builder.getSpvVersion() >= spv::Spv_1_4) { @@ -5330,7 +5901,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO return builder.createTextureQueryCall(spv::OpImageQuerySizeLod, params, isUnsignedResult); } else return builder.createTextureQueryCall(spv::OpImageQuerySize, params, isUnsignedResult); -#ifndef GLSLANG_WEB case glslang::EOpImageQuerySamples: case glslang::EOpTextureQuerySamples: return builder.createTextureQueryCall(spv::OpImageQuerySamples, params, isUnsignedResult); @@ -5341,7 +5911,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO return builder.createTextureQueryCall(spv::OpImageQueryLevels, params, isUnsignedResult); case glslang::EOpSparseTexelsResident: return builder.createUnaryOp(spv::OpImageSparseTexelsResident, builder.makeBoolType(), arguments[0]); -#endif default: assert(0); break; @@ -5401,6 +5970,17 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO return result; } + if (cracked.attachmentEXT) { + if (opIt != arguments.end()) { + spv::IdImmediate sample = { true, *opIt }; + operands.push_back(sample); + } + spv::Id result = builder.createOp(spv::OpColorAttachmentReadEXT, resultType(), operands); + builder.addExtension(spv::E_SPV_EXT_shader_tile_image); + builder.setPrecision(result, precision); + return result; + } + spv::IdImmediate coord = { true, *(opIt++) }; operands.push_back(coord); if (node->getOp() == glslang::EOpImageLoad || node->getOp() == glslang::EOpImageLoadLod) { @@ -5548,10 +6128,12 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO operands.push_back(sample); spv::Id resultTypeId; + glslang::TBasicType typeProxy = node->getBasicType(); // imageAtomicStore has a void return type so base the pointer type on // the type of the value operand. if (node->getOp() == glslang::EOpImageAtomicStore) { resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(*opIt)); + typeProxy = node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().getSampler().type; } else { resultTypeId = builder.makePointer(spv::StorageClassImage, resultType()); } @@ -5565,12 +6147,11 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO for (; opIt != arguments.end(); ++opIt) operands.push_back(*opIt); - return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(), - lvalueCoherentFlags); + return createAtomicOperation(node->getOp(), precision, resultType(), operands, typeProxy, + lvalueCoherentFlags, node->getType()); } } -#ifndef GLSLANG_WEB // Check for fragment mask functions other than queries if (cracked.fragMask) { assert(sampler.ms); @@ -5604,7 +6185,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO builder.addCapability(spv::CapabilityFragmentMaskAMD); return builder.createOp(fragMaskOp, resultType(), operands); } -#endif // Check for texture functions other than queries bool sparse = node->isSparseTexture(); @@ -5638,7 +6218,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO bias = true; } -#ifndef GLSLANG_WEB if (cracked.gather) { const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions(); if (bias || cracked.lod || @@ -5647,7 +6226,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO builder.addCapability(spv::CapabilityImageGatherBiasLodAMD); } } -#endif // set the rest of the arguments @@ -5707,7 +6285,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO ++extraArgs; } -#ifndef GLSLANG_WEB // lod clamp if (cracked.lodClamp) { params.lodClamp = arguments[2 + extraArgs]; @@ -5736,14 +6313,13 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO resultStruct = arguments[4 + extraArgs]; extraArgs += 3; } -#endif + // bias if (bias) { params.bias = arguments[2 + extraArgs]; ++extraArgs; } -#ifndef GLSLANG_WEB if (imageFootprint) { builder.addExtension(spv::E_SPV_NV_shader_image_footprint); builder.addCapability(spv::CapabilityImageFootprintNV); @@ -5769,10 +6345,10 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO assert(builder.isStructType(resultStructType)); //resType (SPIR-V type) contains 6 elements: - //Member 0 must be a Boolean type scalar(LOD), - //Member 1 must be a vector of integer type, whose Signedness operand is 0(anchor), - //Member 2 must be a vector of integer type, whose Signedness operand is 0(offset), - //Member 3 must be a vector of integer type, whose Signedness operand is 0(mask), + //Member 0 must be a Boolean type scalar(LOD), + //Member 1 must be a vector of integer type, whose Signedness operand is 0(anchor), + //Member 2 must be a vector of integer type, whose Signedness operand is 0(offset), + //Member 3 must be a vector of integer type, whose Signedness operand is 0(mask), //Member 4 must be a scalar of integer type, whose Signedness operand is 0(lod), //Member 5 must be a scalar of integer type, whose Signedness operand is 0(granularity). std::vector members; @@ -5785,7 +6361,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO //call ImageFootprintNV spv::Id res = builder.createTextureCall(precision, resType, sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params, signExtensionMask()); - + //copy resType (SPIR-V type) to resultStructType(OpenGL type) for (int i = 0; i < 5; i++) { builder.clearAccessChain(); @@ -5801,7 +6377,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO } return builder.createCompositeExtract(res, resultType(), 0); } -#endif // projective component (might not to move) // GLSL: "The texture coordinates consumed from P, not including the last component of P, @@ -5826,7 +6401,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO } } -#ifndef GLSLANG_WEB // nonprivate if (imageType.getQualifier().nonprivate) { params.nonprivate = true; @@ -5836,9 +6410,8 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO if (imageType.getQualifier().volatil) { params.volatil = true; } -#endif - std::vector result( 1, + std::vector result( 1, builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params, signExtensionMask()) ); @@ -5887,6 +6460,9 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg } } + // Reset source location to the function call location after argument evaluation + builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); + // 2. Allocate space for anything needing a copy, and if it's "in" or "inout" // copy the original into that space. // @@ -6100,6 +6676,10 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD binOp = isUnsigned ? spv::OpUMul32x16INTEL : spv::OpIMul32x16INTEL; break; + case glslang::EOpExpectEXT: + binOp = spv::OpExpectKHR; + break; + case glslang::EOpLessThan: case glslang::EOpGreaterThan: case glslang::EOpLessThanEqual: @@ -6322,7 +6902,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, OpDecora } spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDecorations& decorations, spv::Id typeId, - spv::Id operand, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags) + spv::Id operand, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags, + const glslang::TType &opType) { spv::Op unaryOp = spv::OpNop; int extBuiltins = -1; @@ -6490,7 +7071,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe case glslang::EOpUnpackHalf2x16: libCall = spv::GLSLstd450UnpackHalf2x16; break; -#ifndef GLSLANG_WEB case glslang::EOpPackSnorm4x8: libCall = spv::GLSLstd450PackSnorm4x8; break; @@ -6509,7 +7089,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe case glslang::EOpUnpackDouble2x32: libCall = spv::GLSLstd450UnpackDouble2x32; break; -#endif case glslang::EOpPackInt2x32: case glslang::EOpUnpackInt2x32: @@ -6564,7 +7143,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe libCall = spv::GLSLstd450SSign; break; -#ifndef GLSLANG_WEB case glslang::EOpDPdxFine: unaryOp = spv::OpDPdxFine; break; @@ -6613,7 +7191,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe // Handle all of the atomics in one place, in createAtomicOperation() std::vector operands; operands.push_back(operand); - return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy, lvalueCoherentFlags); + return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy, lvalueCoherentFlags, opType); } case glslang::EOpBitFieldReverse: @@ -6706,7 +7284,9 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe case glslang::EOpSubgroupExclusiveXor: case glslang::EOpSubgroupQuadSwapHorizontal: case glslang::EOpSubgroupQuadSwapVertical: - case glslang::EOpSubgroupQuadSwapDiagonal: { + case glslang::EOpSubgroupQuadSwapDiagonal: + case glslang::EOpSubgroupQuadAll: + case glslang::EOpSubgroupQuadAny: { std::vector operands; operands.push_back(operand); return createSubgroupOperation(op, typeId, operands, typeProxy); @@ -6736,12 +7316,108 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe case glslang::EOpConvUvec2ToAccStruct: unaryOp = spv::OpConvertUToAccelerationStructureKHR; break; -#endif + + case glslang::EOpHitObjectIsEmptyNV: + unaryOp = spv::OpHitObjectIsEmptyNV; + break; + + case glslang::EOpHitObjectIsMissNV: + unaryOp = spv::OpHitObjectIsMissNV; + break; + + case glslang::EOpHitObjectIsHitNV: + unaryOp = spv::OpHitObjectIsHitNV; + break; + + case glslang::EOpHitObjectGetObjectRayOriginNV: + unaryOp = spv::OpHitObjectGetObjectRayOriginNV; + break; + + case glslang::EOpHitObjectGetObjectRayDirectionNV: + unaryOp = spv::OpHitObjectGetObjectRayDirectionNV; + break; + + case glslang::EOpHitObjectGetWorldRayOriginNV: + unaryOp = spv::OpHitObjectGetWorldRayOriginNV; + break; + + case glslang::EOpHitObjectGetWorldRayDirectionNV: + unaryOp = spv::OpHitObjectGetWorldRayDirectionNV; + break; + + case glslang::EOpHitObjectGetObjectToWorldNV: + unaryOp = spv::OpHitObjectGetObjectToWorldNV; + break; + + case glslang::EOpHitObjectGetWorldToObjectNV: + unaryOp = spv::OpHitObjectGetWorldToObjectNV; + break; + + case glslang::EOpHitObjectGetRayTMinNV: + unaryOp = spv::OpHitObjectGetRayTMinNV; + break; + + case glslang::EOpHitObjectGetRayTMaxNV: + unaryOp = spv::OpHitObjectGetRayTMaxNV; + break; + + case glslang::EOpHitObjectGetPrimitiveIndexNV: + unaryOp = spv::OpHitObjectGetPrimitiveIndexNV; + break; + + case glslang::EOpHitObjectGetInstanceIdNV: + unaryOp = spv::OpHitObjectGetInstanceIdNV; + break; + + case glslang::EOpHitObjectGetInstanceCustomIndexNV: + unaryOp = spv::OpHitObjectGetInstanceCustomIndexNV; + break; + + case glslang::EOpHitObjectGetGeometryIndexNV: + unaryOp = spv::OpHitObjectGetGeometryIndexNV; + break; + + case glslang::EOpHitObjectGetHitKindNV: + unaryOp = spv::OpHitObjectGetHitKindNV; + break; + + case glslang::EOpHitObjectGetCurrentTimeNV: + unaryOp = spv::OpHitObjectGetCurrentTimeNV; + break; + + case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV: + unaryOp = spv::OpHitObjectGetShaderBindingTableRecordIndexNV; + break; + + case glslang::EOpHitObjectGetShaderRecordBufferHandleNV: + unaryOp = spv::OpHitObjectGetShaderRecordBufferHandleNV; + break; + + case glslang::EOpFetchMicroTriangleVertexPositionNV: + unaryOp = spv::OpFetchMicroTriangleVertexPositionNV; + break; + + case glslang::EOpFetchMicroTriangleVertexBarycentricNV: + unaryOp = spv::OpFetchMicroTriangleVertexBarycentricNV; + break; case glslang::EOpCopyObject: unaryOp = spv::OpCopyObject; break; + case glslang::EOpDepthAttachmentReadEXT: + builder.addExtension(spv::E_SPV_EXT_shader_tile_image); + builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT); + unaryOp = spv::OpDepthAttachmentReadEXT; + decorations.precision = spv::NoPrecision; + break; + case glslang::EOpStencilAttachmentReadEXT: + builder.addExtension(spv::E_SPV_EXT_shader_tile_image); + builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT); + unaryOp = spv::OpStencilAttachmentReadEXT; + decorations.precision = spv::DecorationRelaxedPrecision; + break; + default: return 0; } @@ -6798,7 +7474,9 @@ spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, OpDecorat // For converting integers where both the bitwidth and the signedness could // change, but only do the width change here. The caller is still responsible // for the signedness conversion. -spv::Id TGlslangToSpvTraverser::createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize) +// destType is the final type that will be converted to, but this function +// may only be doing part of that conversion. +spv::Id TGlslangToSpvTraverser::createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize, spv::Id destType) { // Get the result type width, based on the type to convert to. int width = 32; @@ -6869,6 +7547,11 @@ spv::Id TGlslangToSpvTraverser::createIntWidthConversion(glslang::TOperator op, if (vectorSize > 0) type = builder.makeVectorType(type, vectorSize); + else if (builder.getOpCode(destType) == spv::OpTypeCooperativeMatrixKHR || + builder.getOpCode(destType) == spv::OpTypeCooperativeMatrixNV) { + + type = builder.makeCooperativeMatrixTypeWithSameShape(type, destType); + } return builder.createUnaryOp(convOp, type, operand); } @@ -6900,13 +7583,10 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora case glslang::EOpConvBoolToInt: case glslang::EOpConvBoolToInt64: -#ifndef GLSLANG_WEB if (op == glslang::EOpConvBoolToInt64) { zero = builder.makeInt64Constant(0); one = builder.makeInt64Constant(1); - } else -#endif - { + } else { zero = builder.makeIntConstant(0); one = builder.makeIntConstant(1); } @@ -6916,13 +7596,10 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora case glslang::EOpConvBoolToUint: case glslang::EOpConvBoolToUint64: -#ifndef GLSLANG_WEB if (op == glslang::EOpConvBoolToUint64) { zero = builder.makeUint64Constant(0); one = builder.makeUint64Constant(1); - } else -#endif - { + } else { zero = builder.makeUintConstant(0); one = builder.makeUintConstant(1); } @@ -6985,16 +7662,13 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora case glslang::EOpConvInt64ToUint64: if (builder.isInSpecConstCodeGenMode()) { // Build zero scalar or vector for OpIAdd. -#ifndef GLSLANG_WEB if(op == glslang::EOpConvUint8ToInt8 || op == glslang::EOpConvInt8ToUint8) { zero = builder.makeUint8Constant(0); } else if (op == glslang::EOpConvUint16ToInt16 || op == glslang::EOpConvInt16ToUint16) { zero = builder.makeUint16Constant(0); } else if (op == glslang::EOpConvUint64ToInt64 || op == glslang::EOpConvInt64ToUint64) { zero = builder.makeUint64Constant(0); - } else -#endif - { + } else { zero = builder.makeUintConstant(0); } zero = makeSmearedConstant(zero, vectorSize); @@ -7021,7 +7695,6 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora convOp = spv::OpConvertFToU; break; -#ifndef GLSLANG_WEB case glslang::EOpConvInt8ToBool: case glslang::EOpConvUint8ToBool: zero = builder.makeUint8Constant(0); @@ -7141,7 +7814,7 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora case glslang::EOpConvUint64ToInt16: case glslang::EOpConvUint64ToInt: // OpSConvert/OpUConvert + OpBitCast - operand = createIntWidthConversion(op, operand, vectorSize); + operand = createIntWidthConversion(op, operand, vectorSize, destType); if (builder.isInSpecConstCodeGenMode()) { // Build zero scalar or vector for OpIAdd. @@ -7200,7 +7873,6 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora case glslang::EOpConvUvec2ToPtr: convOp = spv::OpBitcast; break; -#endif default: break; @@ -7237,7 +7909,7 @@ spv::Id TGlslangToSpvTraverser::makeSmearedConstant(spv::Id constant, int vector // For glslang ops that map to SPV atomic opCodes spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy, - const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags) + const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags, const glslang::TType &opType) { spv::Op opCode = spv::OpNop; @@ -7248,14 +7920,20 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv opCode = spv::OpAtomicIAdd; if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) { opCode = spv::OpAtomicFAddEXT; - builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_add); - if (typeProxy == glslang::EbtFloat16) { - builder.addExtension(spv::E_SPV_EXT_shader_atomic_float16_add); - builder.addCapability(spv::CapabilityAtomicFloat16AddEXT); - } else if (typeProxy == glslang::EbtFloat) { - builder.addCapability(spv::CapabilityAtomicFloat32AddEXT); + if (typeProxy == glslang::EbtFloat16 && + (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) { + builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector); + builder.addCapability(spv::CapabilityAtomicFloat16VectorNV); } else { - builder.addCapability(spv::CapabilityAtomicFloat64AddEXT); + builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_add); + if (typeProxy == glslang::EbtFloat16) { + builder.addExtension(spv::E_SPV_EXT_shader_atomic_float16_add); + builder.addCapability(spv::CapabilityAtomicFloat16AddEXT); + } else if (typeProxy == glslang::EbtFloat) { + builder.addCapability(spv::CapabilityAtomicFloat32AddEXT); + } else { + builder.addCapability(spv::CapabilityAtomicFloat64AddEXT); + } } } break; @@ -7268,13 +7946,19 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv case glslang::EOpAtomicCounterMin: if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) { opCode = spv::OpAtomicFMinEXT; - builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max); - if (typeProxy == glslang::EbtFloat16) - builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT); - else if (typeProxy == glslang::EbtFloat) - builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT); - else - builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT); + if (typeProxy == glslang::EbtFloat16 && + (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) { + builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector); + builder.addCapability(spv::CapabilityAtomicFloat16VectorNV); + } else { + builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max); + if (typeProxy == glslang::EbtFloat16) + builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT); + else if (typeProxy == glslang::EbtFloat) + builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT); + else + builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT); + } } else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) { opCode = spv::OpAtomicUMin; } else { @@ -7286,13 +7970,19 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv case glslang::EOpAtomicCounterMax: if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) { opCode = spv::OpAtomicFMaxEXT; - builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max); - if (typeProxy == glslang::EbtFloat16) - builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT); - else if (typeProxy == glslang::EbtFloat) - builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT); - else - builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT); + if (typeProxy == glslang::EbtFloat16 && + (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) { + builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector); + builder.addCapability(spv::CapabilityAtomicFloat16VectorNV); + } else { + builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max); + if (typeProxy == glslang::EbtFloat16) + builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT); + else if (typeProxy == glslang::EbtFloat) + builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT); + else + builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT); + } } else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) { opCode = spv::OpAtomicUMax; } else { @@ -7317,6 +8007,12 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv case glslang::EOpAtomicExchange: case glslang::EOpImageAtomicExchange: case glslang::EOpAtomicCounterExchange: + if ((typeProxy == glslang::EbtFloat16) && + (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) { + builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector); + builder.addCapability(spv::CapabilityAtomicFloat16VectorNV); + } + opCode = spv::OpAtomicExchange; break; case glslang::EOpAtomicCompSwap: @@ -7361,7 +8057,7 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv } else { scopeId = builder.makeUintConstant(spv::ScopeDevice); } - // semantics default to relaxed + // semantics default to relaxed spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() && glslangIntermediate->usingVulkanMemoryModel() ? spv::MemorySemanticsVolatileMask : @@ -7415,6 +8111,7 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv } std::vector spvAtomicOperands; // hold the spv operands + spvAtomicOperands.reserve(6); spvAtomicOperands.push_back(pointerId); spvAtomicOperands.push_back(scopeId); spvAtomicOperands.push_back(semanticsId); @@ -7719,6 +8416,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupElect: builder.addCapability(spv::CapabilityGroupNonUniform); break; + case glslang::EOpSubgroupQuadAll: + case glslang::EOpSubgroupQuadAny: + builder.addExtension(spv::E_SPV_KHR_quad_control); + builder.addCapability(spv::CapabilityQuadControlKHR); + [[fallthrough]]; case glslang::EOpSubgroupAll: case glslang::EOpSubgroupAny: case glslang::EOpSubgroupAllEqual: @@ -7738,6 +8440,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s builder.addCapability(spv::CapabilityGroupNonUniform); builder.addCapability(spv::CapabilityGroupNonUniformBallot); break; + case glslang::EOpSubgroupRotate: + case glslang::EOpSubgroupClusteredRotate: + builder.addExtension(spv::E_SPV_KHR_subgroup_rotate); + builder.addCapability(spv::CapabilityGroupNonUniformRotateKHR); + break; case glslang::EOpSubgroupShuffle: case glslang::EOpSubgroupShuffleXor: builder.addCapability(spv::CapabilityGroupNonUniform); @@ -7826,7 +8533,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s // Figure out which opcode to use. switch (op) { case glslang::EOpSubgroupElect: opCode = spv::OpGroupNonUniformElect; break; + case glslang::EOpSubgroupQuadAll: opCode = spv::OpGroupNonUniformQuadAllKHR; break; case glslang::EOpSubgroupAll: opCode = spv::OpGroupNonUniformAll; break; + case glslang::EOpSubgroupQuadAny: opCode = spv::OpGroupNonUniformQuadAnyKHR; break; case glslang::EOpSubgroupAny: opCode = spv::OpGroupNonUniformAny; break; case glslang::EOpSubgroupAllEqual: opCode = spv::OpGroupNonUniformAllEqual; break; case glslang::EOpSubgroupBroadcast: opCode = spv::OpGroupNonUniformBroadcast; break; @@ -7843,6 +8552,8 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupShuffleXor: opCode = spv::OpGroupNonUniformShuffleXor; break; case glslang::EOpSubgroupShuffleUp: opCode = spv::OpGroupNonUniformShuffleUp; break; case glslang::EOpSubgroupShuffleDown: opCode = spv::OpGroupNonUniformShuffleDown; break; + case glslang::EOpSubgroupRotate: + case glslang::EOpSubgroupClusteredRotate: opCode = spv::OpGroupNonUniformRotateKHR; break; case glslang::EOpSubgroupAdd: case glslang::EOpSubgroupInclusiveAdd: case glslang::EOpSubgroupExclusiveAdd: @@ -8023,7 +8734,10 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s // Every operation begins with the Execution Scope operand. spv::IdImmediate executionScope = { true, builder.makeUintConstant(spv::ScopeSubgroup) }; - spvGroupOperands.push_back(executionScope); + // All other ops need the execution scope. Quad Control Ops don't need scope, it's always Quad. + if (opCode != spv::OpGroupNonUniformQuadAllKHR && opCode != spv::OpGroupNonUniformQuadAnyKHR) { + spvGroupOperands.push_back(executionScope); + } // Next, for all operations that use a Group Operation, push that as an operand. if (groupOperation != spv::GroupOperationMax) { @@ -8192,7 +8906,6 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: } break; -#ifndef GLSLANG_WEB case glslang::EOpInterpolateAtSample: if (typeProxy == glslang::EbtFloat16) builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float); @@ -8267,6 +8980,8 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: case glslang::EOpSubgroupShuffleXor: case glslang::EOpSubgroupShuffleUp: case glslang::EOpSubgroupShuffleDown: + case glslang::EOpSubgroupRotate: + case glslang::EOpSubgroupClusteredRotate: case glslang::EOpSubgroupClusteredAdd: case glslang::EOpSubgroupClusteredMul: case glslang::EOpSubgroupClusteredMin: @@ -8465,10 +9180,190 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: case glslang::EOpWritePackedPrimitiveIndices4x8NV: builder.createNoResultOp(spv::OpWritePackedPrimitiveIndices4x8NV, operands); return 0; - case glslang::EOpCooperativeMatrixMulAdd: + case glslang::EOpEmitMeshTasksEXT: + if (taskPayloadID) + operands.push_back(taskPayloadID); + // As per SPV_EXT_mesh_shader make it a terminating instruction in the current block + builder.makeStatementTerminator(spv::OpEmitMeshTasksEXT, operands, "post-OpEmitMeshTasksEXT"); + return 0; + case glslang::EOpSetMeshOutputsEXT: + builder.createNoResultOp(spv::OpSetMeshOutputsEXT, operands); + return 0; + case glslang::EOpCooperativeMatrixMulAddNV: opCode = spv::OpCooperativeMatrixMulAddNV; break; -#endif // GLSLANG_WEB + case glslang::EOpHitObjectTraceRayNV: + builder.createNoResultOp(spv::OpHitObjectTraceRayNV, operands); + return 0; + case glslang::EOpHitObjectTraceRayMotionNV: + builder.createNoResultOp(spv::OpHitObjectTraceRayMotionNV, operands); + return 0; + case glslang::EOpHitObjectRecordHitNV: + builder.createNoResultOp(spv::OpHitObjectRecordHitNV, operands); + return 0; + case glslang::EOpHitObjectRecordHitMotionNV: + builder.createNoResultOp(spv::OpHitObjectRecordHitMotionNV, operands); + return 0; + case glslang::EOpHitObjectRecordHitWithIndexNV: + builder.createNoResultOp(spv::OpHitObjectRecordHitWithIndexNV, operands); + return 0; + case glslang::EOpHitObjectRecordHitWithIndexMotionNV: + builder.createNoResultOp(spv::OpHitObjectRecordHitWithIndexMotionNV, operands); + return 0; + case glslang::EOpHitObjectRecordMissNV: + builder.createNoResultOp(spv::OpHitObjectRecordMissNV, operands); + return 0; + case glslang::EOpHitObjectRecordMissMotionNV: + builder.createNoResultOp(spv::OpHitObjectRecordMissMotionNV, operands); + return 0; + case glslang::EOpHitObjectExecuteShaderNV: + builder.createNoResultOp(spv::OpHitObjectExecuteShaderNV, operands); + return 0; + case glslang::EOpHitObjectIsEmptyNV: + typeId = builder.makeBoolType(); + opCode = spv::OpHitObjectIsEmptyNV; + break; + case glslang::EOpHitObjectIsMissNV: + typeId = builder.makeBoolType(); + opCode = spv::OpHitObjectIsMissNV; + break; + case glslang::EOpHitObjectIsHitNV: + typeId = builder.makeBoolType(); + opCode = spv::OpHitObjectIsHitNV; + break; + case glslang::EOpHitObjectGetRayTMinNV: + typeId = builder.makeFloatType(32); + opCode = spv::OpHitObjectGetRayTMinNV; + break; + case glslang::EOpHitObjectGetRayTMaxNV: + typeId = builder.makeFloatType(32); + opCode = spv::OpHitObjectGetRayTMaxNV; + break; + case glslang::EOpHitObjectGetObjectRayOriginNV: + typeId = builder.makeVectorType(builder.makeFloatType(32), 3); + opCode = spv::OpHitObjectGetObjectRayOriginNV; + break; + case glslang::EOpHitObjectGetObjectRayDirectionNV: + typeId = builder.makeVectorType(builder.makeFloatType(32), 3); + opCode = spv::OpHitObjectGetObjectRayDirectionNV; + break; + case glslang::EOpHitObjectGetWorldRayOriginNV: + typeId = builder.makeVectorType(builder.makeFloatType(32), 3); + opCode = spv::OpHitObjectGetWorldRayOriginNV; + break; + case glslang::EOpHitObjectGetWorldRayDirectionNV: + typeId = builder.makeVectorType(builder.makeFloatType(32), 3); + opCode = spv::OpHitObjectGetWorldRayDirectionNV; + break; + case glslang::EOpHitObjectGetWorldToObjectNV: + typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3); + opCode = spv::OpHitObjectGetWorldToObjectNV; + break; + case glslang::EOpHitObjectGetObjectToWorldNV: + typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3); + opCode = spv::OpHitObjectGetObjectToWorldNV; + break; + case glslang::EOpHitObjectGetInstanceCustomIndexNV: + typeId = builder.makeIntegerType(32, 1); + opCode = spv::OpHitObjectGetInstanceCustomIndexNV; + break; + case glslang::EOpHitObjectGetInstanceIdNV: + typeId = builder.makeIntegerType(32, 1); + opCode = spv::OpHitObjectGetInstanceIdNV; + break; + case glslang::EOpHitObjectGetGeometryIndexNV: + typeId = builder.makeIntegerType(32, 1); + opCode = spv::OpHitObjectGetGeometryIndexNV; + break; + case glslang::EOpHitObjectGetPrimitiveIndexNV: + typeId = builder.makeIntegerType(32, 1); + opCode = spv::OpHitObjectGetPrimitiveIndexNV; + break; + case glslang::EOpHitObjectGetHitKindNV: + typeId = builder.makeIntegerType(32, 0); + opCode = spv::OpHitObjectGetHitKindNV; + break; + case glslang::EOpHitObjectGetCurrentTimeNV: + typeId = builder.makeFloatType(32); + opCode = spv::OpHitObjectGetCurrentTimeNV; + break; + case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV: + typeId = builder.makeIntegerType(32, 0); + opCode = spv::OpHitObjectGetShaderBindingTableRecordIndexNV; + return 0; + case glslang::EOpHitObjectGetAttributesNV: + builder.createNoResultOp(spv::OpHitObjectGetAttributesNV, operands); + return 0; + case glslang::EOpHitObjectGetShaderRecordBufferHandleNV: + typeId = builder.makeVectorType(builder.makeUintType(32), 2); + opCode = spv::OpHitObjectGetShaderRecordBufferHandleNV; + break; + case glslang::EOpReorderThreadNV: { + if (operands.size() == 2) { + builder.createNoResultOp(spv::OpReorderThreadWithHintNV, operands); + } else { + builder.createNoResultOp(spv::OpReorderThreadWithHitObjectNV, operands); + } + return 0; + + } + + case glslang::EOpImageSampleWeightedQCOM: + typeId = builder.makeVectorType(builder.makeFloatType(32), 4); + opCode = spv::OpImageSampleWeightedQCOM; + addImageProcessingQCOMDecoration(operands[2], spv::DecorationWeightTextureQCOM); + break; + case glslang::EOpImageBoxFilterQCOM: + typeId = builder.makeVectorType(builder.makeFloatType(32), 4); + opCode = spv::OpImageBoxFilterQCOM; + break; + case glslang::EOpImageBlockMatchSADQCOM: + typeId = builder.makeVectorType(builder.makeFloatType(32), 4); + opCode = spv::OpImageBlockMatchSADQCOM; + addImageProcessingQCOMDecoration(operands[0], spv::DecorationBlockMatchTextureQCOM); + addImageProcessingQCOMDecoration(operands[2], spv::DecorationBlockMatchTextureQCOM); + break; + case glslang::EOpImageBlockMatchSSDQCOM: + typeId = builder.makeVectorType(builder.makeFloatType(32), 4); + opCode = spv::OpImageBlockMatchSSDQCOM; + addImageProcessingQCOMDecoration(operands[0], spv::DecorationBlockMatchTextureQCOM); + addImageProcessingQCOMDecoration(operands[2], spv::DecorationBlockMatchTextureQCOM); + break; + + case glslang::EOpFetchMicroTriangleVertexBarycentricNV: + typeId = builder.makeVectorType(builder.makeFloatType(32), 2); + opCode = spv::OpFetchMicroTriangleVertexBarycentricNV; + break; + + case glslang::EOpFetchMicroTriangleVertexPositionNV: + typeId = builder.makeVectorType(builder.makeFloatType(32), 3); + opCode = spv::OpFetchMicroTriangleVertexPositionNV; + break; + + case glslang::EOpImageBlockMatchWindowSSDQCOM: + typeId = builder.makeVectorType(builder.makeFloatType(32), 4); + opCode = spv::OpImageBlockMatchWindowSSDQCOM; + addImageProcessing2QCOMDecoration(operands[0], false); + addImageProcessing2QCOMDecoration(operands[2], false); + break; + case glslang::EOpImageBlockMatchWindowSADQCOM: + typeId = builder.makeVectorType(builder.makeFloatType(32), 4); + opCode = spv::OpImageBlockMatchWindowSADQCOM; + addImageProcessing2QCOMDecoration(operands[0], false); + addImageProcessing2QCOMDecoration(operands[2], false); + break; + case glslang::EOpImageBlockMatchGatherSSDQCOM: + typeId = builder.makeVectorType(builder.makeFloatType(32), 4); + opCode = spv::OpImageBlockMatchGatherSSDQCOM; + addImageProcessing2QCOMDecoration(operands[0], true); + addImageProcessing2QCOMDecoration(operands[2], true); + break; + case glslang::EOpImageBlockMatchGatherSADQCOM: + typeId = builder.makeVectorType(builder.makeFloatType(32), 4); + opCode = spv::OpImageBlockMatchGatherSADQCOM; + addImageProcessing2QCOMDecoration(operands[0], true); + addImageProcessing2QCOMDecoration(operands[2], true); + break; default: return 0; } @@ -8512,7 +9407,6 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: } } -#ifndef GLSLANG_WEB // Decode the return types that were structures switch (op) { case glslang::EOpAddCarry: @@ -8542,7 +9436,6 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: default: break; } -#endif return builder.setPrecision(id, precision); } @@ -8587,7 +9480,6 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsAllMemory | spv::MemorySemanticsAcquireReleaseMask); return 0; -#ifndef GLSLANG_WEB case glslang::EOpMemoryBarrierAtomicCounter: builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAtomicCounterMemoryMask | spv::MemorySemanticsAcquireReleaseMask); @@ -8706,7 +9598,30 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: builder.addCapability(spv::CapabilityShaderClockKHR); return builder.createOp(spv::OpReadClockKHR, typeId, args); } -#endif + case glslang::EOpStencilAttachmentReadEXT: + case glslang::EOpDepthAttachmentReadEXT: + { + builder.addExtension(spv::E_SPV_EXT_shader_tile_image); + + spv::Decoration precision; + spv::Op spv_op; + if (op == glslang::EOpStencilAttachmentReadEXT) + { + precision = spv::DecorationRelaxedPrecision; + spv_op = spv::OpStencilAttachmentReadEXT; + builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT); + } + else + { + precision = spv::NoPrecision; + spv_op = spv::OpDepthAttachmentReadEXT; + builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT); + } + + std::vector args; // Dummy args + spv::Id result = builder.createOp(spv_op, typeId, args); + return builder.setPrecision(result, precision); + } default: break; } @@ -8728,7 +9643,32 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol // it was not found, create it spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false); auto forcedType = getForcedType(symbol->getQualifier().builtIn, symbol->getType()); + + // There are pairs of symbols that map to the same SPIR-V built-in: + // gl_ObjectToWorldEXT and gl_ObjectToWorld3x4EXT, and gl_WorldToObjectEXT + // and gl_WorldToObject3x4EXT. SPIR-V forbids having two OpVariables + // with the same BuiltIn in the same storage class, so we must re-use one. + const bool mayNeedToReuseBuiltIn = + builtIn == spv::BuiltInObjectToWorldKHR || + builtIn == spv::BuiltInWorldToObjectKHR; + + if (mayNeedToReuseBuiltIn) { + auto iter = builtInVariableIds.find(uint32_t(builtIn)); + if (builtInVariableIds.end() != iter) { + id = iter->second; + symbolValues[symbol->getId()] = id; + if (forcedType.second != spv::NoType) + forceType[id] = forcedType.second; + return id; + } + } + id = createSpvVariable(symbol, forcedType.first); + + if (mayNeedToReuseBuiltIn) { + builtInVariableIds.insert({uint32_t(builtIn), id}); + } + symbolValues[symbol->getId()] = id; if (forcedType.second != spv::NoType) forceType[id] = forcedType.second; @@ -8737,13 +9677,11 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType())); builder.addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier())); builder.addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier())); -#ifndef GLSLANG_WEB addMeshNVDecoration(id, /*member*/ -1, symbol->getType().getQualifier()); if (symbol->getQualifier().hasComponent()) builder.addDecoration(id, spv::DecorationComponent, symbol->getQualifier().layoutComponent); if (symbol->getQualifier().hasIndex()) builder.addDecoration(id, spv::DecorationIndex, symbol->getQualifier().layoutIndex); -#endif if (symbol->getType().getQualifier().hasSpecConstantId()) builder.addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId); // atomic counters use this: @@ -8752,13 +9690,17 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol } if (symbol->getQualifier().hasLocation()) { - if (!(glslangIntermediate->isRayTracingStage() && glslangIntermediate->IsRequestedExtension(glslang::E_GL_EXT_ray_tracing) + if (!(glslangIntermediate->isRayTracingStage() && + (glslangIntermediate->IsRequestedExtension(glslang::E_GL_EXT_ray_tracing) || + glslangIntermediate->IsRequestedExtension(glslang::E_GL_NV_shader_invocation_reorder)) && (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.getStorageClass(id) == spv::StorageClassIncomingCallableDataKHR || + builder.getStorageClass(id) == spv::StorageClassHitObjectAttributeNV))) { + // Location values are used to link TraceRayKHR/ExecuteCallableKHR/HitObjectGetAttributesNV + // 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); } } @@ -8804,11 +9746,11 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol // Add volatile decoration to HelperInvocation for spirv1.6 and beyond if (builtIn == spv::BuiltInHelperInvocation && + !glslangIntermediate->usingVulkanMemoryModel() && glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { builder.addDecoration(id, spv::DecorationVolatile); } -#ifndef GLSLANG_WEB // Subgroup builtins which have input storage class are volatile for ray tracing stages. if (symbol->getType().isImage() || symbol->getQualifier().isPipeInput()) { std::vector memory; @@ -8857,6 +9799,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric); } + if (symbol->getQualifier().pervertexEXT) { + builder.addDecoration(id, spv::DecorationPerVertexKHR); + builder.addCapability(spv::CapabilityFragmentBarycentricKHR); + builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric); + } + if (glslangIntermediate->getHlslFunctionality1() && symbol->getType().getQualifier().semanticName != nullptr) { builder.addExtension("SPV_GOOGLE_hlsl_functionality1"); builder.addDecoration(id, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE, @@ -8868,63 +9816,31 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT); } - // - // Add SPIR-V decorations for structure (GL_EXT_spirv_intrinsics) - // - if (symbol->getType().getQualifier().hasSprivDecorate()) { - const glslang::TSpirvDecorate& spirvDecorate = symbol->getType().getQualifier().getSpirvDecorate(); - - // Add spirv_decorate - for (auto& decorate : spirvDecorate.decorates) { - if (!decorate.second.empty()) { - std::vector literals; - TranslateLiterals(decorate.second, literals); - builder.addDecoration(id, static_cast(decorate.first), literals); - } - else - builder.addDecoration(id, static_cast(decorate.first)); - } - - // Add spirv_decorate_id - for (auto& decorateId : spirvDecorate.decorateIds) { - std::vector operandIds; - assert(!decorateId.second.empty()); - for (auto extraOperand : decorateId.second) { - if (extraOperand->getQualifier().isSpecConstant()) - operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode())); - else - operandIds.push_back(createSpvConstant(*extraOperand)); - } - builder.addDecorationId(id, static_cast(decorateId.first), operandIds); - } - - // Add spirv_decorate_string - for (auto& decorateString : spirvDecorate.decorateStrings) { - std::vector strings; - assert(!decorateString.second.empty()); - for (auto extraOperand : decorateString.second) { - const char* string = extraOperand->getConstArray()[0].getSConst()->c_str(); - strings.push_back(string); - } - builder.addDecoration(id, static_cast(decorateString.first), strings); - } - } -#endif + // Add SPIR-V decorations (GL_EXT_spirv_intrinsics) + if (symbol->getType().getQualifier().hasSpirvDecorate()) + applySpirvDecorate(symbol->getType(), id, {}); return id; } -#ifndef GLSLANG_WEB // add per-primitive, per-view. per-task decorations to a struct member (member >= 0) or an object void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier& qualifier) { + bool isMeshShaderExt = (glslangIntermediate->getRequestedExtensions().find(glslang::E_GL_EXT_mesh_shader) != + glslangIntermediate->getRequestedExtensions().end()); + if (member >= 0) { if (qualifier.perPrimitiveNV) { // Need to add capability/extension for fragment shader. // Mesh shader already adds this by default. if (glslangIntermediate->getStage() == EShLangFragment) { - builder.addCapability(spv::CapabilityMeshShadingNV); - builder.addExtension(spv::E_SPV_NV_mesh_shader); + if(isMeshShaderExt) { + builder.addCapability(spv::CapabilityMeshShadingEXT); + builder.addExtension(spv::E_SPV_EXT_mesh_shader); + } else { + builder.addCapability(spv::CapabilityMeshShadingNV); + builder.addExtension(spv::E_SPV_NV_mesh_shader); + } } builder.addMemberDecoration(id, (unsigned)member, spv::DecorationPerPrimitiveNV); } @@ -8937,8 +9853,13 @@ void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const g // Need to add capability/extension for fragment shader. // Mesh shader already adds this by default. if (glslangIntermediate->getStage() == EShLangFragment) { - builder.addCapability(spv::CapabilityMeshShadingNV); - builder.addExtension(spv::E_SPV_NV_mesh_shader); + if(isMeshShaderExt) { + builder.addCapability(spv::CapabilityMeshShadingEXT); + builder.addExtension(spv::E_SPV_EXT_mesh_shader); + } else { + builder.addCapability(spv::CapabilityMeshShadingNV); + builder.addExtension(spv::E_SPV_NV_mesh_shader); + } } builder.addDecoration(id, spv::DecorationPerPrimitiveNV); } @@ -8948,7 +9869,66 @@ void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const g builder.addDecoration(id, spv::DecorationPerTaskNV); } } -#endif + +bool TGlslangToSpvTraverser::hasQCOMImageProceessingDecoration(spv::Id id, spv::Decoration decor) +{ + std::vector &decoVec = idToQCOMDecorations[id]; + for ( auto d : decoVec ) { + if ( d == decor ) + return true; + } + return false; +} + +void TGlslangToSpvTraverser::addImageProcessingQCOMDecoration(spv::Id id, spv::Decoration decor) +{ + spv::Op opc = builder.getOpCode(id); + if (opc == spv::OpSampledImage) { + id = builder.getIdOperand(id, 0); + opc = builder.getOpCode(id); + } + + if (opc == spv::OpLoad) { + spv::Id texid = builder.getIdOperand(id, 0); + if (!hasQCOMImageProceessingDecoration(texid, decor)) {// + builder.addDecoration(texid, decor); + idToQCOMDecorations[texid].push_back(decor); + } + } +} + +void TGlslangToSpvTraverser::addImageProcessing2QCOMDecoration(spv::Id id, bool isForGather) +{ + if (isForGather) { + return addImageProcessingQCOMDecoration(id, spv::DecorationBlockMatchTextureQCOM); + } + + auto addDecor = + [this](spv::Id id, spv::Decoration decor) { + spv::Id tsopc = this->builder.getOpCode(id); + if (tsopc == spv::OpLoad) { + spv::Id tsid = this->builder.getIdOperand(id, 0); + if (this->glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) { + assert(iOSet.count(tsid) > 0); + } + if (!hasQCOMImageProceessingDecoration(tsid, decor)) { + this->builder.addDecoration(tsid, decor); + idToQCOMDecorations[tsid].push_back(decor); + } + } + }; + + spv::Id opc = builder.getOpCode(id); + bool isInterfaceObject = (opc != spv::OpSampledImage); + + if (!isInterfaceObject) { + addDecor(builder.getIdOperand(id, 0), spv::DecorationBlockMatchTextureQCOM); + addDecor(builder.getIdOperand(id, 1), spv::DecorationBlockMatchSamplerQCOM); + } else { + addDecor(id, spv::DecorationBlockMatchTextureQCOM); + addDecor(id, spv::DecorationBlockMatchSamplerQCOM); + } +} // Make a full tree of instructions to build a SPIR-V specialization constant, // or regular constant if possible. @@ -9076,17 +10056,20 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla case glslang::EbtBool: spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst())); break; -#ifndef GLSLANG_WEB case glslang::EbtInt8: + builder.addCapability(spv::CapabilityInt8); spvConsts.push_back(builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const())); break; case glslang::EbtUint8: + builder.addCapability(spv::CapabilityInt8); spvConsts.push_back(builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const())); break; case glslang::EbtInt16: + builder.addCapability(spv::CapabilityInt16); spvConsts.push_back(builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const())); break; case glslang::EbtUint16: + builder.addCapability(spv::CapabilityInt16); spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const())); break; case glslang::EbtInt64: @@ -9099,9 +10082,9 @@ 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 default: assert(0); break; @@ -9125,17 +10108,20 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla case glslang::EbtBool: scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant); break; -#ifndef GLSLANG_WEB case glslang::EbtInt8: + builder.addCapability(spv::CapabilityInt8); scalar = builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const(), specConstant); break; case glslang::EbtUint8: + builder.addCapability(spv::CapabilityInt8); scalar = builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const(), specConstant); break; case glslang::EbtInt16: + builder.addCapability(spv::CapabilityInt16); scalar = builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const(), specConstant); break; case glslang::EbtUint16: + builder.addCapability(spv::CapabilityInt16); scalar = builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const(), specConstant); break; case glslang::EbtInt64: @@ -9148,13 +10134,13 @@ 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: scalar = builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const(), specConstant); scalar = builder.createUnaryOp(spv::OpBitcast, typeId, scalar); break; -#endif case glslang::EbtString: scalar = builder.getStringId(consts[nextConst].getSConst()->c_str()); break; @@ -9270,6 +10256,7 @@ spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslan // Operands to accumulate OpPhi operands std::vector phiOperands; + phiOperands.reserve(4); // accumulate left operand's phi information phiOperands.push_back(leftId); phiOperands.push_back(builder.getBuildPoint()->getId()); @@ -9302,7 +10289,6 @@ spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslan return builder.createOp(spv::OpPhi, boolTypeId, phiOperands); } -#ifndef GLSLANG_WEB // Return type Id of the imported set of extended instructions corresponds to the name. // Import this set if it has not been imported yet. spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name) @@ -9310,13 +10296,11 @@ spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name) if (extBuiltinMap.find(name) != extBuiltinMap.end()) return extBuiltinMap[name]; else { - builder.addExtension(name); spv::Id extBuiltins = builder.import(name); extBuiltinMap[name] = extBuiltins; return extBuiltins; } } -#endif }; // end anonymous namespace @@ -9345,31 +10329,36 @@ int GetSpirvGeneratorVersion() // return 7; // GLSL volatile keyword maps to both SPIR-V decorations Volatile and Coherent // return 8; // switch to new dead block eliminator; use OpUnreachable // return 9; // don't include opaque function parameters in OpEntryPoint global's operand list - return 10; // Generate OpFUnordNotEqual for != comparisons + // return 10; // Generate OpFUnordNotEqual for != comparisons + return 11; // Make OpEmitMeshTasksEXT a terminal instruction } // Write SPIR-V out to a binary file -void OutputSpvBin(const std::vector& spirv, const char* baseName) +bool OutputSpvBin(const std::vector& spirv, const char* baseName) { std::ofstream out; out.open(baseName, std::ios::binary | std::ios::out); - if (out.fail()) + if (out.fail()) { printf("ERROR: Failed to open file: %s\n", baseName); + return false; + } for (int i = 0; i < (int)spirv.size(); ++i) { unsigned int word = spirv[i]; out.write((const char*)&word, 4); } out.close(); + return true; } // Write SPIR-V out to a text file with 32-bit hexadecimal words -void OutputSpvHex(const std::vector& spirv, const char* baseName, const char* varName) +bool OutputSpvHex(const std::vector& spirv, const char* baseName, const char* varName) { -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) std::ofstream out; out.open(baseName, std::ios::binary | std::ios::out); - if (out.fail()) + if (out.fail()) { printf("ERROR: Failed to open file: %s\n", baseName); + return false; + } out << "\t// " << GetSpirvGeneratorVersion() << GLSLANG_VERSION_MAJOR << "." << GLSLANG_VERSION_MINOR << "." << GLSLANG_VERSION_PATCH << @@ -9395,7 +10384,7 @@ void OutputSpvHex(const std::vector& spirv, const char* baseName, out << std::endl; } out.close(); -#endif + return true; } // @@ -9412,7 +10401,7 @@ void GlslangToSpv(const TIntermediate& intermediate, std::vector& { TIntermNode* root = intermediate.getTreeRoot(); - if (root == 0) + if (root == nullptr) return; SpvOptions defaultOptions; @@ -9423,7 +10412,7 @@ void GlslangToSpv(const TIntermediate& intermediate, std::vector& TGlslangToSpvTraverser it(intermediate.getSpv().spv, &intermediate, logger, *options); root->traverse(&it); - it.finishSpv(); + it.finishSpv(options->compileOnly); it.dumpSpv(spirv); #if ENABLE_OPT diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h index 3907be43b7..9fb4f3fff7 100644 --- a/SPIRV/GlslangToSpv.h +++ b/SPIRV/GlslangToSpv.h @@ -35,27 +35,35 @@ #pragma once -#if defined(_MSC_VER) && _MSC_VER >= 1900 - #pragma warning(disable : 4464) // relative include path contains '..' -#endif - -#include "SpvTools.h" -#include "glslang/Include/intermediate.h" - #include #include #include "Logger.h" +#include "glslang/Include/visibility.h" namespace glslang { +class TIntermediate; + +struct SpvOptions { + bool generateDebugInfo {false}; + bool stripDebugInfo {false}; + bool disableOptimizer {true}; + bool optimizeSize {false}; + bool disassemble {false}; + bool validate {false}; + bool emitNonSemanticShaderDebugInfo {false}; + bool emitNonSemanticShaderDebugSource{ false }; + bool compileOnly{false}; + bool optimizerAllowExpandedIDBound{false}; +}; -void GetSpirvVersion(std::string&); -int GetSpirvGeneratorVersion(); -void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, - SpvOptions* options = nullptr); -void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger* logger, SpvOptions* options = nullptr); -void OutputSpvBin(const std::vector& spirv, const char* baseName); -void OutputSpvHex(const std::vector& spirv, const char* baseName, const char* varName); +GLSLANG_EXPORT void GetSpirvVersion(std::string&); +GLSLANG_EXPORT int GetSpirvGeneratorVersion(); +GLSLANG_EXPORT void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, + SpvOptions* options = nullptr); +GLSLANG_EXPORT void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, + spv::SpvBuildLogger* logger, SpvOptions* options = nullptr); +GLSLANG_EXPORT bool OutputSpvBin(const std::vector& spirv, const char* baseName); +GLSLANG_EXPORT bool OutputSpvHex(const std::vector& spirv, const char* baseName, const char* varName); } diff --git a/SPIRV/Logger.cpp b/SPIRV/Logger.cpp index cdc8469c44..48bd4e3ade 100644 --- a/SPIRV/Logger.cpp +++ b/SPIRV/Logger.cpp @@ -32,8 +32,6 @@ // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. -#ifndef GLSLANG_WEB - #include "Logger.h" #include @@ -68,5 +66,3 @@ std::string SpvBuildLogger::getAllMessages() const { } } // end spv namespace - -#endif diff --git a/SPIRV/Logger.h b/SPIRV/Logger.h index 411367c030..c64a3b8a36 100644 --- a/SPIRV/Logger.h +++ b/SPIRV/Logger.h @@ -37,23 +37,16 @@ #include #include +#include "glslang/Include/visibility.h" namespace spv { // A class for holding all SPIR-V build status messages, including // missing/TBD functionalities, warnings, and errors. -class SpvBuildLogger { +class GLSLANG_EXPORT SpvBuildLogger { public: SpvBuildLogger() {} -#ifdef GLSLANG_WEB - void tbdFunctionality(const std::string& f) { } - void missingFunctionality(const std::string& f) { } - void warning(const std::string& w) { } - void error(const std::string& e) { errors.push_back(e); } - std::string getAllMessages() { return ""; } -#else - // Registers a TBD functionality. void tbdFunctionality(const std::string& f); // Registers a missing functionality. @@ -67,7 +60,6 @@ class SpvBuildLogger { // Returns all messages accumulated in the order of: // TBD functionalities, missing functionalities, warnings, errors. std::string getAllMessages() const; -#endif private: SpvBuildLogger(const SpvBuildLogger&); diff --git a/SPIRV/NonSemanticDebugPrintf.h b/SPIRV/NonSemanticDebugPrintf.h index 83796d75e5..3ca7247f2b 100644 --- a/SPIRV/NonSemanticDebugPrintf.h +++ b/SPIRV/NonSemanticDebugPrintf.h @@ -1,5 +1,5 @@ // Copyright (c) 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 @@ -7,15 +7,15 @@ // 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. @@ -23,7 +23,7 @@ // 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. -// +// #ifndef SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_ #define SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_ diff --git a/SPIRV/NonSemanticShaderDebugInfo100.h b/SPIRV/NonSemanticShaderDebugInfo100.h new file mode 100644 index 0000000000..f74abcb646 --- /dev/null +++ b/SPIRV/NonSemanticShaderDebugInfo100.h @@ -0,0 +1,171 @@ +// Copyright (c) 2018 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. + +#ifndef SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_ +#define SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + NonSemanticShaderDebugInfo100Version = 100, + NonSemanticShaderDebugInfo100Version_BitWidthPadding = 0x7fffffff +}; +enum { + NonSemanticShaderDebugInfo100Revision = 6, + NonSemanticShaderDebugInfo100Revision_BitWidthPadding = 0x7fffffff +}; + +enum NonSemanticShaderDebugInfo100Instructions { + NonSemanticShaderDebugInfo100DebugInfoNone = 0, + NonSemanticShaderDebugInfo100DebugCompilationUnit = 1, + NonSemanticShaderDebugInfo100DebugTypeBasic = 2, + NonSemanticShaderDebugInfo100DebugTypePointer = 3, + NonSemanticShaderDebugInfo100DebugTypeQualifier = 4, + NonSemanticShaderDebugInfo100DebugTypeArray = 5, + NonSemanticShaderDebugInfo100DebugTypeVector = 6, + NonSemanticShaderDebugInfo100DebugTypedef = 7, + NonSemanticShaderDebugInfo100DebugTypeFunction = 8, + NonSemanticShaderDebugInfo100DebugTypeEnum = 9, + NonSemanticShaderDebugInfo100DebugTypeComposite = 10, + NonSemanticShaderDebugInfo100DebugTypeMember = 11, + NonSemanticShaderDebugInfo100DebugTypeInheritance = 12, + NonSemanticShaderDebugInfo100DebugTypePtrToMember = 13, + NonSemanticShaderDebugInfo100DebugTypeTemplate = 14, + NonSemanticShaderDebugInfo100DebugTypeTemplateParameter = 15, + NonSemanticShaderDebugInfo100DebugTypeTemplateTemplateParameter = 16, + NonSemanticShaderDebugInfo100DebugTypeTemplateParameterPack = 17, + NonSemanticShaderDebugInfo100DebugGlobalVariable = 18, + NonSemanticShaderDebugInfo100DebugFunctionDeclaration = 19, + NonSemanticShaderDebugInfo100DebugFunction = 20, + NonSemanticShaderDebugInfo100DebugLexicalBlock = 21, + NonSemanticShaderDebugInfo100DebugLexicalBlockDiscriminator = 22, + NonSemanticShaderDebugInfo100DebugScope = 23, + NonSemanticShaderDebugInfo100DebugNoScope = 24, + NonSemanticShaderDebugInfo100DebugInlinedAt = 25, + NonSemanticShaderDebugInfo100DebugLocalVariable = 26, + NonSemanticShaderDebugInfo100DebugInlinedVariable = 27, + NonSemanticShaderDebugInfo100DebugDeclare = 28, + NonSemanticShaderDebugInfo100DebugValue = 29, + NonSemanticShaderDebugInfo100DebugOperation = 30, + NonSemanticShaderDebugInfo100DebugExpression = 31, + NonSemanticShaderDebugInfo100DebugMacroDef = 32, + NonSemanticShaderDebugInfo100DebugMacroUndef = 33, + NonSemanticShaderDebugInfo100DebugImportedEntity = 34, + NonSemanticShaderDebugInfo100DebugSource = 35, + NonSemanticShaderDebugInfo100DebugFunctionDefinition = 101, + NonSemanticShaderDebugInfo100DebugSourceContinued = 102, + NonSemanticShaderDebugInfo100DebugLine = 103, + NonSemanticShaderDebugInfo100DebugNoLine = 104, + NonSemanticShaderDebugInfo100DebugBuildIdentifier = 105, + NonSemanticShaderDebugInfo100DebugStoragePath = 106, + NonSemanticShaderDebugInfo100DebugEntryPoint = 107, + NonSemanticShaderDebugInfo100DebugTypeMatrix = 108, + NonSemanticShaderDebugInfo100InstructionsMax = 0x7fffffff +}; + + +enum NonSemanticShaderDebugInfo100DebugInfoFlags { + NonSemanticShaderDebugInfo100None = 0x0000, + NonSemanticShaderDebugInfo100FlagIsProtected = 0x01, + NonSemanticShaderDebugInfo100FlagIsPrivate = 0x02, + NonSemanticShaderDebugInfo100FlagIsPublic = 0x03, + NonSemanticShaderDebugInfo100FlagIsLocal = 0x04, + NonSemanticShaderDebugInfo100FlagIsDefinition = 0x08, + NonSemanticShaderDebugInfo100FlagFwdDecl = 0x10, + NonSemanticShaderDebugInfo100FlagArtificial = 0x20, + NonSemanticShaderDebugInfo100FlagExplicit = 0x40, + NonSemanticShaderDebugInfo100FlagPrototyped = 0x80, + NonSemanticShaderDebugInfo100FlagObjectPointer = 0x100, + NonSemanticShaderDebugInfo100FlagStaticMember = 0x200, + NonSemanticShaderDebugInfo100FlagIndirectVariable = 0x400, + NonSemanticShaderDebugInfo100FlagLValueReference = 0x800, + NonSemanticShaderDebugInfo100FlagRValueReference = 0x1000, + NonSemanticShaderDebugInfo100FlagIsOptimized = 0x2000, + NonSemanticShaderDebugInfo100FlagIsEnumClass = 0x4000, + NonSemanticShaderDebugInfo100FlagTypePassByValue = 0x8000, + NonSemanticShaderDebugInfo100FlagTypePassByReference = 0x10000, + NonSemanticShaderDebugInfo100FlagUnknownPhysicalLayout = 0x20000, + NonSemanticShaderDebugInfo100DebugInfoFlagsMax = 0x7fffffff +}; + +enum NonSemanticShaderDebugInfo100BuildIdentifierFlags { + NonSemanticShaderDebugInfo100IdentifierPossibleDuplicates = 0x01, + NonSemanticShaderDebugInfo100BuildIdentifierFlagsMax = 0x7fffffff +}; + +enum NonSemanticShaderDebugInfo100DebugBaseTypeAttributeEncoding { + NonSemanticShaderDebugInfo100Unspecified = 0, + NonSemanticShaderDebugInfo100Address = 1, + NonSemanticShaderDebugInfo100Boolean = 2, + NonSemanticShaderDebugInfo100Float = 3, + NonSemanticShaderDebugInfo100Signed = 4, + NonSemanticShaderDebugInfo100SignedChar = 5, + NonSemanticShaderDebugInfo100Unsigned = 6, + NonSemanticShaderDebugInfo100UnsignedChar = 7, + NonSemanticShaderDebugInfo100DebugBaseTypeAttributeEncodingMax = 0x7fffffff +}; + +enum NonSemanticShaderDebugInfo100DebugCompositeType { + NonSemanticShaderDebugInfo100Class = 0, + NonSemanticShaderDebugInfo100Structure = 1, + NonSemanticShaderDebugInfo100Union = 2, + NonSemanticShaderDebugInfo100DebugCompositeTypeMax = 0x7fffffff +}; + +enum NonSemanticShaderDebugInfo100DebugTypeQualifier { + NonSemanticShaderDebugInfo100ConstType = 0, + NonSemanticShaderDebugInfo100VolatileType = 1, + NonSemanticShaderDebugInfo100RestrictType = 2, + NonSemanticShaderDebugInfo100AtomicType = 3, + NonSemanticShaderDebugInfo100DebugTypeQualifierMax = 0x7fffffff +}; + +enum NonSemanticShaderDebugInfo100DebugOperation { + NonSemanticShaderDebugInfo100Deref = 0, + NonSemanticShaderDebugInfo100Plus = 1, + NonSemanticShaderDebugInfo100Minus = 2, + NonSemanticShaderDebugInfo100PlusUconst = 3, + NonSemanticShaderDebugInfo100BitPiece = 4, + NonSemanticShaderDebugInfo100Swap = 5, + NonSemanticShaderDebugInfo100Xderef = 6, + NonSemanticShaderDebugInfo100StackValue = 7, + NonSemanticShaderDebugInfo100Constu = 8, + NonSemanticShaderDebugInfo100Fragment = 9, + NonSemanticShaderDebugInfo100DebugOperationMax = 0x7fffffff +}; + +enum NonSemanticShaderDebugInfo100DebugImportedEntity { + NonSemanticShaderDebugInfo100ImportedModule = 0, + NonSemanticShaderDebugInfo100ImportedDeclaration = 1, + NonSemanticShaderDebugInfo100DebugImportedEntityMax = 0x7fffffff +}; + + +#ifdef __cplusplus +} +#endif + +#endif // SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_ diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp index fdfbeb90cd..2ef3bf7568 100644 --- a/SPIRV/SPVRemapper.cpp +++ b/SPIRV/SPVRemapper.cpp @@ -36,13 +36,8 @@ #include "SPVRemapper.h" #include "doc.h" -#if !defined (use_cpp11) -// ... not supported before C++11 -#else // defined (use_cpp11) - #include #include -#include "../glslang/Include/Common.h" namespace spv { @@ -160,15 +155,29 @@ namespace spv { } // Is this an opcode we should remove when using --strip? - bool spirvbin_t::isStripOp(spv::Op opCode) const + bool spirvbin_t::isStripOp(spv::Op opCode, unsigned start) const { switch (opCode) { case spv::OpSource: case spv::OpSourceExtension: case spv::OpName: case spv::OpMemberName: - case spv::OpLine: return true; - default: return false; + case spv::OpLine : + { + const std::string name = literalString(start + 2); + + std::vector::const_iterator it; + for (it = stripWhiteList.begin(); it < stripWhiteList.end(); it++) + { + if (name.find(*it) != std::string::npos) { + return false; + } + } + + return true; + } + default : + return false; } } @@ -372,7 +381,7 @@ namespace spv { process( [&](spv::Op opCode, unsigned start) { // remember opcodes we want to strip later - if (isStripOp(opCode)) + if (isStripOp(opCode, start)) stripInst(start); return true; }, @@ -670,6 +679,7 @@ namespace spv { case spv::OperandKernelEnqueueFlags: case spv::OperandKernelProfilingInfo: case spv::OperandCapability: + case spv::OperandCooperativeMatrixOperands: ++word; break; @@ -1494,14 +1504,23 @@ namespace spv { } // remap from a memory image - void spirvbin_t::remap(std::vector& in_spv, std::uint32_t opts) + void spirvbin_t::remap(std::vector& in_spv, const std::vector& whiteListStrings, + std::uint32_t opts) { + stripWhiteList = whiteListStrings; spv.swap(in_spv); remap(opts); spv.swap(in_spv); } -} // namespace SPV + // remap from a memory image - legacy interface without white list + void spirvbin_t::remap(std::vector& in_spv, std::uint32_t opts) + { + stripWhiteList.clear(); + spv.swap(in_spv); + remap(opts); + spv.swap(in_spv); + } -#endif // defined (use_cpp11) +} // namespace SPV diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h index d6b9c346dd..e60da792f4 100644 --- a/SPIRV/SPVRemapper.h +++ b/SPIRV/SPVRemapper.h @@ -41,14 +41,23 @@ #include #include -namespace spv { - -// MSVC defines __cplusplus as an older value, even when it supports almost all of 11. -// We handle that here by making our own symbol. -#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1700) -# define use_cpp11 1 +#ifdef GLSLANG_IS_SHARED_LIBRARY + #ifdef _WIN32 + #ifdef GLSLANG_EXPORTING + #define GLSLANG_EXPORT __declspec(dllexport) + #else + #define GLSLANG_EXPORT __declspec(dllimport) + #endif + #elif __GNUC__ >= 4 + #define GLSLANG_EXPORT __attribute__((visibility("default"))) + #endif +#endif // GLSLANG_IS_SHARED_LIBRARY +#ifndef GLSLANG_EXPORT +#define GLSLANG_EXPORT #endif +namespace spv { + class spirvbin_base_t { public: @@ -74,27 +83,6 @@ class spirvbin_base_t } // namespace SPV -#if !defined (use_cpp11) -#include -#include - -namespace spv { -class spirvbin_t : public spirvbin_base_t -{ -public: - spirvbin_t(int /*verbose = 0*/) { } - - void remap(std::vector& /*spv*/, unsigned int /*opts = 0*/) - { - printf("Tool not compiled for C++11, which is required for SPIR-V remapping.\n"); - exit(5); - } -}; - -} // namespace SPV - -#else // defined (use_cpp11) - #include #include #include @@ -104,12 +92,13 @@ class spirvbin_t : public spirvbin_base_t #include #include "spirv.hpp" -#include "spvIR.h" namespace spv { +static inline constexpr Id NoResult = 0; + // class to hold SPIR-V binary data for remapping, DCE, and debug stripping -class spirvbin_t : public spirvbin_base_t +class GLSLANG_EXPORT spirvbin_t : public spirvbin_base_t { public: spirvbin_t(int verbose = 0) : entryPoint(spv::NoResult), largestNewId(0), verbose(verbose), errorLatch(false) @@ -118,6 +107,10 @@ class spirvbin_t : public spirvbin_base_t virtual ~spirvbin_t() { } // remap on an existing binary in memory + void remap(std::vector& spv, const std::vector& whiteListStrings, + std::uint32_t opts = DO_EVERYTHING); + + // remap on an existing binary in memory - legacy interface without white list void remap(std::vector& spv, std::uint32_t opts = DO_EVERYTHING); // Type for error/log handler functions @@ -180,6 +173,8 @@ class spirvbin_t : public spirvbin_base_t unsigned typeSizeInWords(spv::Id id) const; unsigned idTypeSizeInWords(spv::Id id) const; + bool isStripOp(spv::Op opCode, unsigned start) const; + spv::Id& asId(unsigned word) { return spv[word]; } const spv::Id& asId(unsigned word) const { return spv[word]; } spv::Op asOpCode(unsigned word) const { return opOpCode(spv[word]); } @@ -249,6 +244,8 @@ class spirvbin_t : public spirvbin_base_t std::vector spv; // SPIR words + std::vector stripWhiteList; + namemap_t nameMap; // ID names from OpName // Since we want to also do binary ops, we can't use std::vector. we could use @@ -300,5 +297,4 @@ class spirvbin_t : public spirvbin_base_t } // namespace SPV -#endif // defined (use_cpp11) #endif // SPIRVREMAPPER_H diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 0b0e48ab0b..41a6b3db02 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -46,10 +46,7 @@ #include #include "SpvBuilder.h" - -#ifndef GLSLANG_WEB #include "hex_float.h" -#endif #ifndef _WIN32 #include @@ -59,18 +56,14 @@ namespace spv { Builder::Builder(unsigned int spvVersion, unsigned int magicNumber, SpvBuildLogger* buildLogger) : spvVersion(spvVersion), - source(SourceLanguageUnknown), + sourceLang(SourceLanguageUnknown), sourceVersion(0), - sourceFileStringId(NoResult), - currentLine(0), - currentFile(nullptr), - emitOpLines(false), addressModel(AddressingModelLogical), memoryModel(MemoryModelGLSL450), builderNumber(magicNumber), - buildPoint(0), + buildPoint(nullptr), uniqueId(0), - entryPointFunction(0), + entryPointFunction(nullptr), generatingOpCodeForSpecConst(false), logger(buildLogger) { @@ -91,56 +84,19 @@ Id Builder::import(const char* name) return import->getResultId(); } -// Emit instruction for non-filename-based #line directives (ie. no filename -// seen yet): emit an OpLine if we've been asked to emit OpLines and the line -// number has changed since the last time, and is a valid line number. -void Builder::setLine(int lineNum) -{ - if (lineNum != 0 && lineNum != currentLine) { - currentLine = lineNum; - if (emitOpLines) - addLine(sourceFileStringId, currentLine, 0); - } -} - -// If no filename, do non-filename-based #line emit. Else do filename-based emit. -// Emit OpLine if we've been asked to emit OpLines and the line number or filename -// has changed since the last time, and line number is valid. -void Builder::setLine(int lineNum, const char* filename) -{ - if (filename == nullptr) { - setLine(lineNum); - return; - } - if ((lineNum != 0 && lineNum != currentLine) || currentFile == nullptr || - strncmp(filename, currentFile, strlen(currentFile) + 1) != 0) { - currentLine = lineNum; - currentFile = filename; - if (emitOpLines) { - spv::Id strId = getStringId(filename); - addLine(strId, currentLine, 0); - } - } -} - -void Builder::addLine(Id fileName, int lineNum, int column) -{ - Instruction* line = new Instruction(OpLine); - line->addIdOperand(fileName); - line->addImmediateOperand(lineNum); - line->addImmediateOperand(column); - buildPoint->addInstruction(std::unique_ptr(line)); -} - // For creating new groupedTypes (will return old type if the requested one was already made). Id Builder::makeVoidType() { Instruction* type; if (groupedTypes[OpTypeVoid].size() == 0) { - type = new Instruction(getUniqueId(), NoType, OpTypeVoid); + Id typeId = getUniqueId(); + type = new Instruction(typeId, NoType, OpTypeVoid); groupedTypes[OpTypeVoid].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + // Core OpTypeVoid used for debug void type + if (emitNonSemanticShaderDebugInfo) + debugId[typeId] = typeId; } else type = groupedTypes[OpTypeVoid].back(); @@ -155,9 +111,16 @@ Id Builder::makeBoolType() groupedTypes[OpTypeBool].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + + if (emitNonSemanticShaderDebugInfo) { + auto const debugResultId = makeBoolDebugType(32); + debugId[type->getResultId()] = debugResultId; + } + } else type = groupedTypes[OpTypeBool].back(); + return type->getResultId(); } @@ -172,6 +135,12 @@ Id Builder::makeSamplerType() } else type = groupedTypes[OpTypeSampler].back(); + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = makeCompositeDebugType({}, "type.sampler", NonSemanticShaderDebugInfo100Structure, true); + debugId[type->getResultId()] = debugResultId; + } + return type->getResultId(); } @@ -188,12 +157,18 @@ Id Builder::makePointer(StorageClass storageClass, Id pointee) // not found, make it type = new Instruction(getUniqueId(), NoType, OpTypePointer); + type->reserveOperands(2); type->addImmediateOperand(storageClass); type->addIdOperand(pointee); groupedTypes[OpTypePointer].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) { + const Id debugResultId = makePointerDebugType(storageClass, pointee); + debugId[type->getResultId()] = debugResultId; + } + return type->getResultId(); } @@ -207,6 +182,10 @@ Id Builder::makeForwardPointer(StorageClass storageClass) constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) { + const Id debugResultId = makeForwardPointerDebugType(storageClass); + debugId[type->getResultId()] = debugResultId; + } return type->getResultId(); } @@ -222,22 +201,27 @@ Id Builder::makePointerFromForwardPointer(StorageClass storageClass, Id forwardP } type = new Instruction(forwardPointerType, NoType, OpTypePointer); + type->reserveOperands(2); type->addImmediateOperand(storageClass); type->addIdOperand(pointee); groupedTypes[OpTypePointer].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + // If we are emitting nonsemantic debuginfo, we need to patch the debug pointer type + // that was emitted alongside the forward pointer, now that we have a pointee debug + // type for it to point to. + if (emitNonSemanticShaderDebugInfo) { + Instruction *debugForwardPointer = module.getInstruction(debugId[forwardPointerType]); + assert(debugId[pointee]); + debugForwardPointer->setIdOperand(2, debugId[pointee]); + } + return type->getResultId(); } Id Builder::makeIntegerType(int width, bool hasSign) { -#ifdef GLSLANG_WEB - assert(width == 32); - width = 32; -#endif - // try to find it Instruction* type; for (int t = 0; t < (int)groupedTypes[OpTypeInt].size(); ++t) { @@ -249,6 +233,7 @@ Id Builder::makeIntegerType(int width, bool hasSign) // not found, make it type = new Instruction(getUniqueId(), NoType, OpTypeInt); + type->reserveOperands(2); type->addImmediateOperand(width); type->addImmediateOperand(hasSign ? 1 : 0); groupedTypes[OpTypeInt].push_back(type); @@ -268,16 +253,17 @@ Id Builder::makeIntegerType(int width, bool hasSign) break; } + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = makeIntegerDebugType(width, hasSign); + debugId[type->getResultId()] = debugResultId; + } + return type->getResultId(); } Id Builder::makeFloatType(int width) { -#ifdef GLSLANG_WEB - assert(width == 32); - width = 32; -#endif - // try to find it Instruction* type; for (int t = 0; t < (int)groupedTypes[OpTypeFloat].size(); ++t) { @@ -305,6 +291,12 @@ Id Builder::makeFloatType(int width) break; } + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = makeFloatDebugType(width); + debugId[type->getResultId()] = debugResultId; + } + return type->getResultId(); } @@ -312,7 +304,7 @@ Id Builder::makeFloatType(int width) // See makeStructResultType() for non-decorated structs // needed as the result of some instructions, which does // check for duplicates. -Id Builder::makeStructType(const std::vector& members, const char* name) +Id Builder::makeStructType(const std::vector& members, const char* name, bool const compilerGenerated) { // Don't look for previous one, because in the general case, // structs can be duplicated except for decorations. @@ -326,6 +318,12 @@ Id Builder::makeStructType(const std::vector& members, const char* name) module.mapInstruction(type); addName(type->getResultId(), name); + if (emitNonSemanticShaderDebugInfo && !compilerGenerated) + { + auto const debugResultId = makeCompositeDebugType(members, name, NonSemanticShaderDebugInfo100Structure); + debugId[type->getResultId()] = debugResultId; + } + return type->getResultId(); } @@ -366,12 +364,19 @@ Id Builder::makeVectorType(Id component, int size) // not found, make it type = new Instruction(getUniqueId(), NoType, OpTypeVector); + type->reserveOperands(2); type->addIdOperand(component); type->addImmediateOperand(size); groupedTypes[OpTypeVector].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = makeVectorDebugType(component, size); + debugId[type->getResultId()] = debugResultId; + } + return type->getResultId(); } @@ -392,30 +397,65 @@ Id Builder::makeMatrixType(Id component, int cols, int rows) // not found, make it type = new Instruction(getUniqueId(), NoType, OpTypeMatrix); + type->reserveOperands(2); type->addIdOperand(column); type->addImmediateOperand(cols); groupedTypes[OpTypeMatrix].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = makeMatrixDebugType(column, cols); + debugId[type->getResultId()] = debugResultId; + } + return type->getResultId(); } -Id Builder::makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols) +Id Builder::makeCooperativeMatrixTypeKHR(Id component, Id scope, Id rows, Id cols, Id use) { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeMatrixNV].size(); ++t) { - type = groupedTypes[OpTypeCooperativeMatrixNV][t]; + for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeMatrixKHR].size(); ++t) { + type = groupedTypes[OpTypeCooperativeMatrixKHR][t]; if (type->getIdOperand(0) == component && type->getIdOperand(1) == scope && type->getIdOperand(2) == rows && + type->getIdOperand(3) == cols && + type->getIdOperand(4) == use) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, OpTypeCooperativeMatrixKHR); + type->reserveOperands(5); + type->addIdOperand(component); + type->addIdOperand(scope); + type->addIdOperand(rows); + type->addIdOperand(cols); + type->addIdOperand(use); + groupedTypes[OpTypeCooperativeMatrixKHR].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeCooperativeMatrixTypeNV(Id component, Id scope, Id rows, Id cols) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeMatrixNV].size(); ++t) { + type = groupedTypes[OpTypeCooperativeMatrixNV][t]; + if (type->getIdOperand(0) == component && type->getIdOperand(1) == scope && type->getIdOperand(2) == rows && type->getIdOperand(3) == cols) return type->getResultId(); } // not found, make it type = new Instruction(getUniqueId(), NoType, OpTypeCooperativeMatrixNV); + type->reserveOperands(4); type->addIdOperand(component); type->addIdOperand(scope); type->addIdOperand(rows); @@ -427,6 +467,17 @@ Id Builder::makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols) return type->getResultId(); } +Id Builder::makeCooperativeMatrixTypeWithSameShape(Id component, Id otherType) +{ + Instruction* instr = module.getInstruction(otherType); + if (instr->getOpCode() == OpTypeCooperativeMatrixNV) { + return makeCooperativeMatrixTypeNV(component, instr->getIdOperand(1), instr->getIdOperand(2), instr->getIdOperand(3)); + } else { + assert(instr->getOpCode() == OpTypeCooperativeMatrixKHR); + return makeCooperativeMatrixTypeKHR(component, instr->getIdOperand(1), instr->getIdOperand(2), instr->getIdOperand(3), instr->getIdOperand(4)); + } +} + Id Builder::makeGenericType(spv::Op opcode, std::vector& operands) { // try to find it @@ -437,7 +488,7 @@ Id Builder::makeGenericType(spv::Op opcode, std::vector& opera continue; // Number mismatch, find next bool match = true; - for (size_t op = 0; match && op < operands.size(); ++op) { + for (int op = 0; match && op < (int)operands.size(); ++op) { match = (operands[op].isId ? type->getIdOperand(op) : type->getImmediateOperand(op)) == operands[op].word; } if (match) @@ -446,6 +497,7 @@ Id Builder::makeGenericType(spv::Op opcode, std::vector& opera // not found, make it type = new Instruction(getUniqueId(), NoType, opcode); + type->reserveOperands(operands.size()); for (size_t op = 0; op < operands.size(); ++op) { if (operands[op].isId) type->addIdOperand(operands[op].word); @@ -478,12 +530,19 @@ Id Builder::makeArrayType(Id element, Id sizeId, int stride) // not found, make it type = new Instruction(getUniqueId(), NoType, OpTypeArray); + type->reserveOperands(2); type->addIdOperand(element); type->addIdOperand(sizeId); groupedTypes[OpTypeArray].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = makeArrayDebugType(element, sizeId); + debugId[type->getResultId()] = debugResultId; + } + return type->getResultId(); } @@ -494,6 +553,12 @@ Id Builder::makeRuntimeArray(Id element) constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = makeArrayDebugType(element, makeUintConstant(0)); + debugId[type->getResultId()] = debugResultId; + } + return type->getResultId(); } @@ -513,11 +578,26 @@ Id Builder::makeFunctionType(Id returnType, const std::vector& paramTypes) } } if (! mismatch) + { + // If compiling HLSL, glslang will create a wrapper function around the entrypoint. Accordingly, a void(void) + // function type is created for the wrapper function. However, nonsemantic shader debug information is disabled + // while creating the HLSL wrapper. Consequently, if we encounter another void(void) function, we need to create + // the associated debug function type if it hasn't been created yet. + if(emitNonSemanticShaderDebugInfo && debugId[type->getResultId()] == 0) { + assert(sourceLang == spv::SourceLanguageHLSL); + assert(getTypeClass(returnType) == OpTypeVoid && paramTypes.size() == 0); + + Id debugTypeId = makeDebugFunctionType(returnType, {}); + debugId[type->getResultId()] = debugTypeId; + } return type->getResultId(); + } } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeFunction); + Id typeId = getUniqueId(); + type = new Instruction(typeId, NoType, OpTypeFunction); + type->reserveOperands(paramTypes.size() + 1); type->addIdOperand(returnType); for (int p = 0; p < (int)paramTypes.size(); ++p) type->addIdOperand(paramTypes[p]); @@ -525,9 +605,39 @@ Id Builder::makeFunctionType(Id returnType, const std::vector& paramTypes) constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + // make debug type and map it + if (emitNonSemanticShaderDebugInfo) { + Id debugTypeId = makeDebugFunctionType(returnType, paramTypes); + debugId[typeId] = debugTypeId; + } + return type->getResultId(); } +Id Builder::makeDebugFunctionType(Id returnType, const std::vector& paramTypes) +{ + assert(debugId[returnType] != 0); + + Id typeId = getUniqueId(); + auto type = new Instruction(typeId, makeVoidType(), OpExtInst); + type->reserveOperands(paramTypes.size() + 4); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeFunction); + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic)); + type->addIdOperand(debugId[returnType]); + for (auto const paramType : paramTypes) { + if (isPointerType(paramType) || isArrayType(paramType)) { + type->addIdOperand(debugId[getContainedTypeId(paramType)]); + } + else { + type->addIdOperand(debugId[paramType]); + } + } + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + return typeId; +} + Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format) { @@ -549,6 +659,7 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo // not found, make it type = new Instruction(getUniqueId(), NoType, OpTypeImage); + type->reserveOperands(7); type->addIdOperand(sampledType); type->addImmediateOperand( dim); type->addImmediateOperand( depth ? 1 : 0); @@ -561,7 +672,6 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); -#ifndef GLSLANG_WEB // deal with capabilities switch (dim) { case DimBuffer: @@ -607,7 +717,22 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo addCapability(CapabilityImageMSArray); } } -#endif + + if (emitNonSemanticShaderDebugInfo) + { + auto TypeName = [&dim]() -> char const* { + switch (dim) { + case Dim1D: return "type.1d.image"; + case Dim2D: return "type.2d.image"; + case Dim3D: return "type.3d.image"; + case DimCube: return "type.cube.image"; + default: return "type.image"; + } + }; + + auto const debugResultId = makeCompositeDebugType({}, TypeName(), NonSemanticShaderDebugInfo100Class, true); + debugId[type->getResultId()] = debugResultId; + } return type->getResultId(); } @@ -630,10 +755,483 @@ Id Builder::makeSampledImageType(Id imageType) constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = makeCompositeDebugType({}, "type.sampled.image", NonSemanticShaderDebugInfo100Class, true); + debugId[type->getResultId()] = debugResultId; + } + + return type->getResultId(); +} + +Id Builder::makeDebugInfoNone() +{ + if (debugInfoNone != 0) + return debugInfoNone; + + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + inst->reserveOperands(2); + inst->addIdOperand(nonSemanticShaderDebugInfo); + inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugInfoNone); + + constantsTypesGlobals.push_back(std::unique_ptr(inst)); + module.mapInstruction(inst); + + debugInfoNone = inst->getResultId(); + + return debugInfoNone; +} + +Id Builder::makeBoolDebugType(int const size) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].size(); ++t) { + type = groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic][t]; + if (type->getIdOperand(0) == getStringId("bool") && + type->getIdOperand(1) == static_cast(size) && + type->getIdOperand(2) == NonSemanticShaderDebugInfo100Boolean) + return type->getResultId(); + } + + type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type->reserveOperands(6); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic); + + type->addIdOperand(getStringId("bool")); // name id + type->addIdOperand(makeUintConstant(size)); // size id + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100Boolean)); // encoding id + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100None)); // flags id + + groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeIntegerDebugType(int const width, bool const hasSign) +{ + const char* typeName = nullptr; + switch (width) { + case 8: typeName = hasSign ? "int8_t" : "uint8_t"; break; + case 16: typeName = hasSign ? "int16_t" : "uint16_t"; break; + case 64: typeName = hasSign ? "int64_t" : "uint64_t"; break; + default: typeName = hasSign ? "int" : "uint"; + } + auto nameId = getStringId(typeName); + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].size(); ++t) { + type = groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic][t]; + if (type->getIdOperand(0) == nameId && + type->getIdOperand(1) == static_cast(width) && + type->getIdOperand(2) == (hasSign ? NonSemanticShaderDebugInfo100Signed : NonSemanticShaderDebugInfo100Unsigned)) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type->reserveOperands(6); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic); + type->addIdOperand(nameId); // name id + type->addIdOperand(makeUintConstant(width)); // size id + if(hasSign == true) { + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100Signed)); // encoding id + } else { + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100Unsigned)); // encoding id + } + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100None)); // flags id + + groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeFloatDebugType(int const width) +{ + const char* typeName = nullptr; + switch (width) { + case 16: typeName = "float16_t"; break; + case 64: typeName = "double"; break; + default: typeName = "float"; break; + } + auto nameId = getStringId(typeName); + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].size(); ++t) { + type = groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic][t]; + if (type->getIdOperand(0) == nameId && + type->getIdOperand(1) == static_cast(width) && + type->getIdOperand(2) == NonSemanticShaderDebugInfo100Float) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type->reserveOperands(6); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic); + type->addIdOperand(nameId); // name id + type->addIdOperand(makeUintConstant(width)); // size id + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100Float)); // encoding id + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100None)); // flags id + + groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeSequentialDebugType(Id const baseType, Id const componentCount, NonSemanticShaderDebugInfo100Instructions const sequenceType) +{ + assert(sequenceType == NonSemanticShaderDebugInfo100DebugTypeArray || + sequenceType == NonSemanticShaderDebugInfo100DebugTypeVector); + + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedDebugTypes[sequenceType].size(); ++t) { + type = groupedDebugTypes[sequenceType][t]; + if (type->getIdOperand(0) == baseType && + type->getIdOperand(1) == makeUintConstant(componentCount)) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type->reserveOperands(4); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(sequenceType); + type->addIdOperand(debugId[baseType]); // base type + type->addIdOperand(componentCount); // component count + + groupedDebugTypes[sequenceType].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeArrayDebugType(Id const baseType, Id const componentCount) +{ + return makeSequentialDebugType(baseType, componentCount, NonSemanticShaderDebugInfo100DebugTypeArray); +} + +Id Builder::makeVectorDebugType(Id const baseType, int const componentCount) +{ + return makeSequentialDebugType(baseType, makeUintConstant(componentCount), NonSemanticShaderDebugInfo100DebugTypeVector); +} + +Id Builder::makeMatrixDebugType(Id const vectorType, int const vectorCount, bool columnMajor) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeMatrix].size(); ++t) { + type = groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeMatrix][t]; + if (type->getIdOperand(0) == vectorType && + type->getIdOperand(1) == makeUintConstant(vectorCount)) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type->reserveOperands(5); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeMatrix); + type->addIdOperand(debugId[vectorType]); // vector type id + type->addIdOperand(makeUintConstant(vectorCount)); // component count id + type->addIdOperand(makeBoolConstant(columnMajor)); // column-major id + + groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeMatrix].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makeMemberDebugType(Id const memberType, DebugTypeLoc const& debugTypeLoc) +{ + assert(debugId[memberType] != 0); + + Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type->reserveOperands(10); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeMember); + type->addIdOperand(getStringId(debugTypeLoc.name)); // name id + type->addIdOperand(debugId[memberType]); // type id + type->addIdOperand(makeDebugSource(currentFileId)); // source id + type->addIdOperand(makeUintConstant(debugTypeLoc.line)); // line id TODO: currentLine is always zero + type->addIdOperand(makeUintConstant(debugTypeLoc.column)); // TODO: column id + type->addIdOperand(makeUintConstant(0)); // TODO: offset id + type->addIdOperand(makeUintConstant(0)); // TODO: size id + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic)); // flags id + + groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeMember].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +// Note: To represent a source language opaque type, this instruction must have no Members operands, Size operand must be +// DebugInfoNone, and Name must start with @ to avoid clashes with user defined names. +Id Builder::makeCompositeDebugType(std::vector const& memberTypes, char const*const name, + NonSemanticShaderDebugInfo100DebugCompositeType const tag, bool const isOpaqueType) +{ + // Create the debug member types. + std::vector memberDebugTypes; + for(auto const memberType : memberTypes) { + assert(debugTypeLocs.find(memberType) != debugTypeLocs.end()); + + // There _should_ be debug types for all the member types but currently buffer references + // do not have member debug info generated. + if (debugId[memberType]) + memberDebugTypes.emplace_back(makeMemberDebugType(memberType, debugTypeLocs[memberType])); + + // TODO: Need to rethink this method of passing location information. + // debugTypeLocs.erase(memberType); + } + + // Create The structure debug type. + Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type->reserveOperands(memberDebugTypes.size() + 11); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeComposite); + type->addIdOperand(getStringId(name)); // name id + type->addIdOperand(makeUintConstant(tag)); // tag id + type->addIdOperand(makeDebugSource(currentFileId)); // source id + type->addIdOperand(makeUintConstant(currentLine)); // line id TODO: currentLine always zero? + type->addIdOperand(makeUintConstant(0)); // TODO: column id + type->addIdOperand(makeDebugCompilationUnit()); // scope id + if(isOpaqueType == true) { + // Prepend '@' to opaque types. + type->addIdOperand(getStringId('@' + std::string(name))); // linkage name id + type->addIdOperand(makeDebugInfoNone()); // size id + } else { + type->addIdOperand(getStringId(name)); // linkage name id + type->addIdOperand(makeUintConstant(0)); // TODO: size id + } + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic)); // flags id + assert(isOpaqueType == false || (isOpaqueType == true && memberDebugTypes.empty())); + for(auto const memberDebugType : memberDebugTypes) { + type->addIdOperand(memberDebugType); + } + + groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeComposite].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +Id Builder::makePointerDebugType(StorageClass storageClass, Id const baseType) +{ + const Id debugBaseType = debugId[baseType]; + if (!debugBaseType) { + return makeDebugInfoNone(); + } + const Id scID = makeUintConstant(storageClass); + for (Instruction* otherType : groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypePointer]) { + if (otherType->getIdOperand(2) == debugBaseType && + otherType->getIdOperand(3) == scID) { + return otherType->getResultId(); + } + } + + Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type->reserveOperands(5); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypePointer); + type->addIdOperand(debugBaseType); + type->addIdOperand(scID); + type->addIdOperand(makeUintConstant(0)); + + groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypePointer].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + +// Emit a OpExtInstWithForwardRefsKHR nonsemantic instruction for a pointer debug type +// where we don't have the pointee yet. Since we don't have the pointee yet, it just +// points to itself and we rely on patching it later. +Id Builder::makeForwardPointerDebugType(StorageClass storageClass) +{ + const Id scID = makeUintConstant(storageClass); + + this->addExtension(spv::E_SPV_KHR_relaxed_extended_instruction); + + Instruction *type = new Instruction(getUniqueId(), makeVoidType(), OpExtInstWithForwardRefsKHR); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypePointer); + type->addIdOperand(type->getResultId()); + type->addIdOperand(scID); + type->addIdOperand(makeUintConstant(0)); + + groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypePointer].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + return type->getResultId(); } -#ifndef GLSLANG_WEB +Id Builder::makeDebugSource(const Id fileName) { + if (debugSourceId.find(fileName) != debugSourceId.end()) + return debugSourceId[fileName]; + spv::Id resultId = getUniqueId(); + Instruction* sourceInst = new Instruction(resultId, makeVoidType(), OpExtInst); + sourceInst->reserveOperands(3); + sourceInst->addIdOperand(nonSemanticShaderDebugInfo); + sourceInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugSource); + sourceInst->addIdOperand(fileName); + if (emitNonSemanticShaderDebugSource) { + spv::Id sourceId = 0; + if (fileName == mainFileId) { + sourceId = getStringId(sourceText); + } else { + auto incItr = includeFiles.find(fileName); + if (incItr != includeFiles.end()) { + sourceId = getStringId(*incItr->second); + } + } + + // We omit the optional source text item if not available in glslang + if (sourceId != 0) { + sourceInst->addIdOperand(sourceId); + } + } + constantsTypesGlobals.push_back(std::unique_ptr(sourceInst)); + module.mapInstruction(sourceInst); + debugSourceId[fileName] = resultId; + return resultId; +} + +Id Builder::makeDebugCompilationUnit() { + if (nonSemanticShaderCompilationUnitId != 0) + return nonSemanticShaderCompilationUnitId; + spv::Id resultId = getUniqueId(); + Instruction* sourceInst = new Instruction(resultId, makeVoidType(), OpExtInst); + sourceInst->reserveOperands(6); + sourceInst->addIdOperand(nonSemanticShaderDebugInfo); + sourceInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugCompilationUnit); + sourceInst->addIdOperand(makeUintConstant(1)); // TODO(greg-lunarg): Get rid of magic number + sourceInst->addIdOperand(makeUintConstant(4)); // TODO(greg-lunarg): Get rid of magic number + sourceInst->addIdOperand(makeDebugSource(mainFileId)); + sourceInst->addIdOperand(makeUintConstant(sourceLang)); + constantsTypesGlobals.push_back(std::unique_ptr(sourceInst)); + module.mapInstruction(sourceInst); + nonSemanticShaderCompilationUnitId = resultId; + + // We can reasonably assume that makeDebugCompilationUnit will be called before any of + // debug-scope stack. Function scopes and lexical scopes will occur afterward. + assert(currentDebugScopeId.empty()); + currentDebugScopeId.push(nonSemanticShaderCompilationUnitId); + + return resultId; +} + +Id Builder::createDebugGlobalVariable(Id const type, char const*const name, Id const variable) +{ + assert(type != 0); + + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + inst->reserveOperands(11); + inst->addIdOperand(nonSemanticShaderDebugInfo); + inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugGlobalVariable); + inst->addIdOperand(getStringId(name)); // name id + inst->addIdOperand(type); // type id + inst->addIdOperand(makeDebugSource(currentFileId)); // source id + inst->addIdOperand(makeUintConstant(currentLine)); // line id TODO: currentLine always zero? + inst->addIdOperand(makeUintConstant(0)); // TODO: column id + inst->addIdOperand(makeDebugCompilationUnit()); // scope id + inst->addIdOperand(getStringId(name)); // linkage name id + inst->addIdOperand(variable); // variable id + inst->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsDefinition)); // flags id + + constantsTypesGlobals.push_back(std::unique_ptr(inst)); + module.mapInstruction(inst); + + return inst->getResultId(); +} + +Id Builder::createDebugLocalVariable(Id type, char const*const name, size_t const argNumber) +{ + assert(name != nullptr); + assert(!currentDebugScopeId.empty()); + + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + inst->reserveOperands(9); + inst->addIdOperand(nonSemanticShaderDebugInfo); + inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLocalVariable); + inst->addIdOperand(getStringId(name)); // name id + inst->addIdOperand(type); // type id + inst->addIdOperand(makeDebugSource(currentFileId)); // source id + inst->addIdOperand(makeUintConstant(currentLine)); // line id + inst->addIdOperand(makeUintConstant(0)); // TODO: column id + inst->addIdOperand(currentDebugScopeId.top()); // scope id + inst->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsLocal)); // flags id + if(argNumber != 0) { + inst->addIdOperand(makeUintConstant(argNumber)); + } + + constantsTypesGlobals.push_back(std::unique_ptr(inst)); + module.mapInstruction(inst); + + return inst->getResultId(); +} + +Id Builder::makeDebugExpression() +{ + if (debugExpression != 0) + return debugExpression; + + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + inst->reserveOperands(2); + inst->addIdOperand(nonSemanticShaderDebugInfo); + inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugExpression); + + constantsTypesGlobals.push_back(std::unique_ptr(inst)); + module.mapInstruction(inst); + + debugExpression = inst->getResultId(); + + return debugExpression; +} + +Id Builder::makeDebugDeclare(Id const debugLocalVariable, Id const pointer) +{ + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + inst->reserveOperands(5); + inst->addIdOperand(nonSemanticShaderDebugInfo); + inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugDeclare); + inst->addIdOperand(debugLocalVariable); // debug local variable id + inst->addIdOperand(pointer); // pointer to local variable id + inst->addIdOperand(makeDebugExpression()); // expression id + addInstruction(std::unique_ptr(inst)); + + return inst->getResultId(); +} + +Id Builder::makeDebugValue(Id const debugLocalVariable, Id const value) +{ + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + inst->reserveOperands(5); + inst->addIdOperand(nonSemanticShaderDebugInfo); + inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugValue); + inst->addIdOperand(debugLocalVariable); // debug local variable id + inst->addIdOperand(value); // value of local variable id + inst->addIdOperand(makeDebugExpression()); // expression id + addInstruction(std::unique_ptr(inst)); + + return inst->getResultId(); +} + Id Builder::makeAccelerationStructureType() { Instruction *type; @@ -642,6 +1240,10 @@ Id Builder::makeAccelerationStructureType() groupedTypes[OpTypeAccelerationStructureKHR].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) { + spv::Id debugType = makeCompositeDebugType({}, "accelerationStructure", NonSemanticShaderDebugInfo100Structure, true); + debugId[type->getResultId()] = debugType; + } } else { type = groupedTypes[OpTypeAccelerationStructureKHR].back(); } @@ -657,13 +1259,31 @@ Id Builder::makeRayQueryType() groupedTypes[OpTypeRayQueryKHR].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) { + spv::Id debugType = makeCompositeDebugType({}, "rayQuery", NonSemanticShaderDebugInfo100Structure, true); + debugId[type->getResultId()] = debugType; + } } else { type = groupedTypes[OpTypeRayQueryKHR].back(); } return type->getResultId(); } -#endif + +Id Builder::makeHitObjectNVType() +{ + Instruction *type; + if (groupedTypes[OpTypeHitObjectNV].size() == 0) { + type = new Instruction(getUniqueId(), NoType, OpTypeHitObjectNV); + groupedTypes[OpTypeHitObjectNV].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + } else { + type = groupedTypes[OpTypeHitObjectNV].back(); + } + + return type->getResultId(); +} Id Builder::getDerefTypeId(Id resultId) const { @@ -692,7 +1312,7 @@ Op Builder::getMostBasicTypeClass(Id typeId) const } } -int Builder::getNumTypeConstituents(Id typeId) const +unsigned int Builder::getNumTypeConstituents(Id typeId) const { Instruction* instr = module.getInstruction(typeId); @@ -713,6 +1333,7 @@ int Builder::getNumTypeConstituents(Id typeId) const } case OpTypeStruct: return instr->getNumOperands(); + case OpTypeCooperativeMatrixKHR: case OpTypeCooperativeMatrixNV: // has only one constituent when used with OpCompositeConstruct. return 1; @@ -762,6 +1383,7 @@ Id Builder::getContainedTypeId(Id typeId, int member) const case OpTypeMatrix: case OpTypeArray: case OpTypeRuntimeArray: + case OpTypeCooperativeMatrixKHR: case OpTypeCooperativeMatrixNV: return instr->getIdOperand(0); case OpTypePointer: @@ -832,7 +1454,7 @@ bool Builder::containsType(Id typeId, spv::Op typeOp, unsigned int width) const } // return true if the type is a pointer to PhysicalStorageBufferEXT or an -// array of such pointers. These require restrict/aliased decorations. +// contains such a pointer. These require restrict/aliased decorations. bool Builder::containsPhysicalStorageBufferOrArray(Id typeId) const { const Instruction& instr = *module.getInstruction(typeId); @@ -844,6 +1466,12 @@ bool Builder::containsPhysicalStorageBufferOrArray(Id typeId) const return getTypeStorageClass(typeId) == StorageClassPhysicalStorageBufferEXT; case OpTypeArray: return containsPhysicalStorageBufferOrArray(getContainedTypeId(typeId)); + case OpTypeStruct: + for (int m = 0; m < instr.getNumOperands(); ++m) { + if (containsPhysicalStorageBufferOrArray(instr.getIdOperand(m))) + return true; + } + return false; default: return false; } @@ -892,12 +1520,14 @@ bool Builder::isConstantOpCode(Op opcode) const case OpConstantFalse: case OpConstant: case OpConstantComposite: + case OpConstantCompositeReplicateEXT: case OpConstantSampler: case OpConstantNull: case OpSpecConstantTrue: case OpSpecConstantFalse: case OpSpecConstant: case OpSpecConstantComposite: + case OpSpecConstantCompositeReplicateEXT: case OpSpecConstantOp: return true; default: @@ -914,6 +1544,7 @@ bool Builder::isSpecConstantOpCode(Op opcode) const case OpSpecConstant: case OpSpecConstantComposite: case OpSpecConstantOp: + case OpSpecConstantCompositeReplicateEXT: return true; default: return false; @@ -1010,6 +1641,7 @@ Id Builder::makeInt64Constant(Id typeId, unsigned long long value, bool specCons } Instruction* c = new Instruction(getUniqueId(), typeId, opcode); + c->reserveOperands(2); c->addImmediateOperand(op1); c->addImmediateOperand(op2); constantsTypesGlobals.push_back(std::unique_ptr(c)); @@ -1046,10 +1678,6 @@ Id Builder::makeFloatConstant(float f, bool specConstant) Id Builder::makeDoubleConstant(double d, bool specConstant) { -#ifdef GLSLANG_WEB - assert(0); - return NoResult; -#else Op opcode = specConstant ? OpSpecConstant : OpConstant; Id typeId = makeFloatType(64); union { double db; unsigned long long ull; } u; @@ -1067,6 +1695,7 @@ Id Builder::makeDoubleConstant(double d, bool specConstant) } Instruction* c = new Instruction(getUniqueId(), typeId, opcode); + c->reserveOperands(2); c->addImmediateOperand(op1); c->addImmediateOperand(op2); constantsTypesGlobals.push_back(std::unique_ptr(c)); @@ -1074,15 +1703,10 @@ Id Builder::makeDoubleConstant(double d, bool specConstant) module.mapInstruction(c); return c->getResultId(); -#endif } Id Builder::makeFloat16Constant(float f16, bool specConstant) { -#ifdef GLSLANG_WEB - assert(0); - return NoResult; -#else Op opcode = specConstant ? OpSpecConstant : OpConstant; Id typeId = makeFloatType(16); @@ -1107,17 +1731,11 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant) module.mapInstruction(c); return c->getResultId(); -#endif } Id Builder::makeFpConstant(Id type, double d, bool specConstant) { -#ifdef GLSLANG_WEB - const int width = 32; - assert(width == getScalarTypeWidth(type)); -#else const int width = getScalarTypeWidth(type); -#endif assert(isFloatType(type)); @@ -1136,9 +1754,22 @@ Id Builder::makeFpConstant(Id type, double d, bool specConstant) return NoResult; } +Id Builder::importNonSemanticShaderDebugInfoInstructions() +{ + assert(emitNonSemanticShaderDebugInfo == true); + + if(nonSemanticShaderDebugInfo == 0) + { + this->addExtension(spv::E_SPV_KHR_non_semantic_info); + nonSemanticShaderDebugInfo = this->import("NonSemantic.Shader.DebugInfo.100"); + } + + return nonSemanticShaderDebugInfo; +} + Id Builder::findCompositeConstant(Op typeClass, Id typeId, const std::vector& comps) { - Instruction* constant = 0; + Instruction* constant = nullptr; bool found = false; for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) { constant = groupedConstants[typeClass][i]; @@ -1165,7 +1796,7 @@ Id Builder::findCompositeConstant(Op typeClass, Id typeId, const std::vector Id Builder::findStructConstant(Id typeId, const std::vector& comps) { - Instruction* constant = 0; + Instruction* constant = nullptr; bool found = false; for (int i = 0; i < (int)groupedStructConstants[typeId].size(); ++i) { constant = groupedStructConstants[typeId][i]; @@ -1190,14 +1821,32 @@ Id Builder::findStructConstant(Id typeId, const std::vector& comps) // Comments in header Id Builder::makeCompositeConstant(Id typeId, const std::vector& members, bool specConstant) { - Op opcode = specConstant ? OpSpecConstantComposite : OpConstantComposite; assert(typeId); Op typeClass = getTypeClass(typeId); + bool replicate = false; + size_t numMembers = members.size(); + if (useReplicatedComposites) { + // use replicate if all members are the same + replicate = numMembers > 0 && + std::equal(members.begin() + 1, members.end(), members.begin()); + + if (replicate) { + numMembers = 1; + addCapability(spv::CapabilityReplicatedCompositesEXT); + addExtension(spv::E_SPV_EXT_replicated_composites); + } + } + + Op opcode = replicate ? + (specConstant ? OpSpecConstantCompositeReplicateEXT : OpConstantCompositeReplicateEXT) : + (specConstant ? OpSpecConstantComposite : OpConstantComposite); + switch (typeClass) { case OpTypeVector: case OpTypeArray: case OpTypeMatrix: + case OpTypeCooperativeMatrixKHR: case OpTypeCooperativeMatrixNV: if (! specConstant) { Id existing = findCompositeConstant(typeClass, typeId, members); @@ -1218,7 +1867,8 @@ Id Builder::makeCompositeConstant(Id typeId, const std::vector& members, boo } Instruction* c = new Instruction(getUniqueId(), typeId, opcode); - for (int op = 0; op < (int)members.size(); ++op) + c->reserveOperands(members.size()); + for (size_t op = 0; op < numMembers; ++op) c->addIdOperand(members[op]); constantsTypesGlobals.push_back(std::unique_ptr(c)); if (typeClass == OpTypeStruct) @@ -1233,6 +1883,7 @@ Id Builder::makeCompositeConstant(Id typeId, const std::vector& members, boo Instruction* Builder::addEntryPoint(ExecutionModel model, Function* function, const char* name) { Instruction* entryPoint = new Instruction(OpEntryPoint); + entryPoint->reserveOperands(3); entryPoint->addImmediateOperand(model); entryPoint->addIdOperand(function->getId()); entryPoint->addStringOperand(name); @@ -1245,7 +1896,12 @@ Instruction* Builder::addEntryPoint(ExecutionModel model, Function* function, co // Currently relying on the fact that all 'value' of interest are small non-negative values. void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, int value1, int value2, int value3) { + // entryPoint can be null if we are in compile-only mode + if (!entryPoint) + return; + Instruction* instr = new Instruction(OpExecutionMode); + instr->reserveOperands(3); instr->addIdOperand(entryPoint->getId()); instr->addImmediateOperand(mode); if (value1 >= 0) @@ -1260,7 +1916,12 @@ void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, int val void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, const std::vector& literals) { + // entryPoint can be null if we are in compile-only mode + if (!entryPoint) + return; + Instruction* instr = new Instruction(OpExecutionMode); + instr->reserveOperands(literals.size() + 2); instr->addIdOperand(entryPoint->getId()); instr->addImmediateOperand(mode); for (auto literal : literals) @@ -1271,7 +1932,12 @@ void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, const s void Builder::addExecutionModeId(Function* entryPoint, ExecutionMode mode, const std::vector& operandIds) { + // entryPoint can be null if we are in compile-only mode + if (!entryPoint) + return; + Instruction* instr = new Instruction(OpExecutionModeId); + instr->reserveOperands(operandIds.size() + 2); instr->addIdOperand(entryPoint->getId()); instr->addImmediateOperand(mode); for (auto operandId : operandIds) @@ -1283,6 +1949,7 @@ void Builder::addExecutionModeId(Function* entryPoint, ExecutionMode mode, const void Builder::addName(Id id, const char* string) { Instruction* name = new Instruction(OpName); + name->reserveOperands(2); name->addIdOperand(id); name->addStringOperand(string); @@ -1292,6 +1959,7 @@ void Builder::addName(Id id, const char* string) void Builder::addMemberName(Id id, int memberNumber, const char* string) { Instruction* name = new Instruction(OpMemberName); + name->reserveOperands(3); name->addIdOperand(id); name->addImmediateOperand(memberNumber); name->addStringOperand(string); @@ -1305,12 +1973,13 @@ void Builder::addDecoration(Id id, Decoration decoration, int num) return; Instruction* dec = new Instruction(OpDecorate); + dec->reserveOperands(2); dec->addIdOperand(id); dec->addImmediateOperand(decoration); if (num >= 0) dec->addImmediateOperand(num); - decorations.push_back(std::unique_ptr(dec)); + decorations.insert(std::unique_ptr(dec)); } void Builder::addDecoration(Id id, Decoration decoration, const char* s) @@ -1319,11 +1988,12 @@ void Builder::addDecoration(Id id, Decoration decoration, const char* s) return; Instruction* dec = new Instruction(OpDecorateString); + dec->reserveOperands(3); dec->addIdOperand(id); dec->addImmediateOperand(decoration); dec->addStringOperand(s); - decorations.push_back(std::unique_ptr(dec)); + decorations.insert(std::unique_ptr(dec)); } void Builder::addDecoration(Id id, Decoration decoration, const std::vector& literals) @@ -1332,12 +2002,13 @@ void Builder::addDecoration(Id id, Decoration decoration, const std::vectorreserveOperands(literals.size() + 2); dec->addIdOperand(id); dec->addImmediateOperand(decoration); for (auto literal : literals) dec->addImmediateOperand(literal); - decorations.push_back(std::unique_ptr(dec)); + decorations.insert(std::unique_ptr(dec)); } void Builder::addDecoration(Id id, Decoration decoration, const std::vector& strings) @@ -1346,12 +2017,24 @@ void Builder::addDecoration(Id id, Decoration decoration, const std::vectorreserveOperands(strings.size() + 2); dec->addIdOperand(id); dec->addImmediateOperand(decoration); for (auto string : strings) dec->addStringOperand(string); - decorations.push_back(std::unique_ptr(dec)); + decorations.insert(std::unique_ptr(dec)); +} + +void Builder::addLinkageDecoration(Id id, const char* name, spv::LinkageType linkType) { + Instruction* dec = new Instruction(OpDecorate); + dec->reserveOperands(4); + dec->addIdOperand(id); + dec->addImmediateOperand(spv::DecorationLinkageAttributes); + dec->addStringOperand(name); + dec->addImmediateOperand(linkType); + + decorations.insert(std::unique_ptr(dec)); } void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration) @@ -1360,11 +2043,12 @@ void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration) return; Instruction* dec = new Instruction(OpDecorateId); + dec->reserveOperands(3); dec->addIdOperand(id); dec->addImmediateOperand(decoration); dec->addIdOperand(idDecoration); - decorations.push_back(std::unique_ptr(dec)); + decorations.insert(std::unique_ptr(dec)); } void Builder::addDecorationId(Id id, Decoration decoration, const std::vector& operandIds) @@ -1373,13 +2057,14 @@ void Builder::addDecorationId(Id id, Decoration decoration, const std::vectorreserveOperands(operandIds.size() + 2); dec->addIdOperand(id); dec->addImmediateOperand(decoration); for (auto operandId : operandIds) dec->addIdOperand(operandId); - decorations.push_back(std::unique_ptr(dec)); + decorations.insert(std::unique_ptr(dec)); } void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, int num) @@ -1388,13 +2073,14 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat return; Instruction* dec = new Instruction(OpMemberDecorate); + dec->reserveOperands(3); dec->addIdOperand(id); dec->addImmediateOperand(member); dec->addImmediateOperand(decoration); if (num >= 0) dec->addImmediateOperand(num); - decorations.push_back(std::unique_ptr(dec)); + decorations.insert(std::unique_ptr(dec)); } void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const char *s) @@ -1403,12 +2089,13 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat return; Instruction* dec = new Instruction(OpMemberDecorateStringGOOGLE); + dec->reserveOperands(4); dec->addIdOperand(id); dec->addImmediateOperand(member); dec->addImmediateOperand(decoration); dec->addStringOperand(s); - decorations.push_back(std::unique_ptr(dec)); + decorations.insert(std::unique_ptr(dec)); } void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const std::vector& literals) @@ -1417,13 +2104,14 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat return; Instruction* dec = new Instruction(OpMemberDecorate); + dec->reserveOperands(literals.size() + 3); dec->addIdOperand(id); dec->addImmediateOperand(member); dec->addImmediateOperand(decoration); for (auto literal : literals) dec->addImmediateOperand(literal); - decorations.push_back(std::unique_ptr(dec)); + decorations.insert(std::unique_ptr(dec)); } void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const std::vector& strings) @@ -1432,13 +2120,70 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat return; Instruction* dec = new Instruction(OpMemberDecorateString); + dec->reserveOperands(strings.size() + 3); dec->addIdOperand(id); dec->addImmediateOperand(member); dec->addImmediateOperand(decoration); for (auto string : strings) dec->addStringOperand(string); - decorations.push_back(std::unique_ptr(dec)); + decorations.insert(std::unique_ptr(dec)); +} + +void Builder::addInstruction(std::unique_ptr inst) { + // Phis must appear first in their block, don't insert line tracking instructions + // in front of them, just add the OpPhi and return. + if (inst->getOpCode() == OpPhi) { + buildPoint->addInstruction(std::move(inst)); + return; + } + // Optionally insert OpDebugScope + if (emitNonSemanticShaderDebugInfo && dirtyScopeTracker) { + if (buildPoint->updateDebugScope(currentDebugScopeId.top())) { + auto scopeInst = std::make_unique(getUniqueId(), makeVoidType(), OpExtInst); + scopeInst->reserveOperands(3); + scopeInst->addIdOperand(nonSemanticShaderDebugInfo); + scopeInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugScope); + scopeInst->addIdOperand(currentDebugScopeId.top()); + buildPoint->addInstruction(std::move(scopeInst)); + } + + dirtyScopeTracker = false; + } + + // Insert OpLine/OpDebugLine if the debug source location has changed + if (trackDebugInfo && dirtyLineTracker) { + if (buildPoint->updateDebugSourceLocation(currentLine, 0, currentFileId)) { + if (emitSpirvDebugInfo) { + auto lineInst = std::make_unique(OpLine); + lineInst->reserveOperands(3); + lineInst->addIdOperand(currentFileId); + lineInst->addImmediateOperand(currentLine); + lineInst->addImmediateOperand(0); + buildPoint->addInstruction(std::move(lineInst)); + } + if (emitNonSemanticShaderDebugInfo) { + auto lineInst = std::make_unique(getUniqueId(), makeVoidType(), OpExtInst); + lineInst->reserveOperands(7); + lineInst->addIdOperand(nonSemanticShaderDebugInfo); + lineInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLine); + lineInst->addIdOperand(makeDebugSource(currentFileId)); + lineInst->addIdOperand(makeUintConstant(currentLine)); + lineInst->addIdOperand(makeUintConstant(currentLine)); + lineInst->addIdOperand(makeUintConstant(0)); + lineInst->addIdOperand(makeUintConstant(0)); + buildPoint->addInstruction(std::move(lineInst)); + } + } + + dirtyLineTracker = false; + } + + buildPoint->addInstruction(std::move(inst)); +} + +void Builder::addInstructionNoDebugInfo(std::unique_ptr inst) { + buildPoint->addInstruction(std::move(inst)); } // Comments in header @@ -1446,24 +2191,31 @@ Function* Builder::makeEntryPoint(const char* entryPoint) { assert(! entryPointFunction); - Block* entry; - std::vector params; - std::vector> decorations; + auto const returnType = makeVoidType(); + + restoreNonSemanticShaderDebugInfo = emitNonSemanticShaderDebugInfo; + if(sourceLang == spv::SourceLanguageHLSL) { + emitNonSemanticShaderDebugInfo = false; + } + + Block* entry = nullptr; + entryPointFunction = makeFunctionEntry(NoPrecision, returnType, entryPoint, LinkageTypeMax, {}, {}, &entry); - entryPointFunction = makeFunctionEntry(NoPrecision, makeVoidType(), entryPoint, params, decorations, &entry); + emitNonSemanticShaderDebugInfo = restoreNonSemanticShaderDebugInfo; return entryPointFunction; } // Comments in header -Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const char* name, +Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const char* name, LinkageType linkType, const std::vector& paramTypes, - const std::vector>& decorations, Block **entry) + const std::vector>& decorations, Block** entry) { // Make the function and initial instructions in it Id typeId = makeFunctionType(returnType, paramTypes); Id firstParamId = paramTypes.size() == 0 ? 0 : getUniqueIds((int)paramTypes.size()); - Function* function = new Function(getUniqueId(), returnType, typeId, firstParamId, module); + Id funcId = getUniqueId(); + Function* function = new Function(funcId, returnType, typeId, firstParamId, linkType, name, module); // Set up the precisions setPrecision(function->getId(), precision); @@ -1475,13 +2227,17 @@ Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const } } - // CFG - if (entry) { - *entry = new Block(getUniqueId(), *function); - function->addBlock(*entry); - setBuildPoint(*entry); + // reset last debug scope + if (emitNonSemanticShaderDebugInfo) { + dirtyScopeTracker = true; } + // CFG + assert(entry != nullptr); + *entry = new Block(getUniqueId(), *function); + function->addBlock(*entry); + setBuildPoint(*entry); + if (name) addName(function->getId(), name); @@ -1490,20 +2246,175 @@ Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const return function; } +void Builder::setupFunctionDebugInfo(Function* function, const char* name, const std::vector& paramTypes, + const std::vector& paramNames) +{ + + if (!emitNonSemanticShaderDebugInfo) + return; + + Id nameId = getStringId(unmangleFunctionName(name)); + Id funcTypeId = function->getFuncTypeId(); + assert(debugId[funcTypeId] != 0); + Id funcId = function->getId(); + + assert(funcId != 0); + + // Make the debug function instruction + Id debugFuncId = makeDebugFunction(function, nameId, funcTypeId); + debugId[funcId] = debugFuncId; + currentDebugScopeId.push(debugFuncId); + + // DebugScope and DebugLine for parameter DebugDeclares + assert(paramTypes.size() == paramNames.size()); + if ((int)paramTypes.size() > 0) { + Id firstParamId = function->getParamId(0); + + for (size_t p = 0; p < paramTypes.size(); ++p) { + bool passByRef = false; + Id paramTypeId = paramTypes[p]; + + // For pointer-typed parameters, they are actually passed by reference and we need unwrap the pointer to get the actual parameter type. + if (isPointerType(paramTypeId) || isArrayType(paramTypeId)) { + passByRef = true; + paramTypeId = getContainedTypeId(paramTypeId); + } + + auto const& paramName = paramNames[p]; + auto const debugLocalVariableId = createDebugLocalVariable(debugId[paramTypeId], paramName, p + 1); + auto const paramId = static_cast(firstParamId + p); + debugId[paramId] = debugLocalVariableId; + + if (passByRef) { + makeDebugDeclare(debugLocalVariableId, paramId); + } else { + makeDebugValue(debugLocalVariableId, paramId); + } + } + } + + // Clear debug scope stack + if (emitNonSemanticShaderDebugInfo) + currentDebugScopeId.pop(); +} + +Id Builder::makeDebugFunction([[maybe_unused]] Function* function, Id nameId, Id funcTypeId) +{ + assert(function != nullptr); + assert(nameId != 0); + assert(funcTypeId != 0); + assert(debugId[funcTypeId] != 0); + + Id funcId = getUniqueId(); + auto type = new Instruction(funcId, makeVoidType(), OpExtInst); + type->reserveOperands(11); + type->addIdOperand(nonSemanticShaderDebugInfo); + type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugFunction); + type->addIdOperand(nameId); + type->addIdOperand(debugId[funcTypeId]); + type->addIdOperand(makeDebugSource(currentFileId)); // TODO: This points to file of definition instead of declaration + type->addIdOperand(makeUintConstant(currentLine)); // TODO: This points to line of definition instead of declaration + type->addIdOperand(makeUintConstant(0)); // column + type->addIdOperand(makeDebugCompilationUnit()); // scope + type->addIdOperand(nameId); // linkage name + type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic)); + type->addIdOperand(makeUintConstant(currentLine)); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + return funcId; +} + +Id Builder::makeDebugLexicalBlock(uint32_t line) { + assert(!currentDebugScopeId.empty()); + + Id lexId = getUniqueId(); + auto lex = new Instruction(lexId, makeVoidType(), OpExtInst); + lex->reserveOperands(6); + lex->addIdOperand(nonSemanticShaderDebugInfo); + lex->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLexicalBlock); + lex->addIdOperand(makeDebugSource(currentFileId)); + lex->addIdOperand(makeUintConstant(line)); + lex->addIdOperand(makeUintConstant(0)); // column + lex->addIdOperand(currentDebugScopeId.top()); // scope + constantsTypesGlobals.push_back(std::unique_ptr(lex)); + module.mapInstruction(lex); + return lexId; +} + +std::string Builder::unmangleFunctionName(std::string const& name) const +{ + assert(name.length() > 0); + + if(name.rfind('(') != std::string::npos) { + return name.substr(0, name.rfind('(')); + } else { + return name; + } +} + // Comments in header void Builder::makeReturn(bool implicit, Id retVal) { if (retVal) { Instruction* inst = new Instruction(NoResult, NoType, OpReturnValue); inst->addIdOperand(retVal); - buildPoint->addInstruction(std::unique_ptr(inst)); + addInstruction(std::unique_ptr(inst)); } else - buildPoint->addInstruction(std::unique_ptr(new Instruction(NoResult, NoType, OpReturn))); + addInstruction(std::unique_ptr(new Instruction(NoResult, NoType, OpReturn))); if (! implicit) createAndSetNoPredecessorBlock("post-return"); } +// Comments in header +void Builder::enterLexicalBlock(uint32_t line) +{ + // Generate new lexical scope debug instruction + Id lexId = makeDebugLexicalBlock(line); + currentDebugScopeId.push(lexId); + dirtyScopeTracker = true; +} + +// Comments in header +void Builder::leaveLexicalBlock() +{ + // Pop current scope from stack and clear current scope + currentDebugScopeId.pop(); + dirtyScopeTracker = true; +} + +// Comments in header +void Builder::enterFunction(Function const* function) +{ + // Save and disable debugInfo for HLSL entry point function. It is a wrapper + // function with no user code in it. + restoreNonSemanticShaderDebugInfo = emitNonSemanticShaderDebugInfo; + if (sourceLang == spv::SourceLanguageHLSL && function == entryPointFunction) { + emitNonSemanticShaderDebugInfo = false; + } + + if (emitNonSemanticShaderDebugInfo) { + // Initialize scope state + Id funcId = function->getFuncId(); + currentDebugScopeId.push(debugId[funcId]); + // Create DebugFunctionDefinition + spv::Id resultId = getUniqueId(); + Instruction* defInst = new Instruction(resultId, makeVoidType(), OpExtInst); + defInst->reserveOperands(4); + defInst->addIdOperand(nonSemanticShaderDebugInfo); + defInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugFunctionDefinition); + defInst->addIdOperand(debugId[funcId]); + defInst->addIdOperand(funcId); + addInstruction(std::unique_ptr(defInst)); + } + + if (auto linkType = function->getLinkType(); linkType != LinkageTypeMax) { + Id funcId = function->getFuncId(); + addCapability(CapabilityLinkage); + addLinkageDecoration(funcId, function->getExportName(), linkType); + } +} + // Comments in header void Builder::leaveFunction() { @@ -1519,17 +2430,34 @@ void Builder::leaveFunction() makeReturn(true, createUndefined(function.getReturnType())); } } + + // Clear function scope from debug scope stack + if (emitNonSemanticShaderDebugInfo) + currentDebugScopeId.pop(); + + emitNonSemanticShaderDebugInfo = restoreNonSemanticShaderDebugInfo; } // Comments in header void Builder::makeStatementTerminator(spv::Op opcode, const char *name) { - buildPoint->addInstruction(std::unique_ptr(new Instruction(opcode))); + addInstruction(std::unique_ptr(new Instruction(opcode))); createAndSetNoPredecessorBlock(name); } // Comments in header -Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name, Id initializer) +void Builder::makeStatementTerminator(spv::Op opcode, const std::vector& operands, const char* name) +{ + // It's assumed that the terminator instruction is always of void return type + // However in future if there is a need for non void return type, new helper + // methods can be created. + createNoResultOp(opcode, operands); + createAndSetNoPredecessorBlock(name); +} + +// Comments in header +Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name, Id initializer, + bool const compilerGenerated) { Id pointerType = makePointer(storageClass, type); Instruction* inst = new Instruction(getUniqueId(), pointerType, OpVariable); @@ -1541,11 +2469,26 @@ Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id t case StorageClassFunction: // Validation rules require the declaration in the entry block buildPoint->getParent().addLocalVariable(std::unique_ptr(inst)); + + if (emitNonSemanticShaderDebugInfo && !compilerGenerated) + { + auto const debugLocalVariableId = createDebugLocalVariable(debugId[type], name); + debugId[inst->getResultId()] = debugLocalVariableId; + + makeDebugDeclare(debugLocalVariableId, inst->getResultId()); + } + break; default: constantsTypesGlobals.push_back(std::unique_ptr(inst)); module.mapInstruction(inst); + + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = createDebugGlobalVariable(debugId[type], name, inst->getResultId()); + debugId[inst->getResultId()] = debugResultId; + } break; } @@ -1560,7 +2503,7 @@ Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id t Id Builder::createUndefined(Id type) { Instruction* inst = new Instruction(getUniqueId(), type, OpUndef); - buildPoint->addInstruction(std::unique_ptr(inst)); + addInstruction(std::unique_ptr(inst)); return inst->getResultId(); } @@ -1575,7 +2518,7 @@ spv::MemoryAccessMask Builder::sanitizeMemoryAccessForStorageClass(spv::MemoryAc case spv::StorageClassPhysicalStorageBufferEXT: break; default: - memoryAccess = spv::MemoryAccessMask(memoryAccess & + memoryAccess = spv::MemoryAccessMask(memoryAccess & ~(spv::MemoryAccessMakePointerAvailableKHRMask | spv::MemoryAccessMakePointerVisibleKHRMask | spv::MemoryAccessNonPrivatePointerKHRMask)); @@ -1589,6 +2532,7 @@ void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAcce unsigned int alignment) { Instruction* store = new Instruction(OpStore); + store->reserveOperands(2); store->addIdOperand(lValue); store->addIdOperand(rValue); @@ -1604,7 +2548,7 @@ void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAcce } } - buildPoint->addInstruction(std::unique_ptr(store)); + addInstruction(std::unique_ptr(store)); } // Comments in header @@ -1626,7 +2570,7 @@ Id Builder::createLoad(Id lValue, spv::Decoration precision, spv::MemoryAccessMa } } - buildPoint->addInstruction(std::unique_ptr(load)); + addInstruction(std::unique_ptr(load)); setPrecision(load->getResultId(), precision); return load->getResultId(); @@ -1641,10 +2585,11 @@ Id Builder::createAccessChain(StorageClass storageClass, Id base, const std::vec // Make the instruction Instruction* chain = new Instruction(getUniqueId(), typeId, OpAccessChain); + chain->reserveOperands(offsets.size() + 1); chain->addIdOperand(base); for (int i = 0; i < (int)offsets.size(); ++i) chain->addIdOperand(offsets[i]); - buildPoint->addInstruction(std::unique_ptr(chain)); + addInstruction(std::unique_ptr(chain)); return chain->getResultId(); } @@ -1653,14 +2598,32 @@ Id Builder::createArrayLength(Id base, unsigned int member) { spv::Id intType = makeUintType(32); Instruction* length = new Instruction(getUniqueId(), intType, OpArrayLength); + length->reserveOperands(2); length->addIdOperand(base); length->addImmediateOperand(member); - buildPoint->addInstruction(std::unique_ptr(length)); + addInstruction(std::unique_ptr(length)); return length->getResultId(); } -Id Builder::createCooperativeMatrixLength(Id type) +Id Builder::createCooperativeMatrixLengthKHR(Id type) +{ + spv::Id intType = makeUintType(32); + + // Generate code for spec constants if in spec constant operation + // generation mode. + if (generatingOpCodeForSpecConst) { + return createSpecConstantOp(OpCooperativeMatrixLengthKHR, intType, std::vector(1, type), std::vector()); + } + + Instruction* length = new Instruction(getUniqueId(), intType, OpCooperativeMatrixLengthKHR); + length->addIdOperand(type); + addInstruction(std::unique_ptr(length)); + + return length->getResultId(); +} + +Id Builder::createCooperativeMatrixLengthNV(Id type) { spv::Id intType = makeUintType(32); @@ -1672,7 +2635,7 @@ Id Builder::createCooperativeMatrixLength(Id type) Instruction* length = new Instruction(getUniqueId(), intType, OpCooperativeMatrixLengthNV); length->addIdOperand(type); - buildPoint->addInstruction(std::unique_ptr(length)); + addInstruction(std::unique_ptr(length)); return length->getResultId(); } @@ -1686,9 +2649,10 @@ Id Builder::createCompositeExtract(Id composite, Id typeId, unsigned index) std::vector(1, index)); } Instruction* extract = new Instruction(getUniqueId(), typeId, OpCompositeExtract); + extract->reserveOperands(2); extract->addIdOperand(composite); extract->addImmediateOperand(index); - buildPoint->addInstruction(std::unique_ptr(extract)); + addInstruction(std::unique_ptr(extract)); return extract->getResultId(); } @@ -1701,10 +2665,11 @@ Id Builder::createCompositeExtract(Id composite, Id typeId, const std::vector(1, composite), indexes); } Instruction* extract = new Instruction(getUniqueId(), typeId, OpCompositeExtract); + extract->reserveOperands(indexes.size() + 1); extract->addIdOperand(composite); for (int i = 0; i < (int)indexes.size(); ++i) extract->addImmediateOperand(indexes[i]); - buildPoint->addInstruction(std::unique_ptr(extract)); + addInstruction(std::unique_ptr(extract)); return extract->getResultId(); } @@ -1712,10 +2677,11 @@ Id Builder::createCompositeExtract(Id composite, Id typeId, const std::vectorreserveOperands(3); insert->addIdOperand(object); insert->addIdOperand(composite); insert->addImmediateOperand(index); - buildPoint->addInstruction(std::unique_ptr(insert)); + addInstruction(std::unique_ptr(insert)); return insert->getResultId(); } @@ -1723,11 +2689,12 @@ Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, unsigned i Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, const std::vector& indexes) { Instruction* insert = new Instruction(getUniqueId(), typeId, OpCompositeInsert); + insert->reserveOperands(indexes.size() + 2); insert->addIdOperand(object); insert->addIdOperand(composite); for (int i = 0; i < (int)indexes.size(); ++i) insert->addImmediateOperand(indexes[i]); - buildPoint->addInstruction(std::unique_ptr(insert)); + addInstruction(std::unique_ptr(insert)); return insert->getResultId(); } @@ -1735,9 +2702,10 @@ Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, const std: Id Builder::createVectorExtractDynamic(Id vector, Id typeId, Id componentIndex) { Instruction* extract = new Instruction(getUniqueId(), typeId, OpVectorExtractDynamic); + extract->reserveOperands(2); extract->addIdOperand(vector); extract->addIdOperand(componentIndex); - buildPoint->addInstruction(std::unique_ptr(extract)); + addInstruction(std::unique_ptr(extract)); return extract->getResultId(); } @@ -1745,10 +2713,11 @@ Id Builder::createVectorExtractDynamic(Id vector, Id typeId, Id componentIndex) Id Builder::createVectorInsertDynamic(Id vector, Id typeId, Id component, Id componentIndex) { Instruction* insert = new Instruction(getUniqueId(), typeId, OpVectorInsertDynamic); + insert->reserveOperands(3); insert->addIdOperand(vector); insert->addIdOperand(component); insert->addIdOperand(componentIndex); - buildPoint->addInstruction(std::unique_ptr(insert)); + addInstruction(std::unique_ptr(insert)); return insert->getResultId(); } @@ -1757,7 +2726,7 @@ Id Builder::createVectorInsertDynamic(Id vector, Id typeId, Id component, Id com void Builder::createNoResultOp(Op opCode) { Instruction* op = new Instruction(opCode); - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); } // An opcode that has one id operand, no result id, and no type @@ -1765,47 +2734,51 @@ void Builder::createNoResultOp(Op opCode, Id operand) { Instruction* op = new Instruction(opCode); op->addIdOperand(operand); - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); } // An opcode that has one or more operands, no result id, and no type void Builder::createNoResultOp(Op opCode, const std::vector& operands) { Instruction* op = new Instruction(opCode); - for (auto it = operands.cbegin(); it != operands.cend(); ++it) { - op->addIdOperand(*it); + op->reserveOperands(operands.size()); + for (auto id : operands) { + op->addIdOperand(id); } - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); } // An opcode that has multiple operands, no result id, and no type void Builder::createNoResultOp(Op opCode, const std::vector& operands) { Instruction* op = new Instruction(opCode); + op->reserveOperands(operands.size()); for (auto it = operands.cbegin(); it != operands.cend(); ++it) { if (it->isId) op->addIdOperand(it->word); else op->addImmediateOperand(it->word); } - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); } void Builder::createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask semantics) { Instruction* op = new Instruction(OpControlBarrier); + op->reserveOperands(3); op->addIdOperand(makeUintConstant(execution)); op->addIdOperand(makeUintConstant(memory)); op->addIdOperand(makeUintConstant(semantics)); - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); } void Builder::createMemoryBarrier(unsigned executionScope, unsigned memorySemantics) { Instruction* op = new Instruction(OpMemoryBarrier); + op->reserveOperands(2); op->addIdOperand(makeUintConstant(executionScope)); op->addIdOperand(makeUintConstant(memorySemantics)); - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); } // An opcode that has one operands, a result id, and a type @@ -1818,7 +2791,7 @@ Id Builder::createUnaryOp(Op opCode, Id typeId, Id operand) } Instruction* op = new Instruction(getUniqueId(), typeId, opCode); op->addIdOperand(operand); - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); return op->getResultId(); } @@ -1833,9 +2806,10 @@ Id Builder::createBinOp(Op opCode, Id typeId, Id left, Id right) return createSpecConstantOp(opCode, typeId, operands, std::vector()); } Instruction* op = new Instruction(getUniqueId(), typeId, opCode); + op->reserveOperands(2); op->addIdOperand(left); op->addIdOperand(right); - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); return op->getResultId(); } @@ -1853,10 +2827,11 @@ Id Builder::createTriOp(Op opCode, Id typeId, Id op1, Id op2, Id op3) opCode, typeId, operands, std::vector()); } Instruction* op = new Instruction(getUniqueId(), typeId, opCode); + op->reserveOperands(3); op->addIdOperand(op1); op->addIdOperand(op2); op->addIdOperand(op3); - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); return op->getResultId(); } @@ -1864,9 +2839,10 @@ Id Builder::createTriOp(Op opCode, Id typeId, Id op1, Id op2, Id op3) Id Builder::createOp(Op opCode, Id typeId, const std::vector& operands) { Instruction* op = new Instruction(getUniqueId(), typeId, opCode); - for (auto it = operands.cbegin(); it != operands.cend(); ++it) - op->addIdOperand(*it); - buildPoint->addInstruction(std::unique_ptr(op)); + op->reserveOperands(operands.size()); + for (auto id : operands) + op->addIdOperand(id); + addInstruction(std::unique_ptr(op)); return op->getResultId(); } @@ -1874,13 +2850,14 @@ Id Builder::createOp(Op opCode, Id typeId, const std::vector& operands) Id Builder::createOp(Op opCode, Id typeId, const std::vector& operands) { Instruction* op = new Instruction(getUniqueId(), typeId, opCode); + op->reserveOperands(operands.size()); for (auto it = operands.cbegin(); it != operands.cend(); ++it) { if (it->isId) op->addIdOperand(it->word); else op->addImmediateOperand(it->word); } - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); return op->getResultId(); } @@ -1889,6 +2866,7 @@ Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector& op const std::vector& literals) { Instruction* op = new Instruction(getUniqueId(), typeId, OpSpecConstantOp); + op->reserveOperands(operands.size() + literals.size() + 1); op->addImmediateOperand((unsigned) opCode); for (auto it = operands.cbegin(); it != operands.cend(); ++it) op->addIdOperand(*it); @@ -1897,16 +2875,25 @@ Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector& op module.mapInstruction(op); constantsTypesGlobals.push_back(std::unique_ptr(op)); + // OpSpecConstantOp's using 8 or 16 bit types require the associated capability + if (containsType(typeId, OpTypeInt, 8)) + addCapability(CapabilityInt8); + if (containsType(typeId, OpTypeInt, 16)) + addCapability(CapabilityInt16); + if (containsType(typeId, OpTypeFloat, 16)) + addCapability(CapabilityFloat16); + return op->getResultId(); } Id Builder::createFunctionCall(spv::Function* function, const std::vector& args) { Instruction* op = new Instruction(getUniqueId(), function->getReturnType(), OpFunctionCall); + op->reserveOperands(args.size() + 1); op->addIdOperand(function->getId()); for (int a = 0; a < (int)args.size(); ++a) op->addIdOperand(args[a]); - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); return op->getResultId(); } @@ -1924,11 +2911,12 @@ Id Builder::createRvalueSwizzle(Decoration precision, Id typeId, Id source, cons } Instruction* swizzle = new Instruction(getUniqueId(), typeId, OpVectorShuffle); assert(isVector(source)); + swizzle->reserveOperands(channels.size() + 2); swizzle->addIdOperand(source); swizzle->addIdOperand(source); for (int i = 0; i < (int)channels.size(); ++i) swizzle->addImmediateOperand(channels[i]); - buildPoint->addInstruction(std::unique_ptr(swizzle)); + addInstruction(std::unique_ptr(swizzle)); return setPrecision(swizzle->getResultId(), precision); } @@ -1942,9 +2930,10 @@ Id Builder::createLvalueSwizzle(Id typeId, Id target, Id source, const std::vect Instruction* swizzle = new Instruction(getUniqueId(), typeId, OpVectorShuffle); assert(isVector(target)); + swizzle->reserveOperands(2); swizzle->addIdOperand(target); - assert(getNumComponents(source) == (int)channels.size()); + assert(getNumComponents(source) == channels.size()); assert(isVector(source)); swizzle->addIdOperand(source); @@ -1959,9 +2948,10 @@ Id Builder::createLvalueSwizzle(Id typeId, Id target, Id source, const std::vect components[channels[i]] = numTargetComponents + i; // finish the instruction with these components selectors + swizzle->reserveOperands(numTargetComponents); for (int i = 0; i < numTargetComponents; ++i) swizzle->addImmediateOperand(components[i]); - buildPoint->addInstruction(std::unique_ptr(swizzle)); + addInstruction(std::unique_ptr(swizzle)); return swizzle->getResultId(); } @@ -2003,10 +2993,21 @@ Id Builder::smearScalar(Decoration precision, Id scalar, Id vectorType) auto result_id = makeCompositeConstant(vectorType, members, isSpecConstant(scalar)); smear = module.getInstruction(result_id); } else { - smear = new Instruction(getUniqueId(), vectorType, OpCompositeConstruct); + bool replicate = useReplicatedComposites && (numComponents > 0); + + if (replicate) { + numComponents = 1; + addCapability(spv::CapabilityReplicatedCompositesEXT); + addExtension(spv::E_SPV_EXT_replicated_composites); + } + + Op opcode = replicate ? OpCompositeConstructReplicateEXT : OpCompositeConstruct; + + smear = new Instruction(getUniqueId(), vectorType, opcode); + smear->reserveOperands(numComponents); for (int c = 0; c < numComponents; ++c) smear->addIdOperand(scalar); - buildPoint->addInstruction(std::unique_ptr(smear)); + addInstruction(std::unique_ptr(smear)); } return setPrecision(smear->getResultId(), precision); @@ -2016,12 +3017,13 @@ Id Builder::smearScalar(Decoration precision, Id scalar, Id vectorType) Id Builder::createBuiltinCall(Id resultType, Id builtins, int entryPoint, const std::vector& args) { Instruction* inst = new Instruction(getUniqueId(), resultType, OpExtInst); + inst->reserveOperands(args.size() + 2); inst->addIdOperand(builtins); inst->addImmediateOperand(entryPoint); for (int arg = 0; arg < (int)args.size(); ++arg) inst->addIdOperand(args[arg]); - buildPoint->addInstruction(std::unique_ptr(inst)); + addInstruction(std::unique_ptr(inst)); return inst->getResultId(); } @@ -2031,52 +3033,47 @@ Id Builder::createBuiltinCall(Id resultType, Id builtins, int entryPoint, const Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, bool fetch, bool proj, bool gather, bool noImplicitLod, const TextureParameters& parameters, ImageOperandsMask signExtensionMask) { - static const int maxTextureArgs = 10; - Id texArgs[maxTextureArgs] = {}; + std::vector texArgs; // // Set up the fixed arguments // - int numArgs = 0; bool explicitLod = false; - texArgs[numArgs++] = parameters.sampler; - texArgs[numArgs++] = parameters.coords; + texArgs.push_back(parameters.sampler); + texArgs.push_back(parameters.coords); if (parameters.Dref != NoResult) - texArgs[numArgs++] = parameters.Dref; + texArgs.push_back(parameters.Dref); if (parameters.component != NoResult) - texArgs[numArgs++] = parameters.component; + texArgs.push_back(parameters.component); -#ifndef GLSLANG_WEB if (parameters.granularity != NoResult) - texArgs[numArgs++] = parameters.granularity; + texArgs.push_back(parameters.granularity); if (parameters.coarse != NoResult) - texArgs[numArgs++] = parameters.coarse; -#endif + texArgs.push_back(parameters.coarse); // // Set up the optional arguments // - int optArgNum = numArgs; // track which operand, if it exists, is the mask of optional arguments - ++numArgs; // speculatively make room for the mask operand + size_t optArgNum = texArgs.size(); // the position of the mask for the optional arguments, if any. ImageOperandsMask mask = ImageOperandsMaskNone; // the mask operand if (parameters.bias) { mask = (ImageOperandsMask)(mask | ImageOperandsBiasMask); - texArgs[numArgs++] = parameters.bias; + texArgs.push_back(parameters.bias); } if (parameters.lod) { mask = (ImageOperandsMask)(mask | ImageOperandsLodMask); - texArgs[numArgs++] = parameters.lod; + texArgs.push_back(parameters.lod); explicitLod = true; } else if (parameters.gradX) { mask = (ImageOperandsMask)(mask | ImageOperandsGradMask); - texArgs[numArgs++] = parameters.gradX; - texArgs[numArgs++] = parameters.gradY; + texArgs.push_back(parameters.gradX); + texArgs.push_back(parameters.gradY); explicitLod = true; } else if (noImplicitLod && ! fetch && ! gather) { // have to explicitly use lod of 0 if not allowed to have them be implicit, and // we would otherwise be about to issue an implicit instruction mask = (ImageOperandsMask)(mask | ImageOperandsLodMask); - texArgs[numArgs++] = makeFloatConstant(0.0); + texArgs.push_back(makeFloatConstant(0.0)); explicitLod = true; } if (parameters.offset) { @@ -2086,24 +3083,23 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, addCapability(CapabilityImageGatherExtended); mask = (ImageOperandsMask)(mask | ImageOperandsOffsetMask); } - texArgs[numArgs++] = parameters.offset; + texArgs.push_back(parameters.offset); } if (parameters.offsets) { addCapability(CapabilityImageGatherExtended); mask = (ImageOperandsMask)(mask | ImageOperandsConstOffsetsMask); - texArgs[numArgs++] = parameters.offsets; + texArgs.push_back(parameters.offsets); } -#ifndef GLSLANG_WEB if (parameters.sample) { mask = (ImageOperandsMask)(mask | ImageOperandsSampleMask); - texArgs[numArgs++] = parameters.sample; + texArgs.push_back(parameters.sample); } if (parameters.lodClamp) { // capability if this bit is used addCapability(CapabilityMinLod); mask = (ImageOperandsMask)(mask | ImageOperandsMinLodMask); - texArgs[numArgs++] = parameters.lodClamp; + texArgs.push_back(parameters.lodClamp); } if (parameters.nonprivate) { mask = mask | ImageOperandsNonPrivateTexelKHRMask; @@ -2111,12 +3107,10 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, if (parameters.volatil) { mask = mask | ImageOperandsVolatileTexelKHRMask; } -#endif mask = mask | signExtensionMask; - if (mask == ImageOperandsMaskNone) - --numArgs; // undo speculative reservation for the mask argument - else - texArgs[optArgNum] = mask; + // insert the operand for the mask, if any bits were set. + if (mask != ImageOperandsMaskNone) + texArgs.insert(texArgs.begin() + optArgNum, mask); // // Set up the instruction @@ -2127,7 +3121,6 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, opCode = OpImageSparseFetch; else opCode = OpImageFetch; -#ifndef GLSLANG_WEB } else if (parameters.granularity && parameters.coarse) { opCode = OpImageSampleFootprintNV; } else if (gather) { @@ -2141,7 +3134,6 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, opCode = OpImageSparseGather; else opCode = OpImageGather; -#endif } else if (explicitLod) { if (parameters.Dref) { if (proj) @@ -2220,14 +3212,15 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, // Build the SPIR-V instruction Instruction* textureInst = new Instruction(getUniqueId(), resultType, opCode); - for (int op = 0; op < optArgNum; ++op) + textureInst->reserveOperands(optArgNum + (texArgs.size() - (optArgNum + 1))); + for (size_t op = 0; op < optArgNum; ++op) textureInst->addIdOperand(texArgs[op]); - if (optArgNum < numArgs) + if (optArgNum < texArgs.size()) textureInst->addImmediateOperand(texArgs[optArgNum]); - for (int op = optArgNum + 1; op < numArgs; ++op) + for (size_t op = optArgNum + 1; op < texArgs.size(); ++op) textureInst->addIdOperand(texArgs[op]); setPrecision(textureInst->getResultId(), precision); - buildPoint->addInstruction(std::unique_ptr(textureInst)); + addInstruction(std::unique_ptr(textureInst)); Id resultId = textureInst->getResultId(); @@ -2307,7 +3300,7 @@ Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameter query->addIdOperand(parameters.coords); if (parameters.lod) query->addIdOperand(parameters.lod); - buildPoint->addInstruction(std::unique_ptr(query)); + addInstruction(std::unique_ptr(query)); addCapability(CapabilityImageQuery); return query->getResultId(); @@ -2387,7 +3380,7 @@ Id Builder::createCompositeCompare(Decoration precision, Id value1, Id value2, b Id Builder::createCompositeConstruct(Id typeId, const std::vector& constituents) { assert(isAggregateType(typeId) || (getNumTypeConstituents(typeId) > 1 && - getNumTypeConstituents(typeId) == (int)constituents.size())); + getNumTypeConstituents(typeId) == constituents.size())); if (generatingOpCodeForSpecConst) { // Sometime, even in spec-constant-op mode, the constant composite to be @@ -2403,10 +3396,27 @@ Id Builder::createCompositeConstruct(Id typeId, const std::vector& constitue [&](spv::Id id) { return isSpecConstant(id); })); } - Instruction* op = new Instruction(getUniqueId(), typeId, OpCompositeConstruct); - for (int c = 0; c < (int)constituents.size(); ++c) + bool replicate = false; + size_t numConstituents = constituents.size(); + + if (useReplicatedComposites) { + replicate = numConstituents > 0 && + std::equal(constituents.begin() + 1, constituents.end(), constituents.begin()); + } + + if (replicate) { + numConstituents = 1; + addCapability(spv::CapabilityReplicatedCompositesEXT); + addExtension(spv::E_SPV_EXT_replicated_composites); + } + + Op opcode = replicate ? OpCompositeConstructReplicateEXT : OpCompositeConstruct; + + Instruction* op = new Instruction(getUniqueId(), typeId, opcode); + op->reserveOperands(constituents.size()); + for (size_t c = 0; c < numConstituents; ++c) op->addIdOperand(constituents[c]); - buildPoint->addInstruction(std::unique_ptr(op)); + addInstruction(std::unique_ptr(op)); return op->getResultId(); } @@ -2423,6 +3433,12 @@ Id Builder::createConstructor(Decoration precision, const std::vector& sourc if (sources.size() == 1 && isScalar(sources[0]) && numTargetComponents > 1) return smearScalar(precision, sources[0], resultTypeId); + // Special case: 2 vectors of equal size + if (sources.size() == 1 && isVector(sources[0]) && numTargetComponents == getNumComponents(sources[0])) { + assert(resultTypeId == getTypeId(sources[0])); + return sources[0]; + } + // accumulate the arguments for OpCompositeConstruct std::vector constituents; Id scalarTypeId = getScalarTypeId(resultTypeId); @@ -2457,8 +3473,8 @@ Id Builder::createConstructor(Decoration precision, const std::vector& sourc if (sourcesToUse + targetComponent > numTargetComponents) sourcesToUse = numTargetComponents - targetComponent; - int col = 0; - int row = 0; + unsigned int col = 0; + unsigned int row = 0; for (unsigned int s = 0; s < sourcesToUse; ++s) { if (row >= getNumRows(sourceArg)) { row = 0; @@ -2490,26 +3506,24 @@ Id Builder::createConstructor(Decoration precision, const std::vector& sourc } // If the result is a vector, make it from the gathered constituents. - if (constituents.size() > 0) + if (constituents.size() > 0) { result = createCompositeConstruct(resultTypeId, constituents); - - return setPrecision(result, precision); + return setPrecision(result, precision); + } else { + // Precision was set when generating this component. + return result; + } } // Comments in header Id Builder::createMatrixConstructor(Decoration precision, const std::vector& sources, Id resultTypeId) { Id componentTypeId = getScalarTypeId(resultTypeId); - int numCols = getTypeNumColumns(resultTypeId); - int numRows = getTypeNumRows(resultTypeId); + unsigned int numCols = getTypeNumColumns(resultTypeId); + unsigned int numRows = getTypeNumRows(resultTypeId); Instruction* instr = module.getInstruction(componentTypeId); -#ifdef GLSLANG_WEB - const unsigned bitCount = 32; - assert(bitCount == instr->getImmediateOperand(0)); -#else const unsigned bitCount = instr->getImmediateOperand(0); -#endif // Optimize matrix constructed from a bigger matrix if (isMatrix(sources[0]) && getNumColumns(sources[0]) >= numCols && getNumRows(sources[0]) >= numRows) { @@ -2521,11 +3535,11 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector& Id sourceColumnTypeId = getContainedTypeId(getTypeId(matrix)); std::vector channels; - for (int row = 0; row < numRows; ++row) + for (unsigned int row = 0; row < numRows; ++row) channels.push_back(row); std::vector matrixColumns; - for (int col = 0; col < numCols; ++col) { + for (unsigned int col = 0; col < numCols; ++col) { std::vector indexes; indexes.push_back(col); Id colv = createCompositeExtract(matrix, sourceColumnTypeId, indexes); @@ -2541,6 +3555,13 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector& return setPrecision(createCompositeConstruct(resultTypeId, matrixColumns), precision); } + // Detect a matrix being constructed from a repeated vector of the correct size. + // Create the composite directly from it. + if (sources.size() == numCols && isVector(sources[0]) && getNumComponents(sources[0]) == numRows && + std::equal(sources.begin() + 1, sources.end(), sources.begin())) { + return setPrecision(createCompositeConstruct(resultTypeId, sources), precision); + } + // Otherwise, will use a two step process // 1. make a compile-time 2D array of values // 2. construct a matrix from that array @@ -2568,12 +3589,12 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector& } else if (isMatrix(sources[0])) { // constructing from another matrix; copy over the parts that exist in both the argument and constructee Id matrix = sources[0]; - int minCols = std::min(numCols, getNumColumns(matrix)); - int minRows = std::min(numRows, getNumRows(matrix)); - for (int col = 0; col < minCols; ++col) { + unsigned int minCols = std::min(numCols, getNumColumns(matrix)); + unsigned int minRows = std::min(numRows, getNumRows(matrix)); + for (unsigned int col = 0; col < minCols; ++col) { std::vector indexes; indexes.push_back(col); - for (int row = 0; row < minRows; ++row) { + for (unsigned int row = 0; row < minRows; ++row) { indexes.push_back(row); ids[col][row] = createCompositeExtract(matrix, componentTypeId, indexes); indexes.pop_back(); @@ -2582,12 +3603,12 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector& } } else { // fill in the matrix in column-major order with whatever argument components are available - int row = 0; - int col = 0; + unsigned int row = 0; + unsigned int col = 0; - for (int arg = 0; arg < (int)sources.size() && col < numCols; ++arg) { + for (unsigned int arg = 0; arg < sources.size() && col < numCols; ++arg) { Id argComp = sources[arg]; - for (int comp = 0; comp < getNumComponents(sources[arg]); ++comp) { + for (unsigned int comp = 0; comp < getNumComponents(sources[arg]); ++comp) { if (getNumComponents(sources[arg]) > 1) { argComp = createCompositeExtract(sources[arg], componentTypeId, comp); setPrecision(argComp, precision); @@ -2611,9 +3632,9 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector& // make the column vectors Id columnTypeId = getContainedTypeId(resultTypeId); std::vector matrixColumns; - for (int col = 0; col < numCols; ++col) { + for (unsigned int col = 0; col < numCols; ++col) { std::vector vectorComponents; - for (int row = 0; row < numRows; ++row) + for (unsigned int row = 0; row < numRows; ++row) vectorComponents.push_back(ids[col][row]); Id column = createCompositeConstruct(columnTypeId, vectorComponents); setPrecision(column, precision); @@ -2629,7 +3650,7 @@ Builder::If::If(Id cond, unsigned int ctrl, Builder& gb) : builder(gb), condition(cond), control(ctrl), - elseBlock(0) + elseBlock(nullptr) { function = &builder.getBuildPoint()->getParent(); @@ -2642,6 +3663,7 @@ Builder::If::If(Id cond, unsigned int ctrl, Builder& gb) : // Save the current block, so that we can add in the flow control split when // makeEndIf is called. headerBlock = builder.getBuildPoint(); + builder.createSelectionMerge(mergeBlock, control); function->addBlock(thenBlock); builder.setBuildPoint(thenBlock); @@ -2651,7 +3673,7 @@ Builder::If::If(Id cond, unsigned int ctrl, Builder& gb) : void Builder::If::makeBeginElse() { // Close out the "then" by having it jump to the mergeBlock - builder.createBranch(mergeBlock); + builder.createBranch(true, mergeBlock); // Make the first else block and add it to the function elseBlock = new Block(builder.getUniqueId(), *function); @@ -2665,11 +3687,10 @@ void Builder::If::makeBeginElse() void Builder::If::makeEndIf() { // jump to the merge block - builder.createBranch(mergeBlock); + builder.createBranch(true, mergeBlock); // Go back to the headerBlock and make the flow control split builder.setBuildPoint(headerBlock); - builder.createSelectionMerge(mergeBlock, control); if (elseBlock) builder.createConditionalBranch(condition, thenBlock, elseBlock); else @@ -2698,6 +3719,7 @@ void Builder::makeSwitch(Id selector, unsigned int control, int numSegments, con // make the switch instruction Instruction* switchInst = new Instruction(NoResult, NoType, OpSwitch); + switchInst->reserveOperands((caseValues.size() * 2) + 2); switchInst->addIdOperand(selector); auto defaultOrMerge = (defaultSegment >= 0) ? segmentBlocks[defaultSegment] : mergeBlock; switchInst->addIdOperand(defaultOrMerge->getId()); @@ -2707,17 +3729,17 @@ void Builder::makeSwitch(Id selector, unsigned int control, int numSegments, con switchInst->addIdOperand(segmentBlocks[valueIndexToSegment[i]]->getId()); segmentBlocks[valueIndexToSegment[i]]->addPredecessor(buildPoint); } - buildPoint->addInstruction(std::unique_ptr(switchInst)); + addInstruction(std::unique_ptr(switchInst)); // push the merge block switchMerges.push(mergeBlock); } // Comments in header -void Builder::addSwitchBreak() +void Builder::addSwitchBreak(bool implicit) { // branch to the top of the merge block stack - createBranch(switchMerges.top()); + createBranch(implicit, switchMerges.top()); createAndSetNoPredecessorBlock("post-switch-break"); } @@ -2728,7 +3750,7 @@ void Builder::nextSwitchSegment(std::vector& segmentBlock, int nextSegme if (lastSegment >= 0) { // Close out previous segment by jumping, if necessary, to next segment if (! buildPoint->isTerminated()) - createBranch(segmentBlock[nextSegment]); + createBranch(true, segmentBlock[nextSegment]); } Block* block = segmentBlock[nextSegment]; block->getParent().addBlock(block); @@ -2740,7 +3762,7 @@ void Builder::endSwitch(std::vector& /*segmentBlock*/) { // Close out previous segment by jumping, if necessary, to next segment if (! buildPoint->isTerminated()) - addSwitchBreak(); + addSwitchBreak(true); switchMerges.top()->getParent().addBlock(switchMerges.top()); setBuildPoint(switchMerges.top()); @@ -2773,14 +3795,14 @@ Builder::LoopBlocks& Builder::makeNewLoop() void Builder::createLoopContinue() { - createBranch(&loops.top().continue_target); + createBranch(false, &loops.top().continue_target); // Set up a block for dead code. createAndSetNoPredecessorBlock("post-loop-continue"); } void Builder::createLoopExit() { - createBranch(&loops.top().merge); + createBranch(false, &loops.top().merge); // Set up a block for dead code. createAndSetNoPredecessorBlock("post-loop-break"); } @@ -2839,7 +3861,7 @@ void Builder::accessChainStore(Id rvalue, Decoration nonUniform, spv::MemoryAcce // If a swizzle exists and is not full and is not dynamic, then the swizzle will be broken into individual stores. if (accessChain.swizzle.size() > 0 && - getNumTypeComponents(getResultingAccessChainType()) != (int)accessChain.swizzle.size() && + getNumTypeComponents(getResultingAccessChainType()) != accessChain.swizzle.size() && accessChain.component == NoResult) { for (unsigned int i = 0; i < accessChain.swizzle.size(); ++i) { accessChain.indexChain.push_back(makeUintConstant(accessChain.swizzle[i])); @@ -3159,7 +4181,7 @@ void Builder::simplifyAccessChainSwizzle() { // If the swizzle has fewer components than the vector, it is subsetting, and must stay // to preserve that fact. - if (getNumTypeComponents(accessChain.preSwizzleBaseType) > (int)accessChain.swizzle.size()) + if (getNumTypeComponents(accessChain.preSwizzleBaseType) > accessChain.swizzle.size()) return; // if components are out of order, it is a swizzle @@ -3222,41 +4244,52 @@ void Builder::createAndSetNoPredecessorBlock(const char* /*name*/) } // Comments in header -void Builder::createBranch(Block* block) +void Builder::createBranch(bool implicit, Block* block) { Instruction* branch = new Instruction(OpBranch); branch->addIdOperand(block->getId()); - buildPoint->addInstruction(std::unique_ptr(branch)); + if (implicit) { + addInstructionNoDebugInfo(std::unique_ptr(branch)); + } + else { + addInstruction(std::unique_ptr(branch)); + } block->addPredecessor(buildPoint); } void Builder::createSelectionMerge(Block* mergeBlock, unsigned int control) { Instruction* merge = new Instruction(OpSelectionMerge); + merge->reserveOperands(2); merge->addIdOperand(mergeBlock->getId()); merge->addImmediateOperand(control); - buildPoint->addInstruction(std::unique_ptr(merge)); + addInstruction(std::unique_ptr(merge)); } void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control, const std::vector& operands) { Instruction* merge = new Instruction(OpLoopMerge); + merge->reserveOperands(operands.size() + 3); merge->addIdOperand(mergeBlock->getId()); merge->addIdOperand(continueBlock->getId()); merge->addImmediateOperand(control); for (int op = 0; op < (int)operands.size(); ++op) merge->addImmediateOperand(operands[op]); - buildPoint->addInstruction(std::unique_ptr(merge)); + addInstruction(std::unique_ptr(merge)); } void Builder::createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock) { Instruction* branch = new Instruction(OpBranchConditional); + branch->reserveOperands(3); branch->addIdOperand(condition); branch->addIdOperand(thenBlock->getId()); branch->addIdOperand(elseBlock->getId()); - buildPoint->addInstruction(std::unique_ptr(branch)); + + // A conditional branch is always attached to a condition expression + addInstructionNoDebugInfo(std::unique_ptr(branch)); + thenBlock->addPredecessor(buildPoint); elseBlock->addPredecessor(buildPoint); } @@ -3271,10 +4304,11 @@ void Builder::dumpSourceInstructions(const spv::Id fileId, const std::string& te const int opSourceWordCount = 4; const int nonNullBytesPerInstruction = 4 * (maxWordCount - opSourceWordCount) - 1; - if (source != SourceLanguageUnknown) { + if (sourceLang != SourceLanguageUnknown) { // OpSource Language Version File Source Instruction sourceInst(NoResult, NoType, OpSource); - sourceInst.addImmediateOperand(source); + sourceInst.reserveOperands(3); + sourceInst.addImmediateOperand(sourceLang); sourceInst.addImmediateOperand(sourceVersion); // File operand if (fileId != NoResult) { @@ -3307,16 +4341,16 @@ void Builder::dumpSourceInstructions(const spv::Id fileId, const std::string& te // Dump an OpSource[Continued] sequence for the source and every include file void Builder::dumpSourceInstructions(std::vector& out) const { - dumpSourceInstructions(sourceFileStringId, sourceText, out); + if (emitNonSemanticShaderDebugInfo) return; + dumpSourceInstructions(mainFileId, sourceText, out); for (auto iItr = includeFiles.begin(); iItr != includeFiles.end(); ++iItr) dumpSourceInstructions(iItr->first, *iItr->second, out); } -void Builder::dumpInstructions(std::vector& out, - const std::vector >& instructions) const +template void Builder::dumpInstructions(std::vector& out, const Range& instructions) const { - for (int i = 0; i < (int)instructions.size(); ++i) { - instructions[i]->dump(out); + for (const auto& inst : instructions) { + inst->dump(out); } } @@ -3329,4 +4363,40 @@ void Builder::dumpModuleProcesses(std::vector& out) const } } -}; // end spv namespace +bool Builder::DecorationInstructionLessThan::operator()(const std::unique_ptr& lhs, + const std::unique_ptr& rhs) const +{ + // Order by the id to which the decoration applies first. This is more intuitive. + assert(lhs->isIdOperand(0) && rhs->isIdOperand(0)); + if (lhs->getIdOperand(0) != rhs->getIdOperand(0)) { + return lhs->getIdOperand(0) < rhs->getIdOperand(0); + } + + if (lhs->getOpCode() != rhs->getOpCode()) + return lhs->getOpCode() < rhs->getOpCode(); + + // Now compare the operands. + int minSize = std::min(lhs->getNumOperands(), rhs->getNumOperands()); + for (int i = 1; i < minSize; ++i) { + if (lhs->isIdOperand(i) != rhs->isIdOperand(i)) { + return lhs->isIdOperand(i) < rhs->isIdOperand(i); + } + + if (lhs->isIdOperand(i)) { + if (lhs->getIdOperand(i) != rhs->getIdOperand(i)) { + return lhs->getIdOperand(i) < rhs->getIdOperand(i); + } + } else { + if (lhs->getImmediateOperand(i) != rhs->getImmediateOperand(i)) { + return lhs->getImmediateOperand(i) < rhs->getImmediateOperand(i); + } + } + } + + if (lhs->getNumOperands() != rhs->getNumOperands()) + return lhs->getNumOperands() < rhs->getNumOperands(); + + // In this case they are equal. + return false; +} +} // end spv namespace diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index c72d9b287e..61b6aa57eb 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -50,8 +50,13 @@ #include "Logger.h" #include "spirv.hpp" #include "spvIR.h" +namespace spv { + #include "GLSL.ext.KHR.h" + #include "NonSemanticShaderDebugInfo100.h" +} #include +#include #include #include #include @@ -82,7 +87,7 @@ class Builder { void setSource(spv::SourceLanguage lang, int version) { - source = lang; + sourceLang = lang; sourceVersion = version; } spv::Id getStringId(const std::string& str) @@ -99,14 +104,54 @@ class Builder { stringIds[file_c_str] = strId; return strId; } - void setSourceFile(const std::string& file) + + spv::Id getMainFileId() const { return mainFileId; } + + // Initialize the main source file name + void setDebugMainSourceFile(const std::string& file) { - sourceFileStringId = getStringId(file); + if (trackDebugInfo) { + dirtyLineTracker = true; + mainFileId = getStringId(file); + currentFileId = mainFileId; + } + } + + // Set the debug source location tracker in the builder. + // The upcoming instructions in basic blocks will be associated to this location. + void setDebugSourceLocation(int line, const char* filename) + { + if (trackDebugInfo) { + dirtyLineTracker = true; + if (line != 0) { + // TODO: This is special handling of some AST nodes having (untracked) line 0. + // But they should have a valid line number. + currentLine = line; + if (filename) { + currentFileId = getStringId(filename); + } + } + } } + void setSourceText(const std::string& text) { sourceText = text; } void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); } void addModuleProcessed(const std::string& p) { moduleProcesses.push_back(p.c_str()); } - void setEmitOpLines() { emitOpLines = true; } + void setEmitSpirvDebugInfo() + { + trackDebugInfo = true; + emitSpirvDebugInfo = true; + } + void setEmitNonSemanticShaderDebugInfo(bool emitSourceText) + { + trackDebugInfo = true; + emitNonSemanticShaderDebugInfo = true; + importNonSemanticShaderDebugInfoInstructions(); + + if (emitSourceText) { + emitNonSemanticShaderDebugSource = emitSourceText; + } + } void addExtension(const char* ext) { extensions.insert(ext); } void removeExtension(const char* ext) { @@ -147,19 +192,6 @@ class Builder { return id; } - // Generate OpLine for non-filename-based #line directives (ie no filename - // seen yet): Log the current line, and if different than the last one, - // issue a new OpLine using the new line and current source file name. - void setLine(int line); - - // If filename null, generate OpLine for non-filename-based line directives, - // else do filename-based: Log the current line and file, and if different - // than the last one, issue a new OpLine using the new line and file - // name. - void setLine(int line, const char* filename); - // Low-level OpLine. See setLine() for a layered helper. - void addLine(Id fileName, int line, int column); - // For creating new types (will return old type if the requested one was already made). Id makeVoidType(); Id makeBoolType(); @@ -170,7 +202,7 @@ class Builder { Id makeIntType(int width) { return makeIntegerType(width, true); } Id makeUintType(int width) { return makeIntegerType(width, false); } Id makeFloatType(int width); - Id makeStructType(const std::vector& members, const char*); + Id makeStructType(const std::vector& members, const char* name, bool const compilerGenerated = true); Id makeStructResultType(Id type0, Id type1); Id makeVectorType(Id component, int size); Id makeMatrixType(Id component, int cols, int rows); @@ -180,13 +212,55 @@ class Builder { Id makeImageType(Id sampledType, Dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format); Id makeSamplerType(); Id makeSampledImageType(Id imageType); - Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols); + Id makeCooperativeMatrixTypeKHR(Id component, Id scope, Id rows, Id cols, Id use); + Id makeCooperativeMatrixTypeNV(Id component, Id scope, Id rows, Id cols); + Id makeCooperativeMatrixTypeWithSameShape(Id component, Id otherType); Id makeGenericType(spv::Op opcode, std::vector& operands); + // SPIR-V NonSemantic Shader DebugInfo Instructions + struct DebugTypeLoc { + std::string name {}; + int line {0}; + int column {0}; + }; + std::unordered_map debugTypeLocs; + Id makeDebugInfoNone(); + Id makeBoolDebugType(int const size); + Id makeIntegerDebugType(int const width, bool const hasSign); + Id makeFloatDebugType(int const width); + Id makeSequentialDebugType(Id const baseType, Id const componentCount, NonSemanticShaderDebugInfo100Instructions const sequenceType); + Id makeArrayDebugType(Id const baseType, Id const componentCount); + Id makeVectorDebugType(Id const baseType, int const componentCount); + Id makeMatrixDebugType(Id const vectorType, int const vectorCount, bool columnMajor = true); + Id makeMemberDebugType(Id const memberType, DebugTypeLoc const& debugTypeLoc); + Id makeCompositeDebugType(std::vector const& memberTypes, char const*const name, + NonSemanticShaderDebugInfo100DebugCompositeType const tag, bool const isOpaqueType = false); + Id makePointerDebugType(StorageClass storageClass, Id const baseType); + Id makeForwardPointerDebugType(StorageClass storageClass); + Id makeDebugSource(const Id fileName); + Id makeDebugCompilationUnit(); + Id createDebugGlobalVariable(Id const type, char const*const name, Id const variable); + Id createDebugLocalVariable(Id type, char const*const name, size_t const argNumber = 0); + Id makeDebugExpression(); + Id makeDebugDeclare(Id const debugLocalVariable, Id const pointer); + Id makeDebugValue(Id const debugLocalVariable, Id const value); + Id makeDebugFunctionType(Id returnType, const std::vector& paramTypes); + Id makeDebugFunction(Function* function, Id nameId, Id funcTypeId); + Id makeDebugLexicalBlock(uint32_t line); + std::string unmangleFunctionName(std::string const& name) const; + + // Initialize non-semantic debug information for a function, including those of: + // - The function definition + // - The function parameters + void setupFunctionDebugInfo(Function* function, const char* name, const std::vector& paramTypes, + const std::vector& paramNames); + // accelerationStructureNV type Id makeAccelerationStructureType(); // rayQueryEXT type Id makeRayQueryType(); + // hitObjectNV type + Id makeHitObjectNVType(); // For querying about types. Id getTypeId(Id resultId) const { return module.getTypeId(resultId); } @@ -194,9 +268,9 @@ class Builder { Op getOpCode(Id id) const { return module.getInstruction(id)->getOpCode(); } Op getTypeClass(Id typeId) const { return getOpCode(typeId); } Op getMostBasicTypeClass(Id typeId) const; - int getNumComponents(Id resultId) const { return getNumTypeComponents(getTypeId(resultId)); } - int getNumTypeConstituents(Id typeId) const; - int getNumTypeComponents(Id typeId) const { return getNumTypeConstituents(typeId); } + unsigned int getNumComponents(Id resultId) const { return getNumTypeComponents(getTypeId(resultId)); } + unsigned int getNumTypeConstituents(Id typeId) const; + unsigned int getNumTypeComponents(Id typeId) const { return getNumTypeConstituents(typeId); } Id getScalarTypeId(Id typeId) const; Id getContainedTypeId(Id typeId) const; Id getContainedTypeId(Id typeId, int) const; @@ -204,6 +278,7 @@ class Builder { ImageFormat getImageTypeFormat(Id typeId) const { return (ImageFormat)module.getInstruction(typeId)->getImmediateOperand(6); } Id getResultingAccessChainType() const; + Id getIdOperand(Id resultId, int idx) { return module.getInstruction(resultId)->getIdOperand(idx); } bool isPointer(Id resultId) const { return isPointerType(getTypeId(resultId)); } bool isScalar(Id resultId) const { return isScalarType(getTypeId(resultId)); } @@ -228,11 +303,10 @@ class Builder { bool isMatrixType(Id typeId) const { return getTypeClass(typeId) == OpTypeMatrix; } bool isStructType(Id typeId) const { return getTypeClass(typeId) == OpTypeStruct; } bool isArrayType(Id typeId) const { return getTypeClass(typeId) == OpTypeArray; } -#ifdef GLSLANG_WEB - bool isCooperativeMatrixType(Id typeId)const { return false; } -#else - bool isCooperativeMatrixType(Id typeId)const { return getTypeClass(typeId) == OpTypeCooperativeMatrixNV; } -#endif + bool isCooperativeMatrixType(Id typeId)const + { + return getTypeClass(typeId) == OpTypeCooperativeMatrixKHR || getTypeClass(typeId) == OpTypeCooperativeMatrixNV; + } bool isAggregateType(Id typeId) const { return isArrayType(typeId) || isStructType(typeId) || isCooperativeMatrixType(typeId); } bool isImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeImage; } @@ -264,18 +338,18 @@ class Builder { return module.getInstruction(scalarTypeId)->getImmediateOperand(0); } - int getTypeNumColumns(Id typeId) const + unsigned int getTypeNumColumns(Id typeId) const { assert(isMatrixType(typeId)); return getNumTypeConstituents(typeId); } - int getNumColumns(Id resultId) const { return getTypeNumColumns(getTypeId(resultId)); } - int getTypeNumRows(Id typeId) const + unsigned int getNumColumns(Id resultId) const { return getTypeNumColumns(getTypeId(resultId)); } + unsigned int getTypeNumRows(Id typeId) const { assert(isMatrixType(typeId)); return getNumTypeComponents(getContainedTypeId(typeId)); } - int getNumRows(Id resultId) const { return getTypeNumRows(getTypeId(resultId)); } + unsigned int getNumRows(Id resultId) const { return getTypeNumRows(getTypeId(resultId)); } Dim getTypeDimensionality(Id typeId) const { @@ -318,6 +392,8 @@ class Builder { Id makeFloat16Constant(float f16, bool specConstant = false); Id makeFpConstant(Id type, double d, bool specConstant = false); + Id importNonSemanticShaderDebugInfoInstructions(); + // Turn the array of constants into a proper spv constant of the requested type. Id makeCompositeConstant(Id type, const std::vector& comps, bool specConst = false); @@ -332,6 +408,7 @@ class Builder { void addDecoration(Id, Decoration, const char*); void addDecoration(Id, Decoration, const std::vector& literals); void addDecoration(Id, Decoration, const std::vector& strings); + void addLinkageDecoration(Id id, const char* name, spv::LinkageType linkType); void addDecorationId(Id id, Decoration, Id idDecoration); void addDecorationId(Id id, Decoration, const std::vector& operandIds); void addMemberDecoration(Id, unsigned int member, Decoration, int num = -1); @@ -340,9 +417,23 @@ class Builder { void addMemberDecoration(Id, unsigned int member, Decoration, const std::vector& strings); // At the end of what block do the next create*() instructions go? - void setBuildPoint(Block* bp) { buildPoint = bp; } + // Also reset current last DebugScope and current source line to unknown + void setBuildPoint(Block* bp) { + buildPoint = bp; + dirtyLineTracker = true; + dirtyScopeTracker = true; + } Block* getBuildPoint() const { return buildPoint; } + // Append an instruction to the end of the current build point. + // Optionally, additional debug info instructions may also be prepended. + void addInstruction(std::unique_ptr inst); + + // Append an instruction to the end of the current build point without prepending any debug instructions. + // This is useful for insertion of some debug info instructions themselves or some control flow instructions + // that are attached to its predecessor instruction. + void addInstructionNoDebugInfo(std::unique_ptr inst); + // Make the entry-point function. The returned pointer is only valid // for the lifetime of this builder. Function* makeEntryPoint(const char*); @@ -350,13 +441,23 @@ class Builder { // Make a shader-style function, and create its entry block if entry is non-zero. // Return the function, pass back the entry. // The returned pointer is only valid for the lifetime of this builder. - Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name, - const std::vector& paramTypes, const std::vector>& precisions, Block **entry = 0); + Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name, LinkageType linkType, + const std::vector& paramTypes, + const std::vector>& precisions, Block** entry = nullptr); // Create a return. An 'implicit' return is one not appearing in the source // code. In the case of an implicit return, no post-return block is inserted. void makeReturn(bool implicit, Id retVal = 0); + // Initialize state and generate instructions for new lexical scope + void enterLexicalBlock(uint32_t line); + + // Set state and generate instructions to exit current lexical scope + void leaveLexicalBlock(); + + // Prepare builder for generation of instructions for a function. + void enterFunction(Function const* function); + // Generate all the code needed to finish up a function. void leaveFunction(); @@ -364,9 +465,13 @@ class Builder { // discard, terminate-invocation, terminateRayEXT, or ignoreIntersectionEXT void makeStatementTerminator(spv::Op opcode, const char *name); + // Create block terminator instruction for statements that have input operands + // such as OpEmitMeshTasksEXT + void makeStatementTerminator(spv::Op opcode, const std::vector& operands, const char* name); + // Create a global or function local or IO variable. - Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr, - Id initializer = NoResult); + Id createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name = nullptr, + Id initializer = NoResult, bool const compilerGenerated = true); // Create an intermediate with an undefined value. Id createUndefined(Id type); @@ -386,8 +491,10 @@ class Builder { // Create an OpArrayLength instruction Id createArrayLength(Id base, unsigned int member); + // Create an OpCooperativeMatrixLengthKHR instruction + Id createCooperativeMatrixLengthKHR(Id type); // Create an OpCooperativeMatrixLengthNV instruction - Id createCooperativeMatrixLength(Id type); + Id createCooperativeMatrixLengthNV(Id type); // Create an OpCompositeExtract instruction Id createCompositeExtract(Id composite, Id typeId, unsigned index); @@ -540,7 +647,7 @@ class Builder { const std::vector& valueToSegment, int defaultSegment, std::vector& segmentBB); // Add a branch to the innermost switch's merge block. - void addSwitchBreak(); + void addSwitchBreak(bool implicit); // Move to the next code segment, passing in the return argument in makeSwitch() void nextSwitchSegment(std::vector& segmentBB, int segment); @@ -622,11 +729,6 @@ class Builder { // Accumulate whether anything in the chain of structures has coherent decorations. struct CoherentFlags { CoherentFlags() { clear(); } -#ifdef GLSLANG_WEB - void clear() { } - bool isVolatile() const { return false; } - CoherentFlags operator |=(const CoherentFlags &other) { return *this; } -#else bool isVolatile() const { return volatil; } bool isNonUniform() const { return nonUniform; } bool anyCoherent() const { @@ -671,7 +773,6 @@ class Builder { nonUniform |= other.nonUniform; return *this; } -#endif }; CoherentFlags coherentFlags; }; @@ -752,23 +853,25 @@ class Builder { // Add capabilities, extensions, remove unneeded decorations, etc., // based on the resulting SPIR-V. - void postProcess(); + void postProcess(bool compileOnly); // Prune unreachable blocks in the CFG and remove unneeded decorations. void postProcessCFG(); -#ifndef GLSLANG_WEB // Add capabilities, extensions based on instructions in the module. void postProcessFeatures(); // Hook to visit each instruction in a block in a function void postProcess(Instruction&); // Hook to visit each non-32-bit sized float/int operation in a block. void postProcessType(const Instruction&, spv::Id typeId); -#endif + // move OpSampledImage instructions to be next to their users. + void postProcessSamplers(); void dump(std::vector&) const; - void createBranch(Block* block); + // Add a branch to the target block. + // If set implicit, the branch instruction shouldn't have debug source location. + void createBranch(bool implicit, Block* block); void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock); void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control, const std::vector& operands); @@ -780,6 +883,8 @@ class Builder { // Check if the builder is generating code for spec constants. bool isInSpecConstCodeGenMode() { return generatingOpCodeForSpecConst; } + void setUseReplicatedComposites(bool use) { useReplicatedComposites = use; } + protected: Id makeIntConstant(Id typeId, unsigned value, bool specConstant); Id makeInt64Constant(Id typeId, unsigned long long value, bool specConstant); @@ -795,19 +900,48 @@ class Builder { void createSelectionMerge(Block* mergeBlock, unsigned int control); void dumpSourceInstructions(std::vector&) const; void dumpSourceInstructions(const spv::Id fileId, const std::string& text, std::vector&) const; - void dumpInstructions(std::vector&, const std::vector >&) const; + template void dumpInstructions(std::vector& out, const Range& instructions) const; void dumpModuleProcesses(std::vector&) const; spv::MemoryAccessMask sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc) const; + struct DecorationInstructionLessThan { + bool operator()(const std::unique_ptr& lhs, const std::unique_ptr& rhs) const; + }; unsigned int spvVersion; // the version of SPIR-V to emit in the header - SourceLanguage source; + SourceLanguage sourceLang; int sourceVersion; - spv::Id sourceFileStringId; + spv::Id nonSemanticShaderCompilationUnitId {0}; + spv::Id nonSemanticShaderDebugInfo {0}; + spv::Id debugInfoNone {0}; + spv::Id debugExpression {0}; // Debug expression with zero operations. std::string sourceText; - int currentLine; - const char* currentFile; - bool emitOpLines; + + // True if an new OpLine/OpDebugLine may need to be inserted. Either: + // 1. The current debug location changed + // 2. The current build point changed + bool dirtyLineTracker; + int currentLine = 0; + // OpString id of the current file name. Always 0 if debug info is off. + spv::Id currentFileId = 0; + // OpString id of the main file name. Always 0 if debug info is off. + spv::Id mainFileId = 0; + + // True if an new OpDebugScope may need to be inserted. Either: + // 1. A new lexical block is pushed + // 2. The current build point changed + bool dirtyScopeTracker; + std::stack currentDebugScopeId; + + // This flag toggles tracking of debug info while building the SPIR-V. + bool trackDebugInfo = false; + // This flag toggles emission of SPIR-V debug instructions, like OpLine and OpSource. + bool emitSpirvDebugInfo = false; + // This flag toggles emission of Non-Semantic Debug extension debug instructions. + bool emitNonSemanticShaderDebugInfo = false; + bool restoreNonSemanticShaderDebugInfo = false; + bool emitNonSemanticShaderDebugSource = false; + std::set extensions; std::vector sourceExtensions; std::vector moduleProcesses; @@ -820,6 +954,7 @@ class Builder { Id uniqueId; Function* entryPointFunction; bool generatingOpCodeForSpecConst; + bool useReplicatedComposites { false }; AccessChain accessChain; // special blocks of instructions for output @@ -828,7 +963,7 @@ class Builder { std::vector > entryPoints; std::vector > executionModes; std::vector > names; - std::vector > decorations; + std::set, DecorationInstructionLessThan> decorations; std::vector > constantsTypesGlobals; std::vector > externals; std::vector > functions; @@ -841,6 +976,8 @@ class Builder { std::unordered_map> groupedStructConstants; // map type opcodes to type instructions std::unordered_map> groupedTypes; + // map type opcodes to debug type instructions + std::unordered_map> groupedDebugTypes; // list of OpConstantNull instructions std::vector nullConstants; @@ -856,6 +993,12 @@ class Builder { // map from include file name ids to their contents std::map includeFiles; + // map from core id to debug id + std::map debugId; + + // map from file name string id to DebugSource id + std::unordered_map debugSourceId; + // The stream for outputting warnings and errors. SpvBuildLogger* logger; }; // end Builder class diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp index dd6dabce0d..e35ab71fe7 100644 --- a/SPIRV/SpvPostProcess.cpp +++ b/SPIRV/SpvPostProcess.cpp @@ -52,11 +52,12 @@ namespace spv { #include "GLSL.ext.EXT.h" #include "GLSL.ext.AMD.h" #include "GLSL.ext.NV.h" + #include "GLSL.ext.ARM.h" + #include "GLSL.ext.QCOM.h" } namespace spv { -#ifndef GLSLANG_WEB // Hook to visit each operand type and result type of an instruction. // Will be called multiple times for one instruction, once for each typed // operand and the result. @@ -180,6 +181,7 @@ void Builder::postProcessType(const Instruction& inst, Id typeId) else if (width == 8) addCapability(CapabilityInt8); } + break; default: if (basicTypeOp == OpTypeInt) { if (width == 16) @@ -333,7 +335,6 @@ void Builder::postProcess(Instruction& inst) } } } -#endif // comment in header void Builder::postProcessCFG() @@ -386,15 +387,16 @@ void Builder::postProcessCFG() } // Remove unneeded decorations, for unreachable instructions - decorations.erase(std::remove_if(decorations.begin(), decorations.end(), - [&unreachableDefinitions](std::unique_ptr& I) -> bool { - Id decoration_id = I.get()->getIdOperand(0); - return unreachableDefinitions.count(decoration_id) != 0; - }), - decorations.end()); + for (auto decorationIter = decorations.begin(); decorationIter != decorations.end();) { + Id decorationId = (*decorationIter)->getIdOperand(0); + if (unreachableDefinitions.count(decorationId) != 0) { + decorationIter = decorations.erase(decorationIter); + } else { + ++decorationIter; + } + } } -#ifndef GLSLANG_WEB // comment in header void Builder::postProcessFeatures() { // Add per-instruction capabilities, extensions, etc., @@ -482,14 +484,68 @@ void Builder::postProcessFeatures() { } } } -#endif + +// SPIR-V requires that any instruction consuming the result of an OpSampledImage +// be in the same block as the OpSampledImage instruction. This pass goes finds +// uses of OpSampledImage where that is not the case and duplicates the +// OpSampledImage to be immediately before the instruction that consumes it. +// The old OpSampledImage is left in place, potentially with no users. +void Builder::postProcessSamplers() +{ + // first, find all OpSampledImage instructions and store them in a map. + std::map sampledImageInstrs; + for (auto f: module.getFunctions()) { + for (auto b: f->getBlocks()) { + for (auto &i: b->getInstructions()) { + if (i->getOpCode() == spv::OpSampledImage) { + sampledImageInstrs[i->getResultId()] = i.get(); + } + } + } + } + // next find all uses of the given ids and rewrite them if needed. + for (auto f: module.getFunctions()) { + for (auto b: f->getBlocks()) { + auto &instrs = b->getInstructions(); + for (size_t idx = 0; idx < instrs.size(); idx++) { + Instruction *i = instrs[idx].get(); + for (int opnum = 0; opnum < i->getNumOperands(); opnum++) { + // Is this operand of the current instruction the result of an OpSampledImage? + if (i->isIdOperand(opnum) && + sampledImageInstrs.count(i->getIdOperand(opnum))) + { + Instruction *opSampImg = sampledImageInstrs[i->getIdOperand(opnum)]; + if (i->getBlock() != opSampImg->getBlock()) { + Instruction *newInstr = new Instruction(getUniqueId(), + opSampImg->getTypeId(), + spv::OpSampledImage); + newInstr->addIdOperand(opSampImg->getIdOperand(0)); + newInstr->addIdOperand(opSampImg->getIdOperand(1)); + newInstr->setBlock(b); + + // rewrite the user of the OpSampledImage to use the new instruction. + i->setIdOperand(opnum, newInstr->getResultId()); + // insert the new OpSampledImage right before the current instruction. + instrs.insert(instrs.begin() + idx, + std::unique_ptr(newInstr)); + idx++; + } + } + } + } + } + } +} // comment in header -void Builder::postProcess() { - postProcessCFG(); -#ifndef GLSLANG_WEB - postProcessFeatures(); -#endif +void Builder::postProcess(bool compileOnly) +{ + // postProcessCFG needs an entrypoint to determine what is reachable, but if we are not creating an "executable" shader, we don't have an entrypoint + if (!compileOnly) + postProcessCFG(); + + postProcessFeatures(); + postProcessSamplers(); } }; // end spv namespace diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index f78a791775..12f94b8392 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -44,6 +44,7 @@ #include "SpvTools.h" #include "spirv-tools/optimizer.hpp" +#include "glslang/MachineIndependent/localintermediate.h" namespace glslang { @@ -68,26 +69,8 @@ spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLog } case glslang::EShTargetVulkan_1_2: return spv_target_env::SPV_ENV_VULKAN_1_2; - case glslang::EShTargetUniversal: - switch (spvVersion.spv) { - case EShTargetSpv_1_0: - return spv_target_env::SPV_ENV_UNIVERSAL_1_0; - case EShTargetSpv_1_1: - return spv_target_env::SPV_ENV_UNIVERSAL_1_1; - case EShTargetSpv_1_2: - return spv_target_env::SPV_ENV_UNIVERSAL_1_2; - case EShTargetSpv_1_3: - return spv_target_env::SPV_ENV_UNIVERSAL_1_3; - case EShTargetSpv_1_4: - return spv_target_env::SPV_ENV_UNIVERSAL_1_4; - case EShTargetSpv_1_5: - return spv_target_env::SPV_ENV_UNIVERSAL_1_5; - case EShTargetSpv_1_6: - return spv_target_env::SPV_ENV_UNIVERSAL_1_6; - default: - logger->missingFunctionality("Target version for SPIRV-Tools validator"); - return spv_target_env::SPV_ENV_UNIVERSAL_1_6; - } + case glslang::EShTargetVulkan_1_3: + return spv_target_env::SPV_ENV_VULKAN_1_3; default: break; } @@ -99,6 +82,11 @@ spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLog return spv_target_env::SPV_ENV_UNIVERSAL_1_0; } +spv_target_env MapToSpirvToolsEnv(const glslang::TIntermediate& intermediate, spv::SpvBuildLogger* logger) +{ + return MapToSpirvToolsEnv(intermediate.getSpv(), logger); +} + // Callback passed to spvtools::Optimizer::SetMessageConsumer void OptimizerMesssageConsumer(spv_message_level_t level, const char *source, const spv_position_t &position, const char *message) @@ -230,14 +218,76 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector optimizer.RegisterPass(spvtools::CreateInterpolateFixupPass()); if (options->optimizeSize) { optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass()); + optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsSafePass()); } optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); optimizer.RegisterPass(spvtools::CreateCFGCleanupPass()); spvtools::OptimizerOptions spvOptOptions; + if (options->optimizerAllowExpandedIDBound) + spvOptOptions.set_max_id_bound(0x3FFFFFFF); optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger)); spvOptOptions.set_run_validator(false); // The validator may run as a separate step later on optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions); + + if (options->optimizerAllowExpandedIDBound) { + if (spirv.size() > 3 && spirv[3] > kDefaultMaxIdBound) { + spvtools::Optimizer optimizer2(target_env); + optimizer2.SetMessageConsumer(OptimizerMesssageConsumer); + optimizer2.RegisterPass(spvtools::CreateCompactIdsPass()); + optimizer2.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions); + } + } +} + +bool SpirvToolsAnalyzeDeadOutputStores(spv_target_env target_env, std::vector& spirv, + std::unordered_set* live_locs, + std::unordered_set* live_builtins, + spv::SpvBuildLogger*) +{ + spvtools::Optimizer optimizer(target_env); + optimizer.SetMessageConsumer(OptimizerMesssageConsumer); + + optimizer.RegisterPass(spvtools::CreateAnalyzeLiveInputPass(live_locs, live_builtins)); + + spvtools::OptimizerOptions spvOptOptions; + optimizer.SetTargetEnv(target_env); + spvOptOptions.set_run_validator(false); + return optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions); +} + +void SpirvToolsEliminateDeadOutputStores(spv_target_env target_env, std::vector& spirv, + std::unordered_set* live_locs, + std::unordered_set* live_builtins, + spv::SpvBuildLogger*) +{ + spvtools::Optimizer optimizer(target_env); + optimizer.SetMessageConsumer(OptimizerMesssageConsumer); + + optimizer.RegisterPass(spvtools::CreateEliminateDeadOutputStoresPass(live_locs, live_builtins)); + optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass(false, true)); + optimizer.RegisterPass(spvtools::CreateEliminateDeadOutputComponentsPass()); + optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass(false, true)); + + spvtools::OptimizerOptions spvOptOptions; + optimizer.SetTargetEnv(target_env); + spvOptOptions.set_run_validator(false); + optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions); +} + +void SpirvToolsEliminateDeadInputComponents(spv_target_env target_env, std::vector& spirv, + spv::SpvBuildLogger*) +{ + spvtools::Optimizer optimizer(target_env); + optimizer.SetMessageConsumer(OptimizerMesssageConsumer); + + optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsPass()); + optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); + + spvtools::OptimizerOptions spvOptOptions; + optimizer.SetTargetEnv(target_env); + spvOptOptions.set_run_validator(false); + optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions); } // Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V. This is implicitly done by diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h index 3fb3cbacd3..455857235f 100644 --- a/SPIRV/SpvTools.h +++ b/SPIRV/SpvTools.h @@ -44,47 +44,63 @@ #if ENABLE_OPT #include #include +#include #include "spirv-tools/libspirv.h" #endif -#include "glslang/MachineIndependent/localintermediate.h" +#include "glslang/MachineIndependent/Versions.h" +#include "glslang/Include/visibility.h" +#include "GlslangToSpv.h" #include "Logger.h" namespace glslang { -struct SpvOptions { - SpvOptions() : generateDebugInfo(false), stripDebugInfo(false), disableOptimizer(true), - optimizeSize(false), disassemble(false), validate(false) { } - bool generateDebugInfo; - bool stripDebugInfo; - bool disableOptimizer; - bool optimizeSize; - bool disassemble; - bool validate; -}; - #if ENABLE_OPT +class TIntermediate; + +// Translate glslang's view of target versioning to what SPIRV-Tools uses. +GLSLANG_EXPORT spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLogger* logger); +GLSLANG_EXPORT spv_target_env MapToSpirvToolsEnv(const glslang::TIntermediate& intermediate, spv::SpvBuildLogger* logger); + // Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. -void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv); +GLSLANG_EXPORT void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv); // Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. -void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, - spv_target_env requested_context); +GLSLANG_EXPORT void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, + spv_target_env requested_context); // Apply the SPIRV-Tools validator to generated SPIR-V. -void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger*, bool prelegalization); +GLSLANG_EXPORT void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, + spv::SpvBuildLogger*, bool prelegalization); // Apply the SPIRV-Tools optimizer to generated SPIR-V. HLSL SPIR-V is legalized in the process. -void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger*, const SpvOptions*); +GLSLANG_EXPORT void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector& spirv, + spv::SpvBuildLogger*, const SpvOptions*); + +// Apply the SPIRV-Tools EliminateDeadInputComponents pass to generated SPIR-V. Put result in |spirv|. +GLSLANG_EXPORT void SpirvToolsEliminateDeadInputComponents(spv_target_env target_env, std::vector& spirv, + spv::SpvBuildLogger*); + +// Apply the SPIRV-Tools AnalyzeDeadOutputStores pass to generated SPIR-V. Put result in |live_locs|. +// Return true if the result is valid. +GLSLANG_EXPORT bool SpirvToolsAnalyzeDeadOutputStores(spv_target_env target_env, std::vector& spirv, + std::unordered_set* live_locs, + std::unordered_set* live_builtins, + spv::SpvBuildLogger*); + +// Apply the SPIRV-Tools EliminateDeadOutputStores and AggressiveDeadCodeElimination passes to generated SPIR-V using +// |live_locs|. Put result in |spirv|. +GLSLANG_EXPORT void SpirvToolsEliminateDeadOutputStores(spv_target_env target_env, std::vector& spirv, + std::unordered_set* live_locs, + std::unordered_set* live_builtins, + spv::SpvBuildLogger*); // Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V. This is implicitly done by // SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if // optimization is disabled. -void SpirvToolsStripDebugInfo(const glslang::TIntermediate& intermediate, - std::vector& spirv, spv::SpvBuildLogger*); +GLSLANG_EXPORT void SpirvToolsStripDebugInfo(const glslang::TIntermediate& intermediate, + std::vector& spirv, spv::SpvBuildLogger*); #endif diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp index 74dd605409..ab77610c4e 100644 --- a/SPIRV/disassemble.cpp +++ b/SPIRV/disassemble.cpp @@ -54,6 +54,9 @@ namespace spv { #include "GLSL.std.450.h" #include "GLSL.ext.AMD.h" #include "GLSL.ext.NV.h" + #include "GLSL.ext.ARM.h" + #include "NonSemanticShaderDebugInfo100.h" + #include "GLSL.ext.QCOM.h" } } const char* GlslStd450DebugNames[spv::GLSLstd450Count]; @@ -62,6 +65,7 @@ namespace spv { static const char* GLSLextAMDGetDebugNames(const char*, unsigned); static const char* GLSLextNVGetDebugNames(const char*, unsigned); +static const char* NonSemanticShaderDebugInfo100GetDebugNames(unsigned); static void Kill(std::ostream& out, const char* message) { @@ -76,6 +80,8 @@ enum ExtInstSet { GLSLextNVInst, OpenCLExtInst, NonSemanticDebugPrintfExtInst, + NonSemanticDebugBreakExtInst, + NonSemanticShaderDebugInfo100 }; // Container class for a single instance of a SPIR-V stream, with methods for disassembly. @@ -355,7 +361,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, switch (stream[word]) { case 8: idDescriptor[resultId] = "int8_t"; break; case 16: idDescriptor[resultId] = "int16_t"; break; - default: assert(0); // fallthrough + default: assert(0); [[fallthrough]]; case 32: idDescriptor[resultId] = "int"; break; case 64: idDescriptor[resultId] = "int64_t"; break; } @@ -363,7 +369,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, case OpTypeFloat: switch (stream[word]) { case 16: idDescriptor[resultId] = "float16_t"; break; - default: assert(0); // fallthrough + default: assert(0); [[fallthrough]]; case 32: idDescriptor[resultId] = "float"; break; case 64: idDescriptor[resultId] = "float64_t"; break; } @@ -501,6 +507,10 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, extInstSet = OpenCLExtInst; } else if (strcmp("NonSemantic.DebugPrintf", name) == 0) { extInstSet = NonSemanticDebugPrintfExtInst; + } else if (strcmp("NonSemantic.DebugBreak", name) == 0) { + extInstSet = NonSemanticDebugBreakExtInst; + } else if (strcmp("NonSemantic.Shader.DebugInfo.100", name) == 0) { + extInstSet = NonSemanticShaderDebugInfo100; } else if (strcmp(spv::E_SPV_AMD_shader_ballot, name) == 0 || strcmp(spv::E_SPV_AMD_shader_trinary_minmax, name) == 0 || strcmp(spv::E_SPV_AMD_shader_explicit_vertex_parameter, name) == 0 || @@ -509,7 +519,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, } else if (strcmp(spv::E_SPV_NV_sample_mask_override_coverage, name) == 0 || strcmp(spv::E_SPV_NV_geometry_shader_passthrough, name) == 0 || strcmp(spv::E_SPV_NV_viewport_array2, name) == 0 || - strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0 || + strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0 || strcmp(spv::E_SPV_NV_fragment_shader_barycentric, name) == 0 || strcmp(spv::E_SPV_NV_mesh_shader, name) == 0) { extInstSet = GLSLextNVInst; @@ -526,6 +536,10 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, out << "(" << GLSLextNVGetDebugNames(name, entrypoint) << ")"; } else if (extInstSet == NonSemanticDebugPrintfExtInst) { out << "(DebugPrintf)"; + } else if (extInstSet == NonSemanticDebugBreakExtInst) { + out << "(DebugBreak)"; + } else if (extInstSet == NonSemanticShaderDebugInfo100) { + out << "(" << NonSemanticShaderDebugInfo100GetDebugNames(entrypoint) << ")"; } } break; @@ -749,6 +763,59 @@ static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint) return "Bad"; } +static const char* NonSemanticShaderDebugInfo100GetDebugNames(unsigned entrypoint) +{ + switch (entrypoint) { + case NonSemanticShaderDebugInfo100DebugInfoNone: return "DebugInfoNone"; + case NonSemanticShaderDebugInfo100DebugCompilationUnit: return "DebugCompilationUnit"; + case NonSemanticShaderDebugInfo100DebugTypeBasic: return "DebugTypeBasic"; + case NonSemanticShaderDebugInfo100DebugTypePointer: return "DebugTypePointer"; + case NonSemanticShaderDebugInfo100DebugTypeQualifier: return "DebugTypeQualifier"; + case NonSemanticShaderDebugInfo100DebugTypeArray: return "DebugTypeArray"; + case NonSemanticShaderDebugInfo100DebugTypeVector: return "DebugTypeVector"; + case NonSemanticShaderDebugInfo100DebugTypedef: return "DebugTypedef"; + case NonSemanticShaderDebugInfo100DebugTypeFunction: return "DebugTypeFunction"; + case NonSemanticShaderDebugInfo100DebugTypeEnum: return "DebugTypeEnum"; + case NonSemanticShaderDebugInfo100DebugTypeComposite: return "DebugTypeComposite"; + case NonSemanticShaderDebugInfo100DebugTypeMember: return "DebugTypeMember"; + case NonSemanticShaderDebugInfo100DebugTypeInheritance: return "DebugTypeInheritance"; + case NonSemanticShaderDebugInfo100DebugTypePtrToMember: return "DebugTypePtrToMember"; + case NonSemanticShaderDebugInfo100DebugTypeTemplate: return "DebugTypeTemplate"; + case NonSemanticShaderDebugInfo100DebugTypeTemplateParameter: return "DebugTypeTemplateParameter"; + case NonSemanticShaderDebugInfo100DebugTypeTemplateTemplateParameter: return "DebugTypeTemplateTemplateParameter"; + case NonSemanticShaderDebugInfo100DebugTypeTemplateParameterPack: return "DebugTypeTemplateParameterPack"; + case NonSemanticShaderDebugInfo100DebugGlobalVariable: return "DebugGlobalVariable"; + case NonSemanticShaderDebugInfo100DebugFunctionDeclaration: return "DebugFunctionDeclaration"; + case NonSemanticShaderDebugInfo100DebugFunction: return "DebugFunction"; + case NonSemanticShaderDebugInfo100DebugLexicalBlock: return "DebugLexicalBlock"; + case NonSemanticShaderDebugInfo100DebugLexicalBlockDiscriminator: return "DebugLexicalBlockDiscriminator"; + case NonSemanticShaderDebugInfo100DebugScope: return "DebugScope"; + case NonSemanticShaderDebugInfo100DebugNoScope: return "DebugNoScope"; + case NonSemanticShaderDebugInfo100DebugInlinedAt: return "DebugInlinedAt"; + case NonSemanticShaderDebugInfo100DebugLocalVariable: return "DebugLocalVariable"; + case NonSemanticShaderDebugInfo100DebugInlinedVariable: return "DebugInlinedVariable"; + case NonSemanticShaderDebugInfo100DebugDeclare: return "DebugDeclare"; + case NonSemanticShaderDebugInfo100DebugValue: return "DebugValue"; + case NonSemanticShaderDebugInfo100DebugOperation: return "DebugOperation"; + case NonSemanticShaderDebugInfo100DebugExpression: return "DebugExpression"; + case NonSemanticShaderDebugInfo100DebugMacroDef: return "DebugMacroDef"; + case NonSemanticShaderDebugInfo100DebugMacroUndef: return "DebugMacroUndef"; + case NonSemanticShaderDebugInfo100DebugImportedEntity: return "DebugImportedEntity"; + case NonSemanticShaderDebugInfo100DebugSource: return "DebugSource"; + case NonSemanticShaderDebugInfo100DebugFunctionDefinition: return "DebugFunctionDefinition"; + case NonSemanticShaderDebugInfo100DebugSourceContinued: return "DebugSourceContinued"; + case NonSemanticShaderDebugInfo100DebugLine: return "DebugLine"; + case NonSemanticShaderDebugInfo100DebugNoLine: return "DebugNoLine"; + case NonSemanticShaderDebugInfo100DebugBuildIdentifier: return "DebugBuildIdentifier"; + case NonSemanticShaderDebugInfo100DebugStoragePath: return "DebugStoragePath"; + case NonSemanticShaderDebugInfo100DebugEntryPoint: return "DebugEntryPoint"; + case NonSemanticShaderDebugInfo100DebugTypeMatrix: return "DebugTypeMatrix"; + default: return "Bad"; + } + + return "Bad"; +} + void Disassemble(std::ostream& out, const std::vector& stream) { SpirvStream SpirvStream(out, stream); diff --git a/SPIRV/disassemble.h b/SPIRV/disassemble.h index b6a4635775..3bded14f2f 100644 --- a/SPIRV/disassemble.h +++ b/SPIRV/disassemble.h @@ -43,10 +43,12 @@ #include #include +#include "glslang/Include/visibility.h" + namespace spv { // disassemble with glslang custom disassembler - void Disassemble(std::ostream& out, const std::vector&); + GLSLANG_EXPORT void Disassemble(std::ostream& out, const std::vector&); } // end namespace spv diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 9a569e0d7f..0105caa2ed 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -1,5 +1,6 @@ // // Copyright (C) 2014-2015 LunarG, Inc. +// Copyright (C) 2022-2024 Arm Limited. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // // All rights reserved. @@ -45,6 +46,7 @@ #include #include #include +#include namespace spv { extern "C" { @@ -53,6 +55,8 @@ namespace spv { #include "GLSL.ext.EXT.h" #include "GLSL.ext.AMD.h" #include "GLSL.ext.NV.h" + #include "GLSL.ext.ARM.h" + #include "GLSL.ext.QCOM.h" } } @@ -97,6 +101,8 @@ const char* ExecutionModelString(int model) case 6: return "Kernel"; case ExecutionModelTaskNV: return "TaskNV"; case ExecutionModelMeshNV: return "MeshNV"; + case ExecutionModelTaskEXT: return "TaskEXT"; + case ExecutionModelMeshEXT: return "MeshEXT"; default: return "Bad"; @@ -173,28 +179,33 @@ const char* ExecutionModeString(int mode) case 31: return "ContractionOff"; case 32: return "Bad"; - case ExecutionModeInitializer: return "Initializer"; - case ExecutionModeFinalizer: return "Finalizer"; - case ExecutionModeSubgroupSize: return "SubgroupSize"; - case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup"; - case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId"; - case ExecutionModeLocalSizeId: return "LocalSizeId"; - case ExecutionModeLocalSizeHintId: return "LocalSizeHintId"; - - case ExecutionModePostDepthCoverage: return "PostDepthCoverage"; - case ExecutionModeDenormPreserve: return "DenormPreserve"; - case ExecutionModeDenormFlushToZero: return "DenormFlushToZero"; - case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; - case ExecutionModeRoundingModeRTE: return "RoundingModeRTE"; - case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ"; - case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT"; + case ExecutionModeInitializer: return "Initializer"; + case ExecutionModeFinalizer: return "Finalizer"; + case ExecutionModeSubgroupSize: return "SubgroupSize"; + case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup"; + case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId"; + case ExecutionModeLocalSizeId: return "LocalSizeId"; + case ExecutionModeLocalSizeHintId: return "LocalSizeHintId"; + + case ExecutionModePostDepthCoverage: return "PostDepthCoverage"; + case ExecutionModeDenormPreserve: return "DenormPreserve"; + case ExecutionModeDenormFlushToZero: return "DenormFlushToZero"; + case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; + case ExecutionModeRoundingModeRTE: return "RoundingModeRTE"; + case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ"; + case ExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD"; + case ExecutionModeStencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD"; + case ExecutionModeStencilRefLessFrontAMD: return "StencilRefLessFrontAMD"; + case ExecutionModeStencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD"; + case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT"; case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlow"; + case ExecutionModeMaximallyReconvergesKHR: return "MaximallyReconverges"; - case ExecutionModeOutputLinesNV: return "OutputLinesNV"; - case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV"; - case ExecutionModeOutputTrianglesNV: return "OutputTrianglesNV"; - case ExecutionModeDerivativeGroupQuadsNV: return "DerivativeGroupQuadsNV"; - case ExecutionModeDerivativeGroupLinearNV: return "DerivativeGroupLinearNV"; + case ExecutionModeOutputLinesNV: return "OutputLinesNV"; + case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV"; + case ExecutionModeOutputTrianglesNV: return "OutputTrianglesNV"; + case ExecutionModeDerivativeGroupQuadsNV: return "DerivativeGroupQuadsNV"; + case ExecutionModeDerivativeGroupLinearNV: return "DerivativeGroupLinearNV"; case ExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT"; case ExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT"; @@ -208,6 +219,13 @@ const char* ExecutionModeString(int mode) case ExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL"; case ExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL"; + case ExecutionModeRequireFullQuadsKHR: return "RequireFullQuadsKHR"; + case ExecutionModeQuadDerivativesKHR: return "QuadDerivativesKHR"; + + case ExecutionModeNonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT"; + case ExecutionModeNonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT"; + case ExecutionModeNonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT"; + case ExecutionModeCeiling: default: return "Bad"; } @@ -238,7 +256,9 @@ const char* StorageClassString(int StorageClass) case StorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR"; case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT"; - + case StorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT"; + case StorageClassHitObjectAttributeNV: return "HitObjectAttributeNV"; + case StorageClassTileImageEXT: return "TileImageEXT"; default: return "Bad"; } } @@ -297,7 +317,10 @@ const char* DecorationString(int decoration) case DecorationCeiling: default: return "Bad"; - case DecorationExplicitInterpAMD: return "ExplicitInterpAMD"; + case DecorationWeightTextureQCOM: return "DecorationWeightTextureQCOM"; + case DecorationBlockMatchTextureQCOM: return "DecorationBlockMatchTextureQCOM"; + case DecorationBlockMatchSamplerQCOM: return "DecorationBlockMatchSamplerQCOM"; + case DecorationExplicitInterpAMD: return "ExplicitInterpAMD"; case DecorationOverrideCoverageNV: return "OverrideCoverageNV"; case DecorationPassthroughNV: return "PassthroughNV"; case DecorationViewportRelativeNV: return "ViewportRelativeNV"; @@ -305,13 +328,16 @@ const char* DecorationString(int decoration) case DecorationPerPrimitiveNV: return "PerPrimitiveNV"; case DecorationPerViewNV: return "PerViewNV"; case DecorationPerTaskNV: return "PerTaskNV"; - case DecorationPerVertexNV: return "PerVertexNV"; + + case DecorationPerVertexKHR: return "PerVertexKHR"; case DecorationNonUniformEXT: return "DecorationNonUniformEXT"; case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE"; case DecorationHlslSemanticGOOGLE: return "DecorationHlslSemanticGOOGLE"; case DecorationRestrictPointerEXT: return "DecorationRestrictPointerEXT"; case DecorationAliasedPointerEXT: return "DecorationAliasedPointerEXT"; + + case DecorationHitObjectShaderRecordBufferNV: return "DecorationHitObjectShaderRecordBufferNV"; } } @@ -392,6 +418,12 @@ const char* BuiltInString(int builtIn) case BuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR"; case BuiltInRayTminKHR: return "RayTminKHR"; case BuiltInRayTmaxKHR: return "RayTmaxKHR"; + case BuiltInCullMaskKHR: return "CullMaskKHR"; + case BuiltInHitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR"; + case BuiltInHitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV"; + case BuiltInHitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV"; + case BuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV"; + case BuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV"; case BuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR"; case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR"; case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR"; @@ -406,8 +438,8 @@ const char* BuiltInString(int builtIn) case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; // case BuiltInFragmentSizeNV: return "FragmentSizeNV"; // superseded by BuiltInFragSizeEXT // case BuiltInInvocationsPerPixelNV: return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT - case BuiltInBaryCoordNV: return "BaryCoordNV"; - case BuiltInBaryCoordNoPerspNV: return "BaryCoordNoPerspNV"; + case BuiltInBaryCoordKHR: return "BaryCoordKHR"; + case BuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR"; case BuiltInFragSizeEXT: return "FragSizeEXT"; case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT"; @@ -427,6 +459,15 @@ const char* BuiltInString(int builtIn) case BuiltInWarpIDNV: return "WarpIDNV"; case BuiltInSMIDNV: return "SMIDNV"; case BuiltInCurrentRayTimeNV: return "CurrentRayTimeNV"; + case BuiltInPrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT"; + case BuiltInPrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT"; + case BuiltInPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT"; + case BuiltInCullPrimitiveEXT: return "CullPrimitiveEXT"; + case BuiltInCoreCountARM: return "CoreCountARM"; + case BuiltInCoreIDARM: return "CoreIDARM"; + case BuiltInCoreMaxIDARM: return "CoreMaxIDARM"; + case BuiltInWarpIDARM: return "WarpIDARM"; + case BuiltInWarpMaxIDARM: return "BuiltInWarpMaxIDARM"; default: return "Bad"; } @@ -442,6 +483,7 @@ const char* DimensionString(int dim) case 4: return "Rect"; case 5: return "Buffer"; case 6: return "SubpassData"; + case DimTileImageDataEXT: return "TileImageDataEXT"; default: return "Bad"; } @@ -556,7 +598,7 @@ const char* ImageChannelOrderString(int format) case 17: return "sRGBA"; case 18: return "sBGRA"; - default: + default: return "Bad"; } } @@ -761,6 +803,21 @@ const char* MemoryAccessString(int mem) } } +const int CooperativeMatrixOperandsCeiling = 6; + +const char* CooperativeMatrixOperandsString(int op) +{ + switch (op) { + case CooperativeMatrixOperandsMatrixASignedComponentsKHRShift: return "ASignedComponentsKHR"; + case CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift: return "BSignedComponentsKHR"; + case CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift: return "CSignedComponentsKHR"; + case CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift: return "ResultSignedComponentsKHR"; + case CooperativeMatrixOperandsSaturatingAccumulationKHRShift: return "SaturatingAccumulationKHR"; + + default: return "Bad"; + } +} + const char* ScopeString(int mem) { switch (mem) { @@ -842,7 +899,7 @@ const char* CapabilityString(int info) case 22: return "Int16"; case 23: return "TessellationPointSize"; case 24: return "GeometryPointSize"; - case 25: return "ImageGatherExtended"; + case 25: return "ImageGatherExtended"; case 26: return "Bad"; case 27: return "StorageImageMultisample"; case 28: return "UniformBufferArrayDynamicIndexing"; @@ -887,6 +944,7 @@ const char* CapabilityString(int info) case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR"; case CapabilityDrawParameters: return "DrawParameters"; case CapabilitySubgroupVoteKHR: return "SubgroupVoteKHR"; + case CapabilityGroupNonUniformRotateKHR: return "CapabilityGroupNonUniformRotateKHR"; case CapabilityStorageUniformBufferBlock16: return "StorageUniformBufferBlock16"; case CapabilityStorageUniform16: return "StorageUniform16"; @@ -925,14 +983,20 @@ const char* CapabilityString(int info) case CapabilityRayTracingNV: return "RayTracingNV"; case CapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV"; case CapabilityRayTracingKHR: return "RayTracingKHR"; + case CapabilityRayCullMaskKHR: return "RayCullMaskKHR"; case CapabilityRayQueryKHR: return "RayQueryKHR"; case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; + case CapabilityRayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR"; + case CapabilityDisplacementMicromapNV: return "DisplacementMicromapNV"; + case CapabilityRayTracingDisplacementMicromapNV: return "CapabilityRayTracingDisplacementMicromapNV"; + case CapabilityRayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR"; case CapabilityComputeDerivativeGroupQuadsNV: return "ComputeDerivativeGroupQuadsNV"; case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV"; - case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV"; + case CapabilityFragmentBarycentricKHR: return "FragmentBarycentricKHR"; case CapabilityMeshShadingNV: return "MeshShadingNV"; case CapabilityImageFootprintNV: return "ImageFootprintNV"; + case CapabilityMeshShadingEXT: return "MeshShadingEXT"; // case CapabilityShadingRateNV: return "ShadingRateNV"; // superseded by FragmentDensityEXT case CapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV"; case CapabilityFragmentDensityEXT: return "FragmentDensityEXT"; @@ -960,20 +1024,31 @@ const char* CapabilityString(int info) case CapabilityVariablePointers: return "VariablePointers"; case CapabilityCooperativeMatrixNV: return "CooperativeMatrixNV"; + case CapabilityCooperativeMatrixKHR: return "CooperativeMatrixKHR"; case CapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV"; case CapabilityFragmentShaderSampleInterlockEXT: return "CapabilityFragmentShaderSampleInterlockEXT"; case CapabilityFragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT"; case CapabilityFragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT"; + case CapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT"; + case CapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; + case CapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; + + case CapabilityCooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; + case CapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR"; case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT"; + case CapabilityAtomicFloat16VectorNV: return "AtomicFloat16VectorNV"; case CapabilityShaderClockKHR: return "ShaderClockKHR"; + case CapabilityQuadControlKHR: return "QuadControlKHR"; case CapabilityInt64ImageEXT: return "Int64ImageEXT"; case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL"; + case CapabilityExpectAssumeKHR: return "ExpectAssumeKHR"; + case CapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT"; case CapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT"; case CapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT"; @@ -984,6 +1059,16 @@ const char* CapabilityString(int info) case CapabilityWorkgroupMemoryExplicitLayoutKHR: return "CapabilityWorkgroupMemoryExplicitLayoutKHR"; case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR"; case CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR"; + case CapabilityCoreBuiltinsARM: return "CoreBuiltinsARM"; + + case CapabilityShaderInvocationReorderNV: return "ShaderInvocationReorderNV"; + + case CapabilityTextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM"; + case CapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM"; + case CapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM"; + case CapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; + + case CapabilityReplicatedCompositesEXT: return "CapabilityReplicatedCompositesEXT"; default: return "Bad"; } @@ -1362,11 +1447,18 @@ const char* OpcodeString(int op) case 4429: return "OpSubgroupAnyKHR"; case 4430: return "OpSubgroupAllEqualKHR"; case 4432: return "OpSubgroupReadInvocationKHR"; + case 4433: return "OpExtInstWithForwardRefsKHR"; + + case OpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR"; + case OpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR"; case OpAtomicFAddEXT: return "OpAtomicFAddEXT"; case OpAtomicFMinEXT: return "OpAtomicFMinEXT"; case OpAtomicFMaxEXT: return "OpAtomicFMaxEXT"; + case OpAssumeTrueKHR: return "OpAssumeTrueKHR"; + case OpExpectKHR: return "OpExpectKHR"; + case 5000: return "OpGroupIAddNonUniformAMD"; case 5001: return "OpGroupFAddNonUniformAMD"; case 5002: return "OpGroupFMinNonUniformAMD"; @@ -1400,6 +1492,10 @@ const char* OpcodeString(int op) case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV"; case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; + case OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT"; + case OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT"; + + case OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR"; case OpTypeRayQueryKHR: return "OpTypeRayQueryKHR"; case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR"; @@ -1425,18 +1521,78 @@ const char* OpcodeString(int op) case OpRayQueryGetWorldRayOriginKHR: return "OpRayQueryGetWorldRayOriginKHR"; case OpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR"; case OpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR"; + case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR"; case OpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV"; case OpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV"; case OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV"; case OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV"; case OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV"; + case OpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR"; + case OpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR"; + case OpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR"; + case OpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR"; + case OpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR"; case OpDemoteToHelperInvocationEXT: return "OpDemoteToHelperInvocationEXT"; case OpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT"; case OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT"; case OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT"; + case OpTypeHitObjectNV: return "OpTypeHitObjectNV"; + case OpHitObjectTraceRayNV: return "OpHitObjectTraceRayNV"; + case OpHitObjectTraceRayMotionNV: return "OpHitObjectTraceRayMotionNV"; + case OpHitObjectRecordHitNV: return "OpHitObjectRecordHitNV"; + case OpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV"; + case OpHitObjectRecordHitWithIndexNV: return "OpHitObjectRecordHitWithIndexNV"; + case OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV"; + case OpHitObjectRecordMissNV: return "OpHitObjectRecordMissNV"; + case OpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV"; + case OpHitObjectRecordEmptyNV: return "OpHitObjectRecordEmptyNV"; + case OpHitObjectExecuteShaderNV: return "OpHitObjectExecuteShaderNV"; + case OpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV"; + case OpReorderThreadWithHitObjectNV: return "OpReorderThreadWithHitObjectNV"; + case OpHitObjectGetCurrentTimeNV: return "OpHitObjectGetCurrentTimeNV"; + case OpHitObjectGetAttributesNV: return "OpHitObjectGetAttributesNV"; + case OpHitObjectGetHitKindNV: return "OpHitObjectGetFrontFaceNV"; + case OpHitObjectGetPrimitiveIndexNV: return "OpHitObjectGetPrimitiveIndexNV"; + case OpHitObjectGetGeometryIndexNV: return "OpHitObjectGetGeometryIndexNV"; + case OpHitObjectGetInstanceIdNV: return "OpHitObjectGetInstanceIdNV"; + case OpHitObjectGetInstanceCustomIndexNV: return "OpHitObjectGetInstanceCustomIndexNV"; + case OpHitObjectGetObjectRayDirectionNV: return "OpHitObjectGetObjectRayDirectionNV"; + case OpHitObjectGetObjectRayOriginNV: return "OpHitObjectGetObjectRayOriginNV"; + case OpHitObjectGetWorldRayDirectionNV: return "OpHitObjectGetWorldRayDirectionNV"; + case OpHitObjectGetWorldRayOriginNV: return "OpHitObjectGetWorldRayOriginNV"; + case OpHitObjectGetWorldToObjectNV: return "OpHitObjectGetWorldToObjectNV"; + case OpHitObjectGetObjectToWorldNV: return "OpHitObjectGetObjectToWorldNV"; + case OpHitObjectGetRayTMaxNV: return "OpHitObjectGetRayTMaxNV"; + case OpHitObjectGetRayTMinNV: return "OpHitObjectGetRayTMinNV"; + case OpHitObjectIsEmptyNV: return "OpHitObjectIsEmptyNV"; + case OpHitObjectIsHitNV: return "OpHitObjectIsHitNV"; + case OpHitObjectIsMissNV: return "OpHitObjectIsMissNV"; + case OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV"; + case OpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV"; + + case OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV"; + case OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV"; + + case OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT"; + case OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT"; + case OpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT"; + + case OpImageSampleWeightedQCOM: return "OpImageSampleWeightedQCOM"; + case OpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM"; + case OpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM"; + case OpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM"; + case OpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM"; + case OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM"; + case OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM"; + case OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM"; + + case OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT"; + case OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT"; + case OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT"; + default: return "Bad"; } @@ -1456,1553 +1612,1883 @@ EnumParameters LoopControlParams[FunctionControlCeiling]; EnumParameters SelectionControlParams[SelectControlCeiling]; EnumParameters FunctionControlParams[FunctionControlCeiling]; EnumParameters MemoryAccessParams[MemoryAccessCeiling]; +EnumParameters CooperativeMatrixOperandsParams[CooperativeMatrixOperandsCeiling]; // Set up all the parameterizing descriptions of the opcodes, operands, etc. void Parameterize() { // only do this once. - static bool initialized = false; - if (initialized) - return; - initialized = true; - - // Exceptions to having a result and a resulting type . - // (Everything is initialized to have both). - - InstructionDesc[OpNop].setResultAndType(false, false); - InstructionDesc[OpSource].setResultAndType(false, false); - InstructionDesc[OpSourceContinued].setResultAndType(false, false); - InstructionDesc[OpSourceExtension].setResultAndType(false, false); - InstructionDesc[OpExtension].setResultAndType(false, false); - InstructionDesc[OpExtInstImport].setResultAndType(true, false); - InstructionDesc[OpCapability].setResultAndType(false, false); - InstructionDesc[OpMemoryModel].setResultAndType(false, false); - InstructionDesc[OpEntryPoint].setResultAndType(false, false); - InstructionDesc[OpExecutionMode].setResultAndType(false, false); - InstructionDesc[OpExecutionModeId].setResultAndType(false, false); - InstructionDesc[OpTypeVoid].setResultAndType(true, false); - InstructionDesc[OpTypeBool].setResultAndType(true, false); - InstructionDesc[OpTypeInt].setResultAndType(true, false); - InstructionDesc[OpTypeFloat].setResultAndType(true, false); - InstructionDesc[OpTypeVector].setResultAndType(true, false); - InstructionDesc[OpTypeMatrix].setResultAndType(true, false); - InstructionDesc[OpTypeImage].setResultAndType(true, false); - InstructionDesc[OpTypeSampler].setResultAndType(true, false); - InstructionDesc[OpTypeSampledImage].setResultAndType(true, false); - InstructionDesc[OpTypeArray].setResultAndType(true, false); - InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false); - InstructionDesc[OpTypeStruct].setResultAndType(true, false); - InstructionDesc[OpTypeOpaque].setResultAndType(true, false); - InstructionDesc[OpTypePointer].setResultAndType(true, false); - InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false); - InstructionDesc[OpTypeFunction].setResultAndType(true, false); - InstructionDesc[OpTypeEvent].setResultAndType(true, false); - InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false); - InstructionDesc[OpTypeReserveId].setResultAndType(true, false); - InstructionDesc[OpTypeQueue].setResultAndType(true, false); - InstructionDesc[OpTypePipe].setResultAndType(true, false); - InstructionDesc[OpFunctionEnd].setResultAndType(false, false); - InstructionDesc[OpStore].setResultAndType(false, false); - InstructionDesc[OpImageWrite].setResultAndType(false, false); - InstructionDesc[OpDecorationGroup].setResultAndType(true, false); - InstructionDesc[OpDecorate].setResultAndType(false, false); - InstructionDesc[OpDecorateId].setResultAndType(false, false); - InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false); - InstructionDesc[OpMemberDecorate].setResultAndType(false, false); - InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false); - InstructionDesc[OpGroupDecorate].setResultAndType(false, false); - InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false); - InstructionDesc[OpName].setResultAndType(false, false); - InstructionDesc[OpMemberName].setResultAndType(false, false); - InstructionDesc[OpString].setResultAndType(true, false); - InstructionDesc[OpLine].setResultAndType(false, false); - InstructionDesc[OpNoLine].setResultAndType(false, false); - InstructionDesc[OpCopyMemory].setResultAndType(false, false); - InstructionDesc[OpCopyMemorySized].setResultAndType(false, false); - InstructionDesc[OpEmitVertex].setResultAndType(false, false); - InstructionDesc[OpEndPrimitive].setResultAndType(false, false); - InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false); - InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false); - InstructionDesc[OpControlBarrier].setResultAndType(false, false); - InstructionDesc[OpMemoryBarrier].setResultAndType(false, false); - InstructionDesc[OpAtomicStore].setResultAndType(false, false); - InstructionDesc[OpLoopMerge].setResultAndType(false, false); - InstructionDesc[OpSelectionMerge].setResultAndType(false, false); - InstructionDesc[OpLabel].setResultAndType(true, false); - InstructionDesc[OpBranch].setResultAndType(false, false); - InstructionDesc[OpBranchConditional].setResultAndType(false, false); - InstructionDesc[OpSwitch].setResultAndType(false, false); - InstructionDesc[OpKill].setResultAndType(false, false); - InstructionDesc[OpTerminateInvocation].setResultAndType(false, false); - InstructionDesc[OpReturn].setResultAndType(false, false); - InstructionDesc[OpReturnValue].setResultAndType(false, false); - InstructionDesc[OpUnreachable].setResultAndType(false, false); - InstructionDesc[OpLifetimeStart].setResultAndType(false, false); - InstructionDesc[OpLifetimeStop].setResultAndType(false, false); - InstructionDesc[OpCommitReadPipe].setResultAndType(false, false); - InstructionDesc[OpCommitWritePipe].setResultAndType(false, false); - InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false); - InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false); - InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false); - InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false); - InstructionDesc[OpRetainEvent].setResultAndType(false, false); - InstructionDesc[OpReleaseEvent].setResultAndType(false, false); - InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false); - InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false); - InstructionDesc[OpModuleProcessed].setResultAndType(false, false); - InstructionDesc[OpTypeCooperativeMatrixNV].setResultAndType(true, false); - InstructionDesc[OpCooperativeMatrixStoreNV].setResultAndType(false, false); - InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false); - InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false); - - // Specific additional context-dependent operands - - ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <>'"); - - ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'"); - ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'"); - ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'"); - - ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'"); - ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'"); - ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'"); - - ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'"); - ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'"); - - DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'"); - DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'"); - DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'"); - DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'"); - DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'"); - DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'"); - DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'"); - DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'"); - DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'"); - DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'"); - DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'"); - DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <>"); - DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'"); - DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'"); - DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'"); - DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'"); - DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'"); - DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'"); - DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'"); - DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'"); - - OperandClassParams[OperandSource].set(0, SourceString, 0); - OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr); - OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr); - OperandClassParams[OperandMemory].set(0, MemoryString, nullptr); - OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams); - OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands); - OperandClassParams[OperandStorage].set(0, StorageClassString, nullptr); - OperandClassParams[OperandDimensionality].set(0, DimensionString, nullptr); - OperandClassParams[OperandSamplerAddressingMode].set(0, SamplerAddressingModeString, nullptr); - OperandClassParams[OperandSamplerFilterMode].set(0, SamplerFilterModeString, nullptr); - OperandClassParams[OperandSamplerImageFormat].set(0, ImageFormatString, nullptr); - OperandClassParams[OperandImageChannelOrder].set(0, ImageChannelOrderString, nullptr); - OperandClassParams[OperandImageChannelDataType].set(0, ImageChannelDataTypeString, nullptr); - OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true); - OperandClassParams[OperandFPFastMath].set(0, FPFastMathString, nullptr, true); - OperandClassParams[OperandFPRoundingMode].set(0, FPRoundingModeString, nullptr); - OperandClassParams[OperandLinkageType].set(0, LinkageTypeString, nullptr); - OperandClassParams[OperandFuncParamAttr].set(0, FuncParamAttrString, nullptr); - OperandClassParams[OperandAccessQualifier].set(0, AccessQualifierString, nullptr); - OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams); - OperandClassParams[OperandDecoration].setOperands(DecorationOperands); - OperandClassParams[OperandBuiltIn].set(0, BuiltInString, nullptr); - OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true); - OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true); - OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true); - OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true); - OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true); - OperandClassParams[OperandScope].set(0, ScopeString, nullptr); - OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr); - OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr); - OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true); - OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr); - OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, 0); - - // set name of operator, an initial set of style operands, and the description - - InstructionDesc[OpSource].operands.push(OperandSource, ""); - InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'"); - InstructionDesc[OpSource].operands.push(OperandId, "'File'", true); - InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true); - - InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'"); - - InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'"); - - InstructionDesc[OpName].operands.push(OperandId, "'Target'"); - InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'"); - - InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'"); - InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'"); - InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'"); - - InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'"); - - InstructionDesc[OpLine].operands.push(OperandId, "'File'"); - InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'"); - InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'"); - - InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'"); - - InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'"); - - InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'"); + static std::once_flag initialized; + std::call_once(initialized, [](){ + + // Exceptions to having a result and a resulting type . + // (Everything is initialized to have both). + + InstructionDesc[OpNop].setResultAndType(false, false); + InstructionDesc[OpSource].setResultAndType(false, false); + InstructionDesc[OpSourceContinued].setResultAndType(false, false); + InstructionDesc[OpSourceExtension].setResultAndType(false, false); + InstructionDesc[OpExtension].setResultAndType(false, false); + InstructionDesc[OpExtInstImport].setResultAndType(true, false); + InstructionDesc[OpCapability].setResultAndType(false, false); + InstructionDesc[OpMemoryModel].setResultAndType(false, false); + InstructionDesc[OpEntryPoint].setResultAndType(false, false); + InstructionDesc[OpExecutionMode].setResultAndType(false, false); + InstructionDesc[OpExecutionModeId].setResultAndType(false, false); + InstructionDesc[OpTypeVoid].setResultAndType(true, false); + InstructionDesc[OpTypeBool].setResultAndType(true, false); + InstructionDesc[OpTypeInt].setResultAndType(true, false); + InstructionDesc[OpTypeFloat].setResultAndType(true, false); + InstructionDesc[OpTypeVector].setResultAndType(true, false); + InstructionDesc[OpTypeMatrix].setResultAndType(true, false); + InstructionDesc[OpTypeImage].setResultAndType(true, false); + InstructionDesc[OpTypeSampler].setResultAndType(true, false); + InstructionDesc[OpTypeSampledImage].setResultAndType(true, false); + InstructionDesc[OpTypeArray].setResultAndType(true, false); + InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false); + InstructionDesc[OpTypeStruct].setResultAndType(true, false); + InstructionDesc[OpTypeOpaque].setResultAndType(true, false); + InstructionDesc[OpTypePointer].setResultAndType(true, false); + InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false); + InstructionDesc[OpTypeFunction].setResultAndType(true, false); + InstructionDesc[OpTypeEvent].setResultAndType(true, false); + InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false); + InstructionDesc[OpTypeReserveId].setResultAndType(true, false); + InstructionDesc[OpTypeQueue].setResultAndType(true, false); + InstructionDesc[OpTypePipe].setResultAndType(true, false); + InstructionDesc[OpFunctionEnd].setResultAndType(false, false); + InstructionDesc[OpStore].setResultAndType(false, false); + InstructionDesc[OpImageWrite].setResultAndType(false, false); + InstructionDesc[OpDecorationGroup].setResultAndType(true, false); + InstructionDesc[OpDecorate].setResultAndType(false, false); + InstructionDesc[OpDecorateId].setResultAndType(false, false); + InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false); + InstructionDesc[OpMemberDecorate].setResultAndType(false, false); + InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false); + InstructionDesc[OpGroupDecorate].setResultAndType(false, false); + InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false); + InstructionDesc[OpName].setResultAndType(false, false); + InstructionDesc[OpMemberName].setResultAndType(false, false); + InstructionDesc[OpString].setResultAndType(true, false); + InstructionDesc[OpLine].setResultAndType(false, false); + InstructionDesc[OpNoLine].setResultAndType(false, false); + InstructionDesc[OpCopyMemory].setResultAndType(false, false); + InstructionDesc[OpCopyMemorySized].setResultAndType(false, false); + InstructionDesc[OpEmitVertex].setResultAndType(false, false); + InstructionDesc[OpEndPrimitive].setResultAndType(false, false); + InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false); + InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false); + InstructionDesc[OpControlBarrier].setResultAndType(false, false); + InstructionDesc[OpMemoryBarrier].setResultAndType(false, false); + InstructionDesc[OpAtomicStore].setResultAndType(false, false); + InstructionDesc[OpLoopMerge].setResultAndType(false, false); + InstructionDesc[OpSelectionMerge].setResultAndType(false, false); + InstructionDesc[OpLabel].setResultAndType(true, false); + InstructionDesc[OpBranch].setResultAndType(false, false); + InstructionDesc[OpBranchConditional].setResultAndType(false, false); + InstructionDesc[OpSwitch].setResultAndType(false, false); + InstructionDesc[OpKill].setResultAndType(false, false); + InstructionDesc[OpTerminateInvocation].setResultAndType(false, false); + InstructionDesc[OpReturn].setResultAndType(false, false); + InstructionDesc[OpReturnValue].setResultAndType(false, false); + InstructionDesc[OpUnreachable].setResultAndType(false, false); + InstructionDesc[OpLifetimeStart].setResultAndType(false, false); + InstructionDesc[OpLifetimeStop].setResultAndType(false, false); + InstructionDesc[OpCommitReadPipe].setResultAndType(false, false); + InstructionDesc[OpCommitWritePipe].setResultAndType(false, false); + InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false); + InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false); + InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false); + InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false); + InstructionDesc[OpRetainEvent].setResultAndType(false, false); + InstructionDesc[OpReleaseEvent].setResultAndType(false, false); + InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false); + InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false); + InstructionDesc[OpModuleProcessed].setResultAndType(false, false); + InstructionDesc[OpTypeCooperativeMatrixNV].setResultAndType(true, false); + InstructionDesc[OpCooperativeMatrixStoreNV].setResultAndType(false, false); + InstructionDesc[OpTypeCooperativeMatrixKHR].setResultAndType(true, false); + InstructionDesc[OpCooperativeMatrixStoreKHR].setResultAndType(false, false); + InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false); + InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false); + InstructionDesc[OpAssumeTrueKHR].setResultAndType(false, false); + // Specific additional context-dependent operands + + ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <>'"); + + ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'"); + ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'"); + ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'"); + + ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'"); + ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'"); + ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'"); + + ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'"); + ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'"); + + DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'"); + DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'"); + DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'"); + DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'"); + DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'"); + DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'"); + DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'"); + DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'"); + DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'"); + DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'"); + DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'"); + DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <>"); + DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'"); + DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'"); + DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'"); + DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'"); + DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'"); + DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'"); + DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'"); + DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'"); + + OperandClassParams[OperandSource].set(0, SourceString, nullptr); + OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr); + OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr); + OperandClassParams[OperandMemory].set(0, MemoryString, nullptr); + OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams); + OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands); + OperandClassParams[OperandStorage].set(0, StorageClassString, nullptr); + OperandClassParams[OperandDimensionality].set(0, DimensionString, nullptr); + OperandClassParams[OperandSamplerAddressingMode].set(0, SamplerAddressingModeString, nullptr); + OperandClassParams[OperandSamplerFilterMode].set(0, SamplerFilterModeString, nullptr); + OperandClassParams[OperandSamplerImageFormat].set(0, ImageFormatString, nullptr); + OperandClassParams[OperandImageChannelOrder].set(0, ImageChannelOrderString, nullptr); + OperandClassParams[OperandImageChannelDataType].set(0, ImageChannelDataTypeString, nullptr); + OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true); + OperandClassParams[OperandFPFastMath].set(0, FPFastMathString, nullptr, true); + OperandClassParams[OperandFPRoundingMode].set(0, FPRoundingModeString, nullptr); + OperandClassParams[OperandLinkageType].set(0, LinkageTypeString, nullptr); + OperandClassParams[OperandFuncParamAttr].set(0, FuncParamAttrString, nullptr); + OperandClassParams[OperandAccessQualifier].set(0, AccessQualifierString, nullptr); + OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams); + OperandClassParams[OperandDecoration].setOperands(DecorationOperands); + OperandClassParams[OperandBuiltIn].set(0, BuiltInString, nullptr); + OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true); + OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true); + OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true); + OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true); + OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true); + OperandClassParams[OperandScope].set(0, ScopeString, nullptr); + OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr); + OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr); + OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true); + OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr); + OperandClassParams[OperandCooperativeMatrixOperands].set(CooperativeMatrixOperandsCeiling, CooperativeMatrixOperandsString, CooperativeMatrixOperandsParams, true); + OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, nullptr); + + // set name of operator, an initial set of style operands, and the description + + InstructionDesc[OpSource].operands.push(OperandSource, ""); + InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'"); + InstructionDesc[OpSource].operands.push(OperandId, "'File'", true); + InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true); + + InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'"); + + InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'"); + + InstructionDesc[OpName].operands.push(OperandId, "'Target'"); + InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'"); + + InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'"); + InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'"); + InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'"); + + InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'"); + + InstructionDesc[OpLine].operands.push(OperandId, "'File'"); + InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'"); + InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'"); + + InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'"); + + InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'"); + + InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'"); + + InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, ""); + InstructionDesc[OpMemoryModel].operands.push(OperandMemory, ""); + + InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, ""); + InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'"); + InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'"); + InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'"); + + InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'"); + InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'"); + InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <>"); + + InstructionDesc[OpExecutionModeId].operands.push(OperandId, "'Entry Point'"); + InstructionDesc[OpExecutionModeId].operands.push(OperandExecutionMode, "'Mode'"); + InstructionDesc[OpExecutionModeId].operands.push(OperandVariableIds, "See <>"); + + InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'"); + InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'"); + + InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'"); + + InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'"); + InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'"); + + InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'"); + InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'"); + + InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'"); + InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, ""); + InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'"); + InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'"); + InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'"); + InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'"); + InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, ""); + InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true); + + InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'"); + + InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'"); + InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'"); + + InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'"); + + InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n..."); + + InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type."); + + InstructionDesc[OpTypePointer].operands.push(OperandStorage, ""); + InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'"); + + InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'"); + InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, ""); + + InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'"); + + InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'"); + InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n..."); + + InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'"); + + InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); + + InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, ""); + InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'"); + InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, ""); + + InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'"); - InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, ""); - InstructionDesc[OpMemoryModel].operands.push(OperandMemory, ""); - - InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, ""); - InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'"); - InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'"); - InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'"); - - InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'"); - InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'"); - InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <>"); - - InstructionDesc[OpExecutionModeId].operands.push(OperandId, "'Entry Point'"); - InstructionDesc[OpExecutionModeId].operands.push(OperandExecutionMode, "'Mode'"); - InstructionDesc[OpExecutionModeId].operands.push(OperandVariableIds, "See <>"); - - InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'"); - InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'"); - - InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'"); - - InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'"); - InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'"); + InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); - InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'"); - InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'"); + InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'"); + InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'"); - InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'"); - InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, ""); - InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'"); - InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'"); - InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'"); - InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'"); - InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, ""); - InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true); + InstructionDesc[OpVariable].operands.push(OperandStorage, ""); + InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true); - InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'"); + InstructionDesc[OpFunction].operands.push(OperandFunction, ""); + InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'"); - InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'"); - InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'"); + InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'"); + InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n..."); - InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'"); + InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'"); + InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'"); + InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n..."); - InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n..."); + InstructionDesc[OpExtInstWithForwardRefsKHR].operands.push(OperandId, "'Set'"); + InstructionDesc[OpExtInstWithForwardRefsKHR].operands.push(OperandLiteralNumber, "'Instruction'"); + InstructionDesc[OpExtInstWithForwardRefsKHR].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n..."); - InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type."); + InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true); + InstructionDesc[OpLoad].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[OpLoad].operands.push(OperandId, "", true); - InstructionDesc[OpTypePointer].operands.push(OperandStorage, ""); - InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'"); + InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpStore].operands.push(OperandId, "'Object'"); + InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true); + InstructionDesc[OpStore].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[OpStore].operands.push(OperandId, "", true); - InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'"); - InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, ""); + InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'"); - InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'"); + InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'"); + InstructionDesc[OpDecorate].operands.push(OperandDecoration, ""); + InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <>."); - InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'"); - InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n..."); + InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'"); + InstructionDesc[OpDecorateId].operands.push(OperandDecoration, ""); + InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <>."); - InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'"); + InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'"); + InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, ""); + InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'"); - InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); + InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'"); + InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'"); + InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, ""); + InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <>."); - InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, ""); - InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'"); - InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, ""); + InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'"); + InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'"); + InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, ""); + InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'"); - InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'"); + InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'"); + InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'"); - InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); + InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'"); + InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'"); - InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'"); - InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'"); + InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'"); - InstructionDesc[OpVariable].operands.push(OperandStorage, ""); - InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true); + InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'"); + InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'"); - InstructionDesc[OpFunction].operands.push(OperandFunction, ""); - InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'"); + InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'"); + InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'"); + InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'"); - InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'"); - InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n..."); + InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'"); - InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'"); - InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'"); - InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n..."); + InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'"); + InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'"); - InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true); - InstructionDesc[OpLoad].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpLoad].operands.push(OperandId, "", true); + InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'"); + InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'"); + InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'"); - InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpStore].operands.push(OperandId, "'Object'"); - InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true); - InstructionDesc[OpStore].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpStore].operands.push(OperandId, "", true); + InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'"); + InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'"); + InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'"); + InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true); + + InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'"); + InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'"); + InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'"); + InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true); + + InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'"); + InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'"); + + InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'"); + + InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'"); + InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'"); + InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'"); - InstructionDesc[OpDecorate].operands.push(OperandDecoration, ""); - InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <>."); + InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'"); - InstructionDesc[OpDecorateId].operands.push(OperandDecoration, ""); - InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <>."); + InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'"); - InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, ""); - InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'"); + InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'"); - InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'"); - InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, ""); - InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <>."); + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'"); - InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'"); - InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, ""); - InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'"); + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'"); - InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'"); + InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'"); - InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'"); + InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'"); + InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'"); + InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'"); - InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'"); + InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'"); - InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'"); - InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'"); + InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'"); - InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'"); + InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'"); - InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'"); - InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'"); + InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'"); - InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'"); - InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'"); - InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'"); + InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'"); + InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'"); - InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'"); - InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'"); - InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true); + InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'"); - InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'"); - InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'"); - InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'"); - InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true); - - InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'"); - InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'"); - - InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'"); - - InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'"); - InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'"); - InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'"); + InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'"); - InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'"); + InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'"); - InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'"); + InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'"); + InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'"); - InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'"); + InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'"); + InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'"); - InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'"); - InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpNot].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true); + InstructionDesc[OpAny].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'"); + InstructionDesc[OpAll].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'"); + InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'"); - InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'"); + InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'"); - InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'"); - InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'"); + InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'"); - InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'"); + InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'"); - InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'"); + InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'"); - InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'"); + InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'"); - InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'"); - InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'"); - InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'"); - InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'"); - InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'"); - InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'"); - InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'"); - InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'"); - InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'"); - InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'"); + InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'"); + InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpNot].operands.push(OperandId, "'Operand'"); + InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'"); - InstructionDesc[OpAny].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAll].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'"); + InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'"); - InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'"); + InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'"); + InstructionDesc[OpCopyLogical].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'"); + InstructionDesc[OpIsNan].operands.push(OperandId, "'x'"); - InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'"); + InstructionDesc[OpIsInf].operands.push(OperandId, "'x'"); - InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'"); + InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'"); - InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'"); + InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'"); - InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'"); + InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'"); - InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'"); + InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'"); + InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'"); - InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpOrdered].operands.push(OperandId, "'x'"); + InstructionDesc[OpOrdered].operands.push(OperandId, "'y'"); - InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'"); + InstructionDesc[OpUnordered].operands.push(OperandId, "'x'"); + InstructionDesc[OpUnordered].operands.push(OperandId, "'y'"); - InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'"); + InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'"); - InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'"); + InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'"); + InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'"); + InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'"); + InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpCopyLogical].operands.push(OperandId, "'Operand'"); + InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpIsNan].operands.push(OperandId, "'x'"); + InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpIsInf].operands.push(OperandId, "'x'"); + InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'"); + InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'"); + InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'"); + InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'"); - InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'"); + InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpOrdered].operands.push(OperandId, "'x'"); - InstructionDesc[OpOrdered].operands.push(OperandId, "'y'"); + InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpUnordered].operands.push(OperandId, "'x'"); - InstructionDesc[OpUnordered].operands.push(OperandId, "'y'"); + InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'"); - InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'"); - InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'"); + InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'"); + InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'"); - InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'"); + InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'"); + InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'"); - InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'"); + InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'"); - InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'"); + InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'"); - InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'"); + InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'"); - InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'"); + InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'"); - InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'"); + InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'"); - InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'"); + InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'"); + InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'"); + InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'"); + InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'"); - InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'"); + InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'"); - InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'"); + InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'"); - InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'"); + InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'"); + InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'"); + InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'"); + InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'"); - InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'"); + InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'"); + InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'"); - InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'"); + InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'"); + InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'"); - InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'"); - InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'"); - InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'"); - InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'"); + InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'"); + InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'"); + InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'"); - InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'"); - InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'"); + InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'"); - InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'"); + InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'"); + InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'"); - InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'"); - InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'"); - InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'"); + InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'"); - InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'"); - InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'"); - - InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'"); - InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'"); - InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'"); - - InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'"); + InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'"); + InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'"); - InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'"); - InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'"); + InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpDPdx].operands.push(OperandId, "'P'"); - InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpDPdy].operands.push(OperandId, "'P'"); - InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFwidth].operands.push(OperandId, "'P'"); - InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'"); - InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'"); - InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'"); - InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'"); - InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'"); - InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'"); - InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'"); - InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'"); - InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'"); + InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'"); + InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'"); + InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'"); - InstructionDesc[OpDPdx].operands.push(OperandId, "'P'"); + InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpDPdy].operands.push(OperandId, "'P'"); + InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'"); - InstructionDesc[OpFwidth].operands.push(OperandId, "'P'"); + InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'"); - InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'"); + InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'"); - InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'"); + InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'"); - InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'"); + InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'"); + InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'"); + InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'"); - InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'"); + InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicFAddEXT].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicFAddEXT].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Value'"); - InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'"); + InstructionDesc[OpAssumeTrueKHR].operands.push(OperandId, "'Condition'"); - InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'"); + InstructionDesc[OpExpectKHR].operands.push(OperandId, "'Value'"); + InstructionDesc[OpExpectKHR].operands.push(OperandId, "'ExpectedValue'"); - InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'"); - InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'"); - InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'"); - InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'"); - InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'"); + InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'"); + InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'"); + InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicFMinEXT].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicFMinEXT].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'"); + InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'"); + + InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'"); + + InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'"); + InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'"); + InstructionDesc[OpLoopMerge].operands.push(OperandLoop, ""); + InstructionDesc[OpLoopMerge].operands.push(OperandOptionalLiteral, ""); + + InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'"); + InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, ""); + + InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'"); + + InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'"); + InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'"); + InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'"); + InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'"); + + InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'"); + InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'"); + InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'"); + + + InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'"); + + InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'"); + + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'"); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'"); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'"); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'"); + InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'"); + + InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'"); + InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'"); + + InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'"); + InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'"); + + InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupSMin].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFMin].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupUMax].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupSMax].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFMax].operands.push(OperandId, "X"); + + InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'"); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'"); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'"); + + InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'"); + InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'"); + InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'"); + InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'"); + + InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'"); + InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'"); + InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'"); + InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'"); + + InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'"); + + InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'"); + + InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'"); + + InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'"); + InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'"); + InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'"); + InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'"); + InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'"); + InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'"); + InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'"); + InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'"); + InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'"); + InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'"); + InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'"); + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'"); + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'"); + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'"); + InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'"); + InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'"); + + InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'"); + InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'"); + InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'"); + InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'"); + + InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'"); + + InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID"); + + InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit"); + + InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'"); + + InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask"); + + InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset"); + + InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset"); + + InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'"); + InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'"); + InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicFAddEXT].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicFAddEXT].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Value'"); + InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'"); + InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'"); + + InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X"); + InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "'Direction'"); + + InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'X'"); + InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'Delta'"); + InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'"); + InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'"); + + InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'"); + + InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'"); + + InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); + InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X"); + + InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'"); + InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'"); + + InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'"); + InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'"); + + InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X"); + + InstructionDesc[OpGroupNonUniformQuadAllKHR].operands.push(OperandId, "'Predicate'"); + InstructionDesc[OpGroupNonUniformQuadAnyKHR].operands.push(OperandId, "'Predicate'"); + InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false); + + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'"); + InstructionDesc[OpTraceNV].setResultAndType(false, false); + + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Flags'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Cull Mask'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Origin'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Direction'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Time'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Payload'"); + InstructionDesc[OpTraceRayMotionNV].setResultAndType(false, false); + + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'"); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'"); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Origin'"); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Direction'"); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Payload'"); + InstructionDesc[OpTraceRayKHR].setResultAndType(false, false); + + InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'"); + InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'"); + + InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false); + + InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false); + + InstructionDesc[OpTerminateRayNV].setResultAndType(false, false); + + InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false); + + InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index"); + InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID"); + InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false); + + InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index"); + InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData"); + InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false); + + InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value"); + InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true); + + // Ray Query + InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false); + InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false); + + InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'"); + InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayFlags'"); + InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'CullMask'"); + InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Origin'"); + InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmin'"); + InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Direction'"); + InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmax'"); + InstructionDesc[OpRayQueryInitializeKHR].setResultAndType(false, false); + + InstructionDesc[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false); + + InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'"); + InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false); + + InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false); + + InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionTypeKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetRayTMinKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetRayTMinKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetRayFlagsKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetRayFlagsKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionTKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].setResultAndType(true, true); - InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'"); + InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].setResultAndType(true, true); - InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'"); + InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].setResultAndType(true, true); - InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'"); + InstructionDesc[OpRayQueryGetWorldRayOriginKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetWorldRayOriginKHR].setResultAndType(true, true); - InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'"); + InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true); + + InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'Committed'"); + InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].setResultAndType(true, true); + + InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'"); + InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coarse'"); + InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandVariableIds, "", true); + + InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'"); + InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'"); - InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicFMinEXT].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicFMinEXT].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Value'"); + InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountX'"); + InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountY'"); + InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountZ'"); + InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'Payload'"); + InstructionDesc[OpEmitMeshTasksEXT].setResultAndType(false, false); - InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Value'"); + InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'vertexCount'"); + InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'primitiveCount'"); + InstructionDesc[OpSetMeshOutputsEXT].setResultAndType(false, false); - InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'"); - - InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'"); - - InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'"); - InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'"); - InstructionDesc[OpLoopMerge].operands.push(OperandLoop, ""); - InstructionDesc[OpLoopMerge].operands.push(OperandOptionalLiteral, ""); - - InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'"); - InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, ""); - - InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'"); - - InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'"); - InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'"); - InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'"); - InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'"); - - InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'"); - InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'"); - InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'"); - - - InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'"); - - InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'"); - - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'"); - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'"); - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'"); - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'"); - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'"); - - InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'"); - InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'"); - - InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'"); - InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'"); - - InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupSMin].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFMin].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupUMax].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupSMax].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFMax].operands.push(OperandId, "X"); - - InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'"); - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'"); - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'"); - InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'"); - InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'"); - - InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'"); - InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'"); - InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'"); - InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'"); - InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'"); - - InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'"); - InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'"); - InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'"); - InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'"); - - InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'"); - - InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'"); - - InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'"); - - InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'"); - InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'"); - InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'"); - InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'"); - - InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'"); - InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'"); - InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'"); - InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'"); - - InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'"); - InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'"); - InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'"); - InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'"); - InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'"); - - InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'"); - InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'"); - InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'"); - InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'"); - InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'"); - - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'"); - - InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'"); - InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'"); - InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'"); - InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'"); - - InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'"); - - InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID"); - - InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit"); - - InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'"); - - InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask"); - - InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset"); - - InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset"); - - InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "'ClusterSize'", true); + InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'"); + InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'"); + InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'"); + InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Columns'"); - InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "'ClusterSize'", true); + InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Stride'"); + InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Column Major'"); + InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "", true); - InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "'ClusterSize'", true); + InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Object'"); + InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Stride'"); + InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Column Major'"); + InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "", true); - InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "'ClusterSize'", true); + InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'"); + InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'"); + InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'"); - InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'"); - - InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "'Direction'"); - - InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'"); - InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'"); - - InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'"); - - InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X"); - - InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'"); - InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'"); - - InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'"); - InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'"); - - InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X"); - - InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false); - - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'"); - InstructionDesc[OpTraceNV].setResultAndType(false, false); - - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Flags'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Cull Mask'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Miss Index'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Origin'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Direction'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Time'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Payload'"); - InstructionDesc[OpTraceRayMotionNV].setResultAndType(false, false); - - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Stride'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Miss Index'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Origin'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Direction'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Payload'"); - InstructionDesc[OpTraceRayKHR].setResultAndType(false, false); - - InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'"); - InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'"); - - InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false); - - InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false); - - InstructionDesc[OpTerminateRayNV].setResultAndType(false, false); - - InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false); - - InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index"); - InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID"); - InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false); - - InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index"); - InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData"); - InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false); - - InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value"); - InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true); - - // Ray Query - InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false); - InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false); - - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayFlags'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'CullMask'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Origin'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmin'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Direction'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmax'"); - InstructionDesc[OpRayQueryInitializeKHR].setResultAndType(false, false); - - InstructionDesc[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false); - - InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'"); - InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false); - - InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false); - - InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionTypeKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetRayTMinKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetRayTMinKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetRayFlagsKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetRayFlagsKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionTKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].setResultAndType(true, true); + InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'"); - InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].setResultAndType(true, true); + InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Component Type'"); + InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Scope'"); + InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Rows'"); + InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Columns'"); + InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Use'"); - InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].setResultAndType(true, true); + InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Memory Layout'"); + InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Stride'"); + InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "", true); - InstructionDesc[OpRayQueryGetWorldRayOriginKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetWorldRayOriginKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true); - - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'"); - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coarse'"); - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'"); - InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'"); - - InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'"); - InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'"); - InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'"); - InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Columns'"); - - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Stride'"); - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Column Major'"); - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'"); - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "", true); + InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Object'"); + InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Memory Layout'"); + InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Stride'"); + InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "", true); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Object'"); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Stride'"); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Column Major'"); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'"); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "", true); + InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'A'"); + InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'B'"); + InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'C'"); + InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true); - InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'"); - InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'"); - InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'"); - - InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'"); - - InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false); - - InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpCooperativeMatrixLengthKHR].operands.push(OperandId, "'Type'"); + + InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false); + + InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'"); + + InstructionDesc[OpTypeHitObjectNV].setResultAndType(true, false); + + InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].setResultAndType(true, true); + + InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Hint'"); + InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Bits'"); + InstructionDesc[OpReorderThreadWithHintNV].setResultAndType(false, false); + + InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Hint'"); + InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Bits'"); + InstructionDesc[OpReorderThreadWithHitObjectNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectGetCurrentTimeNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetCurrentTimeNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetHitKindNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetHitKindNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetPrimitiveIndexNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetPrimitiveIndexNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetGeometryIndexNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetGeometryIndexNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetInstanceIdNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetInstanceIdNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetObjectRayDirectionNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetObjectRayDirectionNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetObjectRayOriginNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetObjectRayOriginNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetWorldRayDirectionNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetWorldRayDirectionNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetWorldRayOriginNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetWorldRayOriginNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetWorldToObjectNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetWorldToObjectNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetObjectToWorldNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetObjectToWorldNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetRayTMaxNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetRayTMaxNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetRayTMinNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetRayTMinNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectIsEmptyNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectIsEmptyNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectIsHitNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectIsHitNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectIsMissNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectIsMissNV].setResultAndType(true, true); + + InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObjectAttribute'"); + InstructionDesc[OpHitObjectGetAttributesNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'Payload'"); + InstructionDesc[OpHitObjectExecuteShaderNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'InstanceId'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'PrimitiveId'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'GeometryIndex'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitKind'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Origin'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Direction'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject Attribute'"); + InstructionDesc[OpHitObjectRecordHitNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'InstanceId'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'PrimitiveId'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'GeometryIndex'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitKind'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Origin'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Direction'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Current Time'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject Attribute'"); + InstructionDesc[OpHitObjectRecordHitMotionNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'InstanceId'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'PrimitiveId'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'GeometryIndex'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitKind'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'SBT Record Index'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Origin'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Direction'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject Attribute'"); + InstructionDesc[OpHitObjectRecordHitWithIndexNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'InstanceId'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'PrimitiveId'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'GeometryIndex'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitKind'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'SBT Record Index'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Origin'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Direction'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Current Time'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject Attribute'"); + InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'SBT Index'"); + InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Origin'"); + InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Direction'"); + InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpHitObjectRecordMissNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'SBT Index'"); + InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Origin'"); + InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Direction'"); + InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Current Time'"); + InstructionDesc[OpHitObjectRecordMissMotionNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectRecordEmptyNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectRecordEmptyNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'RayFlags'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Cullmask'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Origin'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Direction'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Payload'"); + InstructionDesc[OpHitObjectTraceRayNV].setResultAndType(false, false); + + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'HitObject'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'RayFlags'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Cullmask'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Origin'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Direction'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Time'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Payload'"); + InstructionDesc[OpHitObjectTraceRayMotionNV].setResultAndType(false, false); + + InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Instance ID'"); + InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Geometry Index'"); + InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Primitive Index'"); + InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Barycentrics'"); + InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].setResultAndType(true, true); + + InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Instance ID'"); + InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Geometry Index'"); + InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Primitive Index'"); + InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Barycentrics'"); + InstructionDesc[OpFetchMicroTriangleVertexPositionNV].setResultAndType(true, true); + + InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Attachment'"); + InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Sample'", true); + InstructionDesc[OpStencilAttachmentReadEXT].operands.push(OperandId, "'Sample'", true); + InstructionDesc[OpDepthAttachmentReadEXT].operands.push(OperandId, "'Sample'", true); + + InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandId, "'source texture'"); + InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandId, "'texture coordinates'"); + InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandId, "'weights texture'"); + InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageSampleWeightedQCOM].setResultAndType(true, true); + + InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandId, "'source texture'"); + InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandId, "'texture coordinates'"); + InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandId, "'box size'"); + InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageBoxFilterQCOM].setResultAndType(true, true); + + InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'target texture'"); + InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'target coordinates'"); + InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'reference texture'"); + InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'reference coordinates'"); + InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'block size'"); + InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageBlockMatchSADQCOM].setResultAndType(true, true); + + InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'target texture'"); + InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'target coordinates'"); + InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'reference texture'"); + InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'reference coordinates'"); + InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'block size'"); + InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageBlockMatchSSDQCOM].setResultAndType(true, true); + + InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'target texture'"); + InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'target coordinates'"); + InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'reference texture'"); + InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'reference coordinates'"); + InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'block size'"); + InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageBlockMatchWindowSSDQCOM].setResultAndType(true, true); + + InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'target texture'"); + InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'target coordinates'"); + InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'reference texture'"); + InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'reference coordinates'"); + InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'block size'"); + InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageBlockMatchWindowSADQCOM].setResultAndType(true, true); + + InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'target texture'"); + InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'target coordinates'"); + InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'reference texture'"); + InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'reference coordinates'"); + InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'block size'"); + InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageBlockMatchGatherSSDQCOM].setResultAndType(true, true); + + InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'target texture'"); + InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'target coordinates'"); + InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'reference texture'"); + InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'reference coordinates'"); + InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'block size'"); + InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandImageOperands, "", true); + InstructionDesc[OpImageBlockMatchGatherSADQCOM].setResultAndType(true, true); + + InstructionDesc[OpConstantCompositeReplicateEXT].operands.push(OperandId, "'Value'"); + InstructionDesc[OpSpecConstantCompositeReplicateEXT].operands.push(OperandId, "'Value'"); + InstructionDesc[OpCompositeConstructReplicateEXT].operands.push(OperandId, "'Value'"); + }); } }; // end spv namespace diff --git a/SPIRV/doc.h b/SPIRV/doc.h index 2a0b28c6b3..521529913f 100644 --- a/SPIRV/doc.h +++ b/SPIRV/doc.h @@ -156,6 +156,7 @@ enum OperandClass { OperandKernelEnqueueFlags, OperandKernelProfilingInfo, OperandCapability, + OperandCooperativeMatrixOperands, OperandOpcode, @@ -190,15 +191,15 @@ class OperandParameters { // Parameterize an enumerant class EnumParameters { public: - EnumParameters() : desc(0) { } + EnumParameters() : desc(nullptr) { } const char* desc; }; // Parameterize a set of enumerants that form an enum class EnumDefinition : public EnumParameters { public: - EnumDefinition() : - ceiling(0), bitmask(false), getName(0), enumParams(0), operandParams(0) { } + EnumDefinition() : + ceiling(0), bitmask(false), getName(nullptr), enumParams(nullptr), operandParams(nullptr) { } void set(int ceil, const char* (*name)(int), EnumParameters* ep, bool mask = false) { ceiling = ceil; @@ -239,8 +240,8 @@ class InstructionParameters { OperandParameters operands; protected: - int typePresent : 1; - int resultPresent : 1; + bool typePresent : 1; + bool resultPresent : 1; }; // The set of objects that hold all the instruction/operand diff --git a/SPIRV/hex_float.h b/SPIRV/hex_float.h index 8be8e9f7e3..785e8af11f 100644 --- a/SPIRV/hex_float.h +++ b/SPIRV/hex_float.h @@ -23,19 +23,6 @@ #include #include -#if defined(_MSC_VER) && _MSC_VER < 1800 -namespace std { -bool isnan(double f) -{ - return ::_isnan(f) != 0; -} -bool isinf(double f) -{ - return ::_finite(f) == 0; -} -} -#endif - #include "bitutils.h" namespace spvutils { diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index c1abd2640e..b09d99bee4 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -1,2314 +1,2827 @@ -// 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, - CapabilityDemoteToHelperInvocation = 5379, - 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-2024 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, Beef +// +// - 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 +// - Beef will use enum classes in the Specification class located in the "Spv" namespace, +// e.g.: Spv.Specification.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, + SourceLanguageSYCL = 7, + 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, + ExecutionModelTaskEXT = 5364, + ExecutionModelMeshEXT = 5365, + 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, + ExecutionModeNonCoherentColorAttachmentReadEXT = 4169, + ExecutionModeNonCoherentDepthAttachmentReadEXT = 4170, + ExecutionModeNonCoherentStencilAttachmentReadEXT = 4171, + ExecutionModeSubgroupUniformControlFlowKHR = 4421, + ExecutionModePostDepthCoverage = 4446, + ExecutionModeDenormPreserve = 4459, + ExecutionModeDenormFlushToZero = 4460, + ExecutionModeSignedZeroInfNanPreserve = 4461, + ExecutionModeRoundingModeRTE = 4462, + ExecutionModeRoundingModeRTZ = 4463, + ExecutionModeEarlyAndLateFragmentTestsAMD = 5017, + ExecutionModeStencilRefReplacingEXT = 5027, + ExecutionModeStencilRefUnchangedFrontAMD = 5079, + ExecutionModeStencilRefGreaterFrontAMD = 5080, + ExecutionModeStencilRefLessFrontAMD = 5081, + ExecutionModeStencilRefUnchangedBackAMD = 5082, + ExecutionModeStencilRefGreaterBackAMD = 5083, + ExecutionModeStencilRefLessBackAMD = 5084, + ExecutionModeQuadDerivativesKHR = 5088, + ExecutionModeRequireFullQuadsKHR = 5089, + ExecutionModeOutputLinesEXT = 5269, + ExecutionModeOutputLinesNV = 5269, + ExecutionModeOutputPrimitivesEXT = 5270, + ExecutionModeOutputPrimitivesNV = 5270, + ExecutionModeDerivativeGroupQuadsNV = 5289, + ExecutionModeDerivativeGroupLinearNV = 5290, + ExecutionModeOutputTrianglesEXT = 5298, + 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, + ExecutionModeMaximallyReconvergesKHR = 6023, + ExecutionModeStreamingInterfaceINTEL = 6154, + ExecutionModeNamedBarrierCountINTEL = 6417, + 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, + StorageClassTileImageEXT = 4172, + 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, + StorageClassHitObjectAttributeNV = 5385, + StorageClassTaskPayloadWorkgroupEXT = 5402, + StorageClassCodeSectionINTEL = 5605, + StorageClassDeviceOnlyINTEL = 5936, + StorageClassHostOnlyINTEL = 5937, + StorageClassMax = 0x7fffffff, +}; + +enum Dim { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + DimCube = 3, + DimRect = 4, + DimBuffer = 5, + DimSubpassData = 6, + DimTileImageDataEXT = 4173, + 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 : unsigned { + 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 : unsigned { + 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, + FunctionParameterAttributeRuntimeAlignedINTEL = 5940, + 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, + DecorationWeightTextureQCOM = 4487, + DecorationBlockMatchTextureQCOM = 4488, + DecorationBlockMatchSamplerQCOM = 4499, + DecorationExplicitInterpAMD = 4999, + DecorationOverrideCoverageNV = 5248, + DecorationPassthroughNV = 5250, + DecorationViewportRelativeNV = 5252, + DecorationSecondaryViewportRelativeNV = 5256, + DecorationPerPrimitiveEXT = 5271, + DecorationPerPrimitiveNV = 5271, + DecorationPerViewNV = 5272, + DecorationPerTaskNV = 5273, + DecorationPerVertexKHR = 5285, + DecorationPerVertexNV = 5285, + DecorationNonUniform = 5300, + DecorationNonUniformEXT = 5300, + DecorationRestrictPointer = 5355, + DecorationRestrictPointerEXT = 5355, + DecorationAliasedPointer = 5356, + DecorationAliasedPointerEXT = 5356, + DecorationHitObjectShaderRecordBufferNV = 5386, + 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, + DecorationMathOpDSPModeINTEL = 5909, + DecorationAliasScopeINTEL = 5914, + DecorationNoAliasINTEL = 5915, + DecorationInitiationIntervalINTEL = 5917, + DecorationMaxConcurrencyINTEL = 5918, + DecorationPipelineEnableINTEL = 5919, + DecorationBufferLocationINTEL = 5921, + DecorationIOPipeStorageINTEL = 5944, + DecorationFunctionFloatingPointModeINTEL = 6080, + DecorationSingleElementVectorINTEL = 6085, + DecorationVectorComputeCallableFunctionINTEL = 6087, + DecorationMediaBlockIOINTEL = 6140, + DecorationConduitKernelArgumentINTEL = 6175, + DecorationRegisterMapKernelArgumentINTEL = 6176, + DecorationMMHostInterfaceAddressWidthINTEL = 6177, + DecorationMMHostInterfaceDataWidthINTEL = 6178, + DecorationMMHostInterfaceLatencyINTEL = 6179, + DecorationMMHostInterfaceReadWriteModeINTEL = 6180, + DecorationMMHostInterfaceMaxBurstINTEL = 6181, + DecorationMMHostInterfaceWaitRequestINTEL = 6182, + DecorationStableKernelArgumentINTEL = 6183, + 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, + BuiltInCoreIDARM = 4160, + BuiltInCoreCountARM = 4161, + BuiltInCoreMaxIDARM = 4162, + BuiltInWarpIDARM = 4163, + BuiltInWarpMaxIDARM = 4164, + 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, + BuiltInPrimitivePointIndicesEXT = 5294, + BuiltInPrimitiveLineIndicesEXT = 5295, + BuiltInPrimitiveTriangleIndicesEXT = 5296, + BuiltInCullPrimitiveEXT = 5299, + 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, + BuiltInHitTriangleVertexPositionsKHR = 5335, + BuiltInHitMicroTriangleVertexPositionsNV = 5337, + BuiltInHitMicroTriangleVertexBarycentricsNV = 5344, + BuiltInIncomingRayFlagsKHR = 5351, + BuiltInIncomingRayFlagsNV = 5351, + BuiltInRayGeometryIndexKHR = 5352, + BuiltInWarpsPerSMNV = 5374, + BuiltInSMCountNV = 5375, + BuiltInWarpIDNV = 5376, + BuiltInSMIDNV = 5377, + BuiltInHitKindFrontFacingMicroTriangleNV = 5405, + BuiltInHitKindBackFacingMicroTriangleNV = 5406, + BuiltInCullMaskKHR = 6021, + BuiltInMax = 0x7fffffff, +}; + +enum SelectionControlShift { + SelectionControlFlattenShift = 0, + SelectionControlDontFlattenShift = 1, + SelectionControlMax = 0x7fffffff, +}; + +enum SelectionControlMask : unsigned { + 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, + LoopControlLoopCountINTELShift = 24, + LoopControlMaxReinvocationDelayINTELShift = 25, + LoopControlMax = 0x7fffffff, +}; + +enum LoopControlMask : unsigned { + 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, + LoopControlLoopCountINTELMask = 0x01000000, + LoopControlMaxReinvocationDelayINTELMask = 0x02000000, +}; + +enum FunctionControlShift { + FunctionControlInlineShift = 0, + FunctionControlDontInlineShift = 1, + FunctionControlPureShift = 2, + FunctionControlConstShift = 3, + FunctionControlOptNoneINTELShift = 16, + FunctionControlMax = 0x7fffffff, +}; + +enum FunctionControlMask : unsigned { + 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 : unsigned { + 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, + MemoryAccessAliasScopeINTELMaskShift = 16, + MemoryAccessNoAliasINTELMaskShift = 17, + MemoryAccessMax = 0x7fffffff, +}; + +enum MemoryAccessMask : unsigned { + MemoryAccessMaskNone = 0, + MemoryAccessVolatileMask = 0x00000001, + MemoryAccessAlignedMask = 0x00000002, + MemoryAccessNontemporalMask = 0x00000004, + MemoryAccessMakePointerAvailableMask = 0x00000008, + MemoryAccessMakePointerAvailableKHRMask = 0x00000008, + MemoryAccessMakePointerVisibleMask = 0x00000010, + MemoryAccessMakePointerVisibleKHRMask = 0x00000010, + MemoryAccessNonPrivatePointerMask = 0x00000020, + MemoryAccessNonPrivatePointerKHRMask = 0x00000020, + MemoryAccessAliasScopeINTELMaskMask = 0x00010000, + MemoryAccessNoAliasINTELMaskMask = 0x00020000, +}; + +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 : unsigned { + 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, + CapabilityCoreBuiltinsARM = 4165, + CapabilityTileImageColorReadAccessEXT = 4166, + CapabilityTileImageDepthReadAccessEXT = 4167, + CapabilityTileImageStencilReadAccessEXT = 4168, + CapabilityCooperativeMatrixLayoutsARM = 4201, + 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, + CapabilityTextureSampleWeightedQCOM = 4484, + CapabilityTextureBoxFilterQCOM = 4485, + CapabilityTextureBlockMatchQCOM = 4486, + CapabilityTextureBlockMatch2QCOM = 4498, + CapabilityFloat16ImageAMD = 5008, + CapabilityImageGatherBiasLodAMD = 5009, + CapabilityFragmentMaskAMD = 5010, + CapabilityStencilExportEXT = 5013, + CapabilityImageReadWriteLodAMD = 5015, + CapabilityInt64ImageEXT = 5016, + CapabilityShaderClockKHR = 5055, + CapabilityQuadControlKHR = 5087, + CapabilitySampleMaskOverrideCoverageNV = 5249, + CapabilityGeometryShaderPassthroughNV = 5251, + CapabilityShaderViewportIndexLayerEXT = 5254, + CapabilityShaderViewportIndexLayerNV = 5254, + CapabilityShaderViewportMaskNV = 5255, + CapabilityShaderStereoViewNV = 5259, + CapabilityPerViewAttributesNV = 5260, + CapabilityFragmentFullyCoveredEXT = 5265, + CapabilityMeshShadingNV = 5266, + CapabilityImageFootprintNV = 5282, + CapabilityMeshShadingEXT = 5283, + 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, + CapabilityRayTracingPositionFetchKHR = 5336, + 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, + CapabilityDisplacementMicromapNV = 5380, + CapabilityRayTracingOpacityMicromapEXT = 5381, + CapabilityShaderInvocationReorderNV = 5383, + CapabilityBindlessTextureNV = 5390, + CapabilityRayQueryPositionFetchKHR = 5391, + CapabilityAtomicFloat16VectorNV = 5404, + CapabilityRayTracingDisplacementMicromapNV = 5409, + 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, + CapabilityFPGADSPControlINTEL = 5908, + CapabilityMemoryAccessAliasingINTEL = 5910, + CapabilityFPGAInvocationPipeliningAttributesINTEL = 5916, + CapabilityFPGABufferLocationINTEL = 5920, + CapabilityArbitraryPrecisionFixedPointINTEL = 5922, + CapabilityUSMStorageClassesINTEL = 5935, + CapabilityRuntimeAlignedAttributeINTEL = 5939, + CapabilityIOPipesINTEL = 5943, + CapabilityBlockingPipesINTEL = 5945, + CapabilityFPGARegINTEL = 5948, + CapabilityDotProductInputAll = 6016, + CapabilityDotProductInputAllKHR = 6016, + CapabilityDotProductInput4x8Bit = 6017, + CapabilityDotProductInput4x8BitKHR = 6017, + CapabilityDotProductInput4x8BitPacked = 6018, + CapabilityDotProductInput4x8BitPackedKHR = 6018, + CapabilityDotProduct = 6019, + CapabilityDotProductKHR = 6019, + CapabilityRayCullMaskKHR = 6020, + CapabilityCooperativeMatrixKHR = 6022, + CapabilityReplicatedCompositesEXT = 6024, + CapabilityBitInstructions = 6025, + CapabilityGroupNonUniformRotateKHR = 6026, + CapabilityAtomicFloat32AddEXT = 6033, + CapabilityAtomicFloat64AddEXT = 6034, + CapabilityLongConstantCompositeINTEL = 6089, + CapabilityOptNoneINTEL = 6094, + CapabilityAtomicFloat16AddEXT = 6095, + CapabilityDebugInfoModuleINTEL = 6114, + CapabilitySplitBarrierINTEL = 6141, + CapabilityFPGAArgumentInterfacesINTEL = 6174, + CapabilityGroupUniformArithmeticKHR = 6400, + CapabilityMax = 0x7fffffff, +}; + +enum RayFlagsShift { + RayFlagsOpaqueKHRShift = 0, + RayFlagsNoOpaqueKHRShift = 1, + RayFlagsTerminateOnFirstHitKHRShift = 2, + RayFlagsSkipClosestHitShaderKHRShift = 3, + RayFlagsCullBackFacingTrianglesKHRShift = 4, + RayFlagsCullFrontFacingTrianglesKHRShift = 5, + RayFlagsCullOpaqueKHRShift = 6, + RayFlagsCullNoOpaqueKHRShift = 7, + RayFlagsSkipTrianglesKHRShift = 8, + RayFlagsSkipAABBsKHRShift = 9, + RayFlagsForceOpacityMicromap2StateEXTShift = 10, + RayFlagsMax = 0x7fffffff, +}; + +enum RayFlagsMask : unsigned { + RayFlagsMaskNone = 0, + RayFlagsOpaqueKHRMask = 0x00000001, + RayFlagsNoOpaqueKHRMask = 0x00000002, + RayFlagsTerminateOnFirstHitKHRMask = 0x00000004, + RayFlagsSkipClosestHitShaderKHRMask = 0x00000008, + RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010, + RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, + RayFlagsCullOpaqueKHRMask = 0x00000040, + RayFlagsCullNoOpaqueKHRMask = 0x00000080, + RayFlagsSkipTrianglesKHRMask = 0x00000100, + RayFlagsSkipAABBsKHRMask = 0x00000200, + RayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400, +}; + +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 : unsigned { + 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 CooperativeMatrixOperandsShift { + CooperativeMatrixOperandsMatrixASignedComponentsKHRShift = 0, + CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift = 1, + CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift = 2, + CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift = 3, + CooperativeMatrixOperandsSaturatingAccumulationKHRShift = 4, + CooperativeMatrixOperandsMax = 0x7fffffff, +}; + +enum CooperativeMatrixOperandsMask : unsigned { + CooperativeMatrixOperandsMaskNone = 0, + CooperativeMatrixOperandsMatrixASignedComponentsKHRMask = 0x00000001, + CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask = 0x00000002, + CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask = 0x00000004, + CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask = 0x00000008, + CooperativeMatrixOperandsSaturatingAccumulationKHRMask = 0x00000010, +}; + +enum CooperativeMatrixLayout { + CooperativeMatrixLayoutRowMajorKHR = 0, + CooperativeMatrixLayoutColumnMajorKHR = 1, + CooperativeMatrixLayoutRowBlockedInterleavedARM = 4202, + CooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203, + CooperativeMatrixLayoutMax = 0x7fffffff, +}; + +enum CooperativeMatrixUse { + CooperativeMatrixUseMatrixAKHR = 0, + CooperativeMatrixUseMatrixBKHR = 1, + CooperativeMatrixUseMatrixAccumulatorKHR = 2, + CooperativeMatrixUseMax = 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, + OpColorAttachmentReadEXT = 4160, + OpDepthAttachmentReadEXT = 4161, + OpStencilAttachmentReadEXT = 4162, + OpTerminateInvocation = 4416, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpGroupNonUniformRotateKHR = 4431, + OpSubgroupReadInvocationKHR = 4432, + OpExtInstWithForwardRefsKHR = 4433, + 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, + OpTypeCooperativeMatrixKHR = 4456, + OpCooperativeMatrixLoadKHR = 4457, + OpCooperativeMatrixStoreKHR = 4458, + OpCooperativeMatrixMulAddKHR = 4459, + OpCooperativeMatrixLengthKHR = 4460, + OpConstantCompositeReplicateEXT = 4461, + OpSpecConstantCompositeReplicateEXT = 4462, + OpCompositeConstructReplicateEXT = 4463, + OpTypeRayQueryKHR = 4472, + OpRayQueryInitializeKHR = 4473, + OpRayQueryTerminateKHR = 4474, + OpRayQueryGenerateIntersectionKHR = 4475, + OpRayQueryConfirmIntersectionKHR = 4476, + OpRayQueryProceedKHR = 4477, + OpRayQueryGetIntersectionTypeKHR = 4479, + OpImageSampleWeightedQCOM = 4480, + OpImageBoxFilterQCOM = 4481, + OpImageBlockMatchSSDQCOM = 4482, + OpImageBlockMatchSADQCOM = 4483, + OpImageBlockMatchWindowSSDQCOM = 4500, + OpImageBlockMatchWindowSADQCOM = 4501, + OpImageBlockMatchGatherSSDQCOM = 4502, + OpImageBlockMatchGatherSADQCOM = 4503, + OpGroupIAddNonUniformAMD = 5000, + OpGroupFAddNonUniformAMD = 5001, + OpGroupFMinNonUniformAMD = 5002, + OpGroupUMinNonUniformAMD = 5003, + OpGroupSMinNonUniformAMD = 5004, + OpGroupFMaxNonUniformAMD = 5005, + OpGroupUMaxNonUniformAMD = 5006, + OpGroupSMaxNonUniformAMD = 5007, + OpFragmentMaskFetchAMD = 5011, + OpFragmentFetchAMD = 5012, + OpReadClockKHR = 5056, + OpGroupNonUniformQuadAllKHR = 5110, + OpGroupNonUniformQuadAnyKHR = 5111, + OpHitObjectRecordHitMotionNV = 5249, + OpHitObjectRecordHitWithIndexMotionNV = 5250, + OpHitObjectRecordMissMotionNV = 5251, + OpHitObjectGetWorldToObjectNV = 5252, + OpHitObjectGetObjectToWorldNV = 5253, + OpHitObjectGetObjectRayDirectionNV = 5254, + OpHitObjectGetObjectRayOriginNV = 5255, + OpHitObjectTraceRayMotionNV = 5256, + OpHitObjectGetShaderRecordBufferHandleNV = 5257, + OpHitObjectGetShaderBindingTableRecordIndexNV = 5258, + OpHitObjectRecordEmptyNV = 5259, + OpHitObjectTraceRayNV = 5260, + OpHitObjectRecordHitNV = 5261, + OpHitObjectRecordHitWithIndexNV = 5262, + OpHitObjectRecordMissNV = 5263, + OpHitObjectExecuteShaderNV = 5264, + OpHitObjectGetCurrentTimeNV = 5265, + OpHitObjectGetAttributesNV = 5266, + OpHitObjectGetHitKindNV = 5267, + OpHitObjectGetPrimitiveIndexNV = 5268, + OpHitObjectGetGeometryIndexNV = 5269, + OpHitObjectGetInstanceIdNV = 5270, + OpHitObjectGetInstanceCustomIndexNV = 5271, + OpHitObjectGetWorldRayDirectionNV = 5272, + OpHitObjectGetWorldRayOriginNV = 5273, + OpHitObjectGetRayTMaxNV = 5274, + OpHitObjectGetRayTMinNV = 5275, + OpHitObjectIsEmptyNV = 5276, + OpHitObjectIsHitNV = 5277, + OpHitObjectIsMissNV = 5278, + OpReorderThreadWithHitObjectNV = 5279, + OpReorderThreadWithHintNV = 5280, + OpTypeHitObjectNV = 5281, + OpImageSampleFootprintNV = 5283, + OpEmitMeshTasksEXT = 5294, + OpSetMeshOutputsEXT = 5295, + OpGroupNonUniformPartitionNV = 5296, + OpWritePackedPrimitiveIndices4x8NV = 5299, + OpFetchMicroTriangleVertexPositionNV = 5300, + OpFetchMicroTriangleVertexBarycentricNV = 5301, + OpReportIntersectionKHR = 5334, + OpReportIntersectionNV = 5334, + OpIgnoreIntersectionNV = 5335, + OpTerminateRayNV = 5336, + OpTraceNV = 5337, + OpTraceMotionNV = 5338, + OpTraceRayMotionNV = 5339, + OpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340, + 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, + OpAliasDomainDeclINTEL = 5911, + OpAliasScopeDeclINTEL = 5912, + OpAliasScopeListDeclINTEL = 5913, + 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, + OpControlBarrierArriveINTEL = 6142, + OpControlBarrierWaitINTEL = 6143, + OpGroupIMulKHR = 6401, + OpGroupFMulKHR = 6402, + OpGroupBitwiseAndKHR = 6403, + OpGroupBitwiseOrKHR = 6404, + OpGroupBitwiseXorKHR = 6405, + OpGroupLogicalAndKHR = 6406, + OpGroupLogicalOrKHR = 6407, + OpGroupLogicalXorKHR = 6408, + OpMax = 0x7fffffff, +}; + +#ifdef SPV_ENABLE_UTILITY_CODE +#ifndef __cplusplus +#include +#endif +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 OpExtInstWithForwardRefsKHR: *hasResult = true; *hasResultType = true; break; + case OpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; + case OpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; + case OpStencilAttachmentReadEXT: *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 OpGroupNonUniformRotateKHR: *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 OpTypeCooperativeMatrixKHR: *hasResult = true; *hasResultType = false; break; + case OpCooperativeMatrixLoadKHR: *hasResult = true; *hasResultType = true; break; + case OpCooperativeMatrixStoreKHR: *hasResult = false; *hasResultType = false; break; + case OpCooperativeMatrixMulAddKHR: *hasResult = true; *hasResultType = true; break; + case OpCooperativeMatrixLengthKHR: *hasResult = true; *hasResultType = true; break; + case OpConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break; + case OpSpecConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break; + case OpCompositeConstructReplicateEXT: *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 OpImageSampleWeightedQCOM: *hasResult = true; *hasResultType = true; break; + case OpImageBoxFilterQCOM: *hasResult = true; *hasResultType = true; break; + case OpImageBlockMatchSSDQCOM: *hasResult = true; *hasResultType = true; break; + case OpImageBlockMatchSADQCOM: *hasResult = true; *hasResultType = true; break; + case OpImageBlockMatchWindowSSDQCOM: *hasResult = true; *hasResultType = true; break; + case OpImageBlockMatchWindowSADQCOM: *hasResult = true; *hasResultType = true; break; + case OpImageBlockMatchGatherSSDQCOM: *hasResult = true; *hasResultType = true; break; + case OpImageBlockMatchGatherSADQCOM: *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 OpGroupNonUniformQuadAllKHR: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformQuadAnyKHR: *hasResult = true; *hasResultType = true; break; + case OpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectGetWorldToObjectNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetObjectToWorldNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetObjectRayDirectionNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetObjectRayOriginNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectGetShaderRecordBufferHandleNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetShaderBindingTableRecordIndexNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectRecordEmptyNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectTraceRayNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectRecordHitNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectRecordHitWithIndexNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectRecordMissNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectExecuteShaderNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectGetCurrentTimeNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetAttributesNV: *hasResult = false; *hasResultType = false; break; + case OpHitObjectGetHitKindNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetPrimitiveIndexNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetGeometryIndexNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetInstanceIdNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetInstanceCustomIndexNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetWorldRayDirectionNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetWorldRayOriginNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetRayTMaxNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetRayTMinNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectIsEmptyNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectIsHitNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectIsMissNV: *hasResult = true; *hasResultType = true; break; + case OpReorderThreadWithHitObjectNV: *hasResult = false; *hasResultType = false; break; + case OpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break; + case OpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break; + case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; + case OpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break; + case OpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; 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 OpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; 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 OpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break; + case OpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break; + case OpAliasScopeListDeclINTEL: *hasResult = true; *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; + case OpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break; + case OpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break; + case OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; + case OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; + case OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; + case OpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break; + case OpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break; + case OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; + case OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; + case OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; + } +} +#endif /* SPV_ENABLE_UTILITY_CODE */ + +// Overload bitwise operators for mask bit combining + +inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } +inline ImageOperandsMask operator&(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) & unsigned(b)); } +inline ImageOperandsMask operator^(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) ^ unsigned(b)); } +inline ImageOperandsMask operator~(ImageOperandsMask a) { return ImageOperandsMask(~unsigned(a)); } +inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } +inline FPFastMathModeMask operator&(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) & unsigned(b)); } +inline FPFastMathModeMask operator^(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) ^ unsigned(b)); } +inline FPFastMathModeMask operator~(FPFastMathModeMask a) { return FPFastMathModeMask(~unsigned(a)); } +inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } +inline SelectionControlMask operator&(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) & unsigned(b)); } +inline SelectionControlMask operator^(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) ^ unsigned(b)); } +inline SelectionControlMask operator~(SelectionControlMask a) { return SelectionControlMask(~unsigned(a)); } +inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } +inline LoopControlMask operator&(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) & unsigned(b)); } +inline LoopControlMask operator^(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) ^ unsigned(b)); } +inline LoopControlMask operator~(LoopControlMask a) { return LoopControlMask(~unsigned(a)); } +inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } +inline FunctionControlMask operator&(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) & unsigned(b)); } +inline FunctionControlMask operator^(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) ^ unsigned(b)); } +inline FunctionControlMask operator~(FunctionControlMask a) { return FunctionControlMask(~unsigned(a)); } +inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } +inline MemorySemanticsMask operator&(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) & unsigned(b)); } +inline MemorySemanticsMask operator^(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) ^ unsigned(b)); } +inline MemorySemanticsMask operator~(MemorySemanticsMask a) { return MemorySemanticsMask(~unsigned(a)); } +inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } +inline MemoryAccessMask operator&(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) & unsigned(b)); } +inline MemoryAccessMask operator^(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) ^ unsigned(b)); } +inline MemoryAccessMask operator~(MemoryAccessMask a) { return MemoryAccessMask(~unsigned(a)); } +inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } +inline KernelProfilingInfoMask operator&(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) & unsigned(b)); } +inline KernelProfilingInfoMask operator^(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) ^ unsigned(b)); } +inline KernelProfilingInfoMask operator~(KernelProfilingInfoMask a) { return KernelProfilingInfoMask(~unsigned(a)); } +inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } +inline RayFlagsMask operator&(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) & unsigned(b)); } +inline RayFlagsMask operator^(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) ^ unsigned(b)); } +inline RayFlagsMask operator~(RayFlagsMask a) { return RayFlagsMask(~unsigned(a)); } +inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } +inline FragmentShadingRateMask operator&(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) & unsigned(b)); } +inline FragmentShadingRateMask operator^(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) ^ unsigned(b)); } +inline FragmentShadingRateMask operator~(FragmentShadingRateMask a) { return FragmentShadingRateMask(~unsigned(a)); } +inline CooperativeMatrixOperandsMask operator|(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) | unsigned(b)); } +inline CooperativeMatrixOperandsMask operator&(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) & unsigned(b)); } +inline CooperativeMatrixOperandsMask operator^(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) ^ unsigned(b)); } +inline CooperativeMatrixOperandsMask operator~(CooperativeMatrixOperandsMask a) { return CooperativeMatrixOperandsMask(~unsigned(a)); } + +} // end namespace spv + +#endif // #ifndef spirv_HPP + diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h index 5249a5ba73..bd639d8f72 100644 --- a/SPIRV/spvIR.h +++ b/SPIRV/spvIR.h @@ -56,6 +56,7 @@ #include #include #include +#include namespace spv { @@ -96,10 +97,24 @@ class Instruction { Instruction(Id resultId, Id typeId, Op opCode) : resultId(resultId), typeId(typeId), opCode(opCode), block(nullptr) { } explicit Instruction(Op opCode) : resultId(NoResult), typeId(NoType), opCode(opCode), block(nullptr) { } virtual ~Instruction() {} + void reserveOperands(size_t count) { + operands.reserve(count); + idOperand.reserve(count); + } void addIdOperand(Id id) { + // ids can't be 0 + assert(id); operands.push_back(id); idOperand.push_back(true); } + // This method is potentially dangerous as it can break assumptions + // about SSA and lack of forward references. + void setIdOperand(unsigned idx, Id id) { + assert(id); + assert(idOperand[idx]); + operands[idx] = id; + } + void addImmediateOperand(unsigned int immediate) { operands.push_back(immediate); idOperand.push_back(false); @@ -188,6 +203,12 @@ class Instruction { // SPIR-V IR block. // +struct DebugSourceLocation { + int line; + int column; + spv::Id fileId; +}; + class Block { public: Block(Id id, Function& parent); @@ -198,12 +219,34 @@ class Block { Id getId() { return instructions.front()->getResultId(); } Function& getParent() const { return parent; } + // Returns true if the source location is actually updated. + // Note we still need the builder to insert the line marker instruction. This is just a tracker. + bool updateDebugSourceLocation(int line, int column, spv::Id fileId) { + if (currentSourceLoc && currentSourceLoc->line == line && currentSourceLoc->column == column && + currentSourceLoc->fileId == fileId) { + return false; + } + + currentSourceLoc = DebugSourceLocation{line, column, fileId}; + return true; + } + // Returns true if the scope is actually updated. + // Note we still need the builder to insert the debug scope instruction. This is just a tracker. + bool updateDebugScope(spv::Id scopeId) { + assert(scopeId); + if (currentDebugScope && *currentDebugScope == scopeId) { + return false; + } + + currentDebugScope = scopeId; + return true; + } void addInstruction(std::unique_ptr inst); void addPredecessor(Block* pred) { predecessors.push_back(pred); pred->successors.push_back(this);} void addLocalVariable(std::unique_ptr inst) { localVariables.push_back(std::move(inst)); } const std::vector& getPredecessors() const { return predecessors; } const std::vector& getSuccessors() const { return successors; } - const std::vector >& getInstructions() const { + std::vector >& getInstructions() { return instructions; } const std::vector >& getLocalVariables() const { return localVariables; } @@ -290,6 +333,12 @@ class Block { std::vector > localVariables; Function& parent; + // Track source location of the last source location marker instruction. + std::optional currentSourceLoc; + + // Track scope of the last debug scope instruction. + std::optional currentDebugScope; + // track whether this block is known to be uncreachable (not necessarily // true for all unreachable blocks, but should be set at least // for the extraneous ones introduced by the builder). @@ -321,7 +370,7 @@ void inReadableOrder(Block* root, std::function& getBlocks() const { return blocks; } void addLocalVariable(std::unique_ptr inst); Id getReturnType() const { return functionInstruction.getTypeId(); } + Id getFuncId() const { return functionInstruction.getResultId(); } + Id getFuncTypeId() const { return functionInstruction.getIdOperand(1); } void setReturnPrecision(Decoration precision) { if (precision == DecorationRelaxedPrecision) @@ -357,6 +408,15 @@ class Function { Decoration getReturnPrecision() const { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; } + void setDebugLineInfo(Id fileName, int line, int column) { + lineInstruction = std::unique_ptr{new Instruction(OpLine)}; + lineInstruction->reserveOperands(3); + lineInstruction->addIdOperand(fileName); + lineInstruction->addImmediateOperand(line); + lineInstruction->addImmediateOperand(column); + } + bool hasDebugLineInfo() const { return lineInstruction != nullptr; } + void setImplicitThis() { implicitThis = true; } bool hasImplicitThis() const { return implicitThis; } @@ -373,6 +433,11 @@ class Function { void dump(std::vector& out) const { + // OpLine + if (lineInstruction != nullptr) { + lineInstruction->dump(out); + } + // OpFunction functionInstruction.dump(out); @@ -386,17 +451,23 @@ class Function { end.dump(out); } + LinkageType getLinkType() const { return linkType; } + const char* getExportName() const { return exportName.c_str(); } + protected: Function(const Function&); Function& operator=(Function&); Module& parent; + std::unique_ptr lineInstruction; Instruction functionInstruction; std::vector parameterInstructions; std::vector blocks; bool implicitThis; // true if this is a member function expecting to be passed a 'this' as the first argument bool reducedPrecisionReturn; std::set reducedPrecisionParams; // list of parameter indexes that need a relaxed precision arg + LinkageType linkType; + std::string exportName; }; // @@ -456,11 +527,14 @@ class Module { // Add both // - the OpFunction instruction // - all the OpFunctionParameter instructions -__inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, Module& parent) - : parent(parent), functionInstruction(id, resultType, OpFunction), implicitThis(false), - reducedPrecisionReturn(false) +__inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, LinkageType linkage, const std::string& name, Module& parent) + : parent(parent), lineInstruction(nullptr), + functionInstruction(id, resultType, OpFunction), implicitThis(false), + reducedPrecisionReturn(false), + linkType(linkage) { // OpFunction + functionInstruction.reserveOperands(2); functionInstruction.addImmediateOperand(FunctionControlMaskNone); functionInstruction.addIdOperand(functionType); parent.mapInstruction(&functionInstruction); @@ -474,6 +548,11 @@ __inline Function::Function(Id id, Id resultType, Id functionType, Id firstParam parent.mapInstruction(param); parameterInstructions.push_back(param); } + + // If importing/exporting, save the function name (without the mangled parameters) for the linkage decoration + if (linkType != LinkageTypeMax) { + exportName = name.substr(0, name.find_first_of('(')); + } } __inline void Function::addLocalVariable(std::unique_ptr inst) diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index 2b163e7f55..30e8d03028 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2020 The Khronos Group Inc. +# Copyright (C) 2020-2023 The Khronos Group Inc. # # All rights reserved. # @@ -31,7 +31,7 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -find_host_package(PythonInterp 3 REQUIRED) +find_package(Python3 REQUIRED) set(GLSLANG_INTRINSIC_H "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/glsl_intrinsic_header.h") set(GLSLANG_INTRINSIC_PY "${CMAKE_CURRENT_SOURCE_DIR}/../gen_extension_headers.py") @@ -39,89 +39,83 @@ set(GLSLANG_INTRINSIC_HEADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../glslang/Extensi add_custom_command( OUTPUT ${GLSLANG_INTRINSIC_H} - COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_INTRINSIC_PY}" + COMMAND Python3::Interpreter "${GLSLANG_INTRINSIC_PY}" "-i" ${GLSLANG_INTRINSIC_HEADER_DIR} "-o" ${GLSLANG_INTRINSIC_H} DEPENDS ${GLSLANG_INTRINSIC_PY} COMMENT "Generating ${GLSLANG_INTRINSIC_H}") -#add_custom_target(glslangValidator DEPENDS ${GLSLANG_INTRINSIC_H}) - -add_library(glslang-default-resource-limits - ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/resource_limits_c.cpp) -set_property(TARGET glslang-default-resource-limits PROPERTY FOLDER glslang) -set_property(TARGET glslang-default-resource-limits PROPERTY POSITION_INDEPENDENT_CODE ON) - -target_include_directories(glslang-default-resource-limits - PUBLIC $ - PUBLIC $) - set(SOURCES StandAlone.cpp DirStackFileIncluder.h ${GLSLANG_INTRINSIC_H}) -add_executable(glslangValidator ${SOURCES}) -set_property(TARGET glslangValidator PROPERTY FOLDER tools) -glslang_set_link_args(glslangValidator) +add_executable(glslang-standalone ${SOURCES}) +if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") + target_compile_options(glslang-standalone PRIVATE -Wconversion) +elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC) + target_compile_options(glslang-standalone PRIVATE -Wshorten-64-to-32) +endif() +set_property(TARGET glslang-standalone PROPERTY FOLDER tools) +set_property(TARGET glslang-standalone PROPERTY OUTPUT_NAME glslang) +glslang_set_link_args(glslang-standalone) set(LIBRARIES glslang - SPIRV glslang-default-resource-limits) -if(ENABLE_SPVREMAPPER) - set(LIBRARIES ${LIBRARIES} SPVRemapper) -endif() - if(WIN32) set(LIBRARIES ${LIBRARIES} psapi) elseif(UNIX) - if(NOT ANDROID) + if(NOT ANDROID AND NOT QNX) set(LIBRARIES ${LIBRARIES} pthread) endif() endif() -target_link_libraries(glslangValidator ${LIBRARIES}) -target_include_directories(glslangValidator PUBLIC - $ - $) - -if(ENABLE_OPT) - target_include_directories(glslangValidator - PRIVATE ${spirv-tools_SOURCE_DIR}/include - ) -endif() +target_link_libraries(glslang-standalone ${LIBRARIES}) +target_include_directories(glslang-standalone PUBLIC + $) -if(ENABLE_SPVREMAPPER) - set(REMAPPER_SOURCES spirv-remap.cpp) - add_executable(spirv-remap ${REMAPPER_SOURCES}) - set_property(TARGET spirv-remap PROPERTY FOLDER tools) - glslang_set_link_args(spirv-remap) - target_link_libraries(spirv-remap ${LIBRARIES}) +if(ENABLE_SPIRV) + if(ENABLE_SPVREMAPPER) + set(REMAPPER_SOURCES spirv-remap.cpp) + add_executable(spirv-remap ${REMAPPER_SOURCES}) + set_property(TARGET spirv-remap PROPERTY FOLDER tools) + glslang_set_link_args(spirv-remap) + target_link_libraries(spirv-remap SPVRemapper ${LIBRARIES}) + endif() endif() if(WIN32) source_group("Source" FILES ${SOURCES}) endif() -if(ENABLE_GLSLANG_INSTALL) - install(TARGETS glslangValidator EXPORT glslangValidatorTargets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(EXPORT glslangValidatorTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) - - if(ENABLE_SPVREMAPPER) - install(TARGETS spirv-remap EXPORT spirv-remapTargets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(EXPORT spirv-remapTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) - endif() +# Create a symbolic link to glslang named glslangValidator for backwards compatibility +set(legacy_glslang_name "glslangValidator${CMAKE_EXECUTABLE_SUFFIX}") +set(link_method create_symlink) +if(WIN32 OR MINGW) + set(link_method copy_if_different) +endif() - if(BUILD_SHARED_LIBS) - install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - else() - install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +add_custom_command( + TARGET glslang-standalone POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E "${link_method}" "\$" "${legacy_glslang_name}" + WORKING_DIRECTORY "\$" + VERBATIM +) + +if(GLSLANG_ENABLE_INSTALL) + install(TARGETS glslang-standalone EXPORT glslang-targets) + + # Create the same symlink at install time + install(CODE "\ + message(STATUS \"Installing (${link_method}): \$ -> \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}\") + execute_process( + COMMAND \"\${CMAKE_COMMAND}\" -E ${link_method} [=[\$]=] [=[${legacy_glslang_name}]=] + WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}\" + ) + ") + + if(ENABLE_SPIRV) + if(ENABLE_SPVREMAPPER) + install(TARGETS spirv-remap EXPORT glslang-targets) + endif() endif() - install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) -endif() +endif(GLSLANG_ENABLE_INSTALL) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index f5ce6317f1..3288b887c7 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -41,25 +41,25 @@ #define _CRT_SECURE_NO_WARNINGS #endif -#include "ResourceLimits.h" +#include "glslang/Public/ResourceLimits.h" #include "Worklist.h" #include "DirStackFileIncluder.h" -#include "./../glslang/Include/ShHandle.h" #include "./../glslang/Public/ShaderLang.h" +#include "../glslang/MachineIndependent/localintermediate.h" #include "../SPIRV/GlslangToSpv.h" #include "../SPIRV/GLSL.std.450.h" -#include "../SPIRV/doc.h" #include "../SPIRV/disassemble.h" -#include -#include +#include +#include #include #include -#include +#include +#include #include #include -#include #include +#include #include "../glslang/OSDependent/osinclude.h" @@ -73,46 +73,50 @@ extern "C" { } // Command-line options -enum TOptions { - EOptionNone = 0, - EOptionIntermediate = (1 << 0), - EOptionSuppressInfolog = (1 << 1), - EOptionMemoryLeakMode = (1 << 2), - EOptionRelaxedErrors = (1 << 3), - EOptionGiveWarnings = (1 << 4), - EOptionLinkProgram = (1 << 5), - EOptionMultiThreaded = (1 << 6), - EOptionDumpConfig = (1 << 7), - EOptionDumpReflection = (1 << 8), - EOptionSuppressWarnings = (1 << 9), - EOptionDumpVersions = (1 << 10), - EOptionSpv = (1 << 11), - EOptionHumanReadableSpv = (1 << 12), - EOptionVulkanRules = (1 << 13), - EOptionDefaultDesktop = (1 << 14), - EOptionOutputPreprocessed = (1 << 15), - EOptionOutputHexadecimal = (1 << 16), - EOptionReadHlsl = (1 << 17), - EOptionCascadingErrors = (1 << 18), - EOptionAutoMapBindings = (1 << 19), - EOptionFlattenUniformArrays = (1 << 20), - EOptionNoStorageFormat = (1 << 21), - EOptionKeepUncalled = (1 << 22), - EOptionHlslOffsets = (1 << 23), - EOptionHlslIoMapping = (1 << 24), - EOptionAutoMapLocations = (1 << 25), - EOptionDebug = (1 << 26), - EOptionStdin = (1 << 27), - EOptionOptimizeDisable = (1 << 28), - EOptionOptimizeSize = (1 << 29), - EOptionInvertY = (1 << 30), - EOptionDumpBareVersion = (1 << 31), +enum TOptions : uint64_t { + EOptionNone = 0, + EOptionIntermediate = (1ull << 0), + EOptionSuppressInfolog = (1ull << 1), + EOptionMemoryLeakMode = (1ull << 2), + EOptionRelaxedErrors = (1ull << 3), + EOptionGiveWarnings = (1ull << 4), + EOptionLinkProgram = (1ull << 5), + EOptionMultiThreaded = (1ull << 6), + EOptionDumpConfig = (1ull << 7), + EOptionDumpReflection = (1ull << 8), + EOptionSuppressWarnings = (1ull << 9), + EOptionDumpVersions = (1ull << 10), + EOptionSpv = (1ull << 11), + EOptionHumanReadableSpv = (1ull << 12), + EOptionVulkanRules = (1ull << 13), + EOptionDefaultDesktop = (1ull << 14), + EOptionOutputPreprocessed = (1ull << 15), + EOptionOutputHexadecimal = (1ull << 16), + EOptionReadHlsl = (1ull << 17), + EOptionCascadingErrors = (1ull << 18), + EOptionAutoMapBindings = (1ull << 19), + EOptionFlattenUniformArrays = (1ull << 20), + EOptionNoStorageFormat = (1ull << 21), + EOptionKeepUncalled = (1ull << 22), + EOptionHlslOffsets = (1ull << 23), + EOptionHlslIoMapping = (1ull << 24), + EOptionAutoMapLocations = (1ull << 25), + EOptionDebug = (1ull << 26), + EOptionStdin = (1ull << 27), + EOptionOptimizeDisable = (1ull << 28), + EOptionOptimizeSize = (1ull << 29), + EOptionInvertY = (1ull << 30), + EOptionDumpBareVersion = (1ull << 31), + EOptionCompileOnly = (1ull << 32), + EOptionDisplayErrorColumn = (1ull << 33), }; bool targetHlslFunctionality1 = false; bool SpvToolsDisassembler = false; bool SpvToolsValidate = false; bool NaNClamp = false; bool stripDebugInfo = false; +bool emitNonSemanticShaderDebugInfo = false; +bool emitNonSemanticShaderDebugSource = false; bool beQuiet = false; bool VulkanRulesRelaxed = false; bool autoSampledTextures = false; @@ -141,13 +145,13 @@ void FreeFileData(char* data); void InfoLogMsg(const char* msg, const char* name, const int num); // Globally track if any compile or link failure. -bool CompileFailed = false; -bool LinkFailed = false; +std::atomic CompileFailed{0}; +std::atomic LinkFailed{0}; +std::atomic CompileOrLinkFailed{0}; // array of unique places to leave the shader names and infologs for the asynchronous compiles std::vector> WorkItems; -TBuiltInResource Resources; std::string ConfigFile; // @@ -156,18 +160,16 @@ std::string ConfigFile; void ProcessConfigFile() { if (ConfigFile.size() == 0) - Resources = glslang::DefaultTBuiltInResource; -#ifndef GLSLANG_WEB + *GetResources() = *GetDefaultResources(); else { char* configString = ReadFileData(ConfigFile.c_str()); - glslang::DecodeResourceLimits(&Resources, configString); + DecodeResourceLimits(GetResources(), configString); FreeFileData(configString); } -#endif } int ReflectOptions = EShReflectionDefault; -int Options = 0; +std::underlying_type_t Options = EOptionNone; const char* ExecutableName = nullptr; const char* binaryFileName = nullptr; const char* depencyFileName = nullptr; @@ -178,6 +180,8 @@ const char* variableName = nullptr; bool HlslEnable16BitTypes = false; bool HlslDX9compatible = false; bool HlslDxPositionW = false; +bool EnhancedMsgs = false; +bool AbsolutePath = false; bool DumpBuiltinSymbols = false; std::vector IncludeDirectoryList; @@ -191,6 +195,9 @@ glslang::EShTargetClientVersion ClientVersion; // not valid until Client i glslang::EShTargetLanguage TargetLanguage = glslang::EShTargetNone; glslang::EShTargetLanguageVersion TargetVersion; // not valid until TargetLanguage is set +// GLSL version +int GlslVersion = 0; // GLSL version specified on CLI, overrides #version in shader source + std::vector Processes; // what should be recorded by OpModuleProcessed, or equivalent // Per descriptor-set binding base data @@ -253,6 +260,17 @@ class TPreamble { text.append("\n"); } + void addText(std::string preambleText) + { + fixLine(preambleText); + + Processes.push_back("preamble-text"); + Processes.back().append(preambleText); + + text.append(preambleText); + text.append("\n"); + } + protected: void fixLine(std::string& line) { @@ -289,8 +307,8 @@ const char* GetBinaryName(EShLanguage stage) case EShLangClosestHit: name = "rchit.spv"; break; case EShLangMiss: name = "rmiss.spv"; break; case EShLangCallable: name = "rcall.spv"; break; - case EShLangMeshNV: name = "mesh.spv"; break; - case EShLangTaskNV: name = "task.spv"; break; + case EShLangMesh : name = "mesh.spv"; break; + case EShLangTask : name = "task.spv"; break; default: name = "unknown"; break; } } else @@ -499,7 +517,7 @@ void ProcessGlobalBlockSettings(int& argc, char**& argv, std::string* name, unsi if (set) { errno = 0; - int setVal = ::strtol(argv[curArg], NULL, 10); + int setVal = static_cast(::strtol(argv[curArg], nullptr, 10)); if (errno || setVal < 0) { printf("%s: invalid set\n", argv[curArg]); usage(); @@ -511,7 +529,7 @@ void ProcessGlobalBlockSettings(int& argc, char**& argv, std::string* name, unsi if (binding) { errno = 0; - int bindingVal = ::strtol(argv[curArg], NULL, 10); + int bindingVal = static_cast(::strtol(argv[curArg], nullptr, 10)); if (errno || bindingVal < 0) { printf("%s: invalid binding\n", argv[curArg]); usage(); @@ -589,12 +607,12 @@ void ProcessArguments(std::vector>& workItem const auto getUniformOverride = [getStringOperand]() { const char *arg = getStringOperand("-u:"); const char *split = strchr(arg, ':'); - if (split == NULL) { + if (split == nullptr) { printf("%s: missing location\n", arg); exit(EFailUsage); } errno = 0; - int location = ::strtol(split + 1, NULL, 10); + int location = static_cast(::strtol(split + 1, nullptr, 10)); if (errno) { printf("%s: invalid location\n", arg); exit(EFailUsage); @@ -621,7 +639,7 @@ void ProcessArguments(std::vector>& workItem } else if (lowerword == "uniform-base") { if (argc <= 1) Error("no provided", lowerword.c_str()); - uniformBase = ::strtol(argv[1], NULL, 10); + uniformBase = static_cast(::strtol(argv[1], nullptr, 10)); bumpArg(); break; } else if (lowerword == "client") { @@ -653,6 +671,48 @@ void ProcessArguments(std::vector>& workItem lowerword == "flatten-uniform-array" || lowerword == "fua") { Options |= EOptionFlattenUniformArrays; + } else if (lowerword == "glsl-version") { + if (argc > 1) { + if (strcmp(argv[1], "100") == 0) { + GlslVersion = 100; + } else if (strcmp(argv[1], "110") == 0) { + GlslVersion = 110; + } else if (strcmp(argv[1], "120") == 0) { + GlslVersion = 120; + } else if (strcmp(argv[1], "130") == 0) { + GlslVersion = 130; + } else if (strcmp(argv[1], "140") == 0) { + GlslVersion = 140; + } else if (strcmp(argv[1], "150") == 0) { + GlslVersion = 150; + } else if (strcmp(argv[1], "300es") == 0) { + GlslVersion = 300; + } else if (strcmp(argv[1], "310es") == 0) { + GlslVersion = 310; + } else if (strcmp(argv[1], "320es") == 0) { + GlslVersion = 320; + } else if (strcmp(argv[1], "330") == 0) { + GlslVersion = 330; + } else if (strcmp(argv[1], "400") == 0) { + GlslVersion = 400; + } else if (strcmp(argv[1], "410") == 0) { + GlslVersion = 410; + } else if (strcmp(argv[1], "420") == 0) { + GlslVersion = 420; + } else if (strcmp(argv[1], "430") == 0) { + GlslVersion = 430; + } else if (strcmp(argv[1], "440") == 0) { + GlslVersion = 440; + } else if (strcmp(argv[1], "450") == 0) { + GlslVersion = 450; + } else if (strcmp(argv[1], "460") == 0) { + GlslVersion = 460; + } else + Error("--glsl-version expected one of: 100, 110, 120, 130, 140, 150,\n" + "300es, 310es, 320es, 330\n" + "400, 410, 420, 430, 440, 450, 460"); + } + bumpArg(); } else if (lowerword == "hlsl-offsets") { Options |= EOptionHlslOffsets; } else if (lowerword == "hlsl-iomap" || @@ -665,7 +725,11 @@ void ProcessArguments(std::vector>& workItem HlslDX9compatible = true; } else if (lowerword == "hlsl-dx-position-w") { HlslDxPositionW = true; - } else if (lowerword == "auto-sampled-textures") { + } else if (lowerword == "enhanced-msgs") { + EnhancedMsgs = true; + } else if (lowerword == "absolute-path") { + AbsolutePath = true; + } else if (lowerword == "auto-sampled-textures") { autoSampledTextures = true; } else if (lowerword == "invert-y" || // synonyms lowerword == "iy") { @@ -678,6 +742,13 @@ void ProcessArguments(std::vector>& workItem } else if (lowerword == "no-storage-format" || // synonyms lowerword == "nsf") { Options |= EOptionNoStorageFormat; + } else if (lowerword == "preamble-text" || + lowerword == "p") { + if (argc > 1) + UserPreamble.addText(argv[1]); + else + Error("expects ", argv[0]); + bumpArg(); } else if (lowerword == "relaxed-errors") { Options |= EOptionRelaxedErrors; } else if (lowerword == "reflect-strict-array-suffix") { @@ -767,6 +838,9 @@ void ProcessArguments(std::vector>& workItem } else if (strcmp(argv[1], "vulkan1.2") == 0) { setVulkanSpv(); ClientVersion = glslang::EShTargetVulkan_1_2; + } else if (strcmp(argv[1], "vulkan1.3") == 0) { + setVulkanSpv(); + ClientVersion = glslang::EShTargetVulkan_1_3; } else if (strcmp(argv[1], "opengl") == 0) { setOpenGlSpv(); ClientVersion = glslang::EShTargetOpenGL_450; @@ -793,7 +867,7 @@ void ProcessArguments(std::vector>& workItem TargetVersion = glslang::EShTargetSpv_1_6; } else Error("--target-env expected one of: vulkan1.0, vulkan1.1, vulkan1.2,\n" - "opengl, spirv1.0, spirv1.1, spirv1.2, spirv1.3,\n" + "vulkan1.3, opengl, spirv1.0, spirv1.1, spirv1.2, spirv1.3,\n" "spirv1.4, spirv1.5 or spirv1.6"); } bumpArg(); @@ -821,6 +895,10 @@ void ProcessArguments(std::vector>& workItem bumpArg(); } else if (lowerword == "version") { Options |= EOptionDumpVersions; + } else if (lowerword == "no-link") { + Options |= EOptionCompileOnly; + } else if (lowerword == "error-column") { + Options |= EOptionDisplayErrorColumn; } else if (lowerword == "help") { usage(); break; @@ -874,6 +952,9 @@ void ProcessArguments(std::vector>& workItem else Error("unknown -O option"); break; + case 'P': + UserPreamble.addText(getStringOperand("-P")); + break; case 'R': VulkanRulesRelaxed = true; break; @@ -918,11 +999,21 @@ void ProcessArguments(std::vector>& workItem case 'g': // Override previous -g or -g0 argument stripDebugInfo = false; + emitNonSemanticShaderDebugInfo = false; Options &= ~EOptionDebug; if (argv[0][2] == '0') stripDebugInfo = true; - else + else { Options |= EOptionDebug; + if (argv[0][2] == 'V') { + emitNonSemanticShaderDebugInfo = true; + if (argv[0][3] == 'S') { + emitNonSemanticShaderDebugSource = true; + } else { + emitNonSemanticShaderDebugSource = false; + } + } + } break; case 'h': usage(); @@ -1019,6 +1110,10 @@ void ProcessArguments(std::vector>& workItem TargetLanguage = glslang::EShTargetSpv; TargetVersion = glslang::EShTargetSpv_1_5; break; + case glslang::EShTargetVulkan_1_3: + TargetLanguage = glslang::EShTargetSpv; + TargetVersion = glslang::EShTargetSpv_1_6; + break; case glslang::EShTargetOpenGL_450: TargetLanguage = glslang::EShTargetSpv; TargetVersion = glslang::EShTargetSpv_1_0; @@ -1066,6 +1161,12 @@ void SetMessageOptions(EShMessages& messages) messages = (EShMessages)(messages | EShMsgHlslDX9Compatible); if (DumpBuiltinSymbols) messages = (EShMessages)(messages | EShMsgBuiltinSymbolTable); + if (EnhancedMsgs) + messages = (EShMessages)(messages | EShMsgEnhanced); + if (AbsolutePath) + messages = (EShMessages)(messages | EShMsgAbsolutePath); + if (Options & EOptionDisplayErrorColumn) + messages = (EShMessages)(messages | EShMsgDisplayErrorColumn); } // @@ -1076,10 +1177,11 @@ void CompileShaders(glslang::TWorklist& worklist) if (Options & EOptionDebug) Error("cannot generate debug information unless linking to generate code"); + // NOTE: TWorkList::remove is thread-safe glslang::TWorkItem* workItem; if (Options & EOptionStdin) { if (worklist.remove(workItem)) { - ShHandle compiler = ShConstructCompiler(FindLanguage("stdin"), Options); + ShHandle compiler = ShConstructCompiler(FindLanguage("stdin"), 0); if (compiler == nullptr) return; @@ -1092,10 +1194,11 @@ void CompileShaders(glslang::TWorklist& worklist) } } else { while (worklist.remove(workItem)) { - ShHandle compiler = ShConstructCompiler(FindLanguage(workItem->name), Options); - if (compiler == 0) + ShHandle compiler = ShConstructCompiler(FindLanguage(workItem->name), 0); + if (compiler == nullptr) return; + CompileFile(workItem->name.c_str(), compiler); if (! (Options & EOptionSuppressInfolog)) @@ -1156,6 +1259,27 @@ struct ShaderCompUnit { } }; +// Writes a string into a depfile, escaping some special characters following the Makefile rules. +static void writeEscapedDepString(std::ofstream& file, const std::string& str) +{ + for (char c : str) { + switch (c) { + case ' ': + case ':': + case '#': + case '[': + case ']': + case '\\': + file << '\\'; + break; + case '$': + file << '$'; + break; + } + file << c; + } +} + // Writes a depfile similar to gcc -MMD foo.c bool writeDepFile(std::string depfile, std::vector& binaryFiles, const std::vector& sources) { @@ -1163,10 +1287,12 @@ bool writeDepFile(std::string depfile, std::vector& binaryFiles, co if (file.fail()) return false; - for (auto it = binaryFiles.begin(); it != binaryFiles.end(); it++) { - file << *it << ":"; - for (auto it = sources.begin(); it != sources.end(); it++) { - file << " " << *it; + for (auto binaryFile = binaryFiles.begin(); binaryFile != binaryFiles.end(); binaryFile++) { + writeEscapedDepString(file, *binaryFile); + file << ":"; + for (auto sourceFile = sources.begin(); sourceFile != sources.end(); sourceFile++) { + file << " "; + writeEscapedDepString(file, *sourceFile); } file << std::endl; } @@ -1200,13 +1326,14 @@ void CompileAndLinkShaderUnits(std::vector compUnits) // glslang::TProgram& program = *new glslang::TProgram; + const bool compileOnly = (Options & EOptionCompileOnly) != 0; for (auto it = compUnits.cbegin(); it != compUnits.cend(); ++it) { const auto &compUnit = *it; for (int i = 0; i < compUnit.count; i++) { sources.push_back(compUnit.fileNameList[i]); } glslang::TShader* shader = new glslang::TShader(compUnit.stage); - shader->setStringsWithLengthsAndNames(compUnit.text, NULL, compUnit.fileNameList, compUnit.count); + shader->setStringsWithLengthsAndNames(compUnit.text, nullptr, compUnit.fileNameList, compUnit.count); if (entryPointName) shader->setEntryPoint(entryPointName); if (sourceEntryPointName) { @@ -1216,6 +1343,11 @@ void CompileAndLinkShaderUnits(std::vector compUnits) shader->setSourceEntryPoint(sourceEntryPointName); } + if (compileOnly) + shader->setCompileOnly(); + + shader->setOverrideVersion(GlslVersion); + std::string intrinsicString = getIntrinsic(compUnit.text, compUnit.count); PreambleString = ""; @@ -1228,7 +1360,6 @@ void CompileAndLinkShaderUnits(std::vector compUnits) shader->setPreamble(PreambleString.c_str()); shader->addProcesses(Processes); -#ifndef GLSLANG_WEB // Set IO mapper binding shift values for (int r = 0; r < glslang::EResCount; ++r) { const glslang::TResourceType res = glslang::TResourceType(r); @@ -1260,7 +1391,6 @@ void CompileAndLinkShaderUnits(std::vector compUnits) } shader->setUniformLocationBase(uniformBase); -#endif if (VulkanRulesRelaxed) { for (auto& storageOverride : blockStorageOverrides) { @@ -1294,6 +1424,12 @@ void CompileAndLinkShaderUnits(std::vector compUnits) if (HlslDxPositionW) shader->setDxPositionW(true); + if (EnhancedMsgs) + shader->setEnhancedMsgs(); + + if (emitNonSemanticShaderDebugInfo) + shader->setDebugInfo(true); + // Set up the environment, some subsettings take precedence over earlier // ways of setting things. if (Options & EOptionSpv) { @@ -1314,24 +1450,23 @@ void CompileAndLinkShaderUnits(std::vector compUnits) const int defaultVersion = Options & EOptionDefaultDesktop ? 110 : 100; -#ifndef GLSLANG_WEB if (Options & EOptionOutputPreprocessed) { std::string str; - if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, false, messages, &str, includer)) { + if (shader->preprocess(GetResources(), defaultVersion, ENoProfile, false, false, messages, &str, includer)) { PutsIfNonEmpty(str.c_str()); } else { - CompileFailed = true; + CompileFailed = 1; } StderrIfNonEmpty(shader->getInfoLog()); StderrIfNonEmpty(shader->getInfoDebugLog()); continue; } -#endif - if (! shader->parse(&Resources, defaultVersion, false, messages, includer)) - CompileFailed = true; + if (! shader->parse(GetResources(), defaultVersion, false, messages, includer)) + CompileFailed = 1; - program.addShader(shader); + if (!compileOnly) + program.addShader(shader); if (! (Options & EOptionSuppressInfolog) && ! (Options & EOptionMemoryLeakMode)) { @@ -1346,77 +1481,102 @@ void CompileAndLinkShaderUnits(std::vector compUnits) // Program-level processing... // - // Link - if (! (Options & EOptionOutputPreprocessed) && ! program.link(messages)) - LinkFailed = true; - -#ifndef GLSLANG_WEB - // Map IO - if (Options & EOptionSpv) { - if (!program.mapIO()) + if (!compileOnly) { + // Link + if (!(Options & EOptionOutputPreprocessed) && !program.link(messages)) LinkFailed = true; - } -#endif - // Report - if (! (Options & EOptionSuppressInfolog) && - ! (Options & EOptionMemoryLeakMode)) { - PutsIfNonEmpty(program.getInfoLog()); - PutsIfNonEmpty(program.getInfoDebugLog()); - } + // Map IO + if (Options & EOptionSpv) { + if (!program.mapIO()) + LinkFailed = true; + } -#ifndef GLSLANG_WEB - // Reflect - if (Options & EOptionDumpReflection) { - program.buildReflection(ReflectOptions); - program.dumpReflection(); + // Report + if (!(Options & EOptionSuppressInfolog) && !(Options & EOptionMemoryLeakMode)) { + PutsIfNonEmpty(program.getInfoLog()); + PutsIfNonEmpty(program.getInfoDebugLog()); + } + + // Reflect + if (Options & EOptionDumpReflection) { + program.buildReflection(ReflectOptions); + program.dumpReflection(); + } } -#endif std::vector outputFiles; // Dump SPIR-V if (Options & EOptionSpv) { - if (CompileFailed || LinkFailed) +#ifdef ENABLE_SPIRV + CompileOrLinkFailed.fetch_or(CompileFailed); + CompileOrLinkFailed.fetch_or(LinkFailed); + if (static_cast(CompileOrLinkFailed.load())) printf("SPIR-V is not generated for failed compile or link\n"); else { - for (int stage = 0; stage < EShLangCount; ++stage) { - if (program.getIntermediate((EShLanguage)stage)) { - std::vector spirv; - spv::SpvBuildLogger logger; - glslang::SpvOptions spvOptions; - if (Options & EOptionDebug) - spvOptions.generateDebugInfo = true; - else if (stripDebugInfo) - spvOptions.stripDebugInfo = true; - spvOptions.disableOptimizer = (Options & EOptionOptimizeDisable) != 0; - spvOptions.optimizeSize = (Options & EOptionOptimizeSize) != 0; - spvOptions.disassemble = SpvToolsDisassembler; - spvOptions.validate = SpvToolsValidate; - glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), spirv, &logger, &spvOptions); - - // Dump the spv to a file or stdout, etc., but only if not doing - // memory/perf testing, as it's not internal to programmatic use. - if (! (Options & EOptionMemoryLeakMode)) { - printf("%s", logger.getAllMessages().c_str()); - if (Options & EOptionOutputHexadecimal) { - glslang::OutputSpvHex(spirv, GetBinaryName((EShLanguage)stage), variableName); - } else { - glslang::OutputSpvBin(spirv, GetBinaryName((EShLanguage)stage)); + std::vector intermediates; + if (!compileOnly) { + for (int stage = 0; stage < EShLangCount; ++stage) { + if (auto* i = program.getIntermediate((EShLanguage)stage)) { + intermediates.emplace_back(i); + } + } + } else { + for (const auto* shader : shaders) { + if (auto* i = shader->getIntermediate()) { + intermediates.emplace_back(i); + } + } + } + for (auto* intermediate : intermediates) { + std::vector spirv; + spv::SpvBuildLogger logger; + glslang::SpvOptions spvOptions; + if (Options & EOptionDebug) { + spvOptions.generateDebugInfo = true; + if (emitNonSemanticShaderDebugInfo) { + spvOptions.emitNonSemanticShaderDebugInfo = true; + if (emitNonSemanticShaderDebugSource) { + spvOptions.emitNonSemanticShaderDebugSource = true; } - - outputFiles.push_back(GetBinaryName((EShLanguage)stage)); -#ifndef GLSLANG_WEB - if (!SpvToolsDisassembler && (Options & EOptionHumanReadableSpv)) - spv::Disassemble(std::cout, spirv); -#endif } + } else if (stripDebugInfo) + spvOptions.stripDebugInfo = true; + spvOptions.disableOptimizer = (Options & EOptionOptimizeDisable) != 0; + spvOptions.optimizeSize = (Options & EOptionOptimizeSize) != 0; + spvOptions.disassemble = SpvToolsDisassembler; + spvOptions.validate = SpvToolsValidate; + spvOptions.compileOnly = compileOnly; + glslang::GlslangToSpv(*intermediate, spirv, &logger, &spvOptions); + + // Dump the spv to a file or stdout, etc., but only if not doing + // memory/perf testing, as it's not internal to programmatic use. + if (!(Options & EOptionMemoryLeakMode)) { + printf("%s", logger.getAllMessages().c_str()); + const auto filename = GetBinaryName(intermediate->getStage()); + if (Options & EOptionOutputHexadecimal) { + if (!glslang::OutputSpvHex(spirv, filename, variableName)) + exit(EFailUsage); + } else { + if (!glslang::OutputSpvBin(spirv, filename)) + exit(EFailUsage); + } + + outputFiles.push_back(filename); + if (!SpvToolsDisassembler && (Options & EOptionHumanReadableSpv)) + spv::Disassemble(std::cout, spirv); } } } +#else + Error("This configuration of glslang does not have SPIR-V support"); +#endif } - if (depencyFileName && !(CompileFailed || LinkFailed)) { + CompileOrLinkFailed.fetch_or(CompileFailed); + CompileOrLinkFailed.fetch_or(LinkFailed); + if (depencyFileName && !static_cast(CompileOrLinkFailed.load())) { std::set includedFiles = includer.getIncludedFiles(); sources.insert(sources.end(), includedFiles.begin(), includedFiles.end()); @@ -1504,30 +1664,38 @@ int singleMain() workList.add(item.get()); }); -#ifndef GLSLANG_WEB if (Options & EOptionDumpConfig) { - printf("%s", glslang::GetDefaultTBuiltInResourceString().c_str()); + printf("%s", GetDefaultTBuiltInResourceString().c_str()); if (workList.empty()) return ESuccess; } -#endif if (Options & EOptionDumpBareVersion) { - printf("%d:%d.%d.%d%s\n", glslang::GetSpirvGeneratorVersion(), GLSLANG_VERSION_MAJOR, GLSLANG_VERSION_MINOR, + int spirvGeneratorVersion = 0; +#ifdef ENABLE_SPIRV + spirvGeneratorVersion = glslang::GetSpirvGeneratorVersion(); +#endif + printf("%d:%d.%d.%d%s\n", spirvGeneratorVersion, GLSLANG_VERSION_MAJOR, GLSLANG_VERSION_MINOR, GLSLANG_VERSION_PATCH, GLSLANG_VERSION_FLAVOR); if (workList.empty()) return ESuccess; } else if (Options & EOptionDumpVersions) { - printf("Glslang Version: %d:%d.%d.%d%s\n", glslang::GetSpirvGeneratorVersion(), GLSLANG_VERSION_MAJOR, + int spirvGeneratorVersion = 0; +#ifdef ENABLE_SPIRV + spirvGeneratorVersion = glslang::GetSpirvGeneratorVersion(); +#endif + printf("Glslang Version: %d:%d.%d.%d%s\n", spirvGeneratorVersion, GLSLANG_VERSION_MAJOR, GLSLANG_VERSION_MINOR, GLSLANG_VERSION_PATCH, GLSLANG_VERSION_FLAVOR); printf("ESSL Version: %s\n", glslang::GetEsslVersionString()); printf("GLSL Version: %s\n", glslang::GetGlslVersionString()); std::string spirvVersion; +#if ENABLE_SPIRV glslang::GetSpirvVersion(spirvVersion); +#endif printf("SPIR-V Version %s\n", spirvVersion.c_str()); printf("GLSL.std.450 Version %d, Revision %d\n", GLSLstd450Version, GLSLstd450Revision); printf("Khronos Tool ID %d\n", glslang::GetKhronosToolId()); - printf("SPIR-V Generator Version %d\n", glslang::GetSpirvGeneratorVersion()); + printf("SPIR-V Generator Version %d\n", spirvGeneratorVersion); printf("GL_KHR_vulkan_glsl version %d\n", 100); printf("ARB_GL_gl_spirv version %d\n", 100); if (workList.empty()) @@ -1594,9 +1762,9 @@ int singleMain() ShFinalize(); } - if (CompileFailed) + if (CompileFailed.load()) return EFailCompile; - if (LinkFailed) + if (LinkFailed.load()) return EFailLink; return 0; @@ -1695,9 +1863,9 @@ EShLanguage FindLanguage(const std::string& name, bool parseStageName) else if (stageName == "rcall") return EShLangCallable; else if (stageName == "mesh") - return EShLangMeshNV; + return EShLangMesh; else if (stageName == "task") - return EShLangTaskNV; + return EShLangTask; usage(); return EShLangVertex; @@ -1727,12 +1895,13 @@ void CompileFile(const char* fileName, ShHandle compiler) SetMessageOptions(messages); if (UserPreamble.isSet()) - Error("-D and -U options require -l (linking)\n"); + Error("-D, -U and -P options require -l (linking)\n"); for (int i = 0; i < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++i) { for (int j = 0; j < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++j) { // ret = ShCompile(compiler, shaderStrings, NumShaderStrings, lengths, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages); - ret = ShCompile(compiler, &shaderString, 1, nullptr, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages); + ret = ShCompile(compiler, &shaderString, 1, nullptr, EShOptNone, GetResources(), 0, + (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages, fileName); // const char* multi[12] = { "# ve", "rsion", " 300 e", "s", "\n#err", // "or should be l", "ine 1", "string 5\n", "float glo", "bal", // ";\n#error should be line 2\n void main() {", "global = 2.3;}" }; @@ -1756,7 +1925,7 @@ void CompileFile(const char* fileName, ShHandle compiler) // void usage() { - printf("Usage: glslangValidator [option]... [file]...\n" + printf("Usage: glslang [option]... [file]...\n" "\n" "'file' can end in . for auto-stage classification, where is:\n" " .conf to provide a config file that replaces the default configuration\n" @@ -1797,6 +1966,9 @@ void usage() " is searched first, followed by left-to-right order of -I\n" " -Od disables optimization; may cause illegal SPIR-V for HLSL\n" " -Os optimizes SPIR-V to minimize size\n" + " -P | --preamble-text | --P \n" + " inject custom preamble text, which is treated as if it\n" + " appeared immediately after the version declaration (if any).\n" " -R use relaxed verification rules for generating Vulkan SPIR-V,\n" " allowing the use of default uniforms, atomic_uints, and\n" " gl_VertexID and gl_InstanceID keywords.\n" @@ -1821,6 +1993,8 @@ void usage() " SPV_GOOGLE_hlsl_functionality1 extension\n" " -g generate debug information\n" " -g0 strip debug information\n" + " -gV generate nonsemantic shader debug information\n" + " -gVS generate nonsemantic shader debug information with source\n" " -h print this usage message\n" " -i intermediate tree (glslang AST) is printed out\n" " -l link all input files together to form a single module\n" @@ -1842,7 +2016,8 @@ void usage() " without explicit bindings\n" " --auto-map-locations | --aml automatically locate input/output lacking\n" " 'location' (fragile, not cross stage)\n" - " --auto-sampled-textures Removes sampler variables and converts\n" + " --absolute-path Prints absolute path for messages\n" + " --auto-sampled-textures Removes sampler variables and converts\n" " existing textures to sampled textures\n" " --client {vulkan|opengl} see -V and -G\n" " --depfile writes depfile for build systems\n" @@ -1850,6 +2025,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" @@ -1860,6 +2040,8 @@ void usage() " --hlsl-dx-position-w W component of SV_Position in HLSL fragment\n" " shaders compatible with DirectX\n" " --invert-y | --iy invert position.Y output in vertex shader\n" + " --enhanced-msgs print more readable error messages (GLSL only)\n" + " --error-column display the column of the error along the line\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" @@ -1934,7 +2116,7 @@ void usage() " --sep synonym for --source-entrypoint\n" " --stdin read from stdin instead of from a file;\n" " requires providing the shader stage using -S\n" - " --target-env {vulkan1.0 | vulkan1.1 | vulkan1.2 | opengl |\n" + " --target-env {vulkan1.0 | vulkan1.1 | vulkan1.2 | vulkan1.3 | opengl |\n" " spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3 | spirv1.4 |\n" " spirv1.5 | spirv1.6}\n" " Set the execution environment that the\n" @@ -1945,12 +2127,15 @@ void usage() " * spirv1.0 under --target-env vulkan1.0\n" " * spirv1.3 under --target-env vulkan1.1\n" " * spirv1.5 under --target-env vulkan1.2\n" + " * spirv1.6 under --target-env vulkan1.3\n" " Multiple --target-env can be specified.\n" " --variable-name \n" " --vn creates a C header file that contains a\n" " uint32_t array named \n" " initialized with the shader binary code\n" - ); + " --no-link Only compile shader; do not link (GLSL-only)\n" + " NOTE: this option will set the export linkage\n" + " attribute on all functions\n"); exit(EFailUsage); } @@ -2000,6 +2185,20 @@ char* ReadFileData(const char* fileName) fseek(in, 0, SEEK_SET); + if (count > 3) { + unsigned char head[3]; + if (fread(head, 1, 3, in) == 3) { + if (head[0] == 0xef && head[1] == 0xbb && head[2] == 0xbf) { + // skip BOM + count -= 3; + } else { + fseek(in, 0, SEEK_SET); + } + } else { + Error("can't read input file"); + } + } + char* return_data = (char*)malloc(count + 1); // freed in FreeFileData() if ((int)fread(return_data, 1, count, in) != count) { free(return_data); diff --git a/StandAlone/Worklist.h b/StandAlone/Worklist.h index 91b6f516be..dc726270a5 100644 --- a/StandAlone/Worklist.h +++ b/StandAlone/Worklist.h @@ -35,7 +35,6 @@ #ifndef WORKLIST_H_INCLUDED #define WORKLIST_H_INCLUDED -#include "../glslang/OSDependent/osinclude.h" #include #include #include diff --git a/StandAlone/spirv-remap.cpp b/StandAlone/spirv-remap.cpp index 48878c3af0..1bd4a2d6a6 100644 --- a/StandAlone/spirv-remap.cpp +++ b/StandAlone/spirv-remap.cpp @@ -37,7 +37,11 @@ #include #include #include +#include +// +// Include remapper +// #include "../SPIRV/SPVRemapper.h" namespace { @@ -105,6 +109,32 @@ namespace { } } + // Read strings from a file + void read(std::vector& strings, const std::string& inFilename, int verbosity) + { + std::ifstream fp; + + if (verbosity > 0) + logHandler(std::string(" reading: ") + inFilename); + + strings.clear(); + fp.open(inFilename, std::fstream::in); + + if (fp.fail()) + errHandler("error opening file for read: "); + + std::string line; + while (std::getline(fp, line)) + { + // Ignore empty lines and lines starting with the comment marker '#'. + if (line.length() == 0 || line[0] == '#') { + continue; + } + + strings.push_back(line); + } + } + void write(std::vector& spv, const std::string& outFile, int verbosity) { if (outFile.empty()) @@ -131,7 +161,7 @@ namespace { } // Print helpful usage message to stdout, and exit - void usage(const char* const name, const char* const msg = 0) + void usage(const char* const name, const char* const msg = nullptr) { if (msg) std::cout << msg << std::endl << std::endl; @@ -144,8 +174,9 @@ namespace { << " [--dce (all|types|funcs)]" << " [--opt (all|loadstore)]" << " [--strip-all | --strip all | -s]" + << " [--strip-white-list]" << " [--do-everything]" - << " --input | -i file1 [file2...] --output|-o DESTDIR" + << " --input | -i file1 [file2...] --output|-o DESTDIR | destfile1 [destfile2...]" << std::endl; std::cout << " " << basename(name) << " [--version | -V]" << std::endl; @@ -155,29 +186,45 @@ namespace { } // grind through each SPIR in turn - void execute(const std::vector& inputFile, const std::string& outputDir, - int opts, int verbosity) + void execute(const std::vector& inputFiles, + const std::vector& outputDirOrFiles, + const bool isSingleOutputDir, + const std::string& whiteListFile, + int opts, + int verbosity) { - for (auto it = inputFile.cbegin(); it != inputFile.cend(); ++it) { - const std::string &filename = *it; + std::vector whiteListStrings; + if (!whiteListFile.empty()) + read(whiteListStrings, whiteListFile, verbosity); + + for (std::size_t ii=0; ii spv; - read(spv, filename, verbosity); - spv::spirvbin_t(verbosity).remap(spv, opts); + read(spv, inputFiles[ii], verbosity); - const std::string outfile = outputDir + path_sep_char() + basename(filename); + spv::spirvbin_t(verbosity).remap(spv, whiteListStrings, opts); - write(spv, outfile, verbosity); + if (isSingleOutputDir) { + // write all outputs to same directory + const std::string outFile = outputDirOrFiles[0] + path_sep_char() + basename(inputFiles[ii]); + write(spv, outFile, verbosity); + } else { + // write each input to its associated output + write(spv, outputDirOrFiles[ii], verbosity); + } } if (verbosity > 0) - std::cout << "Done: " << inputFile.size() << " file(s) processed" << std::endl; + std::cout << "Done: " << inputFiles.size() << " file(s) processed" << std::endl; } // Parse command line options - void parseCmdLine(int argc, char** argv, std::vector& inputFile, - std::string& outputDir, - int& options, - int& verbosity) + void parseCmdLine(int argc, + char** argv, + std::vector& inputFiles, + std::vector& outputDirOrFiles, + std::string& stripWhiteListFile, + int& options, + int& verbosity) { if (argc < 2) usage(argv[0]); @@ -192,18 +239,19 @@ namespace { const std::string arg = argv[a]; if (arg == "--output" || arg == "-o") { - // Output directory - if (++a >= argc) - usage(argv[0], "--output requires an argument"); - if (!outputDir.empty()) - usage(argv[0], "--output can be provided only once"); - - outputDir = argv[a++]; + // Collect output dirs or files + for (++a; a < argc && argv[a][0] != '-'; ++a) + outputDirOrFiles.push_back(argv[a]); - // Remove trailing directory separator characters - while (!outputDir.empty() && outputDir.back() == path_sep_char()) - outputDir.pop_back(); + if (outputDirOrFiles.size() == 0) + usage(argv[0], "--output requires an argument"); + // Remove trailing directory separator characters from all paths + for (std::size_t ii=0; ii inputFile; - std::string outputDir; + std::vector inputFiles; + std::vector outputDirOrFiles; + std::string whiteListFile; int opts; int verbosity; -#ifdef use_cpp11 // handle errors by exiting spv::spirvbin_t::registerErrorHandler(errHandler); // Log messages to std::cout spv::spirvbin_t::registerLogHandler(logHandler); -#endif if (argc < 2) usage(argv[0]); - parseCmdLine(argc, argv, inputFile, outputDir, opts, verbosity); + parseCmdLine(argc, argv, inputFiles, outputDirOrFiles, whiteListFile, opts, verbosity); + + if (outputDirOrFiles.empty()) + usage(argv[0], "Output directory or file(s) required."); + + const bool isMultiInput = inputFiles.size() > 1; + const bool isMultiOutput = outputDirOrFiles.size() > 1; + const bool isSingleOutputDir = !isMultiOutput && std::filesystem::is_directory(outputDirOrFiles[0]); + + if (isMultiInput && !isMultiOutput && !isSingleOutputDir) + usage(argv[0], "Output is not a directory."); + - if (outputDir.empty()) - usage(argv[0], "Output directory required"); + if (isMultiInput && isMultiOutput && (outputDirOrFiles.size() != inputFiles.size())) + usage(argv[0], "Output must be either a single directory or one output file per input."); // Main operations: read, remap, and write. - execute(inputFile, outputDir, opts, verbosity); + execute(inputFiles, outputDirOrFiles, isSingleOutputDir, whiteListFile, opts, verbosity); // If we get here, everything went OK! Nothing more to be done. } diff --git a/Test/400.frag b/Test/400.frag index 039d4809f1..b9bc17aac5 100644 --- a/Test/400.frag +++ b/Test/400.frag @@ -7,6 +7,39 @@ uniform sampler2D arrayedSampler[5]; uniform usampler2DRect samp2dr; uniform isampler2DArray isamp2DA; +#extension GL_ARB_shader_storage_buffer_object : enable + +buffer Buffer +{ + int atomi; + uint atomu; +}; + +void atomicOpPass() +{ + int origi = atomicAdd(atomi, 3); + uint origu = atomicAnd(atomu, 7u); + origi = atomicExchange(atomi, 4); + origu = atomicCompSwap(atomu, 10u, 8u); +} + +buffer ssboElem01 +{ + int member01; + int memberArr01[2]; + int memberUnsizedArr01[]; +} ssboStd430Arr[2]; + +// if turns on EShReflectionSharedStd140SSBO, SPIR-V would be different +buffer ssboElem02 +{ + int member02; + int memberArr02[2]; + int memberUnsizedArr02[]; +} ssboSharedArr[2]; + +#extension GL_ARB_shader_storage_buffer_object : disable + void main() { vec4 v; diff --git a/Test/GL_ARB_bindless_texture.frag b/Test/GL_ARB_bindless_texture.frag new file mode 100644 index 0000000000..58c8359e4c --- /dev/null +++ b/Test/GL_ARB_bindless_texture.frag @@ -0,0 +1,50 @@ +#version 460 compatibility + +#extension GL_ARB_bindless_texture: require + +#if !defined GL_ARB_bindless_texture +# error GL_ARB_bindless_texture is not defined +#elif GL_ARB_bindless_texture != 1 +# error GL_ARB_bindless_texture is not equal to 1 +#endif + +// Valid usage cases +layout(bindless_sampler) uniform sampler2D s0; // case0: bindless layout +in sampler2D s1; // case1: sampler as an input +uniform uvec2 s2; // case2: uvec2 as sampler constructor +uniform ivec2 s3; // case3: ivec2 as sampler constructor +uniform int index; +in sampler2D s4[2][3]; // case4: sampler arrays of arrays +uniform BB {sampler2D s5;} bbs5[2]; // case5: uniform block member as a sampler +in samplerBuffer s6; // case6: samplerBuffer input +uniform UBO9 {samplerBuffer s7;}; // case7: samplerBuffer as an uniform block member +buffer SSBO10 {samplerBuffer s8;}; // case8: samplerBuffer as an ssbo member +layout(rgba8, bindless_image) in image2D i9; // case9: bindless image as an input + + +uniform vec2 coord; // bindless coord 2-D +uniform int icoord; // bindless coord 1-D +out vec4 color0; +out vec4 color1; +out vec4 color2; +out vec4 color3; +out vec4 color4; +out vec4 color5; +out vec4 color6; +out vec4 color7; +out vec4 color8; +out vec4 color9; + +void main() +{ + color0 = texture(s0, coord); + color1 = texture(s1, coord); + color2 = texture(sampler2D(s2), coord); + color3 = texture(sampler2D(s3), coord); + color4 = texture(s4[index][index], coord); + color5 = texture(bbs5[index].s5, coord); + color6 = texelFetch(s6, icoord); + color7 = texelFetch(s7, icoord); + color8 = texelFetch(s8, icoord); + color9 = imageLoad(i9, ivec2(0,0)); +} \ No newline at end of file diff --git a/Test/GL_ARB_texture_multisample.vert b/Test/GL_ARB_texture_multisample.vert new file mode 100644 index 0000000000..d3c5e85c63 --- /dev/null +++ b/Test/GL_ARB_texture_multisample.vert @@ -0,0 +1,28 @@ +#version 140 +#extension GL_ARB_texture_multisample : enable + +out float result; +out int result1; +out uint result2; + +uniform sampler2DMS data; +uniform sampler2DMSArray data1; +uniform isampler2DMS data2; +uniform usampler2DMSArray data3; +uniform usampler2DMS data4; +uniform isampler2DMSArray data5; +void main() +{ + result = texelFetch(data, ivec2(0), 3).r; + ivec2 temp = textureSize(data); + result = texelFetch(data1, ivec3(0), 3).r; + ivec3 temp1 = textureSize(data1); + result1 = texelFetch(data2, ivec2(0), 3).r; + temp = textureSize(data2); + result2 = texelFetch(data3, ivec3(0), 3).r; + temp1 = textureSize(data3); + result2 = texelFetch(data4, ivec2(0), 3).r; + temp = textureSize(data4); + result1 = texelFetch(data5, ivec3(0), 3).r; + temp1 = textureSize(data5); +} diff --git a/Test/GL_EXT_draw_instanced.vert b/Test/GL_EXT_draw_instanced.vert new file mode 100644 index 0000000000..601e3d7f60 --- /dev/null +++ b/Test/GL_EXT_draw_instanced.vert @@ -0,0 +1,18 @@ +#version 120 +#extension GL_EXT_draw_instanced : require +#define ID gl_InstanceID + +uniform mat4 gtf_ModelViewProjectionMatrix; +uniform vec3 instanceOffsets[3]; +uniform vec4 va[gl_MaxVertexAttribs]; +vec4 color; + +void main (void) +{ + vec4 vertex = vec4(va[0].xy / 3.0, va[0].zw) + vec4(instanceOffsets[ID], 1.0); + color = vec4(0, 0, 0, 0); + for (int i = 1; i < gl_MaxVertexAttribs; i++) + color += va[i]; + gl_Position = gtf_ModelViewProjectionMatrix * vertex; + gl_PointSize = 1.0; +} \ No newline at end of file diff --git a/Test/GL_EXT_texture_array.frag b/Test/GL_EXT_texture_array.frag new file mode 100644 index 0000000000..50a40a01e6 --- /dev/null +++ b/Test/GL_EXT_texture_array.frag @@ -0,0 +1,34 @@ +#version 110 + +#extension GL_EXT_texture_array : enable + +uniform sampler1DArray s1DA; +uniform sampler2DArray s2DA; +uniform sampler1DArrayShadow s1DAS; +uniform sampler2DArrayShadow s2DAS; + +void foo() +{ + float f; + vec2 v2; + vec3 v3; + vec4 v4; + + v4 = texture1DArray(s1DA, v2); + v4 = texture2DArray(s2DA, v3); + v4 = shadow1DArray(s1DAS, v3); + v4 = shadow2DArray(s2DAS, v4); + + v4 = texture1DArray(s1DA, v2, f); + v4 = texture2DArray(s2DA, v3, f); + v4 = shadow1DArray(s1DAS, v3, f); + + v4 = texture1DArrayLod(s1DA, v2, f); + v4 = texture2DArrayLod(s2DA, v3, f); + v4 = shadow1DArrayLod(s1DAS, v3, f); +} + +void main() +{ + foo(); +} diff --git a/Test/UTF8BOM.vert b/Test/UTF8BOM.vert new file mode 100644 index 0000000000..357cc54bfc --- /dev/null +++ b/Test/UTF8BOM.vert @@ -0,0 +1,11 @@ +/* + +glslangValidator.exe --glsl-version 410 -V -S vert -o UTF8BOM.vert.out UTF8BOM.vert + +*/ + +#version 110 + +void main() +{ +} diff --git a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out index 2afdb104e2..1e6521e602 100644 --- a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out +++ b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out @@ -1,6 +1,6 @@ hlsl.aliasOpaque.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 89 Capability Shader @@ -13,10 +13,10 @@ hlsl.aliasOpaque.frag Name 47 "gss" Name 51 "gtex" Name 62 "@entryPointOutput" - Decorate 47(gss) DescriptorSet 0 Decorate 47(gss) Binding 0 - Decorate 51(gtex) DescriptorSet 0 + Decorate 47(gss) DescriptorSet 0 Decorate 51(gtex) Binding 2 + Decorate 51(gtex) DescriptorSet 0 Decorate 62(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out index 7bb33e6074..3a839db9d6 100644 --- a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out +++ b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out @@ -1,6 +1,6 @@ hlsl.flattenOpaque.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 190 Capability Shader @@ -15,14 +15,14 @@ hlsl.flattenOpaque.frag Name 97 "s2.s2D" Name 100 "s2.tex" Name 120 "@entryPointOutput" - Decorate 38(tex) DescriptorSet 0 Decorate 38(tex) Binding 0 - Decorate 82(s.s2D) DescriptorSet 0 + Decorate 38(tex) DescriptorSet 0 Decorate 82(s.s2D) Binding 1 - Decorate 97(s2.s2D) DescriptorSet 0 + Decorate 82(s.s2D) DescriptorSet 0 Decorate 97(s2.s2D) Binding 2 - Decorate 100(s2.tex) DescriptorSet 0 + Decorate 97(s2.s2D) DescriptorSet 0 Decorate 100(s2.tex) Binding 3 + Decorate 100(s2.tex) DescriptorSet 0 Decorate 120(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out index 0e8583f9f0..5aa5fdc2b9 100644 --- a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out +++ b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out @@ -1,6 +1,6 @@ hlsl.flattenOpaqueInit.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 139 Capability Shader @@ -12,10 +12,10 @@ hlsl.flattenOpaqueInit.vert Name 43 "g_tInputTexture_sampler" Name 47 "g_tInputTexture" Name 80 "@entryPointOutput" - Decorate 43(g_tInputTexture_sampler) DescriptorSet 0 Decorate 43(g_tInputTexture_sampler) Binding 0 - Decorate 47(g_tInputTexture) DescriptorSet 0 + Decorate 43(g_tInputTexture_sampler) DescriptorSet 0 Decorate 47(g_tInputTexture) Binding 1 + Decorate 47(g_tInputTexture) DescriptorSet 0 Decorate 80(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out index fe858efde5..60e715165e 100644 --- a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out +++ b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out @@ -1,6 +1,6 @@ hlsl.flattenOpaqueInitMix.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 99 Capability Shader @@ -12,10 +12,10 @@ hlsl.flattenOpaqueInitMix.vert Name 44 "g_tInputTexture_sampler" Name 47 "g_tInputTexture" Name 57 "@entryPointOutput" - Decorate 44(g_tInputTexture_sampler) DescriptorSet 0 Decorate 44(g_tInputTexture_sampler) Binding 0 - Decorate 47(g_tInputTexture) DescriptorSet 0 + Decorate 44(g_tInputTexture_sampler) DescriptorSet 0 Decorate 47(g_tInputTexture) Binding 1 + Decorate 47(g_tInputTexture) DescriptorSet 0 Decorate 57(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out index 46d3afba6e..92c62cf08f 100644 --- a/Test/baseLegalResults/hlsl.flattenSubset.frag.out +++ b/Test/baseLegalResults/hlsl.flattenSubset.frag.out @@ -1,6 +1,6 @@ hlsl.flattenSubset.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 67 Capability Shader @@ -13,10 +13,10 @@ hlsl.flattenSubset.frag Name 21 "samp" Name 33 "tex" Name 50 "@entryPointOutput" - Decorate 21(samp) DescriptorSet 0 Decorate 21(samp) Binding 0 - Decorate 33(tex) DescriptorSet 0 + Decorate 21(samp) DescriptorSet 0 Decorate 33(tex) Binding 1 + Decorate 33(tex) DescriptorSet 0 Decorate 50(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out index 408c0eac91..656ff7385b 100644 --- a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out +++ b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out @@ -1,6 +1,6 @@ hlsl.flattenSubset2.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 53 Capability Shader diff --git a/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out b/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out index 564f0f4cf8..936df717b8 100644 --- a/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out +++ b/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out @@ -1,6 +1,6 @@ hlsl.intrinsics.evalfns.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 274 Capability Shader diff --git a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out index f45a76881f..b664098319 100644 --- a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out +++ b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out @@ -1,6 +1,6 @@ hlsl.partialFlattenLocal.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 164 Capability Shader diff --git a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out index 8975ed2a02..8f3ac26faf 100644 --- a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out +++ b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out @@ -1,6 +1,6 @@ hlsl.partialFlattenMixed.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 36 Capability Shader diff --git a/Test/baseResults/120.vert.out b/Test/baseResults/120.vert.out index 6c42b75e25..fcfffe9b27 100644 --- a/Test/baseResults/120.vert.out +++ b/Test/baseResults/120.vert.out @@ -46,6 +46,7 @@ ERROR: 0:108: 'overloadE' : no matching overloaded function found ERROR: 0:111: 'overloadE' : no matching overloaded function found ERROR: 0:117: 'overloadF' : no matching overloaded function found ERROR: 0:121: 'gl_TexCoord array size' : must be less than or equal to gl_MaxTextureCoords (32) +ERROR: 0:154: 'non-float shader input/output' : not supported for this version or the enabled extensions ERROR: 0:165: 'switch' : Reserved word. ERROR: 0:171: 'default' : Reserved word. ERROR: 0:165: 'switch statements' : not supported for this version or the enabled extensions @@ -80,7 +81,7 @@ ERROR: 0:195: 'gl_ModelViewMatrix' : identifiers starting with "gl_" are reserve ERROR: 0:200: 'token pasting (##)' : not supported for this version or the enabled extensions ERROR: 0:203: 'token pasting (##)' : not supported for this version or the enabled extensions ERROR: 0:205: '' : syntax error, unexpected IDENTIFIER -ERROR: 81 compilation errors. No code generated. +ERROR: 82 compilation errors. No code generated. Shader version: 120 diff --git a/Test/baseResults/130.vert.out b/Test/baseResults/130.vert.out index e38043c60b..ee7fddef99 100644 --- a/Test/baseResults/130.vert.out +++ b/Test/baseResults/130.vert.out @@ -1,9 +1,8 @@ 130.vert -ERROR: 0:59: 'gl_InstanceID' : undeclared identifier -ERROR: 0:59: '=' : cannot convert from ' temp float' to ' temp int' +ERROR: 0:59: 'gl_InstanceID' : required extension not requested: GL_EXT_draw_instanced ERROR: 0:61: 'texelFetch' : no matching overloaded function found ERROR: 0:61: 'assign' : cannot convert from ' const float' to ' temp int' -ERROR: 4 compilation errors. No code generated. +ERROR: 3 compilation errors. No code generated. Shader version: 130 @@ -120,7 +119,11 @@ ERROR: node is still EOpNull! 0:46 0.300000 0:57 Function Definition: foo88( ( global void) 0:57 Function Parameters: -0:? Sequence +0:59 Sequence +0:59 Sequence +0:59 move second child to first child ( temp int) +0:59 'id' ( temp int) +0:59 'gl_InstanceID' ( gl_InstanceId int InstanceId) 0:61 'id' ( temp int) 0:63 'gl_ClipVertex' ( gl_ClipVertex 4-component vector of float ClipVertex) 0:64 'gl_Color' ( in 4-component vector of float Color) diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out index 066b8bb4e9..ba15b5cbf1 100644 --- a/Test/baseResults/150.frag.out +++ b/Test/baseResults/150.frag.out @@ -2,7 +2,6 @@ ERROR: 0:4: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord ERROR: 0:5: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord ERROR: 0:6: 'layout qualifier' : can only apply origin_upper_left and pixel_center_origin to gl_FragCoord -ERROR: 0:14: 'gl_FragCoord' : cannot redeclare after use ERROR: 0:50: 'gl_PerFragment' : undeclared identifier ERROR: 0:53: 'double' : Reserved word. ERROR: 0:53: 'double' : not supported for this version or the enabled extensions @@ -19,7 +18,7 @@ ERROR: 0:154: 'assign' : cannot convert from ' const float' to ' temp 2-compone ERROR: 0:155: 'textureQueryLOD' : no matching overloaded function found ERROR: 0:155: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' ERROR: 0:183: 'mix' : required extension not requested: GL_EXT_shader_integer_mix -ERROR: 18 compilation errors. No code generated. +ERROR: 17 compilation errors. No code generated. Shader version: 150 diff --git a/Test/baseResults/150.geom.out b/Test/baseResults/150.geom.out index c5a31f555d..bf27824401 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: '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:29: 'if the version 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 version 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 diff --git a/Test/baseResults/150.tesc.out b/Test/baseResults/150.tesc.out index 535a8a6288..78b32da23c 100644 --- a/Test/baseResults/150.tesc.out +++ b/Test/baseResults/150.tesc.out @@ -627,7 +627,7 @@ ERROR: node is still EOpNull! ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb -ERROR: 0:26: 'gl_PointSize' : no such field in structure +ERROR: 0:26: 'gl_PointSize' : no such field in structure 'gl_out' ERROR: 0:26: 'assign' : cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}' ERROR: 0:29: 'out' : type must be an array: outf ERROR: 0:43: 'vertices' : must be greater than 0 @@ -940,8 +940,9 @@ ERROR: Linking tessellation control stage: Multiple function bodies in multiple main( ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: main( -ERROR: Linking tessellation control stage: Types must match: - outa: " global 4-element array of int" versus " global 1-element array of int" +ERROR: Linking tessellation control and tessellation control stages: Array sizes must be compatible: + tessellation control stage: " int outa[4]" + tessellation control stage: " int outa[1]" ERROR: Linking tessellation control stage: can't handle multiple entry points per stage ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: main( @@ -951,8 +952,9 @@ ERROR: Linking tessellation control stage: Multiple function bodies in multiple foo( ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: main( -ERROR: Linking tessellation control stage: Types must match: - gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 2-element array of float ClipDistance gl_ClipDistance}" versus " out 3-element array of block{ out 4-component vector of float Position gl_Position}" +ERROR: Linking tessellation control and tessellation control stages: tessellation control block member has no corresponding member in tessellation control block: + tessellation control stage: Block: gl_PerVertex, Member: gl_PointSize + tessellation control stage: Block: gl_PerVertex, Member: n/a Linked tessellation evaluation stage: diff --git a/Test/baseResults/300layout.vert.out b/Test/baseResults/300layout.vert.out index 527425b37d..e1ec452474 100644 --- a/Test/baseResults/300layout.vert.out +++ b/Test/baseResults/300layout.vert.out @@ -1,6 +1,6 @@ 300layout.vert ERROR: 0:7: 'vertex input arrays' : not supported with this profile: es -ERROR: 0:8: 'in' : cannot be a structure or array +ERROR: 0:8: 'in' : cannot be a structure ERROR: 0:8: 's' : A structure containing an array is not allowed as input in ES ERROR: 0:8: 'vertex input arrays' : not supported with this profile: es ERROR: 0:8: 'location' : overlapping use of location 10 diff --git a/Test/baseResults/310.geom.out b/Test/baseResults/310.geom.out index b0dabc3b20..2fa5d111c1 100644 --- a/Test/baseResults/310.geom.out +++ b/Test/baseResults/310.geom.out @@ -6,7 +6,7 @@ ERROR: 0:43: 'EmitStreamVertex' : no matching overloaded function found ERROR: 0:44: 'EndStreamPrimitive' : no matching overloaded function found ERROR: 0:47: 'gl_ClipDistance' : undeclared identifier ERROR: 0:47: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector -ERROR: 0:48: 'gl_ClipDistance' : no such field in structure +ERROR: 0:48: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:48: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:47: 'assign' : l-value required (can't modify a const) ERROR: 0:55: 'selecting output stream' : not supported with this profile: es diff --git a/Test/baseResults/310.tesc.out b/Test/baseResults/310.tesc.out index 25ce6ee937..bd4c1bdcea 100644 --- a/Test/baseResults/310.tesc.out +++ b/Test/baseResults/310.tesc.out @@ -6,12 +6,12 @@ ERROR: 0:12: 'patch' : can only use on output in tessellation-control shader ERROR: 0:26: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:27: 'gl_ClipDistance' : no such field in structure +ERROR: 0:27: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:27: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:34: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:35: 'gl_ClipDistance' : no such field in structure +ERROR: 0:35: 'gl_ClipDistance' : no such field in structure 'gl_out' ERROR: 0:35: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:35: 'assign' : l-value required (can't modify a const) ERROR: 0:41: '' : tessellation control barrier() cannot be placed within flow control diff --git a/Test/baseResults/310.tese.out b/Test/baseResults/310.tese.out index 2f23d9ba80..5eecaffa2d 100644 --- a/Test/baseResults/310.tese.out +++ b/Test/baseResults/310.tese.out @@ -10,7 +10,7 @@ ERROR: 0:26: 'barrier' : no matching overloaded function found ERROR: 0:37: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:38: 'gl_ClipDistance' : no such field in structure +ERROR: 0:38: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:38: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:47: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size @@ -43,7 +43,7 @@ ERROR: 0:100: 'location' : overlapping use of location 24 ERROR: 0:103: 'location' : overlapping use of location 24 ERROR: 0:105: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved ERROR: 0:113: 'sample' : Reserved word. -ERROR: 0:119: 'gl_PointSize' : no such field in structure +ERROR: 0:119: 'gl_PointSize' : no such field in structure 'gl_in' ERROR: 0:119: '=' : cannot convert from ' temp block{ in highp 4-component vector of float Position gl_Position}' to ' temp highp float' ERROR: 0:127: 'gl_BoundingBoxOES' : undeclared identifier ERROR: 43 compilation errors. No code generated. diff --git a/Test/baseResults/320.geom.out b/Test/baseResults/320.geom.out index f3337660b5..cdaacb91eb 100644 --- a/Test/baseResults/320.geom.out +++ b/Test/baseResults/320.geom.out @@ -6,7 +6,7 @@ ERROR: 0:33: 'EmitStreamVertex' : no matching overloaded function found ERROR: 0:34: 'EndStreamPrimitive' : no matching overloaded function found ERROR: 0:37: 'gl_ClipDistance' : undeclared identifier ERROR: 0:37: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector -ERROR: 0:38: 'gl_ClipDistance' : no such field in structure +ERROR: 0:38: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:38: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:37: 'assign' : l-value required (can't modify a const) ERROR: 0:45: 'selecting output stream' : not supported with this profile: es diff --git a/Test/baseResults/320.tesc.out b/Test/baseResults/320.tesc.out index 6bb52b3039..67848d9b82 100644 --- a/Test/baseResults/320.tesc.out +++ b/Test/baseResults/320.tesc.out @@ -6,12 +6,12 @@ ERROR: 0:10: 'patch' : can only use on output in tessellation-control shader ERROR: 0:24: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:25: 'gl_ClipDistance' : no such field in structure +ERROR: 0:25: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:25: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:32: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:33: 'gl_ClipDistance' : no such field in structure +ERROR: 0:33: 'gl_ClipDistance' : no such field in structure 'gl_out' ERROR: 0:33: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:33: 'assign' : l-value required (can't modify a const) ERROR: 0:39: '' : tessellation control barrier() cannot be placed within flow control diff --git a/Test/baseResults/320.tese.out b/Test/baseResults/320.tese.out index 014eeb0a46..ba51b9c859 100644 --- a/Test/baseResults/320.tese.out +++ b/Test/baseResults/320.tese.out @@ -10,7 +10,7 @@ ERROR: 0:22: 'barrier' : no matching overloaded function found ERROR: 0:33: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:34: 'gl_ClipDistance' : no such field in structure +ERROR: 0:34: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:34: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:43: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out index db3cd24302..a148ae5fac 100644 --- a/Test/baseResults/400.frag.out +++ b/Test/baseResults/400.frag.out @@ -1,510 +1,554 @@ 400.frag -ERROR: 0:18: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument -ERROR: 0:22: 'textureGatherOffset(...)' : must be a compile-time constant: component argument -ERROR: 0:23: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument -ERROR: 0:30: 'location qualifier on input' : not supported for this version or the enabled extensions -ERROR: 0:38: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions -ERROR: 0:40: 'gl_Color' : identifiers starting with "gl_" are reserved -ERROR: 0:41: 'redeclaration' : cannot change qualification of gl_ClipDistance -ERROR: 0:43: 'gl_FragCoord' : cannot redeclare after use -ERROR: 0:51: 'texel offset' : argument must be compile-time constant -ERROR: 0:53: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] -ERROR: 0:53: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] -ERROR: 0:54: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] -ERROR: 0:54: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] -ERROR: 0:57: 'patch' : not supported in this stage: fragment -ERROR: 0:58: 'patch' : not supported in this stage: fragment -ERROR: 0:58: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output -ERROR: 0:73: 'dFdxFine' : required extension not requested: GL_ARB_derivative_control -ERROR: 0:74: 'dFdyCoarse' : required extension not requested: GL_ARB_derivative_control -ERROR: 0:75: 'fwidthCoarse' : required extension not requested: GL_ARB_derivative_control -ERROR: 0:75: 'fwidthFine' : required extension not requested: GL_ARB_derivative_control -ERROR: 0:104: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output -ERROR: 0:123: 'interpolateAtCentroid' : no matching overloaded function found -ERROR: 0:125: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element -ERROR: 0:127: 'interpolateAtSample' : no matching overloaded function found -ERROR: 0:132: 'interpolateAtOffset' : no matching overloaded function found -ERROR: 0:134: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element -ERROR: 0:135: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element -ERROR: 0:136: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element -ERROR: 0:139: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element -ERROR: 0:140: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element -ERROR: 0:183: 'textureQueryLod' : no matching overloaded function found -ERROR: 0:183: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' -ERROR: 0:184: 'textureQueryLod' : no matching overloaded function found -ERROR: 0:184: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' -ERROR: 0:197: 'subroutine' : feature not yet implemented -ERROR: 0:197: '' : default qualifier requires 'uniform', 'buffer', 'in', 'out' or 'shared' storage qualification -ERROR: 0:198: 'subroutine' : feature not yet implemented -ERROR: 0:199: 'subroutine' : feature not yet implemented -ERROR: 0:201: '' : syntax error, unexpected PRECISE, expecting IDENTIFIER +ERROR: 0:51: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument +ERROR: 0:55: 'textureGatherOffset(...)' : must be a compile-time constant: component argument +ERROR: 0:56: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument +ERROR: 0:63: 'location qualifier on input' : not supported for this version or the enabled extensions +ERROR: 0:71: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions +ERROR: 0:73: 'gl_Color' : identifiers starting with "gl_" are reserved +ERROR: 0:74: 'redeclaration' : cannot change qualification of gl_ClipDistance +ERROR: 0:76: 'gl_FragCoord' : cannot redeclare after use +ERROR: 0:84: 'texel offset' : argument must be compile-time constant +ERROR: 0:86: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:86: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:87: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:87: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] +ERROR: 0:90: 'patch' : not supported in this stage: fragment +ERROR: 0:91: 'patch' : not supported in this stage: fragment +ERROR: 0:91: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output +ERROR: 0:106: 'dFdxFine' : required extension not requested: GL_ARB_derivative_control +ERROR: 0:107: 'dFdyCoarse' : required extension not requested: GL_ARB_derivative_control +ERROR: 0:108: 'fwidthCoarse' : required extension not requested: GL_ARB_derivative_control +ERROR: 0:108: 'fwidthFine' : required extension not requested: GL_ARB_derivative_control +ERROR: 0:137: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output +ERROR: 0:156: 'interpolateAtCentroid' : no matching overloaded function found +ERROR: 0:158: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:160: 'interpolateAtSample' : no matching overloaded function found +ERROR: 0:165: 'interpolateAtOffset' : no matching overloaded function found +ERROR: 0:167: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:168: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:169: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:172: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:173: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:216: 'textureQueryLod' : no matching overloaded function found +ERROR: 0:216: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' +ERROR: 0:217: 'textureQueryLod' : no matching overloaded function found +ERROR: 0:217: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' +ERROR: 0:230: 'subroutine' : feature not yet implemented +ERROR: 0:230: '' : default qualifier requires 'uniform', 'buffer', 'in', 'out' or 'shared' storage qualification +ERROR: 0:231: 'subroutine' : feature not yet implemented +ERROR: 0:232: 'subroutine' : feature not yet implemented +ERROR: 0:234: '' : syntax error, unexpected PRECISE, expecting IDENTIFIER ERROR: 39 compilation errors. No code generated. Shader version: 400 Requested GL_ARB_derivative_control Requested GL_ARB_separate_shader_objects +Requested GL_ARB_shader_storage_buffer_object gl_FragCoord pixel center is integer gl_FragCoord origin is upper left ERROR: node is still EOpNull! -0:10 Function Definition: main( ( global void) -0:10 Function Parameters: -0:? Sequence -0:13 move second child to first child ( temp 4-component vector of float) -0:13 'v' ( temp 4-component vector of float) -0:13 texture ( global 4-component vector of float) -0:13 indirect index ( temp sampler2D) -0:13 'arrayedSampler' ( uniform 5-element array of sampler2D) -0:13 'i' ( flat in int) -0:13 'c2D' ( smooth in 2-component vector of float) -0:14 move second child to first child ( temp float) -0:14 direct index ( temp float) -0:14 'outp' ( out 4-component vector of float) -0:14 Constant: -0:14 0 (const int) -0:14 direct index ( smooth temp float ClipDistance) -0:14 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) -0:14 Constant: -0:14 1 (const int) -0:18 Sequence -0:18 move second child to first child ( temp 4-component vector of uint) -0:18 'uv4' ( temp 4-component vector of uint) -0:18 textureGatherOffsets ( global 4-component vector of uint) -0:18 'samp2dr' ( uniform usampler2DRect) -0:18 'c2D' ( smooth in 2-component vector of float) -0:18 'offsets' ( temp 4-element array of 2-component vector of int) -0:18 Constant: -0:18 2 (const int) -0:19 move second child to first child ( temp 4-component vector of uint) -0:19 'uv4' ( temp 4-component vector of uint) -0:19 textureGatherOffsets ( global 4-component vector of uint) -0:19 'samp2dr' ( uniform usampler2DRect) -0:19 'c2D' ( smooth in 2-component vector of float) -0:19 Constant: -0:19 1 (const int) -0:19 2 (const int) -0:19 3 (const int) -0:19 4 (const int) -0:19 15 (const int) -0:19 16 (const int) -0:19 -2 (const int) -0:19 0 (const int) -0:19 Constant: -0:19 2 (const int) +0:18 Function Definition: atomicOpPass( ( global void) +0:18 Function Parameters: +0:20 Sequence 0:20 Sequence -0:20 move second child to first child ( temp 4-component vector of float) -0:20 'v4' ( temp 4-component vector of float) -0:20 textureGather ( global 4-component vector of float) -0:20 direct index ( temp sampler2D) -0:20 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:20 move second child to first child ( temp int) +0:20 'origi' ( temp int) +0:20 AtomicAdd ( global int) +0:20 atomi: direct index for structure (layout( column_major shared) buffer int) +0:20 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu}) 0:20 Constant: -0:20 0 (const int) -0:20 'c2D' ( smooth in 2-component vector of float) +0:20 0 (const uint) +0:20 Constant: +0:20 3 (const int) 0:21 Sequence -0:21 move second child to first child ( temp 4-component vector of int) -0:21 'iv4' ( temp 4-component vector of int) -0:21 textureGatherOffset ( global 4-component vector of int) -0:21 'isamp2DA' ( uniform isampler2DArray) -0:21 Constant: -0:21 0.100000 -0:21 0.100000 -0:21 0.100000 -0:21 Constant: -0:21 1 (const int) -0:21 1 (const int) +0:21 move second child to first child ( temp uint) +0:21 'origu' ( temp uint) +0:21 AtomicAnd ( global uint) +0:21 atomu: direct index for structure (layout( column_major shared) buffer uint) +0:21 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu}) +0:21 Constant: +0:21 1 (const uint) 0:21 Constant: -0:21 3 (const int) -0:22 move second child to first child ( temp 4-component vector of int) -0:22 'iv4' ( temp 4-component vector of int) -0:22 textureGatherOffset ( global 4-component vector of int) -0:22 'isamp2DA' ( uniform isampler2DArray) +0:21 7 (const uint) +0:22 move second child to first child ( temp int) +0:22 'origi' ( temp int) +0:22 AtomicExchange ( global int) +0:22 atomi: direct index for structure (layout( column_major shared) buffer int) +0:22 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu}) +0:22 Constant: +0:22 0 (const uint) 0:22 Constant: -0:22 0.100000 -0:22 0.100000 -0:22 0.100000 -0:22 Constant: -0:22 1 (const int) -0:22 1 (const int) -0:22 'i' ( flat in int) -0:23 move second child to first child ( temp 4-component vector of int) -0:23 'iv4' ( temp 4-component vector of int) -0:23 textureGatherOffset ( global 4-component vector of int) -0:23 'isamp2DA' ( uniform isampler2DArray) -0:23 Constant: -0:23 0.100000 -0:23 0.100000 -0:23 0.100000 +0:22 4 (const int) +0:23 move second child to first child ( temp uint) +0:23 'origu' ( temp uint) +0:23 AtomicCompSwap ( global uint) +0:23 atomu: direct index for structure (layout( column_major shared) buffer uint) +0:23 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu}) +0:23 Constant: +0:23 1 (const uint) 0:23 Constant: -0:23 1 (const int) -0:23 1 (const int) +0:23 10 (const uint) 0:23 Constant: -0:23 4 (const int) -0:24 move second child to first child ( temp 4-component vector of int) -0:24 'iv4' ( temp 4-component vector of int) -0:24 textureGatherOffset ( global 4-component vector of int) -0:24 'isamp2DA' ( uniform isampler2DArray) -0:24 Constant: -0:24 0.100000 -0:24 0.100000 -0:24 0.100000 -0:24 Constant: -0:24 1 (const int) -0:24 1 (const int) -0:24 Constant: -0:24 3 (const int) -0:25 move second child to first child ( temp 4-component vector of int) -0:25 'iv4' ( temp 4-component vector of int) -0:25 textureGatherOffset ( global 4-component vector of int) -0:25 'isamp2DA' ( uniform isampler2DArray) -0:25 Constant: -0:25 0.100000 -0:25 0.100000 -0:25 0.100000 -0:25 Construct ivec2 ( temp 2-component vector of int) -0:25 'i' ( flat in int) -0:27 Sequence -0:27 move second child to first child ( temp 4-component vector of float) -0:27 'c' ( temp 4-component vector of float) -0:27 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) -0:47 Function Definition: foo23( ( global void) -0:47 Function Parameters: +0:23 8 (const uint) +0:43 Function Definition: main( ( global void) +0:43 Function Parameters: 0:? Sequence -0:51 textureProjGradOffset ( global float) -0:51 'u2drs' ( uniform sampler2DRectShadow) -0:51 'outp' ( out 4-component vector of float) -0:51 Constant: -0:51 0.000000 -0:51 0.000000 -0:51 Constant: -0:51 0.000000 -0:51 0.000000 -0:51 Convert float to int ( temp 2-component vector of int) -0:51 'c2D' ( smooth in 2-component vector of float) -0:52 textureProjGradOffset ( global float) -0:52 'u2drs' ( uniform sampler2DRectShadow) -0:52 'outp' ( out 4-component vector of float) -0:52 Constant: -0:52 0.000000 -0:52 0.000000 -0:52 Constant: -0:52 0.000000 -0:52 0.000000 -0:52 Constant: -0:52 3 (const int) -0:52 4 (const int) -0:53 textureProjGradOffset ( global float) -0:53 'u2drs' ( uniform sampler2DRectShadow) -0:53 'outp' ( out 4-component vector of float) -0:53 Constant: -0:53 0.000000 -0:53 0.000000 -0:53 Constant: -0:53 0.000000 -0:53 0.000000 -0:53 Constant: -0:53 15 (const int) -0:53 16 (const int) -0:54 textureProjGradOffset ( global float) -0:54 'u2drs' ( uniform sampler2DRectShadow) -0:54 'outp' ( out 4-component vector of float) -0:54 Constant: -0:54 0.000000 -0:54 0.000000 -0:54 Constant: -0:54 0.000000 -0:54 0.000000 -0:54 Constant: -0:54 -10 (const int) -0:54 20 (const int) -0:60 Function Definition: foo24( ( global void) -0:60 Function Parameters: -0:? Sequence -0:63 move second child to first child ( temp 3-component vector of double) -0:63 'df' ( temp 3-component vector of double) -0:63 modf ( global 3-component vector of double) -0:63 Convert float to double ( temp 3-component vector of double) -0:63 vector swizzle ( temp 3-component vector of float) -0:63 'outp' ( out 4-component vector of float) -0:63 Sequence -0:63 Constant: -0:63 0 (const int) -0:63 Constant: -0:63 1 (const int) -0:63 Constant: -0:63 2 (const int) -0:63 'di' ( temp 3-component vector of double) -0:71 Function Definition: foodc1( ( global void) -0:71 Function Parameters: -0:73 Sequence -0:73 Sequence -0:73 move second child to first child ( temp 2-component vector of float) -0:73 'v2' ( temp 2-component vector of float) -0:73 dPdxFine ( global 2-component vector of float) -0:73 'in2' ( smooth in 2-component vector of float) -0:74 Sequence -0:74 move second child to first child ( temp 3-component vector of float) -0:74 'v3' ( temp 3-component vector of float) -0:74 dPdyCoarse ( global 3-component vector of float) -0:74 'in3' ( smooth in 3-component vector of float) -0:75 Sequence -0:75 move second child to first child ( temp 4-component vector of float) -0:75 'v4' ( temp 4-component vector of float) -0:75 add ( temp 4-component vector of float) -0:75 fwidthCoarse ( global 4-component vector of float) -0:75 'in4' ( smooth in 4-component vector of float) -0:75 fwidthFine ( global 4-component vector of float) -0:75 'in4' ( smooth in 4-component vector of float) -0:80 Function Definition: foodc2( ( global void) +0:46 move second child to first child ( temp 4-component vector of float) +0:46 'v' ( temp 4-component vector of float) +0:46 texture ( global 4-component vector of float) +0:46 indirect index ( temp sampler2D) +0:46 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:46 'i' ( flat in int) +0:46 'c2D' ( smooth in 2-component vector of float) +0:47 move second child to first child ( temp float) +0:47 direct index ( temp float) +0:47 'outp' ( out 4-component vector of float) +0:47 Constant: +0:47 0 (const int) +0:47 direct index ( smooth temp float ClipDistance) +0:47 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) +0:47 Constant: +0:47 1 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of uint) +0:51 'uv4' ( temp 4-component vector of uint) +0:51 textureGatherOffsets ( global 4-component vector of uint) +0:51 'samp2dr' ( uniform usampler2DRect) +0:51 'c2D' ( smooth in 2-component vector of float) +0:51 'offsets' ( temp 4-element array of 2-component vector of int) +0:51 Constant: +0:51 2 (const int) +0:52 move second child to first child ( temp 4-component vector of uint) +0:52 'uv4' ( temp 4-component vector of uint) +0:52 textureGatherOffsets ( global 4-component vector of uint) +0:52 'samp2dr' ( uniform usampler2DRect) +0:52 'c2D' ( smooth in 2-component vector of float) +0:52 Constant: +0:52 1 (const int) +0:52 2 (const int) +0:52 3 (const int) +0:52 4 (const int) +0:52 15 (const int) +0:52 16 (const int) +0:52 -2 (const int) +0:52 0 (const int) +0:52 Constant: +0:52 2 (const int) +0:53 Sequence +0:53 move second child to first child ( temp 4-component vector of float) +0:53 'v4' ( temp 4-component vector of float) +0:53 textureGather ( global 4-component vector of float) +0:53 direct index ( temp sampler2D) +0:53 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:53 Constant: +0:53 0 (const int) +0:53 'c2D' ( smooth in 2-component vector of float) +0:54 Sequence +0:54 move second child to first child ( temp 4-component vector of int) +0:54 'iv4' ( temp 4-component vector of int) +0:54 textureGatherOffset ( global 4-component vector of int) +0:54 'isamp2DA' ( uniform isampler2DArray) +0:54 Constant: +0:54 0.100000 +0:54 0.100000 +0:54 0.100000 +0:54 Constant: +0:54 1 (const int) +0:54 1 (const int) +0:54 Constant: +0:54 3 (const int) +0:55 move second child to first child ( temp 4-component vector of int) +0:55 'iv4' ( temp 4-component vector of int) +0:55 textureGatherOffset ( global 4-component vector of int) +0:55 'isamp2DA' ( uniform isampler2DArray) +0:55 Constant: +0:55 0.100000 +0:55 0.100000 +0:55 0.100000 +0:55 Constant: +0:55 1 (const int) +0:55 1 (const int) +0:55 'i' ( flat in int) +0:56 move second child to first child ( temp 4-component vector of int) +0:56 'iv4' ( temp 4-component vector of int) +0:56 textureGatherOffset ( global 4-component vector of int) +0:56 'isamp2DA' ( uniform isampler2DArray) +0:56 Constant: +0:56 0.100000 +0:56 0.100000 +0:56 0.100000 +0:56 Constant: +0:56 1 (const int) +0:56 1 (const int) +0:56 Constant: +0:56 4 (const int) +0:57 move second child to first child ( temp 4-component vector of int) +0:57 'iv4' ( temp 4-component vector of int) +0:57 textureGatherOffset ( global 4-component vector of int) +0:57 'isamp2DA' ( uniform isampler2DArray) +0:57 Constant: +0:57 0.100000 +0:57 0.100000 +0:57 0.100000 +0:57 Constant: +0:57 1 (const int) +0:57 1 (const int) +0:57 Constant: +0:57 3 (const int) +0:58 move second child to first child ( temp 4-component vector of int) +0:58 'iv4' ( temp 4-component vector of int) +0:58 textureGatherOffset ( global 4-component vector of int) +0:58 'isamp2DA' ( uniform isampler2DArray) +0:58 Constant: +0:58 0.100000 +0:58 0.100000 +0:58 0.100000 +0:58 Construct ivec2 ( temp 2-component vector of int) +0:58 'i' ( flat in int) +0:60 Sequence +0:60 move second child to first child ( temp 4-component vector of float) +0:60 'c' ( temp 4-component vector of float) +0:60 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:80 Function Definition: foo23( ( global void) 0:80 Function Parameters: -0:82 Sequence -0:82 Sequence -0:82 move second child to first child ( temp 2-component vector of float) -0:82 'v2' ( temp 2-component vector of float) -0:82 dPdxFine ( global 2-component vector of float) -0:82 'in2' ( smooth in 2-component vector of float) -0:83 Sequence -0:83 move second child to first child ( temp 3-component vector of float) -0:83 'v3' ( temp 3-component vector of float) -0:83 dPdyCoarse ( global 3-component vector of float) -0:83 'in3' ( smooth in 3-component vector of float) -0:84 Sequence -0:84 move second child to first child ( temp 4-component vector of float) -0:84 'v4' ( temp 4-component vector of float) -0:84 add ( temp 4-component vector of float) -0:84 fwidthCoarse ( global 4-component vector of float) -0:84 'in4' ( smooth in 4-component vector of float) -0:84 fwidthFine ( global 4-component vector of float) -0:84 'in4' ( smooth in 4-component vector of float) -0:89 move second child to first child ( temp 2-component vector of float) -0:89 'v2' ( temp 2-component vector of float) -0:89 frexp ( global 2-component vector of float) -0:89 'v2' ( temp 2-component vector of float) -0:89 'i2' ( temp 2-component vector of int) -0:90 move second child to first child ( temp 3-component vector of float) -0:90 'v3' ( temp 3-component vector of float) -0:90 ldexp ( global 3-component vector of float) -0:90 'v3' ( temp 3-component vector of float) -0:90 'i3' ( temp 3-component vector of int) -0:92 move second child to first child ( temp uint) -0:92 'u1' ( temp uint) -0:92 PackUnorm4x8 ( global uint) -0:92 'v4' ( temp 4-component vector of float) -0:93 move second child to first child ( temp uint) -0:93 'u1' ( temp uint) -0:93 PackSnorm4x8 ( global uint) -0:93 'v4' ( temp 4-component vector of float) -0:94 move second child to first child ( temp 4-component vector of float) -0:94 'v4' ( temp 4-component vector of float) -0:94 UnpackUnorm4x8 ( global 4-component vector of float) -0:94 'u1' ( temp uint) -0:95 move second child to first child ( temp 4-component vector of float) -0:95 'v4' ( temp 4-component vector of float) -0:95 UnpackSnorm4x8 ( global 4-component vector of float) -0:95 'u1' ( temp uint) -0:99 move second child to first child ( temp double) -0:99 'd' ( temp double) -0:99 PackDouble2x32 ( global double) -0:99 'u2' ( temp 2-component vector of uint) -0:100 move second child to first child ( temp 2-component vector of uint) -0:100 'u2' ( temp 2-component vector of uint) -0:100 UnpackDouble2x32 ( global 2-component vector of uint) -0:100 'd' ( temp double) -0:117 Function Definition: interp( ( global void) -0:117 Function Parameters: -0:119 Sequence -0:119 interpolateAtCentroid ( global 2-component vector of float) -0:119 'colorfc' ( centroid flat in 2-component vector of float) -0:120 interpolateAtCentroid ( global 4-component vector of float) -0:120 'colorSampIn' ( smooth sample in 4-component vector of float) -0:121 interpolateAtCentroid ( global 4-component vector of float) -0:121 'colorfsi' ( noperspective in 4-component vector of float) -0:122 interpolateAtCentroid ( global float) -0:122 'scalarIn' ( smooth in float) -0:123 Constant: -0:123 0.000000 -0:124 interpolateAtCentroid ( global 3-component vector of float) -0:124 direct index ( smooth sample temp 3-component vector of float) -0:124 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) -0:124 Constant: -0:124 2 (const int) -0:125 interpolateAtCentroid ( global 2-component vector of float) -0:125 vector swizzle ( temp 2-component vector of float) -0:125 direct index ( smooth sample temp 3-component vector of float) -0:125 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) -0:125 Constant: -0:125 2 (const int) -0:125 Sequence -0:125 Constant: -0:125 0 (const int) -0:125 Constant: -0:125 1 (const int) -0:127 Constant: -0:127 0.000000 -0:128 interpolateAtSample ( global 3-component vector of float) -0:128 indirect index ( smooth sample temp 3-component vector of float) -0:128 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) -0:128 'i' ( flat in int) -0:128 Constant: -0:128 0 (const int) -0:129 interpolateAtSample ( global float) -0:129 x: direct index for structure ( global float) -0:129 's1' ( smooth in structure{ global float x}) -0:129 Constant: -0:129 0 (const int) -0:129 Constant: -0:129 2 (const int) -0:130 interpolateAtSample ( global float) -0:130 'scalarIn' ( smooth in float) -0:130 Constant: -0:130 1 (const int) -0:132 Constant: -0:132 0.000000 -0:133 interpolateAtOffset ( global 3-component vector of float) -0:133 direct index ( smooth sample temp 3-component vector of float) -0:133 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) -0:133 Constant: -0:133 2 (const int) -0:133 Constant: -0:133 0.200000 -0:133 0.200000 -0:134 interpolateAtOffset ( global 2-component vector of float) -0:134 vector swizzle ( temp 2-component vector of float) -0:134 direct index ( smooth sample temp 3-component vector of float) -0:134 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) -0:134 Constant: -0:134 2 (const int) -0:134 Sequence -0:134 Constant: -0:134 0 (const int) -0:134 Constant: -0:134 1 (const int) -0:134 Constant: -0:134 0.200000 -0:134 0.200000 -0:135 interpolateAtOffset ( global float) -0:135 add ( temp float) -0:135 'scalarIn' ( smooth in float) -0:135 'scalarIn' ( smooth in float) -0:135 Constant: -0:135 0.200000 -0:135 0.200000 -0:136 interpolateAtOffset ( global float) -0:136 x: direct index for structure ( global float) -0:136 's2' ( sample temp structure{ global float x}) -0:136 Constant: -0:136 0 (const int) -0:136 Constant: -0:136 0.200000 -0:136 0.200000 -0:139 interpolateAtCentroid ( global float) -0:139 'f' ( temp float) -0:140 interpolateAtSample ( global 4-component vector of float) -0:140 'outp' ( out 4-component vector of float) -0:140 Constant: -0:140 0 (const int) -0:161 Function Definition: qlod( ( global void) -0:161 Function Parameters: 0:? Sequence -0:168 move second child to first child ( temp 2-component vector of float) -0:168 'lod' ( temp 2-component vector of float) -0:168 textureQueryLod ( global 2-component vector of float) -0:168 'samp1D' ( uniform sampler1D) -0:168 'pf' ( temp float) -0:169 move second child to first child ( temp 2-component vector of float) -0:169 'lod' ( temp 2-component vector of float) -0:169 textureQueryLod ( global 2-component vector of float) -0:169 'isamp2D' ( uniform isampler2D) -0:169 'pf2' ( temp 2-component vector of float) -0:170 move second child to first child ( temp 2-component vector of float) -0:170 'lod' ( temp 2-component vector of float) -0:170 textureQueryLod ( global 2-component vector of float) -0:170 'usamp3D' ( uniform usampler3D) -0:170 'pf3' ( temp 3-component vector of float) -0:171 move second child to first child ( temp 2-component vector of float) -0:171 'lod' ( temp 2-component vector of float) -0:171 textureQueryLod ( global 2-component vector of float) -0:171 'sampCube' ( uniform samplerCube) -0:171 'pf3' ( temp 3-component vector of float) -0:172 move second child to first child ( temp 2-component vector of float) -0:172 'lod' ( temp 2-component vector of float) -0:172 textureQueryLod ( global 2-component vector of float) -0:172 'isamp1DA' ( uniform isampler1DArray) -0:172 'pf' ( temp float) -0:173 move second child to first child ( temp 2-component vector of float) -0:173 'lod' ( temp 2-component vector of float) -0:173 textureQueryLod ( global 2-component vector of float) -0:173 'usamp2DA' ( uniform usampler2DArray) -0:173 'pf2' ( temp 2-component vector of float) -0:174 move second child to first child ( temp 2-component vector of float) -0:174 'lod' ( temp 2-component vector of float) -0:174 textureQueryLod ( global 2-component vector of float) -0:174 'isampCubeA' ( uniform isamplerCubeArray) -0:174 'pf3' ( temp 3-component vector of float) -0:176 move second child to first child ( temp 2-component vector of float) -0:176 'lod' ( temp 2-component vector of float) -0:176 textureQueryLod ( global 2-component vector of float) -0:176 'samp1Ds' ( uniform sampler1DShadow) -0:176 'pf' ( temp float) -0:177 move second child to first child ( temp 2-component vector of float) -0:177 'lod' ( temp 2-component vector of float) -0:177 textureQueryLod ( global 2-component vector of float) -0:177 'samp2Ds' ( uniform sampler2DShadow) -0:177 'pf2' ( temp 2-component vector of float) -0:178 move second child to first child ( temp 2-component vector of float) -0:178 'lod' ( temp 2-component vector of float) -0:178 textureQueryLod ( global 2-component vector of float) -0:178 'sampCubes' ( uniform samplerCubeShadow) -0:178 'pf3' ( temp 3-component vector of float) -0:179 move second child to first child ( temp 2-component vector of float) -0:179 'lod' ( temp 2-component vector of float) -0:179 textureQueryLod ( global 2-component vector of float) -0:179 'samp1DAs' ( uniform sampler1DArrayShadow) -0:179 'pf' ( temp float) -0:180 move second child to first child ( temp 2-component vector of float) -0:180 'lod' ( temp 2-component vector of float) -0:180 textureQueryLod ( global 2-component vector of float) -0:180 'samp2DAs' ( uniform sampler2DArrayShadow) -0:180 'pf2' ( temp 2-component vector of float) -0:181 move second child to first child ( temp 2-component vector of float) -0:181 'lod' ( temp 2-component vector of float) -0:181 textureQueryLod ( global 2-component vector of float) -0:181 'sampCubeAs' ( uniform samplerCubeArrayShadow) -0:181 'pf3' ( temp 3-component vector of float) -0:183 'lod' ( temp 2-component vector of float) -0:184 'lod' ( temp 2-component vector of float) -0:190 Function Definition: bitwiseConv( ( global void) -0:190 Function Parameters: -0:192 Sequence -0:192 move second child to first child ( temp uint) -0:192 'iout' ( out uint) -0:192 bitwise and ( temp uint) -0:192 'uu' ( uniform uint) -0:192 Convert int to uint ( temp uint) -0:192 'i' ( flat in int) -0:193 add second child into first child ( temp uint) -0:193 'iout' ( out uint) -0:193 exclusive-or ( temp uint) -0:193 'uu' ( uniform uint) -0:193 Convert int to uint ( temp uint) -0:193 'i' ( flat in int) -0:194 add second child into first child ( temp uint) -0:194 'iout' ( out uint) -0:194 inclusive-or ( temp uint) -0:194 Convert int to uint ( temp uint) -0:194 'i' ( flat in int) -0:194 'uu' ( uniform uint) -0:198 Function Definition: subT1( ( temp float) -0:198 Function Parameters: -0:198 Sequence -0:198 Branch: Return with expression -0:198 Constant: -0:198 1.000000 -0:199 Function Definition: subT2( ( temp float) -0:199 Function Parameters: -0:199 Sequence -0:199 Branch: Return with expression -0:199 Constant: -0:199 1.000000 +0:84 textureProjGradOffset ( global float) +0:84 'u2drs' ( uniform sampler2DRectShadow) +0:84 'outp' ( out 4-component vector of float) +0:84 Constant: +0:84 0.000000 +0:84 0.000000 +0:84 Constant: +0:84 0.000000 +0:84 0.000000 +0:84 Convert float to int ( temp 2-component vector of int) +0:84 'c2D' ( smooth in 2-component vector of float) +0:85 textureProjGradOffset ( global float) +0:85 'u2drs' ( uniform sampler2DRectShadow) +0:85 'outp' ( out 4-component vector of float) +0:85 Constant: +0:85 0.000000 +0:85 0.000000 +0:85 Constant: +0:85 0.000000 +0:85 0.000000 +0:85 Constant: +0:85 3 (const int) +0:85 4 (const int) +0:86 textureProjGradOffset ( global float) +0:86 'u2drs' ( uniform sampler2DRectShadow) +0:86 'outp' ( out 4-component vector of float) +0:86 Constant: +0:86 0.000000 +0:86 0.000000 +0:86 Constant: +0:86 0.000000 +0:86 0.000000 +0:86 Constant: +0:86 15 (const int) +0:86 16 (const int) +0:87 textureProjGradOffset ( global float) +0:87 'u2drs' ( uniform sampler2DRectShadow) +0:87 'outp' ( out 4-component vector of float) +0:87 Constant: +0:87 0.000000 +0:87 0.000000 +0:87 Constant: +0:87 0.000000 +0:87 0.000000 +0:87 Constant: +0:87 -10 (const int) +0:87 20 (const int) +0:93 Function Definition: foo24( ( global void) +0:93 Function Parameters: +0:? Sequence +0:96 move second child to first child ( temp 3-component vector of double) +0:96 'df' ( temp 3-component vector of double) +0:96 modf ( global 3-component vector of double) +0:96 Convert float to double ( temp 3-component vector of double) +0:96 vector swizzle ( temp 3-component vector of float) +0:96 'outp' ( out 4-component vector of float) +0:96 Sequence +0:96 Constant: +0:96 0 (const int) +0:96 Constant: +0:96 1 (const int) +0:96 Constant: +0:96 2 (const int) +0:96 'di' ( temp 3-component vector of double) +0:104 Function Definition: foodc1( ( global void) +0:104 Function Parameters: +0:106 Sequence +0:106 Sequence +0:106 move second child to first child ( temp 2-component vector of float) +0:106 'v2' ( temp 2-component vector of float) +0:106 dPdxFine ( global 2-component vector of float) +0:106 'in2' ( smooth in 2-component vector of float) +0:107 Sequence +0:107 move second child to first child ( temp 3-component vector of float) +0:107 'v3' ( temp 3-component vector of float) +0:107 dPdyCoarse ( global 3-component vector of float) +0:107 'in3' ( smooth in 3-component vector of float) +0:108 Sequence +0:108 move second child to first child ( temp 4-component vector of float) +0:108 'v4' ( temp 4-component vector of float) +0:108 add ( temp 4-component vector of float) +0:108 fwidthCoarse ( global 4-component vector of float) +0:108 'in4' ( smooth in 4-component vector of float) +0:108 fwidthFine ( global 4-component vector of float) +0:108 'in4' ( smooth in 4-component vector of float) +0:113 Function Definition: foodc2( ( global void) +0:113 Function Parameters: +0:115 Sequence +0:115 Sequence +0:115 move second child to first child ( temp 2-component vector of float) +0:115 'v2' ( temp 2-component vector of float) +0:115 dPdxFine ( global 2-component vector of float) +0:115 'in2' ( smooth in 2-component vector of float) +0:116 Sequence +0:116 move second child to first child ( temp 3-component vector of float) +0:116 'v3' ( temp 3-component vector of float) +0:116 dPdyCoarse ( global 3-component vector of float) +0:116 'in3' ( smooth in 3-component vector of float) +0:117 Sequence +0:117 move second child to first child ( temp 4-component vector of float) +0:117 'v4' ( temp 4-component vector of float) +0:117 add ( temp 4-component vector of float) +0:117 fwidthCoarse ( global 4-component vector of float) +0:117 'in4' ( smooth in 4-component vector of float) +0:117 fwidthFine ( global 4-component vector of float) +0:117 'in4' ( smooth in 4-component vector of float) +0:122 move second child to first child ( temp 2-component vector of float) +0:122 'v2' ( temp 2-component vector of float) +0:122 frexp ( global 2-component vector of float) +0:122 'v2' ( temp 2-component vector of float) +0:122 'i2' ( temp 2-component vector of int) +0:123 move second child to first child ( temp 3-component vector of float) +0:123 'v3' ( temp 3-component vector of float) +0:123 ldexp ( global 3-component vector of float) +0:123 'v3' ( temp 3-component vector of float) +0:123 'i3' ( temp 3-component vector of int) +0:125 move second child to first child ( temp uint) +0:125 'u1' ( temp uint) +0:125 PackUnorm4x8 ( global uint) +0:125 'v4' ( temp 4-component vector of float) +0:126 move second child to first child ( temp uint) +0:126 'u1' ( temp uint) +0:126 PackSnorm4x8 ( global uint) +0:126 'v4' ( temp 4-component vector of float) +0:127 move second child to first child ( temp 4-component vector of float) +0:127 'v4' ( temp 4-component vector of float) +0:127 UnpackUnorm4x8 ( global 4-component vector of float) +0:127 'u1' ( temp uint) +0:128 move second child to first child ( temp 4-component vector of float) +0:128 'v4' ( temp 4-component vector of float) +0:128 UnpackSnorm4x8 ( global 4-component vector of float) +0:128 'u1' ( temp uint) +0:132 move second child to first child ( temp double) +0:132 'd' ( temp double) +0:132 PackDouble2x32 ( global double) +0:132 'u2' ( temp 2-component vector of uint) +0:133 move second child to first child ( temp 2-component vector of uint) +0:133 'u2' ( temp 2-component vector of uint) +0:133 UnpackDouble2x32 ( global 2-component vector of uint) +0:133 'd' ( temp double) +0:150 Function Definition: interp( ( global void) +0:150 Function Parameters: +0:152 Sequence +0:152 interpolateAtCentroid ( global 2-component vector of float) +0:152 'colorfc' ( centroid flat in 2-component vector of float) +0:153 interpolateAtCentroid ( global 4-component vector of float) +0:153 'colorSampIn' ( smooth sample in 4-component vector of float) +0:154 interpolateAtCentroid ( global 4-component vector of float) +0:154 'colorfsi' ( noperspective in 4-component vector of float) +0:155 interpolateAtCentroid ( global float) +0:155 'scalarIn' ( smooth in float) +0:156 Constant: +0:156 0.000000 +0:157 interpolateAtCentroid ( global 3-component vector of float) +0:157 direct index ( smooth sample temp 3-component vector of float) +0:157 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:157 Constant: +0:157 2 (const int) +0:158 interpolateAtCentroid ( global 2-component vector of float) +0:158 vector swizzle ( temp 2-component vector of float) +0:158 direct index ( smooth sample temp 3-component vector of float) +0:158 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:158 Constant: +0:158 2 (const int) +0:158 Sequence +0:158 Constant: +0:158 0 (const int) +0:158 Constant: +0:158 1 (const int) +0:160 Constant: +0:160 0.000000 +0:161 interpolateAtSample ( global 3-component vector of float) +0:161 indirect index ( smooth sample temp 3-component vector of float) +0:161 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:161 'i' ( flat in int) +0:161 Constant: +0:161 0 (const int) +0:162 interpolateAtSample ( global float) +0:162 x: direct index for structure ( global float) +0:162 's1' ( smooth in structure{ global float x}) +0:162 Constant: +0:162 0 (const int) +0:162 Constant: +0:162 2 (const int) +0:163 interpolateAtSample ( global float) +0:163 'scalarIn' ( smooth in float) +0:163 Constant: +0:163 1 (const int) +0:165 Constant: +0:165 0.000000 +0:166 interpolateAtOffset ( global 3-component vector of float) +0:166 direct index ( smooth sample temp 3-component vector of float) +0:166 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:166 Constant: +0:166 2 (const int) +0:166 Constant: +0:166 0.200000 +0:166 0.200000 +0:167 interpolateAtOffset ( global 2-component vector of float) +0:167 vector swizzle ( temp 2-component vector of float) +0:167 direct index ( smooth sample temp 3-component vector of float) +0:167 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:167 Constant: +0:167 2 (const int) +0:167 Sequence +0:167 Constant: +0:167 0 (const int) +0:167 Constant: +0:167 1 (const int) +0:167 Constant: +0:167 0.200000 +0:167 0.200000 +0:168 interpolateAtOffset ( global float) +0:168 add ( temp float) +0:168 'scalarIn' ( smooth in float) +0:168 'scalarIn' ( smooth in float) +0:168 Constant: +0:168 0.200000 +0:168 0.200000 +0:169 interpolateAtOffset ( global float) +0:169 x: direct index for structure ( global float) +0:169 's2' ( sample temp structure{ global float x}) +0:169 Constant: +0:169 0 (const int) +0:169 Constant: +0:169 0.200000 +0:169 0.200000 +0:172 interpolateAtCentroid ( global float) +0:172 'f' ( temp float) +0:173 interpolateAtSample ( global 4-component vector of float) +0:173 'outp' ( out 4-component vector of float) +0:173 Constant: +0:173 0 (const int) +0:194 Function Definition: qlod( ( global void) +0:194 Function Parameters: +0:? Sequence +0:201 move second child to first child ( temp 2-component vector of float) +0:201 'lod' ( temp 2-component vector of float) +0:201 textureQueryLod ( global 2-component vector of float) +0:201 'samp1D' ( uniform sampler1D) +0:201 'pf' ( temp float) +0:202 move second child to first child ( temp 2-component vector of float) +0:202 'lod' ( temp 2-component vector of float) +0:202 textureQueryLod ( global 2-component vector of float) +0:202 'isamp2D' ( uniform isampler2D) +0:202 'pf2' ( temp 2-component vector of float) +0:203 move second child to first child ( temp 2-component vector of float) +0:203 'lod' ( temp 2-component vector of float) +0:203 textureQueryLod ( global 2-component vector of float) +0:203 'usamp3D' ( uniform usampler3D) +0:203 'pf3' ( temp 3-component vector of float) +0:204 move second child to first child ( temp 2-component vector of float) +0:204 'lod' ( temp 2-component vector of float) +0:204 textureQueryLod ( global 2-component vector of float) +0:204 'sampCube' ( uniform samplerCube) +0:204 'pf3' ( temp 3-component vector of float) +0:205 move second child to first child ( temp 2-component vector of float) +0:205 'lod' ( temp 2-component vector of float) +0:205 textureQueryLod ( global 2-component vector of float) +0:205 'isamp1DA' ( uniform isampler1DArray) +0:205 'pf' ( temp float) +0:206 move second child to first child ( temp 2-component vector of float) +0:206 'lod' ( temp 2-component vector of float) +0:206 textureQueryLod ( global 2-component vector of float) +0:206 'usamp2DA' ( uniform usampler2DArray) +0:206 'pf2' ( temp 2-component vector of float) +0:207 move second child to first child ( temp 2-component vector of float) +0:207 'lod' ( temp 2-component vector of float) +0:207 textureQueryLod ( global 2-component vector of float) +0:207 'isampCubeA' ( uniform isamplerCubeArray) +0:207 'pf3' ( temp 3-component vector of float) +0:209 move second child to first child ( temp 2-component vector of float) +0:209 'lod' ( temp 2-component vector of float) +0:209 textureQueryLod ( global 2-component vector of float) +0:209 'samp1Ds' ( uniform sampler1DShadow) +0:209 'pf' ( temp float) +0:210 move second child to first child ( temp 2-component vector of float) +0:210 'lod' ( temp 2-component vector of float) +0:210 textureQueryLod ( global 2-component vector of float) +0:210 'samp2Ds' ( uniform sampler2DShadow) +0:210 'pf2' ( temp 2-component vector of float) +0:211 move second child to first child ( temp 2-component vector of float) +0:211 'lod' ( temp 2-component vector of float) +0:211 textureQueryLod ( global 2-component vector of float) +0:211 'sampCubes' ( uniform samplerCubeShadow) +0:211 'pf3' ( temp 3-component vector of float) +0:212 move second child to first child ( temp 2-component vector of float) +0:212 'lod' ( temp 2-component vector of float) +0:212 textureQueryLod ( global 2-component vector of float) +0:212 'samp1DAs' ( uniform sampler1DArrayShadow) +0:212 'pf' ( temp float) +0:213 move second child to first child ( temp 2-component vector of float) +0:213 'lod' ( temp 2-component vector of float) +0:213 textureQueryLod ( global 2-component vector of float) +0:213 'samp2DAs' ( uniform sampler2DArrayShadow) +0:213 'pf2' ( temp 2-component vector of float) +0:214 move second child to first child ( temp 2-component vector of float) +0:214 'lod' ( temp 2-component vector of float) +0:214 textureQueryLod ( global 2-component vector of float) +0:214 'sampCubeAs' ( uniform samplerCubeArrayShadow) +0:214 'pf3' ( temp 3-component vector of float) +0:216 'lod' ( temp 2-component vector of float) +0:217 'lod' ( temp 2-component vector of float) +0:223 Function Definition: bitwiseConv( ( global void) +0:223 Function Parameters: +0:225 Sequence +0:225 move second child to first child ( temp uint) +0:225 'iout' ( out uint) +0:225 bitwise and ( temp uint) +0:225 'uu' ( uniform uint) +0:225 Convert int to uint ( temp uint) +0:225 'i' ( flat in int) +0:226 add second child into first child ( temp uint) +0:226 'iout' ( out uint) +0:226 exclusive-or ( temp uint) +0:226 'uu' ( uniform uint) +0:226 Convert int to uint ( temp uint) +0:226 'i' ( flat in int) +0:227 add second child into first child ( temp uint) +0:227 'iout' ( out uint) +0:227 inclusive-or ( temp uint) +0:227 Convert int to uint ( temp uint) +0:227 'i' ( flat in int) +0:227 'uu' ( uniform uint) +0:231 Function Definition: subT1( ( temp float) +0:231 Function Parameters: +0:231 Sequence +0:231 Branch: Return with expression +0:231 Constant: +0:231 1.000000 +0:232 Function Definition: subT2( ( temp float) +0:232 Function Parameters: +0:232 Sequence +0:232 Branch: Return with expression +0:232 Constant: +0:232 1.000000 0:? Linker Objects 0:? 'c2D' ( smooth in 2-component vector of float) 0:? 'i' ( flat in int) @@ -512,6 +556,9 @@ ERROR: node is still EOpNull! 0:? 'arrayedSampler' ( uniform 5-element array of sampler2D) 0:? 'samp2dr' ( uniform usampler2DRect) 0:? 'isamp2DA' ( uniform isampler2DArray) +0:? 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu}) +0:? 'ssboStd430Arr' (layout( column_major shared) buffer 2-element array of block{layout( column_major shared) buffer int member01, layout( column_major shared) buffer 2-element array of int memberArr01, layout( column_major shared) buffer unsized 1-element array of int memberUnsizedArr01}) +0:? 'ssboSharedArr' (layout( column_major shared) buffer 2-element array of block{layout( column_major shared) buffer int member02, layout( column_major shared) buffer 2-element array of int memberArr02, layout( column_major shared) buffer unsized 1-element array of int memberUnsizedArr02}) 0:? 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) 0:? 'vl' (layout( location=4) smooth in 4-component vector of float) 0:? 'vl2' (layout( location=6) smooth in 4-component vector of float) @@ -558,128 +605,129 @@ Linked fragment stage: Shader version: 400 Requested GL_ARB_derivative_control Requested GL_ARB_separate_shader_objects +Requested GL_ARB_shader_storage_buffer_object gl_FragCoord pixel center is integer gl_FragCoord origin is upper left ERROR: node is still EOpNull! -0:10 Function Definition: main( ( global void) -0:10 Function Parameters: +0:43 Function Definition: main( ( global void) +0:43 Function Parameters: 0:? Sequence -0:13 move second child to first child ( temp 4-component vector of float) -0:13 'v' ( temp 4-component vector of float) -0:13 texture ( global 4-component vector of float) -0:13 indirect index ( temp sampler2D) -0:13 'arrayedSampler' ( uniform 5-element array of sampler2D) -0:13 'i' ( flat in int) -0:13 'c2D' ( smooth in 2-component vector of float) -0:14 move second child to first child ( temp float) -0:14 direct index ( temp float) -0:14 'outp' ( out 4-component vector of float) -0:14 Constant: -0:14 0 (const int) -0:14 direct index ( smooth temp float ClipDistance) -0:14 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) -0:14 Constant: -0:14 1 (const int) -0:18 Sequence -0:18 move second child to first child ( temp 4-component vector of uint) -0:18 'uv4' ( temp 4-component vector of uint) -0:18 textureGatherOffsets ( global 4-component vector of uint) -0:18 'samp2dr' ( uniform usampler2DRect) -0:18 'c2D' ( smooth in 2-component vector of float) -0:18 'offsets' ( temp 4-element array of 2-component vector of int) -0:18 Constant: -0:18 2 (const int) -0:19 move second child to first child ( temp 4-component vector of uint) -0:19 'uv4' ( temp 4-component vector of uint) -0:19 textureGatherOffsets ( global 4-component vector of uint) -0:19 'samp2dr' ( uniform usampler2DRect) -0:19 'c2D' ( smooth in 2-component vector of float) -0:19 Constant: -0:19 1 (const int) -0:19 2 (const int) -0:19 3 (const int) -0:19 4 (const int) -0:19 15 (const int) -0:19 16 (const int) -0:19 -2 (const int) -0:19 0 (const int) -0:19 Constant: -0:19 2 (const int) -0:20 Sequence -0:20 move second child to first child ( temp 4-component vector of float) -0:20 'v4' ( temp 4-component vector of float) -0:20 textureGather ( global 4-component vector of float) -0:20 direct index ( temp sampler2D) -0:20 'arrayedSampler' ( uniform 5-element array of sampler2D) -0:20 Constant: -0:20 0 (const int) -0:20 'c2D' ( smooth in 2-component vector of float) -0:21 Sequence -0:21 move second child to first child ( temp 4-component vector of int) -0:21 'iv4' ( temp 4-component vector of int) -0:21 textureGatherOffset ( global 4-component vector of int) -0:21 'isamp2DA' ( uniform isampler2DArray) -0:21 Constant: -0:21 0.100000 -0:21 0.100000 -0:21 0.100000 -0:21 Constant: -0:21 1 (const int) -0:21 1 (const int) -0:21 Constant: -0:21 3 (const int) -0:22 move second child to first child ( temp 4-component vector of int) -0:22 'iv4' ( temp 4-component vector of int) -0:22 textureGatherOffset ( global 4-component vector of int) -0:22 'isamp2DA' ( uniform isampler2DArray) -0:22 Constant: -0:22 0.100000 -0:22 0.100000 -0:22 0.100000 -0:22 Constant: -0:22 1 (const int) -0:22 1 (const int) -0:22 'i' ( flat in int) -0:23 move second child to first child ( temp 4-component vector of int) -0:23 'iv4' ( temp 4-component vector of int) -0:23 textureGatherOffset ( global 4-component vector of int) -0:23 'isamp2DA' ( uniform isampler2DArray) -0:23 Constant: -0:23 0.100000 -0:23 0.100000 -0:23 0.100000 -0:23 Constant: -0:23 1 (const int) -0:23 1 (const int) -0:23 Constant: -0:23 4 (const int) -0:24 move second child to first child ( temp 4-component vector of int) -0:24 'iv4' ( temp 4-component vector of int) -0:24 textureGatherOffset ( global 4-component vector of int) -0:24 'isamp2DA' ( uniform isampler2DArray) -0:24 Constant: -0:24 0.100000 -0:24 0.100000 -0:24 0.100000 -0:24 Constant: -0:24 1 (const int) -0:24 1 (const int) -0:24 Constant: -0:24 3 (const int) -0:25 move second child to first child ( temp 4-component vector of int) -0:25 'iv4' ( temp 4-component vector of int) -0:25 textureGatherOffset ( global 4-component vector of int) -0:25 'isamp2DA' ( uniform isampler2DArray) -0:25 Constant: -0:25 0.100000 -0:25 0.100000 -0:25 0.100000 -0:25 Construct ivec2 ( temp 2-component vector of int) -0:25 'i' ( flat in int) -0:27 Sequence -0:27 move second child to first child ( temp 4-component vector of float) -0:27 'c' ( temp 4-component vector of float) -0:27 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:46 move second child to first child ( temp 4-component vector of float) +0:46 'v' ( temp 4-component vector of float) +0:46 texture ( global 4-component vector of float) +0:46 indirect index ( temp sampler2D) +0:46 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:46 'i' ( flat in int) +0:46 'c2D' ( smooth in 2-component vector of float) +0:47 move second child to first child ( temp float) +0:47 direct index ( temp float) +0:47 'outp' ( out 4-component vector of float) +0:47 Constant: +0:47 0 (const int) +0:47 direct index ( smooth temp float ClipDistance) +0:47 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) +0:47 Constant: +0:47 1 (const int) +0:51 Sequence +0:51 move second child to first child ( temp 4-component vector of uint) +0:51 'uv4' ( temp 4-component vector of uint) +0:51 textureGatherOffsets ( global 4-component vector of uint) +0:51 'samp2dr' ( uniform usampler2DRect) +0:51 'c2D' ( smooth in 2-component vector of float) +0:51 'offsets' ( temp 4-element array of 2-component vector of int) +0:51 Constant: +0:51 2 (const int) +0:52 move second child to first child ( temp 4-component vector of uint) +0:52 'uv4' ( temp 4-component vector of uint) +0:52 textureGatherOffsets ( global 4-component vector of uint) +0:52 'samp2dr' ( uniform usampler2DRect) +0:52 'c2D' ( smooth in 2-component vector of float) +0:52 Constant: +0:52 1 (const int) +0:52 2 (const int) +0:52 3 (const int) +0:52 4 (const int) +0:52 15 (const int) +0:52 16 (const int) +0:52 -2 (const int) +0:52 0 (const int) +0:52 Constant: +0:52 2 (const int) +0:53 Sequence +0:53 move second child to first child ( temp 4-component vector of float) +0:53 'v4' ( temp 4-component vector of float) +0:53 textureGather ( global 4-component vector of float) +0:53 direct index ( temp sampler2D) +0:53 'arrayedSampler' ( uniform 5-element array of sampler2D) +0:53 Constant: +0:53 0 (const int) +0:53 'c2D' ( smooth in 2-component vector of float) +0:54 Sequence +0:54 move second child to first child ( temp 4-component vector of int) +0:54 'iv4' ( temp 4-component vector of int) +0:54 textureGatherOffset ( global 4-component vector of int) +0:54 'isamp2DA' ( uniform isampler2DArray) +0:54 Constant: +0:54 0.100000 +0:54 0.100000 +0:54 0.100000 +0:54 Constant: +0:54 1 (const int) +0:54 1 (const int) +0:54 Constant: +0:54 3 (const int) +0:55 move second child to first child ( temp 4-component vector of int) +0:55 'iv4' ( temp 4-component vector of int) +0:55 textureGatherOffset ( global 4-component vector of int) +0:55 'isamp2DA' ( uniform isampler2DArray) +0:55 Constant: +0:55 0.100000 +0:55 0.100000 +0:55 0.100000 +0:55 Constant: +0:55 1 (const int) +0:55 1 (const int) +0:55 'i' ( flat in int) +0:56 move second child to first child ( temp 4-component vector of int) +0:56 'iv4' ( temp 4-component vector of int) +0:56 textureGatherOffset ( global 4-component vector of int) +0:56 'isamp2DA' ( uniform isampler2DArray) +0:56 Constant: +0:56 0.100000 +0:56 0.100000 +0:56 0.100000 +0:56 Constant: +0:56 1 (const int) +0:56 1 (const int) +0:56 Constant: +0:56 4 (const int) +0:57 move second child to first child ( temp 4-component vector of int) +0:57 'iv4' ( temp 4-component vector of int) +0:57 textureGatherOffset ( global 4-component vector of int) +0:57 'isamp2DA' ( uniform isampler2DArray) +0:57 Constant: +0:57 0.100000 +0:57 0.100000 +0:57 0.100000 +0:57 Constant: +0:57 1 (const int) +0:57 1 (const int) +0:57 Constant: +0:57 3 (const int) +0:58 move second child to first child ( temp 4-component vector of int) +0:58 'iv4' ( temp 4-component vector of int) +0:58 textureGatherOffset ( global 4-component vector of int) +0:58 'isamp2DA' ( uniform isampler2DArray) +0:58 Constant: +0:58 0.100000 +0:58 0.100000 +0:58 0.100000 +0:58 Construct ivec2 ( temp 2-component vector of int) +0:58 'i' ( flat in int) +0:60 Sequence +0:60 move second child to first child ( temp 4-component vector of float) +0:60 'c' ( temp 4-component vector of float) +0:60 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) 0:? Linker Objects 0:? 'c2D' ( smooth in 2-component vector of float) 0:? 'i' ( flat in int) @@ -687,6 +735,9 @@ ERROR: node is still EOpNull! 0:? 'arrayedSampler' ( uniform 5-element array of sampler2D) 0:? 'samp2dr' ( uniform usampler2DRect) 0:? 'isamp2DA' ( uniform isampler2DArray) +0:? 'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu}) +0:? 'ssboStd430Arr' (layout( column_major shared) buffer 2-element array of block{layout( column_major shared) buffer int member01, layout( column_major shared) buffer 2-element array of int memberArr01, layout( column_major shared) buffer unsized 1-element array of int memberUnsizedArr01}) +0:? 'ssboSharedArr' (layout( column_major shared) buffer 2-element array of block{layout( column_major shared) buffer int member02, layout( column_major shared) buffer 2-element array of int memberArr02, layout( column_major shared) buffer unsized 1-element array of int memberUnsizedArr02}) 0:? 'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance) 0:? 'vl' (layout( location=4) smooth in 4-component vector of float) 0:? 'vl2' (layout( location=6) smooth in 4-component vector of float) diff --git a/Test/baseResults/410.geom.out b/Test/baseResults/410.geom.out index 498da5acb2..3cc7900c08 100644 --- a/Test/baseResults/410.geom.out +++ b/Test/baseResults/410.geom.out @@ -2,7 +2,7 @@ ERROR: 0:8: 'myIn' : cannot redeclare a built-in block with a user name ERROR: 0:12: 'gl_myIn' : no declaration found for redeclaration ERROR: 0:20: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use -ERROR: 0:32: 'gl_Position' : no such field in structure +ERROR: 0:32: 'gl_Position' : no such field in structure 'gl_in' ERROR: 0:32: '=' : cannot convert from ' temp block{ in float PointSize gl_PointSize}' to ' temp 4-component vector of float' ERROR: 0:33: 'gl_Position' : member of nameless block was not redeclared ERROR: 0:33: 'assign' : l-value required "gl_PerVertex" (can't modify void) diff --git a/Test/baseResults/420.tesc.out b/Test/baseResults/420.tesc.out index a1f881cb19..4410c846f2 100644 --- a/Test/baseResults/420.tesc.out +++ b/Test/baseResults/420.tesc.out @@ -2,7 +2,7 @@ ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb -ERROR: 0:26: 'gl_PointSize' : no such field in structure +ERROR: 0:26: 'gl_PointSize' : no such field in structure 'gl_out' ERROR: 0:26: 'assign' : cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}' ERROR: 0:29: 'out' : type must be an array: outf ERROR: 0:43: 'vertices' : must be greater than 0 diff --git a/Test/baseResults/440.frag.out b/Test/baseResults/440.frag.out index c7ff72845b..9de029a21b 100644 --- a/Test/baseResults/440.frag.out +++ b/Test/baseResults/440.frag.out @@ -1,7 +1,7 @@ 440.frag ERROR: 0:11: 'location' : overlapping use of location 4 ERROR: 0:13: 'component' : type overflows the available 4 components -ERROR: 0:22: 'location' : fragment outputs sharing the same location must be the same basic type 30 +ERROR: 0:22: 'location' : the aliases sharing the location 30 must be the same basic type and interpolation qualification ERROR: 0:24: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) ERROR: 0:25: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) ERROR: 0:26: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) @@ -43,11 +43,11 @@ ERROR: 0:62: 'layout' : offset/align can only be used on a uniform or buffer ERROR: 0:63: 'layout' : offset/align can only be used on a uniform or buffer ERROR: 0:84: 'align' : must be a power of 2 ERROR: 0:83: 'offset' : cannot lie in previous members -ERROR: 0:85: 'offset' : must be a multiple of the member's alignment +ERROR: 0:85: 'offset' : must be a multiple of the member's alignment (layout offset = 68 | member alignment = 8) ERROR: 0:103: 'align' : must be a power of 2 ERROR: 0:105: 'align' : must be a power of 2 ERROR: 0:102: 'offset' : cannot lie in previous members -ERROR: 0:104: 'offset' : must be a multiple of the member's alignment +ERROR: 0:104: 'offset' : must be a multiple of the member's alignment (layout offset = 68 | member alignment = 8) ERROR: 49 compilation errors. No code generated. diff --git a/Test/baseResults/440.vert.out b/Test/baseResults/440.vert.out index 6c975c09a6..f341548523 100644 --- a/Test/baseResults/440.vert.out +++ b/Test/baseResults/440.vert.out @@ -10,16 +10,21 @@ ERROR: 0:39: 'component' : type overflows the available 4 components ERROR: 0:40: 'component' : type overflows the available 4 components ERROR: 0:42: 'component' : cannot apply to a matrix, structure, or block ERROR: 0:43: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:43: 'location' : the aliases sharing the location 33 must be the same basic type and interpolation qualification ERROR: 0:44: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:44: 'location' : the aliases sharing the location 34 must be the same basic type and interpolation qualification ERROR: 0:46: 'component' : must specify 'location' to use 'component' ERROR: 0:52: 'location' : overlapping use of location 40 ERROR: 0:54: 'component' : type overflows the available 4 components ERROR: 0:55: 'component' : type overflows the available 4 components ERROR: 0:57: 'component' : cannot apply to a matrix, structure, or block ERROR: 0:58: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:58: 'location' : the aliases sharing the location 43 must be the same basic type and interpolation qualification ERROR: 0:61: 'location/component/index' : cannot declare a default, use a full declaration +ERROR: 0:64: 'location' : the aliases sharing the location 50 must be the same basic type and interpolation qualification ERROR: 0:66: 'component' : doubles cannot start on an odd-numbered component ERROR: 0:67: 'component' : type overflows the available 4 components +ERROR: 0:69: 'location' : the aliases sharing the location 53 must be the same basic type and interpolation qualification ERROR: 0:71: 'location' : overlapping use of location 55 ERROR: 0:75: 'location' : overlapping use of location 57 ERROR: 0:78: 'location' : overlapping use of location 59 @@ -56,7 +61,7 @@ ERROR: 0:193: 'assign' : l-value required "gl_BaseVertexARB" (can't modify shad ERROR: 0:194: 'assign' : l-value required "gl_BaseInstanceARB" (can't modify shader input) ERROR: 0:195: 'assign' : l-value required "gl_DrawIDARB" (can't modify shader input) ERROR: 0:196: 'glBaseInstanceARB' : undeclared identifier -ERROR: 57 compilation errors. No code generated. +ERROR: 62 compilation errors. No code generated. Shader version: 440 diff --git a/Test/baseResults/450.geom.out b/Test/baseResults/450.geom.out index e75bf939ad..b51a674f29 100644 --- a/Test/baseResults/450.geom.out +++ b/Test/baseResults/450.geom.out @@ -1,6 +1,6 @@ 450.geom ERROR: 0:15: '[' : array index out of range '3' -ERROR: 0:15: 'gl_Position' : no such field in structure +ERROR: 0:15: 'gl_Position' : no such field in structure 'gl_in' ERROR: 0:19: 'points' : can only apply to a standalone qualifier ERROR: 3 compilation errors. No code generated. diff --git a/Test/baseResults/460.frag.out b/Test/baseResults/460.frag.out index 8670e6e143..ced3bb842b 100644 --- a/Test/baseResults/460.frag.out +++ b/Test/baseResults/460.frag.out @@ -1,5 +1,7 @@ 460.frag -ERROR: 0:22: 'attribute' : required extension not requested: GL_EXT_control_flow_attributes +ERROR: 0:22: 'attribute' : required extension not requested: Possible extensions include: +GL_EXT_control_flow_attributes +GL_EXT_control_flow_attributes2 ERROR: 0:23: 'attribute' : required extension not requested: GL_EXT_control_flow_attributes ERROR: 0:30: 'dependency_length' : must be positive ERROR: 0:31: 'dependency_length' : must be positive diff --git a/Test/baseResults/GL_ARB_bindless_texture.frag.out b/Test/baseResults/GL_ARB_bindless_texture.frag.out new file mode 100644 index 0000000000..3f902c9913 --- /dev/null +++ b/Test/baseResults/GL_ARB_bindless_texture.frag.out @@ -0,0 +1,205 @@ +GL_ARB_bindless_texture.frag +Shader version: 460 +Requested GL_ARB_bindless_texture +0:? Sequence +0:38 Function Definition: main( ( global void) +0:38 Function Parameters: +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'color0' ( out 4-component vector of float) +0:40 texture ( global 4-component vector of float) +0:40 's0' ( uniform sampler2D) +0:40 'coord' ( uniform 2-component vector of float) +0:41 move second child to first child ( temp 4-component vector of float) +0:41 'color1' ( out 4-component vector of float) +0:41 texture ( global 4-component vector of float) +0:41 's1' ( smooth in sampler2D) +0:41 'coord' ( uniform 2-component vector of float) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'color2' ( out 4-component vector of float) +0:42 texture ( global 4-component vector of float) +0:42 packUint2x32 ( temp sampler2D) +0:42 's2' ( uniform 2-component vector of uint) +0:42 'coord' ( uniform 2-component vector of float) +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'color3' ( out 4-component vector of float) +0:43 texture ( global 4-component vector of float) +0:43 packUint2x32 ( temp sampler2D) +0:43 's3' ( uniform 2-component vector of int) +0:43 'coord' ( uniform 2-component vector of float) +0:44 move second child to first child ( temp 4-component vector of float) +0:44 'color4' ( out 4-component vector of float) +0:44 texture ( global 4-component vector of float) +0:44 indirect index ( smooth temp sampler2D) +0:44 indirect index ( smooth temp 3-element array of sampler2D) +0:44 's4' ( smooth in 2-element array of 3-element array of sampler2D) +0:44 'index' ( uniform int) +0:44 'index' ( uniform int) +0:44 'coord' ( uniform 2-component vector of float) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 'color5' ( out 4-component vector of float) +0:45 texture ( global 4-component vector of float) +0:45 s5: direct index for structure (layout( column_major shared layoutBindlessSampler) uniform sampler2D) +0:45 indirect index (layout( column_major shared) temp block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5}) +0:45 'bbs5' (layout( column_major shared) uniform 2-element array of block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5}) +0:45 'index' ( uniform int) +0:45 Constant: +0:45 0 (const int) +0:45 'coord' ( uniform 2-component vector of float) +0:46 move second child to first child ( temp 4-component vector of float) +0:46 'color6' ( out 4-component vector of float) +0:46 textureFetch ( global 4-component vector of float) +0:46 's6' ( smooth in samplerBuffer) +0:46 'icoord' ( uniform int) +0:47 move second child to first child ( temp 4-component vector of float) +0:47 'color7' ( out 4-component vector of float) +0:47 textureFetch ( global 4-component vector of float) +0:47 s7: direct index for structure (layout( column_major shared layoutBindlessSampler) uniform samplerBuffer) +0:47 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared layoutBindlessSampler) uniform samplerBuffer s7}) +0:47 Constant: +0:47 0 (const uint) +0:47 'icoord' ( uniform int) +0:48 move second child to first child ( temp 4-component vector of float) +0:48 'color8' ( out 4-component vector of float) +0:48 textureFetch ( global 4-component vector of float) +0:48 s8: direct index for structure (layout( column_major shared layoutBindlessSampler) buffer samplerBuffer) +0:48 'anon@1' (layout( column_major shared) buffer block{layout( column_major shared layoutBindlessSampler) buffer samplerBuffer s8}) +0:48 Constant: +0:48 0 (const uint) +0:48 'icoord' ( uniform int) +0:49 move second child to first child ( temp 4-component vector of float) +0:49 'color9' ( out 4-component vector of float) +0:49 imageLoad ( global 4-component vector of float) +0:49 'i9' (layout( rgba8 layoutBindlessImage) smooth in image2D) +0:49 Constant: +0:49 0 (const int) +0:49 0 (const int) +0:? Linker Objects +0:? 's0' ( uniform sampler2D) +0:? 's1' ( smooth in sampler2D) +0:? 's2' ( uniform 2-component vector of uint) +0:? 's3' ( uniform 2-component vector of int) +0:? 'index' ( uniform int) +0:? 's4' ( smooth in 2-element array of 3-element array of sampler2D) +0:? 'bbs5' (layout( column_major shared) uniform 2-element array of block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5}) +0:? 's6' ( smooth in samplerBuffer) +0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared layoutBindlessSampler) uniform samplerBuffer s7}) +0:? 'anon@1' (layout( column_major shared) buffer block{layout( column_major shared layoutBindlessSampler) buffer samplerBuffer s8}) +0:? 'i9' (layout( rgba8 layoutBindlessImage) smooth in image2D) +0:? 'coord' ( uniform 2-component vector of float) +0:? 'icoord' ( uniform int) +0:? 'color0' ( out 4-component vector of float) +0:? 'color1' ( out 4-component vector of float) +0:? 'color2' ( out 4-component vector of float) +0:? 'color3' ( out 4-component vector of float) +0:? 'color4' ( out 4-component vector of float) +0:? 'color5' ( out 4-component vector of float) +0:? 'color6' ( out 4-component vector of float) +0:? 'color7' ( out 4-component vector of float) +0:? 'color8' ( out 4-component vector of float) +0:? 'color9' ( out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 460 +Requested GL_ARB_bindless_texture +0:? Sequence +0:38 Function Definition: main( ( global void) +0:38 Function Parameters: +0:40 Sequence +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'color0' ( out 4-component vector of float) +0:40 texture ( global 4-component vector of float) +0:40 's0' ( uniform sampler2D) +0:40 'coord' ( uniform 2-component vector of float) +0:41 move second child to first child ( temp 4-component vector of float) +0:41 'color1' ( out 4-component vector of float) +0:41 texture ( global 4-component vector of float) +0:41 's1' ( smooth in sampler2D) +0:41 'coord' ( uniform 2-component vector of float) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'color2' ( out 4-component vector of float) +0:42 texture ( global 4-component vector of float) +0:42 packUint2x32 ( temp sampler2D) +0:42 's2' ( uniform 2-component vector of uint) +0:42 'coord' ( uniform 2-component vector of float) +0:43 move second child to first child ( temp 4-component vector of float) +0:43 'color3' ( out 4-component vector of float) +0:43 texture ( global 4-component vector of float) +0:43 packUint2x32 ( temp sampler2D) +0:43 's3' ( uniform 2-component vector of int) +0:43 'coord' ( uniform 2-component vector of float) +0:44 move second child to first child ( temp 4-component vector of float) +0:44 'color4' ( out 4-component vector of float) +0:44 texture ( global 4-component vector of float) +0:44 indirect index ( smooth temp sampler2D) +0:44 indirect index ( smooth temp 3-element array of sampler2D) +0:44 's4' ( smooth in 2-element array of 3-element array of sampler2D) +0:44 'index' ( uniform int) +0:44 'index' ( uniform int) +0:44 'coord' ( uniform 2-component vector of float) +0:45 move second child to first child ( temp 4-component vector of float) +0:45 'color5' ( out 4-component vector of float) +0:45 texture ( global 4-component vector of float) +0:45 s5: direct index for structure (layout( column_major shared layoutBindlessSampler) uniform sampler2D) +0:45 indirect index (layout( column_major shared) temp block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5}) +0:45 'bbs5' (layout( column_major shared) uniform 2-element array of block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5}) +0:45 'index' ( uniform int) +0:45 Constant: +0:45 0 (const int) +0:45 'coord' ( uniform 2-component vector of float) +0:46 move second child to first child ( temp 4-component vector of float) +0:46 'color6' ( out 4-component vector of float) +0:46 textureFetch ( global 4-component vector of float) +0:46 's6' ( smooth in samplerBuffer) +0:46 'icoord' ( uniform int) +0:47 move second child to first child ( temp 4-component vector of float) +0:47 'color7' ( out 4-component vector of float) +0:47 textureFetch ( global 4-component vector of float) +0:47 s7: direct index for structure (layout( column_major shared layoutBindlessSampler) uniform samplerBuffer) +0:47 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared layoutBindlessSampler) uniform samplerBuffer s7}) +0:47 Constant: +0:47 0 (const uint) +0:47 'icoord' ( uniform int) +0:48 move second child to first child ( temp 4-component vector of float) +0:48 'color8' ( out 4-component vector of float) +0:48 textureFetch ( global 4-component vector of float) +0:48 s8: direct index for structure (layout( column_major shared layoutBindlessSampler) buffer samplerBuffer) +0:48 'anon@1' (layout( column_major shared) buffer block{layout( column_major shared layoutBindlessSampler) buffer samplerBuffer s8}) +0:48 Constant: +0:48 0 (const uint) +0:48 'icoord' ( uniform int) +0:49 move second child to first child ( temp 4-component vector of float) +0:49 'color9' ( out 4-component vector of float) +0:49 imageLoad ( global 4-component vector of float) +0:49 'i9' (layout( rgba8 layoutBindlessImage) smooth in image2D) +0:49 Constant: +0:49 0 (const int) +0:49 0 (const int) +0:? Linker Objects +0:? 's0' ( uniform sampler2D) +0:? 's1' ( smooth in sampler2D) +0:? 's2' ( uniform 2-component vector of uint) +0:? 's3' ( uniform 2-component vector of int) +0:? 'index' ( uniform int) +0:? 's4' ( smooth in 2-element array of 3-element array of sampler2D) +0:? 'bbs5' (layout( column_major shared) uniform 2-element array of block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5}) +0:? 's6' ( smooth in samplerBuffer) +0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared layoutBindlessSampler) uniform samplerBuffer s7}) +0:? 'anon@1' (layout( column_major shared) buffer block{layout( column_major shared layoutBindlessSampler) buffer samplerBuffer s8}) +0:? 'i9' (layout( rgba8 layoutBindlessImage) smooth in image2D) +0:? 'coord' ( uniform 2-component vector of float) +0:? 'icoord' ( uniform int) +0:? 'color0' ( out 4-component vector of float) +0:? 'color1' ( out 4-component vector of float) +0:? 'color2' ( out 4-component vector of float) +0:? 'color3' ( out 4-component vector of float) +0:? 'color4' ( out 4-component vector of float) +0:? 'color5' ( out 4-component vector of float) +0:? 'color6' ( out 4-component vector of float) +0:? 'color7' ( out 4-component vector of float) +0:? 'color8' ( out 4-component vector of float) +0:? 'color9' ( out 4-component vector of float) + diff --git a/Test/baseResults/GL_ARB_texture_multisample.vert.out b/Test/baseResults/GL_ARB_texture_multisample.vert.out new file mode 100644 index 0000000000..16912a4a16 --- /dev/null +++ b/Test/baseResults/GL_ARB_texture_multisample.vert.out @@ -0,0 +1,245 @@ +GL_ARB_texture_multisample.vert +Shader version: 140 +Requested GL_ARB_texture_multisample +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 float) +0:16 'result' ( smooth out float) +0:16 direct index ( temp float) +0:16 textureFetch ( global 4-component vector of float) +0:16 'data' ( uniform sampler2DMS) +0:16 Constant: +0:16 0 (const int) +0:16 0 (const int) +0:16 Constant: +0:16 3 (const int) +0:16 Constant: +0:16 0 (const int) +0:17 Sequence +0:17 move second child to first child ( temp 2-component vector of int) +0:17 'temp' ( temp 2-component vector of int) +0:17 textureSize ( global 2-component vector of int) +0:17 'data' ( uniform sampler2DMS) +0:18 move second child to first child ( temp float) +0:18 'result' ( smooth out float) +0:18 direct index ( temp float) +0:18 textureFetch ( global 4-component vector of float) +0:18 'data1' ( uniform sampler2DMSArray) +0:18 Constant: +0:18 0 (const int) +0:18 0 (const int) +0:18 0 (const int) +0:18 Constant: +0:18 3 (const int) +0:18 Constant: +0:18 0 (const int) +0:19 Sequence +0:19 move second child to first child ( temp 3-component vector of int) +0:19 'temp1' ( temp 3-component vector of int) +0:19 textureSize ( global 3-component vector of int) +0:19 'data1' ( uniform sampler2DMSArray) +0:20 move second child to first child ( temp int) +0:20 'result1' ( smooth out int) +0:20 direct index ( temp int) +0:20 textureFetch ( global 4-component vector of int) +0:20 'data2' ( uniform isampler2DMS) +0:20 Constant: +0:20 0 (const int) +0:20 0 (const int) +0:20 Constant: +0:20 3 (const int) +0:20 Constant: +0:20 0 (const int) +0:21 move second child to first child ( temp 2-component vector of int) +0:21 'temp' ( temp 2-component vector of int) +0:21 textureSize ( global 2-component vector of int) +0:21 'data2' ( uniform isampler2DMS) +0:22 move second child to first child ( temp uint) +0:22 'result2' ( smooth out uint) +0:22 direct index ( temp uint) +0:22 textureFetch ( global 4-component vector of uint) +0:22 'data3' ( uniform usampler2DMSArray) +0:22 Constant: +0:22 0 (const int) +0:22 0 (const int) +0:22 0 (const int) +0:22 Constant: +0:22 3 (const int) +0:22 Constant: +0:22 0 (const int) +0:23 move second child to first child ( temp 3-component vector of int) +0:23 'temp1' ( temp 3-component vector of int) +0:23 textureSize ( global 3-component vector of int) +0:23 'data3' ( uniform usampler2DMSArray) +0:24 move second child to first child ( temp uint) +0:24 'result2' ( smooth out uint) +0:24 direct index ( temp uint) +0:24 textureFetch ( global 4-component vector of uint) +0:24 'data4' ( uniform usampler2DMS) +0:24 Constant: +0:24 0 (const int) +0:24 0 (const int) +0:24 Constant: +0:24 3 (const int) +0:24 Constant: +0:24 0 (const int) +0:25 move second child to first child ( temp 2-component vector of int) +0:25 'temp' ( temp 2-component vector of int) +0:25 textureSize ( global 2-component vector of int) +0:25 'data4' ( uniform usampler2DMS) +0:26 move second child to first child ( temp int) +0:26 'result1' ( smooth out int) +0:26 direct index ( temp int) +0:26 textureFetch ( global 4-component vector of int) +0:26 'data5' ( uniform isampler2DMSArray) +0:26 Constant: +0:26 0 (const int) +0:26 0 (const int) +0:26 0 (const int) +0:26 Constant: +0:26 3 (const int) +0:26 Constant: +0:26 0 (const int) +0:27 move second child to first child ( temp 3-component vector of int) +0:27 'temp1' ( temp 3-component vector of int) +0:27 textureSize ( global 3-component vector of int) +0:27 'data5' ( uniform isampler2DMSArray) +0:? Linker Objects +0:? 'result' ( smooth out float) +0:? 'result1' ( smooth out int) +0:? 'result2' ( smooth out uint) +0:? 'data' ( uniform sampler2DMS) +0:? 'data1' ( uniform sampler2DMSArray) +0:? 'data2' ( uniform isampler2DMS) +0:? 'data3' ( uniform usampler2DMSArray) +0:? 'data4' ( uniform usampler2DMS) +0:? 'data5' ( uniform isampler2DMSArray) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 140 +Requested GL_ARB_texture_multisample +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 float) +0:16 'result' ( smooth out float) +0:16 direct index ( temp float) +0:16 textureFetch ( global 4-component vector of float) +0:16 'data' ( uniform sampler2DMS) +0:16 Constant: +0:16 0 (const int) +0:16 0 (const int) +0:16 Constant: +0:16 3 (const int) +0:16 Constant: +0:16 0 (const int) +0:17 Sequence +0:17 move second child to first child ( temp 2-component vector of int) +0:17 'temp' ( temp 2-component vector of int) +0:17 textureSize ( global 2-component vector of int) +0:17 'data' ( uniform sampler2DMS) +0:18 move second child to first child ( temp float) +0:18 'result' ( smooth out float) +0:18 direct index ( temp float) +0:18 textureFetch ( global 4-component vector of float) +0:18 'data1' ( uniform sampler2DMSArray) +0:18 Constant: +0:18 0 (const int) +0:18 0 (const int) +0:18 0 (const int) +0:18 Constant: +0:18 3 (const int) +0:18 Constant: +0:18 0 (const int) +0:19 Sequence +0:19 move second child to first child ( temp 3-component vector of int) +0:19 'temp1' ( temp 3-component vector of int) +0:19 textureSize ( global 3-component vector of int) +0:19 'data1' ( uniform sampler2DMSArray) +0:20 move second child to first child ( temp int) +0:20 'result1' ( smooth out int) +0:20 direct index ( temp int) +0:20 textureFetch ( global 4-component vector of int) +0:20 'data2' ( uniform isampler2DMS) +0:20 Constant: +0:20 0 (const int) +0:20 0 (const int) +0:20 Constant: +0:20 3 (const int) +0:20 Constant: +0:20 0 (const int) +0:21 move second child to first child ( temp 2-component vector of int) +0:21 'temp' ( temp 2-component vector of int) +0:21 textureSize ( global 2-component vector of int) +0:21 'data2' ( uniform isampler2DMS) +0:22 move second child to first child ( temp uint) +0:22 'result2' ( smooth out uint) +0:22 direct index ( temp uint) +0:22 textureFetch ( global 4-component vector of uint) +0:22 'data3' ( uniform usampler2DMSArray) +0:22 Constant: +0:22 0 (const int) +0:22 0 (const int) +0:22 0 (const int) +0:22 Constant: +0:22 3 (const int) +0:22 Constant: +0:22 0 (const int) +0:23 move second child to first child ( temp 3-component vector of int) +0:23 'temp1' ( temp 3-component vector of int) +0:23 textureSize ( global 3-component vector of int) +0:23 'data3' ( uniform usampler2DMSArray) +0:24 move second child to first child ( temp uint) +0:24 'result2' ( smooth out uint) +0:24 direct index ( temp uint) +0:24 textureFetch ( global 4-component vector of uint) +0:24 'data4' ( uniform usampler2DMS) +0:24 Constant: +0:24 0 (const int) +0:24 0 (const int) +0:24 Constant: +0:24 3 (const int) +0:24 Constant: +0:24 0 (const int) +0:25 move second child to first child ( temp 2-component vector of int) +0:25 'temp' ( temp 2-component vector of int) +0:25 textureSize ( global 2-component vector of int) +0:25 'data4' ( uniform usampler2DMS) +0:26 move second child to first child ( temp int) +0:26 'result1' ( smooth out int) +0:26 direct index ( temp int) +0:26 textureFetch ( global 4-component vector of int) +0:26 'data5' ( uniform isampler2DMSArray) +0:26 Constant: +0:26 0 (const int) +0:26 0 (const int) +0:26 0 (const int) +0:26 Constant: +0:26 3 (const int) +0:26 Constant: +0:26 0 (const int) +0:27 move second child to first child ( temp 3-component vector of int) +0:27 'temp1' ( temp 3-component vector of int) +0:27 textureSize ( global 3-component vector of int) +0:27 'data5' ( uniform isampler2DMSArray) +0:? Linker Objects +0:? 'result' ( smooth out float) +0:? 'result1' ( smooth out int) +0:? 'result2' ( smooth out uint) +0:? 'data' ( uniform sampler2DMS) +0:? 'data1' ( uniform sampler2DMSArray) +0:? 'data2' ( uniform isampler2DMS) +0:? 'data3' ( uniform usampler2DMSArray) +0:? 'data4' ( uniform usampler2DMS) +0:? 'data5' ( uniform isampler2DMSArray) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/Test/baseResults/GL_EXT_draw_instanced.vert.out b/Test/baseResults/GL_EXT_draw_instanced.vert.out new file mode 100644 index 0000000000..cce01a17a0 --- /dev/null +++ b/Test/baseResults/GL_EXT_draw_instanced.vert.out @@ -0,0 +1,173 @@ +GL_EXT_draw_instanced.vert +Shader version: 120 +Requested GL_EXT_draw_instanced +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'vertex' ( temp 4-component vector of float) +0:12 add ( temp 4-component vector of float) +0:12 Construct vec4 ( temp 4-component vector of float) +0:12 divide ( temp 2-component vector of float) +0:12 vector swizzle ( temp 2-component vector of float) +0:12 direct index ( temp 4-component vector of float) +0:12 'va' ( uniform 64-element array of 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:12 Sequence +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 3.000000 +0:12 vector swizzle ( temp 2-component vector of float) +0:12 direct index ( temp 4-component vector of float) +0:12 'va' ( uniform 64-element array of 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:12 Sequence +0:12 Constant: +0:12 2 (const int) +0:12 Constant: +0:12 3 (const int) +0:12 Construct vec4 ( temp 4-component vector of float) +0:12 indirect index ( temp 3-component vector of float) +0:12 'instanceOffsets' ( uniform 3-element array of 3-component vector of float) +0:12 'gl_InstanceID' ( gl_InstanceId int InstanceId) +0:12 Constant: +0:12 1.000000 +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'color' ( global 4-component vector of float) +0:13 Constant: +0:13 0.000000 +0:13 0.000000 +0:13 0.000000 +0:13 0.000000 +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'i' ( temp int) +0:14 Constant: +0:14 1 (const int) +0:14 Loop with condition tested first +0:14 Loop Condition +0:14 Compare Less Than ( temp bool) +0:14 'i' ( temp int) +0:14 Constant: +0:14 64 (const int) +0:14 Loop Body +0:15 add second child into first child ( temp 4-component vector of float) +0:15 'color' ( global 4-component vector of float) +0:15 indirect index ( temp 4-component vector of float) +0:15 'va' ( uniform 64-element array of 4-component vector of float) +0:15 'i' ( temp int) +0:14 Loop Terminal Expression +0:14 Post-Increment ( temp int) +0:14 'i' ( temp int) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'gl_Position' ( gl_Position 4-component vector of float Position) +0:16 matrix-times-vector ( temp 4-component vector of float) +0:16 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float) +0:16 'vertex' ( temp 4-component vector of float) +0:17 move second child to first child ( temp float) +0:17 'gl_PointSize' ( gl_PointSize float PointSize) +0:17 Constant: +0:17 1.000000 +0:? Linker Objects +0:? 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float) +0:? 'instanceOffsets' ( uniform 3-element array of 3-component vector of float) +0:? 'va' ( uniform 64-element array of 4-component vector of float) +0:? 'color' ( global 4-component vector of float) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 120 +Requested GL_EXT_draw_instanced +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'vertex' ( temp 4-component vector of float) +0:12 add ( temp 4-component vector of float) +0:12 Construct vec4 ( temp 4-component vector of float) +0:12 divide ( temp 2-component vector of float) +0:12 vector swizzle ( temp 2-component vector of float) +0:12 direct index ( temp 4-component vector of float) +0:12 'va' ( uniform 64-element array of 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:12 Sequence +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 3.000000 +0:12 vector swizzle ( temp 2-component vector of float) +0:12 direct index ( temp 4-component vector of float) +0:12 'va' ( uniform 64-element array of 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:12 Sequence +0:12 Constant: +0:12 2 (const int) +0:12 Constant: +0:12 3 (const int) +0:12 Construct vec4 ( temp 4-component vector of float) +0:12 indirect index ( temp 3-component vector of float) +0:12 'instanceOffsets' ( uniform 3-element array of 3-component vector of float) +0:12 'gl_InstanceID' ( gl_InstanceId int InstanceId) +0:12 Constant: +0:12 1.000000 +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'color' ( global 4-component vector of float) +0:13 Constant: +0:13 0.000000 +0:13 0.000000 +0:13 0.000000 +0:13 0.000000 +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'i' ( temp int) +0:14 Constant: +0:14 1 (const int) +0:14 Loop with condition tested first +0:14 Loop Condition +0:14 Compare Less Than ( temp bool) +0:14 'i' ( temp int) +0:14 Constant: +0:14 64 (const int) +0:14 Loop Body +0:15 add second child into first child ( temp 4-component vector of float) +0:15 'color' ( global 4-component vector of float) +0:15 indirect index ( temp 4-component vector of float) +0:15 'va' ( uniform 64-element array of 4-component vector of float) +0:15 'i' ( temp int) +0:14 Loop Terminal Expression +0:14 Post-Increment ( temp int) +0:14 'i' ( temp int) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'gl_Position' ( gl_Position 4-component vector of float Position) +0:16 matrix-times-vector ( temp 4-component vector of float) +0:16 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float) +0:16 'vertex' ( temp 4-component vector of float) +0:17 move second child to first child ( temp float) +0:17 'gl_PointSize' ( gl_PointSize float PointSize) +0:17 Constant: +0:17 1.000000 +0:? Linker Objects +0:? 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float) +0:? 'instanceOffsets' ( uniform 3-element array of 3-component vector of float) +0:? 'va' ( uniform 64-element array of 4-component vector of float) +0:? 'color' ( global 4-component vector of float) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/Test/baseResults/GL_EXT_texture_array.frag.out b/Test/baseResults/GL_EXT_texture_array.frag.out new file mode 100644 index 0000000000..977d932d37 --- /dev/null +++ b/Test/baseResults/GL_EXT_texture_array.frag.out @@ -0,0 +1,149 @@ +GL_EXT_texture_array.frag +Shader version: 110 +Requested GL_EXT_texture_array +0:? Sequence +0:10 Function Definition: foo( ( global void) +0:10 Function Parameters: +0:? Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'v4' ( temp 4-component vector of float) +0:17 texture ( global 4-component vector of float) +0:17 's1DA' ( uniform sampler1DArray) +0:17 'v2' ( temp 2-component vector of float) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'v4' ( temp 4-component vector of float) +0:18 texture ( global 4-component vector of float) +0:18 's2DA' ( uniform sampler2DArray) +0:18 'v3' ( temp 3-component vector of float) +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'v4' ( temp 4-component vector of float) +0:19 texture ( global 4-component vector of float) +0:19 's1DAS' ( uniform sampler1DArrayShadow) +0:19 'v3' ( temp 3-component vector of float) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'v4' ( temp 4-component vector of float) +0:20 texture ( global 4-component vector of float) +0:20 's2DAS' ( uniform sampler2DArrayShadow) +0:20 'v4' ( temp 4-component vector of float) +0:22 move second child to first child ( temp 4-component vector of float) +0:22 'v4' ( temp 4-component vector of float) +0:22 texture ( global 4-component vector of float) +0:22 's1DA' ( uniform sampler1DArray) +0:22 'v2' ( temp 2-component vector of float) +0:22 'f' ( temp float) +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'v4' ( temp 4-component vector of float) +0:23 texture ( global 4-component vector of float) +0:23 's2DA' ( uniform sampler2DArray) +0:23 'v3' ( temp 3-component vector of float) +0:23 'f' ( temp float) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 'v4' ( temp 4-component vector of float) +0:24 texture ( global 4-component vector of float) +0:24 's1DAS' ( uniform sampler1DArrayShadow) +0:24 'v3' ( temp 3-component vector of float) +0:24 'f' ( temp float) +0:26 move second child to first child ( temp 4-component vector of float) +0:26 'v4' ( temp 4-component vector of float) +0:26 textureLod ( global 4-component vector of float) +0:26 's1DA' ( uniform sampler1DArray) +0:26 'v2' ( temp 2-component vector of float) +0:26 'f' ( temp float) +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'v4' ( temp 4-component vector of float) +0:27 textureLod ( global 4-component vector of float) +0:27 's2DA' ( uniform sampler2DArray) +0:27 'v3' ( temp 3-component vector of float) +0:27 'f' ( temp float) +0:28 move second child to first child ( temp 4-component vector of float) +0:28 'v4' ( temp 4-component vector of float) +0:28 textureLod ( global 4-component vector of float) +0:28 's1DAS' ( uniform sampler1DArrayShadow) +0:28 'v3' ( temp 3-component vector of float) +0:28 'f' ( temp float) +0:31 Function Definition: main( ( global void) +0:31 Function Parameters: +0:33 Sequence +0:33 Function Call: foo( ( global void) +0:? Linker Objects +0:? 's1DA' ( uniform sampler1DArray) +0:? 's2DA' ( uniform sampler2DArray) +0:? 's1DAS' ( uniform sampler1DArrayShadow) +0:? 's2DAS' ( uniform sampler2DArrayShadow) + + +Linked fragment stage: + + +Shader version: 110 +Requested GL_EXT_texture_array +0:? Sequence +0:10 Function Definition: foo( ( global void) +0:10 Function Parameters: +0:? Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'v4' ( temp 4-component vector of float) +0:17 texture ( global 4-component vector of float) +0:17 's1DA' ( uniform sampler1DArray) +0:17 'v2' ( temp 2-component vector of float) +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'v4' ( temp 4-component vector of float) +0:18 texture ( global 4-component vector of float) +0:18 's2DA' ( uniform sampler2DArray) +0:18 'v3' ( temp 3-component vector of float) +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'v4' ( temp 4-component vector of float) +0:19 texture ( global 4-component vector of float) +0:19 's1DAS' ( uniform sampler1DArrayShadow) +0:19 'v3' ( temp 3-component vector of float) +0:20 move second child to first child ( temp 4-component vector of float) +0:20 'v4' ( temp 4-component vector of float) +0:20 texture ( global 4-component vector of float) +0:20 's2DAS' ( uniform sampler2DArrayShadow) +0:20 'v4' ( temp 4-component vector of float) +0:22 move second child to first child ( temp 4-component vector of float) +0:22 'v4' ( temp 4-component vector of float) +0:22 texture ( global 4-component vector of float) +0:22 's1DA' ( uniform sampler1DArray) +0:22 'v2' ( temp 2-component vector of float) +0:22 'f' ( temp float) +0:23 move second child to first child ( temp 4-component vector of float) +0:23 'v4' ( temp 4-component vector of float) +0:23 texture ( global 4-component vector of float) +0:23 's2DA' ( uniform sampler2DArray) +0:23 'v3' ( temp 3-component vector of float) +0:23 'f' ( temp float) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 'v4' ( temp 4-component vector of float) +0:24 texture ( global 4-component vector of float) +0:24 's1DAS' ( uniform sampler1DArrayShadow) +0:24 'v3' ( temp 3-component vector of float) +0:24 'f' ( temp float) +0:26 move second child to first child ( temp 4-component vector of float) +0:26 'v4' ( temp 4-component vector of float) +0:26 textureLod ( global 4-component vector of float) +0:26 's1DA' ( uniform sampler1DArray) +0:26 'v2' ( temp 2-component vector of float) +0:26 'f' ( temp float) +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'v4' ( temp 4-component vector of float) +0:27 textureLod ( global 4-component vector of float) +0:27 's2DA' ( uniform sampler2DArray) +0:27 'v3' ( temp 3-component vector of float) +0:27 'f' ( temp float) +0:28 move second child to first child ( temp 4-component vector of float) +0:28 'v4' ( temp 4-component vector of float) +0:28 textureLod ( global 4-component vector of float) +0:28 's1DAS' ( uniform sampler1DArrayShadow) +0:28 'v3' ( temp 3-component vector of float) +0:28 'f' ( temp float) +0:31 Function Definition: main( ( global void) +0:31 Function Parameters: +0:33 Sequence +0:33 Function Call: foo( ( global void) +0:? Linker Objects +0:? 's1DA' ( uniform sampler1DArray) +0:? 's2DA' ( uniform sampler2DArray) +0:? 's1DAS' ( uniform sampler1DArrayShadow) +0:? 's2DAS' ( uniform sampler2DArrayShadow) + diff --git a/Test/baseResults/UTF8BOM.vert.out b/Test/baseResults/UTF8BOM.vert.out new file mode 100644 index 0000000000..19db13f678 --- /dev/null +++ b/Test/baseResults/UTF8BOM.vert.out @@ -0,0 +1 @@ +UTF8BOM.vert diff --git a/Test/baseResults/atomicAdd.comp.out b/Test/baseResults/atomicAdd.comp.out index 6752a713ff..5c9afc8976 100644 --- a/Test/baseResults/atomicAdd.comp.out +++ b/Test/baseResults/atomicAdd.comp.out @@ -1,5 +1,5 @@ atomicAdd.comp -ERROR: 0:18: 'atomicAdd' : Atomic memory function can only be used for shader storage block member or shared variable. +ERROR: 0:18: 'atomicAdd' : Only l-values corresponding to shader block storage or shared variables can be used with atomic memory functions. ERROR: 1 compilation errors. No code generated. diff --git a/Test/baseResults/compoundsuffix.frag.hlsl b/Test/baseResults/compoundsuffix.frag.hlsl index 5a62488acb..f8dcfaa808 100644 --- a/Test/baseResults/compoundsuffix.frag.hlsl +++ b/Test/baseResults/compoundsuffix.frag.hlsl @@ -1,45 +1,45 @@ -compoundsuffix.frag.hlsl -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 22 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 20 - ExecutionMode 4 OriginUpperLeft - Source HLSL 500 - Name 4 "main" - Name 11 "@main(vf4;" - Name 10 "fragColor" - Name 15 "fragColor" - Name 16 "param" - Name 20 "fragColor" - Decorate 20(fragColor) Location 0 - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8: TypePointer Function 7(fvec4) - 9: TypeFunction 2 8(ptr) - 13: 6(float) Constant 1065353216 - 14: 7(fvec4) ConstantComposite 13 13 13 13 - 19: TypePointer Output 7(fvec4) - 20(fragColor): 19(ptr) Variable Output - 4(main): 2 Function None 3 - 5: Label - 15(fragColor): 8(ptr) Variable Function - 16(param): 8(ptr) Variable Function - 17: 2 FunctionCall 11(@main(vf4;) 16(param) - 18: 7(fvec4) Load 16(param) - Store 15(fragColor) 18 - 21: 7(fvec4) Load 15(fragColor) - Store 20(fragColor) 21 - Return - FunctionEnd - 11(@main(vf4;): 2 Function None 9 - 10(fragColor): 8(ptr) FunctionParameter - 12: Label - Store 10(fragColor) 14 - Return - FunctionEnd +compoundsuffix.frag.hlsl +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 22 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 20 + ExecutionMode 4 OriginUpperLeft + Source HLSL 500 + Name 4 "main" + Name 11 "@main(vf4;" + Name 10 "fragColor" + Name 15 "fragColor" + Name 16 "param" + Name 20 "fragColor" + Decorate 20(fragColor) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 2 8(ptr) + 13: 6(float) Constant 1065353216 + 14: 7(fvec4) ConstantComposite 13 13 13 13 + 19: TypePointer Output 7(fvec4) + 20(fragColor): 19(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 15(fragColor): 8(ptr) Variable Function + 16(param): 8(ptr) Variable Function + 17: 2 FunctionCall 11(@main(vf4;) 16(param) + 18: 7(fvec4) Load 16(param) + Store 15(fragColor) 18 + 21: 7(fvec4) Load 15(fragColor) + Store 20(fragColor) 21 + Return + FunctionEnd + 11(@main(vf4;): 2 Function None 9 + 10(fragColor): 8(ptr) FunctionParameter + 12: Label + Store 10(fragColor) 14 + Return + FunctionEnd diff --git a/Test/baseResults/compoundsuffix.vert.glsl b/Test/baseResults/compoundsuffix.vert.glsl index 58354a409d..8535b478a7 100644 --- a/Test/baseResults/compoundsuffix.vert.glsl +++ b/Test/baseResults/compoundsuffix.vert.glsl @@ -1,15 +1,15 @@ -compoundsuffix.vert.glsl -Shader version: 100 -0:? Sequence -0:1 Function Definition: main( ( global void) -0:1 Function Parameters: -0:3 Sequence -0:3 move second child to first child ( temp highp 4-component vector of float) -0:3 'gl_Position' ( gl_Position highp 4-component vector of float Position) -0:3 Constant: -0:3 1.000000 -0:3 1.000000 -0:3 1.000000 -0:3 1.000000 -0:? Linker Objects - +compoundsuffix.vert.glsl +Shader version: 100 +0:? Sequence +0:1 Function Definition: main( ( global void) +0:1 Function Parameters: +0:3 Sequence +0:3 move second child to first child ( temp highp 4-component vector of float) +0:3 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:3 Constant: +0:3 1.000000 +0:3 1.000000 +0:3 1.000000 +0:3 1.000000 +0:? Linker Objects + diff --git a/Test/baseResults/constFoldIntMin.frag.out b/Test/baseResults/constFoldIntMin.frag.out index 2c45ca8018..e7dd353266 100644 --- a/Test/baseResults/constFoldIntMin.frag.out +++ b/Test/baseResults/constFoldIntMin.frag.out @@ -25,7 +25,7 @@ Requested GL_ARB_gpu_shader_int64 0:9 move second child to first child ( temp int16_t) 0:9 'x' ( temp int16_t) 0:9 Constant: -0:9 0 (const int8_t) +0:9 0 (const int16_t) 0:10 Sequence 0:10 move second child to first child ( temp int) 0:10 'y' ( temp int) diff --git a/Test/baseResults/coord_conventions.frag.out b/Test/baseResults/coord_conventions.frag.out new file mode 100644 index 0000000000..656c60874c --- /dev/null +++ b/Test/baseResults/coord_conventions.frag.out @@ -0,0 +1,255 @@ +coord_conventions.frag +Shader version: 140 +Requested GL_ARB_explicit_attrib_location +Requested GL_ARB_fragment_coord_conventions +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +0:? Sequence +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'myColor' (layout( location=0) out 4-component vector of float) +0:19 Constant: +0:19 0.200000 +0:19 0.200000 +0:19 0.200000 +0:19 0.200000 +0:20 Test condition and select ( temp void) +0:20 Condition +0:20 Compare Greater Than or Equal ( temp bool) +0:20 direct index ( temp float) +0:20 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 10.000000 +0:20 true case +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 direct index ( temp float) +0:21 'myColor' (layout( location=0) out 4-component vector of float) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 0.800000 +0:23 Test condition and select ( temp void) +0:23 Condition +0:23 Compare Equal ( temp bool) +0:23 direct index ( temp float) +0:23 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:23 Constant: +0:23 1 (const int) +0:23 trunc ( global float) +0:23 direct index ( temp float) +0:23 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:23 Constant: +0:23 1 (const int) +0:23 true case +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 'myColor' (layout( location=0) out 4-component vector of float) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 0.800000 +0:26 Test condition and select ( temp void) +0:26 Condition +0:26 Compare Equal ( temp bool) +0:26 direct index ( temp float) +0:26 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:26 Constant: +0:26 0 (const int) +0:26 trunc ( global float) +0:26 direct index ( temp float) +0:26 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:26 Constant: +0:26 0 (const int) +0:26 true case +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 direct index ( temp float) +0:27 'myColor' (layout( location=0) out 4-component vector of float) +0:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 0.800000 +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of float) +0:30 'diff' ( temp 4-component vector of float) +0:30 subtract ( temp 4-component vector of float) +0:30 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:30 'i' ( smooth in 4-component vector of float) +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Greater Than ( temp bool) +0:31 Absolute value ( global float) +0:31 direct index ( temp float) +0:31 'diff' ( temp 4-component vector of float) +0:31 Constant: +0:31 2 (const int) +0:31 Constant: +0:31 0.001000 +0:31 true case +0:32 move second child to first child ( temp float) +0:32 direct index ( temp float) +0:32 'myColor' (layout( location=0) out 4-component vector of float) +0:32 Constant: +0:32 2 (const int) +0:32 Constant: +0:32 0.500000 +0:33 Test condition and select ( temp void) +0:33 Condition +0:33 Compare Greater Than ( temp bool) +0:33 Absolute value ( global float) +0:33 direct index ( temp float) +0:33 'diff' ( temp 4-component vector of float) +0:33 Constant: +0:33 3 (const int) +0:33 Constant: +0:33 0.001000 +0:33 true case +0:34 move second child to first child ( temp float) +0:34 direct index ( temp float) +0:34 'myColor' (layout( location=0) out 4-component vector of float) +0:34 Constant: +0:34 3 (const int) +0:34 Constant: +0:34 0.500000 +0:? Linker Objects +0:? 'i' ( smooth in 4-component vector of float) +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'myColor' (layout( location=0) out 4-component vector of float) +0:? 'eps' ( const float) +0:? 0.001000 + + +Linked fragment stage: + + +Shader version: 140 +Requested GL_ARB_explicit_attrib_location +Requested GL_ARB_fragment_coord_conventions +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +0:? Sequence +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'myColor' (layout( location=0) out 4-component vector of float) +0:19 Constant: +0:19 0.200000 +0:19 0.200000 +0:19 0.200000 +0:19 0.200000 +0:20 Test condition and select ( temp void) +0:20 Condition +0:20 Compare Greater Than or Equal ( temp bool) +0:20 direct index ( temp float) +0:20 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 10.000000 +0:20 true case +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 direct index ( temp float) +0:21 'myColor' (layout( location=0) out 4-component vector of float) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 0.800000 +0:23 Test condition and select ( temp void) +0:23 Condition +0:23 Compare Equal ( temp bool) +0:23 direct index ( temp float) +0:23 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:23 Constant: +0:23 1 (const int) +0:23 trunc ( global float) +0:23 direct index ( temp float) +0:23 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:23 Constant: +0:23 1 (const int) +0:23 true case +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 'myColor' (layout( location=0) out 4-component vector of float) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 0.800000 +0:26 Test condition and select ( temp void) +0:26 Condition +0:26 Compare Equal ( temp bool) +0:26 direct index ( temp float) +0:26 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:26 Constant: +0:26 0 (const int) +0:26 trunc ( global float) +0:26 direct index ( temp float) +0:26 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:26 Constant: +0:26 0 (const int) +0:26 true case +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 direct index ( temp float) +0:27 'myColor' (layout( location=0) out 4-component vector of float) +0:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 0.800000 +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of float) +0:30 'diff' ( temp 4-component vector of float) +0:30 subtract ( temp 4-component vector of float) +0:30 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:30 'i' ( smooth in 4-component vector of float) +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Greater Than ( temp bool) +0:31 Absolute value ( global float) +0:31 direct index ( temp float) +0:31 'diff' ( temp 4-component vector of float) +0:31 Constant: +0:31 2 (const int) +0:31 Constant: +0:31 0.001000 +0:31 true case +0:32 move second child to first child ( temp float) +0:32 direct index ( temp float) +0:32 'myColor' (layout( location=0) out 4-component vector of float) +0:32 Constant: +0:32 2 (const int) +0:32 Constant: +0:32 0.500000 +0:33 Test condition and select ( temp void) +0:33 Condition +0:33 Compare Greater Than ( temp bool) +0:33 Absolute value ( global float) +0:33 direct index ( temp float) +0:33 'diff' ( temp 4-component vector of float) +0:33 Constant: +0:33 3 (const int) +0:33 Constant: +0:33 0.001000 +0:33 true case +0:34 move second child to first child ( temp float) +0:34 direct index ( temp float) +0:34 'myColor' (layout( location=0) out 4-component vector of float) +0:34 Constant: +0:34 3 (const int) +0:34 Constant: +0:34 0.500000 +0:? Linker Objects +0:? 'i' ( smooth in 4-component vector of float) +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'myColor' (layout( location=0) out 4-component vector of float) +0:? 'eps' ( const float) +0:? 0.001000 + diff --git a/Test/baseResults/cppBad.vert.out b/Test/baseResults/cppBad.vert.out index 8ab04bc0e7..e0a1504a30 100644 --- a/Test/baseResults/cppBad.vert.out +++ b/Test/baseResults/cppBad.vert.out @@ -1,5 +1,7 @@ cppBad.vert WARNING: 0:1: '#define' : missing space after macro name +ERROR: 0:1: '#' : (#) can be preceded in its line only by spaces or horizontal tabs +ERROR: 0:2: '#' : (#) can be preceded in its line only by spaces or horizontal tabs ERROR: 0:3: 'preprocessor evaluation' : bad expression ERROR: 0:3: '#if' : unexpected tokens following directive ERROR: 0:6: 'string' : End of line in string @@ -7,7 +9,7 @@ ERROR: 0:6: 'string literal' : required extension not requested: Possible extens GL_EXT_debug_printf GL_EXT_spirv_intrinsics ERROR: 0:6: '' : syntax error, unexpected INT, expecting COMMA or SEMICOLON -ERROR: 5 compilation errors. No code generated. +ERROR: 7 compilation errors. No code generated. Shader version: 100 diff --git a/Test/baseResults/cppBad4.vert.out b/Test/baseResults/cppBad4.vert.out index 693ea8e8cb..23f149db69 100644 --- a/Test/baseResults/cppBad4.vert.out +++ b/Test/baseResults/cppBad4.vert.out @@ -1,7 +1,8 @@ cppBad4.vert +ERROR: 0:2: '#' : (#) can be preceded in its line only by spaces or horizontal tabs ERROR: 0:4: 'macro expansion' : unexpected '#' g ERROR: 0:5: '' : syntax error, unexpected SEMICOLON, expecting LEFT_PAREN -ERROR: 2 compilation errors. No code generated. +ERROR: 3 compilation errors. No code generated. Shader version: 100 diff --git a/Test/baseResults/enhanced.0.frag.out b/Test/baseResults/enhanced.0.frag.out new file mode 100644 index 0000000000..1171bfaf0a --- /dev/null +++ b/Test/baseResults/enhanced.0.frag.out @@ -0,0 +1,6 @@ +enhanced.0.frag +ERROR: enhanced.0.frag:7: ' vec4 constructor' : not enough data provided for construction +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.1.frag.out b/Test/baseResults/enhanced.1.frag.out new file mode 100644 index 0000000000..42f5b72d62 --- /dev/null +++ b/Test/baseResults/enhanced.1.frag.out @@ -0,0 +1,6 @@ +enhanced.1.frag +ERROR: enhanced.1.frag:9: 'v2' : no such field in structure 'vVert' +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.2.frag.out b/Test/baseResults/enhanced.2.frag.out new file mode 100644 index 0000000000..a7e48de408 --- /dev/null +++ b/Test/baseResults/enhanced.2.frag.out @@ -0,0 +1,6 @@ +enhanced.2.frag +ERROR: enhanced.2.frag:5: ' vec3 constructor' : too many arguments +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.3.link.out b/Test/baseResults/enhanced.3.link.out new file mode 100644 index 0000000000..c0e6a2020c --- /dev/null +++ b/Test/baseResults/enhanced.3.link.out @@ -0,0 +1,8 @@ +enhanced.3.vert +enhanced.3.frag +ERROR: Linking vertex and fragment stages: Member names and types must match: + Block: VS_OUT + vertex stage: " vec2 TexCoords" + fragment stage: " vec2 foobar" + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.4.link.out b/Test/baseResults/enhanced.4.link.out new file mode 100644 index 0000000000..2c0acf41db --- /dev/null +++ b/Test/baseResults/enhanced.4.link.out @@ -0,0 +1,7 @@ +enhanced.4.vert +enhanced.4.frag +ERROR: Linking vertex and fragment stages: Layout location qualifier must match: + vertex stage: Block: VS_OUT Instance: vs_out: "layout( location=0) out" + fragment stage: Block: VS_OUT Instance: fs_in: "layout( location=1) in" + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.5.link.out b/Test/baseResults/enhanced.5.link.out new file mode 100644 index 0000000000..929cfcef0f --- /dev/null +++ b/Test/baseResults/enhanced.5.link.out @@ -0,0 +1,8 @@ +enhanced.5.vert +enhanced.5.frag +ERROR: Linking vertex and fragment stages: Member names and types must match: + Block: VS_OUT + vertex stage: " vec2 TexCoords" + fragment stage: " vec3 TexCoords" + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.6.link.out b/Test/baseResults/enhanced.6.link.out new file mode 100644 index 0000000000..9962628270 --- /dev/null +++ b/Test/baseResults/enhanced.6.link.out @@ -0,0 +1,7 @@ +enhanced.6.vert +enhanced.6.frag +ERROR: Linking vertex and fragment stages: Array sizes must be compatible: + vertex stage: " VS_OUT{ vec2 TexCoords} vs_out[2]" + fragment stage: " VS_OUT{ vec2 TexCoords} fs_in[1]" + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.7.link.out b/Test/baseResults/enhanced.7.link.out new file mode 100644 index 0000000000..a6333be94f --- /dev/null +++ b/Test/baseResults/enhanced.7.link.out @@ -0,0 +1,7 @@ +enhanced.7.vert +enhanced.7.frag +ERROR: Linking vertex and fragment stages: vertex block member has no corresponding member in fragment block: + vertex stage: Block: Vertex, Member: ii + fragment stage: Block: Vertex, Member: n/a + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/error-column.vert.out b/Test/baseResults/error-column.vert.out new file mode 100644 index 0000000000..6538e82a2e --- /dev/null +++ b/Test/baseResults/error-column.vert.out @@ -0,0 +1,12 @@ +error-column.vert +ERROR: error-column.vert:7:16: 'model' : member storage qualifier cannot contradict block storage qualifier +ERROR: error-column.vert:8:16: 'view' : member storage qualifier cannot contradict block storage qualifier +ERROR: error-column.vert:9:16: 'projection' : member storage qualifier cannot contradict block storage qualifier +ERROR: error-column.vert:17:16: 'texCoord1' : member storage qualifier cannot contradict block storage qualifier +ERROR: error-column.vert:24:52: 'Pos' : undeclared identifier +ERROR: error-column.vert:24:60: 'constructor' : not enough data provided for construction +ERROR: error-column.vert:24:17: 'assign' : cannot convert from ' temp highp 4X4 matrix of float' to ' gl_Position 4-component vector of float Position' +ERROR: 7 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/gl_FragCoord.frag.out b/Test/baseResults/gl_FragCoord.frag.out new file mode 100644 index 0000000000..da9e8dccde --- /dev/null +++ b/Test/baseResults/gl_FragCoord.frag.out @@ -0,0 +1,269 @@ +gl_FragCoord.frag +Shader version: 150 +Requested GL_ARB_explicit_attrib_location +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +0:? Sequence +0:9 Sequence +0:9 move second child to first child ( temp float) +0:9 'myGlobalVar' ( global float) +0:9 direct index ( temp float) +0:9 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:9 Constant: +0:9 0 (const int) +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'myColor' (layout( location=0) out 4-component vector of float) +0:17 Constant: +0:17 0.200000 +0:17 0.200000 +0:17 0.200000 +0:17 0.200000 +0:18 Test condition and select ( temp void) +0:18 Condition +0:18 Compare Greater Than or Equal ( temp bool) +0:18 direct index ( temp float) +0:18 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 10.000000 +0:18 true case +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 direct index ( temp float) +0:19 'myColor' (layout( location=0) out 4-component vector of float) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 0.800000 +0:21 Test condition and select ( temp void) +0:21 Condition +0:21 Compare Equal ( temp bool) +0:21 direct index ( temp float) +0:21 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:21 Constant: +0:21 1 (const int) +0:21 trunc ( global float) +0:21 direct index ( temp float) +0:21 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:21 Constant: +0:21 1 (const int) +0:21 true case +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 direct index ( temp float) +0:22 'myColor' (layout( location=0) out 4-component vector of float) +0:22 Constant: +0:22 1 (const int) +0:22 Constant: +0:22 0.800000 +0:24 Test condition and select ( temp void) +0:24 Condition +0:24 Compare Equal ( temp bool) +0:24 direct index ( temp float) +0:24 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:24 Constant: +0:24 0 (const int) +0:24 trunc ( global float) +0:24 direct index ( temp float) +0:24 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:24 Constant: +0:24 0 (const int) +0:24 true case +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 direct index ( temp float) +0:25 'myColor' (layout( location=0) out 4-component vector of float) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0.800000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of float) +0:28 'diff' ( temp 4-component vector of float) +0:28 subtract ( temp 4-component vector of float) +0:28 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:28 'i' ( smooth in 4-component vector of float) +0:29 Test condition and select ( temp void) +0:29 Condition +0:29 Compare Greater Than ( temp bool) +0:29 Absolute value ( global float) +0:29 direct index ( temp float) +0:29 'diff' ( temp 4-component vector of float) +0:29 Constant: +0:29 2 (const int) +0:29 Constant: +0:29 0.001000 +0:29 true case +0:29 move second child to first child ( temp float) +0:29 direct index ( temp float) +0:29 'myColor' (layout( location=0) out 4-component vector of float) +0:29 Constant: +0:29 2 (const int) +0:29 Constant: +0:29 0.500000 +0:30 Test condition and select ( temp void) +0:30 Condition +0:30 Compare Greater Than ( temp bool) +0:30 Absolute value ( global float) +0:30 direct index ( temp float) +0:30 'diff' ( temp 4-component vector of float) +0:30 Constant: +0:30 3 (const int) +0:30 Constant: +0:30 0.001000 +0:30 true case +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float) +0:30 'myColor' (layout( location=0) out 4-component vector of float) +0:30 Constant: +0:30 3 (const int) +0:30 Constant: +0:30 0.500000 +0:? Linker Objects +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'myGlobalVar' ( global float) +0:? 'i' ( smooth in 4-component vector of float) +0:? 'myColor' (layout( location=0) out 4-component vector of float) +0:? 'eps' ( const float) +0:? 0.001000 + + +Linked fragment stage: + + +Shader version: 150 +Requested GL_ARB_explicit_attrib_location +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +0:? Sequence +0:9 Sequence +0:9 move second child to first child ( temp float) +0:9 'myGlobalVar' ( global float) +0:9 direct index ( temp float) +0:9 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:9 Constant: +0:9 0 (const int) +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'myColor' (layout( location=0) out 4-component vector of float) +0:17 Constant: +0:17 0.200000 +0:17 0.200000 +0:17 0.200000 +0:17 0.200000 +0:18 Test condition and select ( temp void) +0:18 Condition +0:18 Compare Greater Than or Equal ( temp bool) +0:18 direct index ( temp float) +0:18 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 10.000000 +0:18 true case +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 direct index ( temp float) +0:19 'myColor' (layout( location=0) out 4-component vector of float) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 0.800000 +0:21 Test condition and select ( temp void) +0:21 Condition +0:21 Compare Equal ( temp bool) +0:21 direct index ( temp float) +0:21 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:21 Constant: +0:21 1 (const int) +0:21 trunc ( global float) +0:21 direct index ( temp float) +0:21 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:21 Constant: +0:21 1 (const int) +0:21 true case +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 direct index ( temp float) +0:22 'myColor' (layout( location=0) out 4-component vector of float) +0:22 Constant: +0:22 1 (const int) +0:22 Constant: +0:22 0.800000 +0:24 Test condition and select ( temp void) +0:24 Condition +0:24 Compare Equal ( temp bool) +0:24 direct index ( temp float) +0:24 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:24 Constant: +0:24 0 (const int) +0:24 trunc ( global float) +0:24 direct index ( temp float) +0:24 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:24 Constant: +0:24 0 (const int) +0:24 true case +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 direct index ( temp float) +0:25 'myColor' (layout( location=0) out 4-component vector of float) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0.800000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of float) +0:28 'diff' ( temp 4-component vector of float) +0:28 subtract ( temp 4-component vector of float) +0:28 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:28 'i' ( smooth in 4-component vector of float) +0:29 Test condition and select ( temp void) +0:29 Condition +0:29 Compare Greater Than ( temp bool) +0:29 Absolute value ( global float) +0:29 direct index ( temp float) +0:29 'diff' ( temp 4-component vector of float) +0:29 Constant: +0:29 2 (const int) +0:29 Constant: +0:29 0.001000 +0:29 true case +0:29 move second child to first child ( temp float) +0:29 direct index ( temp float) +0:29 'myColor' (layout( location=0) out 4-component vector of float) +0:29 Constant: +0:29 2 (const int) +0:29 Constant: +0:29 0.500000 +0:30 Test condition and select ( temp void) +0:30 Condition +0:30 Compare Greater Than ( temp bool) +0:30 Absolute value ( global float) +0:30 direct index ( temp float) +0:30 'diff' ( temp 4-component vector of float) +0:30 Constant: +0:30 3 (const int) +0:30 Constant: +0:30 0.001000 +0:30 true case +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float) +0:30 'myColor' (layout( location=0) out 4-component vector of float) +0:30 Constant: +0:30 3 (const int) +0:30 Constant: +0:30 0.500000 +0:? Linker Objects +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'myGlobalVar' ( global float) +0:? 'i' ( smooth in 4-component vector of float) +0:? 'myColor' (layout( location=0) out 4-component vector of float) +0:? 'eps' ( const float) +0:? 0.001000 + diff --git a/Test/baseResults/gl_samplemask_array_size.frag.out b/Test/baseResults/gl_samplemask_array_size.frag.out new file mode 100644 index 0000000000..a7d5b76995 --- /dev/null +++ b/Test/baseResults/gl_samplemask_array_size.frag.out @@ -0,0 +1,81 @@ +gl_samplemask_array_size.frag +Shader version: 320 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp mediump int) +0:6 'i' ( temp mediump int) +0:6 Constant: +0:6 0 (const int) +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 Compare Less Than ( temp bool) +0:6 'i' ( temp mediump int) +0:6 Constant: +0:6 1 (const int) +0:6 Loop Body +0:7 move second child to first child ( temp highp int) +0:7 indirect index ( temp highp int SampleMaskIn) +0:7 'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn) +0:7 'i' ( temp mediump int) +0:7 Constant: +0:7 -1431655766 (const int) +0:6 Loop Terminal Expression +0:6 Pre-Increment ( temp mediump int) +0:6 'i' ( temp mediump int) +0:9 move second child to first child ( temp mediump 4-component vector of float) +0:9 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:9 Constant: +0:9 0.000000 +0:9 1.000000 +0:9 0.000000 +0:9 1.000000 +0:? Linker Objects +0:? 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:? 'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn) + + +Linked fragment stage: + + +Shader version: 320 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp mediump int) +0:6 'i' ( temp mediump int) +0:6 Constant: +0:6 0 (const int) +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 Compare Less Than ( temp bool) +0:6 'i' ( temp mediump int) +0:6 Constant: +0:6 1 (const int) +0:6 Loop Body +0:7 move second child to first child ( temp highp int) +0:7 indirect index ( temp highp int SampleMaskIn) +0:7 'gl_SampleMask' ( out 1-element array of highp int SampleMaskIn) +0:7 'i' ( temp mediump int) +0:7 Constant: +0:7 -1431655766 (const int) +0:6 Loop Terminal Expression +0:6 Pre-Increment ( temp mediump int) +0:6 'i' ( temp mediump int) +0:9 move second child to first child ( temp mediump 4-component vector of float) +0:9 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:9 Constant: +0:9 0.000000 +0:9 1.000000 +0:9 0.000000 +0:9 1.000000 +0:? Linker Objects +0:? 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:? 'gl_SampleMask' ( out 1-element array of highp int SampleMaskIn) + diff --git a/Test/baseResults/gl_samplemask_array_size_32.frag.out b/Test/baseResults/gl_samplemask_array_size_32.frag.out new file mode 100644 index 0000000000..0569873e9c --- /dev/null +++ b/Test/baseResults/gl_samplemask_array_size_32.frag.out @@ -0,0 +1,39 @@ +gl_samplemask_array_size.frag +Shader version: 320 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp mediump int) +0:6 'i' ( temp mediump int) +0:6 Constant: +0:6 0 (const int) +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 Compare Less Than ( temp bool) +0:6 'i' ( temp mediump int) +0:6 Constant: +0:6 1 (const int) +0:6 Loop Body +0:7 move second child to first child ( temp highp int) +0:7 indirect index ( temp highp int SampleMaskIn) +0:7 'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn) +0:7 'i' ( temp mediump int) +0:7 Constant: +0:7 -1431655766 (const int) +0:6 Loop Terminal Expression +0:6 Pre-Increment ( temp mediump int) +0:6 'i' ( temp mediump int) +0:9 move second child to first child ( temp mediump 4-component vector of float) +0:9 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:9 Constant: +0:9 0.000000 +0:9 1.000000 +0:9 0.000000 +0:9 1.000000 +0:? Linker Objects +0:? 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:? 'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn) + diff --git a/Test/baseResults/gl_samplemask_array_size_64.frag.out b/Test/baseResults/gl_samplemask_array_size_64.frag.out new file mode 100644 index 0000000000..3780becc98 --- /dev/null +++ b/Test/baseResults/gl_samplemask_array_size_64.frag.out @@ -0,0 +1,39 @@ +gl_samplemask_array_size.frag +Shader version: 320 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:6 Sequence +0:6 Sequence +0:6 Sequence +0:6 move second child to first child ( temp mediump int) +0:6 'i' ( temp mediump int) +0:6 Constant: +0:6 0 (const int) +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 Compare Less Than ( temp bool) +0:6 'i' ( temp mediump int) +0:6 Constant: +0:6 2 (const int) +0:6 Loop Body +0:7 move second child to first child ( temp highp int) +0:7 indirect index ( temp highp int SampleMaskIn) +0:7 'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn) +0:7 'i' ( temp mediump int) +0:7 Constant: +0:7 -1431655766 (const int) +0:6 Loop Terminal Expression +0:6 Pre-Increment ( temp mediump int) +0:6 'i' ( temp mediump int) +0:9 move second child to first child ( temp mediump 4-component vector of float) +0:9 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:9 Constant: +0:9 0.000000 +0:9 1.000000 +0:9 0.000000 +0:9 1.000000 +0:? Linker Objects +0:? 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:? 'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn) + diff --git a/Test/baseResults/glsl.-P.frag.out b/Test/baseResults/glsl.-P.frag.out new file mode 100644 index 0000000000..27d8965459 --- /dev/null +++ b/Test/baseResults/glsl.-P.frag.out @@ -0,0 +1,35 @@ +glsl.-P.frag +Shader version: 450 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'color' (layout( location=0) out 4-component vector of float) +0:19 Constant: +0:19 1.000000 +0:19 1.000000 +0:19 1.000000 +0:19 1.000000 +0:? Linker Objects +0:? 'color' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'color' (layout( location=0) out 4-component vector of float) +0:19 Constant: +0:19 1.000000 +0:19 1.000000 +0:19 1.000000 +0:19 1.000000 +0:? Linker Objects +0:? 'color' (layout( location=0) out 4-component vector of float) + diff --git a/Test/baseResults/glsl.-P.function.frag.out b/Test/baseResults/glsl.-P.function.frag.out new file mode 100644 index 0000000000..b753cd1f7e --- /dev/null +++ b/Test/baseResults/glsl.-P.function.frag.out @@ -0,0 +1,45 @@ +glsl.-P.function.frag +Shader version: 450 +0:? Sequence +-1:1 Function Definition: getColor( ( global 4-component vector of float) +-1:1 Function Parameters: +-1:1 Sequence +-1:1 Branch: Return with expression +-1:1 Constant: +-1:1 1.000000 +-1:1 1.000000 +-1:1 1.000000 +-1:1 1.000000 +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 'color' (layout( location=0) out 4-component vector of float) +0:7 Function Call: getColor( ( global 4-component vector of float) +0:? Linker Objects +0:? 'color' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +0:? Sequence +-1:1 Function Definition: getColor( ( global 4-component vector of float) +-1:1 Function Parameters: +-1:1 Sequence +-1:1 Branch: Return with expression +-1:1 Constant: +-1:1 1.000000 +-1:1 1.000000 +-1:1 1.000000 +-1:1 1.000000 +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp 4-component vector of float) +0:7 'color' (layout( location=0) out 4-component vector of float) +0:7 Function Call: getColor( ( global 4-component vector of float) +0:? Linker Objects +0:? 'color' (layout( location=0) out 4-component vector of float) + diff --git a/Test/baseResults/glsl.-P.include.frag.out b/Test/baseResults/glsl.-P.include.frag.out new file mode 100644 index 0000000000..1ac63f5ef6 --- /dev/null +++ b/Test/baseResults/glsl.-P.include.frag.out @@ -0,0 +1,49 @@ +glsl.-P.include.frag +Shader version: 450 +Requested GL_GOOGLE_cpp_style_line_directive +Requested GL_GOOGLE_include_directive +0:? Sequence +0:1 Function Definition: getColor( ( global 4-component vector of float) +0:1 Function Parameters: +0:3 Sequence +0:3 Branch: Return with expression +0:3 Constant: +0:3 1.000000 +0:3 1.000000 +0:3 1.000000 +0:3 1.000000 +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'color' (layout( location=0) out 4-component vector of float) +0:9 Function Call: getColor( ( global 4-component vector of float) +0:? Linker Objects +0:? 'color' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +Requested GL_GOOGLE_cpp_style_line_directive +Requested GL_GOOGLE_include_directive +0:? Sequence +0:1 Function Definition: getColor( ( global 4-component vector of float) +0:1 Function Parameters: +0:3 Sequence +0:3 Branch: Return with expression +0:3 Constant: +0:3 1.000000 +0:3 1.000000 +0:3 1.000000 +0:3 1.000000 +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'color' (layout( location=0) out 4-component vector of float) +0:9 Function Call: getColor( ( global 4-component vector of float) +0:? Linker Objects +0:? 'color' (layout( location=0) out 4-component vector of float) + diff --git a/Test/baseResults/glsl.450.subgroupRotate.comp.out b/Test/baseResults/glsl.450.subgroupRotate.comp.out new file mode 100644 index 0000000000..31d025b6d9 --- /dev/null +++ b/Test/baseResults/glsl.450.subgroupRotate.comp.out @@ -0,0 +1,2177 @@ +glsl.450.subgroupRotate.comp +Shader version: 450 +Requested GL_KHR_shader_subgroup_rotate +local_size = (8, 8, 1) +0:? Sequence +0:20 Function Definition: main( ( global void) +0:20 Function Parameters: +0:22 Sequence +0:22 Sequence +0:22 move second child to first child ( temp uint) +0:22 'delta' ( temp uint) +0:22 delta: direct index for structure (layout( column_major shared) readonly buffer uint) +0:22 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer uint delta}) +0:22 Constant: +0:22 0 (const int) +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:24 'delta' ( temp uint) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 subgroupRotate ( global float) +0:24 direct index ( temp float) +0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 'delta' ( temp uint) +0:25 move second child to first child ( temp 2-component vector of float) +0:25 vector swizzle ( temp 2-component vector of float) +0:25 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:25 'delta' ( temp uint) +0:25 Constant: +0:25 0 (const int) +0:25 Sequence +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1 (const int) +0:25 subgroupRotate ( global 2-component vector of float) +0:25 vector swizzle ( temp 2-component vector of float) +0:25 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 0 (const int) +0:25 Sequence +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1 (const int) +0:25 'delta' ( temp uint) +0:26 move second child to first child ( temp 3-component vector of float) +0:26 vector swizzle ( temp 3-component vector of float) +0:26 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:26 'delta' ( temp uint) +0:26 Constant: +0:26 0 (const int) +0:26 Sequence +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 2 (const int) +0:26 subgroupRotate ( global 3-component vector of float) +0:26 vector swizzle ( temp 3-component vector of float) +0:26 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:26 Constant: +0:26 2 (const int) +0:26 Constant: +0:26 0 (const int) +0:26 Sequence +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 2 (const int) +0:26 'delta' ( temp uint) +0:27 move second child to first child ( temp 4-component vector of float) +0:27 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:27 'delta' ( temp uint) +0:27 Constant: +0:27 0 (const int) +0:27 subgroupRotate ( global 4-component vector of float) +0:27 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:27 Constant: +0:27 3 (const int) +0:27 Constant: +0:27 0 (const int) +0:27 'delta' ( temp uint) +0:29 move second child to first child ( temp int) +0:29 direct index ( temp int) +0:29 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:29 'delta' ( temp uint) +0:29 Constant: +0:29 1 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 subgroupRotate ( global int) +0:29 direct index ( temp int) +0:29 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 'delta' ( temp uint) +0:30 move second child to first child ( temp 2-component vector of int) +0:30 vector swizzle ( temp 2-component vector of int) +0:30 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:30 'delta' ( temp uint) +0:30 Constant: +0:30 1 (const int) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 subgroupRotate ( global 2-component vector of int) +0:30 vector swizzle ( temp 2-component vector of int) +0:30 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:30 Constant: +0:30 1 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 'delta' ( temp uint) +0:31 move second child to first child ( temp 3-component vector of int) +0:31 vector swizzle ( temp 3-component vector of int) +0:31 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:31 'delta' ( temp uint) +0:31 Constant: +0:31 1 (const int) +0:31 Sequence +0:31 Constant: +0:31 0 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 Constant: +0:31 2 (const int) +0:31 subgroupRotate ( global 3-component vector of int) +0:31 vector swizzle ( temp 3-component vector of int) +0:31 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:31 Constant: +0:31 2 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 Sequence +0:31 Constant: +0:31 0 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 Constant: +0:31 2 (const int) +0:31 'delta' ( temp uint) +0:32 move second child to first child ( temp 4-component vector of int) +0:32 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:32 'delta' ( temp uint) +0:32 Constant: +0:32 1 (const int) +0:32 subgroupRotate ( global 4-component vector of int) +0:32 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:32 Constant: +0:32 3 (const int) +0:32 Constant: +0:32 1 (const int) +0:32 'delta' ( temp uint) +0:34 move second child to first child ( temp uint) +0:34 direct index ( temp uint) +0:34 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:34 'delta' ( temp uint) +0:34 Constant: +0:34 2 (const int) +0:34 Constant: +0:34 0 (const int) +0:34 subgroupRotate ( global uint) +0:34 direct index ( temp uint) +0:34 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Constant: +0:34 0 (const int) +0:34 'delta' ( temp uint) +0:35 move second child to first child ( temp 2-component vector of uint) +0:35 vector swizzle ( temp 2-component vector of uint) +0:35 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:35 'delta' ( temp uint) +0:35 Constant: +0:35 2 (const int) +0:35 Sequence +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 subgroupRotate ( global 2-component vector of uint) +0:35 vector swizzle ( temp 2-component vector of uint) +0:35 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 Sequence +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 'delta' ( temp uint) +0:36 move second child to first child ( temp 3-component vector of uint) +0:36 vector swizzle ( temp 3-component vector of uint) +0:36 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:36 'delta' ( temp uint) +0:36 Constant: +0:36 2 (const int) +0:36 Sequence +0:36 Constant: +0:36 0 (const int) +0:36 Constant: +0:36 1 (const int) +0:36 Constant: +0:36 2 (const int) +0:36 subgroupRotate ( global 3-component vector of uint) +0:36 vector swizzle ( temp 3-component vector of uint) +0:36 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:36 Constant: +0:36 2 (const int) +0:36 Constant: +0:36 2 (const int) +0:36 Sequence +0:36 Constant: +0:36 0 (const int) +0:36 Constant: +0:36 1 (const int) +0:36 Constant: +0:36 2 (const int) +0:36 'delta' ( temp uint) +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:37 'delta' ( temp uint) +0:37 Constant: +0:37 2 (const int) +0:37 subgroupRotate ( global 4-component vector of uint) +0:37 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:37 Constant: +0:37 3 (const int) +0:37 Constant: +0:37 2 (const int) +0:37 'delta' ( temp uint) +0:39 move second child to first child ( temp double) +0:39 direct index ( temp double) +0:39 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:39 'delta' ( temp uint) +0:39 Constant: +0:39 3 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 subgroupRotate ( global double) +0:39 direct index ( temp double) +0:39 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 3 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 'delta' ( temp uint) +0:40 move second child to first child ( temp 2-component vector of double) +0:40 vector swizzle ( temp 2-component vector of double) +0:40 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:40 'delta' ( temp uint) +0:40 Constant: +0:40 3 (const int) +0:40 Sequence +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 subgroupRotate ( global 2-component vector of double) +0:40 vector swizzle ( temp 2-component vector of double) +0:40 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 3 (const int) +0:40 Sequence +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 'delta' ( temp uint) +0:41 move second child to first child ( temp 3-component vector of double) +0:41 vector swizzle ( temp 3-component vector of double) +0:41 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:41 'delta' ( temp uint) +0:41 Constant: +0:41 3 (const int) +0:41 Sequence +0:41 Constant: +0:41 0 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 2 (const int) +0:41 subgroupRotate ( global 3-component vector of double) +0:41 vector swizzle ( temp 3-component vector of double) +0:41 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:41 Constant: +0:41 2 (const int) +0:41 Constant: +0:41 3 (const int) +0:41 Sequence +0:41 Constant: +0:41 0 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 2 (const int) +0:41 'delta' ( temp uint) +0:42 move second child to first child ( temp 4-component vector of double) +0:42 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:42 'delta' ( temp uint) +0:42 Constant: +0:42 3 (const int) +0:42 subgroupRotate ( global 4-component vector of double) +0:42 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:42 Constant: +0:42 3 (const int) +0:42 Constant: +0:42 3 (const int) +0:42 'delta' ( temp uint) +0:44 move second child to first child ( temp int) +0:44 direct index ( temp int) +0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:44 'delta' ( temp uint) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 Convert bool to int ( temp int) +0:44 subgroupRotate ( global bool) +0:44 Compare Less Than ( temp bool) +0:44 direct index ( temp int) +0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 'delta' ( temp uint) +0:45 move second child to first child ( temp 2-component vector of int) +0:45 vector swizzle ( temp 2-component vector of int) +0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:45 'delta' ( temp uint) +0:45 Constant: +0:45 1 (const int) +0:45 Sequence +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 Convert bool to int ( temp 2-component vector of int) +0:45 subgroupRotate ( global 2-component vector of bool) +0:45 Compare Less Than ( global 2-component vector of bool) +0:45 vector swizzle ( temp 2-component vector of int) +0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 Sequence +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 0 (const int) +0:45 0 (const int) +0:45 'delta' ( temp uint) +0:46 move second child to first child ( temp 3-component vector of int) +0:46 vector swizzle ( temp 3-component vector of int) +0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:46 'delta' ( temp uint) +0:46 Constant: +0:46 1 (const int) +0:46 Sequence +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 2 (const int) +0:46 Convert bool to int ( temp 3-component vector of int) +0:46 subgroupRotate ( global 3-component vector of bool) +0:46 Compare Less Than ( global 3-component vector of bool) +0:46 vector swizzle ( temp 3-component vector of int) +0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 Sequence +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 2 (const int) +0:46 Constant: +0:46 0 (const int) +0:46 0 (const int) +0:46 0 (const int) +0:46 'delta' ( temp uint) +0:47 move second child to first child ( temp 4-component vector of int) +0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:47 'delta' ( temp uint) +0:47 Constant: +0:47 1 (const int) +0:47 Convert bool to int ( temp 4-component vector of int) +0:47 subgroupRotate ( global 4-component vector of bool) +0:47 Compare Less Than ( global 4-component vector of bool) +0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:47 Constant: +0:47 1 (const int) +0:47 Constant: +0:47 1 (const int) +0:47 Constant: +0:47 0 (const int) +0:47 0 (const int) +0:47 0 (const int) +0:47 0 (const int) +0:47 'delta' ( temp uint) +0:49 move second child to first child ( temp float) +0:49 direct index ( temp float) +0:49 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:49 'delta' ( temp uint) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 0 (const int) +0:49 subgroupClusteredRotate ( global float) +0:49 direct index ( temp float) +0:49 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 0 (const int) +0:49 'delta' ( temp uint) +0:49 Constant: +0:49 1 (const uint) +0:50 move second child to first child ( temp 2-component vector of float) +0:50 vector swizzle ( temp 2-component vector of float) +0:50 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:50 'delta' ( temp uint) +0:50 Constant: +0:50 0 (const int) +0:50 Sequence +0:50 Constant: +0:50 0 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 subgroupClusteredRotate ( global 2-component vector of float) +0:50 vector swizzle ( temp 2-component vector of float) +0:50 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:50 Constant: +0:50 1 (const int) +0:50 Constant: +0:50 0 (const int) +0:50 Sequence +0:50 Constant: +0:50 0 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 'delta' ( temp uint) +0:50 Constant: +0:50 1 (const uint) +0:51 move second child to first child ( temp 3-component vector of float) +0:51 vector swizzle ( temp 3-component vector of float) +0:51 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:51 'delta' ( temp uint) +0:51 Constant: +0:51 0 (const int) +0:51 Sequence +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 1 (const int) +0:51 Constant: +0:51 2 (const int) +0:51 subgroupClusteredRotate ( global 3-component vector of float) +0:51 vector swizzle ( temp 3-component vector of float) +0:51 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:51 Constant: +0:51 2 (const int) +0:51 Constant: +0:51 0 (const int) +0:51 Sequence +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 1 (const int) +0:51 Constant: +0:51 2 (const int) +0:51 'delta' ( temp uint) +0:51 Constant: +0:51 1 (const uint) +0:52 move second child to first child ( temp 4-component vector of float) +0:52 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:52 'delta' ( temp uint) +0:52 Constant: +0:52 0 (const int) +0:52 subgroupClusteredRotate ( global 4-component vector of float) +0:52 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:52 Constant: +0:52 3 (const int) +0:52 Constant: +0:52 0 (const int) +0:52 'delta' ( temp uint) +0:52 Constant: +0:52 1 (const uint) +0:54 move second child to first child ( temp int) +0:54 direct index ( temp int) +0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:54 'delta' ( temp uint) +0:54 Constant: +0:54 1 (const int) +0:54 Constant: +0:54 0 (const int) +0:54 subgroupClusteredRotate ( global int) +0:54 direct index ( temp int) +0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 Constant: +0:54 0 (const int) +0:54 'delta' ( temp uint) +0:54 Constant: +0:54 1 (const uint) +0:55 move second child to first child ( temp 2-component vector of int) +0:55 vector swizzle ( temp 2-component vector of int) +0:55 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:55 'delta' ( temp uint) +0:55 Constant: +0:55 1 (const int) +0:55 Sequence +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 subgroupClusteredRotate ( global 2-component vector of int) +0:55 vector swizzle ( temp 2-component vector of int) +0:55 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:55 Constant: +0:55 1 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 Sequence +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 'delta' ( temp uint) +0:55 Constant: +0:55 1 (const uint) +0:56 move second child to first child ( temp 3-component vector of int) +0:56 vector swizzle ( temp 3-component vector of int) +0:56 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:56 'delta' ( temp uint) +0:56 Constant: +0:56 1 (const int) +0:56 Sequence +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 1 (const int) +0:56 Constant: +0:56 2 (const int) +0:56 subgroupClusteredRotate ( global 3-component vector of int) +0:56 vector swizzle ( temp 3-component vector of int) +0:56 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:56 Constant: +0:56 2 (const int) +0:56 Constant: +0:56 1 (const int) +0:56 Sequence +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 1 (const int) +0:56 Constant: +0:56 2 (const int) +0:56 'delta' ( temp uint) +0:56 Constant: +0:56 1 (const uint) +0:57 move second child to first child ( temp 4-component vector of int) +0:57 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:57 'delta' ( temp uint) +0:57 Constant: +0:57 1 (const int) +0:57 subgroupClusteredRotate ( global 4-component vector of int) +0:57 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:57 Constant: +0:57 3 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 'delta' ( temp uint) +0:57 Constant: +0:57 1 (const uint) +0:59 move second child to first child ( temp uint) +0:59 direct index ( temp uint) +0:59 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:59 'delta' ( temp uint) +0:59 Constant: +0:59 2 (const int) +0:59 Constant: +0:59 0 (const int) +0:59 subgroupClusteredRotate ( global uint) +0:59 direct index ( temp uint) +0:59 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 2 (const int) +0:59 Constant: +0:59 0 (const int) +0:59 'delta' ( temp uint) +0:59 Constant: +0:59 1 (const uint) +0:60 move second child to first child ( temp 2-component vector of uint) +0:60 vector swizzle ( temp 2-component vector of uint) +0:60 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:60 'delta' ( temp uint) +0:60 Constant: +0:60 2 (const int) +0:60 Sequence +0:60 Constant: +0:60 0 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 subgroupClusteredRotate ( global 2-component vector of uint) +0:60 vector swizzle ( temp 2-component vector of uint) +0:60 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:60 Constant: +0:60 1 (const int) +0:60 Constant: +0:60 2 (const int) +0:60 Sequence +0:60 Constant: +0:60 0 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 'delta' ( temp uint) +0:60 Constant: +0:60 1 (const uint) +0:61 move second child to first child ( temp 3-component vector of uint) +0:61 vector swizzle ( temp 3-component vector of uint) +0:61 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:61 'delta' ( temp uint) +0:61 Constant: +0:61 2 (const int) +0:61 Sequence +0:61 Constant: +0:61 0 (const int) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 2 (const int) +0:61 subgroupClusteredRotate ( global 3-component vector of uint) +0:61 vector swizzle ( temp 3-component vector of uint) +0:61 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:61 Constant: +0:61 2 (const int) +0:61 Constant: +0:61 2 (const int) +0:61 Sequence +0:61 Constant: +0:61 0 (const int) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 2 (const int) +0:61 'delta' ( temp uint) +0:61 Constant: +0:61 1 (const uint) +0:62 move second child to first child ( temp 4-component vector of uint) +0:62 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:62 'delta' ( temp uint) +0:62 Constant: +0:62 2 (const int) +0:62 subgroupClusteredRotate ( global 4-component vector of uint) +0:62 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:62 Constant: +0:62 3 (const int) +0:62 Constant: +0:62 2 (const int) +0:62 'delta' ( temp uint) +0:62 Constant: +0:62 1 (const uint) +0:64 move second child to first child ( temp double) +0:64 direct index ( temp double) +0:64 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:64 'delta' ( temp uint) +0:64 Constant: +0:64 3 (const int) +0:64 Constant: +0:64 0 (const int) +0:64 subgroupClusteredRotate ( global double) +0:64 direct index ( temp double) +0:64 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:64 Constant: +0:64 0 (const int) +0:64 Constant: +0:64 3 (const int) +0:64 Constant: +0:64 0 (const int) +0:64 'delta' ( temp uint) +0:64 Constant: +0:64 1 (const uint) +0:65 move second child to first child ( temp 2-component vector of double) +0:65 vector swizzle ( temp 2-component vector of double) +0:65 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:65 'delta' ( temp uint) +0:65 Constant: +0:65 3 (const int) +0:65 Sequence +0:65 Constant: +0:65 0 (const int) +0:65 Constant: +0:65 1 (const int) +0:65 subgroupClusteredRotate ( global 2-component vector of double) +0:65 vector swizzle ( temp 2-component vector of double) +0:65 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:65 Constant: +0:65 1 (const int) +0:65 Constant: +0:65 3 (const int) +0:65 Sequence +0:65 Constant: +0:65 0 (const int) +0:65 Constant: +0:65 1 (const int) +0:65 'delta' ( temp uint) +0:65 Constant: +0:65 1 (const uint) +0:66 move second child to first child ( temp 3-component vector of double) +0:66 vector swizzle ( temp 3-component vector of double) +0:66 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:66 'delta' ( temp uint) +0:66 Constant: +0:66 3 (const int) +0:66 Sequence +0:66 Constant: +0:66 0 (const int) +0:66 Constant: +0:66 1 (const int) +0:66 Constant: +0:66 2 (const int) +0:66 subgroupClusteredRotate ( global 3-component vector of double) +0:66 vector swizzle ( temp 3-component vector of double) +0:66 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:66 Constant: +0:66 2 (const int) +0:66 Constant: +0:66 3 (const int) +0:66 Sequence +0:66 Constant: +0:66 0 (const int) +0:66 Constant: +0:66 1 (const int) +0:66 Constant: +0:66 2 (const int) +0:66 'delta' ( temp uint) +0:66 Constant: +0:66 1 (const uint) +0:67 move second child to first child ( temp 4-component vector of double) +0:67 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:67 'delta' ( temp uint) +0:67 Constant: +0:67 3 (const int) +0:67 subgroupClusteredRotate ( global 4-component vector of double) +0:67 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:67 Constant: +0:67 3 (const int) +0:67 Constant: +0:67 3 (const int) +0:67 'delta' ( temp uint) +0:67 Constant: +0:67 1 (const uint) +0:69 move second child to first child ( temp int) +0:69 direct index ( temp int) +0:69 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:69 'delta' ( temp uint) +0:69 Constant: +0:69 1 (const int) +0:69 Constant: +0:69 0 (const int) +0:69 Convert bool to int ( temp int) +0:69 subgroupClusteredRotate ( global bool) +0:69 Compare Less Than ( temp bool) +0:69 direct index ( temp int) +0:69 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:69 Constant: +0:69 0 (const int) +0:69 Constant: +0:69 1 (const int) +0:69 Constant: +0:69 0 (const int) +0:69 Constant: +0:69 0 (const int) +0:69 'delta' ( temp uint) +0:69 Constant: +0:69 1 (const uint) +0:70 move second child to first child ( temp 2-component vector of int) +0:70 vector swizzle ( temp 2-component vector of int) +0:70 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:70 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:70 'delta' ( temp uint) +0:70 Constant: +0:70 1 (const int) +0:70 Sequence +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 Convert bool to int ( temp 2-component vector of int) +0:70 subgroupClusteredRotate ( global 2-component vector of bool) +0:70 Compare Less Than ( global 2-component vector of bool) +0:70 vector swizzle ( temp 2-component vector of int) +0:70 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:70 Constant: +0:70 1 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 Sequence +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 Constant: +0:70 0 (const int) +0:70 0 (const int) +0:70 'delta' ( temp uint) +0:70 Constant: +0:70 1 (const uint) +0:71 move second child to first child ( temp 3-component vector of int) +0:71 vector swizzle ( temp 3-component vector of int) +0:71 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:71 'delta' ( temp uint) +0:71 Constant: +0:71 1 (const int) +0:71 Sequence +0:71 Constant: +0:71 0 (const int) +0:71 Constant: +0:71 1 (const int) +0:71 Constant: +0:71 2 (const int) +0:71 Convert bool to int ( temp 3-component vector of int) +0:71 subgroupClusteredRotate ( global 3-component vector of bool) +0:71 Compare Less Than ( global 3-component vector of bool) +0:71 vector swizzle ( temp 3-component vector of int) +0:71 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:71 Constant: +0:71 1 (const int) +0:71 Constant: +0:71 1 (const int) +0:71 Sequence +0:71 Constant: +0:71 0 (const int) +0:71 Constant: +0:71 1 (const int) +0:71 Constant: +0:71 2 (const int) +0:71 Constant: +0:71 0 (const int) +0:71 0 (const int) +0:71 0 (const int) +0:71 'delta' ( temp uint) +0:71 Constant: +0:71 1 (const uint) +0:72 move second child to first child ( temp 4-component vector of int) +0:72 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:72 'delta' ( temp uint) +0:72 Constant: +0:72 1 (const int) +0:72 Convert bool to int ( temp 4-component vector of int) +0:72 subgroupClusteredRotate ( global 4-component vector of bool) +0:72 Compare Less Than ( global 4-component vector of bool) +0:72 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:72 Constant: +0:72 1 (const int) +0:72 Constant: +0:72 1 (const int) +0:72 Constant: +0:72 0 (const int) +0:72 0 (const int) +0:72 0 (const int) +0:72 0 (const int) +0:72 'delta' ( temp uint) +0:72 Constant: +0:72 1 (const uint) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 8 (const uint) +0:? 8 (const uint) +0:? 1 (const uint) +0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer uint delta}) +0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) + + +Linked compute stage: + + +Shader version: 450 +Requested GL_KHR_shader_subgroup_rotate +local_size = (8, 8, 1) +0:? Sequence +0:20 Function Definition: main( ( global void) +0:20 Function Parameters: +0:22 Sequence +0:22 Sequence +0:22 move second child to first child ( temp uint) +0:22 'delta' ( temp uint) +0:22 delta: direct index for structure (layout( column_major shared) readonly buffer uint) +0:22 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer uint delta}) +0:22 Constant: +0:22 0 (const int) +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:24 'delta' ( temp uint) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 subgroupRotate ( global float) +0:24 direct index ( temp float) +0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 'delta' ( temp uint) +0:25 move second child to first child ( temp 2-component vector of float) +0:25 vector swizzle ( temp 2-component vector of float) +0:25 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:25 'delta' ( temp uint) +0:25 Constant: +0:25 0 (const int) +0:25 Sequence +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1 (const int) +0:25 subgroupRotate ( global 2-component vector of float) +0:25 vector swizzle ( temp 2-component vector of float) +0:25 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 0 (const int) +0:25 Sequence +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1 (const int) +0:25 'delta' ( temp uint) +0:26 move second child to first child ( temp 3-component vector of float) +0:26 vector swizzle ( temp 3-component vector of float) +0:26 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:26 'delta' ( temp uint) +0:26 Constant: +0:26 0 (const int) +0:26 Sequence +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 2 (const int) +0:26 subgroupRotate ( global 3-component vector of float) +0:26 vector swizzle ( temp 3-component vector of float) +0:26 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:26 Constant: +0:26 2 (const int) +0:26 Constant: +0:26 0 (const int) +0:26 Sequence +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 2 (const int) +0:26 'delta' ( temp uint) +0:27 move second child to first child ( temp 4-component vector of float) +0:27 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:27 'delta' ( temp uint) +0:27 Constant: +0:27 0 (const int) +0:27 subgroupRotate ( global 4-component vector of float) +0:27 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:27 Constant: +0:27 3 (const int) +0:27 Constant: +0:27 0 (const int) +0:27 'delta' ( temp uint) +0:29 move second child to first child ( temp int) +0:29 direct index ( temp int) +0:29 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:29 'delta' ( temp uint) +0:29 Constant: +0:29 1 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 subgroupRotate ( global int) +0:29 direct index ( temp int) +0:29 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 'delta' ( temp uint) +0:30 move second child to first child ( temp 2-component vector of int) +0:30 vector swizzle ( temp 2-component vector of int) +0:30 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:30 'delta' ( temp uint) +0:30 Constant: +0:30 1 (const int) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 subgroupRotate ( global 2-component vector of int) +0:30 vector swizzle ( temp 2-component vector of int) +0:30 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:30 Constant: +0:30 1 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 'delta' ( temp uint) +0:31 move second child to first child ( temp 3-component vector of int) +0:31 vector swizzle ( temp 3-component vector of int) +0:31 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:31 'delta' ( temp uint) +0:31 Constant: +0:31 1 (const int) +0:31 Sequence +0:31 Constant: +0:31 0 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 Constant: +0:31 2 (const int) +0:31 subgroupRotate ( global 3-component vector of int) +0:31 vector swizzle ( temp 3-component vector of int) +0:31 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:31 Constant: +0:31 2 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 Sequence +0:31 Constant: +0:31 0 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 Constant: +0:31 2 (const int) +0:31 'delta' ( temp uint) +0:32 move second child to first child ( temp 4-component vector of int) +0:32 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:32 'delta' ( temp uint) +0:32 Constant: +0:32 1 (const int) +0:32 subgroupRotate ( global 4-component vector of int) +0:32 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:32 Constant: +0:32 3 (const int) +0:32 Constant: +0:32 1 (const int) +0:32 'delta' ( temp uint) +0:34 move second child to first child ( temp uint) +0:34 direct index ( temp uint) +0:34 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:34 'delta' ( temp uint) +0:34 Constant: +0:34 2 (const int) +0:34 Constant: +0:34 0 (const int) +0:34 subgroupRotate ( global uint) +0:34 direct index ( temp uint) +0:34 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Constant: +0:34 0 (const int) +0:34 'delta' ( temp uint) +0:35 move second child to first child ( temp 2-component vector of uint) +0:35 vector swizzle ( temp 2-component vector of uint) +0:35 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:35 'delta' ( temp uint) +0:35 Constant: +0:35 2 (const int) +0:35 Sequence +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 subgroupRotate ( global 2-component vector of uint) +0:35 vector swizzle ( temp 2-component vector of uint) +0:35 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 Sequence +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 'delta' ( temp uint) +0:36 move second child to first child ( temp 3-component vector of uint) +0:36 vector swizzle ( temp 3-component vector of uint) +0:36 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:36 'delta' ( temp uint) +0:36 Constant: +0:36 2 (const int) +0:36 Sequence +0:36 Constant: +0:36 0 (const int) +0:36 Constant: +0:36 1 (const int) +0:36 Constant: +0:36 2 (const int) +0:36 subgroupRotate ( global 3-component vector of uint) +0:36 vector swizzle ( temp 3-component vector of uint) +0:36 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:36 Constant: +0:36 2 (const int) +0:36 Constant: +0:36 2 (const int) +0:36 Sequence +0:36 Constant: +0:36 0 (const int) +0:36 Constant: +0:36 1 (const int) +0:36 Constant: +0:36 2 (const int) +0:36 'delta' ( temp uint) +0:37 move second child to first child ( temp 4-component vector of uint) +0:37 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:37 'delta' ( temp uint) +0:37 Constant: +0:37 2 (const int) +0:37 subgroupRotate ( global 4-component vector of uint) +0:37 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:37 Constant: +0:37 3 (const int) +0:37 Constant: +0:37 2 (const int) +0:37 'delta' ( temp uint) +0:39 move second child to first child ( temp double) +0:39 direct index ( temp double) +0:39 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:39 'delta' ( temp uint) +0:39 Constant: +0:39 3 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 subgroupRotate ( global double) +0:39 direct index ( temp double) +0:39 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 3 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 'delta' ( temp uint) +0:40 move second child to first child ( temp 2-component vector of double) +0:40 vector swizzle ( temp 2-component vector of double) +0:40 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:40 'delta' ( temp uint) +0:40 Constant: +0:40 3 (const int) +0:40 Sequence +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 subgroupRotate ( global 2-component vector of double) +0:40 vector swizzle ( temp 2-component vector of double) +0:40 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 3 (const int) +0:40 Sequence +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 'delta' ( temp uint) +0:41 move second child to first child ( temp 3-component vector of double) +0:41 vector swizzle ( temp 3-component vector of double) +0:41 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:41 'delta' ( temp uint) +0:41 Constant: +0:41 3 (const int) +0:41 Sequence +0:41 Constant: +0:41 0 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 2 (const int) +0:41 subgroupRotate ( global 3-component vector of double) +0:41 vector swizzle ( temp 3-component vector of double) +0:41 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:41 Constant: +0:41 2 (const int) +0:41 Constant: +0:41 3 (const int) +0:41 Sequence +0:41 Constant: +0:41 0 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 2 (const int) +0:41 'delta' ( temp uint) +0:42 move second child to first child ( temp 4-component vector of double) +0:42 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:42 'delta' ( temp uint) +0:42 Constant: +0:42 3 (const int) +0:42 subgroupRotate ( global 4-component vector of double) +0:42 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:42 Constant: +0:42 3 (const int) +0:42 Constant: +0:42 3 (const int) +0:42 'delta' ( temp uint) +0:44 move second child to first child ( temp int) +0:44 direct index ( temp int) +0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:44 'delta' ( temp uint) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 Convert bool to int ( temp int) +0:44 subgroupRotate ( global bool) +0:44 Compare Less Than ( temp bool) +0:44 direct index ( temp int) +0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 'delta' ( temp uint) +0:45 move second child to first child ( temp 2-component vector of int) +0:45 vector swizzle ( temp 2-component vector of int) +0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:45 'delta' ( temp uint) +0:45 Constant: +0:45 1 (const int) +0:45 Sequence +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 Convert bool to int ( temp 2-component vector of int) +0:45 subgroupRotate ( global 2-component vector of bool) +0:45 Compare Less Than ( global 2-component vector of bool) +0:45 vector swizzle ( temp 2-component vector of int) +0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 Sequence +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 0 (const int) +0:45 0 (const int) +0:45 'delta' ( temp uint) +0:46 move second child to first child ( temp 3-component vector of int) +0:46 vector swizzle ( temp 3-component vector of int) +0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:46 'delta' ( temp uint) +0:46 Constant: +0:46 1 (const int) +0:46 Sequence +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 2 (const int) +0:46 Convert bool to int ( temp 3-component vector of int) +0:46 subgroupRotate ( global 3-component vector of bool) +0:46 Compare Less Than ( global 3-component vector of bool) +0:46 vector swizzle ( temp 3-component vector of int) +0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 Sequence +0:46 Constant: +0:46 0 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 Constant: +0:46 2 (const int) +0:46 Constant: +0:46 0 (const int) +0:46 0 (const int) +0:46 0 (const int) +0:46 'delta' ( temp uint) +0:47 move second child to first child ( temp 4-component vector of int) +0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:47 'delta' ( temp uint) +0:47 Constant: +0:47 1 (const int) +0:47 Convert bool to int ( temp 4-component vector of int) +0:47 subgroupRotate ( global 4-component vector of bool) +0:47 Compare Less Than ( global 4-component vector of bool) +0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:47 Constant: +0:47 1 (const int) +0:47 Constant: +0:47 1 (const int) +0:47 Constant: +0:47 0 (const int) +0:47 0 (const int) +0:47 0 (const int) +0:47 0 (const int) +0:47 'delta' ( temp uint) +0:49 move second child to first child ( temp float) +0:49 direct index ( temp float) +0:49 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:49 'delta' ( temp uint) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 0 (const int) +0:49 subgroupClusteredRotate ( global float) +0:49 direct index ( temp float) +0:49 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 0 (const int) +0:49 'delta' ( temp uint) +0:49 Constant: +0:49 1 (const uint) +0:50 move second child to first child ( temp 2-component vector of float) +0:50 vector swizzle ( temp 2-component vector of float) +0:50 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:50 'delta' ( temp uint) +0:50 Constant: +0:50 0 (const int) +0:50 Sequence +0:50 Constant: +0:50 0 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 subgroupClusteredRotate ( global 2-component vector of float) +0:50 vector swizzle ( temp 2-component vector of float) +0:50 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:50 Constant: +0:50 1 (const int) +0:50 Constant: +0:50 0 (const int) +0:50 Sequence +0:50 Constant: +0:50 0 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 'delta' ( temp uint) +0:50 Constant: +0:50 1 (const uint) +0:51 move second child to first child ( temp 3-component vector of float) +0:51 vector swizzle ( temp 3-component vector of float) +0:51 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:51 'delta' ( temp uint) +0:51 Constant: +0:51 0 (const int) +0:51 Sequence +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 1 (const int) +0:51 Constant: +0:51 2 (const int) +0:51 subgroupClusteredRotate ( global 3-component vector of float) +0:51 vector swizzle ( temp 3-component vector of float) +0:51 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:51 Constant: +0:51 2 (const int) +0:51 Constant: +0:51 0 (const int) +0:51 Sequence +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 1 (const int) +0:51 Constant: +0:51 2 (const int) +0:51 'delta' ( temp uint) +0:51 Constant: +0:51 1 (const uint) +0:52 move second child to first child ( temp 4-component vector of float) +0:52 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:52 'delta' ( temp uint) +0:52 Constant: +0:52 0 (const int) +0:52 subgroupClusteredRotate ( global 4-component vector of float) +0:52 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float) +0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:52 Constant: +0:52 3 (const int) +0:52 Constant: +0:52 0 (const int) +0:52 'delta' ( temp uint) +0:52 Constant: +0:52 1 (const uint) +0:54 move second child to first child ( temp int) +0:54 direct index ( temp int) +0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:54 'delta' ( temp uint) +0:54 Constant: +0:54 1 (const int) +0:54 Constant: +0:54 0 (const int) +0:54 subgroupClusteredRotate ( global int) +0:54 direct index ( temp int) +0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 Constant: +0:54 0 (const int) +0:54 'delta' ( temp uint) +0:54 Constant: +0:54 1 (const uint) +0:55 move second child to first child ( temp 2-component vector of int) +0:55 vector swizzle ( temp 2-component vector of int) +0:55 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:55 'delta' ( temp uint) +0:55 Constant: +0:55 1 (const int) +0:55 Sequence +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 subgroupClusteredRotate ( global 2-component vector of int) +0:55 vector swizzle ( temp 2-component vector of int) +0:55 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:55 Constant: +0:55 1 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 Sequence +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 'delta' ( temp uint) +0:55 Constant: +0:55 1 (const uint) +0:56 move second child to first child ( temp 3-component vector of int) +0:56 vector swizzle ( temp 3-component vector of int) +0:56 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:56 'delta' ( temp uint) +0:56 Constant: +0:56 1 (const int) +0:56 Sequence +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 1 (const int) +0:56 Constant: +0:56 2 (const int) +0:56 subgroupClusteredRotate ( global 3-component vector of int) +0:56 vector swizzle ( temp 3-component vector of int) +0:56 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:56 Constant: +0:56 2 (const int) +0:56 Constant: +0:56 1 (const int) +0:56 Sequence +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 1 (const int) +0:56 Constant: +0:56 2 (const int) +0:56 'delta' ( temp uint) +0:56 Constant: +0:56 1 (const uint) +0:57 move second child to first child ( temp 4-component vector of int) +0:57 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:57 'delta' ( temp uint) +0:57 Constant: +0:57 1 (const int) +0:57 subgroupClusteredRotate ( global 4-component vector of int) +0:57 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:57 Constant: +0:57 3 (const int) +0:57 Constant: +0:57 1 (const int) +0:57 'delta' ( temp uint) +0:57 Constant: +0:57 1 (const uint) +0:59 move second child to first child ( temp uint) +0:59 direct index ( temp uint) +0:59 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:59 'delta' ( temp uint) +0:59 Constant: +0:59 2 (const int) +0:59 Constant: +0:59 0 (const int) +0:59 subgroupClusteredRotate ( global uint) +0:59 direct index ( temp uint) +0:59 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 2 (const int) +0:59 Constant: +0:59 0 (const int) +0:59 'delta' ( temp uint) +0:59 Constant: +0:59 1 (const uint) +0:60 move second child to first child ( temp 2-component vector of uint) +0:60 vector swizzle ( temp 2-component vector of uint) +0:60 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:60 'delta' ( temp uint) +0:60 Constant: +0:60 2 (const int) +0:60 Sequence +0:60 Constant: +0:60 0 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 subgroupClusteredRotate ( global 2-component vector of uint) +0:60 vector swizzle ( temp 2-component vector of uint) +0:60 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:60 Constant: +0:60 1 (const int) +0:60 Constant: +0:60 2 (const int) +0:60 Sequence +0:60 Constant: +0:60 0 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 'delta' ( temp uint) +0:60 Constant: +0:60 1 (const uint) +0:61 move second child to first child ( temp 3-component vector of uint) +0:61 vector swizzle ( temp 3-component vector of uint) +0:61 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:61 'delta' ( temp uint) +0:61 Constant: +0:61 2 (const int) +0:61 Sequence +0:61 Constant: +0:61 0 (const int) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 2 (const int) +0:61 subgroupClusteredRotate ( global 3-component vector of uint) +0:61 vector swizzle ( temp 3-component vector of uint) +0:61 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:61 Constant: +0:61 2 (const int) +0:61 Constant: +0:61 2 (const int) +0:61 Sequence +0:61 Constant: +0:61 0 (const int) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 2 (const int) +0:61 'delta' ( temp uint) +0:61 Constant: +0:61 1 (const uint) +0:62 move second child to first child ( temp 4-component vector of uint) +0:62 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:62 'delta' ( temp uint) +0:62 Constant: +0:62 2 (const int) +0:62 subgroupClusteredRotate ( global 4-component vector of uint) +0:62 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint) +0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:62 Constant: +0:62 3 (const int) +0:62 Constant: +0:62 2 (const int) +0:62 'delta' ( temp uint) +0:62 Constant: +0:62 1 (const uint) +0:64 move second child to first child ( temp double) +0:64 direct index ( temp double) +0:64 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:64 'delta' ( temp uint) +0:64 Constant: +0:64 3 (const int) +0:64 Constant: +0:64 0 (const int) +0:64 subgroupClusteredRotate ( global double) +0:64 direct index ( temp double) +0:64 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:64 Constant: +0:64 0 (const int) +0:64 Constant: +0:64 3 (const int) +0:64 Constant: +0:64 0 (const int) +0:64 'delta' ( temp uint) +0:64 Constant: +0:64 1 (const uint) +0:65 move second child to first child ( temp 2-component vector of double) +0:65 vector swizzle ( temp 2-component vector of double) +0:65 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:65 'delta' ( temp uint) +0:65 Constant: +0:65 3 (const int) +0:65 Sequence +0:65 Constant: +0:65 0 (const int) +0:65 Constant: +0:65 1 (const int) +0:65 subgroupClusteredRotate ( global 2-component vector of double) +0:65 vector swizzle ( temp 2-component vector of double) +0:65 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:65 Constant: +0:65 1 (const int) +0:65 Constant: +0:65 3 (const int) +0:65 Sequence +0:65 Constant: +0:65 0 (const int) +0:65 Constant: +0:65 1 (const int) +0:65 'delta' ( temp uint) +0:65 Constant: +0:65 1 (const uint) +0:66 move second child to first child ( temp 3-component vector of double) +0:66 vector swizzle ( temp 3-component vector of double) +0:66 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:66 'delta' ( temp uint) +0:66 Constant: +0:66 3 (const int) +0:66 Sequence +0:66 Constant: +0:66 0 (const int) +0:66 Constant: +0:66 1 (const int) +0:66 Constant: +0:66 2 (const int) +0:66 subgroupClusteredRotate ( global 3-component vector of double) +0:66 vector swizzle ( temp 3-component vector of double) +0:66 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:66 Constant: +0:66 2 (const int) +0:66 Constant: +0:66 3 (const int) +0:66 Sequence +0:66 Constant: +0:66 0 (const int) +0:66 Constant: +0:66 1 (const int) +0:66 Constant: +0:66 2 (const int) +0:66 'delta' ( temp uint) +0:66 Constant: +0:66 1 (const uint) +0:67 move second child to first child ( temp 4-component vector of double) +0:67 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:67 'delta' ( temp uint) +0:67 Constant: +0:67 3 (const int) +0:67 subgroupClusteredRotate ( global 4-component vector of double) +0:67 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double) +0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:67 Constant: +0:67 3 (const int) +0:67 Constant: +0:67 3 (const int) +0:67 'delta' ( temp uint) +0:67 Constant: +0:67 1 (const uint) +0:69 move second child to first child ( temp int) +0:69 direct index ( temp int) +0:69 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:69 'delta' ( temp uint) +0:69 Constant: +0:69 1 (const int) +0:69 Constant: +0:69 0 (const int) +0:69 Convert bool to int ( temp int) +0:69 subgroupClusteredRotate ( global bool) +0:69 Compare Less Than ( temp bool) +0:69 direct index ( temp int) +0:69 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:69 Constant: +0:69 0 (const int) +0:69 Constant: +0:69 1 (const int) +0:69 Constant: +0:69 0 (const int) +0:69 Constant: +0:69 0 (const int) +0:69 'delta' ( temp uint) +0:69 Constant: +0:69 1 (const uint) +0:70 move second child to first child ( temp 2-component vector of int) +0:70 vector swizzle ( temp 2-component vector of int) +0:70 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:70 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:70 'delta' ( temp uint) +0:70 Constant: +0:70 1 (const int) +0:70 Sequence +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 Convert bool to int ( temp 2-component vector of int) +0:70 subgroupClusteredRotate ( global 2-component vector of bool) +0:70 Compare Less Than ( global 2-component vector of bool) +0:70 vector swizzle ( temp 2-component vector of int) +0:70 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:70 Constant: +0:70 1 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 Sequence +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 1 (const int) +0:70 Constant: +0:70 0 (const int) +0:70 0 (const int) +0:70 'delta' ( temp uint) +0:70 Constant: +0:70 1 (const uint) +0:71 move second child to first child ( temp 3-component vector of int) +0:71 vector swizzle ( temp 3-component vector of int) +0:71 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:71 'delta' ( temp uint) +0:71 Constant: +0:71 1 (const int) +0:71 Sequence +0:71 Constant: +0:71 0 (const int) +0:71 Constant: +0:71 1 (const int) +0:71 Constant: +0:71 2 (const int) +0:71 Convert bool to int ( temp 3-component vector of int) +0:71 subgroupClusteredRotate ( global 3-component vector of bool) +0:71 Compare Less Than ( global 3-component vector of bool) +0:71 vector swizzle ( temp 3-component vector of int) +0:71 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:71 Constant: +0:71 1 (const int) +0:71 Constant: +0:71 1 (const int) +0:71 Sequence +0:71 Constant: +0:71 0 (const int) +0:71 Constant: +0:71 1 (const int) +0:71 Constant: +0:71 2 (const int) +0:71 Constant: +0:71 0 (const int) +0:71 0 (const int) +0:71 0 (const int) +0:71 'delta' ( temp uint) +0:71 Constant: +0:71 1 (const uint) +0:72 move second child to first child ( temp 4-component vector of int) +0:72 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:72 'delta' ( temp uint) +0:72 Constant: +0:72 1 (const int) +0:72 Convert bool to int ( temp 4-component vector of int) +0:72 subgroupClusteredRotate ( global 4-component vector of bool) +0:72 Compare Less Than ( global 4-component vector of bool) +0:72 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int) +0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) +0:72 Constant: +0:72 1 (const int) +0:72 Constant: +0:72 1 (const int) +0:72 Constant: +0:72 0 (const int) +0:72 0 (const int) +0:72 0 (const int) +0:72 0 (const int) +0:72 'delta' ( temp uint) +0:72 Constant: +0:72 1 (const uint) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 8 (const uint) +0:? 8 (const uint) +0:? 1 (const uint) +0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer uint delta}) +0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4}) + diff --git a/Test/baseResults/glsl.460.subgroup.rahit.out b/Test/baseResults/glsl.460.subgroup.rahit.out index 0a1e4f4aeb..77fbbe3edb 100644 --- a/Test/baseResults/glsl.460.subgroup.rahit.out +++ b/Test/baseResults/glsl.460.subgroup.rahit.out @@ -383,7 +383,7 @@ ERROR: node is still EOpNull! 0:119 Sequence 0:119 move second child to first child ( temp float) 0:119 'v11' ( temp float) -0:119 'gl_HitTNV' ( in float HitTNV) +0:119 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV) 0:120 Sequence 0:120 move second child to first child ( temp uint) 0:120 'v12' ( temp uint) @@ -760,7 +760,7 @@ ERROR: node is still EOpNull! 0:119 Sequence 0:119 move second child to first child ( temp float) 0:119 'v11' ( temp float) -0:119 'gl_HitTNV' ( in float HitTNV) +0:119 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV) 0:120 Sequence 0:120 move second child to first child ( temp uint) 0:120 'v12' ( temp uint) diff --git a/Test/baseResults/glsl.460.subgroup.rchit.out b/Test/baseResults/glsl.460.subgroup.rchit.out index f5083e0460..2a3de407cf 100644 --- a/Test/baseResults/glsl.460.subgroup.rchit.out +++ b/Test/baseResults/glsl.460.subgroup.rchit.out @@ -383,7 +383,7 @@ ERROR: node is still EOpNull! 0:121 Sequence 0:121 move second child to first child ( temp float) 0:121 'v11' ( temp float) -0:121 'gl_HitTNV' ( in float HitTNV) +0:121 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV) 0:122 Sequence 0:122 move second child to first child ( temp uint) 0:122 'v12' ( temp uint) @@ -771,7 +771,7 @@ ERROR: node is still EOpNull! 0:121 Sequence 0:121 move second child to first child ( temp float) 0:121 'v11' ( temp float) -0:121 'gl_HitTNV' ( in float HitTNV) +0:121 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV) 0:122 Sequence 0:122 move second child to first child ( temp uint) 0:122 'v12' ( temp uint) diff --git a/Test/baseResults/glsl.460.subgroupEXT.mesh.out b/Test/baseResults/glsl.460.subgroupEXT.mesh.out new file mode 100644 index 0000000000..8d45106c81 --- /dev/null +++ b/Test/baseResults/glsl.460.subgroupEXT.mesh.out @@ -0,0 +1,1039 @@ +glsl.460.subgroupEXT.mesh +ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote +ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote +ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote +ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle +ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle +ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative +ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative +ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad +ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad +ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad +ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad +ERROR: 64 compilation errors. No code generated. + + +Shader version: 460 +Requested GL_EXT_mesh_shader +Requested GL_KHR_shader_subgroup_arithmetic +Requested GL_KHR_shader_subgroup_ballot +Requested GL_KHR_shader_subgroup_basic +Requested GL_KHR_shader_subgroup_clustered +Requested GL_KHR_shader_subgroup_quad +Requested GL_KHR_shader_subgroup_shuffle +Requested GL_KHR_shader_subgroup_shuffle_relative +Requested GL_KHR_shader_subgroup_vote +max_vertices = 81 +max_primitives = 32 +output primitive = triangles +local_size = (32, 1, 1) +ERROR: node is still EOpNull! +0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float) +0:3 Function Parameters: +0:3 'f4' ( in 4-component vector of float) +0:? Sequence +0:6 'gl_SubgroupSize' ( in uint SubgroupSize) +0:7 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:8 subgroupBarrier ( global void) +0:9 subgroupMemoryBarrier ( global void) +0:10 subgroupMemoryBarrierBuffer ( global void) +0:11 subgroupMemoryBarrierImage ( global void) +0:12 subgroupElect ( global bool) +0:13 'gl_NumSubgroups' ( in uint NumSubgroups) +0:14 'gl_SubgroupID' ( in uint SubgroupID) +0:15 subgroupMemoryBarrierShared ( global void) +0:17 subgroupAll ( global bool) +0:17 Constant: +0:17 true (const bool) +0:18 subgroupAny ( global bool) +0:18 Constant: +0:18 false (const bool) +0:19 subgroupAllEqual ( global bool) +0:19 'f4' ( in 4-component vector of float) +0:21 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) +0:22 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) +0:23 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) +0:24 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) +0:25 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:26 subgroupBroadcast ( global 4-component vector of float) +0:26 'f4' ( in 4-component vector of float) +0:26 Constant: +0:26 0 (const uint) +0:27 subgroupBroadcastFirst ( global 4-component vector of float) +0:27 'f4' ( in 4-component vector of float) +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of uint) +0:28 'ballot' ( temp 4-component vector of uint) +0:28 subgroupBallot ( global 4-component vector of uint) +0:28 Constant: +0:28 false (const bool) +0:29 subgroupInverseBallot ( global bool) +0:29 Constant: +0:29 1 (const uint) +0:29 1 (const uint) +0:29 1 (const uint) +0:29 1 (const uint) +0:30 subgroupBallotBitExtract ( global bool) +0:30 'ballot' ( temp 4-component vector of uint) +0:30 Constant: +0:30 0 (const uint) +0:31 subgroupBallotBitCount ( global uint) +0:31 'ballot' ( temp 4-component vector of uint) +0:32 subgroupBallotInclusiveBitCount ( global uint) +0:32 'ballot' ( temp 4-component vector of uint) +0:33 subgroupBallotExclusiveBitCount ( global uint) +0:33 'ballot' ( temp 4-component vector of uint) +0:34 subgroupBallotFindLSB ( global uint) +0:34 'ballot' ( temp 4-component vector of uint) +0:35 subgroupBallotFindMSB ( global uint) +0:35 'ballot' ( temp 4-component vector of uint) +0:37 subgroupShuffle ( global 4-component vector of float) +0:37 'f4' ( in 4-component vector of float) +0:37 Constant: +0:37 0 (const uint) +0:38 subgroupShuffleXor ( global 4-component vector of float) +0:38 'f4' ( in 4-component vector of float) +0:38 Constant: +0:38 1 (const uint) +0:39 subgroupShuffleUp ( global 4-component vector of float) +0:39 'f4' ( in 4-component vector of float) +0:39 Constant: +0:39 1 (const uint) +0:40 subgroupShuffleDown ( global 4-component vector of float) +0:40 'f4' ( in 4-component vector of float) +0:40 Constant: +0:40 1 (const uint) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'result' ( temp 4-component vector of float) +0:42 subgroupAdd ( global 4-component vector of float) +0:42 'f4' ( in 4-component vector of float) +0:43 subgroupMul ( global 4-component vector of float) +0:43 'f4' ( in 4-component vector of float) +0:44 subgroupMin ( global 4-component vector of float) +0:44 'f4' ( in 4-component vector of float) +0:45 subgroupMax ( global 4-component vector of float) +0:45 'f4' ( in 4-component vector of float) +0:46 subgroupAnd ( global 4-component vector of uint) +0:46 'ballot' ( temp 4-component vector of uint) +0:47 subgroupOr ( global 4-component vector of uint) +0:47 'ballot' ( temp 4-component vector of uint) +0:48 subgroupXor ( global 4-component vector of uint) +0:48 'ballot' ( temp 4-component vector of uint) +0:49 subgroupInclusiveAdd ( global 4-component vector of float) +0:49 'f4' ( in 4-component vector of float) +0:50 subgroupInclusiveMul ( global 4-component vector of float) +0:50 'f4' ( in 4-component vector of float) +0:51 subgroupInclusiveMin ( global 4-component vector of float) +0:51 'f4' ( in 4-component vector of float) +0:52 subgroupInclusiveMax ( global 4-component vector of float) +0:52 'f4' ( in 4-component vector of float) +0:53 subgroupInclusiveAnd ( global 4-component vector of uint) +0:53 'ballot' ( temp 4-component vector of uint) +0:54 subgroupInclusiveOr ( global 4-component vector of uint) +0:54 'ballot' ( temp 4-component vector of uint) +0:55 subgroupInclusiveXor ( global 4-component vector of uint) +0:55 'ballot' ( temp 4-component vector of uint) +0:56 subgroupExclusiveAdd ( global 4-component vector of float) +0:56 'f4' ( in 4-component vector of float) +0:57 subgroupExclusiveMul ( global 4-component vector of float) +0:57 'f4' ( in 4-component vector of float) +0:58 subgroupExclusiveMin ( global 4-component vector of float) +0:58 'f4' ( in 4-component vector of float) +0:59 subgroupExclusiveMax ( global 4-component vector of float) +0:59 'f4' ( in 4-component vector of float) +0:60 subgroupExclusiveAnd ( global 4-component vector of uint) +0:60 'ballot' ( temp 4-component vector of uint) +0:61 subgroupExclusiveOr ( global 4-component vector of uint) +0:61 'ballot' ( temp 4-component vector of uint) +0:62 subgroupExclusiveXor ( global 4-component vector of uint) +0:62 'ballot' ( temp 4-component vector of uint) +0:64 subgroupClusteredAdd ( global 4-component vector of float) +0:64 'f4' ( in 4-component vector of float) +0:64 Constant: +0:64 2 (const uint) +0:65 subgroupClusteredMul ( global 4-component vector of float) +0:65 'f4' ( in 4-component vector of float) +0:65 Constant: +0:65 2 (const uint) +0:66 subgroupClusteredMin ( global 4-component vector of float) +0:66 'f4' ( in 4-component vector of float) +0:66 Constant: +0:66 2 (const uint) +0:67 subgroupClusteredMax ( global 4-component vector of float) +0:67 'f4' ( in 4-component vector of float) +0:67 Constant: +0:67 2 (const uint) +0:68 subgroupClusteredAnd ( global 4-component vector of uint) +0:68 'ballot' ( temp 4-component vector of uint) +0:68 Constant: +0:68 2 (const uint) +0:69 subgroupClusteredOr ( global 4-component vector of uint) +0:69 'ballot' ( temp 4-component vector of uint) +0:69 Constant: +0:69 2 (const uint) +0:70 subgroupClusteredXor ( global 4-component vector of uint) +0:70 'ballot' ( temp 4-component vector of uint) +0:70 Constant: +0:70 2 (const uint) +0:72 subgroupQuadBroadcast ( global 4-component vector of float) +0:72 'f4' ( in 4-component vector of float) +0:72 Constant: +0:72 0 (const uint) +0:73 subgroupQuadSwapHorizontal ( global 4-component vector of float) +0:73 'f4' ( in 4-component vector of float) +0:74 subgroupQuadSwapVertical ( global 4-component vector of float) +0:74 'f4' ( in 4-component vector of float) +0:75 subgroupQuadSwapDiagonal ( global 4-component vector of float) +0:75 'f4' ( in 4-component vector of float) +0:77 Branch: Return with expression +0:77 'result' ( temp 4-component vector of float) +0:97 Function Definition: main( ( global void) +0:97 Function Parameters: +0:99 Sequence +0:99 Sequence +0:99 move second child to first child ( temp uint) +0:99 'iid' ( temp uint) +0:99 direct index ( temp uint) +0:99 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID) +0:99 Constant: +0:99 0 (const int) +0:100 Sequence +0:100 move second child to first child ( temp uint) +0:100 'gid' ( temp uint) +0:100 direct index ( temp uint) +0:100 'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID) +0:100 Constant: +0:100 0 (const int) +0:101 Sequence +0:101 move second child to first child ( temp uint) +0:101 'vertexCount' ( temp uint) +0:101 Constant: +0:101 81 (const uint) +0:102 Sequence +0:102 move second child to first child ( temp uint) +0:102 'primitiveCount' ( temp uint) +0:102 Constant: +0:102 32 (const uint) +0:103 SetMeshOutputsEXT ( global void) +0:103 'vertexCount' ( temp uint) +0:103 'primitiveCount' ( temp uint) +0:105 move second child to first child ( temp 4-component vector of float) +0:105 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:105 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:105 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:105 'iid' ( temp uint) +0:105 Constant: +0:105 0 (const int) +0:105 Constant: +0:105 1.000000 +0:105 1.000000 +0:105 1.000000 +0:105 1.000000 +0:106 move second child to first child ( temp float) +0:106 gl_PointSize: direct index for structure ( out float PointSize) +0:106 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:106 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:106 'iid' ( temp uint) +0:106 Constant: +0:106 1 (const int) +0:106 Constant: +0:106 2.000000 +0:107 move second child to first child ( temp float) +0:107 direct index ( temp float ClipDistance) +0:107 gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance) +0:107 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:107 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:107 'iid' ( temp uint) +0:107 Constant: +0:107 2 (const int) +0:107 Constant: +0:107 3 (const int) +0:107 Constant: +0:107 3.000000 +0:108 move second child to first child ( temp float) +0:108 direct index ( temp float CullDistance) +0:108 gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance) +0:108 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:108 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:108 'iid' ( temp uint) +0:108 Constant: +0:108 3 (const int) +0:108 Constant: +0:108 2 (const int) +0:108 Constant: +0:108 4.000000 +0:110 MemoryBarrierShared ( global void) +0:110 Barrier ( global void) +0:112 move second child to first child ( temp 4-component vector of float) +0:112 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:112 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:112 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:112 add ( temp uint) +0:112 'iid' ( temp uint) +0:112 Constant: +0:112 1 (const uint) +0:112 Constant: +0:112 0 (const int) +0:112 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:112 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:112 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:112 'iid' ( temp uint) +0:112 Constant: +0:112 0 (const int) +0:113 move second child to first child ( temp float) +0:113 gl_PointSize: direct index for structure ( out float PointSize) +0:113 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:113 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:113 add ( temp uint) +0:113 'iid' ( temp uint) +0:113 Constant: +0:113 1 (const uint) +0:113 Constant: +0:113 1 (const int) +0:113 gl_PointSize: direct index for structure ( out float PointSize) +0:113 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:113 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:113 'iid' ( temp uint) +0:113 Constant: +0:113 1 (const int) +0:114 move second child to first child ( temp float) +0:114 direct index ( temp float ClipDistance) +0:114 gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance) +0:114 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:114 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:114 add ( temp uint) +0:114 'iid' ( temp uint) +0:114 Constant: +0:114 1 (const uint) +0:114 Constant: +0:114 2 (const int) +0:114 Constant: +0:114 3 (const int) +0:114 direct index ( temp float ClipDistance) +0:114 gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance) +0:114 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:114 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:114 'iid' ( temp uint) +0:114 Constant: +0:114 2 (const int) +0:114 Constant: +0:114 3 (const int) +0:115 move second child to first child ( temp float) +0:115 direct index ( temp float CullDistance) +0:115 gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance) +0:115 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:115 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:115 add ( temp uint) +0:115 'iid' ( temp uint) +0:115 Constant: +0:115 1 (const uint) +0:115 Constant: +0:115 3 (const int) +0:115 Constant: +0:115 2 (const int) +0:115 direct index ( temp float CullDistance) +0:115 gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance) +0:115 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:115 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:115 'iid' ( temp uint) +0:115 Constant: +0:115 3 (const int) +0:115 Constant: +0:115 2 (const int) +0:117 MemoryBarrierShared ( global void) +0:117 Barrier ( global void) +0:119 move second child to first child ( temp int) +0:119 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID) +0:119 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:119 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:119 'iid' ( temp uint) +0:119 Constant: +0:119 0 (const int) +0:119 Constant: +0:119 6 (const int) +0:120 move second child to first child ( temp int) +0:120 gl_Layer: direct index for structure ( perprimitiveNV out int Layer) +0:120 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:120 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:120 'iid' ( temp uint) +0:120 Constant: +0:120 1 (const int) +0:120 Constant: +0:120 7 (const int) +0:121 move second child to first child ( temp int) +0:121 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex) +0:121 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:121 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:121 'iid' ( temp uint) +0:121 Constant: +0:121 2 (const int) +0:121 Constant: +0:121 8 (const int) +0:122 move second child to first child ( temp bool) +0:122 gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT) +0:122 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:122 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:122 'iid' ( temp uint) +0:122 Constant: +0:122 3 (const int) +0:122 Constant: +0:122 false (const bool) +0:124 MemoryBarrierShared ( global void) +0:124 Barrier ( global void) +0:126 move second child to first child ( temp int) +0:126 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID) +0:126 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:126 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:126 add ( temp uint) +0:126 'iid' ( temp uint) +0:126 Constant: +0:126 1 (const uint) +0:126 Constant: +0:126 0 (const int) +0:126 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID) +0:126 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:126 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:126 'iid' ( temp uint) +0:126 Constant: +0:126 0 (const int) +0:127 move second child to first child ( temp int) +0:127 gl_Layer: direct index for structure ( perprimitiveNV out int Layer) +0:127 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:127 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:127 add ( temp uint) +0:127 'iid' ( temp uint) +0:127 Constant: +0:127 1 (const uint) +0:127 Constant: +0:127 1 (const int) +0:127 gl_Layer: direct index for structure ( perprimitiveNV out int Layer) +0:127 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:127 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:127 'iid' ( temp uint) +0:127 Constant: +0:127 1 (const int) +0:128 move second child to first child ( temp int) +0:128 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex) +0:128 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:128 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:128 add ( temp uint) +0:128 'iid' ( temp uint) +0:128 Constant: +0:128 1 (const uint) +0:128 Constant: +0:128 2 (const int) +0:128 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex) +0:128 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:128 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:128 'iid' ( temp uint) +0:128 Constant: +0:128 2 (const int) +0:129 move second child to first child ( temp bool) +0:129 gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT) +0:129 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:129 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:129 add ( temp uint) +0:129 'iid' ( temp uint) +0:129 Constant: +0:129 1 (const uint) +0:129 Constant: +0:129 3 (const int) +0:129 Constant: +0:129 false (const bool) +0:131 MemoryBarrierShared ( global void) +0:131 Barrier ( global void) +0:134 move second child to first child ( temp 3-component vector of uint) +0:134 direct index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:134 'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:134 Constant: +0:134 0 (const int) +0:134 Constant: +0:134 1 (const uint) +0:134 1 (const uint) +0:134 1 (const uint) +0:135 move second child to first child ( temp 3-component vector of uint) +0:135 indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:135 'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:135 subtract ( temp uint) +0:135 'primitiveCount' ( temp uint) +0:135 Constant: +0:135 1 (const uint) +0:135 Constant: +0:135 2 (const uint) +0:135 2 (const uint) +0:135 2 (const uint) +0:136 move second child to first child ( temp 3-component vector of uint) +0:136 indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:136 'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:136 'gid' ( temp uint) +0:136 indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:136 'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:136 subtract ( temp uint) +0:136 'gid' ( temp uint) +0:136 Constant: +0:136 1 (const uint) +0:139 MemoryBarrierShared ( global void) +0:139 Barrier ( global void) +0:143 Function Definition: basic_works( ( global void) +0:143 Function Parameters: +0:145 Sequence +0:145 'gl_SubgroupSize' ( in uint SubgroupSize) +0:146 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:147 subgroupBarrier ( global void) +0:148 subgroupMemoryBarrier ( global void) +0:149 subgroupMemoryBarrierBuffer ( global void) +0:150 subgroupMemoryBarrierImage ( global void) +0:151 subgroupElect ( global bool) +0:152 'gl_NumSubgroups' ( in uint NumSubgroups) +0:153 'gl_SubgroupID' ( in uint SubgroupID) +0:154 subgroupMemoryBarrierShared ( global void) +0:158 Function Definition: ballot_works(vf4; ( global void) +0:158 Function Parameters: +0:158 'f4' ( in 4-component vector of float) +0:159 Sequence +0:159 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) +0:160 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) +0:161 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) +0:162 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) +0:163 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:164 subgroupBroadcast ( global 4-component vector of float) +0:164 'f4' ( in 4-component vector of float) +0:164 Constant: +0:164 0 (const uint) +0:165 subgroupBroadcastFirst ( global 4-component vector of float) +0:165 'f4' ( in 4-component vector of float) +0:166 Sequence +0:166 move second child to first child ( temp 4-component vector of uint) +0:166 'ballot' ( temp 4-component vector of uint) +0:166 subgroupBallot ( global 4-component vector of uint) +0:166 Constant: +0:166 false (const bool) +0:167 subgroupInverseBallot ( global bool) +0:167 Constant: +0:167 1 (const uint) +0:167 1 (const uint) +0:167 1 (const uint) +0:167 1 (const uint) +0:168 subgroupBallotBitExtract ( global bool) +0:168 'ballot' ( temp 4-component vector of uint) +0:168 Constant: +0:168 0 (const uint) +0:169 subgroupBallotBitCount ( global uint) +0:169 'ballot' ( temp 4-component vector of uint) +0:170 subgroupBallotInclusiveBitCount ( global uint) +0:170 'ballot' ( temp 4-component vector of uint) +0:171 subgroupBallotExclusiveBitCount ( global uint) +0:171 'ballot' ( temp 4-component vector of uint) +0:172 subgroupBallotFindLSB ( global uint) +0:172 'ballot' ( temp 4-component vector of uint) +0:173 subgroupBallotFindMSB ( global uint) +0:173 'ballot' ( temp 4-component vector of uint) +0:177 Function Definition: vote_works(vf4; ( global void) +0:177 Function Parameters: +0:177 'f4' ( in 4-component vector of float) +0:179 Sequence +0:179 subgroupAll ( global bool) +0:179 Constant: +0:179 true (const bool) +0:180 subgroupAny ( global bool) +0:180 Constant: +0:180 false (const bool) +0:181 subgroupAllEqual ( global bool) +0:181 'f4' ( in 4-component vector of float) +0:186 Function Definition: shuffle_works(vf4; ( global void) +0:186 Function Parameters: +0:186 'f4' ( in 4-component vector of float) +0:188 Sequence +0:188 subgroupShuffle ( global 4-component vector of float) +0:188 'f4' ( in 4-component vector of float) +0:188 Constant: +0:188 0 (const uint) +0:189 subgroupShuffleXor ( global 4-component vector of float) +0:189 'f4' ( in 4-component vector of float) +0:189 Constant: +0:189 1 (const uint) +0:190 subgroupShuffleUp ( global 4-component vector of float) +0:190 'f4' ( in 4-component vector of float) +0:190 Constant: +0:190 1 (const uint) +0:191 subgroupShuffleDown ( global 4-component vector of float) +0:191 'f4' ( in 4-component vector of float) +0:191 Constant: +0:191 1 (const uint) +0:195 Function Definition: arith_works(vf4; ( global void) +0:195 Function Parameters: +0:195 'f4' ( in 4-component vector of float) +0:? Sequence +0:198 subgroupAdd ( global 4-component vector of float) +0:198 'f4' ( in 4-component vector of float) +0:199 subgroupMul ( global 4-component vector of float) +0:199 'f4' ( in 4-component vector of float) +0:200 subgroupMin ( global 4-component vector of float) +0:200 'f4' ( in 4-component vector of float) +0:201 subgroupMax ( global 4-component vector of float) +0:201 'f4' ( in 4-component vector of float) +0:202 subgroupAnd ( global 4-component vector of uint) +0:202 'ballot' ( temp 4-component vector of uint) +0:203 subgroupOr ( global 4-component vector of uint) +0:203 'ballot' ( temp 4-component vector of uint) +0:204 subgroupXor ( global 4-component vector of uint) +0:204 'ballot' ( temp 4-component vector of uint) +0:205 subgroupInclusiveAdd ( global 4-component vector of float) +0:205 'f4' ( in 4-component vector of float) +0:206 subgroupInclusiveMul ( global 4-component vector of float) +0:206 'f4' ( in 4-component vector of float) +0:207 subgroupInclusiveMin ( global 4-component vector of float) +0:207 'f4' ( in 4-component vector of float) +0:208 subgroupInclusiveMax ( global 4-component vector of float) +0:208 'f4' ( in 4-component vector of float) +0:209 subgroupInclusiveAnd ( global 4-component vector of uint) +0:209 'ballot' ( temp 4-component vector of uint) +0:210 subgroupInclusiveOr ( global 4-component vector of uint) +0:210 'ballot' ( temp 4-component vector of uint) +0:211 subgroupInclusiveXor ( global 4-component vector of uint) +0:211 'ballot' ( temp 4-component vector of uint) +0:212 subgroupExclusiveAdd ( global 4-component vector of float) +0:212 'f4' ( in 4-component vector of float) +0:213 subgroupExclusiveMul ( global 4-component vector of float) +0:213 'f4' ( in 4-component vector of float) +0:214 subgroupExclusiveMin ( global 4-component vector of float) +0:214 'f4' ( in 4-component vector of float) +0:215 subgroupExclusiveMax ( global 4-component vector of float) +0:215 'f4' ( in 4-component vector of float) +0:216 subgroupExclusiveAnd ( global 4-component vector of uint) +0:216 'ballot' ( temp 4-component vector of uint) +0:217 subgroupExclusiveOr ( global 4-component vector of uint) +0:217 'ballot' ( temp 4-component vector of uint) +0:218 subgroupExclusiveXor ( global 4-component vector of uint) +0:218 'ballot' ( temp 4-component vector of uint) +0:222 Function Definition: clustered_works(vf4; ( global void) +0:222 Function Parameters: +0:222 'f4' ( in 4-component vector of float) +0:224 Sequence +0:224 Sequence +0:224 move second child to first child ( temp 4-component vector of uint) +0:224 'ballot' ( temp 4-component vector of uint) +0:224 Constant: +0:224 85 (const uint) +0:224 0 (const uint) +0:224 0 (const uint) +0:224 0 (const uint) +0:225 subgroupClusteredAdd ( global 4-component vector of float) +0:225 'f4' ( in 4-component vector of float) +0:225 Constant: +0:225 2 (const uint) +0:226 subgroupClusteredMul ( global 4-component vector of float) +0:226 'f4' ( in 4-component vector of float) +0:226 Constant: +0:226 2 (const uint) +0:227 subgroupClusteredMin ( global 4-component vector of float) +0:227 'f4' ( in 4-component vector of float) +0:227 Constant: +0:227 2 (const uint) +0:228 subgroupClusteredMax ( global 4-component vector of float) +0:228 'f4' ( in 4-component vector of float) +0:228 Constant: +0:228 2 (const uint) +0:229 subgroupClusteredAnd ( global 4-component vector of uint) +0:229 'ballot' ( temp 4-component vector of uint) +0:229 Constant: +0:229 2 (const uint) +0:230 subgroupClusteredOr ( global 4-component vector of uint) +0:230 'ballot' ( temp 4-component vector of uint) +0:230 Constant: +0:230 2 (const uint) +0:231 subgroupClusteredXor ( global 4-component vector of uint) +0:231 'ballot' ( temp 4-component vector of uint) +0:231 Constant: +0:231 2 (const uint) +0:235 Function Definition: quad_works(vf4; ( global void) +0:235 Function Parameters: +0:235 'f4' ( in 4-component vector of float) +0:237 Sequence +0:237 subgroupQuadBroadcast ( global 4-component vector of float) +0:237 'f4' ( in 4-component vector of float) +0:237 Constant: +0:237 0 (const uint) +0:238 subgroupQuadSwapHorizontal ( global 4-component vector of float) +0:238 'f4' ( in 4-component vector of float) +0:239 subgroupQuadSwapVertical ( global 4-component vector of float) +0:239 'f4' ( in 4-component vector of float) +0:240 subgroupQuadSwapDiagonal ( global 4-component vector of float) +0:240 'f4' ( in 4-component vector of float) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 32 (const uint) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance}) +0:? 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:? 'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT) + + +Linked mesh stage: + + +Shader version: 460 +Requested GL_EXT_mesh_shader +Requested GL_KHR_shader_subgroup_arithmetic +Requested GL_KHR_shader_subgroup_ballot +Requested GL_KHR_shader_subgroup_basic +Requested GL_KHR_shader_subgroup_clustered +Requested GL_KHR_shader_subgroup_quad +Requested GL_KHR_shader_subgroup_shuffle +Requested GL_KHR_shader_subgroup_shuffle_relative +Requested GL_KHR_shader_subgroup_vote +max_vertices = 81 +max_primitives = 32 +output primitive = triangles +local_size = (32, 1, 1) +ERROR: node is still EOpNull! +0:97 Function Definition: main( ( global void) +0:97 Function Parameters: +0:99 Sequence +0:99 Sequence +0:99 move second child to first child ( temp uint) +0:99 'iid' ( temp uint) +0:99 direct index ( temp uint) +0:99 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID) +0:99 Constant: +0:99 0 (const int) +0:100 Sequence +0:100 move second child to first child ( temp uint) +0:100 'gid' ( temp uint) +0:100 direct index ( temp uint) +0:100 'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID) +0:100 Constant: +0:100 0 (const int) +0:101 Sequence +0:101 move second child to first child ( temp uint) +0:101 'vertexCount' ( temp uint) +0:101 Constant: +0:101 81 (const uint) +0:102 Sequence +0:102 move second child to first child ( temp uint) +0:102 'primitiveCount' ( temp uint) +0:102 Constant: +0:102 32 (const uint) +0:103 SetMeshOutputsEXT ( global void) +0:103 'vertexCount' ( temp uint) +0:103 'primitiveCount' ( temp uint) +0:105 move second child to first child ( temp 4-component vector of float) +0:105 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:105 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:105 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:105 'iid' ( temp uint) +0:105 Constant: +0:105 0 (const int) +0:105 Constant: +0:105 1.000000 +0:105 1.000000 +0:105 1.000000 +0:105 1.000000 +0:106 move second child to first child ( temp float) +0:106 gl_PointSize: direct index for structure ( out float PointSize) +0:106 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:106 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:106 'iid' ( temp uint) +0:106 Constant: +0:106 1 (const int) +0:106 Constant: +0:106 2.000000 +0:107 move second child to first child ( temp float) +0:107 direct index ( temp float ClipDistance) +0:107 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance) +0:107 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:107 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:107 'iid' ( temp uint) +0:107 Constant: +0:107 2 (const int) +0:107 Constant: +0:107 3 (const int) +0:107 Constant: +0:107 3.000000 +0:108 move second child to first child ( temp float) +0:108 direct index ( temp float CullDistance) +0:108 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) +0:108 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:108 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:108 'iid' ( temp uint) +0:108 Constant: +0:108 3 (const int) +0:108 Constant: +0:108 2 (const int) +0:108 Constant: +0:108 4.000000 +0:110 MemoryBarrierShared ( global void) +0:110 Barrier ( global void) +0:112 move second child to first child ( temp 4-component vector of float) +0:112 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:112 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:112 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:112 add ( temp uint) +0:112 'iid' ( temp uint) +0:112 Constant: +0:112 1 (const uint) +0:112 Constant: +0:112 0 (const int) +0:112 gl_Position: direct index for structure ( out 4-component vector of float Position) +0:112 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:112 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:112 'iid' ( temp uint) +0:112 Constant: +0:112 0 (const int) +0:113 move second child to first child ( temp float) +0:113 gl_PointSize: direct index for structure ( out float PointSize) +0:113 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:113 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:113 add ( temp uint) +0:113 'iid' ( temp uint) +0:113 Constant: +0:113 1 (const uint) +0:113 Constant: +0:113 1 (const int) +0:113 gl_PointSize: direct index for structure ( out float PointSize) +0:113 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:113 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:113 'iid' ( temp uint) +0:113 Constant: +0:113 1 (const int) +0:114 move second child to first child ( temp float) +0:114 direct index ( temp float ClipDistance) +0:114 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance) +0:114 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:114 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:114 add ( temp uint) +0:114 'iid' ( temp uint) +0:114 Constant: +0:114 1 (const uint) +0:114 Constant: +0:114 2 (const int) +0:114 Constant: +0:114 3 (const int) +0:114 direct index ( temp float ClipDistance) +0:114 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance) +0:114 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:114 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:114 'iid' ( temp uint) +0:114 Constant: +0:114 2 (const int) +0:114 Constant: +0:114 3 (const int) +0:115 move second child to first child ( temp float) +0:115 direct index ( temp float CullDistance) +0:115 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) +0:115 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:115 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:115 add ( temp uint) +0:115 'iid' ( temp uint) +0:115 Constant: +0:115 1 (const uint) +0:115 Constant: +0:115 3 (const int) +0:115 Constant: +0:115 2 (const int) +0:115 direct index ( temp float CullDistance) +0:115 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) +0:115 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:115 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:115 'iid' ( temp uint) +0:115 Constant: +0:115 3 (const int) +0:115 Constant: +0:115 2 (const int) +0:117 MemoryBarrierShared ( global void) +0:117 Barrier ( global void) +0:119 move second child to first child ( temp int) +0:119 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID) +0:119 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:119 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:119 'iid' ( temp uint) +0:119 Constant: +0:119 0 (const int) +0:119 Constant: +0:119 6 (const int) +0:120 move second child to first child ( temp int) +0:120 gl_Layer: direct index for structure ( perprimitiveNV out int Layer) +0:120 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:120 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:120 'iid' ( temp uint) +0:120 Constant: +0:120 1 (const int) +0:120 Constant: +0:120 7 (const int) +0:121 move second child to first child ( temp int) +0:121 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex) +0:121 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:121 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:121 'iid' ( temp uint) +0:121 Constant: +0:121 2 (const int) +0:121 Constant: +0:121 8 (const int) +0:122 move second child to first child ( temp bool) +0:122 gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT) +0:122 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:122 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:122 'iid' ( temp uint) +0:122 Constant: +0:122 3 (const int) +0:122 Constant: +0:122 false (const bool) +0:124 MemoryBarrierShared ( global void) +0:124 Barrier ( global void) +0:126 move second child to first child ( temp int) +0:126 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID) +0:126 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:126 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:126 add ( temp uint) +0:126 'iid' ( temp uint) +0:126 Constant: +0:126 1 (const uint) +0:126 Constant: +0:126 0 (const int) +0:126 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID) +0:126 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:126 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:126 'iid' ( temp uint) +0:126 Constant: +0:126 0 (const int) +0:127 move second child to first child ( temp int) +0:127 gl_Layer: direct index for structure ( perprimitiveNV out int Layer) +0:127 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:127 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:127 add ( temp uint) +0:127 'iid' ( temp uint) +0:127 Constant: +0:127 1 (const uint) +0:127 Constant: +0:127 1 (const int) +0:127 gl_Layer: direct index for structure ( perprimitiveNV out int Layer) +0:127 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:127 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:127 'iid' ( temp uint) +0:127 Constant: +0:127 1 (const int) +0:128 move second child to first child ( temp int) +0:128 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex) +0:128 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:128 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:128 add ( temp uint) +0:128 'iid' ( temp uint) +0:128 Constant: +0:128 1 (const uint) +0:128 Constant: +0:128 2 (const int) +0:128 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex) +0:128 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:128 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:128 'iid' ( temp uint) +0:128 Constant: +0:128 2 (const int) +0:129 move second child to first child ( temp bool) +0:129 gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT) +0:129 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:129 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:129 add ( temp uint) +0:129 'iid' ( temp uint) +0:129 Constant: +0:129 1 (const uint) +0:129 Constant: +0:129 3 (const int) +0:129 Constant: +0:129 false (const bool) +0:131 MemoryBarrierShared ( global void) +0:131 Barrier ( global void) +0:134 move second child to first child ( temp 3-component vector of uint) +0:134 direct index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:134 'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:134 Constant: +0:134 0 (const int) +0:134 Constant: +0:134 1 (const uint) +0:134 1 (const uint) +0:134 1 (const uint) +0:135 move second child to first child ( temp 3-component vector of uint) +0:135 indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:135 'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:135 subtract ( temp uint) +0:135 'primitiveCount' ( temp uint) +0:135 Constant: +0:135 1 (const uint) +0:135 Constant: +0:135 2 (const uint) +0:135 2 (const uint) +0:135 2 (const uint) +0:136 move second child to first child ( temp 3-component vector of uint) +0:136 indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:136 'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:136 'gid' ( temp uint) +0:136 indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:136 'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT) +0:136 subtract ( temp uint) +0:136 'gid' ( temp uint) +0:136 Constant: +0:136 1 (const uint) +0:139 MemoryBarrierShared ( global void) +0:139 Barrier ( global void) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 32 (const uint) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance}) +0:? 'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT, perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT}) +0:? 'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT) + diff --git a/Test/baseResults/glsl.460.subgroupEXT.task.out b/Test/baseResults/glsl.460.subgroupEXT.task.out new file mode 100644 index 0000000000..c756f38adc --- /dev/null +++ b/Test/baseResults/glsl.460.subgroupEXT.task.out @@ -0,0 +1,707 @@ +glsl.460.subgroupEXT.task +ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic +ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote +ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote +ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote +ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot +ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle +ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle +ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative +ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative +ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic +ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered +ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad +ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad +ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad +ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad +ERROR: 64 compilation errors. No code generated. + + +Shader version: 460 +Requested GL_EXT_mesh_shader +Requested GL_KHR_shader_subgroup_arithmetic +Requested GL_KHR_shader_subgroup_ballot +Requested GL_KHR_shader_subgroup_basic +Requested GL_KHR_shader_subgroup_clustered +Requested GL_KHR_shader_subgroup_quad +Requested GL_KHR_shader_subgroup_shuffle +Requested GL_KHR_shader_subgroup_shuffle_relative +Requested GL_KHR_shader_subgroup_vote +local_size = (32, 1, 1) +ERROR: node is still EOpNull! +0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float) +0:3 Function Parameters: +0:3 'f4' ( in 4-component vector of float) +0:? Sequence +0:6 'gl_SubgroupSize' ( in uint SubgroupSize) +0:7 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:8 subgroupBarrier ( global void) +0:9 subgroupMemoryBarrier ( global void) +0:10 subgroupMemoryBarrierBuffer ( global void) +0:11 subgroupMemoryBarrierImage ( global void) +0:12 subgroupElect ( global bool) +0:13 'gl_NumSubgroups' ( in uint NumSubgroups) +0:14 'gl_SubgroupID' ( in uint SubgroupID) +0:15 subgroupMemoryBarrierShared ( global void) +0:17 subgroupAll ( global bool) +0:17 Constant: +0:17 true (const bool) +0:18 subgroupAny ( global bool) +0:18 Constant: +0:18 false (const bool) +0:19 subgroupAllEqual ( global bool) +0:19 'f4' ( in 4-component vector of float) +0:21 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) +0:22 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) +0:23 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) +0:24 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) +0:25 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:26 subgroupBroadcast ( global 4-component vector of float) +0:26 'f4' ( in 4-component vector of float) +0:26 Constant: +0:26 0 (const uint) +0:27 subgroupBroadcastFirst ( global 4-component vector of float) +0:27 'f4' ( in 4-component vector of float) +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of uint) +0:28 'ballot' ( temp 4-component vector of uint) +0:28 subgroupBallot ( global 4-component vector of uint) +0:28 Constant: +0:28 false (const bool) +0:29 subgroupInverseBallot ( global bool) +0:29 Constant: +0:29 1 (const uint) +0:29 1 (const uint) +0:29 1 (const uint) +0:29 1 (const uint) +0:30 subgroupBallotBitExtract ( global bool) +0:30 'ballot' ( temp 4-component vector of uint) +0:30 Constant: +0:30 0 (const uint) +0:31 subgroupBallotBitCount ( global uint) +0:31 'ballot' ( temp 4-component vector of uint) +0:32 subgroupBallotInclusiveBitCount ( global uint) +0:32 'ballot' ( temp 4-component vector of uint) +0:33 subgroupBallotExclusiveBitCount ( global uint) +0:33 'ballot' ( temp 4-component vector of uint) +0:34 subgroupBallotFindLSB ( global uint) +0:34 'ballot' ( temp 4-component vector of uint) +0:35 subgroupBallotFindMSB ( global uint) +0:35 'ballot' ( temp 4-component vector of uint) +0:37 subgroupShuffle ( global 4-component vector of float) +0:37 'f4' ( in 4-component vector of float) +0:37 Constant: +0:37 0 (const uint) +0:38 subgroupShuffleXor ( global 4-component vector of float) +0:38 'f4' ( in 4-component vector of float) +0:38 Constant: +0:38 1 (const uint) +0:39 subgroupShuffleUp ( global 4-component vector of float) +0:39 'f4' ( in 4-component vector of float) +0:39 Constant: +0:39 1 (const uint) +0:40 subgroupShuffleDown ( global 4-component vector of float) +0:40 'f4' ( in 4-component vector of float) +0:40 Constant: +0:40 1 (const uint) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 'result' ( temp 4-component vector of float) +0:42 subgroupAdd ( global 4-component vector of float) +0:42 'f4' ( in 4-component vector of float) +0:43 subgroupMul ( global 4-component vector of float) +0:43 'f4' ( in 4-component vector of float) +0:44 subgroupMin ( global 4-component vector of float) +0:44 'f4' ( in 4-component vector of float) +0:45 subgroupMax ( global 4-component vector of float) +0:45 'f4' ( in 4-component vector of float) +0:46 subgroupAnd ( global 4-component vector of uint) +0:46 'ballot' ( temp 4-component vector of uint) +0:47 subgroupOr ( global 4-component vector of uint) +0:47 'ballot' ( temp 4-component vector of uint) +0:48 subgroupXor ( global 4-component vector of uint) +0:48 'ballot' ( temp 4-component vector of uint) +0:49 subgroupInclusiveAdd ( global 4-component vector of float) +0:49 'f4' ( in 4-component vector of float) +0:50 subgroupInclusiveMul ( global 4-component vector of float) +0:50 'f4' ( in 4-component vector of float) +0:51 subgroupInclusiveMin ( global 4-component vector of float) +0:51 'f4' ( in 4-component vector of float) +0:52 subgroupInclusiveMax ( global 4-component vector of float) +0:52 'f4' ( in 4-component vector of float) +0:53 subgroupInclusiveAnd ( global 4-component vector of uint) +0:53 'ballot' ( temp 4-component vector of uint) +0:54 subgroupInclusiveOr ( global 4-component vector of uint) +0:54 'ballot' ( temp 4-component vector of uint) +0:55 subgroupInclusiveXor ( global 4-component vector of uint) +0:55 'ballot' ( temp 4-component vector of uint) +0:56 subgroupExclusiveAdd ( global 4-component vector of float) +0:56 'f4' ( in 4-component vector of float) +0:57 subgroupExclusiveMul ( global 4-component vector of float) +0:57 'f4' ( in 4-component vector of float) +0:58 subgroupExclusiveMin ( global 4-component vector of float) +0:58 'f4' ( in 4-component vector of float) +0:59 subgroupExclusiveMax ( global 4-component vector of float) +0:59 'f4' ( in 4-component vector of float) +0:60 subgroupExclusiveAnd ( global 4-component vector of uint) +0:60 'ballot' ( temp 4-component vector of uint) +0:61 subgroupExclusiveOr ( global 4-component vector of uint) +0:61 'ballot' ( temp 4-component vector of uint) +0:62 subgroupExclusiveXor ( global 4-component vector of uint) +0:62 'ballot' ( temp 4-component vector of uint) +0:64 subgroupClusteredAdd ( global 4-component vector of float) +0:64 'f4' ( in 4-component vector of float) +0:64 Constant: +0:64 2 (const uint) +0:65 subgroupClusteredMul ( global 4-component vector of float) +0:65 'f4' ( in 4-component vector of float) +0:65 Constant: +0:65 2 (const uint) +0:66 subgroupClusteredMin ( global 4-component vector of float) +0:66 'f4' ( in 4-component vector of float) +0:66 Constant: +0:66 2 (const uint) +0:67 subgroupClusteredMax ( global 4-component vector of float) +0:67 'f4' ( in 4-component vector of float) +0:67 Constant: +0:67 2 (const uint) +0:68 subgroupClusteredAnd ( global 4-component vector of uint) +0:68 'ballot' ( temp 4-component vector of uint) +0:68 Constant: +0:68 2 (const uint) +0:69 subgroupClusteredOr ( global 4-component vector of uint) +0:69 'ballot' ( temp 4-component vector of uint) +0:69 Constant: +0:69 2 (const uint) +0:70 subgroupClusteredXor ( global 4-component vector of uint) +0:70 'ballot' ( temp 4-component vector of uint) +0:70 Constant: +0:70 2 (const uint) +0:72 subgroupQuadBroadcast ( global 4-component vector of float) +0:72 'f4' ( in 4-component vector of float) +0:72 Constant: +0:72 0 (const uint) +0:73 subgroupQuadSwapHorizontal ( global 4-component vector of float) +0:73 'f4' ( in 4-component vector of float) +0:74 subgroupQuadSwapVertical ( global 4-component vector of float) +0:74 'f4' ( in 4-component vector of float) +0:75 subgroupQuadSwapDiagonal ( global 4-component vector of float) +0:75 'f4' ( in 4-component vector of float) +0:77 Branch: Return with expression +0:77 'result' ( temp 4-component vector of float) +0:102 Function Definition: main( ( global void) +0:102 Function Parameters: +0:104 Sequence +0:104 Sequence +0:104 move second child to first child ( temp uint) +0:104 'iid' ( temp uint) +0:104 direct index ( temp uint) +0:104 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID) +0:104 Constant: +0:104 0 (const int) +0:105 Sequence +0:105 move second child to first child ( temp uint) +0:105 'gid' ( temp uint) +0:105 direct index ( temp uint) +0:105 'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID) +0:105 Constant: +0:105 0 (const int) +0:108 Sequence +0:108 Sequence +0:108 move second child to first child ( temp uint) +0:108 'i' ( temp uint) +0:108 Constant: +0:108 0 (const uint) +0:108 Loop with condition tested first +0:108 Loop Condition +0:108 Compare Less Than ( temp bool) +0:108 'i' ( temp uint) +0:108 Constant: +0:108 10 (const uint) +0:108 Loop Body +0:109 Sequence +0:109 move second child to first child ( temp 4-component vector of float) +0:109 indirect index ( temp 4-component vector of float) +0:109 'mem' ( shared 10-element array of 4-component vector of float) +0:109 'i' ( temp uint) +0:109 Construct vec4 ( temp 4-component vector of float) +0:109 Convert uint to float ( temp float) +0:109 add ( temp uint) +0:109 'i' ( temp uint) +0:109 uni_value: direct index for structure (layout( column_major shared) uniform uint) +0:109 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value}) +0:109 Constant: +0:109 0 (const uint) +0:108 Loop Terminal Expression +0:108 Pre-Increment ( temp uint) +0:108 'i' ( temp uint) +0:111 imageStore ( global void) +0:111 'uni_image' (layout( binding=0) writeonly uniform image2D) +0:111 Construct ivec2 ( temp 2-component vector of int) +0:111 Convert uint to int ( temp int) +0:111 'iid' ( temp uint) +0:111 indirect index ( temp 4-component vector of float) +0:111 'mem' ( shared 10-element array of 4-component vector of float) +0:111 'gid' ( temp uint) +0:112 imageStore ( global void) +0:112 'uni_image' (layout( binding=0) writeonly uniform image2D) +0:112 Construct ivec2 ( temp 2-component vector of int) +0:112 Convert uint to int ( temp int) +0:112 'iid' ( temp uint) +0:112 indirect index ( temp 4-component vector of float) +0:112 'mem' ( shared 10-element array of 4-component vector of float) +0:112 add ( temp uint) +0:112 'gid' ( temp uint) +0:112 Constant: +0:112 1 (const uint) +0:114 MemoryBarrierShared ( global void) +0:114 Barrier ( global void) +0:118 move second child to first child ( temp 2-component vector of float) +0:118 dummy: direct index for structure ( global 2-component vector of float) +0:118 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) +0:118 Constant: +0:118 0 (const int) +0:118 Constant: +0:118 30.000000 +0:118 31.000000 +0:119 move second child to first child ( temp 2-component vector of float) +0:119 direct index ( temp 2-component vector of float) +0:119 submesh: direct index for structure ( global 3-element array of 2-component vector of float) +0:119 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) +0:119 Constant: +0:119 1 (const int) +0:119 Constant: +0:119 0 (const int) +0:119 Constant: +0:119 32.000000 +0:119 33.000000 +0:120 move second child to first child ( temp 2-component vector of float) +0:120 direct index ( temp 2-component vector of float) +0:120 submesh: direct index for structure ( global 3-element array of 2-component vector of float) +0:120 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) +0:120 Constant: +0:120 1 (const int) +0:120 Constant: +0:120 1 (const int) +0:120 Constant: +0:120 34.000000 +0:120 35.000000 +0:121 move second child to first child ( temp 2-component vector of float) +0:121 direct index ( temp 2-component vector of float) +0:121 submesh: direct index for structure ( global 3-element array of 2-component vector of float) +0:121 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) +0:121 Constant: +0:121 1 (const int) +0:121 Constant: +0:121 2 (const int) +0:121 indirect index ( temp 2-component vector of float) +0:121 submesh: direct index for structure ( global 3-element array of 2-component vector of float) +0:121 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) +0:121 Constant: +0:121 1 (const int) +0:121 mod ( temp uint) +0:121 'gid' ( temp uint) +0:121 Constant: +0:121 2 (const uint) +0:123 MemoryBarrierShared ( global void) +0:123 Barrier ( global void) +0:126 EmitMeshTasksEXT ( global void) +0:126 Constant: +0:126 3 (const uint) +0:126 Constant: +0:126 1 (const uint) +0:126 Constant: +0:126 1 (const uint) +0:130 Function Definition: basic_works( ( global void) +0:130 Function Parameters: +0:132 Sequence +0:132 'gl_SubgroupSize' ( in uint SubgroupSize) +0:133 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:134 subgroupBarrier ( global void) +0:135 subgroupMemoryBarrier ( global void) +0:136 subgroupMemoryBarrierBuffer ( global void) +0:137 subgroupMemoryBarrierImage ( global void) +0:138 subgroupElect ( global bool) +0:139 'gl_NumSubgroups' ( in uint NumSubgroups) +0:140 'gl_SubgroupID' ( in uint SubgroupID) +0:141 subgroupMemoryBarrierShared ( global void) +0:145 Function Definition: ballot_works(vf4; ( global void) +0:145 Function Parameters: +0:145 'f4' ( in 4-component vector of float) +0:146 Sequence +0:146 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) +0:147 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) +0:148 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) +0:149 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) +0:150 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:151 subgroupBroadcast ( global 4-component vector of float) +0:151 'f4' ( in 4-component vector of float) +0:151 Constant: +0:151 0 (const uint) +0:152 subgroupBroadcastFirst ( global 4-component vector of float) +0:152 'f4' ( in 4-component vector of float) +0:153 Sequence +0:153 move second child to first child ( temp 4-component vector of uint) +0:153 'ballot' ( temp 4-component vector of uint) +0:153 subgroupBallot ( global 4-component vector of uint) +0:153 Constant: +0:153 false (const bool) +0:154 subgroupInverseBallot ( global bool) +0:154 Constant: +0:154 1 (const uint) +0:154 1 (const uint) +0:154 1 (const uint) +0:154 1 (const uint) +0:155 subgroupBallotBitExtract ( global bool) +0:155 'ballot' ( temp 4-component vector of uint) +0:155 Constant: +0:155 0 (const uint) +0:156 subgroupBallotBitCount ( global uint) +0:156 'ballot' ( temp 4-component vector of uint) +0:157 subgroupBallotInclusiveBitCount ( global uint) +0:157 'ballot' ( temp 4-component vector of uint) +0:158 subgroupBallotExclusiveBitCount ( global uint) +0:158 'ballot' ( temp 4-component vector of uint) +0:159 subgroupBallotFindLSB ( global uint) +0:159 'ballot' ( temp 4-component vector of uint) +0:160 subgroupBallotFindMSB ( global uint) +0:160 'ballot' ( temp 4-component vector of uint) +0:164 Function Definition: vote_works(vf4; ( global void) +0:164 Function Parameters: +0:164 'f4' ( in 4-component vector of float) +0:166 Sequence +0:166 subgroupAll ( global bool) +0:166 Constant: +0:166 true (const bool) +0:167 subgroupAny ( global bool) +0:167 Constant: +0:167 false (const bool) +0:168 subgroupAllEqual ( global bool) +0:168 'f4' ( in 4-component vector of float) +0:173 Function Definition: shuffle_works(vf4; ( global void) +0:173 Function Parameters: +0:173 'f4' ( in 4-component vector of float) +0:175 Sequence +0:175 subgroupShuffle ( global 4-component vector of float) +0:175 'f4' ( in 4-component vector of float) +0:175 Constant: +0:175 0 (const uint) +0:176 subgroupShuffleXor ( global 4-component vector of float) +0:176 'f4' ( in 4-component vector of float) +0:176 Constant: +0:176 1 (const uint) +0:177 subgroupShuffleUp ( global 4-component vector of float) +0:177 'f4' ( in 4-component vector of float) +0:177 Constant: +0:177 1 (const uint) +0:178 subgroupShuffleDown ( global 4-component vector of float) +0:178 'f4' ( in 4-component vector of float) +0:178 Constant: +0:178 1 (const uint) +0:182 Function Definition: arith_works(vf4; ( global void) +0:182 Function Parameters: +0:182 'f4' ( in 4-component vector of float) +0:? Sequence +0:185 subgroupAdd ( global 4-component vector of float) +0:185 'f4' ( in 4-component vector of float) +0:186 subgroupMul ( global 4-component vector of float) +0:186 'f4' ( in 4-component vector of float) +0:187 subgroupMin ( global 4-component vector of float) +0:187 'f4' ( in 4-component vector of float) +0:188 subgroupMax ( global 4-component vector of float) +0:188 'f4' ( in 4-component vector of float) +0:189 subgroupAnd ( global 4-component vector of uint) +0:189 'ballot' ( temp 4-component vector of uint) +0:190 subgroupOr ( global 4-component vector of uint) +0:190 'ballot' ( temp 4-component vector of uint) +0:191 subgroupXor ( global 4-component vector of uint) +0:191 'ballot' ( temp 4-component vector of uint) +0:192 subgroupInclusiveAdd ( global 4-component vector of float) +0:192 'f4' ( in 4-component vector of float) +0:193 subgroupInclusiveMul ( global 4-component vector of float) +0:193 'f4' ( in 4-component vector of float) +0:194 subgroupInclusiveMin ( global 4-component vector of float) +0:194 'f4' ( in 4-component vector of float) +0:195 subgroupInclusiveMax ( global 4-component vector of float) +0:195 'f4' ( in 4-component vector of float) +0:196 subgroupInclusiveAnd ( global 4-component vector of uint) +0:196 'ballot' ( temp 4-component vector of uint) +0:197 subgroupInclusiveOr ( global 4-component vector of uint) +0:197 'ballot' ( temp 4-component vector of uint) +0:198 subgroupInclusiveXor ( global 4-component vector of uint) +0:198 'ballot' ( temp 4-component vector of uint) +0:199 subgroupExclusiveAdd ( global 4-component vector of float) +0:199 'f4' ( in 4-component vector of float) +0:200 subgroupExclusiveMul ( global 4-component vector of float) +0:200 'f4' ( in 4-component vector of float) +0:201 subgroupExclusiveMin ( global 4-component vector of float) +0:201 'f4' ( in 4-component vector of float) +0:202 subgroupExclusiveMax ( global 4-component vector of float) +0:202 'f4' ( in 4-component vector of float) +0:203 subgroupExclusiveAnd ( global 4-component vector of uint) +0:203 'ballot' ( temp 4-component vector of uint) +0:204 subgroupExclusiveOr ( global 4-component vector of uint) +0:204 'ballot' ( temp 4-component vector of uint) +0:205 subgroupExclusiveXor ( global 4-component vector of uint) +0:205 'ballot' ( temp 4-component vector of uint) +0:209 Function Definition: clustered_works(vf4; ( global void) +0:209 Function Parameters: +0:209 'f4' ( in 4-component vector of float) +0:211 Sequence +0:211 Sequence +0:211 move second child to first child ( temp 4-component vector of uint) +0:211 'ballot' ( temp 4-component vector of uint) +0:211 Constant: +0:211 85 (const uint) +0:211 0 (const uint) +0:211 0 (const uint) +0:211 0 (const uint) +0:212 subgroupClusteredAdd ( global 4-component vector of float) +0:212 'f4' ( in 4-component vector of float) +0:212 Constant: +0:212 2 (const uint) +0:213 subgroupClusteredMul ( global 4-component vector of float) +0:213 'f4' ( in 4-component vector of float) +0:213 Constant: +0:213 2 (const uint) +0:214 subgroupClusteredMin ( global 4-component vector of float) +0:214 'f4' ( in 4-component vector of float) +0:214 Constant: +0:214 2 (const uint) +0:215 subgroupClusteredMax ( global 4-component vector of float) +0:215 'f4' ( in 4-component vector of float) +0:215 Constant: +0:215 2 (const uint) +0:216 subgroupClusteredAnd ( global 4-component vector of uint) +0:216 'ballot' ( temp 4-component vector of uint) +0:216 Constant: +0:216 2 (const uint) +0:217 subgroupClusteredOr ( global 4-component vector of uint) +0:217 'ballot' ( temp 4-component vector of uint) +0:217 Constant: +0:217 2 (const uint) +0:218 subgroupClusteredXor ( global 4-component vector of uint) +0:218 'ballot' ( temp 4-component vector of uint) +0:218 Constant: +0:218 2 (const uint) +0:222 Function Definition: quad_works(vf4; ( global void) +0:222 Function Parameters: +0:222 'f4' ( in 4-component vector of float) +0:224 Sequence +0:224 subgroupQuadBroadcast ( global 4-component vector of float) +0:224 'f4' ( in 4-component vector of float) +0:224 Constant: +0:224 0 (const uint) +0:225 subgroupQuadSwapHorizontal ( global 4-component vector of float) +0:225 'f4' ( in 4-component vector of float) +0:226 subgroupQuadSwapVertical ( global 4-component vector of float) +0:226 'f4' ( in 4-component vector of float) +0:227 subgroupQuadSwapDiagonal ( global 4-component vector of float) +0:227 'f4' ( in 4-component vector of float) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 32 (const uint) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 'uni_image' (layout( binding=0) writeonly uniform image2D) +0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value}) +0:? 'mem' ( shared 10-element array of 4-component vector of float) +0:? 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) + + +Linked task stage: + + +Shader version: 460 +Requested GL_EXT_mesh_shader +Requested GL_KHR_shader_subgroup_arithmetic +Requested GL_KHR_shader_subgroup_ballot +Requested GL_KHR_shader_subgroup_basic +Requested GL_KHR_shader_subgroup_clustered +Requested GL_KHR_shader_subgroup_quad +Requested GL_KHR_shader_subgroup_shuffle +Requested GL_KHR_shader_subgroup_shuffle_relative +Requested GL_KHR_shader_subgroup_vote +local_size = (32, 1, 1) +ERROR: node is still EOpNull! +0:102 Function Definition: main( ( global void) +0:102 Function Parameters: +0:104 Sequence +0:104 Sequence +0:104 move second child to first child ( temp uint) +0:104 'iid' ( temp uint) +0:104 direct index ( temp uint) +0:104 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID) +0:104 Constant: +0:104 0 (const int) +0:105 Sequence +0:105 move second child to first child ( temp uint) +0:105 'gid' ( temp uint) +0:105 direct index ( temp uint) +0:105 'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID) +0:105 Constant: +0:105 0 (const int) +0:108 Sequence +0:108 Sequence +0:108 move second child to first child ( temp uint) +0:108 'i' ( temp uint) +0:108 Constant: +0:108 0 (const uint) +0:108 Loop with condition tested first +0:108 Loop Condition +0:108 Compare Less Than ( temp bool) +0:108 'i' ( temp uint) +0:108 Constant: +0:108 10 (const uint) +0:108 Loop Body +0:109 Sequence +0:109 move second child to first child ( temp 4-component vector of float) +0:109 indirect index ( temp 4-component vector of float) +0:109 'mem' ( shared 10-element array of 4-component vector of float) +0:109 'i' ( temp uint) +0:109 Construct vec4 ( temp 4-component vector of float) +0:109 Convert uint to float ( temp float) +0:109 add ( temp uint) +0:109 'i' ( temp uint) +0:109 uni_value: direct index for structure (layout( column_major shared) uniform uint) +0:109 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value}) +0:109 Constant: +0:109 0 (const uint) +0:108 Loop Terminal Expression +0:108 Pre-Increment ( temp uint) +0:108 'i' ( temp uint) +0:111 imageStore ( global void) +0:111 'uni_image' (layout( binding=0) writeonly uniform image2D) +0:111 Construct ivec2 ( temp 2-component vector of int) +0:111 Convert uint to int ( temp int) +0:111 'iid' ( temp uint) +0:111 indirect index ( temp 4-component vector of float) +0:111 'mem' ( shared 10-element array of 4-component vector of float) +0:111 'gid' ( temp uint) +0:112 imageStore ( global void) +0:112 'uni_image' (layout( binding=0) writeonly uniform image2D) +0:112 Construct ivec2 ( temp 2-component vector of int) +0:112 Convert uint to int ( temp int) +0:112 'iid' ( temp uint) +0:112 indirect index ( temp 4-component vector of float) +0:112 'mem' ( shared 10-element array of 4-component vector of float) +0:112 add ( temp uint) +0:112 'gid' ( temp uint) +0:112 Constant: +0:112 1 (const uint) +0:114 MemoryBarrierShared ( global void) +0:114 Barrier ( global void) +0:118 move second child to first child ( temp 2-component vector of float) +0:118 dummy: direct index for structure ( global 2-component vector of float) +0:118 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) +0:118 Constant: +0:118 0 (const int) +0:118 Constant: +0:118 30.000000 +0:118 31.000000 +0:119 move second child to first child ( temp 2-component vector of float) +0:119 direct index ( temp 2-component vector of float) +0:119 submesh: direct index for structure ( global 3-element array of 2-component vector of float) +0:119 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) +0:119 Constant: +0:119 1 (const int) +0:119 Constant: +0:119 0 (const int) +0:119 Constant: +0:119 32.000000 +0:119 33.000000 +0:120 move second child to first child ( temp 2-component vector of float) +0:120 direct index ( temp 2-component vector of float) +0:120 submesh: direct index for structure ( global 3-element array of 2-component vector of float) +0:120 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) +0:120 Constant: +0:120 1 (const int) +0:120 Constant: +0:120 1 (const int) +0:120 Constant: +0:120 34.000000 +0:120 35.000000 +0:121 move second child to first child ( temp 2-component vector of float) +0:121 direct index ( temp 2-component vector of float) +0:121 submesh: direct index for structure ( global 3-element array of 2-component vector of float) +0:121 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) +0:121 Constant: +0:121 1 (const int) +0:121 Constant: +0:121 2 (const int) +0:121 indirect index ( temp 2-component vector of float) +0:121 submesh: direct index for structure ( global 3-element array of 2-component vector of float) +0:121 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) +0:121 Constant: +0:121 1 (const int) +0:121 mod ( temp uint) +0:121 'gid' ( temp uint) +0:121 Constant: +0:121 2 (const uint) +0:123 MemoryBarrierShared ( global void) +0:123 Barrier ( global void) +0:126 EmitMeshTasksEXT ( global void) +0:126 Constant: +0:126 3 (const uint) +0:126 Constant: +0:126 1 (const uint) +0:126 Constant: +0:126 1 (const uint) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 32 (const uint) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 'uni_image' (layout( binding=0) writeonly uniform image2D) +0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value}) +0:? 'mem' ( shared 10-element array of 4-component vector of float) +0:? 'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy, global 3-element array of 2-component vector of float submesh}) + diff --git a/Test/baseResults/glsl.autosampledtextures.frag.out b/Test/baseResults/glsl.autosampledtextures.frag.out index 2183898a8f..522cc4adbe 100644 --- a/Test/baseResults/glsl.autosampledtextures.frag.out +++ b/Test/baseResults/glsl.autosampledtextures.frag.out @@ -1,6 +1,6 @@ glsl.autosampledtextures.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 23 Capability Shader @@ -14,8 +14,8 @@ glsl.autosampledtextures.frag Name 13 "u_Tex" Name 17 "in_UV" Name 21 "out_Color" - Decorate 13(u_Tex) DescriptorSet 0 Decorate 13(u_Tex) Binding 0 + Decorate 13(u_Tex) DescriptorSet 0 Decorate 17(in_UV) Location 0 Decorate 21(out_Color) Location 0 2: TypeVoid diff --git a/Test/baseResults/glsl.entryPointRename.vert.bad.out b/Test/baseResults/glsl.entryPointRename.vert.bad.out index ce34fbf24e..d46ef59a3c 100644 --- a/Test/baseResults/glsl.entryPointRename.vert.bad.out +++ b/Test/baseResults/glsl.entryPointRename.vert.bad.out @@ -2,7 +2,7 @@ glsl.entryPointRename.vert ERROR: Source entry point must be "main" // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader @@ -17,11 +17,11 @@ ERROR: Source entry point must be "main" MemberName 11(gl_PerVertex) 2 "gl_ClipDistance" MemberName 11(gl_PerVertex) 3 "gl_CullDistance" Name 13 "" + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 11(gl_PerVertex) Block 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/glsl.entryPointRename.vert.out b/Test/baseResults/glsl.entryPointRename.vert.out index 71319c9087..87ddf2a0d1 100644 --- a/Test/baseResults/glsl.entryPointRename.vert.out +++ b/Test/baseResults/glsl.entryPointRename.vert.out @@ -1,6 +1,6 @@ glsl.entryPointRename.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader @@ -15,11 +15,11 @@ glsl.entryPointRename.vert MemberName 11(gl_PerVertex) 2 "gl_ClipDistance" MemberName 11(gl_PerVertex) 3 "gl_CullDistance" Name 13 "" + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 11(gl_PerVertex) Block 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/glsl.es320.extTextureShadowLod.frag.out b/Test/baseResults/glsl.es320.extTextureShadowLod.frag.out new file mode 100644 index 0000000000..ae385ae196 --- /dev/null +++ b/Test/baseResults/glsl.es320.extTextureShadowLod.frag.out @@ -0,0 +1,149 @@ +glsl.es320.extTextureShadowLod.frag +Shader version: 320 +Requested GL_EXT_texture_shadow_lod +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 lowp float) +0:14 'c' ( out lowp float) +0:14 texture ( global lowp float) +0:14 's2da' ( uniform lowp sampler2DArrayShadow) +0:14 'tc' ( smooth in lowp 4-component vector of float) +0:14 Constant: +0:14 0.000000 +0:15 move second child to first child ( temp lowp float) +0:15 'c' ( out lowp float) +0:15 texture ( global lowp float) +0:15 'sca' ( uniform lowp samplerCubeArrayShadow) +0:15 'tc' ( smooth in lowp 4-component vector of float) +0:15 Constant: +0:15 0.000000 +0:15 Constant: +0:15 0.000000 +0:16 move second child to first child ( temp lowp float) +0:16 'c' ( out lowp float) +0:16 textureOffset ( global lowp float) +0:16 's2da' ( uniform lowp sampler2DArrayShadow) +0:16 'tc' ( smooth in lowp 4-component vector of float) +0:16 Constant: +0:16 0 (const int) +0:16 0 (const int) +0:16 Constant: +0:16 0.000000 +0:17 move second child to first child ( temp lowp float) +0:17 'c' ( out lowp float) +0:17 textureLod ( global lowp float) +0:17 's2da' ( uniform lowp sampler2DArrayShadow) +0:17 'tc' ( smooth in lowp 4-component vector of float) +0:17 Constant: +0:17 0.000000 +0:18 move second child to first child ( temp lowp float) +0:18 'c' ( out lowp float) +0:18 textureLod ( global lowp float) +0:18 'sc' ( uniform lowp samplerCubeShadow) +0:18 'tc' ( smooth in lowp 4-component vector of float) +0:18 Constant: +0:18 0.000000 +0:19 move second child to first child ( temp lowp float) +0:19 'c' ( out lowp float) +0:19 textureLod ( global lowp float) +0:19 'sca' ( uniform lowp samplerCubeArrayShadow) +0:19 'tc' ( smooth in lowp 4-component vector of float) +0:19 Constant: +0:19 0.000000 +0:19 Constant: +0:19 0.000000 +0:20 move second child to first child ( temp lowp float) +0:20 'c' ( out lowp float) +0:20 textureLodOffset ( global lowp float) +0:20 's2da' ( uniform lowp sampler2DArrayShadow) +0:20 'tc' ( smooth in lowp 4-component vector of float) +0:20 Constant: +0:20 0.000000 +0:20 Constant: +0:20 0 (const int) +0:20 0 (const int) +0:? Linker Objects +0:? 's2da' ( uniform lowp sampler2DArrayShadow) +0:? 'sca' ( uniform lowp samplerCubeArrayShadow) +0:? 'sc' ( uniform lowp samplerCubeShadow) +0:? 'tc' ( smooth in lowp 4-component vector of float) +0:? 'c' ( out lowp float) + + +Linked fragment stage: + + +Shader version: 320 +Requested GL_EXT_texture_shadow_lod +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 lowp float) +0:14 'c' ( out lowp float) +0:14 texture ( global lowp float) +0:14 's2da' ( uniform lowp sampler2DArrayShadow) +0:14 'tc' ( smooth in lowp 4-component vector of float) +0:14 Constant: +0:14 0.000000 +0:15 move second child to first child ( temp lowp float) +0:15 'c' ( out lowp float) +0:15 texture ( global lowp float) +0:15 'sca' ( uniform lowp samplerCubeArrayShadow) +0:15 'tc' ( smooth in lowp 4-component vector of float) +0:15 Constant: +0:15 0.000000 +0:15 Constant: +0:15 0.000000 +0:16 move second child to first child ( temp lowp float) +0:16 'c' ( out lowp float) +0:16 textureOffset ( global lowp float) +0:16 's2da' ( uniform lowp sampler2DArrayShadow) +0:16 'tc' ( smooth in lowp 4-component vector of float) +0:16 Constant: +0:16 0 (const int) +0:16 0 (const int) +0:16 Constant: +0:16 0.000000 +0:17 move second child to first child ( temp lowp float) +0:17 'c' ( out lowp float) +0:17 textureLod ( global lowp float) +0:17 's2da' ( uniform lowp sampler2DArrayShadow) +0:17 'tc' ( smooth in lowp 4-component vector of float) +0:17 Constant: +0:17 0.000000 +0:18 move second child to first child ( temp lowp float) +0:18 'c' ( out lowp float) +0:18 textureLod ( global lowp float) +0:18 'sc' ( uniform lowp samplerCubeShadow) +0:18 'tc' ( smooth in lowp 4-component vector of float) +0:18 Constant: +0:18 0.000000 +0:19 move second child to first child ( temp lowp float) +0:19 'c' ( out lowp float) +0:19 textureLod ( global lowp float) +0:19 'sca' ( uniform lowp samplerCubeArrayShadow) +0:19 'tc' ( smooth in lowp 4-component vector of float) +0:19 Constant: +0:19 0.000000 +0:19 Constant: +0:19 0.000000 +0:20 move second child to first child ( temp lowp float) +0:20 'c' ( out lowp float) +0:20 textureLodOffset ( global lowp float) +0:20 's2da' ( uniform lowp sampler2DArrayShadow) +0:20 'tc' ( smooth in lowp 4-component vector of float) +0:20 Constant: +0:20 0.000000 +0:20 Constant: +0:20 0 (const int) +0:20 0 (const int) +0:? Linker Objects +0:? 's2da' ( uniform lowp sampler2DArrayShadow) +0:? 'sca' ( uniform lowp samplerCubeArrayShadow) +0:? 'sc' ( uniform lowp samplerCubeShadow) +0:? 'tc' ( smooth in lowp 4-component vector of float) +0:? 'c' ( out lowp float) + diff --git a/Test/baseResults/glsl.es320.subgroupRotate.comp.out b/Test/baseResults/glsl.es320.subgroupRotate.comp.out new file mode 100644 index 0000000000..8aaa371751 --- /dev/null +++ b/Test/baseResults/glsl.es320.subgroupRotate.comp.out @@ -0,0 +1,1833 @@ +glsl.es320.subgroupRotate.comp +Shader version: 320 +Requested GL_KHR_shader_subgroup_rotate +local_size = (8, 8, 1) +0:? Sequence +0:19 Function Definition: main( ( global void) +0:19 Function Parameters: +0:21 Sequence +0:21 Sequence +0:21 move second child to first child ( temp highp uint) +0:21 'delta' ( temp highp uint) +0:21 delta: direct index for structure (layout( column_major shared) readonly buffer highp uint) +0:21 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp uint delta}) +0:21 Constant: +0:21 0 (const int) +0:23 move second child to first child ( temp highp float) +0:23 direct index ( temp highp float) +0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 subgroupRotate ( global highp float) +0:23 direct index ( temp highp float) +0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 'delta' ( temp highp uint) +0:24 move second child to first child ( temp highp 2-component vector of float) +0:24 vector swizzle ( temp highp 2-component vector of float) +0:24 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Sequence +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 subgroupRotate ( global highp 2-component vector of float) +0:24 vector swizzle ( temp highp 2-component vector of float) +0:24 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Sequence +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 'delta' ( temp highp uint) +0:25 move second child to first child ( temp highp 3-component vector of float) +0:25 vector swizzle ( temp highp 3-component vector of float) +0:25 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0 (const int) +0:25 Sequence +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 subgroupRotate ( global highp 3-component vector of float) +0:25 vector swizzle ( temp highp 3-component vector of float) +0:25 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 0 (const int) +0:25 Sequence +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 'delta' ( temp highp uint) +0:26 move second child to first child ( temp highp 4-component vector of float) +0:26 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 0 (const int) +0:26 subgroupRotate ( global highp 4-component vector of float) +0:26 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:26 Constant: +0:26 3 (const int) +0:26 Constant: +0:26 0 (const int) +0:26 'delta' ( temp highp uint) +0:28 move second child to first child ( temp highp int) +0:28 direct index ( temp highp int) +0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:28 Constant: +0:28 0 (const int) +0:28 Constant: +0:28 1 (const int) +0:28 Constant: +0:28 0 (const int) +0:28 subgroupRotate ( global highp int) +0:28 direct index ( temp highp int) +0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:28 Constant: +0:28 0 (const int) +0:28 Constant: +0:28 1 (const int) +0:28 Constant: +0:28 0 (const int) +0:28 'delta' ( temp highp uint) +0:29 move second child to first child ( temp highp 2-component vector of int) +0:29 vector swizzle ( temp highp 2-component vector of int) +0:29 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 Sequence +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 subgroupRotate ( global highp 2-component vector of int) +0:29 vector swizzle ( temp highp 2-component vector of int) +0:29 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:29 Constant: +0:29 1 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 Sequence +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 'delta' ( temp highp uint) +0:30 move second child to first child ( temp highp 3-component vector of int) +0:30 vector swizzle ( temp highp 3-component vector of int) +0:30 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Constant: +0:30 2 (const int) +0:30 subgroupRotate ( global highp 3-component vector of int) +0:30 vector swizzle ( temp highp 3-component vector of int) +0:30 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:30 Constant: +0:30 2 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Constant: +0:30 2 (const int) +0:30 'delta' ( temp highp uint) +0:31 move second child to first child ( temp highp 4-component vector of int) +0:31 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:31 Constant: +0:31 0 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 subgroupRotate ( global highp 4-component vector of int) +0:31 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:31 Constant: +0:31 3 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 'delta' ( temp highp uint) +0:33 move second child to first child ( temp highp uint) +0:33 direct index ( temp highp uint) +0:33 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 0 (const int) +0:33 subgroupRotate ( global highp uint) +0:33 direct index ( temp highp uint) +0:33 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 0 (const int) +0:33 'delta' ( temp highp uint) +0:34 move second child to first child ( temp highp 2-component vector of uint) +0:34 vector swizzle ( temp highp 2-component vector of uint) +0:34 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Sequence +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1 (const int) +0:34 subgroupRotate ( global highp 2-component vector of uint) +0:34 vector swizzle ( temp highp 2-component vector of uint) +0:34 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Sequence +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1 (const int) +0:34 'delta' ( temp highp uint) +0:35 move second child to first child ( temp highp 3-component vector of uint) +0:35 vector swizzle ( temp highp 3-component vector of uint) +0:35 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 Sequence +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 subgroupRotate ( global highp 3-component vector of uint) +0:35 vector swizzle ( temp highp 3-component vector of uint) +0:35 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:35 Constant: +0:35 2 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 Sequence +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 'delta' ( temp highp uint) +0:36 move second child to first child ( temp highp 4-component vector of uint) +0:36 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:36 Constant: +0:36 1 (const int) +0:36 Constant: +0:36 2 (const int) +0:36 subgroupRotate ( global highp 4-component vector of uint) +0:36 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:36 Constant: +0:36 3 (const int) +0:36 Constant: +0:36 2 (const int) +0:36 'delta' ( temp highp uint) +0:38 move second child to first child ( temp highp int) +0:38 direct index ( temp highp int) +0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 Convert bool to int ( temp highp int) +0:38 subgroupRotate ( global bool, operation at highp) +0:38 Compare Less Than ( temp bool) +0:38 direct index ( temp highp int) +0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 'delta' ( temp highp uint) +0:39 move second child to first child ( temp highp 2-component vector of int) +0:39 vector swizzle ( temp highp 2-component vector of int) +0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Convert bool to int ( temp highp 2-component vector of int) +0:39 subgroupRotate ( global 2-component vector of bool, operation at highp) +0:39 Compare Less Than ( global 2-component vector of bool, operation at highp) +0:39 vector swizzle ( temp highp 2-component vector of int) +0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 0 (const int) +0:39 'delta' ( temp highp uint) +0:40 move second child to first child ( temp highp 3-component vector of int) +0:40 vector swizzle ( temp highp 3-component vector of int) +0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 Sequence +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 2 (const int) +0:40 Convert bool to int ( temp highp 3-component vector of int) +0:40 subgroupRotate ( global 3-component vector of bool, operation at highp) +0:40 Compare Less Than ( global 3-component vector of bool, operation at highp) +0:40 vector swizzle ( temp highp 3-component vector of int) +0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 Sequence +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 2 (const int) +0:40 Constant: +0:40 0 (const int) +0:40 0 (const int) +0:40 0 (const int) +0:40 'delta' ( temp highp uint) +0:41 move second child to first child ( temp highp 4-component vector of int) +0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 Convert bool to int ( temp highp 4-component vector of int) +0:41 subgroupRotate ( global 4-component vector of bool, operation at highp) +0:41 Compare Less Than ( global 4-component vector of bool, operation at highp) +0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 0 (const int) +0:41 0 (const int) +0:41 0 (const int) +0:41 0 (const int) +0:41 'delta' ( temp highp uint) +0:43 move second child to first child ( temp highp float) +0:43 direct index ( temp highp float) +0:43 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:43 Constant: +0:43 2 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 subgroupClusteredRotate ( global highp float) +0:43 direct index ( temp highp float) +0:43 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 'delta' ( temp highp uint) +0:43 Constant: +0:43 1 (const uint) +0:44 move second child to first child ( temp highp 2-component vector of float) +0:44 vector swizzle ( temp highp 2-component vector of float) +0:44 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 Sequence +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 1 (const int) +0:44 subgroupClusteredRotate ( global highp 2-component vector of float) +0:44 vector swizzle ( temp highp 2-component vector of float) +0:44 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 Sequence +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 1 (const int) +0:44 'delta' ( temp highp uint) +0:44 Constant: +0:44 1 (const uint) +0:45 move second child to first child ( temp highp 3-component vector of float) +0:45 vector swizzle ( temp highp 3-component vector of float) +0:45 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:45 Constant: +0:45 2 (const int) +0:45 Constant: +0:45 0 (const int) +0:45 Sequence +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 2 (const int) +0:45 subgroupClusteredRotate ( global highp 3-component vector of float) +0:45 vector swizzle ( temp highp 3-component vector of float) +0:45 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:45 Constant: +0:45 2 (const int) +0:45 Constant: +0:45 0 (const int) +0:45 Sequence +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 2 (const int) +0:45 'delta' ( temp highp uint) +0:45 Constant: +0:45 1 (const uint) +0:46 move second child to first child ( temp highp 4-component vector of float) +0:46 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:46 Constant: +0:46 2 (const int) +0:46 Constant: +0:46 0 (const int) +0:46 subgroupClusteredRotate ( global highp 4-component vector of float) +0:46 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:46 Constant: +0:46 3 (const int) +0:46 Constant: +0:46 0 (const int) +0:46 'delta' ( temp highp uint) +0:46 Constant: +0:46 1 (const uint) +0:48 move second child to first child ( temp highp int) +0:48 direct index ( temp highp int) +0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:48 Constant: +0:48 2 (const int) +0:48 Constant: +0:48 1 (const int) +0:48 Constant: +0:48 0 (const int) +0:48 subgroupClusteredRotate ( global highp int) +0:48 direct index ( temp highp int) +0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:48 Constant: +0:48 0 (const int) +0:48 Constant: +0:48 1 (const int) +0:48 Constant: +0:48 0 (const int) +0:48 'delta' ( temp highp uint) +0:48 Constant: +0:48 1 (const uint) +0:49 move second child to first child ( temp highp 2-component vector of int) +0:49 vector swizzle ( temp highp 2-component vector of int) +0:49 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:49 Constant: +0:49 2 (const int) +0:49 Constant: +0:49 1 (const int) +0:49 Sequence +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 1 (const int) +0:49 subgroupClusteredRotate ( global highp 2-component vector of int) +0:49 vector swizzle ( temp highp 2-component vector of int) +0:49 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:49 Constant: +0:49 1 (const int) +0:49 Constant: +0:49 1 (const int) +0:49 Sequence +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 1 (const int) +0:49 'delta' ( temp highp uint) +0:49 Constant: +0:49 1 (const uint) +0:50 move second child to first child ( temp highp 3-component vector of int) +0:50 vector swizzle ( temp highp 3-component vector of int) +0:50 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:50 Constant: +0:50 2 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 Sequence +0:50 Constant: +0:50 0 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 Constant: +0:50 2 (const int) +0:50 subgroupClusteredRotate ( global highp 3-component vector of int) +0:50 vector swizzle ( temp highp 3-component vector of int) +0:50 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:50 Constant: +0:50 2 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 Sequence +0:50 Constant: +0:50 0 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 Constant: +0:50 2 (const int) +0:50 'delta' ( temp highp uint) +0:50 Constant: +0:50 1 (const uint) +0:51 move second child to first child ( temp highp 4-component vector of int) +0:51 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:51 Constant: +0:51 2 (const int) +0:51 Constant: +0:51 1 (const int) +0:51 subgroupClusteredRotate ( global highp 4-component vector of int) +0:51 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:51 Constant: +0:51 3 (const int) +0:51 Constant: +0:51 1 (const int) +0:51 'delta' ( temp highp uint) +0:51 Constant: +0:51 1 (const uint) +0:53 move second child to first child ( temp highp uint) +0:53 direct index ( temp highp uint) +0:53 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:53 Constant: +0:53 3 (const int) +0:53 Constant: +0:53 2 (const int) +0:53 Constant: +0:53 0 (const int) +0:53 subgroupClusteredRotate ( global highp uint) +0:53 direct index ( temp highp uint) +0:53 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:53 Constant: +0:53 0 (const int) +0:53 Constant: +0:53 2 (const int) +0:53 Constant: +0:53 0 (const int) +0:53 'delta' ( temp highp uint) +0:53 Constant: +0:53 1 (const uint) +0:54 move second child to first child ( temp highp 2-component vector of uint) +0:54 vector swizzle ( temp highp 2-component vector of uint) +0:54 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:54 Constant: +0:54 3 (const int) +0:54 Constant: +0:54 2 (const int) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 subgroupClusteredRotate ( global highp 2-component vector of uint) +0:54 vector swizzle ( temp highp 2-component vector of uint) +0:54 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:54 Constant: +0:54 1 (const int) +0:54 Constant: +0:54 2 (const int) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 'delta' ( temp highp uint) +0:54 Constant: +0:54 1 (const uint) +0:55 move second child to first child ( temp highp 3-component vector of uint) +0:55 vector swizzle ( temp highp 3-component vector of uint) +0:55 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:55 Constant: +0:55 3 (const int) +0:55 Constant: +0:55 2 (const int) +0:55 Sequence +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 Constant: +0:55 2 (const int) +0:55 subgroupClusteredRotate ( global highp 3-component vector of uint) +0:55 vector swizzle ( temp highp 3-component vector of uint) +0:55 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:55 Constant: +0:55 2 (const int) +0:55 Constant: +0:55 2 (const int) +0:55 Sequence +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 Constant: +0:55 2 (const int) +0:55 'delta' ( temp highp uint) +0:55 Constant: +0:55 1 (const uint) +0:56 move second child to first child ( temp highp 4-component vector of uint) +0:56 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:56 Constant: +0:56 3 (const int) +0:56 Constant: +0:56 2 (const int) +0:56 subgroupClusteredRotate ( global highp 4-component vector of uint) +0:56 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:56 Constant: +0:56 3 (const int) +0:56 Constant: +0:56 2 (const int) +0:56 'delta' ( temp highp uint) +0:56 Constant: +0:56 1 (const uint) +0:58 move second child to first child ( temp highp int) +0:58 direct index ( temp highp int) +0:58 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:58 Constant: +0:58 3 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 0 (const int) +0:58 Convert bool to int ( temp highp int) +0:58 subgroupClusteredRotate ( global bool, operation at highp) +0:58 Compare Less Than ( temp bool) +0:58 direct index ( temp highp int) +0:58 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 0 (const int) +0:58 'delta' ( temp highp uint) +0:58 Constant: +0:58 1 (const uint) +0:59 move second child to first child ( temp highp 2-component vector of int) +0:59 vector swizzle ( temp highp 2-component vector of int) +0:59 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:59 Constant: +0:59 3 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Convert bool to int ( temp highp 2-component vector of int) +0:59 subgroupClusteredRotate ( global 2-component vector of bool, operation at highp) +0:59 Compare Less Than ( global 2-component vector of bool, operation at highp) +0:59 vector swizzle ( temp highp 2-component vector of int) +0:59 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:59 Constant: +0:59 1 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Constant: +0:59 0 (const int) +0:59 0 (const int) +0:59 'delta' ( temp highp uint) +0:59 Constant: +0:59 1 (const uint) +0:60 move second child to first child ( temp highp 3-component vector of int) +0:60 vector swizzle ( temp highp 3-component vector of int) +0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:60 Constant: +0:60 3 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 Sequence +0:60 Constant: +0:60 0 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 Constant: +0:60 2 (const int) +0:60 Convert bool to int ( temp highp 3-component vector of int) +0:60 subgroupClusteredRotate ( global 3-component vector of bool, operation at highp) +0:60 Compare Less Than ( global 3-component vector of bool, operation at highp) +0:60 vector swizzle ( temp highp 3-component vector of int) +0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:60 Constant: +0:60 1 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 Sequence +0:60 Constant: +0:60 0 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 Constant: +0:60 2 (const int) +0:60 Constant: +0:60 0 (const int) +0:60 0 (const int) +0:60 0 (const int) +0:60 'delta' ( temp highp uint) +0:60 Constant: +0:60 1 (const uint) +0:61 move second child to first child ( temp highp 4-component vector of int) +0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:61 Constant: +0:61 3 (const int) +0:61 Constant: +0:61 1 (const int) +0:61 Convert bool to int ( temp highp 4-component vector of int) +0:61 subgroupClusteredRotate ( global 4-component vector of bool, operation at highp) +0:61 Compare Less Than ( global 4-component vector of bool, operation at highp) +0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 0 (const int) +0:61 0 (const int) +0:61 0 (const int) +0:61 0 (const int) +0:61 'delta' ( temp highp uint) +0:61 Constant: +0:61 1 (const uint) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) +0:? 8 (const uint) +0:? 8 (const uint) +0:? 1 (const uint) +0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp uint delta}) +0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) + + +Linked compute stage: + + +Shader version: 320 +Requested GL_KHR_shader_subgroup_rotate +local_size = (8, 8, 1) +0:? Sequence +0:19 Function Definition: main( ( global void) +0:19 Function Parameters: +0:21 Sequence +0:21 Sequence +0:21 move second child to first child ( temp highp uint) +0:21 'delta' ( temp highp uint) +0:21 delta: direct index for structure (layout( column_major shared) readonly buffer highp uint) +0:21 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp uint delta}) +0:21 Constant: +0:21 0 (const int) +0:23 move second child to first child ( temp highp float) +0:23 direct index ( temp highp float) +0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 subgroupRotate ( global highp float) +0:23 direct index ( temp highp float) +0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:23 'delta' ( temp highp uint) +0:24 move second child to first child ( temp highp 2-component vector of float) +0:24 vector swizzle ( temp highp 2-component vector of float) +0:24 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Sequence +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 subgroupRotate ( global highp 2-component vector of float) +0:24 vector swizzle ( temp highp 2-component vector of float) +0:24 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Sequence +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 'delta' ( temp highp uint) +0:25 move second child to first child ( temp highp 3-component vector of float) +0:25 vector swizzle ( temp highp 3-component vector of float) +0:25 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0 (const int) +0:25 Sequence +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 subgroupRotate ( global highp 3-component vector of float) +0:25 vector swizzle ( temp highp 3-component vector of float) +0:25 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:25 Constant: +0:25 2 (const int) +0:25 Constant: +0:25 0 (const int) +0:25 Sequence +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 2 (const int) +0:25 'delta' ( temp highp uint) +0:26 move second child to first child ( temp highp 4-component vector of float) +0:26 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 0 (const int) +0:26 subgroupRotate ( global highp 4-component vector of float) +0:26 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:26 Constant: +0:26 3 (const int) +0:26 Constant: +0:26 0 (const int) +0:26 'delta' ( temp highp uint) +0:28 move second child to first child ( temp highp int) +0:28 direct index ( temp highp int) +0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:28 Constant: +0:28 0 (const int) +0:28 Constant: +0:28 1 (const int) +0:28 Constant: +0:28 0 (const int) +0:28 subgroupRotate ( global highp int) +0:28 direct index ( temp highp int) +0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:28 Constant: +0:28 0 (const int) +0:28 Constant: +0:28 1 (const int) +0:28 Constant: +0:28 0 (const int) +0:28 'delta' ( temp highp uint) +0:29 move second child to first child ( temp highp 2-component vector of int) +0:29 vector swizzle ( temp highp 2-component vector of int) +0:29 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 Sequence +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 subgroupRotate ( global highp 2-component vector of int) +0:29 vector swizzle ( temp highp 2-component vector of int) +0:29 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:29 Constant: +0:29 1 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 Sequence +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 'delta' ( temp highp uint) +0:30 move second child to first child ( temp highp 3-component vector of int) +0:30 vector swizzle ( temp highp 3-component vector of int) +0:30 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Constant: +0:30 2 (const int) +0:30 subgroupRotate ( global highp 3-component vector of int) +0:30 vector swizzle ( temp highp 3-component vector of int) +0:30 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:30 Constant: +0:30 2 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Sequence +0:30 Constant: +0:30 0 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 Constant: +0:30 2 (const int) +0:30 'delta' ( temp highp uint) +0:31 move second child to first child ( temp highp 4-component vector of int) +0:31 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:31 Constant: +0:31 0 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 subgroupRotate ( global highp 4-component vector of int) +0:31 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:31 Constant: +0:31 3 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 'delta' ( temp highp uint) +0:33 move second child to first child ( temp highp uint) +0:33 direct index ( temp highp uint) +0:33 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 0 (const int) +0:33 subgroupRotate ( global highp uint) +0:33 direct index ( temp highp uint) +0:33 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 2 (const int) +0:33 Constant: +0:33 0 (const int) +0:33 'delta' ( temp highp uint) +0:34 move second child to first child ( temp highp 2-component vector of uint) +0:34 vector swizzle ( temp highp 2-component vector of uint) +0:34 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Sequence +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1 (const int) +0:34 subgroupRotate ( global highp 2-component vector of uint) +0:34 vector swizzle ( temp highp 2-component vector of uint) +0:34 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 Sequence +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1 (const int) +0:34 'delta' ( temp highp uint) +0:35 move second child to first child ( temp highp 3-component vector of uint) +0:35 vector swizzle ( temp highp 3-component vector of uint) +0:35 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 Sequence +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 subgroupRotate ( global highp 3-component vector of uint) +0:35 vector swizzle ( temp highp 3-component vector of uint) +0:35 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:35 Constant: +0:35 2 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 Sequence +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 2 (const int) +0:35 'delta' ( temp highp uint) +0:36 move second child to first child ( temp highp 4-component vector of uint) +0:36 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:36 Constant: +0:36 1 (const int) +0:36 Constant: +0:36 2 (const int) +0:36 subgroupRotate ( global highp 4-component vector of uint) +0:36 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:36 Constant: +0:36 3 (const int) +0:36 Constant: +0:36 2 (const int) +0:36 'delta' ( temp highp uint) +0:38 move second child to first child ( temp highp int) +0:38 direct index ( temp highp int) +0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 Convert bool to int ( temp highp int) +0:38 subgroupRotate ( global bool, operation at highp) +0:38 Compare Less Than ( temp bool) +0:38 direct index ( temp highp int) +0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 'delta' ( temp highp uint) +0:39 move second child to first child ( temp highp 2-component vector of int) +0:39 vector swizzle ( temp highp 2-component vector of int) +0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Convert bool to int ( temp highp 2-component vector of int) +0:39 subgroupRotate ( global 2-component vector of bool, operation at highp) +0:39 Compare Less Than ( global 2-component vector of bool, operation at highp) +0:39 vector swizzle ( temp highp 2-component vector of int) +0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 0 (const int) +0:39 'delta' ( temp highp uint) +0:40 move second child to first child ( temp highp 3-component vector of int) +0:40 vector swizzle ( temp highp 3-component vector of int) +0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 Sequence +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 2 (const int) +0:40 Convert bool to int ( temp highp 3-component vector of int) +0:40 subgroupRotate ( global 3-component vector of bool, operation at highp) +0:40 Compare Less Than ( global 3-component vector of bool, operation at highp) +0:40 vector swizzle ( temp highp 3-component vector of int) +0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 Sequence +0:40 Constant: +0:40 0 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 2 (const int) +0:40 Constant: +0:40 0 (const int) +0:40 0 (const int) +0:40 0 (const int) +0:40 'delta' ( temp highp uint) +0:41 move second child to first child ( temp highp 4-component vector of int) +0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 Convert bool to int ( temp highp 4-component vector of int) +0:41 subgroupRotate ( global 4-component vector of bool, operation at highp) +0:41 Compare Less Than ( global 4-component vector of bool, operation at highp) +0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 0 (const int) +0:41 0 (const int) +0:41 0 (const int) +0:41 0 (const int) +0:41 'delta' ( temp highp uint) +0:43 move second child to first child ( temp highp float) +0:43 direct index ( temp highp float) +0:43 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:43 Constant: +0:43 2 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 subgroupClusteredRotate ( global highp float) +0:43 direct index ( temp highp float) +0:43 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 Constant: +0:43 0 (const int) +0:43 'delta' ( temp highp uint) +0:43 Constant: +0:43 1 (const uint) +0:44 move second child to first child ( temp highp 2-component vector of float) +0:44 vector swizzle ( temp highp 2-component vector of float) +0:44 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:44 Constant: +0:44 2 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 Sequence +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 1 (const int) +0:44 subgroupClusteredRotate ( global highp 2-component vector of float) +0:44 vector swizzle ( temp highp 2-component vector of float) +0:44 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:44 Constant: +0:44 1 (const int) +0:44 Constant: +0:44 0 (const int) +0:44 Sequence +0:44 Constant: +0:44 0 (const int) +0:44 Constant: +0:44 1 (const int) +0:44 'delta' ( temp highp uint) +0:44 Constant: +0:44 1 (const uint) +0:45 move second child to first child ( temp highp 3-component vector of float) +0:45 vector swizzle ( temp highp 3-component vector of float) +0:45 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:45 Constant: +0:45 2 (const int) +0:45 Constant: +0:45 0 (const int) +0:45 Sequence +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 2 (const int) +0:45 subgroupClusteredRotate ( global highp 3-component vector of float) +0:45 vector swizzle ( temp highp 3-component vector of float) +0:45 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:45 Constant: +0:45 2 (const int) +0:45 Constant: +0:45 0 (const int) +0:45 Sequence +0:45 Constant: +0:45 0 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 2 (const int) +0:45 'delta' ( temp highp uint) +0:45 Constant: +0:45 1 (const uint) +0:46 move second child to first child ( temp highp 4-component vector of float) +0:46 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:46 Constant: +0:46 2 (const int) +0:46 Constant: +0:46 0 (const int) +0:46 subgroupClusteredRotate ( global highp 4-component vector of float) +0:46 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float) +0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:46 Constant: +0:46 3 (const int) +0:46 Constant: +0:46 0 (const int) +0:46 'delta' ( temp highp uint) +0:46 Constant: +0:46 1 (const uint) +0:48 move second child to first child ( temp highp int) +0:48 direct index ( temp highp int) +0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:48 Constant: +0:48 2 (const int) +0:48 Constant: +0:48 1 (const int) +0:48 Constant: +0:48 0 (const int) +0:48 subgroupClusteredRotate ( global highp int) +0:48 direct index ( temp highp int) +0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:48 Constant: +0:48 0 (const int) +0:48 Constant: +0:48 1 (const int) +0:48 Constant: +0:48 0 (const int) +0:48 'delta' ( temp highp uint) +0:48 Constant: +0:48 1 (const uint) +0:49 move second child to first child ( temp highp 2-component vector of int) +0:49 vector swizzle ( temp highp 2-component vector of int) +0:49 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:49 Constant: +0:49 2 (const int) +0:49 Constant: +0:49 1 (const int) +0:49 Sequence +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 1 (const int) +0:49 subgroupClusteredRotate ( global highp 2-component vector of int) +0:49 vector swizzle ( temp highp 2-component vector of int) +0:49 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:49 Constant: +0:49 1 (const int) +0:49 Constant: +0:49 1 (const int) +0:49 Sequence +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 1 (const int) +0:49 'delta' ( temp highp uint) +0:49 Constant: +0:49 1 (const uint) +0:50 move second child to first child ( temp highp 3-component vector of int) +0:50 vector swizzle ( temp highp 3-component vector of int) +0:50 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:50 Constant: +0:50 2 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 Sequence +0:50 Constant: +0:50 0 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 Constant: +0:50 2 (const int) +0:50 subgroupClusteredRotate ( global highp 3-component vector of int) +0:50 vector swizzle ( temp highp 3-component vector of int) +0:50 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:50 Constant: +0:50 2 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 Sequence +0:50 Constant: +0:50 0 (const int) +0:50 Constant: +0:50 1 (const int) +0:50 Constant: +0:50 2 (const int) +0:50 'delta' ( temp highp uint) +0:50 Constant: +0:50 1 (const uint) +0:51 move second child to first child ( temp highp 4-component vector of int) +0:51 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:51 Constant: +0:51 2 (const int) +0:51 Constant: +0:51 1 (const int) +0:51 subgroupClusteredRotate ( global highp 4-component vector of int) +0:51 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:51 Constant: +0:51 3 (const int) +0:51 Constant: +0:51 1 (const int) +0:51 'delta' ( temp highp uint) +0:51 Constant: +0:51 1 (const uint) +0:53 move second child to first child ( temp highp uint) +0:53 direct index ( temp highp uint) +0:53 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:53 Constant: +0:53 3 (const int) +0:53 Constant: +0:53 2 (const int) +0:53 Constant: +0:53 0 (const int) +0:53 subgroupClusteredRotate ( global highp uint) +0:53 direct index ( temp highp uint) +0:53 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:53 Constant: +0:53 0 (const int) +0:53 Constant: +0:53 2 (const int) +0:53 Constant: +0:53 0 (const int) +0:53 'delta' ( temp highp uint) +0:53 Constant: +0:53 1 (const uint) +0:54 move second child to first child ( temp highp 2-component vector of uint) +0:54 vector swizzle ( temp highp 2-component vector of uint) +0:54 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:54 Constant: +0:54 3 (const int) +0:54 Constant: +0:54 2 (const int) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 subgroupClusteredRotate ( global highp 2-component vector of uint) +0:54 vector swizzle ( temp highp 2-component vector of uint) +0:54 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:54 Constant: +0:54 1 (const int) +0:54 Constant: +0:54 2 (const int) +0:54 Sequence +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 'delta' ( temp highp uint) +0:54 Constant: +0:54 1 (const uint) +0:55 move second child to first child ( temp highp 3-component vector of uint) +0:55 vector swizzle ( temp highp 3-component vector of uint) +0:55 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:55 Constant: +0:55 3 (const int) +0:55 Constant: +0:55 2 (const int) +0:55 Sequence +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 Constant: +0:55 2 (const int) +0:55 subgroupClusteredRotate ( global highp 3-component vector of uint) +0:55 vector swizzle ( temp highp 3-component vector of uint) +0:55 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:55 Constant: +0:55 2 (const int) +0:55 Constant: +0:55 2 (const int) +0:55 Sequence +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 Constant: +0:55 2 (const int) +0:55 'delta' ( temp highp uint) +0:55 Constant: +0:55 1 (const uint) +0:56 move second child to first child ( temp highp 4-component vector of uint) +0:56 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:56 Constant: +0:56 3 (const int) +0:56 Constant: +0:56 2 (const int) +0:56 subgroupClusteredRotate ( global highp 4-component vector of uint) +0:56 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint) +0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:56 Constant: +0:56 3 (const int) +0:56 Constant: +0:56 2 (const int) +0:56 'delta' ( temp highp uint) +0:56 Constant: +0:56 1 (const uint) +0:58 move second child to first child ( temp highp int) +0:58 direct index ( temp highp int) +0:58 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:58 Constant: +0:58 3 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 0 (const int) +0:58 Convert bool to int ( temp highp int) +0:58 subgroupClusteredRotate ( global bool, operation at highp) +0:58 Compare Less Than ( temp bool) +0:58 direct index ( temp highp int) +0:58 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 1 (const int) +0:58 Constant: +0:58 0 (const int) +0:58 Constant: +0:58 0 (const int) +0:58 'delta' ( temp highp uint) +0:58 Constant: +0:58 1 (const uint) +0:59 move second child to first child ( temp highp 2-component vector of int) +0:59 vector swizzle ( temp highp 2-component vector of int) +0:59 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:59 Constant: +0:59 3 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Convert bool to int ( temp highp 2-component vector of int) +0:59 subgroupClusteredRotate ( global 2-component vector of bool, operation at highp) +0:59 Compare Less Than ( global 2-component vector of bool, operation at highp) +0:59 vector swizzle ( temp highp 2-component vector of int) +0:59 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:59 Constant: +0:59 1 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Sequence +0:59 Constant: +0:59 0 (const int) +0:59 Constant: +0:59 1 (const int) +0:59 Constant: +0:59 0 (const int) +0:59 0 (const int) +0:59 'delta' ( temp highp uint) +0:59 Constant: +0:59 1 (const uint) +0:60 move second child to first child ( temp highp 3-component vector of int) +0:60 vector swizzle ( temp highp 3-component vector of int) +0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:60 Constant: +0:60 3 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 Sequence +0:60 Constant: +0:60 0 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 Constant: +0:60 2 (const int) +0:60 Convert bool to int ( temp highp 3-component vector of int) +0:60 subgroupClusteredRotate ( global 3-component vector of bool, operation at highp) +0:60 Compare Less Than ( global 3-component vector of bool, operation at highp) +0:60 vector swizzle ( temp highp 3-component vector of int) +0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:60 Constant: +0:60 1 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 Sequence +0:60 Constant: +0:60 0 (const int) +0:60 Constant: +0:60 1 (const int) +0:60 Constant: +0:60 2 (const int) +0:60 Constant: +0:60 0 (const int) +0:60 0 (const int) +0:60 0 (const int) +0:60 'delta' ( temp highp uint) +0:60 Constant: +0:60 1 (const uint) +0:61 move second child to first child ( temp highp 4-component vector of int) +0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:61 Constant: +0:61 3 (const int) +0:61 Constant: +0:61 1 (const int) +0:61 Convert bool to int ( temp highp 4-component vector of int) +0:61 subgroupClusteredRotate ( global 4-component vector of bool, operation at highp) +0:61 Compare Less Than ( global 4-component vector of bool, operation at highp) +0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int) +0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 1 (const int) +0:61 Constant: +0:61 0 (const int) +0:61 0 (const int) +0:61 0 (const int) +0:61 0 (const int) +0:61 'delta' ( temp highp uint) +0:61 Constant: +0:61 1 (const uint) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) +0:? 8 (const uint) +0:? 8 (const uint) +0:? 1 (const uint) +0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp uint delta}) +0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4}) + diff --git a/Test/baseResults/glsl.ext.textureShadowLod.frag.out b/Test/baseResults/glsl.ext.textureShadowLod.frag.out new file mode 100644 index 0000000000..b84183f897 --- /dev/null +++ b/Test/baseResults/glsl.ext.textureShadowLod.frag.out @@ -0,0 +1,160 @@ +glsl.ext.textureShadowLod.frag +ERROR: 0:24: 'texture(..., float bias)' : required extension not requested: GL_EXT_texture_shadow_lod +ERROR: 0:25: 'texture(..., float bias)' : required extension not requested: GL_EXT_texture_shadow_lod +ERROR: 0:26: 'textureOffset for sampler2DArrayShadow' : required extension not requested: GL_EXT_texture_shadow_lod +ERROR: 0:27: 'textureLod(..., float lod)' : required extension not requested: GL_EXT_texture_shadow_lod +ERROR: 0:28: 'textureLod(..., float lod)' : required extension not requested: GL_EXT_texture_shadow_lod +ERROR: 0:29: 'textureLod(..., float lod)' : required extension not requested: GL_EXT_texture_shadow_lod +ERROR: 0:30: 'textureLodOffset for sampler2DArrayShadow' : required extension not requested: GL_EXT_texture_shadow_lod +ERROR: 7 compilation errors. No code generated. + + +Shader version: 450 +Requested GL_EXT_texture_shadow_lod +ERROR: node is still EOpNull! +0:11 Function Definition: pass( ( global void) +0:11 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'c' ( out float) +0:12 texture ( global float) +0:12 's2da' ( uniform sampler2DArrayShadow) +0:12 'tc' ( smooth in 4-component vector of float) +0:12 Constant: +0:12 0.000000 +0:13 move second child to first child ( temp float) +0:13 'c' ( out float) +0:13 texture ( global float) +0:13 'sca' ( uniform samplerCubeArrayShadow) +0:13 'tc' ( smooth in 4-component vector of float) +0:13 Constant: +0:13 0.000000 +0:13 Constant: +0:13 0.000000 +0:14 move second child to first child ( temp float) +0:14 'c' ( out float) +0:14 textureOffset ( global float) +0:14 's2da' ( uniform sampler2DArrayShadow) +0:14 'tc' ( smooth in 4-component vector of float) +0:14 Constant: +0:14 0 (const int) +0:14 0 (const int) +0:14 Constant: +0:14 0.000000 +0:15 move second child to first child ( temp float) +0:15 'c' ( out float) +0:15 textureLod ( global float) +0:15 's2da' ( uniform sampler2DArrayShadow) +0:15 'tc' ( smooth in 4-component vector of float) +0:15 Constant: +0:15 0.000000 +0:16 move second child to first child ( temp float) +0:16 'c' ( out float) +0:16 textureLod ( global float) +0:16 'sc' ( uniform samplerCubeShadow) +0:16 'tc' ( smooth in 4-component vector of float) +0:16 Constant: +0:16 0.000000 +0:17 move second child to first child ( temp float) +0:17 'c' ( out float) +0:17 textureLod ( global float) +0:17 'sca' ( uniform samplerCubeArrayShadow) +0:17 'tc' ( smooth in 4-component vector of float) +0:17 Constant: +0:17 0.000000 +0:17 Constant: +0:17 0.000000 +0:18 move second child to first child ( temp float) +0:18 'c' ( out float) +0:18 textureLodOffset ( global float) +0:18 's2da' ( uniform sampler2DArrayShadow) +0:18 'tc' ( smooth in 4-component vector of float) +0:18 Constant: +0:18 0.000000 +0:18 Constant: +0:18 0 (const int) +0:18 0 (const int) +0:22 Function Definition: fail( ( global void) +0:22 Function Parameters: +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 'c' ( out float) +0:24 texture ( global float) +0:24 's2da' ( uniform sampler2DArrayShadow) +0:24 'tc' ( smooth in 4-component vector of float) +0:24 Constant: +0:24 0.000000 +0:25 move second child to first child ( temp float) +0:25 'c' ( out float) +0:25 texture ( global float) +0:25 'sca' ( uniform samplerCubeArrayShadow) +0:25 'tc' ( smooth in 4-component vector of float) +0:25 Constant: +0:25 0.000000 +0:25 Constant: +0:25 0.000000 +0:26 move second child to first child ( temp float) +0:26 'c' ( out float) +0:26 textureOffset ( global float) +0:26 's2da' ( uniform sampler2DArrayShadow) +0:26 'tc' ( smooth in 4-component vector of float) +0:26 Constant: +0:26 0 (const int) +0:26 0 (const int) +0:26 Constant: +0:26 0.000000 +0:27 move second child to first child ( temp float) +0:27 'c' ( out float) +0:27 textureLod ( global float) +0:27 's2da' ( uniform sampler2DArrayShadow) +0:27 'tc' ( smooth in 4-component vector of float) +0:27 Constant: +0:27 0.000000 +0:28 move second child to first child ( temp float) +0:28 'c' ( out float) +0:28 textureLod ( global float) +0:28 'sc' ( uniform samplerCubeShadow) +0:28 'tc' ( smooth in 4-component vector of float) +0:28 Constant: +0:28 0.000000 +0:29 move second child to first child ( temp float) +0:29 'c' ( out float) +0:29 textureLod ( global float) +0:29 'sca' ( uniform samplerCubeArrayShadow) +0:29 'tc' ( smooth in 4-component vector of float) +0:29 Constant: +0:29 0.000000 +0:29 Constant: +0:29 0.000000 +0:30 move second child to first child ( temp float) +0:30 'c' ( out float) +0:30 textureLodOffset ( global float) +0:30 's2da' ( uniform sampler2DArrayShadow) +0:30 'tc' ( smooth in 4-component vector of float) +0:30 Constant: +0:30 0.000000 +0:30 Constant: +0:30 0 (const int) +0:30 0 (const int) +0:? Linker Objects +0:? 's2da' ( uniform sampler2DArrayShadow) +0:? 'sca' ( uniform samplerCubeArrayShadow) +0:? 'sc' ( uniform samplerCubeShadow) +0:? 'c' ( out float) +0:? 'tc' ( smooth in 4-component vector of float) + + +Linked fragment stage: + +ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point + +Shader version: 450 +Requested GL_EXT_texture_shadow_lod +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 's2da' ( uniform sampler2DArrayShadow) +0:? 'sca' ( uniform samplerCubeArrayShadow) +0:? 'sc' ( uniform samplerCubeShadow) +0:? 'c' ( out float) +0:? 'tc' ( smooth in 4-component vector of float) + diff --git a/Test/baseResults/glsl.interpOp.error.frag.out b/Test/baseResults/glsl.interpOp.error.frag.out new file mode 100644 index 0000000000..36b66aeb4e --- /dev/null +++ b/Test/baseResults/glsl.interpOp.error.frag.out @@ -0,0 +1,501 @@ +glsl.interpOp.error.frag +ERROR: 0:39: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). +ERROR: 0:40: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:41: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). +ERROR: 0:54: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). +ERROR: 0:55: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:56: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). +ERROR: 0:69: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). +ERROR: 0:70: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element +ERROR: 0:71: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). +ERROR: 9 compilation errors. No code generated. + + +Shader version: 320 +ERROR: node is still EOpNull! +0:27 Function Definition: main( ( global void) +0:27 Function Parameters: +0:32 Sequence +0:32 Sequence +0:32 move second child to first child ( temp mediump 4-component vector of float) +0:32 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:32 Construct vec4 ( temp mediump 4-component vector of float) +0:32 interpolateAtCentroid ( global highp float) +0:32 'v' (layout( location=2) smooth in highp float) +0:33 move second child to first child ( temp mediump 4-component vector of float) +0:33 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:33 Construct vec4 ( temp mediump 4-component vector of float) +0:33 interpolateAtCentroid ( global highp float) +0:33 x: direct index for structure ( in highp float) +0:33 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:33 Constant: +0:33 0 (const uint) +0:34 move second child to first child ( temp mediump 4-component vector of float) +0:34 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:34 Construct vec4 ( temp mediump 4-component vector of float) +0:34 interpolateAtCentroid ( global highp float) +0:34 direct index (layout( location=7) smooth temp highp float) +0:34 'z' (layout( location=7) smooth in 1-element array of highp float) +0:34 Constant: +0:34 0 (const int) +0:35 move second child to first child ( temp highp 4-component vector of float) +0:35 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:35 interpolateAtCentroid ( global highp 4-component vector of float) +0:35 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:36 move second child to first child ( temp highp 4-component vector of float) +0:36 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:36 interpolateAtCentroid ( global highp 4-component vector of float) +0:36 direct index ( temp highp 4-component vector of float) +0:36 xyz: direct index for structure ( in 1-element array of highp 4-component vector of float) +0:36 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:36 Constant: +0:36 1 (const uint) +0:36 Constant: +0:36 0 (const int) +0:39 move second child to first child ( temp mediump 4-component vector of float) +0:39 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:39 Construct vec4 ( temp mediump 4-component vector of float) +0:39 interpolateAtCentroid ( global highp float) +0:39 a: direct index for structure ( global highp float) +0:39 'v_var' (layout( location=0) smooth in structure{ global highp float a, global highp float b}) +0:39 Constant: +0:39 0 (const int) +0:40 move second child to first child ( temp mediump 4-component vector of float) +0:40 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:40 Construct vec4 ( temp mediump 4-component vector of float) +0:40 interpolateAtCentroid ( global highp float) +0:40 direct index ( temp highp float) +0:40 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:40 Constant: +0:40 0 (const int) +0:41 move second child to first child ( temp mediump 4-component vector of float) +0:41 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:41 Construct vec4 ( temp mediump 4-component vector of float) +0:41 interpolateAtCentroid ( global highp 4-component vector of float) +0:41 s_v: direct index for structure ( global highp 4-component vector of float) +0:41 s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v}) +0:41 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:41 Constant: +0:41 2 (const uint) +0:41 Constant: +0:41 0 (const int) +0:47 Sequence +0:47 move second child to first child ( temp mediump 4-component vector of float) +0:47 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:47 Construct vec4 ( temp mediump 4-component vector of float) +0:47 interpolateAtSample ( global highp float) +0:47 'v' (layout( location=2) smooth in highp float) +0:47 Constant: +0:47 0 (const int) +0:48 move second child to first child ( temp mediump 4-component vector of float) +0:48 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:48 Construct vec4 ( temp mediump 4-component vector of float) +0:48 interpolateAtSample ( global highp float) +0:48 x: direct index for structure ( in highp float) +0:48 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:48 Constant: +0:48 0 (const uint) +0:48 Constant: +0:48 0 (const int) +0:49 move second child to first child ( temp mediump 4-component vector of float) +0:49 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:49 Construct vec4 ( temp mediump 4-component vector of float) +0:49 interpolateAtSample ( global highp float) +0:49 direct index (layout( location=7) smooth temp highp float) +0:49 'z' (layout( location=7) smooth in 1-element array of highp float) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 0 (const int) +0:50 move second child to first child ( temp highp 4-component vector of float) +0:50 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:50 interpolateAtSample ( global highp 4-component vector of float) +0:50 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:50 Constant: +0:50 0 (const int) +0:51 move second child to first child ( temp highp 4-component vector of float) +0:51 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:51 interpolateAtSample ( global highp 4-component vector of float) +0:51 direct index ( temp highp 4-component vector of float) +0:51 xyz: direct index for structure ( in 1-element array of highp 4-component vector of float) +0:51 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:51 Constant: +0:51 1 (const uint) +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 0 (const int) +0:54 move second child to first child ( temp mediump 4-component vector of float) +0:54 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:54 Construct vec4 ( temp mediump 4-component vector of float) +0:54 interpolateAtSample ( global highp float) +0:54 a: direct index for structure ( global highp float) +0:54 'v_var' (layout( location=0) smooth in structure{ global highp float a, global highp float b}) +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 0 (const int) +0:55 move second child to first child ( temp mediump 4-component vector of float) +0:55 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:55 Construct vec4 ( temp mediump 4-component vector of float) +0:55 interpolateAtSample ( global highp float) +0:55 direct index ( temp highp float) +0:55 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 0 (const int) +0:56 move second child to first child ( temp mediump 4-component vector of float) +0:56 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:56 Construct vec4 ( temp mediump 4-component vector of float) +0:56 interpolateAtSample ( global highp 4-component vector of float) +0:56 s_v: direct index for structure ( global highp 4-component vector of float) +0:56 s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v}) +0:56 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:56 Constant: +0:56 2 (const uint) +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 0 (const int) +0:62 Sequence +0:62 move second child to first child ( temp mediump 4-component vector of float) +0:62 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:62 Construct vec4 ( temp mediump 4-component vector of float) +0:62 interpolateAtOffset ( global highp float) +0:62 'v' (layout( location=2) smooth in highp float) +0:62 Constant: +0:62 0.000000 +0:62 0.000000 +0:63 move second child to first child ( temp mediump 4-component vector of float) +0:63 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:63 Construct vec4 ( temp mediump 4-component vector of float) +0:63 interpolateAtOffset ( global highp float) +0:63 x: direct index for structure ( in highp float) +0:63 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:63 Constant: +0:63 0 (const uint) +0:63 Constant: +0:63 0.000000 +0:63 0.000000 +0:64 move second child to first child ( temp mediump 4-component vector of float) +0:64 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:64 Construct vec4 ( temp mediump 4-component vector of float) +0:64 interpolateAtOffset ( global highp float) +0:64 direct index (layout( location=7) smooth temp highp float) +0:64 'z' (layout( location=7) smooth in 1-element array of highp float) +0:64 Constant: +0:64 0 (const int) +0:64 Constant: +0:64 0.000000 +0:64 0.000000 +0:65 move second child to first child ( temp highp 4-component vector of float) +0:65 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:65 interpolateAtOffset ( global highp 4-component vector of float) +0:65 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:65 Constant: +0:65 0.000000 +0:65 0.000000 +0:66 move second child to first child ( temp highp 4-component vector of float) +0:66 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:66 interpolateAtOffset ( global highp 4-component vector of float) +0:66 direct index ( temp highp 4-component vector of float) +0:66 xyz: direct index for structure ( in 1-element array of highp 4-component vector of float) +0:66 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:66 Constant: +0:66 1 (const uint) +0:66 Constant: +0:66 0 (const int) +0:66 Constant: +0:66 0.000000 +0:66 0.000000 +0:69 move second child to first child ( temp mediump 4-component vector of float) +0:69 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:69 Construct vec4 ( temp mediump 4-component vector of float) +0:69 interpolateAtOffset ( global highp float) +0:69 a: direct index for structure ( global highp float) +0:69 'v_var' (layout( location=0) smooth in structure{ global highp float a, global highp float b}) +0:69 Constant: +0:69 0 (const int) +0:69 Constant: +0:69 0.000000 +0:69 0.000000 +0:70 move second child to first child ( temp mediump 4-component vector of float) +0:70 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:70 Construct vec4 ( temp mediump 4-component vector of float) +0:70 interpolateAtOffset ( global highp float) +0:70 direct index ( temp highp float) +0:70 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 0.000000 +0:70 0.000000 +0:71 move second child to first child ( temp mediump 4-component vector of float) +0:71 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:71 Construct vec4 ( temp mediump 4-component vector of float) +0:71 interpolateAtOffset ( global highp 4-component vector of float) +0:71 s_v: direct index for structure ( global highp 4-component vector of float) +0:71 s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v}) +0:71 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:71 Constant: +0:71 2 (const uint) +0:71 Constant: +0:71 0 (const int) +0:71 Constant: +0:71 0.000000 +0:71 0.000000 +0:? Linker Objects +0:? 'v_var' (layout( location=0) smooth in structure{ global highp float a, global highp float b}) +0:? 'v' (layout( location=2) smooth in highp float) +0:? 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:? 'z' (layout( location=7) smooth in 1-element array of highp float) +0:? 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:? 'fragColor' (layout( location=0) out mediump 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 320 +ERROR: node is still EOpNull! +0:27 Function Definition: main( ( global void) +0:27 Function Parameters: +0:32 Sequence +0:32 Sequence +0:32 move second child to first child ( temp mediump 4-component vector of float) +0:32 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:32 Construct vec4 ( temp mediump 4-component vector of float) +0:32 interpolateAtCentroid ( global highp float) +0:32 'v' (layout( location=2) smooth in highp float) +0:33 move second child to first child ( temp mediump 4-component vector of float) +0:33 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:33 Construct vec4 ( temp mediump 4-component vector of float) +0:33 interpolateAtCentroid ( global highp float) +0:33 x: direct index for structure ( in highp float) +0:33 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:33 Constant: +0:33 0 (const uint) +0:34 move second child to first child ( temp mediump 4-component vector of float) +0:34 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:34 Construct vec4 ( temp mediump 4-component vector of float) +0:34 interpolateAtCentroid ( global highp float) +0:34 direct index (layout( location=7) smooth temp highp float) +0:34 'z' (layout( location=7) smooth in 1-element array of highp float) +0:34 Constant: +0:34 0 (const int) +0:35 move second child to first child ( temp highp 4-component vector of float) +0:35 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:35 interpolateAtCentroid ( global highp 4-component vector of float) +0:35 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:36 move second child to first child ( temp highp 4-component vector of float) +0:36 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:36 interpolateAtCentroid ( global highp 4-component vector of float) +0:36 direct index ( temp highp 4-component vector of float) +0:36 xyz: direct index for structure ( in 1-element array of highp 4-component vector of float) +0:36 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:36 Constant: +0:36 1 (const uint) +0:36 Constant: +0:36 0 (const int) +0:39 move second child to first child ( temp mediump 4-component vector of float) +0:39 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:39 Construct vec4 ( temp mediump 4-component vector of float) +0:39 interpolateAtCentroid ( global highp float) +0:39 a: direct index for structure ( global highp float) +0:39 'v_var' (layout( location=0) smooth in structure{ global highp float a, global highp float b}) +0:39 Constant: +0:39 0 (const int) +0:40 move second child to first child ( temp mediump 4-component vector of float) +0:40 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:40 Construct vec4 ( temp mediump 4-component vector of float) +0:40 interpolateAtCentroid ( global highp float) +0:40 direct index ( temp highp float) +0:40 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:40 Constant: +0:40 0 (const int) +0:41 move second child to first child ( temp mediump 4-component vector of float) +0:41 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:41 Construct vec4 ( temp mediump 4-component vector of float) +0:41 interpolateAtCentroid ( global highp 4-component vector of float) +0:41 s_v: direct index for structure ( global highp 4-component vector of float) +0:41 s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v}) +0:41 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:41 Constant: +0:41 2 (const uint) +0:41 Constant: +0:41 0 (const int) +0:47 Sequence +0:47 move second child to first child ( temp mediump 4-component vector of float) +0:47 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:47 Construct vec4 ( temp mediump 4-component vector of float) +0:47 interpolateAtSample ( global highp float) +0:47 'v' (layout( location=2) smooth in highp float) +0:47 Constant: +0:47 0 (const int) +0:48 move second child to first child ( temp mediump 4-component vector of float) +0:48 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:48 Construct vec4 ( temp mediump 4-component vector of float) +0:48 interpolateAtSample ( global highp float) +0:48 x: direct index for structure ( in highp float) +0:48 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:48 Constant: +0:48 0 (const uint) +0:48 Constant: +0:48 0 (const int) +0:49 move second child to first child ( temp mediump 4-component vector of float) +0:49 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:49 Construct vec4 ( temp mediump 4-component vector of float) +0:49 interpolateAtSample ( global highp float) +0:49 direct index (layout( location=7) smooth temp highp float) +0:49 'z' (layout( location=7) smooth in 1-element array of highp float) +0:49 Constant: +0:49 0 (const int) +0:49 Constant: +0:49 0 (const int) +0:50 move second child to first child ( temp highp 4-component vector of float) +0:50 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:50 interpolateAtSample ( global highp 4-component vector of float) +0:50 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:50 Constant: +0:50 0 (const int) +0:51 move second child to first child ( temp highp 4-component vector of float) +0:51 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:51 interpolateAtSample ( global highp 4-component vector of float) +0:51 direct index ( temp highp 4-component vector of float) +0:51 xyz: direct index for structure ( in 1-element array of highp 4-component vector of float) +0:51 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:51 Constant: +0:51 1 (const uint) +0:51 Constant: +0:51 0 (const int) +0:51 Constant: +0:51 0 (const int) +0:54 move second child to first child ( temp mediump 4-component vector of float) +0:54 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:54 Construct vec4 ( temp mediump 4-component vector of float) +0:54 interpolateAtSample ( global highp float) +0:54 a: direct index for structure ( global highp float) +0:54 'v_var' (layout( location=0) smooth in structure{ global highp float a, global highp float b}) +0:54 Constant: +0:54 0 (const int) +0:54 Constant: +0:54 0 (const int) +0:55 move second child to first child ( temp mediump 4-component vector of float) +0:55 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:55 Construct vec4 ( temp mediump 4-component vector of float) +0:55 interpolateAtSample ( global highp float) +0:55 direct index ( temp highp float) +0:55 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:55 Constant: +0:55 0 (const int) +0:55 Constant: +0:55 0 (const int) +0:56 move second child to first child ( temp mediump 4-component vector of float) +0:56 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:56 Construct vec4 ( temp mediump 4-component vector of float) +0:56 interpolateAtSample ( global highp 4-component vector of float) +0:56 s_v: direct index for structure ( global highp 4-component vector of float) +0:56 s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v}) +0:56 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:56 Constant: +0:56 2 (const uint) +0:56 Constant: +0:56 0 (const int) +0:56 Constant: +0:56 0 (const int) +0:62 Sequence +0:62 move second child to first child ( temp mediump 4-component vector of float) +0:62 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:62 Construct vec4 ( temp mediump 4-component vector of float) +0:62 interpolateAtOffset ( global highp float) +0:62 'v' (layout( location=2) smooth in highp float) +0:62 Constant: +0:62 0.000000 +0:62 0.000000 +0:63 move second child to first child ( temp mediump 4-component vector of float) +0:63 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:63 Construct vec4 ( temp mediump 4-component vector of float) +0:63 interpolateAtOffset ( global highp float) +0:63 x: direct index for structure ( in highp float) +0:63 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:63 Constant: +0:63 0 (const uint) +0:63 Constant: +0:63 0.000000 +0:63 0.000000 +0:64 move second child to first child ( temp mediump 4-component vector of float) +0:64 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:64 Construct vec4 ( temp mediump 4-component vector of float) +0:64 interpolateAtOffset ( global highp float) +0:64 direct index (layout( location=7) smooth temp highp float) +0:64 'z' (layout( location=7) smooth in 1-element array of highp float) +0:64 Constant: +0:64 0 (const int) +0:64 Constant: +0:64 0.000000 +0:64 0.000000 +0:65 move second child to first child ( temp highp 4-component vector of float) +0:65 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:65 interpolateAtOffset ( global highp 4-component vector of float) +0:65 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:65 Constant: +0:65 0.000000 +0:65 0.000000 +0:66 move second child to first child ( temp highp 4-component vector of float) +0:66 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:66 interpolateAtOffset ( global highp 4-component vector of float) +0:66 direct index ( temp highp 4-component vector of float) +0:66 xyz: direct index for structure ( in 1-element array of highp 4-component vector of float) +0:66 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:66 Constant: +0:66 1 (const uint) +0:66 Constant: +0:66 0 (const int) +0:66 Constant: +0:66 0.000000 +0:66 0.000000 +0:69 move second child to first child ( temp mediump 4-component vector of float) +0:69 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:69 Construct vec4 ( temp mediump 4-component vector of float) +0:69 interpolateAtOffset ( global highp float) +0:69 a: direct index for structure ( global highp float) +0:69 'v_var' (layout( location=0) smooth in structure{ global highp float a, global highp float b}) +0:69 Constant: +0:69 0 (const int) +0:69 Constant: +0:69 0.000000 +0:69 0.000000 +0:70 move second child to first child ( temp mediump 4-component vector of float) +0:70 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:70 Construct vec4 ( temp mediump 4-component vector of float) +0:70 interpolateAtOffset ( global highp float) +0:70 direct index ( temp highp float) +0:70 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 0.000000 +0:70 0.000000 +0:71 move second child to first child ( temp mediump 4-component vector of float) +0:71 'fragColor' (layout( location=0) out mediump 4-component vector of float) +0:71 Construct vec4 ( temp mediump 4-component vector of float) +0:71 interpolateAtOffset ( global highp 4-component vector of float) +0:71 s_v: direct index for structure ( global highp 4-component vector of float) +0:71 s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v}) +0:71 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:71 Constant: +0:71 2 (const uint) +0:71 Constant: +0:71 0 (const int) +0:71 Constant: +0:71 0.000000 +0:71 0.000000 +0:? Linker Objects +0:? 'v_var' (layout( location=0) smooth in structure{ global highp float a, global highp float b}) +0:? 'v' (layout( location=2) smooth in highp float) +0:? 'anon@0' (layout( location=3) in block{ in highp float x, in 1-element array of highp 4-component vector of float xyz, in structure{ global highp 4-component vector of float s_v} s0}) +0:? 'z' (layout( location=7) smooth in 1-element array of highp float) +0:? 'w' (layout( location=8) smooth in highp 4-component vector of float) +0:? 'fragColor' (layout( location=0) out mediump 4-component vector of float) + diff --git a/Test/baseResults/glsl.versionOverride.comp.out b/Test/baseResults/glsl.versionOverride.comp.out new file mode 100644 index 0000000000..591ce4d985 --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.comp.out @@ -0,0 +1 @@ +glsl.versionOverride.comp diff --git a/Test/baseResults/glsl.versionOverride.frag.out b/Test/baseResults/glsl.versionOverride.frag.out new file mode 100644 index 0000000000..b759a47f24 --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.frag.out @@ -0,0 +1 @@ +glsl.versionOverride.frag diff --git a/Test/baseResults/glsl.versionOverride.geom.out b/Test/baseResults/glsl.versionOverride.geom.out new file mode 100644 index 0000000000..758d9d49cc --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.geom.out @@ -0,0 +1 @@ +glsl.versionOverride.geom diff --git a/Test/baseResults/glsl.versionOverride.tesc.out b/Test/baseResults/glsl.versionOverride.tesc.out new file mode 100644 index 0000000000..4aedf0d8e7 --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.tesc.out @@ -0,0 +1 @@ +glsl.versionOverride.tesc diff --git a/Test/baseResults/glsl.versionOverride.tese.out b/Test/baseResults/glsl.versionOverride.tese.out new file mode 100644 index 0000000000..c3632e8aef --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.tese.out @@ -0,0 +1 @@ +glsl.versionOverride.tese diff --git a/Test/baseResults/glsl.versionOverride.vert.out b/Test/baseResults/glsl.versionOverride.vert.out new file mode 100644 index 0000000000..d42dc3d8cd --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.vert.out @@ -0,0 +1 @@ +glsl.versionOverride.vert diff --git a/Test/baseResults/glspv.esversion.vert.out b/Test/baseResults/glspv.esversion.vert.out index 2a0932abee..dedcae9eea 100644 --- a/Test/baseResults/glspv.esversion.vert.out +++ b/Test/baseResults/glspv.esversion.vert.out @@ -1,6 +1,6 @@ glspv.esversion.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 10 Capability Shader diff --git a/Test/baseResults/glspv.version.frag.out b/Test/baseResults/glspv.version.frag.out index a90d9eb8d0..13abe1d6c3 100644 --- a/Test/baseResults/glspv.version.frag.out +++ b/Test/baseResults/glspv.version.frag.out @@ -2,7 +2,7 @@ glspv.version.frag ERROR: #version: compilation for SPIR-V does not support the compatibility profile // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 6 Capability Shader diff --git a/Test/baseResults/hlsl.PointSize.geom.out b/Test/baseResults/hlsl.PointSize.geom.out index 2b3d9544bb..c81cf5b3e8 100644 --- a/Test/baseResults/hlsl.PointSize.geom.out +++ b/Test/baseResults/hlsl.PointSize.geom.out @@ -71,7 +71,7 @@ output primitive = line_strip Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 36 Capability Geometry diff --git a/Test/baseResults/hlsl.PointSize.vert.out b/Test/baseResults/hlsl.PointSize.vert.out index 12a4d6465d..5d646a4889 100644 --- a/Test/baseResults/hlsl.PointSize.vert.out +++ b/Test/baseResults/hlsl.PointSize.vert.out @@ -38,7 +38,7 @@ Shader version: 500 0:? '@entryPointOutput' ( out float PointSize) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 16 Capability Shader diff --git a/Test/baseResults/hlsl.aliasOpaque.frag.out b/Test/baseResults/hlsl.aliasOpaque.frag.out index b7c2c9e256..af6d18ba4a 100644 --- a/Test/baseResults/hlsl.aliasOpaque.frag.out +++ b/Test/baseResults/hlsl.aliasOpaque.frag.out @@ -143,7 +143,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 64 Capability Shader @@ -166,12 +166,12 @@ gl_FragCoord origin is upper left Name 51 "gtex" Name 56 "param" Name 62 "@entryPointOutput" - Decorate 44(gss2) DescriptorSet 0 Decorate 44(gss2) Binding 1 - Decorate 47(gss) DescriptorSet 0 + Decorate 44(gss2) DescriptorSet 0 Decorate 47(gss) Binding 0 - Decorate 51(gtex) DescriptorSet 0 + Decorate 47(gss) DescriptorSet 0 Decorate 51(gtex) Binding 2 + Decorate 51(gtex) DescriptorSet 0 Decorate 62(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out index dde6e29b38..89b0c9480e 100644 --- a/Test/baseResults/hlsl.amend.frag.out +++ b/Test/baseResults/hlsl.amend.frag.out @@ -160,7 +160,7 @@ gl_FragCoord origin is upper left 0:? 'm' ( global 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 57 Capability Shader @@ -182,14 +182,14 @@ gl_FragCoord origin is upper left MemberName 20($Global) 3 "d" MemberName 20($Global) 4 "e" Name 22 "" + Decorate 20($Global) Block MemberDecorate 20($Global) 0 Offset 0 MemberDecorate 20($Global) 1 Offset 16 MemberDecorate 20($Global) 2 Offset 32 MemberDecorate 20($Global) 3 Offset 44 MemberDecorate 20($Global) 4 Offset 48 - Decorate 20($Global) Block - Decorate 22 DescriptorSet 0 Decorate 22 Binding 0 + Decorate 22 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 14: TypeFloat 32 diff --git a/Test/baseResults/hlsl.array.flatten.frag.out b/Test/baseResults/hlsl.array.flatten.frag.out index 5b99f5df44..e225f196a7 100644 --- a/Test/baseResults/hlsl.array.flatten.frag.out +++ b/Test/baseResults/hlsl.array.flatten.frag.out @@ -345,7 +345,7 @@ gl_FragCoord origin is upper left 0:? 'ps_output.color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 143 Capability Shader @@ -392,44 +392,44 @@ gl_FragCoord origin is upper left Name 140 "g_samp_explicit[0]" Name 141 "g_samp_explicit[1]" Name 142 "g_samp_explicit[2]" - Decorate 42(g_tex[1]) DescriptorSet 0 Decorate 42(g_tex[1]) Binding 4 - Decorate 45(g_samp[1]) DescriptorSet 0 + Decorate 42(g_tex[1]) DescriptorSet 0 Decorate 45(g_samp[1]) Binding 10 - Decorate 65(g_samp[0]) DescriptorSet 0 + Decorate 45(g_samp[1]) DescriptorSet 0 Decorate 65(g_samp[0]) Binding 9 - Decorate 70(g_samp[2]) DescriptorSet 0 + Decorate 65(g_samp[0]) DescriptorSet 0 Decorate 70(g_samp[2]) Binding 11 - Decorate 74(g_tex[0]) DescriptorSet 0 + Decorate 70(g_samp[2]) DescriptorSet 0 Decorate 74(g_tex[0]) Binding 0 - Decorate 79(g_tex[2]) DescriptorSet 0 + Decorate 74(g_tex[0]) DescriptorSet 0 Decorate 79(g_tex[2]) Binding 8 + Decorate 79(g_tex[2]) DescriptorSet 0 Decorate 88 ArrayStride 48 Decorate 89 ArrayStride 48 Decorate 90 ArrayStride 16 + Decorate 91($Global) Block MemberDecorate 91($Global) 0 RowMajor - MemberDecorate 91($Global) 0 Offset 0 MemberDecorate 91($Global) 0 MatrixStride 16 + MemberDecorate 91($Global) 0 Offset 0 MemberDecorate 91($Global) 1 RowMajor - MemberDecorate 91($Global) 1 Offset 192 MemberDecorate 91($Global) 1 MatrixStride 16 + MemberDecorate 91($Global) 1 Offset 192 MemberDecorate 91($Global) 2 Offset 384 - Decorate 91($Global) Block - Decorate 93 DescriptorSet 0 Decorate 93 Binding 12 + Decorate 93 DescriptorSet 0 Decorate 134(ps_output.color) Location 0 - Decorate 137(g_tex_explicit[0]) DescriptorSet 0 Decorate 137(g_tex_explicit[0]) Binding 1 - Decorate 138(g_tex_explicit[1]) DescriptorSet 0 + Decorate 137(g_tex_explicit[0]) DescriptorSet 0 Decorate 138(g_tex_explicit[1]) Binding 2 - Decorate 139(g_tex_explicit[2]) DescriptorSet 0 + Decorate 138(g_tex_explicit[1]) DescriptorSet 0 Decorate 139(g_tex_explicit[2]) Binding 3 - Decorate 140(g_samp_explicit[0]) DescriptorSet 0 + Decorate 139(g_tex_explicit[2]) DescriptorSet 0 Decorate 140(g_samp_explicit[0]) Binding 5 - Decorate 141(g_samp_explicit[1]) DescriptorSet 0 + Decorate 140(g_samp_explicit[0]) DescriptorSet 0 Decorate 141(g_samp_explicit[1]) Binding 6 - Decorate 142(g_samp_explicit[2]) DescriptorSet 0 + Decorate 141(g_samp_explicit[1]) DescriptorSet 0 Decorate 142(g_samp_explicit[2]) Binding 7 + Decorate 142(g_samp_explicit[2]) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out index 269177294d..45307eac60 100644 --- a/Test/baseResults/hlsl.array.frag.out +++ b/Test/baseResults/hlsl.array.frag.out @@ -290,13 +290,13 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=1) in 3-element array of 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 126 +// Generated by (magic number): 8000b +// Id's are bound by 117 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" 112 116 119 + EntryPoint Fragment 4 "PixelShaderFunction" 103 107 110 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "PixelShaderFunction" @@ -306,39 +306,39 @@ gl_FragCoord origin is upper left Name 20 "C" Name 29 "c2" Name 35 "b" - Name 48 "tmp" - Name 54 "" - MemberName 54 0 "m" - Name 60 "$Global" - MemberName 60($Global) 0 "a" - MemberName 60($Global) 1 "s" - MemberName 60($Global) 2 "a1" - MemberName 60($Global) 3 "a2" - Name 62 "" - Name 110 "i" - Name 112 "i" - Name 114 "input" - Name 116 "input" - Name 119 "@entryPointOutput" - Name 120 "param" - Name 122 "param" - Decorate 51 ArrayStride 16 - Decorate 53 ArrayStride 16 - MemberDecorate 54 0 Offset 0 - Decorate 56 ArrayStride 112 - Decorate 58 ArrayStride 16 - Decorate 59 ArrayStride 16 - MemberDecorate 60($Global) 0 Offset 0 - MemberDecorate 60($Global) 1 Offset 64 - MemberDecorate 60($Global) 2 Offset 1296 - MemberDecorate 60($Global) 3 Offset 1312 - Decorate 60($Global) Block - Decorate 62 DescriptorSet 0 - Decorate 62 Binding 0 - Decorate 112(i) Flat - Decorate 112(i) Location 0 - Decorate 116(input) Location 1 - Decorate 119(@entryPointOutput) Location 0 + Name 39 "tmp" + Name 45 "" + MemberName 45 0 "m" + Name 51 "$Global" + MemberName 51($Global) 0 "a" + MemberName 51($Global) 1 "s" + MemberName 51($Global) 2 "a1" + MemberName 51($Global) 3 "a2" + Name 53 "" + Name 101 "i" + Name 103 "i" + Name 105 "input" + Name 107 "input" + Name 110 "@entryPointOutput" + Name 111 "param" + Name 113 "param" + Decorate 42 ArrayStride 16 + Decorate 44 ArrayStride 16 + MemberDecorate 45 0 Offset 0 + Decorate 47 ArrayStride 112 + Decorate 49 ArrayStride 16 + Decorate 50 ArrayStride 16 + Decorate 51($Global) Block + MemberDecorate 51($Global) 0 Offset 0 + MemberDecorate 51($Global) 1 Offset 64 + MemberDecorate 51($Global) 2 Offset 1296 + MemberDecorate 51($Global) 3 Offset 1312 + Decorate 53 Binding 0 + Decorate 53 DescriptorSet 0 + Decorate 103(i) Flat + Decorate 103(i) Location 0 + Decorate 107(input) Location 1 + Decorate 110(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -364,53 +364,53 @@ gl_FragCoord origin is upper left 32: 10(int) Constant 10 33: TypeArray 9(fvec4) 32 34: TypePointer Function 33 - 47: TypePointer Function 9(fvec4) - 50: 10(int) Constant 4 - 51: TypeArray 9(fvec4) 50 - 52: 10(int) Constant 7 - 53: TypeArray 9(fvec4) 52 - 54: TypeStruct 53 - 55: 10(int) Constant 11 - 56: TypeArray 54(struct) 55 - 57: 10(int) Constant 1 - 58: TypeArray 9(fvec4) 57 - 59: TypeArray 9(fvec4) 26 - 60($Global): TypeStruct 51 56 58 59 - 61: TypePointer Uniform 60($Global) - 62: 61(ptr) Variable Uniform - 63: 6(int) Constant 2 - 64: 6(int) Constant 0 - 65: TypePointer Uniform 9(fvec4) - 70: 6(int) Constant 3 - 79: 6(int) Constant 1 - 93: 6(int) Constant 5 - 111: TypePointer Input 6(int) - 112(i): 111(ptr) Variable Input - 115: TypePointer Input 12 - 116(input): 115(ptr) Variable Input - 118: TypePointer Output 9(fvec4) -119(@entryPointOutput): 118(ptr) Variable Output - 125: 58 ConstantComposite 25 + 38: TypePointer Function 9(fvec4) + 41: 10(int) Constant 4 + 42: TypeArray 9(fvec4) 41 + 43: 10(int) Constant 7 + 44: TypeArray 9(fvec4) 43 + 45: TypeStruct 44 + 46: 10(int) Constant 11 + 47: TypeArray 45(struct) 46 + 48: 10(int) Constant 1 + 49: TypeArray 9(fvec4) 48 + 50: TypeArray 9(fvec4) 26 + 51($Global): TypeStruct 42 47 49 50 + 52: TypePointer Uniform 51($Global) + 53: 52(ptr) Variable Uniform + 54: 6(int) Constant 2 + 55: 6(int) Constant 0 + 56: TypePointer Uniform 9(fvec4) + 61: 6(int) Constant 3 + 70: 6(int) Constant 1 + 84: 6(int) Constant 5 + 102: TypePointer Input 6(int) + 103(i): 102(ptr) Variable Input + 106: TypePointer Input 12 + 107(input): 106(ptr) Variable Input + 109: TypePointer Output 9(fvec4) +110(@entryPointOutput): 109(ptr) Variable Output + 116: 49 ConstantComposite 25 4(PixelShaderFunction): 2 Function None 3 5: Label - 110(i): 7(ptr) Variable Function - 114(input): 13(ptr) Variable Function - 120(param): 7(ptr) Variable Function - 122(param): 13(ptr) Variable Function + 101(i): 7(ptr) Variable Function + 105(input): 13(ptr) Variable Function + 111(param): 7(ptr) Variable Function + 113(param): 13(ptr) Variable Function Store 20(C) 25 30: 9(fvec4) Load 20(C) 31: 27 CompositeConstruct 30 25 Store 29(c2) 31 - 113: 6(int) Load 112(i) - Store 110(i) 113 - 117: 12 Load 116(input) - Store 114(input) 117 - 121: 6(int) Load 110(i) - Store 120(param) 121 - 123: 12 Load 114(input) - Store 122(param) 123 - 124: 9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 120(param) 122(param) - Store 119(@entryPointOutput) 124 + 104: 6(int) Load 103(i) + Store 101(i) 104 + 108: 12 Load 107(input) + Store 105(input) 108 + 112: 6(int) Load 101(i) + Store 111(param) 112 + 114: 12 Load 105(input) + Store 113(param) 114 + 115: 9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 111(param) 113(param) + Store 110(@entryPointOutput) 115 Return FunctionEnd 17(@PixelShaderFunction(i1;vf4[3];): 9(fvec4) Function None 14 @@ -418,59 +418,50 @@ gl_FragCoord origin is upper left 16(input): 13(ptr) FunctionParameter 18: Label 35(b): 34(ptr) Variable Function - 48(tmp): 47(ptr) Variable Function + 39(tmp): 38(ptr) Variable Function 36: 9(fvec4) Load 20(C) - 37: 9(fvec4) Load 20(C) - 38: 9(fvec4) Load 20(C) - 39: 9(fvec4) Load 20(C) + 37: 33 CompositeConstruct 36 36 36 36 36 36 36 36 36 36 + Store 35(b) 37 40: 9(fvec4) Load 20(C) - 41: 9(fvec4) Load 20(C) - 42: 9(fvec4) Load 20(C) - 43: 9(fvec4) Load 20(C) - 44: 9(fvec4) Load 20(C) - 45: 9(fvec4) Load 20(C) - 46: 33 CompositeConstruct 36 37 38 39 40 41 42 43 44 45 - Store 35(b) 46 - 49: 9(fvec4) Load 20(C) - 66: 65(ptr) AccessChain 62 63 64 - 67: 9(fvec4) Load 66 - 68: 9(fvec4) FAdd 49 67 - 69: 9(fvec4) FAdd 68 25 - 71: 6(int) Load 15(i) - 72: 65(ptr) AccessChain 62 70 71 - 73: 9(fvec4) Load 72 - 74: 9(fvec4) FAdd 69 73 - 75: 6(int) Load 15(i) - 76: 19(ptr) AccessChain 29(c2) 75 - 77: 9(fvec4) Load 76 - 78: 9(fvec4) FAdd 74 77 - Store 48(tmp) 78 - 80: 65(ptr) AccessChain 62 64 79 - 81: 9(fvec4) Load 80 - 82: 6(int) Load 15(i) - 83: 65(ptr) AccessChain 62 64 82 - 84: 9(fvec4) Load 83 - 85: 9(fvec4) FAdd 81 84 - 86: 47(ptr) AccessChain 16(input) 63 - 87: 9(fvec4) Load 86 - 88: 9(fvec4) FAdd 85 87 - 89: 6(int) Load 15(i) - 90: 47(ptr) AccessChain 16(input) 89 - 91: 9(fvec4) Load 90 - 92: 9(fvec4) FAdd 88 91 - 94: 47(ptr) AccessChain 35(b) 93 + 57: 56(ptr) AccessChain 53 54 55 + 58: 9(fvec4) Load 57 + 59: 9(fvec4) FAdd 40 58 + 60: 9(fvec4) FAdd 59 25 + 62: 6(int) Load 15(i) + 63: 56(ptr) AccessChain 53 61 62 + 64: 9(fvec4) Load 63 + 65: 9(fvec4) FAdd 60 64 + 66: 6(int) Load 15(i) + 67: 19(ptr) AccessChain 29(c2) 66 + 68: 9(fvec4) Load 67 + 69: 9(fvec4) FAdd 65 68 + Store 39(tmp) 69 + 71: 56(ptr) AccessChain 53 55 70 + 72: 9(fvec4) Load 71 + 73: 6(int) Load 15(i) + 74: 56(ptr) AccessChain 53 55 73 + 75: 9(fvec4) Load 74 + 76: 9(fvec4) FAdd 72 75 + 77: 38(ptr) AccessChain 16(input) 54 + 78: 9(fvec4) Load 77 + 79: 9(fvec4) FAdd 76 78 + 80: 6(int) Load 15(i) + 81: 38(ptr) AccessChain 16(input) 80 + 82: 9(fvec4) Load 81 + 83: 9(fvec4) FAdd 79 82 + 85: 38(ptr) AccessChain 35(b) 84 + 86: 9(fvec4) Load 85 + 87: 9(fvec4) FAdd 83 86 + 88: 6(int) Load 15(i) + 89: 38(ptr) AccessChain 35(b) 88 + 90: 9(fvec4) Load 89 + 91: 9(fvec4) FAdd 87 90 + 92: 6(int) Load 15(i) + 93: 6(int) Load 15(i) + 94: 56(ptr) AccessChain 53 70 92 55 93 95: 9(fvec4) Load 94 - 96: 9(fvec4) FAdd 92 95 - 97: 6(int) Load 15(i) - 98: 47(ptr) AccessChain 35(b) 97 - 99: 9(fvec4) Load 98 - 100: 9(fvec4) FAdd 96 99 - 101: 6(int) Load 15(i) - 102: 6(int) Load 15(i) - 103: 65(ptr) AccessChain 62 79 101 64 102 - 104: 9(fvec4) Load 103 - 105: 9(fvec4) FAdd 100 104 - 106: 9(fvec4) Load 48(tmp) - 107: 9(fvec4) FAdd 105 106 - ReturnValue 107 + 96: 9(fvec4) FAdd 91 95 + 97: 9(fvec4) Load 39(tmp) + 98: 9(fvec4) FAdd 96 97 + ReturnValue 98 FunctionEnd diff --git a/Test/baseResults/hlsl.array.implicit-size.frag.out b/Test/baseResults/hlsl.array.implicit-size.frag.out index 566bc9d5a6..ae36cef412 100644 --- a/Test/baseResults/hlsl.array.implicit-size.frag.out +++ b/Test/baseResults/hlsl.array.implicit-size.frag.out @@ -163,7 +163,7 @@ gl_FragCoord origin is upper left 0:? 'g_mystruct' ( global 2-element array of structure{ temp int i, temp float f}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 72 Capability Shader diff --git a/Test/baseResults/hlsl.array.multidim.frag.out b/Test/baseResults/hlsl.array.multidim.frag.out index fa2be6590a..50cfeb21a1 100644 --- a/Test/baseResults/hlsl.array.multidim.frag.out +++ b/Test/baseResults/hlsl.array.multidim.frag.out @@ -134,7 +134,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 57 Capability Shader @@ -157,10 +157,10 @@ gl_FragCoord origin is upper left Decorate 22 ArrayStride 16 Decorate 24 ArrayStride 48 Decorate 26 ArrayStride 192 - MemberDecorate 27($Global) 0 Offset 0 Decorate 27($Global) Block - Decorate 29 DescriptorSet 0 + MemberDecorate 27($Global) 0 Offset 0 Decorate 29 Binding 0 + Decorate 29 DescriptorSet 0 Decorate 54(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.assoc.frag.out b/Test/baseResults/hlsl.assoc.frag.out index 69a631e018..018da847c0 100644 --- a/Test/baseResults/hlsl.assoc.frag.out +++ b/Test/baseResults/hlsl.assoc.frag.out @@ -132,7 +132,7 @@ gl_FragCoord origin is upper left 0:? 'a5' (layout( location=4) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 58 Capability Shader diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out index 90c17402fe..910ccfdb6e 100644 --- a/Test/baseResults/hlsl.attribute.expression.comp.out +++ b/Test/baseResults/hlsl.attribute.expression.comp.out @@ -64,7 +64,7 @@ local_size = (4, 6, 8) 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int bound}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader @@ -79,10 +79,10 @@ local_size = (4, 6, 8) Name 18 "$Global" MemberName 18($Global) 0 "bound" Name 20 "" - MemberDecorate 18($Global) 0 Offset 0 Decorate 18($Global) Block - Decorate 20 DescriptorSet 0 + MemberDecorate 18($Global) 0 Offset 0 Decorate 20 Binding 0 + Decorate 20 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 8: TypeInt 32 1 diff --git a/Test/baseResults/hlsl.attribute.frag.out b/Test/baseResults/hlsl.attribute.frag.out index 0d1f709ba2..cdc3471605 100644 --- a/Test/baseResults/hlsl.attribute.frag.out +++ b/Test/baseResults/hlsl.attribute.frag.out @@ -50,7 +50,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader diff --git a/Test/baseResults/hlsl.attributeC11.frag.out b/Test/baseResults/hlsl.attributeC11.frag.out index 1b651a3b1c..721bfaf9dc 100644 --- a/Test/baseResults/hlsl.attributeC11.frag.out +++ b/Test/baseResults/hlsl.attributeC11.frag.out @@ -95,7 +95,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 51 Capability Shader @@ -122,23 +122,25 @@ Validation failed Name 48 "pcBuf" MemberName 48(pcBuf) 0 "a" Name 50 "" - Decorate 16(attach) DescriptorSet 0 Decorate 16(attach) Binding 0 + Decorate 16(attach) DescriptorSet 0 Decorate 16(attach) InputAttachmentIndex 4 Decorate 33(input) Location 8 Decorate 36(@entryPointOutput) Location 7 MemberDecorate 41(S) 0 Offset 0 Decorate 42 ArrayStride 8 + Decorate 43(buffer1) BufferBlock MemberDecorate 43(buffer1) 0 NonWritable MemberDecorate 43(buffer1) 0 Offset 0 - Decorate 43(buffer1) BufferBlock - Decorate 45(buffer1) DescriptorSet 0 + Decorate 45(buffer1) NonWritable Decorate 45(buffer1) Binding 1 - Decorate 46(buffer3) DescriptorSet 2 + Decorate 45(buffer1) DescriptorSet 0 + Decorate 46(buffer3) NonWritable Decorate 46(buffer3) Binding 3 + Decorate 46(buffer3) DescriptorSet 2 Decorate 47(ci) SpecId 13 - MemberDecorate 48(pcBuf) 0 Offset 0 Decorate 48(pcBuf) Block + MemberDecorate 48(pcBuf) 0 Offset 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out index 244fe7d9eb..ec3be437cc 100644 --- a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out +++ b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out @@ -56,7 +56,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 28 Capability Shader @@ -72,11 +72,11 @@ gl_FragCoord origin is upper left MemberName 11($Global) 1 "u2" Name 13 "" Name 26 "@entryPointOutput" + Decorate 11($Global) Block MemberDecorate 11($Global) 0 Offset 0 MemberDecorate 11($Global) 1 Offset 16 - Decorate 11($Global) Block - Decorate 13 DescriptorSet 2 Decorate 13 Binding 5 + Decorate 13 DescriptorSet 2 Decorate 26(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.autosampledtextures.frag.out b/Test/baseResults/hlsl.autosampledtextures.frag.out index 559c1306a2..4a54526a08 100644 --- a/Test/baseResults/hlsl.autosampledtextures.frag.out +++ b/Test/baseResults/hlsl.autosampledtextures.frag.out @@ -1,6 +1,6 @@ hlsl.autosampledtextures.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 45 Capability Shader @@ -22,8 +22,8 @@ hlsl.autosampledtextures.frag Name 36 "i.vTextureCoords" Name 40 "@entryPointOutput.vColor" Name 41 "param" - Decorate 23(g_tColor) DescriptorSet 0 Decorate 23(g_tColor) Binding 0 + Decorate 23(g_tColor) DescriptorSet 0 Decorate 36(i.vTextureCoords) Location 0 Decorate 40(@entryPointOutput.vColor) Location 0 2: TypeVoid diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out index d71429cfe4..7b02d252da 100644 --- a/Test/baseResults/hlsl.basic.comp.out +++ b/Test/baseResults/hlsl.basic.comp.out @@ -64,7 +64,7 @@ local_size = (1, 1, 1) 0:? 'gti' ( in 3-component vector of int LocalInvocationID) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 38 Capability Shader diff --git a/Test/baseResults/hlsl.basic.geom.out b/Test/baseResults/hlsl.basic.geom.out index 6dea921566..ef2b5ada81 100644 --- a/Test/baseResults/hlsl.basic.geom.out +++ b/Test/baseResults/hlsl.basic.geom.out @@ -188,7 +188,7 @@ output primitive = line_strip 0:? 'OutputStream.something' (layout( location=1) out int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 68 Capability Geometry diff --git a/Test/baseResults/hlsl.boolConv.vert.out b/Test/baseResults/hlsl.boolConv.vert.out index 6a8e516427..c4e3beb82a 100644 --- a/Test/baseResults/hlsl.boolConv.vert.out +++ b/Test/baseResults/hlsl.boolConv.vert.out @@ -204,7 +204,7 @@ Shader version: 500 0:? '@entryPointOutput' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 99 Capability Shader diff --git a/Test/baseResults/hlsl.buffer-offsets.comp.out b/Test/baseResults/hlsl.buffer-offsets.comp.out new file mode 100644 index 0000000000..c2204a6f46 --- /dev/null +++ b/Test/baseResults/hlsl.buffer-offsets.comp.out @@ -0,0 +1,82 @@ +hlsl.buffer-offsets.comp +Shader version: 500 +local_size = (1, 1, 1) +0:? Sequence +0:12 Function Definition: @main( ( temp void) +0:12 Function Parameters: +0:12 Function Definition: main( ( temp void) +0:12 Function Parameters: +0:? Sequence +0:12 Function Call: @main( ( temp void) +0:? Linker Objects +0:? 'bIterData' (layout( binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 24-element array of float mIntegrationTrafo, temp 3-element array of float mWind, temp uint mIsTurning} @data}) + + +Linked compute stage: + + +Shader version: 500 +local_size = (1, 1, 1) +0:? Sequence +0:12 Function Definition: @main( ( temp void) +0:12 Function Parameters: +0:12 Function Definition: main( ( temp void) +0:12 Function Parameters: +0:? Sequence +0:12 Function Call: @main( ( temp void) +0:? Linker Objects +0:? 'bIterData' (layout( binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 24-element array of float mIntegrationTrafo, temp 3-element array of float mWind, temp uint mIsTurning} @data}) + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 20 + + 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 15 "GfxIterationData" + MemberName 15(GfxIterationData) 0 "mIntegrationTrafo" + MemberName 15(GfxIterationData) 1 "mWind" + MemberName 15(GfxIterationData) 2 "mIsTurning" + Name 17 "bIterData" + MemberName 17(bIterData) 0 "@data" + Name 19 "bIterData" + Decorate 12 ArrayStride 4 + Decorate 14 ArrayStride 4 + MemberDecorate 15(GfxIterationData) 0 Offset 0 + MemberDecorate 15(GfxIterationData) 1 Offset 96 + MemberDecorate 15(GfxIterationData) 2 Offset 108 + Decorate 16 ArrayStride 112 + Decorate 17(bIterData) BufferBlock + MemberDecorate 17(bIterData) 0 NonWritable + MemberDecorate 17(bIterData) 0 Offset 0 + Decorate 19(bIterData) NonWritable + Decorate 19(bIterData) Binding 2 + Decorate 19(bIterData) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 9: TypeFloat 32 + 10: TypeInt 32 0 + 11: 10(int) Constant 24 + 12: TypeArray 9(float) 11 + 13: 10(int) Constant 3 + 14: TypeArray 9(float) 13 +15(GfxIterationData): TypeStruct 12 14 10(int) + 16: TypeRuntimeArray 15(GfxIterationData) + 17(bIterData): TypeStruct 16 + 18: TypePointer Uniform 17(bIterData) + 19(bIterData): 18(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 8: 2 FunctionCall 6(@main() + Return + FunctionEnd + 6(@main(): 2 Function None 3 + 7: Label + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out index 04a783c310..6c746eb14d 100644 --- a/Test/baseResults/hlsl.buffer.frag.out +++ b/Test/baseResults/hlsl.buffer.frag.out @@ -147,7 +147,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 73 Capability Shader @@ -194,24 +194,26 @@ Validation failed Name 65 "input" Name 68 "@entryPointOutput.a" Name 69 "param" - MemberDecorate 24(cbufName2) 0 Offset 0 Decorate 24(cbufName2) Block - Decorate 26 DescriptorSet 0 + MemberDecorate 24(cbufName2) 0 Offset 0 Decorate 26 Binding 3 - MemberDecorate 31(buf1) 0 Offset 0 + Decorate 26 DescriptorSet 0 Decorate 31(buf1) Block - Decorate 33 DescriptorSet 0 + MemberDecorate 31(buf1) 0 Offset 0 Decorate 33 Binding 0 + Decorate 33 DescriptorSet 0 + Decorate 37(buf2) BufferBlock MemberDecorate 37(buf2) 0 NonWritable MemberDecorate 37(buf2) 0 Offset 0 - Decorate 37(buf2) BufferBlock - Decorate 39 DescriptorSet 0 + Decorate 39 NonWritable Decorate 39 Binding 1 + Decorate 39 DescriptorSet 0 + Decorate 43(cbufName) Block MemberDecorate 43(cbufName) 0 Offset 0 MemberDecorate 43(cbufName) 1 Offset 20 - Decorate 43(cbufName) Block - Decorate 45 DescriptorSet 0 Decorate 45 Binding 2 + Decorate 45 DescriptorSet 0 + Decorate 50(tbufName) BufferBlock MemberDecorate 50(tbufName) 0 NonWritable MemberDecorate 50(tbufName) 0 Offset 16 MemberDecorate 50(tbufName) 1 NonWritable @@ -229,24 +231,24 @@ Validation failed MemberDecorate 50(tbufName) 7 NonWritable MemberDecorate 50(tbufName) 7 Offset 128 MemberDecorate 50(tbufName) 8 RowMajor + MemberDecorate 50(tbufName) 8 MatrixStride 16 MemberDecorate 50(tbufName) 8 NonWritable MemberDecorate 50(tbufName) 8 Offset 112 - MemberDecorate 50(tbufName) 8 MatrixStride 16 MemberDecorate 50(tbufName) 9 ColMajor + MemberDecorate 50(tbufName) 9 MatrixStride 16 MemberDecorate 50(tbufName) 9 NonWritable MemberDecorate 50(tbufName) 9 Offset 176 - MemberDecorate 50(tbufName) 9 MatrixStride 16 MemberDecorate 50(tbufName) 10 RowMajor + MemberDecorate 50(tbufName) 10 MatrixStride 16 MemberDecorate 50(tbufName) 10 NonWritable MemberDecorate 50(tbufName) 10 Offset 240 - MemberDecorate 50(tbufName) 10 MatrixStride 16 MemberDecorate 50(tbufName) 11 RowMajor + MemberDecorate 50(tbufName) 11 MatrixStride 16 MemberDecorate 50(tbufName) 11 NonWritable MemberDecorate 50(tbufName) 11 Offset 304 - MemberDecorate 50(tbufName) 11 MatrixStride 16 - Decorate 50(tbufName) BufferBlock - Decorate 52 DescriptorSet 0 + Decorate 52 NonWritable Decorate 52 Binding 8 + Decorate 52 DescriptorSet 0 Decorate 65(input) BuiltIn FragCoord Decorate 68(@entryPointOutput.a) Location 0 2: TypeVoid diff --git a/Test/baseResults/hlsl.buffer_ref_parameter.comp.out b/Test/baseResults/hlsl.buffer_ref_parameter.comp.out new file mode 100644 index 0000000000..8c8cde0209 --- /dev/null +++ b/Test/baseResults/hlsl.buffer_ref_parameter.comp.out @@ -0,0 +1,391 @@ +hlsl.buffer_ref_parameter.comp +Shader version: 500 +local_size = (64, 1, 1) +0:? Sequence +0:4 Function Definition: pull_position(block--u1[0]1;u1; ( temp 3-component vector of float) +0:4 Function Parameters: +0:4 'buffer_position' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:4 'vertex_id' ( in uint) +0:? Sequence +0:5 Branch: Return with expression +0:? intBitsToFloat ( temp 3-component vector of float) +0:? Sequence +0:5 move second child to first child ( temp int) +0:5 'byteAddrTemp' ( temp int) +0:5 right-shift ( temp int) +0:5 component-wise multiply ( temp uint) +0:5 component-wise multiply ( temp uint) +0:5 'vertex_id' ( in uint) +0:5 Constant: +0:5 3 (const uint) +0:5 Constant: +0:5 4 (const uint) +0:5 Constant: +0:5 2 (const int) +0:? Construct vec3 ( temp 3-component vector of uint) +0:5 indirect index ( temp uint) +0:5 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:5 'buffer_position' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:5 Constant: +0:5 0 (const uint) +0:5 'byteAddrTemp' ( temp int) +0:5 indirect index ( temp uint) +0:5 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:5 'buffer_position' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:5 Constant: +0:5 0 (const uint) +0:5 add ( temp int) +0:5 'byteAddrTemp' ( temp int) +0:5 Constant: +0:5 1 (const int) +0:5 indirect index ( temp uint) +0:5 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:5 'buffer_position' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:5 Constant: +0:5 0 (const uint) +0:5 add ( temp int) +0:5 'byteAddrTemp' ( temp int) +0:5 Constant: +0:5 2 (const int) +0:9 Function Definition: @main(u1; ( temp void) +0:9 Function Parameters: +0:9 'gi' ( in uint) +0:? Sequence +0:10 Sequence +0:10 move second child to first child ( temp 3-component vector of float) +0:10 'position_ms' ( temp 3-component vector of float) +0:10 Function Call: pull_position(block--u1[0]1;u1; ( temp 3-component vector of float) +0:10 'buffer_position_ms' (layout( set=0 binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:10 'gi' ( in uint) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 2 (const int) +0:12 move second child to first child ( temp uint) +0:12 indirect index (layout( row_major std430) buffer uint) +0:12 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:12 'r' (layout( set=0 binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 direct index ( temp uint) +0:12 floatBitsToUint ( temp 3-component vector of uint) +0:12 'position_ms' ( temp 3-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:12 move second child to first child ( temp uint) +0:12 indirect index (layout( row_major std430) buffer uint) +0:12 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:12 'r' (layout( set=0 binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 direct index ( temp uint) +0:12 floatBitsToUint ( temp 3-component vector of uint) +0:12 'position_ms' ( temp 3-component vector of float) +0:12 Constant: +0:12 1 (const int) +0:12 move second child to first child ( temp uint) +0:12 indirect index (layout( row_major std430) buffer uint) +0:12 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:12 'r' (layout( set=0 binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 direct index ( temp uint) +0:12 floatBitsToUint ( temp 3-component vector of uint) +0:12 'position_ms' ( temp 3-component vector of float) +0:12 Constant: +0:12 2 (const int) +0:9 Function Definition: main( ( temp void) +0:9 Function Parameters: +0:? Sequence +0:9 move second child to first child ( temp uint) +0:? 'gi' ( temp uint) +0:? 'gi' ( in uint LocalInvocationIndex) +0:9 Function Call: @main(u1; ( temp void) +0:? 'gi' ( temp uint) +0:? Linker Objects +0:? 'buffer_position_ms' (layout( set=0 binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:? 'r' (layout( set=0 binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:? 'gi' ( in uint LocalInvocationIndex) + + +Linked compute stage: + + +Shader version: 500 +local_size = (64, 1, 1) +0:? Sequence +0:4 Function Definition: pull_position(block--u1[0]1;u1; ( temp 3-component vector of float) +0:4 Function Parameters: +0:4 'buffer_position' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:4 'vertex_id' ( in uint) +0:? Sequence +0:5 Branch: Return with expression +0:? intBitsToFloat ( temp 3-component vector of float) +0:? Sequence +0:5 move second child to first child ( temp int) +0:5 'byteAddrTemp' ( temp int) +0:5 right-shift ( temp int) +0:5 component-wise multiply ( temp uint) +0:5 component-wise multiply ( temp uint) +0:5 'vertex_id' ( in uint) +0:5 Constant: +0:5 3 (const uint) +0:5 Constant: +0:5 4 (const uint) +0:5 Constant: +0:5 2 (const int) +0:? Construct vec3 ( temp 3-component vector of uint) +0:5 indirect index ( temp uint) +0:5 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:5 'buffer_position' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:5 Constant: +0:5 0 (const uint) +0:5 'byteAddrTemp' ( temp int) +0:5 indirect index ( temp uint) +0:5 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:5 'buffer_position' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:5 Constant: +0:5 0 (const uint) +0:5 add ( temp int) +0:5 'byteAddrTemp' ( temp int) +0:5 Constant: +0:5 1 (const int) +0:5 indirect index ( temp uint) +0:5 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:5 'buffer_position' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:5 Constant: +0:5 0 (const uint) +0:5 add ( temp int) +0:5 'byteAddrTemp' ( temp int) +0:5 Constant: +0:5 2 (const int) +0:9 Function Definition: @main(u1; ( temp void) +0:9 Function Parameters: +0:9 'gi' ( in uint) +0:? Sequence +0:10 Sequence +0:10 move second child to first child ( temp 3-component vector of float) +0:10 'position_ms' ( temp 3-component vector of float) +0:10 Function Call: pull_position(block--u1[0]1;u1; ( temp 3-component vector of float) +0:10 'buffer_position_ms' (layout( set=0 binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:10 'gi' ( in uint) +0:? Sequence +0:12 move second child to first child ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 right-shift ( temp int) +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 2 (const int) +0:12 move second child to first child ( temp uint) +0:12 indirect index (layout( row_major std430) buffer uint) +0:12 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:12 'r' (layout( set=0 binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 'byteAddrTemp' ( temp int) +0:12 direct index ( temp uint) +0:12 floatBitsToUint ( temp 3-component vector of uint) +0:12 'position_ms' ( temp 3-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:12 move second child to first child ( temp uint) +0:12 indirect index (layout( row_major std430) buffer uint) +0:12 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:12 'r' (layout( set=0 binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 1 (const int) +0:12 direct index ( temp uint) +0:12 floatBitsToUint ( temp 3-component vector of uint) +0:12 'position_ms' ( temp 3-component vector of float) +0:12 Constant: +0:12 1 (const int) +0:12 move second child to first child ( temp uint) +0:12 indirect index (layout( row_major std430) buffer uint) +0:12 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:12 'r' (layout( set=0 binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:12 Constant: +0:12 0 (const uint) +0:12 add ( temp int) +0:12 'byteAddrTemp' ( temp int) +0:12 Constant: +0:12 2 (const int) +0:12 direct index ( temp uint) +0:12 floatBitsToUint ( temp 3-component vector of uint) +0:12 'position_ms' ( temp 3-component vector of float) +0:12 Constant: +0:12 2 (const int) +0:9 Function Definition: main( ( temp void) +0:9 Function Parameters: +0:? Sequence +0:9 move second child to first child ( temp uint) +0:? 'gi' ( temp uint) +0:? 'gi' ( in uint LocalInvocationIndex) +0:9 Function Call: @main(u1; ( temp void) +0:? 'gi' ( temp uint) +0:? Linker Objects +0:? 'buffer_position_ms' (layout( set=0 binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:? 'r' (layout( set=0 binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:? 'gi' ( in uint LocalInvocationIndex) + +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 90 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 53 62 85 + ExecutionMode 4 LocalSize 64 1 1 + Source HLSL 500 + Name 4 "main" + Name 8 "" + MemberName 8 0 "@data" + Name 16 "pull_position(block--u1[0]1;u1;" + Name 14 "buffer_position" + Name 15 "vertex_id" + Name 20 "@main(u1;" + Name 19 "gi" + Name 24 "byteAddrTemp" + Name 52 "position_ms" + Name 53 "buffer_position_ms" + Name 54 "param" + Name 57 "byteAddrTemp" + Name 60 "r" + MemberName 60(r) 0 "@data" + Name 62 "r" + Name 83 "gi" + Name 85 "gi" + Name 87 "param" + Decorate 7 ArrayStride 4 + Decorate 8 Block + MemberDecorate 8 0 NonWritable + MemberDecorate 8 0 Offset 0 + Decorate 14(buffer_position) NonWritable + Decorate 53(buffer_position_ms) NonWritable + Decorate 53(buffer_position_ms) Binding 0 + Decorate 53(buffer_position_ms) DescriptorSet 0 + Decorate 59 ArrayStride 4 + Decorate 60(r) Block + MemberDecorate 60(r) 0 Offset 0 + Decorate 62(r) Binding 1 + Decorate 62(r) DescriptorSet 0 + Decorate 85(gi) BuiltIn LocalInvocationIndex + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeRuntimeArray 6(int) + 8: TypeStruct 7 + 9: TypePointer StorageBuffer 8(struct) + 10: TypePointer Function 6(int) + 11: TypeFloat 32 + 12: TypeVector 11(float) 3 + 13: TypeFunction 12(fvec3) 9(ptr) 10(ptr) + 18: TypeFunction 2 10(ptr) + 22: TypeInt 32 1 + 23: TypePointer Function 22(int) + 26: 6(int) Constant 3 + 28: 6(int) Constant 4 + 30: 22(int) Constant 2 + 32: 22(int) Constant 0 + 34: TypePointer StorageBuffer 6(int) + 38: 22(int) Constant 1 + 46: TypeVector 6(int) 3 + 51: TypePointer Function 12(fvec3) +53(buffer_position_ms): 9(ptr) Variable StorageBuffer + 59: TypeRuntimeArray 6(int) + 60(r): TypeStruct 59 + 61: TypePointer StorageBuffer 60(r) + 62(r): 61(ptr) Variable StorageBuffer + 66: 6(int) Constant 0 + 73: 6(int) Constant 1 + 80: 6(int) Constant 2 + 84: TypePointer Input 6(int) + 85(gi): 84(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 83(gi): 10(ptr) Variable Function + 87(param): 10(ptr) Variable Function + 86: 6(int) Load 85(gi) + Store 83(gi) 86 + 88: 6(int) Load 83(gi) + Store 87(param) 88 + 89: 2 FunctionCall 20(@main(u1;) 87(param) + Return + FunctionEnd +16(pull_position(block--u1[0]1;u1;): 12(fvec3) Function None 13 +14(buffer_position): 9(ptr) FunctionParameter + 15(vertex_id): 10(ptr) FunctionParameter + 17: Label +24(byteAddrTemp): 23(ptr) Variable Function + 25: 6(int) Load 15(vertex_id) + 27: 6(int) IMul 25 26 + 29: 6(int) IMul 27 28 + 31: 22(int) ShiftRightLogical 29 30 + Store 24(byteAddrTemp) 31 + 33: 22(int) Load 24(byteAddrTemp) + 35: 34(ptr) AccessChain 14(buffer_position) 32 33 + 36: 6(int) Load 35 + 37: 22(int) Load 24(byteAddrTemp) + 39: 22(int) IAdd 37 38 + 40: 34(ptr) AccessChain 14(buffer_position) 32 39 + 41: 6(int) Load 40 + 42: 22(int) Load 24(byteAddrTemp) + 43: 22(int) IAdd 42 30 + 44: 34(ptr) AccessChain 14(buffer_position) 32 43 + 45: 6(int) Load 44 + 47: 46(ivec3) CompositeConstruct 36 41 45 + 48: 12(fvec3) Bitcast 47 + ReturnValue 48 + FunctionEnd + 20(@main(u1;): 2 Function None 18 + 19(gi): 10(ptr) FunctionParameter + 21: Label + 52(position_ms): 51(ptr) Variable Function + 54(param): 10(ptr) Variable Function +57(byteAddrTemp): 23(ptr) Variable Function + 55: 6(int) Load 19(gi) + Store 54(param) 55 + 56: 12(fvec3) FunctionCall 16(pull_position(block--u1[0]1;u1;) 53(buffer_position_ms) 54(param) + Store 52(position_ms) 56 + 58: 22(int) ShiftRightArithmetic 32 30 + Store 57(byteAddrTemp) 58 + 63: 22(int) Load 57(byteAddrTemp) + 64: 12(fvec3) Load 52(position_ms) + 65: 46(ivec3) Bitcast 64 + 67: 6(int) CompositeExtract 65 0 + 68: 34(ptr) AccessChain 62(r) 32 63 + Store 68 67 + 69: 22(int) Load 57(byteAddrTemp) + 70: 22(int) IAdd 69 38 + 71: 12(fvec3) Load 52(position_ms) + 72: 46(ivec3) Bitcast 71 + 74: 6(int) CompositeExtract 72 1 + 75: 34(ptr) AccessChain 62(r) 32 70 + Store 75 74 + 76: 22(int) Load 57(byteAddrTemp) + 77: 22(int) IAdd 76 30 + 78: 12(fvec3) Load 52(position_ms) + 79: 46(ivec3) Bitcast 78 + 81: 6(int) CompositeExtract 79 2 + 82: 34(ptr) AccessChain 62(r) 32 77 + Store 82 81 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out index d4367a0956..14ed71e2f9 100644 --- a/Test/baseResults/hlsl.calculatelod.dx10.frag.out +++ b/Test/baseResults/hlsl.calculatelod.dx10.frag.out @@ -358,7 +358,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 148 Capability Shader @@ -400,30 +400,30 @@ using depth_any Name 140 "@entryPointOutput.Color" Name 144 "@entryPointOutput.Depth" Name 147 "g_tTex1df4" - Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 16(g_tTex1df4a) Binding 1 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 33(g_tTex1di4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 33(g_tTex1di4a) Binding 2 - Decorate 45(g_tTex1du4a) DescriptorSet 0 + Decorate 33(g_tTex1di4a) DescriptorSet 0 Decorate 45(g_tTex1du4a) Binding 3 - Decorate 56(g_tTex2df4a) DescriptorSet 0 + Decorate 45(g_tTex1du4a) DescriptorSet 0 Decorate 56(g_tTex2df4a) Binding 4 - Decorate 67(g_tTex2di4a) DescriptorSet 0 + Decorate 56(g_tTex2df4a) DescriptorSet 0 Decorate 67(g_tTex2di4a) Binding 5 - Decorate 79(g_tTex2du4a) DescriptorSet 0 + Decorate 67(g_tTex2di4a) DescriptorSet 0 Decorate 79(g_tTex2du4a) Binding 6 - Decorate 92(g_tTexcdf4a) DescriptorSet 0 + Decorate 79(g_tTex2du4a) DescriptorSet 0 Decorate 92(g_tTexcdf4a) Binding 7 - Decorate 104(g_tTexcdi4a) DescriptorSet 0 + Decorate 92(g_tTexcdf4a) DescriptorSet 0 Decorate 104(g_tTexcdi4a) Binding 8 - Decorate 115(g_tTexcdu4a) DescriptorSet 0 + Decorate 104(g_tTexcdi4a) DescriptorSet 0 Decorate 115(g_tTexcdu4a) Binding 9 + Decorate 115(g_tTexcdu4a) DescriptorSet 0 Decorate 140(@entryPointOutput.Color) Location 0 Decorate 144(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 147(g_tTex1df4) DescriptorSet 0 Decorate 147(g_tTex1df4) Binding 0 + Decorate 147(g_tTex1df4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out index 8a4be02d70..c052200a82 100644 --- a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out +++ b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out @@ -358,7 +358,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 148 Capability Shader @@ -400,30 +400,30 @@ using depth_any Name 140 "@entryPointOutput.Color" Name 144 "@entryPointOutput.Depth" Name 147 "g_tTex1df4" - Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 16(g_tTex1df4a) Binding 1 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 33(g_tTex1di4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 33(g_tTex1di4a) Binding 2 - Decorate 45(g_tTex1du4a) DescriptorSet 0 + Decorate 33(g_tTex1di4a) DescriptorSet 0 Decorate 45(g_tTex1du4a) Binding 3 - Decorate 56(g_tTex2df4a) DescriptorSet 0 + Decorate 45(g_tTex1du4a) DescriptorSet 0 Decorate 56(g_tTex2df4a) Binding 4 - Decorate 67(g_tTex2di4a) DescriptorSet 0 + Decorate 56(g_tTex2df4a) DescriptorSet 0 Decorate 67(g_tTex2di4a) Binding 5 - Decorate 79(g_tTex2du4a) DescriptorSet 0 + Decorate 67(g_tTex2di4a) DescriptorSet 0 Decorate 79(g_tTex2du4a) Binding 6 - Decorate 92(g_tTexcdf4a) DescriptorSet 0 + Decorate 79(g_tTex2du4a) DescriptorSet 0 Decorate 92(g_tTexcdf4a) Binding 7 - Decorate 104(g_tTexcdi4a) DescriptorSet 0 + Decorate 92(g_tTexcdf4a) DescriptorSet 0 Decorate 104(g_tTexcdi4a) Binding 8 - Decorate 115(g_tTexcdu4a) DescriptorSet 0 + Decorate 104(g_tTexcdi4a) DescriptorSet 0 Decorate 115(g_tTexcdu4a) Binding 9 + Decorate 115(g_tTexcdu4a) DescriptorSet 0 Decorate 140(@entryPointOutput.Color) Location 0 Decorate 144(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 147(g_tTex1df4) DescriptorSet 0 Decorate 147(g_tTex1df4) Binding 0 + Decorate 147(g_tTex1df4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.cast.frag.out b/Test/baseResults/hlsl.cast.frag.out index 3efbd5287f..ef3957c024 100644 --- a/Test/baseResults/hlsl.cast.frag.out +++ b/Test/baseResults/hlsl.cast.frag.out @@ -70,7 +70,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 34 Capability Shader diff --git a/Test/baseResults/hlsl.cbuffer-identifier.vert.out b/Test/baseResults/hlsl.cbuffer-identifier.vert.out index 93f35d628c..3fa3d5d252 100644 --- a/Test/baseResults/hlsl.cbuffer-identifier.vert.out +++ b/Test/baseResults/hlsl.cbuffer-identifier.vert.out @@ -250,7 +250,7 @@ Shader version: 500 0:? 'input.Norm' (layout( location=1) in 3-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 93 Capability Shader @@ -281,18 +281,18 @@ Shader version: 500 Name 82 "param" Name 86 "@entryPointOutput.Pos" Name 90 "@entryPointOutput.Norm" + Decorate 28(C) Block MemberDecorate 28(C) 0 RowMajor - MemberDecorate 28(C) 0 Offset 0 MemberDecorate 28(C) 0 MatrixStride 16 + MemberDecorate 28(C) 0 Offset 0 MemberDecorate 28(C) 1 RowMajor - MemberDecorate 28(C) 1 Offset 64 MemberDecorate 28(C) 1 MatrixStride 16 + MemberDecorate 28(C) 1 Offset 64 MemberDecorate 28(C) 2 RowMajor - MemberDecorate 28(C) 2 Offset 128 MemberDecorate 28(C) 2 MatrixStride 16 - Decorate 28(C) Block - Decorate 30 DescriptorSet 0 + MemberDecorate 28(C) 2 Offset 128 Decorate 30 Binding 0 + Decorate 30 DescriptorSet 0 Decorate 74(input.Pos) Location 0 Decorate 78(input.Norm) Location 1 Decorate 86(@entryPointOutput.Pos) BuiltIn Position diff --git a/Test/baseResults/hlsl.cbuffer-offsets.comp.out b/Test/baseResults/hlsl.cbuffer-offsets.comp.out new file mode 100644 index 0000000000..793d5b913e --- /dev/null +++ b/Test/baseResults/hlsl.cbuffer-offsets.comp.out @@ -0,0 +1,159 @@ +hlsl.cbuffer-offsets.comp +Shader version: 500 +local_size = (1, 1, 1) +0:? Sequence +0:43 Function Definition: @main( ( temp void) +0:43 Function Parameters: +0:43 Function Definition: main( ( temp void) +0:43 Function Parameters: +0:? Sequence +0:43 Function Call: @main( ( temp void) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float f1, layout( row_major std140) uniform 3-element array of 3-component vector of float f3a3, layout( row_major std140) uniform float f2, layout( row_major std140) uniform float f3, layout( row_major std140) uniform 1X1 matrix of float m11, layout( row_major std140) uniform 1X2 matrix of float m12, layout( row_major std140) uniform 2X1 matrix of float m21, layout( row_major std140) uniform 2X2 matrix of float m22, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform float f4, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform float f5, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform float f6, layout( column_major std140) uniform 1X1 matrix of float rm11, layout( column_major std140) uniform 1X2 matrix of float rm12, layout( column_major std140) uniform 2X1 matrix of float rm21, layout( column_major std140) uniform 2X2 matrix of float rm22, layout( column_major std140) uniform 3X3 matrix of float rm33, layout( row_major std140) uniform float f7, layout( column_major std140) uniform 3X4 matrix of float rm34, layout( row_major std140) uniform float f8, layout( column_major std140) uniform 4X3 matrix of float rm43, layout( row_major std140) uniform float f9, layout( row_major std140) uniform 3-element array of float f1a3, layout( row_major std140) uniform float f10}) + + +Linked compute stage: + + +Shader version: 500 +local_size = (1, 1, 1) +0:? Sequence +0:43 Function Definition: @main( ( temp void) +0:43 Function Parameters: +0:43 Function Definition: main( ( temp void) +0:43 Function Parameters: +0:? Sequence +0:43 Function Call: @main( ( temp void) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float f1, layout( row_major std140) uniform 3-element array of 3-component vector of float f3a3, layout( row_major std140) uniform float f2, layout( row_major std140) uniform float f3, layout( row_major std140) uniform 1X1 matrix of float m11, layout( row_major std140) uniform 1X2 matrix of float m12, layout( row_major std140) uniform 2X1 matrix of float m21, layout( row_major std140) uniform 2X2 matrix of float m22, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform float f4, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform float f5, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform float f6, layout( column_major std140) uniform 1X1 matrix of float rm11, layout( column_major std140) uniform 1X2 matrix of float rm12, layout( column_major std140) uniform 2X1 matrix of float rm21, layout( column_major std140) uniform 2X2 matrix of float rm22, layout( column_major std140) uniform 3X3 matrix of float rm33, layout( row_major std140) uniform float f7, layout( column_major std140) uniform 3X4 matrix of float rm34, layout( row_major std140) uniform float f8, layout( column_major std140) uniform 4X3 matrix of float rm43, layout( row_major std140) uniform float f9, layout( row_major std140) uniform 3-element array of float f1a3, layout( row_major std140) uniform float f10}) + +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 28 + + 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 25 "CB" + MemberName 25(CB) 0 "f1" + MemberName 25(CB) 1 "f3a3" + MemberName 25(CB) 2 "f2" + MemberName 25(CB) 3 "f3" + MemberName 25(CB) 4 "m11" + MemberName 25(CB) 5 "m12" + MemberName 25(CB) 6 "m21" + MemberName 25(CB) 7 "m22" + MemberName 25(CB) 8 "m33" + MemberName 25(CB) 9 "f4" + MemberName 25(CB) 10 "m34" + MemberName 25(CB) 11 "f5" + MemberName 25(CB) 12 "m43" + MemberName 25(CB) 13 "f6" + MemberName 25(CB) 14 "rm11" + MemberName 25(CB) 15 "rm12" + MemberName 25(CB) 16 "rm21" + MemberName 25(CB) 17 "rm22" + MemberName 25(CB) 18 "rm33" + MemberName 25(CB) 19 "f7" + MemberName 25(CB) 20 "rm34" + MemberName 25(CB) 21 "f8" + MemberName 25(CB) 22 "rm43" + MemberName 25(CB) 23 "f9" + MemberName 25(CB) 24 "f1a3" + MemberName 25(CB) 25 "f10" + Name 27 "" + Decorate 13 ArrayStride 16 + Decorate 24 ArrayStride 16 + Decorate 25(CB) Block + MemberDecorate 25(CB) 0 Offset 0 + MemberDecorate 25(CB) 1 Offset 16 + MemberDecorate 25(CB) 2 Offset 60 + MemberDecorate 25(CB) 3 Offset 64 + MemberDecorate 25(CB) 4 RowMajor + MemberDecorate 25(CB) 4 MatrixStride 16 + MemberDecorate 25(CB) 4 Offset 68 + MemberDecorate 25(CB) 5 RowMajor + MemberDecorate 25(CB) 5 MatrixStride 16 + MemberDecorate 25(CB) 5 Offset 80 + MemberDecorate 25(CB) 6 RowMajor + MemberDecorate 25(CB) 6 MatrixStride 16 + MemberDecorate 25(CB) 6 Offset 100 + MemberDecorate 25(CB) 7 RowMajor + MemberDecorate 25(CB) 7 MatrixStride 16 + MemberDecorate 25(CB) 7 Offset 112 + MemberDecorate 25(CB) 8 RowMajor + MemberDecorate 25(CB) 8 MatrixStride 16 + MemberDecorate 25(CB) 8 Offset 144 + MemberDecorate 25(CB) 9 Offset 188 + MemberDecorate 25(CB) 10 RowMajor + MemberDecorate 25(CB) 10 MatrixStride 16 + MemberDecorate 25(CB) 10 Offset 192 + MemberDecorate 25(CB) 11 Offset 252 + MemberDecorate 25(CB) 12 RowMajor + MemberDecorate 25(CB) 12 MatrixStride 16 + MemberDecorate 25(CB) 12 Offset 256 + MemberDecorate 25(CB) 13 Offset 304 + MemberDecorate 25(CB) 14 ColMajor + MemberDecorate 25(CB) 14 MatrixStride 16 + MemberDecorate 25(CB) 14 Offset 308 + MemberDecorate 25(CB) 15 ColMajor + MemberDecorate 25(CB) 15 MatrixStride 16 + MemberDecorate 25(CB) 15 Offset 312 + MemberDecorate 25(CB) 16 ColMajor + MemberDecorate 25(CB) 16 MatrixStride 16 + MemberDecorate 25(CB) 16 Offset 320 + MemberDecorate 25(CB) 17 ColMajor + MemberDecorate 25(CB) 17 MatrixStride 16 + MemberDecorate 25(CB) 17 Offset 352 + MemberDecorate 25(CB) 18 ColMajor + MemberDecorate 25(CB) 18 MatrixStride 16 + MemberDecorate 25(CB) 18 Offset 384 + MemberDecorate 25(CB) 19 Offset 428 + MemberDecorate 25(CB) 20 ColMajor + MemberDecorate 25(CB) 20 MatrixStride 16 + MemberDecorate 25(CB) 20 Offset 432 + MemberDecorate 25(CB) 21 Offset 480 + MemberDecorate 25(CB) 22 ColMajor + MemberDecorate 25(CB) 22 MatrixStride 16 + MemberDecorate 25(CB) 22 Offset 496 + MemberDecorate 25(CB) 23 Offset 556 + MemberDecorate 25(CB) 24 Offset 560 + MemberDecorate 25(CB) 25 Offset 596 + Decorate 27 Binding 0 + Decorate 27 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 9: TypeFloat 32 + 10: TypeVector 9(float) 3 + 11: TypeInt 32 0 + 12: 11(int) Constant 3 + 13: TypeArray 10(fvec3) 12 + 14: TypeVector 9(float) 1 + 15: TypeMatrix 14(fvec) 1 + 16: TypeVector 9(float) 2 + 17: TypeMatrix 16(fvec2) 1 + 18: TypeMatrix 14(fvec) 2 + 19: TypeMatrix 16(fvec2) 2 + 20: TypeMatrix 10(fvec3) 3 + 21: TypeVector 9(float) 4 + 22: TypeMatrix 21(fvec4) 3 + 23: TypeMatrix 10(fvec3) 4 + 24: TypeArray 9(float) 12 + 25(CB): TypeStruct 9(float) 13 9(float) 9(float) 15 17 18 19 20 9(float) 22 9(float) 23 9(float) 15 17 18 19 20 9(float) 22 9(float) 23 9(float) 24 9(float) + 26: TypePointer Uniform 25(CB) + 27: 26(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 8: 2 FunctionCall 6(@main() + Return + FunctionEnd + 6(@main(): 2 Function None 3 + 7: Label + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.charLit.vert.out b/Test/baseResults/hlsl.charLit.vert.out index 2151d43ce1..6bde478830 100644 --- a/Test/baseResults/hlsl.charLit.vert.out +++ b/Test/baseResults/hlsl.charLit.vert.out @@ -146,7 +146,7 @@ Shader version: 500 0:? '@entryPointOutput' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 58 Capability Shader diff --git a/Test/baseResults/hlsl.clip.frag.out b/Test/baseResults/hlsl.clip.frag.out index 691b20ba8b..32cbb8bb8c 100644 --- a/Test/baseResults/hlsl.clip.frag.out +++ b/Test/baseResults/hlsl.clip.frag.out @@ -74,7 +74,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-1.frag.out b/Test/baseResults/hlsl.clipdistance-1.frag.out index 0cfee39c83..2a8d8c9e01 100644 --- a/Test/baseResults/hlsl.clipdistance-1.frag.out +++ b/Test/baseResults/hlsl.clipdistance-1.frag.out @@ -98,7 +98,7 @@ gl_FragCoord origin is upper left 0:? 'cull' ( in 1-element array of float CullDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 53 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-1.geom.out b/Test/baseResults/hlsl.clipdistance-1.geom.out index a9a0b82a06..744b192ab0 100644 --- a/Test/baseResults/hlsl.clipdistance-1.geom.out +++ b/Test/baseResults/hlsl.clipdistance-1.geom.out @@ -550,7 +550,7 @@ output primitive = line_strip 0:? 'OutputStream.clip' ( out 2-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 118 Capability Geometry diff --git a/Test/baseResults/hlsl.clipdistance-1.vert.out b/Test/baseResults/hlsl.clipdistance-1.vert.out index 41478e161e..38d956fd3e 100644 --- a/Test/baseResults/hlsl.clipdistance-1.vert.out +++ b/Test/baseResults/hlsl.clipdistance-1.vert.out @@ -108,7 +108,7 @@ Shader version: 500 0:? 'cull' ( out 1-element array of float CullDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 46 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-2.frag.out b/Test/baseResults/hlsl.clipdistance-2.frag.out index 15a9512ad6..6725955abf 100644 --- a/Test/baseResults/hlsl.clipdistance-2.frag.out +++ b/Test/baseResults/hlsl.clipdistance-2.frag.out @@ -290,7 +290,7 @@ gl_FragCoord origin is upper left 0:? 'cull' ( in 4-element array of float CullDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 84 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-2.geom.out b/Test/baseResults/hlsl.clipdistance-2.geom.out index bb8d1373e3..11d5b67dd2 100644 --- a/Test/baseResults/hlsl.clipdistance-2.geom.out +++ b/Test/baseResults/hlsl.clipdistance-2.geom.out @@ -724,7 +724,7 @@ output primitive = line_strip 0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 128 Capability Geometry diff --git a/Test/baseResults/hlsl.clipdistance-2.vert.out b/Test/baseResults/hlsl.clipdistance-2.vert.out index 5ccbb1e92e..3778ddd5ad 100644 --- a/Test/baseResults/hlsl.clipdistance-2.vert.out +++ b/Test/baseResults/hlsl.clipdistance-2.vert.out @@ -420,7 +420,7 @@ Shader version: 500 0:? 'cull' ( out 4-element array of float CullDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 89 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-3.frag.out b/Test/baseResults/hlsl.clipdistance-3.frag.out index 1d9f54e8f9..76525ddf85 100644 --- a/Test/baseResults/hlsl.clipdistance-3.frag.out +++ b/Test/baseResults/hlsl.clipdistance-3.frag.out @@ -98,7 +98,7 @@ gl_FragCoord origin is upper left 0:? 'cull' ( in 2-element array of float CullDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 53 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-3.geom.out b/Test/baseResults/hlsl.clipdistance-3.geom.out index 5fa7df7202..42ce516a31 100644 --- a/Test/baseResults/hlsl.clipdistance-3.geom.out +++ b/Test/baseResults/hlsl.clipdistance-3.geom.out @@ -630,7 +630,7 @@ output primitive = line_strip 0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 127 Capability Geometry diff --git a/Test/baseResults/hlsl.clipdistance-3.vert.out b/Test/baseResults/hlsl.clipdistance-3.vert.out index 1882a5a3a2..9cebfc5b5e 100644 --- a/Test/baseResults/hlsl.clipdistance-3.vert.out +++ b/Test/baseResults/hlsl.clipdistance-3.vert.out @@ -136,7 +136,7 @@ Shader version: 500 0:? 'cull' ( out 2-element array of float CullDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 51 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-4.frag.out b/Test/baseResults/hlsl.clipdistance-4.frag.out index 5cef56444b..f801eb2c0d 100644 --- a/Test/baseResults/hlsl.clipdistance-4.frag.out +++ b/Test/baseResults/hlsl.clipdistance-4.frag.out @@ -174,7 +174,7 @@ gl_FragCoord origin is upper left 0:? 'v.ClipRect' ( in 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 57 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-4.geom.out b/Test/baseResults/hlsl.clipdistance-4.geom.out index e94230169f..8dbe89ad2f 100644 --- a/Test/baseResults/hlsl.clipdistance-4.geom.out +++ b/Test/baseResults/hlsl.clipdistance-4.geom.out @@ -612,7 +612,7 @@ output primitive = line_strip 0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 130 Capability Geometry diff --git a/Test/baseResults/hlsl.clipdistance-4.vert.out b/Test/baseResults/hlsl.clipdistance-4.vert.out index 8e8fe6da28..4c291a1f50 100644 --- a/Test/baseResults/hlsl.clipdistance-4.vert.out +++ b/Test/baseResults/hlsl.clipdistance-4.vert.out @@ -270,7 +270,7 @@ Shader version: 500 0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 72 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-5.frag.out b/Test/baseResults/hlsl.clipdistance-5.frag.out index ab366e54af..9d9042d210 100644 --- a/Test/baseResults/hlsl.clipdistance-5.frag.out +++ b/Test/baseResults/hlsl.clipdistance-5.frag.out @@ -232,7 +232,7 @@ gl_FragCoord origin is upper left 0:? 'v.ClipRect' ( in 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 62 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-5.vert.out b/Test/baseResults/hlsl.clipdistance-5.vert.out index 6dbe0a669e..deb6ad884a 100644 --- a/Test/baseResults/hlsl.clipdistance-5.vert.out +++ b/Test/baseResults/hlsl.clipdistance-5.vert.out @@ -318,7 +318,7 @@ Shader version: 500 0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 73 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-6.frag.out b/Test/baseResults/hlsl.clipdistance-6.frag.out index 770f990b8e..99798d320c 100644 --- a/Test/baseResults/hlsl.clipdistance-6.frag.out +++ b/Test/baseResults/hlsl.clipdistance-6.frag.out @@ -282,7 +282,7 @@ gl_FragCoord origin is upper left 0:? 'v.clip1' ( in 8-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 79 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-6.vert.out b/Test/baseResults/hlsl.clipdistance-6.vert.out index 1adbdfcadc..389f867111 100644 --- a/Test/baseResults/hlsl.clipdistance-6.vert.out +++ b/Test/baseResults/hlsl.clipdistance-6.vert.out @@ -428,7 +428,7 @@ Shader version: 500 0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 86 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-7.frag.out b/Test/baseResults/hlsl.clipdistance-7.frag.out index 9f5e5193d4..9b8c655ded 100644 --- a/Test/baseResults/hlsl.clipdistance-7.frag.out +++ b/Test/baseResults/hlsl.clipdistance-7.frag.out @@ -270,7 +270,7 @@ gl_FragCoord origin is upper left 0:? 'v.clip1' ( in 8-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 78 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-7.vert.out b/Test/baseResults/hlsl.clipdistance-7.vert.out index 13bc844b0b..55a16c11b1 100644 --- a/Test/baseResults/hlsl.clipdistance-7.vert.out +++ b/Test/baseResults/hlsl.clipdistance-7.vert.out @@ -384,7 +384,7 @@ Shader version: 500 0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 81 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-8.frag.out b/Test/baseResults/hlsl.clipdistance-8.frag.out index 8f2a9c27fb..ed82cfdef0 100644 --- a/Test/baseResults/hlsl.clipdistance-8.frag.out +++ b/Test/baseResults/hlsl.clipdistance-8.frag.out @@ -186,7 +186,7 @@ gl_FragCoord origin is upper left 0:? 'v.clip1' ( in 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 65 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-8.vert.out b/Test/baseResults/hlsl.clipdistance-8.vert.out index fbc2c2a5ad..9df6618988 100644 --- a/Test/baseResults/hlsl.clipdistance-8.vert.out +++ b/Test/baseResults/hlsl.clipdistance-8.vert.out @@ -240,7 +240,7 @@ Shader version: 500 0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 62 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-9.frag.out b/Test/baseResults/hlsl.clipdistance-9.frag.out index b42727f822..9c62b34f54 100644 --- a/Test/baseResults/hlsl.clipdistance-9.frag.out +++ b/Test/baseResults/hlsl.clipdistance-9.frag.out @@ -144,7 +144,7 @@ gl_FragCoord origin is upper left 0:? 'clip0' ( in 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 68 Capability Shader diff --git a/Test/baseResults/hlsl.clipdistance-9.vert.out b/Test/baseResults/hlsl.clipdistance-9.vert.out index 7df30643ad..4e997c68a0 100644 --- a/Test/baseResults/hlsl.clipdistance-9.vert.out +++ b/Test/baseResults/hlsl.clipdistance-9.vert.out @@ -194,7 +194,7 @@ Shader version: 500 0:? 'clip0' ( out 4-element array of float ClipDistance) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 67 Capability Shader diff --git a/Test/baseResults/hlsl.color.hull.tesc.out b/Test/baseResults/hlsl.color.hull.tesc.out index e3c0a3e665..39a7597bd0 100644 --- a/Test/baseResults/hlsl.color.hull.tesc.out +++ b/Test/baseResults/hlsl.color.hull.tesc.out @@ -530,7 +530,7 @@ triangle order = cw 0:? '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 159 Capability Tessellation @@ -583,21 +583,21 @@ triangle order = cw Name 137 "param" Name 142 "@patchConstantOutput.edges" Name 155 "@patchConstantOutput.inside" + Decorate 33(TessellationBuffer) Block MemberDecorate 33(TessellationBuffer) 0 Offset 0 MemberDecorate 33(TessellationBuffer) 1 Offset 4 - Decorate 33(TessellationBuffer) Block - Decorate 35 DescriptorSet 0 Decorate 35 Binding 0 + Decorate 35 DescriptorSet 0 Decorate 73(patch.position) Location 0 Decorate 80(patch.color) Location 1 Decorate 99(pointId) BuiltIn InvocationId Decorate 102(patchId) BuiltIn PrimitiveId Decorate 113(@entryPointOutput.position) Location 0 Decorate 120(@entryPointOutput.color) Location 1 - Decorate 142(@patchConstantOutput.edges) Patch Decorate 142(@patchConstantOutput.edges) BuiltIn TessLevelOuter - Decorate 155(@patchConstantOutput.inside) Patch + Decorate 142(@patchConstantOutput.edges) Patch Decorate 155(@patchConstantOutput.inside) BuiltIn TessLevelInner + Decorate 155(@patchConstantOutput.inside) Patch 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out index 9fec433834..67b82d5567 100644 --- a/Test/baseResults/hlsl.comparison.vec.frag.out +++ b/Test/baseResults/hlsl.comparison.vec.frag.out @@ -262,7 +262,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 96 Capability Shader @@ -297,10 +297,10 @@ gl_FragCoord origin is upper left MemberName 93($Global) 0 "uf4" Name 95 "" Decorate 90(@entryPointOutput.Color) Location 0 - MemberDecorate 93($Global) 0 Offset 0 Decorate 93($Global) Block - Decorate 95 DescriptorSet 0 + MemberDecorate 93($Global) 0 Offset 0 Decorate 95 Binding 0 + Decorate 95 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out index 99f2538c6e..a56178ecee 100644 --- a/Test/baseResults/hlsl.conditional.frag.out +++ b/Test/baseResults/hlsl.conditional.frag.out @@ -216,33 +216,98 @@ gl_FragCoord origin is upper left 0:39 Convert int to float ( temp float) 0:39 'd' ( temp int) 0:39 'input' ( in 4-component vector of float) -0:41 Branch: Return with expression -0:40 add ( temp 4-component vector of float) -0:40 add ( temp 4-component vector of float) -0:40 add ( temp 4-component vector of float) -0:40 add ( temp 4-component vector of float) -0:40 vector-scale ( temp 4-component vector of float) -0:40 Convert int to float ( temp float) -0:40 'e' ( temp int) -0:40 'ret' ( temp 4-component vector of float) -0:40 'f' ( temp 4-component vector of float) -0:40 Function Call: vectorCond( ( temp 4-component vector of float) -0:40 Function Call: scalarCond( ( temp 4-component vector of float) -0:41 Construct vec4 ( temp 4-component vector of float) -0:41 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float) +0:40 Sequence +0:40 move second child to first child ( temp uint) +0:40 'g' ( temp uint) +0:40 Test condition and select ( temp uint): no shortcircuit +0:40 Condition +0:40 Compare Greater Than ( temp bool) +0:40 Convert int to float ( temp float) +0:40 'd' ( temp int) +0:40 Constant: +0:40 0.000000 +0:40 true case +0:40 Constant: +0:40 21 (const uint) +0:40 false case +0:40 Constant: +0:40 0 (const uint) +0:41 Sequence +0:41 move second child to first child ( temp uint) +0:41 'h' ( temp uint) +0:41 Test condition and select ( temp uint): no shortcircuit +0:41 Condition +0:41 Compare Greater Than ( temp bool) +0:41 Convert uint to float ( temp float) +0:41 'g' ( temp uint) 0:41 Constant: -0:41 true (const bool) -0:41 false (const bool) -0:41 Constant: -0:41 1.000000 -0:41 2.000000 -0:41 Constant: -0:41 3.000000 -0:41 4.000000 +0:41 0.000000 +0:41 true case 0:41 Constant: -0:41 10.000000 +0:41 63 (const uint) +0:41 false case 0:41 Constant: -0:41 10.000000 +0:41 0 (const uint) +0:42 Sequence +0:42 move second child to first child ( temp uint) +0:42 'i' ( temp uint) +0:42 Test condition and select ( temp uint): no shortcircuit +0:42 Condition +0:42 Compare Greater Than ( temp bool) +0:42 Convert uint to float ( temp float) +0:42 'h' ( temp uint) +0:42 Constant: +0:42 0.000000 +0:42 true case +0:42 Constant: +0:42 5 (const uint) +0:42 false case +0:42 Constant: +0:42 1 (const uint) +0:43 Sequence +0:43 move second child to first child ( temp uint) +0:43 'j' ( temp uint) +0:43 Convert int to uint ( temp uint) +0:43 Test condition and select ( temp int): no shortcircuit +0:43 Condition +0:43 Compare Greater Than ( temp bool) +0:43 Convert uint to float ( temp float) +0:43 'i' ( temp uint) +0:43 Constant: +0:43 0.000000 +0:43 true case +0:43 Constant: +0:43 43981 (const int) +0:43 false case +0:43 Constant: +0:43 48346 (const int) +0:45 Branch: Return with expression +0:44 add ( temp 4-component vector of float) +0:44 add ( temp 4-component vector of float) +0:44 add ( temp 4-component vector of float) +0:44 add ( temp 4-component vector of float) +0:44 vector-scale ( temp 4-component vector of float) +0:44 Convert int to float ( temp float) +0:44 'e' ( temp int) +0:44 'ret' ( temp 4-component vector of float) +0:44 'f' ( temp 4-component vector of float) +0:44 Function Call: vectorCond( ( temp 4-component vector of float) +0:44 Function Call: scalarCond( ( temp 4-component vector of float) +0:45 Construct vec4 ( temp 4-component vector of float) +0:45 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float) +0:45 Constant: +0:45 true (const bool) +0:45 false (const bool) +0:45 Constant: +0:45 1.000000 +0:45 2.000000 +0:45 Constant: +0:45 3.000000 +0:45 4.000000 +0:45 Constant: +0:45 10.000000 +0:45 Constant: +0:45 10.000000 0:27 Function Definition: PixelShaderFunction( ( temp void) 0:27 Function Parameters: 0:? Sequence @@ -479,33 +544,98 @@ gl_FragCoord origin is upper left 0:39 Convert int to float ( temp float) 0:39 'd' ( temp int) 0:39 'input' ( in 4-component vector of float) -0:41 Branch: Return with expression -0:40 add ( temp 4-component vector of float) -0:40 add ( temp 4-component vector of float) -0:40 add ( temp 4-component vector of float) -0:40 add ( temp 4-component vector of float) -0:40 vector-scale ( temp 4-component vector of float) -0:40 Convert int to float ( temp float) -0:40 'e' ( temp int) -0:40 'ret' ( temp 4-component vector of float) -0:40 'f' ( temp 4-component vector of float) -0:40 Function Call: vectorCond( ( temp 4-component vector of float) -0:40 Function Call: scalarCond( ( temp 4-component vector of float) -0:41 Construct vec4 ( temp 4-component vector of float) -0:41 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float) -0:41 Constant: -0:41 true (const bool) -0:41 false (const bool) -0:41 Constant: -0:41 1.000000 -0:41 2.000000 +0:40 Sequence +0:40 move second child to first child ( temp uint) +0:40 'g' ( temp uint) +0:40 Test condition and select ( temp uint): no shortcircuit +0:40 Condition +0:40 Compare Greater Than ( temp bool) +0:40 Convert int to float ( temp float) +0:40 'd' ( temp int) +0:40 Constant: +0:40 0.000000 +0:40 true case +0:40 Constant: +0:40 21 (const uint) +0:40 false case +0:40 Constant: +0:40 0 (const uint) +0:41 Sequence +0:41 move second child to first child ( temp uint) +0:41 'h' ( temp uint) +0:41 Test condition and select ( temp uint): no shortcircuit +0:41 Condition +0:41 Compare Greater Than ( temp bool) +0:41 Convert uint to float ( temp float) +0:41 'g' ( temp uint) 0:41 Constant: -0:41 3.000000 -0:41 4.000000 +0:41 0.000000 +0:41 true case 0:41 Constant: -0:41 10.000000 +0:41 63 (const uint) +0:41 false case 0:41 Constant: -0:41 10.000000 +0:41 0 (const uint) +0:42 Sequence +0:42 move second child to first child ( temp uint) +0:42 'i' ( temp uint) +0:42 Test condition and select ( temp uint): no shortcircuit +0:42 Condition +0:42 Compare Greater Than ( temp bool) +0:42 Convert uint to float ( temp float) +0:42 'h' ( temp uint) +0:42 Constant: +0:42 0.000000 +0:42 true case +0:42 Constant: +0:42 5 (const uint) +0:42 false case +0:42 Constant: +0:42 1 (const uint) +0:43 Sequence +0:43 move second child to first child ( temp uint) +0:43 'j' ( temp uint) +0:43 Convert int to uint ( temp uint) +0:43 Test condition and select ( temp int): no shortcircuit +0:43 Condition +0:43 Compare Greater Than ( temp bool) +0:43 Convert uint to float ( temp float) +0:43 'i' ( temp uint) +0:43 Constant: +0:43 0.000000 +0:43 true case +0:43 Constant: +0:43 43981 (const int) +0:43 false case +0:43 Constant: +0:43 48346 (const int) +0:45 Branch: Return with expression +0:44 add ( temp 4-component vector of float) +0:44 add ( temp 4-component vector of float) +0:44 add ( temp 4-component vector of float) +0:44 add ( temp 4-component vector of float) +0:44 vector-scale ( temp 4-component vector of float) +0:44 Convert int to float ( temp float) +0:44 'e' ( temp int) +0:44 'ret' ( temp 4-component vector of float) +0:44 'f' ( temp 4-component vector of float) +0:44 Function Call: vectorCond( ( temp 4-component vector of float) +0:44 Function Call: scalarCond( ( temp 4-component vector of float) +0:45 Construct vec4 ( temp 4-component vector of float) +0:45 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float) +0:45 Constant: +0:45 true (const bool) +0:45 false (const bool) +0:45 Constant: +0:45 1.000000 +0:45 2.000000 +0:45 Constant: +0:45 3.000000 +0:45 4.000000 +0:45 Constant: +0:45 10.000000 +0:45 Constant: +0:45 10.000000 0:27 Function Definition: PixelShaderFunction( ( temp void) 0:27 Function Parameters: 0:? Sequence @@ -522,13 +652,13 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 206 +// Generated by (magic number): 8000b +// Id's are bound by 233 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" 199 202 + EntryPoint Fragment 4 "PixelShaderFunction" 226 229 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "PixelShaderFunction" @@ -555,23 +685,27 @@ gl_FragCoord origin is upper left Name 117 "ret" Name 137 "e" Name 150 "f" - Name 186 "param" - Name 187 "param" - Name 188 "param" - Name 197 "input" - Name 199 "input" - Name 202 "@entryPointOutput" - Name 203 "param" + Name 169 "g" + Name 175 "h" + Name 181 "i" + Name 187 "j" + Name 213 "param" + Name 214 "param" + Name 215 "param" + Name 224 "input" + Name 226 "input" + Name 229 "@entryPointOutput" + Name 230 "param" + Decorate 29($Global) Block MemberDecorate 29($Global) 0 Offset 0 MemberDecorate 29($Global) 1 Offset 16 MemberDecorate 29($Global) 2 Offset 32 MemberDecorate 29($Global) 3 Offset 48 MemberDecorate 29($Global) 4 Offset 52 - Decorate 29($Global) Block - Decorate 31 DescriptorSet 0 Decorate 31 Binding 0 - Decorate 199(input) Location 0 - Decorate 202(@entryPointOutput) Location 0 + Decorate 31 DescriptorSet 0 + Decorate 226(input) Location 0 + Decorate 229(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -611,29 +745,35 @@ gl_FragCoord origin is upper left 148: 32(int) Constant 11 151: TypePointer Function 6(float) 154: 139(int) Constant 1 - 178: 13(bool) ConstantTrue - 179: 13(bool) ConstantFalse - 180: 14(bvec2) ConstantComposite 178 179 - 181: 6(float) Constant 1073741824 - 182: 16(fvec2) ConstantComposite 96 181 - 183: 6(float) Constant 1077936128 - 184: 6(float) Constant 1082130432 - 185: 16(fvec2) ConstantComposite 183 184 - 190: 6(float) Constant 1092616192 - 198: TypePointer Input 7(fvec4) - 199(input): 198(ptr) Variable Input - 201: TypePointer Output 7(fvec4) -202(@entryPointOutput): 201(ptr) Variable Output + 168: TypePointer Function 139(int) + 173: 139(int) Constant 21 + 179: 139(int) Constant 63 + 185: 139(int) Constant 5 + 191: 32(int) Constant 43981 + 192: 32(int) Constant 48346 + 205: 13(bool) ConstantTrue + 206: 13(bool) ConstantFalse + 207: 14(bvec2) ConstantComposite 205 206 + 208: 6(float) Constant 1073741824 + 209: 16(fvec2) ConstantComposite 96 208 + 210: 6(float) Constant 1077936128 + 211: 6(float) Constant 1082130432 + 212: 16(fvec2) ConstantComposite 210 211 + 217: 6(float) Constant 1092616192 + 225: TypePointer Input 7(fvec4) + 226(input): 225(ptr) Variable Input + 228: TypePointer Output 7(fvec4) +229(@entryPointOutput): 228(ptr) Variable Output 4(PixelShaderFunction): 2 Function None 3 5: Label - 197(input): 24(ptr) Variable Function - 203(param): 24(ptr) Variable Function - 200: 7(fvec4) Load 199(input) - Store 197(input) 200 - 204: 7(fvec4) Load 197(input) - Store 203(param) 204 - 205: 7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 203(param) - Store 202(@entryPointOutput) 205 + 224(input): 24(ptr) Variable Function + 230(param): 24(ptr) Variable Function + 227: 7(fvec4) Load 226(input) + Store 224(input) 227 + 231: 7(fvec4) Load 224(input) + Store 230(param) 231 + 232: 7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 230(param) + Store 229(@entryPointOutput) 232 Return FunctionEnd 9(vectorCond(): 7(fvec4) Function None 8 @@ -720,9 +860,13 @@ gl_FragCoord origin is upper left 117(ret): 24(ptr) Variable Function 137(e): 109(ptr) Variable Function 150(f): 24(ptr) Variable Function - 186(param): 15(ptr) Variable Function - 187(param): 17(ptr) Variable Function - 188(param): 17(ptr) Variable Function + 169(g): 168(ptr) Variable Function + 175(h): 168(ptr) Variable Function + 181(i): 168(ptr) Variable Function + 187(j): 168(ptr) Variable Function + 213(param): 15(ptr) Variable Function + 214(param): 17(ptr) Variable Function + 215(param): 17(ptr) Variable Function Store 110(a) 111 Store 112(b) 113 Store 114(c) 115 @@ -776,23 +920,44 @@ gl_FragCoord origin is upper left 166: 43(bvec4) CompositeConstruct 157 157 157 157 167: 7(fvec4) Select 166 161 165 Store 150(f) 167 - 168: 32(int) Load 137(e) - 169: 6(float) ConvertSToF 168 - 170: 7(fvec4) Load 117(ret) - 171: 7(fvec4) VectorTimesScalar 170 169 - 172: 7(fvec4) Load 150(f) - 173: 7(fvec4) FAdd 171 172 - 174: 7(fvec4) FunctionCall 9(vectorCond() - 175: 7(fvec4) FAdd 173 174 - 176: 7(fvec4) FunctionCall 11(scalarCond() - 177: 7(fvec4) FAdd 175 176 - Store 186(param) 180 - Store 187(param) 182 - Store 188(param) 185 - 189: 16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 186(param) 187(param) 188(param) - 191: 6(float) CompositeExtract 189 0 - 192: 6(float) CompositeExtract 189 1 - 193: 7(fvec4) CompositeConstruct 191 192 190 190 - 194: 7(fvec4) FAdd 177 193 - ReturnValue 194 + 170: 32(int) Load 116(d) + 171: 6(float) ConvertSToF 170 + 172: 13(bool) FOrdGreaterThan 171 44 + 174: 139(int) Select 172 173 140 + Store 169(g) 174 + 176: 139(int) Load 169(g) + 177: 6(float) ConvertUToF 176 + 178: 13(bool) FOrdGreaterThan 177 44 + 180: 139(int) Select 178 179 140 + Store 175(h) 180 + 182: 139(int) Load 175(h) + 183: 6(float) ConvertUToF 182 + 184: 13(bool) FOrdGreaterThan 183 44 + 186: 139(int) Select 184 185 154 + Store 181(i) 186 + 188: 139(int) Load 181(i) + 189: 6(float) ConvertUToF 188 + 190: 13(bool) FOrdGreaterThan 189 44 + 193: 32(int) Select 190 191 192 + 194: 139(int) Bitcast 193 + Store 187(j) 194 + 195: 32(int) Load 137(e) + 196: 6(float) ConvertSToF 195 + 197: 7(fvec4) Load 117(ret) + 198: 7(fvec4) VectorTimesScalar 197 196 + 199: 7(fvec4) Load 150(f) + 200: 7(fvec4) FAdd 198 199 + 201: 7(fvec4) FunctionCall 9(vectorCond() + 202: 7(fvec4) FAdd 200 201 + 203: 7(fvec4) FunctionCall 11(scalarCond() + 204: 7(fvec4) FAdd 202 203 + Store 213(param) 207 + Store 214(param) 209 + Store 215(param) 212 + 216: 16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 213(param) 214(param) 215(param) + 218: 6(float) CompositeExtract 216 0 + 219: 6(float) CompositeExtract 216 1 + 220: 7(fvec4) CompositeConstruct 218 219 217 217 + 221: 7(fvec4) FAdd 204 220 + ReturnValue 221 FunctionEnd diff --git a/Test/baseResults/hlsl.constantbuffer.frag.out b/Test/baseResults/hlsl.constantbuffer.frag.out index 12e819bc5d..e321d6d9c1 100644 --- a/Test/baseResults/hlsl.constantbuffer.frag.out +++ b/Test/baseResults/hlsl.constantbuffer.frag.out @@ -133,7 +133,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 66 Capability Shader @@ -156,21 +156,21 @@ Validation failed MemberName 46(cbuff) 0 "c1" Name 48 "" Name 64 "@entryPointOutput" + Decorate 12(cb3) Block MemberDecorate 12(cb3) 0 Offset 0 MemberDecorate 12(cb3) 1 Offset 4 - Decorate 12(cb3) Block - Decorate 18(cb3) DescriptorSet 0 Decorate 18(cb3) Binding 1 - MemberDecorate 31(cb1) 0 Offset 0 + Decorate 18(cb3) DescriptorSet 0 Decorate 31(cb1) Block - Decorate 33(cb1) DescriptorSet 0 + MemberDecorate 31(cb1) 0 Offset 0 Decorate 33(cb1) Binding 12 - Decorate 40(cb2) DescriptorSet 0 + Decorate 33(cb1) DescriptorSet 0 Decorate 40(cb2) Binding 0 - MemberDecorate 46(cbuff) 0 Offset 0 + Decorate 40(cb2) DescriptorSet 0 Decorate 46(cbuff) Block - Decorate 48 DescriptorSet 0 + MemberDecorate 46(cbuff) 0 Offset 0 Decorate 48 Binding 2 + Decorate 48 DescriptorSet 0 Decorate 64(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.constructArray.vert.out b/Test/baseResults/hlsl.constructArray.vert.out index b070735a63..230efbc151 100644 --- a/Test/baseResults/hlsl.constructArray.vert.out +++ b/Test/baseResults/hlsl.constructArray.vert.out @@ -268,7 +268,7 @@ Shader version: 500 0:? '@entryPointOutput' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 89 Capability Shader diff --git a/Test/baseResults/hlsl.constructexpr.frag.out b/Test/baseResults/hlsl.constructexpr.frag.out index 7b25ae8434..367a03a3c3 100644 --- a/Test/baseResults/hlsl.constructexpr.frag.out +++ b/Test/baseResults/hlsl.constructexpr.frag.out @@ -104,7 +104,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 40 Capability Shader diff --git a/Test/baseResults/hlsl.constructimat.frag.out b/Test/baseResults/hlsl.constructimat.frag.out index a76ac6a9c0..4f49b87e59 100644 --- a/Test/baseResults/hlsl.constructimat.frag.out +++ b/Test/baseResults/hlsl.constructimat.frag.out @@ -545,7 +545,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 98 Capability Shader diff --git a/Test/baseResults/hlsl.coverage.frag.out b/Test/baseResults/hlsl.coverage.frag.out index 7c44e1fb24..681118fd7c 100644 --- a/Test/baseResults/hlsl.coverage.frag.out +++ b/Test/baseResults/hlsl.coverage.frag.out @@ -119,7 +119,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 52 Capability Shader diff --git a/Test/baseResults/hlsl.dashI.vert.out b/Test/baseResults/hlsl.dashI.vert.out index 73514438a2..125b4bddcd 100644 --- a/Test/baseResults/hlsl.dashI.vert.out +++ b/Test/baseResults/hlsl.dashI.vert.out @@ -1,6 +1,6 @@ hlsl.dashI.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 40 Capability Shader @@ -18,14 +18,14 @@ hlsl.dashI.vert MemberName 11($Global) 4 "i4" Name 13 "" Name 38 "@entryPointOutput" + Decorate 11($Global) Block MemberDecorate 11($Global) 0 Offset 0 MemberDecorate 11($Global) 1 Offset 16 MemberDecorate 11($Global) 2 Offset 32 MemberDecorate 11($Global) 3 Offset 48 MemberDecorate 11($Global) 4 Offset 64 - Decorate 11($Global) Block - Decorate 13 DescriptorSet 0 Decorate 13 Binding 0 + Decorate 13 DescriptorSet 0 Decorate 38(@entryPointOutput) BuiltIn Position 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out index 9ca01460bb..1862266813 100644 --- a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out +++ b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out @@ -1,6 +1,6 @@ hlsl.deadFunctionMissingBody.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader diff --git a/Test/baseResults/hlsl.depthGreater.frag.out b/Test/baseResults/hlsl.depthGreater.frag.out index 31a70068e1..5128a0ec47 100644 --- a/Test/baseResults/hlsl.depthGreater.frag.out +++ b/Test/baseResults/hlsl.depthGreater.frag.out @@ -50,7 +50,7 @@ using depth_greater 0:? 'depth' ( out float FragDepth) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader diff --git a/Test/baseResults/hlsl.depthLess.frag.out b/Test/baseResults/hlsl.depthLess.frag.out index d062c7748b..771c477ad4 100644 --- a/Test/baseResults/hlsl.depthLess.frag.out +++ b/Test/baseResults/hlsl.depthLess.frag.out @@ -42,7 +42,7 @@ using depth_less 0:? '@entryPointOutput' ( out float FragDepth) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 16 Capability Shader diff --git a/Test/baseResults/hlsl.discard.frag.out b/Test/baseResults/hlsl.discard.frag.out index 41766f6284..7a6c6f2697 100644 --- a/Test/baseResults/hlsl.discard.frag.out +++ b/Test/baseResults/hlsl.discard.frag.out @@ -108,7 +108,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader diff --git a/Test/baseResults/hlsl.doLoop.frag.out b/Test/baseResults/hlsl.doLoop.frag.out index 0d93e8d9f3..82a96b5f55 100644 --- a/Test/baseResults/hlsl.doLoop.frag.out +++ b/Test/baseResults/hlsl.doLoop.frag.out @@ -198,7 +198,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 99 Capability Shader diff --git a/Test/baseResults/hlsl.domain.1.tese.out b/Test/baseResults/hlsl.domain.1.tese.out index 4e53e7ce65..41a5ab0743 100644 --- a/Test/baseResults/hlsl.domain.1.tese.out +++ b/Test/baseResults/hlsl.domain.1.tese.out @@ -428,7 +428,7 @@ triangle order = none 0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 125 Capability Tessellation @@ -473,12 +473,12 @@ triangle order = none Decorate 62(i.norm) Location 1 Decorate 82(f) Patch Decorate 82(f) Location 2 - Decorate 85(tesscoord) Patch Decorate 85(tesscoord) BuiltIn TessCoord - Decorate 91(pcf_data.flTessFactor) Patch + Decorate 85(tesscoord) Patch Decorate 91(pcf_data.flTessFactor) BuiltIn TessLevelOuter - Decorate 104(pcf_data.flInsideTessFactor) Patch + Decorate 91(pcf_data.flTessFactor) Patch Decorate 104(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner + Decorate 104(pcf_data.flInsideTessFactor) Patch Decorate 118(@entryPointOutput.pos) Location 0 Decorate 122(@entryPointOutput.norm) Location 1 2: TypeVoid diff --git a/Test/baseResults/hlsl.domain.2.tese.out b/Test/baseResults/hlsl.domain.2.tese.out index 05f934f19d..97590ffaa8 100644 --- a/Test/baseResults/hlsl.domain.2.tese.out +++ b/Test/baseResults/hlsl.domain.2.tese.out @@ -426,7 +426,7 @@ triangle order = none 0:? 'pcf_data.foo' (layout( location=2) patch in float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 120 Capability Tessellation @@ -465,16 +465,16 @@ triangle order = none Name 109 "param" Name 113 "@entryPointOutput.pos" Name 117 "@entryPointOutput.norm" - Decorate 52(pcf_data.flTessFactor) Patch Decorate 52(pcf_data.flTessFactor) BuiltIn TessLevelOuter - Decorate 67(pcf_data.flInsideTessFactor) Patch + Decorate 52(pcf_data.flTessFactor) Patch Decorate 67(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner + Decorate 67(pcf_data.flInsideTessFactor) Patch Decorate 71(pcf_data.foo) Patch Decorate 71(pcf_data.foo) Location 2 Decorate 78(i.pos) Location 0 Decorate 85(i.norm) Location 1 - Decorate 103(tesscoord) Patch Decorate 103(tesscoord) BuiltIn TessCoord + Decorate 103(tesscoord) Patch Decorate 113(@entryPointOutput.pos) Location 0 Decorate 117(@entryPointOutput.norm) Location 1 2: TypeVoid diff --git a/Test/baseResults/hlsl.domain.3.tese.out b/Test/baseResults/hlsl.domain.3.tese.out index c9b985de5f..552f3fdbf3 100644 --- a/Test/baseResults/hlsl.domain.3.tese.out +++ b/Test/baseResults/hlsl.domain.3.tese.out @@ -358,7 +358,7 @@ triangle order = none 0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 116 Capability Tessellation @@ -397,12 +397,12 @@ triangle order = none Name 113 "@entryPointOutput.norm" Decorate 55(i.pos) Location 0 Decorate 62(i.norm) Location 1 - Decorate 74(tesscoord) Patch Decorate 74(tesscoord) BuiltIn TessCoord - Decorate 83(pcf_data.flTessFactor) Patch + Decorate 74(tesscoord) Patch Decorate 83(pcf_data.flTessFactor) BuiltIn TessLevelOuter - Decorate 97(pcf_data.flInsideTessFactor) Patch + Decorate 83(pcf_data.flTessFactor) Patch Decorate 97(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner + Decorate 97(pcf_data.flInsideTessFactor) Patch Decorate 109(@entryPointOutput.pos) Location 0 Decorate 113(@entryPointOutput.norm) Location 1 2: TypeVoid diff --git a/Test/baseResults/hlsl.earlydepthstencil.frag.out b/Test/baseResults/hlsl.earlydepthstencil.frag.out index 34ca0062c8..60d9069989 100644 --- a/Test/baseResults/hlsl.earlydepthstencil.frag.out +++ b/Test/baseResults/hlsl.earlydepthstencil.frag.out @@ -108,7 +108,7 @@ using early_fragment_tests 0:? 'input.Position' ( in 4-component vector of float FragCoord) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader @@ -129,8 +129,8 @@ using early_fragment_tests Name 41 "input.Position" Name 46 "@entryPointOutput" Name 47 "param" - Decorate 19(Values) DescriptorSet 0 Decorate 19(Values) Binding 0 + Decorate 19(Values) DescriptorSet 0 Decorate 41(input.Position) BuiltIn FragCoord Decorate 46(@entryPointOutput) Location 0 2: TypeVoid diff --git a/Test/baseResults/hlsl.emptystruct.init.vert.out b/Test/baseResults/hlsl.emptystruct.init.vert.out index 9f5c785741..07baddfc05 100644 --- a/Test/baseResults/hlsl.emptystruct.init.vert.out +++ b/Test/baseResults/hlsl.emptystruct.init.vert.out @@ -60,7 +60,7 @@ Shader version: 500 0:? 'vertexIndex' (layout( location=0) in uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader diff --git a/Test/baseResults/hlsl.emptystructreturn.frag.out b/Test/baseResults/hlsl.emptystructreturn.frag.out index 2a4cabebd3..de77486579 100644 --- a/Test/baseResults/hlsl.emptystructreturn.frag.out +++ b/Test/baseResults/hlsl.emptystructreturn.frag.out @@ -51,7 +51,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader diff --git a/Test/baseResults/hlsl.emptystructreturn.tesc.out b/Test/baseResults/hlsl.emptystructreturn.tesc.out new file mode 100644 index 0000000000..0d82b7b245 --- /dev/null +++ b/Test/baseResults/hlsl.emptystructreturn.tesc.out @@ -0,0 +1,606 @@ +hlsl.emptystructreturn.tesc +Shader version: 500 +vertices = 3 +vertex spacing = equal_spacing +triangle order = cw +0:? Sequence +0:16 Function Definition: blob(struct-HullInputType-vf41[3]; ( temp void) +0:16 Function Parameters: +0:16 'patch' ( in 3-element array of structure{ temp 4-component vector of float position}) +0:20 Function Definition: ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1; ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:20 Function Parameters: +0:20 'inputPatch' ( in 3-element array of structure{ temp 4-component vector of float position}) +0:20 'patchId' ( in uint) +0:? Sequence +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 edges: direct index for structure ( temp 3-element array of float) +0:24 'output' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 2.000000 +0:25 move second child to first child ( temp float) +0:25 direct index ( temp float) +0:25 edges: direct index for structure ( temp 3-element array of float) +0:25 'output' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 2.000000 +0:26 move second child to first child ( temp float) +0:26 direct index ( temp float) +0:26 edges: direct index for structure ( temp 3-element array of float) +0:26 'output' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 2 (const int) +0:26 Constant: +0:26 2.000000 +0:29 move second child to first child ( temp float) +0:29 inside: direct index for structure ( temp float) +0:29 'output' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:29 Constant: +0:29 1 (const int) +0:29 Constant: +0:29 2.000000 +0:31 Branch: Return with expression +0:31 'output' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:42 Function Definition: @main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1; ( temp structure{}) +0:42 Function Parameters: +0:42 'stage_input' ( in structure{}) +0:42 'patch' ( in 3-element array of structure{ temp 4-component vector of float position}) +0:42 'pointId' ( in uint) +0:42 'patchId' ( in uint) +0:? Sequence +0:44 Function Call: blob(struct-HullInputType-vf41[3]; ( temp void) +0:44 'patch' ( in 3-element array of structure{ temp 4-component vector of float position}) +0:46 Branch: Return with expression +0:46 'output' ( temp structure{}) +0:42 Function Definition: main( ( temp void) +0:42 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp structure{}) +0:? 'stage_input' ( temp structure{}) +0:? 'stage_input' ( in structure{}) +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of float) +0:42 position: direct index for structure ( temp 4-component vector of float) +0:42 direct index ( temp structure{ temp 4-component vector of float position}) +0:? 'patch' ( temp 3-element array of structure{ temp 4-component vector of float position}) +0:42 Constant: +0:42 0 (const int) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( in 4-component vector of float Position) +0:? 'patch.position' ( in 3-element array of 4-component vector of float Position) +0:42 Constant: +0:42 0 (const int) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 position: direct index for structure ( temp 4-component vector of float) +0:42 direct index ( temp structure{ temp 4-component vector of float position}) +0:? 'patch' ( temp 3-element array of structure{ temp 4-component vector of float position}) +0:42 Constant: +0:42 1 (const int) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( in 4-component vector of float Position) +0:? 'patch.position' ( in 3-element array of 4-component vector of float Position) +0:42 Constant: +0:42 1 (const int) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 position: direct index for structure ( temp 4-component vector of float) +0:42 direct index ( temp structure{ temp 4-component vector of float position}) +0:? 'patch' ( temp 3-element array of structure{ temp 4-component vector of float position}) +0:42 Constant: +0:42 2 (const int) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( in 4-component vector of float Position) +0:? 'patch.position' ( in 3-element array of 4-component vector of float Position) +0:42 Constant: +0:42 2 (const int) +0:42 move second child to first child ( temp uint) +0:? 'pointId' ( temp uint) +0:? 'pointId' ( in uint InvocationID) +0:42 move second child to first child ( temp uint) +0:? 'patchId' ( temp uint) +0:? 'patchId' ( in uint PrimitiveID) +0:42 Sequence +0:42 move second child to first child ( temp structure{}) +0:42 indirect index ( out structure{}) +0:? '@entryPointOutput' ( out 3-element array of structure{}) +0:? 'pointId' ( in uint InvocationID) +0:42 Function Call: @main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1; ( temp structure{}) +0:? 'stage_input' ( temp structure{}) +0:? 'patch' ( temp 3-element array of structure{ temp 4-component vector of float position}) +0:? 'pointId' ( temp uint) +0:? 'patchId' ( temp uint) +0:? Barrier ( temp void) +0:? Test condition and select ( temp void) +0:? Condition +0:? Compare Equal ( temp bool) +0:? 'pointId' ( in uint InvocationID) +0:? Constant: +0:? 0 (const int) +0:? true case +0:? Sequence +0:? move second child to first child ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? Function Call: ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1; ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? 'patch' ( temp 3-element array of structure{ temp 4-component vector of float position}) +0:? 'patchId' ( in uint PrimitiveID) +0:? Sequence +0:? move second child to first child ( temp float) +0:? direct index ( patch out float TessLevelOuter) +0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) +0:? Constant: +0:? 0 (const int) +0:? direct index ( temp float) +0:? edges: direct index for structure ( temp 3-element array of float) +0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? Constant: +0:? 0 (const int) +0:? Constant: +0:? 0 (const int) +0:? move second child to first child ( temp float) +0:? direct index ( patch out float TessLevelOuter) +0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) +0:? Constant: +0:? 1 (const int) +0:? direct index ( temp float) +0:? edges: direct index for structure ( temp 3-element array of float) +0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? Constant: +0:? 0 (const int) +0:? Constant: +0:? 1 (const int) +0:? move second child to first child ( temp float) +0:? direct index ( patch out float TessLevelOuter) +0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) +0:? Constant: +0:? 2 (const int) +0:? direct index ( temp float) +0:? edges: direct index for structure ( temp 3-element array of float) +0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? Constant: +0:? 0 (const int) +0:? Constant: +0:? 2 (const int) +0:? move second child to first child ( temp float) +0:? direct index ( patch out float TessLevelInner) +0:? '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner) +0:? Constant: +0:? 0 (const int) +0:? inside: direct index for structure ( temp float) +0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? Constant: +0:? 1 (const int) +0:? Linker Objects +0:? 'patch.position' ( in 3-element array of 4-component vector of float Position) +0:? 'pointId' ( in uint InvocationID) +0:? 'patchId' ( in uint PrimitiveID) +0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) +0:? '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner) + + +Linked tessellation control stage: + + +Shader version: 500 +vertices = 3 +vertex spacing = equal_spacing +triangle order = cw +0:? Sequence +0:16 Function Definition: blob(struct-HullInputType-vf41[3]; ( temp void) +0:16 Function Parameters: +0:16 'patch' ( in 3-element array of structure{ temp 4-component vector of float position}) +0:20 Function Definition: ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1; ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:20 Function Parameters: +0:20 'inputPatch' ( in 3-element array of structure{ temp 4-component vector of float position}) +0:20 'patchId' ( in uint) +0:? Sequence +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 edges: direct index for structure ( temp 3-element array of float) +0:24 'output' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 2.000000 +0:25 move second child to first child ( temp float) +0:25 direct index ( temp float) +0:25 edges: direct index for structure ( temp 3-element array of float) +0:25 'output' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 2.000000 +0:26 move second child to first child ( temp float) +0:26 direct index ( temp float) +0:26 edges: direct index for structure ( temp 3-element array of float) +0:26 'output' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 2 (const int) +0:26 Constant: +0:26 2.000000 +0:29 move second child to first child ( temp float) +0:29 inside: direct index for structure ( temp float) +0:29 'output' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:29 Constant: +0:29 1 (const int) +0:29 Constant: +0:29 2.000000 +0:31 Branch: Return with expression +0:31 'output' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:42 Function Definition: @main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1; ( temp structure{}) +0:42 Function Parameters: +0:42 'stage_input' ( in structure{}) +0:42 'patch' ( in 3-element array of structure{ temp 4-component vector of float position}) +0:42 'pointId' ( in uint) +0:42 'patchId' ( in uint) +0:? Sequence +0:44 Function Call: blob(struct-HullInputType-vf41[3]; ( temp void) +0:44 'patch' ( in 3-element array of structure{ temp 4-component vector of float position}) +0:46 Branch: Return with expression +0:46 'output' ( temp structure{}) +0:42 Function Definition: main( ( temp void) +0:42 Function Parameters: +0:? Sequence +0:42 Sequence +0:42 move second child to first child ( temp structure{}) +0:? 'stage_input' ( temp structure{}) +0:? 'stage_input' ( in structure{}) +0:42 Sequence +0:42 move second child to first child ( temp 4-component vector of float) +0:42 position: direct index for structure ( temp 4-component vector of float) +0:42 direct index ( temp structure{ temp 4-component vector of float position}) +0:? 'patch' ( temp 3-element array of structure{ temp 4-component vector of float position}) +0:42 Constant: +0:42 0 (const int) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( in 4-component vector of float Position) +0:? 'patch.position' ( in 3-element array of 4-component vector of float Position) +0:42 Constant: +0:42 0 (const int) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 position: direct index for structure ( temp 4-component vector of float) +0:42 direct index ( temp structure{ temp 4-component vector of float position}) +0:? 'patch' ( temp 3-element array of structure{ temp 4-component vector of float position}) +0:42 Constant: +0:42 1 (const int) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( in 4-component vector of float Position) +0:? 'patch.position' ( in 3-element array of 4-component vector of float Position) +0:42 Constant: +0:42 1 (const int) +0:42 move second child to first child ( temp 4-component vector of float) +0:42 position: direct index for structure ( temp 4-component vector of float) +0:42 direct index ( temp structure{ temp 4-component vector of float position}) +0:? 'patch' ( temp 3-element array of structure{ temp 4-component vector of float position}) +0:42 Constant: +0:42 2 (const int) +0:42 Constant: +0:42 0 (const int) +0:42 direct index ( in 4-component vector of float Position) +0:? 'patch.position' ( in 3-element array of 4-component vector of float Position) +0:42 Constant: +0:42 2 (const int) +0:42 move second child to first child ( temp uint) +0:? 'pointId' ( temp uint) +0:? 'pointId' ( in uint InvocationID) +0:42 move second child to first child ( temp uint) +0:? 'patchId' ( temp uint) +0:? 'patchId' ( in uint PrimitiveID) +0:42 Sequence +0:42 move second child to first child ( temp structure{}) +0:42 indirect index ( out structure{}) +0:? '@entryPointOutput' ( out 3-element array of structure{}) +0:? 'pointId' ( in uint InvocationID) +0:42 Function Call: @main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1; ( temp structure{}) +0:? 'stage_input' ( temp structure{}) +0:? 'patch' ( temp 3-element array of structure{ temp 4-component vector of float position}) +0:? 'pointId' ( temp uint) +0:? 'patchId' ( temp uint) +0:? Barrier ( temp void) +0:? Test condition and select ( temp void) +0:? Condition +0:? Compare Equal ( temp bool) +0:? 'pointId' ( in uint InvocationID) +0:? Constant: +0:? 0 (const int) +0:? true case +0:? Sequence +0:? move second child to first child ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? Function Call: ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1; ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? 'patch' ( temp 3-element array of structure{ temp 4-component vector of float position}) +0:? 'patchId' ( in uint PrimitiveID) +0:? Sequence +0:? move second child to first child ( temp float) +0:? direct index ( patch out float TessLevelOuter) +0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) +0:? Constant: +0:? 0 (const int) +0:? direct index ( temp float) +0:? edges: direct index for structure ( temp 3-element array of float) +0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? Constant: +0:? 0 (const int) +0:? Constant: +0:? 0 (const int) +0:? move second child to first child ( temp float) +0:? direct index ( patch out float TessLevelOuter) +0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) +0:? Constant: +0:? 1 (const int) +0:? direct index ( temp float) +0:? edges: direct index for structure ( temp 3-element array of float) +0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? Constant: +0:? 0 (const int) +0:? Constant: +0:? 1 (const int) +0:? move second child to first child ( temp float) +0:? direct index ( patch out float TessLevelOuter) +0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) +0:? Constant: +0:? 2 (const int) +0:? direct index ( temp float) +0:? edges: direct index for structure ( temp 3-element array of float) +0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? Constant: +0:? 0 (const int) +0:? Constant: +0:? 2 (const int) +0:? move second child to first child ( temp float) +0:? direct index ( patch out float TessLevelInner) +0:? '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner) +0:? Constant: +0:? 0 (const int) +0:? inside: direct index for structure ( temp float) +0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float edges, temp float inside}) +0:? Constant: +0:? 1 (const int) +0:? Linker Objects +0:? 'patch.position' ( in 3-element array of 4-component vector of float Position) +0:? 'pointId' ( in uint InvocationID) +0:? 'patchId' ( in uint PrimitiveID) +0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) +0:? '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner) + +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 132 + + Capability Tessellation + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 65 79 82 115 128 + ExecutionMode 4 OutputVertices 3 + ExecutionMode 4 Triangles + ExecutionMode 4 SpacingEqual + ExecutionMode 4 VertexOrderCw + Source HLSL 500 + Name 4 "main" + Name 8 "HullInputType" + MemberName 8(HullInputType) 0 "position" + Name 15 "blob(struct-HullInputType-vf41[3];" + Name 14 "patch" + Name 19 "ConstantOutputType" + MemberName 19(ConstantOutputType) 0 "edges" + MemberName 19(ConstantOutputType) 1 "inside" + Name 23 "ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1;" + Name 21 "inputPatch" + Name 22 "patchId" + Name 25 "EmptyStruct" + Name 27 "HullOutputType" + Name 33 "@main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1;" + Name 29 "stage_input" + Name 30 "patch" + Name 31 "pointId" + Name 32 "patchId" + Name 36 "output" + Name 50 "param" + Name 54 "output" + Name 58 "stage_input" + Name 60 "stage_input" + Name 62 "patch" + Name 65 "patch.position" + Name 77 "pointId" + Name 79 "pointId" + Name 81 "patchId" + Name 82 "patchId" + Name 86 "@entryPointOutput" + Name 88 "param" + Name 90 "param" + Name 92 "param" + Name 94 "param" + Name 107 "@patchConstantResult" + Name 108 "param" + Name 110 "param" + Name 115 "@patchConstantOutput.edges" + Name 128 "@patchConstantOutput.inside" + Decorate 65(patch.position) BuiltIn Position + Decorate 79(pointId) BuiltIn InvocationId + Decorate 82(patchId) BuiltIn PrimitiveId + Decorate 115(@patchConstantOutput.edges) BuiltIn TessLevelOuter + Decorate 115(@patchConstantOutput.edges) Patch + Decorate 128(@patchConstantOutput.inside) BuiltIn TessLevelInner + Decorate 128(@patchConstantOutput.inside) Patch + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 +8(HullInputType): TypeStruct 7(fvec4) + 9: TypeInt 32 0 + 10: 9(int) Constant 3 + 11: TypeArray 8(HullInputType) 10 + 12: TypePointer Function 11 + 13: TypeFunction 2 12(ptr) + 17: TypePointer Function 9(int) + 18: TypeArray 6(float) 10 +19(ConstantOutputType): TypeStruct 18 6(float) + 20: TypeFunction 19(ConstantOutputType) 12(ptr) 17(ptr) + 25(EmptyStruct): TypeStruct + 26: TypePointer Function 25(EmptyStruct) +27(HullOutputType): TypeStruct + 28: TypeFunction 27(HullOutputType) 26(ptr) 12(ptr) 17(ptr) 17(ptr) + 35: TypePointer Function 19(ConstantOutputType) + 37: TypeInt 32 1 + 38: 37(int) Constant 0 + 39: 6(float) Constant 1073741824 + 40: TypePointer Function 6(float) + 42: 37(int) Constant 1 + 44: 37(int) Constant 2 + 53: TypePointer Function 27(HullOutputType) + 59: TypePointer Input 25(EmptyStruct) + 60(stage_input): 59(ptr) Variable Input + 63: TypeArray 7(fvec4) 10 + 64: TypePointer Input 63 +65(patch.position): 64(ptr) Variable Input + 66: TypePointer Input 7(fvec4) + 69: TypePointer Function 7(fvec4) + 78: TypePointer Input 9(int) + 79(pointId): 78(ptr) Variable Input + 82(patchId): 78(ptr) Variable Input + 84: TypeArray 27(HullOutputType) 10 + 85: TypePointer Output 84 +86(@entryPointOutput): 85(ptr) Variable Output + 97: TypePointer Output 27(HullOutputType) + 99: 9(int) Constant 2 + 100: 9(int) Constant 4 + 101: 9(int) Constant 0 + 103: TypeBool + 113: TypeArray 6(float) 100 + 114: TypePointer Output 113 +115(@patchConstantOutput.edges): 114(ptr) Variable Output + 118: TypePointer Output 6(float) + 126: TypeArray 6(float) 99 + 127: TypePointer Output 126 +128(@patchConstantOutput.inside): 127(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 58(stage_input): 26(ptr) Variable Function + 62(patch): 12(ptr) Variable Function + 77(pointId): 17(ptr) Variable Function + 81(patchId): 17(ptr) Variable Function + 88(param): 26(ptr) Variable Function + 90(param): 12(ptr) Variable Function + 92(param): 17(ptr) Variable Function + 94(param): 17(ptr) Variable Function +107(@patchConstantResult): 35(ptr) Variable Function + 108(param): 12(ptr) Variable Function + 110(param): 17(ptr) Variable Function + 61:25(EmptyStruct) Load 60(stage_input) + Store 58(stage_input) 61 + 67: 66(ptr) AccessChain 65(patch.position) 38 + 68: 7(fvec4) Load 67 + 70: 69(ptr) AccessChain 62(patch) 38 38 + Store 70 68 + 71: 66(ptr) AccessChain 65(patch.position) 42 + 72: 7(fvec4) Load 71 + 73: 69(ptr) AccessChain 62(patch) 42 38 + Store 73 72 + 74: 66(ptr) AccessChain 65(patch.position) 44 + 75: 7(fvec4) Load 74 + 76: 69(ptr) AccessChain 62(patch) 44 38 + Store 76 75 + 80: 9(int) Load 79(pointId) + Store 77(pointId) 80 + 83: 9(int) Load 82(patchId) + Store 81(patchId) 83 + 87: 9(int) Load 79(pointId) + 89:25(EmptyStruct) Load 58(stage_input) + Store 88(param) 89 + 91: 11 Load 62(patch) + Store 90(param) 91 + 93: 9(int) Load 77(pointId) + Store 92(param) 93 + 95: 9(int) Load 81(patchId) + Store 94(param) 95 + 96:27(HullOutputType) FunctionCall 33(@main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1;) 88(param) 90(param) 92(param) 94(param) + 98: 97(ptr) AccessChain 86(@entryPointOutput) 87 + Store 98 96 + ControlBarrier 99 100 101 + 102: 9(int) Load 79(pointId) + 104: 103(bool) IEqual 102 38 + SelectionMerge 106 None + BranchConditional 104 105 106 + 105: Label + 109: 11 Load 62(patch) + Store 108(param) 109 + 111: 9(int) Load 82(patchId) + Store 110(param) 111 + 112:19(ConstantOutputType) FunctionCall 23(ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1;) 108(param) 110(param) + Store 107(@patchConstantResult) 112 + 116: 40(ptr) AccessChain 107(@patchConstantResult) 38 38 + 117: 6(float) Load 116 + 119: 118(ptr) AccessChain 115(@patchConstantOutput.edges) 38 + Store 119 117 + 120: 40(ptr) AccessChain 107(@patchConstantResult) 38 42 + 121: 6(float) Load 120 + 122: 118(ptr) AccessChain 115(@patchConstantOutput.edges) 42 + Store 122 121 + 123: 40(ptr) AccessChain 107(@patchConstantResult) 38 44 + 124: 6(float) Load 123 + 125: 118(ptr) AccessChain 115(@patchConstantOutput.edges) 44 + Store 125 124 + 129: 40(ptr) AccessChain 107(@patchConstantResult) 42 + 130: 6(float) Load 129 + 131: 118(ptr) AccessChain 128(@patchConstantOutput.inside) 38 + Store 131 130 + Branch 106 + 106: Label + Return + FunctionEnd +15(blob(struct-HullInputType-vf41[3];): 2 Function None 13 + 14(patch): 12(ptr) FunctionParameter + 16: Label + Return + FunctionEnd +23(ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1;):19(ConstantOutputType) Function None 20 + 21(inputPatch): 12(ptr) FunctionParameter + 22(patchId): 17(ptr) FunctionParameter + 24: Label + 36(output): 35(ptr) Variable Function + 41: 40(ptr) AccessChain 36(output) 38 38 + Store 41 39 + 43: 40(ptr) AccessChain 36(output) 38 42 + Store 43 39 + 45: 40(ptr) AccessChain 36(output) 38 44 + Store 45 39 + 46: 40(ptr) AccessChain 36(output) 42 + Store 46 39 + 47:19(ConstantOutputType) Load 36(output) + ReturnValue 47 + FunctionEnd +33(@main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1;):27(HullOutputType) Function None 28 + 29(stage_input): 26(ptr) FunctionParameter + 30(patch): 12(ptr) FunctionParameter + 31(pointId): 17(ptr) FunctionParameter + 32(patchId): 17(ptr) FunctionParameter + 34: Label + 50(param): 12(ptr) Variable Function + 54(output): 53(ptr) Variable Function + 51: 11 Load 30(patch) + Store 50(param) 51 + 52: 2 FunctionCall 15(blob(struct-HullInputType-vf41[3];) 50(param) + 55:27(HullOutputType) Load 54(output) + ReturnValue 55 + FunctionEnd diff --git a/Test/baseResults/hlsl.emptystructreturn.vert.out b/Test/baseResults/hlsl.emptystructreturn.vert.out index ad1efa7972..22dc2cf0bd 100644 --- a/Test/baseResults/hlsl.emptystructreturn.vert.out +++ b/Test/baseResults/hlsl.emptystructreturn.vert.out @@ -49,7 +49,7 @@ Shader version: 500 Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader diff --git a/Test/baseResults/hlsl.entry-in.frag.out b/Test/baseResults/hlsl.entry-in.frag.out index 4c322496c5..e86def4cdb 100644 --- a/Test/baseResults/hlsl.entry-in.frag.out +++ b/Test/baseResults/hlsl.entry-in.frag.out @@ -166,7 +166,7 @@ gl_FragCoord origin is upper left 0:? 'i.i2' (layout( location=1) flat in 2-component vector of int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 74 Capability Shader diff --git a/Test/baseResults/hlsl.entry-inout.vert.out b/Test/baseResults/hlsl.entry-inout.vert.out new file mode 100644 index 0000000000..7b0ebd7afd --- /dev/null +++ b/Test/baseResults/hlsl.entry-inout.vert.out @@ -0,0 +1,137 @@ +hlsl.entry-inout.vert +Shader version: 500 +0:? Sequence +0:1 Function Definition: @main(vf4;vf2; ( temp void) +0:1 Function Parameters: +0:1 'pos' ( inout 4-component vector of float) +0:1 'uv' ( inout 2-component vector of float) +0:1 Function Definition: main( ( temp void) +0:1 Function Parameters: +0:? Sequence +0:1 move second child to first child ( temp 4-component vector of float) +0:? 'pos' ( temp 4-component vector of float) +0:? 'pos' (layout( location=0) in 4-component vector of float) +0:1 move second child to first child ( temp 2-component vector of float) +0:? 'uv' ( temp 2-component vector of float) +0:? 'uv' (layout( location=1) in 2-component vector of float) +0:1 Function Call: @main(vf4;vf2; ( temp void) +0:? 'pos' ( temp 4-component vector of float) +0:? 'uv' ( temp 2-component vector of float) +0:1 move second child to first child ( temp 4-component vector of float) +0:? 'pos' ( out 4-component vector of float Position) +0:? 'pos' ( temp 4-component vector of float) +0:1 move second child to first child ( temp 2-component vector of float) +0:? 'uv' (layout( location=0) out 2-component vector of float) +0:? 'uv' ( temp 2-component vector of float) +0:? Linker Objects +0:? 'pos' (layout( location=0) in 4-component vector of float) +0:? 'uv' (layout( location=1) in 2-component vector of float) +0:? 'pos' ( out 4-component vector of float Position) +0:? 'uv' (layout( location=0) out 2-component vector of float) + + +Linked vertex stage: + + +Shader version: 500 +0:? Sequence +0:1 Function Definition: @main(vf4;vf2; ( temp void) +0:1 Function Parameters: +0:1 'pos' ( inout 4-component vector of float) +0:1 'uv' ( inout 2-component vector of float) +0:1 Function Definition: main( ( temp void) +0:1 Function Parameters: +0:? Sequence +0:1 move second child to first child ( temp 4-component vector of float) +0:? 'pos' ( temp 4-component vector of float) +0:? 'pos' (layout( location=0) in 4-component vector of float) +0:1 move second child to first child ( temp 2-component vector of float) +0:? 'uv' ( temp 2-component vector of float) +0:? 'uv' (layout( location=1) in 2-component vector of float) +0:1 Function Call: @main(vf4;vf2; ( temp void) +0:? 'pos' ( temp 4-component vector of float) +0:? 'uv' ( temp 2-component vector of float) +0:1 move second child to first child ( temp 4-component vector of float) +0:? 'pos' ( out 4-component vector of float Position) +0:? 'pos' ( temp 4-component vector of float) +0:1 move second child to first child ( temp 2-component vector of float) +0:? 'uv' (layout( location=0) out 2-component vector of float) +0:? 'uv' ( temp 2-component vector of float) +0:? Linker Objects +0:? 'pos' (layout( location=0) in 4-component vector of float) +0:? 'uv' (layout( location=1) in 2-component vector of float) +0:? 'pos' ( out 4-component vector of float Position) +0:? 'uv' (layout( location=0) out 2-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 37 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 18 22 32 35 + Source HLSL 500 + Name 4 "main" + Name 14 "@main(vf4;vf2;" + Name 12 "pos" + Name 13 "uv" + Name 16 "pos" + Name 18 "pos" + Name 20 "uv" + Name 22 "uv" + Name 24 "param" + Name 26 "param" + Name 32 "pos" + Name 35 "uv" + Decorate 18(pos) Location 0 + Decorate 22(uv) Location 1 + Decorate 32(pos) BuiltIn Position + Decorate 35(uv) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeVector 6(float) 2 + 10: TypePointer Function 9(fvec2) + 11: TypeFunction 2 8(ptr) 10(ptr) + 17: TypePointer Input 7(fvec4) + 18(pos): 17(ptr) Variable Input + 21: TypePointer Input 9(fvec2) + 22(uv): 21(ptr) Variable Input + 31: TypePointer Output 7(fvec4) + 32(pos): 31(ptr) Variable Output + 34: TypePointer Output 9(fvec2) + 35(uv): 34(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 16(pos): 8(ptr) Variable Function + 20(uv): 10(ptr) Variable Function + 24(param): 8(ptr) Variable Function + 26(param): 10(ptr) Variable Function + 19: 7(fvec4) Load 18(pos) + Store 16(pos) 19 + 23: 9(fvec2) Load 22(uv) + Store 20(uv) 23 + 25: 7(fvec4) Load 16(pos) + Store 24(param) 25 + 27: 9(fvec2) Load 20(uv) + Store 26(param) 27 + 28: 2 FunctionCall 14(@main(vf4;vf2;) 24(param) 26(param) + 29: 7(fvec4) Load 24(param) + Store 16(pos) 29 + 30: 9(fvec2) Load 26(param) + Store 20(uv) 30 + 33: 7(fvec4) Load 16(pos) + Store 32(pos) 33 + 36: 9(fvec2) Load 20(uv) + Store 35(uv) 36 + Return + FunctionEnd +14(@main(vf4;vf2;): 2 Function None 11 + 12(pos): 8(ptr) FunctionParameter + 13(uv): 10(ptr) FunctionParameter + 15: Label + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.entry-out.frag.out b/Test/baseResults/hlsl.entry-out.frag.out index a8b47e9e9f..5f162b12e2 100644 --- a/Test/baseResults/hlsl.entry-out.frag.out +++ b/Test/baseResults/hlsl.entry-out.frag.out @@ -244,7 +244,7 @@ gl_FragCoord origin is upper left 0:? 'out3.i' (layout( location=5) out 2-component vector of int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 89 Capability Shader diff --git a/Test/baseResults/hlsl.entry.rename.frag.out b/Test/baseResults/hlsl.entry.rename.frag.out index 2fd15d1ddf..d17580521f 100644 --- a/Test/baseResults/hlsl.entry.rename.frag.out +++ b/Test/baseResults/hlsl.entry.rename.frag.out @@ -72,7 +72,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 32 Capability Shader @@ -92,10 +92,10 @@ gl_FragCoord origin is upper left MemberName 29($Global) 0 "also_not_the_entry_point" Name 31 "" Decorate 26(@entryPointOutput.Color) Location 0 - MemberDecorate 29($Global) 0 Offset 0 Decorate 29($Global) Block - Decorate 31 DescriptorSet 0 + MemberDecorate 29($Global) 0 Offset 0 Decorate 31 Binding 0 + Decorate 31 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 8: TypeFloat 32 diff --git a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out index 3ca773fe6b..ac6364dba9 100644 --- a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out +++ b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out @@ -1,6 +1,6 @@ hlsl.explicitDescriptorSet.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 31 Capability Shader @@ -21,19 +21,19 @@ hlsl.explicitDescriptorSet.frag MemberName 25($Global) 0 "floatval_amb" Name 27 "" Name 30 "floatbuff" - Decorate 13(g_sSamp2_amb) DescriptorSet 3 Decorate 13(g_sSamp2_amb) Binding 10 + Decorate 13(g_sSamp2_amb) DescriptorSet 3 Decorate 19(@entryPointOutput) Location 0 - Decorate 21(g_sSamp) DescriptorSet 3 Decorate 21(g_sSamp) Binding 11 - Decorate 24(g_tTex1df4) DescriptorSet 3 + Decorate 21(g_sSamp) DescriptorSet 3 Decorate 24(g_tTex1df4) Binding 20 - MemberDecorate 25($Global) 0 Offset 0 + Decorate 24(g_tTex1df4) DescriptorSet 3 Decorate 25($Global) Block - Decorate 27 DescriptorSet 3 + MemberDecorate 25($Global) 0 Offset 0 Decorate 27 Binding 0 - Decorate 30(floatbuff) DescriptorSet 3 + Decorate 27 DescriptorSet 3 Decorate 30(floatbuff) Binding 0 + Decorate 30(floatbuff) DescriptorSet 3 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out index 9ba0d93ff2..0693f026ab 100644 --- a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out +++ b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out @@ -1,6 +1,6 @@ hlsl.explicitDescriptorSet.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 31 Capability Shader @@ -21,19 +21,19 @@ hlsl.explicitDescriptorSet.frag MemberName 25($Global) 0 "floatval_amb" Name 27 "" Name 30 "floatbuff" - Decorate 13(g_sSamp2_amb) DescriptorSet 4 Decorate 13(g_sSamp2_amb) Binding 10 + Decorate 13(g_sSamp2_amb) DescriptorSet 4 Decorate 19(@entryPointOutput) Location 0 - Decorate 21(g_sSamp) DescriptorSet 4 Decorate 21(g_sSamp) Binding 11 - Decorate 24(g_tTex1df4) DescriptorSet 4 + Decorate 21(g_sSamp) DescriptorSet 4 Decorate 24(g_tTex1df4) Binding 20 - MemberDecorate 25($Global) 0 Offset 0 + Decorate 24(g_tTex1df4) DescriptorSet 4 Decorate 25($Global) Block - Decorate 27 DescriptorSet 4 + MemberDecorate 25($Global) 0 Offset 0 Decorate 27 Binding 0 - Decorate 30(floatbuff) DescriptorSet 4 + Decorate 27 DescriptorSet 4 Decorate 30(floatbuff) Binding 0 + Decorate 30(floatbuff) DescriptorSet 4 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.flatten.return.frag.out b/Test/baseResults/hlsl.flatten.return.frag.out index 9a51f1fceb..f27646299e 100644 --- a/Test/baseResults/hlsl.flatten.return.frag.out +++ b/Test/baseResults/hlsl.flatten.return.frag.out @@ -118,7 +118,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.other_struct_member3' (layout( location=3) out float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 49 Capability Shader diff --git a/Test/baseResults/hlsl.flattenOpaque.frag.out b/Test/baseResults/hlsl.flattenOpaque.frag.out index 9a29081b7c..47ea7d3f19 100644 --- a/Test/baseResults/hlsl.flattenOpaque.frag.out +++ b/Test/baseResults/hlsl.flattenOpaque.frag.out @@ -295,7 +295,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 122 Capability Shader @@ -336,14 +336,14 @@ gl_FragCoord origin is upper left Name 112 "param" Name 114 "param" Name 120 "@entryPointOutput" - Decorate 38(tex) DescriptorSet 0 Decorate 38(tex) Binding 0 - Decorate 82(s.s2D) DescriptorSet 0 + Decorate 38(tex) DescriptorSet 0 Decorate 82(s.s2D) Binding 1 - Decorate 97(s2.s2D) DescriptorSet 0 + Decorate 82(s.s2D) DescriptorSet 0 Decorate 97(s2.s2D) Binding 2 - Decorate 100(s2.tex) DescriptorSet 0 + Decorate 97(s2.s2D) DescriptorSet 0 Decorate 100(s2.tex) Binding 3 + Decorate 100(s2.tex) DescriptorSet 0 Decorate 120(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out index 10e8345013..482f818256 100644 --- a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out +++ b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out @@ -165,7 +165,7 @@ Shader version: 500 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 82 Capability Shader @@ -192,10 +192,10 @@ Shader version: 500 Name 69 "tex3" Name 71 "param" Name 80 "@entryPointOutput" - Decorate 43(g_tInputTexture_sampler) DescriptorSet 0 Decorate 43(g_tInputTexture_sampler) Binding 0 - Decorate 47(g_tInputTexture) DescriptorSet 0 + Decorate 43(g_tInputTexture_sampler) DescriptorSet 0 Decorate 47(g_tInputTexture) Binding 1 + Decorate 47(g_tInputTexture) DescriptorSet 0 Decorate 80(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out index c8d0b166e6..7ff5c4aa7d 100644 --- a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out +++ b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out @@ -107,7 +107,7 @@ Shader version: 500 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 59 Capability Shader @@ -128,10 +128,10 @@ Shader version: 500 Name 47 "g_tInputTexture" Name 51 "param" Name 57 "@entryPointOutput" - Decorate 44(g_tInputTexture_sampler) DescriptorSet 0 Decorate 44(g_tInputTexture_sampler) Binding 0 - Decorate 47(g_tInputTexture) DescriptorSet 0 + Decorate 44(g_tInputTexture_sampler) DescriptorSet 0 Decorate 47(g_tInputTexture) Binding 1 + Decorate 47(g_tInputTexture) DescriptorSet 0 Decorate 57(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.flattenSubset.frag.out b/Test/baseResults/hlsl.flattenSubset.frag.out index 7ec229a498..b96c1415ff 100644 --- a/Test/baseResults/hlsl.flattenSubset.frag.out +++ b/Test/baseResults/hlsl.flattenSubset.frag.out @@ -115,7 +115,7 @@ gl_FragCoord origin is upper left 0:? 'vpos' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 54 Capability Shader @@ -151,10 +151,10 @@ gl_FragCoord origin is upper left Name 47 "vpos" Name 50 "@entryPointOutput" Name 51 "param" - Decorate 21(samp) DescriptorSet 0 Decorate 21(samp) Binding 0 - Decorate 33(tex) DescriptorSet 0 + Decorate 21(samp) DescriptorSet 0 Decorate 33(tex) Binding 1 + Decorate 33(tex) DescriptorSet 0 Decorate 47(vpos) Location 0 Decorate 50(@entryPointOutput) Location 0 2: TypeVoid diff --git a/Test/baseResults/hlsl.flattenSubset2.frag.out b/Test/baseResults/hlsl.flattenSubset2.frag.out index c319637832..46cbcd4eb0 100644 --- a/Test/baseResults/hlsl.flattenSubset2.frag.out +++ b/Test/baseResults/hlsl.flattenSubset2.frag.out @@ -149,7 +149,7 @@ gl_FragCoord origin is upper left 0:? 'vpos' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 56 Capability Shader @@ -179,8 +179,8 @@ gl_FragCoord origin is upper left Name 49 "vpos" Name 52 "@entryPointOutput" Name 53 "param" - Decorate 36(someTex) DescriptorSet 0 Decorate 36(someTex) Binding 0 + Decorate 36(someTex) DescriptorSet 0 Decorate 49(vpos) Location 0 Decorate 52(@entryPointOutput) Location 0 2: TypeVoid diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out index 00bdea9414..65f69da47e 100644 --- a/Test/baseResults/hlsl.float1.frag.out +++ b/Test/baseResults/hlsl.float1.frag.out @@ -65,7 +65,7 @@ gl_FragCoord origin is upper left 0:? 'scalar' ( global float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out index 0dbd935a9a..8b9fc02c93 100644 --- a/Test/baseResults/hlsl.float4.frag.out +++ b/Test/baseResults/hlsl.float4.frag.out @@ -42,7 +42,7 @@ gl_FragCoord origin is upper left 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform bool ff1, layout( offset=20) uniform float ff2, layout( binding=0 offset=32) uniform 4-component vector of float ff3, layout( binding=1 offset=48) uniform 4-component vector of float ff4}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 26 Capability Shader @@ -61,14 +61,14 @@ gl_FragCoord origin is upper left MemberName 15($Global) 3 "ff3" MemberName 15($Global) 4 "ff4" Name 17 "" + Decorate 15($Global) Block MemberDecorate 15($Global) 0 Offset 0 MemberDecorate 15($Global) 1 Offset 16 MemberDecorate 15($Global) 2 Offset 20 MemberDecorate 15($Global) 3 Offset 32 MemberDecorate 15($Global) 4 Offset 48 - Decorate 15($Global) Block - Decorate 17 DescriptorSet 0 Decorate 17 Binding 0 + Decorate 17 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.forLoop.frag.out b/Test/baseResults/hlsl.forLoop.frag.out index 7bce346934..f1aa20b31f 100644 --- a/Test/baseResults/hlsl.forLoop.frag.out +++ b/Test/baseResults/hlsl.forLoop.frag.out @@ -510,7 +510,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 240 Capability Shader diff --git a/Test/baseResults/hlsl.format.rwtexture.frag.out b/Test/baseResults/hlsl.format.rwtexture.frag.out index e6eebbf29f..eb81229de5 100644 --- a/Test/baseResults/hlsl.format.rwtexture.frag.out +++ b/Test/baseResults/hlsl.format.rwtexture.frag.out @@ -184,7 +184,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 160 Capability Shader @@ -248,92 +248,92 @@ using depth_any Name 159 "g_tTex25" Decorate 29(@entryPointOutput.Color) Location 0 Decorate 33(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 38(g_sSamp) DescriptorSet 0 Decorate 38(g_sSamp) Binding 0 - Decorate 41(g_tTex1df4) DescriptorSet 0 + Decorate 38(g_sSamp) DescriptorSet 0 Decorate 41(g_tTex1df4) Binding 0 - Decorate 44(g_tTex1di4) DescriptorSet 0 + Decorate 41(g_tTex1df4) DescriptorSet 0 Decorate 44(g_tTex1di4) Binding 0 - Decorate 48(g_tTex1du4) DescriptorSet 0 + Decorate 44(g_tTex1di4) DescriptorSet 0 Decorate 48(g_tTex1du4) Binding 0 - Decorate 51(g_tTex2df4) DescriptorSet 0 + Decorate 48(g_tTex1du4) DescriptorSet 0 Decorate 51(g_tTex2df4) Binding 0 - Decorate 54(g_tTex2di4) DescriptorSet 0 + Decorate 51(g_tTex2df4) DescriptorSet 0 Decorate 54(g_tTex2di4) Binding 0 - Decorate 57(g_tTex2du4) DescriptorSet 0 + Decorate 54(g_tTex2di4) DescriptorSet 0 Decorate 57(g_tTex2du4) Binding 0 - Decorate 60(g_tTex3df4) DescriptorSet 0 - Decorate 60(g_tTex3df4) Binding 0 + Decorate 57(g_tTex2du4) DescriptorSet 0 Decorate 60(g_tTex3df4) NonWritable - Decorate 63(g_tTex3di4) DescriptorSet 0 - Decorate 63(g_tTex3di4) Binding 0 + Decorate 60(g_tTex3df4) Binding 0 + Decorate 60(g_tTex3df4) DescriptorSet 0 Decorate 63(g_tTex3di4) NonReadable - Decorate 66(g_tTex3du4) DescriptorSet 0 - Decorate 66(g_tTex3du4) Binding 0 + Decorate 63(g_tTex3di4) Binding 0 + Decorate 63(g_tTex3di4) DescriptorSet 0 Decorate 66(g_tTex3du4) NonWritable Decorate 66(g_tTex3du4) NonReadable - Decorate 69(g_tTex1df4a) DescriptorSet 0 + Decorate 66(g_tTex3du4) Binding 0 + Decorate 66(g_tTex3du4) DescriptorSet 0 Decorate 69(g_tTex1df4a) Binding 0 - Decorate 72(g_tTex1di4a) DescriptorSet 0 + Decorate 69(g_tTex1df4a) DescriptorSet 0 Decorate 72(g_tTex1di4a) Binding 0 - Decorate 75(g_tTex1du4a) DescriptorSet 0 + Decorate 72(g_tTex1di4a) DescriptorSet 0 Decorate 75(g_tTex1du4a) Binding 0 - Decorate 78(g_tTex2df4a) DescriptorSet 0 + Decorate 75(g_tTex1du4a) DescriptorSet 0 Decorate 78(g_tTex2df4a) Binding 0 - Decorate 81(g_tTex2di4a) DescriptorSet 0 + Decorate 78(g_tTex2df4a) DescriptorSet 0 Decorate 81(g_tTex2di4a) Binding 0 - Decorate 84(g_tTex2du4a) DescriptorSet 0 + Decorate 81(g_tTex2di4a) DescriptorSet 0 Decorate 84(g_tTex2du4a) Binding 0 - Decorate 87(g_tTex01) DescriptorSet 0 + Decorate 84(g_tTex2du4a) DescriptorSet 0 Decorate 87(g_tTex01) Binding 0 - Decorate 90(g_tTex02) DescriptorSet 0 + Decorate 87(g_tTex01) DescriptorSet 0 Decorate 90(g_tTex02) Binding 0 - Decorate 93(g_tTex03) DescriptorSet 0 + Decorate 90(g_tTex02) DescriptorSet 0 Decorate 93(g_tTex03) Binding 0 - Decorate 96(g_tTex04) DescriptorSet 0 + Decorate 93(g_tTex03) DescriptorSet 0 Decorate 96(g_tTex04) Binding 0 - Decorate 99(g_tTex05) DescriptorSet 0 + Decorate 96(g_tTex04) DescriptorSet 0 Decorate 99(g_tTex05) Binding 0 - Decorate 102(g_tTex06) DescriptorSet 0 + Decorate 99(g_tTex05) DescriptorSet 0 Decorate 102(g_tTex06) Binding 0 - Decorate 105(g_tTex07) DescriptorSet 0 + Decorate 102(g_tTex06) DescriptorSet 0 Decorate 105(g_tTex07) Binding 0 - Decorate 108(g_tTex08) DescriptorSet 0 + Decorate 105(g_tTex07) DescriptorSet 0 Decorate 108(g_tTex08) Binding 0 - Decorate 111(g_tTex09) DescriptorSet 0 + Decorate 108(g_tTex08) DescriptorSet 0 Decorate 111(g_tTex09) Binding 0 - Decorate 114(g_tTex10) DescriptorSet 0 + Decorate 111(g_tTex09) DescriptorSet 0 Decorate 114(g_tTex10) Binding 0 - Decorate 117(g_tTex11) DescriptorSet 0 + Decorate 114(g_tTex10) DescriptorSet 0 Decorate 117(g_tTex11) Binding 0 - Decorate 120(g_tTex12) DescriptorSet 0 + Decorate 117(g_tTex11) DescriptorSet 0 Decorate 120(g_tTex12) Binding 0 - Decorate 123(g_tTex13) DescriptorSet 0 + Decorate 120(g_tTex12) DescriptorSet 0 Decorate 123(g_tTex13) Binding 0 - Decorate 126(g_tTex14) DescriptorSet 0 + Decorate 123(g_tTex13) DescriptorSet 0 Decorate 126(g_tTex14) Binding 0 - Decorate 129(g_tTex15) DescriptorSet 0 + Decorate 126(g_tTex14) DescriptorSet 0 Decorate 129(g_tTex15) Binding 0 - Decorate 132(g_tTex16) DescriptorSet 0 + Decorate 129(g_tTex15) DescriptorSet 0 Decorate 132(g_tTex16) Binding 0 - Decorate 135(g_tTex17) DescriptorSet 0 + Decorate 132(g_tTex16) DescriptorSet 0 Decorate 135(g_tTex17) Binding 0 - Decorate 138(g_tTex18) DescriptorSet 0 + Decorate 135(g_tTex17) DescriptorSet 0 Decorate 138(g_tTex18) Binding 0 - Decorate 141(g_tTex19) DescriptorSet 0 + Decorate 138(g_tTex18) DescriptorSet 0 Decorate 141(g_tTex19) Binding 0 - Decorate 144(g_tTex20) DescriptorSet 0 + Decorate 141(g_tTex19) DescriptorSet 0 Decorate 144(g_tTex20) Binding 0 - Decorate 147(g_tTex21) DescriptorSet 0 + Decorate 144(g_tTex20) DescriptorSet 0 Decorate 147(g_tTex21) Binding 0 - Decorate 150(g_tTex22) DescriptorSet 0 + Decorate 147(g_tTex21) DescriptorSet 0 Decorate 150(g_tTex22) Binding 0 - Decorate 153(g_tTex23) DescriptorSet 0 + Decorate 150(g_tTex22) DescriptorSet 0 Decorate 153(g_tTex23) Binding 0 - Decorate 156(g_tTex24) DescriptorSet 0 + Decorate 153(g_tTex23) DescriptorSet 0 Decorate 156(g_tTex24) Binding 0 - Decorate 159(g_tTex25) DescriptorSet 0 + Decorate 156(g_tTex24) DescriptorSet 0 Decorate 159(g_tTex25) Binding 0 + Decorate 159(g_tTex25) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.fraggeom.frag.out b/Test/baseResults/hlsl.fraggeom.frag.out index d86fa96919..400f530e6e 100644 --- a/Test/baseResults/hlsl.fraggeom.frag.out +++ b/Test/baseResults/hlsl.fraggeom.frag.out @@ -64,7 +64,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 25 Capability Shader diff --git a/Test/baseResults/hlsl.function.frag.out b/Test/baseResults/hlsl.function.frag.out index faa31479c0..ebf20fec3a 100644 --- a/Test/baseResults/hlsl.function.frag.out +++ b/Test/baseResults/hlsl.function.frag.out @@ -1,6 +1,6 @@ hlsl.function.frag -ERROR: 0:24: 'fun1' : unknown variable -ERROR: 0:24: 'return' : type does not match, or is not convertible to, the function's return type +ERROR: 0:29: 'fun1' : unknown variable +ERROR: 0:29: 'return' : type does not match, or is not convertible to, the function's return type ERROR: 2 compilation errors. No code generated. @@ -16,45 +16,63 @@ ERROR: node is still EOpNull! 0:3 1.000000 0:3 1.000000 0:3 1.000000 -0:7 Function Definition: fun2(vf4; ( temp uint) +0:7 Function Definition: fun2(vf4; ( temp 4-component vector of float) 0:7 Function Parameters: -0:7 'col' ( in 4-component vector of float) +0:7 'col' ( const (read only) 4-component vector of float) 0:? Sequence 0:8 Branch: Return with expression -0:8 Constant: -0:8 7 (const uint) -0:12 Function Definition: fun4(u1;u1; ( temp 4-component vector of float) +0:8 Construct vec4 ( temp 4-component vector of float) +0:8 Comma ( temp float) +0:8 Comma ( temp float) +0:8 Comma ( temp float) +0:8 Constant: +0:8 1.000000 +0:8 Constant: +0:8 2.000000 +0:8 Constant: +0:8 3.000000 +0:8 Constant: +0:8 4.000000 +0:12 Function Definition: fun3(vf4; ( temp uint) 0:12 Function Parameters: -0:12 'id1' ( in uint) -0:12 'id2' ( uniform uint) +0:12 'col' ( const (read only) 4-component vector of float) 0:? Sequence 0:13 Branch: Return with expression -0:13 Construct vec4 ( temp 4-component vector of float) -0:13 Convert uint to float ( temp float) -0:13 component-wise multiply ( temp uint) -0:13 'id1' ( in uint) -0:13 'id2' ( uniform uint) -0:17 Function Definition: fun1(i1; ( temp 4-component vector of float) +0:13 Constant: +0:13 7 (const uint) +0:17 Function Definition: fun4(u1;u1; ( temp 4-component vector of float) 0:17 Function Parameters: -0:17 'index' ( in int) +0:17 'id1' ( in uint) +0:17 'id2' ( uniform uint) 0:? Sequence -0:18 Sequence -0:18 move second child to first child ( temp uint) -0:18 'entityId' ( temp uint) -0:18 Function Call: fun2(vf4; ( temp uint) -0:18 Function Call: fun0( ( temp 4-component vector of float) -0:19 Branch: Return with expression -0:19 Function Call: fun4(u1;u1; ( temp 4-component vector of float) -0:19 'entityId' ( temp uint) -0:19 'entityId' ( temp uint) -0:23 Function Definition: @main( ( temp int) -0:23 Function Parameters: -0:23 Function Definition: main( ( temp void) -0:23 Function Parameters: +0:18 Branch: Return with expression +0:18 Construct vec4 ( temp 4-component vector of float) +0:18 Convert uint to float ( temp float) +0:18 component-wise multiply ( temp uint) +0:18 'id1' ( in uint) +0:18 'id2' ( uniform uint) +0:22 Function Definition: fun1(i1; ( temp 4-component vector of float) +0:22 Function Parameters: +0:22 'index' ( in int) 0:? Sequence -0:23 move second child to first child ( temp int) +0:23 Sequence +0:23 move second child to first child ( temp uint) +0:23 'entityId' ( temp uint) +0:23 Function Call: fun3(vf4; ( temp uint) +0:23 Function Call: fun2(vf4; ( temp 4-component vector of float) +0:23 Function Call: fun0( ( temp 4-component vector of float) +0:24 Branch: Return with expression +0:24 Function Call: fun4(u1;u1; ( temp 4-component vector of float) +0:24 'entityId' ( temp uint) +0:24 'entityId' ( temp uint) +0:28 Function Definition: @main( ( temp int) +0:28 Function Parameters: +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: +0:? Sequence +0:28 move second child to first child ( temp int) 0:? '@entryPointOutput' (layout( location=0) out int) -0:23 Function Call: @main( ( temp int) +0:28 Function Call: @main( ( temp int) 0:? Linker Objects 0:? '@entryPointOutput' (layout( location=0) out int) @@ -74,45 +92,63 @@ ERROR: node is still EOpNull! 0:3 1.000000 0:3 1.000000 0:3 1.000000 -0:7 Function Definition: fun2(vf4; ( temp uint) +0:7 Function Definition: fun2(vf4; ( temp 4-component vector of float) 0:7 Function Parameters: -0:7 'col' ( in 4-component vector of float) +0:7 'col' ( const (read only) 4-component vector of float) 0:? Sequence 0:8 Branch: Return with expression -0:8 Constant: -0:8 7 (const uint) -0:12 Function Definition: fun4(u1;u1; ( temp 4-component vector of float) +0:8 Construct vec4 ( temp 4-component vector of float) +0:8 Comma ( temp float) +0:8 Comma ( temp float) +0:8 Comma ( temp float) +0:8 Constant: +0:8 1.000000 +0:8 Constant: +0:8 2.000000 +0:8 Constant: +0:8 3.000000 +0:8 Constant: +0:8 4.000000 +0:12 Function Definition: fun3(vf4; ( temp uint) 0:12 Function Parameters: -0:12 'id1' ( in uint) -0:12 'id2' ( uniform uint) +0:12 'col' ( const (read only) 4-component vector of float) 0:? Sequence 0:13 Branch: Return with expression -0:13 Construct vec4 ( temp 4-component vector of float) -0:13 Convert uint to float ( temp float) -0:13 component-wise multiply ( temp uint) -0:13 'id1' ( in uint) -0:13 'id2' ( uniform uint) -0:17 Function Definition: fun1(i1; ( temp 4-component vector of float) +0:13 Constant: +0:13 7 (const uint) +0:17 Function Definition: fun4(u1;u1; ( temp 4-component vector of float) 0:17 Function Parameters: -0:17 'index' ( in int) +0:17 'id1' ( in uint) +0:17 'id2' ( uniform uint) +0:? Sequence +0:18 Branch: Return with expression +0:18 Construct vec4 ( temp 4-component vector of float) +0:18 Convert uint to float ( temp float) +0:18 component-wise multiply ( temp uint) +0:18 'id1' ( in uint) +0:18 'id2' ( uniform uint) +0:22 Function Definition: fun1(i1; ( temp 4-component vector of float) +0:22 Function Parameters: +0:22 'index' ( in int) 0:? Sequence -0:18 Sequence -0:18 move second child to first child ( temp uint) -0:18 'entityId' ( temp uint) -0:18 Function Call: fun2(vf4; ( temp uint) -0:18 Function Call: fun0( ( temp 4-component vector of float) -0:19 Branch: Return with expression -0:19 Function Call: fun4(u1;u1; ( temp 4-component vector of float) -0:19 'entityId' ( temp uint) -0:19 'entityId' ( temp uint) -0:23 Function Definition: @main( ( temp int) -0:23 Function Parameters: -0:23 Function Definition: main( ( temp void) -0:23 Function Parameters: +0:23 Sequence +0:23 move second child to first child ( temp uint) +0:23 'entityId' ( temp uint) +0:23 Function Call: fun3(vf4; ( temp uint) +0:23 Function Call: fun2(vf4; ( temp 4-component vector of float) +0:23 Function Call: fun0( ( temp 4-component vector of float) +0:24 Branch: Return with expression +0:24 Function Call: fun4(u1;u1; ( temp 4-component vector of float) +0:24 'entityId' ( temp uint) +0:24 'entityId' ( temp uint) +0:28 Function Definition: @main( ( temp int) +0:28 Function Parameters: +0:28 Function Definition: main( ( temp void) +0:28 Function Parameters: 0:? Sequence -0:23 move second child to first child ( temp int) +0:28 move second child to first child ( temp int) 0:? '@entryPointOutput' (layout( location=0) out int) -0:23 Function Call: @main( ( temp int) +0:28 Function Call: @main( ( temp int) 0:? Linker Objects 0:? '@entryPointOutput' (layout( location=0) out int) diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out index e39d5a2a74..e0a1901f58 100644 --- a/Test/baseResults/hlsl.gather.array.dx10.frag.out +++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out @@ -262,7 +262,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 124 Capability Shader @@ -300,30 +300,30 @@ using depth_any Name 117 "g_tTex1df4" Name 120 "g_tTex1di4a" Name 123 "g_tTex1du4a" - Decorate 16(g_tTex2df4a) DescriptorSet 0 Decorate 16(g_tTex2df4a) Binding 2 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex2df4a) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 37(g_tTex2di4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 37(g_tTex2di4a) Binding 3 - Decorate 52(g_tTex2du4a) DescriptorSet 0 + Decorate 37(g_tTex2di4a) DescriptorSet 0 Decorate 52(g_tTex2du4a) Binding 4 - Decorate 64(g_tTexcdf4a) DescriptorSet 0 + Decorate 52(g_tTex2du4a) DescriptorSet 0 Decorate 64(g_tTexcdf4a) Binding 5 - Decorate 74(g_tTexcdi4a) DescriptorSet 0 + Decorate 64(g_tTexcdf4a) DescriptorSet 0 Decorate 74(g_tTexcdi4a) Binding 6 - Decorate 84(g_tTexcdu4a) DescriptorSet 0 + Decorate 74(g_tTexcdi4a) DescriptorSet 0 Decorate 84(g_tTexcdu4a) Binding 7 + Decorate 84(g_tTexcdu4a) DescriptorSet 0 Decorate 107(@entryPointOutput.Color) Location 0 Decorate 111(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 116(g_tTex1df4a) DescriptorSet 0 Decorate 116(g_tTex1df4a) Binding 1 - Decorate 117(g_tTex1df4) DescriptorSet 0 + Decorate 116(g_tTex1df4a) DescriptorSet 0 Decorate 117(g_tTex1df4) Binding 0 - Decorate 120(g_tTex1di4a) DescriptorSet 0 + Decorate 117(g_tTex1df4) DescriptorSet 0 Decorate 120(g_tTex1di4a) Binding 0 - Decorate 123(g_tTex1du4a) DescriptorSet 0 + Decorate 120(g_tTex1di4a) DescriptorSet 0 Decorate 123(g_tTex1du4a) Binding 0 + Decorate 123(g_tTex1du4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out index 99efd61455..6a9df41d5f 100644 --- a/Test/baseResults/hlsl.gather.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out @@ -258,7 +258,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 135 Capability Shader @@ -299,38 +299,38 @@ using depth_any Name 128 "g_tTex3df4" Name 131 "g_tTex3di4" Name 134 "g_tTex3du4" - Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 16(g_tTex2df4) Binding 2 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 36(g_tTex2di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 36(g_tTex2di4) Binding 3 - Decorate 51(g_tTex2du4) DescriptorSet 0 + Decorate 36(g_tTex2di4) DescriptorSet 0 Decorate 51(g_tTex2du4) Binding 4 - Decorate 63(g_tTexcdf4) DescriptorSet 0 + Decorate 51(g_tTex2du4) DescriptorSet 0 Decorate 63(g_tTexcdf4) Binding 5 - Decorate 74(g_tTexcdi4) DescriptorSet 0 + Decorate 63(g_tTexcdf4) DescriptorSet 0 Decorate 74(g_tTexcdi4) Binding 6 - Decorate 84(g_tTexcdu4) DescriptorSet 0 + Decorate 74(g_tTexcdi4) DescriptorSet 0 Decorate 84(g_tTexcdu4) Binding 7 + Decorate 84(g_tTexcdu4) DescriptorSet 0 Decorate 108(@entryPointOutput.Color) Location 0 Decorate 112(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 115(g_sSamp2d) DescriptorSet 0 Decorate 115(g_sSamp2d) Binding 0 - Decorate 118(g_tTex1df4a) DescriptorSet 0 + Decorate 115(g_sSamp2d) DescriptorSet 0 Decorate 118(g_tTex1df4a) Binding 1 - Decorate 119(g_tTex1df4) DescriptorSet 0 + Decorate 118(g_tTex1df4a) DescriptorSet 0 Decorate 119(g_tTex1df4) Binding 0 - Decorate 122(g_tTex1di4) DescriptorSet 0 + Decorate 119(g_tTex1df4) DescriptorSet 0 Decorate 122(g_tTex1di4) Binding 0 - Decorate 125(g_tTex1du4) DescriptorSet 0 + Decorate 122(g_tTex1di4) DescriptorSet 0 Decorate 125(g_tTex1du4) Binding 0 - Decorate 128(g_tTex3df4) DescriptorSet 0 + Decorate 125(g_tTex1du4) DescriptorSet 0 Decorate 128(g_tTex3df4) Binding 0 - Decorate 131(g_tTex3di4) DescriptorSet 0 + Decorate 128(g_tTex3df4) DescriptorSet 0 Decorate 131(g_tTex3di4) Binding 0 - Decorate 134(g_tTex3du4) DescriptorSet 0 + Decorate 131(g_tTex3di4) DescriptorSet 0 Decorate 134(g_tTex3du4) Binding 0 + Decorate 134(g_tTex3du4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out index 96525e0c9b..8bffb13108 100644 --- a/Test/baseResults/hlsl.gather.basic.dx10.vert.out +++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out @@ -220,7 +220,7 @@ Shader version: 500 0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 126 Capability Shader @@ -256,37 +256,37 @@ Shader version: 500 Name 119 "g_tTex3df4" Name 122 "g_tTex3di4" Name 125 "g_tTex3du4" - Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 16(g_tTex2df4) Binding 2 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 36(g_tTex2di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 36(g_tTex2di4) Binding 3 - Decorate 51(g_tTex2du4) DescriptorSet 0 + Decorate 36(g_tTex2di4) DescriptorSet 0 Decorate 51(g_tTex2du4) Binding 4 - Decorate 63(g_tTexcdf4) DescriptorSet 0 + Decorate 51(g_tTex2du4) DescriptorSet 0 Decorate 63(g_tTexcdf4) Binding 5 - Decorate 74(g_tTexcdi4) DescriptorSet 0 + Decorate 63(g_tTexcdf4) DescriptorSet 0 Decorate 74(g_tTexcdi4) Binding 6 - Decorate 84(g_tTexcdu4) DescriptorSet 0 + Decorate 74(g_tTexcdi4) DescriptorSet 0 Decorate 84(g_tTexcdu4) Binding 7 + Decorate 84(g_tTexcdu4) DescriptorSet 0 Decorate 103(@entryPointOutput.Pos) BuiltIn Position - Decorate 106(g_sSamp2d) DescriptorSet 0 Decorate 106(g_sSamp2d) Binding 0 - Decorate 109(g_tTex1df4a) DescriptorSet 0 + Decorate 106(g_sSamp2d) DescriptorSet 0 Decorate 109(g_tTex1df4a) Binding 1 - Decorate 110(g_tTex1df4) DescriptorSet 0 + Decorate 109(g_tTex1df4a) DescriptorSet 0 Decorate 110(g_tTex1df4) Binding 0 - Decorate 113(g_tTex1di4) DescriptorSet 0 + Decorate 110(g_tTex1df4) DescriptorSet 0 Decorate 113(g_tTex1di4) Binding 0 - Decorate 116(g_tTex1du4) DescriptorSet 0 + Decorate 113(g_tTex1di4) DescriptorSet 0 Decorate 116(g_tTex1du4) Binding 0 - Decorate 119(g_tTex3df4) DescriptorSet 0 + Decorate 116(g_tTex1du4) DescriptorSet 0 Decorate 119(g_tTex3df4) Binding 0 - Decorate 122(g_tTex3di4) DescriptorSet 0 + Decorate 119(g_tTex3df4) DescriptorSet 0 Decorate 122(g_tTex3di4) Binding 0 - Decorate 125(g_tTex3du4) DescriptorSet 0 + Decorate 122(g_tTex3di4) DescriptorSet 0 Decorate 125(g_tTex3du4) Binding 0 + Decorate 125(g_tTex3du4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out index 59bd8da88b..ae409bbd3e 100644 --- a/Test/baseResults/hlsl.gather.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out @@ -208,7 +208,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 114 Capability Shader @@ -245,36 +245,36 @@ using depth_any Name 107 "g_tTexcdf4" Name 110 "g_tTexcdi4" Name 113 "g_tTexcdu4" - Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 16(g_tTex2df4) Binding 2 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 39(g_tTex2di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 39(g_tTex2di4) Binding 3 - Decorate 55(g_tTex2du4) DescriptorSet 0 + Decorate 39(g_tTex2di4) DescriptorSet 0 Decorate 55(g_tTex2du4) Binding 4 + Decorate 55(g_tTex2du4) DescriptorSet 0 Decorate 79(@entryPointOutput.Color) Location 0 Decorate 83(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 88(g_tTex1df4a) DescriptorSet 0 Decorate 88(g_tTex1df4a) Binding 1 - Decorate 89(g_tTex1df4) DescriptorSet 0 + Decorate 88(g_tTex1df4a) DescriptorSet 0 Decorate 89(g_tTex1df4) Binding 0 - Decorate 92(g_tTex1di4) DescriptorSet 0 + Decorate 89(g_tTex1df4) DescriptorSet 0 Decorate 92(g_tTex1di4) Binding 0 - Decorate 95(g_tTex1du4) DescriptorSet 0 + Decorate 92(g_tTex1di4) DescriptorSet 0 Decorate 95(g_tTex1du4) Binding 0 - Decorate 98(g_tTex3df4) DescriptorSet 0 + Decorate 95(g_tTex1du4) DescriptorSet 0 Decorate 98(g_tTex3df4) Binding 0 - Decorate 101(g_tTex3di4) DescriptorSet 0 + Decorate 98(g_tTex3df4) DescriptorSet 0 Decorate 101(g_tTex3di4) Binding 0 - Decorate 104(g_tTex3du4) DescriptorSet 0 + Decorate 101(g_tTex3di4) DescriptorSet 0 Decorate 104(g_tTex3du4) Binding 0 - Decorate 107(g_tTexcdf4) DescriptorSet 0 + Decorate 104(g_tTex3du4) DescriptorSet 0 Decorate 107(g_tTexcdf4) Binding 0 - Decorate 110(g_tTexcdi4) DescriptorSet 0 + Decorate 107(g_tTexcdf4) DescriptorSet 0 Decorate 110(g_tTexcdi4) Binding 0 - Decorate 113(g_tTexcdu4) DescriptorSet 0 + Decorate 110(g_tTexcdi4) DescriptorSet 0 Decorate 113(g_tTexcdu4) Binding 0 + Decorate 113(g_tTexcdu4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out index 942bd923b3..695428ae19 100644 --- a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out @@ -202,7 +202,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 97 Capability Shader @@ -233,24 +233,24 @@ using depth_any Name 90 "g_tTex1df4" Name 93 "g_tTex1di4" Name 96 "g_tTex1du4" - Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 16(g_tTex2df4) Binding 2 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 40(g_tTex2di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 40(g_tTex2di4) Binding 3 - Decorate 55(g_tTex2du4) DescriptorSet 0 + Decorate 40(g_tTex2di4) DescriptorSet 0 Decorate 55(g_tTex2du4) Binding 4 + Decorate 55(g_tTex2du4) DescriptorSet 0 Decorate 80(@entryPointOutput.Color) Location 0 Decorate 84(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 89(g_tTex1df4a) DescriptorSet 0 Decorate 89(g_tTex1df4a) Binding 1 - Decorate 90(g_tTex1df4) DescriptorSet 0 + Decorate 89(g_tTex1df4a) DescriptorSet 0 Decorate 90(g_tTex1df4) Binding 0 - Decorate 93(g_tTex1di4) DescriptorSet 0 + Decorate 90(g_tTex1df4) DescriptorSet 0 Decorate 93(g_tTex1di4) Binding 0 - Decorate 96(g_tTex1du4) DescriptorSet 0 + Decorate 93(g_tTex1di4) DescriptorSet 0 Decorate 96(g_tTex1du4) Binding 0 + Decorate 96(g_tTex1du4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out index 75ea03686c..3bf68b5597 100644 --- a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out +++ b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out @@ -750,7 +750,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 255 Capability Shader @@ -812,37 +812,37 @@ using depth_any Name 248 "g_tTex1df4a" Name 251 "g_tTex1di4a" Name 254 "g_tTex1du4a" - Decorate 16(g_tTex2df4a) DescriptorSet 0 Decorate 16(g_tTex2df4a) Binding 1 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex2df4a) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 26($Global) Block MemberDecorate 26($Global) 0 Offset 0 MemberDecorate 26($Global) 1 Offset 8 MemberDecorate 26($Global) 2 Offset 16 MemberDecorate 26($Global) 3 Offset 32 - Decorate 26($Global) Block - Decorate 28 DescriptorSet 0 Decorate 28 Binding 7 - Decorate 41(g_tTex2di4a) DescriptorSet 0 + Decorate 28 DescriptorSet 0 Decorate 41(g_tTex2di4a) Binding 2 - Decorate 55(g_tTex2du4a) DescriptorSet 0 + Decorate 41(g_tTex2di4a) DescriptorSet 0 Decorate 55(g_tTex2du4a) Binding 3 - Decorate 131(g_tTexcdf4a) DescriptorSet 0 + Decorate 55(g_tTex2du4a) DescriptorSet 0 Decorate 131(g_tTexcdf4a) Binding 4 - Decorate 143(g_tTexcdi4a) DescriptorSet 0 + Decorate 131(g_tTexcdf4a) DescriptorSet 0 Decorate 143(g_tTexcdi4a) Binding 5 - Decorate 154(g_tTexcdu4a) DescriptorSet 0 + Decorate 143(g_tTexcdi4a) DescriptorSet 0 Decorate 154(g_tTexcdu4a) Binding 6 + Decorate 154(g_tTexcdu4a) DescriptorSet 0 Decorate 238(@entryPointOutput.Color) Location 0 Decorate 242(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 245(g_sSamp2d) DescriptorSet 0 Decorate 245(g_sSamp2d) Binding 0 - Decorate 248(g_tTex1df4a) DescriptorSet 0 + Decorate 245(g_sSamp2d) DescriptorSet 0 Decorate 248(g_tTex1df4a) Binding 0 - Decorate 251(g_tTex1di4a) DescriptorSet 0 + Decorate 248(g_tTex1df4a) DescriptorSet 0 Decorate 251(g_tTex1di4a) Binding 0 - Decorate 254(g_tTex1du4a) DescriptorSet 0 + Decorate 251(g_tTex1di4a) DescriptorSet 0 Decorate 254(g_tTex1du4a) Binding 0 + Decorate 254(g_tTex1du4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out index 886ad73784..e94789a3f0 100644 --- a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out @@ -758,7 +758,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 265 Capability Shader @@ -823,45 +823,45 @@ using depth_any Name 258 "g_tTex3df4" Name 261 "g_tTex3di4" Name 264 "g_tTex3du4" - Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 16(g_tTex2df4) Binding 2 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 26($Global) Block MemberDecorate 26($Global) 0 Offset 0 MemberDecorate 26($Global) 1 Offset 8 MemberDecorate 26($Global) 2 Offset 16 MemberDecorate 26($Global) 3 Offset 32 - Decorate 26($Global) Block - Decorate 28 DescriptorSet 0 Decorate 28 Binding 8 - Decorate 41(g_tTex2di4) DescriptorSet 0 + Decorate 28 DescriptorSet 0 Decorate 41(g_tTex2di4) Binding 3 - Decorate 55(g_tTex2du4) DescriptorSet 0 + Decorate 41(g_tTex2di4) DescriptorSet 0 Decorate 55(g_tTex2du4) Binding 4 - Decorate 131(g_tTexcdf4) DescriptorSet 0 + Decorate 55(g_tTex2du4) DescriptorSet 0 Decorate 131(g_tTexcdf4) Binding 5 - Decorate 143(g_tTexcdi4) DescriptorSet 0 + Decorate 131(g_tTexcdf4) DescriptorSet 0 Decorate 143(g_tTexcdi4) Binding 6 - Decorate 154(g_tTexcdu4) DescriptorSet 0 + Decorate 143(g_tTexcdi4) DescriptorSet 0 Decorate 154(g_tTexcdu4) Binding 7 + Decorate 154(g_tTexcdu4) DescriptorSet 0 Decorate 238(@entryPointOutput.Color) Location 0 Decorate 242(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 245(g_sSamp2d) DescriptorSet 0 Decorate 245(g_sSamp2d) Binding 0 - Decorate 248(g_tTex1df4a) DescriptorSet 0 + Decorate 245(g_sSamp2d) DescriptorSet 0 Decorate 248(g_tTex1df4a) Binding 1 - Decorate 249(g_tTex1df4) DescriptorSet 0 + Decorate 248(g_tTex1df4a) DescriptorSet 0 Decorate 249(g_tTex1df4) Binding 0 - Decorate 252(g_tTex1di4) DescriptorSet 0 + Decorate 249(g_tTex1df4) DescriptorSet 0 Decorate 252(g_tTex1di4) Binding 0 - Decorate 255(g_tTex1du4) DescriptorSet 0 + Decorate 252(g_tTex1di4) DescriptorSet 0 Decorate 255(g_tTex1du4) Binding 0 - Decorate 258(g_tTex3df4) DescriptorSet 0 + Decorate 255(g_tTex1du4) DescriptorSet 0 Decorate 258(g_tTex3df4) Binding 0 - Decorate 261(g_tTex3di4) DescriptorSet 0 + Decorate 258(g_tTex3df4) DescriptorSet 0 Decorate 261(g_tTex3di4) Binding 0 - Decorate 264(g_tTex3du4) DescriptorSet 0 + Decorate 261(g_tTex3di4) DescriptorSet 0 Decorate 264(g_tTex3du4) Binding 0 + Decorate 264(g_tTex3du4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out index b86cd222af..165c10c9f0 100644 --- a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out @@ -1263,7 +1263,7 @@ using depth_any Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 399 Capability Shader @@ -1333,10 +1333,11 @@ Validation failed Name 392 "g_tTexcdf4" Name 395 "g_tTexcdi4" Name 398 "g_tTexcdu4" - Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 16(g_tTex2df4) Binding 2 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 30($Global) Block MemberDecorate 30($Global) 0 Offset 0 MemberDecorate 30($Global) 1 Offset 8 MemberDecorate 30($Global) 2 Offset 16 @@ -1345,37 +1346,36 @@ Validation failed MemberDecorate 30($Global) 5 Offset 56 MemberDecorate 30($Global) 6 Offset 64 MemberDecorate 30($Global) 7 Offset 80 - Decorate 30($Global) Block - Decorate 32 DescriptorSet 0 Decorate 32 Binding 5 - Decorate 47(g_tTex2di4) DescriptorSet 0 + Decorate 32 DescriptorSet 0 Decorate 47(g_tTex2di4) Binding 3 - Decorate 63(g_tTex2du4) DescriptorSet 0 + Decorate 47(g_tTex2di4) DescriptorSet 0 Decorate 63(g_tTex2du4) Binding 4 + Decorate 63(g_tTex2du4) DescriptorSet 0 Decorate 363(@entryPointOutput.Color) Location 0 Decorate 367(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 370(g_sSamp2d) DescriptorSet 0 Decorate 370(g_sSamp2d) Binding 0 - Decorate 373(g_tTex1df4a) DescriptorSet 0 + Decorate 370(g_sSamp2d) DescriptorSet 0 Decorate 373(g_tTex1df4a) Binding 1 - Decorate 374(g_tTex1df4) DescriptorSet 0 + Decorate 373(g_tTex1df4a) DescriptorSet 0 Decorate 374(g_tTex1df4) Binding 0 - Decorate 377(g_tTex1di4) DescriptorSet 0 + Decorate 374(g_tTex1df4) DescriptorSet 0 Decorate 377(g_tTex1di4) Binding 0 - Decorate 380(g_tTex1du4) DescriptorSet 0 + Decorate 377(g_tTex1di4) DescriptorSet 0 Decorate 380(g_tTex1du4) Binding 0 - Decorate 383(g_tTex3df4) DescriptorSet 0 + Decorate 380(g_tTex1du4) DescriptorSet 0 Decorate 383(g_tTex3df4) Binding 0 - Decorate 386(g_tTex3di4) DescriptorSet 0 + Decorate 383(g_tTex3df4) DescriptorSet 0 Decorate 386(g_tTex3di4) Binding 0 - Decorate 389(g_tTex3du4) DescriptorSet 0 + Decorate 386(g_tTex3di4) DescriptorSet 0 Decorate 389(g_tTex3du4) Binding 0 - Decorate 392(g_tTexcdf4) DescriptorSet 0 + Decorate 389(g_tTex3du4) DescriptorSet 0 Decorate 392(g_tTexcdf4) Binding 0 - Decorate 395(g_tTexcdi4) DescriptorSet 0 + Decorate 392(g_tTexcdf4) DescriptorSet 0 Decorate 395(g_tTexcdi4) Binding 0 - Decorate 398(g_tTexcdu4) DescriptorSet 0 + Decorate 395(g_tTexcdi4) DescriptorSet 0 Decorate 398(g_tTexcdu4) Binding 0 + Decorate 398(g_tTexcdu4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out index 1fa728a7f6..42360c5948 100644 --- a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out @@ -1255,7 +1255,7 @@ using depth_any Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 389 Capability Shader @@ -1322,10 +1322,11 @@ Validation failed Name 382 "g_tTexcdf4a" Name 385 "g_tTexcdi4a" Name 388 "g_tTexcdu4a" - Decorate 16(g_tTex2df4a) DescriptorSet 0 Decorate 16(g_tTex2df4a) Binding 1 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex2df4a) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 + Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 30($Global) Block MemberDecorate 30($Global) 0 Offset 0 MemberDecorate 30($Global) 1 Offset 8 MemberDecorate 30($Global) 2 Offset 16 @@ -1334,29 +1335,28 @@ Validation failed MemberDecorate 30($Global) 5 Offset 56 MemberDecorate 30($Global) 6 Offset 64 MemberDecorate 30($Global) 7 Offset 80 - Decorate 30($Global) Block - Decorate 32 DescriptorSet 0 Decorate 32 Binding 4 - Decorate 47(g_tTex2di4a) DescriptorSet 0 + Decorate 32 DescriptorSet 0 Decorate 47(g_tTex2di4a) Binding 2 - Decorate 63(g_tTex2du4a) DescriptorSet 0 + Decorate 47(g_tTex2di4a) DescriptorSet 0 Decorate 63(g_tTex2du4a) Binding 3 + Decorate 63(g_tTex2du4a) DescriptorSet 0 Decorate 363(@entryPointOutput.Color) Location 0 Decorate 367(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 370(g_sSamp2d) DescriptorSet 0 Decorate 370(g_sSamp2d) Binding 0 - Decorate 373(g_tTex1df4a) DescriptorSet 0 + Decorate 370(g_sSamp2d) DescriptorSet 0 Decorate 373(g_tTex1df4a) Binding 0 - Decorate 376(g_tTex1di4a) DescriptorSet 0 + Decorate 373(g_tTex1df4a) DescriptorSet 0 Decorate 376(g_tTex1di4a) Binding 0 - Decorate 379(g_tTex1du4a) DescriptorSet 0 + Decorate 376(g_tTex1di4a) DescriptorSet 0 Decorate 379(g_tTex1du4a) Binding 0 - Decorate 382(g_tTexcdf4a) DescriptorSet 0 + Decorate 379(g_tTex1du4a) DescriptorSet 0 Decorate 382(g_tTexcdf4a) Binding 0 - Decorate 385(g_tTexcdi4a) DescriptorSet 0 + Decorate 382(g_tTexcdf4a) DescriptorSet 0 Decorate 385(g_tTexcdi4a) Binding 0 - Decorate 388(g_tTexcdu4a) DescriptorSet 0 + Decorate 385(g_tTexcdi4a) DescriptorSet 0 Decorate 388(g_tTexcdu4a) Binding 0 + Decorate 388(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out index a858f15d8f..b734da5eee 100644 --- a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out @@ -456,7 +456,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 164 Capability Shader @@ -506,43 +506,43 @@ using depth_any Name 157 "g_tTexcdf4" Name 160 "g_tTexcdi4" Name 163 "g_tTexcdu4" - Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 16(g_tTex2df4) Binding 2 - Decorate 20(g_sSampCmp) DescriptorSet 0 + Decorate 16(g_tTex2df4) DescriptorSet 0 Decorate 20(g_sSampCmp) Binding 0 + Decorate 20(g_sSampCmp) DescriptorSet 0 + Decorate 26($Global) Block MemberDecorate 26($Global) 0 Offset 0 MemberDecorate 26($Global) 1 Offset 8 MemberDecorate 26($Global) 2 Offset 16 MemberDecorate 26($Global) 3 Offset 32 - Decorate 26($Global) Block - Decorate 28 DescriptorSet 0 Decorate 28 Binding 5 - Decorate 44(g_tTex2di4) DescriptorSet 0 + Decorate 28 DescriptorSet 0 Decorate 44(g_tTex2di4) Binding 3 - Decorate 60(g_tTex2du4) DescriptorSet 0 + Decorate 44(g_tTex2di4) DescriptorSet 0 Decorate 60(g_tTex2du4) Binding 4 + Decorate 60(g_tTex2du4) DescriptorSet 0 Decorate 129(@entryPointOutput.Color) Location 0 Decorate 133(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 138(g_tTex1df4a) DescriptorSet 0 Decorate 138(g_tTex1df4a) Binding 1 - Decorate 139(g_tTex1df4) DescriptorSet 0 + Decorate 138(g_tTex1df4a) DescriptorSet 0 Decorate 139(g_tTex1df4) Binding 0 - Decorate 142(g_tTex1di4) DescriptorSet 0 + Decorate 139(g_tTex1df4) DescriptorSet 0 Decorate 142(g_tTex1di4) Binding 0 - Decorate 145(g_tTex1du4) DescriptorSet 0 + Decorate 142(g_tTex1di4) DescriptorSet 0 Decorate 145(g_tTex1du4) Binding 0 - Decorate 148(g_tTex3df4) DescriptorSet 0 + Decorate 145(g_tTex1du4) DescriptorSet 0 Decorate 148(g_tTex3df4) Binding 0 - Decorate 151(g_tTex3di4) DescriptorSet 0 + Decorate 148(g_tTex3df4) DescriptorSet 0 Decorate 151(g_tTex3di4) Binding 0 - Decorate 154(g_tTex3du4) DescriptorSet 0 + Decorate 151(g_tTex3di4) DescriptorSet 0 Decorate 154(g_tTex3du4) Binding 0 - Decorate 157(g_tTexcdf4) DescriptorSet 0 + Decorate 154(g_tTex3du4) DescriptorSet 0 Decorate 157(g_tTexcdf4) Binding 0 - Decorate 160(g_tTexcdi4) DescriptorSet 0 + Decorate 157(g_tTexcdf4) DescriptorSet 0 Decorate 160(g_tTexcdi4) Binding 0 - Decorate 163(g_tTexcdu4) DescriptorSet 0 + Decorate 160(g_tTexcdi4) DescriptorSet 0 Decorate 163(g_tTexcdu4) Binding 0 + Decorate 163(g_tTexcdu4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out index ba023599e7..18d5500918 100644 --- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out +++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out @@ -2318,7 +2318,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 550 Capability Shader @@ -2422,64 +2422,64 @@ using depth_any Name 540 "@entryPointOutput.Color" Name 544 "@entryPointOutput.Depth" Name 549 "g_sSamp" - Decorate 17(g_tTex1df4) DescriptorSet 0 Decorate 17(g_tTex1df4) Binding 0 - Decorate 35(g_tTex1di4) DescriptorSet 0 + Decorate 17(g_tTex1df4) DescriptorSet 0 Decorate 35(g_tTex1di4) Binding 1 - Decorate 48(g_tTex1du4) DescriptorSet 0 + Decorate 35(g_tTex1di4) DescriptorSet 0 Decorate 48(g_tTex1du4) Binding 2 - Decorate 63(g_tTex1df4a) DescriptorSet 0 + Decorate 48(g_tTex1du4) DescriptorSet 0 Decorate 63(g_tTex1df4a) Binding 12 - Decorate 85(g_tTex1di4a) DescriptorSet 0 + Decorate 63(g_tTex1df4a) DescriptorSet 0 Decorate 85(g_tTex1di4a) Binding 13 - Decorate 104(g_tTex1du4a) DescriptorSet 0 + Decorate 85(g_tTex1di4a) DescriptorSet 0 Decorate 104(g_tTex1du4a) Binding 14 - Decorate 123(g_tTex2df4) DescriptorSet 0 + Decorate 104(g_tTex1du4a) DescriptorSet 0 Decorate 123(g_tTex2df4) Binding 3 - Decorate 143(g_tTex2di4) DescriptorSet 0 + Decorate 123(g_tTex2df4) DescriptorSet 0 Decorate 143(g_tTex2di4) Binding 4 - Decorate 162(g_tTex2du4) DescriptorSet 0 + Decorate 143(g_tTex2di4) DescriptorSet 0 Decorate 162(g_tTex2du4) Binding 5 - Decorate 183(g_tTex2df4a) DescriptorSet 0 + Decorate 162(g_tTex2du4) DescriptorSet 0 Decorate 183(g_tTex2df4a) Binding 15 - Decorate 207(g_tTex2di4a) DescriptorSet 0 + Decorate 183(g_tTex2df4a) DescriptorSet 0 Decorate 207(g_tTex2di4a) Binding 16 - Decorate 230(g_tTex2du4a) DescriptorSet 0 + Decorate 207(g_tTex2di4a) DescriptorSet 0 Decorate 230(g_tTex2du4a) Binding 17 - Decorate 253(g_tTex3df4) DescriptorSet 0 + Decorate 230(g_tTex2du4a) DescriptorSet 0 Decorate 253(g_tTex3df4) Binding 6 - Decorate 277(g_tTex3di4) DescriptorSet 0 + Decorate 253(g_tTex3df4) DescriptorSet 0 Decorate 277(g_tTex3di4) Binding 7 - Decorate 300(g_tTex3du4) DescriptorSet 0 + Decorate 277(g_tTex3di4) DescriptorSet 0 Decorate 300(g_tTex3du4) Binding 8 - Decorate 323(g_tTexcdf4) DescriptorSet 0 + Decorate 300(g_tTex3du4) DescriptorSet 0 Decorate 323(g_tTexcdf4) Binding 9 - Decorate 342(g_tTexcdi4) DescriptorSet 0 + Decorate 323(g_tTexcdf4) DescriptorSet 0 Decorate 342(g_tTexcdi4) Binding 10 - Decorate 361(g_tTexcdu4) DescriptorSet 0 + Decorate 342(g_tTexcdi4) DescriptorSet 0 Decorate 361(g_tTexcdu4) Binding 11 - Decorate 380(g_tTexcdf4a) DescriptorSet 0 + Decorate 361(g_tTexcdu4) DescriptorSet 0 Decorate 380(g_tTexcdf4a) Binding 18 - Decorate 403(g_tTexcdi4a) DescriptorSet 0 + Decorate 380(g_tTexcdf4a) DescriptorSet 0 Decorate 403(g_tTexcdi4a) Binding 19 - Decorate 426(g_tTexcdu4a) DescriptorSet 0 + Decorate 403(g_tTexcdi4a) DescriptorSet 0 Decorate 426(g_tTexcdu4a) Binding 20 - Decorate 449(g_tTex2dmsf4) DescriptorSet 0 + Decorate 426(g_tTexcdu4a) DescriptorSet 0 Decorate 449(g_tTex2dmsf4) Binding 21 - Decorate 462(g_tTex2dmsi4) DescriptorSet 0 + Decorate 449(g_tTex2dmsf4) DescriptorSet 0 Decorate 462(g_tTex2dmsi4) Binding 22 - Decorate 474(g_tTex2dmsu4) DescriptorSet 0 + Decorate 462(g_tTex2dmsi4) DescriptorSet 0 Decorate 474(g_tTex2dmsu4) Binding 23 - Decorate 486(g_tTex2dmsf4a) DescriptorSet 0 + Decorate 474(g_tTex2dmsu4) DescriptorSet 0 Decorate 486(g_tTex2dmsf4a) Binding 24 - Decorate 500(g_tTex2dmsi4a) DescriptorSet 0 + Decorate 486(g_tTex2dmsf4a) DescriptorSet 0 Decorate 500(g_tTex2dmsi4a) Binding 25 - Decorate 514(g_tTex2dmsu4a) DescriptorSet 0 + Decorate 500(g_tTex2dmsi4a) DescriptorSet 0 Decorate 514(g_tTex2dmsu4a) Binding 26 + Decorate 514(g_tTex2dmsu4a) DescriptorSet 0 Decorate 540(@entryPointOutput.Color) Location 0 Decorate 544(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 549(g_sSamp) DescriptorSet 0 Decorate 549(g_sSamp) Binding 0 + Decorate 549(g_sSamp) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out index 96a1cc1558..925dd7e303 100644 --- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out +++ b/Test/baseResults/hlsl.getdimensions.dx10.vert.out @@ -116,7 +116,7 @@ Shader version: 500 0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 48 Capability Shader @@ -138,11 +138,11 @@ Shader version: 500 Name 33 "vsout" Name 42 "@entryPointOutput.Pos" Name 47 "g_sSamp" - Decorate 17(g_tTex1df4) DescriptorSet 0 Decorate 17(g_tTex1df4) Binding 0 + Decorate 17(g_tTex1df4) DescriptorSet 0 Decorate 42(@entryPointOutput.Pos) BuiltIn Position - Decorate 47(g_sSamp) DescriptorSet 0 Decorate 47(g_sSamp) Binding 0 + Decorate 47(g_sSamp) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out index 1cce0cc03f..01e998440f 100644 --- a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out +++ b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out @@ -718,7 +718,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 232 Capability Shader @@ -791,46 +791,47 @@ using depth_any MemberName 229($Global) 6 "o3" MemberName 229($Global) 7 "o4" Name 231 "" - Decorate 17(g_tTex1df4) DescriptorSet 0 Decorate 17(g_tTex1df4) Binding 0 - Decorate 26(g_tTex1di4) DescriptorSet 0 + Decorate 17(g_tTex1df4) DescriptorSet 0 Decorate 26(g_tTex1di4) Binding 1 - Decorate 33(g_tTex1du4) DescriptorSet 0 + Decorate 26(g_tTex1di4) DescriptorSet 0 Decorate 33(g_tTex1du4) Binding 2 - Decorate 40(g_tBuffF) DescriptorSet 0 + Decorate 33(g_tTex1du4) DescriptorSet 0 Decorate 40(g_tBuffF) Binding 15 - Decorate 47(g_tBuffI) DescriptorSet 0 + Decorate 40(g_tBuffF) DescriptorSet 0 Decorate 47(g_tBuffI) Binding 16 - Decorate 54(g_tBuffU) DescriptorSet 0 + Decorate 47(g_tBuffI) DescriptorSet 0 Decorate 54(g_tBuffU) Binding 17 - Decorate 63(g_tTex1df4a) DescriptorSet 0 + Decorate 54(g_tBuffU) DescriptorSet 0 Decorate 63(g_tTex1df4a) Binding 9 - Decorate 76(g_tTex1di4a) DescriptorSet 0 + Decorate 63(g_tTex1df4a) DescriptorSet 0 Decorate 76(g_tTex1di4a) Binding 10 - Decorate 86(g_tTex1du4a) DescriptorSet 0 + Decorate 76(g_tTex1di4a) DescriptorSet 0 Decorate 86(g_tTex1du4a) Binding 11 - Decorate 96(g_tTex2df4) DescriptorSet 0 + Decorate 86(g_tTex1du4a) DescriptorSet 0 Decorate 96(g_tTex2df4) Binding 3 - Decorate 107(g_tTex2di4) DescriptorSet 0 + Decorate 96(g_tTex2df4) DescriptorSet 0 Decorate 107(g_tTex2di4) Binding 4 - Decorate 117(g_tTex2du4) DescriptorSet 0 + Decorate 107(g_tTex2di4) DescriptorSet 0 Decorate 117(g_tTex2du4) Binding 5 - Decorate 129(g_tTex2df4a) DescriptorSet 0 + Decorate 117(g_tTex2du4) DescriptorSet 0 Decorate 129(g_tTex2df4a) Binding 12 - Decorate 142(g_tTex2di4a) DescriptorSet 0 + Decorate 129(g_tTex2df4a) DescriptorSet 0 Decorate 142(g_tTex2di4a) Binding 13 - Decorate 154(g_tTex2du4a) DescriptorSet 0 + Decorate 142(g_tTex2di4a) DescriptorSet 0 Decorate 154(g_tTex2du4a) Binding 14 - Decorate 166(g_tTex3df4) DescriptorSet 0 + Decorate 154(g_tTex2du4a) DescriptorSet 0 Decorate 166(g_tTex3df4) Binding 6 - Decorate 179(g_tTex3di4) DescriptorSet 0 + Decorate 166(g_tTex3df4) DescriptorSet 0 Decorate 179(g_tTex3di4) Binding 7 - Decorate 191(g_tTex3du4) DescriptorSet 0 + Decorate 179(g_tTex3di4) DescriptorSet 0 Decorate 191(g_tTex3du4) Binding 8 + Decorate 191(g_tTex3du4) DescriptorSet 0 Decorate 216(@entryPointOutput.Color) Location 0 Decorate 220(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 225(g_sSamp) DescriptorSet 0 Decorate 225(g_sSamp) Binding 0 + Decorate 225(g_sSamp) DescriptorSet 0 + Decorate 229($Global) Block MemberDecorate 229($Global) 0 Offset 0 MemberDecorate 229($Global) 1 Offset 8 MemberDecorate 229($Global) 2 Offset 16 @@ -839,9 +840,8 @@ using depth_any MemberDecorate 229($Global) 5 Offset 56 MemberDecorate 229($Global) 6 Offset 64 MemberDecorate 229($Global) 7 Offset 80 - Decorate 229($Global) Block - Decorate 231 DescriptorSet 0 Decorate 231 Binding 0 + Decorate 231 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out index 5c49931883..c2b9709420 100644 --- a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out +++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out @@ -580,7 +580,7 @@ using depth_any 0:? 'sample' (layout( location=0) flat in int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 198 Capability Shader @@ -619,16 +619,16 @@ using depth_any Name 188 "@entryPointOutput.Color" Name 192 "@entryPointOutput.Depth" Name 197 "g_sSamp" - Decorate 23(g_tTex2dmsf4) DescriptorSet 0 Decorate 23(g_tTex2dmsf4) Binding 1 - Decorate 131(g_tTex2dmsf4a) DescriptorSet 0 + Decorate 23(g_tTex2dmsf4) DescriptorSet 0 Decorate 131(g_tTex2dmsf4a) Binding 2 + Decorate 131(g_tTex2dmsf4a) DescriptorSet 0 Decorate 181(sample) Flat Decorate 181(sample) Location 0 Decorate 188(@entryPointOutput.Color) Location 0 Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 197(g_sSamp) DescriptorSet 0 Decorate 197(g_sSamp) Binding 0 + Decorate 197(g_sSamp) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/hlsl.global-const-init.frag.out b/Test/baseResults/hlsl.global-const-init.frag.out index 26895bba70..4b9d98e78e 100644 --- a/Test/baseResults/hlsl.global-const-init.frag.out +++ b/Test/baseResults/hlsl.global-const-init.frag.out @@ -102,7 +102,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader @@ -119,10 +119,10 @@ gl_FragCoord origin is upper left Name 15 "" Name 26 "a1" Name 41 "@entryPointOutput" - MemberDecorate 13(CB) 0 Offset 0 Decorate 13(CB) Block - Decorate 15 DescriptorSet 0 + MemberDecorate 13(CB) 0 Offset 0 Decorate 15 Binding 0 + Decorate 15 DescriptorSet 0 Decorate 41(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.groupid.comp.out b/Test/baseResults/hlsl.groupid.comp.out index bf39d11a40..ba1eb1364a 100644 --- a/Test/baseResults/hlsl.groupid.comp.out +++ b/Test/baseResults/hlsl.groupid.comp.out @@ -82,7 +82,7 @@ local_size = (8, 8, 1) 0:? 'vGroupId' ( in 3-component vector of uint WorkGroupID) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 37 Capability Shader @@ -99,8 +99,8 @@ local_size = (8, 8, 1) Name 26 "vGroupId" Name 29 "vGroupId" Name 34 "param" - Decorate 22(OutputTexture) DescriptorSet 0 Decorate 22(OutputTexture) Binding 0 + Decorate 22(OutputTexture) DescriptorSet 0 Decorate 29(vGroupId) BuiltIn WorkgroupId 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.gs-hs-mix.tesc.out b/Test/baseResults/hlsl.gs-hs-mix.tesc.out index c9496ac1e5..8dcbe4db67 100644 --- a/Test/baseResults/hlsl.gs-hs-mix.tesc.out +++ b/Test/baseResults/hlsl.gs-hs-mix.tesc.out @@ -986,7 +986,7 @@ triangle order = ccw 0:? '@patchConstantOutput.NormalWS[2]' (layout( location=3) patch out 3-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 236 Capability Tessellation @@ -1057,32 +1057,32 @@ triangle order = ccw Name 204 "Q1" Name 213 "Q2" Name 222 "vertex" + Decorate 42(UniformBlock0) Block MemberDecorate 42(UniformBlock0) 0 RowMajor - MemberDecorate 42(UniformBlock0) 0 Offset 0 MemberDecorate 42(UniformBlock0) 0 MatrixStride 16 + MemberDecorate 42(UniformBlock0) 0 Offset 0 MemberDecorate 42(UniformBlock0) 1 RowMajor - MemberDecorate 42(UniformBlock0) 1 Offset 64 MemberDecorate 42(UniformBlock0) 1 MatrixStride 16 + MemberDecorate 42(UniformBlock0) 1 Offset 64 MemberDecorate 42(UniformBlock0) 2 RowMajor - MemberDecorate 42(UniformBlock0) 2 Offset 128 MemberDecorate 42(UniformBlock0) 2 MatrixStride 16 + MemberDecorate 42(UniformBlock0) 2 Offset 128 MemberDecorate 42(UniformBlock0) 3 RowMajor - MemberDecorate 42(UniformBlock0) 3 Offset 192 MemberDecorate 42(UniformBlock0) 3 MatrixStride 16 + MemberDecorate 42(UniformBlock0) 3 Offset 192 MemberDecorate 42(UniformBlock0) 4 Offset 240 MemberDecorate 42(UniformBlock0) 5 Offset 256 MemberDecorate 42(UniformBlock0) 6 Offset 272 - Decorate 42(UniformBlock0) Block - Decorate 44 DescriptorSet 0 Decorate 44 Binding 0 + Decorate 44 DescriptorSet 0 Decorate 97(patch.PositionWS) Location 0 Decorate 102(patch.NormalWS) Location 1 Decorate 120(id) BuiltIn InvocationId Decorate 123(@entryPointOutput.PositionWS) Location 0 - Decorate 145(@patchConstantOutput.EdgeTessFactor) Patch Decorate 145(@patchConstantOutput.EdgeTessFactor) BuiltIn TessLevelOuter - Decorate 158(@patchConstantOutput.InsideTessFactor) Patch + Decorate 145(@patchConstantOutput.EdgeTessFactor) Patch Decorate 158(@patchConstantOutput.InsideTessFactor) BuiltIn TessLevelInner + Decorate 158(@patchConstantOutput.InsideTessFactor) Patch Decorate 162(@patchConstantOutput.NormalWS[0]) Patch Decorate 162(@patchConstantOutput.NormalWS[0]) Location 1 Decorate 165(@patchConstantOutput.NormalWS[1]) Patch diff --git a/Test/baseResults/hlsl.hlslOffset.vert.out b/Test/baseResults/hlsl.hlslOffset.vert.out index 09545c88cc..d4b90dbf8d 100644 --- a/Test/baseResults/hlsl.hlslOffset.vert.out +++ b/Test/baseResults/hlsl.hlslOffset.vert.out @@ -26,7 +26,7 @@ Shader version: 500 0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float m0, layout( row_major std140) uniform 3-component vector of float m4, layout( row_major std140) uniform float m16, layout( row_major std140 offset=20) uniform 3-component vector of float m20, layout( row_major std140 offset=36) uniform 3-component vector of float m36, layout( row_major std140 offset=56) uniform 2-component vector of float m56, layout( row_major std140) uniform float m64, layout( row_major std140) uniform 2-component vector of float m68, layout( row_major std140) uniform float m76, layout( row_major std140) uniform float m80, layout( row_major std140) uniform 1-element array of 2-component vector of float m96}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader @@ -50,6 +50,7 @@ Shader version: 500 MemberName 15(b) 10 "m96" Name 17 "" Decorate 14 ArrayStride 16 + Decorate 15(b) Block MemberDecorate 15(b) 0 Offset 0 MemberDecorate 15(b) 1 Offset 4 MemberDecorate 15(b) 2 Offset 16 @@ -61,9 +62,8 @@ Shader version: 500 MemberDecorate 15(b) 8 Offset 76 MemberDecorate 15(b) 9 Offset 80 MemberDecorate 15(b) 10 Offset 96 - Decorate 15(b) Block - Decorate 17 DescriptorSet 0 Decorate 17 Binding 0 + Decorate 17 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 9: TypeFloat 32 diff --git a/Test/baseResults/hlsl.hull.1.tesc.out b/Test/baseResults/hlsl.hull.1.tesc.out index cba0f8bb24..6914456d8a 100644 --- a/Test/baseResults/hlsl.hull.1.tesc.out +++ b/Test/baseResults/hlsl.hull.1.tesc.out @@ -324,7 +324,7 @@ vertex spacing = equal_spacing 0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 104 Capability Tessellation @@ -364,8 +364,8 @@ vertex spacing = equal_spacing Decorate 60(m_cpid) BuiltIn InvocationId Decorate 63(@entryPointOutput.cpoint) Location 0 Decorate 81(pid) BuiltIn PrimitiveId - Decorate 87(@patchConstantOutput.edges) Patch Decorate 87(@patchConstantOutput.edges) BuiltIn TessLevelOuter + Decorate 87(@patchConstantOutput.edges) Patch 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.hull.2.tesc.out b/Test/baseResults/hlsl.hull.2.tesc.out index 4e8a50c2d9..1a11735959 100644 --- a/Test/baseResults/hlsl.hull.2.tesc.out +++ b/Test/baseResults/hlsl.hull.2.tesc.out @@ -320,7 +320,7 @@ vertex spacing = equal_spacing 0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 106 Capability Tessellation @@ -361,8 +361,8 @@ vertex spacing = equal_spacing Decorate 63(InvocationId) BuiltIn InvocationId Decorate 79(pid) BuiltIn PrimitiveId Decorate 81(pos) BuiltIn Position - Decorate 89(@patchConstantOutput.edges) Patch Decorate 89(@patchConstantOutput.edges) BuiltIn TessLevelOuter + Decorate 89(@patchConstantOutput.edges) Patch 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.hull.3.tesc.out b/Test/baseResults/hlsl.hull.3.tesc.out index f40a79e49d..4e0bf678fe 100644 --- a/Test/baseResults/hlsl.hull.3.tesc.out +++ b/Test/baseResults/hlsl.hull.3.tesc.out @@ -320,7 +320,7 @@ vertex spacing = equal_spacing 0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 106 Capability Tessellation @@ -362,8 +362,8 @@ vertex spacing = equal_spacing Decorate 63(InvocationId) BuiltIn InvocationId Decorate 79(pid) BuiltIn PrimitiveId Decorate 81(pos) BuiltIn Position - Decorate 89(@patchConstantOutput.edges) Patch Decorate 89(@patchConstantOutput.edges) BuiltIn TessLevelOuter + Decorate 89(@patchConstantOutput.edges) Patch 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.hull.4.tesc.out b/Test/baseResults/hlsl.hull.4.tesc.out index aa766ed481..343844b9a4 100644 --- a/Test/baseResults/hlsl.hull.4.tesc.out +++ b/Test/baseResults/hlsl.hull.4.tesc.out @@ -458,7 +458,7 @@ triangle order = cw 0:? '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 124 Capability Tessellation @@ -502,10 +502,10 @@ triangle order = cw Decorate 61(I.m_Normal) Location 0 Decorate 80(cpid) BuiltIn InvocationId Decorate 83(@entryPointOutput.m_Position) BuiltIn Position - Decorate 107(@patchConstantOutput.fTessFactor) Patch Decorate 107(@patchConstantOutput.fTessFactor) BuiltIn TessLevelOuter - Decorate 120(@patchConstantOutput.fInsideTessFactor) Patch + Decorate 107(@patchConstantOutput.fTessFactor) Patch Decorate 120(@patchConstantOutput.fInsideTessFactor) BuiltIn TessLevelInner + Decorate 120(@patchConstantOutput.fInsideTessFactor) Patch 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.hull.6.tesc.out b/Test/baseResults/hlsl.hull.6.tesc.out index efb6e5b1b9..8522e94b89 100644 --- a/Test/baseResults/hlsl.hull.6.tesc.out +++ b/Test/baseResults/hlsl.hull.6.tesc.out @@ -450,7 +450,7 @@ triangle order = ccw 0:? '@patchConstantOutput.Edges' ( patch out 4-element array of float TessLevelOuter) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 142 Capability Tessellation @@ -503,10 +503,10 @@ triangle order = ccw Decorate 97(@entryPointOutput.Position) Location 0 Decorate 104(@entryPointOutput.Color) Location 1 Decorate 117(BlockID) BuiltIn PrimitiveId - Decorate 119(Inside) Patch Decorate 119(Inside) BuiltIn TessLevelInner - Decorate 128(@patchConstantOutput.Edges) Patch + Decorate 119(Inside) Patch Decorate 128(@patchConstantOutput.Edges) BuiltIn TessLevelOuter + Decorate 128(@patchConstantOutput.Edges) Patch 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out index 70881e9ba7..38927652e9 100644 --- a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out +++ b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out @@ -472,7 +472,7 @@ triangle order = cw 0:? '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 135 Capability Tessellation @@ -522,10 +522,10 @@ triangle order = cw Decorate 42(i.val) Location 0 Decorate 57(cpid) BuiltIn InvocationId Decorate 60(@entryPointOutput.val) Location 0 - Decorate 105(@patchConstantOutput.tfactor) Patch Decorate 105(@patchConstantOutput.tfactor) BuiltIn TessLevelOuter - Decorate 119(@patchConstantOutput.flInFactor) Patch + Decorate 105(@patchConstantOutput.tfactor) Patch Decorate 119(@patchConstantOutput.flInFactor) BuiltIn TessLevelInner + Decorate 119(@patchConstantOutput.flInFactor) Patch 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out index d59e16304d..a189446861 100644 --- a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out +++ b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out @@ -490,7 +490,7 @@ triangle order = cw 0:? '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 137 Capability Tessellation @@ -541,10 +541,10 @@ triangle order = cw Decorate 43(i.val) Location 0 Decorate 58(cpid) BuiltIn InvocationId Decorate 61(@entryPointOutput.val) Location 0 - Decorate 107(@patchConstantOutput.tfactor) Patch Decorate 107(@patchConstantOutput.tfactor) BuiltIn TessLevelOuter - Decorate 121(@patchConstantOutput.flInFactor) Patch + Decorate 107(@patchConstantOutput.tfactor) Patch Decorate 121(@patchConstantOutput.flInFactor) BuiltIn TessLevelInner + Decorate 121(@patchConstantOutput.flInFactor) Patch 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.hull.void.tesc.out b/Test/baseResults/hlsl.hull.void.tesc.out index 224936040f..244d1fc7c3 100644 --- a/Test/baseResults/hlsl.hull.void.tesc.out +++ b/Test/baseResults/hlsl.hull.void.tesc.out @@ -184,7 +184,7 @@ triangle order = ccw 0:? 'InvocationId' ( in uint InvocationID) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 67 Capability Tessellation diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out index e0a89aa4a4..bde7fdb8a4 100644 --- a/Test/baseResults/hlsl.identifier.sample.frag.out +++ b/Test/baseResults/hlsl.identifier.sample.frag.out @@ -86,7 +86,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 33 Capability Shader diff --git a/Test/baseResults/hlsl.if.frag.out b/Test/baseResults/hlsl.if.frag.out index e77c7ac37b..fafad92f6f 100644 --- a/Test/baseResults/hlsl.if.frag.out +++ b/Test/baseResults/hlsl.if.frag.out @@ -240,7 +240,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 117 Capability Shader diff --git a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out index ff201eb077..83f04cfc60 100644 --- a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out +++ b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out @@ -410,7 +410,7 @@ local_size = (8, 8, 8) 0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 186 Capability Shader @@ -444,36 +444,36 @@ local_size = (8, 8, 8) Name 179 "tid" Name 181 "tid" Name 183 "param" - Decorate 19(i1D) DescriptorSet 0 Decorate 19(i1D) Binding 0 - Decorate 34(i2D) DescriptorSet 0 + Decorate 19(i1D) DescriptorSet 0 Decorate 34(i2D) Binding 1 - Decorate 45(i3D) DescriptorSet 0 + Decorate 34(i2D) DescriptorSet 0 Decorate 45(i3D) Binding 2 - Decorate 54(i1DArray) DescriptorSet 0 + Decorate 45(i3D) DescriptorSet 0 Decorate 54(i1DArray) Binding 3 - Decorate 64(i2DArray) DescriptorSet 0 + Decorate 54(i1DArray) DescriptorSet 0 Decorate 64(i2DArray) Binding 4 - Decorate 73(i2DMS) DescriptorSet 0 + Decorate 64(i2DArray) DescriptorSet 0 Decorate 73(i2DMS) Binding 5 - Decorate 86(i2DMSArray) DescriptorSet 0 + Decorate 73(i2DMS) DescriptorSet 0 Decorate 86(i2DMSArray) Binding 6 - Decorate 100(ii1D) DescriptorSet 0 + Decorate 86(i2DMSArray) DescriptorSet 0 Decorate 100(ii1D) Binding 7 - Decorate 111(ii2D) DescriptorSet 0 + Decorate 100(ii1D) DescriptorSet 0 Decorate 111(ii2D) Binding 8 - Decorate 121(ii3D) DescriptorSet 0 + Decorate 111(ii2D) DescriptorSet 0 Decorate 121(ii3D) Binding 9 - Decorate 130(ii1DArray) DescriptorSet 0 + Decorate 121(ii3D) DescriptorSet 0 Decorate 130(ii1DArray) Binding 10 - Decorate 140(ii2DArray) DescriptorSet 0 + Decorate 130(ii1DArray) DescriptorSet 0 Decorate 140(ii2DArray) Binding 11 - Decorate 149(ii2DMS) DescriptorSet 0 + Decorate 140(ii2DArray) DescriptorSet 0 Decorate 149(ii2DMS) Binding 12 - Decorate 160(ii2DMSArray) DescriptorSet 0 + Decorate 149(ii2DMS) DescriptorSet 0 Decorate 160(ii2DMSArray) Binding 13 - Decorate 175(OUT) DescriptorSet 0 + Decorate 160(ii2DMSArray) DescriptorSet 0 Decorate 175(OUT) Binding 0 + Decorate 175(OUT) DescriptorSet 0 Decorate 181(tid) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.imageload-subvec4.comp.out b/Test/baseResults/hlsl.imageload-subvec4.comp.out index 4d038a1958..e17141727a 100644 --- a/Test/baseResults/hlsl.imageload-subvec4.comp.out +++ b/Test/baseResults/hlsl.imageload-subvec4.comp.out @@ -266,7 +266,7 @@ local_size = (8, 8, 8) 0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 138 Capability Shader @@ -296,28 +296,28 @@ local_size = (8, 8, 8) Name 131 "tid" Name 133 "tid" Name 135 "param" - Decorate 19(i1D) DescriptorSet 0 Decorate 19(i1D) Binding 0 - Decorate 32(i2D) DescriptorSet 0 + Decorate 19(i1D) DescriptorSet 0 Decorate 32(i2D) Binding 1 - Decorate 43(i3D) DescriptorSet 0 + Decorate 32(i2D) DescriptorSet 0 Decorate 43(i3D) Binding 2 - Decorate 52(i1DArray) DescriptorSet 0 + Decorate 43(i3D) DescriptorSet 0 Decorate 52(i1DArray) Binding 3 - Decorate 62(i2DArray) DescriptorSet 0 + Decorate 52(i1DArray) DescriptorSet 0 Decorate 62(i2DArray) Binding 4 - Decorate 75(ii1D) DescriptorSet 0 + Decorate 62(i2DArray) DescriptorSet 0 Decorate 75(ii1D) Binding 5 - Decorate 86(ii2D) DescriptorSet 0 + Decorate 75(ii1D) DescriptorSet 0 Decorate 86(ii2D) Binding 6 - Decorate 96(ii3D) DescriptorSet 0 + Decorate 86(ii2D) DescriptorSet 0 Decorate 96(ii3D) Binding 7 - Decorate 105(ii1DArray) DescriptorSet 0 + Decorate 96(ii3D) DescriptorSet 0 Decorate 105(ii1DArray) Binding 8 - Decorate 115(ii2DArray) DescriptorSet 0 + Decorate 105(ii1DArray) DescriptorSet 0 Decorate 115(ii2DArray) Binding 9 - Decorate 127(OUT) DescriptorSet 0 + Decorate 115(ii2DArray) DescriptorSet 0 Decorate 127(OUT) Binding 10 + Decorate 127(OUT) DescriptorSet 0 Decorate 133(tid) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out index dd93b7f1e3..03d04876a5 100644 --- a/Test/baseResults/hlsl.implicitBool.frag.out +++ b/Test/baseResults/hlsl.implicitBool.frag.out @@ -332,7 +332,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 139 Capability Shader @@ -354,13 +354,13 @@ gl_FragCoord origin is upper left Name 100 "i" Name 120 "g" Name 137 "@entryPointOutput" + Decorate 16($Global) Block MemberDecorate 16($Global) 0 Offset 0 MemberDecorate 16($Global) 1 Offset 4 MemberDecorate 16($Global) 2 Offset 8 MemberDecorate 16($Global) 3 Offset 12 - Decorate 16($Global) Block - Decorate 18 DescriptorSet 0 Decorate 18 Binding 0 + Decorate 18 DescriptorSet 0 Decorate 137(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.include.vert.out b/Test/baseResults/hlsl.include.vert.out index f46658d294..d2e147bd45 100644 --- a/Test/baseResults/hlsl.include.vert.out +++ b/Test/baseResults/hlsl.include.vert.out @@ -1,6 +1,6 @@ ../Test/hlsl.include.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 44 Capability Shader @@ -19,15 +19,15 @@ MemberName 11($Global) 5 "i5" Name 13 "" Name 42 "@entryPointOutput" + Decorate 11($Global) Block MemberDecorate 11($Global) 0 Offset 0 MemberDecorate 11($Global) 1 Offset 16 MemberDecorate 11($Global) 2 Offset 32 MemberDecorate 11($Global) 3 Offset 48 MemberDecorate 11($Global) 4 Offset 64 MemberDecorate 11($Global) 5 Offset 80 - Decorate 11($Global) Block - Decorate 13 DescriptorSet 0 Decorate 13 Binding 0 + Decorate 13 DescriptorSet 0 Decorate 42(@entryPointOutput) BuiltIn Position 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.inf.vert.out b/Test/baseResults/hlsl.inf.vert.out index bb9a18497c..ade551cb10 100644 --- a/Test/baseResults/hlsl.inf.vert.out +++ b/Test/baseResults/hlsl.inf.vert.out @@ -29,21 +29,21 @@ Shader version: 500 0:6 +1.#INF 0:6 Constant: 0:6 +1.#INF -0:10 Branch: Return with expression -0:10 Construct vec4 ( temp 4-component vector of float) -0:10 add ( temp float) -0:10 add ( temp float) -0:10 add ( temp float) -0:10 add ( temp float) -0:10 add ( temp float) -0:10 'f1' ( temp float) -0:10 'f2' ( temp float) -0:10 'f3' ( temp float) -0:10 'f4' ( temp float) -0:10 Constant: -0:10 -1.#INF -0:10 Constant: -0:10 1.#IND +0:15 Branch: Return with expression +0:15 Construct vec4 ( temp 4-component vector of float) +0:15 add ( temp float) +0:15 add ( temp float) +0:15 add ( temp float) +0:15 add ( temp float) +0:15 add ( temp float) +0:15 'f1' ( temp float) +0:15 'f2' ( temp float) +0:15 'f3' ( temp float) +0:15 'f4' ( temp float) +0:15 Constant: +0:15 -1.#INF +0:15 Constant: +0:15 1.#IND 0:2 Function Definition: main( ( temp void) 0:2 Function Parameters: 0:? Sequence @@ -87,21 +87,21 @@ Shader version: 500 0:6 +1.#INF 0:6 Constant: 0:6 +1.#INF -0:10 Branch: Return with expression -0:10 Construct vec4 ( temp 4-component vector of float) -0:10 add ( temp float) -0:10 add ( temp float) -0:10 add ( temp float) -0:10 add ( temp float) -0:10 add ( temp float) -0:10 'f1' ( temp float) -0:10 'f2' ( temp float) -0:10 'f3' ( temp float) -0:10 'f4' ( temp float) -0:10 Constant: -0:10 -1.#INF -0:10 Constant: -0:10 1.#IND +0:15 Branch: Return with expression +0:15 Construct vec4 ( temp 4-component vector of float) +0:15 add ( temp float) +0:15 add ( temp float) +0:15 add ( temp float) +0:15 add ( temp float) +0:15 add ( temp float) +0:15 'f1' ( temp float) +0:15 'f2' ( temp float) +0:15 'f3' ( temp float) +0:15 'f4' ( temp float) +0:15 Constant: +0:15 -1.#INF +0:15 Constant: +0:15 1.#IND 0:2 Function Definition: main( ( temp void) 0:2 Function Parameters: 0:? Sequence @@ -112,7 +112,7 @@ Shader version: 500 0:? '@entryPointOutput' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 37 Capability Shader @@ -136,7 +136,7 @@ Shader version: 500 11: TypePointer Function 6(float) 13: 6(float) Constant 4286578688 15: 6(float) Constant 2139095040 - 29: 6(float) Constant 4290772992 + 29: 6(float) Constant 2143289344 34: TypePointer Output 7(fvec4) 35(@entryPointOutput): 34(ptr) Variable Output 4(main): 2 Function None 3 diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out index f604f0a096..89b1a74fee 100644 --- a/Test/baseResults/hlsl.init.frag.out +++ b/Test/baseResults/hlsl.init.frag.out @@ -331,7 +331,7 @@ gl_FragCoord origin is upper left 0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float a, layout( row_major std140) uniform float b, layout( row_major std140) uniform float c}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 110 Capability Shader @@ -392,12 +392,12 @@ gl_FragCoord origin is upper left Name 109 "" Decorate 98(input) Location 0 Decorate 101(@entryPointOutput) Location 0 + Decorate 107(Constants) Block MemberDecorate 107(Constants) 0 Offset 0 MemberDecorate 107(Constants) 1 Offset 4 MemberDecorate 107(Constants) 2 Offset 8 - Decorate 107(Constants) Block - Decorate 109 DescriptorSet 0 Decorate 109 Binding 0 + Decorate 109 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.init2.frag.out b/Test/baseResults/hlsl.init2.frag.out index 5039333ba0..bf6d64614b 100644 --- a/Test/baseResults/hlsl.init2.frag.out +++ b/Test/baseResults/hlsl.init2.frag.out @@ -31,29 +31,20 @@ gl_FragCoord origin is upper left 0:20 10.000000 0:22 Constant: 0:22 10.000000 -0:25 Sequence -0:25 move second child to first child ( temp float) -0:25 'n' ( temp float) -0:25 Constant: -0:25 0.000000 0:26 Sequence -0:26 move second child to first child ( temp 8-element array of 3-component vector of float) -0:26 'a' ( const (read only) 8-element array of 3-component vector of float) -0:26 Construct vec3 ( temp 8-element array of 3-component vector of float) -0:27 vector-scale ( temp 3-component vector of float) -0:27 Constant: -0:27 0.577350 -0:27 0.577350 -0:27 0.577350 -0:27 add second child into first child ( temp float) -0:27 'n' ( temp float) -0:27 Constant: -0:27 1.000000 +0:26 move second child to first child ( temp float) +0:26 'n' ( temp float) +0:26 Constant: +0:26 0.000000 +0:27 Sequence +0:27 move second child to first child ( temp 8-element array of 3-component vector of float) +0:27 'a' ( const (read only) 8-element array of 3-component vector of float) +0:27 Construct vec3 ( temp 8-element array of 3-component vector of float) 0:28 vector-scale ( temp 3-component vector of float) 0:28 Constant: -0:28 -0.577350 -0:28 -0.577350 -0:28 -0.577350 +0:28 0.577350 +0:28 0.577350 +0:28 0.577350 0:28 add second child into first child ( temp float) 0:28 'n' ( temp float) 0:28 Constant: @@ -62,7 +53,7 @@ gl_FragCoord origin is upper left 0:29 Constant: 0:29 -0.577350 0:29 -0.577350 -0:29 0.577350 +0:29 -0.577350 0:29 add second child into first child ( temp float) 0:29 'n' ( temp float) 0:29 Constant: @@ -70,8 +61,8 @@ gl_FragCoord origin is upper left 0:30 vector-scale ( temp 3-component vector of float) 0:30 Constant: 0:30 -0.577350 -0:30 0.577350 0:30 -0.577350 +0:30 0.577350 0:30 add second child into first child ( temp float) 0:30 'n' ( temp float) 0:30 Constant: @@ -80,16 +71,16 @@ gl_FragCoord origin is upper left 0:31 Constant: 0:31 -0.577350 0:31 0.577350 -0:31 0.577350 +0:31 -0.577350 0:31 add second child into first child ( temp float) 0:31 'n' ( temp float) 0:31 Constant: 0:31 1.000000 0:32 vector-scale ( temp 3-component vector of float) 0:32 Constant: -0:32 0.577350 -0:32 -0.577350 0:32 -0.577350 +0:32 0.577350 +0:32 0.577350 0:32 add second child into first child ( temp float) 0:32 'n' ( temp float) 0:32 Constant: @@ -98,7 +89,7 @@ gl_FragCoord origin is upper left 0:33 Constant: 0:33 0.577350 0:33 -0.577350 -0:33 0.577350 +0:33 -0.577350 0:33 add second child into first child ( temp float) 0:33 'n' ( temp float) 0:33 Constant: @@ -106,38 +97,38 @@ gl_FragCoord origin is upper left 0:34 vector-scale ( temp 3-component vector of float) 0:34 Constant: 0:34 0.577350 -0:34 0.577350 0:34 -0.577350 +0:34 0.577350 0:34 add second child into first child ( temp float) 0:34 'n' ( temp float) 0:34 Constant: 0:34 1.000000 -0:36 Sequence -0:36 move second child to first child ( temp structure{ temp 3-component vector of float a}) -0:36 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a}) -0:36 Construct structure ( temp structure{ temp 3-component vector of float a}) -0:36 vector-scale ( temp 3-component vector of float) -0:36 Constant: -0:36 -0.577350 -0:36 0.577350 -0:36 0.577350 -0:36 add second child into first child ( temp float) -0:36 'n' ( temp float) -0:36 Constant: -0:36 1.000000 -0:38 Sequence -0:38 move second child to first child ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) -0:38 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b}) -0:38 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) -0:38 vector-scale ( temp 3-component vector of float) -0:38 Constant: -0:38 -0.577350 -0:38 0.577350 -0:38 0.577350 -0:38 add second child into first child ( temp float) -0:38 'n' ( temp float) -0:38 Constant: -0:38 1.000000 +0:35 vector-scale ( temp 3-component vector of float) +0:35 Constant: +0:35 0.577350 +0:35 0.577350 +0:35 -0.577350 +0:35 add second child into first child ( temp float) +0:35 'n' ( temp float) +0:35 Constant: +0:35 1.000000 +0:37 Sequence +0:37 move second child to first child ( temp structure{ temp 3-component vector of float a}) +0:37 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a}) +0:37 Construct structure ( temp structure{ temp 3-component vector of float a}) +0:37 vector-scale ( temp 3-component vector of float) +0:37 Constant: +0:37 -0.577350 +0:37 0.577350 +0:37 0.577350 +0:37 add second child into first child ( temp float) +0:37 'n' ( temp float) +0:37 Constant: +0:37 1.000000 +0:39 Sequence +0:39 move second child to first child ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) +0:39 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b}) +0:39 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) 0:39 vector-scale ( temp 3-component vector of float) 0:39 Constant: 0:39 -0.577350 @@ -147,32 +138,41 @@ gl_FragCoord origin is upper left 0:39 'n' ( temp float) 0:39 Constant: 0:39 1.000000 -0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) -0:45 Function Parameters: +0:40 vector-scale ( temp 3-component vector of float) +0:40 Constant: +0:40 -0.577350 +0:40 0.577350 +0:40 0.577350 +0:40 add second child into first child ( temp float) +0:40 'n' ( temp float) +0:40 Constant: +0:40 1.000000 +0:46 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:46 Function Parameters: 0:? Sequence -0:46 Function Call: Test1( ( temp void) -0:49 move second child to first child ( temp 4-component vector of float) -0:49 color: direct index for structure ( temp 4-component vector of float) -0:49 'ps_output' ( temp structure{ temp 4-component vector of float color}) -0:49 Constant: -0:49 0 (const int) -0:49 Constant: -0:49 1.000000 -0:49 1.000000 -0:49 1.000000 -0:49 1.000000 -0:50 Branch: Return with expression -0:50 'ps_output' ( temp structure{ temp 4-component vector of float color}) -0:45 Function Definition: main( ( temp void) -0:45 Function Parameters: +0:47 Function Call: Test1( ( temp void) +0:50 move second child to first child ( temp 4-component vector of float) +0:50 color: direct index for structure ( temp 4-component vector of float) +0:50 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:50 Constant: +0:50 0 (const int) +0:50 Constant: +0:50 1.000000 +0:50 1.000000 +0:50 1.000000 +0:50 1.000000 +0:51 Branch: Return with expression +0:51 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:46 Function Definition: main( ( temp void) +0:46 Function Parameters: 0:? Sequence -0:45 Sequence -0:45 move second child to first child ( temp 4-component vector of float) +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) -0:45 color: direct index for structure ( temp 4-component vector of float) -0:45 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) -0:45 Constant: -0:45 0 (const int) +0:46 color: direct index for structure ( temp 4-component vector of float) +0:46 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) +0:46 Constant: +0:46 0 (const int) 0:? Linker Objects 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) @@ -212,29 +212,20 @@ gl_FragCoord origin is upper left 0:20 10.000000 0:22 Constant: 0:22 10.000000 -0:25 Sequence -0:25 move second child to first child ( temp float) -0:25 'n' ( temp float) -0:25 Constant: -0:25 0.000000 0:26 Sequence -0:26 move second child to first child ( temp 8-element array of 3-component vector of float) -0:26 'a' ( const (read only) 8-element array of 3-component vector of float) -0:26 Construct vec3 ( temp 8-element array of 3-component vector of float) -0:27 vector-scale ( temp 3-component vector of float) -0:27 Constant: -0:27 0.577350 -0:27 0.577350 -0:27 0.577350 -0:27 add second child into first child ( temp float) -0:27 'n' ( temp float) -0:27 Constant: -0:27 1.000000 +0:26 move second child to first child ( temp float) +0:26 'n' ( temp float) +0:26 Constant: +0:26 0.000000 +0:27 Sequence +0:27 move second child to first child ( temp 8-element array of 3-component vector of float) +0:27 'a' ( const (read only) 8-element array of 3-component vector of float) +0:27 Construct vec3 ( temp 8-element array of 3-component vector of float) 0:28 vector-scale ( temp 3-component vector of float) 0:28 Constant: -0:28 -0.577350 -0:28 -0.577350 -0:28 -0.577350 +0:28 0.577350 +0:28 0.577350 +0:28 0.577350 0:28 add second child into first child ( temp float) 0:28 'n' ( temp float) 0:28 Constant: @@ -243,7 +234,7 @@ gl_FragCoord origin is upper left 0:29 Constant: 0:29 -0.577350 0:29 -0.577350 -0:29 0.577350 +0:29 -0.577350 0:29 add second child into first child ( temp float) 0:29 'n' ( temp float) 0:29 Constant: @@ -251,8 +242,8 @@ gl_FragCoord origin is upper left 0:30 vector-scale ( temp 3-component vector of float) 0:30 Constant: 0:30 -0.577350 -0:30 0.577350 0:30 -0.577350 +0:30 0.577350 0:30 add second child into first child ( temp float) 0:30 'n' ( temp float) 0:30 Constant: @@ -261,16 +252,16 @@ gl_FragCoord origin is upper left 0:31 Constant: 0:31 -0.577350 0:31 0.577350 -0:31 0.577350 +0:31 -0.577350 0:31 add second child into first child ( temp float) 0:31 'n' ( temp float) 0:31 Constant: 0:31 1.000000 0:32 vector-scale ( temp 3-component vector of float) 0:32 Constant: -0:32 0.577350 -0:32 -0.577350 0:32 -0.577350 +0:32 0.577350 +0:32 0.577350 0:32 add second child into first child ( temp float) 0:32 'n' ( temp float) 0:32 Constant: @@ -279,7 +270,7 @@ gl_FragCoord origin is upper left 0:33 Constant: 0:33 0.577350 0:33 -0.577350 -0:33 0.577350 +0:33 -0.577350 0:33 add second child into first child ( temp float) 0:33 'n' ( temp float) 0:33 Constant: @@ -287,38 +278,38 @@ gl_FragCoord origin is upper left 0:34 vector-scale ( temp 3-component vector of float) 0:34 Constant: 0:34 0.577350 -0:34 0.577350 0:34 -0.577350 +0:34 0.577350 0:34 add second child into first child ( temp float) 0:34 'n' ( temp float) 0:34 Constant: 0:34 1.000000 -0:36 Sequence -0:36 move second child to first child ( temp structure{ temp 3-component vector of float a}) -0:36 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a}) -0:36 Construct structure ( temp structure{ temp 3-component vector of float a}) -0:36 vector-scale ( temp 3-component vector of float) -0:36 Constant: -0:36 -0.577350 -0:36 0.577350 -0:36 0.577350 -0:36 add second child into first child ( temp float) -0:36 'n' ( temp float) -0:36 Constant: -0:36 1.000000 -0:38 Sequence -0:38 move second child to first child ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) -0:38 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b}) -0:38 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) -0:38 vector-scale ( temp 3-component vector of float) -0:38 Constant: -0:38 -0.577350 -0:38 0.577350 -0:38 0.577350 -0:38 add second child into first child ( temp float) -0:38 'n' ( temp float) -0:38 Constant: -0:38 1.000000 +0:35 vector-scale ( temp 3-component vector of float) +0:35 Constant: +0:35 0.577350 +0:35 0.577350 +0:35 -0.577350 +0:35 add second child into first child ( temp float) +0:35 'n' ( temp float) +0:35 Constant: +0:35 1.000000 +0:37 Sequence +0:37 move second child to first child ( temp structure{ temp 3-component vector of float a}) +0:37 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a}) +0:37 Construct structure ( temp structure{ temp 3-component vector of float a}) +0:37 vector-scale ( temp 3-component vector of float) +0:37 Constant: +0:37 -0.577350 +0:37 0.577350 +0:37 0.577350 +0:37 add second child into first child ( temp float) +0:37 'n' ( temp float) +0:37 Constant: +0:37 1.000000 +0:39 Sequence +0:39 move second child to first child ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) +0:39 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b}) +0:39 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) 0:39 vector-scale ( temp 3-component vector of float) 0:39 Constant: 0:39 -0.577350 @@ -328,37 +319,46 @@ gl_FragCoord origin is upper left 0:39 'n' ( temp float) 0:39 Constant: 0:39 1.000000 -0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) -0:45 Function Parameters: +0:40 vector-scale ( temp 3-component vector of float) +0:40 Constant: +0:40 -0.577350 +0:40 0.577350 +0:40 0.577350 +0:40 add second child into first child ( temp float) +0:40 'n' ( temp float) +0:40 Constant: +0:40 1.000000 +0:46 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:46 Function Parameters: 0:? Sequence -0:46 Function Call: Test1( ( temp void) -0:49 move second child to first child ( temp 4-component vector of float) -0:49 color: direct index for structure ( temp 4-component vector of float) -0:49 'ps_output' ( temp structure{ temp 4-component vector of float color}) -0:49 Constant: -0:49 0 (const int) -0:49 Constant: -0:49 1.000000 -0:49 1.000000 -0:49 1.000000 -0:49 1.000000 -0:50 Branch: Return with expression -0:50 'ps_output' ( temp structure{ temp 4-component vector of float color}) -0:45 Function Definition: main( ( temp void) -0:45 Function Parameters: +0:47 Function Call: Test1( ( temp void) +0:50 move second child to first child ( temp 4-component vector of float) +0:50 color: direct index for structure ( temp 4-component vector of float) +0:50 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:50 Constant: +0:50 0 (const int) +0:50 Constant: +0:50 1.000000 +0:50 1.000000 +0:50 1.000000 +0:50 1.000000 +0:51 Branch: Return with expression +0:51 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:46 Function Definition: main( ( temp void) +0:46 Function Parameters: 0:? Sequence -0:45 Sequence -0:45 move second child to first child ( temp 4-component vector of float) +0:46 Sequence +0:46 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) -0:45 color: direct index for structure ( temp 4-component vector of float) -0:45 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) -0:45 Constant: -0:45 0 (const int) +0:46 color: direct index for structure ( temp 4-component vector of float) +0:46 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) +0:46 Constant: +0:46 0 (const int) 0:? Linker Objects 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 112 Capability Shader diff --git a/Test/baseResults/hlsl.inoutquals.frag.out b/Test/baseResults/hlsl.inoutquals.frag.out index 25186cb0ef..acea80bf7e 100644 --- a/Test/baseResults/hlsl.inoutquals.frag.out +++ b/Test/baseResults/hlsl.inoutquals.frag.out @@ -214,7 +214,7 @@ using depth_any 0:? 'sampleMask' ( out 1-element array of int SampleMaskIn) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 92 Capability Shader @@ -253,8 +253,8 @@ using depth_any Name 78 "@entryPointOutput.Color" Name 82 "@entryPointOutput.Depth" Name 88 "sampleMask" - Decorate 68(inpos) NoPerspective Decorate 68(inpos) BuiltIn FragCoord + Decorate 68(inpos) NoPerspective Decorate 78(@entryPointOutput.Color) Location 0 Decorate 82(@entryPointOutput.Depth) BuiltIn FragDepth Decorate 88(sampleMask) BuiltIn SampleMask diff --git a/Test/baseResults/hlsl.instance.geom.out b/Test/baseResults/hlsl.instance.geom.out new file mode 100644 index 0000000000..f2299ee741 --- /dev/null +++ b/Test/baseResults/hlsl.instance.geom.out @@ -0,0 +1,433 @@ +hlsl.instance.geom +Shader version: 500 +invocations = 5 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:10 Function Definition: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void) +0:10 Function Parameters: +0:10 'input' ( in 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 'output' ( out structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 'id' ( in uint) +0:? Sequence +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'i' ( temp int) +0:12 Constant: +0:12 0 (const int) +0:12 Loop with condition tested first: DontUnroll +0:12 Loop Condition +0:12 Compare Less Than ( temp bool) +0:12 'i' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Loop Body +0:? Sequence +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 indirect index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'input' ( in 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'i' ( temp int) +0:14 move second child to first child ( temp 4-component vector of float) +0:? 'output.m_position' ( out 4-component vector of float Position) +0:14 m_position: direct index for structure ( temp 4-component vector of float) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 Constant: +0:14 0 (const int) +0:14 move second child to first child ( temp 4-component vector of float) +0:? 'output.m_color' (layout( location=0) out 4-component vector of float) +0:14 m_color: direct index for structure ( temp 4-component vector of float) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 Constant: +0:14 1 (const int) +0:14 EmitVertex ( temp void) +0:12 Loop Terminal Expression +0:12 Pre-Increment ( temp int) +0:12 'i' ( temp int) +0:16 EndPrimitive ( temp void) +0:10 Function Definition: GeometryShader( ( temp void) +0:10 Function Parameters: +0:? Sequence +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 0 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 0 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 1 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 1 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 2 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 2 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 2 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 2 (const int) +0:10 move second child to first child ( temp uint) +0:? 'id' ( temp uint) +0:? 'id' ( in uint InvocationID) +0:10 Function Call: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'output' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'id' ( temp uint) +0:? Linker Objects +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:? 'id' ( in uint InvocationID) +0:? 'output.m_position' ( out 4-component vector of float Position) +0:? 'output.m_color' (layout( location=0) out 4-component vector of float) + + +Linked geometry stage: + + +Shader version: 500 +invocations = 5 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:10 Function Definition: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void) +0:10 Function Parameters: +0:10 'input' ( in 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 'output' ( out structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 'id' ( in uint) +0:? Sequence +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'i' ( temp int) +0:12 Constant: +0:12 0 (const int) +0:12 Loop with condition tested first: DontUnroll +0:12 Loop Condition +0:12 Compare Less Than ( temp bool) +0:12 'i' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Loop Body +0:? Sequence +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 indirect index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'input' ( in 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'i' ( temp int) +0:14 move second child to first child ( temp 4-component vector of float) +0:? 'output.m_position' ( out 4-component vector of float Position) +0:14 m_position: direct index for structure ( temp 4-component vector of float) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 Constant: +0:14 0 (const int) +0:14 move second child to first child ( temp 4-component vector of float) +0:? 'output.m_color' (layout( location=0) out 4-component vector of float) +0:14 m_color: direct index for structure ( temp 4-component vector of float) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 Constant: +0:14 1 (const int) +0:14 EmitVertex ( temp void) +0:12 Loop Terminal Expression +0:12 Pre-Increment ( temp int) +0:12 'i' ( temp int) +0:16 EndPrimitive ( temp void) +0:10 Function Definition: GeometryShader( ( temp void) +0:10 Function Parameters: +0:? Sequence +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 0 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 0 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 1 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 1 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 2 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 2 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 2 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 2 (const int) +0:10 move second child to first child ( temp uint) +0:? 'id' ( temp uint) +0:? 'id' ( in uint InvocationID) +0:10 Function Call: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'output' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'id' ( temp uint) +0:? Linker Objects +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:? 'id' ( in uint InvocationID) +0:? 'output.m_position' ( out 4-component vector of float Position) +0:? 'output.m_color' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 86 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "GeometryShader" 39 43 52 57 76 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 5 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Source HLSL 500 + Name 4 "GeometryShader" + Name 8 "VertexShaderOutput" + MemberName 8(VertexShaderOutput) 0 "m_position" + MemberName 8(VertexShaderOutput) 1 "m_color" + Name 19 "@GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1;" + Name 16 "input" + Name 17 "output" + Name 18 "id" + Name 23 "i" + Name 34 "flattenTemp" + Name 39 "output.m_position" + Name 43 "output.m_color" + Name 49 "input" + Name 52 "input.m_position" + Name 57 "input.m_color" + Name 74 "id" + Name 76 "id" + Name 78 "output" + Name 79 "param" + Name 81 "param" + Name 82 "param" + Decorate 39(output.m_position) BuiltIn Position + Decorate 43(output.m_color) Location 0 + Decorate 52(input.m_position) BuiltIn Position + Decorate 57(input.m_color) Location 0 + Decorate 76(id) BuiltIn InvocationId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 +8(VertexShaderOutput): TypeStruct 7(fvec4) 7(fvec4) + 9: TypeInt 32 0 + 10: 9(int) Constant 3 + 11: TypeArray 8(VertexShaderOutput) 10 + 12: TypePointer Function 11 + 13: TypePointer Function 8(VertexShaderOutput) + 14: TypePointer Function 9(int) + 15: TypeFunction 2 12(ptr) 13(ptr) 14(ptr) + 21: TypeInt 32 1 + 22: TypePointer Function 21(int) + 24: 21(int) Constant 0 + 31: 21(int) Constant 3 + 32: TypeBool + 38: TypePointer Output 7(fvec4) +39(output.m_position): 38(ptr) Variable Output + 40: TypePointer Function 7(fvec4) +43(output.m_color): 38(ptr) Variable Output + 44: 21(int) Constant 1 + 50: TypeArray 7(fvec4) 10 + 51: TypePointer Input 50 +52(input.m_position): 51(ptr) Variable Input + 53: TypePointer Input 7(fvec4) +57(input.m_color): 51(ptr) Variable Input + 67: 21(int) Constant 2 + 75: TypePointer Input 9(int) + 76(id): 75(ptr) Variable Input +4(GeometryShader): 2 Function None 3 + 5: Label + 49(input): 12(ptr) Variable Function + 74(id): 14(ptr) Variable Function + 78(output): 13(ptr) Variable Function + 79(param): 12(ptr) Variable Function + 81(param): 13(ptr) Variable Function + 82(param): 14(ptr) Variable Function + 54: 53(ptr) AccessChain 52(input.m_position) 24 + 55: 7(fvec4) Load 54 + 56: 40(ptr) AccessChain 49(input) 24 24 + Store 56 55 + 58: 53(ptr) AccessChain 57(input.m_color) 24 + 59: 7(fvec4) Load 58 + 60: 40(ptr) AccessChain 49(input) 24 44 + Store 60 59 + 61: 53(ptr) AccessChain 52(input.m_position) 44 + 62: 7(fvec4) Load 61 + 63: 40(ptr) AccessChain 49(input) 44 24 + Store 63 62 + 64: 53(ptr) AccessChain 57(input.m_color) 44 + 65: 7(fvec4) Load 64 + 66: 40(ptr) AccessChain 49(input) 44 44 + Store 66 65 + 68: 53(ptr) AccessChain 52(input.m_position) 67 + 69: 7(fvec4) Load 68 + 70: 40(ptr) AccessChain 49(input) 67 24 + Store 70 69 + 71: 53(ptr) AccessChain 57(input.m_color) 67 + 72: 7(fvec4) Load 71 + 73: 40(ptr) AccessChain 49(input) 67 44 + Store 73 72 + 77: 9(int) Load 76(id) + Store 74(id) 77 + 80: 11 Load 49(input) + Store 79(param) 80 + 83: 9(int) Load 74(id) + Store 82(param) 83 + 84: 2 FunctionCall 19(@GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1;) 79(param) 81(param) 82(param) + 85:8(VertexShaderOutput) Load 81(param) + Store 78(output) 85 + Return + FunctionEnd +19(@GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1;): 2 Function None 15 + 16(input): 12(ptr) FunctionParameter + 17(output): 13(ptr) FunctionParameter + 18(id): 14(ptr) FunctionParameter + 20: Label + 23(i): 22(ptr) Variable Function + 34(flattenTemp): 13(ptr) Variable Function + Store 23(i) 24 + Branch 25 + 25: Label + LoopMerge 27 28 DontUnroll + Branch 29 + 29: Label + 30: 21(int) Load 23(i) + 33: 32(bool) SLessThan 30 31 + BranchConditional 33 26 27 + 26: Label + 35: 21(int) Load 23(i) + 36: 13(ptr) AccessChain 16(input) 35 + 37:8(VertexShaderOutput) Load 36 + Store 34(flattenTemp) 37 + 41: 40(ptr) AccessChain 34(flattenTemp) 24 + 42: 7(fvec4) Load 41 + Store 39(output.m_position) 42 + 45: 40(ptr) AccessChain 34(flattenTemp) 44 + 46: 7(fvec4) Load 45 + Store 43(output.m_color) 46 + EmitVertex + Branch 28 + 28: Label + 47: 21(int) Load 23(i) + 48: 21(int) IAdd 47 44 + Store 23(i) 48 + Branch 25 + 27: Label + EndPrimitive + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.int.dot.frag.out b/Test/baseResults/hlsl.int.dot.frag.out index 3272cb4c77..5c7edbb926 100644 --- a/Test/baseResults/hlsl.int.dot.frag.out +++ b/Test/baseResults/hlsl.int.dot.frag.out @@ -224,7 +224,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 84 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsic.frexp.frag.out b/Test/baseResults/hlsl.intrinsic.frexp.frag.out index 1595a6094a..c0c9109bb1 100644 --- a/Test/baseResults/hlsl.intrinsic.frexp.frag.out +++ b/Test/baseResults/hlsl.intrinsic.frexp.frag.out @@ -190,7 +190,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 98 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsic.frexp.vert.out b/Test/baseResults/hlsl.intrinsic.frexp.vert.out index 0418ed6cd3..41bb429a78 100644 --- a/Test/baseResults/hlsl.intrinsic.frexp.vert.out +++ b/Test/baseResults/hlsl.intrinsic.frexp.vert.out @@ -113,7 +113,7 @@ Shader version: 500 0:? Linker Objects // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 78 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out index abb9650f61..4dfe8e0cd2 100644 --- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out +++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out @@ -40,7 +40,7 @@ local_size = (1, 1, 1) 0:? Linker Objects // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 15 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out index bce3d149d3..c02e58ee4d 100644 --- a/Test/baseResults/hlsl.intrinsics.comp.out +++ b/Test/baseResults/hlsl.intrinsics.comp.out @@ -2,334 +2,337 @@ hlsl.intrinsics.comp Shader version: 500 local_size = (1, 1, 1) 0:? Sequence -0:17 Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float) -0:17 Function Parameters: -0:17 'inF0' ( in float) -0:17 'inF1' ( in float) -0:17 'inF2' ( in float) -0:17 'inU0' ( in uint) -0:17 'inU1' ( in uint) +0:19 Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float) +0:19 Function Parameters: +0:19 'inF0' ( in float) +0:19 'inF1' ( in float) +0:19 'inF2' ( in float) +0:19 'inU0' ( in uint) +0:19 'inU1' ( in uint) 0:? Sequence -0:21 all ( temp bool) -0:21 Convert float to bool ( temp bool) -0:21 'inF0' ( in float) -0:24 AtomicAdd ( temp uint) -0:24 'gs_ua' ( shared uint) -0:24 'gs_ub' ( shared uint) -0:25 move second child to first child ( temp uint) -0:25 'out_u1' ( temp uint) -0:25 AtomicAdd ( temp uint) -0:25 'gs_ua' ( shared uint) -0:25 'gs_ub' ( shared uint) -0:26 AtomicAnd ( temp uint) +0:23 all ( temp bool) +0:23 Convert float to bool ( temp bool) +0:23 'inF0' ( in float) +0:26 AtomicAdd ( temp uint) 0:26 'gs_ua' ( shared uint) 0:26 'gs_ub' ( shared uint) 0:27 move second child to first child ( temp uint) 0:27 'out_u1' ( temp uint) -0:27 AtomicAnd ( temp uint) +0:27 AtomicAdd ( temp uint) 0:27 'gs_ua' ( shared uint) 0:27 'gs_ub' ( shared uint) -0:28 move second child to first child ( temp uint) -0:28 'out_u1' ( temp uint) -0:28 AtomicCompSwap ( temp uint) -0:28 'gs_ua' ( shared uint) -0:28 'gs_ub' ( shared uint) -0:28 'gs_uc' ( shared uint) +0:28 AtomicAnd ( temp uint) +0:28 'gs_ua' ( shared uint) +0:28 'gs_ub' ( shared uint) 0:29 move second child to first child ( temp uint) 0:29 'out_u1' ( temp uint) -0:29 AtomicExchange ( temp uint) +0:29 AtomicAnd ( temp uint) 0:29 'gs_ua' ( shared uint) 0:29 'gs_ub' ( shared uint) -0:30 AtomicMax ( temp uint) -0:30 'gs_ua' ( shared uint) -0:30 'gs_ub' ( shared uint) +0:30 move second child to first child ( temp uint) +0:30 'out_u1' ( temp uint) +0:30 AtomicCompSwap ( temp uint) +0:30 'gs_ua' ( shared uint) +0:30 'gs_ub' ( shared uint) +0:30 'gs_uc' ( shared uint) 0:31 move second child to first child ( temp uint) 0:31 'out_u1' ( temp uint) -0:31 AtomicMax ( temp uint) +0:31 AtomicExchange ( temp uint) 0:31 'gs_ua' ( shared uint) 0:31 'gs_ub' ( shared uint) -0:32 AtomicMin ( temp uint) +0:32 AtomicMax ( temp uint) 0:32 'gs_ua' ( shared uint) 0:32 'gs_ub' ( shared uint) 0:33 move second child to first child ( temp uint) 0:33 'out_u1' ( temp uint) -0:33 AtomicMin ( temp uint) +0:33 AtomicMax ( temp uint) 0:33 'gs_ua' ( shared uint) 0:33 'gs_ub' ( shared uint) -0:34 AtomicOr ( temp uint) +0:34 AtomicMin ( temp uint) 0:34 'gs_ua' ( shared uint) 0:34 'gs_ub' ( shared uint) 0:35 move second child to first child ( temp uint) 0:35 'out_u1' ( temp uint) -0:35 AtomicOr ( temp uint) +0:35 AtomicMin ( temp uint) 0:35 'gs_ua' ( shared uint) 0:35 'gs_ub' ( shared uint) -0:36 AtomicXor ( temp uint) +0:36 AtomicOr ( temp uint) 0:36 'gs_ua' ( shared uint) 0:36 'gs_ub' ( shared uint) 0:37 move second child to first child ( temp uint) 0:37 'out_u1' ( temp uint) -0:37 AtomicXor ( temp uint) +0:37 AtomicOr ( temp uint) 0:37 'gs_ua' ( shared uint) 0:37 'gs_ub' ( shared uint) -0:41 Branch: Return with expression -0:41 Constant: -0:41 0.000000 -0:45 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float) -0:45 Function Parameters: -0:45 'inF0' ( in 1-component vector of float) -0:45 'inF1' ( in 1-component vector of float) -0:45 'inF2' ( in 1-component vector of float) +0:38 AtomicXor ( temp uint) +0:38 'gs_ua' ( shared uint) +0:38 'gs_ub' ( shared uint) +0:39 move second child to first child ( temp uint) +0:39 'out_u1' ( temp uint) +0:39 AtomicXor ( temp uint) +0:39 'gs_ua' ( shared uint) +0:39 'gs_ub' ( shared uint) +0:41 AtomicAdd ( temp float) +0:41 'gs_fa' ( shared float) +0:41 'gs_fb' ( shared float) +0:45 Branch: Return with expression +0:45 Constant: +0:45 0.000000 +0:49 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float) +0:49 Function Parameters: +0:49 'inF0' ( in 1-component vector of float) +0:49 'inF1' ( in 1-component vector of float) +0:49 'inF2' ( in 1-component vector of float) 0:? Sequence -0:47 Branch: Return with expression -0:47 Constant: -0:47 0.000000 -0:51 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float) -0:51 Function Parameters: -0:51 'inF0' ( in 2-component vector of float) -0:51 'inF1' ( in 2-component vector of float) -0:51 'inF2' ( in 2-component vector of float) -0:51 'inU0' ( in 2-component vector of uint) -0:51 'inU1' ( in 2-component vector of uint) +0:51 Branch: Return with expression +0:51 Constant: +0:51 0.000000 +0:55 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float) +0:55 Function Parameters: +0:55 'inF0' ( in 2-component vector of float) +0:55 'inF1' ( in 2-component vector of float) +0:55 'inF2' ( in 2-component vector of float) +0:55 'inU0' ( in 2-component vector of uint) +0:55 'inU1' ( in 2-component vector of uint) 0:? Sequence -0:55 all ( temp bool) -0:55 Convert float to bool ( temp 2-component vector of bool) -0:55 'inF0' ( in 2-component vector of float) -0:58 AtomicAdd ( temp 2-component vector of uint) -0:58 'gs_ua2' ( shared 2-component vector of uint) -0:58 'gs_ub2' ( shared 2-component vector of uint) -0:59 move second child to first child ( temp 2-component vector of uint) -0:59 'out_u2' ( temp 2-component vector of uint) -0:59 AtomicAdd ( temp 2-component vector of uint) -0:59 'gs_ua2' ( shared 2-component vector of uint) -0:59 'gs_ub2' ( shared 2-component vector of uint) -0:60 AtomicAnd ( temp 2-component vector of uint) -0:60 'gs_ua2' ( shared 2-component vector of uint) -0:60 'gs_ub2' ( shared 2-component vector of uint) -0:61 move second child to first child ( temp 2-component vector of uint) -0:61 'out_u2' ( temp 2-component vector of uint) -0:61 AtomicAnd ( temp 2-component vector of uint) -0:61 'gs_ua2' ( shared 2-component vector of uint) -0:61 'gs_ub2' ( shared 2-component vector of uint) -0:62 move second child to first child ( temp 2-component vector of uint) -0:62 'out_u2' ( temp 2-component vector of uint) -0:62 AtomicCompSwap ( temp 2-component vector of uint) -0:62 'gs_ua2' ( shared 2-component vector of uint) -0:62 'gs_ub2' ( shared 2-component vector of uint) -0:62 'gs_uc2' ( shared 2-component vector of uint) +0:59 all ( temp bool) +0:59 Convert float to bool ( temp 2-component vector of bool) +0:59 'inF0' ( in 2-component vector of float) +0:62 AtomicAdd ( temp 2-component vector of uint) +0:62 'gs_ua2' ( shared 2-component vector of uint) +0:62 'gs_ub2' ( shared 2-component vector of uint) 0:63 move second child to first child ( temp 2-component vector of uint) 0:63 'out_u2' ( temp 2-component vector of uint) -0:63 AtomicExchange ( temp 2-component vector of uint) +0:63 AtomicAdd ( temp 2-component vector of uint) 0:63 'gs_ua2' ( shared 2-component vector of uint) 0:63 'gs_ub2' ( shared 2-component vector of uint) -0:64 AtomicMax ( temp 2-component vector of uint) +0:64 AtomicAnd ( temp 2-component vector of uint) 0:64 'gs_ua2' ( shared 2-component vector of uint) 0:64 'gs_ub2' ( shared 2-component vector of uint) 0:65 move second child to first child ( temp 2-component vector of uint) 0:65 'out_u2' ( temp 2-component vector of uint) -0:65 AtomicMax ( temp 2-component vector of uint) +0:65 AtomicAnd ( temp 2-component vector of uint) 0:65 'gs_ua2' ( shared 2-component vector of uint) 0:65 'gs_ub2' ( shared 2-component vector of uint) -0:66 AtomicMin ( temp 2-component vector of uint) -0:66 'gs_ua2' ( shared 2-component vector of uint) -0:66 'gs_ub2' ( shared 2-component vector of uint) +0:66 move second child to first child ( temp 2-component vector of uint) +0:66 'out_u2' ( temp 2-component vector of uint) +0:66 AtomicCompSwap ( temp 2-component vector of uint) +0:66 'gs_ua2' ( shared 2-component vector of uint) +0:66 'gs_ub2' ( shared 2-component vector of uint) +0:66 'gs_uc2' ( shared 2-component vector of uint) 0:67 move second child to first child ( temp 2-component vector of uint) 0:67 'out_u2' ( temp 2-component vector of uint) -0:67 AtomicMin ( temp 2-component vector of uint) +0:67 AtomicExchange ( temp 2-component vector of uint) 0:67 'gs_ua2' ( shared 2-component vector of uint) 0:67 'gs_ub2' ( shared 2-component vector of uint) -0:68 AtomicOr ( temp 2-component vector of uint) +0:68 AtomicMax ( temp 2-component vector of uint) 0:68 'gs_ua2' ( shared 2-component vector of uint) 0:68 'gs_ub2' ( shared 2-component vector of uint) 0:69 move second child to first child ( temp 2-component vector of uint) 0:69 'out_u2' ( temp 2-component vector of uint) -0:69 AtomicOr ( temp 2-component vector of uint) +0:69 AtomicMax ( temp 2-component vector of uint) 0:69 'gs_ua2' ( shared 2-component vector of uint) 0:69 'gs_ub2' ( shared 2-component vector of uint) -0:70 AtomicXor ( temp 2-component vector of uint) +0:70 AtomicMin ( temp 2-component vector of uint) 0:70 'gs_ua2' ( shared 2-component vector of uint) 0:70 'gs_ub2' ( shared 2-component vector of uint) 0:71 move second child to first child ( temp 2-component vector of uint) 0:71 'out_u2' ( temp 2-component vector of uint) -0:71 AtomicXor ( temp 2-component vector of uint) +0:71 AtomicMin ( temp 2-component vector of uint) 0:71 'gs_ua2' ( shared 2-component vector of uint) 0:71 'gs_ub2' ( shared 2-component vector of uint) -0:74 Branch: Return with expression -0:74 Constant: -0:74 1.000000 -0:74 2.000000 -0:78 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) -0:78 Function Parameters: -0:78 'inF0' ( in 3-component vector of float) -0:78 'inF1' ( in 3-component vector of float) -0:78 'inF2' ( in 3-component vector of float) -0:78 'inU0' ( in 3-component vector of uint) -0:78 'inU1' ( in 3-component vector of uint) +0:72 AtomicOr ( temp 2-component vector of uint) +0:72 'gs_ua2' ( shared 2-component vector of uint) +0:72 'gs_ub2' ( shared 2-component vector of uint) +0:73 move second child to first child ( temp 2-component vector of uint) +0:73 'out_u2' ( temp 2-component vector of uint) +0:73 AtomicOr ( temp 2-component vector of uint) +0:73 'gs_ua2' ( shared 2-component vector of uint) +0:73 'gs_ub2' ( shared 2-component vector of uint) +0:74 AtomicXor ( temp 2-component vector of uint) +0:74 'gs_ua2' ( shared 2-component vector of uint) +0:74 'gs_ub2' ( shared 2-component vector of uint) +0:75 move second child to first child ( temp 2-component vector of uint) +0:75 'out_u2' ( temp 2-component vector of uint) +0:75 AtomicXor ( temp 2-component vector of uint) +0:75 'gs_ua2' ( shared 2-component vector of uint) +0:75 'gs_ub2' ( shared 2-component vector of uint) +0:78 Branch: Return with expression +0:78 Constant: +0:78 1.000000 +0:78 2.000000 +0:82 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) +0:82 Function Parameters: +0:82 'inF0' ( in 3-component vector of float) +0:82 'inF1' ( in 3-component vector of float) +0:82 'inF2' ( in 3-component vector of float) +0:82 'inU0' ( in 3-component vector of uint) +0:82 'inU1' ( in 3-component vector of uint) 0:? Sequence -0:82 all ( temp bool) -0:82 Convert float to bool ( temp 3-component vector of bool) -0:82 'inF0' ( in 3-component vector of float) -0:85 AtomicAdd ( temp 3-component vector of uint) -0:85 'gs_ua3' ( shared 3-component vector of uint) -0:85 'gs_ub3' ( shared 3-component vector of uint) -0:86 move second child to first child ( temp 3-component vector of uint) -0:86 'out_u3' ( temp 3-component vector of uint) -0:86 AtomicAdd ( temp 3-component vector of uint) -0:86 'gs_ua3' ( shared 3-component vector of uint) -0:86 'gs_ub3' ( shared 3-component vector of uint) -0:87 AtomicAnd ( temp 3-component vector of uint) -0:87 'gs_ua3' ( shared 3-component vector of uint) -0:87 'gs_ub3' ( shared 3-component vector of uint) -0:88 move second child to first child ( temp 3-component vector of uint) -0:88 'out_u3' ( temp 3-component vector of uint) -0:88 AtomicAnd ( temp 3-component vector of uint) -0:88 'gs_ua3' ( shared 3-component vector of uint) -0:88 'gs_ub3' ( shared 3-component vector of uint) -0:89 move second child to first child ( temp 3-component vector of uint) -0:89 'out_u3' ( temp 3-component vector of uint) -0:89 AtomicCompSwap ( temp 3-component vector of uint) -0:89 'gs_ua3' ( shared 3-component vector of uint) -0:89 'gs_ub3' ( shared 3-component vector of uint) -0:89 'gs_uc3' ( shared 3-component vector of uint) +0:86 all ( temp bool) +0:86 Convert float to bool ( temp 3-component vector of bool) +0:86 'inF0' ( in 3-component vector of float) +0:89 AtomicAdd ( temp 3-component vector of uint) +0:89 'gs_ua3' ( shared 3-component vector of uint) +0:89 'gs_ub3' ( shared 3-component vector of uint) 0:90 move second child to first child ( temp 3-component vector of uint) 0:90 'out_u3' ( temp 3-component vector of uint) -0:90 AtomicExchange ( temp 3-component vector of uint) +0:90 AtomicAdd ( temp 3-component vector of uint) 0:90 'gs_ua3' ( shared 3-component vector of uint) 0:90 'gs_ub3' ( shared 3-component vector of uint) -0:91 AtomicMax ( temp 3-component vector of uint) +0:91 AtomicAnd ( temp 3-component vector of uint) 0:91 'gs_ua3' ( shared 3-component vector of uint) 0:91 'gs_ub3' ( shared 3-component vector of uint) 0:92 move second child to first child ( temp 3-component vector of uint) 0:92 'out_u3' ( temp 3-component vector of uint) -0:92 AtomicMax ( temp 3-component vector of uint) +0:92 AtomicAnd ( temp 3-component vector of uint) 0:92 'gs_ua3' ( shared 3-component vector of uint) 0:92 'gs_ub3' ( shared 3-component vector of uint) -0:93 AtomicMin ( temp 3-component vector of uint) -0:93 'gs_ua3' ( shared 3-component vector of uint) -0:93 'gs_ub3' ( shared 3-component vector of uint) +0:93 move second child to first child ( temp 3-component vector of uint) +0:93 'out_u3' ( temp 3-component vector of uint) +0:93 AtomicCompSwap ( temp 3-component vector of uint) +0:93 'gs_ua3' ( shared 3-component vector of uint) +0:93 'gs_ub3' ( shared 3-component vector of uint) +0:93 'gs_uc3' ( shared 3-component vector of uint) 0:94 move second child to first child ( temp 3-component vector of uint) 0:94 'out_u3' ( temp 3-component vector of uint) -0:94 AtomicMin ( temp 3-component vector of uint) +0:94 AtomicExchange ( temp 3-component vector of uint) 0:94 'gs_ua3' ( shared 3-component vector of uint) 0:94 'gs_ub3' ( shared 3-component vector of uint) -0:95 AtomicOr ( temp 3-component vector of uint) +0:95 AtomicMax ( temp 3-component vector of uint) 0:95 'gs_ua3' ( shared 3-component vector of uint) 0:95 'gs_ub3' ( shared 3-component vector of uint) 0:96 move second child to first child ( temp 3-component vector of uint) 0:96 'out_u3' ( temp 3-component vector of uint) -0:96 AtomicOr ( temp 3-component vector of uint) +0:96 AtomicMax ( temp 3-component vector of uint) 0:96 'gs_ua3' ( shared 3-component vector of uint) 0:96 'gs_ub3' ( shared 3-component vector of uint) -0:97 AtomicXor ( temp 3-component vector of uint) +0:97 AtomicMin ( temp 3-component vector of uint) 0:97 'gs_ua3' ( shared 3-component vector of uint) 0:97 'gs_ub3' ( shared 3-component vector of uint) 0:98 move second child to first child ( temp 3-component vector of uint) 0:98 'out_u3' ( temp 3-component vector of uint) -0:98 AtomicXor ( temp 3-component vector of uint) +0:98 AtomicMin ( temp 3-component vector of uint) 0:98 'gs_ua3' ( shared 3-component vector of uint) 0:98 'gs_ub3' ( shared 3-component vector of uint) -0:101 Branch: Return with expression -0:101 Constant: -0:101 1.000000 -0:101 2.000000 -0:101 3.000000 -0:105 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) -0:105 Function Parameters: -0:105 'inF0' ( in 4-component vector of float) -0:105 'inF1' ( in 4-component vector of float) -0:105 'inF2' ( in 4-component vector of float) -0:105 'inU0' ( in 4-component vector of uint) -0:105 'inU1' ( in 4-component vector of uint) +0:99 AtomicOr ( temp 3-component vector of uint) +0:99 'gs_ua3' ( shared 3-component vector of uint) +0:99 'gs_ub3' ( shared 3-component vector of uint) +0:100 move second child to first child ( temp 3-component vector of uint) +0:100 'out_u3' ( temp 3-component vector of uint) +0:100 AtomicOr ( temp 3-component vector of uint) +0:100 'gs_ua3' ( shared 3-component vector of uint) +0:100 'gs_ub3' ( shared 3-component vector of uint) +0:101 AtomicXor ( temp 3-component vector of uint) +0:101 'gs_ua3' ( shared 3-component vector of uint) +0:101 'gs_ub3' ( shared 3-component vector of uint) +0:102 move second child to first child ( temp 3-component vector of uint) +0:102 'out_u3' ( temp 3-component vector of uint) +0:102 AtomicXor ( temp 3-component vector of uint) +0:102 'gs_ua3' ( shared 3-component vector of uint) +0:102 'gs_ub3' ( shared 3-component vector of uint) +0:105 Branch: Return with expression +0:105 Constant: +0:105 1.000000 +0:105 2.000000 +0:105 3.000000 +0:109 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) +0:109 Function Parameters: +0:109 'inF0' ( in 4-component vector of float) +0:109 'inF1' ( in 4-component vector of float) +0:109 'inF2' ( in 4-component vector of float) +0:109 'inU0' ( in 4-component vector of uint) +0:109 'inU1' ( in 4-component vector of uint) 0:? Sequence -0:109 all ( temp bool) -0:109 Convert float to bool ( temp 4-component vector of bool) -0:109 'inF0' ( in 4-component vector of float) -0:112 AtomicAdd ( temp 4-component vector of uint) -0:112 'gs_ua4' ( shared 4-component vector of uint) -0:112 'gs_ub4' ( shared 4-component vector of uint) -0:113 move second child to first child ( temp 4-component vector of uint) -0:113 'out_u4' ( temp 4-component vector of uint) -0:113 AtomicAdd ( temp 4-component vector of uint) -0:113 'gs_ua4' ( shared 4-component vector of uint) -0:113 'gs_ub4' ( shared 4-component vector of uint) -0:114 AtomicAnd ( temp 4-component vector of uint) -0:114 'gs_ua4' ( shared 4-component vector of uint) -0:114 'gs_ub4' ( shared 4-component vector of uint) -0:115 move second child to first child ( temp 4-component vector of uint) -0:115 'out_u4' ( temp 4-component vector of uint) -0:115 AtomicAnd ( temp 4-component vector of uint) -0:115 'gs_ua4' ( shared 4-component vector of uint) -0:115 'gs_ub4' ( shared 4-component vector of uint) -0:116 move second child to first child ( temp 4-component vector of uint) -0:116 'out_u4' ( temp 4-component vector of uint) -0:116 AtomicCompSwap ( temp 4-component vector of uint) -0:116 'gs_ua4' ( shared 4-component vector of uint) -0:116 'gs_ub4' ( shared 4-component vector of uint) -0:116 'gs_uc4' ( shared 4-component vector of uint) +0:113 all ( temp bool) +0:113 Convert float to bool ( temp 4-component vector of bool) +0:113 'inF0' ( in 4-component vector of float) +0:116 AtomicAdd ( temp 4-component vector of uint) +0:116 'gs_ua4' ( shared 4-component vector of uint) +0:116 'gs_ub4' ( shared 4-component vector of uint) 0:117 move second child to first child ( temp 4-component vector of uint) 0:117 'out_u4' ( temp 4-component vector of uint) -0:117 AtomicExchange ( temp 4-component vector of uint) +0:117 AtomicAdd ( temp 4-component vector of uint) 0:117 'gs_ua4' ( shared 4-component vector of uint) 0:117 'gs_ub4' ( shared 4-component vector of uint) -0:118 AtomicMax ( temp 4-component vector of uint) +0:118 AtomicAnd ( temp 4-component vector of uint) 0:118 'gs_ua4' ( shared 4-component vector of uint) 0:118 'gs_ub4' ( shared 4-component vector of uint) 0:119 move second child to first child ( temp 4-component vector of uint) 0:119 'out_u4' ( temp 4-component vector of uint) -0:119 AtomicMax ( temp 4-component vector of uint) +0:119 AtomicAnd ( temp 4-component vector of uint) 0:119 'gs_ua4' ( shared 4-component vector of uint) 0:119 'gs_ub4' ( shared 4-component vector of uint) -0:120 AtomicMin ( temp 4-component vector of uint) -0:120 'gs_ua4' ( shared 4-component vector of uint) -0:120 'gs_ub4' ( shared 4-component vector of uint) +0:120 move second child to first child ( temp 4-component vector of uint) +0:120 'out_u4' ( temp 4-component vector of uint) +0:120 AtomicCompSwap ( temp 4-component vector of uint) +0:120 'gs_ua4' ( shared 4-component vector of uint) +0:120 'gs_ub4' ( shared 4-component vector of uint) +0:120 'gs_uc4' ( shared 4-component vector of uint) 0:121 move second child to first child ( temp 4-component vector of uint) 0:121 'out_u4' ( temp 4-component vector of uint) -0:121 AtomicMin ( temp 4-component vector of uint) +0:121 AtomicExchange ( temp 4-component vector of uint) 0:121 'gs_ua4' ( shared 4-component vector of uint) 0:121 'gs_ub4' ( shared 4-component vector of uint) -0:122 AtomicOr ( temp 4-component vector of uint) +0:122 AtomicMax ( temp 4-component vector of uint) 0:122 'gs_ua4' ( shared 4-component vector of uint) 0:122 'gs_ub4' ( shared 4-component vector of uint) 0:123 move second child to first child ( temp 4-component vector of uint) 0:123 'out_u4' ( temp 4-component vector of uint) -0:123 AtomicOr ( temp 4-component vector of uint) +0:123 AtomicMax ( temp 4-component vector of uint) 0:123 'gs_ua4' ( shared 4-component vector of uint) 0:123 'gs_ub4' ( shared 4-component vector of uint) -0:124 AtomicXor ( temp 4-component vector of uint) +0:124 AtomicMin ( temp 4-component vector of uint) 0:124 'gs_ua4' ( shared 4-component vector of uint) 0:124 'gs_ub4' ( shared 4-component vector of uint) 0:125 move second child to first child ( temp 4-component vector of uint) 0:125 'out_u4' ( temp 4-component vector of uint) -0:125 AtomicXor ( temp 4-component vector of uint) +0:125 AtomicMin ( temp 4-component vector of uint) 0:125 'gs_ua4' ( shared 4-component vector of uint) 0:125 'gs_ub4' ( shared 4-component vector of uint) -0:128 Branch: Return with expression -0:128 Constant: -0:128 1.000000 -0:128 2.000000 -0:128 3.000000 -0:128 4.000000 -0:105 Function Definition: ComputeShaderFunction( ( temp void) -0:105 Function Parameters: +0:126 AtomicOr ( temp 4-component vector of uint) +0:126 'gs_ua4' ( shared 4-component vector of uint) +0:126 'gs_ub4' ( shared 4-component vector of uint) +0:127 move second child to first child ( temp 4-component vector of uint) +0:127 'out_u4' ( temp 4-component vector of uint) +0:127 AtomicOr ( temp 4-component vector of uint) +0:127 'gs_ua4' ( shared 4-component vector of uint) +0:127 'gs_ub4' ( shared 4-component vector of uint) +0:128 AtomicXor ( temp 4-component vector of uint) +0:128 'gs_ua4' ( shared 4-component vector of uint) +0:128 'gs_ub4' ( shared 4-component vector of uint) +0:129 move second child to first child ( temp 4-component vector of uint) +0:129 'out_u4' ( temp 4-component vector of uint) +0:129 AtomicXor ( temp 4-component vector of uint) +0:129 'gs_ua4' ( shared 4-component vector of uint) +0:129 'gs_ub4' ( shared 4-component vector of uint) +0:132 Branch: Return with expression +0:132 Constant: +0:132 1.000000 +0:132 2.000000 +0:132 3.000000 +0:132 4.000000 +0:109 Function Definition: ComputeShaderFunction( ( temp void) +0:109 Function Parameters: 0:? Sequence -0:105 move second child to first child ( temp 4-component vector of float) +0:109 move second child to first child ( temp 4-component vector of float) 0:? 'inF0' ( temp 4-component vector of float) 0:? 'inF0' (layout( location=0) in 4-component vector of float) -0:105 move second child to first child ( temp 4-component vector of float) +0:109 move second child to first child ( temp 4-component vector of float) 0:? 'inF1' ( temp 4-component vector of float) 0:? 'inF1' (layout( location=1) in 4-component vector of float) -0:105 move second child to first child ( temp 4-component vector of float) +0:109 move second child to first child ( temp 4-component vector of float) 0:? 'inF2' ( temp 4-component vector of float) 0:? 'inF2' (layout( location=2) in 4-component vector of float) -0:105 move second child to first child ( temp 4-component vector of uint) +0:109 move second child to first child ( temp 4-component vector of uint) 0:? 'inU0' ( temp 4-component vector of uint) 0:? 'inU0' (layout( location=3) in 4-component vector of uint) -0:105 move second child to first child ( temp 4-component vector of uint) +0:109 move second child to first child ( temp 4-component vector of uint) 0:? 'inU1' ( temp 4-component vector of uint) 0:? 'inU1' (layout( location=4) in 4-component vector of uint) -0:105 move second child to first child ( temp 4-component vector of float) +0:109 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -0:105 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) +0:109 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) 0:? 'inF0' ( temp 4-component vector of float) 0:? 'inF1' ( temp 4-component vector of float) 0:? 'inF2' ( temp 4-component vector of float) @@ -348,6 +351,8 @@ local_size = (1, 1, 1) 0:? 'gs_ua4' ( shared 4-component vector of uint) 0:? 'gs_ub4' ( shared 4-component vector of uint) 0:? 'gs_uc4' ( shared 4-component vector of uint) +0:? 'gs_fa' ( shared float) +0:? 'gs_fb' ( shared float) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'inF0' (layout( location=0) in 4-component vector of float) 0:? 'inF1' (layout( location=1) in 4-component vector of float) @@ -362,334 +367,337 @@ Linked compute stage: Shader version: 500 local_size = (1, 1, 1) 0:? Sequence -0:17 Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float) -0:17 Function Parameters: -0:17 'inF0' ( in float) -0:17 'inF1' ( in float) -0:17 'inF2' ( in float) -0:17 'inU0' ( in uint) -0:17 'inU1' ( in uint) +0:19 Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float) +0:19 Function Parameters: +0:19 'inF0' ( in float) +0:19 'inF1' ( in float) +0:19 'inF2' ( in float) +0:19 'inU0' ( in uint) +0:19 'inU1' ( in uint) 0:? Sequence -0:21 all ( temp bool) -0:21 Convert float to bool ( temp bool) -0:21 'inF0' ( in float) -0:24 AtomicAdd ( temp uint) -0:24 'gs_ua' ( shared uint) -0:24 'gs_ub' ( shared uint) -0:25 move second child to first child ( temp uint) -0:25 'out_u1' ( temp uint) -0:25 AtomicAdd ( temp uint) -0:25 'gs_ua' ( shared uint) -0:25 'gs_ub' ( shared uint) -0:26 AtomicAnd ( temp uint) +0:23 all ( temp bool) +0:23 Convert float to bool ( temp bool) +0:23 'inF0' ( in float) +0:26 AtomicAdd ( temp uint) 0:26 'gs_ua' ( shared uint) 0:26 'gs_ub' ( shared uint) 0:27 move second child to first child ( temp uint) 0:27 'out_u1' ( temp uint) -0:27 AtomicAnd ( temp uint) +0:27 AtomicAdd ( temp uint) 0:27 'gs_ua' ( shared uint) 0:27 'gs_ub' ( shared uint) -0:28 move second child to first child ( temp uint) -0:28 'out_u1' ( temp uint) -0:28 AtomicCompSwap ( temp uint) -0:28 'gs_ua' ( shared uint) -0:28 'gs_ub' ( shared uint) -0:28 'gs_uc' ( shared uint) +0:28 AtomicAnd ( temp uint) +0:28 'gs_ua' ( shared uint) +0:28 'gs_ub' ( shared uint) 0:29 move second child to first child ( temp uint) 0:29 'out_u1' ( temp uint) -0:29 AtomicExchange ( temp uint) +0:29 AtomicAnd ( temp uint) 0:29 'gs_ua' ( shared uint) 0:29 'gs_ub' ( shared uint) -0:30 AtomicMax ( temp uint) -0:30 'gs_ua' ( shared uint) -0:30 'gs_ub' ( shared uint) +0:30 move second child to first child ( temp uint) +0:30 'out_u1' ( temp uint) +0:30 AtomicCompSwap ( temp uint) +0:30 'gs_ua' ( shared uint) +0:30 'gs_ub' ( shared uint) +0:30 'gs_uc' ( shared uint) 0:31 move second child to first child ( temp uint) 0:31 'out_u1' ( temp uint) -0:31 AtomicMax ( temp uint) +0:31 AtomicExchange ( temp uint) 0:31 'gs_ua' ( shared uint) 0:31 'gs_ub' ( shared uint) -0:32 AtomicMin ( temp uint) +0:32 AtomicMax ( temp uint) 0:32 'gs_ua' ( shared uint) 0:32 'gs_ub' ( shared uint) 0:33 move second child to first child ( temp uint) 0:33 'out_u1' ( temp uint) -0:33 AtomicMin ( temp uint) +0:33 AtomicMax ( temp uint) 0:33 'gs_ua' ( shared uint) 0:33 'gs_ub' ( shared uint) -0:34 AtomicOr ( temp uint) +0:34 AtomicMin ( temp uint) 0:34 'gs_ua' ( shared uint) 0:34 'gs_ub' ( shared uint) 0:35 move second child to first child ( temp uint) 0:35 'out_u1' ( temp uint) -0:35 AtomicOr ( temp uint) +0:35 AtomicMin ( temp uint) 0:35 'gs_ua' ( shared uint) 0:35 'gs_ub' ( shared uint) -0:36 AtomicXor ( temp uint) +0:36 AtomicOr ( temp uint) 0:36 'gs_ua' ( shared uint) 0:36 'gs_ub' ( shared uint) 0:37 move second child to first child ( temp uint) 0:37 'out_u1' ( temp uint) -0:37 AtomicXor ( temp uint) +0:37 AtomicOr ( temp uint) 0:37 'gs_ua' ( shared uint) 0:37 'gs_ub' ( shared uint) -0:41 Branch: Return with expression -0:41 Constant: -0:41 0.000000 -0:45 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float) -0:45 Function Parameters: -0:45 'inF0' ( in 1-component vector of float) -0:45 'inF1' ( in 1-component vector of float) -0:45 'inF2' ( in 1-component vector of float) +0:38 AtomicXor ( temp uint) +0:38 'gs_ua' ( shared uint) +0:38 'gs_ub' ( shared uint) +0:39 move second child to first child ( temp uint) +0:39 'out_u1' ( temp uint) +0:39 AtomicXor ( temp uint) +0:39 'gs_ua' ( shared uint) +0:39 'gs_ub' ( shared uint) +0:41 AtomicAdd ( temp float) +0:41 'gs_fa' ( shared float) +0:41 'gs_fb' ( shared float) +0:45 Branch: Return with expression +0:45 Constant: +0:45 0.000000 +0:49 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float) +0:49 Function Parameters: +0:49 'inF0' ( in 1-component vector of float) +0:49 'inF1' ( in 1-component vector of float) +0:49 'inF2' ( in 1-component vector of float) 0:? Sequence -0:47 Branch: Return with expression -0:47 Constant: -0:47 0.000000 -0:51 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float) -0:51 Function Parameters: -0:51 'inF0' ( in 2-component vector of float) -0:51 'inF1' ( in 2-component vector of float) -0:51 'inF2' ( in 2-component vector of float) -0:51 'inU0' ( in 2-component vector of uint) -0:51 'inU1' ( in 2-component vector of uint) +0:51 Branch: Return with expression +0:51 Constant: +0:51 0.000000 +0:55 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float) +0:55 Function Parameters: +0:55 'inF0' ( in 2-component vector of float) +0:55 'inF1' ( in 2-component vector of float) +0:55 'inF2' ( in 2-component vector of float) +0:55 'inU0' ( in 2-component vector of uint) +0:55 'inU1' ( in 2-component vector of uint) 0:? Sequence -0:55 all ( temp bool) -0:55 Convert float to bool ( temp 2-component vector of bool) -0:55 'inF0' ( in 2-component vector of float) -0:58 AtomicAdd ( temp 2-component vector of uint) -0:58 'gs_ua2' ( shared 2-component vector of uint) -0:58 'gs_ub2' ( shared 2-component vector of uint) -0:59 move second child to first child ( temp 2-component vector of uint) -0:59 'out_u2' ( temp 2-component vector of uint) -0:59 AtomicAdd ( temp 2-component vector of uint) -0:59 'gs_ua2' ( shared 2-component vector of uint) -0:59 'gs_ub2' ( shared 2-component vector of uint) -0:60 AtomicAnd ( temp 2-component vector of uint) -0:60 'gs_ua2' ( shared 2-component vector of uint) -0:60 'gs_ub2' ( shared 2-component vector of uint) -0:61 move second child to first child ( temp 2-component vector of uint) -0:61 'out_u2' ( temp 2-component vector of uint) -0:61 AtomicAnd ( temp 2-component vector of uint) -0:61 'gs_ua2' ( shared 2-component vector of uint) -0:61 'gs_ub2' ( shared 2-component vector of uint) -0:62 move second child to first child ( temp 2-component vector of uint) -0:62 'out_u2' ( temp 2-component vector of uint) -0:62 AtomicCompSwap ( temp 2-component vector of uint) -0:62 'gs_ua2' ( shared 2-component vector of uint) -0:62 'gs_ub2' ( shared 2-component vector of uint) -0:62 'gs_uc2' ( shared 2-component vector of uint) +0:59 all ( temp bool) +0:59 Convert float to bool ( temp 2-component vector of bool) +0:59 'inF0' ( in 2-component vector of float) +0:62 AtomicAdd ( temp 2-component vector of uint) +0:62 'gs_ua2' ( shared 2-component vector of uint) +0:62 'gs_ub2' ( shared 2-component vector of uint) 0:63 move second child to first child ( temp 2-component vector of uint) 0:63 'out_u2' ( temp 2-component vector of uint) -0:63 AtomicExchange ( temp 2-component vector of uint) +0:63 AtomicAdd ( temp 2-component vector of uint) 0:63 'gs_ua2' ( shared 2-component vector of uint) 0:63 'gs_ub2' ( shared 2-component vector of uint) -0:64 AtomicMax ( temp 2-component vector of uint) +0:64 AtomicAnd ( temp 2-component vector of uint) 0:64 'gs_ua2' ( shared 2-component vector of uint) 0:64 'gs_ub2' ( shared 2-component vector of uint) 0:65 move second child to first child ( temp 2-component vector of uint) 0:65 'out_u2' ( temp 2-component vector of uint) -0:65 AtomicMax ( temp 2-component vector of uint) +0:65 AtomicAnd ( temp 2-component vector of uint) 0:65 'gs_ua2' ( shared 2-component vector of uint) 0:65 'gs_ub2' ( shared 2-component vector of uint) -0:66 AtomicMin ( temp 2-component vector of uint) -0:66 'gs_ua2' ( shared 2-component vector of uint) -0:66 'gs_ub2' ( shared 2-component vector of uint) +0:66 move second child to first child ( temp 2-component vector of uint) +0:66 'out_u2' ( temp 2-component vector of uint) +0:66 AtomicCompSwap ( temp 2-component vector of uint) +0:66 'gs_ua2' ( shared 2-component vector of uint) +0:66 'gs_ub2' ( shared 2-component vector of uint) +0:66 'gs_uc2' ( shared 2-component vector of uint) 0:67 move second child to first child ( temp 2-component vector of uint) 0:67 'out_u2' ( temp 2-component vector of uint) -0:67 AtomicMin ( temp 2-component vector of uint) +0:67 AtomicExchange ( temp 2-component vector of uint) 0:67 'gs_ua2' ( shared 2-component vector of uint) 0:67 'gs_ub2' ( shared 2-component vector of uint) -0:68 AtomicOr ( temp 2-component vector of uint) +0:68 AtomicMax ( temp 2-component vector of uint) 0:68 'gs_ua2' ( shared 2-component vector of uint) 0:68 'gs_ub2' ( shared 2-component vector of uint) 0:69 move second child to first child ( temp 2-component vector of uint) 0:69 'out_u2' ( temp 2-component vector of uint) -0:69 AtomicOr ( temp 2-component vector of uint) +0:69 AtomicMax ( temp 2-component vector of uint) 0:69 'gs_ua2' ( shared 2-component vector of uint) 0:69 'gs_ub2' ( shared 2-component vector of uint) -0:70 AtomicXor ( temp 2-component vector of uint) +0:70 AtomicMin ( temp 2-component vector of uint) 0:70 'gs_ua2' ( shared 2-component vector of uint) 0:70 'gs_ub2' ( shared 2-component vector of uint) 0:71 move second child to first child ( temp 2-component vector of uint) 0:71 'out_u2' ( temp 2-component vector of uint) -0:71 AtomicXor ( temp 2-component vector of uint) +0:71 AtomicMin ( temp 2-component vector of uint) 0:71 'gs_ua2' ( shared 2-component vector of uint) 0:71 'gs_ub2' ( shared 2-component vector of uint) -0:74 Branch: Return with expression -0:74 Constant: -0:74 1.000000 -0:74 2.000000 -0:78 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) -0:78 Function Parameters: -0:78 'inF0' ( in 3-component vector of float) -0:78 'inF1' ( in 3-component vector of float) -0:78 'inF2' ( in 3-component vector of float) -0:78 'inU0' ( in 3-component vector of uint) -0:78 'inU1' ( in 3-component vector of uint) +0:72 AtomicOr ( temp 2-component vector of uint) +0:72 'gs_ua2' ( shared 2-component vector of uint) +0:72 'gs_ub2' ( shared 2-component vector of uint) +0:73 move second child to first child ( temp 2-component vector of uint) +0:73 'out_u2' ( temp 2-component vector of uint) +0:73 AtomicOr ( temp 2-component vector of uint) +0:73 'gs_ua2' ( shared 2-component vector of uint) +0:73 'gs_ub2' ( shared 2-component vector of uint) +0:74 AtomicXor ( temp 2-component vector of uint) +0:74 'gs_ua2' ( shared 2-component vector of uint) +0:74 'gs_ub2' ( shared 2-component vector of uint) +0:75 move second child to first child ( temp 2-component vector of uint) +0:75 'out_u2' ( temp 2-component vector of uint) +0:75 AtomicXor ( temp 2-component vector of uint) +0:75 'gs_ua2' ( shared 2-component vector of uint) +0:75 'gs_ub2' ( shared 2-component vector of uint) +0:78 Branch: Return with expression +0:78 Constant: +0:78 1.000000 +0:78 2.000000 +0:82 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) +0:82 Function Parameters: +0:82 'inF0' ( in 3-component vector of float) +0:82 'inF1' ( in 3-component vector of float) +0:82 'inF2' ( in 3-component vector of float) +0:82 'inU0' ( in 3-component vector of uint) +0:82 'inU1' ( in 3-component vector of uint) 0:? Sequence -0:82 all ( temp bool) -0:82 Convert float to bool ( temp 3-component vector of bool) -0:82 'inF0' ( in 3-component vector of float) -0:85 AtomicAdd ( temp 3-component vector of uint) -0:85 'gs_ua3' ( shared 3-component vector of uint) -0:85 'gs_ub3' ( shared 3-component vector of uint) -0:86 move second child to first child ( temp 3-component vector of uint) -0:86 'out_u3' ( temp 3-component vector of uint) -0:86 AtomicAdd ( temp 3-component vector of uint) -0:86 'gs_ua3' ( shared 3-component vector of uint) -0:86 'gs_ub3' ( shared 3-component vector of uint) -0:87 AtomicAnd ( temp 3-component vector of uint) -0:87 'gs_ua3' ( shared 3-component vector of uint) -0:87 'gs_ub3' ( shared 3-component vector of uint) -0:88 move second child to first child ( temp 3-component vector of uint) -0:88 'out_u3' ( temp 3-component vector of uint) -0:88 AtomicAnd ( temp 3-component vector of uint) -0:88 'gs_ua3' ( shared 3-component vector of uint) -0:88 'gs_ub3' ( shared 3-component vector of uint) -0:89 move second child to first child ( temp 3-component vector of uint) -0:89 'out_u3' ( temp 3-component vector of uint) -0:89 AtomicCompSwap ( temp 3-component vector of uint) -0:89 'gs_ua3' ( shared 3-component vector of uint) -0:89 'gs_ub3' ( shared 3-component vector of uint) -0:89 'gs_uc3' ( shared 3-component vector of uint) +0:86 all ( temp bool) +0:86 Convert float to bool ( temp 3-component vector of bool) +0:86 'inF0' ( in 3-component vector of float) +0:89 AtomicAdd ( temp 3-component vector of uint) +0:89 'gs_ua3' ( shared 3-component vector of uint) +0:89 'gs_ub3' ( shared 3-component vector of uint) 0:90 move second child to first child ( temp 3-component vector of uint) 0:90 'out_u3' ( temp 3-component vector of uint) -0:90 AtomicExchange ( temp 3-component vector of uint) +0:90 AtomicAdd ( temp 3-component vector of uint) 0:90 'gs_ua3' ( shared 3-component vector of uint) 0:90 'gs_ub3' ( shared 3-component vector of uint) -0:91 AtomicMax ( temp 3-component vector of uint) +0:91 AtomicAnd ( temp 3-component vector of uint) 0:91 'gs_ua3' ( shared 3-component vector of uint) 0:91 'gs_ub3' ( shared 3-component vector of uint) 0:92 move second child to first child ( temp 3-component vector of uint) 0:92 'out_u3' ( temp 3-component vector of uint) -0:92 AtomicMax ( temp 3-component vector of uint) +0:92 AtomicAnd ( temp 3-component vector of uint) 0:92 'gs_ua3' ( shared 3-component vector of uint) 0:92 'gs_ub3' ( shared 3-component vector of uint) -0:93 AtomicMin ( temp 3-component vector of uint) -0:93 'gs_ua3' ( shared 3-component vector of uint) -0:93 'gs_ub3' ( shared 3-component vector of uint) +0:93 move second child to first child ( temp 3-component vector of uint) +0:93 'out_u3' ( temp 3-component vector of uint) +0:93 AtomicCompSwap ( temp 3-component vector of uint) +0:93 'gs_ua3' ( shared 3-component vector of uint) +0:93 'gs_ub3' ( shared 3-component vector of uint) +0:93 'gs_uc3' ( shared 3-component vector of uint) 0:94 move second child to first child ( temp 3-component vector of uint) 0:94 'out_u3' ( temp 3-component vector of uint) -0:94 AtomicMin ( temp 3-component vector of uint) +0:94 AtomicExchange ( temp 3-component vector of uint) 0:94 'gs_ua3' ( shared 3-component vector of uint) 0:94 'gs_ub3' ( shared 3-component vector of uint) -0:95 AtomicOr ( temp 3-component vector of uint) +0:95 AtomicMax ( temp 3-component vector of uint) 0:95 'gs_ua3' ( shared 3-component vector of uint) 0:95 'gs_ub3' ( shared 3-component vector of uint) 0:96 move second child to first child ( temp 3-component vector of uint) 0:96 'out_u3' ( temp 3-component vector of uint) -0:96 AtomicOr ( temp 3-component vector of uint) +0:96 AtomicMax ( temp 3-component vector of uint) 0:96 'gs_ua3' ( shared 3-component vector of uint) 0:96 'gs_ub3' ( shared 3-component vector of uint) -0:97 AtomicXor ( temp 3-component vector of uint) +0:97 AtomicMin ( temp 3-component vector of uint) 0:97 'gs_ua3' ( shared 3-component vector of uint) 0:97 'gs_ub3' ( shared 3-component vector of uint) 0:98 move second child to first child ( temp 3-component vector of uint) 0:98 'out_u3' ( temp 3-component vector of uint) -0:98 AtomicXor ( temp 3-component vector of uint) +0:98 AtomicMin ( temp 3-component vector of uint) 0:98 'gs_ua3' ( shared 3-component vector of uint) 0:98 'gs_ub3' ( shared 3-component vector of uint) -0:101 Branch: Return with expression -0:101 Constant: -0:101 1.000000 -0:101 2.000000 -0:101 3.000000 -0:105 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) -0:105 Function Parameters: -0:105 'inF0' ( in 4-component vector of float) -0:105 'inF1' ( in 4-component vector of float) -0:105 'inF2' ( in 4-component vector of float) -0:105 'inU0' ( in 4-component vector of uint) -0:105 'inU1' ( in 4-component vector of uint) +0:99 AtomicOr ( temp 3-component vector of uint) +0:99 'gs_ua3' ( shared 3-component vector of uint) +0:99 'gs_ub3' ( shared 3-component vector of uint) +0:100 move second child to first child ( temp 3-component vector of uint) +0:100 'out_u3' ( temp 3-component vector of uint) +0:100 AtomicOr ( temp 3-component vector of uint) +0:100 'gs_ua3' ( shared 3-component vector of uint) +0:100 'gs_ub3' ( shared 3-component vector of uint) +0:101 AtomicXor ( temp 3-component vector of uint) +0:101 'gs_ua3' ( shared 3-component vector of uint) +0:101 'gs_ub3' ( shared 3-component vector of uint) +0:102 move second child to first child ( temp 3-component vector of uint) +0:102 'out_u3' ( temp 3-component vector of uint) +0:102 AtomicXor ( temp 3-component vector of uint) +0:102 'gs_ua3' ( shared 3-component vector of uint) +0:102 'gs_ub3' ( shared 3-component vector of uint) +0:105 Branch: Return with expression +0:105 Constant: +0:105 1.000000 +0:105 2.000000 +0:105 3.000000 +0:109 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) +0:109 Function Parameters: +0:109 'inF0' ( in 4-component vector of float) +0:109 'inF1' ( in 4-component vector of float) +0:109 'inF2' ( in 4-component vector of float) +0:109 'inU0' ( in 4-component vector of uint) +0:109 'inU1' ( in 4-component vector of uint) 0:? Sequence -0:109 all ( temp bool) -0:109 Convert float to bool ( temp 4-component vector of bool) -0:109 'inF0' ( in 4-component vector of float) -0:112 AtomicAdd ( temp 4-component vector of uint) -0:112 'gs_ua4' ( shared 4-component vector of uint) -0:112 'gs_ub4' ( shared 4-component vector of uint) -0:113 move second child to first child ( temp 4-component vector of uint) -0:113 'out_u4' ( temp 4-component vector of uint) -0:113 AtomicAdd ( temp 4-component vector of uint) -0:113 'gs_ua4' ( shared 4-component vector of uint) -0:113 'gs_ub4' ( shared 4-component vector of uint) -0:114 AtomicAnd ( temp 4-component vector of uint) -0:114 'gs_ua4' ( shared 4-component vector of uint) -0:114 'gs_ub4' ( shared 4-component vector of uint) -0:115 move second child to first child ( temp 4-component vector of uint) -0:115 'out_u4' ( temp 4-component vector of uint) -0:115 AtomicAnd ( temp 4-component vector of uint) -0:115 'gs_ua4' ( shared 4-component vector of uint) -0:115 'gs_ub4' ( shared 4-component vector of uint) -0:116 move second child to first child ( temp 4-component vector of uint) -0:116 'out_u4' ( temp 4-component vector of uint) -0:116 AtomicCompSwap ( temp 4-component vector of uint) -0:116 'gs_ua4' ( shared 4-component vector of uint) -0:116 'gs_ub4' ( shared 4-component vector of uint) -0:116 'gs_uc4' ( shared 4-component vector of uint) +0:113 all ( temp bool) +0:113 Convert float to bool ( temp 4-component vector of bool) +0:113 'inF0' ( in 4-component vector of float) +0:116 AtomicAdd ( temp 4-component vector of uint) +0:116 'gs_ua4' ( shared 4-component vector of uint) +0:116 'gs_ub4' ( shared 4-component vector of uint) 0:117 move second child to first child ( temp 4-component vector of uint) 0:117 'out_u4' ( temp 4-component vector of uint) -0:117 AtomicExchange ( temp 4-component vector of uint) +0:117 AtomicAdd ( temp 4-component vector of uint) 0:117 'gs_ua4' ( shared 4-component vector of uint) 0:117 'gs_ub4' ( shared 4-component vector of uint) -0:118 AtomicMax ( temp 4-component vector of uint) +0:118 AtomicAnd ( temp 4-component vector of uint) 0:118 'gs_ua4' ( shared 4-component vector of uint) 0:118 'gs_ub4' ( shared 4-component vector of uint) 0:119 move second child to first child ( temp 4-component vector of uint) 0:119 'out_u4' ( temp 4-component vector of uint) -0:119 AtomicMax ( temp 4-component vector of uint) +0:119 AtomicAnd ( temp 4-component vector of uint) 0:119 'gs_ua4' ( shared 4-component vector of uint) 0:119 'gs_ub4' ( shared 4-component vector of uint) -0:120 AtomicMin ( temp 4-component vector of uint) -0:120 'gs_ua4' ( shared 4-component vector of uint) -0:120 'gs_ub4' ( shared 4-component vector of uint) +0:120 move second child to first child ( temp 4-component vector of uint) +0:120 'out_u4' ( temp 4-component vector of uint) +0:120 AtomicCompSwap ( temp 4-component vector of uint) +0:120 'gs_ua4' ( shared 4-component vector of uint) +0:120 'gs_ub4' ( shared 4-component vector of uint) +0:120 'gs_uc4' ( shared 4-component vector of uint) 0:121 move second child to first child ( temp 4-component vector of uint) 0:121 'out_u4' ( temp 4-component vector of uint) -0:121 AtomicMin ( temp 4-component vector of uint) +0:121 AtomicExchange ( temp 4-component vector of uint) 0:121 'gs_ua4' ( shared 4-component vector of uint) 0:121 'gs_ub4' ( shared 4-component vector of uint) -0:122 AtomicOr ( temp 4-component vector of uint) +0:122 AtomicMax ( temp 4-component vector of uint) 0:122 'gs_ua4' ( shared 4-component vector of uint) 0:122 'gs_ub4' ( shared 4-component vector of uint) 0:123 move second child to first child ( temp 4-component vector of uint) 0:123 'out_u4' ( temp 4-component vector of uint) -0:123 AtomicOr ( temp 4-component vector of uint) +0:123 AtomicMax ( temp 4-component vector of uint) 0:123 'gs_ua4' ( shared 4-component vector of uint) 0:123 'gs_ub4' ( shared 4-component vector of uint) -0:124 AtomicXor ( temp 4-component vector of uint) +0:124 AtomicMin ( temp 4-component vector of uint) 0:124 'gs_ua4' ( shared 4-component vector of uint) 0:124 'gs_ub4' ( shared 4-component vector of uint) 0:125 move second child to first child ( temp 4-component vector of uint) 0:125 'out_u4' ( temp 4-component vector of uint) -0:125 AtomicXor ( temp 4-component vector of uint) +0:125 AtomicMin ( temp 4-component vector of uint) 0:125 'gs_ua4' ( shared 4-component vector of uint) 0:125 'gs_ub4' ( shared 4-component vector of uint) -0:128 Branch: Return with expression -0:128 Constant: -0:128 1.000000 -0:128 2.000000 -0:128 3.000000 -0:128 4.000000 -0:105 Function Definition: ComputeShaderFunction( ( temp void) -0:105 Function Parameters: +0:126 AtomicOr ( temp 4-component vector of uint) +0:126 'gs_ua4' ( shared 4-component vector of uint) +0:126 'gs_ub4' ( shared 4-component vector of uint) +0:127 move second child to first child ( temp 4-component vector of uint) +0:127 'out_u4' ( temp 4-component vector of uint) +0:127 AtomicOr ( temp 4-component vector of uint) +0:127 'gs_ua4' ( shared 4-component vector of uint) +0:127 'gs_ub4' ( shared 4-component vector of uint) +0:128 AtomicXor ( temp 4-component vector of uint) +0:128 'gs_ua4' ( shared 4-component vector of uint) +0:128 'gs_ub4' ( shared 4-component vector of uint) +0:129 move second child to first child ( temp 4-component vector of uint) +0:129 'out_u4' ( temp 4-component vector of uint) +0:129 AtomicXor ( temp 4-component vector of uint) +0:129 'gs_ua4' ( shared 4-component vector of uint) +0:129 'gs_ub4' ( shared 4-component vector of uint) +0:132 Branch: Return with expression +0:132 Constant: +0:132 1.000000 +0:132 2.000000 +0:132 3.000000 +0:132 4.000000 +0:109 Function Definition: ComputeShaderFunction( ( temp void) +0:109 Function Parameters: 0:? Sequence -0:105 move second child to first child ( temp 4-component vector of float) +0:109 move second child to first child ( temp 4-component vector of float) 0:? 'inF0' ( temp 4-component vector of float) 0:? 'inF0' (layout( location=0) in 4-component vector of float) -0:105 move second child to first child ( temp 4-component vector of float) +0:109 move second child to first child ( temp 4-component vector of float) 0:? 'inF1' ( temp 4-component vector of float) 0:? 'inF1' (layout( location=1) in 4-component vector of float) -0:105 move second child to first child ( temp 4-component vector of float) +0:109 move second child to first child ( temp 4-component vector of float) 0:? 'inF2' ( temp 4-component vector of float) 0:? 'inF2' (layout( location=2) in 4-component vector of float) -0:105 move second child to first child ( temp 4-component vector of uint) +0:109 move second child to first child ( temp 4-component vector of uint) 0:? 'inU0' ( temp 4-component vector of uint) 0:? 'inU0' (layout( location=3) in 4-component vector of uint) -0:105 move second child to first child ( temp 4-component vector of uint) +0:109 move second child to first child ( temp 4-component vector of uint) 0:? 'inU1' ( temp 4-component vector of uint) 0:? 'inU1' (layout( location=4) in 4-component vector of uint) -0:105 move second child to first child ( temp 4-component vector of float) +0:109 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -0:105 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) +0:109 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) 0:? 'inF0' ( temp 4-component vector of float) 0:? 'inF1' ( temp 4-component vector of float) 0:? 'inF2' ( temp 4-component vector of float) @@ -708,6 +716,8 @@ local_size = (1, 1, 1) 0:? 'gs_ua4' ( shared 4-component vector of uint) 0:? 'gs_ub4' ( shared 4-component vector of uint) 0:? 'gs_uc4' ( shared 4-component vector of uint) +0:? 'gs_fa' ( shared float) +0:? 'gs_fb' ( shared float) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'inF0' (layout( location=0) in 4-component vector of float) 0:? 'inF1' (layout( location=1) in 4-component vector of float) @@ -717,13 +727,15 @@ local_size = (1, 1, 1) Validation failed // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 265 +// Generated by (magic number): 8000b +// Id's are bound by 270 Capability Shader + Capability AtomicFloat32AddEXT + Extension "SPV_EXT_shader_atomic_float_add" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "ComputeShaderFunction" 237 240 243 247 250 253 + EntryPoint GLCompute 4 "ComputeShaderFunction" 242 245 248 252 255 258 ExecutionMode 4 LocalSize 1 1 1 Source HLSL 500 Name 4 "ComputeShaderFunction" @@ -759,40 +771,42 @@ Validation failed Name 67 "gs_ub" Name 72 "out_u1" Name 80 "gs_uc" - Name 111 "gs_ua2" - Name 112 "gs_ub2" - Name 115 "out_u2" - Name 123 "gs_uc2" - Name 155 "gs_ua3" - Name 156 "gs_ub3" - Name 159 "out_u3" - Name 167 "gs_uc3" - Name 198 "gs_ua4" - Name 199 "gs_ub4" - Name 202 "out_u4" - Name 210 "gs_uc4" - Name 235 "inF0" - Name 237 "inF0" - Name 239 "inF1" - Name 240 "inF1" - Name 242 "inF2" - Name 243 "inF2" - Name 245 "inU0" - Name 247 "inU0" - Name 249 "inU1" - Name 250 "inU1" - Name 253 "@entryPointOutput" - Name 254 "param" - Name 256 "param" - Name 258 "param" - Name 260 "param" - Name 262 "param" - Decorate 237(inF0) Location 0 - Decorate 240(inF1) Location 1 - Decorate 243(inF2) Location 2 - Decorate 247(inU0) Location 3 - Decorate 250(inU1) Location 4 - Decorate 253(@entryPointOutput) Location 0 + Name 102 "gs_fa" + Name 103 "gs_fb" + Name 116 "gs_ua2" + Name 117 "gs_ub2" + Name 120 "out_u2" + Name 128 "gs_uc2" + Name 160 "gs_ua3" + Name 161 "gs_ub3" + Name 164 "out_u3" + Name 172 "gs_uc3" + Name 203 "gs_ua4" + Name 204 "gs_ub4" + Name 207 "out_u4" + Name 215 "gs_uc4" + Name 240 "inF0" + Name 242 "inF0" + Name 244 "inF1" + Name 245 "inF1" + Name 247 "inF2" + Name 248 "inF2" + Name 250 "inU0" + Name 252 "inU0" + Name 254 "inU1" + Name 255 "inU1" + Name 258 "@entryPointOutput" + Name 259 "param" + Name 261 "param" + Name 263 "param" + Name 265 "param" + Name 267 "param" + Decorate 242(inF0) Location 0 + Decorate 245(inF1) Location 1 + Decorate 248(inF2) Location 2 + Decorate 252(inU0) Location 3 + Decorate 255(inU1) Location 4 + Decorate 258(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -824,74 +838,77 @@ Validation failed 69: 8(int) Constant 1 70: 8(int) Constant 0 80(gs_uc): 65(ptr) Variable Workgroup - 106: TypeVector 61(bool) 2 - 107: 24(fvec2) ConstantComposite 62 62 - 110: TypePointer Workgroup 26(ivec2) - 111(gs_ua2): 110(ptr) Variable Workgroup - 112(gs_ub2): 110(ptr) Variable Workgroup - 123(gs_uc2): 110(ptr) Variable Workgroup - 144: 6(float) Constant 1065353216 - 145: 6(float) Constant 1073741824 - 146: 24(fvec2) ConstantComposite 144 145 - 150: TypeVector 61(bool) 3 - 151: 36(fvec3) ConstantComposite 62 62 62 - 154: TypePointer Workgroup 38(ivec3) - 155(gs_ua3): 154(ptr) Variable Workgroup - 156(gs_ub3): 154(ptr) Variable Workgroup - 167(gs_uc3): 154(ptr) Variable Workgroup - 188: 6(float) Constant 1077936128 - 189: 36(fvec3) ConstantComposite 144 145 188 - 193: TypeVector 61(bool) 4 - 194: 48(fvec4) ConstantComposite 62 62 62 62 - 197: TypePointer Workgroup 50(ivec4) - 198(gs_ua4): 197(ptr) Variable Workgroup - 199(gs_ub4): 197(ptr) Variable Workgroup - 210(gs_uc4): 197(ptr) Variable Workgroup - 231: 6(float) Constant 1082130432 - 232: 48(fvec4) ConstantComposite 144 145 188 231 - 236: TypePointer Input 48(fvec4) - 237(inF0): 236(ptr) Variable Input - 240(inF1): 236(ptr) Variable Input - 243(inF2): 236(ptr) Variable Input - 246: TypePointer Input 50(ivec4) - 247(inU0): 246(ptr) Variable Input - 250(inU1): 246(ptr) Variable Input - 252: TypePointer Output 48(fvec4) -253(@entryPointOutput): 252(ptr) Variable Output + 101: TypePointer Workgroup 6(float) + 102(gs_fa): 101(ptr) Variable Workgroup + 103(gs_fb): 101(ptr) Variable Workgroup + 111: TypeVector 61(bool) 2 + 112: 24(fvec2) ConstantComposite 62 62 + 115: TypePointer Workgroup 26(ivec2) + 116(gs_ua2): 115(ptr) Variable Workgroup + 117(gs_ub2): 115(ptr) Variable Workgroup + 128(gs_uc2): 115(ptr) Variable Workgroup + 149: 6(float) Constant 1065353216 + 150: 6(float) Constant 1073741824 + 151: 24(fvec2) ConstantComposite 149 150 + 155: TypeVector 61(bool) 3 + 156: 36(fvec3) ConstantComposite 62 62 62 + 159: TypePointer Workgroup 38(ivec3) + 160(gs_ua3): 159(ptr) Variable Workgroup + 161(gs_ub3): 159(ptr) Variable Workgroup + 172(gs_uc3): 159(ptr) Variable Workgroup + 193: 6(float) Constant 1077936128 + 194: 36(fvec3) ConstantComposite 149 150 193 + 198: TypeVector 61(bool) 4 + 199: 48(fvec4) ConstantComposite 62 62 62 62 + 202: TypePointer Workgroup 50(ivec4) + 203(gs_ua4): 202(ptr) Variable Workgroup + 204(gs_ub4): 202(ptr) Variable Workgroup + 215(gs_uc4): 202(ptr) Variable Workgroup + 236: 6(float) Constant 1082130432 + 237: 48(fvec4) ConstantComposite 149 150 193 236 + 241: TypePointer Input 48(fvec4) + 242(inF0): 241(ptr) Variable Input + 245(inF1): 241(ptr) Variable Input + 248(inF2): 241(ptr) Variable Input + 251: TypePointer Input 50(ivec4) + 252(inU0): 251(ptr) Variable Input + 255(inU1): 251(ptr) Variable Input + 257: TypePointer Output 48(fvec4) +258(@entryPointOutput): 257(ptr) Variable Output 4(ComputeShaderFunction): 2 Function None 3 5: Label - 235(inF0): 49(ptr) Variable Function - 239(inF1): 49(ptr) Variable Function - 242(inF2): 49(ptr) Variable Function - 245(inU0): 51(ptr) Variable Function - 249(inU1): 51(ptr) Variable Function - 254(param): 49(ptr) Variable Function - 256(param): 49(ptr) Variable Function - 258(param): 49(ptr) Variable Function - 260(param): 51(ptr) Variable Function - 262(param): 51(ptr) Variable Function - 238: 48(fvec4) Load 237(inF0) - Store 235(inF0) 238 - 241: 48(fvec4) Load 240(inF1) - Store 239(inF1) 241 - 244: 48(fvec4) Load 243(inF2) - Store 242(inF2) 244 - 248: 50(ivec4) Load 247(inU0) - Store 245(inU0) 248 - 251: 50(ivec4) Load 250(inU1) - Store 249(inU1) 251 - 255: 48(fvec4) Load 235(inF0) - Store 254(param) 255 - 257: 48(fvec4) Load 239(inF1) - Store 256(param) 257 - 259: 48(fvec4) Load 242(inF2) - Store 258(param) 259 - 261: 50(ivec4) Load 245(inU0) - Store 260(param) 261 - 263: 50(ivec4) Load 249(inU1) - Store 262(param) 263 - 264: 48(fvec4) FunctionCall 58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;) 254(param) 256(param) 258(param) 260(param) 262(param) - Store 253(@entryPointOutput) 264 + 240(inF0): 49(ptr) Variable Function + 244(inF1): 49(ptr) Variable Function + 247(inF2): 49(ptr) Variable Function + 250(inU0): 51(ptr) Variable Function + 254(inU1): 51(ptr) Variable Function + 259(param): 49(ptr) Variable Function + 261(param): 49(ptr) Variable Function + 263(param): 49(ptr) Variable Function + 265(param): 51(ptr) Variable Function + 267(param): 51(ptr) Variable Function + 243: 48(fvec4) Load 242(inF0) + Store 240(inF0) 243 + 246: 48(fvec4) Load 245(inF1) + Store 244(inF1) 246 + 249: 48(fvec4) Load 248(inF2) + Store 247(inF2) 249 + 253: 50(ivec4) Load 252(inU0) + Store 250(inU0) 253 + 256: 50(ivec4) Load 255(inU1) + Store 254(inU1) 256 + 260: 48(fvec4) Load 240(inF0) + Store 259(param) 260 + 262: 48(fvec4) Load 244(inF1) + Store 261(param) 262 + 264: 48(fvec4) Load 247(inF2) + Store 263(param) 264 + 266: 50(ivec4) Load 250(inU0) + Store 265(param) 266 + 268: 50(ivec4) Load 254(inU1) + Store 267(param) 268 + 269: 48(fvec4) FunctionCall 58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;) 259(param) 261(param) 263(param) 265(param) 267(param) + Store 258(@entryPointOutput) 269 Return FunctionEnd 16(ComputeShaderFunctionS(f1;f1;f1;u1;u1;): 6(float) Function None 10 @@ -942,6 +959,8 @@ Validation failed 99: 8(int) Load 67(gs_ub) 100: 8(int) AtomicXor 66(gs_ua) 69 70 99 Store 72(out_u1) 100 + 104: 6(float) Load 103(gs_fb) + 105: 6(float) AtomicFAddEXT 102(gs_fa) 69 70 104 ReturnValue 62 FunctionEnd 22(ComputeShaderFunction1(vf1;vf1;vf1;): 6(float) Function None 18 @@ -958,48 +977,48 @@ Validation failed 32(inU0): 27(ptr) FunctionParameter 33(inU1): 27(ptr) FunctionParameter 35: Label - 115(out_u2): 27(ptr) Variable Function - 105: 24(fvec2) Load 29(inF0) - 108: 106(bvec2) FUnordNotEqual 105 107 - 109: 61(bool) All 108 - 113: 26(ivec2) Load 112(gs_ub2) - 114: 26(ivec2) AtomicIAdd 111(gs_ua2) 69 70 113 - 116: 26(ivec2) Load 112(gs_ub2) - 117: 26(ivec2) AtomicIAdd 111(gs_ua2) 69 70 116 - Store 115(out_u2) 117 - 118: 26(ivec2) Load 112(gs_ub2) - 119: 26(ivec2) AtomicAnd 111(gs_ua2) 69 70 118 - 120: 26(ivec2) Load 112(gs_ub2) - 121: 26(ivec2) AtomicAnd 111(gs_ua2) 69 70 120 - Store 115(out_u2) 121 - 122: 26(ivec2) Load 112(gs_ub2) - 124: 26(ivec2) Load 123(gs_uc2) - 125: 26(ivec2) AtomicCompareExchange 111(gs_ua2) 69 70 70 124 122 - Store 115(out_u2) 125 - 126: 26(ivec2) Load 112(gs_ub2) - 127: 26(ivec2) AtomicExchange 111(gs_ua2) 69 70 126 - Store 115(out_u2) 127 - 128: 26(ivec2) Load 112(gs_ub2) - 129: 26(ivec2) AtomicUMax 111(gs_ua2) 69 70 128 - 130: 26(ivec2) Load 112(gs_ub2) - 131: 26(ivec2) AtomicUMax 111(gs_ua2) 69 70 130 - Store 115(out_u2) 131 - 132: 26(ivec2) Load 112(gs_ub2) - 133: 26(ivec2) AtomicUMin 111(gs_ua2) 69 70 132 - 134: 26(ivec2) Load 112(gs_ub2) - 135: 26(ivec2) AtomicUMin 111(gs_ua2) 69 70 134 - Store 115(out_u2) 135 - 136: 26(ivec2) Load 112(gs_ub2) - 137: 26(ivec2) AtomicOr 111(gs_ua2) 69 70 136 - 138: 26(ivec2) Load 112(gs_ub2) - 139: 26(ivec2) AtomicOr 111(gs_ua2) 69 70 138 - Store 115(out_u2) 139 - 140: 26(ivec2) Load 112(gs_ub2) - 141: 26(ivec2) AtomicXor 111(gs_ua2) 69 70 140 - 142: 26(ivec2) Load 112(gs_ub2) - 143: 26(ivec2) AtomicXor 111(gs_ua2) 69 70 142 - Store 115(out_u2) 143 - ReturnValue 146 + 120(out_u2): 27(ptr) Variable Function + 110: 24(fvec2) Load 29(inF0) + 113: 111(bvec2) FUnordNotEqual 110 112 + 114: 61(bool) All 113 + 118: 26(ivec2) Load 117(gs_ub2) + 119: 26(ivec2) AtomicIAdd 116(gs_ua2) 69 70 118 + 121: 26(ivec2) Load 117(gs_ub2) + 122: 26(ivec2) AtomicIAdd 116(gs_ua2) 69 70 121 + Store 120(out_u2) 122 + 123: 26(ivec2) Load 117(gs_ub2) + 124: 26(ivec2) AtomicAnd 116(gs_ua2) 69 70 123 + 125: 26(ivec2) Load 117(gs_ub2) + 126: 26(ivec2) AtomicAnd 116(gs_ua2) 69 70 125 + Store 120(out_u2) 126 + 127: 26(ivec2) Load 117(gs_ub2) + 129: 26(ivec2) Load 128(gs_uc2) + 130: 26(ivec2) AtomicCompareExchange 116(gs_ua2) 69 70 70 129 127 + Store 120(out_u2) 130 + 131: 26(ivec2) Load 117(gs_ub2) + 132: 26(ivec2) AtomicExchange 116(gs_ua2) 69 70 131 + Store 120(out_u2) 132 + 133: 26(ivec2) Load 117(gs_ub2) + 134: 26(ivec2) AtomicUMax 116(gs_ua2) 69 70 133 + 135: 26(ivec2) Load 117(gs_ub2) + 136: 26(ivec2) AtomicUMax 116(gs_ua2) 69 70 135 + Store 120(out_u2) 136 + 137: 26(ivec2) Load 117(gs_ub2) + 138: 26(ivec2) AtomicUMin 116(gs_ua2) 69 70 137 + 139: 26(ivec2) Load 117(gs_ub2) + 140: 26(ivec2) AtomicUMin 116(gs_ua2) 69 70 139 + Store 120(out_u2) 140 + 141: 26(ivec2) Load 117(gs_ub2) + 142: 26(ivec2) AtomicOr 116(gs_ua2) 69 70 141 + 143: 26(ivec2) Load 117(gs_ub2) + 144: 26(ivec2) AtomicOr 116(gs_ua2) 69 70 143 + Store 120(out_u2) 144 + 145: 26(ivec2) Load 117(gs_ub2) + 146: 26(ivec2) AtomicXor 116(gs_ua2) 69 70 145 + 147: 26(ivec2) Load 117(gs_ub2) + 148: 26(ivec2) AtomicXor 116(gs_ua2) 69 70 147 + Store 120(out_u2) 148 + ReturnValue 151 FunctionEnd 46(ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3;): 36(fvec3) Function None 40 41(inF0): 37(ptr) FunctionParameter @@ -1008,48 +1027,48 @@ Validation failed 44(inU0): 39(ptr) FunctionParameter 45(inU1): 39(ptr) FunctionParameter 47: Label - 159(out_u3): 39(ptr) Variable Function - 149: 36(fvec3) Load 41(inF0) - 152: 150(bvec3) FUnordNotEqual 149 151 - 153: 61(bool) All 152 - 157: 38(ivec3) Load 156(gs_ub3) - 158: 38(ivec3) AtomicIAdd 155(gs_ua3) 69 70 157 - 160: 38(ivec3) Load 156(gs_ub3) - 161: 38(ivec3) AtomicIAdd 155(gs_ua3) 69 70 160 - Store 159(out_u3) 161 - 162: 38(ivec3) Load 156(gs_ub3) - 163: 38(ivec3) AtomicAnd 155(gs_ua3) 69 70 162 - 164: 38(ivec3) Load 156(gs_ub3) - 165: 38(ivec3) AtomicAnd 155(gs_ua3) 69 70 164 - Store 159(out_u3) 165 - 166: 38(ivec3) Load 156(gs_ub3) - 168: 38(ivec3) Load 167(gs_uc3) - 169: 38(ivec3) AtomicCompareExchange 155(gs_ua3) 69 70 70 168 166 - Store 159(out_u3) 169 - 170: 38(ivec3) Load 156(gs_ub3) - 171: 38(ivec3) AtomicExchange 155(gs_ua3) 69 70 170 - Store 159(out_u3) 171 - 172: 38(ivec3) Load 156(gs_ub3) - 173: 38(ivec3) AtomicUMax 155(gs_ua3) 69 70 172 - 174: 38(ivec3) Load 156(gs_ub3) - 175: 38(ivec3) AtomicUMax 155(gs_ua3) 69 70 174 - Store 159(out_u3) 175 - 176: 38(ivec3) Load 156(gs_ub3) - 177: 38(ivec3) AtomicUMin 155(gs_ua3) 69 70 176 - 178: 38(ivec3) Load 156(gs_ub3) - 179: 38(ivec3) AtomicUMin 155(gs_ua3) 69 70 178 - Store 159(out_u3) 179 - 180: 38(ivec3) Load 156(gs_ub3) - 181: 38(ivec3) AtomicOr 155(gs_ua3) 69 70 180 - 182: 38(ivec3) Load 156(gs_ub3) - 183: 38(ivec3) AtomicOr 155(gs_ua3) 69 70 182 - Store 159(out_u3) 183 - 184: 38(ivec3) Load 156(gs_ub3) - 185: 38(ivec3) AtomicXor 155(gs_ua3) 69 70 184 - 186: 38(ivec3) Load 156(gs_ub3) - 187: 38(ivec3) AtomicXor 155(gs_ua3) 69 70 186 - Store 159(out_u3) 187 - ReturnValue 189 + 164(out_u3): 39(ptr) Variable Function + 154: 36(fvec3) Load 41(inF0) + 157: 155(bvec3) FUnordNotEqual 154 156 + 158: 61(bool) All 157 + 162: 38(ivec3) Load 161(gs_ub3) + 163: 38(ivec3) AtomicIAdd 160(gs_ua3) 69 70 162 + 165: 38(ivec3) Load 161(gs_ub3) + 166: 38(ivec3) AtomicIAdd 160(gs_ua3) 69 70 165 + Store 164(out_u3) 166 + 167: 38(ivec3) Load 161(gs_ub3) + 168: 38(ivec3) AtomicAnd 160(gs_ua3) 69 70 167 + 169: 38(ivec3) Load 161(gs_ub3) + 170: 38(ivec3) AtomicAnd 160(gs_ua3) 69 70 169 + Store 164(out_u3) 170 + 171: 38(ivec3) Load 161(gs_ub3) + 173: 38(ivec3) Load 172(gs_uc3) + 174: 38(ivec3) AtomicCompareExchange 160(gs_ua3) 69 70 70 173 171 + Store 164(out_u3) 174 + 175: 38(ivec3) Load 161(gs_ub3) + 176: 38(ivec3) AtomicExchange 160(gs_ua3) 69 70 175 + Store 164(out_u3) 176 + 177: 38(ivec3) Load 161(gs_ub3) + 178: 38(ivec3) AtomicUMax 160(gs_ua3) 69 70 177 + 179: 38(ivec3) Load 161(gs_ub3) + 180: 38(ivec3) AtomicUMax 160(gs_ua3) 69 70 179 + Store 164(out_u3) 180 + 181: 38(ivec3) Load 161(gs_ub3) + 182: 38(ivec3) AtomicUMin 160(gs_ua3) 69 70 181 + 183: 38(ivec3) Load 161(gs_ub3) + 184: 38(ivec3) AtomicUMin 160(gs_ua3) 69 70 183 + Store 164(out_u3) 184 + 185: 38(ivec3) Load 161(gs_ub3) + 186: 38(ivec3) AtomicOr 160(gs_ua3) 69 70 185 + 187: 38(ivec3) Load 161(gs_ub3) + 188: 38(ivec3) AtomicOr 160(gs_ua3) 69 70 187 + Store 164(out_u3) 188 + 189: 38(ivec3) Load 161(gs_ub3) + 190: 38(ivec3) AtomicXor 160(gs_ua3) 69 70 189 + 191: 38(ivec3) Load 161(gs_ub3) + 192: 38(ivec3) AtomicXor 160(gs_ua3) 69 70 191 + Store 164(out_u3) 192 + ReturnValue 194 FunctionEnd 58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;): 48(fvec4) Function None 52 53(inF0): 49(ptr) FunctionParameter @@ -1058,46 +1077,46 @@ Validation failed 56(inU0): 51(ptr) FunctionParameter 57(inU1): 51(ptr) FunctionParameter 59: Label - 202(out_u4): 51(ptr) Variable Function - 192: 48(fvec4) Load 53(inF0) - 195: 193(bvec4) FUnordNotEqual 192 194 - 196: 61(bool) All 195 - 200: 50(ivec4) Load 199(gs_ub4) - 201: 50(ivec4) AtomicIAdd 198(gs_ua4) 69 70 200 - 203: 50(ivec4) Load 199(gs_ub4) - 204: 50(ivec4) AtomicIAdd 198(gs_ua4) 69 70 203 - Store 202(out_u4) 204 - 205: 50(ivec4) Load 199(gs_ub4) - 206: 50(ivec4) AtomicAnd 198(gs_ua4) 69 70 205 - 207: 50(ivec4) Load 199(gs_ub4) - 208: 50(ivec4) AtomicAnd 198(gs_ua4) 69 70 207 - Store 202(out_u4) 208 - 209: 50(ivec4) Load 199(gs_ub4) - 211: 50(ivec4) Load 210(gs_uc4) - 212: 50(ivec4) AtomicCompareExchange 198(gs_ua4) 69 70 70 211 209 - Store 202(out_u4) 212 - 213: 50(ivec4) Load 199(gs_ub4) - 214: 50(ivec4) AtomicExchange 198(gs_ua4) 69 70 213 - Store 202(out_u4) 214 - 215: 50(ivec4) Load 199(gs_ub4) - 216: 50(ivec4) AtomicUMax 198(gs_ua4) 69 70 215 - 217: 50(ivec4) Load 199(gs_ub4) - 218: 50(ivec4) AtomicUMax 198(gs_ua4) 69 70 217 - Store 202(out_u4) 218 - 219: 50(ivec4) Load 199(gs_ub4) - 220: 50(ivec4) AtomicUMin 198(gs_ua4) 69 70 219 - 221: 50(ivec4) Load 199(gs_ub4) - 222: 50(ivec4) AtomicUMin 198(gs_ua4) 69 70 221 - Store 202(out_u4) 222 - 223: 50(ivec4) Load 199(gs_ub4) - 224: 50(ivec4) AtomicOr 198(gs_ua4) 69 70 223 - 225: 50(ivec4) Load 199(gs_ub4) - 226: 50(ivec4) AtomicOr 198(gs_ua4) 69 70 225 - Store 202(out_u4) 226 - 227: 50(ivec4) Load 199(gs_ub4) - 228: 50(ivec4) AtomicXor 198(gs_ua4) 69 70 227 - 229: 50(ivec4) Load 199(gs_ub4) - 230: 50(ivec4) AtomicXor 198(gs_ua4) 69 70 229 - Store 202(out_u4) 230 - ReturnValue 232 + 207(out_u4): 51(ptr) Variable Function + 197: 48(fvec4) Load 53(inF0) + 200: 198(bvec4) FUnordNotEqual 197 199 + 201: 61(bool) All 200 + 205: 50(ivec4) Load 204(gs_ub4) + 206: 50(ivec4) AtomicIAdd 203(gs_ua4) 69 70 205 + 208: 50(ivec4) Load 204(gs_ub4) + 209: 50(ivec4) AtomicIAdd 203(gs_ua4) 69 70 208 + Store 207(out_u4) 209 + 210: 50(ivec4) Load 204(gs_ub4) + 211: 50(ivec4) AtomicAnd 203(gs_ua4) 69 70 210 + 212: 50(ivec4) Load 204(gs_ub4) + 213: 50(ivec4) AtomicAnd 203(gs_ua4) 69 70 212 + Store 207(out_u4) 213 + 214: 50(ivec4) Load 204(gs_ub4) + 216: 50(ivec4) Load 215(gs_uc4) + 217: 50(ivec4) AtomicCompareExchange 203(gs_ua4) 69 70 70 216 214 + Store 207(out_u4) 217 + 218: 50(ivec4) Load 204(gs_ub4) + 219: 50(ivec4) AtomicExchange 203(gs_ua4) 69 70 218 + Store 207(out_u4) 219 + 220: 50(ivec4) Load 204(gs_ub4) + 221: 50(ivec4) AtomicUMax 203(gs_ua4) 69 70 220 + 222: 50(ivec4) Load 204(gs_ub4) + 223: 50(ivec4) AtomicUMax 203(gs_ua4) 69 70 222 + Store 207(out_u4) 223 + 224: 50(ivec4) Load 204(gs_ub4) + 225: 50(ivec4) AtomicUMin 203(gs_ua4) 69 70 224 + 226: 50(ivec4) Load 204(gs_ub4) + 227: 50(ivec4) AtomicUMin 203(gs_ua4) 69 70 226 + Store 207(out_u4) 227 + 228: 50(ivec4) Load 204(gs_ub4) + 229: 50(ivec4) AtomicOr 203(gs_ua4) 69 70 228 + 230: 50(ivec4) Load 204(gs_ub4) + 231: 50(ivec4) AtomicOr 203(gs_ua4) 69 70 230 + Store 207(out_u4) 231 + 232: 50(ivec4) Load 204(gs_ub4) + 233: 50(ivec4) AtomicXor 203(gs_ua4) 69 70 232 + 234: 50(ivec4) Load 204(gs_ub4) + 235: 50(ivec4) AtomicXor 203(gs_ua4) 69 70 234 + Store 207(out_u4) 235 + ReturnValue 237 FunctionEnd diff --git a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out index b0eeaa9ac3..69416c3796 100644 --- a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out +++ b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out @@ -74,7 +74,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -89,10 +89,10 @@ gl_FragCoord origin is upper left MemberName 14($Global) 0 "col4" Name 16 "" Name 27 "@entryPointOutput" - MemberDecorate 14($Global) 0 Offset 0 Decorate 14($Global) Block - Decorate 16 DescriptorSet 0 + MemberDecorate 14($Global) 0 Offset 0 Decorate 16 Binding 0 + Decorate 16 DescriptorSet 0 Decorate 27(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.intrinsics.double.frag.out b/Test/baseResults/hlsl.intrinsics.double.frag.out index 8444e20ac9..d87fd2f398 100644 --- a/Test/baseResults/hlsl.intrinsics.double.frag.out +++ b/Test/baseResults/hlsl.intrinsics.double.frag.out @@ -164,7 +164,7 @@ gl_FragCoord origin is upper left 0:? 'inU1b' (layout( location=9) flat in uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 90 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsics.f1632.frag.out b/Test/baseResults/hlsl.intrinsics.f1632.frag.out index 90a4b989fe..52bbc4fbe3 100644 --- a/Test/baseResults/hlsl.intrinsics.f1632.frag.out +++ b/Test/baseResults/hlsl.intrinsics.f1632.frag.out @@ -270,7 +270,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 106 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsics.f3216.frag.out b/Test/baseResults/hlsl.intrinsics.f3216.frag.out index ddf9a70865..c9a94b8fee 100644 --- a/Test/baseResults/hlsl.intrinsics.f3216.frag.out +++ b/Test/baseResults/hlsl.intrinsics.f3216.frag.out @@ -270,7 +270,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 106 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out index 02b1e6d12a..38857f8354 100644 --- a/Test/baseResults/hlsl.intrinsics.frag.out +++ b/Test/baseResults/hlsl.intrinsics.frag.out @@ -5659,7 +5659,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 1839 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsics.lit.frag.out b/Test/baseResults/hlsl.intrinsics.lit.frag.out index ef5759ebb7..8307db515f 100644 --- a/Test/baseResults/hlsl.intrinsics.lit.frag.out +++ b/Test/baseResults/hlsl.intrinsics.lit.frag.out @@ -118,7 +118,7 @@ gl_FragCoord origin is upper left 0:? 'm' (layout( location=2) in float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 48 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out index c0a543c28b..6ea121a678 100644 --- a/Test/baseResults/hlsl.intrinsics.negative.comp.out +++ b/Test/baseResults/hlsl.intrinsics.negative.comp.out @@ -122,7 +122,7 @@ local_size = (1, 1, 1) 0:? 'inI0' (layout( location=3) in 4-component vector of int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 79 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsics.negative.vert.out b/Test/baseResults/hlsl.intrinsics.negative.vert.out index f1ab582623..9044abdfac 100644 --- a/Test/baseResults/hlsl.intrinsics.negative.vert.out +++ b/Test/baseResults/hlsl.intrinsics.negative.vert.out @@ -308,7 +308,7 @@ Shader version: 500 0:? 'inI0' (layout( location=3) in 4-component vector of int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 155 Capability Shader diff --git a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out index bd73fae201..592bb88754 100644 --- a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out +++ b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out @@ -104,7 +104,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader @@ -131,6 +131,7 @@ gl_FragCoord origin is upper left Name 29 "r01" Name 37 "ps_output" Name 47 "@entryPointOutput.color" + Decorate 19($Global) Block MemberDecorate 19($Global) 0 Offset 0 MemberDecorate 19($Global) 1 Offset 4 MemberDecorate 19($Global) 2 Offset 8 @@ -139,9 +140,8 @@ gl_FragCoord origin is upper left MemberDecorate 19($Global) 5 Offset 24 MemberDecorate 19($Global) 6 Offset 32 MemberDecorate 19($Global) 7 Offset 40 - Decorate 19($Global) Block - Decorate 21 DescriptorSet 0 Decorate 21 Binding 0 + Decorate 21 DescriptorSet 0 Decorate 47(@entryPointOutput.color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.intrinsics.promote.frag.out b/Test/baseResults/hlsl.intrinsics.promote.frag.out index 18fd0370e0..e0a1c7d9ca 100644 --- a/Test/baseResults/hlsl.intrinsics.promote.frag.out +++ b/Test/baseResults/hlsl.intrinsics.promote.frag.out @@ -888,7 +888,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 322 Capability Shader @@ -952,6 +952,7 @@ gl_FragCoord origin is upper left Name 301 "sizeQueryTemp" Name 310 "ps_output" Name 319 "@entryPointOutput.color" + Decorate 19($Global) Block MemberDecorate 19($Global) 0 Offset 0 MemberDecorate 19($Global) 1 Offset 4 MemberDecorate 19($Global) 2 Offset 8 @@ -962,13 +963,12 @@ gl_FragCoord origin is upper left MemberDecorate 19($Global) 7 Offset 40 MemberDecorate 19($Global) 8 Offset 48 MemberDecorate 19($Global) 9 Offset 52 - Decorate 19($Global) Block - Decorate 21 DescriptorSet 0 Decorate 21 Binding 0 - Decorate 258(g_tTexbfs) DescriptorSet 0 + Decorate 21 DescriptorSet 0 Decorate 258(g_tTexbfs) Binding 1 - Decorate 277(g_tTex1df4) DescriptorSet 0 + Decorate 258(g_tTexbfs) DescriptorSet 0 Decorate 277(g_tTex1df4) Binding 2 + Decorate 277(g_tTex1df4) DescriptorSet 0 Decorate 319(@entryPointOutput.color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out index 1abed4c921..48d4cc8ba7 100644 --- a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out +++ b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out @@ -204,7 +204,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 80 Capability Shader @@ -244,6 +244,7 @@ gl_FragCoord origin is upper left Name 66 "ps_output" Name 74 "@entryPointOutput.color" Name 79 "g_tTexbfs" + Decorate 17($Global) Block MemberDecorate 17($Global) 0 Offset 0 MemberDecorate 17($Global) 1 Offset 4 MemberDecorate 17($Global) 2 Offset 8 @@ -254,14 +255,13 @@ gl_FragCoord origin is upper left MemberDecorate 17($Global) 7 Offset 40 MemberDecorate 17($Global) 8 Offset 48 MemberDecorate 17($Global) 9 Offset 52 - Decorate 17($Global) Block - Decorate 19 DescriptorSet 0 Decorate 19 Binding 0 - Decorate 31(g_tTex1df4) DescriptorSet 0 + Decorate 19 DescriptorSet 0 Decorate 31(g_tTex1df4) Binding 1 + Decorate 31(g_tTex1df4) DescriptorSet 0 Decorate 74(@entryPointOutput.color) Location 0 - Decorate 79(g_tTexbfs) DescriptorSet 0 Decorate 79(g_tTexbfs) Binding 0 + Decorate 79(g_tTexbfs) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out index 647570c931..611ff163ea 100644 --- a/Test/baseResults/hlsl.intrinsics.vert.out +++ b/Test/baseResults/hlsl.intrinsics.vert.out @@ -2780,7 +2780,7 @@ Shader version: 500 Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 1225 Capability Shader diff --git a/Test/baseResults/hlsl.isfinite.frag.out b/Test/baseResults/hlsl.isfinite.frag.out index 430ff0640e..9f562e3bb7 100644 --- a/Test/baseResults/hlsl.isfinite.frag.out +++ b/Test/baseResults/hlsl.isfinite.frag.out @@ -172,7 +172,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 85 Capability Shader @@ -195,12 +195,12 @@ gl_FragCoord origin is upper left Name 51 "@finitetmp" Name 65 "@finitetmp" Name 83 "@entryPointOutput" + Decorate 35($Global) Block MemberDecorate 35($Global) 0 Offset 0 MemberDecorate 35($Global) 1 Offset 8 MemberDecorate 35($Global) 2 Offset 16 - Decorate 35($Global) Block - Decorate 37 DescriptorSet 0 Decorate 37 Binding 0 + Decorate 37 DescriptorSet 0 Decorate 83(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.layout.frag.out b/Test/baseResults/hlsl.layout.frag.out index 9007e933b4..7979015a49 100644 --- a/Test/baseResults/hlsl.layout.frag.out +++ b/Test/baseResults/hlsl.layout.frag.out @@ -88,7 +88,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 44 Capability Shader @@ -111,19 +111,22 @@ Validation failed MemberName 33(tbufName2) 0 "v1PostLayout" Name 35 "" Name 43 "specConst" + Decorate 17(tbufName) BufferBlock MemberDecorate 17(tbufName) 0 NonWritable MemberDecorate 17(tbufName) 0 Offset 16 - Decorate 17(tbufName) BufferBlock - Decorate 19 DescriptorSet 3 + Decorate 19 NonWritable Decorate 19 Binding 5 + Decorate 19 DescriptorSet 3 + Decorate 26(tbufName2) BufferBlock MemberDecorate 26(tbufName2) 0 NonWritable MemberDecorate 26(tbufName2) 0 Offset 0 - Decorate 26(tbufName2) BufferBlock + Decorate 28 NonWritable + Decorate 33(tbufName2) BufferBlock MemberDecorate 33(tbufName2) 0 NonWritable MemberDecorate 33(tbufName2) 0 Offset 16 - Decorate 33(tbufName2) BufferBlock - Decorate 35 DescriptorSet 4 + Decorate 35 NonWritable Decorate 35 Binding 7 + Decorate 35 DescriptorSet 4 Decorate 43(specConst) SpecId 17 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.layoutOverride.vert.out b/Test/baseResults/hlsl.layoutOverride.vert.out index a3b8960136..a0d8ad84e9 100644 --- a/Test/baseResults/hlsl.layoutOverride.vert.out +++ b/Test/baseResults/hlsl.layoutOverride.vert.out @@ -52,7 +52,7 @@ Shader version: 500 0:? '@entryPointOutput' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 32 Capability Shader @@ -65,10 +65,10 @@ Shader version: 500 Name 13 "tex" Name 17 "samp" Name 30 "@entryPointOutput" - Decorate 13(tex) DescriptorSet 2 Decorate 13(tex) Binding 0 - Decorate 17(samp) DescriptorSet 0 + Decorate 13(tex) DescriptorSet 2 Decorate 17(samp) Binding 0 + Decorate 17(samp) DescriptorSet 0 Decorate 30(@entryPointOutput) BuiltIn Position 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out index daa28b263d..f8ede0473b 100644 --- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out +++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out @@ -336,7 +336,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 129 Capability Shader @@ -370,29 +370,29 @@ using depth_any Name 119 "@entryPointOutput.Color" Name 123 "@entryPointOutput.Depth" Name 128 "g_sSamp" - Decorate 23(g_tTex2dmsf4) DescriptorSet 0 Decorate 23(g_tTex2dmsf4) Binding 1 + Decorate 23(g_tTex2dmsf4) DescriptorSet 0 + Decorate 27($Global) Block MemberDecorate 27($Global) 0 Offset 0 MemberDecorate 27($Global) 1 Offset 8 MemberDecorate 27($Global) 2 Offset 16 MemberDecorate 27($Global) 3 Offset 32 - Decorate 27($Global) Block - Decorate 29 DescriptorSet 0 Decorate 29 Binding 7 - Decorate 37(g_tTex2dmsi4) DescriptorSet 0 + Decorate 29 DescriptorSet 0 Decorate 37(g_tTex2dmsi4) Binding 2 - Decorate 45(g_tTex2dmsu4) DescriptorSet 0 + Decorate 37(g_tTex2dmsi4) DescriptorSet 0 Decorate 45(g_tTex2dmsu4) Binding 3 - Decorate 68(g_tTex2dmsf4a) DescriptorSet 0 + Decorate 45(g_tTex2dmsu4) DescriptorSet 0 Decorate 68(g_tTex2dmsf4a) Binding 4 - Decorate 77(g_tTex2dmsi4a) DescriptorSet 0 + Decorate 68(g_tTex2dmsf4a) DescriptorSet 0 Decorate 77(g_tTex2dmsi4a) Binding 5 - Decorate 84(g_tTex2dmsu4a) DescriptorSet 0 + Decorate 77(g_tTex2dmsi4a) DescriptorSet 0 Decorate 84(g_tTex2dmsu4a) Binding 6 + Decorate 84(g_tTex2dmsu4a) DescriptorSet 0 Decorate 119(@entryPointOutput.Color) Location 0 Decorate 123(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 128(g_sSamp) DescriptorSet 0 Decorate 128(g_sSamp) Binding 0 + Decorate 128(g_sSamp) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out index 0440779f09..4bc42a6b43 100644 --- a/Test/baseResults/hlsl.load.array.dx10.frag.out +++ b/Test/baseResults/hlsl.load.array.dx10.frag.out @@ -388,7 +388,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 159 Capability Shader @@ -441,8 +441,9 @@ using depth_any Name 152 "g_tTexcdf4a" Name 155 "g_tTexcdi4a" Name 158 "g_tTexcdu4a" - Decorate 14(g_tTex1df4a) DescriptorSet 0 Decorate 14(g_tTex1df4a) Binding 1 + Decorate 14(g_tTex1df4a) DescriptorSet 0 + Decorate 20($Global) Block MemberDecorate 20($Global) 0 Offset 0 MemberDecorate 20($Global) 1 Offset 8 MemberDecorate 20($Global) 2 Offset 16 @@ -451,53 +452,52 @@ using depth_any MemberDecorate 20($Global) 5 Offset 56 MemberDecorate 20($Global) 6 Offset 64 MemberDecorate 20($Global) 7 Offset 80 - Decorate 20($Global) Block - Decorate 22 DescriptorSet 0 Decorate 22 Binding 7 - Decorate 36(g_tTex1di4a) DescriptorSet 0 + Decorate 22 DescriptorSet 0 Decorate 36(g_tTex1di4a) Binding 2 - Decorate 46(g_tTex1du4a) DescriptorSet 0 + Decorate 36(g_tTex1di4a) DescriptorSet 0 Decorate 46(g_tTex1du4a) Binding 3 - Decorate 57(g_tTex2df4a) DescriptorSet 0 + Decorate 46(g_tTex1du4a) DescriptorSet 0 Decorate 57(g_tTex2df4a) Binding 4 - Decorate 70(g_tTex2di4a) DescriptorSet 0 + Decorate 57(g_tTex2df4a) DescriptorSet 0 Decorate 70(g_tTex2di4a) Binding 5 - Decorate 80(g_tTex2du4a) DescriptorSet 0 + Decorate 70(g_tTex2di4a) DescriptorSet 0 Decorate 80(g_tTex2du4a) Binding 6 + Decorate 80(g_tTex2du4a) DescriptorSet 0 Decorate 104(@entryPointOutput.Color) Location 0 Decorate 108(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 113(g_sSamp) DescriptorSet 0 Decorate 113(g_sSamp) Binding 0 - Decorate 116(g_tTex1df4) DescriptorSet 0 + Decorate 113(g_sSamp) DescriptorSet 0 Decorate 116(g_tTex1df4) Binding 0 - Decorate 119(g_tTex1di4) DescriptorSet 0 + Decorate 116(g_tTex1df4) DescriptorSet 0 Decorate 119(g_tTex1di4) Binding 0 - Decorate 122(g_tTex1du4) DescriptorSet 0 + Decorate 119(g_tTex1di4) DescriptorSet 0 Decorate 122(g_tTex1du4) Binding 0 - Decorate 125(g_tTex2df4) DescriptorSet 0 + Decorate 122(g_tTex1du4) DescriptorSet 0 Decorate 125(g_tTex2df4) Binding 0 - Decorate 128(g_tTex2di4) DescriptorSet 0 + Decorate 125(g_tTex2df4) DescriptorSet 0 Decorate 128(g_tTex2di4) Binding 0 - Decorate 131(g_tTex2du4) DescriptorSet 0 + Decorate 128(g_tTex2di4) DescriptorSet 0 Decorate 131(g_tTex2du4) Binding 0 - Decorate 134(g_tTex3df4) DescriptorSet 0 + Decorate 131(g_tTex2du4) DescriptorSet 0 Decorate 134(g_tTex3df4) Binding 0 - Decorate 137(g_tTex3di4) DescriptorSet 0 + Decorate 134(g_tTex3df4) DescriptorSet 0 Decorate 137(g_tTex3di4) Binding 0 - Decorate 140(g_tTex3du4) DescriptorSet 0 + Decorate 137(g_tTex3di4) DescriptorSet 0 Decorate 140(g_tTex3du4) Binding 0 - Decorate 143(g_tTexcdf4) DescriptorSet 0 + Decorate 140(g_tTex3du4) DescriptorSet 0 Decorate 143(g_tTexcdf4) Binding 0 - Decorate 146(g_tTexcdi4) DescriptorSet 0 + Decorate 143(g_tTexcdf4) DescriptorSet 0 Decorate 146(g_tTexcdi4) Binding 0 - Decorate 149(g_tTexcdu4) DescriptorSet 0 + Decorate 146(g_tTexcdi4) DescriptorSet 0 Decorate 149(g_tTexcdu4) Binding 0 - Decorate 152(g_tTexcdf4a) DescriptorSet 0 + Decorate 149(g_tTexcdu4) DescriptorSet 0 Decorate 152(g_tTexcdf4a) Binding 0 - Decorate 155(g_tTexcdi4a) DescriptorSet 0 + Decorate 152(g_tTexcdf4a) DescriptorSet 0 Decorate 155(g_tTexcdi4a) Binding 0 - Decorate 158(g_tTexcdu4a) DescriptorSet 0 + Decorate 155(g_tTexcdi4a) DescriptorSet 0 Decorate 158(g_tTexcdu4a) Binding 0 + Decorate 158(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out index 2aef83db3f..d1be427e03 100644 --- a/Test/baseResults/hlsl.load.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.load.basic.dx10.frag.out @@ -490,7 +490,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 179 Capability Shader @@ -543,8 +543,9 @@ using depth_any Name 172 "g_tTexcdf4a" Name 175 "g_tTexcdi4a" Name 178 "g_tTexcdu4a" - Decorate 14(g_tTex1df4) DescriptorSet 0 Decorate 14(g_tTex1df4) Binding 0 + Decorate 14(g_tTex1df4) DescriptorSet 0 + Decorate 20($Global) Block MemberDecorate 20($Global) 0 Offset 0 MemberDecorate 20($Global) 1 Offset 8 MemberDecorate 20($Global) 2 Offset 16 @@ -553,53 +554,52 @@ using depth_any MemberDecorate 20($Global) 5 Offset 56 MemberDecorate 20($Global) 6 Offset 64 MemberDecorate 20($Global) 7 Offset 80 - Decorate 20($Global) Block - Decorate 22 DescriptorSet 0 Decorate 22 Binding 9 - Decorate 35(g_tTex1di4) DescriptorSet 0 + Decorate 22 DescriptorSet 0 Decorate 35(g_tTex1di4) Binding 1 - Decorate 44(g_tTex1du4) DescriptorSet 0 + Decorate 35(g_tTex1di4) DescriptorSet 0 Decorate 44(g_tTex1du4) Binding 2 - Decorate 54(g_tTex2df4) DescriptorSet 0 + Decorate 44(g_tTex1du4) DescriptorSet 0 Decorate 54(g_tTex2df4) Binding 3 - Decorate 67(g_tTex2di4) DescriptorSet 0 + Decorate 54(g_tTex2df4) DescriptorSet 0 Decorate 67(g_tTex2di4) Binding 4 - Decorate 77(g_tTex2du4) DescriptorSet 0 + Decorate 67(g_tTex2di4) DescriptorSet 0 Decorate 77(g_tTex2du4) Binding 5 - Decorate 87(g_tTex3df4) DescriptorSet 0 + Decorate 77(g_tTex2du4) DescriptorSet 0 Decorate 87(g_tTex3df4) Binding 6 - Decorate 100(g_tTex3di4) DescriptorSet 0 + Decorate 87(g_tTex3df4) DescriptorSet 0 Decorate 100(g_tTex3di4) Binding 7 - Decorate 110(g_tTex3du4) DescriptorSet 0 + Decorate 100(g_tTex3di4) DescriptorSet 0 Decorate 110(g_tTex3du4) Binding 8 + Decorate 110(g_tTex3du4) DescriptorSet 0 Decorate 133(@entryPointOutput.Color) Location 0 Decorate 137(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 142(g_sSamp) DescriptorSet 0 Decorate 142(g_sSamp) Binding 0 - Decorate 145(g_tTexcdf4) DescriptorSet 0 + Decorate 142(g_sSamp) DescriptorSet 0 Decorate 145(g_tTexcdf4) Binding 0 - Decorate 148(g_tTexcdi4) DescriptorSet 0 + Decorate 145(g_tTexcdf4) DescriptorSet 0 Decorate 148(g_tTexcdi4) Binding 0 - Decorate 151(g_tTexcdu4) DescriptorSet 0 + Decorate 148(g_tTexcdi4) DescriptorSet 0 Decorate 151(g_tTexcdu4) Binding 0 - Decorate 154(g_tTex1df4a) DescriptorSet 0 + Decorate 151(g_tTexcdu4) DescriptorSet 0 Decorate 154(g_tTex1df4a) Binding 0 - Decorate 157(g_tTex1di4a) DescriptorSet 0 + Decorate 154(g_tTex1df4a) DescriptorSet 0 Decorate 157(g_tTex1di4a) Binding 0 - Decorate 160(g_tTex1du4a) DescriptorSet 0 + Decorate 157(g_tTex1di4a) DescriptorSet 0 Decorate 160(g_tTex1du4a) Binding 0 - Decorate 163(g_tTex2df4a) DescriptorSet 0 + Decorate 160(g_tTex1du4a) DescriptorSet 0 Decorate 163(g_tTex2df4a) Binding 0 - Decorate 166(g_tTex2di4a) DescriptorSet 0 + Decorate 163(g_tTex2df4a) DescriptorSet 0 Decorate 166(g_tTex2di4a) Binding 0 - Decorate 169(g_tTex2du4a) DescriptorSet 0 + Decorate 166(g_tTex2di4a) DescriptorSet 0 Decorate 169(g_tTex2du4a) Binding 0 - Decorate 172(g_tTexcdf4a) DescriptorSet 0 + Decorate 169(g_tTex2du4a) DescriptorSet 0 Decorate 172(g_tTexcdf4a) Binding 0 - Decorate 175(g_tTexcdi4a) DescriptorSet 0 + Decorate 172(g_tTexcdf4a) DescriptorSet 0 Decorate 175(g_tTexcdi4a) Binding 0 - Decorate 178(g_tTexcdu4a) DescriptorSet 0 + Decorate 175(g_tTexcdi4a) DescriptorSet 0 Decorate 178(g_tTexcdu4a) Binding 0 + Decorate 178(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out index 8b9a04f823..1dc4464fcc 100644 --- a/Test/baseResults/hlsl.load.basic.dx10.vert.out +++ b/Test/baseResults/hlsl.load.basic.dx10.vert.out @@ -452,7 +452,7 @@ Shader version: 500 0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 171 Capability Shader @@ -500,8 +500,9 @@ Shader version: 500 Name 164 "g_tTexcdf4a" Name 167 "g_tTexcdi4a" Name 170 "g_tTexcdu4a" - Decorate 14(g_tTex1df4) DescriptorSet 0 Decorate 14(g_tTex1df4) Binding 0 + Decorate 14(g_tTex1df4) DescriptorSet 0 + Decorate 20($Global) Block MemberDecorate 20($Global) 0 Offset 0 MemberDecorate 20($Global) 1 Offset 8 MemberDecorate 20($Global) 2 Offset 16 @@ -510,52 +511,51 @@ Shader version: 500 MemberDecorate 20($Global) 5 Offset 56 MemberDecorate 20($Global) 6 Offset 64 MemberDecorate 20($Global) 7 Offset 80 - Decorate 20($Global) Block - Decorate 22 DescriptorSet 0 Decorate 22 Binding 9 - Decorate 35(g_tTex1di4) DescriptorSet 0 + Decorate 22 DescriptorSet 0 Decorate 35(g_tTex1di4) Binding 1 - Decorate 44(g_tTex1du4) DescriptorSet 0 + Decorate 35(g_tTex1di4) DescriptorSet 0 Decorate 44(g_tTex1du4) Binding 2 - Decorate 54(g_tTex2df4) DescriptorSet 0 + Decorate 44(g_tTex1du4) DescriptorSet 0 Decorate 54(g_tTex2df4) Binding 3 - Decorate 67(g_tTex2di4) DescriptorSet 0 + Decorate 54(g_tTex2df4) DescriptorSet 0 Decorate 67(g_tTex2di4) Binding 4 - Decorate 77(g_tTex2du4) DescriptorSet 0 + Decorate 67(g_tTex2di4) DescriptorSet 0 Decorate 77(g_tTex2du4) Binding 5 - Decorate 87(g_tTex3df4) DescriptorSet 0 + Decorate 77(g_tTex2du4) DescriptorSet 0 Decorate 87(g_tTex3df4) Binding 6 - Decorate 100(g_tTex3di4) DescriptorSet 0 + Decorate 87(g_tTex3df4) DescriptorSet 0 Decorate 100(g_tTex3di4) Binding 7 - Decorate 110(g_tTex3du4) DescriptorSet 0 + Decorate 100(g_tTex3di4) DescriptorSet 0 Decorate 110(g_tTex3du4) Binding 8 + Decorate 110(g_tTex3du4) DescriptorSet 0 Decorate 129(@entryPointOutput.Pos) BuiltIn Position - Decorate 134(g_sSamp) DescriptorSet 0 Decorate 134(g_sSamp) Binding 0 - Decorate 137(g_tTexcdf4) DescriptorSet 0 + Decorate 134(g_sSamp) DescriptorSet 0 Decorate 137(g_tTexcdf4) Binding 0 - Decorate 140(g_tTexcdi4) DescriptorSet 0 + Decorate 137(g_tTexcdf4) DescriptorSet 0 Decorate 140(g_tTexcdi4) Binding 0 - Decorate 143(g_tTexcdu4) DescriptorSet 0 + Decorate 140(g_tTexcdi4) DescriptorSet 0 Decorate 143(g_tTexcdu4) Binding 0 - Decorate 146(g_tTex1df4a) DescriptorSet 0 + Decorate 143(g_tTexcdu4) DescriptorSet 0 Decorate 146(g_tTex1df4a) Binding 0 - Decorate 149(g_tTex1di4a) DescriptorSet 0 + Decorate 146(g_tTex1df4a) DescriptorSet 0 Decorate 149(g_tTex1di4a) Binding 0 - Decorate 152(g_tTex1du4a) DescriptorSet 0 + Decorate 149(g_tTex1di4a) DescriptorSet 0 Decorate 152(g_tTex1du4a) Binding 0 - Decorate 155(g_tTex2df4a) DescriptorSet 0 + Decorate 152(g_tTex1du4a) DescriptorSet 0 Decorate 155(g_tTex2df4a) Binding 0 - Decorate 158(g_tTex2di4a) DescriptorSet 0 + Decorate 155(g_tTex2df4a) DescriptorSet 0 Decorate 158(g_tTex2di4a) Binding 0 - Decorate 161(g_tTex2du4a) DescriptorSet 0 + Decorate 158(g_tTex2di4a) DescriptorSet 0 Decorate 161(g_tTex2du4a) Binding 0 - Decorate 164(g_tTexcdf4a) DescriptorSet 0 + Decorate 161(g_tTex2du4a) DescriptorSet 0 Decorate 164(g_tTexcdf4a) Binding 0 - Decorate 167(g_tTexcdi4a) DescriptorSet 0 + Decorate 164(g_tTexcdf4a) DescriptorSet 0 Decorate 167(g_tTexcdi4a) Binding 0 - Decorate 170(g_tTexcdu4a) DescriptorSet 0 + Decorate 167(g_tTexcdi4a) DescriptorSet 0 Decorate 170(g_tTexcdu4a) Binding 0 + Decorate 170(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.dx10.frag.out index 299bde154d..900c118401 100644 --- a/Test/baseResults/hlsl.load.buffer.dx10.frag.out +++ b/Test/baseResults/hlsl.load.buffer.dx10.frag.out @@ -166,7 +166,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 72 Capability Shader @@ -203,8 +203,9 @@ using depth_any Name 64 "@entryPointOutput.Color" Name 68 "@entryPointOutput.Depth" Name 71 "g_tTexbf4_test" - Decorate 16(g_tTexbf4) DescriptorSet 0 Decorate 16(g_tTexbf4) Binding 1 + Decorate 16(g_tTexbf4) DescriptorSet 0 + Decorate 22($Global) Block MemberDecorate 22($Global) 0 Offset 0 MemberDecorate 22($Global) 1 Offset 8 MemberDecorate 22($Global) 2 Offset 16 @@ -213,17 +214,16 @@ using depth_any MemberDecorate 22($Global) 5 Offset 56 MemberDecorate 22($Global) 6 Offset 64 MemberDecorate 22($Global) 7 Offset 80 - Decorate 22($Global) Block - Decorate 24 DescriptorSet 0 Decorate 24 Binding 4 - Decorate 34(g_tTexbi4) DescriptorSet 0 + Decorate 24 DescriptorSet 0 Decorate 34(g_tTexbi4) Binding 2 - Decorate 45(g_tTexbu4) DescriptorSet 0 + Decorate 34(g_tTexbi4) DescriptorSet 0 Decorate 45(g_tTexbu4) Binding 3 + Decorate 45(g_tTexbu4) DescriptorSet 0 Decorate 64(@entryPointOutput.Color) Location 0 Decorate 68(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 71(g_tTexbf4_test) DescriptorSet 0 Decorate 71(g_tTexbf4_test) Binding 0 + Decorate 71(g_tTexbf4_test) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out index f7a530c7da..c88fd6a2df 100644 --- a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out +++ b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out @@ -172,7 +172,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 75 Capability Shader @@ -209,8 +209,9 @@ using depth_any Name 67 "@entryPointOutput.Color" Name 71 "@entryPointOutput.Depth" Name 74 "g_tTexbfs_test" - Decorate 16(g_tTexbfs) DescriptorSet 0 Decorate 16(g_tTexbfs) Binding 1 + Decorate 16(g_tTexbfs) DescriptorSet 0 + Decorate 22($Global) Block MemberDecorate 22($Global) 0 Offset 0 MemberDecorate 22($Global) 1 Offset 8 MemberDecorate 22($Global) 2 Offset 16 @@ -219,17 +220,16 @@ using depth_any MemberDecorate 22($Global) 5 Offset 56 MemberDecorate 22($Global) 6 Offset 64 MemberDecorate 22($Global) 7 Offset 80 - Decorate 22($Global) Block - Decorate 24 DescriptorSet 0 Decorate 24 Binding 4 - Decorate 35(g_tTexbis) DescriptorSet 0 + Decorate 24 DescriptorSet 0 Decorate 35(g_tTexbis) Binding 2 - Decorate 46(g_tTexbus) DescriptorSet 0 + Decorate 35(g_tTexbis) DescriptorSet 0 Decorate 46(g_tTexbus) Binding 3 + Decorate 46(g_tTexbus) DescriptorSet 0 Decorate 67(@entryPointOutput.Color) Location 0 Decorate 71(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 74(g_tTexbfs_test) DescriptorSet 0 Decorate 74(g_tTexbfs_test) Binding 0 + Decorate 74(g_tTexbfs_test) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out index 106af53912..0d07130d52 100644 --- a/Test/baseResults/hlsl.load.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out @@ -550,7 +550,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 205 Capability Shader @@ -603,59 +603,59 @@ using depth_any Name 198 "g_tTexcdf4a" Name 201 "g_tTexcdi4a" Name 204 "g_tTexcdu4a" - Decorate 35(g_tTex1df4) DescriptorSet 0 Decorate 35(g_tTex1df4) Binding 0 + Decorate 35(g_tTex1df4) DescriptorSet 0 + Decorate 38($Global) Block MemberDecorate 38($Global) 0 Offset 0 MemberDecorate 38($Global) 1 Offset 8 MemberDecorate 38($Global) 2 Offset 16 MemberDecorate 38($Global) 3 Offset 32 - Decorate 38($Global) Block - Decorate 40 DescriptorSet 0 Decorate 40 Binding 9 - Decorate 53(g_tTex1di4) DescriptorSet 0 + Decorate 40 DescriptorSet 0 Decorate 53(g_tTex1di4) Binding 1 - Decorate 63(g_tTex1du4) DescriptorSet 0 + Decorate 53(g_tTex1di4) DescriptorSet 0 Decorate 63(g_tTex1du4) Binding 2 - Decorate 74(g_tTex2df4) DescriptorSet 0 + Decorate 63(g_tTex1du4) DescriptorSet 0 Decorate 74(g_tTex2df4) Binding 3 - Decorate 88(g_tTex2di4) DescriptorSet 0 + Decorate 74(g_tTex2df4) DescriptorSet 0 Decorate 88(g_tTex2di4) Binding 4 - Decorate 99(g_tTex2du4) DescriptorSet 0 + Decorate 88(g_tTex2di4) DescriptorSet 0 Decorate 99(g_tTex2du4) Binding 5 - Decorate 110(g_tTex3df4) DescriptorSet 0 + Decorate 99(g_tTex2du4) DescriptorSet 0 Decorate 110(g_tTex3df4) Binding 6 - Decorate 124(g_tTex3di4) DescriptorSet 0 + Decorate 110(g_tTex3df4) DescriptorSet 0 Decorate 124(g_tTex3di4) Binding 7 - Decorate 135(g_tTex3du4) DescriptorSet 0 + Decorate 124(g_tTex3di4) DescriptorSet 0 Decorate 135(g_tTex3du4) Binding 8 + Decorate 135(g_tTex3du4) DescriptorSet 0 Decorate 159(@entryPointOutput.Color) Location 0 Decorate 163(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 168(g_sSamp) DescriptorSet 0 Decorate 168(g_sSamp) Binding 0 - Decorate 171(g_tTexcdf4) DescriptorSet 0 + Decorate 168(g_sSamp) DescriptorSet 0 Decorate 171(g_tTexcdf4) Binding 0 - Decorate 174(g_tTexcdi4) DescriptorSet 0 + Decorate 171(g_tTexcdf4) DescriptorSet 0 Decorate 174(g_tTexcdi4) Binding 0 - Decorate 177(g_tTexcdu4) DescriptorSet 0 + Decorate 174(g_tTexcdi4) DescriptorSet 0 Decorate 177(g_tTexcdu4) Binding 0 - Decorate 180(g_tTex1df4a) DescriptorSet 0 + Decorate 177(g_tTexcdu4) DescriptorSet 0 Decorate 180(g_tTex1df4a) Binding 0 - Decorate 183(g_tTex1di4a) DescriptorSet 0 + Decorate 180(g_tTex1df4a) DescriptorSet 0 Decorate 183(g_tTex1di4a) Binding 0 - Decorate 186(g_tTex1du4a) DescriptorSet 0 + Decorate 183(g_tTex1di4a) DescriptorSet 0 Decorate 186(g_tTex1du4a) Binding 0 - Decorate 189(g_tTex2df4a) DescriptorSet 0 + Decorate 186(g_tTex1du4a) DescriptorSet 0 Decorate 189(g_tTex2df4a) Binding 0 - Decorate 192(g_tTex2di4a) DescriptorSet 0 + Decorate 189(g_tTex2df4a) DescriptorSet 0 Decorate 192(g_tTex2di4a) Binding 0 - Decorate 195(g_tTex2du4a) DescriptorSet 0 + Decorate 192(g_tTex2di4a) DescriptorSet 0 Decorate 195(g_tTex2du4a) Binding 0 - Decorate 198(g_tTexcdf4a) DescriptorSet 0 + Decorate 195(g_tTex2du4a) DescriptorSet 0 Decorate 198(g_tTexcdf4a) Binding 0 - Decorate 201(g_tTexcdi4a) DescriptorSet 0 + Decorate 198(g_tTexcdf4a) DescriptorSet 0 Decorate 201(g_tTexcdi4a) Binding 0 - Decorate 204(g_tTexcdu4a) DescriptorSet 0 + Decorate 201(g_tTexcdi4a) DescriptorSet 0 Decorate 204(g_tTexcdu4a) Binding 0 + Decorate 204(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out index 04ea482774..0cfd2a879d 100644 --- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out @@ -426,7 +426,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 176 Capability Shader @@ -478,59 +478,59 @@ using depth_any Name 169 "g_tTexcdf4a" Name 172 "g_tTexcdi4a" Name 175 "g_tTexcdu4a" - Decorate 28(g_tTex1df4a) DescriptorSet 0 Decorate 28(g_tTex1df4a) Binding 1 + Decorate 28(g_tTex1df4a) DescriptorSet 0 + Decorate 32($Global) Block MemberDecorate 32($Global) 0 Offset 0 MemberDecorate 32($Global) 1 Offset 8 MemberDecorate 32($Global) 2 Offset 16 MemberDecorate 32($Global) 3 Offset 32 - Decorate 32($Global) Block - Decorate 34 DescriptorSet 0 Decorate 34 Binding 7 - Decorate 49(g_tTex1di4a) DescriptorSet 0 + Decorate 34 DescriptorSet 0 Decorate 49(g_tTex1di4a) Binding 2 - Decorate 60(g_tTex1du4a) DescriptorSet 0 + Decorate 49(g_tTex1di4a) DescriptorSet 0 Decorate 60(g_tTex1du4a) Binding 3 - Decorate 72(g_tTex2df4a) DescriptorSet 0 + Decorate 60(g_tTex1du4a) DescriptorSet 0 Decorate 72(g_tTex2df4a) Binding 4 - Decorate 86(g_tTex2di4a) DescriptorSet 0 + Decorate 72(g_tTex2df4a) DescriptorSet 0 Decorate 86(g_tTex2di4a) Binding 5 - Decorate 97(g_tTex2du4a) DescriptorSet 0 + Decorate 86(g_tTex2di4a) DescriptorSet 0 Decorate 97(g_tTex2du4a) Binding 6 + Decorate 97(g_tTex2du4a) DescriptorSet 0 Decorate 121(@entryPointOutput.Color) Location 0 Decorate 125(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 130(g_sSamp) DescriptorSet 0 Decorate 130(g_sSamp) Binding 0 - Decorate 133(g_tTex1df4) DescriptorSet 0 + Decorate 130(g_sSamp) DescriptorSet 0 Decorate 133(g_tTex1df4) Binding 0 - Decorate 136(g_tTex1di4) DescriptorSet 0 + Decorate 133(g_tTex1df4) DescriptorSet 0 Decorate 136(g_tTex1di4) Binding 0 - Decorate 139(g_tTex1du4) DescriptorSet 0 + Decorate 136(g_tTex1di4) DescriptorSet 0 Decorate 139(g_tTex1du4) Binding 0 - Decorate 142(g_tTex2df4) DescriptorSet 0 + Decorate 139(g_tTex1du4) DescriptorSet 0 Decorate 142(g_tTex2df4) Binding 0 - Decorate 145(g_tTex2di4) DescriptorSet 0 + Decorate 142(g_tTex2df4) DescriptorSet 0 Decorate 145(g_tTex2di4) Binding 0 - Decorate 148(g_tTex2du4) DescriptorSet 0 + Decorate 145(g_tTex2di4) DescriptorSet 0 Decorate 148(g_tTex2du4) Binding 0 - Decorate 151(g_tTex3df4) DescriptorSet 0 + Decorate 148(g_tTex2du4) DescriptorSet 0 Decorate 151(g_tTex3df4) Binding 0 - Decorate 154(g_tTex3di4) DescriptorSet 0 + Decorate 151(g_tTex3df4) DescriptorSet 0 Decorate 154(g_tTex3di4) Binding 0 - Decorate 157(g_tTex3du4) DescriptorSet 0 + Decorate 154(g_tTex3di4) DescriptorSet 0 Decorate 157(g_tTex3du4) Binding 0 - Decorate 160(g_tTexcdf4) DescriptorSet 0 + Decorate 157(g_tTex3du4) DescriptorSet 0 Decorate 160(g_tTexcdf4) Binding 0 - Decorate 163(g_tTexcdi4) DescriptorSet 0 + Decorate 160(g_tTexcdf4) DescriptorSet 0 Decorate 163(g_tTexcdi4) Binding 0 - Decorate 166(g_tTexcdu4) DescriptorSet 0 + Decorate 163(g_tTexcdi4) DescriptorSet 0 Decorate 166(g_tTexcdu4) Binding 0 - Decorate 169(g_tTexcdf4a) DescriptorSet 0 + Decorate 166(g_tTexcdu4) DescriptorSet 0 Decorate 169(g_tTexcdf4a) Binding 0 - Decorate 172(g_tTexcdi4a) DescriptorSet 0 + Decorate 169(g_tTexcdf4a) DescriptorSet 0 Decorate 172(g_tTexcdi4a) Binding 0 - Decorate 175(g_tTexcdu4a) DescriptorSet 0 + Decorate 172(g_tTexcdi4a) DescriptorSet 0 Decorate 175(g_tTexcdu4a) Binding 0 + Decorate 175(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out index 73a854b184..78fbf417e7 100644 --- a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out +++ b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out @@ -110,7 +110,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 57 Capability Shader @@ -139,8 +139,9 @@ gl_FragCoord origin is upper left Name 39 "g_tBuffI" Name 45 "psout" Name 54 "@entryPointOutput.Color" - Decorate 14(g_tBuffF) DescriptorSet 0 Decorate 14(g_tBuffF) Binding 0 + Decorate 14(g_tBuffF) DescriptorSet 0 + Decorate 20($Global) Block MemberDecorate 20($Global) 0 Offset 0 MemberDecorate 20($Global) 1 Offset 8 MemberDecorate 20($Global) 2 Offset 16 @@ -149,13 +150,12 @@ gl_FragCoord origin is upper left MemberDecorate 20($Global) 5 Offset 56 MemberDecorate 20($Global) 6 Offset 64 MemberDecorate 20($Global) 7 Offset 80 - Decorate 20($Global) Block - Decorate 22 DescriptorSet 0 Decorate 22 Binding 3 - Decorate 31(g_tBuffU) DescriptorSet 0 + Decorate 22 DescriptorSet 0 Decorate 31(g_tBuffU) Binding 2 - Decorate 39(g_tBuffI) DescriptorSet 0 + Decorate 31(g_tBuffU) DescriptorSet 0 Decorate 39(g_tBuffI) Binding 1 + Decorate 39(g_tBuffI) DescriptorSet 0 Decorate 54(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out index db105d77f6..e8bf290156 100644 --- a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out +++ b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out @@ -208,7 +208,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 119 Capability Shader @@ -254,8 +254,9 @@ using depth_any Name 112 "g_tTex3df4" Name 115 "g_tTex3di4" Name 118 "g_tTex3du4" - Decorate 14(g_tTex1df4a) DescriptorSet 0 Decorate 14(g_tTex1df4a) Binding 1 + Decorate 14(g_tTex1df4a) DescriptorSet 0 + Decorate 20($Global) Block MemberDecorate 20($Global) 0 Offset 0 MemberDecorate 20($Global) 1 Offset 8 MemberDecorate 20($Global) 2 Offset 16 @@ -264,41 +265,40 @@ using depth_any MemberDecorate 20($Global) 5 Offset 56 MemberDecorate 20($Global) 6 Offset 64 MemberDecorate 20($Global) 7 Offset 80 - Decorate 20($Global) Block - Decorate 22 DescriptorSet 0 Decorate 22 Binding 7 - Decorate 30(g_tTex1di4a) DescriptorSet 0 + Decorate 22 DescriptorSet 0 Decorate 30(g_tTex1di4a) Binding 2 - Decorate 38(g_tTex1du4a) DescriptorSet 0 + Decorate 30(g_tTex1di4a) DescriptorSet 0 Decorate 38(g_tTex1du4a) Binding 3 - Decorate 46(g_tTex2df4a) DescriptorSet 0 + Decorate 38(g_tTex1du4a) DescriptorSet 0 Decorate 46(g_tTex2df4a) Binding 4 - Decorate 55(g_tTex2di4a) DescriptorSet 0 + Decorate 46(g_tTex2df4a) DescriptorSet 0 Decorate 55(g_tTex2di4a) Binding 5 - Decorate 62(g_tTex2du4a) DescriptorSet 0 + Decorate 55(g_tTex2di4a) DescriptorSet 0 Decorate 62(g_tTex2du4a) Binding 6 + Decorate 62(g_tTex2du4a) DescriptorSet 0 Decorate 82(@entryPointOutput.Color) Location 0 Decorate 86(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 91(g_sSamp) DescriptorSet 0 Decorate 91(g_sSamp) Binding 0 - Decorate 94(g_tTex1df4) DescriptorSet 0 + Decorate 91(g_sSamp) DescriptorSet 0 Decorate 94(g_tTex1df4) Binding 0 - Decorate 97(g_tTex1di4) DescriptorSet 0 + Decorate 94(g_tTex1df4) DescriptorSet 0 Decorate 97(g_tTex1di4) Binding 0 - Decorate 100(g_tTex1du4) DescriptorSet 0 + Decorate 97(g_tTex1di4) DescriptorSet 0 Decorate 100(g_tTex1du4) Binding 0 - Decorate 103(g_tTex2df4) DescriptorSet 0 + Decorate 100(g_tTex1du4) DescriptorSet 0 Decorate 103(g_tTex2df4) Binding 0 - Decorate 106(g_tTex2di4) DescriptorSet 0 + Decorate 103(g_tTex2df4) DescriptorSet 0 Decorate 106(g_tTex2di4) Binding 0 - Decorate 109(g_tTex2du4) DescriptorSet 0 + Decorate 106(g_tTex2di4) DescriptorSet 0 Decorate 109(g_tTex2du4) Binding 0 - Decorate 112(g_tTex3df4) DescriptorSet 0 + Decorate 109(g_tTex2du4) DescriptorSet 0 Decorate 112(g_tTex3df4) Binding 0 - Decorate 115(g_tTex3di4) DescriptorSet 0 + Decorate 112(g_tTex3df4) DescriptorSet 0 Decorate 115(g_tTex3di4) Binding 0 - Decorate 118(g_tTex3du4) DescriptorSet 0 + Decorate 115(g_tTex3di4) DescriptorSet 0 Decorate 118(g_tTex3du4) Binding 0 + Decorate 118(g_tTex3du4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out index c063e0c086..d829dda596 100644 --- a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out +++ b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out @@ -244,7 +244,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 132 Capability Shader @@ -290,8 +290,9 @@ using depth_any Name 125 "g_tTex2df4a" Name 128 "g_tTex2di4a" Name 131 "g_tTex2du4a" - Decorate 14(g_tTex1df4) DescriptorSet 0 Decorate 14(g_tTex1df4) Binding 0 + Decorate 14(g_tTex1df4) DescriptorSet 0 + Decorate 20($Global) Block MemberDecorate 20($Global) 0 Offset 0 MemberDecorate 20($Global) 1 Offset 8 MemberDecorate 20($Global) 2 Offset 16 @@ -300,41 +301,40 @@ using depth_any MemberDecorate 20($Global) 5 Offset 56 MemberDecorate 20($Global) 6 Offset 64 MemberDecorate 20($Global) 7 Offset 80 - Decorate 20($Global) Block - Decorate 22 DescriptorSet 0 Decorate 22 Binding 9 - Decorate 30(g_tTex1di4) DescriptorSet 0 + Decorate 22 DescriptorSet 0 Decorate 30(g_tTex1di4) Binding 1 - Decorate 38(g_tTex1du4) DescriptorSet 0 + Decorate 30(g_tTex1di4) DescriptorSet 0 Decorate 38(g_tTex1du4) Binding 2 - Decorate 46(g_tTex2df4) DescriptorSet 0 + Decorate 38(g_tTex1du4) DescriptorSet 0 Decorate 46(g_tTex2df4) Binding 3 - Decorate 55(g_tTex2di4) DescriptorSet 0 + Decorate 46(g_tTex2df4) DescriptorSet 0 Decorate 55(g_tTex2di4) Binding 4 - Decorate 62(g_tTex2du4) DescriptorSet 0 + Decorate 55(g_tTex2di4) DescriptorSet 0 Decorate 62(g_tTex2du4) Binding 5 - Decorate 69(g_tTex3df4) DescriptorSet 0 + Decorate 62(g_tTex2du4) DescriptorSet 0 Decorate 69(g_tTex3df4) Binding 6 - Decorate 78(g_tTex3di4) DescriptorSet 0 + Decorate 69(g_tTex3df4) DescriptorSet 0 Decorate 78(g_tTex3di4) Binding 7 - Decorate 85(g_tTex3du4) DescriptorSet 0 + Decorate 78(g_tTex3di4) DescriptorSet 0 Decorate 85(g_tTex3du4) Binding 8 + Decorate 85(g_tTex3du4) DescriptorSet 0 Decorate 104(@entryPointOutput.Color) Location 0 Decorate 108(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 113(g_sSamp) DescriptorSet 0 Decorate 113(g_sSamp) Binding 0 - Decorate 116(g_tTex1df4a) DescriptorSet 0 + Decorate 113(g_sSamp) DescriptorSet 0 Decorate 116(g_tTex1df4a) Binding 0 - Decorate 119(g_tTex1di4a) DescriptorSet 0 + Decorate 116(g_tTex1df4a) DescriptorSet 0 Decorate 119(g_tTex1di4a) Binding 0 - Decorate 122(g_tTex1du4a) DescriptorSet 0 + Decorate 119(g_tTex1di4a) DescriptorSet 0 Decorate 122(g_tTex1du4a) Binding 0 - Decorate 125(g_tTex2df4a) DescriptorSet 0 + Decorate 122(g_tTex1du4a) DescriptorSet 0 Decorate 125(g_tTex2df4a) Binding 0 - Decorate 128(g_tTex2di4a) DescriptorSet 0 + Decorate 125(g_tTex2df4a) DescriptorSet 0 Decorate 128(g_tTex2di4a) Binding 0 - Decorate 131(g_tTex2du4a) DescriptorSet 0 + Decorate 128(g_tTex2di4a) DescriptorSet 0 Decorate 131(g_tTex2du4a) Binding 0 + Decorate 131(g_tTex2du4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out index d66eb7cd55..97d1de1f60 100644 --- a/Test/baseResults/hlsl.logical.binary.frag.out +++ b/Test/baseResults/hlsl.logical.binary.frag.out @@ -124,7 +124,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 56 Capability Shader @@ -145,13 +145,13 @@ gl_FragCoord origin is upper left Name 16 "" Name 44 "psout" Name 53 "@entryPointOutput.Color" + Decorate 14($Global) Block MemberDecorate 14($Global) 0 Offset 0 MemberDecorate 14($Global) 1 Offset 16 MemberDecorate 14($Global) 2 Offset 32 MemberDecorate 14($Global) 3 Offset 48 - Decorate 14($Global) Block - Decorate 16 DescriptorSet 0 Decorate 16 Binding 0 + Decorate 16 DescriptorSet 0 Decorate 53(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.logical.binary.vec.frag.out b/Test/baseResults/hlsl.logical.binary.vec.frag.out index 20f87b8a6c..04b02d4e4a 100644 --- a/Test/baseResults/hlsl.logical.binary.vec.frag.out +++ b/Test/baseResults/hlsl.logical.binary.vec.frag.out @@ -254,7 +254,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 115 Capability Shader @@ -282,13 +282,13 @@ gl_FragCoord origin is upper left Name 77 "r21" Name 87 "psout" Name 112 "@entryPointOutput.Color" + Decorate 18($Global) Block MemberDecorate 18($Global) 0 Offset 0 MemberDecorate 18($Global) 1 Offset 16 MemberDecorate 18($Global) 2 Offset 32 MemberDecorate 18($Global) 3 Offset 36 - Decorate 18($Global) Block - Decorate 20 DescriptorSet 0 Decorate 20 Binding 0 + Decorate 20 DescriptorSet 0 Decorate 112(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.logical.unary.frag.out b/Test/baseResults/hlsl.logical.unary.frag.out index 711625dc0b..23655d8d13 100644 --- a/Test/baseResults/hlsl.logical.unary.frag.out +++ b/Test/baseResults/hlsl.logical.unary.frag.out @@ -184,7 +184,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 84 Capability Shader @@ -205,13 +205,13 @@ gl_FragCoord origin is upper left Name 16 "" Name 72 "psout" Name 81 "@entryPointOutput.Color" + Decorate 14($Global) Block MemberDecorate 14($Global) 0 Offset 0 MemberDecorate 14($Global) 1 Offset 16 MemberDecorate 14($Global) 2 Offset 32 MemberDecorate 14($Global) 3 Offset 48 - Decorate 14($Global) Block - Decorate 16 DescriptorSet 0 Decorate 16 Binding 0 + Decorate 16 DescriptorSet 0 Decorate 81(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.logicalConvert.frag.out b/Test/baseResults/hlsl.logicalConvert.frag.out index 44e1961d8c..0e7bad1894 100644 --- a/Test/baseResults/hlsl.logicalConvert.frag.out +++ b/Test/baseResults/hlsl.logicalConvert.frag.out @@ -254,7 +254,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader diff --git a/Test/baseResults/hlsl.loopattr.frag.out b/Test/baseResults/hlsl.loopattr.frag.out index ea37109d49..2784dda9a5 100644 --- a/Test/baseResults/hlsl.loopattr.frag.out +++ b/Test/baseResults/hlsl.loopattr.frag.out @@ -136,7 +136,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 54 Capability Shader diff --git a/Test/baseResults/hlsl.matNx1.frag.out b/Test/baseResults/hlsl.matNx1.frag.out index 48a7180be1..91b2ec3993 100644 --- a/Test/baseResults/hlsl.matNx1.frag.out +++ b/Test/baseResults/hlsl.matNx1.frag.out @@ -153,7 +153,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 77 Capability Shader diff --git a/Test/baseResults/hlsl.matType.bool.frag.out b/Test/baseResults/hlsl.matType.bool.frag.out index 500b311c4f..d7d4b7ded1 100644 --- a/Test/baseResults/hlsl.matType.bool.frag.out +++ b/Test/baseResults/hlsl.matType.bool.frag.out @@ -233,7 +233,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 130 Capability Shader diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out index 1117df1df4..47fb02a1a1 100644 --- a/Test/baseResults/hlsl.matType.frag.out +++ b/Test/baseResults/hlsl.matType.frag.out @@ -32,7 +32,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader @@ -54,25 +54,25 @@ Validation failed MemberName 27($Global) 4 "dmat23" MemberName 27($Global) 5 "int44" Name 29 "" + Decorate 27($Global) Block MemberDecorate 27($Global) 0 Offset 0 MemberDecorate 27($Global) 1 RowMajor - MemberDecorate 27($Global) 1 Offset 16 MemberDecorate 27($Global) 1 MatrixStride 16 + MemberDecorate 27($Global) 1 Offset 16 MemberDecorate 27($Global) 2 RowMajor - MemberDecorate 27($Global) 2 Offset 32 MemberDecorate 27($Global) 2 MatrixStride 16 + MemberDecorate 27($Global) 2 Offset 32 MemberDecorate 27($Global) 3 RowMajor - MemberDecorate 27($Global) 3 Offset 48 MemberDecorate 27($Global) 3 MatrixStride 16 + MemberDecorate 27($Global) 3 Offset 48 MemberDecorate 27($Global) 4 RowMajor - MemberDecorate 27($Global) 4 Offset 80 MemberDecorate 27($Global) 4 MatrixStride 16 + MemberDecorate 27($Global) 4 Offset 80 MemberDecorate 27($Global) 5 RowMajor - MemberDecorate 27($Global) 5 Offset 128 MemberDecorate 27($Global) 5 MatrixStride 16 - Decorate 27($Global) Block - Decorate 29 DescriptorSet 0 + MemberDecorate 27($Global) 5 Offset 128 Decorate 29 Binding 0 + Decorate 29 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.matType.int.frag.out b/Test/baseResults/hlsl.matType.int.frag.out index a99bd15ffb..551d41e7a5 100644 --- a/Test/baseResults/hlsl.matType.int.frag.out +++ b/Test/baseResults/hlsl.matType.int.frag.out @@ -399,7 +399,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 232 Capability Shader diff --git a/Test/baseResults/hlsl.matpack-1.frag.out b/Test/baseResults/hlsl.matpack-1.frag.out index c480f780e5..844b08558a 100644 --- a/Test/baseResults/hlsl.matpack-1.frag.out +++ b/Test/baseResults/hlsl.matpack-1.frag.out @@ -100,7 +100,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 39 Capability Shader @@ -126,25 +126,25 @@ gl_FragCoord origin is upper left Name 16 "" Name 37 "@entryPointOutput" MemberDecorate 12(MyBuffer1) 0 RowMajor - MemberDecorate 12(MyBuffer1) 0 Offset 0 MemberDecorate 12(MyBuffer1) 0 MatrixStride 16 + MemberDecorate 12(MyBuffer1) 0 Offset 0 MemberDecorate 12(MyBuffer1) 1 ColMajor - MemberDecorate 12(MyBuffer1) 1 Offset 64 MemberDecorate 12(MyBuffer1) 1 MatrixStride 16 + MemberDecorate 12(MyBuffer1) 1 Offset 64 MemberDecorate 12(MyBuffer1) 2 Offset 128 MemberDecorate 12(MyBuffer1) 3 Offset 144 MemberDecorate 13(MyBuffer2) 0 ColMajor - MemberDecorate 13(MyBuffer2) 0 Offset 0 MemberDecorate 13(MyBuffer2) 0 MatrixStride 16 + MemberDecorate 13(MyBuffer2) 0 Offset 0 MemberDecorate 13(MyBuffer2) 1 Offset 64 + Decorate 14(Example) Block MemberDecorate 14(Example) 0 Offset 0 MemberDecorate 14(Example) 1 Offset 160 MemberDecorate 14(Example) 2 RowMajor - MemberDecorate 14(Example) 2 Offset 240 MemberDecorate 14(Example) 2 MatrixStride 16 - Decorate 14(Example) Block - Decorate 16 DescriptorSet 0 + MemberDecorate 14(Example) 2 Offset 240 Decorate 16 Binding 0 + Decorate 16 DescriptorSet 0 Decorate 37(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.matpack-pragma-global.frag.out b/Test/baseResults/hlsl.matpack-pragma-global.frag.out index 2feef9e925..c64fcb0a3a 100644 --- a/Test/baseResults/hlsl.matpack-pragma-global.frag.out +++ b/Test/baseResults/hlsl.matpack-pragma-global.frag.out @@ -52,7 +52,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 25 Capability Shader @@ -67,12 +67,12 @@ gl_FragCoord origin is upper left MemberName 12($Global) 0 "g_GlobalMat1" Name 14 "" Name 23 "@entryPointOutput" + Decorate 12($Global) Block MemberDecorate 12($Global) 0 ColMajor - MemberDecorate 12($Global) 0 Offset 0 MemberDecorate 12($Global) 0 MatrixStride 16 - Decorate 12($Global) Block - Decorate 14 DescriptorSet 0 + MemberDecorate 12($Global) 0 Offset 0 Decorate 14 Binding 0 + Decorate 14 DescriptorSet 0 Decorate 23(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.matpack-pragma.frag.out b/Test/baseResults/hlsl.matpack-pragma.frag.out index bd5ca50c36..5938a03144 100644 --- a/Test/baseResults/hlsl.matpack-pragma.frag.out +++ b/Test/baseResults/hlsl.matpack-pragma.frag.out @@ -170,7 +170,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 44 Capability Shader @@ -196,31 +196,31 @@ gl_FragCoord origin is upper left Name 16 "" Name 42 "@entryPointOutput" MemberDecorate 12(MyBuffer1) 0 RowMajor - MemberDecorate 12(MyBuffer1) 0 Offset 0 MemberDecorate 12(MyBuffer1) 0 MatrixStride 16 + MemberDecorate 12(MyBuffer1) 0 Offset 0 MemberDecorate 12(MyBuffer1) 1 ColMajor - MemberDecorate 12(MyBuffer1) 1 Offset 64 MemberDecorate 12(MyBuffer1) 1 MatrixStride 16 + MemberDecorate 12(MyBuffer1) 1 Offset 64 MemberDecorate 12(MyBuffer1) 2 ColMajor - MemberDecorate 12(MyBuffer1) 2 Offset 128 MemberDecorate 12(MyBuffer1) 2 MatrixStride 16 + MemberDecorate 12(MyBuffer1) 2 Offset 128 MemberDecorate 13(MyBuffer2) 0 RowMajor - MemberDecorate 13(MyBuffer2) 0 Offset 0 MemberDecorate 13(MyBuffer2) 0 MatrixStride 16 + MemberDecorate 13(MyBuffer2) 0 Offset 0 MemberDecorate 13(MyBuffer2) 1 ColMajor - MemberDecorate 13(MyBuffer2) 1 Offset 64 MemberDecorate 13(MyBuffer2) 1 MatrixStride 16 + MemberDecorate 13(MyBuffer2) 1 Offset 64 MemberDecorate 13(MyBuffer2) 2 RowMajor - MemberDecorate 13(MyBuffer2) 2 Offset 128 MemberDecorate 13(MyBuffer2) 2 MatrixStride 16 + MemberDecorate 13(MyBuffer2) 2 Offset 128 + Decorate 14(Example) Block MemberDecorate 14(Example) 0 Offset 0 MemberDecorate 14(Example) 1 Offset 192 MemberDecorate 14(Example) 2 RowMajor - MemberDecorate 14(Example) 2 Offset 384 MemberDecorate 14(Example) 2 MatrixStride 16 - Decorate 14(Example) Block - Decorate 16 DescriptorSet 0 + MemberDecorate 14(Example) 2 Offset 384 Decorate 16 Binding 0 + Decorate 16 DescriptorSet 0 Decorate 42(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.matrixSwizzle.vert.out b/Test/baseResults/hlsl.matrixSwizzle.vert.out index 4082cb27d2..4b103ac7cd 100644 --- a/Test/baseResults/hlsl.matrixSwizzle.vert.out +++ b/Test/baseResults/hlsl.matrixSwizzle.vert.out @@ -677,7 +677,7 @@ Shader version: 500 Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 118 Capability Shader diff --git a/Test/baseResults/hlsl.matrixindex.frag.out b/Test/baseResults/hlsl.matrixindex.frag.out index fa7a8c0c1d..418bc2f5b5 100644 --- a/Test/baseResults/hlsl.matrixindex.frag.out +++ b/Test/baseResults/hlsl.matrixindex.frag.out @@ -272,7 +272,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 83 Capability Shader @@ -309,13 +309,13 @@ gl_FragCoord origin is upper left Name 63 "r0c" Name 71 "psout" Name 80 "@entryPointOutput.Color" + Decorate 52($Global) Block MemberDecorate 52($Global) 0 Offset 0 MemberDecorate 52($Global) 1 RowMajor - MemberDecorate 52($Global) 1 Offset 16 MemberDecorate 52($Global) 1 MatrixStride 16 - Decorate 52($Global) Block - Decorate 54 DescriptorSet 0 + MemberDecorate 52($Global) 1 Offset 16 Decorate 54 Binding 0 + Decorate 54 DescriptorSet 0 Decorate 80(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.max.frag.out b/Test/baseResults/hlsl.max.frag.out index 7a0c5d2579..058786c4a6 100644 --- a/Test/baseResults/hlsl.max.frag.out +++ b/Test/baseResults/hlsl.max.frag.out @@ -66,7 +66,7 @@ gl_FragCoord origin is upper left 0:? 'input2' (layout( location=1) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 33 Capability Shader diff --git a/Test/baseResults/hlsl.memberFunCall.frag.out b/Test/baseResults/hlsl.memberFunCall.frag.out index 2886f8fb16..7898376c32 100644 --- a/Test/baseResults/hlsl.memberFunCall.frag.out +++ b/Test/baseResults/hlsl.memberFunCall.frag.out @@ -152,7 +152,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 73 Capability Shader diff --git a/Test/baseResults/hlsl.mintypes.frag.out b/Test/baseResults/hlsl.mintypes.frag.out index 013f8d4138..9d0b3c9495 100644 --- a/Test/baseResults/hlsl.mintypes.frag.out +++ b/Test/baseResults/hlsl.mintypes.frag.out @@ -5,33 +5,69 @@ gl_FragCoord origin is upper left 0:9 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) 0:9 Function Parameters: 0:? Sequence -0:40 add ( temp mediump 2-component vector of float) -0:40 'mf16_2' ( temp mediump 2-component vector of float) -0:40 'mf16' ( temp mediump float) -0:41 add ( temp mediump 2-component vector of float) -0:41 'mf10_2' ( temp mediump 2-component vector of float) -0:41 'mf10' ( temp mediump float) -0:42 add ( temp mediump 2-component vector of int) -0:42 'mi16_2' ( temp mediump 2-component vector of int) -0:42 'mi16' ( temp mediump int) -0:43 add ( temp mediump 2-component vector of int) -0:43 'mi12_2' ( temp mediump 2-component vector of int) -0:43 'mi12' ( temp mediump int) -0:44 add ( temp mediump 2-component vector of uint) -0:44 'mu16_2' ( temp mediump 2-component vector of uint) -0:44 'mu16' ( temp mediump uint) -0:47 move second child to first child ( temp 4-component vector of float) -0:47 Color: direct index for structure ( temp 4-component vector of float) -0:47 'psout' ( temp structure{ temp 4-component vector of float Color}) -0:47 Constant: -0:47 0 (const int) -0:47 Constant: -0:47 0.000000 -0:47 0.000000 -0:47 0.000000 -0:47 0.000000 -0:48 Branch: Return with expression -0:48 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:85 add ( temp mediump 2-component vector of float) +0:85 'mf16_2' ( temp mediump 2-component vector of float) +0:85 'mf16' ( temp mediump float) +0:86 add ( temp mediump 2-component vector of float) +0:86 'mf10_2' ( temp mediump 2-component vector of float) +0:86 'mf10' ( temp mediump float) +0:87 add ( temp mediump 2-component vector of int) +0:87 'mi16_2' ( temp mediump 2-component vector of int) +0:87 'mi16' ( temp mediump int) +0:88 add ( temp mediump 2-component vector of int) +0:88 'mi12_2' ( temp mediump 2-component vector of int) +0:88 'mi12' ( temp mediump int) +0:89 add ( temp mediump 2-component vector of uint) +0:89 'mu16_2' ( temp mediump 2-component vector of uint) +0:89 'mu16' ( temp mediump uint) +0:91 matrix-times-vector ( temp mediump 4-component vector of float) +0:91 'mf16_2x4' ( temp mediump 2X4 matrix of float) +0:91 'mf16_2' ( temp mediump 2-component vector of float) +0:92 matrix-times-vector ( temp mediump 4-component vector of float) +0:92 'mf16_3x4' ( temp mediump 3X4 matrix of float) +0:92 'mf16_3' ( temp mediump 3-component vector of float) +0:93 matrix-times-vector ( temp mediump 4-component vector of float) +0:93 'mf16_4x4' ( temp mediump 4X4 matrix of float) +0:93 'mf16_4' ( temp mediump 4-component vector of float) +0:94 vector-times-matrix ( temp mediump 4-component vector of float) +0:94 'mf16_2' ( temp mediump 2-component vector of float) +0:94 'mf16_4x2' ( temp mediump 4X2 matrix of float) +0:95 vector-times-matrix ( temp mediump 4-component vector of float) +0:95 'mf16_3' ( temp mediump 3-component vector of float) +0:95 'mf16_4x3' ( temp mediump 4X3 matrix of float) +0:96 vector-times-matrix ( temp mediump 4-component vector of float) +0:96 'mf16_4' ( temp mediump 4-component vector of float) +0:96 'mf16_4x4' ( temp mediump 4X4 matrix of float) +0:98 matrix-times-vector ( temp mediump 4-component vector of float) +0:98 'mf10_2x4' ( temp mediump 2X4 matrix of float) +0:98 'mf10_2' ( temp mediump 2-component vector of float) +0:99 matrix-times-vector ( temp mediump 4-component vector of float) +0:99 'mf10_3x4' ( temp mediump 3X4 matrix of float) +0:99 'mf10_3' ( temp mediump 3-component vector of float) +0:100 matrix-times-vector ( temp mediump 4-component vector of float) +0:100 'mf10_4x4' ( temp mediump 4X4 matrix of float) +0:100 'mf10_4' ( temp mediump 4-component vector of float) +0:101 vector-times-matrix ( temp mediump 4-component vector of float) +0:101 'mf10_2' ( temp mediump 2-component vector of float) +0:101 'mf10_4x2' ( temp mediump 4X2 matrix of float) +0:102 vector-times-matrix ( temp mediump 4-component vector of float) +0:102 'mf10_3' ( temp mediump 3-component vector of float) +0:102 'mf10_4x3' ( temp mediump 4X3 matrix of float) +0:103 vector-times-matrix ( temp mediump 4-component vector of float) +0:103 'mf10_4' ( temp mediump 4-component vector of float) +0:103 'mf10_4x4' ( temp mediump 4X4 matrix of float) +0:106 move second child to first child ( temp 4-component vector of float) +0:106 Color: direct index for structure ( temp 4-component vector of float) +0:106 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:106 Constant: +0:106 0 (const int) +0:106 Constant: +0:106 0.000000 +0:106 0.000000 +0:106 0.000000 +0:106 0.000000 +0:107 Branch: Return with expression +0:107 'psout' ( temp structure{ temp 4-component vector of float Color}) 0:9 Function Definition: main( ( temp void) 0:9 Function Parameters: 0:? Sequence @@ -56,33 +92,69 @@ gl_FragCoord origin is upper left 0:9 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color}) 0:9 Function Parameters: 0:? Sequence -0:40 add ( temp mediump 2-component vector of float) -0:40 'mf16_2' ( temp mediump 2-component vector of float) -0:40 'mf16' ( temp mediump float) -0:41 add ( temp mediump 2-component vector of float) -0:41 'mf10_2' ( temp mediump 2-component vector of float) -0:41 'mf10' ( temp mediump float) -0:42 add ( temp mediump 2-component vector of int) -0:42 'mi16_2' ( temp mediump 2-component vector of int) -0:42 'mi16' ( temp mediump int) -0:43 add ( temp mediump 2-component vector of int) -0:43 'mi12_2' ( temp mediump 2-component vector of int) -0:43 'mi12' ( temp mediump int) -0:44 add ( temp mediump 2-component vector of uint) -0:44 'mu16_2' ( temp mediump 2-component vector of uint) -0:44 'mu16' ( temp mediump uint) -0:47 move second child to first child ( temp 4-component vector of float) -0:47 Color: direct index for structure ( temp 4-component vector of float) -0:47 'psout' ( temp structure{ temp 4-component vector of float Color}) -0:47 Constant: -0:47 0 (const int) -0:47 Constant: -0:47 0.000000 -0:47 0.000000 -0:47 0.000000 -0:47 0.000000 -0:48 Branch: Return with expression -0:48 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:85 add ( temp mediump 2-component vector of float) +0:85 'mf16_2' ( temp mediump 2-component vector of float) +0:85 'mf16' ( temp mediump float) +0:86 add ( temp mediump 2-component vector of float) +0:86 'mf10_2' ( temp mediump 2-component vector of float) +0:86 'mf10' ( temp mediump float) +0:87 add ( temp mediump 2-component vector of int) +0:87 'mi16_2' ( temp mediump 2-component vector of int) +0:87 'mi16' ( temp mediump int) +0:88 add ( temp mediump 2-component vector of int) +0:88 'mi12_2' ( temp mediump 2-component vector of int) +0:88 'mi12' ( temp mediump int) +0:89 add ( temp mediump 2-component vector of uint) +0:89 'mu16_2' ( temp mediump 2-component vector of uint) +0:89 'mu16' ( temp mediump uint) +0:91 matrix-times-vector ( temp mediump 4-component vector of float) +0:91 'mf16_2x4' ( temp mediump 2X4 matrix of float) +0:91 'mf16_2' ( temp mediump 2-component vector of float) +0:92 matrix-times-vector ( temp mediump 4-component vector of float) +0:92 'mf16_3x4' ( temp mediump 3X4 matrix of float) +0:92 'mf16_3' ( temp mediump 3-component vector of float) +0:93 matrix-times-vector ( temp mediump 4-component vector of float) +0:93 'mf16_4x4' ( temp mediump 4X4 matrix of float) +0:93 'mf16_4' ( temp mediump 4-component vector of float) +0:94 vector-times-matrix ( temp mediump 4-component vector of float) +0:94 'mf16_2' ( temp mediump 2-component vector of float) +0:94 'mf16_4x2' ( temp mediump 4X2 matrix of float) +0:95 vector-times-matrix ( temp mediump 4-component vector of float) +0:95 'mf16_3' ( temp mediump 3-component vector of float) +0:95 'mf16_4x3' ( temp mediump 4X3 matrix of float) +0:96 vector-times-matrix ( temp mediump 4-component vector of float) +0:96 'mf16_4' ( temp mediump 4-component vector of float) +0:96 'mf16_4x4' ( temp mediump 4X4 matrix of float) +0:98 matrix-times-vector ( temp mediump 4-component vector of float) +0:98 'mf10_2x4' ( temp mediump 2X4 matrix of float) +0:98 'mf10_2' ( temp mediump 2-component vector of float) +0:99 matrix-times-vector ( temp mediump 4-component vector of float) +0:99 'mf10_3x4' ( temp mediump 3X4 matrix of float) +0:99 'mf10_3' ( temp mediump 3-component vector of float) +0:100 matrix-times-vector ( temp mediump 4-component vector of float) +0:100 'mf10_4x4' ( temp mediump 4X4 matrix of float) +0:100 'mf10_4' ( temp mediump 4-component vector of float) +0:101 vector-times-matrix ( temp mediump 4-component vector of float) +0:101 'mf10_2' ( temp mediump 2-component vector of float) +0:101 'mf10_4x2' ( temp mediump 4X2 matrix of float) +0:102 vector-times-matrix ( temp mediump 4-component vector of float) +0:102 'mf10_3' ( temp mediump 3-component vector of float) +0:102 'mf10_4x3' ( temp mediump 4X3 matrix of float) +0:103 vector-times-matrix ( temp mediump 4-component vector of float) +0:103 'mf10_4' ( temp mediump 4-component vector of float) +0:103 'mf10_4x4' ( temp mediump 4X4 matrix of float) +0:106 move second child to first child ( temp 4-component vector of float) +0:106 Color: direct index for structure ( temp 4-component vector of float) +0:106 'psout' ( temp structure{ temp 4-component vector of float Color}) +0:106 Constant: +0:106 0 (const int) +0:106 Constant: +0:106 0.000000 +0:106 0.000000 +0:106 0.000000 +0:106 0.000000 +0:107 Branch: Return with expression +0:107 'psout' ( temp structure{ temp 4-component vector of float Color}) 0:9 Function Definition: main( ( temp void) 0:9 Function Parameters: 0:? Sequence @@ -98,13 +170,13 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 70 +// Generated by (magic number): 8000b +// Id's are bound by 132 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 64 + EntryPoint Fragment 4 "main" 126 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" @@ -121,12 +193,26 @@ gl_FragCoord origin is upper left Name 39 "mi12" Name 46 "mu16_2" Name 49 "mu16" - Name 54 "psout" - Name 64 "@entryPointOutput.Color" - Name 67 "$Global" - MemberName 67($Global) 0 "b1a" - MemberName 67($Global) 1 "b1b" - Name 69 "" + Name 55 "mf16_2x4" + Name 61 "mf16_3x4" + Name 65 "mf16_3" + Name 70 "mf16_4x4" + Name 73 "mf16_4" + Name 79 "mf16_4x2" + Name 85 "mf16_4x3" + Name 91 "mf10_2x4" + Name 95 "mf10_3x4" + Name 97 "mf10_3" + Name 100 "mf10_4x4" + Name 102 "mf10_4" + Name 106 "mf10_4x2" + Name 110 "mf10_4x3" + Name 117 "psout" + Name 126 "@entryPointOutput.Color" + Name 129 "$Global" + MemberName 129($Global) 0 "b1a" + MemberName 129($Global) 1 "b1b" + Name 131 "" Decorate 14(mf16_2) RelaxedPrecision Decorate 15 RelaxedPrecision Decorate 17(mf16) RelaxedPrecision @@ -157,14 +243,64 @@ gl_FragCoord origin is upper left Decorate 50 RelaxedPrecision Decorate 51 RelaxedPrecision Decorate 52 RelaxedPrecision - Decorate 64(@entryPointOutput.Color) Location 0 - MemberDecorate 67($Global) 0 RelaxedPrecision - MemberDecorate 67($Global) 0 Offset 0 - MemberDecorate 67($Global) 1 RelaxedPrecision - MemberDecorate 67($Global) 1 Offset 4 - Decorate 67($Global) Block - Decorate 69 DescriptorSet 0 - Decorate 69 Binding 0 + Decorate 55(mf16_2x4) RelaxedPrecision + Decorate 56 RelaxedPrecision + Decorate 57 RelaxedPrecision + Decorate 58 RelaxedPrecision + Decorate 61(mf16_3x4) RelaxedPrecision + Decorate 62 RelaxedPrecision + Decorate 65(mf16_3) RelaxedPrecision + Decorate 66 RelaxedPrecision + Decorate 67 RelaxedPrecision + Decorate 70(mf16_4x4) RelaxedPrecision + Decorate 71 RelaxedPrecision + Decorate 73(mf16_4) RelaxedPrecision + Decorate 74 RelaxedPrecision + Decorate 75 RelaxedPrecision + Decorate 76 RelaxedPrecision + Decorate 79(mf16_4x2) RelaxedPrecision + Decorate 80 RelaxedPrecision + Decorate 81 RelaxedPrecision + Decorate 82 RelaxedPrecision + Decorate 85(mf16_4x3) RelaxedPrecision + Decorate 86 RelaxedPrecision + Decorate 87 RelaxedPrecision + Decorate 88 RelaxedPrecision + Decorate 89 RelaxedPrecision + Decorate 90 RelaxedPrecision + Decorate 91(mf10_2x4) RelaxedPrecision + Decorate 92 RelaxedPrecision + Decorate 93 RelaxedPrecision + Decorate 94 RelaxedPrecision + Decorate 95(mf10_3x4) RelaxedPrecision + Decorate 96 RelaxedPrecision + Decorate 97(mf10_3) RelaxedPrecision + Decorate 98 RelaxedPrecision + Decorate 99 RelaxedPrecision + Decorate 100(mf10_4x4) RelaxedPrecision + Decorate 101 RelaxedPrecision + Decorate 102(mf10_4) RelaxedPrecision + Decorate 103 RelaxedPrecision + Decorate 104 RelaxedPrecision + Decorate 105 RelaxedPrecision + Decorate 106(mf10_4x2) RelaxedPrecision + Decorate 107 RelaxedPrecision + Decorate 108 RelaxedPrecision + Decorate 109 RelaxedPrecision + Decorate 110(mf10_4x3) RelaxedPrecision + Decorate 111 RelaxedPrecision + Decorate 112 RelaxedPrecision + Decorate 113 RelaxedPrecision + Decorate 114 RelaxedPrecision + Decorate 115 RelaxedPrecision + Decorate 126(@entryPointOutput.Color) Location 0 + Decorate 129($Global) Block + MemberDecorate 129($Global) 0 RelaxedPrecision + MemberDecorate 129($Global) 0 Offset 0 + MemberDecorate 129($Global) 1 RelaxedPrecision + MemberDecorate 129($Global) 1 Offset 4 + Decorate 131 Binding 0 + Decorate 131 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -182,21 +318,33 @@ gl_FragCoord origin is upper left 44: TypeVector 43(int) 2 45: TypePointer Function 44(ivec2) 48: TypePointer Function 43(int) - 53: TypePointer Function 8(PS_OUTPUT) - 55: 27(int) Constant 0 - 56: 6(float) Constant 0 - 57: 7(fvec4) ConstantComposite 56 56 56 56 - 58: TypePointer Function 7(fvec4) - 63: TypePointer Output 7(fvec4) -64(@entryPointOutput.Color): 63(ptr) Variable Output - 67($Global): TypeStruct 6(float) 6(float) - 68: TypePointer Uniform 67($Global) - 69: 68(ptr) Variable Uniform + 53: TypeMatrix 7(fvec4) 2 + 54: TypePointer Function 53 + 59: TypeMatrix 7(fvec4) 3 + 60: TypePointer Function 59 + 63: TypeVector 6(float) 3 + 64: TypePointer Function 63(fvec3) + 68: TypeMatrix 7(fvec4) 4 + 69: TypePointer Function 68 + 72: TypePointer Function 7(fvec4) + 77: TypeMatrix 12(fvec2) 4 + 78: TypePointer Function 77 + 83: TypeMatrix 63(fvec3) 4 + 84: TypePointer Function 83 + 116: TypePointer Function 8(PS_OUTPUT) + 118: 27(int) Constant 0 + 119: 6(float) Constant 0 + 120: 7(fvec4) ConstantComposite 119 119 119 119 + 125: TypePointer Output 7(fvec4) +126(@entryPointOutput.Color): 125(ptr) Variable Output + 129($Global): TypeStruct 6(float) 6(float) + 130: TypePointer Uniform 129($Global) + 131: 130(ptr) Variable Uniform 4(main): 2 Function None 3 5: Label - 65:8(PS_OUTPUT) FunctionCall 10(@main() - 66: 7(fvec4) CompositeExtract 65 0 - Store 64(@entryPointOutput.Color) 66 + 127:8(PS_OUTPUT) FunctionCall 10(@main() + 128: 7(fvec4) CompositeExtract 127 0 + Store 126(@entryPointOutput.Color) 128 Return FunctionEnd 10(@main():8(PS_OUTPUT) Function None 9 @@ -211,7 +359,21 @@ gl_FragCoord origin is upper left 39(mi12): 32(ptr) Variable Function 46(mu16_2): 45(ptr) Variable Function 49(mu16): 48(ptr) Variable Function - 54(psout): 53(ptr) Variable Function + 55(mf16_2x4): 54(ptr) Variable Function + 61(mf16_3x4): 60(ptr) Variable Function + 65(mf16_3): 64(ptr) Variable Function + 70(mf16_4x4): 69(ptr) Variable Function + 73(mf16_4): 72(ptr) Variable Function + 79(mf16_4x2): 78(ptr) Variable Function + 85(mf16_4x3): 84(ptr) Variable Function + 91(mf10_2x4): 54(ptr) Variable Function + 95(mf10_3x4): 60(ptr) Variable Function + 97(mf10_3): 64(ptr) Variable Function + 100(mf10_4x4): 69(ptr) Variable Function + 102(mf10_4): 72(ptr) Variable Function + 106(mf10_4x2): 78(ptr) Variable Function + 110(mf10_4x3): 84(ptr) Variable Function + 117(psout): 116(ptr) Variable Function 15: 12(fvec2) Load 14(mf16_2) 18: 6(float) Load 17(mf16) 19: 12(fvec2) CompositeConstruct 18 18 @@ -232,8 +394,44 @@ gl_FragCoord origin is upper left 50: 43(int) Load 49(mu16) 51: 44(ivec2) CompositeConstruct 50 50 52: 44(ivec2) IAdd 47 51 - 59: 58(ptr) AccessChain 54(psout) 55 - Store 59 57 - 60:8(PS_OUTPUT) Load 54(psout) - ReturnValue 60 + 56: 53 Load 55(mf16_2x4) + 57: 12(fvec2) Load 14(mf16_2) + 58: 7(fvec4) MatrixTimesVector 56 57 + 62: 59 Load 61(mf16_3x4) + 66: 63(fvec3) Load 65(mf16_3) + 67: 7(fvec4) MatrixTimesVector 62 66 + 71: 68 Load 70(mf16_4x4) + 74: 7(fvec4) Load 73(mf16_4) + 75: 7(fvec4) MatrixTimesVector 71 74 + 76: 12(fvec2) Load 14(mf16_2) + 80: 77 Load 79(mf16_4x2) + 81: 7(fvec4) VectorTimesMatrix 76 80 + 82: 63(fvec3) Load 65(mf16_3) + 86: 83 Load 85(mf16_4x3) + 87: 7(fvec4) VectorTimesMatrix 82 86 + 88: 7(fvec4) Load 73(mf16_4) + 89: 68 Load 70(mf16_4x4) + 90: 7(fvec4) VectorTimesMatrix 88 89 + 92: 53 Load 91(mf10_2x4) + 93: 12(fvec2) Load 21(mf10_2) + 94: 7(fvec4) MatrixTimesVector 92 93 + 96: 59 Load 95(mf10_3x4) + 98: 63(fvec3) Load 97(mf10_3) + 99: 7(fvec4) MatrixTimesVector 96 98 + 101: 68 Load 100(mf10_4x4) + 103: 7(fvec4) Load 102(mf10_4) + 104: 7(fvec4) MatrixTimesVector 101 103 + 105: 12(fvec2) Load 21(mf10_2) + 107: 77 Load 106(mf10_4x2) + 108: 7(fvec4) VectorTimesMatrix 105 107 + 109: 63(fvec3) Load 97(mf10_3) + 111: 83 Load 110(mf10_4x3) + 112: 7(fvec4) VectorTimesMatrix 109 111 + 113: 7(fvec4) Load 102(mf10_4) + 114: 68 Load 100(mf10_4x4) + 115: 7(fvec4) VectorTimesMatrix 113 114 + 121: 72(ptr) AccessChain 117(psout) 118 + Store 121 120 + 122:8(PS_OUTPUT) Load 117(psout) + ReturnValue 122 FunctionEnd diff --git a/Test/baseResults/hlsl.mip.operator.frag.out b/Test/baseResults/hlsl.mip.operator.frag.out index 48e563ca96..c69cf8dfd3 100644 --- a/Test/baseResults/hlsl.mip.operator.frag.out +++ b/Test/baseResults/hlsl.mip.operator.frag.out @@ -128,7 +128,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 61 Capability Shader @@ -142,10 +142,10 @@ gl_FragCoord origin is upper left Name 13 "g_tTex2df4" Name 25 "g_tTex2df4a" Name 59 "@entryPointOutput" - Decorate 13(g_tTex2df4) DescriptorSet 0 Decorate 13(g_tTex2df4) Binding 1 - Decorate 25(g_tTex2df4a) DescriptorSet 0 + Decorate 13(g_tTex2df4) DescriptorSet 0 Decorate 25(g_tTex2df4a) Binding 0 + Decorate 25(g_tTex2df4a) DescriptorSet 0 Decorate 59(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.mul-truncate.frag.out b/Test/baseResults/hlsl.mul-truncate.frag.out index 25e7b2ea7a..c736d25f72 100644 --- a/Test/baseResults/hlsl.mul-truncate.frag.out +++ b/Test/baseResults/hlsl.mul-truncate.frag.out @@ -383,7 +383,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 190 Capability Shader @@ -416,30 +416,30 @@ gl_FragCoord origin is upper left Name 133 "r32" Name 146 "r33" Name 188 "@entryPointOutput" + Decorate 21(Matrix) Block MemberDecorate 21(Matrix) 0 RowMajor - MemberDecorate 21(Matrix) 0 Offset 0 MemberDecorate 21(Matrix) 0 MatrixStride 16 + MemberDecorate 21(Matrix) 0 Offset 0 MemberDecorate 21(Matrix) 1 RowMajor - MemberDecorate 21(Matrix) 1 Offset 64 MemberDecorate 21(Matrix) 1 MatrixStride 16 + MemberDecorate 21(Matrix) 1 Offset 64 MemberDecorate 21(Matrix) 2 RowMajor - MemberDecorate 21(Matrix) 2 Offset 112 MemberDecorate 21(Matrix) 2 MatrixStride 16 + MemberDecorate 21(Matrix) 2 Offset 112 MemberDecorate 21(Matrix) 3 RowMajor - MemberDecorate 21(Matrix) 3 Offset 176 MemberDecorate 21(Matrix) 3 MatrixStride 16 + MemberDecorate 21(Matrix) 3 Offset 176 MemberDecorate 21(Matrix) 4 RowMajor - MemberDecorate 21(Matrix) 4 Offset 224 MemberDecorate 21(Matrix) 4 MatrixStride 16 + MemberDecorate 21(Matrix) 4 Offset 224 MemberDecorate 21(Matrix) 5 RowMajor - MemberDecorate 21(Matrix) 5 Offset 288 MemberDecorate 21(Matrix) 5 MatrixStride 16 + MemberDecorate 21(Matrix) 5 Offset 288 MemberDecorate 21(Matrix) 6 Offset 320 MemberDecorate 21(Matrix) 7 Offset 336 MemberDecorate 21(Matrix) 8 Offset 352 - Decorate 21(Matrix) Block - Decorate 23 DescriptorSet 0 Decorate 23 Binding 0 + Decorate 23 DescriptorSet 0 Decorate 188(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.multiDescriptorSet.frag.out b/Test/baseResults/hlsl.multiDescriptorSet.frag.out index cfe3ea8d79..bf0b7b135b 100644 --- a/Test/baseResults/hlsl.multiDescriptorSet.frag.out +++ b/Test/baseResults/hlsl.multiDescriptorSet.frag.out @@ -1,6 +1,6 @@ hlsl.multiDescriptorSet.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 92 Capability Shader @@ -35,36 +35,36 @@ hlsl.multiDescriptorSet.frag Name 87 "param" Name 90 "txDiffuseB" Name 91 "samLinearB" + Decorate 23(cbChangesEveryFrame) Block MemberDecorate 23(cbChangesEveryFrame) 0 RowMajor - MemberDecorate 23(cbChangesEveryFrame) 0 Offset 0 MemberDecorate 23(cbChangesEveryFrame) 0 MatrixStride 16 + MemberDecorate 23(cbChangesEveryFrame) 0 Offset 0 MemberDecorate 23(cbChangesEveryFrame) 1 Offset 64 - Decorate 23(cbChangesEveryFrame) Block - Decorate 25 DescriptorSet 2 Decorate 25 Binding 2 + Decorate 25 DescriptorSet 2 + Decorate 34(cbNeverChanges) Block MemberDecorate 34(cbNeverChanges) 0 RowMajor - MemberDecorate 34(cbNeverChanges) 0 Offset 0 MemberDecorate 34(cbNeverChanges) 0 MatrixStride 16 - Decorate 34(cbNeverChanges) Block - Decorate 36 DescriptorSet 2 + MemberDecorate 34(cbNeverChanges) 0 Offset 0 Decorate 36 Binding 0 + Decorate 36 DescriptorSet 2 + Decorate 43(cbChangeOnResize) Block MemberDecorate 43(cbChangeOnResize) 0 RowMajor - MemberDecorate 43(cbChangeOnResize) 0 Offset 0 MemberDecorate 43(cbChangeOnResize) 0 MatrixStride 16 - Decorate 43(cbChangeOnResize) Block - Decorate 45 DescriptorSet 2 + MemberDecorate 43(cbChangeOnResize) 0 Offset 0 Decorate 45 Binding 1 - Decorate 59(txDiffuseA) DescriptorSet 0 + Decorate 45 DescriptorSet 2 Decorate 59(txDiffuseA) Binding 0 - Decorate 63(samLinearA) DescriptorSet 0 + Decorate 59(txDiffuseA) DescriptorSet 0 Decorate 63(samLinearA) Binding 1 + Decorate 63(samLinearA) DescriptorSet 0 Decorate 78(input.Pos) BuiltIn FragCoord Decorate 82(input.Tex) Location 0 Decorate 86(@entryPointOutput) Location 0 - Decorate 90(txDiffuseB) DescriptorSet 1 Decorate 90(txDiffuseB) Binding 0 - Decorate 91(samLinearB) DescriptorSet 1 + Decorate 90(txDiffuseB) DescriptorSet 1 Decorate 91(samLinearB) Binding 1 + Decorate 91(samLinearB) DescriptorSet 1 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.multiEntry.vert.out b/Test/baseResults/hlsl.multiEntry.vert.out index fcb9f18f49..3bf8d79c97 100644 --- a/Test/baseResults/hlsl.multiEntry.vert.out +++ b/Test/baseResults/hlsl.multiEntry.vert.out @@ -70,7 +70,7 @@ Shader version: 500 0:? 'Index' ( in uint VertexIndex) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 41 Capability Shader @@ -90,8 +90,8 @@ Shader version: 500 Name 34 "Index" Name 37 "@entryPointOutput" Name 38 "param" - Decorate 19(Position) DescriptorSet 0 Decorate 19(Position) Binding 0 + Decorate 19(Position) DescriptorSet 0 Decorate 34(Index) BuiltIn VertexIndex Decorate 37(@entryPointOutput) BuiltIn Position 2: TypeVoid diff --git a/Test/baseResults/hlsl.multiReturn.frag.out b/Test/baseResults/hlsl.multiReturn.frag.out index 937986344a..38df9f05aa 100644 --- a/Test/baseResults/hlsl.multiReturn.frag.out +++ b/Test/baseResults/hlsl.multiReturn.frag.out @@ -48,7 +48,7 @@ gl_FragCoord origin is upper left 0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{ temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m} s}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 42 Capability Shader @@ -74,12 +74,12 @@ gl_FragCoord origin is upper left MemberDecorate 15(S) 0 Offset 0 MemberDecorate 15(S) 1 Offset 4 MemberDecorate 15(S) 2 RowMajor - MemberDecorate 15(S) 2 Offset 16 MemberDecorate 15(S) 2 MatrixStride 16 - MemberDecorate 16(bufName) 0 Offset 0 + MemberDecorate 15(S) 2 Offset 16 Decorate 16(bufName) Block - Decorate 18 DescriptorSet 0 + MemberDecorate 16(bufName) 0 Offset 0 Decorate 18 Binding 0 + Decorate 18 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.multiView.frag.out b/Test/baseResults/hlsl.multiView.frag.out new file mode 100644 index 0000000000..95c93444da --- /dev/null +++ b/Test/baseResults/hlsl.multiView.frag.out @@ -0,0 +1,121 @@ +hlsl.multiView.frag +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: @main(u1; ( temp 4-component vector of float) +0:3 Function Parameters: +0:3 'ViewIndex' ( in uint) +0:? Sequence +0:4 Branch: Return with expression +0:4 Construct vec4 ( temp 4-component vector of float) +0:4 Convert uint to float ( temp float) +0:4 'ViewIndex' ( in uint) +0:4 Constant: +0:4 0.000000 +0:4 Constant: +0:4 0.000000 +0:4 Constant: +0:4 0.000000 +0:3 Function Definition: main( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:3 move second child to first child ( temp uint) +0:? 'ViewIndex' ( temp uint) +0:? 'ViewIndex' ( flat in uint ViewIndex) +0:3 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:3 Function Call: @main(u1; ( temp 4-component vector of float) +0:? 'ViewIndex' ( temp uint) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'ViewIndex' ( flat in uint ViewIndex) + + +Linked fragment stage: + + +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:3 Function Definition: @main(u1; ( temp 4-component vector of float) +0:3 Function Parameters: +0:3 'ViewIndex' ( in uint) +0:? Sequence +0:4 Branch: Return with expression +0:4 Construct vec4 ( temp 4-component vector of float) +0:4 Convert uint to float ( temp float) +0:4 'ViewIndex' ( in uint) +0:4 Constant: +0:4 0.000000 +0:4 Constant: +0:4 0.000000 +0:4 Constant: +0:4 0.000000 +0:3 Function Definition: main( ( temp void) +0:3 Function Parameters: +0:? Sequence +0:3 move second child to first child ( temp uint) +0:? 'ViewIndex' ( temp uint) +0:? 'ViewIndex' ( flat in uint ViewIndex) +0:3 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:3 Function Call: @main(u1; ( temp 4-component vector of float) +0:? 'ViewIndex' ( temp uint) +0:? Linker Objects +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'ViewIndex' ( flat in uint ViewIndex) + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 29 + + Capability Shader + Capability MultiView + Extension "SPV_KHR_multiview" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 22 25 + ExecutionMode 4 OriginUpperLeft + Source HLSL 500 + Name 4 "main" + Name 12 "@main(u1;" + Name 11 "ViewIndex" + Name 20 "ViewIndex" + Name 22 "ViewIndex" + Name 25 "@entryPointOutput" + Name 26 "param" + Decorate 22(ViewIndex) BuiltIn ViewIndex + Decorate 22(ViewIndex) Flat + Decorate 25(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10: TypeFunction 9(fvec4) 7(ptr) + 16: 8(float) Constant 0 + 21: TypePointer Input 6(int) + 22(ViewIndex): 21(ptr) Variable Input + 24: TypePointer Output 9(fvec4) +25(@entryPointOutput): 24(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 20(ViewIndex): 7(ptr) Variable Function + 26(param): 7(ptr) Variable Function + 23: 6(int) Load 22(ViewIndex) + Store 20(ViewIndex) 23 + 27: 6(int) Load 20(ViewIndex) + Store 26(param) 27 + 28: 9(fvec4) FunctionCall 12(@main(u1;) 26(param) + Store 25(@entryPointOutput) 28 + Return + FunctionEnd + 12(@main(u1;): 9(fvec4) Function None 10 + 11(ViewIndex): 7(ptr) FunctionParameter + 13: Label + 14: 6(int) Load 11(ViewIndex) + 15: 8(float) ConvertUToF 14 + 17: 9(fvec4) CompositeConstruct 15 16 16 16 + ReturnValue 17 + FunctionEnd diff --git a/Test/baseResults/hlsl.namespace.frag.out b/Test/baseResults/hlsl.namespace.frag.out index 5346c44a06..c01089a88f 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 +// Generated by (magic number): 8000b +// 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.nested-runtimeArray.frag.out b/Test/baseResults/hlsl.nested-runtimeArray.frag.out new file mode 100644 index 0000000000..c80ea85069 --- /dev/null +++ b/Test/baseResults/hlsl.nested-runtimeArray.frag.out @@ -0,0 +1,119 @@ +hlsl.nested-runtimeArray.frag +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: @main( ( temp float) +0:7 Function Parameters: +0:? Sequence +0:8 Branch: Return with expression +0:8 direct index ( temp float) +0:8 a: direct index for structure ( temp unsized 1-element array of float) +0:8 direct index (layout( row_major std430) buffer structure{ temp unsized 1-element array of float a}) +0:8 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a}) +0:8 'B' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a} @data}) +0:8 Constant: +0:8 0 (const uint) +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 0 (const int) +0:7 Function Definition: main( ( temp void) +0:7 Function Parameters: +0:? Sequence +0:7 move second child to first child ( temp float) +0:? '@entryPointOutput' (layout( location=0) out float) +0:7 Function Call: @main( ( temp float) +0:? Linker Objects +0:? 'B' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a} @data}) +0:? '@entryPointOutput' (layout( location=0) out float) + + +Linked fragment stage: + + +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: @main( ( temp float) +0:7 Function Parameters: +0:? Sequence +0:8 Branch: Return with expression +0:8 direct index ( temp float) +0:8 a: direct index for structure ( temp unsized 1-element array of float) +0:8 direct index (layout( row_major std430) buffer structure{ temp unsized 1-element array of float a}) +0:8 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a}) +0:8 'B' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a} @data}) +0:8 Constant: +0:8 0 (const uint) +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 0 (const int) +0:7 Function Definition: main( ( temp void) +0:7 Function Parameters: +0:? Sequence +0:7 move second child to first child ( temp float) +0:? '@entryPointOutput' (layout( location=0) out float) +0:7 Function Call: @main( ( temp float) +0:? Linker Objects +0:? 'B' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a} @data}) +0:? '@entryPointOutput' (layout( location=0) out float) + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 26 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 24 + ExecutionMode 4 OriginUpperLeft + Source HLSL 500 + Name 4 "main" + Name 8 "@main(" + Name 11 "A" + MemberName 11(A) 0 "a" + Name 13 "B" + MemberName 13(B) 0 "@data" + Name 15 "B" + Name 24 "@entryPointOutput" + Decorate 10 ArrayStride 4 + Decorate 11(A) BufferBlock + MemberDecorate 11(A) 0 Offset 0 + Decorate 12 ArrayStride 4 + Decorate 13(B) BufferBlock + MemberDecorate 13(B) 0 Offset 0 + Decorate 15(B) Binding 0 + Decorate 15(B) DescriptorSet 0 + Decorate 24(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeFunction 6(float) + 10: TypeRuntimeArray 6(float) + 11(A): TypeStruct 10 + 12: TypeRuntimeArray 11(A) + 13(B): TypeStruct 12 + 14: TypePointer Uniform 13(B) + 15(B): 14(ptr) Variable Uniform + 16: TypeInt 32 1 + 17: 16(int) Constant 0 + 18: TypePointer Uniform 6(float) + 23: TypePointer Output 6(float) +24(@entryPointOutput): 23(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 25: 6(float) FunctionCall 8(@main() + Store 24(@entryPointOutput) 25 + Return + FunctionEnd + 8(@main(): 6(float) Function None 7 + 9: Label + 19: 18(ptr) AccessChain 15(B) 17 17 17 17 + 20: 6(float) Load 19 + ReturnValue 20 + FunctionEnd diff --git a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out index 3531a3472a..ab02db0e84 100644 --- a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out +++ b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out @@ -1,6 +1,6 @@ hlsl.noSemantic.functionality1.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader @@ -19,15 +19,15 @@ hlsl.noSemantic.functionality1.comp MemberName 17(Buf@count) 0 "@count" Name 19 "Buf@count" Decorate 10 ArrayStride 16 - MemberDecorate 11(Buf) 0 Offset 0 Decorate 11(Buf) BufferBlock - Decorate 13(Buf) DescriptorSet 0 + MemberDecorate 11(Buf) 0 Offset 0 Decorate 13(Buf) Binding 0 - MemberDecorate 17(Buf@count) 0 Offset 0 + Decorate 13(Buf) DescriptorSet 0 + DecorateId 13(Buf) DecorationHlslCounterBufferGOOGLE 19(Buf@count) Decorate 17(Buf@count) BufferBlock - Decorate 19(Buf@count) DescriptorSet 0 + MemberDecorate 17(Buf@count) 0 Offset 0 Decorate 19(Buf@count) Binding 0 - DecorateId 13(Buf) DecorationHlslCounterBufferGOOGLE 19(Buf@count) + Decorate 19(Buf@count) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 8: TypeFloat 32 diff --git a/Test/baseResults/hlsl.nonint-index.frag.out b/Test/baseResults/hlsl.nonint-index.frag.out index 897f8bc3c7..71502ee155 100644 --- a/Test/baseResults/hlsl.nonint-index.frag.out +++ b/Test/baseResults/hlsl.nonint-index.frag.out @@ -88,7 +88,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 39 Capability Shader diff --git a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out index 5a485c67dd..3cbae1eea4 100644 --- a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out +++ b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out @@ -268,7 +268,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 111 Capability Shader diff --git a/Test/baseResults/hlsl.numericsuffixes.frag.out b/Test/baseResults/hlsl.numericsuffixes.frag.out index 1725d3f279..05be42305b 100644 --- a/Test/baseResults/hlsl.numericsuffixes.frag.out +++ b/Test/baseResults/hlsl.numericsuffixes.frag.out @@ -2,94 +2,124 @@ hlsl.numericsuffixes.frag Shader version: 500 gl_FragCoord origin is upper left 0:? Sequence -0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) -0:5 Function Parameters: +0:8 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:8 Function Parameters: 0:? Sequence -0:7 Sequence -0:7 move second child to first child ( temp float) -0:7 'r00' ( temp float) -0:7 Constant: -0:7 1.000000 -0:8 Sequence -0:8 move second child to first child ( temp uint) -0:8 'r01' ( temp uint) -0:8 Constant: -0:8 1 (const uint) -0:9 Sequence -0:9 move second child to first child ( temp uint) -0:9 'r02' ( temp uint) -0:9 Constant: -0:9 2 (const uint) 0:10 Sequence -0:10 move second child to first child ( temp uint) -0:10 'r03' ( temp uint) +0:10 move second child to first child ( temp float) +0:10 'r00' ( temp float) 0:10 Constant: -0:10 2748 (const uint) +0:10 1.000000 0:11 Sequence 0:11 move second child to first child ( temp uint) -0:11 'r04' ( temp uint) +0:11 'r01' ( temp uint) 0:11 Constant: -0:11 2748 (const uint) +0:11 1 (const uint) 0:12 Sequence -0:12 move second child to first child ( temp int) -0:12 'r05' ( temp int) +0:12 move second child to first child ( temp uint) +0:12 'r02' ( temp uint) 0:12 Constant: -0:12 5 (const int) +0:12 2 (const uint) 0:13 Sequence -0:13 move second child to first child ( temp int) -0:13 'r06' ( temp int) +0:13 move second child to first child ( temp uint) +0:13 'r03' ( temp uint) 0:13 Constant: -0:13 6 (const int) +0:13 2748 (const uint) 0:14 Sequence -0:14 move second child to first child ( temp int) -0:14 'r07' ( temp int) +0:14 move second child to first child ( temp uint) +0:14 'r04' ( temp uint) 0:14 Constant: -0:14 57 (const int) +0:14 2748 (const uint) 0:15 Sequence -0:15 move second child to first child ( temp uint) -0:15 'r08' ( temp uint) +0:15 move second child to first child ( temp int) +0:15 'r05' ( temp int) 0:15 Constant: -0:15 58 (const uint) +0:15 5 (const int) 0:16 Sequence -0:16 move second child to first child ( temp float) -0:16 'r09' ( temp float) +0:16 move second child to first child ( temp int) +0:16 'r06' ( temp int) 0:16 Constant: -0:16 1.000000 +0:16 6 (const int) 0:17 Sequence -0:17 move second child to first child ( temp float) -0:17 'r10' ( temp float) +0:17 move second child to first child ( temp int) +0:17 'r07' ( temp int) 0:17 Constant: -0:17 1.000000 +0:17 57 (const int) 0:18 Sequence -0:18 move second child to first child ( temp float) -0:18 'r11' ( temp float) +0:18 move second child to first child ( temp uint) +0:18 'r08' ( temp uint) 0:18 Constant: -0:18 1.100000 +0:18 58 (const uint) 0:19 Sequence 0:19 move second child to first child ( temp float) -0:19 'r12' ( temp float) +0:19 'r09' ( temp float) 0:19 Constant: -0:19 1.100000 -0:22 move second child to first child ( temp 4-component vector of float) -0:22 color: direct index for structure ( temp 4-component vector of float) -0:22 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:19 1.000000 +0:20 Sequence +0:20 move second child to first child ( temp float) +0:20 'r10' ( temp float) +0:20 Constant: +0:20 1.000000 +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 'r11' ( temp float) +0:21 Constant: +0:21 1.100000 +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'r12' ( temp float) 0:22 Constant: -0:22 0 (const int) -0:22 Construct vec4 ( temp 4-component vector of float) -0:22 Convert int to float ( temp float) -0:22 'r07' ( temp int) -0:23 Branch: Return with expression -0:23 'ps_output' ( temp structure{ temp 4-component vector of float color}) -0:5 Function Definition: main( ( temp void) -0:5 Function Parameters: +0:22 1.100000 +0:23 Sequence +0:23 move second child to first child ( temp uint) +0:23 'r13' ( temp uint) +0:23 Constant: +0:23 1 (const uint) +0:24 Sequence +0:24 move second child to first child ( temp uint) +0:24 'r14' ( temp uint) +0:24 Constant: +0:24 2 (const uint) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'r15' ( temp int) +0:25 Constant: +0:25 3 (const int) +0:26 Sequence +0:26 move second child to first child ( temp int) +0:26 'r16' ( temp int) +0:26 Constant: +0:26 4 (const int) +0:27 Sequence +0:27 move second child to first child ( temp uint) +0:27 'r17' ( temp uint) +0:27 Constant: +0:27 1 (const uint) +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'r18' ( temp int) +0:28 Constant: +0:28 3 (const int) +0:31 move second child to first child ( temp 4-component vector of float) +0:31 color: direct index for structure ( temp 4-component vector of float) +0:31 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:31 Constant: +0:31 0 (const int) +0:31 Construct vec4 ( temp 4-component vector of float) +0:31 Convert int to float ( temp float) +0:31 'r07' ( temp int) +0:32 Branch: Return with expression +0:32 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:8 Function Definition: main( ( temp void) +0:8 Function Parameters: 0:? Sequence -0:5 Sequence -0:5 move second child to first child ( temp 4-component vector of float) +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) -0:5 color: direct index for structure ( temp 4-component vector of float) -0:5 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) -0:5 Constant: -0:5 0 (const int) +0:8 color: direct index for structure ( temp 4-component vector of float) +0:8 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) +0:8 Constant: +0:8 0 (const int) 0:? Linker Objects 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) @@ -100,105 +130,135 @@ Linked fragment stage: Shader version: 500 gl_FragCoord origin is upper left 0:? Sequence -0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) -0:5 Function Parameters: +0:8 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:8 Function Parameters: 0:? Sequence -0:7 Sequence -0:7 move second child to first child ( temp float) -0:7 'r00' ( temp float) -0:7 Constant: -0:7 1.000000 -0:8 Sequence -0:8 move second child to first child ( temp uint) -0:8 'r01' ( temp uint) -0:8 Constant: -0:8 1 (const uint) -0:9 Sequence -0:9 move second child to first child ( temp uint) -0:9 'r02' ( temp uint) -0:9 Constant: -0:9 2 (const uint) 0:10 Sequence -0:10 move second child to first child ( temp uint) -0:10 'r03' ( temp uint) +0:10 move second child to first child ( temp float) +0:10 'r00' ( temp float) 0:10 Constant: -0:10 2748 (const uint) +0:10 1.000000 0:11 Sequence 0:11 move second child to first child ( temp uint) -0:11 'r04' ( temp uint) +0:11 'r01' ( temp uint) 0:11 Constant: -0:11 2748 (const uint) +0:11 1 (const uint) 0:12 Sequence -0:12 move second child to first child ( temp int) -0:12 'r05' ( temp int) +0:12 move second child to first child ( temp uint) +0:12 'r02' ( temp uint) 0:12 Constant: -0:12 5 (const int) +0:12 2 (const uint) 0:13 Sequence -0:13 move second child to first child ( temp int) -0:13 'r06' ( temp int) +0:13 move second child to first child ( temp uint) +0:13 'r03' ( temp uint) 0:13 Constant: -0:13 6 (const int) +0:13 2748 (const uint) 0:14 Sequence -0:14 move second child to first child ( temp int) -0:14 'r07' ( temp int) +0:14 move second child to first child ( temp uint) +0:14 'r04' ( temp uint) 0:14 Constant: -0:14 57 (const int) +0:14 2748 (const uint) 0:15 Sequence -0:15 move second child to first child ( temp uint) -0:15 'r08' ( temp uint) +0:15 move second child to first child ( temp int) +0:15 'r05' ( temp int) 0:15 Constant: -0:15 58 (const uint) +0:15 5 (const int) 0:16 Sequence -0:16 move second child to first child ( temp float) -0:16 'r09' ( temp float) +0:16 move second child to first child ( temp int) +0:16 'r06' ( temp int) 0:16 Constant: -0:16 1.000000 +0:16 6 (const int) 0:17 Sequence -0:17 move second child to first child ( temp float) -0:17 'r10' ( temp float) +0:17 move second child to first child ( temp int) +0:17 'r07' ( temp int) 0:17 Constant: -0:17 1.000000 +0:17 57 (const int) 0:18 Sequence -0:18 move second child to first child ( temp float) -0:18 'r11' ( temp float) +0:18 move second child to first child ( temp uint) +0:18 'r08' ( temp uint) 0:18 Constant: -0:18 1.100000 +0:18 58 (const uint) 0:19 Sequence 0:19 move second child to first child ( temp float) -0:19 'r12' ( temp float) +0:19 'r09' ( temp float) 0:19 Constant: -0:19 1.100000 -0:22 move second child to first child ( temp 4-component vector of float) -0:22 color: direct index for structure ( temp 4-component vector of float) -0:22 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:19 1.000000 +0:20 Sequence +0:20 move second child to first child ( temp float) +0:20 'r10' ( temp float) +0:20 Constant: +0:20 1.000000 +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 'r11' ( temp float) +0:21 Constant: +0:21 1.100000 +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'r12' ( temp float) 0:22 Constant: -0:22 0 (const int) -0:22 Construct vec4 ( temp 4-component vector of float) -0:22 Convert int to float ( temp float) -0:22 'r07' ( temp int) -0:23 Branch: Return with expression -0:23 'ps_output' ( temp structure{ temp 4-component vector of float color}) -0:5 Function Definition: main( ( temp void) -0:5 Function Parameters: +0:22 1.100000 +0:23 Sequence +0:23 move second child to first child ( temp uint) +0:23 'r13' ( temp uint) +0:23 Constant: +0:23 1 (const uint) +0:24 Sequence +0:24 move second child to first child ( temp uint) +0:24 'r14' ( temp uint) +0:24 Constant: +0:24 2 (const uint) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'r15' ( temp int) +0:25 Constant: +0:25 3 (const int) +0:26 Sequence +0:26 move second child to first child ( temp int) +0:26 'r16' ( temp int) +0:26 Constant: +0:26 4 (const int) +0:27 Sequence +0:27 move second child to first child ( temp uint) +0:27 'r17' ( temp uint) +0:27 Constant: +0:27 1 (const uint) +0:28 Sequence +0:28 move second child to first child ( temp int) +0:28 'r18' ( temp int) +0:28 Constant: +0:28 3 (const int) +0:31 move second child to first child ( temp 4-component vector of float) +0:31 color: direct index for structure ( temp 4-component vector of float) +0:31 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:31 Constant: +0:31 0 (const int) +0:31 Construct vec4 ( temp 4-component vector of float) +0:31 Convert int to float ( temp float) +0:31 'r07' ( temp int) +0:32 Branch: Return with expression +0:32 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:8 Function Definition: main( ( temp void) +0:8 Function Parameters: 0:? Sequence -0:5 Sequence -0:5 move second child to first child ( temp 4-component vector of float) +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) -0:5 color: direct index for structure ( temp 4-component vector of float) -0:5 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) -0:5 Constant: -0:5 0 (const int) +0:8 color: direct index for structure ( temp 4-component vector of float) +0:8 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) +0:8 Constant: +0:8 0 (const int) 0:? Linker Objects 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 54 +// Generated by (magic number): 8000b +// Id's are bound by 62 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 51 + EntryPoint Fragment 4 "main" 59 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" @@ -218,9 +278,15 @@ gl_FragCoord origin is upper left Name 35 "r10" Name 36 "r11" Name 38 "r12" - Name 40 "ps_output" - Name 51 "@entryPointOutput.color" - Decorate 51(@entryPointOutput.color) Location 0 + Name 39 "r13" + Name 40 "r14" + Name 41 "r15" + Name 43 "r16" + Name 45 "r17" + Name 46 "r18" + Name 48 "ps_output" + Name 59 "@entryPointOutput.color" + Decorate 59(@entryPointOutput.color) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -241,16 +307,18 @@ gl_FragCoord origin is upper left 31: 24(int) Constant 57 33: 15(int) Constant 58 37: 6(float) Constant 1066192077 - 39: TypePointer Function 8(PS_OUTPUT) - 41: 24(int) Constant 0 - 45: TypePointer Function 7(fvec4) - 50: TypePointer Output 7(fvec4) -51(@entryPointOutput.color): 50(ptr) Variable Output + 42: 24(int) Constant 3 + 44: 24(int) Constant 4 + 47: TypePointer Function 8(PS_OUTPUT) + 49: 24(int) Constant 0 + 53: TypePointer Function 7(fvec4) + 58: TypePointer Output 7(fvec4) +59(@entryPointOutput.color): 58(ptr) Variable Output 4(main): 2 Function None 3 5: Label - 52:8(PS_OUTPUT) FunctionCall 10(@main() - 53: 7(fvec4) CompositeExtract 52 0 - Store 51(@entryPointOutput.color) 53 + 60:8(PS_OUTPUT) FunctionCall 10(@main() + 61: 7(fvec4) CompositeExtract 60 0 + Store 59(@entryPointOutput.color) 61 Return FunctionEnd 10(@main():8(PS_OUTPUT) Function None 9 @@ -268,7 +336,13 @@ gl_FragCoord origin is upper left 35(r10): 12(ptr) Variable Function 36(r11): 12(ptr) Variable Function 38(r12): 12(ptr) Variable Function - 40(ps_output): 39(ptr) Variable Function + 39(r13): 16(ptr) Variable Function + 40(r14): 16(ptr) Variable Function + 41(r15): 25(ptr) Variable Function + 43(r16): 25(ptr) Variable Function + 45(r17): 16(ptr) Variable Function + 46(r18): 25(ptr) Variable Function + 48(ps_output): 47(ptr) Variable Function Store 13(r00) 14 Store 17(r01) 18 Store 19(r02) 20 @@ -282,11 +356,17 @@ gl_FragCoord origin is upper left Store 35(r10) 14 Store 36(r11) 37 Store 38(r12) 37 - 42: 24(int) Load 30(r07) - 43: 6(float) ConvertSToF 42 - 44: 7(fvec4) CompositeConstruct 43 43 43 43 - 46: 45(ptr) AccessChain 40(ps_output) 41 - Store 46 44 - 47:8(PS_OUTPUT) Load 40(ps_output) - ReturnValue 47 + Store 39(r13) 18 + Store 40(r14) 20 + Store 41(r15) 42 + Store 43(r16) 44 + Store 45(r17) 18 + Store 46(r18) 42 + 50: 24(int) Load 30(r07) + 51: 6(float) ConvertSToF 50 + 52: 7(fvec4) CompositeConstruct 51 51 51 51 + 54: 53(ptr) AccessChain 48(ps_output) 49 + Store 54 52 + 55:8(PS_OUTPUT) Load 48(ps_output) + ReturnValue 55 FunctionEnd diff --git a/Test/baseResults/hlsl.numericsuffixes.negative.frag.out b/Test/baseResults/hlsl.numericsuffixes.negative.frag.out new file mode 100644 index 0000000000..60d63e9f2e --- /dev/null +++ b/Test/baseResults/hlsl.numericsuffixes.negative.frag.out @@ -0,0 +1,109 @@ +hlsl.numericsuffixes.negative.frag +ERROR: 0:7: '' : bad digit in binary literal +ERROR: 0:8: '' : binary literal too big +ERROR: 0:9: '' : bad digit in hexadecimal literal +ERROR: 0:10: '' : hexadecimal literal too big +ERROR: 4 compilation errors. No code generated. + + +Shader version: 500 +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:5 Function Parameters: +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp uint) +0:7 'r01' ( temp uint) +0:7 Constant: +0:7 0 (const uint) +0:8 Sequence +0:8 move second child to first child ( temp uint) +0:8 'r02' ( temp uint) +0:8 Constant: +0:8 4294967295 (const uint) +0:10 Sequence +0:9 move second child to first child ( temp uint) +0:9 'r03' ( temp uint) +0:9 Constant: +0:9 0 (const uint) +0:10 move second child to first child ( temp uint) +0:10 'r04' ( temp uint) +0:10 Constant: +0:10 4294967295 (const uint) +0:13 move second child to first child ( temp 4-component vector of float) +0:13 color: direct index for structure ( temp 4-component vector of float) +0:13 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:13 Constant: +0:13 0 (const int) +0:13 Construct vec4 ( temp 4-component vector of float) +0:13 Convert uint to float ( temp float) +0:13 'r01' ( temp uint) +0:14 Branch: Return with expression +0:14 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:5 Function Definition: main( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) +0:5 color: direct index for structure ( temp 4-component vector of float) +0:5 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) +0:5 Constant: +0:5 0 (const int) +0:? Linker Objects +0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 500 +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) +0:5 Function Parameters: +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp uint) +0:7 'r01' ( temp uint) +0:7 Constant: +0:7 0 (const uint) +0:8 Sequence +0:8 move second child to first child ( temp uint) +0:8 'r02' ( temp uint) +0:8 Constant: +0:8 4294967295 (const uint) +0:10 Sequence +0:9 move second child to first child ( temp uint) +0:9 'r03' ( temp uint) +0:9 Constant: +0:9 0 (const uint) +0:10 move second child to first child ( temp uint) +0:10 'r04' ( temp uint) +0:10 Constant: +0:10 4294967295 (const uint) +0:13 move second child to first child ( temp 4-component vector of float) +0:13 color: direct index for structure ( temp 4-component vector of float) +0:13 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:13 Constant: +0:13 0 (const int) +0:13 Construct vec4 ( temp 4-component vector of float) +0:13 Convert uint to float ( temp float) +0:13 'r01' ( temp uint) +0:14 Branch: Return with expression +0:14 'ps_output' ( temp structure{ temp 4-component vector of float color}) +0:5 Function Definition: main( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) +0:5 color: direct index for structure ( temp 4-component vector of float) +0:5 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) +0:5 Constant: +0:5 0 (const int) +0:? Linker Objects +0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/hlsl.numthreads.comp.out b/Test/baseResults/hlsl.numthreads.comp.out index c8676e3873..49fa4f30d2 100644 --- a/Test/baseResults/hlsl.numthreads.comp.out +++ b/Test/baseResults/hlsl.numthreads.comp.out @@ -44,7 +44,7 @@ local_size = (1, 4, 8) 0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 23 Capability Shader diff --git a/Test/baseResults/hlsl.opaque-type-bug.frag.out b/Test/baseResults/hlsl.opaque-type-bug.frag.out index 738fa4f095..2c8a554684 100644 --- a/Test/baseResults/hlsl.opaque-type-bug.frag.out +++ b/Test/baseResults/hlsl.opaque-type-bug.frag.out @@ -58,7 +58,7 @@ gl_FragCoord origin is upper left 0:? 'MyTexture' (layout( binding=0) uniform texture2D) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader @@ -75,8 +75,8 @@ gl_FragCoord origin is upper left Name 20 "MyTexture" Name 22 "final_RGB" Name 23 "param" - Decorate 20(MyTexture) DescriptorSet 0 Decorate 20(MyTexture) Binding 0 + Decorate 20(MyTexture) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out index 4cfc391183..e196dec604 100644 --- a/Test/baseResults/hlsl.overload.frag.out +++ b/Test/baseResults/hlsl.overload.frag.out @@ -734,14 +734,14 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 520 +// Generated by (magic number): 8000b +// Id's are bound by 519 Capability Shader Capability Float64 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" 513 516 + EntryPoint Fragment 4 "PixelShaderFunction" 512 515 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "PixelShaderFunction" @@ -923,17 +923,17 @@ gl_FragCoord origin is upper left Name 471 "param" Name 475 "param" Name 480 "param" - Name 487 "param" - Name 491 "param" - Name 497 "param" - Name 500 "param" - Name 506 "param" - Name 511 "input" - Name 513 "input" - Name 516 "@entryPointOutput" - Name 517 "param" - Decorate 513(input) Location 0 - Decorate 516(@entryPointOutput) Location 0 + Name 486 "param" + Name 490 "param" + Name 496 "param" + Name 499 "param" + Name 505 "param" + Name 510 "input" + Name 512 "input" + Name 515 "@entryPointOutput" + Name 516 "param" + Decorate 512(input) Location 0 + Decorate 515(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 64 @@ -984,23 +984,23 @@ gl_FragCoord origin is upper left 374: 22(int) Constant 1 394: 29(float) Constant 1065353216 414:6(float64_t) Constant 0 1072693248 - 484: TypeVector 22(int) 2 - 494: TypeVector 22(int) 4 - 503: TypeVector 8(bool) 3 - 512: TypePointer Input 149(fvec4) - 513(input): 512(ptr) Variable Input - 515: TypePointer Output 149(fvec4) -516(@entryPointOutput): 515(ptr) Variable Output + 483: TypeVector 22(int) 2 + 493: TypeVector 22(int) 4 + 502: TypeVector 8(bool) 3 + 511: TypePointer Input 149(fvec4) + 512(input): 511(ptr) Variable Input + 514: TypePointer Output 149(fvec4) +515(@entryPointOutput): 514(ptr) Variable Output 4(PixelShaderFunction): 2 Function None 3 5: Label - 511(input): 150(ptr) Variable Function - 517(param): 150(ptr) Variable Function - 514: 149(fvec4) Load 513(input) - Store 511(input) 514 - 518: 149(fvec4) Load 511(input) - Store 517(param) 518 - 519: 149(fvec4) FunctionCall 153(@PixelShaderFunction(vf4;) 517(param) - Store 516(@entryPointOutput) 519 + 510(input): 150(ptr) Variable Function + 516(param): 150(ptr) Variable Function + 513: 149(fvec4) Load 512(input) + Store 510(input) 513 + 517: 149(fvec4) Load 510(input) + Store 516(param) 517 + 518: 149(fvec4) FunctionCall 153(@PixelShaderFunction(vf4;) 516(param) + Store 515(@entryPointOutput) 518 Return FunctionEnd 13(foo1(d1;b1;): 2 Function None 10 @@ -1278,11 +1278,11 @@ gl_FragCoord origin is upper left 471(param): 16(ptr) Variable Function 475(param): 7(ptr) Variable Function 480(param): 126(ptr) Variable Function - 487(param): 135(ptr) Variable Function - 491(param): 105(ptr) Variable Function - 497(param): 23(ptr) Variable Function - 500(param): 9(ptr) Variable Function - 506(param): 9(ptr) Variable Function + 486(param): 135(ptr) Variable Function + 490(param): 105(ptr) Variable Function + 496(param): 23(ptr) Variable Function + 499(param): 9(ptr) Variable Function + 505(param): 9(ptr) Variable Function 158:6(float64_t) Load 155(d) Store 157(param) 158 160: 8(bool) Load 156(b) @@ -1598,28 +1598,27 @@ gl_FragCoord origin is upper left Store 480(param) 479 481: 2 FunctionCall 129(foo12(vd3;) 480(param) 482: 22(int) Load 173(i) - 483: 22(int) Load 173(i) - 485: 484(ivec2) CompositeConstruct 482 483 - 486: 134(ivec2) Bitcast 485 - Store 487(param) 486 - 488: 2 FunctionCall 138(foo16(vu2;) 487(param) - 489: 29(float) Load 179(f) - 490: 104(fvec3) CompositeConstruct 489 489 489 - Store 491(param) 490 - 492: 2 FunctionCall 141(foo13(vf3;) 491(param) - 493: 22(int) Load 173(i) - 495: 494(ivec4) CompositeConstruct 493 493 493 493 - 496: 22(int) CompositeExtract 495 0 - Store 497(param) 496 - 498: 2 FunctionCall 144(foo14(vi1;) 497(param) - 499: 8(bool) Load 156(b) - Store 500(param) 499 - 501: 2 FunctionCall 147(foo15(vb1;) 500(param) - 502: 8(bool) Load 156(b) - 504: 503(bvec3) CompositeConstruct 502 502 502 - 505: 8(bool) CompositeExtract 504 0 - Store 506(param) 505 - 507: 2 FunctionCall 147(foo15(vb1;) 506(param) - 508: 149(fvec4) Load 152(input) - ReturnValue 508 + 484: 483(ivec2) CompositeConstruct 482 482 + 485: 134(ivec2) Bitcast 484 + Store 486(param) 485 + 487: 2 FunctionCall 138(foo16(vu2;) 486(param) + 488: 29(float) Load 179(f) + 489: 104(fvec3) CompositeConstruct 488 488 488 + Store 490(param) 489 + 491: 2 FunctionCall 141(foo13(vf3;) 490(param) + 492: 22(int) Load 173(i) + 494: 493(ivec4) CompositeConstruct 492 492 492 492 + 495: 22(int) CompositeExtract 494 0 + Store 496(param) 495 + 497: 2 FunctionCall 144(foo14(vi1;) 496(param) + 498: 8(bool) Load 156(b) + Store 499(param) 498 + 500: 2 FunctionCall 147(foo15(vb1;) 499(param) + 501: 8(bool) Load 156(b) + 503: 502(bvec3) CompositeConstruct 501 501 501 + 504: 8(bool) CompositeExtract 503 0 + Store 505(param) 504 + 506: 2 FunctionCall 147(foo15(vb1;) 505(param) + 507: 149(fvec4) Load 152(input) + ReturnValue 507 FunctionEnd diff --git a/Test/baseResults/hlsl.params.default.frag.out b/Test/baseResults/hlsl.params.default.frag.out index 6898240fe0..81fc98c648 100644 --- a/Test/baseResults/hlsl.params.default.frag.out +++ b/Test/baseResults/hlsl.params.default.frag.out @@ -376,7 +376,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 178 Capability Shader @@ -437,10 +437,10 @@ gl_FragCoord origin is upper left Name 168 "param" Name 169 "param" Name 175 "@entryPointOutput" - MemberDecorate 108($Global) 0 Offset 0 Decorate 108($Global) Block - Decorate 110 DescriptorSet 0 + MemberDecorate 108($Global) 0 Offset 0 Decorate 110 Binding 0 + Decorate 110 DescriptorSet 0 Decorate 175(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/Test/baseResults/hlsl.partialFlattenLocal.vert.out index 7bcc8791d5..c18f10d32c 100644 --- a/Test/baseResults/hlsl.partialFlattenLocal.vert.out +++ b/Test/baseResults/hlsl.partialFlattenLocal.vert.out @@ -237,7 +237,7 @@ Shader version: 500 0:? 'pos' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 93 Capability Shader @@ -262,8 +262,8 @@ Shader version: 500 Name 86 "pos" Name 89 "@entryPointOutput" Name 90 "param" - Decorate 27(tex) DescriptorSet 0 Decorate 27(tex) Binding 0 + Decorate 27(tex) DescriptorSet 0 Decorate 86(pos) Location 0 Decorate 89(@entryPointOutput) BuiltIn Position 2: TypeVoid diff --git a/Test/baseResults/hlsl.partialFlattenMixed.vert.out b/Test/baseResults/hlsl.partialFlattenMixed.vert.out index c9fcc6f4c9..a34caad193 100644 --- a/Test/baseResults/hlsl.partialFlattenMixed.vert.out +++ b/Test/baseResults/hlsl.partialFlattenMixed.vert.out @@ -91,7 +91,7 @@ Shader version: 500 0:? 'pos' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 43 Capability Shader @@ -113,10 +113,10 @@ Shader version: 500 Name 36 "pos" Name 39 "@entryPointOutput" Name 40 "param" - Decorate 24(tex[0]) DescriptorSet 0 Decorate 24(tex[0]) Binding 0 - Decorate 28(tex[1]) DescriptorSet 0 + Decorate 24(tex[0]) DescriptorSet 0 Decorate 28(tex[1]) Binding 1 + Decorate 28(tex[1]) DescriptorSet 0 Decorate 36(pos) Location 0 Decorate 39(@entryPointOutput) BuiltIn Position 2: TypeVoid diff --git a/Test/baseResults/hlsl.partialInit.frag.out b/Test/baseResults/hlsl.partialInit.frag.out index 4686566df5..d3ce42e156 100644 --- a/Test/baseResults/hlsl.partialInit.frag.out +++ b/Test/baseResults/hlsl.partialInit.frag.out @@ -400,7 +400,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 104 Capability Shader diff --git a/Test/baseResults/hlsl.pp.expand.frag.out b/Test/baseResults/hlsl.pp.expand.frag.out index adfe02c12e..97df910ad0 100644 --- a/Test/baseResults/hlsl.pp.expand.frag.out +++ b/Test/baseResults/hlsl.pp.expand.frag.out @@ -9,7 +9,7 @@ struct A float4 a; float4 b; float4 c = { 1, 2, 3, 4 }; - float4 d = {({ {(({ 1, 2, 3, 4 }))} })}, { { 1, 2, 3, 4 } }; + float4 d = { ({ { ( ({ 1, 2, 3, 4 })) } }) }, { { 1, 2, 3, 4 } }; }; void main() diff --git a/Test/baseResults/hlsl.pp.line.frag.out b/Test/baseResults/hlsl.pp.line.frag.out index 68476d2a04..3478c665d6 100644 --- a/Test/baseResults/hlsl.pp.line.frag.out +++ b/Test/baseResults/hlsl.pp.line.frag.out @@ -120,7 +120,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 42 Capability Shader diff --git a/Test/baseResults/hlsl.pp.line2.frag.out b/Test/baseResults/hlsl.pp.line2.frag.out index 9ccf05c16c..0d8131caf3 100644 --- a/Test/baseResults/hlsl.pp.line2.frag.out +++ b/Test/baseResults/hlsl.pp.line2.frag.out @@ -1,6 +1,6 @@ hlsl.pp.line2.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 80 Capability Shader @@ -9,7 +9,7 @@ hlsl.pp.line2.frag EntryPoint Fragment 5 "MainPs" 71 75 ExecutionMode 5 OriginUpperLeft 1: String "hlsl.pp.line2.frag" - 17: String "foo.frag" + 7: String "foo.frag" 32: String "foo.h" 42: String "foo2.h" Source HLSL 500 1 "// OpModuleProcessed auto-map-locations @@ -62,12 +62,12 @@ PS_OUTPUT MainPs ( PS_INPUT i ) " Name 5 "MainPs" - Name 9 "PS_INPUT" - MemberName 9(PS_INPUT) 0 "vTextureCoords" - Name 12 "PS_OUTPUT" - MemberName 12(PS_OUTPUT) 0 "vColor" - Name 15 "@MainPs(struct-PS_INPUT-vf21;" - Name 14 "i" + Name 10 "PS_INPUT" + MemberName 10(PS_INPUT) 0 "vTextureCoords" + Name 13 "PS_OUTPUT" + MemberName 13(PS_OUTPUT) 0 "vColor" + Name 16 "@MainPs(struct-PS_INPUT-vf21;" + Name 15 "i" Name 19 "PerViewConstantBuffer_t" MemberName 19(PerViewConstantBuffer_t) 0 "g_nDataIdx" MemberName 19(PerViewConstantBuffer_t) 1 "g_nDataIdx2" @@ -81,25 +81,25 @@ PS_OUTPUT MainPs ( PS_INPUT i ) Name 71 "i.vTextureCoords" Name 75 "@entryPointOutput.vColor" Name 76 "param" + Decorate 19(PerViewConstantBuffer_t) Block MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0 MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4 MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8 - Decorate 19(PerViewConstantBuffer_t) Block - Decorate 49(g_tColor) DescriptorSet 0 Decorate 49(g_tColor) Binding 0 - Decorate 56(g_sAniso) DescriptorSet 0 + Decorate 49(g_tColor) DescriptorSet 0 Decorate 56(g_sAniso) Binding 1 + Decorate 56(g_sAniso) DescriptorSet 0 Decorate 71(i.vTextureCoords) Location 0 Decorate 75(@entryPointOutput.vColor) Location 0 3: TypeVoid 4: TypeFunction 3 - 7: TypeFloat 32 - 8: TypeVector 7(float) 2 - 9(PS_INPUT): TypeStruct 8(fvec2) - 10: TypePointer Function 9(PS_INPUT) - 11: TypeVector 7(float) 4 - 12(PS_OUTPUT): TypeStruct 11(fvec4) - 13: TypeFunction 12(PS_OUTPUT) 10(ptr) + 8: TypeFloat 32 + 9: TypeVector 8(float) 2 + 10(PS_INPUT): TypeStruct 9(fvec2) + 11: TypePointer Function 10(PS_INPUT) + 12: TypeVector 8(float) 4 + 13(PS_OUTPUT): TypeStruct 12(fvec4) + 14: TypeFunction 13(PS_OUTPUT) 11(ptr) 18: TypeInt 32 0 19(PerViewConstantBuffer_t): TypeStruct 18(int) 18(int) 18(int) 20: TypePointer PushConstant 19(PerViewConstantBuffer_t) @@ -112,8 +112,8 @@ PS_OUTPUT MainPs ( PS_INPUT i ) 33: TypePointer Function 18(int) 35: 22(int) Constant 0 39: 22(int) Constant 1 - 43: TypePointer Function 12(PS_OUTPUT) - 45: TypeImage 7(float) 2D sampled format:Unknown + 43: TypePointer Function 13(PS_OUTPUT) + 45: TypeImage 8(float) 2D sampled format:Unknown 46: 18(int) Constant 128 47: TypeArray 45 46 48: TypePointer UniformConstant 47 @@ -123,33 +123,35 @@ PS_OUTPUT MainPs ( PS_INPUT i ) 55: TypePointer UniformConstant 54 56(g_sAniso): 55(ptr) Variable UniformConstant 58: TypeSampledImage 45 - 60: TypePointer Function 8(fvec2) - 64: TypePointer Function 11(fvec4) - 70: TypePointer Input 8(fvec2) + 60: TypePointer Function 9(fvec2) + 64: TypePointer Function 12(fvec4) + 70: TypePointer Input 9(fvec2) 71(i.vTextureCoords): 70(ptr) Variable Input - 74: TypePointer Output 11(fvec4) + 74: TypePointer Output 12(fvec4) 75(@entryPointOutput.vColor): 74(ptr) Variable Output + Line 7 23 1 5(MainPs): 3 Function None 4 6: Label - 69(i): 10(ptr) Variable Function - 76(param): 10(ptr) Variable Function - Line 17 23 0 - 72: 8(fvec2) Load 71(i.vTextureCoords) + 69(i): 11(ptr) Variable Function + 76(param): 11(ptr) Variable Function + Line 7 23 0 + 72: 9(fvec2) Load 71(i.vTextureCoords) 73: 60(ptr) AccessChain 69(i) 35 Store 73 72 - 77: 9(PS_INPUT) Load 69(i) + 77:10(PS_INPUT) Load 69(i) Store 76(param) 77 - 78:12(PS_OUTPUT) FunctionCall 15(@MainPs(struct-PS_INPUT-vf21;) 76(param) - 79: 11(fvec4) CompositeExtract 78 0 + 78:13(PS_OUTPUT) FunctionCall 16(@MainPs(struct-PS_INPUT-vf21;) 76(param) + 79: 12(fvec4) CompositeExtract 78 0 Store 75(@entryPointOutput.vColor) 79 Return FunctionEnd -15(@MainPs(struct-PS_INPUT-vf21;):12(PS_OUTPUT) Function None 13 - 14(i): 10(ptr) FunctionParameter - 16: Label + Line 7 23 1 +16(@MainPs(struct-PS_INPUT-vf21;):13(PS_OUTPUT) Function None 14 + 15(i): 11(ptr) FunctionParameter + 17: Label 34(u): 33(ptr) Variable Function 44(ps_output): 43(ptr) Variable Function - Line 17 47 0 + Line 7 47 0 25: 24(ptr) AccessChain 21 23 26: 18(int) Load 25 29: 27(bool) INotEqual 26 28 @@ -174,12 +176,12 @@ PS_OUTPUT MainPs ( PS_INPUT i ) 53: 45 Load 52 57: 54 Load 56(g_sAniso) 59: 58 SampledImage 53 57 - 61: 60(ptr) AccessChain 14(i) 35 - 62: 8(fvec2) Load 61 - 63: 11(fvec4) ImageSampleImplicitLod 59 62 + 61: 60(ptr) AccessChain 15(i) 35 + 62: 9(fvec2) Load 61 + 63: 12(fvec4) ImageSampleImplicitLod 59 62 65: 64(ptr) AccessChain 44(ps_output) 35 Store 65 63 Line 42 105 0 - 66:12(PS_OUTPUT) Load 44(ps_output) + 66:13(PS_OUTPUT) Load 44(ps_output) ReturnValue 66 FunctionEnd diff --git a/Test/baseResults/hlsl.pp.line3.frag.out b/Test/baseResults/hlsl.pp.line3.frag.out index d19c516cd2..a2c43de840 100644 --- a/Test/baseResults/hlsl.pp.line3.frag.out +++ b/Test/baseResults/hlsl.pp.line3.frag.out @@ -1,6 +1,6 @@ hlsl.pp.line3.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 78 Capability Shader @@ -72,14 +72,14 @@ PS_OUTPUT MainPs ( PS_INPUT i ) Name 69 "i.vTextureCoords" Name 73 "@entryPointOutput.vColor" Name 74 "param" + Decorate 19(PerViewConstantBuffer_t) Block MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0 MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4 MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8 - Decorate 19(PerViewConstantBuffer_t) Block - Decorate 47(g_tColor) DescriptorSet 0 Decorate 47(g_tColor) Binding 0 - Decorate 54(g_sAniso) DescriptorSet 0 + Decorate 47(g_tColor) DescriptorSet 0 Decorate 54(g_sAniso) Binding 0 + Decorate 54(g_sAniso) DescriptorSet 0 Decorate 69(i.vTextureCoords) Location 0 Decorate 73(@entryPointOutput.vColor) Location 0 4: TypeVoid @@ -120,6 +120,7 @@ PS_OUTPUT MainPs ( PS_INPUT i ) 69(i.vTextureCoords): 68(ptr) Variable Input 72: TypePointer Output 12(fvec4) 73(@entryPointOutput.vColor): 72(ptr) Variable Output + Line 1 23 1 6(MainPs): 4 Function None 5 7: Label 67(i): 11(ptr) Variable Function @@ -135,6 +136,7 @@ PS_OUTPUT MainPs ( PS_INPUT i ) Store 73(@entryPointOutput.vColor) 77 Return FunctionEnd + Line 1 23 1 16(@MainPs(struct-PS_INPUT-vf21;):13(PS_OUTPUT) Function None 14 15(i): 11(ptr) FunctionParameter 17: Label diff --git a/Test/baseResults/hlsl.pp.line4.frag.out b/Test/baseResults/hlsl.pp.line4.frag.out index 2244588be1..aeca142a83 100644 --- a/Test/baseResults/hlsl.pp.line4.frag.out +++ b/Test/baseResults/hlsl.pp.line4.frag.out @@ -1,6 +1,6 @@ hlsl.pp.line4.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 116 Capability Shader @@ -9,7 +9,7 @@ hlsl.pp.line4.frag EntryPoint Fragment 5 "MainPs" 70 74 ExecutionMode 5 OriginUpperLeft 1: String "hlsl.pp.line4.frag" - 17: String "C:\\Users\\Greg\\shaders\\line\\foo4.frag" + 7: String "C:\\Users\\Greg\\shaders\\line\\foo4.frag" 32: String "C:\\Users\\Greg\\shaders\\line\\u1.h" Source HLSL 500 1 "// OpModuleProcessed auto-map-locations // OpModuleProcessed auto-map-bindings @@ -72,21 +72,21 @@ PS_OUTPUT MainPs ( PS_INPUT i ) Name 55 "g_sAniso" Name 70 "i.vTextureCoords" Name 74 "@entryPointOutput.vColor" + Decorate 19(PerViewConstantBuffer_t) Block MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0 MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4 MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8 - Decorate 19(PerViewConstantBuffer_t) Block - Decorate 48(g_tColor) DescriptorSet 0 Decorate 48(g_tColor) Binding 0 - Decorate 55(g_sAniso) DescriptorSet 0 + Decorate 48(g_tColor) DescriptorSet 0 Decorate 55(g_sAniso) Binding 1 + Decorate 55(g_sAniso) DescriptorSet 0 Decorate 70(i.vTextureCoords) Location 0 Decorate 74(@entryPointOutput.vColor) Location 0 3: TypeVoid 4: TypeFunction 3 - 7: TypeFloat 32 - 8: TypeVector 7(float) 2 - 11: TypeVector 7(float) 4 + 8: TypeFloat 32 + 9: TypeVector 8(float) 2 + 12: TypeVector 8(float) 4 18: TypeInt 32 0 19(PerViewConstantBuffer_t): TypeStruct 18(int) 18(int) 18(int) 20: TypePointer PushConstant 19(PerViewConstantBuffer_t) @@ -98,7 +98,7 @@ PS_OUTPUT MainPs ( PS_INPUT i ) 28: 18(int) Constant 0 35: 22(int) Constant 0 39: 22(int) Constant 1 - 44: TypeImage 7(float) 2D sampled format:Unknown + 44: TypeImage 8(float) 2D sampled format:Unknown 45: 18(int) Constant 128 46: TypeArray 44 45 47: TypePointer UniformConstant 46 @@ -108,15 +108,17 @@ PS_OUTPUT MainPs ( PS_INPUT i ) 54: TypePointer UniformConstant 53 55(g_sAniso): 54(ptr) Variable UniformConstant 57: TypeSampledImage 44 - 69: TypePointer Input 8(fvec2) + 69: TypePointer Input 9(fvec2) 70(i.vTextureCoords): 69(ptr) Variable Input - 73: TypePointer Output 11(fvec4) + 73: TypePointer Output 12(fvec4) 74(@entryPointOutput.vColor): 73(ptr) Variable Output + Line 7 25 1 5(MainPs): 3 Function None 4 + NoLine 6: Label - Line 17 25 0 - 71: 8(fvec2) Load 70(i.vTextureCoords) - Line 17 29 0 + Line 7 25 0 + 71: 9(fvec2) Load 70(i.vTextureCoords) + Line 7 29 0 83: 24(ptr) AccessChain 21 23 84: 18(int) Load 83 85: 27(bool) INotEqual 84 28 @@ -128,19 +130,19 @@ PS_OUTPUT MainPs ( PS_INPUT i ) 88: 18(int) Load 87 Branch 92 89: Label - Line 17 32 0 + Line 7 32 0 90: 24(ptr) AccessChain 21 39 91: 18(int) Load 90 Branch 92 92: Label 115: 18(int) Phi 88 86 91 89 - Line 17 33 0 + Line 7 33 0 94: 50(ptr) AccessChain 48(g_tColor) 115 95: 44 Load 94 96: 53 Load 55(g_sAniso) 97: 57 SampledImage 95 96 - 100: 11(fvec4) ImageSampleImplicitLod 97 71 - Line 17 25 0 + 100: 12(fvec4) ImageSampleImplicitLod 97 71 + Line 7 25 0 Store 74(@entryPointOutput.vColor) 100 Return FunctionEnd diff --git a/Test/baseResults/hlsl.pp.vert.out b/Test/baseResults/hlsl.pp.vert.out index 54781011a8..c08504154d 100644 --- a/Test/baseResults/hlsl.pp.vert.out +++ b/Test/baseResults/hlsl.pp.vert.out @@ -26,7 +26,7 @@ Shader version: 500 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int goodGlobal1, uniform int goodGlobal2}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 13 Capability Shader @@ -40,11 +40,11 @@ Shader version: 500 MemberName 10($Global) 0 "goodGlobal1" MemberName 10($Global) 1 "goodGlobal2" Name 12 "" + Decorate 10($Global) Block MemberDecorate 10($Global) 0 Offset 0 MemberDecorate 10($Global) 1 Offset 4 - Decorate 10($Global) Block - Decorate 12 DescriptorSet 0 Decorate 12 Binding 0 + Decorate 12 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 9: TypeInt 32 1 diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out index 3992618dda..4dd025a2e7 100644 --- a/Test/baseResults/hlsl.precedence.frag.out +++ b/Test/baseResults/hlsl.precedence.frag.out @@ -148,7 +148,7 @@ gl_FragCoord origin is upper left 0:? 'a4' (layout( location=3) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 65 Capability Shader diff --git a/Test/baseResults/hlsl.precedence2.frag.out b/Test/baseResults/hlsl.precedence2.frag.out index f231b351e6..1611d5a55b 100644 --- a/Test/baseResults/hlsl.precedence2.frag.out +++ b/Test/baseResults/hlsl.precedence2.frag.out @@ -114,7 +114,7 @@ gl_FragCoord origin is upper left 0:? 'a4' (layout( location=3) flat in int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 56 Capability Shader diff --git a/Test/baseResults/hlsl.precise.frag.out b/Test/baseResults/hlsl.precise.frag.out index 39e3578399..2d134b82fc 100644 --- a/Test/baseResults/hlsl.precise.frag.out +++ b/Test/baseResults/hlsl.precise.frag.out @@ -76,7 +76,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 37 Capability Shader diff --git a/Test/baseResults/hlsl.preprocessor.frag.out b/Test/baseResults/hlsl.preprocessor.frag.out index 754d0d8732..d0795d8a66 100644 --- a/Test/baseResults/hlsl.preprocessor.frag.out +++ b/Test/baseResults/hlsl.preprocessor.frag.out @@ -94,7 +94,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 40 Capability Shader @@ -113,10 +113,10 @@ gl_FragCoord origin is upper left Name 33 "input" Name 36 "@entryPointOutput" Name 37 "param" - Decorate 16(test_texture) DescriptorSet 0 Decorate 16(test_texture) Binding 0 - Decorate 20(test_texture_ss) DescriptorSet 0 + Decorate 16(test_texture) DescriptorSet 0 Decorate 20(test_texture_ss) Binding 1 + Decorate 20(test_texture_ss) DescriptorSet 0 Decorate 33(input) Location 0 Decorate 36(@entryPointOutput) Location 0 2: TypeVoid diff --git a/Test/baseResults/hlsl.printf.comp.out b/Test/baseResults/hlsl.printf.comp.out index ea31c3533d..c4768a2bf9 100644 --- a/Test/baseResults/hlsl.printf.comp.out +++ b/Test/baseResults/hlsl.printf.comp.out @@ -126,7 +126,7 @@ local_size = (1, 1, 1) 0:? "first string" // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 36 Capability Shader diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out index a34b7dddd7..22d578e3b5 100644 --- a/Test/baseResults/hlsl.promote.atomic.frag.out +++ b/Test/baseResults/hlsl.promote.atomic.frag.out @@ -64,7 +64,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 36 Capability Shader @@ -81,8 +81,8 @@ gl_FragCoord origin is upper left Name 18 "Loc" Name 20 "Inc" Name 34 "@entryPointOutput" - Decorate 17(s_uintbuff) DescriptorSet 0 Decorate 17(s_uintbuff) Binding 0 + Decorate 17(s_uintbuff) DescriptorSet 0 Decorate 34(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.promote.binary.frag.out b/Test/baseResults/hlsl.promote.binary.frag.out index a0007c3222..d2dee888ec 100644 --- a/Test/baseResults/hlsl.promote.binary.frag.out +++ b/Test/baseResults/hlsl.promote.binary.frag.out @@ -172,7 +172,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 83 Capability Shader @@ -196,15 +196,15 @@ gl_FragCoord origin is upper left Name 66 "l_int" Name 73 "psout" Name 80 "@entryPointOutput.Color" + Decorate 16($Global) Block MemberDecorate 16($Global) 0 Offset 0 MemberDecorate 16($Global) 1 Offset 16 MemberDecorate 16($Global) 2 Offset 32 MemberDecorate 16($Global) 3 Offset 48 MemberDecorate 16($Global) 4 Offset 64 MemberDecorate 16($Global) 5 Offset 80 - Decorate 16($Global) Block - Decorate 18 DescriptorSet 0 Decorate 18 Binding 0 + Decorate 18 DescriptorSet 0 Decorate 80(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.promote.vec1.frag.out b/Test/baseResults/hlsl.promote.vec1.frag.out index 11e324f964..7bdaf45b47 100644 --- a/Test/baseResults/hlsl.promote.vec1.frag.out +++ b/Test/baseResults/hlsl.promote.vec1.frag.out @@ -80,7 +80,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 31 Capability Shader diff --git a/Test/baseResults/hlsl.promotions.frag.out b/Test/baseResults/hlsl.promotions.frag.out index f1354063fc..7bc2bb639c 100644 --- a/Test/baseResults/hlsl.promotions.frag.out +++ b/Test/baseResults/hlsl.promotions.frag.out @@ -1582,7 +1582,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 596 Capability Shader @@ -1683,6 +1683,7 @@ gl_FragCoord origin is upper left Name 578 "outval" Name 586 "psout" Name 593 "@entryPointOutput.Color" + Decorate 111($Global) Block MemberDecorate 111($Global) 0 Offset 0 MemberDecorate 111($Global) 1 Offset 16 MemberDecorate 111($Global) 2 Offset 32 @@ -1693,9 +1694,8 @@ gl_FragCoord origin is upper left MemberDecorate 111($Global) 7 Offset 96 MemberDecorate 111($Global) 8 Offset 100 MemberDecorate 111($Global) 9 Offset 104 - Decorate 111($Global) Block - Decorate 113 DescriptorSet 0 Decorate 113 Binding 0 + Decorate 113 DescriptorSet 0 Decorate 593(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.round.dx10.frag.out b/Test/baseResults/hlsl.round.dx10.frag.out index be72dc5972..f8597d4d52 100644 --- a/Test/baseResults/hlsl.round.dx10.frag.out +++ b/Test/baseResults/hlsl.round.dx10.frag.out @@ -29,7 +29,7 @@ gl_FragCoord origin is upper left 0:? Linker Objects // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 17 Capability Shader diff --git a/Test/baseResults/hlsl.round.dx9.frag.out b/Test/baseResults/hlsl.round.dx9.frag.out index 9333c7dcff..5f539bb8c4 100644 --- a/Test/baseResults/hlsl.round.dx9.frag.out +++ b/Test/baseResults/hlsl.round.dx9.frag.out @@ -29,7 +29,7 @@ gl_FragCoord origin is upper left 0:? Linker Objects // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader @@ -58,8 +58,10 @@ gl_FragCoord origin is upper left 10: TypeFunction 8(fvec4) 9(ptr) 5(main): 3 Function None 4 6: Label + Line 1 3 0 Return FunctionEnd + Line 1 2 1 12(PixelShaderFunction(vf4;): 8(fvec4) Function None 10 11(input): 9(ptr) FunctionParameter 13: Label diff --git a/Test/baseResults/hlsl.rw.atomics.frag.out b/Test/baseResults/hlsl.rw.atomics.frag.out index 06bc31729a..8075419145 100644 --- a/Test/baseResults/hlsl.rw.atomics.frag.out +++ b/Test/baseResults/hlsl.rw.atomics.frag.out @@ -3946,7 +3946,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 1147 Capability Shader @@ -3996,8 +3996,9 @@ gl_FragCoord origin is upper left Name 1140 "g_tTex2di1a" Name 1143 "g_tTex2du1a" Name 1146 "g_tBuffF" - Decorate 15(g_tTex1di1) DescriptorSet 0 Decorate 15(g_tTex1di1) Binding 0 + Decorate 15(g_tTex1di1) DescriptorSet 0 + Decorate 21($Global) Block MemberDecorate 21($Global) 0 Offset 0 MemberDecorate 21($Global) 1 Offset 8 MemberDecorate 21($Global) 2 Offset 16 @@ -4008,46 +4009,45 @@ gl_FragCoord origin is upper left MemberDecorate 21($Global) 7 Offset 48 MemberDecorate 21($Global) 8 Offset 60 MemberDecorate 21($Global) 9 Offset 64 - Decorate 21($Global) Block - Decorate 23 DescriptorSet 0 Decorate 23 Binding 10 - Decorate 121(g_tTex1du1) DescriptorSet 0 + Decorate 23 DescriptorSet 0 Decorate 121(g_tTex1du1) Binding 1 - Decorate 217(g_tTex2di1) DescriptorSet 0 + Decorate 121(g_tTex1du1) DescriptorSet 0 Decorate 217(g_tTex2di1) Binding 2 - Decorate 308(g_tTex2du1) DescriptorSet 0 + Decorate 217(g_tTex2di1) DescriptorSet 0 Decorate 308(g_tTex2du1) Binding 3 - Decorate 399(g_tTex3di1) DescriptorSet 0 + Decorate 308(g_tTex2du1) DescriptorSet 0 Decorate 399(g_tTex3di1) Binding 4 - Decorate 490(g_tTex3du1) DescriptorSet 0 + Decorate 399(g_tTex3di1) DescriptorSet 0 Decorate 490(g_tTex3du1) Binding 5 - Decorate 581(g_tTex1di1a) DescriptorSet 0 + Decorate 490(g_tTex3du1) DescriptorSet 0 Decorate 581(g_tTex1di1a) Binding 6 - Decorate 670(g_tTex1du1a) DescriptorSet 0 + Decorate 581(g_tTex1di1a) DescriptorSet 0 Decorate 670(g_tTex1du1a) Binding 7 - Decorate 931(g_tBuffI) DescriptorSet 0 + Decorate 670(g_tTex1du1a) DescriptorSet 0 Decorate 931(g_tBuffI) Binding 8 - Decorate 1020(g_tBuffU) DescriptorSet 0 + Decorate 931(g_tBuffI) DescriptorSet 0 Decorate 1020(g_tBuffU) Binding 9 + Decorate 1020(g_tBuffU) DescriptorSet 0 Decorate 1117(@entryPointOutput.Color) Location 0 - Decorate 1122(g_sSamp) DescriptorSet 0 Decorate 1122(g_sSamp) Binding 0 - Decorate 1125(g_tTex1df1) DescriptorSet 0 + Decorate 1122(g_sSamp) DescriptorSet 0 Decorate 1125(g_tTex1df1) Binding 0 - Decorate 1128(g_tTex2df1) DescriptorSet 0 + Decorate 1125(g_tTex1df1) DescriptorSet 0 Decorate 1128(g_tTex2df1) Binding 0 - Decorate 1131(g_tTex3df1) DescriptorSet 0 + Decorate 1128(g_tTex2df1) DescriptorSet 0 Decorate 1131(g_tTex3df1) Binding 0 - Decorate 1134(g_tTex1df1a) DescriptorSet 0 + Decorate 1131(g_tTex3df1) DescriptorSet 0 Decorate 1134(g_tTex1df1a) Binding 0 - Decorate 1137(g_tTex2df1a) DescriptorSet 0 + Decorate 1134(g_tTex1df1a) DescriptorSet 0 Decorate 1137(g_tTex2df1a) Binding 0 - Decorate 1140(g_tTex2di1a) DescriptorSet 0 + Decorate 1137(g_tTex2df1a) DescriptorSet 0 Decorate 1140(g_tTex2di1a) Binding 0 - Decorate 1143(g_tTex2du1a) DescriptorSet 0 + Decorate 1140(g_tTex2di1a) DescriptorSet 0 Decorate 1143(g_tTex2du1a) Binding 0 - Decorate 1146(g_tBuffF) DescriptorSet 0 + Decorate 1143(g_tTex2du1a) DescriptorSet 0 Decorate 1146(g_tBuffF) Binding 0 + Decorate 1146(g_tBuffF) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out index c79877c05a..f199c6207c 100644 --- a/Test/baseResults/hlsl.rw.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.bracket.frag.out @@ -1744,7 +1744,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 607 Capability Shader @@ -1880,6 +1880,7 @@ gl_FragCoord origin is upper left Name 600 "g_tTex2df4a" Name 603 "g_tTex2di4a" Name 606 "g_tTex2du4a" + Decorate 63($Global) Block MemberDecorate 63($Global) 0 Offset 0 MemberDecorate 63($Global) 1 Offset 8 MemberDecorate 63($Global) 2 Offset 16 @@ -1891,42 +1892,41 @@ gl_FragCoord origin is upper left MemberDecorate 63($Global) 8 Offset 96 MemberDecorate 63($Global) 9 Offset 112 MemberDecorate 63($Global) 10 Offset 128 - Decorate 63($Global) Block - Decorate 65 DescriptorSet 0 Decorate 65 Binding 9 - Decorate 75(g_tTex1df4) DescriptorSet 0 + Decorate 65 DescriptorSet 0 Decorate 75(g_tTex1df4) Binding 0 - Decorate 89(g_tTex1di4) DescriptorSet 0 + Decorate 75(g_tTex1df4) DescriptorSet 0 Decorate 89(g_tTex1di4) Binding 1 - Decorate 97(g_tTex1du4) DescriptorSet 0 + Decorate 89(g_tTex1di4) DescriptorSet 0 Decorate 97(g_tTex1du4) Binding 2 - Decorate 105(g_tTex2df4) DescriptorSet 0 + Decorate 97(g_tTex1du4) DescriptorSet 0 Decorate 105(g_tTex2df4) Binding 3 - Decorate 115(g_tTex2di4) DescriptorSet 0 + Decorate 105(g_tTex2df4) DescriptorSet 0 Decorate 115(g_tTex2di4) Binding 4 - Decorate 123(g_tTex2du4) DescriptorSet 0 + Decorate 115(g_tTex2di4) DescriptorSet 0 Decorate 123(g_tTex2du4) Binding 5 - Decorate 131(g_tTex3df4) DescriptorSet 0 + Decorate 123(g_tTex2du4) DescriptorSet 0 Decorate 131(g_tTex3df4) Binding 6 - Decorate 141(g_tTex3di4) DescriptorSet 0 + Decorate 131(g_tTex3df4) DescriptorSet 0 Decorate 141(g_tTex3di4) Binding 7 - Decorate 149(g_tTex3du4) DescriptorSet 0 + Decorate 141(g_tTex3di4) DescriptorSet 0 Decorate 149(g_tTex3du4) Binding 8 + Decorate 149(g_tTex3du4) DescriptorSet 0 Decorate 583(@entryPointOutput.Color) Location 0 - Decorate 588(g_sSamp) DescriptorSet 0 Decorate 588(g_sSamp) Binding 0 - Decorate 591(g_tTex1df4a) DescriptorSet 0 + Decorate 588(g_sSamp) DescriptorSet 0 Decorate 591(g_tTex1df4a) Binding 0 - Decorate 594(g_tTex1di4a) DescriptorSet 0 + Decorate 591(g_tTex1df4a) DescriptorSet 0 Decorate 594(g_tTex1di4a) Binding 0 - Decorate 597(g_tTex1du4a) DescriptorSet 0 + Decorate 594(g_tTex1di4a) DescriptorSet 0 Decorate 597(g_tTex1du4a) Binding 0 - Decorate 600(g_tTex2df4a) DescriptorSet 0 + Decorate 597(g_tTex1du4a) DescriptorSet 0 Decorate 600(g_tTex2df4a) Binding 0 - Decorate 603(g_tTex2di4a) DescriptorSet 0 + Decorate 600(g_tTex2df4a) DescriptorSet 0 Decorate 603(g_tTex2di4a) Binding 0 - Decorate 606(g_tTex2du4a) DescriptorSet 0 + Decorate 603(g_tTex2di4a) DescriptorSet 0 Decorate 606(g_tTex2du4a) Binding 0 + Decorate 606(g_tTex2du4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out index 265eaf9e36..a4f377306f 100644 --- a/Test/baseResults/hlsl.rw.register.frag.out +++ b/Test/baseResults/hlsl.rw.register.frag.out @@ -98,7 +98,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 45 Capability Shader @@ -119,10 +119,10 @@ gl_FragCoord origin is upper left Name 27 "g_tBuf1du1" Name 33 "psout" Name 42 "@entryPointOutput.Color" - Decorate 16(g_tTex1df1) DescriptorSet 0 Decorate 16(g_tTex1df1) Binding 2 - Decorate 27(g_tBuf1du1) DescriptorSet 0 + Decorate 16(g_tTex1df1) DescriptorSet 0 Decorate 27(g_tBuf1du1) Binding 3 + Decorate 27(g_tBuf1du1) DescriptorSet 0 Decorate 42(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out index 8e4716b71b..20c7600fca 100644 --- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out @@ -1690,7 +1690,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 607 Capability Shader @@ -1826,6 +1826,7 @@ gl_FragCoord origin is upper left Name 600 "g_tTex2df1a" Name 603 "g_tTex2di1a" Name 606 "g_tTex2du1a" + Decorate 59($Global) Block MemberDecorate 59($Global) 0 Offset 0 MemberDecorate 59($Global) 1 Offset 8 MemberDecorate 59($Global) 2 Offset 16 @@ -1837,42 +1838,41 @@ gl_FragCoord origin is upper left MemberDecorate 59($Global) 8 Offset 96 MemberDecorate 59($Global) 9 Offset 100 MemberDecorate 59($Global) 10 Offset 104 - Decorate 59($Global) Block - Decorate 61 DescriptorSet 0 Decorate 61 Binding 10 - Decorate 70(g_tTex1df1) DescriptorSet 0 + Decorate 61 DescriptorSet 0 Decorate 70(g_tTex1df1) Binding 1 - Decorate 85(g_tTex1di1) DescriptorSet 0 + Decorate 70(g_tTex1df1) DescriptorSet 0 Decorate 85(g_tTex1di1) Binding 2 - Decorate 94(g_tTex1du1) DescriptorSet 0 + Decorate 85(g_tTex1di1) DescriptorSet 0 Decorate 94(g_tTex1du1) Binding 3 - Decorate 104(g_tTex2df1) DescriptorSet 0 + Decorate 94(g_tTex1du1) DescriptorSet 0 Decorate 104(g_tTex2df1) Binding 4 - Decorate 115(g_tTex2di1) DescriptorSet 0 + Decorate 104(g_tTex2df1) DescriptorSet 0 Decorate 115(g_tTex2di1) Binding 5 - Decorate 124(g_tTex2du1) DescriptorSet 0 + Decorate 115(g_tTex2di1) DescriptorSet 0 Decorate 124(g_tTex2du1) Binding 6 - Decorate 133(g_tTex3df1) DescriptorSet 0 + Decorate 124(g_tTex2du1) DescriptorSet 0 Decorate 133(g_tTex3df1) Binding 7 - Decorate 144(g_tTex3di1) DescriptorSet 0 + Decorate 133(g_tTex3df1) DescriptorSet 0 Decorate 144(g_tTex3di1) Binding 8 - Decorate 153(g_tTex3du1) DescriptorSet 0 + Decorate 144(g_tTex3di1) DescriptorSet 0 Decorate 153(g_tTex3du1) Binding 9 + Decorate 153(g_tTex3du1) DescriptorSet 0 Decorate 583(@entryPointOutput.Color) Location 0 - Decorate 588(g_sSamp) DescriptorSet 0 Decorate 588(g_sSamp) Binding 0 - Decorate 591(g_tTex1df1a) DescriptorSet 0 + Decorate 588(g_sSamp) DescriptorSet 0 Decorate 591(g_tTex1df1a) Binding 0 - Decorate 594(g_tTex1di1a) DescriptorSet 0 + Decorate 591(g_tTex1df1a) DescriptorSet 0 Decorate 594(g_tTex1di1a) Binding 0 - Decorate 597(g_tTex1du1a) DescriptorSet 0 + Decorate 594(g_tTex1di1a) DescriptorSet 0 Decorate 597(g_tTex1du1a) Binding 0 - Decorate 600(g_tTex2df1a) DescriptorSet 0 + Decorate 597(g_tTex1du1a) DescriptorSet 0 Decorate 600(g_tTex2df1a) Binding 0 - Decorate 603(g_tTex2di1a) DescriptorSet 0 + Decorate 600(g_tTex2df1a) DescriptorSet 0 Decorate 603(g_tTex2di1a) Binding 0 - Decorate 606(g_tTex2du1a) DescriptorSet 0 + Decorate 603(g_tTex2di1a) DescriptorSet 0 Decorate 606(g_tTex2du1a) Binding 0 + Decorate 606(g_tTex2du1a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/hlsl.rw.swizzle.frag.out b/Test/baseResults/hlsl.rw.swizzle.frag.out index 97dd0dc417..28788f9d77 100644 --- a/Test/baseResults/hlsl.rw.swizzle.frag.out +++ b/Test/baseResults/hlsl.rw.swizzle.frag.out @@ -202,7 +202,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 63 Capability Shader @@ -223,11 +223,11 @@ gl_FragCoord origin is upper left Name 46 "storeTemp" Name 58 "@entryPointOutput" Name 62 "buf" - Decorate 35(rwtx) DescriptorSet 0 Decorate 35(rwtx) Binding 0 + Decorate 35(rwtx) DescriptorSet 0 Decorate 58(@entryPointOutput) Location 0 - Decorate 62(buf) DescriptorSet 0 Decorate 62(buf) Binding 0 + Decorate 62(buf) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out index 1f77a77817..304ff9c049 100644 --- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out @@ -1708,7 +1708,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 711 Capability Shader @@ -1845,6 +1845,7 @@ gl_FragCoord origin is upper left Name 704 "g_tTex2df2a" Name 707 "g_tTex2di2a" Name 710 "g_tTex2du2a" + Decorate 64($Global) Block MemberDecorate 64($Global) 0 Offset 0 MemberDecorate 64($Global) 1 Offset 8 MemberDecorate 64($Global) 2 Offset 16 @@ -1856,42 +1857,41 @@ gl_FragCoord origin is upper left MemberDecorate 64($Global) 8 Offset 96 MemberDecorate 64($Global) 9 Offset 104 MemberDecorate 64($Global) 10 Offset 112 - Decorate 64($Global) Block - Decorate 66 DescriptorSet 0 Decorate 66 Binding 10 - Decorate 76(g_tTex1df2) DescriptorSet 0 + Decorate 66 DescriptorSet 0 Decorate 76(g_tTex1df2) Binding 1 - Decorate 96(g_tTex1di2) DescriptorSet 0 + Decorate 76(g_tTex1df2) DescriptorSet 0 Decorate 96(g_tTex1di2) Binding 2 - Decorate 107(g_tTex1du2) DescriptorSet 0 + Decorate 96(g_tTex1di2) DescriptorSet 0 Decorate 107(g_tTex1du2) Binding 3 - Decorate 119(g_tTex2df2) DescriptorSet 0 + Decorate 107(g_tTex1du2) DescriptorSet 0 Decorate 119(g_tTex2df2) Binding 4 - Decorate 130(g_tTex2di2) DescriptorSet 0 + Decorate 119(g_tTex2df2) DescriptorSet 0 Decorate 130(g_tTex2di2) Binding 5 - Decorate 141(g_tTex2du2) DescriptorSet 0 + Decorate 130(g_tTex2di2) DescriptorSet 0 Decorate 141(g_tTex2du2) Binding 6 - Decorate 152(g_tTex3df2) DescriptorSet 0 + Decorate 141(g_tTex2du2) DescriptorSet 0 Decorate 152(g_tTex3df2) Binding 7 - Decorate 165(g_tTex3di2) DescriptorSet 0 + Decorate 152(g_tTex3df2) DescriptorSet 0 Decorate 165(g_tTex3di2) Binding 8 - Decorate 176(g_tTex3du2) DescriptorSet 0 + Decorate 165(g_tTex3di2) DescriptorSet 0 Decorate 176(g_tTex3du2) Binding 9 + Decorate 176(g_tTex3du2) DescriptorSet 0 Decorate 687(@entryPointOutput.Color) Location 0 - Decorate 692(g_sSamp) DescriptorSet 0 Decorate 692(g_sSamp) Binding 0 - Decorate 695(g_tTex1df2a) DescriptorSet 0 + Decorate 692(g_sSamp) DescriptorSet 0 Decorate 695(g_tTex1df2a) Binding 0 - Decorate 698(g_tTex1di2a) DescriptorSet 0 + Decorate 695(g_tTex1df2a) DescriptorSet 0 Decorate 698(g_tTex1di2a) Binding 0 - Decorate 701(g_tTex1du2a) DescriptorSet 0 + Decorate 698(g_tTex1di2a) DescriptorSet 0 Decorate 701(g_tTex1du2a) Binding 0 - Decorate 704(g_tTex2df2a) DescriptorSet 0 + Decorate 701(g_tTex1du2a) DescriptorSet 0 Decorate 704(g_tTex2df2a) Binding 0 - Decorate 707(g_tTex2di2a) DescriptorSet 0 + Decorate 704(g_tTex2df2a) DescriptorSet 0 Decorate 707(g_tTex2di2a) Binding 0 - Decorate 710(g_tTex2du2a) DescriptorSet 0 + Decorate 707(g_tTex2di2a) DescriptorSet 0 Decorate 710(g_tTex2du2a) Binding 0 + Decorate 710(g_tTex2du2a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out index 28d96f0d80..eb5ed7b964 100644 --- a/Test/baseResults/hlsl.sample.array.dx10.frag.out +++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out @@ -322,7 +322,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 146 Capability Shader @@ -363,30 +363,30 @@ using depth_any Name 138 "@entryPointOutput.Color" Name 142 "@entryPointOutput.Depth" Name 145 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 35(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 35(g_tTex1di4) Binding 2 - Decorate 49(g_tTex1du4) DescriptorSet 0 + Decorate 35(g_tTex1di4) DescriptorSet 0 Decorate 49(g_tTex1du4) Binding 3 - Decorate 60(g_tTex2df4) DescriptorSet 0 + Decorate 49(g_tTex1du4) DescriptorSet 0 Decorate 60(g_tTex2df4) Binding 4 - Decorate 71(g_tTex2di4) DescriptorSet 0 + Decorate 60(g_tTex2df4) DescriptorSet 0 Decorate 71(g_tTex2di4) Binding 5 - Decorate 82(g_tTex2du4) DescriptorSet 0 + Decorate 71(g_tTex2di4) DescriptorSet 0 Decorate 82(g_tTex2du4) Binding 6 - Decorate 94(g_tTexcdf4) DescriptorSet 0 + Decorate 82(g_tTex2du4) DescriptorSet 0 Decorate 94(g_tTexcdf4) Binding 7 - Decorate 104(g_tTexcdi4) DescriptorSet 0 + Decorate 94(g_tTexcdf4) DescriptorSet 0 Decorate 104(g_tTexcdi4) Binding 8 - Decorate 114(g_tTexcdu4) DescriptorSet 0 + Decorate 104(g_tTexcdi4) DescriptorSet 0 Decorate 114(g_tTexcdu4) Binding 9 + Decorate 114(g_tTexcdu4) DescriptorSet 0 Decorate 138(@entryPointOutput.Color) Location 0 Decorate 142(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 145(g_tTex1df4a) DescriptorSet 0 Decorate 145(g_tTex1df4a) Binding 1 + Decorate 145(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out index 12c67111ba..8e2739d9b0 100644 --- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out @@ -550,7 +550,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 198 Capability Shader @@ -612,40 +612,40 @@ using depth_any Name 195 "g_sSamp2d" Name 196 "g_sSamp2D_b" Name 197 "g_tTex1df4a" - Decorate 45(g_tTex1df4) DescriptorSet 0 Decorate 45(g_tTex1df4) Binding 0 - Decorate 49(g_sSamp) DescriptorSet 0 + Decorate 45(g_tTex1df4) DescriptorSet 0 Decorate 49(g_sSamp) Binding 0 - Decorate 60(g_tTex1di4) DescriptorSet 0 + Decorate 49(g_sSamp) DescriptorSet 0 Decorate 60(g_tTex1di4) Binding 2 - Decorate 73(g_tTex1du4) DescriptorSet 0 + Decorate 60(g_tTex1di4) DescriptorSet 0 Decorate 73(g_tTex1du4) Binding 3 - Decorate 83(g_tTex2df4) DescriptorSet 0 + Decorate 73(g_tTex1du4) DescriptorSet 0 Decorate 83(g_tTex2df4) Binding 4 - Decorate 94(g_tTex2di4) DescriptorSet 0 + Decorate 83(g_tTex2df4) DescriptorSet 0 Decorate 94(g_tTex2di4) Binding 5 - Decorate 105(g_tTex2du4) DescriptorSet 0 + Decorate 94(g_tTex2di4) DescriptorSet 0 Decorate 105(g_tTex2du4) Binding 6 - Decorate 117(g_tTex3df4) DescriptorSet 0 + Decorate 105(g_tTex2du4) DescriptorSet 0 Decorate 117(g_tTex3df4) Binding 7 - Decorate 128(g_tTex3di4) DescriptorSet 0 + Decorate 117(g_tTex3df4) DescriptorSet 0 Decorate 128(g_tTex3di4) Binding 8 - Decorate 138(g_tTex3du4) DescriptorSet 0 + Decorate 128(g_tTex3di4) DescriptorSet 0 Decorate 138(g_tTex3du4) Binding 9 - Decorate 151(g_tTexcdf4) DescriptorSet 0 + Decorate 138(g_tTex3du4) DescriptorSet 0 Decorate 151(g_tTexcdf4) Binding 10 - Decorate 160(g_tTexcdi4) DescriptorSet 0 + Decorate 151(g_tTexcdf4) DescriptorSet 0 Decorate 160(g_tTexcdi4) Binding 11 - Decorate 169(g_tTexcdu4) DescriptorSet 0 + Decorate 160(g_tTexcdi4) DescriptorSet 0 Decorate 169(g_tTexcdu4) Binding 12 + Decorate 169(g_tTexcdu4) DescriptorSet 0 Decorate 188(@entryPointOutput.Color) Location 0 Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 195(g_sSamp2d) DescriptorSet 0 Decorate 195(g_sSamp2d) Binding 0 - Decorate 196(g_sSamp2D_b) DescriptorSet 0 + Decorate 195(g_sSamp2d) DescriptorSet 0 Decorate 196(g_sSamp2D_b) Binding 0 - Decorate 197(g_tTex1df4a) DescriptorSet 0 + Decorate 196(g_sSamp2D_b) DescriptorSet 0 Decorate 197(g_tTex1df4a) Binding 1 + Decorate 197(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.sample.dx9.frag.out b/Test/baseResults/hlsl.sample.dx9.frag.out index 282455c703..f1a6e0ae65 100644 --- a/Test/baseResults/hlsl.sample.dx9.frag.out +++ b/Test/baseResults/hlsl.sample.dx9.frag.out @@ -378,7 +378,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 135 Capability Shader @@ -413,16 +413,16 @@ using depth_any Name 125 "flattenTemp" Name 128 "@entryPointOutput.Color" Name 132 "@entryPointOutput.Depth" - Decorate 20(g_sam) DescriptorSet 0 Decorate 20(g_sam) Binding 0 - Decorate 32(g_sam1D) DescriptorSet 0 + Decorate 20(g_sam) DescriptorSet 0 Decorate 32(g_sam1D) Binding 1 - Decorate 38(g_sam2D) DescriptorSet 0 + Decorate 32(g_sam1D) DescriptorSet 0 Decorate 38(g_sam2D) Binding 2 - Decorate 48(g_sam3D) DescriptorSet 0 + Decorate 38(g_sam2D) DescriptorSet 0 Decorate 48(g_sam3D) Binding 3 - Decorate 58(g_samCube) DescriptorSet 0 + Decorate 48(g_sam3D) DescriptorSet 0 Decorate 58(g_samCube) Binding 4 + Decorate 58(g_samCube) DescriptorSet 0 Decorate 128(@entryPointOutput.Color) Location 0 Decorate 132(@entryPointOutput.Depth) BuiltIn FragDepth 3: TypeVoid @@ -477,6 +477,7 @@ using depth_any 128(@entryPointOutput.Color): 127(ptr) Variable Output 131: TypePointer Output 7(float) 132(@entryPointOutput.Depth): 131(ptr) Variable Output + Line 1 15 1 5(main): 3 Function None 4 6: Label 125(flattenTemp): 109(ptr) Variable Function @@ -491,6 +492,7 @@ using depth_any Store 132(@entryPointOutput.Depth) 134 Return FunctionEnd + Line 1 15 1 11(@main():9(PS_OUTPUT) Function None 10 12: Label 14(ColorOut): 13(ptr) Variable Function diff --git a/Test/baseResults/hlsl.sample.dx9.vert.out b/Test/baseResults/hlsl.sample.dx9.vert.out index 4b718cf174..2b6520a048 100644 --- a/Test/baseResults/hlsl.sample.dx9.vert.out +++ b/Test/baseResults/hlsl.sample.dx9.vert.out @@ -154,7 +154,7 @@ Shader version: 500 0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 64 Capability Shader @@ -180,10 +180,10 @@ Shader version: 500 Name 36 "g_sam2D" Name 49 "vsout" Name 61 "@entryPointOutput.Pos" - Decorate 20(g_sam) DescriptorSet 0 Decorate 20(g_sam) Binding 0 - Decorate 36(g_sam2D) DescriptorSet 0 + Decorate 20(g_sam) DescriptorSet 0 Decorate 36(g_sam2D) Binding 1 + Decorate 36(g_sam2D) DescriptorSet 0 Decorate 61(@entryPointOutput.Pos) BuiltIn Position 3: TypeVoid 4: TypeFunction 3 @@ -215,6 +215,7 @@ Shader version: 500 53: 7(float) Constant 1073741824 60: TypePointer Output 8(fvec4) 61(@entryPointOutput.Pos): 60(ptr) Variable Output + Line 1 11 1 5(main): 3 Function None 4 6: Label Line 1 11 0 @@ -223,6 +224,7 @@ Shader version: 500 Store 61(@entryPointOutput.Pos) 63 Return FunctionEnd + Line 1 11 1 11(@main():9(VS_OUTPUT) Function None 10 12: Label 14(PosOut): 13(ptr) Variable Function diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out index e5d204f9f7..f2be35ae31 100644 --- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out @@ -364,7 +364,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 161 Capability Shader @@ -407,36 +407,36 @@ using depth_any Name 154 "g_tTexcdf4" Name 157 "g_tTexcdi4" Name 160 "g_tTexcdu4" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 33(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 33(g_tTex1di4) Binding 2 - Decorate 46(g_tTex1du4) DescriptorSet 0 + Decorate 33(g_tTex1di4) DescriptorSet 0 Decorate 46(g_tTex1du4) Binding 3 - Decorate 56(g_tTex2df4) DescriptorSet 0 + Decorate 46(g_tTex1du4) DescriptorSet 0 Decorate 56(g_tTex2df4) Binding 4 - Decorate 70(g_tTex2di4) DescriptorSet 0 + Decorate 56(g_tTex2df4) DescriptorSet 0 Decorate 70(g_tTex2di4) Binding 5 - Decorate 82(g_tTex2du4) DescriptorSet 0 + Decorate 70(g_tTex2di4) DescriptorSet 0 Decorate 82(g_tTex2du4) Binding 6 - Decorate 96(g_tTex3df4) DescriptorSet 0 + Decorate 82(g_tTex2du4) DescriptorSet 0 Decorate 96(g_tTex3df4) Binding 7 - Decorate 109(g_tTex3di4) DescriptorSet 0 + Decorate 96(g_tTex3df4) DescriptorSet 0 Decorate 109(g_tTex3di4) Binding 8 - Decorate 120(g_tTex3du4) DescriptorSet 0 + Decorate 109(g_tTex3di4) DescriptorSet 0 Decorate 120(g_tTex3du4) Binding 9 + Decorate 120(g_tTex3du4) DescriptorSet 0 Decorate 144(@entryPointOutput.Color) Location 0 Decorate 148(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 151(g_tTex1df4a) DescriptorSet 0 Decorate 151(g_tTex1df4a) Binding 1 - Decorate 154(g_tTexcdf4) DescriptorSet 0 + Decorate 151(g_tTex1df4a) DescriptorSet 0 Decorate 154(g_tTexcdf4) Binding 0 - Decorate 157(g_tTexcdi4) DescriptorSet 0 + Decorate 154(g_tTexcdf4) DescriptorSet 0 Decorate 157(g_tTexcdi4) Binding 0 - Decorate 160(g_tTexcdu4) DescriptorSet 0 + Decorate 157(g_tTexcdi4) DescriptorSet 0 Decorate 160(g_tTexcdu4) Binding 0 + Decorate 160(g_tTexcdu4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out index 5b14c657ad..08da18373c 100644 --- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out @@ -274,7 +274,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 118 Capability Shader @@ -308,24 +308,24 @@ using depth_any Name 110 "@entryPointOutput.Color" Name 114 "@entryPointOutput.Depth" Name 117 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 36(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 36(g_tTex1di4) Binding 2 - Decorate 51(g_tTex1du4) DescriptorSet 0 + Decorate 36(g_tTex1di4) DescriptorSet 0 Decorate 51(g_tTex1du4) Binding 3 - Decorate 63(g_tTex2df4) DescriptorSet 0 + Decorate 51(g_tTex1du4) DescriptorSet 0 Decorate 63(g_tTex2df4) Binding 4 - Decorate 76(g_tTex2di4) DescriptorSet 0 + Decorate 63(g_tTex2df4) DescriptorSet 0 Decorate 76(g_tTex2di4) Binding 5 - Decorate 87(g_tTex2du4) DescriptorSet 0 + Decorate 76(g_tTex2di4) DescriptorSet 0 Decorate 87(g_tTex2du4) Binding 6 + Decorate 87(g_tTex2du4) DescriptorSet 0 Decorate 110(@entryPointOutput.Color) Location 0 Decorate 114(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 117(g_tTex1df4a) DescriptorSet 0 Decorate 117(g_tTex1df4a) Binding 1 + Decorate 117(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out index 8754a0385f..71c0162b5a 100644 --- a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out +++ b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out @@ -154,7 +154,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 72 Capability Shader @@ -179,16 +179,16 @@ gl_FragCoord origin is upper left Name 53 "g_tTex1df4" Name 59 "psout" Name 69 "@entryPointOutput.Color" - Decorate 16(g_tTex1df1) DescriptorSet 0 Decorate 16(g_tTex1df1) Binding 1 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df1) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 30(g_tTex1df2) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 30(g_tTex1df2) Binding 2 - Decorate 42(g_tTex1df3) DescriptorSet 0 + Decorate 30(g_tTex1df2) DescriptorSet 0 Decorate 42(g_tTex1df3) Binding 3 - Decorate 53(g_tTex1df4) DescriptorSet 0 + Decorate 42(g_tTex1df3) DescriptorSet 0 Decorate 53(g_tTex1df4) Binding 4 + Decorate 53(g_tTex1df4) DescriptorSet 0 Decorate 69(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out index e177d77b2b..dd18bbe7a6 100644 --- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out @@ -358,7 +358,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 146 Capability Shader @@ -399,30 +399,30 @@ using depth_any Name 138 "@entryPointOutput.Color" Name 142 "@entryPointOutput.Depth" Name 145 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 36(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 36(g_tTex1di4) Binding 2 - Decorate 50(g_tTex1du4) DescriptorSet 0 + Decorate 36(g_tTex1di4) DescriptorSet 0 Decorate 50(g_tTex1du4) Binding 3 - Decorate 61(g_tTex2df4) DescriptorSet 0 + Decorate 50(g_tTex1du4) DescriptorSet 0 Decorate 61(g_tTex2df4) Binding 4 - Decorate 72(g_tTex2di4) DescriptorSet 0 + Decorate 61(g_tTex2df4) DescriptorSet 0 Decorate 72(g_tTex2di4) Binding 5 - Decorate 82(g_tTex2du4) DescriptorSet 0 + Decorate 72(g_tTex2di4) DescriptorSet 0 Decorate 82(g_tTex2du4) Binding 6 - Decorate 94(g_tTexcdf4) DescriptorSet 0 + Decorate 82(g_tTex2du4) DescriptorSet 0 Decorate 94(g_tTexcdf4) Binding 7 - Decorate 104(g_tTexcdi4) DescriptorSet 0 + Decorate 94(g_tTexcdf4) DescriptorSet 0 Decorate 104(g_tTexcdi4) Binding 8 - Decorate 114(g_tTexcdu4) DescriptorSet 0 + Decorate 104(g_tTexcdi4) DescriptorSet 0 Decorate 114(g_tTexcdu4) Binding 9 + Decorate 114(g_tTexcdu4) DescriptorSet 0 Decorate 138(@entryPointOutput.Color) Location 0 Decorate 142(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 145(g_tTex1df4a) DescriptorSet 0 Decorate 145(g_tTex1df4a) Binding 1 + Decorate 145(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out index 2f15b42b3b..4b95ca2aff 100644 --- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out @@ -424,7 +424,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 170 Capability Shader @@ -470,36 +470,36 @@ using depth_any Name 162 "@entryPointOutput.Color" Name 166 "@entryPointOutput.Depth" Name 169 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 33(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 33(g_tTex1di4) Binding 2 - Decorate 46(g_tTex1du4) DescriptorSet 0 + Decorate 33(g_tTex1di4) DescriptorSet 0 Decorate 46(g_tTex1du4) Binding 3 - Decorate 56(g_tTex2df4) DescriptorSet 0 + Decorate 46(g_tTex1du4) DescriptorSet 0 Decorate 56(g_tTex2df4) Binding 4 - Decorate 67(g_tTex2di4) DescriptorSet 0 + Decorate 56(g_tTex2df4) DescriptorSet 0 Decorate 67(g_tTex2di4) Binding 5 - Decorate 78(g_tTex2du4) DescriptorSet 0 + Decorate 67(g_tTex2di4) DescriptorSet 0 Decorate 78(g_tTex2du4) Binding 6 - Decorate 89(g_tTex3df4) DescriptorSet 0 + Decorate 78(g_tTex2du4) DescriptorSet 0 Decorate 89(g_tTex3df4) Binding 7 - Decorate 100(g_tTex3di4) DescriptorSet 0 + Decorate 89(g_tTex3df4) DescriptorSet 0 Decorate 100(g_tTex3di4) Binding 8 - Decorate 110(g_tTex3du4) DescriptorSet 0 + Decorate 100(g_tTex3di4) DescriptorSet 0 Decorate 110(g_tTex3du4) Binding 9 - Decorate 123(g_tTexcdf4) DescriptorSet 0 + Decorate 110(g_tTex3du4) DescriptorSet 0 Decorate 123(g_tTexcdf4) Binding 10 - Decorate 132(g_tTexcdi4) DescriptorSet 0 + Decorate 123(g_tTexcdf4) DescriptorSet 0 Decorate 132(g_tTexcdi4) Binding 11 - Decorate 141(g_tTexcdu4) DescriptorSet 0 + Decorate 132(g_tTexcdi4) DescriptorSet 0 Decorate 141(g_tTexcdu4) Binding 12 + Decorate 141(g_tTexcdu4) DescriptorSet 0 Decorate 162(@entryPointOutput.Color) Location 0 Decorate 166(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 169(g_tTex1df4a) DescriptorSet 0 Decorate 169(g_tTex1df4a) Binding 1 + Decorate 169(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out index 291f62489c..f6403a0e7d 100644 --- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out @@ -400,7 +400,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 161 Capability Shader @@ -443,36 +443,36 @@ using depth_any Name 154 "g_tTexcdf4" Name 157 "g_tTexcdi4" Name 160 "g_tTexcdu4" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 34(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 34(g_tTex1di4) Binding 2 - Decorate 47(g_tTex1du4) DescriptorSet 0 + Decorate 34(g_tTex1di4) DescriptorSet 0 Decorate 47(g_tTex1du4) Binding 3 - Decorate 57(g_tTex2df4) DescriptorSet 0 + Decorate 47(g_tTex1du4) DescriptorSet 0 Decorate 57(g_tTex2df4) Binding 4 - Decorate 71(g_tTex2di4) DescriptorSet 0 + Decorate 57(g_tTex2df4) DescriptorSet 0 Decorate 71(g_tTex2di4) Binding 5 - Decorate 83(g_tTex2du4) DescriptorSet 0 + Decorate 71(g_tTex2di4) DescriptorSet 0 Decorate 83(g_tTex2du4) Binding 6 - Decorate 96(g_tTex3df4) DescriptorSet 0 + Decorate 83(g_tTex2du4) DescriptorSet 0 Decorate 96(g_tTex3df4) Binding 7 - Decorate 109(g_tTex3di4) DescriptorSet 0 + Decorate 96(g_tTex3df4) DescriptorSet 0 Decorate 109(g_tTex3di4) Binding 8 - Decorate 120(g_tTex3du4) DescriptorSet 0 + Decorate 109(g_tTex3di4) DescriptorSet 0 Decorate 120(g_tTex3du4) Binding 9 + Decorate 120(g_tTex3du4) DescriptorSet 0 Decorate 144(@entryPointOutput.Color) Location 0 Decorate 148(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 151(g_tTex1df4a) DescriptorSet 0 Decorate 151(g_tTex1df4a) Binding 1 - Decorate 154(g_tTexcdf4) DescriptorSet 0 + Decorate 151(g_tTex1df4a) DescriptorSet 0 Decorate 154(g_tTexcdf4) Binding 0 - Decorate 157(g_tTexcdi4) DescriptorSet 0 + Decorate 154(g_tTexcdf4) DescriptorSet 0 Decorate 157(g_tTexcdi4) Binding 0 - Decorate 160(g_tTexcdu4) DescriptorSet 0 + Decorate 157(g_tTexcdi4) DescriptorSet 0 Decorate 160(g_tTexcdu4) Binding 0 + Decorate 160(g_tTexcdu4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out index a5bb613970..ba31124fa1 100644 --- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out @@ -298,7 +298,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 118 Capability Shader @@ -332,24 +332,24 @@ using depth_any Name 110 "@entryPointOutput.Color" Name 114 "@entryPointOutput.Depth" Name 117 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 37(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 37(g_tTex1di4) Binding 2 - Decorate 52(g_tTex1du4) DescriptorSet 0 + Decorate 37(g_tTex1di4) DescriptorSet 0 Decorate 52(g_tTex1du4) Binding 3 - Decorate 64(g_tTex2df4) DescriptorSet 0 + Decorate 52(g_tTex1du4) DescriptorSet 0 Decorate 64(g_tTex2df4) Binding 4 - Decorate 77(g_tTex2di4) DescriptorSet 0 + Decorate 64(g_tTex2df4) DescriptorSet 0 Decorate 77(g_tTex2di4) Binding 5 - Decorate 87(g_tTex2du4) DescriptorSet 0 + Decorate 77(g_tTex2di4) DescriptorSet 0 Decorate 87(g_tTex2du4) Binding 6 + Decorate 87(g_tTex2du4) DescriptorSet 0 Decorate 110(@entryPointOutput.Color) Location 0 Decorate 114(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 117(g_tTex1df4a) DescriptorSet 0 Decorate 117(g_tTex1df4a) Binding 1 + Decorate 117(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out index 0ab61eba70..7ecb39f13c 100644 --- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out @@ -399,15 +399,15 @@ using depth_any Validation failed // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 209 +// Generated by (magic number): 8000b +// Id's are bound by 194 Capability Shader Capability Sampled1D Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 166 170 + EntryPoint Fragment 4 "main" 151 155 ExecutionMode 4 OriginUpperLeft ExecutionMode 4 DepthReplacing Source HLSL 500 @@ -431,72 +431,72 @@ Validation failed Name 96 "g_tTex2du4a" Name 107 "r60" Name 110 "g_tTexcdf4a" - Name 123 "r62" - Name 126 "g_tTexcdi4a" - Name 137 "r64" - Name 140 "g_tTexcdu4a" - Name 152 "psout" - Name 163 "flattenTemp" - Name 166 "@entryPointOutput.Color" - Name 170 "@entryPointOutput.Depth" - Name 175 "g_tTex1df4" - Name 178 "g_tTex1di4" - Name 181 "g_tTex1du4" - Name 184 "g_tTex2df4" - Name 187 "g_tTex2di4" - Name 190 "g_tTex2du4" - Name 193 "g_tTex3df4" - Name 196 "g_tTex3di4" - Name 199 "g_tTex3du4" - Name 202 "g_tTexcdf4" - Name 205 "g_tTexcdi4" - Name 208 "g_tTexcdu4" - Decorate 16(g_tTex1df4a) DescriptorSet 0 + Name 118 "r62" + Name 121 "g_tTexcdi4a" + Name 127 "r64" + Name 130 "g_tTexcdu4a" + Name 137 "psout" + Name 148 "flattenTemp" + Name 151 "@entryPointOutput.Color" + Name 155 "@entryPointOutput.Depth" + Name 160 "g_tTex1df4" + Name 163 "g_tTex1di4" + Name 166 "g_tTex1du4" + Name 169 "g_tTex2df4" + Name 172 "g_tTex2di4" + Name 175 "g_tTex2du4" + Name 178 "g_tTex3df4" + Name 181 "g_tTex3di4" + Name 184 "g_tTex3du4" + Name 187 "g_tTexcdf4" + Name 190 "g_tTexcdi4" + Name 193 "g_tTexcdu4" Decorate 16(g_tTex1df4a) Binding 1 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 39(g_tTex1di4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 39(g_tTex1di4a) Binding 2 - Decorate 53(g_tTex1du4a) DescriptorSet 0 + Decorate 39(g_tTex1di4a) DescriptorSet 0 Decorate 53(g_tTex1du4a) Binding 3 - Decorate 66(g_tTex2df4a) DescriptorSet 0 + Decorate 53(g_tTex1du4a) DescriptorSet 0 Decorate 66(g_tTex2df4a) Binding 4 - Decorate 82(g_tTex2di4a) DescriptorSet 0 + Decorate 66(g_tTex2df4a) DescriptorSet 0 Decorate 82(g_tTex2di4a) Binding 5 - Decorate 96(g_tTex2du4a) DescriptorSet 0 + Decorate 82(g_tTex2di4a) DescriptorSet 0 Decorate 96(g_tTex2du4a) Binding 6 - Decorate 110(g_tTexcdf4a) DescriptorSet 0 + Decorate 96(g_tTex2du4a) DescriptorSet 0 Decorate 110(g_tTexcdf4a) Binding 7 - Decorate 126(g_tTexcdi4a) DescriptorSet 0 - Decorate 126(g_tTexcdi4a) Binding 8 - Decorate 140(g_tTexcdu4a) DescriptorSet 0 - Decorate 140(g_tTexcdu4a) Binding 9 - Decorate 166(@entryPointOutput.Color) Location 0 - Decorate 170(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 175(g_tTex1df4) DescriptorSet 0 - Decorate 175(g_tTex1df4) Binding 0 - Decorate 178(g_tTex1di4) DescriptorSet 0 - Decorate 178(g_tTex1di4) Binding 0 - Decorate 181(g_tTex1du4) DescriptorSet 0 - Decorate 181(g_tTex1du4) Binding 0 - Decorate 184(g_tTex2df4) DescriptorSet 0 - Decorate 184(g_tTex2df4) Binding 0 - Decorate 187(g_tTex2di4) DescriptorSet 0 - Decorate 187(g_tTex2di4) Binding 0 - Decorate 190(g_tTex2du4) DescriptorSet 0 - Decorate 190(g_tTex2du4) Binding 0 - Decorate 193(g_tTex3df4) DescriptorSet 0 - Decorate 193(g_tTex3df4) Binding 0 - Decorate 196(g_tTex3di4) DescriptorSet 0 - Decorate 196(g_tTex3di4) Binding 0 - Decorate 199(g_tTex3du4) DescriptorSet 0 - Decorate 199(g_tTex3du4) Binding 0 - Decorate 202(g_tTexcdf4) DescriptorSet 0 - Decorate 202(g_tTexcdf4) Binding 0 - Decorate 205(g_tTexcdi4) DescriptorSet 0 - Decorate 205(g_tTexcdi4) Binding 0 - Decorate 208(g_tTexcdu4) DescriptorSet 0 - Decorate 208(g_tTexcdu4) Binding 0 + Decorate 110(g_tTexcdf4a) DescriptorSet 0 + Decorate 121(g_tTexcdi4a) Binding 8 + Decorate 121(g_tTexcdi4a) DescriptorSet 0 + Decorate 130(g_tTexcdu4a) Binding 9 + Decorate 130(g_tTexcdu4a) DescriptorSet 0 + Decorate 151(@entryPointOutput.Color) Location 0 + Decorate 155(@entryPointOutput.Depth) BuiltIn FragDepth + Decorate 160(g_tTex1df4) Binding 0 + Decorate 160(g_tTex1df4) DescriptorSet 0 + Decorate 163(g_tTex1di4) Binding 0 + Decorate 163(g_tTex1di4) DescriptorSet 0 + Decorate 166(g_tTex1du4) Binding 0 + Decorate 166(g_tTex1du4) DescriptorSet 0 + Decorate 169(g_tTex2df4) Binding 0 + Decorate 169(g_tTex2df4) DescriptorSet 0 + Decorate 172(g_tTex2di4) Binding 0 + Decorate 172(g_tTex2di4) DescriptorSet 0 + Decorate 175(g_tTex2du4) Binding 0 + Decorate 175(g_tTex2du4) DescriptorSet 0 + Decorate 178(g_tTex3df4) Binding 0 + Decorate 178(g_tTex3df4) DescriptorSet 0 + Decorate 181(g_tTex3di4) Binding 0 + Decorate 181(g_tTex3di4) DescriptorSet 0 + Decorate 184(g_tTex3du4) Binding 0 + Decorate 184(g_tTex3du4) DescriptorSet 0 + Decorate 187(g_tTexcdf4) Binding 0 + Decorate 187(g_tTexcdf4) DescriptorSet 0 + Decorate 190(g_tTexcdi4) Binding 0 + Decorate 190(g_tTexcdi4) DescriptorSet 0 + Decorate 193(g_tTexcdu4) Binding 0 + Decorate 193(g_tTexcdu4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -547,71 +547,71 @@ Validation failed 113: TypeSampledImage 108 115: 6(float) Constant 1053609165 116: 7(fvec4) ConstantComposite 25 26 71 115 - 124: TypeImage 36(int) Cube depth array sampled format:Unknown - 125: TypePointer UniformConstant 124 -126(g_tTexcdi4a): 125(ptr) Variable UniformConstant - 129: TypeSampledImage 124 - 138: TypeImage 50(int) Cube depth array sampled format:Unknown - 139: TypePointer UniformConstant 138 -140(g_tTexcdu4a): 139(ptr) Variable UniformConstant - 143: TypeSampledImage 138 - 151: TypePointer Function 8(PS_OUTPUT) - 153: 36(int) Constant 0 - 154: 6(float) Constant 1065353216 - 155: 7(fvec4) ConstantComposite 154 154 154 154 - 156: TypePointer Function 7(fvec4) - 158: 36(int) Constant 1 - 165: TypePointer Output 7(fvec4) -166(@entryPointOutput.Color): 165(ptr) Variable Output - 169: TypePointer Output 6(float) -170(@entryPointOutput.Depth): 169(ptr) Variable Output - 173: TypeImage 6(float) 1D sampled format:Unknown + 119: TypeImage 36(int) Cube depth array sampled format:Unknown + 120: TypePointer UniformConstant 119 +121(g_tTexcdi4a): 120(ptr) Variable UniformConstant + 124: TypeSampledImage 119 + 128: TypeImage 50(int) Cube depth array sampled format:Unknown + 129: TypePointer UniformConstant 128 +130(g_tTexcdu4a): 129(ptr) Variable UniformConstant + 133: TypeSampledImage 128 + 136: TypePointer Function 8(PS_OUTPUT) + 138: 36(int) Constant 0 + 139: 6(float) Constant 1065353216 + 140: 7(fvec4) ConstantComposite 139 139 139 139 + 141: TypePointer Function 7(fvec4) + 143: 36(int) Constant 1 + 150: TypePointer Output 7(fvec4) +151(@entryPointOutput.Color): 150(ptr) Variable Output + 154: TypePointer Output 6(float) +155(@entryPointOutput.Depth): 154(ptr) Variable Output + 158: TypeImage 6(float) 1D sampled format:Unknown + 159: TypePointer UniformConstant 158 + 160(g_tTex1df4): 159(ptr) Variable UniformConstant + 161: TypeImage 36(int) 1D sampled format:Unknown + 162: TypePointer UniformConstant 161 + 163(g_tTex1di4): 162(ptr) Variable UniformConstant + 164: TypeImage 50(int) 1D sampled format:Unknown + 165: TypePointer UniformConstant 164 + 166(g_tTex1du4): 165(ptr) Variable UniformConstant + 167: TypeImage 6(float) 2D sampled format:Unknown + 168: TypePointer UniformConstant 167 + 169(g_tTex2df4): 168(ptr) Variable UniformConstant + 170: TypeImage 36(int) 2D sampled format:Unknown + 171: TypePointer UniformConstant 170 + 172(g_tTex2di4): 171(ptr) Variable UniformConstant + 173: TypeImage 50(int) 2D sampled format:Unknown 174: TypePointer UniformConstant 173 - 175(g_tTex1df4): 174(ptr) Variable UniformConstant - 176: TypeImage 36(int) 1D sampled format:Unknown + 175(g_tTex2du4): 174(ptr) Variable UniformConstant + 176: TypeImage 6(float) 3D sampled format:Unknown 177: TypePointer UniformConstant 176 - 178(g_tTex1di4): 177(ptr) Variable UniformConstant - 179: TypeImage 50(int) 1D sampled format:Unknown + 178(g_tTex3df4): 177(ptr) Variable UniformConstant + 179: TypeImage 36(int) 3D sampled format:Unknown 180: TypePointer UniformConstant 179 - 181(g_tTex1du4): 180(ptr) Variable UniformConstant - 182: TypeImage 6(float) 2D sampled format:Unknown + 181(g_tTex3di4): 180(ptr) Variable UniformConstant + 182: TypeImage 50(int) 3D sampled format:Unknown 183: TypePointer UniformConstant 182 - 184(g_tTex2df4): 183(ptr) Variable UniformConstant - 185: TypeImage 36(int) 2D sampled format:Unknown + 184(g_tTex3du4): 183(ptr) Variable UniformConstant + 185: TypeImage 6(float) Cube sampled format:Unknown 186: TypePointer UniformConstant 185 - 187(g_tTex2di4): 186(ptr) Variable UniformConstant - 188: TypeImage 50(int) 2D sampled format:Unknown + 187(g_tTexcdf4): 186(ptr) Variable UniformConstant + 188: TypeImage 36(int) Cube sampled format:Unknown 189: TypePointer UniformConstant 188 - 190(g_tTex2du4): 189(ptr) Variable UniformConstant - 191: TypeImage 6(float) 3D sampled format:Unknown + 190(g_tTexcdi4): 189(ptr) Variable UniformConstant + 191: TypeImage 50(int) Cube sampled format:Unknown 192: TypePointer UniformConstant 191 - 193(g_tTex3df4): 192(ptr) Variable UniformConstant - 194: TypeImage 36(int) 3D sampled format:Unknown - 195: TypePointer UniformConstant 194 - 196(g_tTex3di4): 195(ptr) Variable UniformConstant - 197: TypeImage 50(int) 3D sampled format:Unknown - 198: TypePointer UniformConstant 197 - 199(g_tTex3du4): 198(ptr) Variable UniformConstant - 200: TypeImage 6(float) Cube sampled format:Unknown - 201: TypePointer UniformConstant 200 - 202(g_tTexcdf4): 201(ptr) Variable UniformConstant - 203: TypeImage 36(int) Cube sampled format:Unknown - 204: TypePointer UniformConstant 203 - 205(g_tTexcdi4): 204(ptr) Variable UniformConstant - 206: TypeImage 50(int) Cube sampled format:Unknown - 207: TypePointer UniformConstant 206 - 208(g_tTexcdu4): 207(ptr) Variable UniformConstant + 193(g_tTexcdu4): 192(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label -163(flattenTemp): 151(ptr) Variable Function - 164:8(PS_OUTPUT) FunctionCall 10(@main() - Store 163(flattenTemp) 164 - 167: 156(ptr) AccessChain 163(flattenTemp) 153 - 168: 7(fvec4) Load 167 - Store 166(@entryPointOutput.Color) 168 - 171: 12(ptr) AccessChain 163(flattenTemp) 158 - 172: 6(float) Load 171 - Store 170(@entryPointOutput.Depth) 172 +148(flattenTemp): 136(ptr) Variable Function + 149:8(PS_OUTPUT) FunctionCall 10(@main() + Store 148(flattenTemp) 149 + 152: 141(ptr) AccessChain 148(flattenTemp) 138 + 153: 7(fvec4) Load 152 + Store 151(@entryPointOutput.Color) 153 + 156: 12(ptr) AccessChain 148(flattenTemp) 143 + 157: 6(float) Load 156 + Store 155(@entryPointOutput.Depth) 157 Return FunctionEnd 10(@main():8(PS_OUTPUT) Function None 9 @@ -623,9 +623,9 @@ Validation failed 79(r32): 12(ptr) Variable Function 93(r34): 12(ptr) Variable Function 107(r60): 12(ptr) Variable Function - 123(r62): 12(ptr) Variable Function - 137(r64): 12(ptr) Variable Function - 152(psout): 151(ptr) Variable Function + 118(r62): 12(ptr) Variable Function + 127(r64): 12(ptr) Variable Function + 137(psout): 136(ptr) Variable Function 17: 14 Load 16(g_tTex1df4a) 21: 18 Load 20(g_sSamp) 23: 22 SampledImage 17 21 @@ -686,37 +686,22 @@ Validation failed 111: 108 Load 110(g_tTexcdf4a) 112: 18 Load 20(g_sSamp) 114: 113 SampledImage 111 112 - 117: 6(float) CompositeExtract 116 0 - 118: 6(float) CompositeExtract 116 1 - 119: 6(float) CompositeExtract 116 2 - 120: 6(float) CompositeExtract 116 3 - 121: 7(fvec4) CompositeConstruct 117 118 119 120 - 122: 6(float) ImageSampleDrefImplicitLod 114 121 28 - Store 107(r60) 122 - 127: 124 Load 126(g_tTexcdi4a) - 128: 18 Load 20(g_sSamp) - 130: 129 SampledImage 127 128 - 131: 6(float) CompositeExtract 116 0 - 132: 6(float) CompositeExtract 116 1 - 133: 6(float) CompositeExtract 116 2 - 134: 6(float) CompositeExtract 116 3 - 135: 7(fvec4) CompositeConstruct 131 132 133 134 - 136: 6(float) ImageSampleDrefImplicitLod 130 135 28 - Store 123(r62) 136 - 141: 138 Load 140(g_tTexcdu4a) - 142: 18 Load 20(g_sSamp) - 144: 143 SampledImage 141 142 - 145: 6(float) CompositeExtract 116 0 - 146: 6(float) CompositeExtract 116 1 - 147: 6(float) CompositeExtract 116 2 - 148: 6(float) CompositeExtract 116 3 - 149: 7(fvec4) CompositeConstruct 145 146 147 148 - 150: 6(float) ImageSampleDrefImplicitLod 144 149 28 - Store 137(r64) 150 - 157: 156(ptr) AccessChain 152(psout) 153 - Store 157 155 - 159: 12(ptr) AccessChain 152(psout) 158 - Store 159 154 - 160:8(PS_OUTPUT) Load 152(psout) - ReturnValue 160 + 117: 6(float) ImageSampleDrefImplicitLod 114 116 28 + Store 107(r60) 117 + 122: 119 Load 121(g_tTexcdi4a) + 123: 18 Load 20(g_sSamp) + 125: 124 SampledImage 122 123 + 126: 6(float) ImageSampleDrefImplicitLod 125 116 28 + Store 118(r62) 126 + 131: 128 Load 130(g_tTexcdu4a) + 132: 18 Load 20(g_sSamp) + 134: 133 SampledImage 131 132 + 135: 6(float) ImageSampleDrefImplicitLod 134 116 28 + Store 127(r64) 135 + 142: 141(ptr) AccessChain 137(psout) 138 + Store 142 140 + 144: 12(ptr) AccessChain 137(psout) 143 + Store 144 139 + 145:8(PS_OUTPUT) Load 137(psout) + ReturnValue 145 FunctionEnd diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out index c178c571fc..a355f880bf 100644 --- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out @@ -381,7 +381,7 @@ using depth_any Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 198 Capability Shader @@ -433,52 +433,52 @@ Validation failed Name 191 "g_tTexcdf4a" Name 194 "g_tTexcdi4a" Name 197 "g_tTexcdu4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 34(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 34(g_tTex1di4) Binding 1 - Decorate 46(g_tTex1du4) DescriptorSet 0 + Decorate 34(g_tTex1di4) DescriptorSet 0 Decorate 46(g_tTex1du4) Binding 2 - Decorate 57(g_tTex2df4) DescriptorSet 0 + Decorate 46(g_tTex1du4) DescriptorSet 0 Decorate 57(g_tTex2df4) Binding 3 - Decorate 73(g_tTex2di4) DescriptorSet 0 + Decorate 57(g_tTex2df4) DescriptorSet 0 Decorate 73(g_tTex2di4) Binding 4 - Decorate 86(g_tTex2du4) DescriptorSet 0 + Decorate 73(g_tTex2di4) DescriptorSet 0 Decorate 86(g_tTex2du4) Binding 5 - Decorate 99(g_tTexcdf4) DescriptorSet 0 + Decorate 86(g_tTex2du4) DescriptorSet 0 Decorate 99(g_tTexcdf4) Binding 6 - Decorate 115(g_tTexcdi4) DescriptorSet 0 + Decorate 99(g_tTexcdf4) DescriptorSet 0 Decorate 115(g_tTexcdi4) Binding 7 - Decorate 129(g_tTexcdu4) DescriptorSet 0 + Decorate 115(g_tTexcdi4) DescriptorSet 0 Decorate 129(g_tTexcdu4) Binding 8 + Decorate 129(g_tTexcdu4) DescriptorSet 0 Decorate 155(@entryPointOutput.Color) Location 0 Decorate 159(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 164(g_tTex3df4) DescriptorSet 0 Decorate 164(g_tTex3df4) Binding 0 - Decorate 167(g_tTex3di4) DescriptorSet 0 + Decorate 164(g_tTex3df4) DescriptorSet 0 Decorate 167(g_tTex3di4) Binding 0 - Decorate 170(g_tTex3du4) DescriptorSet 0 + Decorate 167(g_tTex3di4) DescriptorSet 0 Decorate 170(g_tTex3du4) Binding 0 - Decorate 173(g_tTex1df4a) DescriptorSet 0 + Decorate 170(g_tTex3du4) DescriptorSet 0 Decorate 173(g_tTex1df4a) Binding 0 - Decorate 176(g_tTex1di4a) DescriptorSet 0 + Decorate 173(g_tTex1df4a) DescriptorSet 0 Decorate 176(g_tTex1di4a) Binding 0 - Decorate 179(g_tTex1du4a) DescriptorSet 0 + Decorate 176(g_tTex1di4a) DescriptorSet 0 Decorate 179(g_tTex1du4a) Binding 0 - Decorate 182(g_tTex2df4a) DescriptorSet 0 + Decorate 179(g_tTex1du4a) DescriptorSet 0 Decorate 182(g_tTex2df4a) Binding 0 - Decorate 185(g_tTex2di4a) DescriptorSet 0 + Decorate 182(g_tTex2df4a) DescriptorSet 0 Decorate 185(g_tTex2di4a) Binding 0 - Decorate 188(g_tTex2du4a) DescriptorSet 0 + Decorate 185(g_tTex2di4a) DescriptorSet 0 Decorate 188(g_tTex2du4a) Binding 0 - Decorate 191(g_tTexcdf4a) DescriptorSet 0 + Decorate 188(g_tTex2du4a) DescriptorSet 0 Decorate 191(g_tTexcdf4a) Binding 0 - Decorate 194(g_tTexcdi4a) DescriptorSet 0 + Decorate 191(g_tTexcdf4a) DescriptorSet 0 Decorate 194(g_tTexcdi4a) Binding 0 - Decorate 197(g_tTexcdu4a) DescriptorSet 0 + Decorate 194(g_tTexcdi4a) DescriptorSet 0 Decorate 197(g_tTexcdu4a) Binding 0 + Decorate 197(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out index 6859f6d9dc..da2b024a21 100644 --- a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out +++ b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out @@ -85,7 +85,7 @@ gl_FragCoord origin is upper left 0:? 'g_tTex' (layout( binding=3) uniform texture1D) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 43 Capability Shader @@ -102,14 +102,14 @@ gl_FragCoord origin is upper left Name 29 "g_tTex" Name 31 "g_sSamp" Name 41 "@entryPointOutput" - Decorate 13(g_tTex) DescriptorSet 0 Decorate 13(g_tTex) Binding 3 - Decorate 17(g_sSampCmp) DescriptorSet 0 + Decorate 13(g_tTex) DescriptorSet 0 Decorate 17(g_sSampCmp) Binding 1 - Decorate 29(g_tTex) DescriptorSet 0 + Decorate 17(g_sSampCmp) DescriptorSet 0 Decorate 29(g_tTex) Binding 3 - Decorate 31(g_sSamp) DescriptorSet 0 + Decorate 29(g_tTex) DescriptorSet 0 Decorate 31(g_sSamp) Binding 0 + Decorate 31(g_sSamp) DescriptorSet 0 Decorate 41(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out index 1e50d7bbb3..f5286378c7 100644 --- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out @@ -327,7 +327,7 @@ using depth_any Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 167 Capability Shader @@ -376,52 +376,52 @@ Validation failed Name 160 "g_tTexcdf4a" Name 163 "g_tTexcdi4a" Name 166 "g_tTexcdu4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 35(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 35(g_tTex1di4) Binding 1 - Decorate 47(g_tTex1du4) DescriptorSet 0 + Decorate 35(g_tTex1di4) DescriptorSet 0 Decorate 47(g_tTex1du4) Binding 2 - Decorate 58(g_tTex2df4) DescriptorSet 0 + Decorate 47(g_tTex1du4) DescriptorSet 0 Decorate 58(g_tTex2df4) Binding 3 - Decorate 77(g_tTex2di4) DescriptorSet 0 + Decorate 58(g_tTex2df4) DescriptorSet 0 Decorate 77(g_tTex2di4) Binding 4 - Decorate 90(g_tTex2du4) DescriptorSet 0 + Decorate 77(g_tTex2di4) DescriptorSet 0 Decorate 90(g_tTex2du4) Binding 5 + Decorate 90(g_tTex2du4) DescriptorSet 0 Decorate 115(@entryPointOutput.Color) Location 0 Decorate 119(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 124(g_tTex3df4) DescriptorSet 0 Decorate 124(g_tTex3df4) Binding 0 - Decorate 127(g_tTex3di4) DescriptorSet 0 + Decorate 124(g_tTex3df4) DescriptorSet 0 Decorate 127(g_tTex3di4) Binding 0 - Decorate 130(g_tTex3du4) DescriptorSet 0 + Decorate 127(g_tTex3di4) DescriptorSet 0 Decorate 130(g_tTex3du4) Binding 0 - Decorate 133(g_tTexcdf4) DescriptorSet 0 + Decorate 130(g_tTex3du4) DescriptorSet 0 Decorate 133(g_tTexcdf4) Binding 0 - Decorate 136(g_tTexcdi4) DescriptorSet 0 + Decorate 133(g_tTexcdf4) DescriptorSet 0 Decorate 136(g_tTexcdi4) Binding 0 - Decorate 139(g_tTexcdu4) DescriptorSet 0 + Decorate 136(g_tTexcdi4) DescriptorSet 0 Decorate 139(g_tTexcdu4) Binding 0 - Decorate 142(g_tTex1df4a) DescriptorSet 0 + Decorate 139(g_tTexcdu4) DescriptorSet 0 Decorate 142(g_tTex1df4a) Binding 0 - Decorate 145(g_tTex1di4a) DescriptorSet 0 + Decorate 142(g_tTex1df4a) DescriptorSet 0 Decorate 145(g_tTex1di4a) Binding 0 - Decorate 148(g_tTex1du4a) DescriptorSet 0 + Decorate 145(g_tTex1di4a) DescriptorSet 0 Decorate 148(g_tTex1du4a) Binding 0 - Decorate 151(g_tTex2df4a) DescriptorSet 0 + Decorate 148(g_tTex1du4a) DescriptorSet 0 Decorate 151(g_tTex2df4a) Binding 0 - Decorate 154(g_tTex2di4a) DescriptorSet 0 + Decorate 151(g_tTex2df4a) DescriptorSet 0 Decorate 154(g_tTex2di4a) Binding 0 - Decorate 157(g_tTex2du4a) DescriptorSet 0 + Decorate 154(g_tTex2di4a) DescriptorSet 0 Decorate 157(g_tTex2du4a) Binding 0 - Decorate 160(g_tTexcdf4a) DescriptorSet 0 + Decorate 157(g_tTex2du4a) DescriptorSet 0 Decorate 160(g_tTexcdf4a) Binding 0 - Decorate 163(g_tTexcdi4a) DescriptorSet 0 + Decorate 160(g_tTexcdf4a) DescriptorSet 0 Decorate 163(g_tTexcdi4a) Binding 0 - Decorate 166(g_tTexcdu4a) DescriptorSet 0 + Decorate 163(g_tTexcdi4a) DescriptorSet 0 Decorate 166(g_tTexcdu4a) Binding 0 + Decorate 166(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out index 3b1eb6f67c..0500534c35 100644 --- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out @@ -339,7 +339,7 @@ using depth_any Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 178 Capability Shader @@ -388,52 +388,52 @@ Validation failed Name 171 "g_tTexcdf4a" Name 174 "g_tTexcdi4a" Name 177 "g_tTexcdu4a" - Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 16(g_tTex1df4a) Binding 1 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 40(g_tTex1di4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 40(g_tTex1di4a) Binding 2 - Decorate 54(g_tTex1du4a) DescriptorSet 0 + Decorate 40(g_tTex1di4a) DescriptorSet 0 Decorate 54(g_tTex1du4a) Binding 3 - Decorate 67(g_tTex2df4a) DescriptorSet 0 + Decorate 54(g_tTex1du4a) DescriptorSet 0 Decorate 67(g_tTex2df4a) Binding 4 - Decorate 86(g_tTex2di4a) DescriptorSet 0 + Decorate 67(g_tTex2df4a) DescriptorSet 0 Decorate 86(g_tTex2di4a) Binding 5 - Decorate 100(g_tTex2du4a) DescriptorSet 0 + Decorate 86(g_tTex2di4a) DescriptorSet 0 Decorate 100(g_tTex2du4a) Binding 6 + Decorate 100(g_tTex2du4a) DescriptorSet 0 Decorate 126(@entryPointOutput.Color) Location 0 Decorate 130(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 135(g_tTex1df4) DescriptorSet 0 Decorate 135(g_tTex1df4) Binding 0 - Decorate 138(g_tTex1di4) DescriptorSet 0 + Decorate 135(g_tTex1df4) DescriptorSet 0 Decorate 138(g_tTex1di4) Binding 0 - Decorate 141(g_tTex1du4) DescriptorSet 0 + Decorate 138(g_tTex1di4) DescriptorSet 0 Decorate 141(g_tTex1du4) Binding 0 - Decorate 144(g_tTex2df4) DescriptorSet 0 + Decorate 141(g_tTex1du4) DescriptorSet 0 Decorate 144(g_tTex2df4) Binding 0 - Decorate 147(g_tTex2di4) DescriptorSet 0 + Decorate 144(g_tTex2df4) DescriptorSet 0 Decorate 147(g_tTex2di4) Binding 0 - Decorate 150(g_tTex2du4) DescriptorSet 0 + Decorate 147(g_tTex2di4) DescriptorSet 0 Decorate 150(g_tTex2du4) Binding 0 - Decorate 153(g_tTex3df4) DescriptorSet 0 + Decorate 150(g_tTex2du4) DescriptorSet 0 Decorate 153(g_tTex3df4) Binding 0 - Decorate 156(g_tTex3di4) DescriptorSet 0 + Decorate 153(g_tTex3df4) DescriptorSet 0 Decorate 156(g_tTex3di4) Binding 0 - Decorate 159(g_tTex3du4) DescriptorSet 0 + Decorate 156(g_tTex3di4) DescriptorSet 0 Decorate 159(g_tTex3du4) Binding 0 - Decorate 162(g_tTexcdf4) DescriptorSet 0 + Decorate 159(g_tTex3du4) DescriptorSet 0 Decorate 162(g_tTexcdf4) Binding 0 - Decorate 165(g_tTexcdi4) DescriptorSet 0 + Decorate 162(g_tTexcdf4) DescriptorSet 0 Decorate 165(g_tTexcdi4) Binding 0 - Decorate 168(g_tTexcdu4) DescriptorSet 0 + Decorate 165(g_tTexcdi4) DescriptorSet 0 Decorate 168(g_tTexcdu4) Binding 0 - Decorate 171(g_tTexcdf4a) DescriptorSet 0 + Decorate 168(g_tTexcdu4) DescriptorSet 0 Decorate 171(g_tTexcdf4a) Binding 0 - Decorate 174(g_tTexcdi4a) DescriptorSet 0 + Decorate 171(g_tTexcdf4a) DescriptorSet 0 Decorate 174(g_tTexcdi4a) Binding 0 - Decorate 177(g_tTexcdu4a) DescriptorSet 0 + Decorate 174(g_tTexcdi4a) DescriptorSet 0 Decorate 177(g_tTexcdu4a) Binding 0 + Decorate 177(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out index a734e5440e..66b5092ab6 100644 --- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out @@ -435,15 +435,15 @@ using depth_any Validation failed // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 210 +// Generated by (magic number): 8000b +// Id's are bound by 195 Capability Shader Capability Sampled1D Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 167 171 + EntryPoint Fragment 4 "main" 152 156 ExecutionMode 4 OriginUpperLeft ExecutionMode 4 DepthReplacing Source HLSL 500 @@ -467,72 +467,72 @@ Validation failed Name 97 "g_tTex2du4a" Name 108 "r60" Name 111 "g_tTexcdf4a" - Name 124 "r62" - Name 127 "g_tTexcdi4a" - Name 138 "r64" - Name 141 "g_tTexcdu4a" - Name 153 "psout" - Name 164 "flattenTemp" - Name 167 "@entryPointOutput.Color" - Name 171 "@entryPointOutput.Depth" - Name 176 "g_tTex1df4" - Name 179 "g_tTex1di4" - Name 182 "g_tTex1du4" - Name 185 "g_tTex2df4" - Name 188 "g_tTex2di4" - Name 191 "g_tTex2du4" - Name 194 "g_tTex3df4" - Name 197 "g_tTex3di4" - Name 200 "g_tTex3du4" - Name 203 "g_tTexcdf4" - Name 206 "g_tTexcdi4" - Name 209 "g_tTexcdu4" - Decorate 16(g_tTex1df4a) DescriptorSet 0 + Name 119 "r62" + Name 122 "g_tTexcdi4a" + Name 128 "r64" + Name 131 "g_tTexcdu4a" + Name 138 "psout" + Name 149 "flattenTemp" + Name 152 "@entryPointOutput.Color" + Name 156 "@entryPointOutput.Depth" + Name 161 "g_tTex1df4" + Name 164 "g_tTex1di4" + Name 167 "g_tTex1du4" + Name 170 "g_tTex2df4" + Name 173 "g_tTex2di4" + Name 176 "g_tTex2du4" + Name 179 "g_tTex3df4" + Name 182 "g_tTex3di4" + Name 185 "g_tTex3du4" + Name 188 "g_tTexcdf4" + Name 191 "g_tTexcdi4" + Name 194 "g_tTexcdu4" Decorate 16(g_tTex1df4a) Binding 1 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 40(g_tTex1di4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 40(g_tTex1di4a) Binding 2 - Decorate 54(g_tTex1du4a) DescriptorSet 0 + Decorate 40(g_tTex1di4a) DescriptorSet 0 Decorate 54(g_tTex1du4a) Binding 3 - Decorate 67(g_tTex2df4a) DescriptorSet 0 + Decorate 54(g_tTex1du4a) DescriptorSet 0 Decorate 67(g_tTex2df4a) Binding 4 - Decorate 83(g_tTex2di4a) DescriptorSet 0 + Decorate 67(g_tTex2df4a) DescriptorSet 0 Decorate 83(g_tTex2di4a) Binding 5 - Decorate 97(g_tTex2du4a) DescriptorSet 0 + Decorate 83(g_tTex2di4a) DescriptorSet 0 Decorate 97(g_tTex2du4a) Binding 6 - Decorate 111(g_tTexcdf4a) DescriptorSet 0 + Decorate 97(g_tTex2du4a) DescriptorSet 0 Decorate 111(g_tTexcdf4a) Binding 7 - Decorate 127(g_tTexcdi4a) DescriptorSet 0 - Decorate 127(g_tTexcdi4a) Binding 8 - Decorate 141(g_tTexcdu4a) DescriptorSet 0 - Decorate 141(g_tTexcdu4a) Binding 9 - Decorate 167(@entryPointOutput.Color) Location 0 - Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 176(g_tTex1df4) DescriptorSet 0 - Decorate 176(g_tTex1df4) Binding 0 - Decorate 179(g_tTex1di4) DescriptorSet 0 - Decorate 179(g_tTex1di4) Binding 0 - Decorate 182(g_tTex1du4) DescriptorSet 0 - Decorate 182(g_tTex1du4) Binding 0 - Decorate 185(g_tTex2df4) DescriptorSet 0 - Decorate 185(g_tTex2df4) Binding 0 - Decorate 188(g_tTex2di4) DescriptorSet 0 - Decorate 188(g_tTex2di4) Binding 0 - Decorate 191(g_tTex2du4) DescriptorSet 0 - Decorate 191(g_tTex2du4) Binding 0 - Decorate 194(g_tTex3df4) DescriptorSet 0 - Decorate 194(g_tTex3df4) Binding 0 - Decorate 197(g_tTex3di4) DescriptorSet 0 - Decorate 197(g_tTex3di4) Binding 0 - Decorate 200(g_tTex3du4) DescriptorSet 0 - Decorate 200(g_tTex3du4) Binding 0 - Decorate 203(g_tTexcdf4) DescriptorSet 0 - Decorate 203(g_tTexcdf4) Binding 0 - Decorate 206(g_tTexcdi4) DescriptorSet 0 - Decorate 206(g_tTexcdi4) Binding 0 - Decorate 209(g_tTexcdu4) DescriptorSet 0 - Decorate 209(g_tTexcdu4) Binding 0 + Decorate 111(g_tTexcdf4a) DescriptorSet 0 + Decorate 122(g_tTexcdi4a) Binding 8 + Decorate 122(g_tTexcdi4a) DescriptorSet 0 + Decorate 131(g_tTexcdu4a) Binding 9 + Decorate 131(g_tTexcdu4a) DescriptorSet 0 + Decorate 152(@entryPointOutput.Color) Location 0 + Decorate 156(@entryPointOutput.Depth) BuiltIn FragDepth + Decorate 161(g_tTex1df4) Binding 0 + Decorate 161(g_tTex1df4) DescriptorSet 0 + Decorate 164(g_tTex1di4) Binding 0 + Decorate 164(g_tTex1di4) DescriptorSet 0 + Decorate 167(g_tTex1du4) Binding 0 + Decorate 167(g_tTex1du4) DescriptorSet 0 + Decorate 170(g_tTex2df4) Binding 0 + Decorate 170(g_tTex2df4) DescriptorSet 0 + Decorate 173(g_tTex2di4) Binding 0 + Decorate 173(g_tTex2di4) DescriptorSet 0 + Decorate 176(g_tTex2du4) Binding 0 + Decorate 176(g_tTex2du4) DescriptorSet 0 + Decorate 179(g_tTex3df4) Binding 0 + Decorate 179(g_tTex3df4) DescriptorSet 0 + Decorate 182(g_tTex3di4) Binding 0 + Decorate 182(g_tTex3di4) DescriptorSet 0 + Decorate 185(g_tTex3du4) Binding 0 + Decorate 185(g_tTex3du4) DescriptorSet 0 + Decorate 188(g_tTexcdf4) Binding 0 + Decorate 188(g_tTexcdf4) DescriptorSet 0 + Decorate 191(g_tTexcdi4) Binding 0 + Decorate 191(g_tTexcdi4) DescriptorSet 0 + Decorate 194(g_tTexcdu4) Binding 0 + Decorate 194(g_tTexcdu4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -584,71 +584,71 @@ Validation failed 114: TypeSampledImage 109 116: 6(float) Constant 1053609165 117: 7(fvec4) ConstantComposite 25 26 72 116 - 125: TypeImage 37(int) Cube depth array sampled format:Unknown - 126: TypePointer UniformConstant 125 -127(g_tTexcdi4a): 126(ptr) Variable UniformConstant - 130: TypeSampledImage 125 - 139: TypeImage 51(int) Cube depth array sampled format:Unknown - 140: TypePointer UniformConstant 139 -141(g_tTexcdu4a): 140(ptr) Variable UniformConstant - 144: TypeSampledImage 139 - 152: TypePointer Function 8(PS_OUTPUT) - 154: 37(int) Constant 0 - 155: 6(float) Constant 1065353216 - 156: 7(fvec4) ConstantComposite 155 155 155 155 - 157: TypePointer Function 7(fvec4) - 159: 37(int) Constant 1 - 166: TypePointer Output 7(fvec4) -167(@entryPointOutput.Color): 166(ptr) Variable Output - 170: TypePointer Output 6(float) -171(@entryPointOutput.Depth): 170(ptr) Variable Output - 174: TypeImage 6(float) 1D sampled format:Unknown + 120: TypeImage 37(int) Cube depth array sampled format:Unknown + 121: TypePointer UniformConstant 120 +122(g_tTexcdi4a): 121(ptr) Variable UniformConstant + 125: TypeSampledImage 120 + 129: TypeImage 51(int) Cube depth array sampled format:Unknown + 130: TypePointer UniformConstant 129 +131(g_tTexcdu4a): 130(ptr) Variable UniformConstant + 134: TypeSampledImage 129 + 137: TypePointer Function 8(PS_OUTPUT) + 139: 37(int) Constant 0 + 140: 6(float) Constant 1065353216 + 141: 7(fvec4) ConstantComposite 140 140 140 140 + 142: TypePointer Function 7(fvec4) + 144: 37(int) Constant 1 + 151: TypePointer Output 7(fvec4) +152(@entryPointOutput.Color): 151(ptr) Variable Output + 155: TypePointer Output 6(float) +156(@entryPointOutput.Depth): 155(ptr) Variable Output + 159: TypeImage 6(float) 1D sampled format:Unknown + 160: TypePointer UniformConstant 159 + 161(g_tTex1df4): 160(ptr) Variable UniformConstant + 162: TypeImage 37(int) 1D sampled format:Unknown + 163: TypePointer UniformConstant 162 + 164(g_tTex1di4): 163(ptr) Variable UniformConstant + 165: TypeImage 51(int) 1D sampled format:Unknown + 166: TypePointer UniformConstant 165 + 167(g_tTex1du4): 166(ptr) Variable UniformConstant + 168: TypeImage 6(float) 2D sampled format:Unknown + 169: TypePointer UniformConstant 168 + 170(g_tTex2df4): 169(ptr) Variable UniformConstant + 171: TypeImage 37(int) 2D sampled format:Unknown + 172: TypePointer UniformConstant 171 + 173(g_tTex2di4): 172(ptr) Variable UniformConstant + 174: TypeImage 51(int) 2D sampled format:Unknown 175: TypePointer UniformConstant 174 - 176(g_tTex1df4): 175(ptr) Variable UniformConstant - 177: TypeImage 37(int) 1D sampled format:Unknown + 176(g_tTex2du4): 175(ptr) Variable UniformConstant + 177: TypeImage 6(float) 3D sampled format:Unknown 178: TypePointer UniformConstant 177 - 179(g_tTex1di4): 178(ptr) Variable UniformConstant - 180: TypeImage 51(int) 1D sampled format:Unknown + 179(g_tTex3df4): 178(ptr) Variable UniformConstant + 180: TypeImage 37(int) 3D sampled format:Unknown 181: TypePointer UniformConstant 180 - 182(g_tTex1du4): 181(ptr) Variable UniformConstant - 183: TypeImage 6(float) 2D sampled format:Unknown + 182(g_tTex3di4): 181(ptr) Variable UniformConstant + 183: TypeImage 51(int) 3D sampled format:Unknown 184: TypePointer UniformConstant 183 - 185(g_tTex2df4): 184(ptr) Variable UniformConstant - 186: TypeImage 37(int) 2D sampled format:Unknown + 185(g_tTex3du4): 184(ptr) Variable UniformConstant + 186: TypeImage 6(float) Cube sampled format:Unknown 187: TypePointer UniformConstant 186 - 188(g_tTex2di4): 187(ptr) Variable UniformConstant - 189: TypeImage 51(int) 2D sampled format:Unknown + 188(g_tTexcdf4): 187(ptr) Variable UniformConstant + 189: TypeImage 37(int) Cube sampled format:Unknown 190: TypePointer UniformConstant 189 - 191(g_tTex2du4): 190(ptr) Variable UniformConstant - 192: TypeImage 6(float) 3D sampled format:Unknown + 191(g_tTexcdi4): 190(ptr) Variable UniformConstant + 192: TypeImage 51(int) Cube sampled format:Unknown 193: TypePointer UniformConstant 192 - 194(g_tTex3df4): 193(ptr) Variable UniformConstant - 195: TypeImage 37(int) 3D sampled format:Unknown - 196: TypePointer UniformConstant 195 - 197(g_tTex3di4): 196(ptr) Variable UniformConstant - 198: TypeImage 51(int) 3D sampled format:Unknown - 199: TypePointer UniformConstant 198 - 200(g_tTex3du4): 199(ptr) Variable UniformConstant - 201: TypeImage 6(float) Cube sampled format:Unknown - 202: TypePointer UniformConstant 201 - 203(g_tTexcdf4): 202(ptr) Variable UniformConstant - 204: TypeImage 37(int) Cube sampled format:Unknown - 205: TypePointer UniformConstant 204 - 206(g_tTexcdi4): 205(ptr) Variable UniformConstant - 207: TypeImage 51(int) Cube sampled format:Unknown - 208: TypePointer UniformConstant 207 - 209(g_tTexcdu4): 208(ptr) Variable UniformConstant + 194(g_tTexcdu4): 193(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label -164(flattenTemp): 152(ptr) Variable Function - 165:8(PS_OUTPUT) FunctionCall 10(@main() - Store 164(flattenTemp) 165 - 168: 157(ptr) AccessChain 164(flattenTemp) 154 - 169: 7(fvec4) Load 168 - Store 167(@entryPointOutput.Color) 169 - 172: 12(ptr) AccessChain 164(flattenTemp) 159 - 173: 6(float) Load 172 - Store 171(@entryPointOutput.Depth) 173 +149(flattenTemp): 137(ptr) Variable Function + 150:8(PS_OUTPUT) FunctionCall 10(@main() + Store 149(flattenTemp) 150 + 153: 142(ptr) AccessChain 149(flattenTemp) 139 + 154: 7(fvec4) Load 153 + Store 152(@entryPointOutput.Color) 154 + 157: 12(ptr) AccessChain 149(flattenTemp) 144 + 158: 6(float) Load 157 + Store 156(@entryPointOutput.Depth) 158 Return FunctionEnd 10(@main():8(PS_OUTPUT) Function None 9 @@ -660,9 +660,9 @@ Validation failed 80(r32): 12(ptr) Variable Function 94(r34): 12(ptr) Variable Function 108(r60): 12(ptr) Variable Function - 124(r62): 12(ptr) Variable Function - 138(r64): 12(ptr) Variable Function - 153(psout): 152(ptr) Variable Function + 119(r62): 12(ptr) Variable Function + 128(r64): 12(ptr) Variable Function + 138(psout): 137(ptr) Variable Function 17: 14 Load 16(g_tTex1df4a) 21: 18 Load 20(g_sSamp) 23: 22 SampledImage 17 21 @@ -723,37 +723,22 @@ Validation failed 112: 109 Load 111(g_tTexcdf4a) 113: 18 Load 20(g_sSamp) 115: 114 SampledImage 112 113 - 118: 6(float) CompositeExtract 117 0 - 119: 6(float) CompositeExtract 117 1 - 120: 6(float) CompositeExtract 117 2 - 121: 6(float) CompositeExtract 117 3 - 122: 7(fvec4) CompositeConstruct 118 119 120 121 - 123: 6(float) ImageSampleDrefExplicitLod 115 122 28 Lod 33 - Store 108(r60) 123 - 128: 125 Load 127(g_tTexcdi4a) - 129: 18 Load 20(g_sSamp) - 131: 130 SampledImage 128 129 - 132: 6(float) CompositeExtract 117 0 - 133: 6(float) CompositeExtract 117 1 - 134: 6(float) CompositeExtract 117 2 - 135: 6(float) CompositeExtract 117 3 - 136: 7(fvec4) CompositeConstruct 132 133 134 135 - 137: 6(float) ImageSampleDrefExplicitLod 131 136 28 Lod 33 - Store 124(r62) 137 - 142: 139 Load 141(g_tTexcdu4a) - 143: 18 Load 20(g_sSamp) - 145: 144 SampledImage 142 143 - 146: 6(float) CompositeExtract 117 0 - 147: 6(float) CompositeExtract 117 1 - 148: 6(float) CompositeExtract 117 2 - 149: 6(float) CompositeExtract 117 3 - 150: 7(fvec4) CompositeConstruct 146 147 148 149 - 151: 6(float) ImageSampleDrefExplicitLod 145 150 28 Lod 33 - Store 138(r64) 151 - 158: 157(ptr) AccessChain 153(psout) 154 - Store 158 156 - 160: 12(ptr) AccessChain 153(psout) 159 - Store 160 155 - 161:8(PS_OUTPUT) Load 153(psout) - ReturnValue 161 + 118: 6(float) ImageSampleDrefExplicitLod 115 117 28 Lod 33 + Store 108(r60) 118 + 123: 120 Load 122(g_tTexcdi4a) + 124: 18 Load 20(g_sSamp) + 126: 125 SampledImage 123 124 + 127: 6(float) ImageSampleDrefExplicitLod 126 117 28 Lod 33 + Store 119(r62) 127 + 132: 129 Load 131(g_tTexcdu4a) + 133: 18 Load 20(g_sSamp) + 135: 134 SampledImage 132 133 + 136: 6(float) ImageSampleDrefExplicitLod 135 117 28 Lod 33 + Store 128(r64) 136 + 143: 142(ptr) AccessChain 138(psout) 139 + Store 143 141 + 145: 12(ptr) AccessChain 138(psout) 144 + Store 145 140 + 146:8(PS_OUTPUT) Load 138(psout) + ReturnValue 146 FunctionEnd diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out index 54135cdb5f..c833b51aa5 100644 --- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out @@ -417,7 +417,7 @@ using depth_any Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 199 Capability Shader @@ -469,52 +469,52 @@ Validation failed Name 192 "g_tTexcdf4a" Name 195 "g_tTexcdi4a" Name 198 "g_tTexcdu4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 35(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 35(g_tTex1di4) Binding 1 - Decorate 47(g_tTex1du4) DescriptorSet 0 + Decorate 35(g_tTex1di4) DescriptorSet 0 Decorate 47(g_tTex1du4) Binding 2 - Decorate 58(g_tTex2df4) DescriptorSet 0 + Decorate 47(g_tTex1du4) DescriptorSet 0 Decorate 58(g_tTex2df4) Binding 3 - Decorate 74(g_tTex2di4) DescriptorSet 0 + Decorate 58(g_tTex2df4) DescriptorSet 0 Decorate 74(g_tTex2di4) Binding 4 - Decorate 87(g_tTex2du4) DescriptorSet 0 + Decorate 74(g_tTex2di4) DescriptorSet 0 Decorate 87(g_tTex2du4) Binding 5 - Decorate 100(g_tTexcdf4) DescriptorSet 0 + Decorate 87(g_tTex2du4) DescriptorSet 0 Decorate 100(g_tTexcdf4) Binding 6 - Decorate 116(g_tTexcdi4) DescriptorSet 0 + Decorate 100(g_tTexcdf4) DescriptorSet 0 Decorate 116(g_tTexcdi4) Binding 7 - Decorate 130(g_tTexcdu4) DescriptorSet 0 + Decorate 116(g_tTexcdi4) DescriptorSet 0 Decorate 130(g_tTexcdu4) Binding 8 + Decorate 130(g_tTexcdu4) DescriptorSet 0 Decorate 156(@entryPointOutput.Color) Location 0 Decorate 160(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 165(g_tTex3df4) DescriptorSet 0 Decorate 165(g_tTex3df4) Binding 0 - Decorate 168(g_tTex3di4) DescriptorSet 0 + Decorate 165(g_tTex3df4) DescriptorSet 0 Decorate 168(g_tTex3di4) Binding 0 - Decorate 171(g_tTex3du4) DescriptorSet 0 + Decorate 168(g_tTex3di4) DescriptorSet 0 Decorate 171(g_tTex3du4) Binding 0 - Decorate 174(g_tTex1df4a) DescriptorSet 0 + Decorate 171(g_tTex3du4) DescriptorSet 0 Decorate 174(g_tTex1df4a) Binding 0 - Decorate 177(g_tTex1di4a) DescriptorSet 0 + Decorate 174(g_tTex1df4a) DescriptorSet 0 Decorate 177(g_tTex1di4a) Binding 0 - Decorate 180(g_tTex1du4a) DescriptorSet 0 + Decorate 177(g_tTex1di4a) DescriptorSet 0 Decorate 180(g_tTex1du4a) Binding 0 - Decorate 183(g_tTex2df4a) DescriptorSet 0 + Decorate 180(g_tTex1du4a) DescriptorSet 0 Decorate 183(g_tTex2df4a) Binding 0 - Decorate 186(g_tTex2di4a) DescriptorSet 0 + Decorate 183(g_tTex2df4a) DescriptorSet 0 Decorate 186(g_tTex2di4a) Binding 0 - Decorate 189(g_tTex2du4a) DescriptorSet 0 + Decorate 186(g_tTex2di4a) DescriptorSet 0 Decorate 189(g_tTex2du4a) Binding 0 - Decorate 192(g_tTexcdf4a) DescriptorSet 0 + Decorate 189(g_tTex2du4a) DescriptorSet 0 Decorate 192(g_tTexcdf4a) Binding 0 - Decorate 195(g_tTexcdi4a) DescriptorSet 0 + Decorate 192(g_tTexcdf4a) DescriptorSet 0 Decorate 195(g_tTexcdi4a) Binding 0 - Decorate 198(g_tTexcdu4a) DescriptorSet 0 + Decorate 195(g_tTexcdi4a) DescriptorSet 0 Decorate 198(g_tTexcdu4a) Binding 0 + Decorate 198(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out index 4922cdedbe..70d2bd7792 100644 --- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out @@ -351,7 +351,7 @@ using depth_any Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 168 Capability Shader @@ -400,52 +400,52 @@ Validation failed Name 161 "g_tTexcdf4a" Name 164 "g_tTexcdi4a" Name 167 "g_tTexcdu4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 36(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 36(g_tTex1di4) Binding 1 - Decorate 48(g_tTex1du4) DescriptorSet 0 + Decorate 36(g_tTex1di4) DescriptorSet 0 Decorate 48(g_tTex1du4) Binding 2 - Decorate 59(g_tTex2df4) DescriptorSet 0 + Decorate 48(g_tTex1du4) DescriptorSet 0 Decorate 59(g_tTex2df4) Binding 3 - Decorate 78(g_tTex2di4) DescriptorSet 0 + Decorate 59(g_tTex2df4) DescriptorSet 0 Decorate 78(g_tTex2di4) Binding 4 - Decorate 91(g_tTex2du4) DescriptorSet 0 + Decorate 78(g_tTex2di4) DescriptorSet 0 Decorate 91(g_tTex2du4) Binding 5 + Decorate 91(g_tTex2du4) DescriptorSet 0 Decorate 116(@entryPointOutput.Color) Location 0 Decorate 120(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 125(g_tTex3df4) DescriptorSet 0 Decorate 125(g_tTex3df4) Binding 0 - Decorate 128(g_tTex3di4) DescriptorSet 0 + Decorate 125(g_tTex3df4) DescriptorSet 0 Decorate 128(g_tTex3di4) Binding 0 - Decorate 131(g_tTex3du4) DescriptorSet 0 + Decorate 128(g_tTex3di4) DescriptorSet 0 Decorate 131(g_tTex3du4) Binding 0 - Decorate 134(g_tTexcdf4) DescriptorSet 0 + Decorate 131(g_tTex3du4) DescriptorSet 0 Decorate 134(g_tTexcdf4) Binding 0 - Decorate 137(g_tTexcdi4) DescriptorSet 0 + Decorate 134(g_tTexcdf4) DescriptorSet 0 Decorate 137(g_tTexcdi4) Binding 0 - Decorate 140(g_tTexcdu4) DescriptorSet 0 + Decorate 137(g_tTexcdi4) DescriptorSet 0 Decorate 140(g_tTexcdu4) Binding 0 - Decorate 143(g_tTex1df4a) DescriptorSet 0 + Decorate 140(g_tTexcdu4) DescriptorSet 0 Decorate 143(g_tTex1df4a) Binding 0 - Decorate 146(g_tTex1di4a) DescriptorSet 0 + Decorate 143(g_tTex1df4a) DescriptorSet 0 Decorate 146(g_tTex1di4a) Binding 0 - Decorate 149(g_tTex1du4a) DescriptorSet 0 + Decorate 146(g_tTex1di4a) DescriptorSet 0 Decorate 149(g_tTex1du4a) Binding 0 - Decorate 152(g_tTex2df4a) DescriptorSet 0 + Decorate 149(g_tTex1du4a) DescriptorSet 0 Decorate 152(g_tTex2df4a) Binding 0 - Decorate 155(g_tTex2di4a) DescriptorSet 0 + Decorate 152(g_tTex2df4a) DescriptorSet 0 Decorate 155(g_tTex2di4a) Binding 0 - Decorate 158(g_tTex2du4a) DescriptorSet 0 + Decorate 155(g_tTex2di4a) DescriptorSet 0 Decorate 158(g_tTex2du4a) Binding 0 - Decorate 161(g_tTexcdf4a) DescriptorSet 0 + Decorate 158(g_tTex2du4a) DescriptorSet 0 Decorate 161(g_tTexcdf4a) Binding 0 - Decorate 164(g_tTexcdi4a) DescriptorSet 0 + Decorate 161(g_tTexcdf4a) DescriptorSet 0 Decorate 164(g_tTexcdi4a) Binding 0 - Decorate 167(g_tTexcdu4a) DescriptorSet 0 + Decorate 164(g_tTexcdi4a) DescriptorSet 0 Decorate 167(g_tTexcdu4a) Binding 0 + Decorate 167(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out index 22bd25772a..c3fbf0d156 100644 --- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out @@ -363,7 +363,7 @@ using depth_any Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 179 Capability Shader @@ -412,52 +412,52 @@ Validation failed Name 172 "g_tTexcdf4a" Name 175 "g_tTexcdi4a" Name 178 "g_tTexcdu4a" - Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 16(g_tTex1df4a) Binding 1 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 41(g_tTex1di4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 41(g_tTex1di4a) Binding 2 - Decorate 55(g_tTex1du4a) DescriptorSet 0 + Decorate 41(g_tTex1di4a) DescriptorSet 0 Decorate 55(g_tTex1du4a) Binding 3 - Decorate 68(g_tTex2df4a) DescriptorSet 0 + Decorate 55(g_tTex1du4a) DescriptorSet 0 Decorate 68(g_tTex2df4a) Binding 4 - Decorate 87(g_tTex2di4a) DescriptorSet 0 + Decorate 68(g_tTex2df4a) DescriptorSet 0 Decorate 87(g_tTex2di4a) Binding 5 - Decorate 101(g_tTex2du4a) DescriptorSet 0 + Decorate 87(g_tTex2di4a) DescriptorSet 0 Decorate 101(g_tTex2du4a) Binding 6 + Decorate 101(g_tTex2du4a) DescriptorSet 0 Decorate 127(@entryPointOutput.Color) Location 0 Decorate 131(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 136(g_tTex1df4) DescriptorSet 0 Decorate 136(g_tTex1df4) Binding 0 - Decorate 139(g_tTex1di4) DescriptorSet 0 + Decorate 136(g_tTex1df4) DescriptorSet 0 Decorate 139(g_tTex1di4) Binding 0 - Decorate 142(g_tTex1du4) DescriptorSet 0 + Decorate 139(g_tTex1di4) DescriptorSet 0 Decorate 142(g_tTex1du4) Binding 0 - Decorate 145(g_tTex2df4) DescriptorSet 0 + Decorate 142(g_tTex1du4) DescriptorSet 0 Decorate 145(g_tTex2df4) Binding 0 - Decorate 148(g_tTex2di4) DescriptorSet 0 + Decorate 145(g_tTex2df4) DescriptorSet 0 Decorate 148(g_tTex2di4) Binding 0 - Decorate 151(g_tTex2du4) DescriptorSet 0 + Decorate 148(g_tTex2di4) DescriptorSet 0 Decorate 151(g_tTex2du4) Binding 0 - Decorate 154(g_tTex3df4) DescriptorSet 0 + Decorate 151(g_tTex2du4) DescriptorSet 0 Decorate 154(g_tTex3df4) Binding 0 - Decorate 157(g_tTex3di4) DescriptorSet 0 + Decorate 154(g_tTex3df4) DescriptorSet 0 Decorate 157(g_tTex3di4) Binding 0 - Decorate 160(g_tTex3du4) DescriptorSet 0 + Decorate 157(g_tTex3di4) DescriptorSet 0 Decorate 160(g_tTex3du4) Binding 0 - Decorate 163(g_tTexcdf4) DescriptorSet 0 + Decorate 160(g_tTex3du4) DescriptorSet 0 Decorate 163(g_tTexcdf4) Binding 0 - Decorate 166(g_tTexcdi4) DescriptorSet 0 + Decorate 163(g_tTexcdf4) DescriptorSet 0 Decorate 166(g_tTexcdi4) Binding 0 - Decorate 169(g_tTexcdu4) DescriptorSet 0 + Decorate 166(g_tTexcdi4) DescriptorSet 0 Decorate 169(g_tTexcdu4) Binding 0 - Decorate 172(g_tTexcdf4a) DescriptorSet 0 + Decorate 169(g_tTexcdu4) DescriptorSet 0 Decorate 172(g_tTexcdf4a) Binding 0 - Decorate 175(g_tTexcdi4a) DescriptorSet 0 + Decorate 172(g_tTexcdf4a) DescriptorSet 0 Decorate 175(g_tTexcdi4a) Binding 0 - Decorate 178(g_tTexcdu4a) DescriptorSet 0 + Decorate 175(g_tTexcdi4a) DescriptorSet 0 Decorate 178(g_tTexcdu4a) Binding 0 + Decorate 178(g_tTexcdu4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out index 67e1d15790..b70b0bff62 100644 --- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out @@ -430,7 +430,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 140 Capability Shader @@ -471,30 +471,30 @@ using depth_any Name 132 "@entryPointOutput.Color" Name 136 "@entryPointOutput.Depth" Name 139 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 37(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 37(g_tTex1di4) Binding 2 - Decorate 49(g_tTex1du4) DescriptorSet 0 + Decorate 37(g_tTex1di4) DescriptorSet 0 Decorate 49(g_tTex1du4) Binding 3 - Decorate 58(g_tTex2df4) DescriptorSet 0 + Decorate 49(g_tTex1du4) DescriptorSet 0 Decorate 58(g_tTex2df4) Binding 4 - Decorate 71(g_tTex2di4) DescriptorSet 0 + Decorate 58(g_tTex2df4) DescriptorSet 0 Decorate 71(g_tTex2di4) Binding 5 - Decorate 80(g_tTex2du4) DescriptorSet 0 + Decorate 71(g_tTex2di4) DescriptorSet 0 Decorate 80(g_tTex2du4) Binding 6 - Decorate 89(g_tTexcdf4) DescriptorSet 0 + Decorate 80(g_tTex2du4) DescriptorSet 0 Decorate 89(g_tTexcdf4) Binding 7 - Decorate 102(g_tTexcdi4) DescriptorSet 0 + Decorate 89(g_tTexcdf4) DescriptorSet 0 Decorate 102(g_tTexcdi4) Binding 8 - Decorate 111(g_tTexcdu4) DescriptorSet 0 + Decorate 102(g_tTexcdi4) DescriptorSet 0 Decorate 111(g_tTexcdu4) Binding 9 + Decorate 111(g_tTexcdu4) DescriptorSet 0 Decorate 132(@entryPointOutput.Color) Location 0 Decorate 136(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 139(g_tTex1df4a) DescriptorSet 0 Decorate 139(g_tTex1df4a) Binding 1 + Decorate 139(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out index 8f2fabc420..b17306d0ba 100644 --- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out @@ -532,7 +532,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 175 Capability Shader @@ -578,36 +578,36 @@ using depth_any Name 167 "@entryPointOutput.Color" Name 171 "@entryPointOutput.Depth" Name 174 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 34(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 34(g_tTex1di4) Binding 2 - Decorate 47(g_tTex1du4) DescriptorSet 0 + Decorate 34(g_tTex1di4) DescriptorSet 0 Decorate 47(g_tTex1du4) Binding 3 - Decorate 57(g_tTex2df4) DescriptorSet 0 + Decorate 47(g_tTex1du4) DescriptorSet 0 Decorate 57(g_tTex2df4) Binding 4 - Decorate 69(g_tTex2di4) DescriptorSet 0 + Decorate 57(g_tTex2df4) DescriptorSet 0 Decorate 69(g_tTex2di4) Binding 5 - Decorate 80(g_tTex2du4) DescriptorSet 0 + Decorate 69(g_tTex2di4) DescriptorSet 0 Decorate 80(g_tTex2du4) Binding 6 - Decorate 92(g_tTex3df4) DescriptorSet 0 + Decorate 80(g_tTex2du4) DescriptorSet 0 Decorate 92(g_tTex3df4) Binding 7 - Decorate 105(g_tTex3di4) DescriptorSet 0 + Decorate 92(g_tTex3df4) DescriptorSet 0 Decorate 105(g_tTex3di4) Binding 8 - Decorate 115(g_tTex3du4) DescriptorSet 0 + Decorate 105(g_tTex3di4) DescriptorSet 0 Decorate 115(g_tTex3du4) Binding 9 - Decorate 128(g_tTexcdf4) DescriptorSet 0 + Decorate 115(g_tTex3du4) DescriptorSet 0 Decorate 128(g_tTexcdf4) Binding 10 - Decorate 137(g_tTexcdi4) DescriptorSet 0 + Decorate 128(g_tTexcdf4) DescriptorSet 0 Decorate 137(g_tTexcdi4) Binding 11 - Decorate 146(g_tTexcdu4) DescriptorSet 0 + Decorate 137(g_tTexcdi4) DescriptorSet 0 Decorate 146(g_tTexcdu4) Binding 12 + Decorate 146(g_tTexcdu4) DescriptorSet 0 Decorate 167(@entryPointOutput.Color) Location 0 Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 174(g_tTex1df4a) DescriptorSet 0 Decorate 174(g_tTex1df4a) Binding 1 + Decorate 174(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out index 69820905fa..902500cd66 100644 --- a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out +++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out @@ -494,7 +494,7 @@ Shader version: 500 0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 166 Capability Shader @@ -535,35 +535,35 @@ Shader version: 500 Name 153 "vsout" Name 162 "@entryPointOutput.Pos" Name 165 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 34(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 34(g_tTex1di4) Binding 2 - Decorate 47(g_tTex1du4) DescriptorSet 0 + Decorate 34(g_tTex1di4) DescriptorSet 0 Decorate 47(g_tTex1du4) Binding 3 - Decorate 57(g_tTex2df4) DescriptorSet 0 + Decorate 47(g_tTex1du4) DescriptorSet 0 Decorate 57(g_tTex2df4) Binding 4 - Decorate 69(g_tTex2di4) DescriptorSet 0 + Decorate 57(g_tTex2df4) DescriptorSet 0 Decorate 69(g_tTex2di4) Binding 5 - Decorate 80(g_tTex2du4) DescriptorSet 0 + Decorate 69(g_tTex2di4) DescriptorSet 0 Decorate 80(g_tTex2du4) Binding 6 - Decorate 92(g_tTex3df4) DescriptorSet 0 + Decorate 80(g_tTex2du4) DescriptorSet 0 Decorate 92(g_tTex3df4) Binding 7 - Decorate 105(g_tTex3di4) DescriptorSet 0 + Decorate 92(g_tTex3df4) DescriptorSet 0 Decorate 105(g_tTex3di4) Binding 8 - Decorate 115(g_tTex3du4) DescriptorSet 0 + Decorate 105(g_tTex3di4) DescriptorSet 0 Decorate 115(g_tTex3du4) Binding 9 - Decorate 128(g_tTexcdf4) DescriptorSet 0 + Decorate 115(g_tTex3du4) DescriptorSet 0 Decorate 128(g_tTexcdf4) Binding 10 - Decorate 137(g_tTexcdi4) DescriptorSet 0 + Decorate 128(g_tTexcdf4) DescriptorSet 0 Decorate 137(g_tTexcdi4) Binding 11 - Decorate 146(g_tTexcdu4) DescriptorSet 0 + Decorate 137(g_tTexcdi4) DescriptorSet 0 Decorate 146(g_tTexcdu4) Binding 12 + Decorate 146(g_tTexcdu4) DescriptorSet 0 Decorate 162(@entryPointOutput.Pos) BuiltIn Position - Decorate 165(g_tTex1df4a) DescriptorSet 0 Decorate 165(g_tTex1df4a) Binding 1 + Decorate 165(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out index 5694f89bc2..63c9421956 100644 --- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out @@ -472,7 +472,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 166 Capability Shader @@ -515,36 +515,36 @@ using depth_any Name 159 "g_tTexcdf4" Name 162 "g_tTexcdi4" Name 165 "g_tTexcdu4" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 35(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 35(g_tTex1di4) Binding 2 - Decorate 48(g_tTex1du4) DescriptorSet 0 + Decorate 35(g_tTex1di4) DescriptorSet 0 Decorate 48(g_tTex1du4) Binding 3 - Decorate 58(g_tTex2df4) DescriptorSet 0 + Decorate 48(g_tTex1du4) DescriptorSet 0 Decorate 58(g_tTex2df4) Binding 4 - Decorate 73(g_tTex2di4) DescriptorSet 0 + Decorate 58(g_tTex2df4) DescriptorSet 0 Decorate 73(g_tTex2di4) Binding 5 - Decorate 85(g_tTex2du4) DescriptorSet 0 + Decorate 73(g_tTex2di4) DescriptorSet 0 Decorate 85(g_tTex2du4) Binding 6 - Decorate 99(g_tTex3df4) DescriptorSet 0 + Decorate 85(g_tTex2du4) DescriptorSet 0 Decorate 99(g_tTex3df4) Binding 7 - Decorate 114(g_tTex3di4) DescriptorSet 0 + Decorate 99(g_tTex3df4) DescriptorSet 0 Decorate 114(g_tTex3di4) Binding 8 - Decorate 125(g_tTex3du4) DescriptorSet 0 + Decorate 114(g_tTex3di4) DescriptorSet 0 Decorate 125(g_tTex3du4) Binding 9 + Decorate 125(g_tTex3du4) DescriptorSet 0 Decorate 149(@entryPointOutput.Color) Location 0 Decorate 153(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 156(g_tTex1df4a) DescriptorSet 0 Decorate 156(g_tTex1df4a) Binding 1 - Decorate 159(g_tTexcdf4) DescriptorSet 0 + Decorate 156(g_tTex1df4a) DescriptorSet 0 Decorate 159(g_tTexcdf4) Binding 0 - Decorate 162(g_tTexcdi4) DescriptorSet 0 + Decorate 159(g_tTexcdf4) DescriptorSet 0 Decorate 162(g_tTexcdi4) Binding 0 - Decorate 165(g_tTexcdu4) DescriptorSet 0 + Decorate 162(g_tTexcdi4) DescriptorSet 0 Decorate 165(g_tTexcdu4) Binding 0 + Decorate 165(g_tTexcdu4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out index a3bc4c14d8..2f24516282 100644 --- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out @@ -340,7 +340,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 120 Capability Shader @@ -378,30 +378,30 @@ using depth_any Name 113 "g_tTexcdf4" Name 116 "g_tTexcdi4" Name 119 "g_tTexcdu4" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 38(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 38(g_tTex1di4) Binding 2 - Decorate 50(g_tTex1du4) DescriptorSet 0 + Decorate 38(g_tTex1di4) DescriptorSet 0 Decorate 50(g_tTex1du4) Binding 3 - Decorate 59(g_tTex2df4) DescriptorSet 0 + Decorate 50(g_tTex1du4) DescriptorSet 0 Decorate 59(g_tTex2df4) Binding 4 - Decorate 75(g_tTex2di4) DescriptorSet 0 + Decorate 59(g_tTex2df4) DescriptorSet 0 Decorate 75(g_tTex2di4) Binding 5 - Decorate 84(g_tTex2du4) DescriptorSet 0 + Decorate 75(g_tTex2di4) DescriptorSet 0 Decorate 84(g_tTex2du4) Binding 6 + Decorate 84(g_tTex2du4) DescriptorSet 0 Decorate 103(@entryPointOutput.Color) Location 0 Decorate 107(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 110(g_tTex1df4a) DescriptorSet 0 Decorate 110(g_tTex1df4a) Binding 1 - Decorate 113(g_tTexcdf4) DescriptorSet 0 + Decorate 110(g_tTex1df4a) DescriptorSet 0 Decorate 113(g_tTexcdf4) Binding 0 - Decorate 116(g_tTexcdi4) DescriptorSet 0 + Decorate 113(g_tTexcdf4) DescriptorSet 0 Decorate 116(g_tTexcdi4) Binding 0 - Decorate 119(g_tTexcdu4) DescriptorSet 0 + Decorate 116(g_tTexcdi4) DescriptorSet 0 Decorate 119(g_tTexcdu4) Binding 0 + Decorate 119(g_tTexcdu4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out index 68e0e87db9..5057df6baf 100644 --- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out @@ -358,7 +358,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 147 Capability Shader @@ -399,30 +399,30 @@ using depth_any Name 139 "@entryPointOutput.Color" Name 143 "@entryPointOutput.Depth" Name 146 "g_tTex1df4" - Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 16(g_tTex1df4a) Binding 1 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4a) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 36(g_tTex1di4a) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 36(g_tTex1di4a) Binding 2 - Decorate 50(g_tTex1du4a) DescriptorSet 0 + Decorate 36(g_tTex1di4a) DescriptorSet 0 Decorate 50(g_tTex1du4a) Binding 3 - Decorate 61(g_tTex2df4a) DescriptorSet 0 + Decorate 50(g_tTex1du4a) DescriptorSet 0 Decorate 61(g_tTex2df4a) Binding 4 - Decorate 72(g_tTex2di4a) DescriptorSet 0 + Decorate 61(g_tTex2df4a) DescriptorSet 0 Decorate 72(g_tTex2di4a) Binding 5 - Decorate 83(g_tTex2du4a) DescriptorSet 0 + Decorate 72(g_tTex2di4a) DescriptorSet 0 Decorate 83(g_tTex2du4a) Binding 6 - Decorate 95(g_tTexcdf4a) DescriptorSet 0 + Decorate 83(g_tTex2du4a) DescriptorSet 0 Decorate 95(g_tTexcdf4a) Binding 7 - Decorate 105(g_tTexcdi4a) DescriptorSet 0 + Decorate 95(g_tTexcdf4a) DescriptorSet 0 Decorate 105(g_tTexcdi4a) Binding 8 - Decorate 115(g_tTexcdu4a) DescriptorSet 0 + Decorate 105(g_tTexcdi4a) DescriptorSet 0 Decorate 115(g_tTexcdu4a) Binding 9 + Decorate 115(g_tTexcdu4a) DescriptorSet 0 Decorate 139(@entryPointOutput.Color) Location 0 Decorate 143(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 146(g_tTex1df4) DescriptorSet 0 Decorate 146(g_tTex1df4) Binding 0 + Decorate 146(g_tTex1df4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out index ee3588da5f..7055dfae62 100644 --- a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out @@ -426,7 +426,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 172 Capability Shader @@ -473,38 +473,38 @@ using depth_any Name 167 "@entryPointOutput.Depth" Name 170 "g_sSamp2d" Name 171 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 33(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 33(g_tTex1di4) Binding 2 - Decorate 46(g_tTex1du4) DescriptorSet 0 + Decorate 33(g_tTex1di4) DescriptorSet 0 Decorate 46(g_tTex1du4) Binding 3 - Decorate 56(g_tTex2df4) DescriptorSet 0 + Decorate 46(g_tTex1du4) DescriptorSet 0 Decorate 56(g_tTex2df4) Binding 4 - Decorate 67(g_tTex2di4) DescriptorSet 0 + Decorate 56(g_tTex2df4) DescriptorSet 0 Decorate 67(g_tTex2di4) Binding 5 - Decorate 78(g_tTex2du4) DescriptorSet 0 + Decorate 67(g_tTex2di4) DescriptorSet 0 Decorate 78(g_tTex2du4) Binding 6 - Decorate 90(g_tTex3df4) DescriptorSet 0 + Decorate 78(g_tTex2du4) DescriptorSet 0 Decorate 90(g_tTex3df4) Binding 7 - Decorate 101(g_tTex3di4) DescriptorSet 0 + Decorate 90(g_tTex3df4) DescriptorSet 0 Decorate 101(g_tTex3di4) Binding 8 - Decorate 111(g_tTex3du4) DescriptorSet 0 + Decorate 101(g_tTex3di4) DescriptorSet 0 Decorate 111(g_tTex3du4) Binding 9 - Decorate 124(g_tTexcdf4) DescriptorSet 0 + Decorate 111(g_tTex3du4) DescriptorSet 0 Decorate 124(g_tTexcdf4) Binding 10 - Decorate 133(g_tTexcdi4) DescriptorSet 0 + Decorate 124(g_tTexcdf4) DescriptorSet 0 Decorate 133(g_tTexcdi4) Binding 11 - Decorate 142(g_tTexcdu4) DescriptorSet 0 + Decorate 133(g_tTexcdi4) DescriptorSet 0 Decorate 142(g_tTexcdu4) Binding 12 + Decorate 142(g_tTexcdu4) DescriptorSet 0 Decorate 163(@entryPointOutput.Color) Location 0 Decorate 167(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 170(g_sSamp2d) DescriptorSet 0 Decorate 170(g_sSamp2d) Binding 0 - Decorate 171(g_tTex1df4a) DescriptorSet 0 + Decorate 170(g_sSamp2d) DescriptorSet 0 Decorate 171(g_tTex1df4a) Binding 1 + Decorate 171(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out index a3ff9e6624..f590133174 100644 --- a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out +++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out @@ -386,7 +386,7 @@ Shader version: 500 0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 162 Capability Shader @@ -427,35 +427,35 @@ Shader version: 500 Name 149 "vsout" Name 158 "@entryPointOutput.Pos" Name 161 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 33(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 33(g_tTex1di4) Binding 2 - Decorate 46(g_tTex1du4) DescriptorSet 0 + Decorate 33(g_tTex1di4) DescriptorSet 0 Decorate 46(g_tTex1du4) Binding 3 - Decorate 56(g_tTex2df4) DescriptorSet 0 + Decorate 46(g_tTex1du4) DescriptorSet 0 Decorate 56(g_tTex2df4) Binding 4 - Decorate 67(g_tTex2di4) DescriptorSet 0 + Decorate 56(g_tTex2df4) DescriptorSet 0 Decorate 67(g_tTex2di4) Binding 5 - Decorate 78(g_tTex2du4) DescriptorSet 0 + Decorate 67(g_tTex2di4) DescriptorSet 0 Decorate 78(g_tTex2du4) Binding 6 - Decorate 90(g_tTex3df4) DescriptorSet 0 + Decorate 78(g_tTex2du4) DescriptorSet 0 Decorate 90(g_tTex3df4) Binding 7 - Decorate 101(g_tTex3di4) DescriptorSet 0 + Decorate 90(g_tTex3df4) DescriptorSet 0 Decorate 101(g_tTex3di4) Binding 8 - Decorate 111(g_tTex3du4) DescriptorSet 0 + Decorate 101(g_tTex3di4) DescriptorSet 0 Decorate 111(g_tTex3du4) Binding 9 - Decorate 124(g_tTexcdf4) DescriptorSet 0 + Decorate 111(g_tTex3du4) DescriptorSet 0 Decorate 124(g_tTexcdf4) Binding 10 - Decorate 133(g_tTexcdi4) DescriptorSet 0 + Decorate 124(g_tTexcdf4) DescriptorSet 0 Decorate 133(g_tTexcdi4) Binding 11 - Decorate 142(g_tTexcdu4) DescriptorSet 0 + Decorate 133(g_tTexcdi4) DescriptorSet 0 Decorate 142(g_tTexcdu4) Binding 12 + Decorate 142(g_tTexcdu4) DescriptorSet 0 Decorate 158(@entryPointOutput.Pos) BuiltIn Position - Decorate 161(g_tTex1df4a) DescriptorSet 0 Decorate 161(g_tTex1df4a) Binding 1 + Decorate 161(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out index c9d431b217..e1ec0faee5 100644 --- a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out @@ -400,7 +400,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 162 Capability Shader @@ -443,36 +443,36 @@ using depth_any Name 155 "g_tTexcdf4" Name 158 "g_tTexcdi4" Name 161 "g_tTexcdu4" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 34(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 34(g_tTex1di4) Binding 2 - Decorate 47(g_tTex1du4) DescriptorSet 0 + Decorate 34(g_tTex1di4) DescriptorSet 0 Decorate 47(g_tTex1du4) Binding 3 - Decorate 57(g_tTex2df4) DescriptorSet 0 + Decorate 47(g_tTex1du4) DescriptorSet 0 Decorate 57(g_tTex2df4) Binding 4 - Decorate 71(g_tTex2di4) DescriptorSet 0 + Decorate 57(g_tTex2df4) DescriptorSet 0 Decorate 71(g_tTex2di4) Binding 5 - Decorate 83(g_tTex2du4) DescriptorSet 0 + Decorate 71(g_tTex2di4) DescriptorSet 0 Decorate 83(g_tTex2du4) Binding 6 - Decorate 97(g_tTex3df4) DescriptorSet 0 + Decorate 83(g_tTex2du4) DescriptorSet 0 Decorate 97(g_tTex3df4) Binding 7 - Decorate 110(g_tTex3di4) DescriptorSet 0 + Decorate 97(g_tTex3df4) DescriptorSet 0 Decorate 110(g_tTex3di4) Binding 8 - Decorate 121(g_tTex3du4) DescriptorSet 0 + Decorate 110(g_tTex3di4) DescriptorSet 0 Decorate 121(g_tTex3du4) Binding 9 + Decorate 121(g_tTex3du4) DescriptorSet 0 Decorate 145(@entryPointOutput.Color) Location 0 Decorate 149(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 152(g_tTex1df4a) DescriptorSet 0 Decorate 152(g_tTex1df4a) Binding 1 - Decorate 155(g_tTexcdf4) DescriptorSet 0 + Decorate 152(g_tTex1df4a) DescriptorSet 0 Decorate 155(g_tTexcdf4) Binding 0 - Decorate 158(g_tTexcdi4) DescriptorSet 0 + Decorate 155(g_tTexcdf4) DescriptorSet 0 Decorate 158(g_tTexcdi4) Binding 0 - Decorate 161(g_tTexcdu4) DescriptorSet 0 + Decorate 158(g_tTexcdi4) DescriptorSet 0 Decorate 161(g_tTexcdu4) Binding 0 + Decorate 161(g_tTexcdu4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out index 3f6ae55658..7c057dffeb 100644 --- a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out @@ -298,7 +298,7 @@ using depth_any 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 119 Capability Shader @@ -332,24 +332,24 @@ using depth_any Name 111 "@entryPointOutput.Color" Name 115 "@entryPointOutput.Depth" Name 118 "g_tTex1df4a" - Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 16(g_tTex1df4) Binding 0 - Decorate 20(g_sSamp) DescriptorSet 0 + Decorate 16(g_tTex1df4) DescriptorSet 0 Decorate 20(g_sSamp) Binding 0 - Decorate 37(g_tTex1di4) DescriptorSet 0 + Decorate 20(g_sSamp) DescriptorSet 0 Decorate 37(g_tTex1di4) Binding 2 - Decorate 52(g_tTex1du4) DescriptorSet 0 + Decorate 37(g_tTex1di4) DescriptorSet 0 Decorate 52(g_tTex1du4) Binding 3 - Decorate 64(g_tTex2df4) DescriptorSet 0 + Decorate 52(g_tTex1du4) DescriptorSet 0 Decorate 64(g_tTex2df4) Binding 4 - Decorate 77(g_tTex2di4) DescriptorSet 0 + Decorate 64(g_tTex2df4) DescriptorSet 0 Decorate 77(g_tTex2di4) Binding 5 - Decorate 88(g_tTex2du4) DescriptorSet 0 + Decorate 77(g_tTex2di4) DescriptorSet 0 Decorate 88(g_tTex2du4) Binding 6 + Decorate 88(g_tTex2du4) DescriptorSet 0 Decorate 111(@entryPointOutput.Color) Location 0 Decorate 115(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 118(g_tTex1df4a) DescriptorSet 0 Decorate 118(g_tTex1df4a) Binding 1 + Decorate 118(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.scalar-length.frag.out b/Test/baseResults/hlsl.scalar-length.frag.out index c09216ae87..fd5f0b8492 100644 --- a/Test/baseResults/hlsl.scalar-length.frag.out +++ b/Test/baseResults/hlsl.scalar-length.frag.out @@ -64,7 +64,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader diff --git a/Test/baseResults/hlsl.scalar2matrix.frag.out b/Test/baseResults/hlsl.scalar2matrix.frag.out index 62980dd6f9..ee0c3db0b9 100644 --- a/Test/baseResults/hlsl.scalar2matrix.frag.out +++ b/Test/baseResults/hlsl.scalar2matrix.frag.out @@ -374,7 +374,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 96 Capability Shader diff --git a/Test/baseResults/hlsl.scalarCast.vert.out b/Test/baseResults/hlsl.scalarCast.vert.out index 17356f94e5..b6e87bf66a 100644 --- a/Test/baseResults/hlsl.scalarCast.vert.out +++ b/Test/baseResults/hlsl.scalarCast.vert.out @@ -322,13 +322,13 @@ Shader version: 500 0:? '@entryPointOutput.texCoord' (layout( location=0) out 2-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 120 +// Generated by (magic number): 8000b +// Id's are bound by 108 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 108 115 + EntryPoint Vertex 4 "main" 96 103 Source HLSL 500 Name 4 "main" Name 9 "VertexOut" @@ -342,21 +342,21 @@ Shader version: 500 Name 21 "r5(" Name 23 "@main(" Name 44 "f" - Name 56 "f" - Name 57 "scalarCopy" - Name 72 "f" - Name 73 "scalarCopy" - Name 88 "v0" - Name 90 "v1" - Name 92 "v2" - Name 94 "v3" - Name 96 "v4" - Name 98 "v5" - Name 105 "flattenTemp" - Name 108 "@entryPointOutput.position" - Name 115 "@entryPointOutput.texCoord" - Decorate 108(@entryPointOutput.position) BuiltIn Position - Decorate 115(@entryPointOutput.texCoord) Location 0 + Name 52 "f" + Name 53 "scalarCopy" + Name 64 "f" + Name 65 "scalarCopy" + Name 76 "v0" + Name 78 "v1" + Name 80 "v2" + Name 82 "v3" + Name 84 "v4" + Name 86 "v5" + Name 93 "flattenTemp" + Name 96 "@entryPointOutput.position" + Name 103 "@entryPointOutput.texCoord" + Decorate 96(@entryPointOutput.position) BuiltIn Position + Decorate 103(@entryPointOutput.texCoord) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -377,31 +377,31 @@ Shader version: 500 39: 8(fvec2) ConstantComposite 37 37 40:9(VertexOut) ConstantComposite 38 39 43: TypePointer Function 6(float) - 59: 6(float) Constant 1065353216 - 87: TypePointer Function 9(VertexOut) - 100: 7(fvec4) ConstantComposite 59 59 59 59 - 101: 8(fvec2) ConstantComposite 59 59 - 102:9(VertexOut) ConstantComposite 100 101 - 107: TypePointer Output 7(fvec4) -108(@entryPointOutput.position): 107(ptr) Variable Output - 109: TypeInt 32 1 - 110: 109(int) Constant 0 - 111: TypePointer Function 7(fvec4) - 114: TypePointer Output 8(fvec2) -115(@entryPointOutput.texCoord): 114(ptr) Variable Output - 116: 109(int) Constant 1 - 117: TypePointer Function 8(fvec2) + 55: 6(float) Constant 1065353216 + 75: TypePointer Function 9(VertexOut) + 88: 7(fvec4) ConstantComposite 55 55 55 55 + 89: 8(fvec2) ConstantComposite 55 55 + 90:9(VertexOut) ConstantComposite 88 89 + 95: TypePointer Output 7(fvec4) +96(@entryPointOutput.position): 95(ptr) Variable Output + 97: TypeInt 32 1 + 98: 97(int) Constant 0 + 99: TypePointer Function 7(fvec4) + 102: TypePointer Output 8(fvec2) +103(@entryPointOutput.texCoord): 102(ptr) Variable Output + 104: 97(int) Constant 1 + 105: TypePointer Function 8(fvec2) 4(main): 2 Function None 3 5: Label -105(flattenTemp): 87(ptr) Variable Function - 106:9(VertexOut) FunctionCall 23(@main() - Store 105(flattenTemp) 106 - 112: 111(ptr) AccessChain 105(flattenTemp) 110 - 113: 7(fvec4) Load 112 - Store 108(@entryPointOutput.position) 113 - 118: 117(ptr) AccessChain 105(flattenTemp) 116 - 119: 8(fvec2) Load 118 - Store 115(@entryPointOutput.texCoord) 119 + 93(flattenTemp): 75(ptr) Variable Function + 94:9(VertexOut) FunctionCall 23(@main() + Store 93(flattenTemp) 94 + 100: 99(ptr) AccessChain 93(flattenTemp) 98 + 101: 7(fvec4) Load 100 + Store 96(@entryPointOutput.position) 101 + 106: 105(ptr) AccessChain 93(flattenTemp) 104 + 107: 8(fvec2) Load 106 + Store 103(@entryPointOutput.texCoord) 107 Return FunctionEnd 11(r0():9(VertexOut) Function None 10 @@ -421,73 +421,61 @@ Shader version: 500 44(f): 43(ptr) Variable Function Store 44(f) 25 45: 6(float) Load 44(f) - 46: 6(float) Load 44(f) + 46: 7(fvec4) CompositeConstruct 45 45 45 45 47: 6(float) Load 44(f) - 48: 6(float) Load 44(f) - 49: 7(fvec4) CompositeConstruct 45 46 47 48 - 50: 6(float) Load 44(f) - 51: 6(float) Load 44(f) - 52: 8(fvec2) CompositeConstruct 50 51 - 53:9(VertexOut) CompositeConstruct 49 52 - ReturnValue 53 + 48: 8(fvec2) CompositeConstruct 47 47 + 49:9(VertexOut) CompositeConstruct 46 48 + ReturnValue 49 FunctionEnd 19(r4():9(VertexOut) Function None 10 20: Label - 56(f): 43(ptr) Variable Function - 57(scalarCopy): 43(ptr) Variable Function - Store 56(f) 25 - 58: 6(float) Load 56(f) - 60: 6(float) FAdd 58 59 - Store 57(scalarCopy) 60 - 61: 6(float) Load 57(scalarCopy) - 62: 6(float) Load 57(scalarCopy) - 63: 6(float) Load 57(scalarCopy) - 64: 6(float) Load 57(scalarCopy) - 65: 7(fvec4) CompositeConstruct 61 62 63 64 - 66: 6(float) Load 57(scalarCopy) - 67: 6(float) Load 57(scalarCopy) - 68: 8(fvec2) CompositeConstruct 66 67 - 69:9(VertexOut) CompositeConstruct 65 68 - ReturnValue 69 + 52(f): 43(ptr) Variable Function + 53(scalarCopy): 43(ptr) Variable Function + Store 52(f) 25 + 54: 6(float) Load 52(f) + 56: 6(float) FAdd 54 55 + Store 53(scalarCopy) 56 + 57: 6(float) Load 53(scalarCopy) + 58: 7(fvec4) CompositeConstruct 57 57 57 57 + 59: 6(float) Load 53(scalarCopy) + 60: 8(fvec2) CompositeConstruct 59 59 + 61:9(VertexOut) CompositeConstruct 58 60 + ReturnValue 61 FunctionEnd 21(r5():9(VertexOut) Function None 10 22: Label - 72(f): 43(ptr) Variable Function - 73(scalarCopy): 43(ptr) Variable Function - Store 72(f) 25 - 74: 6(float) Load 72(f) - 75: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 74 - Store 73(scalarCopy) 75 - 76: 6(float) Load 73(scalarCopy) - 77: 6(float) Load 73(scalarCopy) - 78: 6(float) Load 73(scalarCopy) - 79: 6(float) Load 73(scalarCopy) - 80: 7(fvec4) CompositeConstruct 76 77 78 79 - 81: 6(float) Load 73(scalarCopy) - 82: 6(float) Load 73(scalarCopy) - 83: 8(fvec2) CompositeConstruct 81 82 - 84:9(VertexOut) CompositeConstruct 80 83 - ReturnValue 84 + 64(f): 43(ptr) Variable Function + 65(scalarCopy): 43(ptr) Variable Function + Store 64(f) 25 + 66: 6(float) Load 64(f) + 67: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 66 + Store 65(scalarCopy) 67 + 68: 6(float) Load 65(scalarCopy) + 69: 7(fvec4) CompositeConstruct 68 68 68 68 + 70: 6(float) Load 65(scalarCopy) + 71: 8(fvec2) CompositeConstruct 70 70 + 72:9(VertexOut) CompositeConstruct 69 71 + ReturnValue 72 FunctionEnd 23(@main():9(VertexOut) Function None 10 24: Label - 88(v0): 87(ptr) Variable Function - 90(v1): 87(ptr) Variable Function - 92(v2): 87(ptr) Variable Function - 94(v3): 87(ptr) Variable Function - 96(v4): 87(ptr) Variable Function - 98(v5): 87(ptr) Variable Function - 89:9(VertexOut) FunctionCall 11(r0() - Store 88(v0) 89 - 91:9(VertexOut) FunctionCall 13(r1() - Store 90(v1) 91 - 93:9(VertexOut) FunctionCall 15(r2() - Store 92(v2) 93 - 95:9(VertexOut) FunctionCall 17(r3() - Store 94(v3) 95 - 97:9(VertexOut) FunctionCall 19(r4() - Store 96(v4) 97 - 99:9(VertexOut) FunctionCall 21(r5() - Store 98(v5) 99 - ReturnValue 102 + 76(v0): 75(ptr) Variable Function + 78(v1): 75(ptr) Variable Function + 80(v2): 75(ptr) Variable Function + 82(v3): 75(ptr) Variable Function + 84(v4): 75(ptr) Variable Function + 86(v5): 75(ptr) Variable Function + 77:9(VertexOut) FunctionCall 11(r0() + Store 76(v0) 77 + 79:9(VertexOut) FunctionCall 13(r1() + Store 78(v1) 79 + 81:9(VertexOut) FunctionCall 15(r2() + Store 80(v2) 81 + 83:9(VertexOut) FunctionCall 17(r3() + Store 82(v3) 83 + 85:9(VertexOut) FunctionCall 19(r4() + Store 84(v4) 85 + 87:9(VertexOut) FunctionCall 21(r5() + Store 86(v5) 87 + ReturnValue 90 FunctionEnd diff --git a/Test/baseResults/hlsl.scope.frag.out b/Test/baseResults/hlsl.scope.frag.out index 5d73bbad99..24f452caaf 100644 --- a/Test/baseResults/hlsl.scope.frag.out +++ b/Test/baseResults/hlsl.scope.frag.out @@ -102,7 +102,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 49 Capability Shader diff --git a/Test/baseResults/hlsl.self_cast.frag.out b/Test/baseResults/hlsl.self_cast.frag.out index ad4252bad8..1328833c31 100644 --- a/Test/baseResults/hlsl.self_cast.frag.out +++ b/Test/baseResults/hlsl.self_cast.frag.out @@ -68,7 +68,7 @@ gl_FragCoord origin is upper left 0:? Linker Objects // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 32 Capability Shader diff --git a/Test/baseResults/hlsl.semantic-1.vert.out b/Test/baseResults/hlsl.semantic-1.vert.out index 25fb582260..191afbc865 100644 --- a/Test/baseResults/hlsl.semantic-1.vert.out +++ b/Test/baseResults/hlsl.semantic-1.vert.out @@ -242,7 +242,7 @@ Shader version: 500 0:? 'v' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 84 Capability Shader diff --git a/Test/baseResults/hlsl.semantic.geom.out b/Test/baseResults/hlsl.semantic.geom.out index 0aba00030a..740f4a2a44 100644 --- a/Test/baseResults/hlsl.semantic.geom.out +++ b/Test/baseResults/hlsl.semantic.geom.out @@ -261,7 +261,7 @@ output primitive = line_strip Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 88 Capability Geometry diff --git a/Test/baseResults/hlsl.semantic.vert.out b/Test/baseResults/hlsl.semantic.vert.out index c17969a5bb..41edff2402 100644 --- a/Test/baseResults/hlsl.semantic.vert.out +++ b/Test/baseResults/hlsl.semantic.vert.out @@ -211,7 +211,7 @@ Shader version: 500 Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 70 Capability Shader diff --git a/Test/baseResults/hlsl.semicolons.frag.out b/Test/baseResults/hlsl.semicolons.frag.out index 1afcd5b412..347190ea53 100644 --- a/Test/baseResults/hlsl.semicolons.frag.out +++ b/Test/baseResults/hlsl.semicolons.frag.out @@ -74,7 +74,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 31 Capability Shader diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out index d3b17f01bd..0fd379b54e 100644 --- a/Test/baseResults/hlsl.shapeConv.frag.out +++ b/Test/baseResults/hlsl.shapeConv.frag.out @@ -102,8 +102,10 @@ gl_FragCoord origin is upper left 0:27 'v' ( temp 4-component vector of float) 0:27 Construct vec4 ( temp 4-component vector of float) 0:27 'f1' ( temp 1-component vector of float) -0:28 Construct float ( temp float) +0:28 direct index ( temp float) 0:28 'f1' ( temp 1-component vector of float) +0:28 Constant: +0:28 0 (const int) 0:29 Construct vec3 ( temp 3-component vector of float) 0:29 Construct float ( temp float) 0:29 'f1' ( temp 1-component vector of float) @@ -264,8 +266,10 @@ gl_FragCoord origin is upper left 0:27 'v' ( temp 4-component vector of float) 0:27 Construct vec4 ( temp 4-component vector of float) 0:27 'f1' ( temp 1-component vector of float) -0:28 Construct float ( temp float) +0:28 direct index ( temp float) 0:28 'f1' ( temp 1-component vector of float) +0:28 Constant: +0:28 0 (const int) 0:29 Construct vec3 ( temp 3-component vector of float) 0:29 Construct float ( temp float) 0:29 'f1' ( temp 1-component vector of float) @@ -319,8 +323,8 @@ gl_FragCoord origin is upper left 0:? Linker Objects // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 127 +// Generated by (magic number): 8000b +// Id's are bound by 126 Capability Shader 1: ExtInstImport "GLSL.std.450" @@ -339,11 +343,11 @@ gl_FragCoord origin is upper left Name 34 "MyVal" Name 37 "foo" Name 70 "f1" - Name 83 "ui" - Name 88 "ui3" - Name 103 "mixed" - Name 115 "sf" - Name 118 "sf1" + Name 82 "ui" + Name 87 "ui3" + Name 102 "mixed" + Name 114 "sf" + Name 117 "sf1" 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -375,11 +379,11 @@ gl_FragCoord origin is upper left 56: TypeInt 32 0 57: 56(int) Constant 0 62: TypeVector 41(bool) 4 - 82: TypePointer Function 56(int) - 85: TypeVector 56(int) 3 - 87: TypePointer Function 85(ivec3) - 122: 6(float) Constant 1077936128 - 123: 7(fvec4) ConstantComposite 122 122 122 122 + 81: TypePointer Function 56(int) + 84: TypeVector 56(int) 3 + 86: TypePointer Function 84(ivec3) + 121: 6(float) Constant 1077936128 + 122: 7(fvec4) ConstantComposite 121 121 121 121 4(main): 2 Function None 3 5: Label Return @@ -395,11 +399,11 @@ gl_FragCoord origin is upper left 34(MyVal): 23(ptr) Variable Function 37(foo): 23(ptr) Variable Function 70(f1): 9(ptr) Variable Function - 83(ui): 82(ptr) Variable Function - 88(ui3): 87(ptr) Variable Function - 103(mixed): 23(ptr) Variable Function - 115(sf): 9(ptr) Variable Function - 118(sf1): 9(ptr) Variable Function + 82(ui): 81(ptr) Variable Function + 87(ui3): 86(ptr) Variable Function + 102(mixed): 23(ptr) Variable Function + 114(sf): 9(ptr) Variable Function + 117(sf1): 9(ptr) Variable Function Store 15(v) 17 Store 15(v) 19 20: 6(float) Load 12(f) @@ -443,47 +447,46 @@ gl_FragCoord origin is upper left 77: 7(fvec4) CompositeConstruct 76 76 76 76 78: 62(bvec4) FOrdLessThan 75 77 79: 6(float) Load 70(f1) - 80: 6(float) Load 70(f1) - 81: 22(fvec3) CompositeConstruct 80 80 80 - 84: 56(int) Load 83(ui) - 86: 85(ivec3) CompositeConstruct 84 84 84 - 89: 85(ivec3) Load 88(ui3) - 90: 85(ivec3) ShiftRightLogical 86 89 - 91: 85(ivec3) Load 88(ui3) - 92: 56(int) Load 83(ui) - 93: 85(ivec3) CompositeConstruct 92 92 92 - 94: 85(ivec3) ShiftRightLogical 91 93 - 95: 6(float) Load 70(f1) - 96: 7(fvec4) Load 15(v) - 97: 7(fvec4) CompositeConstruct 95 95 95 95 - 98: 7(fvec4) FMul 96 97 - Store 15(v) 98 - 99: 7(fvec4) Load 15(v) - 100: 6(float) CompositeExtract 99 0 - 101: 6(float) Load 70(f1) - 102: 6(float) FMul 101 100 - Store 70(f1) 102 - 104: 22(fvec3) Load 24(u) - 105: 7(fvec4) Load 15(v) - 106: 6(float) CompositeExtract 105 0 - 107: 6(float) CompositeExtract 105 1 - 108: 6(float) CompositeExtract 105 2 - 109: 22(fvec3) CompositeConstruct 106 107 108 - 110: 22(fvec3) FMul 104 109 - Store 103(mixed) 110 - 111: 22(fvec3) Load 24(u) - 112: 6(float) CompositeExtract 111 0 - Store 12(f) 112 - 113: 22(fvec3) Load 24(u) - 114: 6(float) CompositeExtract 113 0 - Store 70(f1) 114 - 116: 7(fvec4) Load 15(v) - 117: 6(float) CompositeExtract 116 0 - Store 115(sf) 117 - 119: 7(fvec4) Load 15(v) - 120: 6(float) CompositeExtract 119 0 - Store 118(sf1) 120 - 121: 7(fvec4) Load 11(input) - 124: 7(fvec4) FMul 121 123 - ReturnValue 124 + 80: 22(fvec3) CompositeConstruct 79 79 79 + 83: 56(int) Load 82(ui) + 85: 84(ivec3) CompositeConstruct 83 83 83 + 88: 84(ivec3) Load 87(ui3) + 89: 84(ivec3) ShiftRightLogical 85 88 + 90: 84(ivec3) Load 87(ui3) + 91: 56(int) Load 82(ui) + 92: 84(ivec3) CompositeConstruct 91 91 91 + 93: 84(ivec3) ShiftRightLogical 90 92 + 94: 6(float) Load 70(f1) + 95: 7(fvec4) Load 15(v) + 96: 7(fvec4) CompositeConstruct 94 94 94 94 + 97: 7(fvec4) FMul 95 96 + Store 15(v) 97 + 98: 7(fvec4) Load 15(v) + 99: 6(float) CompositeExtract 98 0 + 100: 6(float) Load 70(f1) + 101: 6(float) FMul 100 99 + Store 70(f1) 101 + 103: 22(fvec3) Load 24(u) + 104: 7(fvec4) Load 15(v) + 105: 6(float) CompositeExtract 104 0 + 106: 6(float) CompositeExtract 104 1 + 107: 6(float) CompositeExtract 104 2 + 108: 22(fvec3) CompositeConstruct 105 106 107 + 109: 22(fvec3) FMul 103 108 + Store 102(mixed) 109 + 110: 22(fvec3) Load 24(u) + 111: 6(float) CompositeExtract 110 0 + Store 12(f) 111 + 112: 22(fvec3) Load 24(u) + 113: 6(float) CompositeExtract 112 0 + Store 70(f1) 113 + 115: 7(fvec4) Load 15(v) + 116: 6(float) CompositeExtract 115 0 + Store 114(sf) 116 + 118: 7(fvec4) Load 15(v) + 119: 6(float) CompositeExtract 118 0 + Store 117(sf1) 119 + 120: 7(fvec4) Load 11(input) + 123: 7(fvec4) FMul 120 122 + ReturnValue 123 FunctionEnd diff --git a/Test/baseResults/hlsl.shapeConvRet.frag.out b/Test/baseResults/hlsl.shapeConvRet.frag.out index e3e27a26bb..a23478c5c6 100644 --- a/Test/baseResults/hlsl.shapeConvRet.frag.out +++ b/Test/baseResults/hlsl.shapeConvRet.frag.out @@ -68,7 +68,7 @@ gl_FragCoord origin is upper left 0:? 'f' (layout( location=0) in float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 35 Capability Shader diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out index bf88ce8690..1f44be5aed 100644 --- a/Test/baseResults/hlsl.sin.frag.out +++ b/Test/baseResults/hlsl.sin.frag.out @@ -52,7 +52,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 26 Capability Shader diff --git a/Test/baseResults/hlsl.singleArgIntPromo.vert.out b/Test/baseResults/hlsl.singleArgIntPromo.vert.out index a6105944ef..a5bf362afb 100644 --- a/Test/baseResults/hlsl.singleArgIntPromo.vert.out +++ b/Test/baseResults/hlsl.singleArgIntPromo.vert.out @@ -194,7 +194,7 @@ Shader version: 500 0:? '@entryPointOutput' (layout( location=0) out float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 75 Capability Shader diff --git a/Test/baseResults/hlsl.snorm.uav.comp.out b/Test/baseResults/hlsl.snorm.uav.comp.out index 7b8cd4168f..de82aa4da5 100644 --- a/Test/baseResults/hlsl.snorm.uav.comp.out +++ b/Test/baseResults/hlsl.snorm.uav.comp.out @@ -112,7 +112,7 @@ local_size = (16, 16, 1) 0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 54 Capability Shader @@ -136,18 +136,18 @@ local_size = (16, 16, 1) Name 47 "tid" Name 49 "tid" Name 51 "param" - Decorate 19(ResultInS) DescriptorSet 0 Decorate 19(ResultInS) Binding 1 - MemberDecorate 25($Global) 0 Offset 0 + Decorate 19(ResultInS) DescriptorSet 0 Decorate 25($Global) Block - Decorate 27 DescriptorSet 0 + MemberDecorate 25($Global) 0 Offset 0 Decorate 27 Binding 2 - Decorate 34(ResultOutS) DescriptorSet 0 + Decorate 27 DescriptorSet 0 Decorate 34(ResultOutS) Binding 1 - Decorate 39(ResultInU) DescriptorSet 0 + Decorate 34(ResultOutS) DescriptorSet 0 Decorate 39(ResultInU) Binding 0 - Decorate 43(ResultOutU) DescriptorSet 0 + Decorate 39(ResultInU) DescriptorSet 0 Decorate 43(ResultOutU) Binding 0 + Decorate 43(ResultOutU) DescriptorSet 0 Decorate 49(tid) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.specConstant.frag.out b/Test/baseResults/hlsl.specConstant.frag.out index eb62242c07..3d81789e7d 100644 --- a/Test/baseResults/hlsl.specConstant.frag.out +++ b/Test/baseResults/hlsl.specConstant.frag.out @@ -136,7 +136,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 61 Capability Shader diff --git a/Test/baseResults/hlsl.spv.1.6.discard.frag.out b/Test/baseResults/hlsl.spv.1.6.discard.frag.out index b5cfe1704c..0d09d2592b 100644 --- a/Test/baseResults/hlsl.spv.1.6.discard.frag.out +++ b/Test/baseResults/hlsl.spv.1.6.discard.frag.out @@ -1,5 +1,6 @@ hlsl.spv.1.6.discard.frag Shader version: 500 +gl_FragCoord origin is upper left 0:? Sequence 0:2 Function Definition: foo(f1; ( temp void) 0:2 Function Parameters: @@ -55,6 +56,7 @@ Linked fragment stage: Shader version: 500 +gl_FragCoord origin is upper left 0:? Sequence 0:2 Function Definition: foo(f1; ( temp void) 0:2 Function Parameters: @@ -106,7 +108,7 @@ Shader version: 500 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10600 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 47 Capability Shader @@ -114,7 +116,7 @@ Shader version: 500 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "PixelShaderFunction" 42 - ExecutionMode 4 OriginLowerLeft + ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "PixelShaderFunction" Name 10 "foo(f1;" diff --git a/Test/baseResults/hlsl.staticFuncInit.frag.out b/Test/baseResults/hlsl.staticFuncInit.frag.out index 586daceb01..9e1e4a8e72 100644 --- a/Test/baseResults/hlsl.staticFuncInit.frag.out +++ b/Test/baseResults/hlsl.staticFuncInit.frag.out @@ -130,7 +130,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 57 Capability Shader diff --git a/Test/baseResults/hlsl.staticMemberFunction.frag.out b/Test/baseResults/hlsl.staticMemberFunction.frag.out index f0e5f9f064..9cd3d38610 100644 --- a/Test/baseResults/hlsl.staticMemberFunction.frag.out +++ b/Test/baseResults/hlsl.staticMemberFunction.frag.out @@ -118,7 +118,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 54 Capability Shader diff --git a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out index e518821825..3524cf9f4c 100644 --- a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out +++ b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out @@ -96,7 +96,7 @@ local_size = (64, 1, 1) 0:? 'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 42 Capability Shader @@ -116,10 +116,10 @@ local_size = (64, 1, 1) Name 37 "dispatchThreadID" Name 39 "param" Decorate 27 ArrayStride 4 - MemberDecorate 28(buffer) 0 Offset 0 Decorate 28(buffer) BufferBlock - Decorate 30(buffer) DescriptorSet 0 + MemberDecorate 28(buffer) 0 Offset 0 Decorate 30(buffer) Binding 0 + Decorate 30(buffer) DescriptorSet 0 Decorate 37(dispatchThreadID) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.string.frag.out b/Test/baseResults/hlsl.string.frag.out index 047f4136e2..2a5ce37d35 100644 --- a/Test/baseResults/hlsl.string.frag.out +++ b/Test/baseResults/hlsl.string.frag.out @@ -50,7 +50,7 @@ gl_FragCoord origin is upper left 0:? 'f' (layout( location=0) in float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader diff --git a/Test/baseResults/hlsl.stringtoken.frag.out b/Test/baseResults/hlsl.stringtoken.frag.out index f2ca742cdd..b656ae88de 100644 --- a/Test/baseResults/hlsl.stringtoken.frag.out +++ b/Test/baseResults/hlsl.stringtoken.frag.out @@ -70,7 +70,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 34 Capability Shader @@ -90,12 +90,12 @@ gl_FragCoord origin is upper left MemberName 31($Global) 0 "TestUF" Name 33 "" Decorate 25(@entryPointOutput.Color) Location 0 - Decorate 30(TestTexture) DescriptorSet 0 Decorate 30(TestTexture) Binding 0 - MemberDecorate 31($Global) 0 Offset 0 + Decorate 30(TestTexture) DescriptorSet 0 Decorate 31($Global) Block - Decorate 33 DescriptorSet 0 + MemberDecorate 31($Global) 0 Offset 0 Decorate 33 Binding 0 + Decorate 33 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out index 7330f567f4..24671d46af 100644 --- a/Test/baseResults/hlsl.struct.frag.out +++ b/Test/baseResults/hlsl.struct.frag.out @@ -213,7 +213,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 102 Capability Shader @@ -279,8 +279,8 @@ Validation failed Decorate 65(s.c) Location 3 Decorate 71(s.d) Centroid Decorate 71(s.d) Location 4 - Decorate 76(s.ff1) Flat Decorate 76(s.ff1) BuiltIn FrontFacing + Decorate 76(s.ff1) Flat Decorate 80(s.ff2) Flat Decorate 80(s.ff2) Location 5 Decorate 84(s.ff3) Flat @@ -291,12 +291,12 @@ Validation failed MemberDecorate 98(myS) 1 Offset 4 MemberDecorate 98(myS) 2 Offset 16 MemberDecorate 98(myS) 3 Offset 32 + Decorate 99($Global) Block MemberDecorate 99($Global) 0 Offset 0 MemberDecorate 99($Global) 1 Offset 1620 MemberDecorate 99($Global) 2 Offset 1636 - Decorate 99($Global) Block - Decorate 101 DescriptorSet 0 Decorate 101 Binding 0 + Decorate 101 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.struct.split-1.vert.out b/Test/baseResults/hlsl.struct.split-1.vert.out index f204bd50a8..89b4e4e95d 100644 --- a/Test/baseResults/hlsl.struct.split-1.vert.out +++ b/Test/baseResults/hlsl.struct.split-1.vert.out @@ -196,7 +196,7 @@ Shader version: 500 0:? 'Pos_loose' (layout( location=3) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 70 Capability Shader diff --git a/Test/baseResults/hlsl.struct.split.array.geom.out b/Test/baseResults/hlsl.struct.split.array.geom.out index 3d75fb87d7..0e3e8523e6 100644 --- a/Test/baseResults/hlsl.struct.split.array.geom.out +++ b/Test/baseResults/hlsl.struct.split.array.geom.out @@ -160,7 +160,7 @@ output primitive = triangle_strip 0:? 'OutputStream.VertexID' (layout( location=2) out uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 82 Capability Geometry diff --git a/Test/baseResults/hlsl.struct.split.assign.frag.out b/Test/baseResults/hlsl.struct.split.assign.frag.out index c40dbd6818..16c897b207 100644 --- a/Test/baseResults/hlsl.struct.split.assign.frag.out +++ b/Test/baseResults/hlsl.struct.split.assign.frag.out @@ -209,7 +209,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 66 Capability Shader diff --git a/Test/baseResults/hlsl.struct.split.call.vert.out b/Test/baseResults/hlsl.struct.split.call.vert.out index 2570552e4b..7451a34293 100644 --- a/Test/baseResults/hlsl.struct.split.call.vert.out +++ b/Test/baseResults/hlsl.struct.split.call.vert.out @@ -214,7 +214,7 @@ Shader version: 500 0:? 'vsin.x1_in' (layout( location=2) in int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 77 Capability Shader diff --git a/Test/baseResults/hlsl.struct.split.nested.geom.out b/Test/baseResults/hlsl.struct.split.nested.geom.out index 1abe4c385c..9bab38c218 100644 --- a/Test/baseResults/hlsl.struct.split.nested.geom.out +++ b/Test/baseResults/hlsl.struct.split.nested.geom.out @@ -430,7 +430,7 @@ output primitive = triangle_strip 0:? 'ts.contains_no_builtin_io.m1' (layout( location=3) out int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 99 Capability Geometry diff --git a/Test/baseResults/hlsl.struct.split.trivial.geom.out b/Test/baseResults/hlsl.struct.split.trivial.geom.out index 89c02bf2ab..f46316f66b 100644 --- a/Test/baseResults/hlsl.struct.split.trivial.geom.out +++ b/Test/baseResults/hlsl.struct.split.trivial.geom.out @@ -192,7 +192,7 @@ output primitive = triangle_strip 0:? 'ts.pos' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 67 Capability Geometry diff --git a/Test/baseResults/hlsl.struct.split.trivial.vert.out b/Test/baseResults/hlsl.struct.split.trivial.vert.out index f1470ab67c..065f42203e 100644 --- a/Test/baseResults/hlsl.struct.split.trivial.vert.out +++ b/Test/baseResults/hlsl.struct.split.trivial.vert.out @@ -98,7 +98,7 @@ Shader version: 500 0:? 'Pos_loose' (layout( location=1) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 45 Capability Shader diff --git a/Test/baseResults/hlsl.structIoFourWay.frag.out b/Test/baseResults/hlsl.structIoFourWay.frag.out index fd1a8bb41d..1143a94259 100644 --- a/Test/baseResults/hlsl.structIoFourWay.frag.out +++ b/Test/baseResults/hlsl.structIoFourWay.frag.out @@ -162,7 +162,7 @@ using depth_greater 0:? 't.normal' (layout( location=3) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 65 Capability Shader @@ -217,14 +217,14 @@ using depth_greater MemberDecorate 58(T) 1 Offset 72 MemberDecorate 58(T) 2 Offset 76 MemberDecorate 58(T) 3 Offset 80 - MemberDecorate 59($Global) 0 Offset 0 Decorate 59($Global) Block - Decorate 61 DescriptorSet 0 + MemberDecorate 59($Global) 0 Offset 0 Decorate 61 Binding 0 - MemberDecorate 62(buff) 0 Offset 96 + Decorate 61 DescriptorSet 0 Decorate 62(buff) Block - Decorate 64 DescriptorSet 0 + MemberDecorate 62(buff) 0 Offset 96 Decorate 64 Binding 0 + Decorate 64 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.structStructName.frag.out b/Test/baseResults/hlsl.structStructName.frag.out index 3fdbca95b3..ce305b0695 100644 --- a/Test/baseResults/hlsl.structStructName.frag.out +++ b/Test/baseResults/hlsl.structStructName.frag.out @@ -44,7 +44,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader diff --git a/Test/baseResults/hlsl.structarray.flatten.frag.out b/Test/baseResults/hlsl.structarray.flatten.frag.out index 97e57b164f..e5c01fcc29 100644 --- a/Test/baseResults/hlsl.structarray.flatten.frag.out +++ b/Test/baseResults/hlsl.structarray.flatten.frag.out @@ -157,7 +157,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 80 Capability Shader @@ -198,51 +198,51 @@ Validation failed Name 77 "g_texdata_array2[2].samp" Name 78 "g_texdata_array2[2].tex" Name 79 "g_texdata_array2[2].nonopaque_thing" - Decorate 18(g_texdata.tex) DescriptorSet 0 Decorate 18(g_texdata.tex) Binding 1 - Decorate 22(g_texdata.samp) DescriptorSet 0 + Decorate 18(g_texdata.tex) DescriptorSet 0 Decorate 22(g_texdata.samp) Binding 0 - Decorate 28(g_texdata_array[1].tex) DescriptorSet 0 + Decorate 22(g_texdata.samp) DescriptorSet 0 Decorate 28(g_texdata_array[1].tex) Binding 3 - Decorate 30(g_texdata_array[1].samp) DescriptorSet 0 + Decorate 28(g_texdata_array[1].tex) DescriptorSet 0 Decorate 30(g_texdata_array[1].samp) Binding 2 - Decorate 40(g_texdata_array2[1].tex) DescriptorSet 0 + Decorate 30(g_texdata_array[1].samp) DescriptorSet 0 Decorate 40(g_texdata_array2[1].tex) Binding 5 - Decorate 45(g_texdata_array2[1].samp) DescriptorSet 0 + Decorate 40(g_texdata_array2[1].tex) DescriptorSet 0 Decorate 45(g_texdata_array2[1].samp) Binding 4 + Decorate 45(g_texdata_array2[1].samp) DescriptorSet 0 Decorate 59(ps_output.color) Location 0 - Decorate 62(g_samp) DescriptorSet 0 Decorate 62(g_samp) Binding 0 - Decorate 63(g_tex) DescriptorSet 0 + Decorate 62(g_samp) DescriptorSet 0 Decorate 63(g_tex) Binding 0 + Decorate 63(g_tex) DescriptorSet 0 Decorate 65(g_texdata.nonopaque_thing) Location 0 Decorate 65(g_texdata.nonopaque_thing) DescriptorSet 0 - Decorate 66(g_texdata_array[0].samp) DescriptorSet 0 Decorate 66(g_texdata_array[0].samp) Binding 0 - Decorate 67(g_texdata_array[0].tex) DescriptorSet 0 + Decorate 66(g_texdata_array[0].samp) DescriptorSet 0 Decorate 67(g_texdata_array[0].tex) Binding 0 + Decorate 67(g_texdata_array[0].tex) DescriptorSet 0 Decorate 68(g_texdata_array[0].nonopaque_thing) Location 1 Decorate 68(g_texdata_array[0].nonopaque_thing) DescriptorSet 0 Decorate 69(g_texdata_array[1].nonopaque_thing) Location 2 Decorate 69(g_texdata_array[1].nonopaque_thing) DescriptorSet 0 - Decorate 70(g_texdata_array[2].samp) DescriptorSet 0 Decorate 70(g_texdata_array[2].samp) Binding 0 - Decorate 71(g_texdata_array[2].tex) DescriptorSet 0 + Decorate 70(g_texdata_array[2].samp) DescriptorSet 0 Decorate 71(g_texdata_array[2].tex) Binding 0 + Decorate 71(g_texdata_array[2].tex) DescriptorSet 0 Decorate 72(g_texdata_array[2].nonopaque_thing) Location 3 Decorate 72(g_texdata_array[2].nonopaque_thing) DescriptorSet 0 - Decorate 73(g_texdata_array2[0].samp) DescriptorSet 0 Decorate 73(g_texdata_array2[0].samp) Binding 0 - Decorate 74(g_texdata_array2[0].tex) DescriptorSet 0 + Decorate 73(g_texdata_array2[0].samp) DescriptorSet 0 Decorate 74(g_texdata_array2[0].tex) Binding 0 + Decorate 74(g_texdata_array2[0].tex) DescriptorSet 0 Decorate 75(g_texdata_array2[0].nonopaque_thing) Location 4 Decorate 75(g_texdata_array2[0].nonopaque_thing) DescriptorSet 0 Decorate 76(g_texdata_array2[1].nonopaque_thing) Location 5 Decorate 76(g_texdata_array2[1].nonopaque_thing) DescriptorSet 0 - Decorate 77(g_texdata_array2[2].samp) DescriptorSet 0 Decorate 77(g_texdata_array2[2].samp) Binding 0 - Decorate 78(g_texdata_array2[2].tex) DescriptorSet 0 + Decorate 77(g_texdata_array2[2].samp) DescriptorSet 0 Decorate 78(g_texdata_array2[2].tex) Binding 0 + Decorate 78(g_texdata_array2[2].tex) DescriptorSet 0 Decorate 79(g_texdata_array2[2].nonopaque_thing) Location 6 Decorate 79(g_texdata_array2[2].nonopaque_thing) DescriptorSet 0 2: TypeVoid diff --git a/Test/baseResults/hlsl.structarray.flatten.geom.out b/Test/baseResults/hlsl.structarray.flatten.geom.out index 619dccf6a0..e36e5f0558 100644 --- a/Test/baseResults/hlsl.structarray.flatten.geom.out +++ b/Test/baseResults/hlsl.structarray.flatten.geom.out @@ -314,7 +314,7 @@ output primitive = triangle_strip 0:? 'outStream.uv' (layout( location=1) out 2-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 82 Capability Geometry diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out index a4e540f07e..aa3fa98c00 100644 --- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out +++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out @@ -151,7 +151,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 70 Capability Shader @@ -186,28 +186,28 @@ Validation failed Name 68 "sbuf_c@count" Name 69 "sbuf_unused" Decorate 8 ArrayStride 16 - MemberDecorate 9 0 Offset 0 Decorate 9 BufferBlock + MemberDecorate 9 0 Offset 0 Decorate 12 BufferBlock - Decorate 49(sbuf_a) DescriptorSet 0 Decorate 49(sbuf_a) Binding 0 - Decorate 50(sbuf_a@count) DescriptorSet 0 + Decorate 49(sbuf_a) DescriptorSet 0 Decorate 50(sbuf_a@count) Binding 0 - Decorate 51(sbuf_c) DescriptorSet 0 + Decorate 50(sbuf_a@count) DescriptorSet 0 Decorate 51(sbuf_c) Binding 1 - Decorate 52(sbuf_c@count) DescriptorSet 0 + Decorate 51(sbuf_c) DescriptorSet 0 Decorate 52(sbuf_c@count) Binding 0 + Decorate 52(sbuf_c@count) DescriptorSet 0 Decorate 58(pos) Flat Decorate 58(pos) Location 0 Decorate 61(@entryPointOutput) Location 0 - MemberDecorate 65(sbuf_a@count) 0 Offset 0 Decorate 65(sbuf_a@count) BufferBlock - Decorate 67(sbuf_a@count) DescriptorSet 0 + MemberDecorate 65(sbuf_a@count) 0 Offset 0 Decorate 67(sbuf_a@count) Binding 0 - Decorate 68(sbuf_c@count) DescriptorSet 0 + Decorate 67(sbuf_a@count) DescriptorSet 0 Decorate 68(sbuf_c@count) Binding 0 - Decorate 69(sbuf_unused) DescriptorSet 0 + Decorate 68(sbuf_c@count) DescriptorSet 0 Decorate 69(sbuf_unused) Binding 0 + Decorate 69(sbuf_unused) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/hlsl.structbuffer.append.frag.out b/Test/baseResults/hlsl.structbuffer.append.frag.out index 518b67f04e..48dfe6a5f9 100644 --- a/Test/baseResults/hlsl.structbuffer.append.frag.out +++ b/Test/baseResults/hlsl.structbuffer.append.frag.out @@ -124,7 +124,7 @@ gl_FragCoord origin is upper left 0:? 'pos' (layout( location=0) flat in uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 56 Capability Shader @@ -150,23 +150,23 @@ gl_FragCoord origin is upper left Name 52 "param" Name 55 "sbuf_unused" Decorate 14 ArrayStride 16 - MemberDecorate 15(sbuf_a) 0 Offset 0 Decorate 15(sbuf_a) BufferBlock - Decorate 17(sbuf_a) DescriptorSet 0 + MemberDecorate 15(sbuf_a) 0 Offset 0 Decorate 17(sbuf_a) Binding 0 - MemberDecorate 20(sbuf_a@count) 0 Offset 0 + Decorate 17(sbuf_a) DescriptorSet 0 Decorate 20(sbuf_a@count) BufferBlock - Decorate 22(sbuf_a@count) DescriptorSet 0 + MemberDecorate 20(sbuf_a@count) 0 Offset 0 Decorate 22(sbuf_a@count) Binding 1 - Decorate 35(sbuf_c) DescriptorSet 0 + Decorate 22(sbuf_a@count) DescriptorSet 0 Decorate 35(sbuf_c) Binding 2 - Decorate 36(sbuf_c@count) DescriptorSet 0 + Decorate 35(sbuf_c) DescriptorSet 0 Decorate 36(sbuf_c@count) Binding 3 + Decorate 36(sbuf_c@count) DescriptorSet 0 Decorate 48(pos) Flat Decorate 48(pos) Location 0 Decorate 51(@entryPointOutput) Location 0 - Decorate 55(sbuf_unused) DescriptorSet 0 Decorate 55(sbuf_unused) Binding 0 + Decorate 55(sbuf_unused) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out index ba874ee610..712d974cf6 100644 --- a/Test/baseResults/hlsl.structbuffer.atomics.frag.out +++ b/Test/baseResults/hlsl.structbuffer.atomics.frag.out @@ -475,7 +475,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 87 Capability Shader @@ -496,10 +496,10 @@ Validation failed Name 83 "@entryPointOutput" Name 84 "param" Decorate 14 ArrayStride 4 - MemberDecorate 15(sbuf) 0 Offset 0 Decorate 15(sbuf) BufferBlock - Decorate 17(sbuf) DescriptorSet 0 + MemberDecorate 15(sbuf) 0 Offset 0 Decorate 17(sbuf) Binding 0 + Decorate 17(sbuf) DescriptorSet 0 Decorate 80(pos) Flat Decorate 80(pos) Location 0 Decorate 83(@entryPointOutput) Location 0 diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out index b5252bce79..a99b80562e 100644 --- a/Test/baseResults/hlsl.structbuffer.byte.frag.out +++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out @@ -324,7 +324,7 @@ gl_FragCoord origin is upper left 0:? 'pos' (layout( location=0) flat in uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 114 Capability Shader @@ -348,11 +348,12 @@ gl_FragCoord origin is upper left Name 110 "@entryPointOutput" Name 111 "param" Decorate 15 ArrayStride 4 + Decorate 16(sbuf) BufferBlock MemberDecorate 16(sbuf) 0 NonWritable MemberDecorate 16(sbuf) 0 Offset 0 - Decorate 16(sbuf) BufferBlock - Decorate 18(sbuf) DescriptorSet 0 + Decorate 18(sbuf) NonWritable Decorate 18(sbuf) Binding 0 + Decorate 18(sbuf) DescriptorSet 0 Decorate 107(pos) Flat Decorate 107(pos) Location 0 Decorate 110(@entryPointOutput) Location 0 diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out index 3d97ee55e9..a75b3cfe49 100644 --- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out +++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out @@ -176,7 +176,7 @@ gl_FragCoord origin is upper left 0:? 'pos' (layout( location=0) flat in uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 78 Capability Shader @@ -204,19 +204,21 @@ gl_FragCoord origin is upper left Name 74 "@entryPointOutput" Name 75 "param" Decorate 14 ArrayStride 4 + Decorate 15(sbuf2) BufferBlock MemberDecorate 15(sbuf2) 0 Coherent MemberDecorate 15(sbuf2) 0 Offset 0 - Decorate 15(sbuf2) BufferBlock - Decorate 17(sbuf2) DescriptorSet 0 + Decorate 17(sbuf2) Coherent Decorate 17(sbuf2) Binding 1 + Decorate 17(sbuf2) DescriptorSet 0 MemberDecorate 28(sb_t) 0 Offset 0 MemberDecorate 28(sb_t) 1 Offset 12 Decorate 29 ArrayStride 16 + Decorate 30(sbuf) BufferBlock MemberDecorate 30(sbuf) 0 Coherent MemberDecorate 30(sbuf) 0 Offset 0 - Decorate 30(sbuf) BufferBlock - Decorate 32(sbuf) DescriptorSet 0 + Decorate 32(sbuf) Coherent Decorate 32(sbuf) Binding 0 + Decorate 32(sbuf) DescriptorSet 0 Decorate 71(pos) Flat Decorate 71(pos) Location 0 Decorate 74(@entryPointOutput) Location 0 diff --git a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out index a7668a7f14..cea0ef7a26 100644 --- a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out +++ b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out @@ -180,7 +180,7 @@ local_size = (1, 1, 1) 0:? 'nThreadId' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 85 Capability Shader @@ -217,21 +217,21 @@ local_size = (1, 1, 1) MemberDecorate 19(sb_t) 0 Offset 0 MemberDecorate 19(sb_t) 1 Offset 16 Decorate 20 ArrayStride 32 - MemberDecorate 21(csb) 0 Offset 0 Decorate 21(csb) BufferBlock - Decorate 23(csb) DescriptorSet 0 + MemberDecorate 21(csb) 0 Offset 0 Decorate 23(csb) Binding 1 - MemberDecorate 26(csb@count) 0 Offset 0 + Decorate 23(csb) DescriptorSet 0 Decorate 26(csb@count) BufferBlock - Decorate 28(csb@count) DescriptorSet 0 + MemberDecorate 26(csb@count) 0 Offset 0 Decorate 28(csb@count) Binding 2 - Decorate 58(outtx) DescriptorSet 0 + Decorate 28(csb@count) DescriptorSet 0 Decorate 58(outtx) Binding 0 + Decorate 58(outtx) DescriptorSet 0 Decorate 63 ArrayStride 16 - MemberDecorate 64(rwsb) 0 Offset 0 Decorate 64(rwsb) BufferBlock - Decorate 66(rwsb) DescriptorSet 0 + MemberDecorate 64(rwsb) 0 Offset 0 Decorate 66(rwsb) Binding 3 + Decorate 66(rwsb) DescriptorSet 0 Decorate 80(nThreadId) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out index bd2a4e6769..7e8536a8dc 100644 --- a/Test/baseResults/hlsl.structbuffer.fn.frag.out +++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out @@ -139,7 +139,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 78 Capability Shader @@ -182,33 +182,35 @@ Validation failed MemberName 75(sbuf3) 0 "@data" Name 77 "sbuf3" Decorate 8 ArrayStride 16 + Decorate 9 BufferBlock MemberDecorate 9 0 NonWritable MemberDecorate 9 0 Offset 0 - Decorate 9 BufferBlock Decorate 13(sb) NonWritable Decorate 17 ArrayStride 16 - MemberDecorate 18 0 Offset 0 Decorate 18 BufferBlock + MemberDecorate 18 0 Offset 0 Decorate 20 BufferBlock - Decorate 47(sbuf2) DescriptorSet 0 Decorate 47(sbuf2) Binding 0 - Decorate 48(sbuf2@count) DescriptorSet 0 + Decorate 47(sbuf2) DescriptorSet 0 Decorate 48(sbuf2@count) Binding 0 - Decorate 50(sbuf) DescriptorSet 0 + Decorate 48(sbuf2@count) DescriptorSet 0 + Decorate 50(sbuf) NonWritable Decorate 50(sbuf) Binding 10 + Decorate 50(sbuf) DescriptorSet 0 Decorate 63(pos) Flat Decorate 63(pos) Location 0 Decorate 66(@entryPointOutput) Location 0 - MemberDecorate 70(sbuf2@count) 0 Offset 0 Decorate 70(sbuf2@count) BufferBlock - Decorate 72(sbuf2@count) DescriptorSet 0 + MemberDecorate 70(sbuf2@count) 0 Offset 0 Decorate 72(sbuf2@count) Binding 0 + Decorate 72(sbuf2@count) DescriptorSet 0 Decorate 74 ArrayStride 16 + Decorate 75(sbuf3) BufferBlock MemberDecorate 75(sbuf3) 0 NonWritable MemberDecorate 75(sbuf3) 0 Offset 0 - Decorate 75(sbuf3) BufferBlock - Decorate 77(sbuf3) DescriptorSet 0 + Decorate 77(sbuf3) NonWritable Decorate 77(sbuf3) Binding 12 + Decorate 77(sbuf3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out index 3409a5f7e4..f3630064f7 100644 --- a/Test/baseResults/hlsl.structbuffer.fn2.comp.out +++ b/Test/baseResults/hlsl.structbuffer.fn2.comp.out @@ -136,7 +136,7 @@ local_size = (256, 1, 1) 0:? 'dispatchId' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 63 Capability Shader @@ -165,14 +165,15 @@ local_size = (256, 1, 1) Name 57 "dispatchId" Name 60 "param" Decorate 8 ArrayStride 4 + Decorate 9 BufferBlock MemberDecorate 9 0 NonWritable MemberDecorate 9 0 Offset 0 - Decorate 9 BufferBlock Decorate 14(buffer) NonWritable - Decorate 44(g_input) DescriptorSet 0 + Decorate 44(g_input) NonWritable Decorate 44(g_input) Binding 0 - Decorate 50(g_output) DescriptorSet 0 + Decorate 44(g_input) DescriptorSet 0 Decorate 50(g_output) Binding 1 + Decorate 50(g_output) DescriptorSet 0 Decorate 57(dispatchId) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out index 294a1c6c0b..db1d71c4b8 100644 --- a/Test/baseResults/hlsl.structbuffer.frag.out +++ b/Test/baseResults/hlsl.structbuffer.frag.out @@ -188,7 +188,7 @@ gl_FragCoord origin is upper left 0:? 'pos' (layout( location=0) flat in uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 96 Capability Shader @@ -225,17 +225,19 @@ gl_FragCoord origin is upper left MemberDecorate 19(sb_t) 1 Offset 12 MemberDecorate 19(sb_t) 2 Offset 16 Decorate 20 ArrayStride 32 + Decorate 21(sbuf) BufferBlock MemberDecorate 21(sbuf) 0 NonWritable MemberDecorate 21(sbuf) 0 Offset 0 - Decorate 21(sbuf) BufferBlock - Decorate 23(sbuf) DescriptorSet 0 + Decorate 23(sbuf) NonWritable Decorate 23(sbuf) Binding 10 + Decorate 23(sbuf) DescriptorSet 0 Decorate 58 ArrayStride 4 + Decorate 59(sbuf2) BufferBlock MemberDecorate 59(sbuf2) 0 NonWritable MemberDecorate 59(sbuf2) 0 Offset 0 - Decorate 59(sbuf2) BufferBlock - Decorate 61(sbuf2) DescriptorSet 0 + Decorate 61(sbuf2) NonWritable Decorate 61(sbuf2) Binding 0 + Decorate 61(sbuf2) DescriptorSet 0 Decorate 89(pos) Flat Decorate 89(pos) Location 0 Decorate 92(@entryPointOutput) Location 0 diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out index 23b2125650..be5f1cb66d 100644 --- a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out +++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out @@ -1,6 +1,6 @@ hlsl.structbuffer.incdec.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 70 Capability Shader @@ -30,27 +30,27 @@ hlsl.structbuffer.incdec.frag Name 66 "@entryPointOutput" Name 67 "param" Decorate 19 ArrayStride 16 - MemberDecorate 20(sbuf_rw_i) 0 Offset 0 Decorate 20(sbuf_rw_i) BufferBlock - Decorate 22(sbuf_rw_i) DescriptorSet 0 + MemberDecorate 20(sbuf_rw_i) 0 Offset 0 Decorate 22(sbuf_rw_i) Binding 0 - Decorate 26(sbuf_rw_d) DescriptorSet 0 + Decorate 22(sbuf_rw_i) DescriptorSet 0 + DecorateId 22(sbuf_rw_i) DecorationHlslCounterBufferGOOGLE 36(sbuf_rw_i@count) Decorate 26(sbuf_rw_d) Binding 0 - Decorate 27(sbuf_rw_nocounter) DescriptorSet 0 + Decorate 26(sbuf_rw_d) DescriptorSet 0 + DecorateId 26(sbuf_rw_d) DecorationHlslCounterBufferGOOGLE 42(sbuf_rw_d@count) Decorate 27(sbuf_rw_nocounter) Binding 0 - MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0 + Decorate 27(sbuf_rw_nocounter) DescriptorSet 0 Decorate 34(sbuf_rw_i@count) BufferBlock - Decorate 36(sbuf_rw_i@count) DescriptorSet 0 + MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0 Decorate 36(sbuf_rw_i@count) Binding 0 - Decorate 42(sbuf_rw_d@count) DescriptorSet 0 + Decorate 36(sbuf_rw_i@count) DescriptorSet 0 Decorate 42(sbuf_rw_d@count) Binding 0 + Decorate 42(sbuf_rw_d@count) DescriptorSet 0 Decorate 63(pos) Flat Decorate 63(pos) Location 0 DecorateStringGOOGLE 63(pos) DecorationHlslSemanticGOOGLE "FOO" Decorate 66(@entryPointOutput) Location 0 DecorateStringGOOGLE 66(@entryPointOutput) DecorationHlslSemanticGOOGLE "SV_TARGET0" - DecorateId 22(sbuf_rw_i) DecorationHlslCounterBufferGOOGLE 36(sbuf_rw_i@count) - DecorateId 26(sbuf_rw_d) DecorationHlslCounterBufferGOOGLE 42(sbuf_rw_d@count) 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.out index 2605777922..3f12758c3d 100644 --- a/Test/baseResults/hlsl.structbuffer.incdec.frag.out +++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.out @@ -204,7 +204,7 @@ gl_FragCoord origin is upper left 0:? 'pos' (layout( location=0) flat in uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 70 Capability Shader @@ -233,20 +233,20 @@ gl_FragCoord origin is upper left Name 66 "@entryPointOutput" Name 67 "param" Decorate 19 ArrayStride 16 - MemberDecorate 20(sbuf_rw_i) 0 Offset 0 Decorate 20(sbuf_rw_i) BufferBlock - Decorate 22(sbuf_rw_i) DescriptorSet 0 + MemberDecorate 20(sbuf_rw_i) 0 Offset 0 Decorate 22(sbuf_rw_i) Binding 0 - Decorate 26(sbuf_rw_d) DescriptorSet 0 + Decorate 22(sbuf_rw_i) DescriptorSet 0 Decorate 26(sbuf_rw_d) Binding 2 - Decorate 27(sbuf_rw_nocounter) DescriptorSet 0 + Decorate 26(sbuf_rw_d) DescriptorSet 0 Decorate 27(sbuf_rw_nocounter) Binding 4 - MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0 + Decorate 27(sbuf_rw_nocounter) DescriptorSet 0 Decorate 34(sbuf_rw_i@count) BufferBlock - Decorate 36(sbuf_rw_i@count) DescriptorSet 0 + MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0 Decorate 36(sbuf_rw_i@count) Binding 1 - Decorate 42(sbuf_rw_d@count) DescriptorSet 0 + Decorate 36(sbuf_rw_i@count) DescriptorSet 0 Decorate 42(sbuf_rw_d@count) Binding 3 + Decorate 42(sbuf_rw_d@count) DescriptorSet 0 Decorate 63(pos) Flat Decorate 63(pos) Location 0 Decorate 66(@entryPointOutput) Location 0 diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out index 1eb98aa126..4fcc6896c1 100644 --- a/Test/baseResults/hlsl.structbuffer.rw.frag.out +++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out @@ -176,7 +176,7 @@ gl_FragCoord origin is upper left 0:? 'pos' (layout( location=0) flat in uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 78 Capability Shader @@ -204,17 +204,17 @@ gl_FragCoord origin is upper left Name 74 "@entryPointOutput" Name 75 "param" Decorate 14 ArrayStride 4 - MemberDecorate 15(sbuf2) 0 Offset 0 Decorate 15(sbuf2) BufferBlock - Decorate 17(sbuf2) DescriptorSet 0 + MemberDecorate 15(sbuf2) 0 Offset 0 Decorate 17(sbuf2) Binding 1 + Decorate 17(sbuf2) DescriptorSet 0 MemberDecorate 28(sb_t) 0 Offset 0 MemberDecorate 28(sb_t) 1 Offset 12 Decorate 29 ArrayStride 16 - MemberDecorate 30(sbuf) 0 Offset 0 Decorate 30(sbuf) BufferBlock - Decorate 32(sbuf) DescriptorSet 0 + MemberDecorate 30(sbuf) 0 Offset 0 Decorate 32(sbuf) Binding 0 + Decorate 32(sbuf) DescriptorSet 0 Decorate 71(pos) Flat Decorate 71(pos) Location 0 Decorate 74(@entryPointOutput) Location 0 diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out index 337442d5d1..d8ba034efb 100644 --- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out +++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out @@ -1004,7 +1004,7 @@ gl_FragCoord origin is upper left 0:? 'pos' (layout( location=0) flat in uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 239 Capability Shader @@ -1032,10 +1032,10 @@ gl_FragCoord origin is upper left Name 235 "@entryPointOutput" Name 236 "param" Decorate 15 ArrayStride 4 - MemberDecorate 16(sbuf) 0 Offset 0 Decorate 16(sbuf) BufferBlock - Decorate 18(sbuf) DescriptorSet 0 + MemberDecorate 16(sbuf) 0 Offset 0 Decorate 18(sbuf) Binding 0 + Decorate 18(sbuf) DescriptorSet 0 Decorate 232(pos) Flat Decorate 232(pos) Location 0 Decorate 235(@entryPointOutput) Location 0 diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out b/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out index 127d52cc81..fa058b6162 100644 --- a/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out +++ b/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out @@ -76,7 +76,7 @@ local_size = (1, 1, 1) 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 +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader @@ -95,15 +95,15 @@ local_size = (1, 1, 1) 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 + MemberDecorate 12(g_bbuf) 0 Offset 0 Decorate 14(g_bbuf) Binding 1 + Decorate 14(g_bbuf) DescriptorSet 0 Decorate 23 ArrayStride 4 - MemberDecorate 24(g_sbuf) 0 Offset 0 Decorate 24(g_sbuf) BufferBlock - Decorate 26(g_sbuf) DescriptorSet 0 + MemberDecorate 24(g_sbuf) 0 Offset 0 Decorate 26(g_sbuf) Binding 0 + Decorate 26(g_sbuf) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 8: TypeInt 32 0 diff --git a/Test/baseResults/hlsl.structcopy.comp.out b/Test/baseResults/hlsl.structcopy.comp.out new file mode 100644 index 0000000000..07441e1970 --- /dev/null +++ b/Test/baseResults/hlsl.structcopy.comp.out @@ -0,0 +1,404 @@ +hlsl.structcopy.comp +Shader version: 500 +local_size = (128, 1, 1) +0:? Sequence +0:20 Function Definition: @main(u1; ( temp void) +0:20 Function Parameters: +0:20 'id' ( in uint) +0:? Sequence +0:21 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:21 direct index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:21 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 1 (const uint) +0:21 2 (const uint) +0:21 3 (const uint) +0:22 Sequence +0:22 move second child to first child ( temp uint) +0:22 'count' ( temp uint) +0:22 count: direct index for structure ( temp uint) +0:22 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:22 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:22 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:22 Constant: +0:22 0 (const uint) +0:22 Constant: +0:22 0 (const int) +0:22 Constant: +0:22 0 (const int) +0:23 Sequence +0:23 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 Test condition and select ( temp structure{ temp uint a, temp uint b, temp uint c}): no shortcircuit +0:23 Condition +0:23 Compare Greater Than ( temp bool) +0:23 'id' ( in uint) +0:23 'count' ( temp uint) +0:23 true case +0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:23 subtract ( temp uint) +0:23 'id' ( in uint) +0:23 'count' ( temp uint) +0:23 false case +0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 data: direct index for structure ( temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:23 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:23 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:23 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:23 Constant: +0:23 0 (const uint) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 1 (const int) +0:23 'id' ( in uint) +0:25 AtomicAdd ( temp uint) +0:25 a: direct index for structure ( temp uint) +0:25 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:25 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:25 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:25 Constant: +0:25 0 (const uint) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0 (const int) +0:25 a: direct index for structure ( temp uint) +0:25 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:25 Constant: +0:25 0 (const int) +0:26 AtomicAdd ( temp uint) +0:26 b: direct index for structure ( temp uint) +0:26 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:26 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:26 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:26 Constant: +0:26 0 (const uint) +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 b: direct index for structure ( temp uint) +0:26 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:26 Constant: +0:26 1 (const int) +0:27 AtomicAdd ( temp uint) +0:27 c: direct index for structure ( temp uint) +0:27 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:27 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:27 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:27 Constant: +0:27 0 (const uint) +0:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 2 (const int) +0:27 c: direct index for structure ( temp uint) +0:27 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:27 Constant: +0:27 2 (const int) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 move second child to first child ( temp uint) +0:? 'id' ( temp uint) +0:? 'id' ( in uint LocalInvocationIndex) +0:20 Function Call: @main(u1; ( temp void) +0:? 'id' ( temp uint) +0:? Linker Objects +0:? 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:? 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:? 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:? 'deflt' ( const structure{ temp uint a, temp uint b, temp uint c}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 'id' ( in uint LocalInvocationIndex) + + +Linked compute stage: + + +Shader version: 500 +local_size = (128, 1, 1) +0:? Sequence +0:20 Function Definition: @main(u1; ( temp void) +0:20 Function Parameters: +0:20 'id' ( in uint) +0:? Sequence +0:21 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:21 direct index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:21 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 1 (const uint) +0:21 2 (const uint) +0:21 3 (const uint) +0:22 Sequence +0:22 move second child to first child ( temp uint) +0:22 'count' ( temp uint) +0:22 count: direct index for structure ( temp uint) +0:22 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:22 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:22 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:22 Constant: +0:22 0 (const uint) +0:22 Constant: +0:22 0 (const int) +0:22 Constant: +0:22 0 (const int) +0:23 Sequence +0:23 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 Test condition and select ( temp structure{ temp uint a, temp uint b, temp uint c}): no shortcircuit +0:23 Condition +0:23 Compare Greater Than ( temp bool) +0:23 'id' ( in uint) +0:23 'count' ( temp uint) +0:23 true case +0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:23 subtract ( temp uint) +0:23 'id' ( in uint) +0:23 'count' ( temp uint) +0:23 false case +0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 data: direct index for structure ( temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:23 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:23 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:23 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:23 Constant: +0:23 0 (const uint) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 1 (const int) +0:23 'id' ( in uint) +0:25 AtomicAdd ( temp uint) +0:25 a: direct index for structure ( temp uint) +0:25 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:25 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:25 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:25 Constant: +0:25 0 (const uint) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0 (const int) +0:25 a: direct index for structure ( temp uint) +0:25 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:25 Constant: +0:25 0 (const int) +0:26 AtomicAdd ( temp uint) +0:26 b: direct index for structure ( temp uint) +0:26 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:26 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:26 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:26 Constant: +0:26 0 (const uint) +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 b: direct index for structure ( temp uint) +0:26 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:26 Constant: +0:26 1 (const int) +0:27 AtomicAdd ( temp uint) +0:27 c: direct index for structure ( temp uint) +0:27 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:27 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:27 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:27 Constant: +0:27 0 (const uint) +0:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 2 (const int) +0:27 c: direct index for structure ( temp uint) +0:27 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:27 Constant: +0:27 2 (const int) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 move second child to first child ( temp uint) +0:? 'id' ( temp uint) +0:? 'id' ( in uint LocalInvocationIndex) +0:20 Function Call: @main(u1; ( temp void) +0:? 'id' ( temp uint) +0:? Linker Objects +0:? 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:? 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:? 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:? 'deflt' ( const structure{ temp uint a, temp uint b, temp uint c}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 'id' ( in uint LocalInvocationIndex) + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 88 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 83 + ExecutionMode 4 LocalSize 128 1 1 + Source HLSL 500 + Name 4 "main" + Name 10 "@main(u1;" + Name 9 "id" + Name 12 "MyStruct" + MemberName 12(MyStruct) 0 "a" + MemberName 12(MyStruct) 1 "b" + MemberName 12(MyStruct) 2 "c" + Name 16 "s" + Name 25 "count" + Name 26 "MyStruct" + MemberName 26(MyStruct) 0 "a" + MemberName 26(MyStruct) 1 "b" + MemberName 26(MyStruct) 2 "c" + Name 28 "MyStructs" + MemberName 28(MyStructs) 0 "count" + MemberName 28(MyStructs) 1 "data" + Name 30 "sb" + MemberName 30(sb) 0 "@data" + Name 32 "sb" + Name 37 "ms" + Name 65 "o" + MemberName 65(o) 0 "@data" + Name 67 "o" + Name 81 "id" + Name 83 "id" + Name 85 "param" + MemberDecorate 26(MyStruct) 0 Offset 0 + MemberDecorate 26(MyStruct) 1 Offset 4 + MemberDecorate 26(MyStruct) 2 Offset 8 + Decorate 27 ArrayStride 12 + Decorate 28(MyStructs) BufferBlock + MemberDecorate 28(MyStructs) 0 Offset 0 + MemberDecorate 28(MyStructs) 1 Offset 4 + Decorate 29 ArrayStride 16 + Decorate 30(sb) BufferBlock + MemberDecorate 30(sb) 0 NonWritable + MemberDecorate 30(sb) 0 Offset 0 + Decorate 32(sb) NonWritable + Decorate 32(sb) Binding 0 + Decorate 32(sb) DescriptorSet 0 + Decorate 64 ArrayStride 12 + Decorate 65(o) BufferBlock + MemberDecorate 65(o) 0 NonWritable + MemberDecorate 65(o) 0 Offset 0 + Decorate 67(o) NonWritable + Decorate 67(o) Binding 1 + Decorate 67(o) DescriptorSet 0 + Decorate 83(id) BuiltIn LocalInvocationIndex + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 8: TypeFunction 2 7(ptr) + 12(MyStruct): TypeStruct 6(int) 6(int) 6(int) + 13: 6(int) Constant 128 + 14: TypeArray 12(MyStruct) 13 + 15: TypePointer Workgroup 14 + 16(s): 15(ptr) Variable Workgroup + 17: TypeInt 32 1 + 18: 17(int) Constant 0 + 19: 6(int) Constant 1 + 20: 6(int) Constant 2 + 21: 6(int) Constant 3 + 22:12(MyStruct) ConstantComposite 19 20 21 + 23: TypePointer Workgroup 12(MyStruct) + 26(MyStruct): TypeStruct 6(int) 6(int) 6(int) + 27: TypeRuntimeArray 26(MyStruct) + 28(MyStructs): TypeStruct 6(int) 27 + 29: TypeRuntimeArray 28(MyStructs) + 30(sb): TypeStruct 29 + 31: TypePointer Uniform 30(sb) + 32(sb): 31(ptr) Variable Uniform + 33: TypePointer Uniform 6(int) + 36: TypePointer Function 12(MyStruct) + 40: TypeBool + 47: 17(int) Constant 1 + 49: TypePointer Uniform 26(MyStruct) + 61: 17(int) Constant 2 + 64: TypeRuntimeArray 26(MyStruct) + 65(o): TypeStruct 64 + 66: TypePointer Uniform 65(o) + 67(o): 66(ptr) Variable Uniform + 71: 6(int) Constant 0 + 82: TypePointer Input 6(int) + 83(id): 82(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 81(id): 7(ptr) Variable Function + 85(param): 7(ptr) Variable Function + 84: 6(int) Load 83(id) + Store 81(id) 84 + 86: 6(int) Load 81(id) + Store 85(param) 86 + 87: 2 FunctionCall 10(@main(u1;) 85(param) + Return + FunctionEnd + 10(@main(u1;): 2 Function None 8 + 9(id): 7(ptr) FunctionParameter + 11: Label + 25(count): 7(ptr) Variable Function + 37(ms): 36(ptr) Variable Function + 52: 36(ptr) Variable Function + 24: 23(ptr) AccessChain 16(s) 18 + Store 24 22 + 34: 33(ptr) AccessChain 32(sb) 18 18 18 + 35: 6(int) Load 34 + Store 25(count) 35 + 38: 6(int) Load 9(id) + 39: 6(int) Load 25(count) + 41: 40(bool) UGreaterThan 38 39 + 42: 6(int) Load 9(id) + 43: 6(int) Load 25(count) + 44: 6(int) ISub 42 43 + 45: 23(ptr) AccessChain 16(s) 44 + 46:12(MyStruct) Load 45 + 48: 6(int) Load 9(id) + 50: 49(ptr) AccessChain 32(sb) 18 18 47 48 + 51:26(MyStruct) Load 50 + SelectionMerge 54 None + BranchConditional 41 53 55 + 53: Label + Store 52 46 + Branch 54 + 55: Label + 56: 6(int) CompositeExtract 51 0 + 57: 7(ptr) AccessChain 52 18 + Store 57 56 + 58: 6(int) CompositeExtract 51 1 + 59: 7(ptr) AccessChain 52 47 + Store 59 58 + 60: 6(int) CompositeExtract 51 2 + 62: 7(ptr) AccessChain 52 61 + Store 62 60 + Branch 54 + 54: Label + 63:12(MyStruct) Load 52 + Store 37(ms) 63 + 68: 33(ptr) AccessChain 67(o) 18 18 18 + 69: 7(ptr) AccessChain 37(ms) 18 + 70: 6(int) Load 69 + 72: 6(int) AtomicIAdd 68 19 71 70 + 73: 33(ptr) AccessChain 67(o) 18 18 47 + 74: 7(ptr) AccessChain 37(ms) 47 + 75: 6(int) Load 74 + 76: 6(int) AtomicIAdd 73 19 71 75 + 77: 33(ptr) AccessChain 67(o) 18 18 61 + 78: 7(ptr) AccessChain 37(ms) 61 + 79: 6(int) Load 78 + 80: 6(int) AtomicIAdd 77 19 71 79 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.structcopylogical.comp.out b/Test/baseResults/hlsl.structcopylogical.comp.out new file mode 100644 index 0000000000..0b997811a3 --- /dev/null +++ b/Test/baseResults/hlsl.structcopylogical.comp.out @@ -0,0 +1,387 @@ +hlsl.structcopylogical.comp +Shader version: 500 +local_size = (128, 1, 1) +0:? Sequence +0:20 Function Definition: @main(u1; ( temp void) +0:20 Function Parameters: +0:20 'id' ( in uint) +0:? Sequence +0:21 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:21 direct index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:21 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 1 (const uint) +0:21 2 (const uint) +0:21 3 (const uint) +0:22 Sequence +0:22 move second child to first child ( temp uint) +0:22 'count' ( temp uint) +0:22 count: direct index for structure ( temp uint) +0:22 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:22 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:22 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:22 Constant: +0:22 0 (const uint) +0:22 Constant: +0:22 0 (const int) +0:22 Constant: +0:22 0 (const int) +0:23 Sequence +0:23 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 Test condition and select ( temp structure{ temp uint a, temp uint b, temp uint c}): no shortcircuit +0:23 Condition +0:23 Compare Greater Than ( temp bool) +0:23 'id' ( in uint) +0:23 'count' ( temp uint) +0:23 true case +0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:23 subtract ( temp uint) +0:23 'id' ( in uint) +0:23 'count' ( temp uint) +0:23 false case +0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 data: direct index for structure ( temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:23 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:23 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:23 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:23 Constant: +0:23 0 (const uint) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 1 (const int) +0:23 'id' ( in uint) +0:25 AtomicAdd ( temp uint) +0:25 a: direct index for structure ( temp uint) +0:25 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:25 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:25 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:25 Constant: +0:25 0 (const uint) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0 (const int) +0:25 a: direct index for structure ( temp uint) +0:25 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:25 Constant: +0:25 0 (const int) +0:26 AtomicAdd ( temp uint) +0:26 b: direct index for structure ( temp uint) +0:26 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:26 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:26 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:26 Constant: +0:26 0 (const uint) +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 b: direct index for structure ( temp uint) +0:26 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:26 Constant: +0:26 1 (const int) +0:27 AtomicAdd ( temp uint) +0:27 c: direct index for structure ( temp uint) +0:27 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:27 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:27 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:27 Constant: +0:27 0 (const uint) +0:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 2 (const int) +0:27 c: direct index for structure ( temp uint) +0:27 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:27 Constant: +0:27 2 (const int) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 move second child to first child ( temp uint) +0:? 'id' ( temp uint) +0:? 'id' ( in uint LocalInvocationIndex) +0:20 Function Call: @main(u1; ( temp void) +0:? 'id' ( temp uint) +0:? Linker Objects +0:? 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:? 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:? 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:? 'deflt' ( const structure{ temp uint a, temp uint b, temp uint c}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 'id' ( in uint LocalInvocationIndex) + + +Linked compute stage: + + +Shader version: 500 +local_size = (128, 1, 1) +0:? Sequence +0:20 Function Definition: @main(u1; ( temp void) +0:20 Function Parameters: +0:20 'id' ( in uint) +0:? Sequence +0:21 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:21 direct index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:21 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 1 (const uint) +0:21 2 (const uint) +0:21 3 (const uint) +0:22 Sequence +0:22 move second child to first child ( temp uint) +0:22 'count' ( temp uint) +0:22 count: direct index for structure ( temp uint) +0:22 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:22 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:22 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:22 Constant: +0:22 0 (const uint) +0:22 Constant: +0:22 0 (const int) +0:22 Constant: +0:22 0 (const int) +0:23 Sequence +0:23 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 Test condition and select ( temp structure{ temp uint a, temp uint b, temp uint c}): no shortcircuit +0:23 Condition +0:23 Compare Greater Than ( temp bool) +0:23 'id' ( in uint) +0:23 'count' ( temp uint) +0:23 true case +0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:23 subtract ( temp uint) +0:23 'id' ( in uint) +0:23 'count' ( temp uint) +0:23 false case +0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:23 data: direct index for structure ( temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:23 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:23 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data}) +0:23 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:23 Constant: +0:23 0 (const uint) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 1 (const int) +0:23 'id' ( in uint) +0:25 AtomicAdd ( temp uint) +0:25 a: direct index for structure ( temp uint) +0:25 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:25 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:25 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:25 Constant: +0:25 0 (const uint) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0 (const int) +0:25 a: direct index for structure ( temp uint) +0:25 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:25 Constant: +0:25 0 (const int) +0:26 AtomicAdd ( temp uint) +0:26 b: direct index for structure ( temp uint) +0:26 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:26 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:26 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:26 Constant: +0:26 0 (const uint) +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 b: direct index for structure ( temp uint) +0:26 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:26 Constant: +0:26 1 (const int) +0:27 AtomicAdd ( temp uint) +0:27 c: direct index for structure ( temp uint) +0:27 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c}) +0:27 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:27 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:27 Constant: +0:27 0 (const uint) +0:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 2 (const int) +0:27 c: direct index for structure ( temp uint) +0:27 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c}) +0:27 Constant: +0:27 2 (const int) +0:20 Function Definition: main( ( temp void) +0:20 Function Parameters: +0:? Sequence +0:20 move second child to first child ( temp uint) +0:? 'id' ( temp uint) +0:? 'id' ( in uint LocalInvocationIndex) +0:20 Function Call: @main(u1; ( temp void) +0:? 'id' ( temp uint) +0:? Linker Objects +0:? 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data}) +0:? 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data}) +0:? 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c}) +0:? 'deflt' ( const structure{ temp uint a, temp uint b, temp uint c}) +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 'id' ( in uint LocalInvocationIndex) + +// Module Version 10600 +// Generated by (magic number): 8000b +// Id's are bound by 79 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 16 32 57 74 + ExecutionMode 4 LocalSize 128 1 1 + Source HLSL 500 + Name 4 "main" + Name 10 "@main(u1;" + Name 9 "id" + Name 12 "MyStruct" + MemberName 12(MyStruct) 0 "a" + MemberName 12(MyStruct) 1 "b" + MemberName 12(MyStruct) 2 "c" + Name 16 "s" + Name 25 "count" + Name 26 "MyStruct" + MemberName 26(MyStruct) 0 "a" + MemberName 26(MyStruct) 1 "b" + MemberName 26(MyStruct) 2 "c" + Name 28 "MyStructs" + MemberName 28(MyStructs) 0 "count" + MemberName 28(MyStructs) 1 "data" + Name 30 "sb" + MemberName 30(sb) 0 "@data" + Name 32 "sb" + Name 37 "ms" + Name 55 "o" + MemberName 55(o) 0 "@data" + Name 57 "o" + Name 72 "id" + Name 74 "id" + Name 76 "param" + MemberDecorate 26(MyStruct) 0 Offset 0 + MemberDecorate 26(MyStruct) 1 Offset 4 + MemberDecorate 26(MyStruct) 2 Offset 8 + Decorate 27 ArrayStride 12 + Decorate 28(MyStructs) Block + MemberDecorate 28(MyStructs) 0 Offset 0 + MemberDecorate 28(MyStructs) 1 Offset 4 + Decorate 29 ArrayStride 16 + Decorate 30(sb) Block + MemberDecorate 30(sb) 0 NonWritable + MemberDecorate 30(sb) 0 Offset 0 + Decorate 32(sb) NonWritable + Decorate 32(sb) Binding 0 + Decorate 32(sb) DescriptorSet 0 + Decorate 54 ArrayStride 12 + Decorate 55(o) Block + MemberDecorate 55(o) 0 NonWritable + MemberDecorate 55(o) 0 Offset 0 + Decorate 57(o) NonWritable + Decorate 57(o) Binding 1 + Decorate 57(o) DescriptorSet 0 + Decorate 74(id) BuiltIn LocalInvocationIndex + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 8: TypeFunction 2 7(ptr) + 12(MyStruct): TypeStruct 6(int) 6(int) 6(int) + 13: 6(int) Constant 128 + 14: TypeArray 12(MyStruct) 13 + 15: TypePointer Workgroup 14 + 16(s): 15(ptr) Variable Workgroup + 17: TypeInt 32 1 + 18: 17(int) Constant 0 + 19: 6(int) Constant 1 + 20: 6(int) Constant 2 + 21: 6(int) Constant 3 + 22:12(MyStruct) ConstantComposite 19 20 21 + 23: TypePointer Workgroup 12(MyStruct) + 26(MyStruct): TypeStruct 6(int) 6(int) 6(int) + 27: TypeRuntimeArray 26(MyStruct) + 28(MyStructs): TypeStruct 6(int) 27 + 29: TypeRuntimeArray 28(MyStructs) + 30(sb): TypeStruct 29 + 31: TypePointer StorageBuffer 30(sb) + 32(sb): 31(ptr) Variable StorageBuffer + 33: TypePointer StorageBuffer 6(int) + 36: TypePointer Function 12(MyStruct) + 40: TypeBool + 47: 17(int) Constant 1 + 49: TypePointer StorageBuffer 26(MyStruct) + 54: TypeRuntimeArray 26(MyStruct) + 55(o): TypeStruct 54 + 56: TypePointer StorageBuffer 55(o) + 57(o): 56(ptr) Variable StorageBuffer + 61: 6(int) Constant 0 + 67: 17(int) Constant 2 + 73: TypePointer Input 6(int) + 74(id): 73(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 72(id): 7(ptr) Variable Function + 76(param): 7(ptr) Variable Function + 75: 6(int) Load 74(id) + Store 72(id) 75 + 77: 6(int) Load 72(id) + Store 76(param) 77 + 78: 2 FunctionCall 10(@main(u1;) 76(param) + Return + FunctionEnd + 10(@main(u1;): 2 Function None 8 + 9(id): 7(ptr) FunctionParameter + 11: Label + 25(count): 7(ptr) Variable Function + 37(ms): 36(ptr) Variable Function + 24: 23(ptr) AccessChain 16(s) 18 + Store 24 22 + 34: 33(ptr) AccessChain 32(sb) 18 18 18 + 35: 6(int) Load 34 + Store 25(count) 35 + 38: 6(int) Load 9(id) + 39: 6(int) Load 25(count) + 41: 40(bool) UGreaterThan 38 39 + 42: 6(int) Load 9(id) + 43: 6(int) Load 25(count) + 44: 6(int) ISub 42 43 + 45: 23(ptr) AccessChain 16(s) 44 + 46:12(MyStruct) Load 45 + 48: 6(int) Load 9(id) + 50: 49(ptr) AccessChain 32(sb) 18 18 47 48 + 51:26(MyStruct) Load 50 + 52:12(MyStruct) CopyLogical 51 + 53:12(MyStruct) Select 41 46 52 + Store 37(ms) 53 + 58: 33(ptr) AccessChain 57(o) 18 18 18 + 59: 7(ptr) AccessChain 37(ms) 18 + 60: 6(int) Load 59 + 62: 6(int) AtomicIAdd 58 19 61 60 + 63: 33(ptr) AccessChain 57(o) 18 18 47 + 64: 7(ptr) AccessChain 37(ms) 47 + 65: 6(int) Load 64 + 66: 6(int) AtomicIAdd 63 19 61 65 + 68: 33(ptr) AccessChain 57(o) 18 18 67 + 69: 7(ptr) AccessChain 37(ms) 67 + 70: 6(int) Load 69 + 71: 6(int) AtomicIAdd 68 19 61 70 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.structin.vert.out b/Test/baseResults/hlsl.structin.vert.out index 85f634630b..04a64e7974 100644 --- a/Test/baseResults/hlsl.structin.vert.out +++ b/Test/baseResults/hlsl.structin.vert.out @@ -340,7 +340,7 @@ Shader version: 500 0:? 'e' (layout( location=5) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 94 Capability Shader diff --git a/Test/baseResults/hlsl.subpass.frag.out b/Test/baseResults/hlsl.subpass.frag.out index 2aca62879d..4841862e86 100644 --- a/Test/baseResults/hlsl.subpass.frag.out +++ b/Test/baseResults/hlsl.subpass.frag.out @@ -430,7 +430,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 204 Capability Shader @@ -493,80 +493,80 @@ gl_FragCoord origin is upper left Name 193 "result73" Name 194 "subpass_2" Name 202 "@entryPointOutput" - Decorate 15(subpass_f4) DescriptorSet 0 Decorate 15(subpass_f4) Binding 1 + Decorate 15(subpass_f4) DescriptorSet 0 Decorate 15(subpass_f4) InputAttachmentIndex 1 - Decorate 27(subpass_i4) DescriptorSet 0 Decorate 27(subpass_i4) Binding 0 + Decorate 27(subpass_i4) DescriptorSet 0 Decorate 27(subpass_i4) InputAttachmentIndex 2 - Decorate 36(subpass_u4) DescriptorSet 0 Decorate 36(subpass_u4) Binding 2 + Decorate 36(subpass_u4) DescriptorSet 0 Decorate 36(subpass_u4) InputAttachmentIndex 3 - Decorate 42(subpass_ms_f4) DescriptorSet 0 Decorate 42(subpass_ms_f4) Binding 3 + Decorate 42(subpass_ms_f4) DescriptorSet 0 Decorate 42(subpass_ms_f4) InputAttachmentIndex 4 - Decorate 49(subpass_ms_i4) DescriptorSet 0 Decorate 49(subpass_ms_i4) Binding 4 + Decorate 49(subpass_ms_i4) DescriptorSet 0 Decorate 49(subpass_ms_i4) InputAttachmentIndex 5 - Decorate 55(subpass_ms_u4) DescriptorSet 0 Decorate 55(subpass_ms_u4) Binding 5 + Decorate 55(subpass_ms_u4) DescriptorSet 0 Decorate 55(subpass_ms_u4) InputAttachmentIndex 6 - Decorate 61(subpass_f3) DescriptorSet 0 Decorate 61(subpass_f3) Binding 6 + Decorate 61(subpass_f3) DescriptorSet 0 Decorate 61(subpass_f3) InputAttachmentIndex 1 - Decorate 71(subpass_i3) DescriptorSet 0 Decorate 71(subpass_i3) Binding 7 + Decorate 71(subpass_i3) DescriptorSet 0 Decorate 71(subpass_i3) InputAttachmentIndex 2 - Decorate 81(subpass_u3) DescriptorSet 0 Decorate 81(subpass_u3) Binding 8 + Decorate 81(subpass_u3) DescriptorSet 0 Decorate 81(subpass_u3) InputAttachmentIndex 3 - Decorate 89(subpass_ms_f3) DescriptorSet 0 Decorate 89(subpass_ms_f3) Binding 9 + Decorate 89(subpass_ms_f3) DescriptorSet 0 Decorate 89(subpass_ms_f3) InputAttachmentIndex 4 - Decorate 97(subpass_ms_i3) DescriptorSet 0 Decorate 97(subpass_ms_i3) Binding 10 + Decorate 97(subpass_ms_i3) DescriptorSet 0 Decorate 97(subpass_ms_i3) InputAttachmentIndex 5 - Decorate 105(subpass_ms_u3) DescriptorSet 0 Decorate 105(subpass_ms_u3) Binding 11 + Decorate 105(subpass_ms_u3) DescriptorSet 0 Decorate 105(subpass_ms_u3) InputAttachmentIndex 6 - Decorate 115(subpass_f2) DescriptorSet 0 Decorate 115(subpass_f2) Binding 12 + Decorate 115(subpass_f2) DescriptorSet 0 Decorate 115(subpass_f2) InputAttachmentIndex 1 - Decorate 123(subpass_i2) DescriptorSet 0 Decorate 123(subpass_i2) Binding 13 + Decorate 123(subpass_i2) DescriptorSet 0 Decorate 123(subpass_i2) InputAttachmentIndex 2 - Decorate 132(subpass_u2) DescriptorSet 0 Decorate 132(subpass_u2) Binding 14 + Decorate 132(subpass_u2) DescriptorSet 0 Decorate 132(subpass_u2) InputAttachmentIndex 3 - Decorate 139(subpass_ms_f2) DescriptorSet 0 Decorate 139(subpass_ms_f2) Binding 15 + Decorate 139(subpass_ms_f2) DescriptorSet 0 Decorate 139(subpass_ms_f2) InputAttachmentIndex 4 - Decorate 147(subpass_ms_i2) DescriptorSet 0 Decorate 147(subpass_ms_i2) Binding 16 + Decorate 147(subpass_ms_i2) DescriptorSet 0 Decorate 147(subpass_ms_i2) InputAttachmentIndex 5 - Decorate 154(subpass_ms_u2) DescriptorSet 0 Decorate 154(subpass_ms_u2) Binding 17 + Decorate 154(subpass_ms_u2) DescriptorSet 0 Decorate 154(subpass_ms_u2) InputAttachmentIndex 6 - Decorate 162(subpass_f) DescriptorSet 0 Decorate 162(subpass_f) Binding 18 + Decorate 162(subpass_f) DescriptorSet 0 Decorate 162(subpass_f) InputAttachmentIndex 1 - Decorate 168(subpass_i) DescriptorSet 0 Decorate 168(subpass_i) Binding 19 + Decorate 168(subpass_i) DescriptorSet 0 Decorate 168(subpass_i) InputAttachmentIndex 2 - Decorate 174(subpass_u) DescriptorSet 0 Decorate 174(subpass_u) Binding 20 + Decorate 174(subpass_u) DescriptorSet 0 Decorate 174(subpass_u) InputAttachmentIndex 3 - Decorate 179(subpass_ms_f) DescriptorSet 0 Decorate 179(subpass_ms_f) Binding 21 + Decorate 179(subpass_ms_f) DescriptorSet 0 Decorate 179(subpass_ms_f) InputAttachmentIndex 4 - Decorate 184(subpass_ms_i) DescriptorSet 0 Decorate 184(subpass_ms_i) Binding 22 + Decorate 184(subpass_ms_i) DescriptorSet 0 Decorate 184(subpass_ms_i) InputAttachmentIndex 5 - Decorate 189(subpass_ms_u) DescriptorSet 0 Decorate 189(subpass_ms_u) Binding 23 + Decorate 189(subpass_ms_u) DescriptorSet 0 Decorate 189(subpass_ms_u) InputAttachmentIndex 6 - Decorate 194(subpass_2) DescriptorSet 0 Decorate 194(subpass_2) Binding 24 + Decorate 194(subpass_2) DescriptorSet 0 Decorate 194(subpass_2) InputAttachmentIndex 7 Decorate 202(@entryPointOutput) Location 0 2: TypeVoid diff --git a/Test/baseResults/hlsl.switch.frag.out b/Test/baseResults/hlsl.switch.frag.out index c239640f01..2ee9bd98ae 100644 --- a/Test/baseResults/hlsl.switch.frag.out +++ b/Test/baseResults/hlsl.switch.frag.out @@ -296,7 +296,7 @@ gl_FragCoord origin is upper left 0:? 'd' (layout( location=2) flat in int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 106 Capability Shader diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out index 88ea3cc910..afb81dea61 100644 --- a/Test/baseResults/hlsl.swizzle.frag.out +++ b/Test/baseResults/hlsl.swizzle.frag.out @@ -77,7 +77,7 @@ gl_FragCoord origin is upper left 0:? 'AmbientColor' ( global 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader diff --git a/Test/baseResults/hlsl.swizzle.vec1.comp.out b/Test/baseResults/hlsl.swizzle.vec1.comp.out new file mode 100644 index 0000000000..e1583b889f --- /dev/null +++ b/Test/baseResults/hlsl.swizzle.vec1.comp.out @@ -0,0 +1,72 @@ +hlsl.swizzle.vec1.comp +Shader version: 500 +local_size = (1, 1, 1) +0:? Sequence +0:2 Function Definition: @main( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:4 move second child to first child ( temp float) +0:4 direct index ( temp float) +0:4 'f1' ( temp 1-component vector of float) +0:4 Constant: +0:4 0 (const int) +0:4 Constant: +0:4 0.500000 +0:2 Function Definition: main( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:2 Function Call: @main( ( temp void) +0:? Linker Objects + + +Linked compute stage: + + +Shader version: 500 +local_size = (1, 1, 1) +0:? Sequence +0:2 Function Definition: @main( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:4 move second child to first child ( temp float) +0:4 direct index ( temp float) +0:4 'f1' ( temp 1-component vector of float) +0:4 Constant: +0:4 0 (const int) +0:4 Constant: +0:4 0.500000 +0:2 Function Definition: main( ( temp void) +0:2 Function Parameters: +0:? Sequence +0:2 Function Call: @main( ( temp void) +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 13 + + 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 "f1" + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeFloat 32 + 9: TypePointer Function 8(float) + 11: 8(float) Constant 1056964608 + 4(main): 2 Function None 3 + 5: Label + 12: 2 FunctionCall 6(@main() + Return + FunctionEnd + 6(@main(): 2 Function None 3 + 7: Label + 10(f1): 9(ptr) Variable Function + Store 10(f1) 11 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.synthesizeInput.frag.out b/Test/baseResults/hlsl.synthesizeInput.frag.out index 316a352907..5462e645a4 100644 --- a/Test/baseResults/hlsl.synthesizeInput.frag.out +++ b/Test/baseResults/hlsl.synthesizeInput.frag.out @@ -98,7 +98,7 @@ gl_FragCoord origin is upper left 0:? 'input.no_interp' (layout( location=1) flat in uint) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 44 Capability Shader diff --git a/Test/baseResults/hlsl.target.frag.out b/Test/baseResults/hlsl.target.frag.out index 8bfaa2ba67..9e86746629 100644 --- a/Test/baseResults/hlsl.target.frag.out +++ b/Test/baseResults/hlsl.target.frag.out @@ -114,7 +114,7 @@ gl_FragCoord origin is upper left 0:? 'out2' (layout( location=3) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader diff --git a/Test/baseResults/hlsl.targetStruct1.frag.out b/Test/baseResults/hlsl.targetStruct1.frag.out index 095d15d02a..0be96d110a 100644 --- a/Test/baseResults/hlsl.targetStruct1.frag.out +++ b/Test/baseResults/hlsl.targetStruct1.frag.out @@ -184,7 +184,7 @@ gl_FragCoord origin is upper left 0:? 'po' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 65 Capability Shader diff --git a/Test/baseResults/hlsl.targetStruct2.frag.out b/Test/baseResults/hlsl.targetStruct2.frag.out index c57ae008b1..2fa47658da 100644 --- a/Test/baseResults/hlsl.targetStruct2.frag.out +++ b/Test/baseResults/hlsl.targetStruct2.frag.out @@ -184,7 +184,7 @@ gl_FragCoord origin is upper left 0:? 'po' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 65 Capability Shader diff --git a/Test/baseResults/hlsl.templatetypes.frag.out b/Test/baseResults/hlsl.templatetypes.frag.out index 842ed0d655..5624c28753 100644 --- a/Test/baseResults/hlsl.templatetypes.frag.out +++ b/Test/baseResults/hlsl.templatetypes.frag.out @@ -508,7 +508,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 153 Capability Shader diff --git a/Test/baseResults/hlsl.texture.struct.frag.out b/Test/baseResults/hlsl.texture.struct.frag.out index bf9ab6804d..879d0673f4 100644 --- a/Test/baseResults/hlsl.texture.struct.frag.out +++ b/Test/baseResults/hlsl.texture.struct.frag.out @@ -839,7 +839,7 @@ gl_FragCoord origin is upper left Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 240 Capability Shader @@ -904,20 +904,20 @@ Validation failed Name 229 "g_tTex2s1a" Name 230 "param" Name 238 "@entryPointOutput" - Decorate 30(g_sSamp) DescriptorSet 0 Decorate 30(g_sSamp) Binding 0 - Decorate 90(g_tTex2s1) DescriptorSet 0 + Decorate 30(g_sSamp) DescriptorSet 0 Decorate 90(g_tTex2s1) Binding 1 - Decorate 114(g_tTex2s2) DescriptorSet 0 + Decorate 90(g_tTex2s1) DescriptorSet 0 Decorate 114(g_tTex2s2) Binding 2 - Decorate 140(g_tTex2s3) DescriptorSet 0 + Decorate 114(g_tTex2s2) DescriptorSet 0 Decorate 140(g_tTex2s3) Binding 3 - Decorate 168(g_tTex2s4) DescriptorSet 0 + Decorate 140(g_tTex2s3) DescriptorSet 0 Decorate 168(g_tTex2s4) Binding 4 - Decorate 202(g_tTex2s5) DescriptorSet 0 + Decorate 168(g_tTex2s4) DescriptorSet 0 Decorate 202(g_tTex2s5) Binding 5 - Decorate 229(g_tTex2s1a) DescriptorSet 0 + Decorate 202(g_tTex2s5) DescriptorSet 0 Decorate 229(g_tTex2s1a) Binding 6 + Decorate 229(g_tTex2s1a) DescriptorSet 0 Decorate 238(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.texture.subvec4.frag.out b/Test/baseResults/hlsl.texture.subvec4.frag.out index 1a7816d8ed..715cb6d187 100644 --- a/Test/baseResults/hlsl.texture.subvec4.frag.out +++ b/Test/baseResults/hlsl.texture.subvec4.frag.out @@ -356,7 +356,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 130 Capability Shader @@ -385,24 +385,24 @@ gl_FragCoord origin is upper left Name 109 "g_tTex2df3" Name 118 "g_tTex2df4" Name 128 "@entryPointOutput" - Decorate 17(g_tTex2dmsf1) DescriptorSet 0 Decorate 17(g_tTex2dmsf1) Binding 0 - Decorate 33(g_tTex2dmsf2) DescriptorSet 0 + Decorate 17(g_tTex2dmsf1) DescriptorSet 0 Decorate 33(g_tTex2dmsf2) Binding 1 - Decorate 43(g_tTex2dmsf3) DescriptorSet 0 + Decorate 33(g_tTex2dmsf2) DescriptorSet 0 Decorate 43(g_tTex2dmsf3) Binding 2 - Decorate 53(g_tTex2dmsf4) DescriptorSet 0 + Decorate 43(g_tTex2dmsf3) DescriptorSet 0 Decorate 53(g_tTex2dmsf4) Binding 3 - Decorate 88(g_tTex2df1) DescriptorSet 0 + Decorate 53(g_tTex2dmsf4) DescriptorSet 0 Decorate 88(g_tTex2df1) Binding 4 - Decorate 92(g_sSamp) DescriptorSet 0 + Decorate 88(g_tTex2df1) DescriptorSet 0 Decorate 92(g_sSamp) Binding 8 - Decorate 101(g_tTex2df2) DescriptorSet 0 + Decorate 92(g_sSamp) DescriptorSet 0 Decorate 101(g_tTex2df2) Binding 5 - Decorate 109(g_tTex2df3) DescriptorSet 0 + Decorate 101(g_tTex2df2) DescriptorSet 0 Decorate 109(g_tTex2df3) Binding 6 - Decorate 118(g_tTex2df4) DescriptorSet 0 + Decorate 109(g_tTex2df3) DescriptorSet 0 Decorate 118(g_tTex2df4) Binding 7 + Decorate 118(g_tTex2df4) DescriptorSet 0 Decorate 128(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.texturebuffer.frag.out b/Test/baseResults/hlsl.texturebuffer.frag.out index 37e19c25cc..6a2f8bec25 100644 --- a/Test/baseResults/hlsl.texturebuffer.frag.out +++ b/Test/baseResults/hlsl.texturebuffer.frag.out @@ -70,7 +70,7 @@ gl_FragCoord origin is upper left 0:? 'pos' ( in 4-component vector of float FragCoord) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 39 Capability Shader @@ -94,20 +94,22 @@ gl_FragCoord origin is upper left Name 32 "pos" Name 35 "@entryPointOutput" Name 36 "param" + Decorate 15(TextureBuffer_var) BufferBlock MemberDecorate 15(TextureBuffer_var) 0 NonWritable MemberDecorate 15(TextureBuffer_var) 0 Offset 0 MemberDecorate 15(TextureBuffer_var) 1 NonWritable MemberDecorate 15(TextureBuffer_var) 1 Offset 16 - Decorate 15(TextureBuffer_var) BufferBlock - Decorate 17(TextureBuffer_var) DescriptorSet 0 + Decorate 17(TextureBuffer_var) NonWritable Decorate 17(TextureBuffer_var) Binding 0 + Decorate 17(TextureBuffer_var) DescriptorSet 0 + Decorate 22(tbuf2) BufferBlock MemberDecorate 22(tbuf2) 0 NonWritable MemberDecorate 22(tbuf2) 0 Offset 0 MemberDecorate 22(tbuf2) 1 NonWritable MemberDecorate 22(tbuf2) 1 Offset 16 - Decorate 22(tbuf2) BufferBlock - Decorate 24 DescriptorSet 0 + Decorate 24 NonWritable Decorate 24 Binding 1 + Decorate 24 DescriptorSet 0 Decorate 32(pos) BuiltIn FragCoord Decorate 35(@entryPointOutput) Location 0 2: TypeVoid diff --git a/Test/baseResults/hlsl.this.frag.out b/Test/baseResults/hlsl.this.frag.out index e6b54cf3d4..6e4a8a047c 100644 --- a/Test/baseResults/hlsl.this.frag.out +++ b/Test/baseResults/hlsl.this.frag.out @@ -240,7 +240,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 98 Capability Shader diff --git a/Test/baseResults/hlsl.tristream-append.geom.out b/Test/baseResults/hlsl.tristream-append.geom.out index 53e8c04969..630f2d327e 100644 --- a/Test/baseResults/hlsl.tristream-append.geom.out +++ b/Test/baseResults/hlsl.tristream-append.geom.out @@ -157,7 +157,7 @@ output primitive = triangle_strip Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 66 Capability Geometry diff --git a/Test/baseResults/hlsl.tx.bracket.frag.out b/Test/baseResults/hlsl.tx.bracket.frag.out index 424b8480de..ad83b5f9f6 100644 --- a/Test/baseResults/hlsl.tx.bracket.frag.out +++ b/Test/baseResults/hlsl.tx.bracket.frag.out @@ -422,7 +422,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 188 Capability Shader @@ -483,6 +483,7 @@ gl_FragCoord origin is upper left Name 181 "g_tTex2df4a" Name 184 "g_tTex2di4a" Name 187 "g_tTex2du4a" + Decorate 45($Global) Block MemberDecorate 45($Global) 0 Offset 0 MemberDecorate 45($Global) 1 Offset 8 MemberDecorate 45($Global) 2 Offset 16 @@ -491,42 +492,41 @@ gl_FragCoord origin is upper left MemberDecorate 45($Global) 5 Offset 56 MemberDecorate 45($Global) 6 Offset 64 MemberDecorate 45($Global) 7 Offset 80 - Decorate 45($Global) Block - Decorate 47 DescriptorSet 0 Decorate 47 Binding 9 - Decorate 57(g_tTex1df4) DescriptorSet 0 + Decorate 47 DescriptorSet 0 Decorate 57(g_tTex1df4) Binding 0 - Decorate 72(g_tTex1di4) DescriptorSet 0 + Decorate 57(g_tTex1df4) DescriptorSet 0 Decorate 72(g_tTex1di4) Binding 1 - Decorate 80(g_tTex1du4) DescriptorSet 0 + Decorate 72(g_tTex1di4) DescriptorSet 0 Decorate 80(g_tTex1du4) Binding 2 - Decorate 88(g_tTex2df4) DescriptorSet 0 + Decorate 80(g_tTex1du4) DescriptorSet 0 Decorate 88(g_tTex2df4) Binding 3 - Decorate 98(g_tTex2di4) DescriptorSet 0 + Decorate 88(g_tTex2df4) DescriptorSet 0 Decorate 98(g_tTex2di4) Binding 4 - Decorate 106(g_tTex2du4) DescriptorSet 0 + Decorate 98(g_tTex2di4) DescriptorSet 0 Decorate 106(g_tTex2du4) Binding 5 - Decorate 114(g_tTex3df4) DescriptorSet 0 + Decorate 106(g_tTex2du4) DescriptorSet 0 Decorate 114(g_tTex3df4) Binding 6 - Decorate 124(g_tTex3di4) DescriptorSet 0 + Decorate 114(g_tTex3df4) DescriptorSet 0 Decorate 124(g_tTex3di4) Binding 7 - Decorate 132(g_tTex3du4) DescriptorSet 0 + Decorate 124(g_tTex3di4) DescriptorSet 0 Decorate 132(g_tTex3du4) Binding 8 + Decorate 132(g_tTex3du4) DescriptorSet 0 Decorate 164(@entryPointOutput.Color) Location 0 - Decorate 169(g_sSamp) DescriptorSet 0 Decorate 169(g_sSamp) Binding 0 - Decorate 172(g_tTex1df4a) DescriptorSet 0 + Decorate 169(g_sSamp) DescriptorSet 0 Decorate 172(g_tTex1df4a) Binding 0 - Decorate 175(g_tTex1di4a) DescriptorSet 0 + Decorate 172(g_tTex1df4a) DescriptorSet 0 Decorate 175(g_tTex1di4a) Binding 0 - Decorate 178(g_tTex1du4a) DescriptorSet 0 + Decorate 175(g_tTex1di4a) DescriptorSet 0 Decorate 178(g_tTex1du4a) Binding 0 - Decorate 181(g_tTex2df4a) DescriptorSet 0 + Decorate 178(g_tTex1du4a) DescriptorSet 0 Decorate 181(g_tTex2df4a) Binding 0 - Decorate 184(g_tTex2di4a) DescriptorSet 0 + Decorate 181(g_tTex2df4a) DescriptorSet 0 Decorate 184(g_tTex2di4a) Binding 0 - Decorate 187(g_tTex2du4a) DescriptorSet 0 + Decorate 184(g_tTex2di4a) DescriptorSet 0 Decorate 187(g_tTex2du4a) Binding 0 + Decorate 187(g_tTex2du4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/hlsl.tx.overload.frag.out b/Test/baseResults/hlsl.tx.overload.frag.out index 7fb0640eea..88b38e8f2c 100644 --- a/Test/baseResults/hlsl.tx.overload.frag.out +++ b/Test/baseResults/hlsl.tx.overload.frag.out @@ -134,7 +134,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 73 Capability Shader @@ -162,14 +162,14 @@ gl_FragCoord origin is upper left Name 63 "twf4" Name 64 "param" Name 71 "@entryPointOutput" - Decorate 45(tf1) DescriptorSet 0 Decorate 45(tf1) Binding 0 - Decorate 49(tf4) DescriptorSet 0 + Decorate 45(tf1) DescriptorSet 0 Decorate 49(tf4) Binding 1 - Decorate 56(twf1) DescriptorSet 0 + Decorate 49(tf4) DescriptorSet 0 Decorate 56(twf1) Binding 2 - Decorate 63(twf4) DescriptorSet 0 + Decorate 56(twf1) DescriptorSet 0 Decorate 63(twf4) Binding 3 + Decorate 63(twf4) DescriptorSet 0 Decorate 71(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.type.half.frag.out b/Test/baseResults/hlsl.type.half.frag.out index 68f1b2400b..f12838b9b4 100644 --- a/Test/baseResults/hlsl.type.half.frag.out +++ b/Test/baseResults/hlsl.type.half.frag.out @@ -164,7 +164,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 60 Capability Shader diff --git a/Test/baseResults/hlsl.type.identifier.frag.out b/Test/baseResults/hlsl.type.identifier.frag.out index 5705fb76d6..6130fda9f7 100644 --- a/Test/baseResults/hlsl.type.identifier.frag.out +++ b/Test/baseResults/hlsl.type.identifier.frag.out @@ -266,7 +266,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 105 Capability Shader diff --git a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out index 7320074664..fe802db184 100644 --- a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out +++ b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out @@ -1364,7 +1364,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 122 Capability Shader diff --git a/Test/baseResults/hlsl.typeGraphCopy.vert.out b/Test/baseResults/hlsl.typeGraphCopy.vert.out index cedf601c30..8f52cd66af 100644 --- a/Test/baseResults/hlsl.typeGraphCopy.vert.out +++ b/Test/baseResults/hlsl.typeGraphCopy.vert.out @@ -62,7 +62,7 @@ Shader version: 500 0:? '@entryPointOutput' (layout( location=0) out float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 28 Capability Shader @@ -93,10 +93,10 @@ Shader version: 500 MemberDecorate 13(N3) 0 Offset 0 MemberDecorate 13(N3) 1 Offset 32 MemberDecorate 13(N3) 2 Offset 48 - MemberDecorate 14($Global) 0 Offset 0 Decorate 14($Global) Block - Decorate 16 DescriptorSet 0 + MemberDecorate 14($Global) 0 Offset 0 Decorate 16 Binding 0 + Decorate 16 DescriptorSet 0 Decorate 26(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.typedef.frag.out b/Test/baseResults/hlsl.typedef.frag.out index d925124ace..ecb8dbd85c 100644 --- a/Test/baseResults/hlsl.typedef.frag.out +++ b/Test/baseResults/hlsl.typedef.frag.out @@ -79,7 +79,7 @@ gl_FragCoord origin is upper left 0:? Linker Objects // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 34 Capability Shader diff --git a/Test/baseResults/hlsl.void.frag.out b/Test/baseResults/hlsl.void.frag.out index f93cca0d9b..48c43c6872 100644 --- a/Test/baseResults/hlsl.void.frag.out +++ b/Test/baseResults/hlsl.void.frag.out @@ -54,7 +54,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader diff --git a/Test/baseResults/hlsl.w-recip.frag.out b/Test/baseResults/hlsl.w-recip.frag.out index b72f361e08..dc9bb1116f 100644 --- a/Test/baseResults/hlsl.w-recip.frag.out +++ b/Test/baseResults/hlsl.w-recip.frag.out @@ -162,7 +162,7 @@ gl_FragCoord origin is upper left 0:? 'vpos' ( in 4-component vector of float FragCoord) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 69 Capability Shader @@ -183,11 +183,11 @@ gl_FragCoord origin is upper left Name 53 "vpos" Name 65 "@entryPointOutput" Name 66 "param" + Decorate 36($Global) Block 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 38 DescriptorSet 0 Decorate 53(vpos) BuiltIn FragCoord Decorate 65(@entryPointOutput) Location 0 2: TypeVoid diff --git a/Test/baseResults/hlsl.w-recip2.frag.out b/Test/baseResults/hlsl.w-recip2.frag.out index 6fee15c421..03312b8de9 100644 --- a/Test/baseResults/hlsl.w-recip2.frag.out +++ b/Test/baseResults/hlsl.w-recip2.frag.out @@ -178,7 +178,7 @@ gl_FragCoord origin is upper left 0:? 'VSOut.TexCoord' (layout( location=2) in 2-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 75 Capability Shader @@ -207,11 +207,11 @@ gl_FragCoord origin is upper left Name 66 "VSOut.TexCoord" Name 71 "@entryPointOutput" Name 72 "param" + Decorate 28($Global) Block 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 30 DescriptorSet 0 Decorate 44(VSOut.PositionPS) BuiltIn FragCoord Decorate 56(VSOut.PosInLightViewSpace) Location 0 Decorate 61(VSOut.NormalWS) Location 1 diff --git a/Test/baseResults/hlsl.wavebroadcast.comp.out b/Test/baseResults/hlsl.wavebroadcast.comp.out index 01bc953da6..667986cdca 100644 --- a/Test/baseResults/hlsl.wavebroadcast.comp.out +++ b/Test/baseResults/hlsl.wavebroadcast.comp.out @@ -2298,7 +2298,7 @@ local_size = (32, 16, 1) 0:? 'dti' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 393 Capability Shader @@ -2330,10 +2330,10 @@ local_size = (32, 16, 1) MemberDecorate 20(Types) 2 Offset 32 MemberDecorate 20(Types) 3 Offset 64 Decorate 21 ArrayStride 96 + Decorate 22(data) Block MemberDecorate 22(data) 0 Offset 0 - Decorate 22(data) BufferBlock - Decorate 24(data) DescriptorSet 0 Decorate 24(data) Binding 0 + Decorate 24(data) DescriptorSet 0 Decorate 388(dti) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 @@ -2351,31 +2351,31 @@ local_size = (32, 16, 1) 20(Types): TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(f64vec4) 21: TypeRuntimeArray 20(Types) 22(data): TypeStruct 21 - 23: TypePointer Uniform 22(data) - 24(data): 23(ptr) Variable Uniform + 23: TypePointer StorageBuffer 22(data) + 24(data): 23(ptr) Variable StorageBuffer 25: 14(int) Constant 0 26: 6(int) Constant 0 27: TypePointer Function 6(int) - 32: TypePointer Uniform 13(ivec4) + 32: TypePointer StorageBuffer 13(ivec4) 35: 6(int) Constant 13 36: 6(int) Constant 3 - 43: TypePointer Uniform 6(int) + 43: TypePointer StorageBuffer 6(int) 52: TypeVector 6(int) 2 59: 6(int) Constant 1 74: 6(int) Constant 2 79: 14(int) Constant 1 - 82: TypePointer Uniform 15(ivec4) - 91: TypePointer Uniform 14(int) + 82: TypePointer StorageBuffer 15(ivec4) + 91: TypePointer StorageBuffer 14(int) 100: TypeVector 14(int) 2 113: TypeVector 14(int) 3 126: 14(int) Constant 2 - 129: TypePointer Uniform 17(fvec4) - 138: TypePointer Uniform 16(float) + 129: TypePointer StorageBuffer 17(fvec4) + 138: TypePointer StorageBuffer 16(float) 147: TypeVector 16(float) 2 160: TypeVector 16(float) 3 173: 14(int) Constant 3 - 176: TypePointer Uniform 19(f64vec4) - 185: TypePointer Uniform 18(float64_t) + 176: TypePointer StorageBuffer 19(f64vec4) + 185: TypePointer StorageBuffer 18(float64_t) 194: TypeVector 18(float64_t) 2 207: TypeVector 18(float64_t) 3 387: TypePointer Input 7(ivec3) diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out index cc4737ed76..e9ac13507b 100644 --- a/Test/baseResults/hlsl.waveprefix.comp.out +++ b/Test/baseResults/hlsl.waveprefix.comp.out @@ -1126,7 +1126,7 @@ local_size = (32, 16, 1) 0:54 0 (const int) 0:54 Constant: 0:54 0 (const int) -0:54 subgroupBallotInclusiveBitCount ( temp uint) +0:54 subgroupBallotExclusiveBitCount ( temp uint) 0:54 subgroupBallot ( temp 4-component vector of uint) 0:54 Compare Equal ( temp bool) 0:54 direct index ( temp uint) @@ -2289,7 +2289,7 @@ local_size = (32, 16, 1) 0:54 0 (const int) 0:54 Constant: 0:54 0 (const int) -0:54 subgroupBallotInclusiveBitCount ( temp uint) +0:54 subgroupBallotExclusiveBitCount ( temp uint) 0:54 subgroupBallot ( temp 4-component vector of uint) 0:54 Compare Equal ( temp bool) 0:54 direct index ( temp uint) @@ -2322,7 +2322,7 @@ local_size = (32, 16, 1) 0:? 'dti' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 403 Capability Shader @@ -2354,10 +2354,10 @@ local_size = (32, 16, 1) MemberDecorate 20(Types) 2 Offset 32 MemberDecorate 20(Types) 3 Offset 64 Decorate 21 ArrayStride 96 + Decorate 22(data) Block MemberDecorate 22(data) 0 Offset 0 - Decorate 22(data) BufferBlock - Decorate 24(data) DescriptorSet 0 Decorate 24(data) Binding 0 + Decorate 24(data) DescriptorSet 0 Decorate 398(dti) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 @@ -2375,30 +2375,30 @@ local_size = (32, 16, 1) 20(Types): TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(f64vec4) 21: TypeRuntimeArray 20(Types) 22(data): TypeStruct 21 - 23: TypePointer Uniform 22(data) - 24(data): 23(ptr) Variable Uniform + 23: TypePointer StorageBuffer 22(data) + 24(data): 23(ptr) Variable StorageBuffer 25: 14(int) Constant 0 26: 6(int) Constant 0 27: TypePointer Function 6(int) - 32: TypePointer Uniform 13(ivec4) + 32: TypePointer StorageBuffer 13(ivec4) 35: 6(int) Constant 3 - 42: TypePointer Uniform 6(int) + 42: TypePointer StorageBuffer 6(int) 51: TypeVector 6(int) 2 58: 6(int) Constant 1 73: 6(int) Constant 2 78: 14(int) Constant 1 - 81: TypePointer Uniform 15(ivec4) - 90: TypePointer Uniform 14(int) + 81: TypePointer StorageBuffer 15(ivec4) + 90: TypePointer StorageBuffer 14(int) 99: TypeVector 14(int) 2 112: TypeVector 14(int) 3 125: 14(int) Constant 2 - 128: TypePointer Uniform 17(fvec4) - 137: TypePointer Uniform 16(float) + 128: TypePointer StorageBuffer 17(fvec4) + 137: TypePointer StorageBuffer 16(float) 146: TypeVector 16(float) 2 159: TypeVector 16(float) 3 172: 14(int) Constant 3 - 175: TypePointer Uniform 19(f64vec4) - 184: TypePointer Uniform 18(float64_t) + 175: TypePointer StorageBuffer 19(f64vec4) + 184: TypePointer StorageBuffer 18(float64_t) 193: TypeVector 18(float64_t) 2 206: TypeVector 18(float64_t) 3 391: TypeBool @@ -2818,7 +2818,7 @@ local_size = (32, 16, 1) 390: 6(int) Load 389 392: 391(bool) IEqual 390 26 393: 13(ivec4) GroupNonUniformBallot 35 392 - 394: 6(int) GroupNonUniformBallotBitCount 35 InclusiveScan 393 + 394: 6(int) GroupNonUniformBallotBitCount 35 ExclusiveScan 393 395: 42(ptr) AccessChain 24(data) 25 386 25 26 Store 395 394 Return diff --git a/Test/baseResults/hlsl.wavequad.comp.out b/Test/baseResults/hlsl.wavequad.comp.out index e4311c7466..338b4dc7d7 100644 --- a/Test/baseResults/hlsl.wavequad.comp.out +++ b/Test/baseResults/hlsl.wavequad.comp.out @@ -8026,7 +8026,7 @@ local_size = (32, 16, 1) 0:? 'dti' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 1232 Capability Shader @@ -8057,10 +8057,10 @@ local_size = (32, 16, 1) MemberDecorate 20(Types) 2 Offset 32 MemberDecorate 20(Types) 3 Offset 64 Decorate 21 ArrayStride 96 + Decorate 22(data) Block MemberDecorate 22(data) 0 Offset 0 - Decorate 22(data) BufferBlock - Decorate 24(data) DescriptorSet 0 Decorate 24(data) Binding 0 + Decorate 24(data) DescriptorSet 0 Decorate 1227(dti) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 @@ -8078,30 +8078,30 @@ local_size = (32, 16, 1) 20(Types): TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(f64vec4) 21: TypeRuntimeArray 20(Types) 22(data): TypeStruct 21 - 23: TypePointer Uniform 22(data) - 24(data): 23(ptr) Variable Uniform + 23: TypePointer StorageBuffer 22(data) + 24(data): 23(ptr) Variable StorageBuffer 25: 14(int) Constant 0 26: 6(int) Constant 0 27: TypePointer Function 6(int) - 32: TypePointer Uniform 13(ivec4) + 32: TypePointer StorageBuffer 13(ivec4) 35: 6(int) Constant 3 - 42: TypePointer Uniform 6(int) + 42: TypePointer StorageBuffer 6(int) 51: TypeVector 6(int) 2 58: 6(int) Constant 1 73: 6(int) Constant 2 78: 14(int) Constant 1 - 81: TypePointer Uniform 15(ivec4) - 90: TypePointer Uniform 14(int) + 81: TypePointer StorageBuffer 15(ivec4) + 90: TypePointer StorageBuffer 14(int) 99: TypeVector 14(int) 2 112: TypeVector 14(int) 3 125: 14(int) Constant 2 - 128: TypePointer Uniform 17(fvec4) - 137: TypePointer Uniform 16(float) + 128: TypePointer StorageBuffer 17(fvec4) + 137: TypePointer StorageBuffer 16(float) 146: TypeVector 16(float) 2 159: TypeVector 16(float) 3 172: 14(int) Constant 3 - 175: TypePointer Uniform 19(f64vec4) - 184: TypePointer Uniform 18(float64_t) + 175: TypePointer StorageBuffer 19(f64vec4) + 184: TypePointer StorageBuffer 18(float64_t) 193: TypeVector 18(float64_t) 2 206: TypeVector 18(float64_t) 3 1226: TypePointer Input 7(ivec3) diff --git a/Test/baseResults/hlsl.wavequery.comp.out b/Test/baseResults/hlsl.wavequery.comp.out index dcd11ae7d2..015890af49 100644 --- a/Test/baseResults/hlsl.wavequery.comp.out +++ b/Test/baseResults/hlsl.wavequery.comp.out @@ -60,7 +60,7 @@ local_size = (32, 16, 1) 0:? 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 28 Capability Shader @@ -78,10 +78,10 @@ local_size = (32, 16, 1) Name 16 "@gl_SubgroupInvocationID" Name 21 "@gl_SubgroupSize" Decorate 9 ArrayStride 4 + Decorate 10(data) Block MemberDecorate 10(data) 0 Offset 0 - Decorate 10(data) BufferBlock - Decorate 12(data) DescriptorSet 0 Decorate 12(data) Binding 0 + Decorate 12(data) DescriptorSet 0 Decorate 16(@gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 21(@gl_SubgroupSize) BuiltIn SubgroupSize 2: TypeVoid @@ -89,8 +89,8 @@ local_size = (32, 16, 1) 8: TypeInt 32 0 9: TypeRuntimeArray 8(int) 10(data): TypeStruct 9 - 11: TypePointer Uniform 10(data) - 12(data): 11(ptr) Variable Uniform + 11: TypePointer StorageBuffer 10(data) + 12(data): 11(ptr) Variable StorageBuffer 13: TypeInt 32 1 14: 13(int) Constant 0 15: TypePointer Input 8(int) @@ -99,7 +99,7 @@ local_size = (32, 16, 1) 19: 8(int) Constant 3 21(@gl_SubgroupSize): 15(ptr) Variable Input 23: 8(int) Constant 0 - 25: TypePointer Uniform 8(int) + 25: TypePointer StorageBuffer 8(int) 4(CSMain): 2 Function None 3 5: Label 27: 2 FunctionCall 6(@CSMain() diff --git a/Test/baseResults/hlsl.wavequery.frag.out b/Test/baseResults/hlsl.wavequery.frag.out index df1b59697a..bb5147a36f 100644 --- a/Test/baseResults/hlsl.wavequery.frag.out +++ b/Test/baseResults/hlsl.wavequery.frag.out @@ -72,7 +72,7 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader diff --git a/Test/baseResults/hlsl.wavereduction.comp.out b/Test/baseResults/hlsl.wavereduction.comp.out index 64a4e7c30d..81b2435315 100644 --- a/Test/baseResults/hlsl.wavereduction.comp.out +++ b/Test/baseResults/hlsl.wavereduction.comp.out @@ -6186,7 +6186,7 @@ local_size = (32, 16, 1) 0:? 'dti' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 991 Capability Shader @@ -6218,10 +6218,10 @@ local_size = (32, 16, 1) MemberDecorate 20(Types) 2 Offset 32 MemberDecorate 20(Types) 3 Offset 64 Decorate 21 ArrayStride 96 + Decorate 22(data) Block MemberDecorate 22(data) 0 Offset 0 - Decorate 22(data) BufferBlock - Decorate 24(data) DescriptorSet 0 Decorate 24(data) Binding 0 + Decorate 24(data) DescriptorSet 0 Decorate 986(dti) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 @@ -6239,30 +6239,30 @@ local_size = (32, 16, 1) 20(Types): TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(f64vec4) 21: TypeRuntimeArray 20(Types) 22(data): TypeStruct 21 - 23: TypePointer Uniform 22(data) - 24(data): 23(ptr) Variable Uniform + 23: TypePointer StorageBuffer 22(data) + 24(data): 23(ptr) Variable StorageBuffer 25: 14(int) Constant 0 26: 6(int) Constant 0 27: TypePointer Function 6(int) - 32: TypePointer Uniform 13(ivec4) + 32: TypePointer StorageBuffer 13(ivec4) 35: 6(int) Constant 3 - 42: TypePointer Uniform 6(int) + 42: TypePointer StorageBuffer 6(int) 51: TypeVector 6(int) 2 58: 6(int) Constant 1 73: 6(int) Constant 2 78: 14(int) Constant 1 - 81: TypePointer Uniform 15(ivec4) - 90: TypePointer Uniform 14(int) + 81: TypePointer StorageBuffer 15(ivec4) + 90: TypePointer StorageBuffer 14(int) 99: TypeVector 14(int) 2 112: TypeVector 14(int) 3 125: 14(int) Constant 2 - 128: TypePointer Uniform 17(fvec4) - 137: TypePointer Uniform 16(float) + 128: TypePointer StorageBuffer 17(fvec4) + 137: TypePointer StorageBuffer 16(float) 146: TypeVector 16(float) 2 159: TypeVector 16(float) 3 172: 14(int) Constant 3 - 175: TypePointer Uniform 19(f64vec4) - 184: TypePointer Uniform 18(float64_t) + 175: TypePointer StorageBuffer 19(f64vec4) + 184: TypePointer StorageBuffer 18(float64_t) 193: TypeVector 18(float64_t) 2 206: TypeVector 18(float64_t) 3 979: TypeBool diff --git a/Test/baseResults/hlsl.wavevote.comp.out b/Test/baseResults/hlsl.wavevote.comp.out index 83140a2f32..adb0d9a197 100644 --- a/Test/baseResults/hlsl.wavevote.comp.out +++ b/Test/baseResults/hlsl.wavevote.comp.out @@ -204,7 +204,7 @@ local_size = (32, 16, 1) 0:? 'dti' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 75 Capability Shader @@ -227,10 +227,10 @@ local_size = (32, 16, 1) Name 70 "dti" Name 72 "param" Decorate 14 ArrayStride 8 + Decorate 15(data) Block MemberDecorate 15(data) 0 Offset 0 - Decorate 15(data) BufferBlock - Decorate 17(data) DescriptorSet 0 Decorate 17(data) Binding 0 + Decorate 17(data) DescriptorSet 0 Decorate 70(dti) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 @@ -241,8 +241,8 @@ local_size = (32, 16, 1) 13: TypeInt 64 0 14: TypeRuntimeArray 13(int64_t) 15(data): TypeStruct 14 - 16: TypePointer Uniform 15(data) - 17(data): 16(ptr) Variable Uniform + 16: TypePointer StorageBuffer 15(data) + 17(data): 16(ptr) Variable StorageBuffer 18: TypeInt 32 1 19: 18(int) Constant 0 20: 6(int) Constant 0 @@ -251,7 +251,7 @@ local_size = (32, 16, 1) 28: 6(int) Constant 3 30: TypeVector 6(int) 4 32: TypeVector 13(int64_t) 4 - 35: TypePointer Uniform 13(int64_t) + 35: TypePointer StorageBuffer 13(int64_t) 37: 6(int) Constant 1 48: 6(int) Constant 2 69: TypePointer Input 7(ivec3) diff --git a/Test/baseResults/hlsl.whileLoop.frag.out b/Test/baseResults/hlsl.whileLoop.frag.out index 23825e8e75..1f9a36b2ff 100644 --- a/Test/baseResults/hlsl.whileLoop.frag.out +++ b/Test/baseResults/hlsl.whileLoop.frag.out @@ -96,7 +96,7 @@ gl_FragCoord origin is upper left 0:? 'input' (layout( location=0) in 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 52 Capability Shader diff --git a/Test/baseResults/hlsl.y-negate-1.vert.out b/Test/baseResults/hlsl.y-negate-1.vert.out index aefde04164..43a49b6d08 100644 --- a/Test/baseResults/hlsl.y-negate-1.vert.out +++ b/Test/baseResults/hlsl.y-negate-1.vert.out @@ -72,7 +72,7 @@ Shader version: 500 0:? '@entryPointOutput' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 34 Capability Shader @@ -87,10 +87,10 @@ Shader version: 500 Name 13 "" Name 22 "@position" Name 32 "@entryPointOutput" - MemberDecorate 11($Global) 0 Offset 0 Decorate 11($Global) Block - Decorate 13 DescriptorSet 0 + MemberDecorate 11($Global) 0 Offset 0 Decorate 13 Binding 0 + Decorate 13 DescriptorSet 0 Decorate 32(@entryPointOutput) BuiltIn Position 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.y-negate-2.vert.out b/Test/baseResults/hlsl.y-negate-2.vert.out index 4a9ef61161..98d71b961a 100644 --- a/Test/baseResults/hlsl.y-negate-2.vert.out +++ b/Test/baseResults/hlsl.y-negate-2.vert.out @@ -80,7 +80,7 @@ Shader version: 500 0:? 'position' ( out 4-component vector of float Position) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 37 Capability Shader @@ -98,10 +98,10 @@ Shader version: 500 Name 22 "param" Name 25 "@position" Name 35 "position" - MemberDecorate 13($Global) 0 Offset 0 Decorate 13($Global) Block - Decorate 15 DescriptorSet 0 + MemberDecorate 13($Global) 0 Offset 0 Decorate 15 Binding 0 + Decorate 15 DescriptorSet 0 Decorate 35(position) BuiltIn Position 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/hlsl.y-negate-3.vert.out b/Test/baseResults/hlsl.y-negate-3.vert.out index 3544910347..770e37fd4d 100644 --- a/Test/baseResults/hlsl.y-negate-3.vert.out +++ b/Test/baseResults/hlsl.y-negate-3.vert.out @@ -126,7 +126,7 @@ Shader version: 500 0:? '@entryPointOutput.somethingelse' (layout( location=0) out int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader @@ -147,10 +147,10 @@ Shader version: 500 Name 33 "@position" Name 44 "@entryPointOutput.pos" Name 47 "@entryPointOutput.somethingelse" - MemberDecorate 16($Global) 0 Offset 0 Decorate 16($Global) Block - Decorate 18 DescriptorSet 0 + MemberDecorate 16($Global) 0 Offset 0 Decorate 18 Binding 0 + Decorate 18 DescriptorSet 0 Decorate 44(@entryPointOutput.pos) BuiltIn Position Decorate 47(@entryPointOutput.somethingelse) Location 0 2: TypeVoid diff --git a/Test/baseResults/implicitArraySize.vert.out b/Test/baseResults/implicitArraySize.vert.out new file mode 100644 index 0000000000..9a71b87b40 --- /dev/null +++ b/Test/baseResults/implicitArraySize.vert.out @@ -0,0 +1,115 @@ +implicitArraySize.vert +Shader version: 460 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:6 Sequence +0:6 move second child to first child ( temp float) +0:6 direct index ( smooth temp float) +0:6 'a' ( smooth out unsized 1-element array of float) +0:6 Constant: +0:6 0 (const int) +0:6 Constant: +0:6 0.100000 +0:7 move second child to first child ( temp float) +0:7 direct index ( smooth temp float) +0:7 'c' ( smooth out unsized 6-element array of float) +0:7 Constant: +0:7 5 (const int) +0:7 Constant: +0:7 0.100000 +0:? Linker Objects +0:? 'a' ( smooth out unsized 1-element array of float) +0:? 'c' ( smooth out unsized 6-element array of float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +implicitArraySize.frag +Shader version: 460 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 direct index ( temp float) +0:7 'b' ( out 5-element array of float) +0:7 Constant: +0:7 0 (const int) +0:7 direct index ( smooth temp float) +0:7 'a' ( smooth in unsized 2-element array of float) +0:7 Constant: +0:7 1 (const int) +0:8 move second child to first child ( temp float) +0:8 direct index ( temp float) +0:8 'b' ( out 5-element array of float) +0:8 Constant: +0:8 1 (const int) +0:8 direct index ( smooth temp float) +0:8 'c' ( smooth in 3-element array of float) +0:8 Constant: +0:8 1 (const int) +0:? Linker Objects +0:? 'a' ( smooth in unsized 2-element array of float) +0:? 'c' ( smooth in 3-element array of float) +0:? 'b' ( out 5-element array of float) + + +Linked vertex stage: + + +Linked fragment stage: + +ERROR: Linking vertex stage: Implicit size of unsized array doesn't match same symbol among multiple shaders. + +Shader version: 460 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:6 Sequence +0:6 move second child to first child ( temp float) +0:6 direct index ( smooth temp float) +0:6 'a' ( smooth out 1-element array of float) +0:6 Constant: +0:6 0 (const int) +0:6 Constant: +0:6 0.100000 +0:7 move second child to first child ( temp float) +0:7 direct index ( smooth temp float) +0:7 'c' ( smooth out 6-element array of float) +0:7 Constant: +0:7 5 (const int) +0:7 Constant: +0:7 0.100000 +0:? Linker Objects +0:? 'a' ( smooth out 1-element array of float) +0:? 'c' ( smooth out 6-element array of float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 460 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 direct index ( temp float) +0:7 'b' ( out 5-element array of float) +0:7 Constant: +0:7 0 (const int) +0:7 direct index ( smooth temp float) +0:7 'a' ( smooth in 2-element array of float) +0:7 Constant: +0:7 1 (const int) +0:8 move second child to first child ( temp float) +0:8 direct index ( temp float) +0:8 'b' ( out 5-element array of float) +0:8 Constant: +0:8 1 (const int) +0:8 direct index ( smooth temp float) +0:8 'c' ( smooth in 3-element array of float) +0:8 Constant: +0:8 1 (const int) +0:? Linker Objects +0:? 'a' ( smooth in 2-element array of float) +0:? 'c' ( smooth in 3-element array of float) +0:? 'b' ( out 5-element array of float) + diff --git a/Test/baseResults/implicitArraySize1.geom.out b/Test/baseResults/implicitArraySize1.geom.out new file mode 100644 index 0000000000..d9c2f8ba14 --- /dev/null +++ b/Test/baseResults/implicitArraySize1.geom.out @@ -0,0 +1,99 @@ +implicitArraySize1.geom +Shader version: 460 +invocations = -1 +max_vertices = 204 +input primitive = triangles +output primitive = line_strip +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:12 Sequence +0:12 Function Call: f( ( global void) +0:13 move second child to first child ( temp float) +0:13 direct index (layout( stream=0) temp float) +0:13 'o' (layout( stream=0) out 3-element array of float) +0:13 Constant: +0:13 1 (const int) +0:13 direct index ( temp float) +0:13 direct index ( temp 3-element array of float) +0:13 'g' ( in 3-element array of 3-element array of float) +0:13 Constant: +0:13 2 (const int) +0:13 Constant: +0:13 1 (const int) +0:? Linker Objects +0:? 'g' ( in 3-element array of 3-element array of float) +0:? 'o' (layout( stream=0) out 3-element array of float) + +implicitArraySize2.geom +Shader version: 460 +invocations = -1 +max_vertices = -1 +input primitive = none +output primitive = none +0:? Sequence +0:6 Function Definition: f( ( global void) +0:6 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 direct index (layout( stream=0) temp float) +0:7 'o' (layout( stream=0) out unsized 2-element array of float) +0:7 Constant: +0:7 1 (const int) +0:7 direct index ( temp float) +0:7 direct index ( temp 3-element array of float) +0:7 'g' ( in unsized 2-element array of 3-element array of float) +0:7 Constant: +0:7 1 (const int) +0:7 Constant: +0:7 1 (const int) +0:? Linker Objects +0:? 'g' ( in unsized 2-element array of 3-element array of float) +0:? 'o' (layout( stream=0) out unsized 2-element array of float) + + +Linked geometry stage: + +ERROR: Linking geometry stage: Not all array sizes match across all geometry shaders in the program + +Shader version: 460 +invocations = 1 +max_vertices = 204 +input primitive = triangles +output primitive = line_strip +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:12 Sequence +0:12 Function Call: f( ( global void) +0:13 move second child to first child ( temp float) +0:13 direct index (layout( stream=0) temp float) +0:13 'o' (layout( stream=0) out 3-element array of float) +0:13 Constant: +0:13 1 (const int) +0:13 direct index ( temp float) +0:13 direct index ( temp 3-element array of float) +0:13 'g' ( in 3-element array of 3-element array of float) +0:13 Constant: +0:13 2 (const int) +0:13 Constant: +0:13 1 (const int) +0:6 Function Definition: f( ( global void) +0:6 Function Parameters: +0:7 Sequence +0:7 move second child to first child ( temp float) +0:7 direct index (layout( stream=0) temp float) +0:7 'o' (layout( stream=0) out 2-element array of float) +0:7 Constant: +0:7 1 (const int) +0:7 direct index ( temp float) +0:7 direct index ( temp 3-element array of float) +0:7 'g' ( in 2-element array of 3-element array of float) +0:7 Constant: +0:7 1 (const int) +0:7 Constant: +0:7 1 (const int) +0:? Linker Objects +0:? 'g' ( in 3-element array of 3-element array of float) +0:? 'o' (layout( stream=0) out 3-element array of float) + diff --git a/Test/baseResults/implicitArraySizeBuiltin.vert.out b/Test/baseResults/implicitArraySizeBuiltin.vert.out new file mode 100644 index 0000000000..77b41aa6db --- /dev/null +++ b/Test/baseResults/implicitArraySizeBuiltin.vert.out @@ -0,0 +1,176 @@ +implicitArraySizeBuiltin.vert +Shader version: 460 +0:? Sequence +0:3 Function Definition: f1(f1; ( global void) +0:3 Function Parameters: +0:3 'x' ( in float) +0:5 Sequence +0:5 move second child to first child ( temp float) +0:5 direct index ( temp float ClipDistance) +0:5 gl_ClipDistance: direct index for structure ( out unsized 7-element array of float ClipDistance) +0:5 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 7-element array of float ClipDistance gl_ClipDistance, out unsized 2-element array of float CullDistance gl_CullDistance}) +0:5 Constant: +0:5 2 (const uint) +0:5 Constant: +0:5 6 (const int) +0:5 'x' ( in float) +0:6 move second child to first child ( temp float) +0:6 direct index ( temp float CullDistance) +0:6 gl_CullDistance: direct index for structure ( out unsized 2-element array of float CullDistance) +0:6 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 7-element array of float ClipDistance gl_ClipDistance, out unsized 2-element array of float CullDistance gl_CullDistance}) +0:6 Constant: +0:6 3 (const uint) +0:6 Constant: +0:6 1 (const int) +0:6 'x' ( in float) +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:10 Sequence +0:10 Function Call: f1(f1; ( global void) +0:10 Constant: +0:10 0.100000 +0:? Linker Objects +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 7-element array of float ClipDistance gl_ClipDistance, out unsized 2-element array of float CullDistance gl_CullDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +implicitArraySizeBuiltin.geom +Shader version: 460 +invocations = -1 +max_vertices = 204 +input primitive = triangles +output primitive = line_strip +0:? Sequence +0:6 Function Definition: f2(f1; ( global void) +0:6 Function Parameters: +0:6 'x' ( in float) +0:8 Sequence +0:8 move second child to first child ( temp float) +0:8 direct index (layout( stream=0) temp float ClipDistance) +0:8 gl_ClipDistance: direct index for structure (layout( stream=0) out unsized 7-element array of float ClipDistance) +0:8 '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 7-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out unsized 2-element array of float CullDistance gl_CullDistance}) +0:8 Constant: +0:8 2 (const uint) +0:8 Constant: +0:8 6 (const int) +0:8 direct index ( temp float ClipDistance) +0:8 gl_ClipDistance: direct index for structure ( in unsized 7-element array of float ClipDistance) +0:8 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 7-element array of float ClipDistance gl_ClipDistance, in unsized 2-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:8 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 7-element array of float ClipDistance gl_ClipDistance, in unsized 2-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 Constant: +0:8 6 (const int) +0:10 Function Definition: f3(f1; ( global void) +0:10 Function Parameters: +0:10 'x' ( in float) +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 direct index (layout( stream=0) temp float CullDistance) +0:12 gl_CullDistance: direct index for structure (layout( stream=0) out unsized 2-element array of float CullDistance) +0:12 '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 7-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out unsized 2-element array of float CullDistance gl_CullDistance}) +0:12 Constant: +0:12 3 (const uint) +0:12 Constant: +0:12 1 (const int) +0:12 direct index ( temp float CullDistance) +0:12 gl_CullDistance: direct index for structure ( in unsized 2-element array of float CullDistance) +0:12 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 7-element array of float ClipDistance gl_ClipDistance, in unsized 2-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:12 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 7-element array of float ClipDistance gl_ClipDistance, in unsized 2-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 3 (const int) +0:12 Constant: +0:12 1 (const int) +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:19 Sequence +0:19 Function Call: f3(f1; ( global void) +0:19 Constant: +0:19 0.100000 +0:? Linker Objects +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 7-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out unsized 2-element array of float CullDistance gl_CullDistance}) +0:? 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 7-element array of float ClipDistance gl_ClipDistance, in unsized 2-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) + + +Linked vertex stage: + + +Linked geometry stage: + + +Shader version: 460 +0:? Sequence +0:3 Function Definition: f1(f1; ( global void) +0:3 Function Parameters: +0:3 'x' ( in float) +0:5 Sequence +0:5 move second child to first child ( temp float) +0:5 direct index ( temp float ClipDistance) +0:5 gl_ClipDistance: direct index for structure ( out 7-element array of float ClipDistance) +0:5 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 7-element array of float ClipDistance gl_ClipDistance, out 2-element array of float CullDistance gl_CullDistance}) +0:5 Constant: +0:5 2 (const uint) +0:5 Constant: +0:5 6 (const int) +0:5 'x' ( in float) +0:6 move second child to first child ( temp float) +0:6 direct index ( temp float CullDistance) +0:6 gl_CullDistance: direct index for structure ( out 2-element array of float CullDistance) +0:6 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 7-element array of float ClipDistance gl_ClipDistance, out 2-element array of float CullDistance gl_CullDistance}) +0:6 Constant: +0:6 3 (const uint) +0:6 Constant: +0:6 1 (const int) +0:6 'x' ( in float) +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:10 Sequence +0:10 Function Call: f1(f1; ( global void) +0:10 Constant: +0:10 0.100000 +0:? Linker Objects +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 7-element array of float ClipDistance gl_ClipDistance, out 2-element array of float CullDistance gl_CullDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 460 +invocations = 1 +max_vertices = 204 +input primitive = triangles +output primitive = line_strip +0:? Sequence +0:10 Function Definition: f3(f1; ( global void) +0:10 Function Parameters: +0:10 'x' ( in float) +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 direct index (layout( stream=0) temp float CullDistance) +0:12 gl_CullDistance: direct index for structure (layout( stream=0) out 2-element array of float CullDistance) +0:12 '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 7-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out 2-element array of float CullDistance gl_CullDistance}) +0:12 Constant: +0:12 3 (const uint) +0:12 Constant: +0:12 1 (const int) +0:12 direct index ( temp float CullDistance) +0:12 gl_CullDistance: direct index for structure ( in 2-element array of float CullDistance) +0:12 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 7-element array of float ClipDistance gl_ClipDistance, in 2-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:12 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 7-element array of float ClipDistance gl_ClipDistance, in 2-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 3 (const int) +0:12 Constant: +0:12 1 (const int) +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:19 Sequence +0:19 Function Call: f3(f1; ( global void) +0:19 Constant: +0:19 0.100000 +0:? Linker Objects +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 7-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out 2-element array of float CullDistance gl_CullDistance}) +0:? 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 7-element array of float ClipDistance gl_ClipDistance, in 2-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) + diff --git a/Test/baseResults/index_outside_sample_mask_range.frag.out b/Test/baseResults/index_outside_sample_mask_range.frag.out new file mode 100644 index 0000000000..fb0dca241f --- /dev/null +++ b/Test/baseResults/index_outside_sample_mask_range.frag.out @@ -0,0 +1,55 @@ +index_outside_sample_mask_range.frag +ERROR: 0:6: '[' : gl_SampleMask array index out of range '1' +ERROR: 1 compilation errors. No code generated. + + +Shader version: 320 +ERROR: node is still EOpNull! +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:? Sequence +0:6 Sequence +0:6 move second child to first child ( temp highp int) +0:6 'invalidValue' ( temp highp int) +0:6 direct index ( temp highp int SampleMaskIn) +0:6 'gl_SampleMask' ( out unsized 2-element array of highp int SampleMaskIn) +0:6 Constant: +0:6 1 (const int) +0:7 move second child to first child ( temp mediump 4-component vector of float) +0:7 'fs_color' (layout( location=0) out mediump 4-component vector of float) +0:7 Constant: +0:7 1.000000 +0:7 0.000000 +0:7 0.000000 +0:7 1.000000 +0:? Linker Objects +0:? 'fs_color' (layout( location=0) out mediump 4-component vector of float) +0:? 'gl_SampleMask' ( out unsized 2-element array of highp int SampleMaskIn) + + +Linked fragment stage: + + +Shader version: 320 +ERROR: node is still EOpNull! +0:3 Function Definition: main( ( global void) +0:3 Function Parameters: +0:? Sequence +0:6 Sequence +0:6 move second child to first child ( temp highp int) +0:6 'invalidValue' ( temp highp int) +0:6 direct index ( temp highp int SampleMaskIn) +0:6 'gl_SampleMask' ( out 2-element array of highp int SampleMaskIn) +0:6 Constant: +0:6 1 (const int) +0:7 move second child to first child ( temp mediump 4-component vector of float) +0:7 'fs_color' (layout( location=0) out mediump 4-component vector of float) +0:7 Constant: +0:7 1.000000 +0:7 0.000000 +0:7 0.000000 +0:7 1.000000 +0:? Linker Objects +0:? 'fs_color' (layout( location=0) out mediump 4-component vector of float) +0:? 'gl_SampleMask' ( out 2-element array of highp int SampleMaskIn) + diff --git a/Test/baseResults/iomap.blockOutVariableIn.2.vert.out b/Test/baseResults/iomap.blockOutVariableIn.2.vert.out index 0b4c0ac98a..49ad83e642 100644 --- a/Test/baseResults/iomap.blockOutVariableIn.2.vert.out +++ b/Test/baseResults/iomap.blockOutVariableIn.2.vert.out @@ -255,7 +255,7 @@ output primitive = triangle_strip 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 +// Generated by (magic number): 8000b // Id's are bound by 33 Capability Shader @@ -277,10 +277,10 @@ output primitive = triangle_strip Name 32 "gl_InstanceID" Decorate 9(Block) Block Decorate 11 Location 0 + Decorate 26(gl_PerVertex) Block 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 @@ -320,7 +320,7 @@ output primitive = triangle_strip Return FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 49 Capability Geometry @@ -346,10 +346,10 @@ output primitive = triangle_strip Decorate 14(in_a1) Location 0 Decorate 22(a2) Location 1 Decorate 25(in_a2) Location 1 + Decorate 31(gl_PerVertex) Block 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 diff --git a/Test/baseResults/iomap.blockOutVariableIn.vert.out b/Test/baseResults/iomap.blockOutVariableIn.vert.out index dd12cbc2ad..3ccf47b35b 100644 --- a/Test/baseResults/iomap.blockOutVariableIn.vert.out +++ b/Test/baseResults/iomap.blockOutVariableIn.vert.out @@ -127,7 +127,7 @@ Shader version: 440 0:? 'color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 33 Capability Shader @@ -149,10 +149,10 @@ Shader version: 440 Name 32 "gl_InstanceID" Decorate 9(Block) Block Decorate 11 Location 0 + Decorate 26(gl_PerVertex) Block 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 @@ -192,7 +192,7 @@ Shader version: 440 Return FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 23 Capability Shader diff --git a/Test/baseResults/iomap.crossStage.2.vert.out b/Test/baseResults/iomap.crossStage.2.vert.out index 325c1b465a..ffb10bc406 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 @@ -406,7 +407,7 @@ Shader version: 460 0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 56 Capability Shader @@ -451,22 +452,22 @@ Shader version: 460 Decorate 36(um2) Location 4 Decorate 36(um2) DescriptorSet 0 Decorate 40(glass) Location 0 - Decorate 40(glass) DescriptorSet 0 Decorate 40(glass) Binding 0 + Decorate 40(glass) DescriptorSet 0 + Decorate 41(crossStageBlock1) Block MemberDecorate 41(crossStageBlock1) 0 Offset 0 MemberDecorate 41(crossStageBlock1) 1 Offset 16 - Decorate 41(crossStageBlock1) Block - Decorate 43 DescriptorSet 0 Decorate 43 Binding 0 - MemberDecorate 44(vertOnlyBlock) 0 Offset 0 + Decorate 43 DescriptorSet 0 Decorate 44(vertOnlyBlock) BufferBlock - Decorate 46 DescriptorSet 0 + MemberDecorate 44(vertOnlyBlock) 0 Offset 0 Decorate 46 Binding 0 + Decorate 46 DescriptorSet 0 + Decorate 47(crossStageBlock2) Block MemberDecorate 47(crossStageBlock2) 0 Offset 0 MemberDecorate 47(crossStageBlock2) 1 Offset 16 - Decorate 47(crossStageBlock2) Block - Decorate 52(blockName1) DescriptorSet 0 Decorate 52(blockName1) Binding 0 + Decorate 52(blockName1) DescriptorSet 0 Decorate 54(gl_VertexID) BuiltIn VertexId Decorate 55(gl_InstanceID) BuiltIn InstanceId 2: TypeVoid @@ -529,7 +530,7 @@ Shader version: 460 Return FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 65 Capability Geometry @@ -574,11 +575,11 @@ Shader version: 460 Decorate 57(u2) DescriptorSet 0 Decorate 59(u3) Location 3 Decorate 59(u3) DescriptorSet 0 + Decorate 60(crossStageBlock2) Block MemberDecorate 60(crossStageBlock2) 0 Offset 0 MemberDecorate 60(crossStageBlock2) 1 Offset 16 - Decorate 60(crossStageBlock2) Block - Decorate 64(blockName1) DescriptorSet 0 Decorate 64(blockName1) Binding 0 + Decorate 64(blockName1) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -658,7 +659,7 @@ Shader version: 460 Return FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 62 Capability Shader @@ -705,22 +706,22 @@ Shader version: 460 Decorate 45(um2) Location 4 Decorate 45(um2) DescriptorSet 0 Decorate 49(glass) Location 0 - Decorate 49(glass) DescriptorSet 0 Decorate 49(glass) Binding 0 + Decorate 49(glass) DescriptorSet 0 + Decorate 50(crossStageBlock1) Block MemberDecorate 50(crossStageBlock1) 0 Offset 0 MemberDecorate 50(crossStageBlock1) 1 Offset 16 - Decorate 50(crossStageBlock1) Block - Decorate 52 DescriptorSet 0 Decorate 52 Binding 0 - MemberDecorate 53(fragOnlyBlock) 0 Offset 0 + Decorate 52 DescriptorSet 0 Decorate 53(fragOnlyBlock) BufferBlock - Decorate 55 DescriptorSet 0 + MemberDecorate 53(fragOnlyBlock) 0 Offset 0 Decorate 55 Binding 0 + Decorate 55 DescriptorSet 0 + Decorate 56(crossStageBlock2) Block MemberDecorate 56(crossStageBlock2) 0 Offset 0 MemberDecorate 56(crossStageBlock2) 1 Offset 16 - Decorate 56(crossStageBlock2) Block - Decorate 61(blockName2) DescriptorSet 0 Decorate 61(blockName2) Binding 0 + Decorate 61(blockName2) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/iomap.crossStage.vert.out b/Test/baseResults/iomap.crossStage.vert.out index 5338b80750..e195b5b6ef 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 @@ -263,7 +264,7 @@ Shader version: 460 0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 56 Capability Shader @@ -308,22 +309,22 @@ Shader version: 460 Decorate 36(um2) Location 4 Decorate 36(um2) DescriptorSet 0 Decorate 40(glass) Location 0 - Decorate 40(glass) DescriptorSet 0 Decorate 40(glass) Binding 0 + Decorate 40(glass) DescriptorSet 0 + Decorate 41(crossStageBlock1) Block MemberDecorate 41(crossStageBlock1) 0 Offset 0 MemberDecorate 41(crossStageBlock1) 1 Offset 16 - Decorate 41(crossStageBlock1) Block - Decorate 43 DescriptorSet 0 Decorate 43 Binding 0 - MemberDecorate 44(vertOnlyBlock) 0 Offset 0 + Decorate 43 DescriptorSet 0 Decorate 44(vertOnlyBlock) BufferBlock - Decorate 46 DescriptorSet 0 + MemberDecorate 44(vertOnlyBlock) 0 Offset 0 Decorate 46 Binding 0 + Decorate 46 DescriptorSet 0 + Decorate 47(crossStageBlock2) Block MemberDecorate 47(crossStageBlock2) 0 Offset 0 MemberDecorate 47(crossStageBlock2) 1 Offset 16 - Decorate 47(crossStageBlock2) Block - Decorate 52(blockName1) DescriptorSet 0 Decorate 52(blockName1) Binding 0 + Decorate 52(blockName1) DescriptorSet 0 Decorate 54(gl_VertexID) BuiltIn VertexId Decorate 55(gl_InstanceID) BuiltIn InstanceId 2: TypeVoid @@ -386,7 +387,7 @@ Shader version: 460 Return FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 62 Capability Shader @@ -433,22 +434,22 @@ Shader version: 460 Decorate 45(um2) Location 4 Decorate 45(um2) DescriptorSet 0 Decorate 49(glass) Location 0 - Decorate 49(glass) DescriptorSet 0 Decorate 49(glass) Binding 0 + Decorate 49(glass) DescriptorSet 0 + Decorate 50(crossStageBlock1) Block MemberDecorate 50(crossStageBlock1) 0 Offset 0 MemberDecorate 50(crossStageBlock1) 1 Offset 16 - Decorate 50(crossStageBlock1) Block - Decorate 52 DescriptorSet 0 Decorate 52 Binding 0 - MemberDecorate 53(fragOnlyBlock) 0 Offset 0 + Decorate 52 DescriptorSet 0 Decorate 53(fragOnlyBlock) BufferBlock - Decorate 55 DescriptorSet 0 + MemberDecorate 53(fragOnlyBlock) 0 Offset 0 Decorate 55 Binding 0 + Decorate 55 DescriptorSet 0 + Decorate 56(crossStageBlock2) Block MemberDecorate 56(crossStageBlock2) 0 Offset 0 MemberDecorate 56(crossStageBlock2) 1 Offset 16 - Decorate 56(crossStageBlock2) Block - Decorate 61(blockName2) DescriptorSet 0 Decorate 61(blockName2) Binding 0 + Decorate 61(blockName2) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/iomap.crossStage.vk.2.vert.out b/Test/baseResults/iomap.crossStage.vk.2.vert.out new file mode 100644 index 0000000000..2334df5c47 --- /dev/null +++ b/Test/baseResults/iomap.crossStage.vk.2.vert.out @@ -0,0 +1,313 @@ +iomap.crossStage.vk.2.vert +Shader version: 460 +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 highp 4-component vector of float) +0:10 val: direct index for structure ( out highp 4-component vector of float) +0:10 'anon@0' ( out block{ out highp 4-component vector of float val}) +0:10 Constant: +0:10 0 (const uint) +0:10 Constant: +0:10 0.500000 +0:10 0.500000 +0:10 0.500000 +0:10 0.500000 +0:11 move second child to first child ( temp highp 4-component vector of float) +0:11 'color' ( smooth out highp 4-component vector of float) +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 4-component vector of float) +0:12 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:12 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance}) +0:12 Constant: +0:12 0 (const uint) +0:12 Constant: +0:12 1.000000 +0:12 1.000000 +0:12 1.000000 +0:12 1.000000 +0:? Linker Objects +0:? 'anon@0' ( out block{ out highp 4-component vector of float val}) +0:? 'color' ( smooth out highp 4-component vector of float) +0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance}) + +iomap.crossStage.vk.2.geom +Shader version: 460 +invocations = -1 +max_vertices = 3 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:23 Function Definition: main( ( global void) +0:23 Function Parameters: +0:25 Sequence +0:25 Sequence +0:25 Sequence +0:25 move second child to first child ( temp highp int) +0:25 'i' ( temp highp int) +0:25 Constant: +0:25 0 (const int) +0:25 Loop with condition tested first +0:25 Loop Condition +0:25 Compare Less Than ( temp bool) +0:25 'i' ( temp highp int) +0:25 Constant: +0:25 3 (const int) +0:25 Loop Body +0:26 Sequence +0:26 move second child to first child ( temp highp 4-component vector of float) +0:26 'colorOut' (layout( stream=0) out highp 4-component vector of float) +0:26 component-wise multiply ( temp highp 4-component vector of float) +0:26 indirect index ( temp highp 4-component vector of float) +0:26 'color' ( in 1-element array of highp 4-component vector of float) +0:26 'i' ( temp highp int) +0:26 val: direct index for structure ( in highp 4-component vector of float) +0:26 indirect index ( temp block{ in highp 4-component vector of float val}) +0:26 'vv' ( in 1-element array of block{ in highp 4-component vector of float val}) +0:26 'i' ( temp highp int) +0:26 Constant: +0:26 0 (const int) +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 vv2Val: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:27 'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float vv2Val}) +0:27 Constant: +0:27 0 (const uint) +0:27 Constant: +0:27 1.000000 +0:27 1.000000 +0:27 1.000000 +0:27 1.000000 +0:28 EmitVertex ( global void) +0:25 Loop Terminal Expression +0:25 Post-Increment ( temp highp int) +0:25 'i' ( temp highp int) +0:30 EndPrimitive ( global void) +0:? Linker Objects +0:? 'vgo1' ( in 1-element array of highp 4-component vector of float) +0:? 'color' ( in 1-element array of highp 4-component vector of float) +0:? 'colorOut' (layout( stream=0) out highp 4-component vector of float) +0:? 'vv' ( in 1-element array of block{ in highp 4-component vector of float val}) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float vv2Val}) + +iomap.crossStage.vk.2.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: main( ( global void) +0:19 Function Parameters: +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'fragColor' ( out highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 'colorOut' ( smooth in highp 4-component vector of float) +0:21 component-wise multiply ( temp highp 4-component vector of float) +0:21 component-wise multiply ( temp highp 4-component vector of float) +0:21 component-wise multiply ( temp highp 4-component vector of float) +0:21 'unsetColor' ( smooth in highp 4-component vector of float) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 vector swizzle ( temp highp 4-component vector of float) +0:21 val: direct index for structure ( in highp 2-component vector of float) +0:21 'iVert' ( in block{ in highp 2-component vector of float val}) +0:21 Constant: +0:21 0 (const int) +0:21 Sequence +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 1 (const int) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 vector swizzle ( temp highp 4-component vector of float) +0:21 val2: direct index for structure ( in highp 2-component vector of float) +0:21 'anon@0' ( in block{ in highp 2-component vector of float val2}) +0:21 Constant: +0:21 0 (const uint) +0:21 Sequence +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 1 (const int) +0:22 'vv2Val' ( smooth in highp 4-component vector of float) +0:? Linker Objects +0:? 'unsetColor' ( smooth in highp 4-component vector of float) +0:? 'colorOut' ( smooth in highp 4-component vector of float) +0:? 'fragColor' ( out highp 4-component vector of float) +0:? 'iVert' ( in block{ in highp 2-component vector of float val}) +0:? 'anon@0' ( in block{ in highp 2-component vector of float val2}) +0:? 'vv2Val' ( smooth in highp 4-component vector of float) + + +Linked vertex stage: + + +Linked geometry stage: + + +Linked fragment stage: + +ERROR: Linking vertex and geometry stages: Input 'vgo1' in geometry shader has no corresponding output in vertex shader. +ERROR: Linking geometry and fragment stages: Input 'unsetColor' in fragment shader has no corresponding output in geometry shader. +ERROR: Linking geometry and fragment stages: Input 'Vertex' in fragment shader has no corresponding output in geometry shader. +ERROR: Linking geometry and fragment stages: Input 'Vertex2' in fragment shader has no corresponding output in geometry shader. +ERROR: Linking geometry and fragment stages: Input 'vv2Val' in fragment shader has no corresponding output in geometry shader. + +Shader version: 460 +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 highp 4-component vector of float) +0:10 val: direct index for structure ( out highp 4-component vector of float) +0:10 'anon@0' ( out block{ out highp 4-component vector of float val}) +0:10 Constant: +0:10 0 (const uint) +0:10 Constant: +0:10 0.500000 +0:10 0.500000 +0:10 0.500000 +0:10 0.500000 +0:11 move second child to first child ( temp highp 4-component vector of float) +0:11 'color' ( smooth out highp 4-component vector of float) +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 4-component vector of float) +0:12 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:12 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance}) +0:12 Constant: +0:12 0 (const uint) +0:12 Constant: +0:12 1.000000 +0:12 1.000000 +0:12 1.000000 +0:12 1.000000 +0:? Linker Objects +0:? 'anon@0' ( out block{ out highp 4-component vector of float val}) +0:? 'color' ( smooth out highp 4-component vector of float) +0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance}) +Shader version: 460 +invocations = 1 +max_vertices = 3 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:23 Function Definition: main( ( global void) +0:23 Function Parameters: +0:25 Sequence +0:25 Sequence +0:25 Sequence +0:25 move second child to first child ( temp highp int) +0:25 'i' ( temp highp int) +0:25 Constant: +0:25 0 (const int) +0:25 Loop with condition tested first +0:25 Loop Condition +0:25 Compare Less Than ( temp bool) +0:25 'i' ( temp highp int) +0:25 Constant: +0:25 3 (const int) +0:25 Loop Body +0:26 Sequence +0:26 move second child to first child ( temp highp 4-component vector of float) +0:26 'colorOut' (layout( stream=0) out highp 4-component vector of float) +0:26 component-wise multiply ( temp highp 4-component vector of float) +0:26 indirect index ( temp highp 4-component vector of float) +0:26 'color' ( in 1-element array of highp 4-component vector of float) +0:26 'i' ( temp highp int) +0:26 val: direct index for structure ( in highp 4-component vector of float) +0:26 indirect index ( temp block{ in highp 4-component vector of float val}) +0:26 'vv' ( in 1-element array of block{ in highp 4-component vector of float val}) +0:26 'i' ( temp highp int) +0:26 Constant: +0:26 0 (const int) +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 vv2Val: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:27 'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float vv2Val}) +0:27 Constant: +0:27 0 (const uint) +0:27 Constant: +0:27 1.000000 +0:27 1.000000 +0:27 1.000000 +0:27 1.000000 +0:28 EmitVertex ( global void) +0:25 Loop Terminal Expression +0:25 Post-Increment ( temp highp int) +0:25 'i' ( temp highp int) +0:30 EndPrimitive ( global void) +0:? Linker Objects +0:? 'vgo1' ( in 1-element array of highp 4-component vector of float) +0:? 'color' ( in 1-element array of highp 4-component vector of float) +0:? 'colorOut' (layout( stream=0) out highp 4-component vector of float) +0:? 'vv' ( in 1-element array of block{ in highp 4-component vector of float val}) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float vv2Val}) +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: main( ( global void) +0:19 Function Parameters: +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'fragColor' ( out highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 'colorOut' ( smooth in highp 4-component vector of float) +0:21 component-wise multiply ( temp highp 4-component vector of float) +0:21 component-wise multiply ( temp highp 4-component vector of float) +0:21 component-wise multiply ( temp highp 4-component vector of float) +0:21 'unsetColor' ( smooth in highp 4-component vector of float) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 vector swizzle ( temp highp 4-component vector of float) +0:21 val: direct index for structure ( in highp 2-component vector of float) +0:21 'iVert' ( in block{ in highp 2-component vector of float val}) +0:21 Constant: +0:21 0 (const int) +0:21 Sequence +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 1 (const int) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 vector swizzle ( temp highp 4-component vector of float) +0:21 val2: direct index for structure ( in highp 2-component vector of float) +0:21 'anon@0' ( in block{ in highp 2-component vector of float val2}) +0:21 Constant: +0:21 0 (const uint) +0:21 Sequence +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 1 (const int) +0:22 'vv2Val' ( smooth in highp 4-component vector of float) +0:? Linker Objects +0:? 'unsetColor' ( smooth in highp 4-component vector of float) +0:? 'colorOut' ( smooth in highp 4-component vector of float) +0:? 'fragColor' ( out highp 4-component vector of float) +0:? 'iVert' ( in block{ in highp 2-component vector of float val}) +0:? 'anon@0' ( in block{ in highp 2-component vector of float val2}) +0:? 'vv2Val' ( smooth in highp 4-component vector of float) +Mismatched cross-stage IO + +Validation failed +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/iomap.crossStage.vk.vert.out b/Test/baseResults/iomap.crossStage.vk.vert.out index e137bdfc40..1f181fe80e 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 @@ -380,7 +381,7 @@ gl_FragCoord origin is upper left 0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 38 Capability Shader @@ -410,23 +411,24 @@ gl_FragCoord origin is upper left Decorate 14(vgo2) Location 1 Decorate 16(outBlock) Block Decorate 18 Location 5 - Decorate 25(glass) DescriptorSet 0 Decorate 25(glass) Binding 0 + Decorate 25(glass) DescriptorSet 0 + Decorate 26(crossStageBlock1) Block MemberDecorate 26(crossStageBlock1) 0 Offset 0 MemberDecorate 26(crossStageBlock1) 1 Offset 16 - Decorate 26(crossStageBlock1) Block - Decorate 28 DescriptorSet 0 Decorate 28 Binding 1 + Decorate 28 DescriptorSet 0 + Decorate 29(vertOnlyBlock) BufferBlock MemberDecorate 29(vertOnlyBlock) 0 NonWritable MemberDecorate 29(vertOnlyBlock) 0 Offset 0 - Decorate 29(vertOnlyBlock) BufferBlock - Decorate 31 DescriptorSet 0 + Decorate 31 NonWritable Decorate 31 Binding 0 + Decorate 31 DescriptorSet 0 + Decorate 32(crossStageBlock2) Block MemberDecorate 32(crossStageBlock2) 0 Offset 0 MemberDecorate 32(crossStageBlock2) 1 Offset 16 - Decorate 32(crossStageBlock2) Block - Decorate 37(blockName1) DescriptorSet 0 Decorate 37(blockName1) Binding 3 + Decorate 37(blockName1) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -469,7 +471,7 @@ gl_FragCoord origin is upper left Return FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 57 Capability Geometry @@ -505,11 +507,11 @@ gl_FragCoord origin is upper left Decorate 37(inBlock) Location 5 Decorate 48(vgo1) Location 0 Decorate 51(vgo2) Location 1 + Decorate 52(crossStageBlock2) Block MemberDecorate 52(crossStageBlock2) 0 Offset 0 MemberDecorate 52(crossStageBlock2) 1 Offset 16 - Decorate 52(crossStageBlock2) Block - Decorate 56(blockName1) DescriptorSet 0 Decorate 56(blockName1) Binding 3 + Decorate 56(blockName1) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -581,7 +583,7 @@ gl_FragCoord origin is upper left Return FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 81 Capability Shader @@ -612,28 +614,29 @@ gl_FragCoord origin is upper left Name 74 "" Name 76 "gfo2" Name 80 "glass" + Decorate 15(fragOnlyBlock) BufferBlock MemberDecorate 15(fragOnlyBlock) 0 NonWritable MemberDecorate 15(fragOnlyBlock) 0 Offset 0 - Decorate 15(fragOnlyBlock) BufferBlock - Decorate 17 DescriptorSet 0 + Decorate 17 NonWritable Decorate 17 Binding 2 + Decorate 17 DescriptorSet 0 + Decorate 23(crossStageBlock2) Block MemberDecorate 23(crossStageBlock2) 0 Offset 0 MemberDecorate 23(crossStageBlock2) 1 Offset 16 - Decorate 23(crossStageBlock2) Block - Decorate 28(blockName2) DescriptorSet 0 Decorate 28(blockName2) Binding 3 + Decorate 28(blockName2) DescriptorSet 0 + Decorate 38(crossStageBlock1) Block MemberDecorate 38(crossStageBlock1) 0 Offset 0 MemberDecorate 38(crossStageBlock1) 1 Offset 16 - Decorate 38(crossStageBlock1) Block - Decorate 40 DescriptorSet 0 Decorate 40 Binding 1 + Decorate 40 DescriptorSet 0 Decorate 64(gfo1) Location 0 Decorate 70(outColor) Location 0 Decorate 72(outBlock) Block Decorate 74 Location 5 Decorate 76(gfo2) Location 1 - Decorate 80(glass) DescriptorSet 0 Decorate 80(glass) Binding 0 + Decorate 80(glass) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/iomap.variableOutBlockIn.2.vert.out b/Test/baseResults/iomap.variableOutBlockIn.2.vert.out index 6ef7d4e32e..e638befd7f 100644 --- a/Test/baseResults/iomap.variableOutBlockIn.2.vert.out +++ b/Test/baseResults/iomap.variableOutBlockIn.2.vert.out @@ -149,7 +149,7 @@ output primitive = triangle_strip 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 +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -169,10 +169,10 @@ output primitive = triangle_strip Name 28 "gl_InstanceID" Decorate 9(a1) Location 0 Decorate 14(a2) Location 1 + Decorate 20(gl_PerVertex) Block 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 @@ -208,7 +208,7 @@ output primitive = triangle_strip Return FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 31 Capability Geometry @@ -234,10 +234,10 @@ output primitive = triangle_strip Name 30 "gin" Decorate 9(a1) Location 0 Decorate 14(a2) Location 1 + Decorate 20(gl_PerVertex) Block 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 diff --git a/Test/baseResults/iomap.variableOutBlockIn.vert.out b/Test/baseResults/iomap.variableOutBlockIn.vert.out index 8fef640d36..d96df37a9f 100644 --- a/Test/baseResults/iomap.variableOutBlockIn.vert.out +++ b/Test/baseResults/iomap.variableOutBlockIn.vert.out @@ -127,7 +127,7 @@ Shader version: 440 0:? 'color' (layout( location=0) out 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -147,10 +147,10 @@ Shader version: 440 Name 28 "gl_InstanceID" Decorate 9(a1) Location 0 Decorate 14(a2) Location 1 + Decorate 20(gl_PerVertex) Block 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 @@ -186,7 +186,7 @@ Shader version: 440 Return FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader diff --git a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out index 404ae84939..c34401cba4 100644 --- a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out +++ b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out @@ -92,15 +92,20 @@ Shader version: 430 Linked vertex stage: -ERROR: Linking vertex stage: Types must match: - anon@0: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj}" versus anon@1: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}" -ERROR: Linking vertex stage: Types must match: - anon@2: " out block{ out 4-component vector of float v1}" versus " out block{ out 4-component vector of float v1, out 4-component vector of float v2}" -ERROR: Linking vertex stage: Types must match: - anon@1: "layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float b}" versus anon@3: "layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float a}" -ERROR: Linking vertex stage: Matched Uniform or Storage blocks must all be anonymous, or all be named: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - myName: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}" versus anon@4: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}" +ERROR: Linking vertex and vertex stages: vertex block member has no corresponding member in vertex block: + vertex stage: Block: Block, Member: uWorld + vertex stage: Block: Block, Member: n/a +ERROR: Linking vertex and vertex stages: vertex block member has no corresponding member in vertex block: + vertex stage: Block: Vertex, Member: v2 + vertex stage: Block: Vertex, Member: n/a +ERROR: Linking vertex and vertex stages: Member names and types must match: + Block: BufferBlock + vertex stage: " vec4 b" + vertex stage: " vec4 a" +ERROR: Linking vertex and vertex stages: Matched Uniform or Storage blocks must all be anonymous, or all be named: +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: NamedBlock Instance: myName: "" + vertex stage: Block: NamedBlock Instance: anon@4: "" Shader version: 430 ERROR: node is still EOpNull! diff --git a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out index ad609e86f1..d94debbfef 100644 --- a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out +++ b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out @@ -89,19 +89,35 @@ Shader version: 430 Linked vertex stage: -ERROR: Linking vertex stage: Types must match: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - uC: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1}" versus uColorB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}" -ERROR: Linking vertex stage: Types must match: -ERROR: Linking vertex stage: Storage qualifiers must match: -ERROR: Linking vertex stage: Layout qualification must match: - uBufC: "layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1}" versus uColorB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}" -ERROR: Linking vertex stage: Types must match: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - uD: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj}" versus uDefaultB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld}" -ERROR: Linking vertex stage: Types must match: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - oV: " out block{ out 4-component vector of float v1}" versus oVert: " out block{ out 4-component vector of float v2}" +ERROR: Linking vertex and vertex stages: Member names and types must match: + Block: ColorBlock + vertex stage: " vec4 color1" + vertex stage: " vec4 color2" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: ColorBlock Instance: uC: "" + vertex stage: Block: ColorBlock Instance: uColorB: "" +ERROR: Linking vertex and vertex stages: Member names and types must match: + Block: ColorBlock + vertex stage: " vec4 color1" + vertex stage: " vec4 color2" +ERROR: Linking vertex and vertex stages: Storage qualifiers must match: +ERROR: Linking vertex and vertex stages: Layout packing qualifier must match: + vertex stage: Block: ColorBlock Instance: uBufC: "layout( column_major std430) buffer" + vertex stage: Block: ColorBlock Instance: uColorB: "layout( column_major std140) uniform" +ERROR: Linking vertex and vertex stages: Member names and types must match: + Block: Block + vertex stage: " mat4x4 uProj" + vertex stage: " mat4x4 uWorld" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: Block Instance: uD: "" + vertex stage: Block: Block Instance: uDefaultB: "" +ERROR: Linking vertex and vertex stages: Member names and types must match: + Block: Vertex + vertex stage: " vec4 v1" + vertex stage: " vec4 v2" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: Vertex Instance: oV: "" + vertex stage: Block: Vertex Instance: oVert: "" Shader version: 430 0:? Sequence diff --git a/Test/baseResults/link.multiBlocksValid.1.0.vert.out b/Test/baseResults/link.multiBlocksValid.1.0.vert.out index 0015cab45b..69513f05fc 100644 --- a/Test/baseResults/link.multiBlocksValid.1.0.vert.out +++ b/Test/baseResults/link.multiBlocksValid.1.0.vert.out @@ -83,12 +83,15 @@ Shader version: 430 Linked vertex stage: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - c: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}" versus a: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}" -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - a: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}" versus b: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}" -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - b: " out block{ out 4-component vector of float v1, out 4-component vector of float v2}" versus c: " out block{ out 4-component vector of float v1, out 4-component vector of float v2}" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: ColorBlock Instance: c: "" + vertex stage: Block: ColorBlock Instance: a: "" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: Block Instance: a: "" + vertex stage: Block: Block Instance: b: "" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: Vertex Instance: b: "" + vertex stage: Block: Vertex Instance: c: "" Shader version: 430 0:? Sequence diff --git a/Test/baseResults/link.vk.differentPC.0.0.frag.out b/Test/baseResults/link.vk.differentPC.0.0.frag.out index d7cfd22074..d78ba54ac6 100644 --- a/Test/baseResults/link.vk.differentPC.0.0.frag.out +++ b/Test/baseResults/link.vk.differentPC.0.0.frag.out @@ -52,8 +52,10 @@ gl_FragCoord origin is upper left Linked fragment stage: -ERROR: Linking fragment stage: Types must match: - uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2}" +ERROR: Linking fragment and fragment stages: Member names and types must match: + Block: PushConstantBlock + fragment stage: " float scale" + fragment stage: " float scale2" Shader version: 450 gl_FragCoord origin is upper left diff --git a/Test/baseResults/link.vk.differentPC.1.0.frag.out b/Test/baseResults/link.vk.differentPC.1.0.frag.out index 632f18b139..07ed124a07 100644 --- a/Test/baseResults/link.vk.differentPC.1.0.frag.out +++ b/Test/baseResults/link.vk.differentPC.1.0.frag.out @@ -52,10 +52,12 @@ gl_FragCoord origin is upper left Linked fragment stage: -ERROR: Linking fragment stage: Types must match: - uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}" -ERROR: Linking fragment stage: Types must match: - uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}" +ERROR: Linking fragment and fragment stages: fragment block member has no corresponding member in fragment block: + fragment stage: Block: PushConstantBlock, Member: scale2 + fragment stage: Block: PushConstantBlock, Member: n/a +ERROR: Linking fragment and fragment stages: fragment block member has no corresponding member in fragment block: + fragment stage: Block: PushConstantBlock, Member: scale2 + fragment stage: Block: PushConstantBlock, Member: n/a Shader version: 450 gl_FragCoord origin is upper left diff --git a/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out b/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out old mode 100755 new mode 100644 index 3d76b2f382..765fcccfbb --- a/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out +++ b/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out @@ -253,7 +253,7 @@ output primitive = triangle_strip 0:? 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance, in 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader @@ -274,11 +274,11 @@ output primitive = triangle_strip Name 27 "P" Decorate 8(vs_output) Block Decorate 10(vs_out) Location 0 + Decorate 20(gl_PerVertex) Block MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 20(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 20(gl_PerVertex) Block Decorate 27(P) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/link.vk.matchingPC.0.0.frag.out b/Test/baseResults/link.vk.matchingPC.0.0.frag.out index c434b66edc..d2101fde6e 100644 --- a/Test/baseResults/link.vk.matchingPC.0.0.frag.out +++ b/Test/baseResults/link.vk.matchingPC.0.0.frag.out @@ -90,7 +90,7 @@ gl_FragCoord origin is upper left 0:? '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}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 39 Capability Shader @@ -109,10 +109,10 @@ gl_FragCoord origin is upper left MemberName 16(PushConstantBlock) 2 "scale" Name 18 "uPC" Decorate 15(color) Location 0 + Decorate 16(PushConstantBlock) Block MemberDecorate 16(PushConstantBlock) 0 Offset 0 MemberDecorate 16(PushConstantBlock) 1 Offset 16 MemberDecorate 16(PushConstantBlock) 2 Offset 32 - Decorate 16(PushConstantBlock) Block 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out index bdabab18a5..b663876102 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 @@ -173,7 +177,7 @@ Shader version: 430 0:? 'P' ( in highp 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 73 Capability Shader @@ -212,39 +216,39 @@ Shader version: 430 MemberName 70(BufferBlock) 0 "p" Name 72 "uBuf" Decorate 14(oColor) Location 2 + Decorate 16(ColorBlock) Block MemberDecorate 16(ColorBlock) 0 Offset 0 MemberDecorate 16(ColorBlock) 1 Offset 16 MemberDecorate 16(ColorBlock) 2 Offset 32 MemberDecorate 16(ColorBlock) 3 Offset 48 - Decorate 16(ColorBlock) Block - Decorate 18(uC) DescriptorSet 0 Decorate 18(uC) Binding 1 - MemberDecorate 26(SecondaryColorBlock) 0 Offset 0 + Decorate 18(uC) DescriptorSet 0 Decorate 26(SecondaryColorBlock) BufferBlock - Decorate 28(uColorBuf) DescriptorSet 0 + MemberDecorate 26(SecondaryColorBlock) 0 Offset 0 Decorate 28(uColorBuf) Binding 0 + Decorate 28(uColorBuf) DescriptorSet 0 Decorate 32(Vertex) Block Decorate 34(oV) Location 0 + Decorate 40(gl_PerVertex) Block MemberDecorate 40(gl_PerVertex) 0 BuiltIn Position MemberDecorate 40(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 40(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 40(gl_PerVertex) Block + Decorate 44(MatrixBlock) Block MemberDecorate 44(MatrixBlock) 0 ColMajor - MemberDecorate 44(MatrixBlock) 0 Offset 0 MemberDecorate 44(MatrixBlock) 0 MatrixStride 16 + MemberDecorate 44(MatrixBlock) 0 Offset 0 MemberDecorate 44(MatrixBlock) 1 ColMajor - MemberDecorate 44(MatrixBlock) 1 Offset 64 MemberDecorate 44(MatrixBlock) 1 MatrixStride 16 - Decorate 44(MatrixBlock) Block - Decorate 46(uM) DescriptorSet 0 + MemberDecorate 44(MatrixBlock) 1 Offset 64 Decorate 46(uM) Binding 0 + Decorate 46(uM) DescriptorSet 0 Decorate 65(P) Location 0 + Decorate 70(BufferBlock) BufferBlock MemberDecorate 70(BufferBlock) 0 ColMajor - MemberDecorate 70(BufferBlock) 0 Offset 0 MemberDecorate 70(BufferBlock) 0 MatrixStride 16 - Decorate 70(BufferBlock) BufferBlock - Decorate 72(uBuf) DescriptorSet 0 + MemberDecorate 70(BufferBlock) 0 Offset 0 Decorate 72(uBuf) Binding 1 + Decorate 72(uBuf) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out index b0456a0860..7c2b242c6e 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 @@ -258,7 +263,7 @@ output primitive = triangle_strip 0:? 'P' ( in 3-element array of highp 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 101 Capability Geometry @@ -305,36 +310,36 @@ output primitive = triangle_strip Name 97 "uBuf" Name 100 "P" Decorate 18(oColor) Location 1 + Decorate 20(ColorBlock) Block MemberDecorate 20(ColorBlock) 0 Offset 0 MemberDecorate 20(ColorBlock) 1 Offset 16 MemberDecorate 20(ColorBlock) 2 Offset 32 MemberDecorate 20(ColorBlock) 3 Offset 48 - Decorate 20(ColorBlock) Block - Decorate 22(uC) DescriptorSet 0 Decorate 22(uC) Binding 1 + Decorate 22(uC) DescriptorSet 0 + Decorate 44(gl_PerVertex) Block MemberDecorate 44(gl_PerVertex) 0 BuiltIn Position MemberDecorate 44(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 44(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 44(gl_PerVertex) Block + Decorate 48(MatrixBlock) Block MemberDecorate 48(MatrixBlock) 0 ColMajor - MemberDecorate 48(MatrixBlock) 0 Offset 0 MemberDecorate 48(MatrixBlock) 0 MatrixStride 16 + MemberDecorate 48(MatrixBlock) 0 Offset 0 MemberDecorate 48(MatrixBlock) 1 ColMajor - MemberDecorate 48(MatrixBlock) 1 Offset 64 MemberDecorate 48(MatrixBlock) 1 MatrixStride 16 - Decorate 48(MatrixBlock) Block - Decorate 50(uM) DescriptorSet 0 + MemberDecorate 48(MatrixBlock) 1 Offset 64 Decorate 50(uM) Binding 0 + Decorate 50(uM) DescriptorSet 0 Decorate 59(Vertex) Block Decorate 61(oV) Location 0 Decorate 64(Vertex) Block Decorate 68(iV) Location 0 + Decorate 95(BufferBlock) BufferBlock MemberDecorate 95(BufferBlock) 0 ColMajor - MemberDecorate 95(BufferBlock) 0 Offset 0 MemberDecorate 95(BufferBlock) 0 MatrixStride 16 - Decorate 95(BufferBlock) BufferBlock - Decorate 97(uBuf) DescriptorSet 0 + MemberDecorate 95(BufferBlock) 0 Offset 0 Decorate 97(uBuf) Binding 1 + Decorate 97(uBuf) DescriptorSet 0 Decorate 100(P) Location 2 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out index e1d5c888e1..74bc3fb693 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 @@ -108,7 +109,7 @@ Shader version: 450 0:? 'P' (layout( location=0) in highp 4-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 53 Capability Shader @@ -134,20 +135,20 @@ Shader version: 450 Name 31 "" Name 48 "P" Decorate 14(oColor) Location 0 + Decorate 16(PCBlock) Block MemberDecorate 16(PCBlock) 0 ColMajor - MemberDecorate 16(PCBlock) 0 Offset 0 MemberDecorate 16(PCBlock) 0 MatrixStride 16 + MemberDecorate 16(PCBlock) 0 Offset 0 MemberDecorate 16(PCBlock) 1 ColMajor - MemberDecorate 16(PCBlock) 1 Offset 64 MemberDecorate 16(PCBlock) 1 MatrixStride 16 + MemberDecorate 16(PCBlock) 1 Offset 64 MemberDecorate 16(PCBlock) 2 Offset 128 MemberDecorate 16(PCBlock) 3 Offset 144 - Decorate 16(PCBlock) Block + Decorate 29(gl_PerVertex) Block MemberDecorate 29(gl_PerVertex) 0 BuiltIn Position MemberDecorate 29(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 29(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 29(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 29(gl_PerVertex) Block Decorate 48(P) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/link1.vk.frag.out b/Test/baseResults/link1.vk.frag.out index fa1d48ec94..a758f20018 100644 --- a/Test/baseResults/link1.vk.frag.out +++ b/Test/baseResults/link1.vk.frag.out @@ -197,7 +197,7 @@ gl_FragCoord origin is upper left 0:? 's2D' (layout( binding=1) uniform highp sampler2D) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 70 Capability Shader @@ -222,18 +222,18 @@ gl_FragCoord origin is upper left MemberName 67(bnameImplicit) 0 "m" Name 69 "" Decorate 12(color) Location 0 - Decorate 53(s2D) DescriptorSet 0 Decorate 53(s2D) Binding 1 + Decorate 53(s2D) DescriptorSet 0 Decorate 61 ArrayStride 4 - MemberDecorate 62(bnameRuntime) 0 Offset 0 Decorate 62(bnameRuntime) BufferBlock - Decorate 64 DescriptorSet 0 + MemberDecorate 62(bnameRuntime) 0 Offset 0 Decorate 64 Binding 0 + Decorate 64 DescriptorSet 0 Decorate 66 ArrayStride 4 - MemberDecorate 67(bnameImplicit) 0 Offset 0 Decorate 67(bnameImplicit) BufferBlock - Decorate 69 DescriptorSet 0 + MemberDecorate 67(bnameImplicit) 0 Offset 0 Decorate 69 Binding 1 + Decorate 69 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/location_aliasing.tesc.out b/Test/baseResults/location_aliasing.tesc.out new file mode 100644 index 0000000000..54263d25df --- /dev/null +++ b/Test/baseResults/location_aliasing.tesc.out @@ -0,0 +1,33 @@ +location_aliasing.tesc +ERROR: 0:7: 'location' : the aliases sharing the location 1 must be the same basic type and interpolation qualification +ERROR: 1 compilation errors. No code generated. + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +vertices = 1 +ERROR: node is still EOpNull! +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:? Linker Objects +0:? 'gohan' (layout( location=1 component=0) in 32-element array of double) +0:? 'goten' (layout( location=1 component=2) in 32-element array of float) +0:? 'vs_tcs' ( in 32-element array of 4-component vector of float) +0:? 'tcs_tes' ( out 1-element array of 4-component vector of float) + + +Linked tessellation control stage: + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +vertices = 1 +ERROR: node is still EOpNull! +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:? Linker Objects +0:? 'gohan' (layout( location=1 component=0) in 32-element array of double) +0:? 'goten' (layout( location=1 component=2) in 32-element array of float) +0:? 'vs_tcs' ( in 32-element array of 4-component vector of float) +0:? 'tcs_tes' ( out 1-element array of 4-component vector of float) + diff --git a/Test/baseResults/location_aliasing1.frag.out b/Test/baseResults/location_aliasing1.frag.out new file mode 100644 index 0000000000..3a1e1a24b5 --- /dev/null +++ b/Test/baseResults/location_aliasing1.frag.out @@ -0,0 +1,27 @@ +location_aliasing1.frag +ERROR: 0:6: 'location' : the aliases sharing the location 1 must be the same basic type and interpolation qualification +ERROR: 1 compilation errors. No code generated. + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +ERROR: node is still EOpNull! +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:? Linker Objects +0:? 'in1' (layout( location=1 component=0) smooth in float) +0:? 'in2' (layout( location=1 component=2) flat in float) + + +Linked fragment stage: + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +ERROR: node is still EOpNull! +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:? Linker Objects +0:? 'in1' (layout( location=1 component=0) smooth in float) +0:? 'in2' (layout( location=1 component=2) flat in float) + diff --git a/Test/baseResults/matrixCompMult.vert.out b/Test/baseResults/matrixCompMult.vert.out new file mode 100644 index 0000000000..2434adaf37 --- /dev/null +++ b/Test/baseResults/matrixCompMult.vert.out @@ -0,0 +1,33 @@ +matrixCompMult.vert +Shader version: 460 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:? Sequence +0:26 move second child to first child ( temp float) +0:26 'o1' ( smooth out float) +0:26 Constant: +0:26 18.000000 +0:? Linker Objects +0:? 'o1' ( smooth out float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 460 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:? Sequence +0:26 move second child to first child ( temp float) +0:26 'o1' ( smooth out float) +0:26 Constant: +0:26 18.000000 +0:? Linker Objects +0:? 'o1' ( smooth out float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/Test/baseResults/overflow_underflow_toinf_0.frag.out b/Test/baseResults/overflow_underflow_toinf_0.frag.out new file mode 100644 index 0000000000..621d197838 --- /dev/null +++ b/Test/baseResults/overflow_underflow_toinf_0.frag.out @@ -0,0 +1,75 @@ +overflow_underflow_toinf_0.frag +Shader version: 320 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp highp float) +0:9 'correct' ( temp highp float) +0:9 Constant: +0:9 1.000000 +0:10 Sequence +0:10 move second child to first child ( temp highp float) +0:10 'correct1' ( temp highp float) +0:10 Constant: +0:10 1.000000 +0:11 Sequence +0:11 move second child to first child ( temp highp 4-component vector of float) +0:11 'foo' ( temp highp 4-component vector of float) +0:11 Constant: +0:11 0.000000 +0:11 -0.000000 +0:11 +1.#INF +0:11 -1.#INF +0:12 move second child to first child ( temp highp 4-component vector of float) +0:12 'my_FragColor' ( out highp 4-component vector of float) +0:12 Construct vec4 ( temp highp 4-component vector of float) +0:12 Constant: +0:12 0.000000 +0:12 'correct' ( temp highp float) +0:12 'correct1' ( temp highp float) +0:12 Constant: +0:12 1.000000 +0:? Linker Objects +0:? 'my_FragColor' ( out highp 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 320 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp highp float) +0:9 'correct' ( temp highp float) +0:9 Constant: +0:9 1.000000 +0:10 Sequence +0:10 move second child to first child ( temp highp float) +0:10 'correct1' ( temp highp float) +0:10 Constant: +0:10 1.000000 +0:11 Sequence +0:11 move second child to first child ( temp highp 4-component vector of float) +0:11 'foo' ( temp highp 4-component vector of float) +0:11 Constant: +0:11 0.000000 +0:11 -0.000000 +0:11 +1.#INF +0:11 -1.#INF +0:12 move second child to first child ( temp highp 4-component vector of float) +0:12 'my_FragColor' ( out highp 4-component vector of float) +0:12 Construct vec4 ( temp highp 4-component vector of float) +0:12 Constant: +0:12 0.000000 +0:12 'correct' ( temp highp float) +0:12 'correct1' ( temp highp float) +0:12 Constant: +0:12 1.000000 +0:? Linker Objects +0:? 'my_FragColor' ( out highp 4-component vector of float) + diff --git a/Test/baseResults/positive_infinity.frag.out b/Test/baseResults/positive_infinity.frag.out new file mode 100644 index 0000000000..013f829923 --- /dev/null +++ b/Test/baseResults/positive_infinity.frag.out @@ -0,0 +1,51 @@ +positive_infinity.frag +Shader version: 300 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp highp float) +0:9 'correct' ( temp highp float) +0:9 Constant: +0:9 1.000000 +0:10 move second child to first child ( temp highp 4-component vector of float) +0:10 'my_FragColor' ( out highp 4-component vector of float) +0:10 Construct vec4 ( temp highp 4-component vector of float) +0:10 Constant: +0:10 0.000000 +0:10 'correct' ( temp highp float) +0:10 Constant: +0:10 0.000000 +0:10 Constant: +0:10 1.000000 +0:? Linker Objects +0:? 'my_FragColor' ( out highp 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 300 +0:? Sequence +0:4 Function Definition: main( ( global void) +0:4 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp highp float) +0:9 'correct' ( temp highp float) +0:9 Constant: +0:9 1.000000 +0:10 move second child to first child ( temp highp 4-component vector of float) +0:10 'my_FragColor' ( out highp 4-component vector of float) +0:10 Construct vec4 ( temp highp 4-component vector of float) +0:10 Constant: +0:10 0.000000 +0:10 'correct' ( temp highp float) +0:10 Constant: +0:10 0.000000 +0:10 Constant: +0:10 1.000000 +0:? Linker Objects +0:? 'my_FragColor' ( out highp 4-component vector of float) + diff --git a/Test/baseResults/preprocess.arb_shading_language_include.vert.err b/Test/baseResults/preprocess.arb_shading_language_include.vert.err new file mode 100644 index 0000000000..29c6952eae --- /dev/null +++ b/Test/baseResults/preprocess.arb_shading_language_include.vert.err @@ -0,0 +1,4 @@ +ERROR: 0:7: '#include' : Could not process include directive for header name: bar.h +ERROR: 1 compilation errors. No code generated. + + diff --git a/Test/baseResults/preprocess.arb_shading_language_include.vert.out b/Test/baseResults/preprocess.arb_shading_language_include.vert.out new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Test/baseResults/preprocess.inactive_stringify.vert.err b/Test/baseResults/preprocess.inactive_stringify.vert.err new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Test/baseResults/preprocess.inactive_stringify.vert.out b/Test/baseResults/preprocess.inactive_stringify.vert.out new file mode 100755 index 0000000000..70cf1de86d --- /dev/null +++ b/Test/baseResults/preprocess.inactive_stringify.vert.out @@ -0,0 +1,29 @@ +#version 460 + + + + + + + + + + + + + + + + + + + + + + + +void main() +{ + gl_Position = vec4(1.0); +} + diff --git a/Test/baseResults/preprocess.include_directive_missing_extension.vert.err b/Test/baseResults/preprocess.include_directive_missing_extension.vert.err new file mode 100644 index 0000000000..9675dfa092 --- /dev/null +++ b/Test/baseResults/preprocess.include_directive_missing_extension.vert.err @@ -0,0 +1,7 @@ +ERROR: 0:3: '#include' : required extension not requested: Possible extensions include: +GL_GOOGLE_include_directive +GL_ARB_shading_language_include +ERROR: 0:3: '#include' : Could not process include directive for header name: bar.h +ERROR: 2 compilation errors. No code generated. + + diff --git a/Test/baseResults/preprocess.include_directive_missing_extension.vert.out b/Test/baseResults/preprocess.include_directive_missing_extension.vert.out new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Test/baseResults/preprocessor.edge_cases.vert.out b/Test/baseResults/preprocessor.edge_cases.vert.out index 17d9049bfd..6a4ad4a7e1 100644 --- a/Test/baseResults/preprocessor.edge_cases.vert.out +++ b/Test/baseResults/preprocessor.edge_cases.vert.out @@ -10,7 +10,7 @@ -void main(){ +void main() { gl_Position = vec4(3 + 2 + 2 * 4 + 2 + 3 * 2); } diff --git a/Test/baseResults/preprocessor.extensions.vert.out b/Test/baseResults/preprocessor.extensions.vert.out index 57d2e199fb..59c6e8567f 100644 --- a/Test/baseResults/preprocessor.extensions.vert.out +++ b/Test/baseResults/preprocessor.extensions.vert.out @@ -7,6 +7,6 @@ #extension unknown_extension : require -int main(){ +int main() { } diff --git a/Test/baseResults/preprocessor.function_macro.vert.out b/Test/baseResults/preprocessor.function_macro.vert.out index 1280ddf644..84b0a87276 100644 --- a/Test/baseResults/preprocessor.function_macro.vert.out +++ b/Test/baseResults/preprocessor.function_macro.vert.out @@ -13,9 +13,12 @@ -int main(){ + + +int main() { gl_Position = vec4(3 + 1, 3 + 4, 3 + 1); gl_Position = vec4(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12); gl_Position = vec4(4 + 3 + 3); + gl_Position = 4 + 3 + F.a; } diff --git a/Test/baseResults/preprocessor.include.disabled.vert.err b/Test/baseResults/preprocessor.include.disabled.vert.err index 14192046a8..b0b82962ff 100644 --- a/Test/baseResults/preprocessor.include.disabled.vert.err +++ b/Test/baseResults/preprocessor.include.disabled.vert.err @@ -1,12 +1,22 @@ -ERROR: 0:8000: '#include' : required extension not requested: GL_GOOGLE_include_directive +ERROR: 0:8000: '#include' : required extension not requested: Possible extensions include: +GL_GOOGLE_include_directive +GL_ARB_shading_language_include ERROR: 0:8000: '#include' : must be followed by a header name -ERROR: 0:8001: '#include' : required extension not requested: GL_GOOGLE_include_directive +ERROR: 0:8001: '#include' : required extension not requested: Possible extensions include: +GL_GOOGLE_include_directive +GL_ARB_shading_language_include ERROR: 0:8001: '#include' : must be followed by a header name -ERROR: 0:8002: '#include' : required extension not requested: GL_GOOGLE_include_directive +ERROR: 0:8002: '#include' : required extension not requested: Possible extensions include: +GL_GOOGLE_include_directive +GL_ARB_shading_language_include ERROR: 0:8002: '#include' : Could not process include directive for header name: foo -ERROR: 0:8003: '#include' : required extension not requested: GL_GOOGLE_include_directive +ERROR: 0:8003: '#include' : required extension not requested: Possible extensions include: +GL_GOOGLE_include_directive +GL_ARB_shading_language_include ERROR: 0:8003: '#include' : extra content after header name: foo -ERROR: 0:8004: '#include' : required extension not requested: GL_GOOGLE_include_directive +ERROR: 0:8004: '#include' : required extension not requested: Possible extensions include: +GL_GOOGLE_include_directive +GL_ARB_shading_language_include ERROR: 0:8004: '#include' : expected newline after header name: no-eol ERROR: 10 compilation errors. No code generated. diff --git a/Test/baseResults/preprocessor.line.frag.out b/Test/baseResults/preprocessor.line.frag.out index 3e2206f888..76877943ca 100644 --- a/Test/baseResults/preprocessor.line.frag.out +++ b/Test/baseResults/preprocessor.line.frag.out @@ -1,5 +1,5 @@ #version 310 es #line 1 2 #pragma something -void main(){ } +void main() { } diff --git a/Test/baseResults/preprocessor.line.vert.out b/Test/baseResults/preprocessor.line.vert.out index 2bf0903277..fbd851cb2d 100644 --- a/Test/baseResults/preprocessor.line.vert.out +++ b/Test/baseResults/preprocessor.line.vert.out @@ -23,7 +23,7 @@ #line 8 -void main(){ +void main() { gl_Position = vec4(10); } diff --git a/Test/baseResults/preprocessor.pragma.vert.out b/Test/baseResults/preprocessor.pragma.vert.out index ebe1e4a749..8fa3d338da 100644 --- a/Test/baseResults/preprocessor.pragma.vert.out +++ b/Test/baseResults/preprocessor.pragma.vert.out @@ -9,6 +9,6 @@ #pragma once -int main(){ +int main() { } diff --git a/Test/baseResults/preprocessor.simple.vert.out b/Test/baseResults/preprocessor.simple.vert.out index 57b020c676..b54e0a0042 100644 --- a/Test/baseResults/preprocessor.simple.vert.out +++ b/Test/baseResults/preprocessor.simple.vert.out @@ -11,15 +11,15 @@ - float fn(float x){ return x + 4.0;} + float fn(float x) { return x + 4.0; } -int main(){ +int main() { gl_Position = vec4(1); gl_Position = clamp(1, 2, 3); gl_Position = vec4(1); gl_Position = vec4(1, 2); gl_Position = vec4(fn(3)); - []. ++ -- + [].++ -- + - * % / - ! ~ << >> < > <= >= == != @@ -46,16 +46,21 @@ struct S { +void bar(int x) { } + void foo() { S s; - s . member2 + s . member1; - s . member3 . zyx; - s . member2 . xxyz; - s . member2 . yyz; - s . member2 . xxyz(); - s . member2 . yzy; - vec3 a = vec3(0);vec3 b = a . zxyz;vec3 b = a . xxyz;vec3 b = a . yyz;vec3 b = a . xxyz();vec3 b = a . yzy;vec3 b = a . z; + s.member2 + s.member1; + s.member3.zyx; + s.member2.xxyz; + s.member2.yyz; + s.member2.xxyz(); + s.member2.yzy; + for (int i = 0; i < 100; i = i + 1) { + bar(i) + } + vec3 a = vec3(0); vec3 b = a.zxyz; vec3 b = a.xxyz; vec3 b = a.yyz; vec3 b = a.xxyz(); vec3 b = a.yzy; vec3 b = a.z; yyz; diff --git a/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.out b/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.out index 624813a01d..ed1ad0c0ee 100644 --- a/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.out +++ b/Test/baseResults/preprocessor.success_if_parse_would_fail.vert.out @@ -1,4 +1,4 @@ -int x(){ +int x() { something that shouldnt compile; } diff --git a/Test/baseResults/ps_sample.frag.out b/Test/baseResults/ps_sample.frag.out new file mode 100644 index 0000000000..8fc0a198f3 --- /dev/null +++ b/Test/baseResults/ps_sample.frag.out @@ -0,0 +1,47 @@ +ps_sample.frag +ERROR: 0:5: 'location' : the aliases sharing the location 1 must be the same basic type and interpolation qualification +ERROR: 1 compilation errors. No code generated. + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +ERROR: node is still EOpNull! +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'result' ( temp 4-component vector of float) +0:12 'gs_fs' ( smooth in 4-component vector of float) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'fs_out' ( out 4-component vector of float) +0:16 'result' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'gohan' (layout( location=1 component=0) flat in uint) +0:? 'goten' (layout( location=1 component=2) flat sample in 2-component vector of uint) +0:? 'gs_fs' ( smooth in 4-component vector of float) +0:? 'fs_out' ( out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +ERROR: node is still EOpNull! +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'result' ( temp 4-component vector of float) +0:12 'gs_fs' ( smooth in 4-component vector of float) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'fs_out' ( out 4-component vector of float) +0:16 'result' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'gohan' (layout( location=1 component=0) flat in uint) +0:? 'goten' (layout( location=1 component=2) flat sample in 2-component vector of uint) +0:? 'gs_fs' ( smooth in 4-component vector of float) +0:? 'fs_out' ( out 4-component vector of float) + diff --git a/Test/baseResults/ps_uint_int.frag.out b/Test/baseResults/ps_uint_int.frag.out new file mode 100644 index 0000000000..71d2eb9c72 --- /dev/null +++ b/Test/baseResults/ps_uint_int.frag.out @@ -0,0 +1,21 @@ +ps_uint_int.frag +Shader version: 450 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:? Linker Objects +0:? 'u' (layout( location=0 component=0) flat in uint) +0:? 'i' (layout( location=0 component=1) flat in int) + + +Linked fragment stage: + + +Shader version: 450 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:? Linker Objects +0:? 'u' (layout( location=0 component=0) flat in uint) +0:? 'i' (layout( location=0 component=1) flat in int) + diff --git a/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out b/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out new file mode 100644 index 0000000000..e6bc9f56d2 --- /dev/null +++ b/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out @@ -0,0 +1,51 @@ +rayQuery-OpConvertUToAccelerationStructureKHR.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 28 + + Capability Shader + Capability RayQueryKHR + Extension "SPV_KHR_ray_query" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 460 + SourceExtension "GL_EXT_ray_query" + Name 4 "main" + Name 8 "rayQuery" + Name 11 "params" + MemberName 11(params) 0 "tlas" + Name 13 "" + Decorate 11(params) Block + MemberDecorate 11(params) 0 Offset 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeRayQueryKHR + 7: TypePointer Private 6 + 8(rayQuery): 7(ptr) Variable Private + 9: TypeInt 32 0 + 10: TypeVector 9(int) 2 + 11(params): TypeStruct 10(ivec2) + 12: TypePointer PushConstant 11(params) + 13: 12(ptr) Variable PushConstant + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16: TypePointer PushConstant 10(ivec2) + 19: TypeAccelerationStructureKHR + 21: 9(int) Constant 0 + 22: TypeFloat 32 + 23: TypeVector 22(float) 3 + 24: 22(float) Constant 0 + 25: 23(fvec3) ConstantComposite 24 24 24 + 26: 22(float) Constant 1065353216 + 27: 23(fvec3) ConstantComposite 26 26 26 + 4(main): 2 Function None 3 + 5: Label + 17: 16(ptr) AccessChain 13 15 + 18: 10(ivec2) Load 17 + 20: 19 ConvertUToAccelerationStructureKHR 18 + RayQueryInitializeKHR 8(rayQuery) 20 21 21 25 24 27 26 + RayQueryTerminateKHR 8(rayQuery) + Return + FunctionEnd diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out index bf654f7798..9a606ed909 100644 --- a/Test/baseResults/rayQuery-allOps.comp.out +++ b/Test/baseResults/rayQuery-allOps.comp.out @@ -1,12 +1,14 @@ rayQuery-allOps.comp // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 258 +// Generated by (magic number): 8000b +// Id's are bound by 275 Capability Shader Capability RayQueryKHR Capability RayTraversalPrimitiveCullingKHR + Capability RayQueryPositionFetchKHR Extension "SPV_KHR_ray_query" + Extension "SPV_KHR_ray_tracing_position_fetch" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint GLCompute 4 "main" @@ -14,6 +16,7 @@ rayQuery-allOps.comp Source GLSL 460 SourceExtension "GL_EXT_ray_flags_primitive_culling" SourceExtension "GL_EXT_ray_query" + SourceExtension "GL_EXT_ray_tracing_position_fetch" Name 4 "main" Name 6 "doSomething(" Name 10 "Ray" @@ -35,32 +38,33 @@ rayQuery-allOps.comp Name 83 "_mat3x4" Name 143 "t" Name 156 "committedStatus" - Name 241 "o" - Name 243 "d" - Name 253 "Ray" - MemberName 253(Ray) 0 "pos" - MemberName 253(Ray) 1 "tmin" - MemberName 253(Ray) 2 "dir" - MemberName 253(Ray) 3 "tmax" - Name 255 "Rays" - MemberName 255(Rays) 0 "rays" - Name 257 "" + Name 184 "positions" + Name 258 "o" + Name 260 "d" + Name 270 "Ray" + MemberName 270(Ray) 0 "pos" + MemberName 270(Ray) 1 "tmin" + MemberName 270(Ray) 2 "dir" + MemberName 270(Ray) 3 "tmax" + Name 272 "Rays" + MemberName 272(Rays) 0 "rays" + Name 274 "" + Decorate 15(Log) BufferBlock MemberDecorate 15(Log) 0 Offset 0 MemberDecorate 15(Log) 1 Offset 4 - Decorate 15(Log) BufferBlock - Decorate 17 DescriptorSet 0 Decorate 17 Binding 0 - Decorate 50(rtas) DescriptorSet 0 + Decorate 17 DescriptorSet 0 Decorate 50(rtas) Binding 1 - MemberDecorate 253(Ray) 0 Offset 0 - MemberDecorate 253(Ray) 1 Offset 12 - MemberDecorate 253(Ray) 2 Offset 16 - MemberDecorate 253(Ray) 3 Offset 28 - Decorate 254 ArrayStride 32 - MemberDecorate 255(Rays) 0 Offset 0 - Decorate 255(Rays) BufferBlock - Decorate 257 DescriptorSet 0 - Decorate 257 Binding 2 + Decorate 50(rtas) DescriptorSet 0 + MemberDecorate 270(Ray) 0 Offset 0 + MemberDecorate 270(Ray) 1 Offset 12 + MemberDecorate 270(Ray) 2 Offset 16 + MemberDecorate 270(Ray) 3 Offset 28 + Decorate 271 ArrayStride 32 + Decorate 272(Rays) BufferBlock + MemberDecorate 272(Rays) 0 Offset 0 + Decorate 274 Binding 2 + Decorate 274 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 8: TypeFloat 32 @@ -105,13 +109,16 @@ rayQuery-allOps.comp 91: TypeVector 8(float) 2 144: 8(float) Constant 1056964608 175: 14(int) Constant 1 - 198: 14(int) Constant 2 - 231: 14(int) Constant 256 - 253(Ray): TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float) - 254: TypeRuntimeArray 253(Ray) - 255(Rays): TypeStruct 254 - 256: TypePointer Uniform 255(Rays) - 257: 256(ptr) Variable Uniform + 181: 14(int) Constant 3 + 182: TypeArray 9(fvec3) 181 + 183: TypePointer Function 182 + 215: 14(int) Constant 2 + 248: 14(int) Constant 256 + 270(Ray): TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float) + 271: TypeRuntimeArray 270(Ray) + 272(Rays): TypeStruct 271 + 273: TypePointer Uniform 272(Rays) + 274: 273(ptr) Variable Uniform 4(main): 2 Function None 3 5: Label 43(ray): 25(ptr) Variable Function @@ -120,8 +127,9 @@ rayQuery-allOps.comp 83(_mat3x4): 82(ptr) Variable Function 143(t): 35(ptr) Variable Function 156(committedStatus): 68(ptr) Variable Function - 241(o): 29(ptr) Variable Function - 243(d): 29(ptr) Variable Function + 184(positions): 183(ptr) Variable Function + 258(o): 29(ptr) Variable Function + 260(d): 29(ptr) Variable Function 44: 10(Ray) FunctionCall 12(makeRayDesc() Store 43(ray) 44 51: 48 Load 50(rtas) @@ -303,110 +311,130 @@ rayQuery-allOps.comp 180: 2 FunctionCall 6(doSomething() Branch 179 179: Label - Branch 162 - 161: Label - 182: 18(int) RayQueryGetIntersectionGeometryIndexKHR 47(rayQuery) 23 - 183: 66(bool) SGreaterThan 182 19 - SelectionMerge 185 None - BranchConditional 183 184 185 - 184: Label - 186: 2 FunctionCall 6(doSomething() - Branch 185 - 185: Label - 187: 18(int) RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23 - 188: 66(bool) SGreaterThan 187 19 + 185: 182 RayQueryGetIntersectionTriangleVertexPositionsKHR 47(rayQuery) 23 + Store 184(positions) 185 + 186: 35(ptr) AccessChain 184(positions) 19 20 + 187: 8(float) Load 186 + 188: 66(bool) FOrdLessThan 187 27 SelectionMerge 190 None BranchConditional 188 189 190 189: Label - 191: 2 FunctionCall 6(doSomething() + 191: 35(ptr) AccessChain 184(positions) 31 175 + 192: 8(float) Load 191 + 193: 66(bool) FOrdGreaterThan 192 27 Branch 190 190: Label - 192: 18(int) RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23 - 193: 66(bool) SGreaterThan 192 19 - SelectionMerge 195 None - BranchConditional 193 194 195 - 194: Label - 196: 2 FunctionCall 6(doSomething() - Branch 195 - 195: Label - 197: 9(fvec3) RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23 - 199: 8(float) CompositeExtract 197 2 - 200: 66(bool) FOrdGreaterThan 199 27 + 194: 66(bool) Phi 188 179 193 189 + SelectionMerge 196 None + BranchConditional 194 195 196 + 195: Label + 197: 2 FunctionCall 6(doSomething() + Branch 196 + 196: Label + Branch 162 + 161: Label + 199: 18(int) RayQueryGetIntersectionGeometryIndexKHR 47(rayQuery) 23 + 200: 66(bool) SGreaterThan 199 19 SelectionMerge 202 None BranchConditional 200 201 202 201: Label 203: 2 FunctionCall 6(doSomething() Branch 202 202: Label - 204: 9(fvec3) RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23 - 205: 8(float) CompositeExtract 204 0 - 206: 66(bool) FOrdGreaterThan 205 27 - SelectionMerge 208 None - BranchConditional 206 207 208 - 207: Label - 209: 2 FunctionCall 6(doSomething() - Branch 208 - 208: Label - 210: 18(int) RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23 - 211: 66(bool) SGreaterThan 210 19 - SelectionMerge 213 None - BranchConditional 211 212 213 - 212: Label - 214: 2 FunctionCall 6(doSomething() - Branch 213 - 213: Label - 215: 8(float) RayQueryGetIntersectionTKHR 47(rayQuery) 23 - 216: 66(bool) FOrdGreaterThan 215 27 - SelectionMerge 218 None - BranchConditional 216 217 218 - 217: Label - 219: 2 FunctionCall 6(doSomething() - Branch 218 - 218: Label + 204: 18(int) RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23 + 205: 66(bool) SGreaterThan 204 19 + SelectionMerge 207 None + BranchConditional 205 206 207 + 206: Label + 208: 2 FunctionCall 6(doSomething() + Branch 207 + 207: Label + 209: 18(int) RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23 + 210: 66(bool) SGreaterThan 209 19 + SelectionMerge 212 None + BranchConditional 210 211 212 + 211: Label + 213: 2 FunctionCall 6(doSomething() + Branch 212 + 212: Label + 214: 9(fvec3) RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23 + 216: 8(float) CompositeExtract 214 2 + 217: 66(bool) FOrdGreaterThan 216 27 + SelectionMerge 219 None + BranchConditional 217 218 219 + 218: Label + 220: 2 FunctionCall 6(doSomething() + Branch 219 + 219: Label + 221: 9(fvec3) RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23 + 222: 8(float) CompositeExtract 221 0 + 223: 66(bool) FOrdGreaterThan 222 27 + SelectionMerge 225 None + BranchConditional 223 224 225 + 224: Label + 226: 2 FunctionCall 6(doSomething() + Branch 225 + 225: Label + 227: 18(int) RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23 + 228: 66(bool) SGreaterThan 227 19 + SelectionMerge 230 None + BranchConditional 228 229 230 + 229: Label + 231: 2 FunctionCall 6(doSomething() + Branch 230 + 230: Label + 232: 8(float) RayQueryGetIntersectionTKHR 47(rayQuery) 23 + 233: 66(bool) FOrdGreaterThan 232 27 + SelectionMerge 235 None + BranchConditional 233 234 235 + 234: Label + 236: 2 FunctionCall 6(doSomething() + Branch 235 + 235: Label Branch 162 162: Label - 222: 35(ptr) AccessChain 83(_mat3x4) 19 20 - 223: 8(float) Load 222 - 224: 35(ptr) AccessChain 78(_mat4x3) 19 20 - 225: 8(float) Load 224 - 226: 66(bool) FOrdEqual 223 225 - SelectionMerge 228 None - BranchConditional 226 227 228 - 227: Label - 229: 2 FunctionCall 6(doSomething() - Branch 228 - 228: Label - 230: 14(int) RayQueryGetRayFlagsKHR 47(rayQuery) - 232: 66(bool) UGreaterThan 230 231 - SelectionMerge 234 None - BranchConditional 232 233 234 - 233: Label - 235: 2 FunctionCall 6(doSomething() - Branch 234 - 234: Label - 236: 8(float) RayQueryGetRayTMinKHR 47(rayQuery) - 237: 66(bool) FOrdGreaterThan 236 27 - SelectionMerge 239 None - BranchConditional 237 238 239 - 238: Label - 240: 2 FunctionCall 6(doSomething() - Branch 239 - 239: Label - 242: 9(fvec3) RayQueryGetWorldRayOriginKHR 47(rayQuery) - Store 241(o) 242 - 244: 9(fvec3) RayQueryGetWorldRayDirectionKHR 47(rayQuery) - Store 243(d) 244 - 245: 35(ptr) AccessChain 241(o) 20 - 246: 8(float) Load 245 - 247: 35(ptr) AccessChain 243(d) 198 - 248: 8(float) Load 247 - 249: 66(bool) FOrdEqual 246 248 + 239: 35(ptr) AccessChain 83(_mat3x4) 19 20 + 240: 8(float) Load 239 + 241: 35(ptr) AccessChain 78(_mat4x3) 19 20 + 242: 8(float) Load 241 + 243: 66(bool) FOrdEqual 240 242 + SelectionMerge 245 None + BranchConditional 243 244 245 + 244: Label + 246: 2 FunctionCall 6(doSomething() + Branch 245 + 245: Label + 247: 14(int) RayQueryGetRayFlagsKHR 47(rayQuery) + 249: 66(bool) UGreaterThan 247 248 SelectionMerge 251 None BranchConditional 249 250 251 250: Label 252: 2 FunctionCall 6(doSomething() Branch 251 251: Label + 253: 8(float) RayQueryGetRayTMinKHR 47(rayQuery) + 254: 66(bool) FOrdGreaterThan 253 27 + SelectionMerge 256 None + BranchConditional 254 255 256 + 255: Label + 257: 2 FunctionCall 6(doSomething() + Branch 256 + 256: Label + 259: 9(fvec3) RayQueryGetWorldRayOriginKHR 47(rayQuery) + Store 258(o) 259 + 261: 9(fvec3) RayQueryGetWorldRayDirectionKHR 47(rayQuery) + Store 260(d) 261 + 262: 35(ptr) AccessChain 258(o) 20 + 263: 8(float) Load 262 + 264: 35(ptr) AccessChain 260(d) 215 + 265: 8(float) Load 264 + 266: 66(bool) FOrdEqual 263 265 + SelectionMerge 268 None + BranchConditional 266 267 268 + 267: Label + 269: 2 FunctionCall 6(doSomething() + Branch 268 + 268: Label Return FunctionEnd 6(doSomething(): 2 Function None 3 diff --git a/Test/baseResults/rayQuery-allOps.frag.out b/Test/baseResults/rayQuery-allOps.frag.out index 90ebc4a285..814f9313a3 100644 --- a/Test/baseResults/rayQuery-allOps.frag.out +++ b/Test/baseResults/rayQuery-allOps.frag.out @@ -1,6 +1,6 @@ rayQuery-allOps.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 257 Capability Shader @@ -44,22 +44,22 @@ rayQuery-allOps.frag Name 254 "Rays" MemberName 254(Rays) 0 "rays" Name 256 "" + Decorate 15(Log) BufferBlock MemberDecorate 15(Log) 0 Offset 0 MemberDecorate 15(Log) 1 Offset 4 - Decorate 15(Log) BufferBlock - Decorate 17 DescriptorSet 0 Decorate 17 Binding 0 - Decorate 50(rtas) DescriptorSet 0 + Decorate 17 DescriptorSet 0 Decorate 50(rtas) Binding 1 + Decorate 50(rtas) DescriptorSet 0 MemberDecorate 252(Ray) 0 Offset 0 MemberDecorate 252(Ray) 1 Offset 12 MemberDecorate 252(Ray) 2 Offset 16 MemberDecorate 252(Ray) 3 Offset 28 Decorate 253 ArrayStride 32 - MemberDecorate 254(Rays) 0 Offset 0 Decorate 254(Rays) BufferBlock - Decorate 256 DescriptorSet 0 + MemberDecorate 254(Rays) 0 Offset 0 Decorate 256 Binding 2 + Decorate 256 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 8: TypeFloat 32 diff --git a/Test/baseResults/rayQuery-allOps.rgen.out b/Test/baseResults/rayQuery-allOps.rgen.out index b3a93b025c..6b04403c35 100644 --- a/Test/baseResults/rayQuery-allOps.rgen.out +++ b/Test/baseResults/rayQuery-allOps.rgen.out @@ -1,6 +1,6 @@ rayQuery-allOps.rgen // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 257 Capability RayQueryKHR @@ -44,22 +44,22 @@ rayQuery-allOps.rgen Name 254 "Rays" MemberName 254(Rays) 0 "rays" Name 256 "" + Decorate 15(Log) BufferBlock MemberDecorate 15(Log) 0 Offset 0 MemberDecorate 15(Log) 1 Offset 4 - Decorate 15(Log) BufferBlock - Decorate 17 DescriptorSet 0 Decorate 17 Binding 0 - Decorate 50(rtas) DescriptorSet 0 + Decorate 17 DescriptorSet 0 Decorate 50(rtas) Binding 1 + Decorate 50(rtas) DescriptorSet 0 MemberDecorate 252(Ray) 0 Offset 0 MemberDecorate 252(Ray) 1 Offset 12 MemberDecorate 252(Ray) 2 Offset 16 MemberDecorate 252(Ray) 3 Offset 28 Decorate 253 ArrayStride 32 - MemberDecorate 254(Rays) 0 Offset 0 Decorate 254(Rays) BufferBlock - Decorate 256 DescriptorSet 0 + MemberDecorate 254(Rays) 0 Offset 0 Decorate 256 Binding 2 + Decorate 256 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 8: TypeFloat 32 diff --git a/Test/baseResults/rayQuery-global.rgen.out b/Test/baseResults/rayQuery-global.rgen.out index 7b05173599..dfd9840399 100644 --- a/Test/baseResults/rayQuery-global.rgen.out +++ b/Test/baseResults/rayQuery-global.rgen.out @@ -1,6 +1,6 @@ rayQuery-global.rgen // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 44 Capability RayQueryKHR @@ -22,8 +22,8 @@ rayQuery-global.rgen Name 22 "rq2" Name 27 "rtas" Name 40 "rq2" - Decorate 27(rtas) DescriptorSet 0 Decorate 27(rtas) Binding 1 + Decorate 27(rtas) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeRayQueryKHR diff --git a/Test/baseResults/rayQuery-initialize.rgen.out b/Test/baseResults/rayQuery-initialize.rgen.out index f16facd5ab..5e97f807bf 100644 --- a/Test/baseResults/rayQuery-initialize.rgen.out +++ b/Test/baseResults/rayQuery-initialize.rgen.out @@ -1,6 +1,6 @@ rayQuery-initialize.rgen // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 103 Capability RayQueryKHR @@ -40,17 +40,17 @@ rayQuery-initialize.rgen Name 90 "param" Decorate 23(gl_LaunchIDNV) BuiltIn LaunchIdKHR Decorate 28(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR - Decorate 50(rtas) DescriptorSet 0 Decorate 50(rtas) Binding 0 + Decorate 50(rtas) DescriptorSet 0 MemberDecorate 72(Ray) 0 Offset 0 MemberDecorate 72(Ray) 1 Offset 12 MemberDecorate 72(Ray) 2 Offset 16 MemberDecorate 72(Ray) 3 Offset 28 Decorate 73 ArrayStride 32 - MemberDecorate 74(Rays) 0 Offset 0 Decorate 74(Rays) BufferBlock - Decorate 76 DescriptorSet 0 + MemberDecorate 74(Rays) 0 Offset 0 Decorate 76 Binding 2 + Decorate 76 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/rayQuery-no-cse.rgen.out b/Test/baseResults/rayQuery-no-cse.rgen.out index a44c41f14c..eff4123fec 100644 --- a/Test/baseResults/rayQuery-no-cse.rgen.out +++ b/Test/baseResults/rayQuery-no-cse.rgen.out @@ -1,6 +1,6 @@ rayQuery-no-cse.rgen // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 107 Capability RayQueryKHR @@ -42,17 +42,17 @@ rayQuery-no-cse.rgen Name 104 "param" Decorate 23(gl_LaunchIDNV) BuiltIn LaunchIdKHR Decorate 28(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR - Decorate 50(rtas) DescriptorSet 0 Decorate 50(rtas) Binding 0 + Decorate 50(rtas) DescriptorSet 0 MemberDecorate 72(Ray) 0 Offset 0 MemberDecorate 72(Ray) 1 Offset 12 MemberDecorate 72(Ray) 2 Offset 16 MemberDecorate 72(Ray) 3 Offset 28 Decorate 73 ArrayStride 32 - MemberDecorate 74(Rays) 0 Offset 0 Decorate 74(Rays) BufferBlock - Decorate 76 DescriptorSet 0 + MemberDecorate 74(Rays) 0 Offset 0 Decorate 76 Binding 2 + Decorate 76 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/rayQuery-types.comp.out b/Test/baseResults/rayQuery-types.comp.out index 87a1d68352..3a58ab50bb 100644 --- a/Test/baseResults/rayQuery-types.comp.out +++ b/Test/baseResults/rayQuery-types.comp.out @@ -1,6 +1,6 @@ rayQuery-types.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 86 Capability Shader @@ -34,8 +34,8 @@ rayQuery-types.comp Name 73 "objRayOrigin" Name 77 "objToWorld" Name 79 "worldToObj" - Decorate 11(tlas) DescriptorSet 0 Decorate 11(tlas) Binding 0 + Decorate 11(tlas) DescriptorSet 0 Decorate 85 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out index 06a1a5a855..05ebd131ff 100644 --- a/Test/baseResults/rayQuery.rgen.out +++ b/Test/baseResults/rayQuery.rgen.out @@ -1,6 +1,6 @@ rayQuery.rgen // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 44 Capability RayQueryKHR @@ -23,11 +23,11 @@ rayQuery.rgen MemberName 26(block) 0 "dir" MemberName 26(block) 1 "origin" Name 28 "" - Decorate 21(acc0) DescriptorSet 0 Decorate 21(acc0) Binding 0 + Decorate 21(acc0) DescriptorSet 0 + Decorate 26(block) BufferBlock MemberDecorate 26(block) 0 Offset 0 MemberDecorate 26(block) 1 Offset 16 - Decorate 26(block) BufferBlock 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/remap.basic.dcefunc.frag.out b/Test/baseResults/remap.basic.dcefunc.frag.out index c531eba4ce..f5c9a71aa4 100644 --- a/Test/baseResults/remap.basic.dcefunc.frag.out +++ b/Test/baseResults/remap.basic.dcefunc.frag.out @@ -1,6 +1,6 @@ remap.basic.dcefunc.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader diff --git a/Test/baseResults/remap.basic.everything.frag.out b/Test/baseResults/remap.basic.everything.frag.out index d483f20e3a..6c73e595b1 100644 --- a/Test/baseResults/remap.basic.everything.frag.out +++ b/Test/baseResults/remap.basic.everything.frag.out @@ -1,6 +1,6 @@ remap.basic.everything.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24969 Capability Shader diff --git a/Test/baseResults/remap.basic.none.frag.out b/Test/baseResults/remap.basic.none.frag.out index 34f64c8b71..3cff65b659 100644 --- a/Test/baseResults/remap.basic.none.frag.out +++ b/Test/baseResults/remap.basic.none.frag.out @@ -1,6 +1,6 @@ remap.basic.none.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader diff --git a/Test/baseResults/remap.basic.strip.frag.out b/Test/baseResults/remap.basic.strip.frag.out index f1d77691e7..030877ddaf 100644 --- a/Test/baseResults/remap.basic.strip.frag.out +++ b/Test/baseResults/remap.basic.strip.frag.out @@ -1,6 +1,6 @@ remap.basic.strip.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader diff --git a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out index 88c516fb01..a15675ea8f 100644 --- a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out +++ b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out @@ -2,7 +2,7 @@ remap.hlsl.sample.basic.everything.frag WARNING: 0:4: 'immediate sampler state' : unimplemented // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24878 Capability Shader @@ -12,32 +12,32 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented EntryPoint Fragment 5663 "main" 4253 3709 ExecutionMode 5663 OriginUpperLeft ExecutionMode 5663 DepthReplacing - Decorate 4727 DescriptorSet 0 Decorate 4727 Binding 0 - Decorate 3305 DescriptorSet 0 + Decorate 4727 DescriptorSet 0 Decorate 3305 Binding 0 - Decorate 4743 DescriptorSet 0 + Decorate 3305 DescriptorSet 0 Decorate 4743 Binding 2 - Decorate 4807 DescriptorSet 0 + Decorate 4743 DescriptorSet 0 Decorate 4807 Binding 3 - Decorate 5042 DescriptorSet 0 + Decorate 4807 DescriptorSet 0 Decorate 5042 Binding 4 - Decorate 5058 DescriptorSet 0 + Decorate 5042 DescriptorSet 0 Decorate 5058 Binding 5 - Decorate 5122 DescriptorSet 0 + Decorate 5058 DescriptorSet 0 Decorate 5122 Binding 6 - Decorate 3967 DescriptorSet 0 + Decorate 5122 DescriptorSet 0 Decorate 3967 Binding 7 - Decorate 3983 DescriptorSet 0 + Decorate 3967 DescriptorSet 0 Decorate 3983 Binding 8 - Decorate 4047 DescriptorSet 0 + Decorate 3983 DescriptorSet 0 Decorate 4047 Binding 9 - Decorate 3789 DescriptorSet 0 + Decorate 4047 DescriptorSet 0 Decorate 3789 Binding 10 - Decorate 3805 DescriptorSet 0 + Decorate 3789 DescriptorSet 0 Decorate 3805 Binding 11 - Decorate 3869 DescriptorSet 0 + Decorate 3805 DescriptorSet 0 Decorate 3869 Binding 12 + Decorate 3869 DescriptorSet 0 Decorate 4253 Location 0 Decorate 3709 BuiltIn FragDepth 8: TypeVoid diff --git a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out index 465b02409a..5e61daae33 100644 --- a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out +++ b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out @@ -2,7 +2,7 @@ remap.hlsl.sample.basic.none.frag WARNING: 0:4: 'immediate sampler state' : unimplemented // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 198 Capability Shader @@ -64,40 +64,40 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented Name 195 "g_sSamp2d" Name 196 "g_sSamp2D_b" Name 197 "g_tTex1df4a" - Decorate 45(g_tTex1df4) DescriptorSet 0 Decorate 45(g_tTex1df4) Binding 0 - Decorate 49(g_sSamp) DescriptorSet 0 + Decorate 45(g_tTex1df4) DescriptorSet 0 Decorate 49(g_sSamp) Binding 0 - Decorate 60(g_tTex1di4) DescriptorSet 0 + Decorate 49(g_sSamp) DescriptorSet 0 Decorate 60(g_tTex1di4) Binding 2 - Decorate 73(g_tTex1du4) DescriptorSet 0 + Decorate 60(g_tTex1di4) DescriptorSet 0 Decorate 73(g_tTex1du4) Binding 3 - Decorate 83(g_tTex2df4) DescriptorSet 0 + Decorate 73(g_tTex1du4) DescriptorSet 0 Decorate 83(g_tTex2df4) Binding 4 - Decorate 94(g_tTex2di4) DescriptorSet 0 + Decorate 83(g_tTex2df4) DescriptorSet 0 Decorate 94(g_tTex2di4) Binding 5 - Decorate 105(g_tTex2du4) DescriptorSet 0 + Decorate 94(g_tTex2di4) DescriptorSet 0 Decorate 105(g_tTex2du4) Binding 6 - Decorate 117(g_tTex3df4) DescriptorSet 0 + Decorate 105(g_tTex2du4) DescriptorSet 0 Decorate 117(g_tTex3df4) Binding 7 - Decorate 128(g_tTex3di4) DescriptorSet 0 + Decorate 117(g_tTex3df4) DescriptorSet 0 Decorate 128(g_tTex3di4) Binding 8 - Decorate 138(g_tTex3du4) DescriptorSet 0 + Decorate 128(g_tTex3di4) DescriptorSet 0 Decorate 138(g_tTex3du4) Binding 9 - Decorate 151(g_tTexcdf4) DescriptorSet 0 + Decorate 138(g_tTex3du4) DescriptorSet 0 Decorate 151(g_tTexcdf4) Binding 10 - Decorate 160(g_tTexcdi4) DescriptorSet 0 + Decorate 151(g_tTexcdf4) DescriptorSet 0 Decorate 160(g_tTexcdi4) Binding 11 - Decorate 169(g_tTexcdu4) DescriptorSet 0 + Decorate 160(g_tTexcdi4) DescriptorSet 0 Decorate 169(g_tTexcdu4) Binding 12 + Decorate 169(g_tTexcdu4) DescriptorSet 0 Decorate 188(@entryPointOutput.Color) Location 0 Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 195(g_sSamp2d) DescriptorSet 0 Decorate 195(g_sSamp2d) Binding 0 - Decorate 196(g_sSamp2D_b) DescriptorSet 0 + Decorate 195(g_sSamp2d) DescriptorSet 0 Decorate 196(g_sSamp2D_b) Binding 0 - Decorate 197(g_tTex1df4a) DescriptorSet 0 + Decorate 196(g_sSamp2D_b) DescriptorSet 0 Decorate 197(g_tTex1df4a) Binding 1 + Decorate 197(g_tTex1df4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out index 4fb92182e7..a9d041a85a 100644 --- a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out +++ b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out @@ -2,7 +2,7 @@ remap.hlsl.sample.basic.strip.frag WARNING: 0:4: 'immediate sampler state' : unimplemented // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 198 Capability Shader @@ -12,40 +12,40 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented EntryPoint Fragment 4 "main" 188 192 ExecutionMode 4 OriginUpperLeft ExecutionMode 4 DepthReplacing - Decorate 45 DescriptorSet 0 Decorate 45 Binding 0 - Decorate 49 DescriptorSet 0 + Decorate 45 DescriptorSet 0 Decorate 49 Binding 0 - Decorate 60 DescriptorSet 0 + Decorate 49 DescriptorSet 0 Decorate 60 Binding 2 - Decorate 73 DescriptorSet 0 + Decorate 60 DescriptorSet 0 Decorate 73 Binding 3 - Decorate 83 DescriptorSet 0 + Decorate 73 DescriptorSet 0 Decorate 83 Binding 4 - Decorate 94 DescriptorSet 0 + Decorate 83 DescriptorSet 0 Decorate 94 Binding 5 - Decorate 105 DescriptorSet 0 + Decorate 94 DescriptorSet 0 Decorate 105 Binding 6 - Decorate 117 DescriptorSet 0 + Decorate 105 DescriptorSet 0 Decorate 117 Binding 7 - Decorate 128 DescriptorSet 0 + Decorate 117 DescriptorSet 0 Decorate 128 Binding 8 - Decorate 138 DescriptorSet 0 + Decorate 128 DescriptorSet 0 Decorate 138 Binding 9 - Decorate 151 DescriptorSet 0 + Decorate 138 DescriptorSet 0 Decorate 151 Binding 10 - Decorate 160 DescriptorSet 0 + Decorate 151 DescriptorSet 0 Decorate 160 Binding 11 - Decorate 169 DescriptorSet 0 + Decorate 160 DescriptorSet 0 Decorate 169 Binding 12 + Decorate 169 DescriptorSet 0 Decorate 188 Location 0 Decorate 192 BuiltIn FragDepth - Decorate 195 DescriptorSet 0 Decorate 195 Binding 0 - Decorate 196 DescriptorSet 0 + Decorate 195 DescriptorSet 0 Decorate 196 Binding 0 - Decorate 197 DescriptorSet 0 + Decorate 196 DescriptorSet 0 Decorate 197 Binding 1 + Decorate 197 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out index f1e353556b..22acbadc8e 100644 --- a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out +++ b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out @@ -1,6 +1,6 @@ remap.hlsl.templatetypes.everything.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24954 Capability Shader diff --git a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out index 226f2c6ee2..7e653a12ac 100644 --- a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out +++ b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out @@ -1,6 +1,6 @@ remap.hlsl.templatetypes.none.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 160 Capability Shader diff --git a/Test/baseResults/remap.if.everything.frag.out b/Test/baseResults/remap.if.everything.frag.out index 3a521be987..e7e73696d8 100644 --- a/Test/baseResults/remap.if.everything.frag.out +++ b/Test/baseResults/remap.if.everything.frag.out @@ -1,6 +1,6 @@ remap.if.everything.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22855 Capability Shader diff --git a/Test/baseResults/remap.if.none.frag.out b/Test/baseResults/remap.if.none.frag.out index cb2d31b024..d239492c8b 100644 --- a/Test/baseResults/remap.if.none.frag.out +++ b/Test/baseResults/remap.if.none.frag.out @@ -1,6 +1,6 @@ remap.if.none.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 25 Capability Shader diff --git a/Test/baseResults/remap.similar_1a.everything.frag.out b/Test/baseResults/remap.similar_1a.everything.frag.out index 993dc1c157..6de9cb9213 100644 --- a/Test/baseResults/remap.similar_1a.everything.frag.out +++ b/Test/baseResults/remap.similar_1a.everything.frag.out @@ -1,6 +1,6 @@ remap.similar_1a.everything.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24916 Capability Shader diff --git a/Test/baseResults/remap.similar_1a.none.frag.out b/Test/baseResults/remap.similar_1a.none.frag.out index e46b8e19cb..682344815a 100644 --- a/Test/baseResults/remap.similar_1a.none.frag.out +++ b/Test/baseResults/remap.similar_1a.none.frag.out @@ -1,6 +1,6 @@ remap.similar_1a.none.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 86 Capability Shader diff --git a/Test/baseResults/remap.similar_1b.everything.frag.out b/Test/baseResults/remap.similar_1b.everything.frag.out index ffe5446360..86e5ac75ea 100644 --- a/Test/baseResults/remap.similar_1b.everything.frag.out +++ b/Test/baseResults/remap.similar_1b.everything.frag.out @@ -1,6 +1,6 @@ remap.similar_1b.everything.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24916 Capability Shader diff --git a/Test/baseResults/remap.similar_1b.none.frag.out b/Test/baseResults/remap.similar_1b.none.frag.out index 5f5241c398..2433820414 100644 --- a/Test/baseResults/remap.similar_1b.none.frag.out +++ b/Test/baseResults/remap.similar_1b.none.frag.out @@ -1,6 +1,6 @@ remap.similar_1b.none.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 91 Capability Shader diff --git a/Test/baseResults/remap.specconst.comp.out b/Test/baseResults/remap.specconst.comp.out index 2bed3cfe77..905d85b3a9 100644 --- a/Test/baseResults/remap.specconst.comp.out +++ b/Test/baseResults/remap.specconst.comp.out @@ -1,6 +1,6 @@ remap.specconst.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 16104 Capability Shader diff --git a/Test/baseResults/remap.switch.everything.frag.out b/Test/baseResults/remap.switch.everything.frag.out index 443fe685c6..d257093679 100644 --- a/Test/baseResults/remap.switch.everything.frag.out +++ b/Test/baseResults/remap.switch.everything.frag.out @@ -3,7 +3,7 @@ WARNING: 0:5: '' : all default precisions are highp; use precision statements to "precision mediump int; precision highp float;" // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 23990 Capability Shader diff --git a/Test/baseResults/remap.switch.none.frag.out b/Test/baseResults/remap.switch.none.frag.out index 3347dce0de..53d2739594 100644 --- a/Test/baseResults/remap.switch.none.frag.out +++ b/Test/baseResults/remap.switch.none.frag.out @@ -3,7 +3,7 @@ WARNING: 0:5: '' : all default precisions are highp; use precision statements to "precision mediump int; precision highp float;" // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 48 Capability Shader diff --git a/Test/baseResults/remap.uniformarray.everything.frag.out b/Test/baseResults/remap.uniformarray.everything.frag.out index ee1daa756a..902b597af4 100644 --- a/Test/baseResults/remap.uniformarray.everything.frag.out +++ b/Test/baseResults/remap.uniformarray.everything.frag.out @@ -1,6 +1,6 @@ remap.uniformarray.everything.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 25030 Capability Shader diff --git a/Test/baseResults/remap.uniformarray.none.frag.out b/Test/baseResults/remap.uniformarray.none.frag.out index 00e1f57ea3..458d8c78a2 100644 --- a/Test/baseResults/remap.uniformarray.none.frag.out +++ b/Test/baseResults/remap.uniformarray.none.frag.out @@ -1,6 +1,6 @@ remap.uniformarray.none.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 60 Capability Shader @@ -20,8 +20,8 @@ remap.uniformarray.none.frag Decorate 25(inColor) Location 0 Decorate 43(alpha) Location 7 Decorate 54(gl_FragColor) Location 0 - Decorate 59(texSampler2D) DescriptorSet 0 Decorate 59(texSampler2D) Binding 0 + Decorate 59(texSampler2D) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/size b/Test/baseResults/size index a7b99b9692..747b1e7120 100644 --- a/Test/baseResults/size +++ b/Test/baseResults/size @@ -1 +1 @@ -399360 ../build/install/bin/glslangValidator.exe +399360 ../build/install/bin/glslang.exe diff --git a/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out index d512639422..402729d47f 100644 --- a/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out +++ b/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out @@ -1,6 +1,6 @@ spv.1.3.8bitstorage-ssbo.vert // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 28 Capability Shader @@ -19,11 +19,12 @@ spv.1.3.8bitstorage-ssbo.vert Name 18 "gl_VertexIndex" Decorate 9(color) Location 0 Decorate 11 ArrayStride 1 + Decorate 12(Vertices) Block MemberDecorate 12(Vertices) 0 NonWritable MemberDecorate 12(Vertices) 0 Offset 0 - Decorate 12(Vertices) Block - Decorate 14 DescriptorSet 0 + Decorate 14 NonWritable Decorate 14 Binding 0 + Decorate 14 DescriptorSet 0 Decorate 18(gl_VertexIndex) BuiltIn VertexIndex 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out b/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out index 1dce1ea098..e7cd68a529 100644 --- a/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out +++ b/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out @@ -1,6 +1,6 @@ spv.1.3.8bitstorage-ubo.vert // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -19,10 +19,11 @@ spv.1.3.8bitstorage-ubo.vert Name 20 "gl_VertexIndex" Decorate 9(color) Location 0 Decorate 13 ArrayStride 16 - MemberDecorate 14(Vertices) 0 Offset 0 Decorate 14(Vertices) Block - Decorate 16 DescriptorSet 0 + MemberDecorate 14(Vertices) 0 Offset 0 + Decorate 16 NonWritable Decorate 16 Binding 0 + Decorate 16 DescriptorSet 0 Decorate 20(gl_VertexIndex) BuiltIn VertexIndex 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.1.3.coopmat.comp.out b/Test/baseResults/spv.1.3.coopmat.comp.out index d7a9d5ecd2..b14f0577ee 100644 --- a/Test/baseResults/spv.1.3.coopmat.comp.out +++ b/Test/baseResults/spv.1.3.coopmat.comp.out @@ -1,6 +1,6 @@ spv.1.3.coopmat.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 52 Capability Shader @@ -26,11 +26,11 @@ spv.1.3.coopmat.comp Name 35 "block" Decorate 31 ArrayStride 4 Decorate 32 ArrayStride 4 + Decorate 33(Block) Block MemberDecorate 33(Block) 0 Offset 0 MemberDecorate 33(Block) 1 Offset 4194304 - Decorate 33(Block) Block - Decorate 35(block) DescriptorSet 0 Decorate 35(block) Binding 0 + Decorate 35(block) DescriptorSet 0 Decorate 51 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.1.4.LoopControl.frag.out b/Test/baseResults/spv.1.4.LoopControl.frag.out index 0ffffd6089..c3330fce0a 100644 --- a/Test/baseResults/spv.1.4.LoopControl.frag.out +++ b/Test/baseResults/spv.1.4.LoopControl.frag.out @@ -3,7 +3,7 @@ WARNING: 0:15: 'min_iterations' : expected a single integer argument WARNING: 0:15: 'max_iterations' : expected a single integer argument // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 54 Capability Shader diff --git a/Test/baseResults/spv.1.4.NonWritable.frag.out b/Test/baseResults/spv.1.4.NonWritable.frag.out index da3b52c220..d2b76b874f 100644 --- a/Test/baseResults/spv.1.4.NonWritable.frag.out +++ b/Test/baseResults/spv.1.4.NonWritable.frag.out @@ -1,6 +1,6 @@ spv.1.4.NonWritable.frag // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 38 Capability Shader diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.comp.out b/Test/baseResults/spv.1.4.OpCopyLogical.comp.out index 018fd0a708..f82a144cbe 100644 --- a/Test/baseResults/spv.1.4.OpCopyLogical.comp.out +++ b/Test/baseResults/spv.1.4.OpCopyLogical.comp.out @@ -1,6 +1,6 @@ spv.1.4.OpCopyLogical.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 65 Capability Shader @@ -48,35 +48,35 @@ spv.1.4.OpCopyLogical.comp Decorate 15 ArrayStride 8 MemberDecorate 16(MyStruct) 0 Offset 0 MemberDecorate 16(MyStruct) 1 Offset 16 - MemberDecorate 17(SSBO0) 0 Offset 0 Decorate 17(SSBO0) Block - Decorate 19(inBuf) DescriptorSet 0 + MemberDecorate 17(SSBO0) 0 Offset 0 Decorate 19(inBuf) Binding 0 - MemberDecorate 25(SSBO1) 0 Offset 0 + Decorate 19(inBuf) DescriptorSet 0 Decorate 25(SSBO1) Block - Decorate 27(outBuf) DescriptorSet 0 + MemberDecorate 25(SSBO1) 0 Offset 0 Decorate 27(outBuf) Binding 1 + Decorate 27(outBuf) DescriptorSet 0 Decorate 31 ArrayStride 16 MemberDecorate 32(MyStruct) 0 Offset 0 MemberDecorate 32(MyStruct) 1 Offset 32 - MemberDecorate 33(UBO) 0 Offset 0 Decorate 33(UBO) Block - Decorate 35(uBuf) DescriptorSet 0 + MemberDecorate 33(UBO) 0 Offset 0 Decorate 35(uBuf) Binding 2 + Decorate 35(uBuf) DescriptorSet 0 Decorate 47 ArrayStride 48 MemberDecorate 48(Nested) 0 Offset 0 MemberDecorate 48(Nested) 1 Offset 16 - MemberDecorate 49(UBON) 0 Offset 0 Decorate 49(UBON) Block - Decorate 51(uBufN) DescriptorSet 0 + MemberDecorate 49(UBON) 0 Offset 0 Decorate 51(uBufN) Binding 2 + Decorate 51(uBufN) DescriptorSet 0 Decorate 56 ArrayStride 24 MemberDecorate 57(Nested) 0 Offset 0 MemberDecorate 57(Nested) 1 Offset 8 - MemberDecorate 58(SSBO1N) 0 Offset 0 Decorate 58(SSBO1N) Block - Decorate 60(outBufN) DescriptorSet 0 + MemberDecorate 58(SSBO1N) 0 Offset 0 Decorate 60(outBufN) Binding 1 + Decorate 60(outBufN) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out index a2458bafe6..c37bca66dd 100644 --- a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out +++ b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out @@ -1,6 +1,6 @@ spv.1.4.OpCopyLogical.funcall.frag // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 59 Capability Shader @@ -30,12 +30,12 @@ spv.1.4.OpCopyLogical.funcall.frag Name 47 "param" Name 55 "param" MemberDecorate 22(S) 0 ColMajor - MemberDecorate 22(S) 0 Offset 0 MemberDecorate 22(S) 0 MatrixStride 16 - MemberDecorate 23(blockName) 0 Offset 0 + MemberDecorate 22(S) 0 Offset 0 Decorate 23(blockName) Block - Decorate 25 DescriptorSet 0 + MemberDecorate 23(blockName) 0 Offset 0 Decorate 25 Binding 0 + Decorate 25 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out b/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out index 7dcda62cae..0e6f6a6158 100644 --- a/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out +++ b/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out @@ -1,6 +1,6 @@ spv.1.4.OpCopyLogicalBool.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 135 Capability Shader @@ -48,35 +48,35 @@ spv.1.4.OpCopyLogicalBool.comp Decorate 15 ArrayStride 8 MemberDecorate 16(MyStruct) 0 Offset 0 MemberDecorate 16(MyStruct) 1 Offset 16 - MemberDecorate 17(SSBO0) 0 Offset 0 Decorate 17(SSBO0) Block - Decorate 19(inBuf) DescriptorSet 0 + MemberDecorate 17(SSBO0) 0 Offset 0 Decorate 19(inBuf) Binding 0 - MemberDecorate 35(SSBO1) 0 Offset 0 + Decorate 19(inBuf) DescriptorSet 0 Decorate 35(SSBO1) Block - Decorate 37(outBuf) DescriptorSet 0 + MemberDecorate 35(SSBO1) 0 Offset 0 Decorate 37(outBuf) Binding 1 + Decorate 37(outBuf) DescriptorSet 0 Decorate 49 ArrayStride 16 MemberDecorate 50(MyStruct) 0 Offset 0 MemberDecorate 50(MyStruct) 1 Offset 32 - MemberDecorate 51(UBO) 0 Offset 0 Decorate 51(UBO) Block - Decorate 53(uBuf) DescriptorSet 0 + MemberDecorate 51(UBO) 0 Offset 0 Decorate 53(uBuf) Binding 2 + Decorate 53(uBuf) DescriptorSet 0 Decorate 75 ArrayStride 48 MemberDecorate 76(Nested) 0 Offset 0 MemberDecorate 76(Nested) 1 Offset 16 - MemberDecorate 77(UBON) 0 Offset 0 Decorate 77(UBON) Block - Decorate 79(uBufN) DescriptorSet 0 + MemberDecorate 77(UBON) 0 Offset 0 Decorate 79(uBufN) Binding 2 + Decorate 79(uBufN) DescriptorSet 0 Decorate 105 ArrayStride 24 MemberDecorate 106(Nested) 0 Offset 0 MemberDecorate 106(Nested) 1 Offset 8 - MemberDecorate 107(SSBO1N) 0 Offset 0 Decorate 107(SSBO1N) Block - Decorate 109(outBufN) DescriptorSet 0 + MemberDecorate 107(SSBO1N) 0 Offset 0 Decorate 109(outBufN) Binding 1 + Decorate 109(outBufN) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out index e43e954e66..dd7dbbb932 100644 --- a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out +++ b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out @@ -1,6 +1,6 @@ spv.1.4.OpEntryPoint.frag // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 64 Capability Shader @@ -25,16 +25,16 @@ spv.1.4.OpEntryPoint.frag Name 41 "bufferv" Decorate 11(inv) Location 0 Decorate 17(outv) Location 0 - MemberDecorate 23(ubt) 0 Offset 0 Decorate 23(ubt) Block - Decorate 25(uniformv) DescriptorSet 0 + MemberDecorate 23(ubt) 0 Offset 0 Decorate 25(uniformv) Binding 0 - MemberDecorate 31(pushB) 0 Offset 0 + Decorate 25(uniformv) DescriptorSet 0 Decorate 31(pushB) Block - MemberDecorate 39(bbt) 0 Offset 0 + MemberDecorate 31(pushB) 0 Offset 0 Decorate 39(bbt) Block - Decorate 41(bufferv) DescriptorSet 0 + MemberDecorate 39(bbt) 0 Offset 0 Decorate 41(bufferv) Binding 1 + Decorate 41(bufferv) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out b/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out index 835ab13b5d..4a394014b6 100644 --- a/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out +++ b/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out @@ -1,6 +1,6 @@ spv.1.4.OpEntryPoint.opaqueParams.vert // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 45 Capability Shader @@ -18,12 +18,12 @@ spv.1.4.OpEntryPoint.opaqueParams.vert Name 41 "s2D" Name 42 "t2D" Name 43 "s" - Decorate 41(s2D) DescriptorSet 0 Decorate 41(s2D) Binding 0 - Decorate 42(t2D) DescriptorSet 0 + Decorate 41(s2D) DescriptorSet 0 Decorate 42(t2D) Binding 1 - Decorate 43(s) DescriptorSet 0 + Decorate 42(t2D) DescriptorSet 0 Decorate 43(s) Binding 3 + Decorate 43(s) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.1.4.OpSelect.frag.out b/Test/baseResults/spv.1.4.OpSelect.frag.out index b3a5b4d25c..42f2ca70d4 100644 --- a/Test/baseResults/spv.1.4.OpSelect.frag.out +++ b/Test/baseResults/spv.1.4.OpSelect.frag.out @@ -1,6 +1,6 @@ spv.1.4.OpSelect.frag // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 98 Capability Shader diff --git a/Test/baseResults/spv.1.4.constructComposite.comp.out b/Test/baseResults/spv.1.4.constructComposite.comp.out index cbec381710..d228e20d7a 100644 --- a/Test/baseResults/spv.1.4.constructComposite.comp.out +++ b/Test/baseResults/spv.1.4.constructComposite.comp.out @@ -1,6 +1,6 @@ spv.1.4.constructComposite.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader @@ -27,10 +27,10 @@ spv.1.4.constructComposite.comp MemberDecorate 11(sA) 0 Offset 0 MemberDecorate 11(sA) 1 Offset 4 MemberDecorate 12(sB) 0 Offset 0 - MemberDecorate 13(ubo) 0 Offset 0 Decorate 13(ubo) Block - Decorate 15 DescriptorSet 0 + MemberDecorate 13(ubo) 0 Offset 0 Decorate 15 Binding 0 + Decorate 15 DescriptorSet 0 Decorate 26 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.1.4.funcall.array.frag.out b/Test/baseResults/spv.1.4.funcall.array.frag.out index d976bb1f47..a7fec7622b 100644 --- a/Test/baseResults/spv.1.4.funcall.array.frag.out +++ b/Test/baseResults/spv.1.4.funcall.array.frag.out @@ -1,6 +1,6 @@ spv.1.4.funcall.array.frag // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 42 Capability Shader @@ -22,10 +22,10 @@ spv.1.4.funcall.array.frag Name 40 "param" Decorate 27(color) Location 0 Decorate 28 ArrayStride 16 - MemberDecorate 29(ub) 0 Offset 0 Decorate 29(ub) Block - Decorate 31 DescriptorSet 0 + MemberDecorate 29(ub) 0 Offset 0 Decorate 31 Binding 0 + Decorate 31 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.1.4.image.frag.out b/Test/baseResults/spv.1.4.image.frag.out index fadde9752c..5feb0daf84 100644 --- a/Test/baseResults/spv.1.4.image.frag.out +++ b/Test/baseResults/spv.1.4.image.frag.out @@ -1,6 +1,6 @@ spv.1.4.image.frag // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 104 Capability Shader @@ -23,20 +23,20 @@ spv.1.4.image.frag Name 89 "ui2DMS" Name 100 "fragData" Name 103 "value" - Decorate 26(i2D) DescriptorSet 0 Decorate 26(i2D) Binding 1 + Decorate 26(i2D) DescriptorSet 0 Decorate 30(ic2D) Flat Decorate 30(ic2D) Location 0 - Decorate 40(ii2D) DescriptorSet 0 Decorate 40(ii2D) Binding 12 - Decorate 52(ui2D) DescriptorSet 0 + Decorate 40(ii2D) DescriptorSet 0 Decorate 52(ui2D) Binding 12 - Decorate 64(i2DMS) DescriptorSet 0 + Decorate 52(ui2D) DescriptorSet 0 Decorate 64(i2DMS) Binding 9 - Decorate 77(ii2DMS) DescriptorSet 0 + Decorate 64(i2DMS) DescriptorSet 0 Decorate 77(ii2DMS) Binding 13 - Decorate 89(ui2DMS) DescriptorSet 0 + Decorate 77(ii2DMS) DescriptorSet 0 Decorate 89(ui2DMS) Binding 13 + Decorate 89(ui2DMS) DescriptorSet 0 Decorate 100(fragData) Location 0 Decorate 103(value) Flat Decorate 103(value) Location 1 diff --git a/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out b/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out index 9f698db880..507434fdf0 100644 --- a/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out +++ b/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out @@ -1,7 +1,7 @@ spv.1.4.load.bool.array.interface.block.frag Validation failed // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 64 Capability Shader @@ -20,16 +20,16 @@ Validation failed Name 61 "color" Decorate 8 ArrayStride 4 Decorate 10 ArrayStride 12 - MemberDecorate 11(ssbo) 0 Offset 0 Decorate 11(ssbo) Block - Decorate 13 DescriptorSet 0 + MemberDecorate 11(ssbo) 0 Offset 0 Decorate 13 Binding 1 + Decorate 13 DescriptorSet 0 Decorate 16 ArrayStride 16 Decorate 17 ArrayStride 48 - MemberDecorate 18(ub) 0 Offset 0 Decorate 18(ub) Block - Decorate 20 DescriptorSet 0 + MemberDecorate 18(ub) 0 Offset 0 Decorate 20 Binding 0 + Decorate 20 DescriptorSet 0 Decorate 61(color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.1.4.sparseTexture.frag.out b/Test/baseResults/spv.1.4.sparseTexture.frag.out index 965f4c8d7c..214a02f86c 100644 --- a/Test/baseResults/spv.1.4.sparseTexture.frag.out +++ b/Test/baseResults/spv.1.4.sparseTexture.frag.out @@ -1,6 +1,6 @@ spv.1.4.sparseTexture.frag // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 213 Capability Shader @@ -47,21 +47,21 @@ spv.1.4.sparseTexture.frag Name 206 "c3" Name 208 "c4" Name 212 "offsets" - Decorate 29(s2D) DescriptorSet 0 Decorate 29(s2D) Binding 0 + Decorate 29(s2D) DescriptorSet 0 Decorate 33(c2) Location 0 - Decorate 46(is2D) DescriptorSet 0 Decorate 46(is2D) Binding 1 - Decorate 63(us2D) DescriptorSet 0 + Decorate 46(is2D) DescriptorSet 0 Decorate 63(us2D) Binding 2 - Decorate 149(i2D) DescriptorSet 0 + Decorate 63(us2D) DescriptorSet 0 Decorate 149(i2D) Binding 3 + Decorate 149(i2D) DescriptorSet 0 Decorate 152(ic2) Flat Decorate 152(ic2) Location 3 - Decorate 162(ii2DMS) DescriptorSet 0 Decorate 162(ii2DMS) Binding 4 - Decorate 177(ui3D) DescriptorSet 0 + Decorate 162(ii2DMS) DescriptorSet 0 Decorate 177(ui3D) Binding 5 + Decorate 177(ui3D) DescriptorSet 0 Decorate 181(ic3) Flat Decorate 181(ic3) Location 4 Decorate 189(outColor) Location 0 diff --git a/Test/baseResults/spv.1.4.texture.frag.out b/Test/baseResults/spv.1.4.texture.frag.out index ac9f72fba7..352b921019 100644 --- a/Test/baseResults/spv.1.4.texture.frag.out +++ b/Test/baseResults/spv.1.4.texture.frag.out @@ -1,6 +1,6 @@ spv.1.4.texture.frag // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 79 Capability Shader @@ -19,13 +19,13 @@ spv.1.4.texture.frag Name 54 "iLod" Name 76 "t" Name 78 "color" - Decorate 15(texSampler2D) DescriptorSet 0 Decorate 15(texSampler2D) Binding 0 + Decorate 15(texSampler2D) DescriptorSet 0 Decorate 19(coords2D) Location 1 - Decorate 28(itexSampler2D) DescriptorSet 0 Decorate 28(itexSampler2D) Binding 1 - Decorate 40(utexSampler2D) DescriptorSet 0 + Decorate 28(itexSampler2D) DescriptorSet 0 Decorate 40(utexSampler2D) Binding 2 + Decorate 40(utexSampler2D) DescriptorSet 0 Decorate 51(iCoords2D) Flat Decorate 51(iCoords2D) Location 2 Decorate 54(iLod) Flat diff --git a/Test/baseResults/spv.1.6.conditionalDiscard.frag.out b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out index d671476ceb..aa631f3a96 100644 --- a/Test/baseResults/spv.1.6.conditionalDiscard.frag.out +++ b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out @@ -1,22 +1,23 @@ spv.1.6.conditionalDiscard.frag // Module Version 10600 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 36 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 13 17 34 - ExecutionMode 4 OriginLowerLeft + 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 13(tex) DescriptorSet 0 Decorate 17(coord) Location 0 + Decorate 34(gl_FragColor) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.1.6.helperInvocation.frag.out b/Test/baseResults/spv.1.6.helperInvocation.frag.out index 9ba8a5c176..30a5c6a739 100644 --- a/Test/baseResults/spv.1.6.helperInvocation.frag.out +++ b/Test/baseResults/spv.1.6.helperInvocation.frag.out @@ -1,13 +1,13 @@ spv.1.6.helperInvocation.frag // Module Version 10600 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 8 15 - ExecutionMode 4 OriginLowerLeft + ExecutionMode 4 OriginUpperLeft Source ESSL 310 Name 4 "main" Name 8 "gl_HelperInvocation" diff --git a/Test/baseResults/spv.1.6.helperInvocation.memmodel.frag.out b/Test/baseResults/spv.1.6.helperInvocation.memmodel.frag.out new file mode 100644 index 0000000000..10ca5df2b2 --- /dev/null +++ b/Test/baseResults/spv.1.6.helperInvocation.memmodel.frag.out @@ -0,0 +1,48 @@ +spv.1.6.helperInvocation.memmodel.frag +// Module Version 10600 +// Generated by (magic number): 8000b +// Id's are bound by 21 + + Capability Shader + Capability VulkanMemoryModelKHR + Capability DemoteToHelperInvocationEXT + Extension "SPV_EXT_demote_to_helper_invocation" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical VulkanKHR + EntryPoint Fragment 4 "main" 9 14 + ExecutionMode 4 OriginUpperLeft + Source ESSL 310 + SourceExtension "GL_EXT_demote_to_helper_invocation" + Name 4 "main" + Name 7 "B" + MemberName 7(B) 0 "o" + Name 9 "" + Name 14 "gl_HelperInvocation" + Decorate 7(B) Block + MemberDecorate 7(B) 0 Offset 0 + Decorate 9 Binding 0 + Decorate 9 DescriptorSet 0 + Decorate 14(gl_HelperInvocation) BuiltIn HelperInvocation + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7(B): TypeStruct 6(float) + 8: TypePointer StorageBuffer 7(B) + 9: 8(ptr) Variable StorageBuffer + 10: TypeInt 32 1 + 11: 10(int) Constant 0 + 12: TypeBool + 13: TypePointer Input 12(bool) +14(gl_HelperInvocation): 13(ptr) Variable Input + 16: 6(float) Constant 1065353216 + 17: 6(float) Constant 0 + 19: TypePointer StorageBuffer 6(float) + 4(main): 2 Function None 3 + 5: Label + DemoteToHelperInvocationEXT + 15: 12(bool) Load 14(gl_HelperInvocation) Volatile + 18: 6(float) Select 15 16 17 + 20: 19(ptr) AccessChain 9 11 + Store 20 18 + Return + FunctionEnd diff --git a/Test/baseResults/spv.1.6.quad.frag.out b/Test/baseResults/spv.1.6.quad.frag.out new file mode 100644 index 0000000000..7b31d7a1cf --- /dev/null +++ b/Test/baseResults/spv.1.6.quad.frag.out @@ -0,0 +1,76 @@ +spv.1.6.quad.frag +// Module Version 10600 +// Generated by (magic number): 8000b +// Id's are bound by 39 + + Capability Shader + Capability GroupNonUniform + Capability GroupNonUniformVote + Capability QuadControlKHR + Extension "SPV_KHR_quad_control" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 16 33 + ExecutionMode 4 QuadDerivativesKHR + ExecutionMode 4 RequireFullQuadsKHR + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + SourceExtension "GL_EXT_shader_quad_control" + SourceExtension "GL_KHR_shader_subgroup_basic" + SourceExtension "GL_KHR_shader_subgroup_vote" + Name 4 "main" + Name 8 "bTemp" + Name 16 "iInput" + Name 33 "bOut" + Decorate 16(iInput) Flat + Decorate 16(iInput) Location 0 + Decorate 33(bOut) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypePointer Function 6(bool) + 9: 6(bool) ConstantFalse + 14: TypeInt 32 1 + 15: TypePointer Input 14(int) + 16(iInput): 15(ptr) Variable Input + 18: 14(int) Constant 0 + 20: TypeInt 32 0 + 21: 20(int) Constant 3 + 32: TypePointer Output 14(int) + 33(bOut): 32(ptr) Variable Output + 35: 6(bool) ConstantTrue + 37: 14(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + 8(bTemp): 7(ptr) Variable Function + Store 8(bTemp) 9 + 10: 6(bool) Load 8(bTemp) + 11: 6(bool) LogicalNot 10 + SelectionMerge 13 None + BranchConditional 11 12 13 + 12: Label + 17: 14(int) Load 16(iInput) + 19: 6(bool) SGreaterThan 17 18 + 22: 6(bool) GroupNonUniformQuadAllKHR 19 + Branch 13 + 13: Label + 23: 6(bool) Phi 10 5 22 12 + Store 8(bTemp) 23 + 24: 6(bool) Load 8(bTemp) + 25: 6(bool) LogicalNot 24 + SelectionMerge 27 None + BranchConditional 25 26 27 + 26: Label + 28: 14(int) Load 16(iInput) + 29: 6(bool) SGreaterThan 28 18 + 30: 6(bool) GroupNonUniformQuadAnyKHR 29 + Branch 27 + 27: Label + 31: 6(bool) Phi 24 13 30 26 + Store 8(bTemp) 31 + 34: 6(bool) Load 8(bTemp) + 36: 6(bool) LogicalEqual 34 35 + 38: 14(int) Select 36 37 18 + Store 33(bOut) 38 + Return + FunctionEnd diff --git a/Test/baseResults/spv.1.6.samplerBuffer.frag.out b/Test/baseResults/spv.1.6.samplerBuffer.frag.out new file mode 100644 index 0000000000..eef89e9364 --- /dev/null +++ b/Test/baseResults/spv.1.6.samplerBuffer.frag.out @@ -0,0 +1,43 @@ +spv.1.6.samplerBuffer.frag +// Module Version 10600 +// Generated by (magic number): 8000b +// Id's are bound by 23 + + Capability Shader + Capability SampledBuffer + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 13 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "o" + Name 13 "sampB" + Decorate 9(o) Location 0 + Decorate 13(sampB) Binding 0 + Decorate 13(sampB) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(o): 8(ptr) Variable Output + 10: TypeInt 32 1 + 11: TypeImage 10(int) Buffer sampled format:Unknown + 12: TypePointer UniformConstant 11 + 13(sampB): 12(ptr) Variable UniformConstant + 17: 6(float) Constant 1120403456 + 19: TypeInt 32 0 + 20: 19(int) Constant 3 + 21: TypePointer Output 6(float) + 4(main): 2 Function None 3 + 5: Label + 14: 11 Load 13(sampB) + 15: 10(int) ImageQuerySize 14 + 16: 6(float) ConvertSToF 15 + 18: 6(float) FDiv 16 17 + 22: 21(ptr) AccessChain 9(o) 20 + Store 22 18 + Return + FunctionEnd diff --git a/Test/baseResults/spv.1.6.separate.frag.out b/Test/baseResults/spv.1.6.separate.frag.out new file mode 100644 index 0000000000..3037fab1b2 --- /dev/null +++ b/Test/baseResults/spv.1.6.separate.frag.out @@ -0,0 +1,52 @@ +spv.1.6.separate.frag +// Module Version 10600 +// Generated by (magic number): 8000b +// Id's are bound by 27 + + Capability Shader + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 13 18 24 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 9 "texBuffer" + Name 13 "s" + Name 18 "itexBuffer" + Name 24 "utexBuffer" + Decorate 9(texBuffer) Binding 1 + Decorate 9(texBuffer) DescriptorSet 0 + Decorate 13(s) Binding 0 + Decorate 13(s) DescriptorSet 0 + Decorate 18(itexBuffer) Binding 2 + Decorate 18(itexBuffer) DescriptorSet 0 + Decorate 24(utexBuffer) Binding 3 + Decorate 24(utexBuffer) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeImage 6(float) Buffer sampled format:Unknown + 8: TypePointer UniformConstant 7 + 9(texBuffer): 8(ptr) Variable UniformConstant + 11: TypeSampler + 12: TypePointer UniformConstant 11 + 13(s): 12(ptr) Variable UniformConstant + 15: TypeInt 32 1 + 16: TypeImage 15(int) Buffer sampled format:Unknown + 17: TypePointer UniformConstant 16 + 18(itexBuffer): 17(ptr) Variable UniformConstant + 21: TypeInt 32 0 + 22: TypeImage 21(int) Buffer sampled format:Unknown + 23: TypePointer UniformConstant 22 + 24(utexBuffer): 23(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 10: 7 Load 9(texBuffer) + 14: 11 Load 13(s) + 19: 16 Load 18(itexBuffer) + 20: 11 Load 13(s) + 25: 22 Load 24(utexBuffer) + 26: 11 Load 13(s) + Return + FunctionEnd diff --git a/Test/baseResults/spv.1.6.specConstant.comp.out b/Test/baseResults/spv.1.6.specConstant.comp.out index 7485f04af8..13eb93c6a6 100644 --- a/Test/baseResults/spv.1.6.specConstant.comp.out +++ b/Test/baseResults/spv.1.6.specConstant.comp.out @@ -1,6 +1,6 @@ spv.1.6.specConstant.comp // Module Version 10600 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 39 Capability Shader @@ -18,10 +18,10 @@ spv.1.6.specConstant.comp 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 + MemberDecorate 16(bn) 0 Offset 0 Decorate 18(bi) Binding 0 + Decorate 18(bi) DescriptorSet 0 Decorate 25 SpecId 18 Decorate 26 SpecId 19 2: TypeVoid diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out index 42c99953c9..8c28d918aa 100644 --- a/Test/baseResults/spv.100ops.frag.out +++ b/Test/baseResults/spv.100ops.frag.out @@ -1,6 +1,6 @@ spv.100ops.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 49 Capability Shader diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out index 29c7d853e5..8e6c1182f4 100644 --- a/Test/baseResults/spv.130.frag.out +++ b/Test/baseResults/spv.130.frag.out @@ -3,7 +3,7 @@ WARNING: 0:31: '#extension' : extension is only partially supported: GL_ARB_gpu_ Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 205 Capability Shader @@ -59,45 +59,45 @@ Validation failed Name 203 "s1D" Name 204 "s2DS" Decorate 17(o) Location 0 - Decorate 21(samp2D) DescriptorSet 0 Decorate 21(samp2D) Binding 2 - Decorate 37(samp2DA) DescriptorSet 0 + Decorate 21(samp2D) DescriptorSet 0 Decorate 37(samp2DA) Binding 5 - Decorate 47(samp2DR) DescriptorSet 0 + Decorate 37(samp2DA) DescriptorSet 0 Decorate 47(samp2DR) Binding 4 - Decorate 55(samp2DS) DescriptorSet 0 + Decorate 47(samp2DR) DescriptorSet 0 Decorate 55(samp2DS) Binding 3 + Decorate 55(samp2DS) DescriptorSet 0 Decorate 68(io) Location 1 - Decorate 72(Sca) DescriptorSet 0 Decorate 72(Sca) Binding 6 + Decorate 72(Sca) DescriptorSet 0 Decorate 79(i) Location 0 - Decorate 87(Isca) DescriptorSet 0 Decorate 87(Isca) Binding 7 + Decorate 87(Isca) DescriptorSet 0 Decorate 99(uo) Location 2 - Decorate 103(Usca) DescriptorSet 0 Decorate 103(Usca) Binding 8 - Decorate 118(Scas) DescriptorSet 0 + Decorate 103(Usca) DescriptorSet 0 Decorate 118(Scas) Binding 9 - Decorate 167(sampC) DescriptorSet 0 + Decorate 118(Scas) DescriptorSet 0 Decorate 167(sampC) Binding 1 + Decorate 167(sampC) DescriptorSet 0 Decorate 173(gl_ClipDistance) BuiltIn ClipDistance Decorate 184(fflat) Flat Decorate 184(fflat) Location 1 Decorate 185(fsmooth) Location 2 Decorate 186(fnop) NoPerspective Decorate 186(fnop) Location 3 - Decorate 193(bounds) DescriptorSet 0 Decorate 193(bounds) Binding 0 - Decorate 194(s2D) DescriptorSet 0 + Decorate 193(bounds) DescriptorSet 0 Decorate 194(s2D) Binding 0 - Decorate 195(s2DR) DescriptorSet 0 + Decorate 194(s2D) DescriptorSet 0 Decorate 195(s2DR) Binding 0 - Decorate 199(s2DRS) DescriptorSet 0 + Decorate 195(s2DR) DescriptorSet 0 Decorate 199(s2DRS) Binding 0 - Decorate 203(s1D) DescriptorSet 0 + Decorate 199(s2DRS) DescriptorSet 0 Decorate 203(s1D) Binding 0 - Decorate 204(s2DS) DescriptorSet 0 + Decorate 203(s1D) DescriptorSet 0 Decorate 204(s2DS) Binding 0 + Decorate 204(s2DS) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 14: TypeFloat 32 diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out index a51788282c..be76ab44ec 100644 --- a/Test/baseResults/spv.140.frag.out +++ b/Test/baseResults/spv.140.frag.out @@ -1,7 +1,7 @@ spv.140.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 96 Capability Shader @@ -40,37 +40,37 @@ Validation failed Decorate 23(o) Location 0 Decorate 28(gl_ClipDistance) BuiltIn ClipDistance Decorate 38(k) Location 0 - Decorate 50(sampR) DescriptorSet 0 Decorate 50(sampR) Binding 0 - Decorate 58(sampB) DescriptorSet 0 + Decorate 50(sampR) DescriptorSet 0 Decorate 58(sampB) Binding 1 - Decorate 82(samp2Da) DescriptorSet 0 + Decorate 58(sampB) DescriptorSet 0 Decorate 82(samp2Da) Binding 0 + Decorate 82(samp2Da) DescriptorSet 0 Decorate 85 ArrayStride 64 Decorate 86 ArrayStride 64 + Decorate 87(bn) Block MemberDecorate 87(bn) 0 RowMajor - MemberDecorate 87(bn) 0 Offset 0 MemberDecorate 87(bn) 0 MatrixStride 16 + MemberDecorate 87(bn) 0 Offset 0 MemberDecorate 87(bn) 1 ColMajor - MemberDecorate 87(bn) 1 Offset 256 MemberDecorate 87(bn) 1 MatrixStride 16 + MemberDecorate 87(bn) 1 Offset 256 MemberDecorate 87(bn) 2 RowMajor - MemberDecorate 87(bn) 2 Offset 512 MemberDecorate 87(bn) 2 MatrixStride 16 + MemberDecorate 87(bn) 2 Offset 512 MemberDecorate 87(bn) 3 ColMajor - MemberDecorate 87(bn) 3 Offset 576 MemberDecorate 87(bn) 3 MatrixStride 16 + MemberDecorate 87(bn) 3 Offset 576 MemberDecorate 87(bn) 4 RowMajor - MemberDecorate 87(bn) 4 Offset 1024 MemberDecorate 87(bn) 4 MatrixStride 16 - Decorate 87(bn) Block - Decorate 89 DescriptorSet 0 + MemberDecorate 87(bn) 4 Offset 1024 Decorate 89 Binding 0 + Decorate 89 DescriptorSet 0 Decorate 91 ArrayStride 16 - MemberDecorate 92(bi) 0 Offset 0 Decorate 92(bi) Block - Decorate 95(bname) DescriptorSet 0 + MemberDecorate 92(bi) 0 Offset 0 Decorate 95(bname) Binding 0 + Decorate 95(bname) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out index 0ad3337d4b..1acde693c4 100644 --- a/Test/baseResults/spv.150.geom.out +++ b/Test/baseResults/spv.150.geom.out @@ -1,6 +1,6 @@ spv.150.geom // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 71 Capability Geometry @@ -38,27 +38,27 @@ spv.150.geom MemberName 68(toFragment) 0 "color" Name 70 "toF" Decorate 8(fromVertex) Block - Decorate 10 Location 1 Decorate 10 Stream 3 + Decorate 10 Location 1 Decorate 13(fromVertex) Block Decorate 18(fromV) Location 0 + Decorate 27(gl_PerVertex) Block MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 27(gl_PerVertex) Block Decorate 29 Stream 0 + Decorate 30(gl_PerVertex) Block MemberDecorate 30(gl_PerVertex) 0 BuiltIn Position MemberDecorate 30(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 30(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 30(gl_PerVertex) Block - Decorate 47(gl_PrimitiveID) Stream 0 Decorate 47(gl_PrimitiveID) BuiltIn PrimitiveId + Decorate 47(gl_PrimitiveID) Stream 0 Decorate 49(gl_PrimitiveIDIn) BuiltIn PrimitiveId - Decorate 51(gl_Layer) Stream 0 Decorate 51(gl_Layer) BuiltIn Layer + Decorate 51(gl_Layer) Stream 0 Decorate 68(toFragment) Block - Decorate 70(toF) Location 0 Decorate 70(toF) Stream 3 + Decorate 70(toF) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out index 2b09f4be1f..a5513aced1 100644 --- a/Test/baseResults/spv.150.vert.out +++ b/Test/baseResults/spv.150.vert.out @@ -1,6 +1,6 @@ spv.150.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 63 Capability Shader @@ -28,16 +28,16 @@ spv.150.vert Name 40 "i" Name 47 "s2D" Name 62 "ui" - MemberDecorate 11(gl_PerVertex) 0 Invariant + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 11(gl_PerVertex) 0 Invariant MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 11(gl_PerVertex) Block Decorate 17(iv4) Location 0 Decorate 23(ps) Location 1 Decorate 38(s2out) Location 0 - Decorate 47(s2D) DescriptorSet 0 Decorate 47(s2D) Binding 0 + Decorate 47(s2D) DescriptorSet 0 Decorate 62(ui) Location 2 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.16bitstorage-int.frag.out b/Test/baseResults/spv.16bitstorage-int.frag.out index a91b4e4da5..07db828ee1 100644 --- a/Test/baseResults/spv.16bitstorage-int.frag.out +++ b/Test/baseResults/spv.16bitstorage-int.frag.out @@ -1,7 +1,7 @@ spv.16bitstorage-int.frag // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 171 +// Generated by (magic number): 8000b +// Id's are bound by 180 Capability Shader Capability StorageUniformBufferBlock16 @@ -83,6 +83,7 @@ spv.16bitstorage-int.frag Decorate 13 ArrayStride 16 Decorate 15 ArrayStride 4 Decorate 16 ArrayStride 2 + Decorate 17(B2) BufferBlock MemberDecorate 17(B2) 0 Offset 0 MemberDecorate 17(B2) 1 Offset 4 MemberDecorate 17(B2) 2 Offset 8 @@ -91,14 +92,14 @@ spv.16bitstorage-int.frag MemberDecorate 17(B2) 5 Offset 40 MemberDecorate 17(B2) 6 Offset 72 MemberDecorate 17(B2) 7 Offset 472 - Decorate 17(B2) BufferBlock - Decorate 19(b2) DescriptorSet 0 Decorate 19(b2) Binding 1 + Decorate 19(b2) DescriptorSet 0 Decorate 22 ArrayStride 16 MemberDecorate 23(S) 0 Offset 0 MemberDecorate 23(S) 1 Offset 4 MemberDecorate 23(S) 2 Offset 8 Decorate 24 ArrayStride 16 + Decorate 25(B1) Block MemberDecorate 25(B1) 0 Offset 0 MemberDecorate 25(B1) 1 Offset 4 MemberDecorate 25(B1) 2 Offset 8 @@ -106,9 +107,8 @@ spv.16bitstorage-int.frag MemberDecorate 25(B1) 4 Offset 48 MemberDecorate 25(B1) 5 Offset 64 MemberDecorate 25(B1) 6 Offset 96 - Decorate 25(B1) Block - Decorate 27(b1) DescriptorSet 0 Decorate 27(b1) Binding 0 + Decorate 27(b1) DescriptorSet 0 Decorate 44 ArrayStride 16 MemberDecorate 45(S) 0 Offset 0 MemberDecorate 45(S) 1 Offset 4 @@ -116,6 +116,7 @@ spv.16bitstorage-int.frag Decorate 46 ArrayStride 16 Decorate 47 ArrayStride 16 Decorate 48 ArrayStride 16 + Decorate 49(B5) Block MemberDecorate 49(B5) 0 Offset 0 MemberDecorate 49(B5) 1 Offset 4 MemberDecorate 49(B5) 2 Offset 8 @@ -124,29 +125,28 @@ spv.16bitstorage-int.frag MemberDecorate 49(B5) 5 Offset 64 MemberDecorate 49(B5) 6 Offset 96 MemberDecorate 49(B5) 7 Offset 1696 - Decorate 49(B5) Block - Decorate 51(b5) DescriptorSet 0 Decorate 51(b5) Binding 2 + Decorate 51(b5) DescriptorSet 0 MemberDecorate 88(S2) 0 ColMajor - MemberDecorate 88(S2) 0 Offset 0 MemberDecorate 88(S2) 0 MatrixStride 16 + MemberDecorate 88(S2) 0 Offset 0 MemberDecorate 88(S2) 1 Offset 64 MemberDecorate 88(S2) 2 Offset 68 MemberDecorate 89(S3) 0 Offset 0 + Decorate 90(B4) BufferBlock MemberDecorate 90(B4) 0 Offset 0 MemberDecorate 90(B4) 1 Offset 80 - Decorate 90(B4) BufferBlock - Decorate 92(b4) DescriptorSet 0 Decorate 92(b4) Binding 4 + Decorate 92(b4) DescriptorSet 0 MemberDecorate 93(S2) 0 RowMajor - MemberDecorate 93(S2) 0 Offset 0 MemberDecorate 93(S2) 0 MatrixStride 16 + MemberDecorate 93(S2) 0 Offset 0 MemberDecorate 93(S2) 1 Offset 64 MemberDecorate 93(S2) 2 Offset 68 - MemberDecorate 94(B3) 0 Offset 0 Decorate 94(B3) BufferBlock - Decorate 96(b3) DescriptorSet 0 + MemberDecorate 94(B3) 0 Offset 0 Decorate 96(b3) Binding 3 + Decorate 96(b3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 16 1 @@ -335,5 +335,17 @@ spv.16bitstorage-int.frag 169: 6(int16_t) SConvert 58 170: 28(ptr) AccessChain 19(b2) 21 Store 170 169 + 171: 28(ptr) AccessChain 27(b1) 21 + 172: 6(int16_t) Load 171 + 173: 28(ptr) AccessChain 19(b2) 21 + Store 173 172 + 174: 42(ptr) AccessChain 27(b1) 32 + 175: 7(i16vec2) Load 174 + 176: 42(ptr) AccessChain 19(b2) 32 + Store 176 175 + 177: 34(ptr) AccessChain 27(b1) 33 + 178: 8(i16vec3) Load 177 + 179: 34(ptr) AccessChain 19(b2) 33 + Store 179 178 Return FunctionEnd diff --git a/Test/baseResults/spv.16bitstorage-uint.frag.out b/Test/baseResults/spv.16bitstorage-uint.frag.out index f90d0c142f..8b169f3ae8 100644 --- a/Test/baseResults/spv.16bitstorage-uint.frag.out +++ b/Test/baseResults/spv.16bitstorage-uint.frag.out @@ -1,7 +1,7 @@ spv.16bitstorage-uint.frag // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 173 +// Generated by (magic number): 8000b +// Id's are bound by 182 Capability Shader Capability StorageUniformBufferBlock16 @@ -83,6 +83,7 @@ spv.16bitstorage-uint.frag Decorate 13 ArrayStride 16 Decorate 15 ArrayStride 4 Decorate 16 ArrayStride 2 + Decorate 17(B2) BufferBlock MemberDecorate 17(B2) 0 Offset 0 MemberDecorate 17(B2) 1 Offset 4 MemberDecorate 17(B2) 2 Offset 8 @@ -91,14 +92,14 @@ spv.16bitstorage-uint.frag MemberDecorate 17(B2) 5 Offset 40 MemberDecorate 17(B2) 6 Offset 72 MemberDecorate 17(B2) 7 Offset 472 - Decorate 17(B2) BufferBlock - Decorate 19(b2) DescriptorSet 0 Decorate 19(b2) Binding 1 + Decorate 19(b2) DescriptorSet 0 Decorate 22 ArrayStride 16 MemberDecorate 23(S) 0 Offset 0 MemberDecorate 23(S) 1 Offset 4 MemberDecorate 23(S) 2 Offset 8 Decorate 24 ArrayStride 16 + Decorate 25(B1) Block MemberDecorate 25(B1) 0 Offset 0 MemberDecorate 25(B1) 1 Offset 4 MemberDecorate 25(B1) 2 Offset 8 @@ -106,9 +107,8 @@ spv.16bitstorage-uint.frag MemberDecorate 25(B1) 4 Offset 48 MemberDecorate 25(B1) 5 Offset 64 MemberDecorate 25(B1) 6 Offset 96 - Decorate 25(B1) Block - Decorate 27(b1) DescriptorSet 0 Decorate 27(b1) Binding 0 + Decorate 27(b1) DescriptorSet 0 Decorate 44 ArrayStride 16 MemberDecorate 45(S) 0 Offset 0 MemberDecorate 45(S) 1 Offset 4 @@ -116,6 +116,7 @@ spv.16bitstorage-uint.frag Decorate 46 ArrayStride 16 Decorate 47 ArrayStride 16 Decorate 48 ArrayStride 16 + Decorate 49(B5) Block MemberDecorate 49(B5) 0 Offset 0 MemberDecorate 49(B5) 1 Offset 4 MemberDecorate 49(B5) 2 Offset 8 @@ -124,29 +125,28 @@ spv.16bitstorage-uint.frag MemberDecorate 49(B5) 5 Offset 64 MemberDecorate 49(B5) 6 Offset 96 MemberDecorate 49(B5) 7 Offset 1696 - Decorate 49(B5) Block - Decorate 51(b5) DescriptorSet 0 Decorate 51(b5) Binding 2 + Decorate 51(b5) DescriptorSet 0 MemberDecorate 89(S2) 0 ColMajor - MemberDecorate 89(S2) 0 Offset 0 MemberDecorate 89(S2) 0 MatrixStride 16 + MemberDecorate 89(S2) 0 Offset 0 MemberDecorate 89(S2) 1 Offset 64 MemberDecorate 89(S2) 2 Offset 68 MemberDecorate 90(S3) 0 Offset 0 + Decorate 91(B4) BufferBlock MemberDecorate 91(B4) 0 Offset 0 MemberDecorate 91(B4) 1 Offset 80 - Decorate 91(B4) BufferBlock - Decorate 93(b4) DescriptorSet 0 Decorate 93(b4) Binding 4 + Decorate 93(b4) DescriptorSet 0 MemberDecorate 94(S2) 0 RowMajor - MemberDecorate 94(S2) 0 Offset 0 MemberDecorate 94(S2) 0 MatrixStride 16 + MemberDecorate 94(S2) 0 Offset 0 MemberDecorate 94(S2) 1 Offset 64 MemberDecorate 94(S2) 2 Offset 68 - MemberDecorate 95(B3) 0 Offset 0 Decorate 95(B3) BufferBlock - Decorate 97(b3) DescriptorSet 0 + MemberDecorate 95(B3) 0 Offset 0 Decorate 97(b3) Binding 3 + Decorate 97(b3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 16 0 @@ -337,5 +337,17 @@ spv.16bitstorage-uint.frag 171: 6(int16_t) UConvert 170 172: 28(ptr) AccessChain 19(b2) 21 Store 172 171 + 173: 28(ptr) AccessChain 27(b1) 21 + 174: 6(int16_t) Load 173 + 175: 28(ptr) AccessChain 19(b2) 21 + Store 175 174 + 176: 42(ptr) AccessChain 27(b1) 32 + 177: 7(i16vec2) Load 176 + 178: 42(ptr) AccessChain 19(b2) 32 + Store 178 177 + 179: 34(ptr) AccessChain 27(b1) 33 + 180: 8(i16vec3) Load 179 + 181: 34(ptr) AccessChain 19(b2) 33 + Store 181 180 Return FunctionEnd diff --git a/Test/baseResults/spv.16bitstorage.frag.out b/Test/baseResults/spv.16bitstorage.frag.out index 2d934f4c53..f62f17ac00 100644 --- a/Test/baseResults/spv.16bitstorage.frag.out +++ b/Test/baseResults/spv.16bitstorage.frag.out @@ -1,7 +1,7 @@ spv.16bitstorage.frag // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 173 +// Generated by (magic number): 8000b +// Id's are bound by 182 Capability Shader Capability StorageUniformBufferBlock16 @@ -83,6 +83,7 @@ spv.16bitstorage.frag Decorate 13 ArrayStride 16 Decorate 15 ArrayStride 4 Decorate 16 ArrayStride 2 + Decorate 17(B2) BufferBlock MemberDecorate 17(B2) 0 Offset 0 MemberDecorate 17(B2) 1 Offset 4 MemberDecorate 17(B2) 2 Offset 8 @@ -91,14 +92,14 @@ spv.16bitstorage.frag MemberDecorate 17(B2) 5 Offset 40 MemberDecorate 17(B2) 6 Offset 72 MemberDecorate 17(B2) 7 Offset 472 - Decorate 17(B2) BufferBlock - Decorate 19(b2) DescriptorSet 0 Decorate 19(b2) Binding 1 + Decorate 19(b2) DescriptorSet 0 Decorate 22 ArrayStride 16 MemberDecorate 23(S) 0 Offset 0 MemberDecorate 23(S) 1 Offset 4 MemberDecorate 23(S) 2 Offset 8 Decorate 24 ArrayStride 16 + Decorate 25(B1) Block MemberDecorate 25(B1) 0 Offset 0 MemberDecorate 25(B1) 1 Offset 4 MemberDecorate 25(B1) 2 Offset 8 @@ -106,9 +107,8 @@ spv.16bitstorage.frag MemberDecorate 25(B1) 4 Offset 48 MemberDecorate 25(B1) 5 Offset 64 MemberDecorate 25(B1) 6 Offset 96 - Decorate 25(B1) Block - Decorate 27(b1) DescriptorSet 0 Decorate 27(b1) Binding 0 + Decorate 27(b1) DescriptorSet 0 Decorate 45 ArrayStride 16 MemberDecorate 46(S) 0 Offset 0 MemberDecorate 46(S) 1 Offset 4 @@ -116,6 +116,7 @@ spv.16bitstorage.frag Decorate 47 ArrayStride 16 Decorate 48 ArrayStride 16 Decorate 49 ArrayStride 16 + Decorate 50(B5) Block MemberDecorate 50(B5) 0 Offset 0 MemberDecorate 50(B5) 1 Offset 4 MemberDecorate 50(B5) 2 Offset 8 @@ -124,29 +125,28 @@ spv.16bitstorage.frag MemberDecorate 50(B5) 5 Offset 64 MemberDecorate 50(B5) 6 Offset 96 MemberDecorate 50(B5) 7 Offset 1696 - Decorate 50(B5) Block - Decorate 52(b5) DescriptorSet 0 Decorate 52(b5) Binding 2 + Decorate 52(b5) DescriptorSet 0 MemberDecorate 88(S2) 0 ColMajor - MemberDecorate 88(S2) 0 Offset 0 MemberDecorate 88(S2) 0 MatrixStride 16 + MemberDecorate 88(S2) 0 Offset 0 MemberDecorate 88(S2) 1 Offset 64 MemberDecorate 88(S2) 2 Offset 68 MemberDecorate 89(S3) 0 Offset 0 + Decorate 90(B4) BufferBlock MemberDecorate 90(B4) 0 Offset 0 MemberDecorate 90(B4) 1 Offset 80 - Decorate 90(B4) BufferBlock - Decorate 92(b4) DescriptorSet 0 Decorate 92(b4) Binding 4 + Decorate 92(b4) DescriptorSet 0 MemberDecorate 93(S2) 0 RowMajor - MemberDecorate 93(S2) 0 Offset 0 MemberDecorate 93(S2) 0 MatrixStride 16 + MemberDecorate 93(S2) 0 Offset 0 MemberDecorate 93(S2) 1 Offset 64 MemberDecorate 93(S2) 2 Offset 68 - MemberDecorate 94(B3) 0 Offset 0 Decorate 94(B3) BufferBlock - Decorate 96(b3) DescriptorSet 0 + MemberDecorate 94(B3) 0 Offset 0 Decorate 96(b3) Binding 3 + Decorate 96(b3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 16 @@ -337,5 +337,17 @@ spv.16bitstorage.frag 171:6(float16_t) FConvert 170 172: 28(ptr) AccessChain 19(b2) 21 Store 172 171 + 173: 28(ptr) AccessChain 27(b1) 21 + 174:6(float16_t) Load 173 + 175: 28(ptr) AccessChain 19(b2) 21 + Store 175 174 + 176: 43(ptr) AccessChain 27(b1) 32 + 177: 7(f16vec2) Load 176 + 178: 43(ptr) AccessChain 19(b2) 32 + Store 178 177 + 179: 34(ptr) AccessChain 27(b1) 33 + 180: 8(f16vec3) Load 179 + 181: 34(ptr) AccessChain 19(b2) 33 + Store 181 180 Return FunctionEnd diff --git a/Test/baseResults/spv.16bitxfb.vert.out b/Test/baseResults/spv.16bitxfb.vert.out index f4d66efca9..4fe2bf738f 100644 --- a/Test/baseResults/spv.16bitxfb.vert.out +++ b/Test/baseResults/spv.16bitxfb.vert.out @@ -1,6 +1,6 @@ spv.16bitxfb.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 59 Capability Shader @@ -31,24 +31,24 @@ spv.16bitxfb.vert Name 46 "" Name 49 "iu16v4" Decorate 9(of16v3) Location 0 + Decorate 9(of16v3) Offset 0 Decorate 9(of16v3) XfbBuffer 0 Decorate 9(of16v3) XfbStride 6 - Decorate 9(of16v3) Offset 0 Decorate 12(if16v4) Location 0 + Decorate 16(F16Out) Block MemberDecorate 16(F16Out) 0 Offset 0 MemberDecorate 16(F16Out) 1 Offset 2 - Decorate 16(F16Out) Block Decorate 18 Location 1 Decorate 18 XfbBuffer 1 Decorate 18 XfbStride 6 Decorate 36(oi16v3) Location 5 + Decorate 36(oi16v3) Offset 0 Decorate 36(oi16v3) XfbBuffer 2 Decorate 36(oi16v3) XfbStride 6 - Decorate 36(oi16v3) Offset 0 Decorate 39(ii16v4) Location 1 + Decorate 44(I16Out) Block MemberDecorate 44(I16Out) 0 Offset 0 MemberDecorate 44(I16Out) 1 Offset 2 - Decorate 44(I16Out) Block Decorate 46 Location 6 Decorate 46 XfbBuffer 3 Decorate 46 XfbStride 6 diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out index 220178804c..b2607d3321 100644 --- a/Test/baseResults/spv.300BuiltIns.vert.out +++ b/Test/baseResults/spv.300BuiltIns.vert.out @@ -1,6 +1,6 @@ spv.300BuiltIns.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 42 Capability Shader @@ -16,10 +16,10 @@ spv.300BuiltIns.vert Name 14 "ps" Name 21 "gl_VertexIndex" Name 34 "gl_InstanceIndex" - MemberDecorate 8(gl_PerVertex) 0 Invariant + Decorate 8(gl_PerVertex) Block MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 8(gl_PerVertex) 0 Invariant MemberDecorate 8(gl_PerVertex) 1 BuiltIn PointSize - Decorate 8(gl_PerVertex) Block Decorate 14(ps) RelaxedPrecision Decorate 14(ps) Location 0 Decorate 15 RelaxedPrecision diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out index 3b691e2c3b..156a6e2419 100644 --- a/Test/baseResults/spv.300layout.frag.out +++ b/Test/baseResults/spv.300layout.frag.out @@ -1,6 +1,6 @@ spv.300layout.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 37 Capability Shader diff --git a/Test/baseResults/spv.300layout.vert.out b/Test/baseResults/spv.300layout.vert.out index 3db50b069a..7806b588ae 100644 --- a/Test/baseResults/spv.300layout.vert.out +++ b/Test/baseResults/spv.300layout.vert.out @@ -1,6 +1,6 @@ spv.300layout.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 163 Capability Shader @@ -38,40 +38,40 @@ spv.300layout.vert Name 128 "s" Decorate 9(pos) Location 0 Decorate 11(p) Location 3 + Decorate 17(Transform) Block MemberDecorate 17(Transform) 0 RowMajor - MemberDecorate 17(Transform) 0 Offset 0 MemberDecorate 17(Transform) 0 MatrixStride 16 + MemberDecorate 17(Transform) 0 Offset 0 MemberDecorate 17(Transform) 1 ColMajor - MemberDecorate 17(Transform) 1 Offset 64 MemberDecorate 17(Transform) 1 MatrixStride 16 + MemberDecorate 17(Transform) 1 Offset 64 MemberDecorate 17(Transform) 2 RowMajor - MemberDecorate 17(Transform) 2 Offset 128 MemberDecorate 17(Transform) 2 MatrixStride 16 + MemberDecorate 17(Transform) 2 Offset 128 MemberDecorate 17(Transform) 3 Offset 176 - Decorate 17(Transform) Block - Decorate 19(tblock) DescriptorSet 0 Decorate 19(tblock) Binding 0 + Decorate 19(tblock) DescriptorSet 0 Decorate 44 ArrayStride 16 + Decorate 45(T3) Block MemberDecorate 45(T3) 0 ColMajor - MemberDecorate 45(T3) 0 Offset 0 MemberDecorate 45(T3) 0 MatrixStride 16 + MemberDecorate 45(T3) 0 Offset 0 MemberDecorate 45(T3) 1 RowMajor - MemberDecorate 45(T3) 1 Offset 64 MemberDecorate 45(T3) 1 MatrixStride 16 + MemberDecorate 45(T3) 1 Offset 64 MemberDecorate 45(T3) 2 ColMajor - MemberDecorate 45(T3) 2 Offset 128 MemberDecorate 45(T3) 2 MatrixStride 16 + MemberDecorate 45(T3) 2 Offset 128 MemberDecorate 45(T3) 3 Offset 2048 - Decorate 45(T3) Block - Decorate 47 DescriptorSet 0 Decorate 47 Binding 2 + Decorate 47 DescriptorSet 0 + Decorate 78(T2) Block MemberDecorate 78(T2) 0 Offset 0 MemberDecorate 78(T2) 1 RowMajor - MemberDecorate 78(T2) 1 Offset 16 MemberDecorate 78(T2) 1 MatrixStride 16 - Decorate 78(T2) Block - Decorate 80 DescriptorSet 0 + MemberDecorate 78(T2) 1 Offset 16 Decorate 80 Binding 1 + Decorate 80 DescriptorSet 0 Decorate 98(color) Location 1 Decorate 100(c) Location 7 Decorate 108(iout) Flat diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out index 315605d4dd..cec34743cf 100644 --- a/Test/baseResults/spv.300layoutp.vert.out +++ b/Test/baseResults/spv.300layoutp.vert.out @@ -1,6 +1,6 @@ spv.300layoutp.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 115 Capability Shader @@ -38,40 +38,40 @@ spv.300layoutp.vert Name 80 "s" Decorate 9(pos) Location 0 Decorate 11(p) Location 3 + Decorate 17(Transform) Block MemberDecorate 17(Transform) 0 RowMajor - MemberDecorate 17(Transform) 0 Offset 0 MemberDecorate 17(Transform) 0 MatrixStride 16 + MemberDecorate 17(Transform) 0 Offset 0 MemberDecorate 17(Transform) 1 ColMajor - MemberDecorate 17(Transform) 1 Offset 64 MemberDecorate 17(Transform) 1 MatrixStride 16 + MemberDecorate 17(Transform) 1 Offset 64 MemberDecorate 17(Transform) 2 RowMajor - MemberDecorate 17(Transform) 2 Offset 128 MemberDecorate 17(Transform) 2 MatrixStride 16 + MemberDecorate 17(Transform) 2 Offset 128 MemberDecorate 17(Transform) 3 Offset 176 - Decorate 17(Transform) Block - Decorate 19(tblock) DescriptorSet 0 Decorate 19(tblock) Binding 0 + Decorate 19(tblock) DescriptorSet 0 Decorate 32 ArrayStride 16 + Decorate 33(T3) Block MemberDecorate 33(T3) 0 ColMajor - MemberDecorate 33(T3) 0 Offset 0 MemberDecorate 33(T3) 0 MatrixStride 16 + MemberDecorate 33(T3) 0 Offset 0 MemberDecorate 33(T3) 1 RowMajor - MemberDecorate 33(T3) 1 Offset 64 MemberDecorate 33(T3) 1 MatrixStride 16 + MemberDecorate 33(T3) 1 Offset 64 MemberDecorate 33(T3) 2 ColMajor - MemberDecorate 33(T3) 2 Offset 128 MemberDecorate 33(T3) 2 MatrixStride 16 + MemberDecorate 33(T3) 2 Offset 128 MemberDecorate 33(T3) 3 Offset 160 - Decorate 33(T3) Block - Decorate 35 DescriptorSet 0 Decorate 35 Binding 2 + Decorate 35 DescriptorSet 0 + Decorate 42(T2) Block MemberDecorate 42(T2) 0 Offset 0 MemberDecorate 42(T2) 1 RowMajor - MemberDecorate 42(T2) 1 Offset 16 MemberDecorate 42(T2) 1 MatrixStride 16 - Decorate 42(T2) Block - Decorate 44 DescriptorSet 0 + MemberDecorate 42(T2) 1 Offset 16 Decorate 44 Binding 1 + Decorate 44 DescriptorSet 0 Decorate 50(color) Location 1 Decorate 52(c) Location 7 Decorate 60(iout) Flat diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out index f4322abc50..fa354be46a 100644 --- a/Test/baseResults/spv.310.bitcast.frag.out +++ b/Test/baseResults/spv.310.bitcast.frag.out @@ -1,6 +1,6 @@ spv.310.bitcast.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 179 Capability Shader diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out index 931d0380a5..1b585c7b88 100644 --- a/Test/baseResults/spv.310.comp.out +++ b/Test/baseResults/spv.310.comp.out @@ -1,6 +1,6 @@ spv.310.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 72 Capability Shader @@ -32,24 +32,24 @@ spv.310.comp Name 53 "gl_LocalInvocationID" Name 65 "gl_DeviceIndex" Decorate 11 ArrayStride 16 + Decorate 12(outb) BufferBlock MemberDecorate 12(outb) 0 Offset 0 MemberDecorate 12(outb) 1 Offset 4 MemberDecorate 12(outb) 2 Offset 8 MemberDecorate 12(outb) 3 Offset 16 - Decorate 12(outb) BufferBlock - Decorate 14(outbname) DescriptorSet 0 Decorate 14(outbname) Binding 0 + Decorate 14(outbname) DescriptorSet 0 + Decorate 23(outbna) BufferBlock MemberDecorate 23(outbna) 0 Offset 0 MemberDecorate 23(outbna) 1 Offset 16 - Decorate 23(outbna) BufferBlock - Decorate 25(outbnamena) DescriptorSet 0 Decorate 25(outbnamena) Binding 1 + Decorate 25(outbnamena) DescriptorSet 0 Decorate 47 ArrayStride 16 + Decorate 48(outs) BufferBlock MemberDecorate 48(outs) 0 Offset 0 MemberDecorate 48(outs) 1 Offset 16 - Decorate 48(outs) BufferBlock - Decorate 50(outnames) DescriptorSet 0 Decorate 50(outnames) Binding 2 + Decorate 50(outnames) DescriptorSet 0 Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 65(gl_DeviceIndex) BuiltIn DeviceIndex Decorate 71 BuiltIn WorkgroupSize diff --git a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out index a4d8413be0..5d82e66d85 100644 --- a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out +++ b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out @@ -1,6 +1,6 @@ spv.320.meshShaderUserDefined.mesh // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 143 Capability MeshShadingNV @@ -34,13 +34,13 @@ spv.320.meshShaderUserDefined.mesh Name 106 "blk2" Decorate 12(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 33(myblock) Block MemberDecorate 33(myblock) 0 PerPrimitiveNV MemberDecorate 33(myblock) 1 PerPrimitiveNV MemberDecorate 33(myblock) 2 PerPrimitiveNV MemberDecorate 33(myblock) 3 PerPrimitiveNV MemberDecorate 33(myblock) 4 PerPrimitiveNV MemberDecorate 33(myblock) 5 PerPrimitiveNV - Decorate 33(myblock) Block Decorate 37(blk) Location 0 Decorate 102(myblock2) Block Decorate 106(blk2) Location 20 diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out index 1166508f1d..a6923466d8 100644 --- a/Test/baseResults/spv.330.geom.out +++ b/Test/baseResults/spv.330.geom.out @@ -1,6 +1,6 @@ spv.330.geom // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 32 Capability Geometry @@ -23,12 +23,12 @@ spv.330.geom MemberName 16(gl_PerVertex) 0 "gl_Position" MemberName 16(gl_PerVertex) 1 "gl_ClipDistance" Name 20 "gl_in" + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position MemberDecorate 11(gl_PerVertex) 1 BuiltIn ClipDistance - Decorate 11(gl_PerVertex) Block + Decorate 16(gl_PerVertex) Block MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position MemberDecorate 16(gl_PerVertex) 1 BuiltIn ClipDistance - Decorate 16(gl_PerVertex) Block 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.400.frag.nanclamp.out b/Test/baseResults/spv.400.frag.nanclamp.out index cf1ffb0418..c913e41c5c 100644 --- a/Test/baseResults/spv.400.frag.nanclamp.out +++ b/Test/baseResults/spv.400.frag.nanclamp.out @@ -1,6 +1,6 @@ spv.400.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 1122 Capability Shader @@ -53,27 +53,27 @@ spv.400.frag Name 1119 "id" Name 1120 "gl_PrimitiveID" Decorate 13(outp) Location 1 - Decorate 17(u2drs) DescriptorSet 0 Decorate 17(u2drs) Binding 3 - Decorate 1025(arrayedSampler) DescriptorSet 0 + Decorate 17(u2drs) DescriptorSet 0 Decorate 1025(arrayedSampler) Binding 0 + Decorate 1025(arrayedSampler) DescriptorSet 0 Decorate 1027(i) Flat Decorate 1027(i) Location 1 Decorate 1033(c2D) Location 0 Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance Decorate 1054(uoutp) Location 3 - Decorate 1058(samp2dr) DescriptorSet 0 Decorate 1058(samp2dr) Binding 1 + Decorate 1058(samp2dr) DescriptorSet 0 Decorate 1080(ioutp) Location 2 - Decorate 1084(isamp2DA) DescriptorSet 0 Decorate 1084(isamp2DA) Binding 2 + Decorate 1084(isamp2DA) DescriptorSet 0 Decorate 1101(gl_FragCoord) BuiltIn FragCoord Decorate 1103(vl2) Location 6 Decorate 1109(uo) Location 0 Decorate 1111(u) Flat Decorate 1111(u) Location 2 - Decorate 1120(gl_PrimitiveID) Flat Decorate 1120(gl_PrimitiveID) BuiltIn PrimitiveId + Decorate 1120(gl_PrimitiveID) Flat 2: TypeVoid 3: TypeFunction 2 10: TypeFloat 32 diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out index 67868859cf..b010d7da12 100644 --- a/Test/baseResults/spv.400.frag.out +++ b/Test/baseResults/spv.400.frag.out @@ -1,7 +1,7 @@ spv.400.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 1122 Capability Shader @@ -54,27 +54,27 @@ Validation failed Name 1119 "id" Name 1120 "gl_PrimitiveID" Decorate 13(outp) Location 1 - Decorate 17(u2drs) DescriptorSet 0 Decorate 17(u2drs) Binding 3 - Decorate 1025(arrayedSampler) DescriptorSet 0 + Decorate 17(u2drs) DescriptorSet 0 Decorate 1025(arrayedSampler) Binding 0 + Decorate 1025(arrayedSampler) DescriptorSet 0 Decorate 1027(i) Flat Decorate 1027(i) Location 1 Decorate 1033(c2D) Location 0 Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance Decorate 1054(uoutp) Location 3 - Decorate 1058(samp2dr) DescriptorSet 0 Decorate 1058(samp2dr) Binding 1 + Decorate 1058(samp2dr) DescriptorSet 0 Decorate 1080(ioutp) Location 2 - Decorate 1084(isamp2DA) DescriptorSet 0 Decorate 1084(isamp2DA) Binding 2 + Decorate 1084(isamp2DA) DescriptorSet 0 Decorate 1101(gl_FragCoord) BuiltIn FragCoord Decorate 1103(vl2) Location 6 Decorate 1109(uo) Location 0 Decorate 1111(u) Flat Decorate 1111(u) Location 2 - Decorate 1120(gl_PrimitiveID) Flat Decorate 1120(gl_PrimitiveID) BuiltIn PrimitiveId + Decorate 1120(gl_PrimitiveID) Flat 2: TypeVoid 3: TypeFunction 2 10: TypeFloat 32 diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out index a07c9b12dc..7936933907 100644 --- a/Test/baseResults/spv.400.tesc.out +++ b/Test/baseResults/spv.400.tesc.out @@ -1,6 +1,6 @@ spv.400.tesc // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 92 Capability Tessellation @@ -43,21 +43,21 @@ spv.400.tesc Name 87 "ivlb" Name 90 "ovla" Name 91 "ovlb" + Decorate 20(gl_PerVertex) Block 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 41(gl_PatchVerticesIn) BuiltIn PatchVertices Decorate 44(gl_PrimitiveID) BuiltIn PrimitiveId Decorate 47(gl_InvocationID) BuiltIn InvocationId + Decorate 50(gl_PerVertex) Block MemberDecorate 50(gl_PerVertex) 0 BuiltIn Position MemberDecorate 50(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 50(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 50(gl_PerVertex) Block - Decorate 67(gl_TessLevelOuter) Patch Decorate 67(gl_TessLevelOuter) BuiltIn TessLevelOuter - Decorate 72(gl_TessLevelInner) Patch + Decorate 67(gl_TessLevelOuter) Patch Decorate 72(gl_TessLevelInner) BuiltIn TessLevelInner + Decorate 72(gl_TessLevelInner) Patch Decorate 78(patchOut) Patch Decorate 78(patchOut) Location 0 Decorate 82(inb) Location 0 diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out index 58f4b97eda..0bcfc1188f 100644 --- a/Test/baseResults/spv.400.tese.out +++ b/Test/baseResults/spv.400.tese.out @@ -1,6 +1,6 @@ spv.400.tese // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 96 Capability Tessellation @@ -52,21 +52,21 @@ spv.400.tese Name 91 "ivla" Name 92 "ivlb" Name 95 "ovla" + Decorate 17(gl_PerVertex) Block MemberDecorate 17(gl_PerVertex) 0 BuiltIn Position MemberDecorate 17(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 17(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 17(gl_PerVertex) Block Decorate 38(gl_PatchVerticesIn) BuiltIn PatchVertices Decorate 41(gl_PrimitiveID) BuiltIn PrimitiveId Decorate 47(gl_TessCoord) BuiltIn TessCoord - Decorate 53(gl_TessLevelOuter) Patch Decorate 53(gl_TessLevelOuter) BuiltIn TessLevelOuter - Decorate 61(gl_TessLevelInner) Patch + Decorate 53(gl_TessLevelOuter) Patch Decorate 61(gl_TessLevelInner) BuiltIn TessLevelInner + Decorate 61(gl_TessLevelInner) Patch + Decorate 64(gl_PerVertex) Block MemberDecorate 64(gl_PerVertex) 0 BuiltIn Position MemberDecorate 64(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 64(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 64(gl_PerVertex) Block Decorate 75(patchIn) Patch Decorate 75(patchIn) Location 0 Decorate 79(inb) Location 1 diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out index 17f27497a0..8cd442053e 100644 --- a/Test/baseResults/spv.420.geom.out +++ b/Test/baseResults/spv.420.geom.out @@ -1,6 +1,6 @@ spv.420.geom // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 72 Capability Geometry @@ -32,16 +32,16 @@ spv.420.geom Name 46 "coord" Name 64 "i" Name 67 "indexable" - MemberDecorate 9(gl_PerVertex) 0 BuiltIn PointSize Decorate 9(gl_PerVertex) Block - MemberDecorate 21(gl_PerVertex) 0 BuiltIn PointSize + MemberDecorate 9(gl_PerVertex) 0 BuiltIn PointSize Decorate 21(gl_PerVertex) Block + MemberDecorate 21(gl_PerVertex) 0 BuiltIn PointSize Decorate 23 Stream 0 - Decorate 28(gl_ViewportIndex) Stream 0 Decorate 28(gl_ViewportIndex) BuiltIn ViewportIndex + Decorate 28(gl_ViewportIndex) Stream 0 Decorate 33(gl_InvocationID) BuiltIn InvocationId - Decorate 41(s2D) DescriptorSet 0 Decorate 41(s2D) Binding 0 + Decorate 41(s2D) DescriptorSet 0 Decorate 46(coord) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out index 15da3827f3..009f0638ea 100644 --- a/Test/baseResults/spv.430.frag.out +++ b/Test/baseResults/spv.430.frag.out @@ -1,6 +1,6 @@ spv.430.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader @@ -16,10 +16,10 @@ spv.430.frag Name 14 "gl_Layer" Name 19 "gl_ViewportIndex" Decorate 9(color) Location 0 - Decorate 14(gl_Layer) Flat Decorate 14(gl_Layer) BuiltIn Layer - Decorate 19(gl_ViewportIndex) Flat + Decorate 14(gl_Layer) Flat Decorate 19(gl_ViewportIndex) BuiltIn ViewportIndex + Decorate 19(gl_ViewportIndex) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out index a6b2e34cf1..8a75ae0a66 100644 --- a/Test/baseResults/spv.430.vert.out +++ b/Test/baseResults/spv.430.vert.out @@ -1,7 +1,7 @@ spv.430.vert Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 66 Capability Shader @@ -40,34 +40,34 @@ Validation failed Name 63 "MS" MemberName 63(MS) 0 "f" Name 65 "outMS" - MemberDecorate 10(gl_PerVertex) 0 BuiltIn ClipDistance Decorate 10(gl_PerVertex) Block + MemberDecorate 10(gl_PerVertex) 0 BuiltIn ClipDistance Decorate 23(bad) Location 0 Decorate 34(badorder3) Flat Decorate 34(badorder3) Location 1 Decorate 38(f) Location 11 Decorate 41(badorder) Location 10 - Decorate 42(badorder2) Location 0 Decorate 42(badorder2) Invariant - MemberDecorate 43(boundblock) 0 Offset 0 + Decorate 42(badorder2) Location 0 Decorate 43(boundblock) Block - Decorate 45(boundInst) DescriptorSet 0 + MemberDecorate 43(boundblock) 0 Offset 0 Decorate 45(boundInst) Binding 3 - MemberDecorate 46(anonblock) 0 Offset 0 + Decorate 45(boundInst) DescriptorSet 0 Decorate 46(anonblock) Block - Decorate 48 DescriptorSet 0 + MemberDecorate 46(anonblock) 0 Offset 0 Decorate 48 Binding 7 - Decorate 52(sampb1) DescriptorSet 0 + Decorate 48 DescriptorSet 0 Decorate 52(sampb1) Binding 4 - Decorate 55(sampb2) DescriptorSet 0 + Decorate 52(sampb1) DescriptorSet 0 Decorate 55(sampb2) Binding 5 - Decorate 56(sampb4) DescriptorSet 0 + Decorate 55(sampb2) DescriptorSet 0 Decorate 56(sampb4) Binding 31 + Decorate 56(sampb4) DescriptorSet 0 MemberDecorate 59(S) 0 RelaxedPrecision Decorate 62(var) Flat Decorate 62(var) Location 0 - MemberDecorate 63(MS) 0 Location 17 Decorate 63(MS) Block + MemberDecorate 63(MS) 0 Location 17 Decorate 65(outMS) Location 2 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.450.geom.out b/Test/baseResults/spv.450.geom.out index 3e7ac4550c..f2f9a0650f 100644 --- a/Test/baseResults/spv.450.geom.out +++ b/Test/baseResults/spv.450.geom.out @@ -1,6 +1,6 @@ spv.450.geom // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 31 Capability Geometry @@ -29,16 +29,16 @@ spv.450.geom Name 20 "gl_in" Name 27 "gl_Layer" Name 29 "gl_ViewportIndex" + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 11(gl_PerVertex) Block + Decorate 16(gl_PerVertex) Block MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position MemberDecorate 16(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 16(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 16(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 16(gl_PerVertex) Block Decorate 27(gl_Layer) BuiltIn Layer Decorate 29(gl_ViewportIndex) BuiltIn ViewportIndex 2: TypeVoid diff --git a/Test/baseResults/spv.450.noRedecl.tesc.out b/Test/baseResults/spv.450.noRedecl.tesc.out index 0925119b53..fb31be5f1f 100644 --- a/Test/baseResults/spv.450.noRedecl.tesc.out +++ b/Test/baseResults/spv.450.noRedecl.tesc.out @@ -1,6 +1,6 @@ spv.450.noRedecl.tesc // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 21 Capability Tessellation @@ -18,11 +18,11 @@ spv.450.noRedecl.tesc MemberName 11(gl_PerVertex) 3 "gl_CullDistance" Name 15 "gl_in" Name 20 "patchOut" + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 11(gl_PerVertex) Block Decorate 20(patchOut) Patch Decorate 20(patchOut) Location 0 2: TypeVoid diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out index c18ab3ff1c..bb5d55bd31 100644 --- a/Test/baseResults/spv.450.tesc.out +++ b/Test/baseResults/spv.450.tesc.out @@ -1,7 +1,7 @@ spv.450.tesc Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 45 Capability Tessellation @@ -43,36 +43,36 @@ Validation failed MemberName 42(bn) 1 "v2" MemberName 42(bn) 2 "v3" Name 44 "" + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 11(gl_PerVertex) Block Decorate 18(gl_InvocationID) BuiltIn InvocationId + Decorate 21(gl_PerVertex) Block MemberDecorate 21(gl_PerVertex) 0 BuiltIn Position MemberDecorate 21(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 21(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 21(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 21(gl_PerVertex) Block Decorate 32(patchOut) Patch Decorate 32(patchOut) Location 1 + Decorate 34(TheBlock) Block MemberDecorate 34(TheBlock) 0 Patch MemberDecorate 34(TheBlock) 1 Patch MemberDecorate 34(TheBlock) 2 Patch - Decorate 34(TheBlock) Block Decorate 38(tcBlock) Location 12 + Decorate 39(SingleBlock) Block MemberDecorate 39(SingleBlock) 0 Patch MemberDecorate 39(SingleBlock) 1 Patch MemberDecorate 39(SingleBlock) 2 Patch - Decorate 39(SingleBlock) Block Decorate 41(singleBlock) Location 2 + Decorate 42(bn) Block MemberDecorate 42(bn) 0 Patch MemberDecorate 42(bn) 0 Location 20 MemberDecorate 42(bn) 1 Patch MemberDecorate 42(bn) 1 Location 24 MemberDecorate 42(bn) 2 Patch MemberDecorate 42(bn) 2 Location 25 - Decorate 42(bn) Block Decorate 44 Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.460.comp.out b/Test/baseResults/spv.460.comp.out index d53efde654..c6abacad34 100644 --- a/Test/baseResults/spv.460.comp.out +++ b/Test/baseResults/spv.460.comp.out @@ -1,6 +1,6 @@ spv.460.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 15 Capability Shader diff --git a/Test/baseResults/spv.460.frag.out b/Test/baseResults/spv.460.frag.out index a8bec34210..e40e833f9d 100644 --- a/Test/baseResults/spv.460.frag.out +++ b/Test/baseResults/spv.460.frag.out @@ -1,6 +1,6 @@ spv.460.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 32 Capability Shader @@ -15,9 +15,9 @@ spv.460.frag Name 4 "main" Name 8 "aui" Name 10 "ui" - Decorate 8(aui) Offset 0 - Decorate 8(aui) DescriptorSet 0 Decorate 8(aui) Binding 0 + Decorate 8(aui) DescriptorSet 0 + Decorate 8(aui) Offset 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.460.subgroupEXT.mesh.out b/Test/baseResults/spv.460.subgroupEXT.mesh.out new file mode 100644 index 0000000000..112d50d294 --- /dev/null +++ b/Test/baseResults/spv.460.subgroupEXT.mesh.out @@ -0,0 +1,442 @@ +spv.460.subgroupEXT.mesh +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 279 + + Capability ClipDistance + Capability CullDistance + Capability GroupNonUniform + Capability GroupNonUniformVote + Capability GroupNonUniformArithmetic + Capability GroupNonUniformBallot + Capability GroupNonUniformShuffle + Capability GroupNonUniformShuffleRelative + Capability GroupNonUniformClustered + Capability GroupNonUniformQuad + Capability MeshShadingEXT + Extension "SPV_EXT_mesh_shader" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint MeshEXT 4 "main" 35 41 57 109 147 161 162 167 168 171 172 173 174 175 + ExecutionMode 4 LocalSize 32 1 1 + ExecutionMode 4 OutputVertices 81 + ExecutionMode 4 OutputPrimitivesNV 32 + ExecutionMode 4 OutputTrianglesNV + Source GLSL 460 + SourceExtension "GL_EXT_mesh_shader" + SourceExtension "GL_KHR_shader_subgroup_arithmetic" + SourceExtension "GL_KHR_shader_subgroup_ballot" + SourceExtension "GL_KHR_shader_subgroup_basic" + SourceExtension "GL_KHR_shader_subgroup_clustered" + SourceExtension "GL_KHR_shader_subgroup_quad" + SourceExtension "GL_KHR_shader_subgroup_shuffle" + SourceExtension "GL_KHR_shader_subgroup_shuffle_relative" + SourceExtension "GL_KHR_shader_subgroup_vote" + Name 4 "main" + Name 6 "basic_works(" + Name 13 "ballot_works(vf4;" + Name 12 "f4" + Name 16 "vote_works(vf4;" + Name 15 "f4" + Name 19 "shuffle_works(vf4;" + Name 18 "f4" + Name 22 "arith_works(vf4;" + Name 21 "f4" + Name 25 "clustered_works(vf4;" + Name 24 "f4" + Name 28 "quad_works(vf4;" + Name 27 "f4" + Name 32 "iid" + Name 35 "gl_LocalInvocationID" + Name 40 "gid" + Name 41 "gl_WorkGroupID" + Name 44 "vertexCount" + Name 46 "primitiveCount" + Name 54 "gl_MeshPerVertexEXT" + MemberName 54(gl_MeshPerVertexEXT) 0 "gl_Position" + MemberName 54(gl_MeshPerVertexEXT) 1 "gl_PointSize" + MemberName 54(gl_MeshPerVertexEXT) 2 "gl_ClipDistance" + MemberName 54(gl_MeshPerVertexEXT) 3 "gl_CullDistance" + Name 57 "gl_MeshVerticesEXT" + Name 106 "gl_MeshPerPrimitiveEXT" + MemberName 106(gl_MeshPerPrimitiveEXT) 0 "gl_PrimitiveID" + MemberName 106(gl_MeshPerPrimitiveEXT) 1 "gl_Layer" + MemberName 106(gl_MeshPerPrimitiveEXT) 2 "gl_ViewportIndex" + MemberName 106(gl_MeshPerPrimitiveEXT) 3 "gl_CullPrimitiveEXT" + Name 109 "gl_MeshPrimitivesEXT" + Name 147 "gl_PrimitiveTriangleIndicesEXT" + Name 161 "gl_SubgroupSize" + Name 162 "gl_SubgroupInvocationID" + Name 167 "gl_NumSubgroups" + Name 168 "gl_SubgroupID" + Name 171 "gl_SubgroupEqMask" + Name 172 "gl_SubgroupGeMask" + Name 173 "gl_SubgroupGtMask" + Name 174 "gl_SubgroupLeMask" + Name 175 "gl_SubgroupLtMask" + Name 181 "ballot" + Name 218 "ballot" + Name 253 "ballot" + Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 54(gl_MeshPerVertexEXT) Block + MemberDecorate 54(gl_MeshPerVertexEXT) 0 BuiltIn Position + MemberDecorate 54(gl_MeshPerVertexEXT) 1 BuiltIn PointSize + MemberDecorate 54(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance + MemberDecorate 54(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance + Decorate 106(gl_MeshPerPrimitiveEXT) Block + MemberDecorate 106(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId + MemberDecorate 106(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV + MemberDecorate 106(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer + MemberDecorate 106(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV + MemberDecorate 106(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex + MemberDecorate 106(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV + MemberDecorate 106(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT + MemberDecorate 106(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV + Decorate 147(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT + Decorate 161(gl_SubgroupSize) RelaxedPrecision + Decorate 161(gl_SubgroupSize) BuiltIn SubgroupSize + Decorate 162(gl_SubgroupInvocationID) RelaxedPrecision + Decorate 162(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId + Decorate 167(gl_NumSubgroups) BuiltIn NumSubgroups + Decorate 168(gl_SubgroupID) BuiltIn SubgroupId + Decorate 171(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR + Decorate 172(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR + Decorate 173(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR + Decorate 174(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR + Decorate 175(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR + Decorate 278 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10: TypePointer Function 9(fvec4) + 11: TypeFunction 2 10(ptr) + 30: TypeInt 32 0 + 31: TypePointer Function 30(int) + 33: TypeVector 30(int) 3 + 34: TypePointer Input 33(ivec3) +35(gl_LocalInvocationID): 34(ptr) Variable Input + 36: 30(int) Constant 0 + 37: TypePointer Input 30(int) +41(gl_WorkGroupID): 34(ptr) Variable Input + 45: 30(int) Constant 81 + 47: 30(int) Constant 32 + 50: 30(int) Constant 4 + 51: TypeArray 8(float) 50 + 52: 30(int) Constant 3 + 53: TypeArray 8(float) 52 +54(gl_MeshPerVertexEXT): TypeStruct 9(fvec4) 8(float) 51 53 + 55: TypeArray 54(gl_MeshPerVertexEXT) 45 + 56: TypePointer Output 55 +57(gl_MeshVerticesEXT): 56(ptr) Variable Output + 59: TypeInt 32 1 + 60: 59(int) Constant 0 + 61: 8(float) Constant 1065353216 + 62: 9(fvec4) ConstantComposite 61 61 61 61 + 63: TypePointer Output 9(fvec4) + 66: 59(int) Constant 1 + 67: 8(float) Constant 1073741824 + 68: TypePointer Output 8(float) + 71: 59(int) Constant 2 + 72: 59(int) Constant 3 + 73: 8(float) Constant 1077936128 + 76: 8(float) Constant 1082130432 + 78: 30(int) Constant 1 + 79: 30(int) Constant 264 + 80: 30(int) Constant 2 + 105: TypeBool +106(gl_MeshPerPrimitiveEXT): TypeStruct 59(int) 59(int) 59(int) 105(bool) + 107: TypeArray 106(gl_MeshPerPrimitiveEXT) 47 + 108: TypePointer Output 107 +109(gl_MeshPrimitivesEXT): 108(ptr) Variable Output + 111: 59(int) Constant 6 + 112: TypePointer Output 59(int) + 115: 59(int) Constant 7 + 118: 59(int) Constant 8 + 121: 105(bool) ConstantFalse + 122: TypePointer Output 105(bool) + 145: TypeArray 33(ivec3) 47 + 146: TypePointer Output 145 +147(gl_PrimitiveTriangleIndicesEXT): 146(ptr) Variable Output + 148: 33(ivec3) ConstantComposite 78 78 78 + 149: TypePointer Output 33(ivec3) + 153: 33(ivec3) ConstantComposite 80 80 80 +161(gl_SubgroupSize): 37(ptr) Variable Input +162(gl_SubgroupInvocationID): 37(ptr) Variable Input + 163: 30(int) Constant 3400 + 164: 30(int) Constant 72 + 165: 30(int) Constant 2056 +167(gl_NumSubgroups): 37(ptr) Variable Input +168(gl_SubgroupID): 37(ptr) Variable Input + 169: TypeVector 30(int) 4 + 170: TypePointer Input 169(ivec4) +171(gl_SubgroupEqMask): 170(ptr) Variable Input +172(gl_SubgroupGeMask): 170(ptr) Variable Input +173(gl_SubgroupGtMask): 170(ptr) Variable Input +174(gl_SubgroupLeMask): 170(ptr) Variable Input +175(gl_SubgroupLtMask): 170(ptr) Variable Input + 180: TypePointer Function 169(ivec4) + 183: 169(ivec4) ConstantComposite 78 78 78 78 + 197: 105(bool) ConstantTrue + 254: 30(int) Constant 85 + 255: 169(ivec4) ConstantComposite 254 36 36 36 + 278: 33(ivec3) ConstantComposite 47 78 78 + 4(main): 2 Function None 3 + 5: Label + 32(iid): 31(ptr) Variable Function + 40(gid): 31(ptr) Variable Function + 44(vertexCount): 31(ptr) Variable Function +46(primitiveCount): 31(ptr) Variable Function + 38: 37(ptr) AccessChain 35(gl_LocalInvocationID) 36 + 39: 30(int) Load 38 + Store 32(iid) 39 + 42: 37(ptr) AccessChain 41(gl_WorkGroupID) 36 + 43: 30(int) Load 42 + Store 40(gid) 43 + Store 44(vertexCount) 45 + Store 46(primitiveCount) 47 + 48: 30(int) Load 44(vertexCount) + 49: 30(int) Load 46(primitiveCount) + SetMeshOutputsEXT 48 49 + 58: 30(int) Load 32(iid) + 64: 63(ptr) AccessChain 57(gl_MeshVerticesEXT) 58 60 + Store 64 62 + 65: 30(int) Load 32(iid) + 69: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 65 66 + Store 69 67 + 70: 30(int) Load 32(iid) + 74: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 70 71 72 + Store 74 73 + 75: 30(int) Load 32(iid) + 77: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 75 72 71 + Store 77 76 + MemoryBarrier 78 79 + ControlBarrier 80 80 79 + 81: 30(int) Load 32(iid) + 82: 30(int) IAdd 81 78 + 83: 30(int) Load 32(iid) + 84: 63(ptr) AccessChain 57(gl_MeshVerticesEXT) 83 60 + 85: 9(fvec4) Load 84 + 86: 63(ptr) AccessChain 57(gl_MeshVerticesEXT) 82 60 + Store 86 85 + 87: 30(int) Load 32(iid) + 88: 30(int) IAdd 87 78 + 89: 30(int) Load 32(iid) + 90: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 89 66 + 91: 8(float) Load 90 + 92: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 88 66 + Store 92 91 + 93: 30(int) Load 32(iid) + 94: 30(int) IAdd 93 78 + 95: 30(int) Load 32(iid) + 96: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 95 71 72 + 97: 8(float) Load 96 + 98: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 94 71 72 + Store 98 97 + 99: 30(int) Load 32(iid) + 100: 30(int) IAdd 99 78 + 101: 30(int) Load 32(iid) + 102: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 101 72 71 + 103: 8(float) Load 102 + 104: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 100 72 71 + Store 104 103 + MemoryBarrier 78 79 + ControlBarrier 80 80 79 + 110: 30(int) Load 32(iid) + 113: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 110 60 + Store 113 111 + 114: 30(int) Load 32(iid) + 116: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 114 66 + Store 116 115 + 117: 30(int) Load 32(iid) + 119: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 117 71 + Store 119 118 + 120: 30(int) Load 32(iid) + 123: 122(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 120 72 + Store 123 121 + MemoryBarrier 78 79 + ControlBarrier 80 80 79 + 124: 30(int) Load 32(iid) + 125: 30(int) IAdd 124 78 + 126: 30(int) Load 32(iid) + 127: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 126 60 + 128: 59(int) Load 127 + 129: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 125 60 + Store 129 128 + 130: 30(int) Load 32(iid) + 131: 30(int) IAdd 130 78 + 132: 30(int) Load 32(iid) + 133: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 132 66 + 134: 59(int) Load 133 + 135: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 131 66 + Store 135 134 + 136: 30(int) Load 32(iid) + 137: 30(int) IAdd 136 78 + 138: 30(int) Load 32(iid) + 139: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 138 71 + 140: 59(int) Load 139 + 141: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 137 71 + Store 141 140 + 142: 30(int) Load 32(iid) + 143: 30(int) IAdd 142 78 + 144: 122(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 143 72 + Store 144 121 + MemoryBarrier 78 79 + ControlBarrier 80 80 79 + 150: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 60 + Store 150 148 + 151: 30(int) Load 46(primitiveCount) + 152: 30(int) ISub 151 78 + 154: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 152 + Store 154 153 + 155: 30(int) Load 40(gid) + 156: 30(int) Load 40(gid) + 157: 30(int) ISub 156 78 + 158: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 157 + 159: 33(ivec3) Load 158 + 160: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 155 + Store 160 159 + MemoryBarrier 78 79 + ControlBarrier 80 80 79 + Return + FunctionEnd + 6(basic_works(): 2 Function None 3 + 7: Label + ControlBarrier 52 52 163 + MemoryBarrier 52 163 + MemoryBarrier 52 164 + MemoryBarrier 52 165 + 166: 105(bool) GroupNonUniformElect 52 + MemoryBarrier 52 79 + Return + FunctionEnd +13(ballot_works(vf4;): 2 Function None 11 + 12(f4): 10(ptr) FunctionParameter + 14: Label + 181(ballot): 180(ptr) Variable Function + 176: 9(fvec4) Load 12(f4) + 177: 9(fvec4) GroupNonUniformBroadcast 52 176 36 + 178: 9(fvec4) Load 12(f4) + 179: 9(fvec4) GroupNonUniformBroadcastFirst 52 178 + 182: 169(ivec4) GroupNonUniformBallot 52 121 + Store 181(ballot) 182 + 184: 105(bool) GroupNonUniformInverseBallot 52 183 + 185: 169(ivec4) Load 181(ballot) + 186: 105(bool) GroupNonUniformBallotBitExtract 52 185 36 + 187: 169(ivec4) Load 181(ballot) + 188: 30(int) GroupNonUniformBallotBitCount 52 Reduce 187 + 189: 169(ivec4) Load 181(ballot) + 190: 30(int) GroupNonUniformBallotBitCount 52 InclusiveScan 189 + 191: 169(ivec4) Load 181(ballot) + 192: 30(int) GroupNonUniformBallotBitCount 52 ExclusiveScan 191 + 193: 169(ivec4) Load 181(ballot) + 194: 30(int) GroupNonUniformBallotFindLSB 52 193 + 195: 169(ivec4) Load 181(ballot) + 196: 30(int) GroupNonUniformBallotFindMSB 52 195 + Return + FunctionEnd +16(vote_works(vf4;): 2 Function None 11 + 15(f4): 10(ptr) FunctionParameter + 17: Label + 198: 105(bool) GroupNonUniformAll 52 197 + 199: 105(bool) GroupNonUniformAny 52 121 + 200: 9(fvec4) Load 15(f4) + 201: 105(bool) GroupNonUniformAllEqual 52 200 + Return + FunctionEnd +19(shuffle_works(vf4;): 2 Function None 11 + 18(f4): 10(ptr) FunctionParameter + 20: Label + 202: 9(fvec4) Load 18(f4) + 203: 9(fvec4) GroupNonUniformShuffle 52 202 36 + 204: 9(fvec4) Load 18(f4) + 205: 9(fvec4) GroupNonUniformShuffleXor 52 204 78 + 206: 9(fvec4) Load 18(f4) + 207: 9(fvec4) GroupNonUniformShuffleUp 52 206 78 + 208: 9(fvec4) Load 18(f4) + 209: 9(fvec4) GroupNonUniformShuffleDown 52 208 78 + Return + FunctionEnd +22(arith_works(vf4;): 2 Function None 11 + 21(f4): 10(ptr) FunctionParameter + 23: Label + 218(ballot): 180(ptr) Variable Function + 210: 9(fvec4) Load 21(f4) + 211: 9(fvec4) GroupNonUniformFAdd 52 Reduce 210 + 212: 9(fvec4) Load 21(f4) + 213: 9(fvec4) GroupNonUniformFMul 52 Reduce 212 + 214: 9(fvec4) Load 21(f4) + 215: 9(fvec4) GroupNonUniformFMin 52 Reduce 214 + 216: 9(fvec4) Load 21(f4) + 217: 9(fvec4) GroupNonUniformFMax 52 Reduce 216 + 219: 169(ivec4) Load 218(ballot) + 220: 169(ivec4) GroupNonUniformBitwiseAnd 52 Reduce 219 + 221: 169(ivec4) Load 218(ballot) + 222: 169(ivec4) GroupNonUniformBitwiseOr 52 Reduce 221 + 223: 169(ivec4) Load 218(ballot) + 224: 169(ivec4) GroupNonUniformBitwiseXor 52 Reduce 223 + 225: 9(fvec4) Load 21(f4) + 226: 9(fvec4) GroupNonUniformFAdd 52 InclusiveScan 225 + 227: 9(fvec4) Load 21(f4) + 228: 9(fvec4) GroupNonUniformFMul 52 InclusiveScan 227 + 229: 9(fvec4) Load 21(f4) + 230: 9(fvec4) GroupNonUniformFMin 52 InclusiveScan 229 + 231: 9(fvec4) Load 21(f4) + 232: 9(fvec4) GroupNonUniformFMax 52 InclusiveScan 231 + 233: 169(ivec4) Load 218(ballot) + 234: 169(ivec4) GroupNonUniformBitwiseAnd 52 InclusiveScan 233 + 235: 169(ivec4) Load 218(ballot) + 236: 169(ivec4) GroupNonUniformBitwiseOr 52 InclusiveScan 235 + 237: 169(ivec4) Load 218(ballot) + 238: 169(ivec4) GroupNonUniformBitwiseXor 52 InclusiveScan 237 + 239: 9(fvec4) Load 21(f4) + 240: 9(fvec4) GroupNonUniformFAdd 52 ExclusiveScan 239 + 241: 9(fvec4) Load 21(f4) + 242: 9(fvec4) GroupNonUniformFMul 52 ExclusiveScan 241 + 243: 9(fvec4) Load 21(f4) + 244: 9(fvec4) GroupNonUniformFMin 52 ExclusiveScan 243 + 245: 9(fvec4) Load 21(f4) + 246: 9(fvec4) GroupNonUniformFMax 52 ExclusiveScan 245 + 247: 169(ivec4) Load 218(ballot) + 248: 169(ivec4) GroupNonUniformBitwiseAnd 52 ExclusiveScan 247 + 249: 169(ivec4) Load 218(ballot) + 250: 169(ivec4) GroupNonUniformBitwiseOr 52 ExclusiveScan 249 + 251: 169(ivec4) Load 218(ballot) + 252: 169(ivec4) GroupNonUniformBitwiseXor 52 ExclusiveScan 251 + Return + FunctionEnd +25(clustered_works(vf4;): 2 Function None 11 + 24(f4): 10(ptr) FunctionParameter + 26: Label + 253(ballot): 180(ptr) Variable Function + Store 253(ballot) 255 + 256: 9(fvec4) Load 24(f4) + 257: 9(fvec4) GroupNonUniformFAdd 52 ClusteredReduce 256 80 + 258: 9(fvec4) Load 24(f4) + 259: 9(fvec4) GroupNonUniformFMul 52 ClusteredReduce 258 80 + 260: 9(fvec4) Load 24(f4) + 261: 9(fvec4) GroupNonUniformFMin 52 ClusteredReduce 260 80 + 262: 9(fvec4) Load 24(f4) + 263: 9(fvec4) GroupNonUniformFMax 52 ClusteredReduce 262 80 + 264: 169(ivec4) Load 253(ballot) + 265: 169(ivec4) GroupNonUniformBitwiseAnd 52 ClusteredReduce 264 80 + 266: 169(ivec4) Load 253(ballot) + 267: 169(ivec4) GroupNonUniformBitwiseOr 52 ClusteredReduce 266 80 + 268: 169(ivec4) Load 253(ballot) + 269: 169(ivec4) GroupNonUniformBitwiseXor 52 ClusteredReduce 268 80 + Return + FunctionEnd +28(quad_works(vf4;): 2 Function None 11 + 27(f4): 10(ptr) FunctionParameter + 29: Label + 270: 9(fvec4) Load 27(f4) + 271: 9(fvec4) GroupNonUniformQuadBroadcast 52 270 36 + 272: 9(fvec4) Load 27(f4) + 273: 9(fvec4) GroupNonUniformQuadSwap 52 272 36 + 274: 9(fvec4) Load 27(f4) + 275: 9(fvec4) GroupNonUniformQuadSwap 52 274 78 + 276: 9(fvec4) Load 27(f4) + 277: 9(fvec4) GroupNonUniformQuadSwap 52 276 80 + Return + FunctionEnd diff --git a/Test/baseResults/spv.460.subgroupEXT.task.out b/Test/baseResults/spv.460.subgroupEXT.task.out new file mode 100644 index 0000000000..4424b2acfb --- /dev/null +++ b/Test/baseResults/spv.460.subgroupEXT.task.out @@ -0,0 +1,375 @@ +spv.460.subgroupEXT.task +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 243 + + Capability StorageImageWriteWithoutFormat + Capability GroupNonUniform + Capability GroupNonUniformVote + Capability GroupNonUniformArithmetic + Capability GroupNonUniformBallot + Capability GroupNonUniformShuffle + Capability GroupNonUniformShuffleRelative + Capability GroupNonUniformClustered + Capability GroupNonUniformQuad + Capability MeshShadingEXT + Extension "SPV_EXT_mesh_shader" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TaskEXT 4 "main" 35 41 56 61 77 102 123 124 129 130 133 134 135 136 137 + ExecutionMode 4 LocalSize 32 1 1 + Source GLSL 460 + SourceExtension "GL_EXT_mesh_shader" + SourceExtension "GL_KHR_shader_subgroup_arithmetic" + SourceExtension "GL_KHR_shader_subgroup_ballot" + SourceExtension "GL_KHR_shader_subgroup_basic" + SourceExtension "GL_KHR_shader_subgroup_clustered" + SourceExtension "GL_KHR_shader_subgroup_quad" + SourceExtension "GL_KHR_shader_subgroup_shuffle" + SourceExtension "GL_KHR_shader_subgroup_shuffle_relative" + SourceExtension "GL_KHR_shader_subgroup_vote" + Name 4 "main" + Name 6 "basic_works(" + Name 13 "ballot_works(vf4;" + Name 12 "f4" + Name 16 "vote_works(vf4;" + Name 15 "f4" + Name 19 "shuffle_works(vf4;" + Name 18 "f4" + Name 22 "arith_works(vf4;" + Name 21 "f4" + Name 25 "clustered_works(vf4;" + Name 24 "f4" + Name 28 "quad_works(vf4;" + Name 27 "f4" + Name 32 "iid" + Name 35 "gl_LocalInvocationID" + Name 40 "gid" + Name 41 "gl_WorkGroupID" + Name 44 "i" + Name 56 "mem" + Name 59 "block0" + MemberName 59(block0) 0 "uni_value" + Name 61 "" + Name 77 "uni_image" + Name 100 "Task" + MemberName 100(Task) 0 "dummy" + MemberName 100(Task) 1 "submesh" + Name 102 "mytask" + Name 123 "gl_SubgroupSize" + Name 124 "gl_SubgroupInvocationID" + Name 129 "gl_NumSubgroups" + Name 130 "gl_SubgroupID" + Name 133 "gl_SubgroupEqMask" + Name 134 "gl_SubgroupGeMask" + Name 135 "gl_SubgroupGtMask" + Name 136 "gl_SubgroupLeMask" + Name 137 "gl_SubgroupLtMask" + Name 143 "ballot" + Name 181 "ballot" + Name 216 "ballot" + Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 59(block0) Block + MemberDecorate 59(block0) 0 Offset 0 + Decorate 61 Binding 1 + Decorate 61 DescriptorSet 0 + Decorate 77(uni_image) NonReadable + Decorate 77(uni_image) Binding 0 + Decorate 77(uni_image) DescriptorSet 0 + Decorate 123(gl_SubgroupSize) RelaxedPrecision + Decorate 123(gl_SubgroupSize) BuiltIn SubgroupSize + Decorate 124(gl_SubgroupInvocationID) RelaxedPrecision + Decorate 124(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId + Decorate 129(gl_NumSubgroups) BuiltIn NumSubgroups + Decorate 130(gl_SubgroupID) BuiltIn SubgroupId + Decorate 133(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR + Decorate 134(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR + Decorate 135(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR + Decorate 136(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR + Decorate 137(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR + Decorate 242 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10: TypePointer Function 9(fvec4) + 11: TypeFunction 2 10(ptr) + 30: TypeInt 32 0 + 31: TypePointer Function 30(int) + 33: TypeVector 30(int) 3 + 34: TypePointer Input 33(ivec3) +35(gl_LocalInvocationID): 34(ptr) Variable Input + 36: 30(int) Constant 0 + 37: TypePointer Input 30(int) +41(gl_WorkGroupID): 34(ptr) Variable Input + 51: 30(int) Constant 10 + 52: TypeBool + 54: TypeArray 9(fvec4) 51 + 55: TypePointer Workgroup 54 + 56(mem): 55(ptr) Variable Workgroup + 59(block0): TypeStruct 30(int) + 60: TypePointer Uniform 59(block0) + 61: 60(ptr) Variable Uniform + 62: TypeInt 32 1 + 63: 62(int) Constant 0 + 64: TypePointer Uniform 30(int) + 70: TypePointer Workgroup 9(fvec4) + 73: 62(int) Constant 1 + 75: TypeImage 8(float) 2D nonsampled format:Unknown + 76: TypePointer UniformConstant 75 + 77(uni_image): 76(ptr) Variable UniformConstant + 81: TypeVector 62(int) 2 + 91: 30(int) Constant 1 + 95: 30(int) Constant 264 + 96: 30(int) Constant 2 + 97: TypeVector 8(float) 2 + 98: 30(int) Constant 3 + 99: TypeArray 97(fvec2) 98 + 100(Task): TypeStruct 97(fvec2) 99 + 101: TypePointer TaskPayloadWorkgroupEXT 100(Task) + 102(mytask): 101(ptr) Variable TaskPayloadWorkgroupEXT + 103: 8(float) Constant 1106247680 + 104: 8(float) Constant 1106771968 + 105: 97(fvec2) ConstantComposite 103 104 + 106: TypePointer TaskPayloadWorkgroupEXT 97(fvec2) + 108: 8(float) Constant 1107296256 + 109: 8(float) Constant 1107558400 + 110: 97(fvec2) ConstantComposite 108 109 + 112: 8(float) Constant 1107820544 + 113: 8(float) Constant 1108082688 + 114: 97(fvec2) ConstantComposite 112 113 + 116: 62(int) Constant 2 +123(gl_SubgroupSize): 37(ptr) Variable Input +124(gl_SubgroupInvocationID): 37(ptr) Variable Input + 125: 30(int) Constant 3400 + 126: 30(int) Constant 72 + 127: 30(int) Constant 2056 +129(gl_NumSubgroups): 37(ptr) Variable Input +130(gl_SubgroupID): 37(ptr) Variable Input + 131: TypeVector 30(int) 4 + 132: TypePointer Input 131(ivec4) +133(gl_SubgroupEqMask): 132(ptr) Variable Input +134(gl_SubgroupGeMask): 132(ptr) Variable Input +135(gl_SubgroupGtMask): 132(ptr) Variable Input +136(gl_SubgroupLeMask): 132(ptr) Variable Input +137(gl_SubgroupLtMask): 132(ptr) Variable Input + 142: TypePointer Function 131(ivec4) + 144: 52(bool) ConstantFalse + 146: 131(ivec4) ConstantComposite 91 91 91 91 + 160: 52(bool) ConstantTrue + 217: 30(int) Constant 85 + 218: 131(ivec4) ConstantComposite 217 36 36 36 + 241: 30(int) Constant 32 + 242: 33(ivec3) ConstantComposite 241 91 91 + 4(main): 2 Function None 3 + 5: Label + 32(iid): 31(ptr) Variable Function + 40(gid): 31(ptr) Variable Function + 44(i): 31(ptr) Variable Function + 38: 37(ptr) AccessChain 35(gl_LocalInvocationID) 36 + 39: 30(int) Load 38 + Store 32(iid) 39 + 42: 37(ptr) AccessChain 41(gl_WorkGroupID) 36 + 43: 30(int) Load 42 + Store 40(gid) 43 + Store 44(i) 36 + Branch 45 + 45: Label + LoopMerge 47 48 None + Branch 49 + 49: Label + 50: 30(int) Load 44(i) + 53: 52(bool) ULessThan 50 51 + BranchConditional 53 46 47 + 46: Label + 57: 30(int) Load 44(i) + 58: 30(int) Load 44(i) + 65: 64(ptr) AccessChain 61 63 + 66: 30(int) Load 65 + 67: 30(int) IAdd 58 66 + 68: 8(float) ConvertUToF 67 + 69: 9(fvec4) CompositeConstruct 68 68 68 68 + 71: 70(ptr) AccessChain 56(mem) 57 + Store 71 69 + Branch 48 + 48: Label + 72: 30(int) Load 44(i) + 74: 30(int) IAdd 72 73 + Store 44(i) 74 + Branch 45 + 47: Label + 78: 75 Load 77(uni_image) + 79: 30(int) Load 32(iid) + 80: 62(int) Bitcast 79 + 82: 81(ivec2) CompositeConstruct 80 80 + 83: 30(int) Load 40(gid) + 84: 70(ptr) AccessChain 56(mem) 83 + 85: 9(fvec4) Load 84 + ImageWrite 78 82 85 + 86: 75 Load 77(uni_image) + 87: 30(int) Load 32(iid) + 88: 62(int) Bitcast 87 + 89: 81(ivec2) CompositeConstruct 88 88 + 90: 30(int) Load 40(gid) + 92: 30(int) IAdd 90 91 + 93: 70(ptr) AccessChain 56(mem) 92 + 94: 9(fvec4) Load 93 + ImageWrite 86 89 94 + MemoryBarrier 91 95 + ControlBarrier 96 96 95 + 107: 106(ptr) AccessChain 102(mytask) 63 + Store 107 105 + 111: 106(ptr) AccessChain 102(mytask) 73 63 + Store 111 110 + 115: 106(ptr) AccessChain 102(mytask) 73 73 + Store 115 114 + 117: 30(int) Load 40(gid) + 118: 30(int) UMod 117 96 + 119: 106(ptr) AccessChain 102(mytask) 73 118 + 120: 97(fvec2) Load 119 + 121: 106(ptr) AccessChain 102(mytask) 73 116 + Store 121 120 + MemoryBarrier 91 95 + ControlBarrier 96 96 95 + EmitMeshTasksEXT 98 91 91 102(mytask) + FunctionEnd + 6(basic_works(): 2 Function None 3 + 7: Label + ControlBarrier 98 98 125 + MemoryBarrier 98 125 + MemoryBarrier 98 126 + MemoryBarrier 98 127 + 128: 52(bool) GroupNonUniformElect 98 + MemoryBarrier 98 95 + Return + FunctionEnd +13(ballot_works(vf4;): 2 Function None 11 + 12(f4): 10(ptr) FunctionParameter + 14: Label + 143(ballot): 142(ptr) Variable Function + 138: 9(fvec4) Load 12(f4) + 139: 9(fvec4) GroupNonUniformBroadcast 98 138 36 + 140: 9(fvec4) Load 12(f4) + 141: 9(fvec4) GroupNonUniformBroadcastFirst 98 140 + 145: 131(ivec4) GroupNonUniformBallot 98 144 + Store 143(ballot) 145 + 147: 52(bool) GroupNonUniformInverseBallot 98 146 + 148: 131(ivec4) Load 143(ballot) + 149: 52(bool) GroupNonUniformBallotBitExtract 98 148 36 + 150: 131(ivec4) Load 143(ballot) + 151: 30(int) GroupNonUniformBallotBitCount 98 Reduce 150 + 152: 131(ivec4) Load 143(ballot) + 153: 30(int) GroupNonUniformBallotBitCount 98 InclusiveScan 152 + 154: 131(ivec4) Load 143(ballot) + 155: 30(int) GroupNonUniformBallotBitCount 98 ExclusiveScan 154 + 156: 131(ivec4) Load 143(ballot) + 157: 30(int) GroupNonUniformBallotFindLSB 98 156 + 158: 131(ivec4) Load 143(ballot) + 159: 30(int) GroupNonUniformBallotFindMSB 98 158 + Return + FunctionEnd +16(vote_works(vf4;): 2 Function None 11 + 15(f4): 10(ptr) FunctionParameter + 17: Label + 161: 52(bool) GroupNonUniformAll 98 160 + 162: 52(bool) GroupNonUniformAny 98 144 + 163: 9(fvec4) Load 15(f4) + 164: 52(bool) GroupNonUniformAllEqual 98 163 + Return + FunctionEnd +19(shuffle_works(vf4;): 2 Function None 11 + 18(f4): 10(ptr) FunctionParameter + 20: Label + 165: 9(fvec4) Load 18(f4) + 166: 9(fvec4) GroupNonUniformShuffle 98 165 36 + 167: 9(fvec4) Load 18(f4) + 168: 9(fvec4) GroupNonUniformShuffleXor 98 167 91 + 169: 9(fvec4) Load 18(f4) + 170: 9(fvec4) GroupNonUniformShuffleUp 98 169 91 + 171: 9(fvec4) Load 18(f4) + 172: 9(fvec4) GroupNonUniformShuffleDown 98 171 91 + Return + FunctionEnd +22(arith_works(vf4;): 2 Function None 11 + 21(f4): 10(ptr) FunctionParameter + 23: Label + 181(ballot): 142(ptr) Variable Function + 173: 9(fvec4) Load 21(f4) + 174: 9(fvec4) GroupNonUniformFAdd 98 Reduce 173 + 175: 9(fvec4) Load 21(f4) + 176: 9(fvec4) GroupNonUniformFMul 98 Reduce 175 + 177: 9(fvec4) Load 21(f4) + 178: 9(fvec4) GroupNonUniformFMin 98 Reduce 177 + 179: 9(fvec4) Load 21(f4) + 180: 9(fvec4) GroupNonUniformFMax 98 Reduce 179 + 182: 131(ivec4) Load 181(ballot) + 183: 131(ivec4) GroupNonUniformBitwiseAnd 98 Reduce 182 + 184: 131(ivec4) Load 181(ballot) + 185: 131(ivec4) GroupNonUniformBitwiseOr 98 Reduce 184 + 186: 131(ivec4) Load 181(ballot) + 187: 131(ivec4) GroupNonUniformBitwiseXor 98 Reduce 186 + 188: 9(fvec4) Load 21(f4) + 189: 9(fvec4) GroupNonUniformFAdd 98 InclusiveScan 188 + 190: 9(fvec4) Load 21(f4) + 191: 9(fvec4) GroupNonUniformFMul 98 InclusiveScan 190 + 192: 9(fvec4) Load 21(f4) + 193: 9(fvec4) GroupNonUniformFMin 98 InclusiveScan 192 + 194: 9(fvec4) Load 21(f4) + 195: 9(fvec4) GroupNonUniformFMax 98 InclusiveScan 194 + 196: 131(ivec4) Load 181(ballot) + 197: 131(ivec4) GroupNonUniformBitwiseAnd 98 InclusiveScan 196 + 198: 131(ivec4) Load 181(ballot) + 199: 131(ivec4) GroupNonUniformBitwiseOr 98 InclusiveScan 198 + 200: 131(ivec4) Load 181(ballot) + 201: 131(ivec4) GroupNonUniformBitwiseXor 98 InclusiveScan 200 + 202: 9(fvec4) Load 21(f4) + 203: 9(fvec4) GroupNonUniformFAdd 98 ExclusiveScan 202 + 204: 9(fvec4) Load 21(f4) + 205: 9(fvec4) GroupNonUniformFMul 98 ExclusiveScan 204 + 206: 9(fvec4) Load 21(f4) + 207: 9(fvec4) GroupNonUniformFMin 98 ExclusiveScan 206 + 208: 9(fvec4) Load 21(f4) + 209: 9(fvec4) GroupNonUniformFMax 98 ExclusiveScan 208 + 210: 131(ivec4) Load 181(ballot) + 211: 131(ivec4) GroupNonUniformBitwiseAnd 98 ExclusiveScan 210 + 212: 131(ivec4) Load 181(ballot) + 213: 131(ivec4) GroupNonUniformBitwiseOr 98 ExclusiveScan 212 + 214: 131(ivec4) Load 181(ballot) + 215: 131(ivec4) GroupNonUniformBitwiseXor 98 ExclusiveScan 214 + Return + FunctionEnd +25(clustered_works(vf4;): 2 Function None 11 + 24(f4): 10(ptr) FunctionParameter + 26: Label + 216(ballot): 142(ptr) Variable Function + Store 216(ballot) 218 + 219: 9(fvec4) Load 24(f4) + 220: 9(fvec4) GroupNonUniformFAdd 98 ClusteredReduce 219 96 + 221: 9(fvec4) Load 24(f4) + 222: 9(fvec4) GroupNonUniformFMul 98 ClusteredReduce 221 96 + 223: 9(fvec4) Load 24(f4) + 224: 9(fvec4) GroupNonUniformFMin 98 ClusteredReduce 223 96 + 225: 9(fvec4) Load 24(f4) + 226: 9(fvec4) GroupNonUniformFMax 98 ClusteredReduce 225 96 + 227: 131(ivec4) Load 216(ballot) + 228: 131(ivec4) GroupNonUniformBitwiseAnd 98 ClusteredReduce 227 96 + 229: 131(ivec4) Load 216(ballot) + 230: 131(ivec4) GroupNonUniformBitwiseOr 98 ClusteredReduce 229 96 + 231: 131(ivec4) Load 216(ballot) + 232: 131(ivec4) GroupNonUniformBitwiseXor 98 ClusteredReduce 231 96 + Return + FunctionEnd +28(quad_works(vf4;): 2 Function None 11 + 27(f4): 10(ptr) FunctionParameter + 29: Label + 233: 9(fvec4) Load 27(f4) + 234: 9(fvec4) GroupNonUniformQuadBroadcast 98 233 36 + 235: 9(fvec4) Load 27(f4) + 236: 9(fvec4) GroupNonUniformQuadSwap 98 235 36 + 237: 9(fvec4) Load 27(f4) + 238: 9(fvec4) GroupNonUniformQuadSwap 98 237 91 + 239: 9(fvec4) Load 27(f4) + 240: 9(fvec4) GroupNonUniformQuadSwap 98 239 96 + Return + FunctionEnd diff --git a/Test/baseResults/spv.460.vert.out b/Test/baseResults/spv.460.vert.out index e15f36474d..eb75ab8a9a 100644 --- a/Test/baseResults/spv.460.vert.out +++ b/Test/baseResults/spv.460.vert.out @@ -1,6 +1,6 @@ spv.460.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader diff --git a/Test/baseResults/spv.8bit-16bit-construction.frag.out b/Test/baseResults/spv.8bit-16bit-construction.frag.out index 4eb90210d7..78e941a21d 100644 --- a/Test/baseResults/spv.8bit-16bit-construction.frag.out +++ b/Test/baseResults/spv.8bit-16bit-construction.frag.out @@ -1,7 +1,7 @@ spv.8bit-16bit-construction.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 43 Capability Shader @@ -24,14 +24,14 @@ Validation failed MemberName 11(B) 3 "u16_from_u8" MemberName 11(B) 4 "f16_from_i8" Name 13 "" + Decorate 11(B) BufferBlock MemberDecorate 11(B) 0 Offset 0 MemberDecorate 11(B) 1 Offset 2 MemberDecorate 11(B) 2 Offset 4 MemberDecorate 11(B) 3 Offset 6 MemberDecorate 11(B) 4 Offset 8 - Decorate 11(B) BufferBlock - Decorate 13 DescriptorSet 0 Decorate 13 Binding 0 + Decorate 13 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 8 1 diff --git a/Test/baseResults/spv.8bitstorage-int.frag.out b/Test/baseResults/spv.8bitstorage-int.frag.out index 00ef309873..a40e2c1dec 100644 --- a/Test/baseResults/spv.8bitstorage-int.frag.out +++ b/Test/baseResults/spv.8bitstorage-int.frag.out @@ -1,7 +1,7 @@ spv.8bitstorage-int.frag // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 171 +// Generated by (magic number): 8000b +// Id's are bound by 180 Capability Shader Capability UniformAndStorageBuffer8BitAccess @@ -82,6 +82,7 @@ spv.8bitstorage-int.frag Decorate 13 ArrayStride 8 Decorate 15 ArrayStride 2 Decorate 16 ArrayStride 1 + Decorate 17(B2) BufferBlock MemberDecorate 17(B2) 0 Offset 0 MemberDecorate 17(B2) 1 Offset 2 MemberDecorate 17(B2) 2 Offset 4 @@ -90,14 +91,14 @@ spv.8bitstorage-int.frag MemberDecorate 17(B2) 5 Offset 20 MemberDecorate 17(B2) 6 Offset 36 MemberDecorate 17(B2) 7 Offset 236 - Decorate 17(B2) BufferBlock - Decorate 19(b2) DescriptorSet 0 Decorate 19(b2) Binding 1 + Decorate 19(b2) DescriptorSet 0 Decorate 22 ArrayStride 16 MemberDecorate 23(S) 0 Offset 0 MemberDecorate 23(S) 1 Offset 2 MemberDecorate 23(S) 2 Offset 4 Decorate 24 ArrayStride 16 + Decorate 25(B1) Block MemberDecorate 25(B1) 0 Offset 0 MemberDecorate 25(B1) 1 Offset 2 MemberDecorate 25(B1) 2 Offset 4 @@ -105,9 +106,8 @@ spv.8bitstorage-int.frag MemberDecorate 25(B1) 4 Offset 48 MemberDecorate 25(B1) 5 Offset 64 MemberDecorate 25(B1) 6 Offset 96 - Decorate 25(B1) Block - Decorate 27(b1) DescriptorSet 0 Decorate 27(b1) Binding 0 + Decorate 27(b1) DescriptorSet 0 Decorate 44 ArrayStride 16 MemberDecorate 45(S) 0 Offset 0 MemberDecorate 45(S) 1 Offset 2 @@ -115,6 +115,7 @@ spv.8bitstorage-int.frag Decorate 46 ArrayStride 16 Decorate 47 ArrayStride 16 Decorate 48 ArrayStride 16 + Decorate 49(B5) Block MemberDecorate 49(B5) 0 Offset 0 MemberDecorate 49(B5) 1 Offset 2 MemberDecorate 49(B5) 2 Offset 4 @@ -123,29 +124,28 @@ spv.8bitstorage-int.frag MemberDecorate 49(B5) 5 Offset 64 MemberDecorate 49(B5) 6 Offset 96 MemberDecorate 49(B5) 7 Offset 1696 - Decorate 49(B5) Block - Decorate 51(b5) DescriptorSet 0 Decorate 51(b5) Binding 2 + Decorate 51(b5) DescriptorSet 0 MemberDecorate 88(S2) 0 ColMajor - MemberDecorate 88(S2) 0 Offset 0 MemberDecorate 88(S2) 0 MatrixStride 16 + MemberDecorate 88(S2) 0 Offset 0 MemberDecorate 88(S2) 1 Offset 64 MemberDecorate 88(S2) 2 Offset 68 MemberDecorate 89(S3) 0 Offset 0 + Decorate 90(B4) BufferBlock MemberDecorate 90(B4) 0 Offset 0 MemberDecorate 90(B4) 1 Offset 80 - Decorate 90(B4) BufferBlock - Decorate 92(b4) DescriptorSet 0 Decorate 92(b4) Binding 4 + Decorate 92(b4) DescriptorSet 0 MemberDecorate 93(S2) 0 RowMajor - MemberDecorate 93(S2) 0 Offset 0 MemberDecorate 93(S2) 0 MatrixStride 16 + MemberDecorate 93(S2) 0 Offset 0 MemberDecorate 93(S2) 1 Offset 64 MemberDecorate 93(S2) 2 Offset 68 - MemberDecorate 94(B3) 0 Offset 0 Decorate 94(B3) BufferBlock - Decorate 96(b3) DescriptorSet 0 + MemberDecorate 94(B3) 0 Offset 0 Decorate 96(b3) Binding 3 + Decorate 96(b3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 8 1 @@ -334,5 +334,17 @@ spv.8bitstorage-int.frag 169: 6(int8_t) SConvert 58 170: 28(ptr) AccessChain 19(b2) 21 Store 170 169 + 171: 28(ptr) AccessChain 27(b1) 21 + 172: 6(int8_t) Load 171 + 173: 28(ptr) AccessChain 19(b2) 21 + Store 173 172 + 174: 42(ptr) AccessChain 27(b1) 32 + 175: 7(i8vec2) Load 174 + 176: 42(ptr) AccessChain 19(b2) 32 + Store 176 175 + 177: 34(ptr) AccessChain 27(b1) 33 + 178: 8(i8vec3) Load 177 + 179: 34(ptr) AccessChain 19(b2) 33 + Store 179 178 Return FunctionEnd diff --git a/Test/baseResults/spv.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.8bitstorage-ssbo.vert.out index 863eb68ffd..012b50f7d3 100644 --- a/Test/baseResults/spv.8bitstorage-ssbo.vert.out +++ b/Test/baseResults/spv.8bitstorage-ssbo.vert.out @@ -1,6 +1,6 @@ spv.8bitstorage-ssbo.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 28 Capability Shader @@ -19,11 +19,12 @@ spv.8bitstorage-ssbo.vert Name 18 "gl_VertexIndex" Decorate 9(color) Location 0 Decorate 11 ArrayStride 1 + Decorate 12(Vertices) BufferBlock MemberDecorate 12(Vertices) 0 NonWritable MemberDecorate 12(Vertices) 0 Offset 0 - Decorate 12(Vertices) BufferBlock - Decorate 14 DescriptorSet 0 + Decorate 14 NonWritable Decorate 14 Binding 0 + Decorate 14 DescriptorSet 0 Decorate 18(gl_VertexIndex) BuiltIn VertexIndex 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.8bitstorage-ubo.vert.out b/Test/baseResults/spv.8bitstorage-ubo.vert.out index c64945fa6a..2207b6fdce 100644 --- a/Test/baseResults/spv.8bitstorage-ubo.vert.out +++ b/Test/baseResults/spv.8bitstorage-ubo.vert.out @@ -1,6 +1,6 @@ spv.8bitstorage-ubo.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -19,10 +19,11 @@ spv.8bitstorage-ubo.vert Name 20 "gl_VertexIndex" Decorate 9(color) Location 0 Decorate 13 ArrayStride 16 - MemberDecorate 14(Vertices) 0 Offset 0 Decorate 14(Vertices) Block - Decorate 16 DescriptorSet 0 + MemberDecorate 14(Vertices) 0 Offset 0 + Decorate 16 NonWritable Decorate 16 Binding 0 + Decorate 16 DescriptorSet 0 Decorate 20(gl_VertexIndex) BuiltIn VertexIndex 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.8bitstorage-uint.frag.out b/Test/baseResults/spv.8bitstorage-uint.frag.out index 5809991fcc..a90edf12d9 100644 --- a/Test/baseResults/spv.8bitstorage-uint.frag.out +++ b/Test/baseResults/spv.8bitstorage-uint.frag.out @@ -1,7 +1,7 @@ spv.8bitstorage-uint.frag // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 173 +// Generated by (magic number): 8000b +// Id's are bound by 182 Capability Shader Capability UniformAndStorageBuffer8BitAccess @@ -82,6 +82,7 @@ spv.8bitstorage-uint.frag Decorate 13 ArrayStride 8 Decorate 15 ArrayStride 2 Decorate 16 ArrayStride 1 + Decorate 17(B2) BufferBlock MemberDecorate 17(B2) 0 Offset 0 MemberDecorate 17(B2) 1 Offset 2 MemberDecorate 17(B2) 2 Offset 4 @@ -90,14 +91,14 @@ spv.8bitstorage-uint.frag MemberDecorate 17(B2) 5 Offset 20 MemberDecorate 17(B2) 6 Offset 36 MemberDecorate 17(B2) 7 Offset 236 - Decorate 17(B2) BufferBlock - Decorate 19(b2) DescriptorSet 0 Decorate 19(b2) Binding 1 + Decorate 19(b2) DescriptorSet 0 Decorate 22 ArrayStride 16 MemberDecorate 23(S) 0 Offset 0 MemberDecorate 23(S) 1 Offset 2 MemberDecorate 23(S) 2 Offset 4 Decorate 24 ArrayStride 16 + Decorate 25(B1) Block MemberDecorate 25(B1) 0 Offset 0 MemberDecorate 25(B1) 1 Offset 2 MemberDecorate 25(B1) 2 Offset 4 @@ -105,9 +106,8 @@ spv.8bitstorage-uint.frag MemberDecorate 25(B1) 4 Offset 48 MemberDecorate 25(B1) 5 Offset 64 MemberDecorate 25(B1) 6 Offset 96 - Decorate 25(B1) Block - Decorate 27(b1) DescriptorSet 0 Decorate 27(b1) Binding 0 + Decorate 27(b1) DescriptorSet 0 Decorate 44 ArrayStride 16 MemberDecorate 45(S) 0 Offset 0 MemberDecorate 45(S) 1 Offset 2 @@ -115,6 +115,7 @@ spv.8bitstorage-uint.frag Decorate 46 ArrayStride 16 Decorate 47 ArrayStride 16 Decorate 48 ArrayStride 16 + Decorate 49(B5) Block MemberDecorate 49(B5) 0 Offset 0 MemberDecorate 49(B5) 1 Offset 2 MemberDecorate 49(B5) 2 Offset 4 @@ -123,29 +124,28 @@ spv.8bitstorage-uint.frag MemberDecorate 49(B5) 5 Offset 64 MemberDecorate 49(B5) 6 Offset 96 MemberDecorate 49(B5) 7 Offset 1696 - Decorate 49(B5) Block - Decorate 51(b5) DescriptorSet 0 Decorate 51(b5) Binding 2 + Decorate 51(b5) DescriptorSet 0 MemberDecorate 89(S2) 0 ColMajor - MemberDecorate 89(S2) 0 Offset 0 MemberDecorate 89(S2) 0 MatrixStride 16 + MemberDecorate 89(S2) 0 Offset 0 MemberDecorate 89(S2) 1 Offset 64 MemberDecorate 89(S2) 2 Offset 68 MemberDecorate 90(S3) 0 Offset 0 + Decorate 91(B4) BufferBlock MemberDecorate 91(B4) 0 Offset 0 MemberDecorate 91(B4) 1 Offset 80 - Decorate 91(B4) BufferBlock - Decorate 93(b4) DescriptorSet 0 Decorate 93(b4) Binding 4 + Decorate 93(b4) DescriptorSet 0 MemberDecorate 94(S2) 0 RowMajor - MemberDecorate 94(S2) 0 Offset 0 MemberDecorate 94(S2) 0 MatrixStride 16 + MemberDecorate 94(S2) 0 Offset 0 MemberDecorate 94(S2) 1 Offset 64 MemberDecorate 94(S2) 2 Offset 68 - MemberDecorate 95(B3) 0 Offset 0 Decorate 95(B3) BufferBlock - Decorate 97(b3) DescriptorSet 0 + MemberDecorate 95(B3) 0 Offset 0 Decorate 97(b3) Binding 3 + Decorate 97(b3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 8 0 @@ -336,5 +336,17 @@ spv.8bitstorage-uint.frag 171: 6(int8_t) UConvert 170 172: 28(ptr) AccessChain 19(b2) 21 Store 172 171 + 173: 28(ptr) AccessChain 27(b1) 21 + 174: 6(int8_t) Load 173 + 175: 28(ptr) AccessChain 19(b2) 21 + Store 175 174 + 176: 42(ptr) AccessChain 27(b1) 32 + 177: 7(i8vec2) Load 176 + 178: 42(ptr) AccessChain 19(b2) 32 + Store 178 177 + 179: 34(ptr) AccessChain 27(b1) 33 + 180: 8(i8vec3) Load 179 + 181: 34(ptr) AccessChain 19(b2) 33 + Store 181 180 Return FunctionEnd diff --git a/Test/baseResults/spv.ARMCoreBuiltIns.frag.out b/Test/baseResults/spv.ARMCoreBuiltIns.frag.out new file mode 100644 index 0000000000..6da6921bea --- /dev/null +++ b/Test/baseResults/spv.ARMCoreBuiltIns.frag.out @@ -0,0 +1,61 @@ +spv.ARMCoreBuiltIns.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 26 + + Capability Shader + Capability CoreBuiltinsARM + Extension "SPV_ARM_core_builtins" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 10 14 15 17 19 21 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_ARM_shader_core_builtins" + Name 4 "main" + Name 8 "temp" + Name 10 "gl_WarpMaxIDARM" + Name 14 "data" + Name 15 "gl_CoreIDARM" + Name 17 "gl_CoreCountARM" + Name 19 "gl_CoreMaxIDARM" + Name 21 "gl_WarpIDARM" + Decorate 10(gl_WarpMaxIDARM) BuiltIn BuiltInWarpMaxIDARM + Decorate 10(gl_WarpMaxIDARM) Flat + Decorate 14(data) Location 0 + Decorate 15(gl_CoreIDARM) BuiltIn CoreIDARM + Decorate 15(gl_CoreIDARM) Flat + Decorate 17(gl_CoreCountARM) BuiltIn CoreCountARM + Decorate 17(gl_CoreCountARM) Flat + Decorate 19(gl_CoreMaxIDARM) BuiltIn CoreMaxIDARM + Decorate 19(gl_CoreMaxIDARM) Flat + Decorate 21(gl_WarpIDARM) BuiltIn WarpIDARM + Decorate 21(gl_WarpIDARM) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypePointer Input 6(int) +10(gl_WarpMaxIDARM): 9(ptr) Variable Input + 12: TypeVector 6(int) 4 + 13: TypePointer Output 12(ivec4) + 14(data): 13(ptr) Variable Output +15(gl_CoreIDARM): 9(ptr) Variable Input +17(gl_CoreCountARM): 9(ptr) Variable Input +19(gl_CoreMaxIDARM): 9(ptr) Variable Input +21(gl_WarpIDARM): 9(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 8(temp): 7(ptr) Variable Function + 11: 6(int) Load 10(gl_WarpMaxIDARM) + Store 8(temp) 11 + 16: 6(int) Load 15(gl_CoreIDARM) + 18: 6(int) Load 17(gl_CoreCountARM) + 20: 6(int) Load 19(gl_CoreMaxIDARM) + 22: 6(int) Load 21(gl_WarpIDARM) + 23: 6(int) Load 8(temp) + 24: 6(int) IAdd 22 23 + 25: 12(ivec4) CompositeConstruct 16 18 20 24 + Store 14(data) 25 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ARMCoreBuiltIns.vert.out b/Test/baseResults/spv.ARMCoreBuiltIns.vert.out new file mode 100644 index 0000000000..e1503addc9 --- /dev/null +++ b/Test/baseResults/spv.ARMCoreBuiltIns.vert.out @@ -0,0 +1,65 @@ +spv.ARMCoreBuiltIns.vert +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 31 + + Capability Shader + Capability CoreBuiltinsARM + Extension "SPV_ARM_core_builtins" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 10 18 20 22 24 + Source GLSL 450 + SourceExtension "GL_ARM_shader_core_builtins" + Name 4 "main" + Name 8 "temp" + Name 10 "gl_WarpMaxIDARM" + Name 13 "Output" + MemberName 13(Output) 0 "result" + Name 15 "" + Name 18 "gl_CoreIDARM" + Name 20 "gl_CoreCountARM" + Name 22 "gl_CoreMaxIDARM" + Name 24 "gl_WarpIDARM" + Decorate 10(gl_WarpMaxIDARM) BuiltIn BuiltInWarpMaxIDARM + Decorate 13(Output) BufferBlock + MemberDecorate 13(Output) 0 Offset 0 + Decorate 15 Binding 0 + Decorate 15 DescriptorSet 0 + Decorate 18(gl_CoreIDARM) BuiltIn CoreIDARM + Decorate 20(gl_CoreCountARM) BuiltIn CoreCountARM + Decorate 22(gl_CoreMaxIDARM) BuiltIn CoreMaxIDARM + Decorate 24(gl_WarpIDARM) BuiltIn WarpIDARM + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypePointer Input 6(int) +10(gl_WarpMaxIDARM): 9(ptr) Variable Input + 12: TypeVector 6(int) 4 + 13(Output): TypeStruct 12(ivec4) + 14: TypePointer Uniform 13(Output) + 15: 14(ptr) Variable Uniform + 16: TypeInt 32 1 + 17: 16(int) Constant 0 +18(gl_CoreIDARM): 9(ptr) Variable Input +20(gl_CoreCountARM): 9(ptr) Variable Input +22(gl_CoreMaxIDARM): 9(ptr) Variable Input +24(gl_WarpIDARM): 9(ptr) Variable Input + 29: TypePointer Uniform 12(ivec4) + 4(main): 2 Function None 3 + 5: Label + 8(temp): 7(ptr) Variable Function + 11: 6(int) Load 10(gl_WarpMaxIDARM) + Store 8(temp) 11 + 19: 6(int) Load 18(gl_CoreIDARM) + 21: 6(int) Load 20(gl_CoreCountARM) + 23: 6(int) Load 22(gl_CoreMaxIDARM) + 25: 6(int) Load 24(gl_WarpIDARM) + 26: 6(int) Load 8(temp) + 27: 6(int) IAdd 25 26 + 28: 12(ivec4) CompositeConstruct 19 21 23 27 + 30: 29(ptr) AccessChain 15 17 + Store 30 28 + Return + FunctionEnd diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out index c893f88d42..027325e904 100644 --- a/Test/baseResults/spv.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.AnyHitShader.rahit.out @@ -1,13 +1,13 @@ spv.AnyHitShader.rahit // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 81 +// Generated by (magic number): 8000b +// Id's are bound by 80 Capability RayTracingNV Extension "SPV_NV_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 + EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 57 63 66 Source GLSL 460 SourceExtension "GL_NV_ray_tracing" Name 4 "main" @@ -34,14 +34,13 @@ spv.AnyHitShader.rahit Name 49 "v10" Name 50 "gl_RayTmaxNV" Name 52 "v11" - Name 53 "gl_HitTNV" - Name 56 "v12" - Name 58 "gl_HitKindNV" - Name 62 "v13" - Name 64 "gl_ObjectToWorldNV" - Name 66 "v14" - Name 67 "gl_WorldToObjectNV" - Name 71 "incomingPayload" + Name 55 "v12" + Name 57 "gl_HitKindNV" + Name 61 "v13" + Name 63 "gl_ObjectToWorldNV" + Name 65 "v14" + Name 66 "gl_WorldToObjectNV" + Name 70 "incomingPayload" Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -53,11 +52,10 @@ spv.AnyHitShader.rahit Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR - Decorate 53(gl_HitTNV) BuiltIn HitTNV - Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR - Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR - Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR - Decorate 71(incomingPayload) Location 1 + Decorate 57(gl_HitKindNV) BuiltIn HitKindKHR + Decorate 63(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR + Decorate 66(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR + Decorate 70(incomingPayload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -84,22 +82,21 @@ spv.AnyHitShader.rahit 46: TypePointer Input 28(float) 47(gl_RayTminNV): 46(ptr) Variable Input 50(gl_RayTmaxNV): 46(ptr) Variable Input - 53(gl_HitTNV): 46(ptr) Variable Input - 55: TypePointer Function 6(int) - 57: TypePointer Input 6(int) -58(gl_HitKindNV): 57(ptr) Variable Input - 60: TypeMatrix 29(fvec3) 4 - 61: TypePointer Function 60 - 63: TypePointer Input 60 -64(gl_ObjectToWorldNV): 63(ptr) Variable Input -67(gl_WorldToObjectNV): 63(ptr) Variable Input - 69: TypeVector 28(float) 4 - 70: TypePointer IncomingRayPayloadKHR 69(fvec4) -71(incomingPayload): 70(ptr) Variable IncomingRayPayloadKHR - 72: 28(float) Constant 1056964608 - 73: 69(fvec4) ConstantComposite 72 72 72 72 - 75: 16(int) Constant 1 - 76: TypeBool + 54: TypePointer Function 6(int) + 56: TypePointer Input 6(int) +57(gl_HitKindNV): 56(ptr) Variable Input + 59: TypeMatrix 29(fvec3) 4 + 60: TypePointer Function 59 + 62: TypePointer Input 59 +63(gl_ObjectToWorldNV): 62(ptr) Variable Input +66(gl_WorldToObjectNV): 62(ptr) Variable Input + 68: TypeVector 28(float) 4 + 69: TypePointer IncomingRayPayloadKHR 68(fvec4) +70(incomingPayload): 69(ptr) Variable IncomingRayPayloadKHR + 71: 28(float) Constant 1056964608 + 72: 68(fvec4) ConstantComposite 71 71 71 71 + 74: 16(int) Constant 1 + 75: TypeBool 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -114,9 +111,9 @@ spv.AnyHitShader.rahit 45(v9): 44(ptr) Variable Function 49(v10): 44(ptr) Variable Function 52(v11): 44(ptr) Variable Function - 56(v12): 55(ptr) Variable Function - 62(v13): 61(ptr) Variable Function - 66(v14): 61(ptr) Variable Function + 55(v12): 54(ptr) Variable Function + 61(v13): 60(ptr) Variable Function + 65(v14): 60(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDNV) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeNV) @@ -139,25 +136,25 @@ spv.AnyHitShader.rahit Store 45(v9) 48 51: 28(float) Load 50(gl_RayTmaxNV) Store 49(v10) 51 - 54: 28(float) Load 53(gl_HitTNV) - Store 52(v11) 54 - 59: 6(int) Load 58(gl_HitKindNV) - Store 56(v12) 59 - 65: 60 Load 64(gl_ObjectToWorldNV) - Store 62(v13) 65 - 68: 60 Load 67(gl_WorldToObjectNV) - Store 66(v14) 68 - Store 71(incomingPayload) 73 - 74: 16(int) Load 18(v2) - 77: 76(bool) IEqual 74 75 - SelectionMerge 79 None - BranchConditional 77 78 80 - 78: Label + 53: 28(float) Load 50(gl_RayTmaxNV) + Store 52(v11) 53 + 58: 6(int) Load 57(gl_HitKindNV) + Store 55(v12) 58 + 64: 59 Load 63(gl_ObjectToWorldNV) + Store 61(v13) 64 + 67: 59 Load 66(gl_WorldToObjectNV) + Store 65(v14) 67 + Store 70(incomingPayload) 72 + 73: 16(int) Load 18(v2) + 76: 75(bool) IEqual 73 74 + SelectionMerge 78 None + BranchConditional 76 77 79 + 77: Label IgnoreIntersectionNV - Branch 79 - 80: Label + Branch 78 + 79: Label TerminateRayNV - Branch 79 - 79: Label + Branch 78 + 78: Label Return FunctionEnd diff --git a/Test/baseResults/spv.AnyHitShaderMotion.rahit.out b/Test/baseResults/spv.AnyHitShaderMotion.rahit.out index f9e1e1b959..3d859db451 100644 --- a/Test/baseResults/spv.AnyHitShaderMotion.rahit.out +++ b/Test/baseResults/spv.AnyHitShaderMotion.rahit.out @@ -1,6 +1,6 @@ spv.AnyHitShaderMotion.rahit // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 14 Capability RayTracingKHR diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out index 57cdcb06dd..9c5a014a43 100644 --- a/Test/baseResults/spv.AofA.frag.out +++ b/Test/baseResults/spv.AofA.frag.out @@ -3,7 +3,7 @@ WARNING: 0:6: '[][]' : Generating SPIR-V array-of-arrays, but Vulkan only suppor Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 104 Capability Shader @@ -41,10 +41,10 @@ Validation failed Decorate 78(infloat) Location 0 Decorate 92 ArrayStride 16 Decorate 93 ArrayStride 64 - MemberDecorate 94(uAofA) 0 Offset 0 Decorate 94(uAofA) Block - Decorate 98(nameAofA) DescriptorSet 0 + MemberDecorate 94(uAofA) 0 Offset 0 Decorate 98(nameAofA) Binding 0 + Decorate 98(nameAofA) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out index b76629c299..af0f80fcaf 100644 --- a/Test/baseResults/spv.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ClosestHitShader.rchit.out @@ -1,13 +1,13 @@ spv.ClosestHitShader.rchit // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 88 +// Generated by (magic number): 8000b +// Id's are bound by 87 Capability RayTracingNV Extension "SPV_NV_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint ClosestHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 + EntryPoint ClosestHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 57 63 66 Source GLSL 460 SourceExtension "GL_NV_ray_tracing" Name 4 "main" @@ -34,16 +34,15 @@ spv.ClosestHitShader.rchit Name 49 "v10" Name 50 "gl_RayTmaxNV" Name 52 "v11" - Name 53 "gl_HitTNV" - Name 56 "v12" - Name 58 "gl_HitKindNV" - Name 62 "v13" - Name 64 "gl_ObjectToWorldNV" - Name 66 "v14" - Name 67 "gl_WorldToObjectNV" - Name 71 "accNV" - Name 85 "localPayload" - Name 87 "incomingPayload" + Name 55 "v12" + Name 57 "gl_HitKindNV" + Name 61 "v13" + Name 63 "gl_ObjectToWorldNV" + Name 65 "v14" + Name 66 "gl_WorldToObjectNV" + Name 70 "accNV" + Name 84 "localPayload" + Name 86 "incomingPayload" Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -55,14 +54,13 @@ spv.ClosestHitShader.rchit Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR - Decorate 53(gl_HitTNV) BuiltIn HitTNV - Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR - Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR - Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR - Decorate 71(accNV) DescriptorSet 0 - Decorate 71(accNV) Binding 0 - Decorate 85(localPayload) Location 0 - Decorate 87(incomingPayload) Location 1 + Decorate 57(gl_HitKindNV) BuiltIn HitKindKHR + Decorate 63(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR + Decorate 66(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR + Decorate 70(accNV) Binding 0 + Decorate 70(accNV) DescriptorSet 0 + Decorate 84(localPayload) Location 0 + Decorate 86(incomingPayload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -89,33 +87,32 @@ spv.ClosestHitShader.rchit 46: TypePointer Input 28(float) 47(gl_RayTminNV): 46(ptr) Variable Input 50(gl_RayTmaxNV): 46(ptr) Variable Input - 53(gl_HitTNV): 46(ptr) Variable Input - 55: TypePointer Function 6(int) - 57: TypePointer Input 6(int) -58(gl_HitKindNV): 57(ptr) Variable Input - 60: TypeMatrix 29(fvec3) 4 - 61: TypePointer Function 60 - 63: TypePointer Input 60 -64(gl_ObjectToWorldNV): 63(ptr) Variable Input -67(gl_WorldToObjectNV): 63(ptr) Variable Input - 69: TypeAccelerationStructureKHR - 70: TypePointer UniformConstant 69 - 71(accNV): 70(ptr) Variable UniformConstant - 73: 6(int) Constant 0 - 74: 6(int) Constant 1 - 75: 6(int) Constant 2 - 76: 6(int) Constant 3 - 77: 28(float) Constant 1056964608 - 78: 29(fvec3) ConstantComposite 77 77 77 - 79: 28(float) Constant 1065353216 - 80: 29(fvec3) ConstantComposite 79 79 79 - 81: 28(float) Constant 1061158912 - 82: 16(int) Constant 1 - 83: TypeVector 28(float) 4 - 84: TypePointer RayPayloadKHR 83(fvec4) -85(localPayload): 84(ptr) Variable RayPayloadKHR - 86: TypePointer IncomingRayPayloadKHR 83(fvec4) -87(incomingPayload): 86(ptr) Variable IncomingRayPayloadKHR + 54: TypePointer Function 6(int) + 56: TypePointer Input 6(int) +57(gl_HitKindNV): 56(ptr) Variable Input + 59: TypeMatrix 29(fvec3) 4 + 60: TypePointer Function 59 + 62: TypePointer Input 59 +63(gl_ObjectToWorldNV): 62(ptr) Variable Input +66(gl_WorldToObjectNV): 62(ptr) Variable Input + 68: TypeAccelerationStructureKHR + 69: TypePointer UniformConstant 68 + 70(accNV): 69(ptr) Variable UniformConstant + 72: 6(int) Constant 0 + 73: 6(int) Constant 1 + 74: 6(int) Constant 2 + 75: 6(int) Constant 3 + 76: 28(float) Constant 1056964608 + 77: 29(fvec3) ConstantComposite 76 76 76 + 78: 28(float) Constant 1065353216 + 79: 29(fvec3) ConstantComposite 78 78 78 + 80: 28(float) Constant 1061158912 + 81: 16(int) Constant 1 + 82: TypeVector 28(float) 4 + 83: TypePointer RayPayloadKHR 82(fvec4) +84(localPayload): 83(ptr) Variable RayPayloadKHR + 85: TypePointer IncomingRayPayloadKHR 82(fvec4) +86(incomingPayload): 85(ptr) Variable IncomingRayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -130,9 +127,9 @@ spv.ClosestHitShader.rchit 45(v9): 44(ptr) Variable Function 49(v10): 44(ptr) Variable Function 52(v11): 44(ptr) Variable Function - 56(v12): 55(ptr) Variable Function - 62(v13): 61(ptr) Variable Function - 66(v14): 61(ptr) Variable Function + 55(v12): 54(ptr) Variable Function + 61(v13): 60(ptr) Variable Function + 65(v14): 60(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDNV) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeNV) @@ -155,15 +152,15 @@ spv.ClosestHitShader.rchit Store 45(v9) 48 51: 28(float) Load 50(gl_RayTmaxNV) Store 49(v10) 51 - 54: 28(float) Load 53(gl_HitTNV) - Store 52(v11) 54 - 59: 6(int) Load 58(gl_HitKindNV) - Store 56(v12) 59 - 65: 60 Load 64(gl_ObjectToWorldNV) - Store 62(v13) 65 - 68: 60 Load 67(gl_WorldToObjectNV) - Store 66(v14) 68 - 72: 69 Load 71(accNV) - TraceNV 72 73 74 75 76 73 78 77 80 81 82 + 53: 28(float) Load 50(gl_RayTmaxNV) + Store 52(v11) 53 + 58: 6(int) Load 57(gl_HitKindNV) + Store 55(v12) 58 + 64: 59 Load 63(gl_ObjectToWorldNV) + Store 61(v13) 64 + 67: 59 Load 66(gl_WorldToObjectNV) + Store 65(v14) 67 + 71: 68 Load 70(accNV) + TraceNV 71 72 73 74 75 72 77 76 79 80 81 Return FunctionEnd diff --git a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out index 45679eb070..846151f058 100644 --- a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out +++ b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out @@ -1,6 +1,6 @@ spv.ClosestHitShaderMotion.rchit // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 33 Capability RayTracingKHR @@ -19,8 +19,8 @@ spv.ClosestHitShaderMotion.rchit Name 16 "accEXT" Name 32 "incomingPayloadEXT" Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV - Decorate 16(accEXT) DescriptorSet 0 Decorate 16(accEXT) Binding 0 + Decorate 16(accEXT) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out index 4b29238fbe..f4e1a9fa62 100644 --- a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out +++ b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out @@ -1,6 +1,6 @@ spv.GeometryShaderPassthrough.geom // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 15 Capability Geometry @@ -23,8 +23,8 @@ spv.GeometryShaderPassthrough.geom MemberName 12(Inputs) 0 "texcoord" MemberName 12(Inputs) 1 "baseColor" Name 14 "" - MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position Decorate 8(gl_PerVertex) Block + MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position Decorate 10 PassthroughNV Decorate 12(Inputs) Block Decorate 14 Location 0 diff --git a/Test/baseResults/spv.IntersectShader.rint.out b/Test/baseResults/spv.IntersectShader.rint.out index 7b0058cbb0..81d86cd846 100644 --- a/Test/baseResults/spv.IntersectShader.rint.out +++ b/Test/baseResults/spv.IntersectShader.rint.out @@ -1,6 +1,6 @@ spv.IntersectShader.rint // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 71 Capability RayTracingNV diff --git a/Test/baseResults/spv.IntersectShaderMotion.rint.out b/Test/baseResults/spv.IntersectShaderMotion.rint.out index f77c9a81a1..b3326ee29e 100644 --- a/Test/baseResults/spv.IntersectShaderMotion.rint.out +++ b/Test/baseResults/spv.IntersectShaderMotion.rint.out @@ -1,6 +1,6 @@ spv.IntersectShaderMotion.rint // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 14 Capability RayTracingKHR diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out index e573bbae9b..d0f381e30d 100644 --- a/Test/baseResults/spv.MissShader.rmiss.out +++ b/Test/baseResults/spv.MissShader.rmiss.out @@ -1,6 +1,6 @@ spv.MissShader.rmiss // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 59 Capability RayTracingNV @@ -35,8 +35,8 @@ spv.MissShader.rmiss Decorate 29(gl_IncomingRayFlagsNV) BuiltIn IncomingRayFlagsKHR Decorate 34(gl_RayTminNV) BuiltIn RayTminKHR Decorate 37(gl_RayTmaxNV) BuiltIn RayTmaxKHR - Decorate 41(accNV) DescriptorSet 0 Decorate 41(accNV) Binding 0 + Decorate 41(accNV) DescriptorSet 0 Decorate 56(localPayload) Location 0 Decorate 58(incomingPayload) Location 1 2: TypeVoid diff --git a/Test/baseResults/spv.MissShaderMotion.rmiss.out b/Test/baseResults/spv.MissShaderMotion.rmiss.out index 185c934b0a..455f343f97 100644 --- a/Test/baseResults/spv.MissShaderMotion.rmiss.out +++ b/Test/baseResults/spv.MissShaderMotion.rmiss.out @@ -1,6 +1,6 @@ spv.MissShaderMotion.rmiss // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 33 Capability RayTracingKHR @@ -19,8 +19,8 @@ spv.MissShaderMotion.rmiss Name 16 "accEXT" Name 32 "localPayloadEXT" Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV - Decorate 16(accEXT) DescriptorSet 0 Decorate 16(accEXT) Binding 0 + Decorate 16(accEXT) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.OVR_multiview.vert.out b/Test/baseResults/spv.OVR_multiview.vert.out index 90afed292d..1eeae2a17c 100644 --- a/Test/baseResults/spv.OVR_multiview.vert.out +++ b/Test/baseResults/spv.OVR_multiview.vert.out @@ -1,6 +1,6 @@ spv.OVR_multiview.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader @@ -20,10 +20,10 @@ spv.OVR_multiview.vert Name 17 "gl_ViewID_OVR" Name 25 "gl_VertexID" Name 26 "gl_InstanceID" + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 11(gl_PerVertex) Block Decorate 17(gl_ViewID_OVR) BuiltIn ViewIndex Decorate 25(gl_VertexID) BuiltIn VertexId Decorate 26(gl_InstanceID) BuiltIn InstanceId diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out index fc8e241527..f9059c657a 100644 --- a/Test/baseResults/spv.Operations.frag.out +++ b/Test/baseResults/spv.Operations.frag.out @@ -1,6 +1,6 @@ spv.Operations.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 591 Capability Shader diff --git a/Test/baseResults/spv.RayCallable.rcall.out b/Test/baseResults/spv.RayCallable.rcall.out index 75698fcb65..1eff1fac2f 100644 --- a/Test/baseResults/spv.RayCallable.rcall.out +++ b/Test/baseResults/spv.RayCallable.rcall.out @@ -1,6 +1,6 @@ spv.RayCallable.rcall // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability RayTracingNV diff --git a/Test/baseResults/spv.RayConstants.rgen.out b/Test/baseResults/spv.RayConstants.rgen.out index 962aeb7d24..fb503c939b 100644 --- a/Test/baseResults/spv.RayConstants.rgen.out +++ b/Test/baseResults/spv.RayConstants.rgen.out @@ -1,6 +1,6 @@ spv.RayConstants.rgen // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability RayTracingNV @@ -13,8 +13,8 @@ spv.RayConstants.rgen Name 4 "main" Name 8 "accNV" Name 26 "payload" - Decorate 8(accNV) DescriptorSet 0 Decorate 8(accNV) Binding 0 + Decorate 8(accNV) DescriptorSet 0 Decorate 26(payload) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out index b7085378be..76bc1f62ba 100644 --- a/Test/baseResults/spv.RayGenShader.rgen.out +++ b/Test/baseResults/spv.RayGenShader.rgen.out @@ -1,6 +1,6 @@ spv.RayGenShader.rgen // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 54 Capability RayTracingNV @@ -26,13 +26,13 @@ spv.RayGenShader.rgen Name 53 "payload" Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR - Decorate 29(accNV0) DescriptorSet 0 Decorate 29(accNV0) Binding 0 + Decorate 29(accNV0) DescriptorSet 0 + Decorate 37(block) BufferBlock MemberDecorate 37(block) 0 Offset 0 MemberDecorate 37(block) 1 Offset 16 - Decorate 37(block) BufferBlock - Decorate 50(accNV1) DescriptorSet 0 Decorate 50(accNV1) Binding 1 + Decorate 50(accNV1) DescriptorSet 0 Decorate 53(payload) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out index 48509b0d77..3709388935 100644 --- a/Test/baseResults/spv.RayGenShader11.rgen.out +++ b/Test/baseResults/spv.RayGenShader11.rgen.out @@ -1,6 +1,6 @@ spv.RayGenShader11.rgen // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 53 Capability RayTracingNV @@ -25,11 +25,11 @@ spv.RayGenShader11.rgen Name 52 "payload" Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR - Decorate 29(accNV) DescriptorSet 0 Decorate 29(accNV) Binding 0 + Decorate 29(accNV) DescriptorSet 0 + Decorate 37(block) Block MemberDecorate 37(block) 0 Offset 0 MemberDecorate 37(block) 1 Offset 16 - Decorate 37(block) Block Decorate 52(payload) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.RayGenShaderArray.rgen.out b/Test/baseResults/spv.RayGenShaderArray.rgen.out index 8ddfca97fd..ddb2f6bba6 100644 --- a/Test/baseResults/spv.RayGenShaderArray.rgen.out +++ b/Test/baseResults/spv.RayGenShaderArray.rgen.out @@ -1,6 +1,6 @@ spv.RayGenShaderArray.rgen // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 89 Capability ShaderNonUniformEXT @@ -31,14 +31,14 @@ spv.RayGenShaderArray.rgen Name 88 "payload" Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR - Decorate 30(accNV0) DescriptorSet 0 Decorate 30(accNV0) Binding 0 + Decorate 30(accNV0) DescriptorSet 0 + Decorate 34(block) BufferBlock MemberDecorate 34(block) 0 Offset 0 MemberDecorate 34(block) 1 Offset 16 MemberDecorate 34(block) 2 Offset 28 - Decorate 34(block) BufferBlock - Decorate 60(accNV1) DescriptorSet 0 Decorate 60(accNV1) Binding 1 + Decorate 60(accNV1) DescriptorSet 0 Decorate 75 DecorationNonUniformEXT Decorate 76 DecorationNonUniformEXT Decorate 77 DecorationNonUniformEXT diff --git a/Test/baseResults/spv.RayGenShaderMotion.rgen.out b/Test/baseResults/spv.RayGenShaderMotion.rgen.out index a6af236513..095067574e 100644 --- a/Test/baseResults/spv.RayGenShaderMotion.rgen.out +++ b/Test/baseResults/spv.RayGenShaderMotion.rgen.out @@ -1,6 +1,6 @@ spv.RayGenShaderMotion.rgen // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 47 Capability RayTracingKHR @@ -24,8 +24,8 @@ spv.RayGenShaderMotion.rgen Name 46 "payloadEXT" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR - Decorate 29(accEXT) DescriptorSet 0 Decorate 29(accEXT) Binding 0 + Decorate 29(accEXT) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out index 31dd2dd19b..e5496d320c 100644 --- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out @@ -1,6 +1,6 @@ spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 25 Capability Shader @@ -21,9 +21,9 @@ spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp MemberName 8(first) 0 "a" MemberName 8(first) 1 "f" Name 10 "" + Decorate 8(first) Block MemberDecorate 8(first) 0 Offset 0 MemberDecorate 8(first) 1 Offset 2 - Decorate 8(first) Block Decorate 24 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out index 3447791f24..a3f16954b8 100644 --- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out @@ -1,6 +1,6 @@ spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader @@ -19,8 +19,8 @@ spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp Name 7 "first" MemberName 7(first) 0 "a" Name 9 "" - MemberDecorate 7(first) 0 Offset 0 Decorate 7(first) Block + MemberDecorate 7(first) 0 Offset 0 Decorate 19 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out index b578bd3ad1..33cae8b54c 100644 --- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out @@ -1,6 +1,6 @@ spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader @@ -19,13 +19,13 @@ spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp Name 14 "second" MemberName 14(second) 0 "b" Name 16 "" - MemberDecorate 7(first) 0 Offset 0 Decorate 7(first) Block - MemberDecorate 14(second) 0 Offset 0 - Decorate 14(second) Block - Decorate 23 BuiltIn WorkgroupSize + MemberDecorate 7(first) 0 Offset 0 Decorate 9 Aliased + Decorate 14(second) Block + MemberDecorate 14(second) 0 Offset 0 Decorate 16 Aliased + Decorate 23 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out index 19bcff6bcb..9a9e919926 100644 --- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out @@ -1,6 +1,6 @@ spv.WorkgroupMemoryExplicitLayout.NonBlock.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 17 Capability Shader diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out index 413fd2e84a..2d484770e7 100644 --- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out @@ -1,6 +1,6 @@ spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 19 Capability Shader @@ -16,8 +16,8 @@ spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp Name 7 "first" MemberName 7(first) 0 "a" Name 9 "" - MemberDecorate 7(first) 0 Offset 0 Decorate 7(first) Block + MemberDecorate 7(first) 0 Offset 0 Decorate 18 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out index 6a43e23683..a651b6352b 100644 --- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out @@ -1,6 +1,6 @@ spv.WorkgroupMemoryExplicitLayout.scalar.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -50,9 +50,9 @@ spv.WorkgroupMemoryExplicitLayout.scalar.comp MemberDecorate 24(S) 8 Offset 196 MemberDecorate 24(S) 9 Offset 292 Decorate 25 ArrayStride 364 + Decorate 26(Block) Block MemberDecorate 26(Block) 0 Offset 0 MemberDecorate 26(Block) 1 Offset 364 - Decorate 26(Block) Block 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out index df4b8aed4e..bc8a5f64aa 100644 --- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out @@ -1,6 +1,6 @@ spv.WorkgroupMemoryExplicitLayout.std140.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -49,9 +49,9 @@ spv.WorkgroupMemoryExplicitLayout.std140.comp MemberDecorate 24(S) 8 Offset 384 MemberDecorate 24(S) 9 Offset 480 Decorate 25 ArrayStride 768 + Decorate 26(Block) Block MemberDecorate 26(Block) 0 Offset 0 MemberDecorate 26(Block) 1 Offset 768 - Decorate 26(Block) Block 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out index e782784b68..a60209d93b 100644 --- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out @@ -1,6 +1,6 @@ spv.WorkgroupMemoryExplicitLayout.std430.comp // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -49,9 +49,9 @@ spv.WorkgroupMemoryExplicitLayout.std430.comp MemberDecorate 24(S) 8 Offset 240 MemberDecorate 24(S) 9 Offset 336 Decorate 25 ArrayStride 416 + Decorate 26(Block) Block MemberDecorate 26(Block) 0 Offset 0 MemberDecorate 26(Block) 1 Offset 416 - Decorate 26(Block) Block 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out index 379131b141..2426999bf3 100644 --- a/Test/baseResults/spv.accessChain.frag.out +++ b/Test/baseResults/spv.accessChain.frag.out @@ -1,6 +1,6 @@ spv.accessChain.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 228 Capability Shader diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out index 05b14eaa49..475279964e 100644 --- a/Test/baseResults/spv.aggOps.frag.out +++ b/Test/baseResults/spv.aggOps.frag.out @@ -3,7 +3,7 @@ WARNING: 0:4: '' : all default precisions are highp; use precision statements to "precision mediump int; precision highp float;" // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 215 Capability Shader @@ -51,21 +51,21 @@ WARNING: 0:4: '' : all default precisions are highp; use precision statements to MemberDecorate 56(s2) 0 Offset 0 MemberDecorate 56(s2) 1 Offset 4 MemberDecorate 56(s2) 2 Offset 16 - MemberDecorate 57(ub1) 0 Offset 0 Decorate 57(ub1) Block - Decorate 59(uName1) DescriptorSet 0 + MemberDecorate 57(ub1) 0 Offset 0 Decorate 59(uName1) Binding 1 + Decorate 59(uName1) DescriptorSet 0 MemberDecorate 64(s1) 0 Offset 0 MemberDecorate 64(s1) 1 Offset 4 MemberDecorate 65(s2) 0 Offset 0 MemberDecorate 65(s2) 1 Offset 4 MemberDecorate 65(s2) 2 Offset 8 - MemberDecorate 66(ub2) 0 Offset 0 Decorate 66(ub2) BufferBlock - Decorate 68(uName2) DescriptorSet 0 + MemberDecorate 66(ub2) 0 Offset 0 Decorate 68(uName2) Binding 2 - Decorate 97(samp2D) DescriptorSet 0 + Decorate 68(uName2) DescriptorSet 0 Decorate 97(samp2D) Binding 0 + Decorate 97(samp2D) DescriptorSet 0 Decorate 101(coord) RelaxedPrecision Decorate 101(coord) Location 0 Decorate 102 RelaxedPrecision diff --git a/Test/baseResults/spv.always-discard.frag.out b/Test/baseResults/spv.always-discard.frag.out index ed21b38697..ba3331a652 100644 --- a/Test/baseResults/spv.always-discard.frag.out +++ b/Test/baseResults/spv.always-discard.frag.out @@ -1,6 +1,6 @@ spv.always-discard.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 84 Capability Shader diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out index 5e7ac9fea0..60262f7067 100644 --- a/Test/baseResults/spv.always-discard2.frag.out +++ b/Test/baseResults/spv.always-discard2.frag.out @@ -1,6 +1,6 @@ spv.always-discard2.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 40 Capability Shader diff --git a/Test/baseResults/spv.arbPostDepthCoverage.frag.out b/Test/baseResults/spv.arbPostDepthCoverage.frag.out index 9b911cfc24..a36b9ee40e 100644 --- a/Test/baseResults/spv.arbPostDepthCoverage.frag.out +++ b/Test/baseResults/spv.arbPostDepthCoverage.frag.out @@ -1,6 +1,6 @@ spv.arbPostDepthCoverage.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader @@ -19,8 +19,8 @@ spv.arbPostDepthCoverage.frag Name 8 "readSampleMaskIn" Name 13 "gl_SampleMaskIn" Decorate 8(readSampleMaskIn) Location 0 - Decorate 13(gl_SampleMaskIn) Flat Decorate 13(gl_SampleMaskIn) BuiltIn SampleMask + Decorate 13(gl_SampleMaskIn) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.atomiAddEXT.error.mesh.out b/Test/baseResults/spv.atomiAddEXT.error.mesh.out new file mode 100644 index 0000000000..ce8f3d72d4 --- /dev/null +++ b/Test/baseResults/spv.atomiAddEXT.error.mesh.out @@ -0,0 +1,7 @@ +spv.atomiAddEXT.error.mesh +ERROR: 0:21: 'assign' : l-value required "mytask" (can't modify variable with storage qualifier taskPayloadSharedEXT in mesh shaders) +ERROR: 0:21: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. +ERROR: 2 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.atomiAddEXT.task.out b/Test/baseResults/spv.atomiAddEXT.task.out new file mode 100644 index 0000000000..22848ad06e --- /dev/null +++ b/Test/baseResults/spv.atomiAddEXT.task.out @@ -0,0 +1,72 @@ +spv.atomiAddEXT.task +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 34 + + Capability MeshShadingEXT + Extension "SPV_EXT_mesh_shader" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TaskEXT 4 "main" 9 23 28 + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 460 + SourceExtension "GL_EXT_mesh_shader" + Name 4 "main" + Name 7 "Buffer" + MemberName 7(Buffer) 0 "x" + Name 9 "" + Name 20 "structType" + MemberName 20(structType) 0 "y" + Name 21 "t2" + MemberName 21(t2) 0 "f" + Name 23 "t" + Name 26 "taskBlock" + MemberName 26(taskBlock) 0 "atom1" + Name 28 "mytask" + Decorate 7(Buffer) Block + MemberDecorate 7(Buffer) 0 Coherent + MemberDecorate 7(Buffer) 0 Offset 0 + Decorate 9 Coherent + Decorate 9 Binding 1 + Decorate 9 DescriptorSet 0 + Decorate 19 ArrayStride 4 + MemberDecorate 20(structType) 0 Offset 0 + Decorate 21(t2) Block + MemberDecorate 21(t2) 0 Offset 0 + Decorate 23(t) Binding 0 + Decorate 23(t) DescriptorSet 0 + Decorate 33 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7(Buffer): TypeStruct 6(int) + 8: TypePointer StorageBuffer 7(Buffer) + 9: 8(ptr) Variable StorageBuffer + 10: 6(int) Constant 0 + 11: TypePointer StorageBuffer 6(int) + 13: 6(int) Constant 1 + 14: TypeInt 32 0 + 15: 14(int) Constant 1 + 16: 14(int) Constant 0 + 18: 14(int) Constant 3 + 19: TypeArray 6(int) 18 + 20(structType): TypeStruct 19 + 21(t2): TypeStruct 20(structType) + 22: TypePointer StorageBuffer 21(t2) + 23(t): 22(ptr) Variable StorageBuffer + 26(taskBlock): TypeStruct 6(int) + 27: TypePointer TaskPayloadWorkgroupEXT 26(taskBlock) + 28(mytask): 27(ptr) Variable TaskPayloadWorkgroupEXT + 29: TypePointer TaskPayloadWorkgroupEXT 6(int) + 32: TypeVector 14(int) 3 + 33: 32(ivec3) ConstantComposite 15 15 15 + 4(main): 2 Function None 3 + 5: Label + 12: 11(ptr) AccessChain 9 10 + 17: 6(int) AtomicIAdd 12 15 16 13 + 24: 11(ptr) AccessChain 23(t) 10 10 13 + 25: 6(int) AtomicIAdd 24 15 16 13 + 30: 29(ptr) AccessChain 28(mytask) 10 + 31: 6(int) AtomicIAdd 30 15 16 13 + Return + FunctionEnd diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out index e74066c9d5..22b297f642 100644 --- a/Test/baseResults/spv.atomic.comp.out +++ b/Test/baseResults/spv.atomic.comp.out @@ -1,6 +1,6 @@ spv.atomic.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 74 Capability Shader @@ -29,19 +29,20 @@ spv.atomic.comp Name 71 "arrX" Name 72 "arrY" Name 73 "arrZ" - Decorate 20(counter) Offset 0 - Decorate 20(counter) DescriptorSet 0 Decorate 20(counter) Binding 0 - Decorate 27(countArr) Offset 4 - Decorate 27(countArr) DescriptorSet 0 + Decorate 20(counter) DescriptorSet 0 + Decorate 20(counter) Offset 0 Decorate 27(countArr) Binding 0 + Decorate 27(countArr) DescriptorSet 0 + Decorate 27(countArr) Offset 4 + Decorate 62(dataSSB) BufferBlock MemberDecorate 62(dataSSB) 0 Restrict MemberDecorate 62(dataSSB) 0 Offset 0 MemberDecorate 62(dataSSB) 1 Restrict MemberDecorate 62(dataSSB) 1 Offset 16 - Decorate 62(dataSSB) BufferBlock - Decorate 64(result) DescriptorSet 0 + Decorate 64(result) Restrict Decorate 64(result) Binding 0 + Decorate 64(result) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.atomicAdd.bufferReference.comp.out b/Test/baseResults/spv.atomicAdd.bufferReference.comp.out index 9ecc74259d..31edb5e977 100644 --- a/Test/baseResults/spv.atomicAdd.bufferReference.comp.out +++ b/Test/baseResults/spv.atomicAdd.bufferReference.comp.out @@ -1,6 +1,6 @@ spv.atomicAdd.bufferReference.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 188 Capability Shader @@ -56,25 +56,25 @@ spv.atomicAdd.bufferReference.comp MemberName 179(Fail) 0 "x" Name 181 "fail" Decorate 17 ArrayStride 4 - MemberDecorate 18(PayloadRef) 0 Offset 0 Decorate 18(PayloadRef) Block + MemberDecorate 18(PayloadRef) 0 Offset 0 Decorate 20(payload) DecorationAliasedPointerEXT + Decorate 22(PC) Block MemberDecorate 22(PC) 0 Offset 0 MemberDecorate 22(PC) 1 Offset 8 - Decorate 22(PC) Block Decorate 23 ArrayStride 4 - MemberDecorate 24(GuardRef) 0 Offset 0 Decorate 24(GuardRef) Block + MemberDecorate 24(GuardRef) 0 Offset 0 Decorate 37(gl_GlobalInvocationID) BuiltIn GlobalInvocationId Decorate 43(DIM) SpecId 0 Decorate 44(NUM_WORKGROUP_EACH_DIM) SpecId 1 Decorate 81(gl_WorkGroupID) BuiltIn WorkgroupId Decorate 133(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 178 ArrayStride 4 - MemberDecorate 179(Fail) 0 Offset 0 Decorate 179(Fail) Block - Decorate 181(fail) DescriptorSet 0 + MemberDecorate 179(Fail) 0 Offset 0 Decorate 181(fail) Binding 2 + Decorate 181(fail) DescriptorSet 0 Decorate 185 SpecId 0 Decorate 186 SpecId 0 Decorate 187 BuiltIn WorkgroupSize diff --git a/Test/baseResults/spv.atomicFloat.comp.out b/Test/baseResults/spv.atomicFloat.comp.out index 3799557b3d..c7b8f48918 100644 --- a/Test/baseResults/spv.atomicFloat.comp.out +++ b/Test/baseResults/spv.atomicFloat.comp.out @@ -1,6 +1,6 @@ spv.atomicFloat.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 470 Capability Shader @@ -38,35 +38,35 @@ spv.atomicFloat.comp Name 352 "fimageCube" Name 392 "fimageCubeArray" Name 430 "fimage3D" + Decorate 25(Buffer) BufferBlock MemberDecorate 25(Buffer) 0 Offset 0 MemberDecorate 25(Buffer) 1 Offset 8 - Decorate 25(Buffer) BufferBlock - Decorate 27(buf) DescriptorSet 0 Decorate 27(buf) Binding 0 + Decorate 27(buf) DescriptorSet 0 Decorate 143(fimage1D) Location 0 - Decorate 143(fimage1D) DescriptorSet 0 Decorate 143(fimage1D) Binding 0 + Decorate 143(fimage1D) DescriptorSet 0 Decorate 189(fimage1DArray) Location 1 - Decorate 189(fimage1DArray) DescriptorSet 0 Decorate 189(fimage1DArray) Binding 1 + Decorate 189(fimage1DArray) DescriptorSet 0 Decorate 232(fimage2D) Location 2 - Decorate 232(fimage2D) DescriptorSet 0 Decorate 232(fimage2D) Binding 2 + Decorate 232(fimage2D) DescriptorSet 0 Decorate 270(fimage2DRect) Location 4 - Decorate 270(fimage2DRect) DescriptorSet 0 Decorate 270(fimage2DRect) Binding 4 + Decorate 270(fimage2DRect) DescriptorSet 0 Decorate 308(fimage2DArray) Location 3 - Decorate 308(fimage2DArray) DescriptorSet 0 Decorate 308(fimage2DArray) Binding 3 + Decorate 308(fimage2DArray) DescriptorSet 0 Decorate 352(fimageCube) Location 5 - Decorate 352(fimageCube) DescriptorSet 0 Decorate 352(fimageCube) Binding 5 + Decorate 352(fimageCube) DescriptorSet 0 Decorate 392(fimageCubeArray) Location 6 - Decorate 392(fimageCubeArray) DescriptorSet 0 Decorate 392(fimageCubeArray) Binding 6 + Decorate 392(fimageCubeArray) DescriptorSet 0 Decorate 430(fimage3D) Location 7 - Decorate 430(fimage3D) DescriptorSet 0 Decorate 430(fimage3D) Binding 9 + Decorate 430(fimage3D) DescriptorSet 0 Decorate 469 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.atomicInt64.comp.out b/Test/baseResults/spv.atomicInt64.comp.out index 5b2e134041..2464e50648 100644 --- a/Test/baseResults/spv.atomicInt64.comp.out +++ b/Test/baseResults/spv.atomicInt64.comp.out @@ -1,6 +1,6 @@ spv.atomicInt64.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 149 Capability Shader @@ -24,11 +24,11 @@ spv.atomicInt64.comp MemberName 84(Struct) 0 "i64" MemberName 84(Struct) 1 "u64" Name 86 "s" + Decorate 14(Buffer) BufferBlock MemberDecorate 14(Buffer) 0 Offset 0 MemberDecorate 14(Buffer) 1 Offset 8 - Decorate 14(Buffer) BufferBlock - Decorate 16(buf) DescriptorSet 0 Decorate 16(buf) Binding 0 + Decorate 16(buf) DescriptorSet 0 Decorate 148 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.atomicRvalue.error.vert.out b/Test/baseResults/spv.atomicRvalue.error.vert.out new file mode 100644 index 0000000000..a340141e7b --- /dev/null +++ b/Test/baseResults/spv.atomicRvalue.error.vert.out @@ -0,0 +1,9 @@ +spv.atomicRvalue.error.vert +ERROR: 0:5: 'assign' : l-value required +ERROR: 0:5: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. +ERROR: 0:5: 'atomicAdd' : Only l-values corresponding to shader block storage or shared variables can be used with atomic memory functions. +ERROR: 0:6: 'atomicAdd' : Only l-values corresponding to shader block storage or shared variables can be used with atomic memory functions. +ERROR: 4 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.atomicStoreInt64.comp.out b/Test/baseResults/spv.atomicStoreInt64.comp.out index 3adadcb288..9114bc3497 100644 --- a/Test/baseResults/spv.atomicStoreInt64.comp.out +++ b/Test/baseResults/spv.atomicStoreInt64.comp.out @@ -1,6 +1,6 @@ spv.atomicStoreInt64.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 25 Capability Shader @@ -21,14 +21,14 @@ spv.atomicStoreInt64.comp Name 14 "ubo" MemberName 14(ubo) 0 "z" Name 16 "" - MemberDecorate 7(ssbo) 0 Offset 0 Decorate 7(ssbo) BufferBlock - Decorate 9 DescriptorSet 0 + MemberDecorate 7(ssbo) 0 Offset 0 Decorate 9 Binding 0 - MemberDecorate 14(ubo) 0 Offset 0 + Decorate 9 DescriptorSet 0 Decorate 14(ubo) Block - Decorate 16 DescriptorSet 0 + MemberDecorate 14(ubo) 0 Offset 0 Decorate 16 Binding 1 + Decorate 16 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 64 0 diff --git a/Test/baseResults/spv.barrier.vert.out b/Test/baseResults/spv.barrier.vert.out index 7199882528..5208412044 100644 --- a/Test/baseResults/spv.barrier.vert.out +++ b/Test/baseResults/spv.barrier.vert.out @@ -1,6 +1,6 @@ spv.barrier.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader diff --git a/Test/baseResults/spv.bitCast.frag.out b/Test/baseResults/spv.bitCast.frag.out index 88b2a09f69..9b3c9ec025 100644 --- a/Test/baseResults/spv.bitCast.frag.out +++ b/Test/baseResults/spv.bitCast.frag.out @@ -1,6 +1,6 @@ spv.bitCast.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 198 Capability Shader diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out index fb7c6860b2..dbab6986a9 100644 --- a/Test/baseResults/spv.bool.vert.out +++ b/Test/baseResults/spv.bool.vert.out @@ -1,6 +1,6 @@ spv.bool.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 46 Capability Shader @@ -21,15 +21,15 @@ spv.bool.vert MemberName 27(ubname) 0 "b" Name 29 "ubinst" Name 30 "param" + Decorate 22(gl_PerVertex) Block MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 22(gl_PerVertex) Block - MemberDecorate 27(ubname) 0 Offset 0 Decorate 27(ubname) Block - Decorate 29(ubinst) DescriptorSet 0 + MemberDecorate 27(ubname) 0 Offset 0 Decorate 29(ubinst) Binding 0 + Decorate 29(ubinst) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeBool diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out index 004c204081..9db304a568 100644 --- a/Test/baseResults/spv.boolInBlock.frag.out +++ b/Test/baseResults/spv.boolInBlock.frag.out @@ -1,6 +1,6 @@ spv.boolInBlock.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 102 Capability Shader @@ -23,14 +23,14 @@ spv.boolInBlock.frag Name 60 "param" Name 66 "param" Name 74 "fragColor" - MemberDecorate 25(Buffer) 0 Offset 0 Decorate 25(Buffer) BufferBlock - Decorate 27 DescriptorSet 0 + MemberDecorate 25(Buffer) 0 Offset 0 Decorate 27 Binding 1 - MemberDecorate 40(Uniform) 0 Offset 0 + Decorate 27 DescriptorSet 0 Decorate 40(Uniform) Block - Decorate 42 DescriptorSet 0 + MemberDecorate 40(Uniform) 0 Offset 0 Decorate 42 Binding 0 + Decorate 42 DescriptorSet 0 Decorate 74(fragColor) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.branch-return.vert.out b/Test/baseResults/spv.branch-return.vert.out index 30918aba41..86df58afb0 100644 --- a/Test/baseResults/spv.branch-return.vert.out +++ b/Test/baseResults/spv.branch-return.vert.out @@ -1,6 +1,6 @@ spv.branch-return.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 38 Capability Shader @@ -15,9 +15,9 @@ spv.branch-return.vert MemberName 18(gl_PerVertex) 1 "gl_PointSize" Name 20 "" Decorate 8(gl_InstanceIndex) BuiltIn InstanceIndex + Decorate 18(gl_PerVertex) Block MemberDecorate 18(gl_PerVertex) 0 BuiltIn Position MemberDecorate 18(gl_PerVertex) 1 BuiltIn PointSize - Decorate 18(gl_PerVertex) Block 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.buffer.autoassign.frag.out b/Test/baseResults/spv.buffer.autoassign.frag.out index 34752664a9..0ccd840888 100644 --- a/Test/baseResults/spv.buffer.autoassign.frag.out +++ b/Test/baseResults/spv.buffer.autoassign.frag.out @@ -1,6 +1,6 @@ spv.buffer.autoassign.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader @@ -25,19 +25,19 @@ spv.buffer.autoassign.frag MemberName 34(MyUB3) 0 "g_d" Name 36 "" Name 47 "@entryPointOutput.Color" + Decorate 16(MyUB1) Block MemberDecorate 16(MyUB1) 0 Offset 0 MemberDecorate 16(MyUB1) 1 Offset 4 - Decorate 16(MyUB1) Block - Decorate 18 DescriptorSet 0 Decorate 18 Binding 20 - MemberDecorate 28(MyUB2) 0 Offset 0 + Decorate 18 DescriptorSet 0 Decorate 28(MyUB2) Block - Decorate 30 DescriptorSet 0 + MemberDecorate 28(MyUB2) 0 Offset 0 Decorate 30 Binding 15 - MemberDecorate 34(MyUB3) 0 Offset 0 + Decorate 30 DescriptorSet 0 Decorate 34(MyUB3) Block - Decorate 36 DescriptorSet 0 + MemberDecorate 34(MyUB3) 0 Offset 0 Decorate 36 Binding 16 + Decorate 36 DescriptorSet 0 Decorate 47(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.bufferhandle1.frag.out b/Test/baseResults/spv.bufferhandle1.frag.out index b49c129630..6fb4dcce70 100644 --- a/Test/baseResults/spv.bufferhandle1.frag.out +++ b/Test/baseResults/spv.bufferhandle1.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle1.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 52 Capability Shader @@ -29,10 +29,11 @@ spv.bufferhandle1.frag MemberName 13(blockType) 6 "g" Name 15 "t" Name 28 "j" + Decorate 7(t2) Block MemberDecorate 7(t2) 0 Offset 0 MemberDecorate 7(t2) 1 Offset 8 - Decorate 7(t2) Block Decorate 11 ArrayStride 4 + Decorate 13(blockType) Block MemberDecorate 13(blockType) 0 Offset 0 MemberDecorate 13(blockType) 1 Offset 4 MemberDecorate 13(blockType) 2 Offset 8 @@ -40,9 +41,8 @@ spv.bufferhandle1.frag MemberDecorate 13(blockType) 4 Offset 16 MemberDecorate 13(blockType) 5 Offset 32 MemberDecorate 13(blockType) 6 Offset 48 - Decorate 13(blockType) Block - Decorate 15(t) DescriptorSet 0 Decorate 15(t) Binding 0 + Decorate 15(t) DescriptorSet 0 Decorate 28(j) DecorationAliasedPointerEXT 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.bufferhandle10.frag.out b/Test/baseResults/spv.bufferhandle10.frag.out index f9ab60d290..d2b8719ec3 100644 --- a/Test/baseResults/spv.bufferhandle10.frag.out +++ b/Test/baseResults/spv.bufferhandle10.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle10.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 40 Capability Shader @@ -25,13 +25,13 @@ spv.bufferhandle10.frag Name 19 "i" Name 28 "b" Name 34 "b2" - MemberDecorate 7(t2) 0 Offset 0 Decorate 7(t2) Block + MemberDecorate 7(t2) 0 Offset 0 Decorate 9 ArrayStride 4 - MemberDecorate 10(blockType) 0 Offset 0 Decorate 10(blockType) Block - Decorate 12(t) DescriptorSet 0 + MemberDecorate 10(blockType) 0 Offset 0 Decorate 12(t) Binding 0 + Decorate 12(t) DescriptorSet 0 Decorate 19(i) Flat Decorate 19(i) Location 0 Decorate 28(b) DecorationAliasedPointerEXT diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out index 9dd1c7b84a..a24406b1ec 100644 --- a/Test/baseResults/spv.bufferhandle11.frag.out +++ b/Test/baseResults/spv.bufferhandle11.frag.out @@ -3,7 +3,7 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to "precision mediump int; precision highp float;" // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 61 Capability Shader @@ -35,14 +35,14 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to Name 48 "AcBlock" MemberName 48(AcBlock) 0 "ac_numPassed" Name 50 "" - MemberDecorate 26(PC) 0 Offset 0 Decorate 26(PC) Block - MemberDecorate 28(Block) 0 Offset 0 + MemberDecorate 26(PC) 0 Offset 0 Decorate 28(Block) Block - MemberDecorate 48(AcBlock) 0 Offset 0 + MemberDecorate 28(Block) 0 Offset 0 Decorate 48(AcBlock) Block - Decorate 50 DescriptorSet 0 + MemberDecorate 48(AcBlock) 0 Offset 0 Decorate 50 Binding 0 + Decorate 50 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.bufferhandle12.frag.out b/Test/baseResults/spv.bufferhandle12.frag.out index 7cd5cb5e4d..66ba75a6da 100644 --- a/Test/baseResults/spv.bufferhandle12.frag.out +++ b/Test/baseResults/spv.bufferhandle12.frag.out @@ -3,7 +3,7 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to "precision mediump int; precision highp float;" // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 183 Capability Shader @@ -67,26 +67,26 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to Name 167 "AcBlock" MemberName 167(AcBlock) 0 "ac_numPassed" Name 169 "" + Decorate 139(PC) Block MemberDecorate 139(PC) 0 Offset 0 MemberDecorate 139(PC) 1 Offset 8 MemberDecorate 139(PC) 2 Offset 16 - Decorate 139(PC) Block + Decorate 141(BlockB) Block MemberDecorate 141(BlockB) 0 Offset 0 MemberDecorate 141(BlockB) 1 Offset 8 - Decorate 141(BlockB) Block - MemberDecorate 142(BlockC) 0 ColMajor + Decorate 142(BlockC) Block MemberDecorate 142(BlockC) 0 RelaxedPrecision - MemberDecorate 142(BlockC) 0 Offset 0 + MemberDecorate 142(BlockC) 0 ColMajor MemberDecorate 142(BlockC) 0 MatrixStride 16 - Decorate 142(BlockC) Block + MemberDecorate 142(BlockC) 0 Offset 0 + Decorate 143(BlockD) Block MemberDecorate 143(BlockD) 0 RelaxedPrecision MemberDecorate 143(BlockD) 0 Offset 0 - Decorate 143(BlockD) Block Decorate 160 RelaxedPrecision - MemberDecorate 167(AcBlock) 0 Offset 0 Decorate 167(AcBlock) Block - Decorate 169 DescriptorSet 0 + MemberDecorate 167(AcBlock) 0 Offset 0 Decorate 169 Binding 0 + Decorate 169 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.bufferhandle13.frag.out b/Test/baseResults/spv.bufferhandle13.frag.out index 5ce24acd38..90e715ae40 100644 --- a/Test/baseResults/spv.bufferhandle13.frag.out +++ b/Test/baseResults/spv.bufferhandle13.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle13.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 58 Capability Shader @@ -33,24 +33,25 @@ spv.bufferhandle13.frag Name 52 "param" Name 56 "g1" Name 57 "g2" - MemberDecorate 8(t4) 0 Offset 0 Decorate 8(t4) Block + MemberDecorate 8(t4) 0 Offset 0 Decorate 10(y) Aliased Decorate 15(y) DecorationAliasedPointerEXT Decorate 18(y) Restrict - Decorate 18(y) Restrict Decorate 21(y) Restrict Decorate 21(y) DecorationRestrictPointerEXT Decorate 34(a) DecorationAliasedPointerEXT - MemberDecorate 35(t5) 0 Offset 0 Decorate 35(t5) Block - Decorate 37(s5) DescriptorSet 0 + MemberDecorate 35(t5) 0 Offset 0 Decorate 37(s5) Binding 0 + Decorate 37(s5) DescriptorSet 0 + Decorate 42(b) Restrict Decorate 42(b) DecorationRestrictPointerEXT - Decorate 56(g1) DecorationAliasedPointerEXT - Decorate 57(g2) DecorationRestrictPointerEXT Decorate 47(param) DecorationAliasedPointerEXT Decorate 52(param) DecorationAliasedPointerEXT + Decorate 56(g1) DecorationAliasedPointerEXT + Decorate 57(g2) Restrict + Decorate 57(g2) DecorationRestrictPointerEXT 2: TypeVoid 3: TypeFunction 2 TypeForwardPointer 6 PhysicalStorageBufferEXT diff --git a/Test/baseResults/spv.bufferhandle14.frag.out b/Test/baseResults/spv.bufferhandle14.frag.out index 34df7538c9..c10692403a 100644 --- a/Test/baseResults/spv.bufferhandle14.frag.out +++ b/Test/baseResults/spv.bufferhandle14.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle14.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 46 Capability Shader @@ -33,25 +33,25 @@ spv.bufferhandle14.frag MemberName 38(T4) 1 "j" MemberName 38(T4) 2 "k" Name 40 "t4" + Decorate 8(T1) Block MemberDecorate 8(T1) 0 Offset 0 MemberDecorate 8(T1) 1 Offset 4 MemberDecorate 8(T1) 2 Offset 8 - Decorate 8(T1) Block Decorate 10(t1) DecorationAliasedPointerEXT + Decorate 20(T2) Block MemberDecorate 20(T2) 0 Offset 0 MemberDecorate 20(T2) 1 Offset 4 MemberDecorate 20(T2) 2 Offset 8 - Decorate 20(T2) Block Decorate 22(t2) DecorationAliasedPointerEXT + Decorate 29(T3) Block MemberDecorate 29(T3) 0 Offset 0 MemberDecorate 29(T3) 1 Offset 4 MemberDecorate 29(T3) 2 Offset 8 - Decorate 29(T3) Block Decorate 31(t3) DecorationAliasedPointerEXT + Decorate 38(T4) Block MemberDecorate 38(T4) 0 Offset 0 MemberDecorate 38(T4) 1 Offset 4 MemberDecorate 38(T4) 2 Offset 8 - Decorate 38(T4) Block Decorate 40(t4) DecorationAliasedPointerEXT 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.bufferhandle15.frag.out b/Test/baseResults/spv.bufferhandle15.frag.out index ab1b4dbaef..6bd429a918 100644 --- a/Test/baseResults/spv.bufferhandle15.frag.out +++ b/Test/baseResults/spv.bufferhandle15.frag.out @@ -3,7 +3,7 @@ WARNING: 0:16: '' : all default precisions are highp; use precision statements t "precision mediump int; precision highp float;" // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 60 Capability Shader @@ -36,29 +36,29 @@ WARNING: 0:16: '' : all default precisions are highp; use precision statements t Name 31 "t4" Name 37 "i" Name 52 "z" + Decorate 13(T4) Block MemberDecorate 13(T4) 0 Offset 0 MemberDecorate 13(T4) 1 Offset 8 MemberDecorate 13(T4) 2 Offset 16 - Decorate 13(T4) Block Decorate 14 ArrayStride 12 - MemberDecorate 15(T1) 0 Offset 0 Decorate 15(T1) Block + MemberDecorate 15(T1) 0 Offset 0 Decorate 18 ArrayStride 12 Decorate 20 ArrayStride 24 Decorate 21 ArrayStride 96 - MemberDecorate 22(T2) 0 Offset 0 Decorate 22(T2) Block + MemberDecorate 22(T2) 0 Offset 0 Decorate 26 ArrayStride 36 MemberDecorate 28(S) 0 Offset 0 - MemberDecorate 28(S) 1 ColMajor MemberDecorate 28(S) 1 RelaxedPrecision - MemberDecorate 28(S) 1 Offset 12 + MemberDecorate 28(S) 1 ColMajor MemberDecorate 28(S) 1 MatrixStride 12 + MemberDecorate 28(S) 1 Offset 12 MemberDecorate 28(S) 2 Offset 156 - MemberDecorate 29(T3) 0 Offset 0 Decorate 29(T3) Block - Decorate 31(t4) DescriptorSet 0 + MemberDecorate 29(T3) 0 Offset 0 Decorate 31(t4) Binding 0 + Decorate 31(t4) DescriptorSet 0 Decorate 37(i) Flat Decorate 37(i) Location 0 Decorate 59 RelaxedPrecision diff --git a/Test/baseResults/spv.bufferhandle16.frag.out b/Test/baseResults/spv.bufferhandle16.frag.out index a9d9dcf265..4952b3d0af 100644 --- a/Test/baseResults/spv.bufferhandle16.frag.out +++ b/Test/baseResults/spv.bufferhandle16.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle16.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 48 Capability Shader @@ -26,9 +26,9 @@ spv.bufferhandle16.frag Name 26 "e" Name 29 "f" Name 46 "x" + Decorate 9(T1) Block MemberDecorate 9(T1) 0 Offset 0 MemberDecorate 9(T1) 1 Offset 4 - Decorate 9(T1) Block Decorate 11(a) DecorationAliasedPointerEXT Decorate 15(b) DecorationAliasedPointerEXT Decorate 18(c) DecorationAliasedPointerEXT diff --git a/Test/baseResults/spv.bufferhandle18.frag.out b/Test/baseResults/spv.bufferhandle18.frag.out index 59ad6d02be..981a50e1f0 100644 --- a/Test/baseResults/spv.bufferhandle18.frag.out +++ b/Test/baseResults/spv.bufferhandle18.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle18.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 196 Capability Shader @@ -37,9 +37,9 @@ spv.bufferhandle18.frag Name 180 "m" Name 190 "x" Name 195 "buf" + Decorate 9(T1) Block MemberDecorate 9(T1) 0 Offset 0 MemberDecorate 9(T1) 1 Offset 4 - Decorate 9(T1) Block Decorate 11(a) DecorationAliasedPointerEXT Decorate 15(b) DecorationAliasedPointerEXT Decorate 18(c) DecorationAliasedPointerEXT @@ -49,8 +49,8 @@ spv.bufferhandle18.frag Decorate 59(arr) DecorationAliasedPointerEXT Decorate 130(j) DecorationAliasedPointerEXT Decorate 153(k) DecorationAliasedPointerEXT - MemberDecorate 178(T2) 0 Offset 0 Decorate 178(T2) Block + MemberDecorate 178(T2) 0 Offset 0 Decorate 180(m) DecorationAliasedPointerEXT 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.bufferhandle2.frag.out b/Test/baseResults/spv.bufferhandle2.frag.out index e20f3b7f2b..78bcfc0701 100644 --- a/Test/baseResults/spv.bufferhandle2.frag.out +++ b/Test/baseResults/spv.bufferhandle2.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle2.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 45 Capability Shader @@ -27,18 +27,18 @@ spv.bufferhandle2.frag Name 16 "t" Name 34 "b2" Name 37 "b3" + Decorate 8(blockType) Block MemberDecorate 8(blockType) 0 Offset 0 MemberDecorate 8(blockType) 1 Offset 4 MemberDecorate 8(blockType) 2 Offset 8 MemberDecorate 8(blockType) 3 Offset 12 MemberDecorate 8(blockType) 4 Offset 16 - Decorate 8(blockType) Block Decorate 13(b1) DecorationAliasedPointerEXT + Decorate 14(t2) Block MemberDecorate 14(t2) 0 Offset 0 MemberDecorate 14(t2) 1 Offset 8 - Decorate 14(t2) Block - Decorate 16(t) DescriptorSet 0 Decorate 16(t) Binding 0 + Decorate 16(t) DescriptorSet 0 Decorate 34(b2) DecorationAliasedPointerEXT Decorate 37(b3) DecorationAliasedPointerEXT 2: TypeVoid diff --git a/Test/baseResults/spv.bufferhandle3.frag.out b/Test/baseResults/spv.bufferhandle3.frag.out index 65ad1ca6fa..0a2ab45638 100644 --- a/Test/baseResults/spv.bufferhandle3.frag.out +++ b/Test/baseResults/spv.bufferhandle3.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle3.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader @@ -30,25 +30,25 @@ spv.bufferhandle3.frag MemberName 38(t4) 1 "k" Name 40 "x" Name 42 "k" + Decorate 9(t4) Block MemberDecorate 9(t4) 0 Offset 0 MemberDecorate 9(t4) 1 Offset 8 - Decorate 9(t4) Block - MemberDecorate 10(t3) 0 Offset 0 Decorate 10(t3) Block + MemberDecorate 10(t3) 0 Offset 0 Decorate 13(y) DecorationAliasedPointerEXT - MemberDecorate 19(t5) 0 Offset 0 Decorate 19(t5) Block - Decorate 21(s5) DescriptorSet 0 + MemberDecorate 19(t5) 0 Offset 0 Decorate 21(s5) Binding 0 + Decorate 21(s5) DescriptorSet 0 + Decorate 23(param) DecorationAliasedPointerEXT + Decorate 38(t4) Block MemberDecorate 38(t4) 0 Offset 0 MemberDecorate 38(t4) 1 Offset 8 - Decorate 38(t4) Block - Decorate 40(x) DescriptorSet 1 Decorate 40(x) Binding 2 + Decorate 40(x) DescriptorSet 1 Decorate 42(k) Flat Decorate 42(k) Location 0 Decorate 42(k) DecorationAliasedPointerEXT - Decorate 23(param) DecorationAliasedPointerEXT 2: TypeVoid 3: TypeFunction 2 TypeForwardPointer 6 PhysicalStorageBufferEXT diff --git a/Test/baseResults/spv.bufferhandle4.frag.out b/Test/baseResults/spv.bufferhandle4.frag.out index e06bca4e8b..42b34b7ec1 100644 --- a/Test/baseResults/spv.bufferhandle4.frag.out +++ b/Test/baseResults/spv.bufferhandle4.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle4.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 61 Capability Shader @@ -28,21 +28,21 @@ spv.bufferhandle4.frag MemberName 19(t5) 0 "m" Name 21 "s5" Name 43 "b" + Decorate 8(t4) Block MemberDecorate 8(t4) 0 Offset 0 MemberDecorate 8(t4) 1 Offset 8 - Decorate 8(t4) Block + Decorate 10(t3) Block MemberDecorate 10(t3) 0 Offset 0 MemberDecorate 10(t3) 1 Offset 8 - Decorate 10(t3) Block + Decorate 11(t4) Block MemberDecorate 11(t4) 0 Offset 0 MemberDecorate 11(t4) 1 Offset 8 - Decorate 11(t4) Block - Decorate 13(x) DescriptorSet 1 Decorate 13(x) Binding 2 - MemberDecorate 19(t5) 0 Offset 0 + Decorate 13(x) DescriptorSet 1 Decorate 19(t5) Block - Decorate 21(s5) DescriptorSet 0 + MemberDecorate 19(t5) 0 Offset 0 Decorate 21(s5) Binding 0 + Decorate 21(s5) DescriptorSet 0 Decorate 47 DecorationAliasedPointerEXT 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.bufferhandle5.frag.out b/Test/baseResults/spv.bufferhandle5.frag.out index bf4d3a2ab3..cce131dd05 100644 --- a/Test/baseResults/spv.bufferhandle5.frag.out +++ b/Test/baseResults/spv.bufferhandle5.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle5.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader @@ -19,13 +19,13 @@ spv.bufferhandle5.frag Name 9 "t3" MemberName 9(t3) 0 "h" Name 11 "x" + Decorate 8(t4) Block MemberDecorate 8(t4) 0 Offset 0 MemberDecorate 8(t4) 1 Offset 8 - Decorate 8(t4) Block - MemberDecorate 9(t3) 0 Offset 0 Decorate 9(t3) Block - Decorate 11(x) DescriptorSet 1 + MemberDecorate 9(t3) 0 Offset 0 Decorate 11(x) Binding 2 + Decorate 11(x) DescriptorSet 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.bufferhandle6.frag.out b/Test/baseResults/spv.bufferhandle6.frag.out index abc9187c84..89749cd850 100644 --- a/Test/baseResults/spv.bufferhandle6.frag.out +++ b/Test/baseResults/spv.bufferhandle6.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle6.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 165 Capability Shader @@ -34,26 +34,26 @@ spv.bufferhandle6.frag Name 154 "gl_FragCoord" Decorate 12 ArrayStride 4 Decorate 14 ArrayStride 8 + Decorate 15(T1) Block MemberDecorate 15(T1) 0 Offset 0 MemberDecorate 15(T1) 1 Offset 32 MemberDecorate 15(T1) 2 Offset 48 MemberDecorate 15(T1) 3 Offset 80 - Decorate 15(T1) Block Decorate 16 ArrayStride 4 Decorate 17 ArrayStride 8 + Decorate 18(T1) Block MemberDecorate 18(T1) 0 Offset 0 MemberDecorate 18(T1) 1 Offset 32 MemberDecorate 18(T1) 2 Offset 48 MemberDecorate 18(T1) 3 Offset 80 - Decorate 18(T1) Block Decorate 19 ArrayStride 8 - Decorate 21(x) DescriptorSet 3 Decorate 21(x) Binding 1 + Decorate 21(x) DescriptorSet 3 Decorate 29 ArrayStride 4 - MemberDecorate 30(Block) 0 Offset 0 Decorate 30(Block) Block - Decorate 149(image0_0) DescriptorSet 3 + MemberDecorate 30(Block) 0 Offset 0 Decorate 149(image0_0) Binding 0 + Decorate 149(image0_0) DescriptorSet 3 Decorate 154(gl_FragCoord) BuiltIn FragCoord 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.bufferhandle7.frag.out b/Test/baseResults/spv.bufferhandle7.frag.out index 4282a3622c..6af3efbb0e 100644 --- a/Test/baseResults/spv.bufferhandle7.frag.out +++ b/Test/baseResults/spv.bufferhandle7.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle7.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader @@ -30,24 +30,24 @@ spv.bufferhandle7.frag MemberName 15(t2) 0 "f" MemberName 15(t2) 1 "g" Name 17 "u" + Decorate 7(t2) Block MemberDecorate 7(t2) 0 Offset 0 MemberDecorate 7(t2) 1 Offset 8 - Decorate 7(t2) Block + Decorate 9(blockType) Block MemberDecorate 9(blockType) 0 Offset 0 MemberDecorate 9(blockType) 1 Offset 4 MemberDecorate 9(blockType) 2 Offset 8 MemberDecorate 9(blockType) 3 Offset 12 MemberDecorate 9(blockType) 4 Offset 16 - Decorate 9(blockType) Block - Decorate 11(t) DescriptorSet 0 Decorate 11(t) Binding 0 - MemberDecorate 14(t3) 0 Offset 0 + Decorate 11(t) DescriptorSet 0 Decorate 14(t3) Block + MemberDecorate 14(t3) 0 Offset 0 + Decorate 15(t2) Block MemberDecorate 15(t2) 0 Offset 0 MemberDecorate 15(t2) 1 Offset 8 - Decorate 15(t2) Block - Decorate 17(u) DescriptorSet 0 Decorate 17(u) Binding 1 + Decorate 17(u) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 TypeForwardPointer 6 PhysicalStorageBufferEXT diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out index 65d4665324..7a717b0b74 100644 --- a/Test/baseResults/spv.bufferhandle8.frag.out +++ b/Test/baseResults/spv.bufferhandle8.frag.out @@ -1,7 +1,7 @@ spv.bufferhandle8.frag // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 27 +// Generated by (magic number): 8000b +// Id's are bound by 39 Capability Shader Capability PhysicalStorageBufferAddressesEXT @@ -21,41 +21,46 @@ spv.bufferhandle8.frag MemberName 10(T1) 0 "x" Name 11 "T2" MemberName 11(T2) 0 "x" - Name 13 "T3" - MemberName 13(T3) 0 "Bindings" - Name 15 "t3" - Name 23 "t2" - MemberName 23(t2) 0 "f" - MemberName 23(t2) 1 "g" - Name 24 "blockType" - MemberName 24(blockType) 0 "a" - MemberName 24(blockType) 1 "b" - MemberName 24(blockType) 2 "c" - MemberName 24(blockType) 3 "d" - MemberName 24(blockType) 4 "e" - Name 26 "t" - MemberDecorate 8(Blah) 0 Offset 0 - MemberDecorate 8(Blah) 1 Offset 8 - MemberDecorate 10(T1) 0 Offset 0 + Name 13 "x" + Name 14 "Blah" + MemberName 14(Blah) 0 "t1" + MemberName 14(Blah) 1 "t2" + Name 16 "T3" + MemberName 16(T3) 0 "Bindings" + Name 18 "t3" + Name 35 "t2" + MemberName 35(t2) 0 "f" + MemberName 35(t2) 1 "g" + Name 36 "blockType" + MemberName 36(blockType) 0 "a" + MemberName 36(blockType) 1 "b" + MemberName 36(blockType) 2 "c" + MemberName 36(blockType) 3 "d" + MemberName 36(blockType) 4 "e" + Name 38 "t" Decorate 10(T1) Block - MemberDecorate 11(T2) 0 Offset 0 + MemberDecorate 10(T1) 0 Offset 0 Decorate 11(T2) Block - Decorate 12 ArrayStride 16 - MemberDecorate 13(T3) 0 Offset 0 - Decorate 13(T3) Block - Decorate 15(t3) DescriptorSet 0 - Decorate 15(t3) Binding 0 - MemberDecorate 23(t2) 0 Offset 0 - MemberDecorate 23(t2) 1 Offset 8 - Decorate 23(t2) Block - MemberDecorate 24(blockType) 0 Offset 0 - MemberDecorate 24(blockType) 1 Offset 4 - MemberDecorate 24(blockType) 2 Offset 8 - MemberDecorate 24(blockType) 3 Offset 12 - MemberDecorate 24(blockType) 4 Offset 16 - Decorate 24(blockType) Block - Decorate 26(t) DescriptorSet 0 - Decorate 26(t) Binding 0 + MemberDecorate 11(T2) 0 Offset 0 + Decorate 13(x) DecorationAliasedPointerEXT + MemberDecorate 14(Blah) 0 Offset 0 + MemberDecorate 14(Blah) 1 Offset 8 + Decorate 15 ArrayStride 16 + Decorate 16(T3) Block + MemberDecorate 16(T3) 0 Offset 0 + Decorate 18(t3) Binding 0 + Decorate 18(t3) DescriptorSet 0 + Decorate 35(t2) Block + MemberDecorate 35(t2) 0 Offset 0 + MemberDecorate 35(t2) 1 Offset 8 + Decorate 36(blockType) Block + MemberDecorate 36(blockType) 0 Offset 0 + MemberDecorate 36(blockType) 1 Offset 4 + MemberDecorate 36(blockType) 2 Offset 8 + MemberDecorate 36(blockType) 3 Offset 12 + MemberDecorate 36(blockType) 4 Offset 16 + Decorate 38(t) Binding 0 + Decorate 38(t) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 TypeForwardPointer 6 PhysicalStorageBufferEXT @@ -66,24 +71,38 @@ spv.bufferhandle8.frag 6: TypePointer PhysicalStorageBufferEXT 10(T1) 11(T2): TypeStruct 9(int) 7: TypePointer PhysicalStorageBufferEXT 11(T2) - 12: TypeRuntimeArray 8(Blah) - 13(T3): TypeStruct 12 - 14: TypePointer StorageBuffer 13(T3) - 15(t3): 14(ptr) Variable StorageBuffer - 16: 9(int) Constant 0 - 17: 9(int) Constant 1 - 18: TypePointer StorageBuffer 8(Blah) - TypeForwardPointer 22 PhysicalStorageBufferEXT - 23(t2): TypeStruct 22 22 - 24(blockType): TypeStruct 9(int) 9(int) 9(int) 9(int) 9(int) - 22: TypePointer PhysicalStorageBufferEXT 24(blockType) - 25: TypePointer StorageBuffer 23(t2) - 26(t): 25(ptr) Variable StorageBuffer + 12: TypePointer Function 8(Blah) + 14(Blah): TypeStruct 6(ptr) 7(ptr) + 15: TypeRuntimeArray 14(Blah) + 16(T3): TypeStruct 15 + 17: TypePointer StorageBuffer 16(T3) + 18(t3): 17(ptr) Variable StorageBuffer + 19: 9(int) Constant 0 + 20: 9(int) Constant 2 + 21: TypePointer StorageBuffer 14(Blah) + 25: TypePointer Function 6(ptr) + 28: 9(int) Constant 1 + 29: TypePointer Function 7(ptr) + TypeForwardPointer 34 PhysicalStorageBufferEXT + 35(t2): TypeStruct 34 34 + 36(blockType): TypeStruct 9(int) 9(int) 9(int) 9(int) 9(int) + 34: TypePointer PhysicalStorageBufferEXT 36(blockType) + 37: TypePointer StorageBuffer 35(t2) + 38(t): 37(ptr) Variable StorageBuffer 4(main): 2 Function None 3 5: Label - 19: 18(ptr) AccessChain 15(t3) 16 17 - 20: 8(Blah) Load 19 - 21: 18(ptr) AccessChain 15(t3) 16 16 - Store 21 20 + 13(x): 12(ptr) Variable Function + 22: 21(ptr) AccessChain 18(t3) 19 20 + 23: 14(Blah) Load 22 + 24: 6(ptr) CompositeExtract 23 0 + 26: 25(ptr) AccessChain 13(x) 19 + Store 26 24 + 27: 7(ptr) CompositeExtract 23 1 + 30: 29(ptr) AccessChain 13(x) 28 + Store 30 27 + 31: 21(ptr) AccessChain 18(t3) 19 28 + 32: 14(Blah) Load 31 + 33: 21(ptr) AccessChain 18(t3) 19 19 + Store 33 32 Return FunctionEnd diff --git a/Test/baseResults/spv.bufferhandle9.frag.out b/Test/baseResults/spv.bufferhandle9.frag.out index 1e5091c2ef..e094605cad 100644 --- a/Test/baseResults/spv.bufferhandle9.frag.out +++ b/Test/baseResults/spv.bufferhandle9.frag.out @@ -1,6 +1,6 @@ spv.bufferhandle9.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 56 Capability Shader @@ -32,12 +32,12 @@ spv.bufferhandle9.frag MemberName 53(t2) 0 "f" MemberName 53(t2) 1 "g" Name 55 "t" + Decorate 8(blockType) Block MemberDecorate 8(blockType) 0 Offset 0 MemberDecorate 8(blockType) 1 Offset 4 MemberDecorate 8(blockType) 2 Offset 8 MemberDecorate 8(blockType) 3 Offset 12 MemberDecorate 8(blockType) 4 Offset 16 - Decorate 8(blockType) Block Decorate 13(b1) DecorationAliasedPointerEXT Decorate 16(h) Flat Decorate 16(h) Location 0 @@ -45,11 +45,11 @@ spv.bufferhandle9.frag Decorate 19(i) Location 1 Decorate 34(b2) DecorationAliasedPointerEXT Decorate 37(b3) DecorationAliasedPointerEXT + Decorate 53(t2) Block MemberDecorate 53(t2) 0 Offset 0 MemberDecorate 53(t2) 1 Offset 8 - Decorate 53(t2) Block - Decorate 55(t) DescriptorSet 0 Decorate 55(t) Binding 0 + Decorate 55(t) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 TypeForwardPointer 6 PhysicalStorageBufferEXT diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out index fbdbb6aa30..0ee138ba68 100644 --- a/Test/baseResults/spv.bufferhandleUvec2.frag.out +++ b/Test/baseResults/spv.bufferhandleUvec2.frag.out @@ -1,6 +1,6 @@ spv.bufferhandleUvec2.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 71 Capability Shader @@ -33,12 +33,12 @@ spv.bufferhandleUvec2.frag MemberName 68(t2) 0 "f" MemberName 68(t2) 1 "g" Name 70 "t" + Decorate 8(blockType) Block MemberDecorate 8(blockType) 0 Offset 0 MemberDecorate 8(blockType) 1 Offset 4 MemberDecorate 8(blockType) 2 Offset 8 MemberDecorate 8(blockType) 3 Offset 12 MemberDecorate 8(blockType) 4 Offset 16 - Decorate 8(blockType) Block Decorate 13(b1) DecorationAliasedPointerEXT Decorate 16(h) Flat Decorate 16(h) Location 0 @@ -46,11 +46,11 @@ spv.bufferhandleUvec2.frag Decorate 19(i) Location 1 Decorate 34(b2) DecorationAliasedPointerEXT Decorate 37(b3) DecorationAliasedPointerEXT + Decorate 68(t2) Block MemberDecorate 68(t2) 0 Offset 0 MemberDecorate 68(t2) 1 Offset 8 - Decorate 68(t2) Block - Decorate 70(t) DescriptorSet 0 Decorate 70(t) Binding 0 + Decorate 70(t) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 TypeForwardPointer 6 PhysicalStorageBufferEXT diff --git a/Test/baseResults/spv.builtInXFB.vert.out b/Test/baseResults/spv.builtInXFB.vert.out index 1f612e2a22..68e5a7d420 100644 --- a/Test/baseResults/spv.builtInXFB.vert.out +++ b/Test/baseResults/spv.builtInXFB.vert.out @@ -1,6 +1,6 @@ spv.builtInXFB.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 21 Capability Shader @@ -15,11 +15,11 @@ spv.builtInXFB.vert MemberName 8(gl_PerVertex) 0 "gl_Position" MemberName 8(gl_PerVertex) 1 "gl_PointSize" Name 10 "" - MemberDecorate 8(gl_PerVertex) 0 Offset 20 + Decorate 8(gl_PerVertex) Block MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position - MemberDecorate 8(gl_PerVertex) 1 Offset 16 + MemberDecorate 8(gl_PerVertex) 0 Offset 20 MemberDecorate 8(gl_PerVertex) 1 BuiltIn PointSize - Decorate 8(gl_PerVertex) Block + MemberDecorate 8(gl_PerVertex) 1 Offset 16 Decorate 10 XfbBuffer 1 Decorate 10 XfbStride 64 2: TypeVoid diff --git a/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out b/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out index 8daa79ee04..019118548e 100644 --- a/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out +++ b/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out @@ -1,6 +1,6 @@ spv.builtin.PrimitiveShadingRateEXT.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 26 Capability Shader diff --git a/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out b/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out index 95b94d2534..1729a16213 100644 --- a/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out +++ b/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out @@ -3,7 +3,7 @@ WARNING: 0:5: '' : all default precisions are highp; use precision statements to "precision mediump int; precision highp float;" // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 12 Capability Shader @@ -19,8 +19,8 @@ WARNING: 0:5: '' : all default precisions are highp; use precision statements to Name 8 "val" Name 10 "gl_ShadingRateEXT" Decorate 8(val) Location 0 - Decorate 10(gl_ShadingRateEXT) Flat Decorate 10(gl_ShadingRateEXT) BuiltIn ShadingRateKHR + Decorate 10(gl_ShadingRateEXT) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.computeShaderDerivatives.comp.out b/Test/baseResults/spv.computeShaderDerivatives.comp.out index a7138450c5..789e05ea21 100644 --- a/Test/baseResults/spv.computeShaderDerivatives.comp.out +++ b/Test/baseResults/spv.computeShaderDerivatives.comp.out @@ -1,6 +1,6 @@ spv.computeShaderDerivatives.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 212 Capability Shader @@ -61,6 +61,7 @@ spv.computeShaderDerivatives.comp MemberName 10(block) 42 "v4X" MemberName 10(block) 43 "v4Y" Name 12 "" + Decorate 10(block) BufferBlock MemberDecorate 10(block) 0 Offset 0 MemberDecorate 10(block) 1 Offset 4 MemberDecorate 10(block) 2 Offset 8 @@ -105,9 +106,8 @@ spv.computeShaderDerivatives.comp MemberDecorate 10(block) 41 Offset 448 MemberDecorate 10(block) 42 Offset 464 MemberDecorate 10(block) 43 Offset 480 - Decorate 10(block) BufferBlock - Decorate 12 DescriptorSet 0 Decorate 12 Binding 0 + Decorate 12 DescriptorSet 0 Decorate 211 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.computeShaderDerivatives2.comp.out b/Test/baseResults/spv.computeShaderDerivatives2.comp.out index 3c3d54eef2..a520fc3e48 100644 --- a/Test/baseResults/spv.computeShaderDerivatives2.comp.out +++ b/Test/baseResults/spv.computeShaderDerivatives2.comp.out @@ -1,6 +1,6 @@ spv.computeShaderDerivatives2.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 212 Capability Shader @@ -61,6 +61,7 @@ spv.computeShaderDerivatives2.comp MemberName 10(block) 42 "v4X" MemberName 10(block) 43 "v4Y" Name 12 "" + Decorate 10(block) BufferBlock MemberDecorate 10(block) 0 Offset 0 MemberDecorate 10(block) 1 Offset 4 MemberDecorate 10(block) 2 Offset 8 @@ -105,9 +106,8 @@ spv.computeShaderDerivatives2.comp MemberDecorate 10(block) 41 Offset 448 MemberDecorate 10(block) 42 Offset 464 MemberDecorate 10(block) 43 Offset 480 - Decorate 10(block) BufferBlock - Decorate 12 DescriptorSet 0 Decorate 12 Binding 0 + Decorate 12 DescriptorSet 0 Decorate 211 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.computeShaderDerivativesSpec.comp.out b/Test/baseResults/spv.computeShaderDerivativesSpec.comp.out new file mode 100644 index 0000000000..e4afc6f5c1 --- /dev/null +++ b/Test/baseResults/spv.computeShaderDerivativesSpec.comp.out @@ -0,0 +1,31 @@ +spv.computeShaderDerivativesSpec.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 12 + + Capability Shader + Capability ComputeDerivativeGroupQuadsNV + Extension "SPV_NV_compute_shader_derivatives" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + ExecutionMode 4 DerivativeGroupQuadsNV + Source GLSL 450 + SourceExtension "GL_NV_compute_shader_derivatives" + Name 4 "main" + Decorate 7 SpecId 0 + Decorate 8 SpecId 1 + Decorate 11 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) SpecConstant 1 + 8: 6(int) SpecConstant 1 + 9: 6(int) Constant 1 + 10: TypeVector 6(int) 3 + 11: 10(ivec3) SpecConstantComposite 7 8 9 + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.computeShaderDerivativesSpec2.comp.out b/Test/baseResults/spv.computeShaderDerivativesSpec2.comp.out new file mode 100644 index 0000000000..a3b38cafdd --- /dev/null +++ b/Test/baseResults/spv.computeShaderDerivativesSpec2.comp.out @@ -0,0 +1,31 @@ +spv.computeShaderDerivativesSpec2.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 12 + + Capability Shader + Capability ComputeDerivativeGroupLinearNV + Extension "SPV_NV_compute_shader_derivatives" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + ExecutionMode 4 DerivativeGroupLinearNV + Source ESSL 320 + SourceExtension "GL_NV_compute_shader_derivatives" + Name 4 "main" + Decorate 7 SpecId 0 + Decorate 8 SpecId 1 + Decorate 11 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) SpecConstant 1 + 8: 6(int) SpecConstant 1 + 9: 6(int) Constant 1 + 10: TypeVector 6(int) 3 + 11: 10(ivec3) SpecConstantComposite 7 8 9 + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.conditionalDemote.frag.out b/Test/baseResults/spv.conditionalDemote.frag.out index dfd45962cf..fb789db7d5 100644 --- a/Test/baseResults/spv.conditionalDemote.frag.out +++ b/Test/baseResults/spv.conditionalDemote.frag.out @@ -1,6 +1,6 @@ spv.conditionalDemote.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 38 Capability Shader @@ -18,8 +18,8 @@ spv.conditionalDemote.frag Name 17 "coord" Name 33 "x" Name 36 "o" - Decorate 13(tex) DescriptorSet 0 Decorate 13(tex) Binding 0 + Decorate 13(tex) DescriptorSet 0 Decorate 17(coord) Location 0 Decorate 36(o) Location 0 2: TypeVoid diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out index 2e53e9b89b..3d7cca84df 100644 --- a/Test/baseResults/spv.conditionalDiscard.frag.out +++ b/Test/baseResults/spv.conditionalDiscard.frag.out @@ -1,6 +1,6 @@ spv.conditionalDiscard.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 36 Capability Shader @@ -14,8 +14,8 @@ spv.conditionalDiscard.frag Name 13 "tex" Name 17 "coord" Name 34 "gl_FragColor" - Decorate 13(tex) DescriptorSet 0 Decorate 13(tex) Binding 0 + Decorate 13(tex) DescriptorSet 0 Decorate 17(coord) Location 0 Decorate 34(gl_FragColor) Location 0 2: TypeVoid diff --git a/Test/baseResults/spv.constConstruct.vert.out b/Test/baseResults/spv.constConstruct.vert.out index db637a946f..3dc42ed94d 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 +// Generated by (magic number): 8000b // 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.constStruct.vert.out b/Test/baseResults/spv.constStruct.vert.out index 61d0e54f4a..6abc009ea0 100644 --- a/Test/baseResults/spv.constStruct.vert.out +++ b/Test/baseResults/spv.constStruct.vert.out @@ -1,6 +1,6 @@ spv.constStruct.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 23 Capability Shader diff --git a/Test/baseResults/spv.constructComposite.comp.out b/Test/baseResults/spv.constructComposite.comp.out index 73d663b976..c2688ca5bb 100644 --- a/Test/baseResults/spv.constructComposite.comp.out +++ b/Test/baseResults/spv.constructComposite.comp.out @@ -1,6 +1,6 @@ spv.constructComposite.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -27,10 +27,10 @@ spv.constructComposite.comp MemberDecorate 11(sA) 0 Offset 0 MemberDecorate 11(sA) 1 Offset 4 MemberDecorate 12(sB) 0 Offset 0 - MemberDecorate 13(ubo) 0 Offset 0 Decorate 13(ubo) Block - Decorate 15 DescriptorSet 0 + MemberDecorate 13(ubo) 0 Offset 0 Decorate 15 Binding 0 + Decorate 15 DescriptorSet 0 Decorate 28 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.controlFlowAttributes.frag.out b/Test/baseResults/spv.controlFlowAttributes.frag.out index cf34ae2f68..038711d2fc 100644 --- a/Test/baseResults/spv.controlFlowAttributes.frag.out +++ b/Test/baseResults/spv.controlFlowAttributes.frag.out @@ -9,7 +9,7 @@ WARNING: 0:33: '' : attribute with arguments not recognized, skipping Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 123 Capability Shader diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out index b600b384af..5ddf7db612 100644 --- a/Test/baseResults/spv.conversion.frag.out +++ b/Test/baseResults/spv.conversion.frag.out @@ -1,6 +1,6 @@ spv.conversion.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 455 Capability Shader diff --git a/Test/baseResults/spv.coopmat.comp.out b/Test/baseResults/spv.coopmat.comp.out index 0a609df18a..b14ad59bd2 100644 --- a/Test/baseResults/spv.coopmat.comp.out +++ b/Test/baseResults/spv.coopmat.comp.out @@ -1,6 +1,6 @@ spv.coopmat.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 228 Capability Shader @@ -78,24 +78,24 @@ spv.coopmat.comp Name 227 "scm" Decorate 66 ArrayStride 4 Decorate 67 ArrayStride 4 + Decorate 68(Block) Block MemberDecorate 68(Block) 0 Offset 0 MemberDecorate 68(Block) 1 Offset 4194304 - Decorate 68(Block) Block - Decorate 70(block) DescriptorSet 0 Decorate 70(block) Binding 0 + Decorate 70(block) DescriptorSet 0 Decorate 82 ArrayStride 2 Decorate 84 ArrayStride 2 + Decorate 86(Block16) Block MemberDecorate 86(Block16) 0 Offset 0 MemberDecorate 86(Block16) 1 Offset 2097152 MemberDecorate 86(Block16) 2 Offset 2097160 - Decorate 86(Block16) Block Decorate 87 ArrayStride 4 Decorate 88 ArrayStride 4 + Decorate 89(Block) Block MemberDecorate 89(Block) 0 Offset 0 MemberDecorate 89(Block) 1 Offset 4194304 - Decorate 89(Block) Block - Decorate 91(block16) DescriptorSet 0 Decorate 91(block16) Binding 0 + Decorate 91(block16) DescriptorSet 0 Decorate 124(Y) SpecId 0 Decorate 200 BuiltIn WorkgroupSize Decorate 212(F) SpecId 1 diff --git a/Test/baseResults/spv.coopmatKHR.comp.out b/Test/baseResults/spv.coopmatKHR.comp.out new file mode 100644 index 0000000000..4d87d70a90 --- /dev/null +++ b/Test/baseResults/spv.coopmatKHR.comp.out @@ -0,0 +1,402 @@ +spv.coopmatKHR.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 250 + + Capability Shader + Capability Float16 + Capability Int16 + Capability Int8 + Capability StorageUniformBufferBlock16 + Capability VulkanMemoryModelKHR + Capability PhysicalStorageBufferAddressesEXT + Capability CooperativeMatrixKHR + Extension "SPV_KHR_16bit_storage" + Extension "SPV_KHR_cooperative_matrix" + Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" + Extension "SPV_KHR_vulkan_memory_model" + 1: ExtInstImport "GLSL.std.450" + MemoryModel PhysicalStorageBuffer64EXT VulkanKHR + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 64 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_buffer_reference" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types" + SourceExtension "GL_KHR_cooperative_matrix" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 15 "f16(f161;" + Name 14 "m" + Name 22 "f32(f1;" + Name 21 "m" + Name 35 "m" + Name 53 "m2" + Name 57 "x" + Name 65 "tempArg" + Name 69 "Block" + MemberName 69(Block) 0 "y" + MemberName 69(Block) 1 "x" + Name 71 "block" + Name 80 "tempArg" + Name 85 "Block16" + MemberName 85(Block16) 0 "y" + MemberName 85(Block16) 1 "x" + MemberName 85(Block16) 2 "b" + Name 88 "Block" + MemberName 88(Block) 0 "y" + MemberName 88(Block) 1 "x" + Name 90 "block16" + Name 97 "tempArg" + Name 110 "D" + Name 114 "A" + Name 118 "B" + Name 120 "C" + Name 124 "l" + Name 128 "Y" + Name 129 "Z" + Name 132 "F" + Name 137 "a" + Name 141 "md1" + Name 152 "mC2" + Name 157 "tempArg" + Name 163 "tempArg" + Name 169 "p1" + Name 170 "param" + Name 173 "p2" + Name 174 "param" + Name 188 "tempArg" + Name 193 "shmatrix" + Name 197 "ms" + Name 204 "ms8A" + Name 208 "ms8B" + Name 212 "ms8C" + Name 227 "m16" + Name 233 "mC" + Name 234 "F" + Name 239 "S" + MemberName 239(S) 0 "a" + MemberName 239(S) 1 "b" + MemberName 239(S) 2 "c" + Name 244 "SC" + Name 249 "scm" + Decorate 67 ArrayStride 4 + Decorate 68 ArrayStride 4 + Decorate 69(Block) Block + MemberDecorate 69(Block) 0 Offset 0 + MemberDecorate 69(Block) 1 Offset 4194304 + Decorate 71(block) Binding 0 + Decorate 71(block) DescriptorSet 0 + Decorate 81 ArrayStride 2 + Decorate 83 ArrayStride 2 + Decorate 85(Block16) Block + MemberDecorate 85(Block16) 0 Offset 0 + MemberDecorate 85(Block16) 1 Offset 2097152 + MemberDecorate 85(Block16) 2 Offset 2097160 + Decorate 86 ArrayStride 4 + Decorate 87 ArrayStride 4 + Decorate 88(Block) Block + MemberDecorate 88(Block) 0 Offset 0 + MemberDecorate 88(Block) 1 Offset 4194304 + Decorate 90(block16) Binding 0 + Decorate 90(block16) DescriptorSet 0 + Decorate 128(Y) SpecId 0 + Decorate 232 BuiltIn WorkgroupSize + Decorate 234(F) SpecId 1 + Decorate 244(SC) SpecId 2 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 16 + 7: TypeInt 32 0 + 8: 7(int) Constant 3 + 9: 7(int) Constant 8 + 10: 7(int) Constant 2 + 11: TypeCooperativeMatrixKHR 6(float16_t) 8 9 9 10 + 12: TypePointer Function 11 + 13: TypeFunction 11 12(ptr) + 17: TypeFloat 32 + 18: TypeCooperativeMatrixKHR 17(float) 8 9 9 10 + 19: TypePointer Function 18 + 20: TypeFunction 18 19(ptr) + 32: 7(int) Constant 16 + 33: TypeCooperativeMatrixKHR 17(float) 8 32 9 10 + 34: TypePointer Function 33 + 36: 17(float) Constant 0 + 37: 33 ConstantComposite 36 + 46: 17(float) Constant 1073741824 + 51: TypeCooperativeMatrixKHR 6(float16_t) 8 32 9 10 + 52: TypePointer Function 51 + 56: TypePointer Function 17(float) + 58: TypeInt 32 1 + 59: 58(int) Constant 1 + 62: 58(int) Constant 0 + 66: 7(int) Constant 1048576 + 67: TypeArray 17(float) 66 + 68: TypeRuntimeArray 17(float) + 69(Block): TypeStruct 67 68 + 70: TypePointer StorageBuffer 69(Block) + 71(block): 70(ptr) Variable StorageBuffer + 72: 7(int) Constant 5 + 73: TypePointer StorageBuffer 17(float) + 75: 7(int) Constant 128 + 81: TypeArray 6(float16_t) 66 + 82: 7(int) Constant 1 + 83: TypeArray 6(float16_t) 82 + TypeForwardPointer 84 PhysicalStorageBufferEXT + 85(Block16): TypeStruct 81 83 84 + 86: TypeArray 17(float) 66 + 87: TypeRuntimeArray 17(float) + 88(Block): TypeStruct 86 87 + 84: TypePointer PhysicalStorageBufferEXT 88(Block) + 89: TypePointer StorageBuffer 85(Block16) + 90(block16): 89(ptr) Variable StorageBuffer + 91: TypePointer StorageBuffer 6(float16_t) + 98: 58(int) Constant 2 + 99: TypePointer StorageBuffer 84(ptr) + 102: TypePointer PhysicalStorageBufferEXT 17(float) + 111: 7(int) Constant 0 + 112: TypeCooperativeMatrixKHR 6(float16_t) 8 32 9 111 + 113: TypePointer Function 112 + 116: TypeCooperativeMatrixKHR 6(float16_t) 8 9 9 82 + 117: TypePointer Function 116 + 123: TypePointer Function 58(int) + 127: 58(int) Constant 8 + 128(Y): 58(int) SpecConstant 2 + 129(Z): 58(int) SpecConstantOp 132 127 128(Y) + 130: TypeCooperativeMatrixKHR 6(float16_t) 8 129(Z) 129(Z) 10 + 131: TypePointer Function 130 + 133:6(float16_t) Constant 0 + 134: 130 ConstantComposite 133 + 135: TypeArray 33 72 + 136: TypePointer Function 135 + 138: 58(int) Constant 3 + 139: 17(float) Constant 1065353216 + 145: 58(int) Constant 1234 + 149: TypeCooperativeMatrixKHR 6(float16_t) 8 129(Z) 9 10 + 150: TypeArray 149 8 + 151: TypePointer Private 150 + 152(mC2): 151(ptr) Variable Private + 153: TypePointer Private 149 + 177: 11 ConstantComposite 133 + 178: 18 ConstantComposite 36 + 182:6(float16_t) Constant 16384 + 185: 17(float) Constant 1082130432 + 189: TypeVector 7(int) 4 + 190: 7(int) Constant 32 + 191: TypeArray 189(ivec4) 190 + 192: TypePointer Workgroup 191 + 193(shmatrix): 192(ptr) Variable Workgroup + 194: TypePointer Workgroup 189(ivec4) + 201: TypeInt 8 1 + 202: TypeCooperativeMatrixKHR 201(int8_t) 8 9 9 111 + 203: TypePointer Function 202 + 206: TypeCooperativeMatrixKHR 201(int8_t) 8 9 9 82 + 207: TypePointer Function 206 + 210: TypeCooperativeMatrixKHR 201(int8_t) 8 9 9 10 + 211: TypePointer Function 210 + 222: 58(int) Constant 16 + 224: TypeInt 16 1 + 225: TypeCooperativeMatrixKHR 224(int16_t) 8 9 9 111 + 226: TypePointer Function 225 + 230: TypeVector 7(int) 3 + 231: 7(int) Constant 64 + 232: 230(ivec3) ConstantComposite 231 82 82 + 233(mC): 153(ptr) Variable Private + 234(F): 17(float) SpecConstant 1077936128 + 235: TypeCooperativeMatrixKHR 17(float) 8 129(Z) 9 10 + 236: 235 ConstantComposite 36 + 237:6(float16_t) Constant 15360 + 238: 11 ConstantComposite 237 + 239(S): TypeStruct 58(int) 58(int) 58(int) + 240: 58(int) Constant 12 + 241: 58(int) Constant 23 + 242: 58(int) Constant 34 + 243: 239(S) ConstantComposite 240 241 242 + 244(SC): 58(int) SpecConstant 1 + 245: TypeCooperativeMatrixKHR 6(float16_t) 8 244(SC) 244(SC) 10 + 246: TypeArray 245 244(SC) + 247: TypeArray 246 244(SC) + 248: TypePointer Private 247 + 249(scm): 248(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + 35(m): 34(ptr) Variable Function + 53(m2): 52(ptr) Variable Function + 57(x): 56(ptr) Variable Function + 65(tempArg): 34(ptr) Variable Function + 80(tempArg): 52(ptr) Variable Function + 97(tempArg): 34(ptr) Variable Function + 110(D): 34(ptr) Variable Function + 114(A): 113(ptr) Variable Function + 118(B): 117(ptr) Variable Function + 120(C): 34(ptr) Variable Function + 124(l): 123(ptr) Variable Function + 132(F): 131(ptr) Variable Function + 137(a): 136(ptr) Variable Function + 141(md1): 56(ptr) Variable Function + 157(tempArg): 34(ptr) Variable Function + 163(tempArg): 52(ptr) Variable Function + 169(p1): 12(ptr) Variable Function + 170(param): 12(ptr) Variable Function + 173(p2): 19(ptr) Variable Function + 174(param): 19(ptr) Variable Function + 188(tempArg): 52(ptr) Variable Function + 197(ms): 52(ptr) Variable Function + 204(ms8A): 203(ptr) Variable Function + 208(ms8B): 207(ptr) Variable Function + 212(ms8C): 211(ptr) Variable Function + 227(m16): 226(ptr) Variable Function + Store 35(m) 37 + 38: 33 Load 35(m) + 39: 33 Load 35(m) + 40: 33 FAdd 38 39 + Store 35(m) 40 + 41: 33 Load 35(m) + 42: 33 Load 35(m) + 43: 33 FSub 41 42 + Store 35(m) 43 + 44: 33 Load 35(m) + 45: 33 FNegate 44 + Store 35(m) 45 + 47: 33 Load 35(m) + 48: 33 MatrixTimesScalar 47 46 + Store 35(m) 48 + 49: 33 Load 35(m) + 50: 33 MatrixTimesScalar 49 46 + Store 35(m) 50 + 54: 33 Load 35(m) + 55: 51 FConvert 54 + Store 53(m2) 55 + 60: 56(ptr) AccessChain 35(m) 59 + 61: 17(float) Load 60 + Store 57(x) 61 + 63: 17(float) Load 57(x) + 64: 56(ptr) AccessChain 35(m) 62 + Store 64 63 + 74: 73(ptr) AccessChain 71(block) 59 32 + 76: 33 CooperativeMatrixLoadKHR 74 62 75 MakePointerVisibleKHR NonPrivatePointerKHR 72 + Store 65(tempArg) 76 + 77: 33 Load 65(tempArg) + Store 35(m) 77 + 78: 33 Load 35(m) + 79: 73(ptr) AccessChain 71(block) 59 32 + CooperativeMatrixStoreKHR 79 78 62 75 MakePointerAvailableKHR NonPrivatePointerKHR 72 + 92: 91(ptr) AccessChain 90(block16) 59 32 + 93: 51 CooperativeMatrixLoadKHR 92 62 75 MakePointerVisibleKHR NonPrivatePointerKHR 72 + Store 80(tempArg) 93 + 94: 51 Load 80(tempArg) + Store 53(m2) 94 + 95: 51 Load 53(m2) + 96: 91(ptr) AccessChain 90(block16) 59 32 + CooperativeMatrixStoreKHR 96 95 62 75 MakePointerAvailableKHR NonPrivatePointerKHR 72 + 100: 99(ptr) AccessChain 90(block16) 98 + 101: 84(ptr) Load 100 MakePointerVisibleKHR NonPrivatePointerKHR 72 + 103: 102(ptr) AccessChain 101 59 32 + 104: 33 CooperativeMatrixLoadKHR 103 62 75 Aligned MakePointerVisibleKHR NonPrivatePointerKHR 16 72 + Store 97(tempArg) 104 + 105: 33 Load 97(tempArg) + Store 35(m) 105 + 106: 33 Load 35(m) + 107: 99(ptr) AccessChain 90(block16) 98 + 108: 84(ptr) Load 107 MakePointerVisibleKHR NonPrivatePointerKHR 72 + 109: 102(ptr) AccessChain 108 59 32 + CooperativeMatrixStoreKHR 109 106 62 75 Aligned MakePointerAvailableKHR NonPrivatePointerKHR 16 72 + 115: 112 Load 114(A) + 119: 116 Load 118(B) + 121: 33 Load 120(C) + 122: 33 CooperativeMatrixMulAddKHR 115 119 121 + Store 110(D) 122 + 125: 7(int) CooperativeMatrixLengthKHR 33 + 126: 58(int) Bitcast 125 + Store 124(l) 126 + Store 132(F) 134 + 140: 56(ptr) AccessChain 137(a) 138 62 + Store 140 139 + Store 141(md1) 36 + 142: 33 Load 35(m) + 143: 33 Load 35(m) + 144: 33 FAdd 143 142 + Store 35(m) 144 + 146: 17(float) CompositeExtract 144 1234 + 147: 17(float) Load 141(md1) + 148: 17(float) FAdd 147 146 + Store 141(md1) 148 + 154: 153(ptr) AccessChain 152(mC2) 98 + 155: 149 Load 154 + 156: 153(ptr) AccessChain 152(mC2) 59 + Store 156 155 + 158: 73(ptr) AccessChain 71(block) 62 32 + 159: 33 CooperativeMatrixLoadKHR 158 62 75 MakePointerVisibleKHR NonPrivatePointerKHR 72 + Store 157(tempArg) 159 + 160: 33 Load 157(tempArg) + Store 35(m) 160 + 161: 33 Load 35(m) + 162: 73(ptr) AccessChain 71(block) 62 32 + CooperativeMatrixStoreKHR 162 161 62 75 MakePointerAvailableKHR NonPrivatePointerKHR 72 + 164: 91(ptr) AccessChain 90(block16) 62 32 + 165: 51 CooperativeMatrixLoadKHR 164 62 75 MakePointerVisibleKHR NonPrivatePointerKHR 72 + Store 163(tempArg) 165 + 166: 51 Load 163(tempArg) + Store 53(m2) 166 + 167: 51 Load 53(m2) + 168: 91(ptr) AccessChain 90(block16) 62 32 + CooperativeMatrixStoreKHR 168 167 62 75 MakePointerAvailableKHR NonPrivatePointerKHR 72 + 171: 11 Load 169(p1) + Store 170(param) 171 + 172: 11 FunctionCall 15(f16(f161;) 170(param) + Store 169(p1) 172 + 175: 18 Load 173(p2) + Store 174(param) 175 + 176: 18 FunctionCall 22(f32(f1;) 174(param) + Store 173(p2) 176 + Store 169(p1) 177 + Store 173(p2) 178 + 179: 11 Load 169(p1) + 180: 11 Load 169(p1) + 181: 11 FDiv 180 179 + Store 169(p1) 181 + 183: 11 Load 169(p1) + 184: 11 MatrixTimesScalar 183 182 + Store 169(p1) 184 + 186: 18 Load 173(p2) + 187: 18 MatrixTimesScalar 186 185 + Store 173(p2) 187 + 195: 194(ptr) AccessChain 193(shmatrix) 82 + 196: 51 CooperativeMatrixLoadKHR 195 62 10 MakePointerVisibleKHR NonPrivatePointerKHR 10 + Store 188(tempArg) 196 + 198: 51 Load 188(tempArg) + Store 197(ms) 198 + 199: 51 Load 197(ms) + 200: 194(ptr) AccessChain 193(shmatrix) 82 + CooperativeMatrixStoreKHR 200 199 62 10 MakePointerAvailableKHR NonPrivatePointerKHR 10 + 205: 202 Load 204(ms8A) + 209: 206 Load 208(ms8B) + 213: 210 Load 212(ms8C) + 214: 210 CooperativeMatrixMulAddKHR 205 209 213 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR + 215: 202 Load 204(ms8A) + 216: 206 Load 208(ms8B) + 217: 210 Load 212(ms8C) + 218: 210 CooperativeMatrixMulAddKHR 215 216 217 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR + 219: 202 Load 204(ms8A) + 220: 206 Load 208(ms8B) + 221: 210 Load 212(ms8C) + 223: 210 CooperativeMatrixMulAddKHR 219 220 221 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR SaturatingAccumulationKHR + 228: 225 Load 227(m16) + 229: 194(ptr) AccessChain 193(shmatrix) 82 + CooperativeMatrixStoreKHR 229 228 62 10 MakePointerAvailableKHR NonPrivatePointerKHR 10 + Return + FunctionEnd + 15(f16(f161;): 11 Function None 13 + 14(m): 12(ptr) FunctionParameter + 16: Label + 24: 11 Load 14(m) + 25: 11 FNegate 24 + ReturnValue 25 + FunctionEnd + 22(f32(f1;): 18 Function None 20 + 21(m): 19(ptr) FunctionParameter + 23: Label + 28: 18 Load 21(m) + 29: 18 FNegate 28 + ReturnValue 29 + FunctionEnd diff --git a/Test/baseResults/spv.coopmatKHR_Error.comp.out b/Test/baseResults/spv.coopmatKHR_Error.comp.out new file mode 100644 index 0000000000..82c302bf9d --- /dev/null +++ b/Test/baseResults/spv.coopmatKHR_Error.comp.out @@ -0,0 +1,38 @@ +spv.coopmatKHR_Error.comp +ERROR: 0:8: 'ftemplate16' : unexpected type parameters +ERROR: 0:10: '' : coopmat missing type parameters +ERROR: 0:10: 'fnoparams' : unexpected number type parameters +ERROR: 0:17: 'void' : coopmat invalid basic type +ERROR: 0:17: 'fbadtype' : expected 8, 16, 32, or 64 bit signed or unsigned integer or 16, 32, or 64 bit float type +ERROR: 0:17: 'fbadtype' : illegal use of type 'void' +ERROR: 0:18: '' : type parameter must be a constant integer expression +ERROR: 0:18: 'void' : coopmat invalid basic type +ERROR: 0:18: '' : coopmat incorrect number of type parameters +ERROR: 0:18: 'fbadtype2' : unexpected number type parameters +ERROR: 0:18: 'fbadtype2' : expected 8, 16, 32, or 64 bit signed or unsigned integer or 16, 32, or 64 bit float type +ERROR: 0:18: 'fbadtype2' : illegal use of type 'void' +ERROR: 0:19: 'void' : coopmat invalid basic type +ERROR: 0:19: '' : coopmat incorrect number of type parameters +ERROR: 0:19: 'fbadtype3' : unexpected number type parameters +ERROR: 0:19: 'fbadtype3' : expected 8, 16, 32, or 64 bit signed or unsigned integer or 16, 32, or 64 bit float type +ERROR: 0:19: 'fbadtype3' : illegal use of type 'void' +ERROR: 0:21: '' : coopmat incorrect number of type parameters +ERROR: 0:25: '' : type parameter must be a constant integer expression +ERROR: 0:29: '' : coopmat incorrect number of type parameters +ERROR: 0:29: 'Cooperative matrix types must not be used in shared memory' : qualifier +ERROR: 0:32: 'bufmat' : member of block cannot be or contain a cooperative matrix type +ERROR: 0:41: 'assign' : cannot convert from ' temp coopmat<3, 16, 8, 0> float16_t' to ' temp coopmat<3, 16, 8, 0> float' +ERROR: 0:42: 'assign' : cannot convert from ' temp coopmat<3, 16, 8, 0> float16_t' to ' temp coopmat<3, 16, 8, 0> float' +ERROR: 0:47: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 0> float16_t' to ' temp coopmat<3, 16, 8, 0> float16_t' +ERROR: 0:53: 'assign' : cannot convert from ' temp coopmat<3, 8, 1, 0> float16_t' to ' temp coopmat<3, 8, 1, 0> float16_t' +ERROR: 0:56: 'constructor' : too many arguments +ERROR: 0:56: 'assign' : cannot convert from ' const float' to ' temp coopmat<3, 8, 8, 0> float16_t' +ERROR: 0:60: 'constructor' : Cooperative matrix constructor argument must be scalar or cooperative matrix +ERROR: 0:60: '=' : cannot convert from ' const float' to ' temp coopmat<3, 4, 4, 0> float' +ERROR: 0:63: 'expression' : left of '[' is not of type array, matrix, or vector +ERROR: 0:66: '.' : cannot apply to a cooperative matrix type: x +ERROR: 0:68: 'transpose' : no matching overloaded function found +ERROR: 33 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.coopmatKHR_arithmetic.comp.out b/Test/baseResults/spv.coopmatKHR_arithmetic.comp.out new file mode 100644 index 0000000000..2acc002d4d --- /dev/null +++ b/Test/baseResults/spv.coopmatKHR_arithmetic.comp.out @@ -0,0 +1,248 @@ +spv.coopmatKHR_arithmetic.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 196 + + Capability Shader + Capability Float16 + Capability Int8 + Capability VulkanMemoryModelKHR + Capability CooperativeMatrixKHR + Extension "SPV_KHR_cooperative_matrix" + Extension "SPV_KHR_vulkan_memory_model" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical VulkanKHR + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 64 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types" + SourceExtension "GL_KHR_cooperative_matrix" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 13 "f" + Name 48 "f16" + Name 82 "u32" + Name 117 "u8" + Name 152 "i8" + Decorate 195 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeInt 32 0 + 8: 7(int) Constant 3 + 9: 7(int) Constant 8 + 10: 7(int) Constant 0 + 11: TypeCooperativeMatrixKHR 6(float) 8 9 9 10 + 12: TypePointer Function 11 + 39: 6(float) Constant 1073741824 + 45: TypeFloat 16 + 46: TypeCooperativeMatrixKHR 45(float16_t) 8 9 9 10 + 47: TypePointer Function 46 + 74:45(float16_t) Constant 16384 + 80: TypeCooperativeMatrixKHR 7(int) 8 9 9 10 + 81: TypePointer Function 80 + 108: 7(int) Constant 2 + 114: TypeInt 8 0 + 115: TypeCooperativeMatrixKHR 114(int8_t) 8 9 9 10 + 116: TypePointer Function 115 + 143: 114(int8_t) Constant 2 + 149: TypeInt 8 1 + 150: TypeCooperativeMatrixKHR 149(int8_t) 8 9 9 10 + 151: TypePointer Function 150 + 178: 149(int8_t) Constant 2 + 192: TypeVector 7(int) 3 + 193: 7(int) Constant 64 + 194: 7(int) Constant 1 + 195: 192(ivec3) ConstantComposite 193 194 194 + 4(main): 2 Function None 3 + 5: Label + 13(f): 12(ptr) Variable Function + 48(f16): 47(ptr) Variable Function + 82(u32): 81(ptr) Variable Function + 117(u8): 116(ptr) Variable Function + 152(i8): 151(ptr) Variable Function + 14: 11 Load 13(f) + 15: 11 Load 13(f) + 16: 11 FAdd 14 15 + 17: 11 Load 13(f) + 18: 11 Load 13(f) + 19: 11 FSub 17 18 + 20: 11 Load 13(f) + 21: 11 Load 13(f) + 22: 11 FMul 20 21 + 23: 11 Load 13(f) + 24: 11 Load 13(f) + 25: 11 FDiv 23 24 + 26: 11 Load 13(f) + 27: 11 Load 13(f) + 28: 11 FAdd 27 26 + Store 13(f) 28 + 29: 11 Load 13(f) + 30: 11 Load 13(f) + 31: 11 FSub 30 29 + Store 13(f) 31 + 32: 11 Load 13(f) + 33: 11 Load 13(f) + 34: 11 FMul 33 32 + Store 13(f) 34 + 35: 11 Load 13(f) + 36: 11 Load 13(f) + 37: 11 FDiv 36 35 + Store 13(f) 37 + 38: 11 Load 13(f) + 40: 11 MatrixTimesScalar 38 39 + 41: 11 Load 13(f) + 42: 11 MatrixTimesScalar 41 39 + 43: 11 Load 13(f) + 44: 11 MatrixTimesScalar 43 39 + Store 13(f) 44 + 49: 46 Load 48(f16) + 50: 46 Load 48(f16) + 51: 46 FAdd 49 50 + 52: 46 Load 48(f16) + 53: 46 Load 48(f16) + 54: 46 FSub 52 53 + 55: 46 Load 48(f16) + 56: 46 Load 48(f16) + 57: 46 FMul 55 56 + 58: 46 Load 48(f16) + 59: 46 Load 48(f16) + 60: 46 FDiv 58 59 + 61: 46 Load 48(f16) + 62: 46 Load 48(f16) + 63: 46 FAdd 62 61 + Store 48(f16) 63 + 64: 46 Load 48(f16) + 65: 46 Load 48(f16) + 66: 46 FSub 65 64 + Store 48(f16) 66 + 67: 46 Load 48(f16) + 68: 46 Load 48(f16) + 69: 46 FMul 68 67 + Store 48(f16) 69 + 70: 46 Load 48(f16) + 71: 46 Load 48(f16) + 72: 46 FDiv 71 70 + Store 48(f16) 72 + 73: 46 Load 48(f16) + 75: 46 MatrixTimesScalar 73 74 + 76: 46 Load 48(f16) + 77: 46 MatrixTimesScalar 76 74 + 78: 46 Load 48(f16) + 79: 46 MatrixTimesScalar 78 74 + Store 48(f16) 79 + 83: 80 Load 82(u32) + 84: 80 Load 82(u32) + 85: 80 IAdd 83 84 + 86: 80 Load 82(u32) + 87: 80 Load 82(u32) + 88: 80 ISub 86 87 + 89: 80 Load 82(u32) + 90: 80 Load 82(u32) + 91: 80 IMul 89 90 + 92: 80 Load 82(u32) + 93: 80 Load 82(u32) + 94: 80 UDiv 92 93 + 95: 80 Load 82(u32) + 96: 80 Load 82(u32) + 97: 80 IAdd 96 95 + Store 82(u32) 97 + 98: 80 Load 82(u32) + 99: 80 Load 82(u32) + 100: 80 ISub 99 98 + Store 82(u32) 100 + 101: 80 Load 82(u32) + 102: 80 Load 82(u32) + 103: 80 IMul 102 101 + Store 82(u32) 103 + 104: 80 Load 82(u32) + 105: 80 Load 82(u32) + 106: 80 UDiv 105 104 + Store 82(u32) 106 + 107: 80 Load 82(u32) + 109: 80 MatrixTimesScalar 107 108 + 110: 80 Load 82(u32) + 111: 80 MatrixTimesScalar 110 108 + 112: 80 Load 82(u32) + 113: 80 MatrixTimesScalar 112 108 + Store 82(u32) 113 + 118: 115 Load 117(u8) + 119: 115 Load 117(u8) + 120: 115 IAdd 118 119 + 121: 115 Load 117(u8) + 122: 115 Load 117(u8) + 123: 115 ISub 121 122 + 124: 115 Load 117(u8) + 125: 115 Load 117(u8) + 126: 115 IMul 124 125 + 127: 115 Load 117(u8) + 128: 115 Load 117(u8) + 129: 115 UDiv 127 128 + 130: 115 Load 117(u8) + 131: 115 Load 117(u8) + 132: 115 IAdd 131 130 + Store 117(u8) 132 + 133: 115 Load 117(u8) + 134: 115 Load 117(u8) + 135: 115 ISub 134 133 + Store 117(u8) 135 + 136: 115 Load 117(u8) + 137: 115 Load 117(u8) + 138: 115 IMul 137 136 + Store 117(u8) 138 + 139: 115 Load 117(u8) + 140: 115 Load 117(u8) + 141: 115 UDiv 140 139 + Store 117(u8) 141 + 142: 115 Load 117(u8) + 144: 115 MatrixTimesScalar 142 143 + 145: 115 Load 117(u8) + 146: 115 MatrixTimesScalar 145 143 + 147: 115 Load 117(u8) + 148: 115 MatrixTimesScalar 147 143 + Store 117(u8) 148 + 153: 150 Load 152(i8) + 154: 150 Load 152(i8) + 155: 150 IAdd 153 154 + 156: 150 Load 152(i8) + 157: 150 Load 152(i8) + 158: 150 ISub 156 157 + 159: 150 Load 152(i8) + 160: 150 Load 152(i8) + 161: 150 IMul 159 160 + 162: 150 Load 152(i8) + 163: 150 Load 152(i8) + 164: 150 SDiv 162 163 + 165: 150 Load 152(i8) + 166: 150 Load 152(i8) + 167: 150 IAdd 166 165 + Store 152(i8) 167 + 168: 150 Load 152(i8) + 169: 150 Load 152(i8) + 170: 150 ISub 169 168 + Store 152(i8) 170 + 171: 150 Load 152(i8) + 172: 150 Load 152(i8) + 173: 150 IMul 172 171 + Store 152(i8) 173 + 174: 150 Load 152(i8) + 175: 150 Load 152(i8) + 176: 150 SDiv 175 174 + Store 152(i8) 176 + 177: 150 Load 152(i8) + 179: 150 MatrixTimesScalar 177 178 + 180: 150 Load 152(i8) + 181: 150 MatrixTimesScalar 180 178 + 182: 150 Load 152(i8) + 183: 150 MatrixTimesScalar 182 178 + Store 152(i8) 183 + 184: 11 Load 13(f) + 185: 11 FNegate 184 + 186: 46 Load 48(f16) + 187: 46 FNegate 186 + 188: 150 Load 152(i8) + 189: 150 SNegate 188 + 190: 115 Load 117(u8) + 191: 115 SNegate 190 + Return + FunctionEnd diff --git a/Test/baseResults/spv.coopmatKHR_arithmeticError.comp.out b/Test/baseResults/spv.coopmatKHR_arithmeticError.comp.out new file mode 100644 index 0000000000..9bcdfb3547 --- /dev/null +++ b/Test/baseResults/spv.coopmatKHR_arithmeticError.comp.out @@ -0,0 +1,64 @@ +spv.coopmatKHR_arithmeticError.comp +ERROR: 0:21: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' const float' (or there is no acceptable conversion) +ERROR: 0:22: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' const float' (or there is no acceptable conversion) +ERROR: 0:23: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' const float' (or there is no acceptable conversion) +ERROR: 0:24: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' const float' and a right operand of type ' temp coopmat<3, 8, 8, 0> float' (or there is no acceptable conversion) +ERROR: 0:25: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' const float' and a right operand of type ' temp coopmat<3, 8, 8, 0> float' (or there is no acceptable conversion) +ERROR: 0:26: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' const float' and a right operand of type ' temp coopmat<3, 8, 8, 0> float' (or there is no acceptable conversion) +ERROR: 0:27: 'assign' : cannot convert from ' const float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:28: 'assign' : cannot convert from ' const float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:29: 'assign' : cannot convert from ' const float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:31: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 8, 8, 0> float16_t' (or there is no acceptable conversion) +ERROR: 0:32: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 8, 8, 0> float16_t' (or there is no acceptable conversion) +ERROR: 0:33: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 8, 8, 0> float16_t' (or there is no acceptable conversion) +ERROR: 0:34: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 8, 8, 0> float16_t' (or there is no acceptable conversion) +ERROR: 0:35: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 0> float16_t' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:36: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 0> float16_t' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:37: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 0> float16_t' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:38: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 0> float16_t' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:40: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 8, 8, 1> float' (or there is no acceptable conversion) +ERROR: 0:41: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 8, 8, 1> float' (or there is no acceptable conversion) +ERROR: 0:42: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 8, 8, 1> float' (or there is no acceptable conversion) +ERROR: 0:43: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 8, 8, 1> float' (or there is no acceptable conversion) +ERROR: 0:44: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 1> float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:45: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 1> float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:46: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 1> float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:47: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 1> float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:49: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 16, 8, 0> float' (or there is no acceptable conversion) +ERROR: 0:50: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 16, 8, 0> float' (or there is no acceptable conversion) +ERROR: 0:51: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 16, 8, 0> float' (or there is no acceptable conversion) +ERROR: 0:52: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> float' and a right operand of type ' temp coopmat<3, 16, 8, 0> float' (or there is no acceptable conversion) +ERROR: 0:53: 'assign' : cannot convert from ' temp coopmat<3, 16, 8, 0> float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:54: 'assign' : cannot convert from ' temp coopmat<3, 16, 8, 0> float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:55: 'assign' : cannot convert from ' temp coopmat<3, 16, 8, 0> float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:56: 'assign' : cannot convert from ' temp coopmat<3, 16, 8, 0> float' to ' temp coopmat<3, 8, 8, 0> float' +ERROR: 0:58: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> uint8_t' and a right operand of type ' temp coopmat<3, 8, 8, 0> int8_t' (or there is no acceptable conversion) +ERROR: 0:59: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> uint8_t' and a right operand of type ' temp coopmat<3, 8, 8, 0> int8_t' (or there is no acceptable conversion) +ERROR: 0:60: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> uint8_t' and a right operand of type ' temp coopmat<3, 8, 8, 0> int8_t' (or there is no acceptable conversion) +ERROR: 0:61: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> uint8_t' and a right operand of type ' temp coopmat<3, 8, 8, 0> int8_t' (or there is no acceptable conversion) +ERROR: 0:62: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 0> int8_t' to ' temp coopmat<3, 8, 8, 0> uint8_t' +ERROR: 0:63: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 0> int8_t' to ' temp coopmat<3, 8, 8, 0> uint8_t' +ERROR: 0:64: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 0> int8_t' to ' temp coopmat<3, 8, 8, 0> uint8_t' +ERROR: 0:65: 'assign' : cannot convert from ' temp coopmat<3, 8, 8, 0> int8_t' to ' temp coopmat<3, 8, 8, 0> uint8_t' +ERROR: 0:67: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> uint8_t' and a right operand of type ' const uint8_t' (or there is no acceptable conversion) +ERROR: 0:68: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> uint8_t' and a right operand of type ' const uint8_t' (or there is no acceptable conversion) +ERROR: 0:69: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> uint8_t' and a right operand of type ' const uint8_t' (or there is no acceptable conversion) +ERROR: 0:70: 'assign' : cannot convert from ' const uint8_t' to ' temp coopmat<3, 8, 8, 0> uint8_t' +ERROR: 0:71: 'assign' : cannot convert from ' const uint8_t' to ' temp coopmat<3, 8, 8, 0> uint8_t' +ERROR: 0:72: 'assign' : cannot convert from ' const uint8_t' to ' temp coopmat<3, 8, 8, 0> uint8_t' +ERROR: 0:74: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> int8_t' and a right operand of type ' const int8_t' (or there is no acceptable conversion) +ERROR: 0:75: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> int8_t' and a right operand of type ' const int8_t' (or there is no acceptable conversion) +ERROR: 0:76: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> int8_t' and a right operand of type ' const int8_t' (or there is no acceptable conversion) +ERROR: 0:77: 'assign' : cannot convert from ' const int8_t' to ' temp coopmat<3, 8, 8, 0> int8_t' +ERROR: 0:78: 'assign' : cannot convert from ' const int8_t' to ' temp coopmat<3, 8, 8, 0> int8_t' +ERROR: 0:79: 'assign' : cannot convert from ' const int8_t' to ' temp coopmat<3, 8, 8, 0> int8_t' +ERROR: 0:81: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> int' and a right operand of type ' const int' (or there is no acceptable conversion) +ERROR: 0:82: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> int' and a right operand of type ' const int' (or there is no acceptable conversion) +ERROR: 0:83: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp coopmat<3, 8, 8, 0> int' and a right operand of type ' const int' (or there is no acceptable conversion) +ERROR: 0:84: 'assign' : cannot convert from ' const int' to ' temp coopmat<3, 8, 8, 0> int' +ERROR: 0:85: 'assign' : cannot convert from ' const int' to ' temp coopmat<3, 8, 8, 0> int' +ERROR: 0:86: 'assign' : cannot convert from ' const int' to ' temp coopmat<3, 8, 8, 0> int' +ERROR: 59 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.coopmatKHR_constructor.comp.out b/Test/baseResults/spv.coopmatKHR_constructor.comp.out new file mode 100644 index 0000000000..0c9923b9ab --- /dev/null +++ b/Test/baseResults/spv.coopmatKHR_constructor.comp.out @@ -0,0 +1,632 @@ +spv.coopmatKHR_constructor.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 481 + + Capability Shader + Capability Float16 + Capability Int16 + Capability Int8 + Capability VulkanMemoryModelKHR + Capability CooperativeMatrixKHR + Extension "SPV_KHR_cooperative_matrix" + Extension "SPV_KHR_vulkan_memory_model" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical VulkanKHR + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 64 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types" + SourceExtension "GL_KHR_cooperative_matrix" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 154 "v" + Name 158 "v" + Name 164 "v" + Name 170 "v" + Name 176 "v" + Name 182 "v" + Name 188 "v" + Name 194 "v" + Name 199 "v" + Name 204 "v" + Name 207 "v" + Name 212 "v" + Name 217 "v" + Name 222 "v" + Name 227 "v" + Name 232 "v" + Name 237 "v" + Name 242 "v" + Name 247 "v" + Name 250 "v" + Name 255 "v" + Name 260 "v" + Name 265 "v" + Name 271 "v" + Name 277 "v" + Name 282 "v" + Name 287 "v" + Name 292 "v" + Name 295 "v" + Name 300 "v" + Name 306 "v" + Name 311 "v" + Name 317 "v" + Name 322 "v" + Name 327 "v" + Name 332 "v" + Name 337 "v" + Name 340 "v" + Name 346 "v" + Name 352 "v" + Name 357 "v" + Name 362 "v" + Name 367 "v" + Name 372 "v" + Name 378 "v" + Name 384 "v" + Name 387 "v" + Name 392 "v" + Name 397 "v" + Name 402 "v" + Name 407 "v" + Name 413 "v" + Name 418 "v" + Name 424 "v" + Name 429 "v" + Name 432 "v" + Name 437 "v" + Name 442 "v" + Name 447 "v" + Name 453 "v" + Name 459 "v" + Name 464 "v" + Name 469 "v" + Name 474 "v" + Decorate 480 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeInt 32 0 + 8: 7(int) Constant 3 + 9: 7(int) Constant 8 + 10: 7(int) Constant 0 + 11: TypeCooperativeMatrixKHR 6(float) 8 9 9 10 + 12: 6(float) Constant 1065353216 + 13: 11 ConstantComposite 12 + 14: 6(float) Constant 1073741824 + 15: 11 ConstantComposite 14 + 16: 6(float) Constant 1077936128 + 17: 11 ConstantComposite 16 + 18: 6(float) Constant 1082130432 + 19: 11 ConstantComposite 18 + 20: 6(float) Constant 1084227584 + 21: 11 ConstantComposite 20 + 22: 6(float) Constant 1086324736 + 23: 11 ConstantComposite 22 + 24: 6(float) Constant 1088421888 + 25: 11 ConstantComposite 24 + 26: 6(float) Constant 1090519040 + 27: 11 ConstantComposite 26 + 28: TypeFloat 16 + 29: TypeCooperativeMatrixKHR 28(float16_t) 8 9 9 10 + 30:28(float16_t) Constant 18816 + 31: 29 ConstantComposite 30 + 32:28(float16_t) Constant 18944 + 33: 29 ConstantComposite 32 + 34:28(float16_t) Constant 19072 + 35: 29 ConstantComposite 34 + 36:28(float16_t) Constant 19200 + 37: 29 ConstantComposite 36 + 38:28(float16_t) Constant 19328 + 39: 29 ConstantComposite 38 + 40:28(float16_t) Constant 19456 + 41: 29 ConstantComposite 40 + 42:28(float16_t) Constant 19520 + 43: 29 ConstantComposite 42 + 44:28(float16_t) Constant 19584 + 45: 29 ConstantComposite 44 + 46: TypeCooperativeMatrixKHR 7(int) 8 9 9 10 + 47: 7(int) Constant 21 + 48: 46 ConstantComposite 47 + 49: 7(int) Constant 22 + 50: 46 ConstantComposite 49 + 51: 7(int) Constant 23 + 52: 46 ConstantComposite 51 + 53: 7(int) Constant 24 + 54: 46 ConstantComposite 53 + 55: 7(int) Constant 25 + 56: 46 ConstantComposite 55 + 57: 7(int) Constant 26 + 58: 46 ConstantComposite 57 + 59: 7(int) Constant 27 + 60: 46 ConstantComposite 59 + 61: 7(int) Constant 28 + 62: 46 ConstantComposite 61 + 63: TypeInt 16 0 + 64: TypeCooperativeMatrixKHR 63(int16_t) 8 9 9 10 + 65: 63(int16_t) Constant 31 + 66: 64 ConstantComposite 65 + 67: 63(int16_t) Constant 32 + 68: 64 ConstantComposite 67 + 69: 63(int16_t) Constant 33 + 70: 64 ConstantComposite 69 + 71: 63(int16_t) Constant 34 + 72: 64 ConstantComposite 71 + 73: 63(int16_t) Constant 35 + 74: 64 ConstantComposite 73 + 75: 63(int16_t) Constant 36 + 76: 64 ConstantComposite 75 + 77: 63(int16_t) Constant 37 + 78: 64 ConstantComposite 77 + 79: 63(int16_t) Constant 38 + 80: 64 ConstantComposite 79 + 81: TypeInt 8 0 + 82: TypeCooperativeMatrixKHR 81(int8_t) 8 9 9 10 + 83: 81(int8_t) Constant 41 + 84: 82 ConstantComposite 83 + 85: 81(int8_t) Constant 42 + 86: 82 ConstantComposite 85 + 87: 81(int8_t) Constant 43 + 88: 82 ConstantComposite 87 + 89: 81(int8_t) Constant 44 + 90: 82 ConstantComposite 89 + 91: 81(int8_t) Constant 45 + 92: 82 ConstantComposite 91 + 93: 81(int8_t) Constant 46 + 94: 82 ConstantComposite 93 + 95: 81(int8_t) Constant 47 + 96: 82 ConstantComposite 95 + 97: 81(int8_t) Constant 48 + 98: 82 ConstantComposite 97 + 99: TypeInt 32 1 + 100: TypeCooperativeMatrixKHR 99(int) 8 9 9 10 + 101: 99(int) Constant 51 + 102: 100 ConstantComposite 101 + 103: 99(int) Constant 52 + 104: 100 ConstantComposite 103 + 105: 99(int) Constant 53 + 106: 100 ConstantComposite 105 + 107: 99(int) Constant 54 + 108: 100 ConstantComposite 107 + 109: 99(int) Constant 55 + 110: 100 ConstantComposite 109 + 111: 99(int) Constant 56 + 112: 100 ConstantComposite 111 + 113: 99(int) Constant 57 + 114: 100 ConstantComposite 113 + 115: 99(int) Constant 58 + 116: 100 ConstantComposite 115 + 117: TypeInt 16 1 + 118: TypeCooperativeMatrixKHR 117(int16_t) 8 9 9 10 + 119:117(int16_t) Constant 61 + 120: 118 ConstantComposite 119 + 121:117(int16_t) Constant 62 + 122: 118 ConstantComposite 121 + 123:117(int16_t) Constant 63 + 124: 118 ConstantComposite 123 + 125:117(int16_t) Constant 64 + 126: 118 ConstantComposite 125 + 127:117(int16_t) Constant 65 + 128: 118 ConstantComposite 127 + 129:117(int16_t) Constant 66 + 130: 118 ConstantComposite 129 + 131:117(int16_t) Constant 67 + 132: 118 ConstantComposite 131 + 133:117(int16_t) Constant 68 + 134: 118 ConstantComposite 133 + 135: TypeInt 8 1 + 136: TypeCooperativeMatrixKHR 135(int8_t) 8 9 9 10 + 137: 135(int8_t) Constant 71 + 138: 136 ConstantComposite 137 + 139: 135(int8_t) Constant 72 + 140: 136 ConstantComposite 139 + 141: 135(int8_t) Constant 73 + 142: 136 ConstantComposite 141 + 143: 135(int8_t) Constant 74 + 144: 136 ConstantComposite 143 + 145: 135(int8_t) Constant 75 + 146: 136 ConstantComposite 145 + 147: 135(int8_t) Constant 76 + 148: 136 ConstantComposite 147 + 149: 135(int8_t) Constant 77 + 150: 136 ConstantComposite 149 + 151: 135(int8_t) Constant 78 + 152: 136 ConstantComposite 151 + 153: TypePointer Function 11 + 155: 6(float) Constant 1120534528 + 156: 11 ConstantComposite 155 + 157: TypePointer Function 29 + 159:28(float16_t) Constant 22112 + 160: 29 ConstantComposite 159 + 163: TypePointer Function 46 + 165: 7(int) Constant 103 + 166: 46 ConstantComposite 165 + 169: TypePointer Function 64 + 171: 63(int16_t) Constant 104 + 172: 64 ConstantComposite 171 + 175: TypePointer Function 82 + 177: 81(int8_t) Constant 105 + 178: 82 ConstantComposite 177 + 181: TypePointer Function 100 + 183: 99(int) Constant 106 + 184: 100 ConstantComposite 183 + 187: TypePointer Function 118 + 189:117(int16_t) Constant 107 + 190: 118 ConstantComposite 189 + 193: TypePointer Function 136 + 195: 135(int8_t) Constant 108 + 196: 136 ConstantComposite 195 + 200: 6(float) Constant 1121845248 + 201: 11 ConstantComposite 200 + 205:28(float16_t) Constant 22272 + 206: 29 ConstantComposite 205 + 208: 7(int) Constant 113 + 209: 46 ConstantComposite 208 + 213: 63(int16_t) Constant 114 + 214: 64 ConstantComposite 213 + 218: 81(int8_t) Constant 115 + 219: 82 ConstantComposite 218 + 223: 99(int) Constant 116 + 224: 100 ConstantComposite 223 + 228:117(int16_t) Constant 117 + 229: 118 ConstantComposite 228 + 233: 135(int8_t) Constant 118 + 234: 136 ConstantComposite 233 + 238: 6(float) Constant 1123155968 + 239: 11 ConstantComposite 238 + 243:28(float16_t) Constant 22432 + 244: 29 ConstantComposite 243 + 248: 7(int) Constant 123 + 249: 46 ConstantComposite 248 + 251: 63(int16_t) Constant 124 + 252: 64 ConstantComposite 251 + 256: 81(int8_t) Constant 125 + 257: 82 ConstantComposite 256 + 261: 99(int) Constant 126 + 262: 100 ConstantComposite 261 + 266:117(int16_t) Constant 127 + 267: 118 ConstantComposite 266 + 272: 135(int8_t) Constant 4294967168 + 273: 136 ConstantComposite 272 + 278: 6(float) Constant 1124270080 + 279: 11 ConstantComposite 278 + 283:28(float16_t) Constant 22560 + 284: 29 ConstantComposite 283 + 288: 7(int) Constant 133 + 289: 46 ConstantComposite 288 + 293: 63(int16_t) Constant 134 + 294: 64 ConstantComposite 293 + 296: 81(int8_t) Constant 135 + 297: 82 ConstantComposite 296 + 301: 99(int) Constant 136 + 302: 100 ConstantComposite 301 + 307:117(int16_t) Constant 137 + 308: 118 ConstantComposite 307 + 312: 135(int8_t) Constant 4294967178 + 313: 136 ConstantComposite 312 + 318: 6(float) Constant 1124925440 + 319: 11 ConstantComposite 318 + 323:28(float16_t) Constant 22640 + 324: 29 ConstantComposite 323 + 328: 7(int) Constant 143 + 329: 46 ConstantComposite 328 + 333: 63(int16_t) Constant 144 + 334: 64 ConstantComposite 333 + 338: 81(int8_t) Constant 145 + 339: 82 ConstantComposite 338 + 341: 99(int) Constant 146 + 342: 100 ConstantComposite 341 + 347:117(int16_t) Constant 147 + 348: 118 ConstantComposite 347 + 353: 135(int8_t) Constant 4294967188 + 354: 136 ConstantComposite 353 + 358: 6(float) Constant 1125580800 + 359: 11 ConstantComposite 358 + 363:28(float16_t) Constant 22720 + 364: 29 ConstantComposite 363 + 368: 7(int) Constant 153 + 369: 46 ConstantComposite 368 + 373: 63(int16_t) Constant 154 + 374: 64 ConstantComposite 373 + 379: 81(int8_t) Constant 155 + 380: 82 ConstantComposite 379 + 385: 99(int) Constant 156 + 386: 100 ConstantComposite 385 + 388:117(int16_t) Constant 157 + 389: 118 ConstantComposite 388 + 393: 135(int8_t) Constant 4294967198 + 394: 136 ConstantComposite 393 + 398: 6(float) Constant 1126236160 + 399: 11 ConstantComposite 398 + 403:28(float16_t) Constant 22800 + 404: 29 ConstantComposite 403 + 408: 7(int) Constant 163 + 409: 46 ConstantComposite 408 + 414: 63(int16_t) Constant 164 + 415: 64 ConstantComposite 414 + 419: 81(int8_t) Constant 165 + 420: 82 ConstantComposite 419 + 425: 99(int) Constant 166 + 426: 100 ConstantComposite 425 + 430:117(int16_t) Constant 167 + 431: 118 ConstantComposite 430 + 433: 135(int8_t) Constant 4294967208 + 434: 136 ConstantComposite 433 + 438: 6(float) Constant 1126891520 + 439: 11 ConstantComposite 438 + 443:28(float16_t) Constant 22880 + 444: 29 ConstantComposite 443 + 448: 7(int) Constant 173 + 449: 46 ConstantComposite 448 + 454: 63(int16_t) Constant 174 + 455: 64 ConstantComposite 454 + 460: 81(int8_t) Constant 175 + 461: 82 ConstantComposite 460 + 465: 99(int) Constant 176 + 466: 100 ConstantComposite 465 + 470:117(int16_t) Constant 177 + 471: 118 ConstantComposite 470 + 475: 135(int8_t) Constant 4294967218 + 476: 136 ConstantComposite 475 + 477: TypeVector 7(int) 3 + 478: 7(int) Constant 64 + 479: 7(int) Constant 1 + 480: 477(ivec3) ConstantComposite 478 479 479 + 4(main): 2 Function None 3 + 5: Label + 154(v): 153(ptr) Variable Function + 158(v): 157(ptr) Variable Function + 164(v): 163(ptr) Variable Function + 170(v): 169(ptr) Variable Function + 176(v): 175(ptr) Variable Function + 182(v): 181(ptr) Variable Function + 188(v): 187(ptr) Variable Function + 194(v): 193(ptr) Variable Function + 199(v): 153(ptr) Variable Function + 204(v): 157(ptr) Variable Function + 207(v): 163(ptr) Variable Function + 212(v): 169(ptr) Variable Function + 217(v): 175(ptr) Variable Function + 222(v): 181(ptr) Variable Function + 227(v): 187(ptr) Variable Function + 232(v): 193(ptr) Variable Function + 237(v): 153(ptr) Variable Function + 242(v): 157(ptr) Variable Function + 247(v): 163(ptr) Variable Function + 250(v): 169(ptr) Variable Function + 255(v): 175(ptr) Variable Function + 260(v): 181(ptr) Variable Function + 265(v): 187(ptr) Variable Function + 271(v): 193(ptr) Variable Function + 277(v): 153(ptr) Variable Function + 282(v): 157(ptr) Variable Function + 287(v): 163(ptr) Variable Function + 292(v): 169(ptr) Variable Function + 295(v): 175(ptr) Variable Function + 300(v): 181(ptr) Variable Function + 306(v): 187(ptr) Variable Function + 311(v): 193(ptr) Variable Function + 317(v): 153(ptr) Variable Function + 322(v): 157(ptr) Variable Function + 327(v): 163(ptr) Variable Function + 332(v): 169(ptr) Variable Function + 337(v): 175(ptr) Variable Function + 340(v): 181(ptr) Variable Function + 346(v): 187(ptr) Variable Function + 352(v): 193(ptr) Variable Function + 357(v): 153(ptr) Variable Function + 362(v): 157(ptr) Variable Function + 367(v): 163(ptr) Variable Function + 372(v): 169(ptr) Variable Function + 378(v): 175(ptr) Variable Function + 384(v): 181(ptr) Variable Function + 387(v): 187(ptr) Variable Function + 392(v): 193(ptr) Variable Function + 397(v): 153(ptr) Variable Function + 402(v): 157(ptr) Variable Function + 407(v): 163(ptr) Variable Function + 413(v): 169(ptr) Variable Function + 418(v): 175(ptr) Variable Function + 424(v): 181(ptr) Variable Function + 429(v): 187(ptr) Variable Function + 432(v): 193(ptr) Variable Function + 437(v): 153(ptr) Variable Function + 442(v): 157(ptr) Variable Function + 447(v): 163(ptr) Variable Function + 453(v): 169(ptr) Variable Function + 459(v): 175(ptr) Variable Function + 464(v): 181(ptr) Variable Function + 469(v): 187(ptr) Variable Function + 474(v): 193(ptr) Variable Function + Store 154(v) 156 + Store 158(v) 160 + 161: 29 Load 158(v) + 162: 11 FConvert 161 + Store 164(v) 166 + 167: 46 Load 164(v) + 168: 11 ConvertUToF 167 + Store 170(v) 172 + 173: 64 Load 170(v) + 174: 11 ConvertUToF 173 + Store 176(v) 178 + 179: 82 Load 176(v) + 180: 11 ConvertUToF 179 + Store 182(v) 184 + 185: 100 Load 182(v) + 186: 11 ConvertSToF 185 + Store 188(v) 190 + 191: 118 Load 188(v) + 192: 11 ConvertSToF 191 + Store 194(v) 196 + 197: 136 Load 194(v) + 198: 11 ConvertSToF 197 + Store 199(v) 201 + 202: 11 Load 199(v) + 203: 29 FConvert 202 + Store 204(v) 206 + Store 207(v) 209 + 210: 46 Load 207(v) + 211: 29 ConvertUToF 210 + Store 212(v) 214 + 215: 64 Load 212(v) + 216: 29 ConvertUToF 215 + Store 217(v) 219 + 220: 82 Load 217(v) + 221: 29 ConvertUToF 220 + Store 222(v) 224 + 225: 100 Load 222(v) + 226: 29 ConvertSToF 225 + Store 227(v) 229 + 230: 118 Load 227(v) + 231: 29 ConvertSToF 230 + Store 232(v) 234 + 235: 136 Load 232(v) + 236: 29 ConvertSToF 235 + Store 237(v) 239 + 240: 11 Load 237(v) + 241: 46 ConvertFToU 240 + Store 242(v) 244 + 245: 29 Load 242(v) + 246: 46 ConvertFToU 245 + Store 247(v) 249 + Store 250(v) 252 + 253: 64 Load 250(v) + 254: 46 UConvert 253 + Store 255(v) 257 + 258: 82 Load 255(v) + 259: 46 UConvert 258 + Store 260(v) 262 + 263: 100 Load 260(v) + 264: 46 Bitcast 263 + Store 265(v) 267 + 268: 118 Load 265(v) + 269: 100 SConvert 268 + 270: 46 Bitcast 269 + Store 271(v) 273 + 274: 136 Load 271(v) + 275: 100 SConvert 274 + 276: 46 Bitcast 275 + Store 277(v) 279 + 280: 11 Load 277(v) + 281: 64 ConvertFToU 280 + Store 282(v) 284 + 285: 29 Load 282(v) + 286: 64 ConvertFToU 285 + Store 287(v) 289 + 290: 46 Load 287(v) + 291: 64 UConvert 290 + Store 292(v) 294 + Store 295(v) 297 + 298: 82 Load 295(v) + 299: 64 UConvert 298 + Store 300(v) 302 + 303: 100 Load 300(v) + 304: 118 SConvert 303 + 305: 64 Bitcast 304 + Store 306(v) 308 + 309: 118 Load 306(v) + 310: 64 Bitcast 309 + Store 311(v) 313 + 314: 136 Load 311(v) + 315: 118 SConvert 314 + 316: 64 Bitcast 315 + Store 317(v) 319 + 320: 11 Load 317(v) + 321: 82 ConvertFToU 320 + Store 322(v) 324 + 325: 29 Load 322(v) + 326: 82 ConvertFToU 325 + Store 327(v) 329 + 330: 46 Load 327(v) + 331: 82 UConvert 330 + Store 332(v) 334 + 335: 64 Load 332(v) + 336: 82 UConvert 335 + Store 337(v) 339 + Store 340(v) 342 + 343: 100 Load 340(v) + 344: 136 SConvert 343 + 345: 82 Bitcast 344 + Store 346(v) 348 + 349: 118 Load 346(v) + 350: 136 SConvert 349 + 351: 82 Bitcast 350 + Store 352(v) 354 + 355: 136 Load 352(v) + 356: 82 Bitcast 355 + Store 357(v) 359 + 360: 11 Load 357(v) + 361: 100 ConvertFToS 360 + Store 362(v) 364 + 365: 29 Load 362(v) + 366: 100 ConvertFToS 365 + Store 367(v) 369 + 370: 46 Load 367(v) + 371: 100 Bitcast 370 + Store 372(v) 374 + 375: 64 Load 372(v) + 376: 46 UConvert 375 + 377: 100 Bitcast 376 + Store 378(v) 380 + 381: 82 Load 378(v) + 382: 46 UConvert 381 + 383: 100 Bitcast 382 + Store 384(v) 386 + Store 387(v) 389 + 390: 118 Load 387(v) + 391: 100 SConvert 390 + Store 392(v) 394 + 395: 136 Load 392(v) + 396: 100 SConvert 395 + Store 397(v) 399 + 400: 11 Load 397(v) + 401: 118 ConvertFToS 400 + Store 402(v) 404 + 405: 29 Load 402(v) + 406: 118 ConvertFToS 405 + Store 407(v) 409 + 410: 46 Load 407(v) + 411: 64 UConvert 410 + 412: 118 Bitcast 411 + Store 413(v) 415 + 416: 64 Load 413(v) + 417: 118 Bitcast 416 + Store 418(v) 420 + 421: 82 Load 418(v) + 422: 64 UConvert 421 + 423: 118 Bitcast 422 + Store 424(v) 426 + 427: 100 Load 424(v) + 428: 118 SConvert 427 + Store 429(v) 431 + Store 432(v) 434 + 435: 136 Load 432(v) + 436: 118 SConvert 435 + Store 437(v) 439 + 440: 11 Load 437(v) + 441: 136 ConvertFToS 440 + Store 442(v) 444 + 445: 29 Load 442(v) + 446: 136 ConvertFToS 445 + Store 447(v) 449 + 450: 46 Load 447(v) + 451: 82 UConvert 450 + 452: 136 Bitcast 451 + Store 453(v) 455 + 456: 64 Load 453(v) + 457: 82 UConvert 456 + 458: 136 Bitcast 457 + Store 459(v) 461 + 462: 82 Load 459(v) + 463: 136 Bitcast 462 + Store 464(v) 466 + 467: 100 Load 464(v) + 468: 136 SConvert 467 + Store 469(v) 471 + 472: 118 Load 469(v) + 473: 136 SConvert 472 + Store 474(v) 476 + Return + FunctionEnd diff --git a/Test/baseResults/spv.coopmatKHR_constructorError.comp.out b/Test/baseResults/spv.coopmatKHR_constructorError.comp.out new file mode 100644 index 0000000000..040e762020 --- /dev/null +++ b/Test/baseResults/spv.coopmatKHR_constructorError.comp.out @@ -0,0 +1,9 @@ +spv.coopmatKHR_constructorError.comp +ERROR: 0:12: 'constructor' : Cooperative matrix type parameters mismatch +ERROR: 0:13: 'constructor' : Cooperative matrix type parameters mismatch +ERROR: 0:14: 'constructor' : Cooperative matrix type parameters mismatch +ERROR: 0:15: 'constructor' : Cooperative matrix type parameters mismatch +ERROR: 4 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.coopmat_armlayout.comp.out b/Test/baseResults/spv.coopmat_armlayout.comp.out new file mode 100644 index 0000000000..8566f6ec5e --- /dev/null +++ b/Test/baseResults/spv.coopmat_armlayout.comp.out @@ -0,0 +1,405 @@ +spv.coopmat_armlayout.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 251 + + Capability Shader + Capability Float16 + Capability Int16 + Capability Int8 + Capability CooperativeMatrixLayoutsARM + Capability StorageUniformBufferBlock16 + Capability VulkanMemoryModelKHR + Capability PhysicalStorageBufferAddressesEXT + Capability CooperativeMatrixKHR + Extension "SPV_ARM_cooperative_matrix_layouts" + Extension "SPV_KHR_16bit_storage" + Extension "SPV_KHR_cooperative_matrix" + Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" + Extension "SPV_KHR_vulkan_memory_model" + 1: ExtInstImport "GLSL.std.450" + MemoryModel PhysicalStorageBuffer64EXT VulkanKHR + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 64 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_buffer_reference" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types" + SourceExtension "GL_KHR_cooperative_matrix" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 15 "f16(f161;" + Name 14 "m" + Name 22 "f32(f1;" + Name 21 "m" + Name 35 "m" + Name 53 "m2" + Name 57 "x" + Name 65 "tempArg" + Name 69 "Block" + MemberName 69(Block) 0 "y" + MemberName 69(Block) 1 "x" + Name 71 "block" + Name 81 "tempArg" + Name 86 "Block16" + MemberName 86(Block16) 0 "y" + MemberName 86(Block16) 1 "x" + MemberName 86(Block16) 2 "b" + Name 89 "Block" + MemberName 89(Block) 0 "y" + MemberName 89(Block) 1 "x" + Name 91 "block16" + Name 98 "tempArg" + Name 111 "D" + Name 115 "A" + Name 119 "B" + Name 121 "C" + Name 125 "l" + Name 129 "Y" + Name 130 "Z" + Name 133 "F" + Name 138 "a" + Name 142 "md1" + Name 153 "mC2" + Name 158 "tempArg" + Name 164 "tempArg" + Name 170 "p1" + Name 171 "param" + Name 174 "p2" + Name 175 "param" + Name 189 "tempArg" + Name 194 "shmatrix" + Name 198 "ms" + Name 205 "ms8A" + Name 209 "ms8B" + Name 213 "ms8C" + Name 228 "m16" + Name 234 "mC" + Name 235 "F" + Name 240 "S" + MemberName 240(S) 0 "a" + MemberName 240(S) 1 "b" + MemberName 240(S) 2 "c" + Name 245 "SC" + Name 250 "scm" + Decorate 67 ArrayStride 4 + Decorate 68 ArrayStride 4 + Decorate 69(Block) Block + MemberDecorate 69(Block) 0 Offset 0 + MemberDecorate 69(Block) 1 Offset 4194304 + Decorate 71(block) Binding 0 + Decorate 71(block) DescriptorSet 0 + Decorate 82 ArrayStride 2 + Decorate 84 ArrayStride 2 + Decorate 86(Block16) Block + MemberDecorate 86(Block16) 0 Offset 0 + MemberDecorate 86(Block16) 1 Offset 2097152 + MemberDecorate 86(Block16) 2 Offset 2097160 + Decorate 87 ArrayStride 4 + Decorate 88 ArrayStride 4 + Decorate 89(Block) Block + MemberDecorate 89(Block) 0 Offset 0 + MemberDecorate 89(Block) 1 Offset 4194304 + Decorate 91(block16) Binding 0 + Decorate 91(block16) DescriptorSet 0 + Decorate 129(Y) SpecId 0 + Decorate 233 BuiltIn WorkgroupSize + Decorate 235(F) SpecId 1 + Decorate 245(SC) SpecId 2 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 16 + 7: TypeInt 32 0 + 8: 7(int) Constant 3 + 9: 7(int) Constant 8 + 10: 7(int) Constant 2 + 11: TypeCooperativeMatrixKHR 6(float16_t) 8 9 9 10 + 12: TypePointer Function 11 + 13: TypeFunction 11 12(ptr) + 17: TypeFloat 32 + 18: TypeCooperativeMatrixKHR 17(float) 8 9 9 10 + 19: TypePointer Function 18 + 20: TypeFunction 18 19(ptr) + 32: 7(int) Constant 16 + 33: TypeCooperativeMatrixKHR 17(float) 8 32 9 10 + 34: TypePointer Function 33 + 36: 17(float) Constant 0 + 37: 33 ConstantComposite 36 + 46: 17(float) Constant 1073741824 + 51: TypeCooperativeMatrixKHR 6(float16_t) 8 32 9 10 + 52: TypePointer Function 51 + 56: TypePointer Function 17(float) + 58: TypeInt 32 1 + 59: 58(int) Constant 1 + 62: 58(int) Constant 0 + 66: 7(int) Constant 1048576 + 67: TypeArray 17(float) 66 + 68: TypeRuntimeArray 17(float) + 69(Block): TypeStruct 67 68 + 70: TypePointer StorageBuffer 69(Block) + 71(block): 70(ptr) Variable StorageBuffer + 72: 7(int) Constant 5 + 73: TypePointer StorageBuffer 17(float) + 75: 7(int) Constant 128 + 76: 58(int) Constant 4202 + 82: TypeArray 6(float16_t) 66 + 83: 7(int) Constant 1 + 84: TypeArray 6(float16_t) 83 + TypeForwardPointer 85 PhysicalStorageBufferEXT + 86(Block16): TypeStruct 82 84 85 + 87: TypeArray 17(float) 66 + 88: TypeRuntimeArray 17(float) + 89(Block): TypeStruct 87 88 + 85: TypePointer PhysicalStorageBufferEXT 89(Block) + 90: TypePointer StorageBuffer 86(Block16) + 91(block16): 90(ptr) Variable StorageBuffer + 92: TypePointer StorageBuffer 6(float16_t) + 99: 58(int) Constant 2 + 100: TypePointer StorageBuffer 85(ptr) + 103: TypePointer PhysicalStorageBufferEXT 17(float) + 112: 7(int) Constant 0 + 113: TypeCooperativeMatrixKHR 6(float16_t) 8 32 9 112 + 114: TypePointer Function 113 + 117: TypeCooperativeMatrixKHR 6(float16_t) 8 9 9 83 + 118: TypePointer Function 117 + 124: TypePointer Function 58(int) + 128: 58(int) Constant 8 + 129(Y): 58(int) SpecConstant 2 + 130(Z): 58(int) SpecConstantOp 132 128 129(Y) + 131: TypeCooperativeMatrixKHR 6(float16_t) 8 130(Z) 130(Z) 10 + 132: TypePointer Function 131 + 134:6(float16_t) Constant 0 + 135: 131 ConstantComposite 134 + 136: TypeArray 33 72 + 137: TypePointer Function 136 + 139: 58(int) Constant 3 + 140: 17(float) Constant 1065353216 + 146: 58(int) Constant 1234 + 150: TypeCooperativeMatrixKHR 6(float16_t) 8 130(Z) 9 10 + 151: TypeArray 150 8 + 152: TypePointer Private 151 + 153(mC2): 152(ptr) Variable Private + 154: TypePointer Private 150 + 178: 11 ConstantComposite 134 + 179: 18 ConstantComposite 36 + 183:6(float16_t) Constant 16384 + 186: 17(float) Constant 1082130432 + 190: TypeVector 7(int) 4 + 191: 7(int) Constant 32 + 192: TypeArray 190(ivec4) 191 + 193: TypePointer Workgroup 192 + 194(shmatrix): 193(ptr) Variable Workgroup + 195: TypePointer Workgroup 190(ivec4) + 202: TypeInt 8 1 + 203: TypeCooperativeMatrixKHR 202(int8_t) 8 9 9 112 + 204: TypePointer Function 203 + 207: TypeCooperativeMatrixKHR 202(int8_t) 8 9 9 83 + 208: TypePointer Function 207 + 211: TypeCooperativeMatrixKHR 202(int8_t) 8 9 9 10 + 212: TypePointer Function 211 + 223: 58(int) Constant 16 + 225: TypeInt 16 1 + 226: TypeCooperativeMatrixKHR 225(int16_t) 8 9 9 112 + 227: TypePointer Function 226 + 231: TypeVector 7(int) 3 + 232: 7(int) Constant 64 + 233: 231(ivec3) ConstantComposite 232 83 83 + 234(mC): 154(ptr) Variable Private + 235(F): 17(float) SpecConstant 1077936128 + 236: TypeCooperativeMatrixKHR 17(float) 8 130(Z) 9 10 + 237: 236 ConstantComposite 36 + 238:6(float16_t) Constant 15360 + 239: 11 ConstantComposite 238 + 240(S): TypeStruct 58(int) 58(int) 58(int) + 241: 58(int) Constant 12 + 242: 58(int) Constant 23 + 243: 58(int) Constant 34 + 244: 240(S) ConstantComposite 241 242 243 + 245(SC): 58(int) SpecConstant 1 + 246: TypeCooperativeMatrixKHR 6(float16_t) 8 245(SC) 245(SC) 10 + 247: TypeArray 246 245(SC) + 248: TypeArray 247 245(SC) + 249: TypePointer Private 248 + 250(scm): 249(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + 35(m): 34(ptr) Variable Function + 53(m2): 52(ptr) Variable Function + 57(x): 56(ptr) Variable Function + 65(tempArg): 34(ptr) Variable Function + 81(tempArg): 52(ptr) Variable Function + 98(tempArg): 34(ptr) Variable Function + 111(D): 34(ptr) Variable Function + 115(A): 114(ptr) Variable Function + 119(B): 118(ptr) Variable Function + 121(C): 34(ptr) Variable Function + 125(l): 124(ptr) Variable Function + 133(F): 132(ptr) Variable Function + 138(a): 137(ptr) Variable Function + 142(md1): 56(ptr) Variable Function + 158(tempArg): 34(ptr) Variable Function + 164(tempArg): 52(ptr) Variable Function + 170(p1): 12(ptr) Variable Function + 171(param): 12(ptr) Variable Function + 174(p2): 19(ptr) Variable Function + 175(param): 19(ptr) Variable Function + 189(tempArg): 52(ptr) Variable Function + 198(ms): 52(ptr) Variable Function + 205(ms8A): 204(ptr) Variable Function + 209(ms8B): 208(ptr) Variable Function + 213(ms8C): 212(ptr) Variable Function + 228(m16): 227(ptr) Variable Function + Store 35(m) 37 + 38: 33 Load 35(m) + 39: 33 Load 35(m) + 40: 33 FAdd 38 39 + Store 35(m) 40 + 41: 33 Load 35(m) + 42: 33 Load 35(m) + 43: 33 FSub 41 42 + Store 35(m) 43 + 44: 33 Load 35(m) + 45: 33 FNegate 44 + Store 35(m) 45 + 47: 33 Load 35(m) + 48: 33 MatrixTimesScalar 47 46 + Store 35(m) 48 + 49: 33 Load 35(m) + 50: 33 MatrixTimesScalar 49 46 + Store 35(m) 50 + 54: 33 Load 35(m) + 55: 51 FConvert 54 + Store 53(m2) 55 + 60: 56(ptr) AccessChain 35(m) 59 + 61: 17(float) Load 60 + Store 57(x) 61 + 63: 17(float) Load 57(x) + 64: 56(ptr) AccessChain 35(m) 62 + Store 64 63 + 74: 73(ptr) AccessChain 71(block) 59 32 + 77: 33 CooperativeMatrixLoadKHR 74 76 75 MakePointerVisibleKHR NonPrivatePointerKHR 72 + Store 65(tempArg) 77 + 78: 33 Load 65(tempArg) + Store 35(m) 78 + 79: 33 Load 35(m) + 80: 73(ptr) AccessChain 71(block) 59 32 + CooperativeMatrixStoreKHR 80 79 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 72 + 93: 92(ptr) AccessChain 91(block16) 59 32 + 94: 51 CooperativeMatrixLoadKHR 93 76 75 MakePointerVisibleKHR NonPrivatePointerKHR 72 + Store 81(tempArg) 94 + 95: 51 Load 81(tempArg) + Store 53(m2) 95 + 96: 51 Load 53(m2) + 97: 92(ptr) AccessChain 91(block16) 59 32 + CooperativeMatrixStoreKHR 97 96 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 72 + 101: 100(ptr) AccessChain 91(block16) 99 + 102: 85(ptr) Load 101 MakePointerVisibleKHR NonPrivatePointerKHR 72 + 104: 103(ptr) AccessChain 102 59 32 + 105: 33 CooperativeMatrixLoadKHR 104 76 75 Aligned MakePointerVisibleKHR NonPrivatePointerKHR 16 72 + Store 98(tempArg) 105 + 106: 33 Load 98(tempArg) + Store 35(m) 106 + 107: 33 Load 35(m) + 108: 100(ptr) AccessChain 91(block16) 99 + 109: 85(ptr) Load 108 MakePointerVisibleKHR NonPrivatePointerKHR 72 + 110: 103(ptr) AccessChain 109 59 32 + CooperativeMatrixStoreKHR 110 107 76 75 Aligned MakePointerAvailableKHR NonPrivatePointerKHR 16 72 + 116: 113 Load 115(A) + 120: 117 Load 119(B) + 122: 33 Load 121(C) + 123: 33 CooperativeMatrixMulAddKHR 116 120 122 + Store 111(D) 123 + 126: 7(int) CooperativeMatrixLengthKHR 33 + 127: 58(int) Bitcast 126 + Store 125(l) 127 + Store 133(F) 135 + 141: 56(ptr) AccessChain 138(a) 139 62 + Store 141 140 + Store 142(md1) 36 + 143: 33 Load 35(m) + 144: 33 Load 35(m) + 145: 33 FAdd 144 143 + Store 35(m) 145 + 147: 17(float) CompositeExtract 145 1234 + 148: 17(float) Load 142(md1) + 149: 17(float) FAdd 148 147 + Store 142(md1) 149 + 155: 154(ptr) AccessChain 153(mC2) 99 + 156: 150 Load 155 + 157: 154(ptr) AccessChain 153(mC2) 59 + Store 157 156 + 159: 73(ptr) AccessChain 71(block) 62 32 + 160: 33 CooperativeMatrixLoadKHR 159 76 75 MakePointerVisibleKHR NonPrivatePointerKHR 72 + Store 158(tempArg) 160 + 161: 33 Load 158(tempArg) + Store 35(m) 161 + 162: 33 Load 35(m) + 163: 73(ptr) AccessChain 71(block) 62 32 + CooperativeMatrixStoreKHR 163 162 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 72 + 165: 92(ptr) AccessChain 91(block16) 62 32 + 166: 51 CooperativeMatrixLoadKHR 165 76 75 MakePointerVisibleKHR NonPrivatePointerKHR 72 + Store 164(tempArg) 166 + 167: 51 Load 164(tempArg) + Store 53(m2) 167 + 168: 51 Load 53(m2) + 169: 92(ptr) AccessChain 91(block16) 62 32 + CooperativeMatrixStoreKHR 169 168 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 72 + 172: 11 Load 170(p1) + Store 171(param) 172 + 173: 11 FunctionCall 15(f16(f161;) 171(param) + Store 170(p1) 173 + 176: 18 Load 174(p2) + Store 175(param) 176 + 177: 18 FunctionCall 22(f32(f1;) 175(param) + Store 174(p2) 177 + Store 170(p1) 178 + Store 174(p2) 179 + 180: 11 Load 170(p1) + 181: 11 Load 170(p1) + 182: 11 FDiv 181 180 + Store 170(p1) 182 + 184: 11 Load 170(p1) + 185: 11 MatrixTimesScalar 184 183 + Store 170(p1) 185 + 187: 18 Load 174(p2) + 188: 18 MatrixTimesScalar 187 186 + Store 174(p2) 188 + 196: 195(ptr) AccessChain 194(shmatrix) 83 + 197: 51 CooperativeMatrixLoadKHR 196 76 10 MakePointerVisibleKHR NonPrivatePointerKHR 10 + Store 189(tempArg) 197 + 199: 51 Load 189(tempArg) + Store 198(ms) 199 + 200: 51 Load 198(ms) + 201: 195(ptr) AccessChain 194(shmatrix) 83 + CooperativeMatrixStoreKHR 201 200 76 10 MakePointerAvailableKHR NonPrivatePointerKHR 10 + 206: 203 Load 205(ms8A) + 210: 207 Load 209(ms8B) + 214: 211 Load 213(ms8C) + 215: 211 CooperativeMatrixMulAddKHR 206 210 214 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR + 216: 203 Load 205(ms8A) + 217: 207 Load 209(ms8B) + 218: 211 Load 213(ms8C) + 219: 211 CooperativeMatrixMulAddKHR 216 217 218 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR + 220: 203 Load 205(ms8A) + 221: 207 Load 209(ms8B) + 222: 211 Load 213(ms8C) + 224: 211 CooperativeMatrixMulAddKHR 220 221 222 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR SaturatingAccumulationKHR + 229: 226 Load 228(m16) + 230: 195(ptr) AccessChain 194(shmatrix) 83 + CooperativeMatrixStoreKHR 230 229 76 10 MakePointerAvailableKHR NonPrivatePointerKHR 10 + Return + FunctionEnd + 15(f16(f161;): 11 Function None 13 + 14(m): 12(ptr) FunctionParameter + 16: Label + 24: 11 Load 14(m) + 25: 11 FNegate 24 + ReturnValue 25 + FunctionEnd + 22(f32(f1;): 18 Function None 20 + 21(m): 19(ptr) FunctionParameter + 23: Label + 28: 18 Load 21(m) + 29: 18 FNegate 28 + ReturnValue 29 + FunctionEnd diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out index 980d1bd34d..b3bc6239e9 100644 --- a/Test/baseResults/spv.dataOut.frag.out +++ b/Test/baseResults/spv.dataOut.frag.out @@ -1,7 +1,7 @@ spv.dataOut.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out index a75e8d54e1..e699d4017c 100644 --- a/Test/baseResults/spv.dataOutIndirect.frag.out +++ b/Test/baseResults/spv.dataOutIndirect.frag.out @@ -1,6 +1,6 @@ spv.dataOutIndirect.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 26 Capability Shader @@ -16,10 +16,10 @@ spv.dataOutIndirect.frag Name 16 "bName" Name 22 "Color" Decorate 12(fcolor) Location 0 - MemberDecorate 14(b) 0 Offset 0 Decorate 14(b) Block - Decorate 16(bName) DescriptorSet 0 + MemberDecorate 14(b) 0 Offset 0 Decorate 16(bName) Binding 0 + Decorate 16(bName) DescriptorSet 0 Decorate 22(Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out index 1c29410141..712cd13aec 100644 --- a/Test/baseResults/spv.dataOutIndirect.vert.out +++ b/Test/baseResults/spv.dataOutIndirect.vert.out @@ -2,7 +2,7 @@ spv.dataOutIndirect.vert WARNING: 0:3: attribute deprecated in version 130; may be removed in future release // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 38 Capability Shader diff --git a/Test/baseResults/spv.dead-after-continue.vert.out b/Test/baseResults/spv.dead-after-continue.vert.out index 6d8d7d902e..11024818ce 100644 --- a/Test/baseResults/spv.dead-after-continue.vert.out +++ b/Test/baseResults/spv.dead-after-continue.vert.out @@ -1,6 +1,6 @@ spv.dead-after-continue.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader diff --git a/Test/baseResults/spv.dead-after-discard.frag.out b/Test/baseResults/spv.dead-after-discard.frag.out index 987f5a2bbb..2948e22e6d 100644 --- a/Test/baseResults/spv.dead-after-discard.frag.out +++ b/Test/baseResults/spv.dead-after-discard.frag.out @@ -1,6 +1,6 @@ spv.dead-after-discard.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 15 Capability Shader diff --git a/Test/baseResults/spv.dead-after-loop-break.vert.out b/Test/baseResults/spv.dead-after-loop-break.vert.out index 2d9e35ae1e..490dbcc889 100644 --- a/Test/baseResults/spv.dead-after-loop-break.vert.out +++ b/Test/baseResults/spv.dead-after-loop-break.vert.out @@ -1,6 +1,6 @@ spv.dead-after-loop-break.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 36 Capability Shader diff --git a/Test/baseResults/spv.dead-after-return.vert.out b/Test/baseResults/spv.dead-after-return.vert.out index d6ba2c72bf..09693633d2 100644 --- a/Test/baseResults/spv.dead-after-return.vert.out +++ b/Test/baseResults/spv.dead-after-return.vert.out @@ -1,6 +1,6 @@ spv.dead-after-return.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 14 Capability Shader diff --git a/Test/baseResults/spv.dead-after-switch-break.vert.out b/Test/baseResults/spv.dead-after-switch-break.vert.out index f8bc4d047b..744355dcac 100644 --- a/Test/baseResults/spv.dead-after-switch-break.vert.out +++ b/Test/baseResults/spv.dead-after-switch-break.vert.out @@ -1,6 +1,6 @@ spv.dead-after-switch-break.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 21 Capability Shader diff --git a/Test/baseResults/spv.dead-complex-continue-after-return.vert.out b/Test/baseResults/spv.dead-complex-continue-after-return.vert.out index 3db78ecc51..3c41ff8ab9 100644 --- a/Test/baseResults/spv.dead-complex-continue-after-return.vert.out +++ b/Test/baseResults/spv.dead-complex-continue-after-return.vert.out @@ -1,6 +1,6 @@ spv.dead-complex-continue-after-return.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 31 Capability Shader diff --git a/Test/baseResults/spv.dead-complex-merge-after-return.vert.out b/Test/baseResults/spv.dead-complex-merge-after-return.vert.out index cc1b25c81f..52431a3236 100644 --- a/Test/baseResults/spv.dead-complex-merge-after-return.vert.out +++ b/Test/baseResults/spv.dead-complex-merge-after-return.vert.out @@ -1,6 +1,6 @@ spv.dead-complex-merge-after-return.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 36 Capability Shader diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out index 78044ff2cf..30543d665d 100644 --- a/Test/baseResults/spv.debugInfo.1.1.frag.out +++ b/Test/baseResults/spv.debugInfo.1.1.frag.out @@ -1,12 +1,12 @@ spv.debugInfo.frag // Module Version 10300 -// Generated by (magic number): 8000a -// Id's are bound by 124 +// Generated by (magic number): 8000b +// Id's are bound by 187 Capability Shader 2: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 5 "main" 24 52 + EntryPoint Fragment 5 "main" 30 104 ExecutionMode 5 OriginUpperLeft 1: String "spv.debugInfo.frag" Source GLSL 450 1 "#version 450 @@ -36,9 +36,40 @@ vec4 foo(S s) return r; } +float testBranch(float x, float y) +{ + float result = 0; + bool b = x > 0; + + // branch with load + if (b) { + result += 1; + } + else { + result -= 1; + } + + // branch with expression + if (x > y) { + result += x - y; + } + + // selection with load + result += b ? + 1 : -1; + + // selection with expression + result += x < y ? + y : + float(b); + + return result; +} + void main() { outv = foo(s); + outv += testBranch(inv.x, inv.y); outv += texture(s2d, vec2(0.5)); switch (s.a) { @@ -66,17 +97,24 @@ void main() MemberName 8(S) 0 "a" Name 14 "foo(struct-S-i11;" Name 13 "s" - Name 17 "r" - Name 24 "inv" - Name 52 "outv" - Name 53 "S" - MemberName 53(S) 0 "a" - Name 54 "ubuf" - MemberName 54(ubuf) 0 "s" - Name 56 "" - Name 57 "param" - Name 67 "s2d" - Name 97 "i" + Name 20 "testBranch(f1;f1;" + Name 18 "x" + Name 19 "y" + Name 23 "r" + Name 30 "inv" + Name 56 "result" + Name 59 "b" + Name 104 "outv" + Name 105 "S" + MemberName 105(S) 0 "a" + Name 106 "ubuf" + MemberName 106(ubuf) 0 "s" + Name 108 "" + Name 109 "param" + Name 116 "param" + Name 120 "param" + Name 131 "s2d" + Name 161 "i" ModuleProcessed "no-storage-format" ModuleProcessed "resource-set-binding 3" ModuleProcessed "auto-map-bindings" @@ -88,15 +126,15 @@ void main() ModuleProcessed "suppress-warnings" ModuleProcessed "hlsl-offsets" ModuleProcessed "entry-point main" - Decorate 24(inv) Location 0 - Decorate 52(outv) Location 0 - MemberDecorate 53(S) 0 Offset 0 - MemberDecorate 54(ubuf) 0 Offset 0 - Decorate 54(ubuf) Block - Decorate 56 DescriptorSet 3 - Decorate 56 Binding 0 - Decorate 67(s2d) DescriptorSet 3 - Decorate 67(s2d) Binding 1 + Decorate 30(inv) Location 0 + Decorate 104(outv) Location 0 + MemberDecorate 105(S) 0 Offset 0 + Decorate 106(ubuf) Block + MemberDecorate 106(ubuf) 0 Offset 0 + Decorate 108 Binding 0 + Decorate 108 DescriptorSet 3 + Decorate 131(s2d) Binding 1 + Decorate 131(s2d) DescriptorSet 3 3: TypeVoid 4: TypeFunction 3 7: TypeInt 32 1 @@ -105,175 +143,282 @@ void main() 10: TypeFloat 32 11: TypeVector 10(float) 4 12: TypeFunction 11(fvec4) 9(ptr) - 16: TypePointer Function 11(fvec4) - 18: 7(int) Constant 0 - 19: TypePointer Function 7(int) - 23: TypePointer Input 11(fvec4) - 24(inv): 23(ptr) Variable Input - 28: 10(float) Constant 1065353216 - 31: TypeInt 32 0 - 32: 31(int) Constant 0 - 33: TypePointer Function 10(float) - 36: 10(float) Constant 1077936128 - 37: TypeBool - 45: 10(float) Constant 1073741824 - 51: TypePointer Output 11(fvec4) - 52(outv): 51(ptr) Variable Output - 53(S): TypeStruct 7(int) - 54(ubuf): TypeStruct 53(S) - 55: TypePointer Uniform 54(ubuf) - 56: 55(ptr) Variable Uniform - 58: TypePointer Uniform 53(S) - 64: TypeImage 10(float) 2D sampled format:Unknown - 65: TypeSampledImage 64 - 66: TypePointer UniformConstant 65 - 67(s2d): 66(ptr) Variable UniformConstant - 69: TypeVector 10(float) 2 - 70: 10(float) Constant 1056964608 - 71: 69(fvec2) ConstantComposite 70 70 - 75: TypePointer Uniform 7(int) - 104: 7(int) Constant 10 - 109: 7(int) Constant 1 - 111: TypePointer Output 10(float) - 114: 10(float) Constant 1092616192 + 16: TypePointer Function 10(float) + 17: TypeFunction 10(float) 16(ptr) 16(ptr) + 22: TypePointer Function 11(fvec4) + 24: 7(int) Constant 0 + 25: TypePointer Function 7(int) + 29: TypePointer Input 11(fvec4) + 30(inv): 29(ptr) Variable Input + 34: 10(float) Constant 1065353216 + 37: TypeInt 32 0 + 38: 37(int) Constant 0 + 41: 10(float) Constant 1077936128 + 42: TypeBool + 50: 10(float) Constant 1073741824 + 57: 10(float) Constant 0 + 58: TypePointer Function 42(bool) + 81: 7(int) Constant 1 + 82: 7(int) Constant 4294967295 + 103: TypePointer Output 11(fvec4) + 104(outv): 103(ptr) Variable Output + 105(S): TypeStruct 7(int) + 106(ubuf): TypeStruct 105(S) + 107: TypePointer Uniform 106(ubuf) + 108: 107(ptr) Variable Uniform + 110: TypePointer Uniform 105(S) + 117: TypePointer Input 10(float) + 121: 37(int) Constant 1 + 128: TypeImage 10(float) 2D sampled format:Unknown + 129: TypeSampledImage 128 + 130: TypePointer UniformConstant 129 + 131(s2d): 130(ptr) Variable UniformConstant + 133: TypeVector 10(float) 2 + 134: 10(float) Constant 1056964608 + 135: 133(fvec2) ConstantComposite 134 134 + 139: TypePointer Uniform 7(int) + 168: 7(int) Constant 10 + 174: TypePointer Output 10(float) + 177: 10(float) Constant 1092616192 + Line 1 58 11 5(main): 3 Function None 4 6: Label - 57(param): 9(ptr) Variable Function - 97(i): 19(ptr) Variable Function - 116: 16(ptr) Variable Function - Line 1 30 0 - 59: 58(ptr) AccessChain 56 18 - 60: 53(S) Load 59 - 61: 7(int) CompositeExtract 60 0 - 62: 19(ptr) AccessChain 57(param) 18 - Store 62 61 - 63: 11(fvec4) FunctionCall 14(foo(struct-S-i11;) 57(param) - Store 52(outv) 63 - Line 1 31 0 - 68: 65 Load 67(s2d) - 72: 11(fvec4) ImageSampleImplicitLod 68 71 - 73: 11(fvec4) Load 52(outv) - 74: 11(fvec4) FAdd 73 72 - Store 52(outv) 74 - Line 1 33 0 - 76: 75(ptr) AccessChain 56 18 18 - 77: 7(int) Load 76 - SelectionMerge 81 None - Switch 77 80 - case 10: 78 - case 20: 79 - 80: Label - Line 1 42 0 - 92: 11(fvec4) Load 52(outv) - 93: 11(fvec4) CompositeConstruct 28 28 28 28 - 94: 11(fvec4) FSub 92 93 - Store 52(outv) 94 - Line 1 43 0 - Branch 81 - 78: Label - Line 1 35 0 - 82: 11(fvec4) Load 52(outv) - 83: 11(fvec4) CompositeConstruct 28 28 28 28 - 84: 11(fvec4) FAdd 82 83 - Store 52(outv) 84 - Line 1 36 0 - Branch 81 - 79: Label - Line 1 38 0 - 86: 11(fvec4) Load 52(outv) - 87: 11(fvec4) VectorTimesScalar 86 45 - Store 52(outv) 87 - Line 1 39 0 - 88: 11(fvec4) Load 52(outv) - 89: 11(fvec4) CompositeConstruct 28 28 28 28 - 90: 11(fvec4) FAdd 88 89 - Store 52(outv) 90 - Line 1 40 0 - Branch 81 - 81: Label - Line 1 46 0 - Store 97(i) 18 - Branch 98 - 98: Label - LoopMerge 100 101 None - Branch 102 - 102: Label - 103: 7(int) Load 97(i) - 105: 37(bool) SLessThan 103 104 - BranchConditional 105 99 100 - 99: Label - Line 1 47 0 - 106: 11(fvec4) Load 52(outv) - 107: 11(fvec4) VectorTimesScalar 106 36 - Store 52(outv) 107 - Branch 101 - 101: Label - Line 1 46 0 - 108: 7(int) Load 97(i) - 110: 7(int) IAdd 108 109 - Store 97(i) 110 - Branch 98 - 100: Label - Line 1 49 0 - 112: 111(ptr) AccessChain 52(outv) 32 - 113: 10(float) Load 112 - 115: 37(bool) FOrdLessThan 113 114 - SelectionMerge 118 None - BranchConditional 115 117 121 - 117: Label - Line 1 50 0 - 119: 11(fvec4) Load 52(outv) - 120: 11(fvec4) ExtInst 2(GLSL.std.450) 13(Sin) 119 - Store 52(outv) 120 - Store 116 120 - Branch 118 - 121: Label - Line 1 51 0 - 122: 11(fvec4) Load 52(outv) - 123: 11(fvec4) ExtInst 2(GLSL.std.450) 14(Cos) 122 - Store 52(outv) 123 - Store 116 123 - Branch 118 - 118: Label + 109(param): 9(ptr) Variable Function + 116(param): 16(ptr) Variable Function + 120(param): 16(ptr) Variable Function + 161(i): 25(ptr) Variable Function + 179: 22(ptr) Variable Function + Line 1 60 0 + 111: 110(ptr) AccessChain 108 24 + 112: 105(S) Load 111 + 113: 7(int) CompositeExtract 112 0 + 114: 25(ptr) AccessChain 109(param) 24 + Store 114 113 + 115: 11(fvec4) FunctionCall 14(foo(struct-S-i11;) 109(param) + Store 104(outv) 115 + Line 1 61 0 + 118: 117(ptr) AccessChain 30(inv) 38 + 119: 10(float) Load 118 + Store 116(param) 119 + 122: 117(ptr) AccessChain 30(inv) 121 + 123: 10(float) Load 122 + Store 120(param) 123 + 124: 10(float) FunctionCall 20(testBranch(f1;f1;) 116(param) 120(param) + 125: 11(fvec4) Load 104(outv) + 126: 11(fvec4) CompositeConstruct 124 124 124 124 + 127: 11(fvec4) FAdd 125 126 + Store 104(outv) 127 + Line 1 62 0 + 132: 129 Load 131(s2d) + 136: 11(fvec4) ImageSampleImplicitLod 132 135 + 137: 11(fvec4) Load 104(outv) + 138: 11(fvec4) FAdd 137 136 + Store 104(outv) 138 + Line 1 64 0 + 140: 139(ptr) AccessChain 108 24 24 + 141: 7(int) Load 140 + SelectionMerge 145 None + Switch 141 144 + case 10: 142 + case 20: 143 + 144: Label + Line 1 73 0 + 156: 11(fvec4) Load 104(outv) + 157: 11(fvec4) CompositeConstruct 34 34 34 34 + 158: 11(fvec4) FSub 156 157 + Store 104(outv) 158 + Line 1 74 0 + Branch 145 + 142: Label + Line 1 66 0 + 146: 11(fvec4) Load 104(outv) + 147: 11(fvec4) CompositeConstruct 34 34 34 34 + 148: 11(fvec4) FAdd 146 147 + Store 104(outv) 148 + Line 1 67 0 + Branch 145 + 143: Label + Line 1 69 0 + 150: 11(fvec4) Load 104(outv) + 151: 11(fvec4) VectorTimesScalar 150 50 + Store 104(outv) 151 + Line 1 70 0 + 152: 11(fvec4) Load 104(outv) + 153: 11(fvec4) CompositeConstruct 34 34 34 34 + 154: 11(fvec4) FAdd 152 153 + Store 104(outv) 154 + Line 1 71 0 + Branch 145 + 145: Label + Line 1 77 0 + Store 161(i) 24 + Branch 162 + 162: Label + Line 1 77 0 + LoopMerge 164 165 None + Branch 166 + 166: Label + Line 1 77 0 + 167: 7(int) Load 161(i) + 169: 42(bool) SLessThan 167 168 + BranchConditional 169 163 164 + 163: Label + Line 1 78 0 + 170: 11(fvec4) Load 104(outv) + 171: 11(fvec4) VectorTimesScalar 170 41 + Store 104(outv) 171 + Branch 165 + 165: Label + Line 1 77 0 + 172: 7(int) Load 161(i) + 173: 7(int) IAdd 172 81 + Store 161(i) 173 + Branch 162 + 164: Label + Line 1 80 0 + 175: 174(ptr) AccessChain 104(outv) 38 + 176: 10(float) Load 175 + 178: 42(bool) FOrdLessThan 176 177 + SelectionMerge 181 None + BranchConditional 178 180 184 + 180: Label + Line 1 81 0 + 182: 11(fvec4) Load 104(outv) + 183: 11(fvec4) ExtInst 2(GLSL.std.450) 13(Sin) 182 + Store 104(outv) 183 + Store 179 183 + Branch 181 + 184: Label + Line 1 82 0 + 185: 11(fvec4) Load 104(outv) + 186: 11(fvec4) ExtInst 2(GLSL.std.450) 14(Cos) 185 + Store 104(outv) 186 + Store 179 186 + Branch 181 + 181: Label + Line 1 83 0 Return FunctionEnd + Line 1 16 13 14(foo(struct-S-i11;): 11(fvec4) Function None 12 13(s): 9(ptr) FunctionParameter 15: Label - 17(r): 16(ptr) Variable Function + 23(r): 22(ptr) Variable Function Line 1 18 0 - 20: 19(ptr) AccessChain 13(s) 18 - 21: 7(int) Load 20 - 22: 10(float) ConvertSToF 21 - 25: 11(fvec4) Load 24(inv) - 26: 11(fvec4) VectorTimesScalar 25 22 - Store 17(r) 26 + 26: 25(ptr) AccessChain 13(s) 24 + 27: 7(int) Load 26 + 28: 10(float) ConvertSToF 27 + 31: 11(fvec4) Load 30(inv) + 32: 11(fvec4) VectorTimesScalar 31 28 + Store 23(r) 32 Line 1 19 0 - 27: 11(fvec4) Load 17(r) - 29: 11(fvec4) CompositeConstruct 28 28 28 28 - 30: 11(fvec4) FAdd 27 29 - Store 17(r) 30 + 33: 11(fvec4) Load 23(r) + 35: 11(fvec4) CompositeConstruct 34 34 34 34 + 36: 11(fvec4) FAdd 33 35 + Store 23(r) 36 Line 1 20 0 - 34: 33(ptr) AccessChain 17(r) 32 - 35: 10(float) Load 34 - 38: 37(bool) FOrdGreaterThan 35 36 - SelectionMerge 40 None - BranchConditional 38 39 44 - 39: Label - Line 1 21 0 - 41: 11(fvec4) Load 17(r) - 42: 11(fvec4) CompositeConstruct 28 28 28 28 - 43: 11(fvec4) FSub 41 42 - Store 17(r) 43 - Branch 40 + 39: 16(ptr) AccessChain 23(r) 38 + 40: 10(float) Load 39 + 43: 42(bool) FOrdGreaterThan 40 41 + SelectionMerge 45 None + BranchConditional 43 44 49 44: Label + Line 1 21 0 + 46: 11(fvec4) Load 23(r) + 47: 11(fvec4) CompositeConstruct 34 34 34 34 + 48: 11(fvec4) FSub 46 47 + Store 23(r) 48 + Branch 45 + 49: Label Line 1 23 0 - 46: 11(fvec4) Load 17(r) - 47: 11(fvec4) VectorTimesScalar 46 45 - Store 17(r) 47 - Branch 40 - 40: Label + 51: 11(fvec4) Load 23(r) + 52: 11(fvec4) VectorTimesScalar 51 50 + Store 23(r) 52 + Branch 45 + 45: Label Line 1 25 0 - 48: 11(fvec4) Load 17(r) - ReturnValue 48 + 53: 11(fvec4) Load 23(r) + ReturnValue 53 + FunctionEnd + Line 1 28 34 +20(testBranch(f1;f1;): 10(float) Function None 17 + 18(x): 16(ptr) FunctionParameter + 19(y): 16(ptr) FunctionParameter + 21: Label + 56(result): 16(ptr) Variable Function + 59(b): 58(ptr) Variable Function + 90: 16(ptr) Variable Function + Line 1 30 0 + Store 56(result) 57 + Line 1 31 0 + 60: 10(float) Load 18(x) + 61: 42(bool) FOrdGreaterThan 60 57 + Store 59(b) 61 + Line 1 34 0 + 62: 42(bool) Load 59(b) + SelectionMerge 64 None + BranchConditional 62 63 67 + 63: Label + Line 1 35 0 + 65: 10(float) Load 56(result) + 66: 10(float) FAdd 65 34 + Store 56(result) 66 + Branch 64 + 67: Label + Line 1 38 0 + 68: 10(float) Load 56(result) + 69: 10(float) FSub 68 34 + Store 56(result) 69 + Branch 64 + 64: Label + Line 1 42 0 + 70: 10(float) Load 18(x) + 71: 10(float) Load 19(y) + 72: 42(bool) FOrdGreaterThan 70 71 + SelectionMerge 74 None + BranchConditional 72 73 74 + 73: Label + Line 1 43 0 + 75: 10(float) Load 18(x) + 76: 10(float) Load 19(y) + 77: 10(float) FSub 75 76 + 78: 10(float) Load 56(result) + 79: 10(float) FAdd 78 77 + Store 56(result) 79 + Branch 74 + 74: Label + Line 1 47 0 + 80: 42(bool) Load 59(b) + 83: 7(int) Select 80 81 82 + 84: 10(float) ConvertSToF 83 + 85: 10(float) Load 56(result) + 86: 10(float) FAdd 85 84 + Store 56(result) 86 + Line 1 51 0 + 87: 10(float) Load 18(x) + 88: 10(float) Load 19(y) + 89: 42(bool) FOrdLessThan 87 88 + SelectionMerge 92 None + BranchConditional 89 91 94 + 91: Label + Line 1 52 0 + 93: 10(float) Load 19(y) + Store 90 93 + Branch 92 + 94: Label + Line 1 53 0 + 95: 42(bool) Load 59(b) + 96: 10(float) Select 95 34 57 + Store 90 96 + Branch 92 + 92: Label + Line 1 53 0 + 97: 10(float) Load 90 + Line 1 51 0 + 98: 10(float) Load 56(result) + 99: 10(float) FAdd 98 97 + Store 56(result) 99 + Line 1 55 0 + 100: 10(float) Load 56(result) + ReturnValue 100 FunctionEnd diff --git a/Test/baseResults/spv.debugInfo.frag.out b/Test/baseResults/spv.debugInfo.frag.out index e146398190..05621a6627 100644 --- a/Test/baseResults/spv.debugInfo.frag.out +++ b/Test/baseResults/spv.debugInfo.frag.out @@ -1,12 +1,12 @@ spv.debugInfo.frag // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 124 +// Generated by (magic number): 8000b +// Id's are bound by 187 Capability Shader 2: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 5 "main" 24 52 + EntryPoint Fragment 5 "main" 30 104 ExecutionMode 5 OriginLowerLeft 1: String "spv.debugInfo.frag" Source GLSL 450 1 "// OpModuleProcessed no-storage-format @@ -47,9 +47,40 @@ vec4 foo(S s) return r; } +float testBranch(float x, float y) +{ + float result = 0; + bool b = x > 0; + + // branch with load + if (b) { + result += 1; + } + else { + result -= 1; + } + + // branch with expression + if (x > y) { + result += x - y; + } + + // selection with load + result += b ? + 1 : -1; + + // selection with expression + result += x < y ? + y : + float(b); + + return result; +} + void main() { outv = foo(s); + outv += testBranch(inv.x, inv.y); outv += texture(s2d, vec2(0.5)); switch (s.a) { @@ -77,27 +108,34 @@ void main() MemberName 8(S) 0 "a" Name 14 "foo(struct-S-i11;" Name 13 "s" - Name 17 "r" - Name 24 "inv" - Name 52 "outv" - Name 53 "S" - MemberName 53(S) 0 "a" - Name 54 "ubuf" - MemberName 54(ubuf) 0 "s" - Name 56 "" - Name 57 "param" - Name 67 "s2d" - Name 97 "i" - Decorate 24(inv) Location 0 - Decorate 52(outv) Location 0 - MemberDecorate 53(S) 0 Offset 0 - MemberDecorate 54(ubuf) 0 Offset 0 - Decorate 54(ubuf) Block - Decorate 56 DescriptorSet 3 - Decorate 56 Binding 0 - Decorate 67(s2d) Location 0 - Decorate 67(s2d) DescriptorSet 3 - Decorate 67(s2d) Binding 1 + Name 20 "testBranch(f1;f1;" + Name 18 "x" + Name 19 "y" + Name 23 "r" + Name 30 "inv" + Name 56 "result" + Name 59 "b" + Name 104 "outv" + Name 105 "S" + MemberName 105(S) 0 "a" + Name 106 "ubuf" + MemberName 106(ubuf) 0 "s" + Name 108 "" + Name 109 "param" + Name 116 "param" + Name 120 "param" + Name 131 "s2d" + Name 161 "i" + Decorate 30(inv) Location 0 + Decorate 104(outv) Location 0 + MemberDecorate 105(S) 0 Offset 0 + Decorate 106(ubuf) Block + MemberDecorate 106(ubuf) 0 Offset 0 + Decorate 108 Binding 0 + Decorate 108 DescriptorSet 3 + Decorate 131(s2d) Location 0 + Decorate 131(s2d) Binding 1 + Decorate 131(s2d) DescriptorSet 3 3: TypeVoid 4: TypeFunction 3 7: TypeInt 32 1 @@ -106,175 +144,282 @@ void main() 10: TypeFloat 32 11: TypeVector 10(float) 4 12: TypeFunction 11(fvec4) 9(ptr) - 16: TypePointer Function 11(fvec4) - 18: 7(int) Constant 0 - 19: TypePointer Function 7(int) - 23: TypePointer Input 11(fvec4) - 24(inv): 23(ptr) Variable Input - 28: 10(float) Constant 1065353216 - 31: TypeInt 32 0 - 32: 31(int) Constant 0 - 33: TypePointer Function 10(float) - 36: 10(float) Constant 1077936128 - 37: TypeBool - 45: 10(float) Constant 1073741824 - 51: TypePointer Output 11(fvec4) - 52(outv): 51(ptr) Variable Output - 53(S): TypeStruct 7(int) - 54(ubuf): TypeStruct 53(S) - 55: TypePointer Uniform 54(ubuf) - 56: 55(ptr) Variable Uniform - 58: TypePointer Uniform 53(S) - 64: TypeImage 10(float) 2D sampled format:Unknown - 65: TypeSampledImage 64 - 66: TypePointer UniformConstant 65 - 67(s2d): 66(ptr) Variable UniformConstant - 69: TypeVector 10(float) 2 - 70: 10(float) Constant 1056964608 - 71: 69(fvec2) ConstantComposite 70 70 - 75: TypePointer Uniform 7(int) - 104: 7(int) Constant 10 - 109: 7(int) Constant 1 - 111: TypePointer Output 10(float) - 114: 10(float) Constant 1092616192 + 16: TypePointer Function 10(float) + 17: TypeFunction 10(float) 16(ptr) 16(ptr) + 22: TypePointer Function 11(fvec4) + 24: 7(int) Constant 0 + 25: TypePointer Function 7(int) + 29: TypePointer Input 11(fvec4) + 30(inv): 29(ptr) Variable Input + 34: 10(float) Constant 1065353216 + 37: TypeInt 32 0 + 38: 37(int) Constant 0 + 41: 10(float) Constant 1077936128 + 42: TypeBool + 50: 10(float) Constant 1073741824 + 57: 10(float) Constant 0 + 58: TypePointer Function 42(bool) + 81: 7(int) Constant 1 + 82: 7(int) Constant 4294967295 + 103: TypePointer Output 11(fvec4) + 104(outv): 103(ptr) Variable Output + 105(S): TypeStruct 7(int) + 106(ubuf): TypeStruct 105(S) + 107: TypePointer Uniform 106(ubuf) + 108: 107(ptr) Variable Uniform + 110: TypePointer Uniform 105(S) + 117: TypePointer Input 10(float) + 121: 37(int) Constant 1 + 128: TypeImage 10(float) 2D sampled format:Unknown + 129: TypeSampledImage 128 + 130: TypePointer UniformConstant 129 + 131(s2d): 130(ptr) Variable UniformConstant + 133: TypeVector 10(float) 2 + 134: 10(float) Constant 1056964608 + 135: 133(fvec2) ConstantComposite 134 134 + 139: TypePointer Uniform 7(int) + 168: 7(int) Constant 10 + 174: TypePointer Output 10(float) + 177: 10(float) Constant 1092616192 + Line 1 58 11 5(main): 3 Function None 4 6: Label - 57(param): 9(ptr) Variable Function - 97(i): 19(ptr) Variable Function - 116: 16(ptr) Variable Function - Line 1 30 0 - 59: 58(ptr) AccessChain 56 18 - 60: 53(S) Load 59 - 61: 7(int) CompositeExtract 60 0 - 62: 19(ptr) AccessChain 57(param) 18 - Store 62 61 - 63: 11(fvec4) FunctionCall 14(foo(struct-S-i11;) 57(param) - Store 52(outv) 63 - Line 1 31 0 - 68: 65 Load 67(s2d) - 72: 11(fvec4) ImageSampleImplicitLod 68 71 - 73: 11(fvec4) Load 52(outv) - 74: 11(fvec4) FAdd 73 72 - Store 52(outv) 74 - Line 1 33 0 - 76: 75(ptr) AccessChain 56 18 18 - 77: 7(int) Load 76 - SelectionMerge 81 None - Switch 77 80 - case 10: 78 - case 20: 79 - 80: Label - Line 1 42 0 - 92: 11(fvec4) Load 52(outv) - 93: 11(fvec4) CompositeConstruct 28 28 28 28 - 94: 11(fvec4) FSub 92 93 - Store 52(outv) 94 - Line 1 43 0 - Branch 81 - 78: Label - Line 1 35 0 - 82: 11(fvec4) Load 52(outv) - 83: 11(fvec4) CompositeConstruct 28 28 28 28 - 84: 11(fvec4) FAdd 82 83 - Store 52(outv) 84 - Line 1 36 0 - Branch 81 - 79: Label - Line 1 38 0 - 86: 11(fvec4) Load 52(outv) - 87: 11(fvec4) VectorTimesScalar 86 45 - Store 52(outv) 87 - Line 1 39 0 - 88: 11(fvec4) Load 52(outv) - 89: 11(fvec4) CompositeConstruct 28 28 28 28 - 90: 11(fvec4) FAdd 88 89 - Store 52(outv) 90 - Line 1 40 0 - Branch 81 - 81: Label - Line 1 46 0 - Store 97(i) 18 - Branch 98 - 98: Label - LoopMerge 100 101 None - Branch 102 - 102: Label - 103: 7(int) Load 97(i) - 105: 37(bool) SLessThan 103 104 - BranchConditional 105 99 100 - 99: Label - Line 1 47 0 - 106: 11(fvec4) Load 52(outv) - 107: 11(fvec4) VectorTimesScalar 106 36 - Store 52(outv) 107 - Branch 101 - 101: Label - Line 1 46 0 - 108: 7(int) Load 97(i) - 110: 7(int) IAdd 108 109 - Store 97(i) 110 - Branch 98 - 100: Label - Line 1 49 0 - 112: 111(ptr) AccessChain 52(outv) 32 - 113: 10(float) Load 112 - 115: 37(bool) FOrdLessThan 113 114 - SelectionMerge 118 None - BranchConditional 115 117 121 - 117: Label - Line 1 50 0 - 119: 11(fvec4) Load 52(outv) - 120: 11(fvec4) ExtInst 2(GLSL.std.450) 13(Sin) 119 - Store 52(outv) 120 - Store 116 120 - Branch 118 - 121: Label - Line 1 51 0 - 122: 11(fvec4) Load 52(outv) - 123: 11(fvec4) ExtInst 2(GLSL.std.450) 14(Cos) 122 - Store 52(outv) 123 - Store 116 123 - Branch 118 - 118: Label + 109(param): 9(ptr) Variable Function + 116(param): 16(ptr) Variable Function + 120(param): 16(ptr) Variable Function + 161(i): 25(ptr) Variable Function + 179: 22(ptr) Variable Function + Line 1 60 0 + 111: 110(ptr) AccessChain 108 24 + 112: 105(S) Load 111 + 113: 7(int) CompositeExtract 112 0 + 114: 25(ptr) AccessChain 109(param) 24 + Store 114 113 + 115: 11(fvec4) FunctionCall 14(foo(struct-S-i11;) 109(param) + Store 104(outv) 115 + Line 1 61 0 + 118: 117(ptr) AccessChain 30(inv) 38 + 119: 10(float) Load 118 + Store 116(param) 119 + 122: 117(ptr) AccessChain 30(inv) 121 + 123: 10(float) Load 122 + Store 120(param) 123 + 124: 10(float) FunctionCall 20(testBranch(f1;f1;) 116(param) 120(param) + 125: 11(fvec4) Load 104(outv) + 126: 11(fvec4) CompositeConstruct 124 124 124 124 + 127: 11(fvec4) FAdd 125 126 + Store 104(outv) 127 + Line 1 62 0 + 132: 129 Load 131(s2d) + 136: 11(fvec4) ImageSampleImplicitLod 132 135 + 137: 11(fvec4) Load 104(outv) + 138: 11(fvec4) FAdd 137 136 + Store 104(outv) 138 + Line 1 64 0 + 140: 139(ptr) AccessChain 108 24 24 + 141: 7(int) Load 140 + SelectionMerge 145 None + Switch 141 144 + case 10: 142 + case 20: 143 + 144: Label + Line 1 73 0 + 156: 11(fvec4) Load 104(outv) + 157: 11(fvec4) CompositeConstruct 34 34 34 34 + 158: 11(fvec4) FSub 156 157 + Store 104(outv) 158 + Line 1 74 0 + Branch 145 + 142: Label + Line 1 66 0 + 146: 11(fvec4) Load 104(outv) + 147: 11(fvec4) CompositeConstruct 34 34 34 34 + 148: 11(fvec4) FAdd 146 147 + Store 104(outv) 148 + Line 1 67 0 + Branch 145 + 143: Label + Line 1 69 0 + 150: 11(fvec4) Load 104(outv) + 151: 11(fvec4) VectorTimesScalar 150 50 + Store 104(outv) 151 + Line 1 70 0 + 152: 11(fvec4) Load 104(outv) + 153: 11(fvec4) CompositeConstruct 34 34 34 34 + 154: 11(fvec4) FAdd 152 153 + Store 104(outv) 154 + Line 1 71 0 + Branch 145 + 145: Label + Line 1 77 0 + Store 161(i) 24 + Branch 162 + 162: Label + Line 1 77 0 + LoopMerge 164 165 None + Branch 166 + 166: Label + Line 1 77 0 + 167: 7(int) Load 161(i) + 169: 42(bool) SLessThan 167 168 + BranchConditional 169 163 164 + 163: Label + Line 1 78 0 + 170: 11(fvec4) Load 104(outv) + 171: 11(fvec4) VectorTimesScalar 170 41 + Store 104(outv) 171 + Branch 165 + 165: Label + Line 1 77 0 + 172: 7(int) Load 161(i) + 173: 7(int) IAdd 172 81 + Store 161(i) 173 + Branch 162 + 164: Label + Line 1 80 0 + 175: 174(ptr) AccessChain 104(outv) 38 + 176: 10(float) Load 175 + 178: 42(bool) FOrdLessThan 176 177 + SelectionMerge 181 None + BranchConditional 178 180 184 + 180: Label + Line 1 81 0 + 182: 11(fvec4) Load 104(outv) + 183: 11(fvec4) ExtInst 2(GLSL.std.450) 13(Sin) 182 + Store 104(outv) 183 + Store 179 183 + Branch 181 + 184: Label + Line 1 82 0 + 185: 11(fvec4) Load 104(outv) + 186: 11(fvec4) ExtInst 2(GLSL.std.450) 14(Cos) 185 + Store 104(outv) 186 + Store 179 186 + Branch 181 + 181: Label + Line 1 83 0 Return FunctionEnd + Line 1 16 13 14(foo(struct-S-i11;): 11(fvec4) Function None 12 13(s): 9(ptr) FunctionParameter 15: Label - 17(r): 16(ptr) Variable Function + 23(r): 22(ptr) Variable Function Line 1 18 0 - 20: 19(ptr) AccessChain 13(s) 18 - 21: 7(int) Load 20 - 22: 10(float) ConvertSToF 21 - 25: 11(fvec4) Load 24(inv) - 26: 11(fvec4) VectorTimesScalar 25 22 - Store 17(r) 26 + 26: 25(ptr) AccessChain 13(s) 24 + 27: 7(int) Load 26 + 28: 10(float) ConvertSToF 27 + 31: 11(fvec4) Load 30(inv) + 32: 11(fvec4) VectorTimesScalar 31 28 + Store 23(r) 32 Line 1 19 0 - 27: 11(fvec4) Load 17(r) - 29: 11(fvec4) CompositeConstruct 28 28 28 28 - 30: 11(fvec4) FAdd 27 29 - Store 17(r) 30 + 33: 11(fvec4) Load 23(r) + 35: 11(fvec4) CompositeConstruct 34 34 34 34 + 36: 11(fvec4) FAdd 33 35 + Store 23(r) 36 Line 1 20 0 - 34: 33(ptr) AccessChain 17(r) 32 - 35: 10(float) Load 34 - 38: 37(bool) FOrdGreaterThan 35 36 - SelectionMerge 40 None - BranchConditional 38 39 44 - 39: Label - Line 1 21 0 - 41: 11(fvec4) Load 17(r) - 42: 11(fvec4) CompositeConstruct 28 28 28 28 - 43: 11(fvec4) FSub 41 42 - Store 17(r) 43 - Branch 40 + 39: 16(ptr) AccessChain 23(r) 38 + 40: 10(float) Load 39 + 43: 42(bool) FOrdGreaterThan 40 41 + SelectionMerge 45 None + BranchConditional 43 44 49 44: Label + Line 1 21 0 + 46: 11(fvec4) Load 23(r) + 47: 11(fvec4) CompositeConstruct 34 34 34 34 + 48: 11(fvec4) FSub 46 47 + Store 23(r) 48 + Branch 45 + 49: Label Line 1 23 0 - 46: 11(fvec4) Load 17(r) - 47: 11(fvec4) VectorTimesScalar 46 45 - Store 17(r) 47 - Branch 40 - 40: Label + 51: 11(fvec4) Load 23(r) + 52: 11(fvec4) VectorTimesScalar 51 50 + Store 23(r) 52 + Branch 45 + 45: Label Line 1 25 0 - 48: 11(fvec4) Load 17(r) - ReturnValue 48 + 53: 11(fvec4) Load 23(r) + ReturnValue 53 + FunctionEnd + Line 1 28 34 +20(testBranch(f1;f1;): 10(float) Function None 17 + 18(x): 16(ptr) FunctionParameter + 19(y): 16(ptr) FunctionParameter + 21: Label + 56(result): 16(ptr) Variable Function + 59(b): 58(ptr) Variable Function + 90: 16(ptr) Variable Function + Line 1 30 0 + Store 56(result) 57 + Line 1 31 0 + 60: 10(float) Load 18(x) + 61: 42(bool) FOrdGreaterThan 60 57 + Store 59(b) 61 + Line 1 34 0 + 62: 42(bool) Load 59(b) + SelectionMerge 64 None + BranchConditional 62 63 67 + 63: Label + Line 1 35 0 + 65: 10(float) Load 56(result) + 66: 10(float) FAdd 65 34 + Store 56(result) 66 + Branch 64 + 67: Label + Line 1 38 0 + 68: 10(float) Load 56(result) + 69: 10(float) FSub 68 34 + Store 56(result) 69 + Branch 64 + 64: Label + Line 1 42 0 + 70: 10(float) Load 18(x) + 71: 10(float) Load 19(y) + 72: 42(bool) FOrdGreaterThan 70 71 + SelectionMerge 74 None + BranchConditional 72 73 74 + 73: Label + Line 1 43 0 + 75: 10(float) Load 18(x) + 76: 10(float) Load 19(y) + 77: 10(float) FSub 75 76 + 78: 10(float) Load 56(result) + 79: 10(float) FAdd 78 77 + Store 56(result) 79 + Branch 74 + 74: Label + Line 1 47 0 + 80: 42(bool) Load 59(b) + 83: 7(int) Select 80 81 82 + 84: 10(float) ConvertSToF 83 + 85: 10(float) Load 56(result) + 86: 10(float) FAdd 85 84 + Store 56(result) 86 + Line 1 51 0 + 87: 10(float) Load 18(x) + 88: 10(float) Load 19(y) + 89: 42(bool) FOrdLessThan 87 88 + SelectionMerge 92 None + BranchConditional 89 91 94 + 91: Label + Line 1 52 0 + 93: 10(float) Load 19(y) + Store 90 93 + Branch 92 + 94: Label + Line 1 53 0 + 95: 42(bool) Load 59(b) + 96: 10(float) Select 95 34 57 + Store 90 96 + Branch 92 + 92: Label + Line 1 53 0 + 97: 10(float) Load 90 + Line 1 51 0 + 98: 10(float) Load 56(result) + 99: 10(float) FAdd 98 97 + Store 56(result) 99 + Line 1 55 0 + 100: 10(float) Load 56(result) + ReturnValue 100 FunctionEnd diff --git a/Test/baseResults/spv.debugPrintf.frag.out b/Test/baseResults/spv.debugPrintf.frag.out index 65174156ab..428e59826b 100644 --- a/Test/baseResults/spv.debugPrintf.frag.out +++ b/Test/baseResults/spv.debugPrintf.frag.out @@ -1,6 +1,6 @@ spv.debugPrintf.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 17 Capability Shader diff --git a/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out b/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out new file mode 100644 index 0000000000..a117fd79f7 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out @@ -0,0 +1,232 @@ +spv.debuginfo.bufferref.glsl.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 148 + + Capability Shader + Capability PhysicalStorageBufferAddressesEXT + Extension "SPV_KHR_non_semantic_info" + Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_relaxed_extended_instruction" + Extension "SPV_KHR_storage_buffer_storage_class" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel PhysicalStorageBuffer64EXT GLSL450 + EntryPoint Fragment 14 "main" 82 135 + ExecutionMode 14 OriginUpperLeft + 2: String "spv.debuginfo.bufferref.glsl.frag" + 8: String "uint" + 16: String "main" + 19: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +#version 450 core +#extension GL_EXT_buffer_reference : enable + +layout(buffer_reference, std430) buffer MeshVertexPositions { + float data[]; +}; + +struct Mesh { + MeshVertexPositions positions; +}; + +layout(set = 0, binding = 0) readonly buffer PerPass_meshes { + Mesh data[]; +} perPass_meshes; + +layout(location = 0) out vec4 out_fragColor; + +layout(location = 0) in flat uint tri_idx0; + +void main() { + Mesh meshData = perPass_meshes.data[tri_idx0]; + + vec3 vertex_pos0 = vec3(meshData.positions.data[3 * tri_idx0], + meshData.positions.data[3 * tri_idx0 + 1], + meshData.positions.data[3 * tri_idx0 + 2]); + + out_fragColor = vec4(vertex_pos0, 1.0); +} +" + 33: String "positions" + 37: String "Mesh" + 40: String "float" + 46: String "data" + 49: String "MeshVertexPositions" + 55: String "meshData" + 69: String "PerPass_meshes" + 75: String "perPass_meshes" + 77: String "int" + 84: String "tri_idx0" + 100: String "vertex_pos0" + 137: String "out_fragColor" + SourceExtension "GL_EXT_buffer_reference" + Name 14 "main" + Name 31 "Mesh" + MemberName 31(Mesh) 0 "positions" + Name 44 "MeshVertexPositions" + MemberName 44(MeshVertexPositions) 0 "data" + Name 53 "meshData" + Name 59 "Mesh" + MemberName 59(Mesh) 0 "positions" + Name 64 "PerPass_meshes" + MemberName 64(PerPass_meshes) 0 "data" + Name 73 "perPass_meshes" + Name 82 "tri_idx0" + Name 98 "vertex_pos0" + Name 135 "out_fragColor" + Decorate 42 ArrayStride 4 + Decorate 44(MeshVertexPositions) Block + MemberDecorate 44(MeshVertexPositions) 0 Offset 0 + Decorate 53(meshData) DecorationAliasedPointerEXT + MemberDecorate 59(Mesh) 0 Offset 0 + Decorate 62 ArrayStride 8 + Decorate 64(PerPass_meshes) Block + MemberDecorate 64(PerPass_meshes) 0 NonWritable + MemberDecorate 64(PerPass_meshes) 0 Offset 0 + Decorate 73(perPass_meshes) NonWritable + Decorate 73(perPass_meshes) Binding 0 + Decorate 73(perPass_meshes) DescriptorSet 0 + Decorate 82(tri_idx0) Flat + Decorate 82(tri_idx0) Location 0 + Decorate 135(out_fragColor) Location 0 + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19 + 20: 7(int) Constant 20 + 22: 7(int) Constant 1 + 23: 7(int) Constant 4 + 24: 7(int) Constant 2 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24 + 17: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20 + TypeForwardPointer 28 PhysicalStorageBufferEXT + 29: 7(int) Constant 5349 + 30: 4 ExtInstWithForwardRefsKHR 1(NonSemantic.Shader.DebugInfo.100) 3 48 29 12 + 31(Mesh): TypeStruct 28 + 34: 7(int) Constant 9 + 35: 7(int) Constant 23 + 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 33 30 18 34 35 12 12 13 + 38: 7(int) Constant 21 + 36: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 37 22 18 38 12 21 37 12 13 32 + 39: TypeFloat 32 + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 40 10 13 12 + 42: TypeRuntimeArray 39(float) + 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 41 12 +44(MeshVertexPositions): TypeStruct 42 + 47: 7(int) Constant 5 + 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 46 43 18 47 34 12 12 13 + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 49 22 18 38 12 21 49 12 13 45 + 28: TypePointer PhysicalStorageBufferEXT 44(MeshVertexPositions) + 50: TypePointer Function 31(Mesh) + 51: 7(int) Constant 7 + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 36 51 12 + 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 55 36 18 38 12 17 23 + 57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 59(Mesh): TypeStruct 28(ptr) + 60: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 33 30 18 34 35 12 12 13 + 61: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 37 22 18 38 12 21 37 12 13 60 + 62: TypeRuntimeArray 59(Mesh) + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 61 12 +64(PerPass_meshes): TypeStruct 62 + 66: 7(int) Constant 13 + 67: 7(int) Constant 8 + 65: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 46 63 18 66 67 12 12 13 + 68: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 69 22 18 38 12 21 69 12 13 65 + 70: TypePointer StorageBuffer 64(PerPass_meshes) + 71: 7(int) Constant 12 + 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 68 71 12 +73(perPass_meshes): 70(ptr) Variable StorageBuffer + 74: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 75 68 18 38 12 21 75 73(perPass_meshes) 67 + 76: TypeInt 32 1 + 78: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 77 10 23 12 + 79: 76(int) Constant 0 + 80: TypePointer Input 7(int) + 81: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 22 12 + 82(tri_idx0): 80(ptr) Variable Input + 83: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 84 9 18 38 12 21 84 82(tri_idx0) 67 + 86: TypePointer StorageBuffer 59(Mesh) + 87: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 61 71 12 + 91: TypePointer Function 28(ptr) + 92: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 51 12 + 94: TypeVector 39(float) 3 + 95: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 13 + 96: TypePointer Function 94(fvec3) + 97: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 95 51 12 + 99: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 100 95 18 35 12 17 23 + 107: TypePointer PhysicalStorageBufferEXT 39(float) + 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 41 29 12 + 113: 7(int) Constant 24 + 122: 7(int) Constant 25 + 131: TypeVector 39(float) 4 + 132: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 23 + 133: TypePointer Output 131(fvec4) + 134: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 132 13 12 +135(out_fragColor): 133(ptr) Variable Output + 138: 7(int) Constant 27 + 136: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 137 132 18 138 12 21 137 135(out_fragColor) 67 + 141: 39(float) Constant 1065353216 + 147: 7(int) Constant 28 + 14(main): 4 Function None 5 + 15: Label + 53(meshData): 50(ptr) Variable Function + 98(vertex_pos0): 96(ptr) Variable Function + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12 + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main) + 58: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 38 38 12 12 + 56: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 54 53(meshData) 57 + 85: 7(int) Load 82(tri_idx0) + 88: 86(ptr) AccessChain 73(perPass_meshes) 79 85 + 89: 59(Mesh) Load 88 + 90: 28(ptr) CompositeExtract 89 0 + 93: 91(ptr) AccessChain 53(meshData) 79 + Store 93 90 + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 35 35 12 12 + 101: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 99 98(vertex_pos0) 57 + 103: 91(ptr) AccessChain 53(meshData) 79 + 104: 28(ptr) Load 103 + 105: 7(int) Load 82(tri_idx0) + 106: 7(int) IMul 13 105 + 109: 107(ptr) AccessChain 104 79 106 + 110: 39(float) Load 109 Aligned 4 + 112: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 113 113 12 12 + 111: 91(ptr) AccessChain 53(meshData) 79 + 114: 28(ptr) Load 111 + 115: 7(int) Load 82(tri_idx0) + 116: 7(int) IMul 13 115 + 117: 7(int) IAdd 116 22 + 118: 107(ptr) AccessChain 114 79 117 + 119: 39(float) Load 118 Aligned 4 + 121: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 122 122 12 12 + 120: 91(ptr) AccessChain 53(meshData) 79 + 123: 28(ptr) Load 120 + 124: 7(int) Load 82(tri_idx0) + 125: 7(int) IMul 13 124 + 126: 7(int) IAdd 125 24 + 127: 107(ptr) AccessChain 123 79 126 + 128: 39(float) Load 127 Aligned 4 + 129: 94(fvec3) CompositeConstruct 110 119 128 + 130: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 35 35 12 12 + Store 98(vertex_pos0) 129 + 140: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 138 138 12 12 + 139: 94(fvec3) Load 98(vertex_pos0) + 142: 39(float) CompositeExtract 139 0 + 143: 39(float) CompositeExtract 139 1 + 144: 39(float) CompositeExtract 139 2 + 145: 131(fvec4) CompositeConstruct 142 143 144 141 + Store 135(out_fragColor) 145 + 146: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 147 147 12 12 + Return + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.const_params.glsl.comp.out b/Test/baseResults/spv.debuginfo.const_params.glsl.comp.out new file mode 100644 index 0000000000..c36a72de2f --- /dev/null +++ b/Test/baseResults/spv.debuginfo.const_params.glsl.comp.out @@ -0,0 +1,113 @@ +spv.debuginfo.const_params.glsl.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 73 + + Capability Shader + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 14 "main" + ExecutionMode 14 LocalSize 1 1 1 + 2: String "spv.debuginfo.const_params.glsl.comp" + 8: String "uint" + 17: String "float" + 35: String "function" + 38: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +#version 450 + +void function( + const float f, + const vec2 f2, + const vec3 f3, + const vec4 f4) +{ +} + +void main() +{ + function(0, vec2(0), vec3(0), vec4(0)); +} +" + 43: String "f" + 49: String "f2" + 52: String "f3" + 55: String "f4" + 57: String "main" + Name 14 "main" + Name 33 "function(f1;vf2;vf3;vf4;" + Name 29 "f" + Name 30 "f2" + Name 31 "f3" + Name 32 "f4" + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 16: TypeFloat 32 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 17 10 13 12 + 19: TypeVector 16(float) 2 + 20: 7(int) Constant 2 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 20 + 22: TypeVector 16(float) 3 + 23: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 13 + 24: TypeVector 16(float) 4 + 25: 7(int) Constant 4 + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 25 + 27: TypeFunction 4 16(float) 19(fvec2) 22(fvec3) 24(fvec4) + 28: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 18 21 23 26 + 37: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 38 + 39: 7(int) Constant 7 + 41: 7(int) Constant 1 + 40: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 41 25 37 20 + 36: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 35 28 37 39 12 40 35 13 39 + 42: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 43 18 37 39 12 36 25 41 + 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 49 21 37 39 12 36 25 20 + 51: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 52 23 37 39 12 36 25 13 + 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 55 26 37 39 12 36 25 25 + 59: 7(int) Constant 11 + 58: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 57 6 37 59 12 40 57 13 59 + 64: 16(float) Constant 0 + 65: 19(fvec2) ConstantComposite 64 64 + 66: 22(fvec3) ConstantComposite 64 64 64 + 67: 24(fvec4) ConstantComposite 64 64 64 64 + 70: 7(int) Constant 13 + 72: 7(int) Constant 14 + 14(main): 4 Function None 5 + 15: Label + 62: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58 + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 37 59 59 12 12 + 61: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 58 14(main) + 69: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 37 70 70 12 12 + 68: 4 FunctionCall 33(function(f1;vf2;vf3;vf4;) 64 65 66 67 + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 37 72 72 12 12 + Return + FunctionEnd +33(function(f1;vf2;vf3;vf4;): 4 Function None 27 + 29(f): 16(float) FunctionParameter + 30(f2): 19(fvec2) FunctionParameter + 31(f3): 22(fvec3) FunctionParameter + 32(f4): 24(fvec4) FunctionParameter + 34: Label + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 36 + 47: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 37 39 39 12 12 + 44: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 29(DebugValue) 42 29(f) 45 + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 29(DebugValue) 48 30(f2) 45 + 53: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 29(DebugValue) 51 31(f3) 45 + 56: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 29(DebugValue) 54 32(f4) 45 + 60: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 36 33(function(f1;vf2;vf3;vf4;) + Return + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.glsl.comp.out b/Test/baseResults/spv.debuginfo.glsl.comp.out new file mode 100644 index 0000000000..af04330444 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.glsl.comp.out @@ -0,0 +1,1406 @@ +spv.debuginfo.glsl.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 979 + + Capability Shader + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 14 "main" 135 + ExecutionMode 14 LocalSize 10 10 1 + 2: String "spv.debuginfo.glsl.comp" + 8: String "uint" + 17: String "float" + 33: String "springForce" + 36: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +struct Particle { + vec4 pos; + vec4 vel; + vec4 uv; + vec4 normal; + float pinned; +}; + +layout(std430, binding = 0) buffer ParticleIn { + Particle particleIn[ ]; +}; + +layout(std430, binding = 1) buffer ParticleOut { + Particle particleOut[ ]; +}; + +// todo: use shared memory to speed up calculation + +layout (local_size_x = 10, local_size_y = 10) in; + +layout (binding = 2) uniform UBO +{ + float deltaT; + float particleMass; + float springStiffness; + float damping; + float restDistH; + float restDistV; + float restDistD; + float sphereRadius; + vec4 spherePos; + vec4 gravity; + ivec2 particleCount; +} params; + +layout (push_constant) uniform PushConsts { + uint calculateNormals; +} pushConsts; + +vec3 springForce(vec3 p0, vec3 p1, float restDist) +{ + vec3 dist = p0 - p1; + return normalize(dist) * params.springStiffness * (length(dist) - restDist); +} + +void main() +{ + uvec3 id = gl_GlobalInvocationID; + + uint index = id.y * params.particleCount.x + id.x; + if (index > params.particleCount.x * params.particleCount.y) + return; + + // Pinned? + if (particleIn[index].pinned == 1.0) { + particleOut[index].pos = particleOut[index].pos; + particleOut[index].vel = vec4(0.0); + return; + } + + // Initial force from gravity + vec3 force = params.gravity.xyz * params.particleMass; + + vec3 pos = particleIn[index].pos.xyz; + vec3 vel = particleIn[index].vel.xyz; + + // Spring forces from neighboring particles + // left + if (id.x > 0) { + force += springForce(particleIn[index-1].pos.xyz, pos, params.restDistH); + } + // right + if (id.x < params.particleCount.x - 1) { + force += springForce(particleIn[index + 1].pos.xyz, pos, params.restDistH); + } + // upper + if (id.y < params.particleCount.y - 1) { + force += springForce(particleIn[index + params.particleCount.x].pos.xyz, pos, params.restDistV); + } + // lower + if (id.y > 0) { + force += springForce(particleIn[index - params.particleCount.x].pos.xyz, pos, params.restDistV); + } + // upper-left + if ((id.x > 0) && (id.y < params.particleCount.y - 1)) { + force += springForce(particleIn[index + params.particleCount.x - 1].pos.xyz, pos, params.restDistD); + } + // lower-left + if ((id.x > 0) && (id.y > 0)) { + force += springForce(particleIn[index - params.particleCount.x - 1].pos.xyz, pos, params.restDistD); + } + // upper-right + if ((id.x < params.particleCount.x - 1) && (id.y < params.particleCount.y - 1)) { + force += springForce(particleIn[index + params.particleCount.x + 1].pos.xyz, pos, params.restDistD); + } + // lower-right + if ((id.x < params.particleCount.x - 1) && (id.y > 0)) { + force += springForce(particleIn[index - params.particleCount.x + 1].pos.xyz, pos, params.restDistD); + } + + force += (-params.damping * vel); + + // Integrate + vec3 f = force * (1.0 / params.particleMass); + particleOut[index].pos = vec4(pos + vel * params.deltaT + 0.5 * f * params.deltaT * params.deltaT, 1.0); + particleOut[index].vel = vec4(vel + f * params.deltaT, 0.0); + + // Sphere collision + vec3 sphereDist = particleOut[index].pos.xyz - params.spherePos.xyz; + if (length(sphereDist) < params.sphereRadius + 0.01) { + // If the particle is inside the sphere, push it to the outer radius + particleOut[index].pos.xyz = params.spherePos.xyz + normalize(sphereDist) * (params.sphereRadius + 0.01); + // Cancel out velocity + particleOut[index].vel = vec4(0.0); + } + + // Normals + if (pushConsts.calculateNormals == 1) { + vec3 normal = vec3(0.0); + vec3 a, b, c; + if (id.y > 0) { + if (id.x > 0) { + a = particleIn[index - 1].pos.xyz - pos; + b = particleIn[index - params.particleCount.x - 1].pos.xyz - pos; + c = particleIn[index - params.particleCount.x].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + if (id.x < params.particleCount.x - 1) { + a = particleIn[index - params.particleCount.x].pos.xyz - pos; + b = particleIn[index - params.particleCount.x + 1].pos.xyz - pos; + c = particleIn[index + 1].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + } + if (id.y < params.particleCount.y - 1) { + if (id.x > 0) { + a = particleIn[index + params.particleCount.x].pos.xyz - pos; + b = particleIn[index + params.particleCount.x - 1].pos.xyz - pos; + c = particleIn[index - 1].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + if (id.x < params.particleCount.x - 1) { + a = particleIn[index + 1].pos.xyz - pos; + b = particleIn[index + params.particleCount.x + 1].pos.xyz - pos; + c = particleIn[index + params.particleCount.x].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + } + particleOut[index].normal = vec4(normalize(normal), 0.0f); + } +} +" + 43: String "p0" + 49: String "p1" + 52: String "restDist" + 54: String "main" + 60: String "dist" + 74: String "int" + 80: String "sphereRadius" + 91: String "gravity" + 95: String "particleCount" + 98: String "UBO" + 103: String "params" + 129: String "id" + 137: String "gl_GlobalInvocationID" + 143: String "index" + 169: String "bool" + 180: String "normal" + 186: String "pinned" + 188: String "Particle" + 194: String "particleIn" + 198: String "ParticleIn" + 203: String "" + 219: String "particleOut" + 222: String "ParticleOut" + 249: String "force" + 263: String "pos" + 273: String "vel" + 581: String "f" + 630: String "sphereDist" + 681: String "calculateNormals" + 684: String "PushConsts" + 691: String "pushConsts" + 725: String "a" + 739: String "b" + 756: String "c" + Name 14 "main" + Name 31 "springForce(vf3;vf3;f1;" + Name 28 "p0" + Name 29 "p1" + Name 30 "restDist" + Name 58 "dist" + Name 78 "UBO" + MemberName 78(UBO) 0 "deltaT" + MemberName 78(UBO) 1 "particleMass" + MemberName 78(UBO) 2 "springStiffness" + MemberName 78(UBO) 3 "damping" + MemberName 78(UBO) 4 "restDistH" + MemberName 78(UBO) 5 "restDistV" + MemberName 78(UBO) 6 "restDistD" + MemberName 78(UBO) 7 "sphereRadius" + MemberName 78(UBO) 8 "spherePos" + MemberName 78(UBO) 9 "gravity" + MemberName 78(UBO) 10 "particleCount" + Name 101 "params" + Name 127 "id" + Name 135 "gl_GlobalInvocationID" + Name 141 "index" + Name 178 "Particle" + MemberName 178(Particle) 0 "pos" + MemberName 178(Particle) 1 "vel" + MemberName 178(Particle) 2 "uv" + MemberName 178(Particle) 3 "normal" + MemberName 178(Particle) 4 "pinned" + Name 192 "ParticleIn" + MemberName 192(ParticleIn) 0 "particleIn" + Name 201 "" + Name 217 "ParticleOut" + MemberName 217(ParticleOut) 0 "particleOut" + Name 226 "" + Name 247 "force" + Name 261 "pos" + Name 271 "vel" + Name 293 "param" + Name 297 "param" + Name 299 "param" + Name 322 "param" + Name 326 "param" + Name 328 "param" + Name 355 "param" + Name 359 "param" + Name 361 "param" + Name 383 "param" + Name 387 "param" + Name 389 "param" + Name 427 "param" + Name 431 "param" + Name 433 "param" + Name 466 "param" + Name 470 "param" + Name 472 "param" + Name 513 "param" + Name 517 "param" + Name 519 "param" + Name 556 "param" + Name 560 "param" + Name 562 "param" + Name 579 "f" + Name 628 "sphereDist" + Name 679 "PushConsts" + MemberName 679(PushConsts) 0 "calculateNormals" + Name 689 "pushConsts" + Name 701 "normal" + Name 723 "a" + Name 737 "b" + Name 754 "c" + Decorate 78(UBO) Block + MemberDecorate 78(UBO) 0 Offset 0 + MemberDecorate 78(UBO) 1 Offset 4 + MemberDecorate 78(UBO) 2 Offset 8 + MemberDecorate 78(UBO) 3 Offset 12 + MemberDecorate 78(UBO) 4 Offset 16 + MemberDecorate 78(UBO) 5 Offset 20 + MemberDecorate 78(UBO) 6 Offset 24 + MemberDecorate 78(UBO) 7 Offset 28 + MemberDecorate 78(UBO) 8 Offset 32 + MemberDecorate 78(UBO) 9 Offset 48 + MemberDecorate 78(UBO) 10 Offset 64 + Decorate 101(params) Binding 2 + Decorate 101(params) DescriptorSet 0 + Decorate 135(gl_GlobalInvocationID) BuiltIn GlobalInvocationId + MemberDecorate 178(Particle) 0 Offset 0 + MemberDecorate 178(Particle) 1 Offset 16 + MemberDecorate 178(Particle) 2 Offset 32 + MemberDecorate 178(Particle) 3 Offset 48 + MemberDecorate 178(Particle) 4 Offset 64 + Decorate 190 ArrayStride 80 + Decorate 192(ParticleIn) BufferBlock + MemberDecorate 192(ParticleIn) 0 Offset 0 + Decorate 201 Binding 0 + Decorate 201 DescriptorSet 0 + Decorate 215 ArrayStride 80 + Decorate 217(ParticleOut) BufferBlock + MemberDecorate 217(ParticleOut) 0 Offset 0 + Decorate 226 Binding 1 + Decorate 226 DescriptorSet 0 + Decorate 679(PushConsts) Block + MemberDecorate 679(PushConsts) 0 Offset 0 + Decorate 978 BuiltIn WorkgroupSize + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 16: TypeFloat 32 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 17 10 13 12 + 19: TypeVector 16(float) 3 + 20: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 13 + 21: TypePointer Function 19(fvec3) + 22: 7(int) Constant 7 + 23: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 22 12 + 24: TypePointer Function 16(float) + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 22 12 + 26: TypeFunction 19(fvec3) 21(ptr) 21(ptr) 24(ptr) + 27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 20 20 20 18 + 35: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 36 + 37: 7(int) Constant 66 + 39: 7(int) Constant 1 + 40: 7(int) Constant 4 + 41: 7(int) Constant 2 + 38: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 39 40 35 41 + 34: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 33 27 35 37 12 38 33 13 37 + 42: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 43 20 35 37 12 34 40 39 + 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 49 20 35 37 12 34 40 41 + 51: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 52 18 35 37 12 34 40 13 + 56: 7(int) Constant 72 + 55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 54 6 35 56 12 38 54 13 56 + 61: 7(int) Constant 68 + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 60 20 35 61 12 34 40 + 69: 7(int) Constant 69 + 71: TypeVector 16(float) 4 + 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 40 + 73: TypeInt 32 1 + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 74 10 40 12 + 76: TypeVector 73(int) 2 + 77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 75 41 + 78(UBO): TypeStruct 16(float) 16(float) 16(float) 16(float) 16(float) 16(float) 16(float) 16(float) 71(fvec4) 71(fvec4) 76(ivec2) + 81: 7(int) Constant 56 + 82: 7(int) Constant 8 + 79: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13 + 83: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13 + 84: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13 + 85: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13 + 86: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13 + 87: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13 + 88: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13 + 89: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13 + 92: 7(int) Constant 58 + 90: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 91 72 35 92 22 12 12 13 + 93: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 91 72 35 92 22 12 12 13 + 96: 7(int) Constant 59 + 94: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 95 77 35 96 82 12 12 13 + 97: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 98 39 35 69 12 38 98 12 13 79 83 84 85 86 87 88 89 90 93 94 + 99: TypePointer Uniform 78(UBO) + 100: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 97 41 12 + 101(params): 99(ptr) Variable Uniform + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 103 97 35 69 12 38 103 101(params) 82 + 104: 73(int) Constant 2 + 105: TypePointer Uniform 16(float) + 106: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 41 12 + 119: 7(int) Constant 70 + 123: TypeVector 7(int) 3 + 124: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 13 + 125: TypePointer Function 123(ivec3) + 126: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 124 22 12 + 130: 7(int) Constant 74 + 128: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 129 124 35 130 12 55 40 + 133: TypePointer Input 123(ivec3) + 134: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 124 39 12 +135(gl_GlobalInvocationID): 133(ptr) Variable Input + 136: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 137 124 35 130 12 38 137 135(gl_GlobalInvocationID) 82 + 139: TypePointer Function 7(int) + 140: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 22 12 + 144: 7(int) Constant 76 + 142: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 143 9 35 144 12 55 40 + 149: 73(int) Constant 10 + 150: TypePointer Uniform 73(int) + 151: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 75 41 12 + 161: 7(int) Constant 77 + 168: TypeBool + 170: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 169 10 41 12 + 176: 7(int) Constant 78 + 178(Particle): TypeStruct 71(fvec4) 71(fvec4) 71(fvec4) 71(fvec4) 16(float) + 181: 7(int) Constant 31 + 179: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 180 72 35 181 22 12 12 13 + 182: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 180 72 35 181 22 12 12 13 + 183: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 180 72 35 181 22 12 12 13 + 184: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 180 72 35 181 22 12 12 13 + 185: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 186 18 35 10 82 12 12 13 + 189: 7(int) Constant 81 + 187: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 188 39 35 189 12 38 188 12 13 179 182 183 184 185 + 190: TypeRuntimeArray 178(Particle) + 191: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 187 12 + 192(ParticleIn): TypeStruct 190 + 195: 7(int) Constant 36 + 196: 7(int) Constant 11 + 193: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 194 191 35 195 196 12 12 13 + 197: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 198 39 35 189 12 38 198 12 13 193 + 199: TypePointer Uniform 192(ParticleIn) + 200: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 197 41 12 + 201: 199(ptr) Variable Uniform + 202: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 203 197 35 189 12 38 203 201 82 + 204: 73(int) Constant 0 + 208: 73(int) Constant 4 + 211: 16(float) Constant 1065353216 + 215: TypeRuntimeArray 178(Particle) + 216: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 187 12 +217(ParticleOut): TypeStruct 215 + 220: 7(int) Constant 40 + 218: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 219 216 35 220 196 12 12 13 + 223: 7(int) Constant 82 + 221: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 222 39 35 223 12 38 222 12 13 218 + 224: TypePointer Uniform 217(ParticleOut) + 225: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 221 41 12 + 226: 224(ptr) Variable Uniform + 227: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 203 221 35 223 12 38 203 226 82 + 232: TypePointer Uniform 71(fvec4) + 233: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 72 41 12 + 239: 7(int) Constant 83 + 240: 73(int) Constant 1 + 241: 16(float) Constant 0 + 242: 71(fvec4) ConstantComposite 241 241 241 241 + 245: 7(int) Constant 84 + 250: 7(int) Constant 88 + 248: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 249 20 35 250 12 55 40 + 254: 73(int) Constant 9 + 264: 7(int) Constant 90 + 262: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 263 20 35 264 12 55 40 + 274: 7(int) Constant 91 + 272: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 273 20 35 274 12 55 40 + 283: 7(int) Constant 95 + 291: 7(int) Constant 96 + 308: 7(int) Constant 99 + 320: 7(int) Constant 100 + 337: 7(int) Constant 103 + 349: 7(int) Constant 104 + 354: 73(int) Constant 5 + 370: 7(int) Constant 107 + 378: 7(int) Constant 108 + 398: 7(int) Constant 111 + 420: 7(int) Constant 112 + 426: 73(int) Constant 6 + 442: 7(int) Constant 115 + 460: 7(int) Constant 116 + 481: 7(int) Constant 119 + 507: 7(int) Constant 120 + 528: 7(int) Constant 123 + 550: 7(int) Constant 124 + 568: 73(int) Constant 3 + 572: 7(int) Constant 127 + 582: 7(int) Constant 130 + 580: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 581 20 35 582 12 55 40 + 592: 7(int) Constant 131 + 599: 16(float) Constant 1056964608 + 616: 7(int) Constant 132 + 631: 7(int) Constant 135 + 629: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 630 20 35 631 12 55 40 + 638: 73(int) Constant 8 + 645: 7(int) Constant 136 + 647: 73(int) Constant 7 + 650: 16(float) Constant 1008981770 + 658: 7(int) Constant 138 + 677: 7(int) Constant 140 + 679(PushConsts): TypeStruct 7(int) + 682: 7(int) Constant 63 + 680: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 681 9 35 682 22 12 12 13 + 685: 7(int) Constant 144 + 683: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 684 39 35 685 12 38 684 12 13 680 + 686: TypePointer PushConstant 679(PushConsts) + 687: 7(int) Constant 9 + 688: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 683 687 12 + 689(pushConsts): 686(ptr) Variable PushConstant + 690: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 691 683 35 685 12 38 691 689(pushConsts) 82 + 692: TypePointer PushConstant 7(int) + 693: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 687 12 + 703: 7(int) Constant 145 + 702: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 180 20 35 703 12 55 40 + 707: 19(fvec3) ConstantComposite 241 241 241 + 710: 7(int) Constant 147 + 718: 7(int) Constant 148 + 726: 7(int) Constant 149 + 724: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 725 20 35 726 12 55 40 + 740: 7(int) Constant 150 + 738: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 739 20 35 740 12 55 40 + 757: 7(int) Constant 151 + 755: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 756 20 35 757 12 55 40 + 772: 7(int) Constant 152 + 784: 7(int) Constant 154 + 796: 7(int) Constant 155 + 808: 7(int) Constant 156 + 821: 7(int) Constant 157 + 830: 7(int) Constant 158 + 842: 7(int) Constant 161 + 854: 7(int) Constant 162 + 862: 7(int) Constant 163 + 874: 7(int) Constant 164 + 887: 7(int) Constant 165 + 896: 7(int) Constant 166 + 908: 7(int) Constant 168 + 920: 7(int) Constant 169 + 929: 7(int) Constant 170 + 942: 7(int) Constant 171 + 954: 7(int) Constant 172 + 966: 7(int) Constant 175 + 976: 7(int) Constant 177 + 977: 7(int) Constant 10 + 978: 123(ivec3) ConstantComposite 977 977 39 + 14(main): 4 Function None 5 + 15: Label + 127(id): 125(ptr) Variable Function + 141(index): 139(ptr) Variable Function + 247(force): 21(ptr) Variable Function + 261(pos): 21(ptr) Variable Function + 271(vel): 21(ptr) Variable Function + 293(param): 21(ptr) Variable Function + 297(param): 21(ptr) Variable Function + 299(param): 24(ptr) Variable Function + 322(param): 21(ptr) Variable Function + 326(param): 21(ptr) Variable Function + 328(param): 24(ptr) Variable Function + 355(param): 21(ptr) Variable Function + 359(param): 21(ptr) Variable Function + 361(param): 24(ptr) Variable Function + 383(param): 21(ptr) Variable Function + 387(param): 21(ptr) Variable Function + 389(param): 24(ptr) Variable Function + 427(param): 21(ptr) Variable Function + 431(param): 21(ptr) Variable Function + 433(param): 24(ptr) Variable Function + 466(param): 21(ptr) Variable Function + 470(param): 21(ptr) Variable Function + 472(param): 24(ptr) Variable Function + 513(param): 21(ptr) Variable Function + 517(param): 21(ptr) Variable Function + 519(param): 24(ptr) Variable Function + 556(param): 21(ptr) Variable Function + 560(param): 21(ptr) Variable Function + 562(param): 24(ptr) Variable Function + 579(f): 21(ptr) Variable Function + 628(sphereDist): 21(ptr) Variable Function + 701(normal): 21(ptr) Variable Function + 723(a): 21(ptr) Variable Function + 737(b): 21(ptr) Variable Function + 754(c): 21(ptr) Variable Function + 121: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 122: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 56 56 12 12 + 120: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 55 14(main) + 132: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 130 130 12 12 + 131: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 128 127(id) 45 + 138: 123(ivec3) Load 135(gl_GlobalInvocationID) + Store 127(id) 138 + 146: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 144 144 12 12 + 145: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 142 141(index) 45 + 147: 139(ptr) AccessChain 127(id) 39 + 148: 7(int) Load 147 + 152: 150(ptr) AccessChain 101(params) 149 12 + 153: 73(int) Load 152 + 154: 7(int) Bitcast 153 + 155: 7(int) IMul 148 154 + 156: 139(ptr) AccessChain 127(id) 12 + 157: 7(int) Load 156 + 158: 7(int) IAdd 155 157 + Store 141(index) 158 + 160: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 161 161 12 12 + 159: 7(int) Load 141(index) + 162: 150(ptr) AccessChain 101(params) 149 12 + 163: 73(int) Load 162 + 164: 150(ptr) AccessChain 101(params) 149 39 + 165: 73(int) Load 164 + 166: 73(int) IMul 163 165 + 167: 7(int) Bitcast 166 + 171: 168(bool) UGreaterThan 159 167 + SelectionMerge 173 None + BranchConditional 171 172 173 + 172: Label + 174: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 175: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 176 176 12 12 + Return + 173: Label + 206: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 207: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 189 189 12 12 + 205: 7(int) Load 141(index) + 209: 105(ptr) AccessChain 201 204 205 208 + 210: 16(float) Load 209 + 212: 168(bool) FOrdEqual 210 211 + SelectionMerge 214 None + BranchConditional 212 213 214 + 213: Label + 229: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 230: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 223 223 12 12 + 228: 7(int) Load 141(index) + 231: 7(int) Load 141(index) + 234: 232(ptr) AccessChain 226 204 231 204 + 235: 71(fvec4) Load 234 + 236: 232(ptr) AccessChain 226 204 228 204 + Store 236 235 + 238: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 239 239 12 12 + 237: 7(int) Load 141(index) + 243: 232(ptr) AccessChain 226 204 237 240 + Store 243 242 + 244: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 245 245 12 12 + Return + 214: Label + 252: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 253: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 250 250 12 12 + 251: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 248 247(force) 45 + 255: 232(ptr) AccessChain 101(params) 254 + 256: 71(fvec4) Load 255 + 257: 19(fvec3) VectorShuffle 256 256 0 1 2 + 258: 105(ptr) AccessChain 101(params) 240 + 259: 16(float) Load 258 + 260: 19(fvec3) VectorTimesScalar 257 259 + Store 247(force) 260 + 266: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 264 264 12 12 + 265: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 262 261(pos) 45 + 267: 7(int) Load 141(index) + 268: 232(ptr) AccessChain 201 204 267 204 + 269: 71(fvec4) Load 268 + 270: 19(fvec3) VectorShuffle 269 269 0 1 2 + Store 261(pos) 270 + 276: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 274 274 12 12 + 275: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 272 271(vel) 45 + 277: 7(int) Load 141(index) + 278: 232(ptr) AccessChain 201 204 277 240 + 279: 71(fvec4) Load 278 + 280: 19(fvec3) VectorShuffle 279 279 0 1 2 + Store 271(vel) 280 + 282: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 283 283 12 12 + 281: 139(ptr) AccessChain 127(id) 12 + 284: 7(int) Load 281 + 285: 168(bool) UGreaterThan 284 12 + SelectionMerge 287 None + BranchConditional 285 286 287 + 286: Label + 289: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 290: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 291 291 12 12 + 288: 7(int) Load 141(index) + 292: 7(int) ISub 288 39 + 294: 232(ptr) AccessChain 201 204 292 204 + 295: 71(fvec4) Load 294 + 296: 19(fvec3) VectorShuffle 295 295 0 1 2 + Store 293(param) 296 + 298: 19(fvec3) Load 261(pos) + Store 297(param) 298 + 300: 105(ptr) AccessChain 101(params) 208 + 301: 16(float) Load 300 + Store 299(param) 301 + 302: 19(fvec3) FunctionCall 31(springForce(vf3;vf3;f1;) 293(param) 297(param) 299(param) + 303: 19(fvec3) Load 247(force) + 304: 19(fvec3) FAdd 303 302 + Store 247(force) 304 + Branch 287 + 287: Label + 306: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 307: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 308 308 12 12 + 305: 139(ptr) AccessChain 127(id) 12 + 309: 7(int) Load 305 + 310: 150(ptr) AccessChain 101(params) 149 12 + 311: 73(int) Load 310 + 312: 73(int) ISub 311 240 + 313: 7(int) Bitcast 312 + 314: 168(bool) ULessThan 309 313 + SelectionMerge 316 None + BranchConditional 314 315 316 + 315: Label + 318: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 319: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 320 320 12 12 + 317: 7(int) Load 141(index) + 321: 7(int) IAdd 317 39 + 323: 232(ptr) AccessChain 201 204 321 204 + 324: 71(fvec4) Load 323 + 325: 19(fvec3) VectorShuffle 324 324 0 1 2 + Store 322(param) 325 + 327: 19(fvec3) Load 261(pos) + Store 326(param) 327 + 329: 105(ptr) AccessChain 101(params) 208 + 330: 16(float) Load 329 + Store 328(param) 330 + 331: 19(fvec3) FunctionCall 31(springForce(vf3;vf3;f1;) 322(param) 326(param) 328(param) + 332: 19(fvec3) Load 247(force) + 333: 19(fvec3) FAdd 332 331 + Store 247(force) 333 + Branch 316 + 316: Label + 335: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 336: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 337 337 12 12 + 334: 139(ptr) AccessChain 127(id) 39 + 338: 7(int) Load 334 + 339: 150(ptr) AccessChain 101(params) 149 39 + 340: 73(int) Load 339 + 341: 73(int) ISub 340 240 + 342: 7(int) Bitcast 341 + 343: 168(bool) ULessThan 338 342 + SelectionMerge 345 None + BranchConditional 343 344 345 + 344: Label + 347: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 348: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 349 349 12 12 + 346: 7(int) Load 141(index) + 350: 150(ptr) AccessChain 101(params) 149 12 + 351: 73(int) Load 350 + 352: 7(int) Bitcast 351 + 353: 7(int) IAdd 346 352 + 356: 232(ptr) AccessChain 201 204 353 204 + 357: 71(fvec4) Load 356 + 358: 19(fvec3) VectorShuffle 357 357 0 1 2 + Store 355(param) 358 + 360: 19(fvec3) Load 261(pos) + Store 359(param) 360 + 362: 105(ptr) AccessChain 101(params) 354 + 363: 16(float) Load 362 + Store 361(param) 363 + 364: 19(fvec3) FunctionCall 31(springForce(vf3;vf3;f1;) 355(param) 359(param) 361(param) + 365: 19(fvec3) Load 247(force) + 366: 19(fvec3) FAdd 365 364 + Store 247(force) 366 + Branch 345 + 345: Label + 368: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 369: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 370 370 12 12 + 367: 139(ptr) AccessChain 127(id) 39 + 371: 7(int) Load 367 + 372: 168(bool) UGreaterThan 371 12 + SelectionMerge 374 None + BranchConditional 372 373 374 + 373: Label + 376: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 377: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 378 378 12 12 + 375: 7(int) Load 141(index) + 379: 150(ptr) AccessChain 101(params) 149 12 + 380: 73(int) Load 379 + 381: 7(int) Bitcast 380 + 382: 7(int) ISub 375 381 + 384: 232(ptr) AccessChain 201 204 382 204 + 385: 71(fvec4) Load 384 + 386: 19(fvec3) VectorShuffle 385 385 0 1 2 + Store 383(param) 386 + 388: 19(fvec3) Load 261(pos) + Store 387(param) 388 + 390: 105(ptr) AccessChain 101(params) 354 + 391: 16(float) Load 390 + Store 389(param) 391 + 392: 19(fvec3) FunctionCall 31(springForce(vf3;vf3;f1;) 383(param) 387(param) 389(param) + 393: 19(fvec3) Load 247(force) + 394: 19(fvec3) FAdd 393 392 + Store 247(force) 394 + Branch 374 + 374: Label + 396: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 397: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 398 398 12 12 + 395: 139(ptr) AccessChain 127(id) 12 + 399: 7(int) Load 395 + 400: 168(bool) UGreaterThan 399 12 + SelectionMerge 402 None + BranchConditional 400 401 402 + 401: Label + 404: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 405: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 398 398 12 12 + 403: 139(ptr) AccessChain 127(id) 39 + 406: 7(int) Load 403 + 407: 150(ptr) AccessChain 101(params) 149 39 + 408: 73(int) Load 407 + 409: 73(int) ISub 408 240 + 410: 7(int) Bitcast 409 + 411: 168(bool) ULessThan 406 410 + Branch 402 + 402: Label + 412: 168(bool) Phi 400 374 411 401 + 415: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 416: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 398 398 12 12 + SelectionMerge 414 None + BranchConditional 412 413 414 + 413: Label + 418: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 419: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 420 420 12 12 + 417: 7(int) Load 141(index) + 421: 150(ptr) AccessChain 101(params) 149 12 + 422: 73(int) Load 421 + 423: 7(int) Bitcast 422 + 424: 7(int) IAdd 417 423 + 425: 7(int) ISub 424 39 + 428: 232(ptr) AccessChain 201 204 425 204 + 429: 71(fvec4) Load 428 + 430: 19(fvec3) VectorShuffle 429 429 0 1 2 + Store 427(param) 430 + 432: 19(fvec3) Load 261(pos) + Store 431(param) 432 + 434: 105(ptr) AccessChain 101(params) 426 + 435: 16(float) Load 434 + Store 433(param) 435 + 436: 19(fvec3) FunctionCall 31(springForce(vf3;vf3;f1;) 427(param) 431(param) 433(param) + 437: 19(fvec3) Load 247(force) + 438: 19(fvec3) FAdd 437 436 + Store 247(force) 438 + Branch 414 + 414: Label + 440: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 441: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 442 442 12 12 + 439: 139(ptr) AccessChain 127(id) 12 + 443: 7(int) Load 439 + 444: 168(bool) UGreaterThan 443 12 + SelectionMerge 446 None + BranchConditional 444 445 446 + 445: Label + 448: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 449: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 442 442 12 12 + 447: 139(ptr) AccessChain 127(id) 39 + 450: 7(int) Load 447 + 451: 168(bool) UGreaterThan 450 12 + Branch 446 + 446: Label + 452: 168(bool) Phi 444 414 451 445 + 455: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 456: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 442 442 12 12 + SelectionMerge 454 None + BranchConditional 452 453 454 + 453: Label + 458: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 459: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 460 460 12 12 + 457: 7(int) Load 141(index) + 461: 150(ptr) AccessChain 101(params) 149 12 + 462: 73(int) Load 461 + 463: 7(int) Bitcast 462 + 464: 7(int) ISub 457 463 + 465: 7(int) ISub 464 39 + 467: 232(ptr) AccessChain 201 204 465 204 + 468: 71(fvec4) Load 467 + 469: 19(fvec3) VectorShuffle 468 468 0 1 2 + Store 466(param) 469 + 471: 19(fvec3) Load 261(pos) + Store 470(param) 471 + 473: 105(ptr) AccessChain 101(params) 426 + 474: 16(float) Load 473 + Store 472(param) 474 + 475: 19(fvec3) FunctionCall 31(springForce(vf3;vf3;f1;) 466(param) 470(param) 472(param) + 476: 19(fvec3) Load 247(force) + 477: 19(fvec3) FAdd 476 475 + Store 247(force) 477 + Branch 454 + 454: Label + 479: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 480: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 481 481 12 12 + 478: 139(ptr) AccessChain 127(id) 12 + 482: 7(int) Load 478 + 483: 150(ptr) AccessChain 101(params) 149 12 + 484: 73(int) Load 483 + 485: 73(int) ISub 484 240 + 486: 7(int) Bitcast 485 + 487: 168(bool) ULessThan 482 486 + SelectionMerge 489 None + BranchConditional 487 488 489 + 488: Label + 491: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 492: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 481 481 12 12 + 490: 139(ptr) AccessChain 127(id) 39 + 493: 7(int) Load 490 + 494: 150(ptr) AccessChain 101(params) 149 39 + 495: 73(int) Load 494 + 496: 73(int) ISub 495 240 + 497: 7(int) Bitcast 496 + 498: 168(bool) ULessThan 493 497 + Branch 489 + 489: Label + 499: 168(bool) Phi 487 454 498 488 + 502: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 503: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 481 481 12 12 + SelectionMerge 501 None + BranchConditional 499 500 501 + 500: Label + 505: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 506: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 507 507 12 12 + 504: 7(int) Load 141(index) + 508: 150(ptr) AccessChain 101(params) 149 12 + 509: 73(int) Load 508 + 510: 7(int) Bitcast 509 + 511: 7(int) IAdd 504 510 + 512: 7(int) IAdd 511 39 + 514: 232(ptr) AccessChain 201 204 512 204 + 515: 71(fvec4) Load 514 + 516: 19(fvec3) VectorShuffle 515 515 0 1 2 + Store 513(param) 516 + 518: 19(fvec3) Load 261(pos) + Store 517(param) 518 + 520: 105(ptr) AccessChain 101(params) 426 + 521: 16(float) Load 520 + Store 519(param) 521 + 522: 19(fvec3) FunctionCall 31(springForce(vf3;vf3;f1;) 513(param) 517(param) 519(param) + 523: 19(fvec3) Load 247(force) + 524: 19(fvec3) FAdd 523 522 + Store 247(force) 524 + Branch 501 + 501: Label + 526: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 527: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 528 528 12 12 + 525: 139(ptr) AccessChain 127(id) 12 + 529: 7(int) Load 525 + 530: 150(ptr) AccessChain 101(params) 149 12 + 531: 73(int) Load 530 + 532: 73(int) ISub 531 240 + 533: 7(int) Bitcast 532 + 534: 168(bool) ULessThan 529 533 + SelectionMerge 536 None + BranchConditional 534 535 536 + 535: Label + 538: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 539: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 528 528 12 12 + 537: 139(ptr) AccessChain 127(id) 39 + 540: 7(int) Load 537 + 541: 168(bool) UGreaterThan 540 12 + Branch 536 + 536: Label + 542: 168(bool) Phi 534 501 541 535 + 545: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 546: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 528 528 12 12 + SelectionMerge 544 None + BranchConditional 542 543 544 + 543: Label + 548: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 549: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 550 550 12 12 + 547: 7(int) Load 141(index) + 551: 150(ptr) AccessChain 101(params) 149 12 + 552: 73(int) Load 551 + 553: 7(int) Bitcast 552 + 554: 7(int) ISub 547 553 + 555: 7(int) IAdd 554 39 + 557: 232(ptr) AccessChain 201 204 555 204 + 558: 71(fvec4) Load 557 + 559: 19(fvec3) VectorShuffle 558 558 0 1 2 + Store 556(param) 559 + 561: 19(fvec3) Load 261(pos) + Store 560(param) 561 + 563: 105(ptr) AccessChain 101(params) 426 + 564: 16(float) Load 563 + Store 562(param) 564 + 565: 19(fvec3) FunctionCall 31(springForce(vf3;vf3;f1;) 556(param) 560(param) 562(param) + 566: 19(fvec3) Load 247(force) + 567: 19(fvec3) FAdd 566 565 + Store 247(force) 567 + Branch 544 + 544: Label + 570: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 571: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 572 572 12 12 + 569: 105(ptr) AccessChain 101(params) 568 + 573: 16(float) Load 569 + 574: 16(float) FNegate 573 + 575: 19(fvec3) Load 271(vel) + 576: 19(fvec3) VectorTimesScalar 575 574 + 577: 19(fvec3) Load 247(force) + 578: 19(fvec3) FAdd 577 576 + Store 247(force) 578 + 584: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 582 582 12 12 + 583: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 580 579(f) 45 + 585: 19(fvec3) Load 247(force) + 586: 105(ptr) AccessChain 101(params) 240 + 587: 16(float) Load 586 + 588: 16(float) FDiv 211 587 + 589: 19(fvec3) VectorTimesScalar 585 588 + Store 579(f) 589 + 591: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 592 592 12 12 + 590: 7(int) Load 141(index) + 593: 19(fvec3) Load 261(pos) + 594: 19(fvec3) Load 271(vel) + 595: 105(ptr) AccessChain 101(params) 204 + 596: 16(float) Load 595 + 597: 19(fvec3) VectorTimesScalar 594 596 + 598: 19(fvec3) FAdd 593 597 + 600: 19(fvec3) Load 579(f) + 601: 19(fvec3) VectorTimesScalar 600 599 + 602: 105(ptr) AccessChain 101(params) 204 + 603: 16(float) Load 602 + 604: 19(fvec3) VectorTimesScalar 601 603 + 605: 105(ptr) AccessChain 101(params) 204 + 606: 16(float) Load 605 + 607: 19(fvec3) VectorTimesScalar 604 606 + 608: 19(fvec3) FAdd 598 607 + 609: 16(float) CompositeExtract 608 0 + 610: 16(float) CompositeExtract 608 1 + 611: 16(float) CompositeExtract 608 2 + 612: 71(fvec4) CompositeConstruct 609 610 611 211 + 613: 232(ptr) AccessChain 226 204 590 204 + Store 613 612 + 615: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 616 616 12 12 + 614: 7(int) Load 141(index) + 617: 19(fvec3) Load 271(vel) + 618: 19(fvec3) Load 579(f) + 619: 105(ptr) AccessChain 101(params) 204 + 620: 16(float) Load 619 + 621: 19(fvec3) VectorTimesScalar 618 620 + 622: 19(fvec3) FAdd 617 621 + 623: 16(float) CompositeExtract 622 0 + 624: 16(float) CompositeExtract 622 1 + 625: 16(float) CompositeExtract 622 2 + 626: 71(fvec4) CompositeConstruct 623 624 625 241 + 627: 232(ptr) AccessChain 226 204 614 240 + Store 627 626 + 633: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 631 631 12 12 + 632: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 629 628(sphereDist) 45 + 634: 7(int) Load 141(index) + 635: 232(ptr) AccessChain 226 204 634 204 + 636: 71(fvec4) Load 635 + 637: 19(fvec3) VectorShuffle 636 636 0 1 2 + 639: 232(ptr) AccessChain 101(params) 638 + 640: 71(fvec4) Load 639 + 641: 19(fvec3) VectorShuffle 640 640 0 1 2 + 642: 19(fvec3) FSub 637 641 + Store 628(sphereDist) 642 + 644: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 645 645 12 12 + 643: 19(fvec3) Load 628(sphereDist) + 646: 16(float) ExtInst 3(GLSL.std.450) 66(Length) 643 + 648: 105(ptr) AccessChain 101(params) 647 + 649: 16(float) Load 648 + 651: 16(float) FAdd 649 650 + 652: 168(bool) FOrdLessThan 646 651 + SelectionMerge 654 None + BranchConditional 652 653 654 + 653: Label + 656: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 657: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 658 658 12 12 + 655: 7(int) Load 141(index) + 659: 232(ptr) AccessChain 101(params) 638 + 660: 71(fvec4) Load 659 + 661: 19(fvec3) VectorShuffle 660 660 0 1 2 + 662: 19(fvec3) Load 628(sphereDist) + 663: 19(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 662 + 664: 105(ptr) AccessChain 101(params) 647 + 665: 16(float) Load 664 + 666: 16(float) FAdd 665 650 + 667: 19(fvec3) VectorTimesScalar 663 666 + 668: 19(fvec3) FAdd 661 667 + 669: 105(ptr) AccessChain 226 204 655 204 12 + 670: 16(float) CompositeExtract 668 0 + Store 669 670 + 671: 105(ptr) AccessChain 226 204 655 204 39 + 672: 16(float) CompositeExtract 668 1 + Store 671 672 + 673: 105(ptr) AccessChain 226 204 655 204 41 + 674: 16(float) CompositeExtract 668 2 + Store 673 674 + 676: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 677 677 12 12 + 675: 7(int) Load 141(index) + 678: 232(ptr) AccessChain 226 204 675 240 + Store 678 242 + Branch 654 + 654: Label + 695: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 696: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 685 685 12 12 + 694: 692(ptr) AccessChain 689(pushConsts) 204 + 697: 7(int) Load 694 + 698: 168(bool) IEqual 697 39 + SelectionMerge 700 None + BranchConditional 698 699 700 + 699: Label + 705: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 706: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 703 703 12 12 + 704: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 702 701(normal) 45 + Store 701(normal) 707 + 709: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 710 710 12 12 + 708: 139(ptr) AccessChain 127(id) 39 + 711: 7(int) Load 708 + 712: 168(bool) UGreaterThan 711 12 + SelectionMerge 714 None + BranchConditional 712 713 714 + 713: Label + 716: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 717: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 718 718 12 12 + 715: 139(ptr) AccessChain 127(id) 12 + 719: 7(int) Load 715 + 720: 168(bool) UGreaterThan 719 12 + SelectionMerge 722 None + BranchConditional 720 721 722 + 721: Label + 728: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 729: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 726 726 12 12 + 727: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 724 723(a) 45 + 730: 7(int) Load 141(index) + 731: 7(int) ISub 730 39 + 732: 232(ptr) AccessChain 201 204 731 204 + 733: 71(fvec4) Load 732 + 734: 19(fvec3) VectorShuffle 733 733 0 1 2 + 735: 19(fvec3) Load 261(pos) + 736: 19(fvec3) FSub 734 735 + Store 723(a) 736 + 742: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 740 740 12 12 + 741: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 738 737(b) 45 + 743: 7(int) Load 141(index) + 744: 150(ptr) AccessChain 101(params) 149 12 + 745: 73(int) Load 744 + 746: 7(int) Bitcast 745 + 747: 7(int) ISub 743 746 + 748: 7(int) ISub 747 39 + 749: 232(ptr) AccessChain 201 204 748 204 + 750: 71(fvec4) Load 749 + 751: 19(fvec3) VectorShuffle 750 750 0 1 2 + 752: 19(fvec3) Load 261(pos) + 753: 19(fvec3) FSub 751 752 + Store 737(b) 753 + 759: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 757 757 12 12 + 758: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 755 754(c) 45 + 760: 7(int) Load 141(index) + 761: 150(ptr) AccessChain 101(params) 149 12 + 762: 73(int) Load 761 + 763: 7(int) Bitcast 762 + 764: 7(int) ISub 760 763 + 765: 232(ptr) AccessChain 201 204 764 204 + 766: 71(fvec4) Load 765 + 767: 19(fvec3) VectorShuffle 766 766 0 1 2 + 768: 19(fvec3) Load 261(pos) + 769: 19(fvec3) FSub 767 768 + Store 754(c) 769 + 771: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 772 772 12 12 + 770: 19(fvec3) Load 723(a) + 773: 19(fvec3) Load 737(b) + 774: 19(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 770 773 + 775: 19(fvec3) Load 737(b) + 776: 19(fvec3) Load 754(c) + 777: 19(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 775 776 + 778: 19(fvec3) FAdd 774 777 + 779: 19(fvec3) Load 701(normal) + 780: 19(fvec3) FAdd 779 778 + Store 701(normal) 780 + Branch 722 + 722: Label + 782: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 783: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 784 784 12 12 + 781: 139(ptr) AccessChain 127(id) 12 + 785: 7(int) Load 781 + 786: 150(ptr) AccessChain 101(params) 149 12 + 787: 73(int) Load 786 + 788: 73(int) ISub 787 240 + 789: 7(int) Bitcast 788 + 790: 168(bool) ULessThan 785 789 + SelectionMerge 792 None + BranchConditional 790 791 792 + 791: Label + 794: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 795: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 796 796 12 12 + 793: 7(int) Load 141(index) + 797: 150(ptr) AccessChain 101(params) 149 12 + 798: 73(int) Load 797 + 799: 7(int) Bitcast 798 + 800: 7(int) ISub 793 799 + 801: 232(ptr) AccessChain 201 204 800 204 + 802: 71(fvec4) Load 801 + 803: 19(fvec3) VectorShuffle 802 802 0 1 2 + 804: 19(fvec3) Load 261(pos) + 805: 19(fvec3) FSub 803 804 + Store 723(a) 805 + 807: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 808 808 12 12 + 806: 7(int) Load 141(index) + 809: 150(ptr) AccessChain 101(params) 149 12 + 810: 73(int) Load 809 + 811: 7(int) Bitcast 810 + 812: 7(int) ISub 806 811 + 813: 7(int) IAdd 812 39 + 814: 232(ptr) AccessChain 201 204 813 204 + 815: 71(fvec4) Load 814 + 816: 19(fvec3) VectorShuffle 815 815 0 1 2 + 817: 19(fvec3) Load 261(pos) + 818: 19(fvec3) FSub 816 817 + Store 737(b) 818 + 820: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 821 821 12 12 + 819: 7(int) Load 141(index) + 822: 7(int) IAdd 819 39 + 823: 232(ptr) AccessChain 201 204 822 204 + 824: 71(fvec4) Load 823 + 825: 19(fvec3) VectorShuffle 824 824 0 1 2 + 826: 19(fvec3) Load 261(pos) + 827: 19(fvec3) FSub 825 826 + Store 754(c) 827 + 829: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 830 830 12 12 + 828: 19(fvec3) Load 723(a) + 831: 19(fvec3) Load 737(b) + 832: 19(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 828 831 + 833: 19(fvec3) Load 737(b) + 834: 19(fvec3) Load 754(c) + 835: 19(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 833 834 + 836: 19(fvec3) FAdd 832 835 + 837: 19(fvec3) Load 701(normal) + 838: 19(fvec3) FAdd 837 836 + Store 701(normal) 838 + Branch 792 + 792: Label + Branch 714 + 714: Label + 840: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 841: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 842 842 12 12 + 839: 139(ptr) AccessChain 127(id) 39 + 843: 7(int) Load 839 + 844: 150(ptr) AccessChain 101(params) 149 39 + 845: 73(int) Load 844 + 846: 73(int) ISub 845 240 + 847: 7(int) Bitcast 846 + 848: 168(bool) ULessThan 843 847 + SelectionMerge 850 None + BranchConditional 848 849 850 + 849: Label + 852: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 853: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 854 854 12 12 + 851: 139(ptr) AccessChain 127(id) 12 + 855: 7(int) Load 851 + 856: 168(bool) UGreaterThan 855 12 + SelectionMerge 858 None + BranchConditional 856 857 858 + 857: Label + 860: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 861: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 862 862 12 12 + 859: 7(int) Load 141(index) + 863: 150(ptr) AccessChain 101(params) 149 12 + 864: 73(int) Load 863 + 865: 7(int) Bitcast 864 + 866: 7(int) IAdd 859 865 + 867: 232(ptr) AccessChain 201 204 866 204 + 868: 71(fvec4) Load 867 + 869: 19(fvec3) VectorShuffle 868 868 0 1 2 + 870: 19(fvec3) Load 261(pos) + 871: 19(fvec3) FSub 869 870 + Store 723(a) 871 + 873: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 874 874 12 12 + 872: 7(int) Load 141(index) + 875: 150(ptr) AccessChain 101(params) 149 12 + 876: 73(int) Load 875 + 877: 7(int) Bitcast 876 + 878: 7(int) IAdd 872 877 + 879: 7(int) ISub 878 39 + 880: 232(ptr) AccessChain 201 204 879 204 + 881: 71(fvec4) Load 880 + 882: 19(fvec3) VectorShuffle 881 881 0 1 2 + 883: 19(fvec3) Load 261(pos) + 884: 19(fvec3) FSub 882 883 + Store 737(b) 884 + 886: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 887 887 12 12 + 885: 7(int) Load 141(index) + 888: 7(int) ISub 885 39 + 889: 232(ptr) AccessChain 201 204 888 204 + 890: 71(fvec4) Load 889 + 891: 19(fvec3) VectorShuffle 890 890 0 1 2 + 892: 19(fvec3) Load 261(pos) + 893: 19(fvec3) FSub 891 892 + Store 754(c) 893 + 895: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 896 896 12 12 + 894: 19(fvec3) Load 723(a) + 897: 19(fvec3) Load 737(b) + 898: 19(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 894 897 + 899: 19(fvec3) Load 737(b) + 900: 19(fvec3) Load 754(c) + 901: 19(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 899 900 + 902: 19(fvec3) FAdd 898 901 + 903: 19(fvec3) Load 701(normal) + 904: 19(fvec3) FAdd 903 902 + Store 701(normal) 904 + Branch 858 + 858: Label + 906: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 907: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 908 908 12 12 + 905: 139(ptr) AccessChain 127(id) 12 + 909: 7(int) Load 905 + 910: 150(ptr) AccessChain 101(params) 149 12 + 911: 73(int) Load 910 + 912: 73(int) ISub 911 240 + 913: 7(int) Bitcast 912 + 914: 168(bool) ULessThan 909 913 + SelectionMerge 916 None + BranchConditional 914 915 916 + 915: Label + 918: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 919: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 920 920 12 12 + 917: 7(int) Load 141(index) + 921: 7(int) IAdd 917 39 + 922: 232(ptr) AccessChain 201 204 921 204 + 923: 71(fvec4) Load 922 + 924: 19(fvec3) VectorShuffle 923 923 0 1 2 + 925: 19(fvec3) Load 261(pos) + 926: 19(fvec3) FSub 924 925 + Store 723(a) 926 + 928: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 929 929 12 12 + 927: 7(int) Load 141(index) + 930: 150(ptr) AccessChain 101(params) 149 12 + 931: 73(int) Load 930 + 932: 7(int) Bitcast 931 + 933: 7(int) IAdd 927 932 + 934: 7(int) IAdd 933 39 + 935: 232(ptr) AccessChain 201 204 934 204 + 936: 71(fvec4) Load 935 + 937: 19(fvec3) VectorShuffle 936 936 0 1 2 + 938: 19(fvec3) Load 261(pos) + 939: 19(fvec3) FSub 937 938 + Store 737(b) 939 + 941: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 942 942 12 12 + 940: 7(int) Load 141(index) + 943: 150(ptr) AccessChain 101(params) 149 12 + 944: 73(int) Load 943 + 945: 7(int) Bitcast 944 + 946: 7(int) IAdd 940 945 + 947: 232(ptr) AccessChain 201 204 946 204 + 948: 71(fvec4) Load 947 + 949: 19(fvec3) VectorShuffle 948 948 0 1 2 + 950: 19(fvec3) Load 261(pos) + 951: 19(fvec3) FSub 949 950 + Store 754(c) 951 + 953: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 954 954 12 12 + 952: 19(fvec3) Load 723(a) + 955: 19(fvec3) Load 737(b) + 956: 19(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 952 955 + 957: 19(fvec3) Load 737(b) + 958: 19(fvec3) Load 754(c) + 959: 19(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 957 958 + 960: 19(fvec3) FAdd 956 959 + 961: 19(fvec3) Load 701(normal) + 962: 19(fvec3) FAdd 961 960 + Store 701(normal) 962 + Branch 916 + 916: Label + Branch 850 + 850: Label + 964: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 965: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 966 966 12 12 + 963: 7(int) Load 141(index) + 967: 19(fvec3) Load 701(normal) + 968: 19(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 967 + 969: 16(float) CompositeExtract 968 0 + 970: 16(float) CompositeExtract 968 1 + 971: 16(float) CompositeExtract 968 2 + 972: 71(fvec4) CompositeConstruct 969 970 971 241 + 973: 232(ptr) AccessChain 226 204 963 568 + Store 973 972 + Branch 700 + 700: Label + 974: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55 + 975: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 976 976 12 12 + Return + FunctionEnd +31(springForce(vf3;vf3;f1;): 19(fvec3) Function None 26 + 28(p0): 21(ptr) FunctionParameter + 29(p1): 21(ptr) FunctionParameter + 30(restDist): 24(ptr) FunctionParameter + 32: Label + 58(dist): 21(ptr) Variable Function + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34 + 47: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 37 37 12 12 + 44: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 42 28(p0) 45 + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 48 29(p1) 45 + 53: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 51 30(restDist) 45 + 57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 34 31(springForce(vf3;vf3;f1;) + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 61 61 12 12 + 62: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 59 58(dist) 45 + 64: 19(fvec3) Load 28(p0) + 65: 19(fvec3) Load 29(p1) + 66: 19(fvec3) FSub 64 65 + Store 58(dist) 66 + 68: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 69 69 12 12 + 67: 19(fvec3) Load 58(dist) + 70: 19(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 67 + 107: 105(ptr) AccessChain 101(params) 104 + 108: 16(float) Load 107 + 109: 19(fvec3) VectorTimesScalar 70 108 + 110: 19(fvec3) Load 58(dist) + 111: 16(float) ExtInst 3(GLSL.std.450) 66(Length) 110 + 112: 16(float) Load 30(restDist) + 113: 16(float) FSub 111 112 + 114: 19(fvec3) VectorTimesScalar 109 113 + ReturnValue 114 + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.glsl.frag.out b/Test/baseResults/spv.debuginfo.glsl.frag.out new file mode 100644 index 0000000000..3214f97a14 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.glsl.frag.out @@ -0,0 +1,1308 @@ +spv.debuginfo.glsl.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 879 + + Capability Shader + Capability ImageQuery + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 14 "main" 499 552 + ExecutionMode 14 OriginUpperLeft + 2: String "spv.debuginfo.glsl.frag" + 8: String "uint" + 17: String "float" + 39: String "textureProj" + 42: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +layout (binding = 1) uniform sampler2D samplerposition; +layout (binding = 2) uniform sampler2D samplerNormal; +layout (binding = 3) uniform sampler2D samplerAlbedo; +layout (binding = 5) uniform sampler2DArray samplerShadowMap; + +layout (location = 0) in vec2 inUV; + +layout (location = 0) out vec4 outFragColor; + +#define LIGHT_COUNT 3 +#define SHADOW_FACTOR 0.25 +#define AMBIENT_LIGHT 0.1 +#define USE_PCF + +int global_var = 0; + +struct Light +{ + vec4 position; + vec4 target; + vec4 color; + mat4 viewMatrix; +}; + +layout (binding = 4) uniform UBO +{ + vec4 viewPos; + Light lights[LIGHT_COUNT]; + int useShadows; + int debugDisplayTarget; +} ubo; + +float textureProj(vec4 P, float layer, vec2 offset) +{ + float shadow = 1.0; + vec4 shadowCoord = P / P.w; + shadowCoord.st = shadowCoord.st * 0.5 + 0.5; + + if (shadowCoord.z > -1.0 && shadowCoord.z < 1.0) + { + float dist = texture(samplerShadowMap, vec3(shadowCoord.st + offset, layer)).r; + if (shadowCoord.w > 0.0 && dist < shadowCoord.z) + { + shadow = SHADOW_FACTOR; + } + } + return shadow; +} + +float filterPCF(vec4 sc, float layer) +{ + ivec2 texDim = textureSize(samplerShadowMap, 0).xy; + float scale = 1.5; + float dx = scale * 1.0 / float(texDim.x); + float dy = scale * 1.0 / float(texDim.y); + + float shadowFactor = 0.0; + int count = 0; + int range = 1; + + for (int x = -range; x <= range; x++) + { + for (int y = -range; y <= range; y++) + { + shadowFactor += textureProj(sc, layer, vec2(dx*x, dy*y)); + count++; + } + + } + return shadowFactor / count; +} + +vec3 shadow(vec3 fragcolor, vec3 fragpos) { + for(int i = 0; i < LIGHT_COUNT; ++i) + { + vec4 shadowClip = ubo.lights[i].viewMatrix * vec4(fragpos, 1.0); + + float shadowFactor; + #ifdef USE_PCF + shadowFactor= filterPCF(shadowClip, i); + #else + shadowFactor = textureProj(shadowClip, i, vec2(0.0)); + #endif + + fragcolor *= shadowFactor; + } + return fragcolor; +} + +void main() +{ + // Get G-Buffer values + vec3 fragPos = texture(samplerposition, inUV).rgb; + vec3 normal = texture(samplerNormal, inUV).rgb; + vec4 albedo = texture(samplerAlbedo, inUV); + + // Debug display + if (ubo.debugDisplayTarget > 0) { + switch (ubo.debugDisplayTarget) { + case 1: + outFragColor.rgb = shadow(vec3(1.0), fragPos).rgb; + break; + case 2: + outFragColor.rgb = fragPos; + break; + case 3: + outFragColor.rgb = normal; + break; + case 4: + outFragColor.rgb = albedo.rgb; + break; + case 5: + outFragColor.rgb = albedo.aaa; + break; + } + outFragColor.a = 1.0; + return; + } + + // Ambient part + vec3 fragcolor = albedo.rgb * AMBIENT_LIGHT; + + vec3 N = normalize(normal); + + for(int i = 0; i < LIGHT_COUNT; ++i) + { + // Vector to light + vec3 L = ubo.lights[i].position.xyz - fragPos; + // Distance from light to fragment position + float dist = length(L); + L = normalize(L); + + // Viewer to fragment + vec3 V = ubo.viewPos.xyz - fragPos; + V = normalize(V); + + float lightCosInnerAngle = cos(radians(15.0)); + float lightCosOuterAngle = cos(radians(25.0)); + float lightRange = 100.0; + + // Direction vector from source to target + vec3 dir = normalize(ubo.lights[i].position.xyz - ubo.lights[i].target.xyz); + + // Dual cone spot light with smooth transition between inner and outer angle + float cosDir = dot(L, dir); + float spotEffect = smoothstep(lightCosOuterAngle, lightCosInnerAngle, cosDir); + float heightAttenuation = smoothstep(lightRange, 0.0f, dist); + + // Diffuse lighting + float NdotL = max(0.0, dot(N, L)); + vec3 diff = vec3(NdotL); + + // Specular lighting + vec3 R = reflect(-L, N); + float NdotR = max(0.0, dot(R, V)); + vec3 spec = vec3(pow(NdotR, 16.0) * albedo.a * 2.5); + + fragcolor += vec3((diff + spec) * spotEffect * heightAttenuation) * ubo.lights[i].color.rgb * albedo.rgb; + } + + // Shadow calculations in a separate pass + if (ubo.useShadows > 0) + { + fragcolor = shadow(fragcolor, fragPos); + } + + outFragColor = vec4(fragcolor, 1.0); +} +" + 47: String "P" + 53: String "layer" + 56: String "offset" + 64: String "filterPCF" + 68: String "sc" + 84: String "shadow" + 88: String "fragcolor" + 93: String "fragpos" + 95: String "main" + 99: String "int" + 105: String "global_var" + 120: String "shadowCoord" + 142: String "bool" + 164: String "dist" + 171: String "type.2d.image" + 172: String "@type.2d.image" + 176: String "type.sampled.image" + 177: String "@type.sampled.image" + 182: String "samplerShadowMap" + 233: String "texDim" + 245: String "scale" + 252: String "dx" + 266: String "dy" + 278: String "shadowFactor" + 284: String "count" + 290: String "range" + 297: String "x" + 317: String "y" + 383: String "i" + 401: String "shadowClip" + 411: String "color" + 416: String "viewMatrix" + 419: String "Light" + 425: String "lights" + 428: String "debugDisplayTarget" + 432: String "UBO" + 437: String "ubo" + 483: String "fragPos" + 495: String "samplerposition" + 501: String "inUV" + 507: String "normal" + 513: String "samplerNormal" + 520: String "albedo" + 526: String "samplerAlbedo" + 554: String "outFragColor" + 648: String "N" + 672: String "L" + 698: String "V" + 713: String "lightCosInnerAngle" + 720: String "lightCosOuterAngle" + 727: String "lightRange" + 734: String "dir" + 750: String "cosDir" + 759: String "spotEffect" + 769: String "heightAttenuation" + 778: String "NdotL" + 788: String "diff" + 796: String "R" + 806: String "NdotR" + 816: String "spec" + Name 14 "main" + Name 37 "textureProj(vf4;f1;vf2;" + Name 34 "P" + Name 35 "layer" + Name 36 "offset" + Name 62 "filterPCF(vf4;f1;" + Name 60 "sc" + Name 61 "layer" + Name 82 "shadow(vf3;vf3;" + Name 80 "fragcolor" + Name 81 "fragpos" + Name 103 "global_var" + Name 112 "shadow" + Name 118 "shadowCoord" + Name 162 "dist" + Name 180 "samplerShadowMap" + Name 231 "texDim" + Name 243 "scale" + Name 250 "dx" + Name 264 "dy" + Name 276 "shadowFactor" + Name 282 "count" + Name 288 "range" + Name 295 "x" + Name 315 "y" + Name 348 "param" + Name 350 "param" + Name 352 "param" + Name 381 "i" + Name 399 "shadowClip" + Name 409 "Light" + MemberName 409(Light) 0 "position" + MemberName 409(Light) 1 "target" + MemberName 409(Light) 2 "color" + MemberName 409(Light) 3 "viewMatrix" + Name 422 "UBO" + MemberName 422(UBO) 0 "viewPos" + MemberName 422(UBO) 1 "lights" + MemberName 422(UBO) 2 "useShadows" + MemberName 422(UBO) 3 "debugDisplayTarget" + Name 435 "ubo" + Name 449 "shadowFactor" + Name 456 "param" + Name 458 "param" + Name 481 "fragPos" + Name 493 "samplerposition" + Name 499 "inUV" + Name 505 "normal" + Name 511 "samplerNormal" + Name 518 "albedo" + Name 524 "samplerAlbedo" + Name 552 "outFragColor" + Name 557 "param" + Name 560 "param" + Name 636 "fragcolor" + Name 646 "N" + Name 654 "i" + Name 670 "L" + Name 685 "dist" + Name 696 "V" + Name 711 "lightCosInnerAngle" + Name 718 "lightCosOuterAngle" + Name 725 "lightRange" + Name 732 "dir" + Name 748 "cosDir" + Name 757 "spotEffect" + Name 767 "heightAttenuation" + Name 776 "NdotL" + Name 786 "diff" + Name 794 "R" + Name 804 "NdotR" + Name 814 "spec" + Name 861 "param" + Name 866 "param" + Decorate 180(samplerShadowMap) Binding 5 + Decorate 180(samplerShadowMap) DescriptorSet 0 + MemberDecorate 409(Light) 0 Offset 0 + MemberDecorate 409(Light) 1 Offset 16 + MemberDecorate 409(Light) 2 Offset 32 + MemberDecorate 409(Light) 3 ColMajor + MemberDecorate 409(Light) 3 MatrixStride 16 + MemberDecorate 409(Light) 3 Offset 48 + Decorate 420 ArrayStride 112 + Decorate 422(UBO) Block + MemberDecorate 422(UBO) 0 Offset 0 + MemberDecorate 422(UBO) 1 Offset 16 + MemberDecorate 422(UBO) 2 Offset 352 + MemberDecorate 422(UBO) 3 Offset 356 + Decorate 435(ubo) Binding 4 + Decorate 435(ubo) DescriptorSet 0 + Decorate 493(samplerposition) Binding 1 + Decorate 493(samplerposition) DescriptorSet 0 + Decorate 499(inUV) Location 0 + Decorate 511(samplerNormal) Binding 2 + Decorate 511(samplerNormal) DescriptorSet 0 + Decorate 524(samplerAlbedo) Binding 3 + Decorate 524(samplerAlbedo) DescriptorSet 0 + Decorate 552(outFragColor) Location 0 + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 16: TypeFloat 32 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 17 10 13 12 + 19: TypeVector 16(float) 4 + 20: 7(int) Constant 4 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 20 + 22: TypePointer Function 19(fvec4) + 23: 7(int) Constant 7 + 24: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 23 12 + 25: TypePointer Function 16(float) + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 23 12 + 27: TypeVector 16(float) 2 + 28: 7(int) Constant 2 + 29: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 28 + 30: TypePointer Function 27(fvec2) + 31: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 29 23 12 + 32: TypeFunction 16(float) 22(ptr) 25(ptr) 30(ptr) + 33: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 18 21 18 29 + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 42 + 43: 7(int) Constant 59 + 45: 7(int) Constant 1 + 44: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 45 20 41 28 + 40: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 39 33 41 43 12 44 39 13 43 + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 21 41 43 12 40 20 45 + 49: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 18 41 43 12 40 20 28 + 55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 56 29 41 43 12 40 20 13 + 58: TypeFunction 16(float) 22(ptr) 25(ptr) + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 18 21 18 + 66: 7(int) Constant 76 + 65: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 64 59 41 66 12 44 64 13 66 + 67: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 68 21 41 66 12 65 20 45 + 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 18 41 66 12 65 20 28 + 74: TypeVector 16(float) 3 + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 13 + 76: TypePointer Function 74(fvec3) + 77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 75 23 12 + 78: TypeFunction 74(fvec3) 76(ptr) 76(ptr) + 79: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 75 75 75 + 86: 7(int) Constant 99 + 85: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 84 79 41 86 12 44 84 13 86 + 87: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 88 75 41 86 12 85 20 45 + 92: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 93 75 41 86 12 85 20 28 + 97: 7(int) Constant 116 + 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 95 6 41 97 12 44 95 13 97 + 98: TypeInt 32 1 + 100: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 99 10 20 12 + 101: TypePointer Private 98(int) + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 100 11 12 + 103(global_var): 101(ptr) Variable Private + 106: 7(int) Constant 41 + 107: 7(int) Constant 8 + 104: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 105 100 41 106 12 44 105 103(global_var) 107 + 108: 98(int) Constant 0 + 114: 7(int) Constant 61 + 113: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 84 18 41 114 12 40 20 + 117: 16(float) Constant 1065353216 + 121: 7(int) Constant 62 + 119: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 120 21 41 121 12 40 20 + 131: 7(int) Constant 63 + 133: 16(float) Constant 1056964608 + 141: TypeBool + 143: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 142 10 28 12 + 146: 7(int) Constant 65 + 148: 16(float) Constant 3212836864 + 165: 7(int) Constant 67 + 163: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 164 18 41 165 12 40 20 + 169: TypeImage 16(float) 2D array sampled format:Unknown + 173: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone) + 170: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 171 12 41 165 12 44 172 173 13 + 174: TypeSampledImage 169 + 175: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 176 12 41 165 12 44 177 173 13 + 178: TypePointer UniformConstant 174 + 179: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 175 12 12 +180(samplerShadowMap): 178(ptr) Variable UniformConstant + 181: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 182 175 41 165 12 44 182 180(samplerShadowMap) 107 + 196: 7(int) Constant 68 + 198: 16(float) Constant 0 + 213: 16(float) Constant 1048576000 + 216: 7(int) Constant 70 + 220: 7(int) Constant 73 + 225: 7(int) Constant 74 + 227: TypeVector 98(int) 2 + 228: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 100 28 + 229: TypePointer Function 227(ivec2) + 230: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 228 23 12 + 234: 7(int) Constant 78 + 232: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 233 228 41 234 12 65 20 + 239: TypeVector 98(int) 3 + 240: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 100 13 + 246: 7(int) Constant 79 + 244: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 245 18 41 246 12 65 20 + 249: 16(float) Constant 1069547520 + 253: 7(int) Constant 80 + 251: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 252 18 41 253 12 65 20 + 258: TypePointer Function 98(int) + 259: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 100 23 12 + 267: 7(int) Constant 81 + 265: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 266 18 41 267 12 65 20 + 279: 7(int) Constant 83 + 277: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 278 18 41 279 12 65 20 + 285: 7(int) Constant 84 + 283: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 284 100 41 285 12 65 20 + 291: 7(int) Constant 85 + 289: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 290 100 41 291 12 65 20 + 294: 98(int) Constant 1 + 298: 7(int) Constant 87 + 296: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 297 100 41 298 12 65 20 + 318: 7(int) Constant 89 + 316: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 317 100 41 318 12 65 20 + 339: 7(int) Constant 91 + 358: 7(int) Constant 92 + 371: 7(int) Constant 96 + 379: 7(int) Constant 97 + 384: 7(int) Constant 100 + 382: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 383 100 41 384 12 85 20 + 397: 98(int) Constant 3 + 402: 7(int) Constant 102 + 400: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 401 21 41 402 12 85 20 + 406: TypeMatrix 19(fvec4) 4 + 408: 141(bool) ConstantTrue + 407: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 21 20 408 + 409(Light): TypeStruct 19(fvec4) 19(fvec4) 19(fvec4) 406 + 412: 7(int) Constant 47 + 410: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 411 21 41 412 23 12 12 13 + 413: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 411 21 41 412 23 12 12 13 + 414: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 411 21 41 412 23 12 12 13 + 417: 7(int) Constant 48 + 415: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 416 407 41 417 23 12 12 13 + 418: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 419 45 41 402 12 44 419 12 13 410 413 414 415 + 420: TypeArray 409(Light) 13 + 421: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 418 13 + 422(UBO): TypeStruct 19(fvec4) 420 98(int) 98(int) + 423: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 411 21 41 412 23 12 12 13 + 426: 7(int) Constant 54 + 424: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 425 421 41 426 107 12 12 13 + 429: 7(int) Constant 56 + 427: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 428 100 41 429 11 12 12 13 + 430: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 428 100 41 429 11 12 12 13 + 431: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 432 45 41 402 12 44 432 12 13 423 424 427 430 + 433: TypePointer Uniform 422(UBO) + 434: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 431 28 12 + 435(ubo): 433(ptr) Variable Uniform + 436: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 437 431 41 402 12 44 437 435(ubo) 107 + 439: TypePointer Uniform 406 + 440: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 407 28 12 + 451: 7(int) Constant 106 + 450: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 278 18 41 451 12 85 20 + 462: 7(int) Constant 111 + 472: 7(int) Constant 113 + 477: 7(int) Constant 114 + 484: 7(int) Constant 119 + 482: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 483 75 41 484 12 96 20 + 487: TypeImage 16(float) 2D sampled format:Unknown + 488: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 171 12 41 484 12 44 172 173 13 + 489: TypeSampledImage 487 + 490: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 176 12 41 484 12 44 177 173 13 + 491: TypePointer UniformConstant 489 + 492: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 490 12 12 +493(samplerposition): 491(ptr) Variable UniformConstant + 494: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 495 490 41 484 12 44 495 493(samplerposition) 107 + 497: TypePointer Input 27(fvec2) + 498: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 29 45 12 + 499(inUV): 497(ptr) Variable Input + 500: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 501 29 41 484 12 44 501 499(inUV) 107 + 508: 7(int) Constant 120 + 506: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 507 75 41 508 12 96 20 +511(samplerNormal): 491(ptr) Variable UniformConstant + 512: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 513 490 41 508 12 44 513 511(samplerNormal) 107 + 521: 7(int) Constant 121 + 519: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 520 21 41 521 12 96 20 +524(samplerAlbedo): 491(ptr) Variable UniformConstant + 525: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 526 490 41 521 12 44 526 524(samplerAlbedo) 107 + 530: TypePointer Uniform 98(int) + 531: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 100 28 12 + 534: 7(int) Constant 124 + 542: 7(int) Constant 125 + 550: TypePointer Output 19(fvec4) + 551: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 13 12 +552(outFragColor): 550(ptr) Variable Output + 555: 7(int) Constant 127 + 553: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 554 21 41 555 12 44 554 552(outFragColor) 107 + 556: 74(fvec3) ConstantComposite 117 117 117 + 563: TypePointer Output 16(float) + 564: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 13 12 + 572: 7(int) Constant 128 + 577: 7(int) Constant 130 + 585: 7(int) Constant 131 + 590: 7(int) Constant 133 + 598: 7(int) Constant 134 + 603: 7(int) Constant 136 + 612: 7(int) Constant 137 + 617: 7(int) Constant 139 + 626: 7(int) Constant 140 + 632: 7(int) Constant 142 + 634: 7(int) Constant 143 + 638: 7(int) Constant 147 + 637: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 88 75 41 638 12 96 20 + 644: 16(float) Constant 1036831949 + 649: 7(int) Constant 149 + 647: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 648 75 41 649 12 96 20 + 656: 7(int) Constant 151 + 655: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 383 100 41 656 12 96 20 + 673: 7(int) Constant 154 + 671: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 672 75 41 673 12 96 20 + 678: TypePointer Uniform 19(fvec4) + 679: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 28 12 + 687: 7(int) Constant 156 + 686: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 164 18 41 687 12 96 20 + 694: 7(int) Constant 157 + 699: 7(int) Constant 160 + 697: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 698 75 41 699 12 96 20 + 709: 7(int) Constant 161 + 714: 7(int) Constant 163 + 712: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 713 18 41 714 12 96 20 + 717: 16(float) Constant 1064781546 + 721: 7(int) Constant 164 + 719: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 720 18 41 721 12 96 20 + 724: 16(float) Constant 1063781322 + 728: 7(int) Constant 165 + 726: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 727 18 41 728 12 96 20 + 731: 16(float) Constant 1120403456 + 735: 7(int) Constant 168 + 733: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 734 75 41 735 12 96 20 + 751: 7(int) Constant 171 + 749: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 750 18 41 751 12 96 20 + 760: 7(int) Constant 172 + 758: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 759 18 41 760 12 96 20 + 770: 7(int) Constant 173 + 768: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 769 18 41 770 12 96 20 + 779: 7(int) Constant 176 + 777: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 778 18 41 779 12 96 20 + 789: 7(int) Constant 177 + 787: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 788 75 41 789 12 96 20 + 797: 7(int) Constant 180 + 795: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 796 75 41 797 12 96 20 + 807: 7(int) Constant 181 + 805: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 806 18 41 807 12 96 20 + 817: 7(int) Constant 182 + 815: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 816 75 41 817 12 96 20 + 821: 16(float) Constant 1098907648 + 826: 16(float) Constant 1075838976 + 831: 7(int) Constant 184 + 839: 98(int) Constant 2 + 856: 7(int) Constant 188 + 865: 7(int) Constant 190 + 872: 7(int) Constant 193 + 878: 7(int) Constant 194 + 14(main): 4 Function None 5 + 15: Label + 481(fragPos): 76(ptr) Variable Function + 505(normal): 76(ptr) Variable Function + 518(albedo): 22(ptr) Variable Function + 557(param): 76(ptr) Variable Function + 560(param): 76(ptr) Variable Function + 636(fragcolor): 76(ptr) Variable Function + 646(N): 76(ptr) Variable Function + 654(i): 258(ptr) Variable Function + 670(L): 76(ptr) Variable Function + 685(dist): 25(ptr) Variable Function + 696(V): 76(ptr) Variable Function +711(lightCosInnerAngle): 25(ptr) Variable Function +718(lightCosOuterAngle): 25(ptr) Variable Function + 725(lightRange): 25(ptr) Variable Function + 732(dir): 76(ptr) Variable Function + 748(cosDir): 25(ptr) Variable Function + 757(spotEffect): 25(ptr) Variable Function +767(heightAttenuation): 25(ptr) Variable Function + 776(NdotL): 25(ptr) Variable Function + 786(diff): 76(ptr) Variable Function + 794(R): 76(ptr) Variable Function + 804(NdotR): 25(ptr) Variable Function + 814(spec): 76(ptr) Variable Function + 861(param): 76(ptr) Variable Function + 866(param): 76(ptr) Variable Function + 109: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44 + 110: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 106 106 12 12 + Store 103(global_var) 108 + 479: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 480: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 97 97 12 12 + 478: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 96 14(main) + 486: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 484 484 12 12 + 485: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 482 481(fragPos) 49 + 496: 489 Load 493(samplerposition) + 502: 27(fvec2) Load 499(inUV) + 503: 19(fvec4) ImageSampleImplicitLod 496 502 + 504: 74(fvec3) VectorShuffle 503 503 0 1 2 + Store 481(fragPos) 504 + 510: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 508 508 12 12 + 509: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 506 505(normal) 49 + 514: 489 Load 511(samplerNormal) + 515: 27(fvec2) Load 499(inUV) + 516: 19(fvec4) ImageSampleImplicitLod 514 515 + 517: 74(fvec3) VectorShuffle 516 516 0 1 2 + Store 505(normal) 517 + 523: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 521 521 12 12 + 522: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 519 518(albedo) 49 + 527: 489 Load 524(samplerAlbedo) + 528: 27(fvec2) Load 499(inUV) + 529: 19(fvec4) ImageSampleImplicitLod 527 528 + Store 518(albedo) 529 + 533: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 534 534 12 12 + 532: 530(ptr) AccessChain 435(ubo) 397 + 535: 98(int) Load 532 + 536: 141(bool) SGreaterThan 535 108 + SelectionMerge 538 None + BranchConditional 536 537 538 + 537: Label + 540: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 541: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 542 542 12 12 + 539: 530(ptr) AccessChain 435(ubo) 397 + 543: 98(int) Load 539 + SelectionMerge 549 None + Switch 543 549 + case 1: 544 + case 2: 545 + case 3: 546 + case 4: 547 + case 5: 548 + 544: Label + 558: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 559: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 555 555 12 12 + Store 557(param) 556 + 561: 74(fvec3) Load 481(fragPos) + Store 560(param) 561 + 562: 74(fvec3) FunctionCall 82(shadow(vf3;vf3;) 557(param) 560(param) + 565: 563(ptr) AccessChain 552(outFragColor) 12 + 566: 16(float) CompositeExtract 562 0 + Store 565 566 + 567: 563(ptr) AccessChain 552(outFragColor) 45 + 568: 16(float) CompositeExtract 562 1 + Store 567 568 + 569: 563(ptr) AccessChain 552(outFragColor) 28 + 570: 16(float) CompositeExtract 562 2 + Store 569 570 + 571: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 572 572 12 12 + Branch 549 + 545: Label + 575: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 576: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 577 577 12 12 + 574: 74(fvec3) Load 481(fragPos) + 578: 563(ptr) AccessChain 552(outFragColor) 12 + 579: 16(float) CompositeExtract 574 0 + Store 578 579 + 580: 563(ptr) AccessChain 552(outFragColor) 45 + 581: 16(float) CompositeExtract 574 1 + Store 580 581 + 582: 563(ptr) AccessChain 552(outFragColor) 28 + 583: 16(float) CompositeExtract 574 2 + Store 582 583 + 584: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 585 585 12 12 + Branch 549 + 546: Label + 588: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 589: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 590 590 12 12 + 587: 74(fvec3) Load 505(normal) + 591: 563(ptr) AccessChain 552(outFragColor) 12 + 592: 16(float) CompositeExtract 587 0 + Store 591 592 + 593: 563(ptr) AccessChain 552(outFragColor) 45 + 594: 16(float) CompositeExtract 587 1 + Store 593 594 + 595: 563(ptr) AccessChain 552(outFragColor) 28 + 596: 16(float) CompositeExtract 587 2 + Store 595 596 + 597: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 598 598 12 12 + Branch 549 + 547: Label + 601: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 602: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 603 603 12 12 + 600: 19(fvec4) Load 518(albedo) + 604: 74(fvec3) VectorShuffle 600 600 0 1 2 + 605: 563(ptr) AccessChain 552(outFragColor) 12 + 606: 16(float) CompositeExtract 604 0 + Store 605 606 + 607: 563(ptr) AccessChain 552(outFragColor) 45 + 608: 16(float) CompositeExtract 604 1 + Store 607 608 + 609: 563(ptr) AccessChain 552(outFragColor) 28 + 610: 16(float) CompositeExtract 604 2 + Store 609 610 + 611: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 612 612 12 12 + Branch 549 + 548: Label + 615: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 616: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 617 617 12 12 + 614: 19(fvec4) Load 518(albedo) + 618: 74(fvec3) VectorShuffle 614 614 3 3 3 + 619: 563(ptr) AccessChain 552(outFragColor) 12 + 620: 16(float) CompositeExtract 618 0 + Store 619 620 + 621: 563(ptr) AccessChain 552(outFragColor) 45 + 622: 16(float) CompositeExtract 618 1 + Store 621 622 + 623: 563(ptr) AccessChain 552(outFragColor) 28 + 624: 16(float) CompositeExtract 618 2 + Store 623 624 + 625: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 626 626 12 12 + Branch 549 + 549: Label + 630: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 631: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 632 632 12 12 + 629: 563(ptr) AccessChain 552(outFragColor) 13 + Store 629 117 + 633: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 634 634 12 12 + Return + 538: Label + 640: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 641: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 638 638 12 12 + 639: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 637 636(fragcolor) 49 + 642: 19(fvec4) Load 518(albedo) + 643: 74(fvec3) VectorShuffle 642 642 0 1 2 + 645: 74(fvec3) VectorTimesScalar 643 644 + Store 636(fragcolor) 645 + 651: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 649 649 12 12 + 650: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 647 646(N) 49 + 652: 74(fvec3) Load 505(normal) + 653: 74(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 652 + Store 646(N) 653 + 658: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 656 656 12 12 + 657: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 655 654(i) 49 + Store 654(i) 108 + Branch 659 + 659: Label + 663: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 664: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 656 656 12 12 + LoopMerge 661 662 None + Branch 665 + 665: Label + 667: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 668: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 656 656 12 12 + 666: 98(int) Load 654(i) + 669: 141(bool) SLessThan 666 397 + BranchConditional 669 660 661 + 660: Label + 675: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 676: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 673 673 12 12 + 674: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 671 670(L) 49 + 677: 98(int) Load 654(i) + 680: 678(ptr) AccessChain 435(ubo) 294 677 108 + 681: 19(fvec4) Load 680 + 682: 74(fvec3) VectorShuffle 681 681 0 1 2 + 683: 74(fvec3) Load 481(fragPos) + 684: 74(fvec3) FSub 682 683 + Store 670(L) 684 + 689: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 687 687 12 12 + 688: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 686 685(dist) 49 + 690: 74(fvec3) Load 670(L) + 691: 16(float) ExtInst 3(GLSL.std.450) 66(Length) 690 + Store 685(dist) 691 + 693: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 694 694 12 12 + 692: 74(fvec3) Load 670(L) + 695: 74(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 692 + Store 670(L) 695 + 701: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 699 699 12 12 + 700: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 697 696(V) 49 + 702: 678(ptr) AccessChain 435(ubo) 108 + 703: 19(fvec4) Load 702 + 704: 74(fvec3) VectorShuffle 703 703 0 1 2 + 705: 74(fvec3) Load 481(fragPos) + 706: 74(fvec3) FSub 704 705 + Store 696(V) 706 + 708: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 709 709 12 12 + 707: 74(fvec3) Load 696(V) + 710: 74(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 707 + Store 696(V) 710 + 716: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 714 714 12 12 + 715: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 712 711(lightCosInnerAngle) 49 + Store 711(lightCosInnerAngle) 717 + 723: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 721 721 12 12 + 722: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 719 718(lightCosOuterAngle) 49 + Store 718(lightCosOuterAngle) 724 + 730: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 728 728 12 12 + 729: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 726 725(lightRange) 49 + Store 725(lightRange) 731 + 737: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 735 735 12 12 + 736: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 733 732(dir) 49 + 738: 98(int) Load 654(i) + 739: 678(ptr) AccessChain 435(ubo) 294 738 108 + 740: 19(fvec4) Load 739 + 741: 74(fvec3) VectorShuffle 740 740 0 1 2 + 742: 98(int) Load 654(i) + 743: 678(ptr) AccessChain 435(ubo) 294 742 294 + 744: 19(fvec4) Load 743 + 745: 74(fvec3) VectorShuffle 744 744 0 1 2 + 746: 74(fvec3) FSub 741 745 + 747: 74(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 746 + Store 732(dir) 747 + 753: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 751 751 12 12 + 752: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 749 748(cosDir) 49 + 754: 74(fvec3) Load 670(L) + 755: 74(fvec3) Load 732(dir) + 756: 16(float) Dot 754 755 + Store 748(cosDir) 756 + 762: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 760 760 12 12 + 761: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 758 757(spotEffect) 49 + 763: 16(float) Load 718(lightCosOuterAngle) + 764: 16(float) Load 711(lightCosInnerAngle) + 765: 16(float) Load 748(cosDir) + 766: 16(float) ExtInst 3(GLSL.std.450) 49(SmoothStep) 763 764 765 + Store 757(spotEffect) 766 + 772: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 770 770 12 12 + 771: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 768 767(heightAttenuation) 49 + 773: 16(float) Load 725(lightRange) + 774: 16(float) Load 685(dist) + 775: 16(float) ExtInst 3(GLSL.std.450) 49(SmoothStep) 773 198 774 + Store 767(heightAttenuation) 775 + 781: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 779 779 12 12 + 780: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 777 776(NdotL) 49 + 782: 74(fvec3) Load 646(N) + 783: 74(fvec3) Load 670(L) + 784: 16(float) Dot 782 783 + 785: 16(float) ExtInst 3(GLSL.std.450) 40(FMax) 198 784 + Store 776(NdotL) 785 + 791: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 789 789 12 12 + 790: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 787 786(diff) 49 + 792: 16(float) Load 776(NdotL) + 793: 74(fvec3) CompositeConstruct 792 792 792 + Store 786(diff) 793 + 799: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 797 797 12 12 + 798: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 795 794(R) 49 + 800: 74(fvec3) Load 670(L) + 801: 74(fvec3) FNegate 800 + 802: 74(fvec3) Load 646(N) + 803: 74(fvec3) ExtInst 3(GLSL.std.450) 71(Reflect) 801 802 + Store 794(R) 803 + 809: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 807 807 12 12 + 808: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 805 804(NdotR) 49 + 810: 74(fvec3) Load 794(R) + 811: 74(fvec3) Load 696(V) + 812: 16(float) Dot 810 811 + 813: 16(float) ExtInst 3(GLSL.std.450) 40(FMax) 198 812 + Store 804(NdotR) 813 + 819: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 817 817 12 12 + 818: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 815 814(spec) 49 + 820: 16(float) Load 804(NdotR) + 822: 16(float) ExtInst 3(GLSL.std.450) 26(Pow) 820 821 + 823: 25(ptr) AccessChain 518(albedo) 13 + 824: 16(float) Load 823 + 825: 16(float) FMul 822 824 + 827: 16(float) FMul 825 826 + 828: 74(fvec3) CompositeConstruct 827 827 827 + Store 814(spec) 828 + 830: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 831 831 12 12 + 829: 74(fvec3) Load 786(diff) + 832: 74(fvec3) Load 814(spec) + 833: 74(fvec3) FAdd 829 832 + 834: 16(float) Load 757(spotEffect) + 835: 74(fvec3) VectorTimesScalar 833 834 + 836: 16(float) Load 767(heightAttenuation) + 837: 74(fvec3) VectorTimesScalar 835 836 + 838: 98(int) Load 654(i) + 840: 678(ptr) AccessChain 435(ubo) 294 838 839 + 841: 19(fvec4) Load 840 + 842: 74(fvec3) VectorShuffle 841 841 0 1 2 + 843: 74(fvec3) FMul 837 842 + 844: 19(fvec4) Load 518(albedo) + 845: 74(fvec3) VectorShuffle 844 844 0 1 2 + 846: 74(fvec3) FMul 843 845 + 847: 74(fvec3) Load 636(fragcolor) + 848: 74(fvec3) FAdd 847 846 + Store 636(fragcolor) 848 + Branch 662 + 662: Label + 850: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 851: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 656 656 12 12 + 849: 98(int) Load 654(i) + 852: 98(int) IAdd 849 294 + Store 654(i) 852 + Branch 659 + 661: Label + 854: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 855: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 856 856 12 12 + 853: 530(ptr) AccessChain 435(ubo) 839 + 857: 98(int) Load 853 + 858: 141(bool) SGreaterThan 857 108 + SelectionMerge 860 None + BranchConditional 858 859 860 + 859: Label + 863: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 864: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 865 865 12 12 + 862: 74(fvec3) Load 636(fragcolor) + Store 861(param) 862 + 867: 74(fvec3) Load 481(fragPos) + Store 866(param) 867 + 868: 74(fvec3) FunctionCall 82(shadow(vf3;vf3;) 861(param) 866(param) + Store 636(fragcolor) 868 + Branch 860 + 860: Label + 870: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96 + 871: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 872 872 12 12 + 869: 74(fvec3) Load 636(fragcolor) + 873: 16(float) CompositeExtract 869 0 + 874: 16(float) CompositeExtract 869 1 + 875: 16(float) CompositeExtract 869 2 + 876: 19(fvec4) CompositeConstruct 873 874 875 117 + Store 552(outFragColor) 876 + 877: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 878 878 12 12 + Return + FunctionEnd +37(textureProj(vf4;f1;vf2;): 16(float) Function None 32 + 34(P): 22(ptr) FunctionParameter + 35(layer): 25(ptr) FunctionParameter + 36(offset): 30(ptr) FunctionParameter + 38: Label + 112(shadow): 25(ptr) Variable Function +118(shadowCoord): 22(ptr) Variable Function + 162(dist): 25(ptr) Variable Function + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40 + 51: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 43 43 12 12 + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 46 34(P) 49 + 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 35(layer) 49 + 57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 55 36(offset) 49 + 111: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 40 37(textureProj(vf4;f1;vf2;) + 116: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 114 114 12 12 + 115: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 113 112(shadow) 49 + Store 112(shadow) 117 + 123: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 121 121 12 12 + 122: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 119 118(shadowCoord) 49 + 124: 19(fvec4) Load 34(P) + 125: 25(ptr) AccessChain 34(P) 13 + 126: 16(float) Load 125 + 127: 19(fvec4) CompositeConstruct 126 126 126 126 + 128: 19(fvec4) FDiv 124 127 + Store 118(shadowCoord) 128 + 130: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 131 131 12 12 + 129: 19(fvec4) Load 118(shadowCoord) + 132: 27(fvec2) VectorShuffle 129 129 0 1 + 134: 27(fvec2) VectorTimesScalar 132 133 + 135: 27(fvec2) CompositeConstruct 133 133 + 136: 27(fvec2) FAdd 134 135 + 137: 25(ptr) AccessChain 118(shadowCoord) 12 + 138: 16(float) CompositeExtract 136 0 + Store 137 138 + 139: 25(ptr) AccessChain 118(shadowCoord) 45 + 140: 16(float) CompositeExtract 136 1 + Store 139 140 + 145: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 146 146 12 12 + 144: 25(ptr) AccessChain 118(shadowCoord) 28 + 147: 16(float) Load 144 + 149: 141(bool) FOrdGreaterThan 147 148 + SelectionMerge 151 None + BranchConditional 149 150 151 + 150: Label + 153: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40 + 154: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 146 146 12 12 + 152: 25(ptr) AccessChain 118(shadowCoord) 28 + 155: 16(float) Load 152 + 156: 141(bool) FOrdLessThan 155 117 + Branch 151 + 151: Label + 157: 141(bool) Phi 149 38 156 150 + 160: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40 + 161: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 146 146 12 12 + SelectionMerge 159 None + BranchConditional 157 158 159 + 158: Label + 167: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40 + 168: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 165 165 12 12 + 166: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 163 162(dist) 49 + 183: 174 Load 180(samplerShadowMap) + 184: 19(fvec4) Load 118(shadowCoord) + 185: 27(fvec2) VectorShuffle 184 184 0 1 + 186: 27(fvec2) Load 36(offset) + 187: 27(fvec2) FAdd 185 186 + 188: 16(float) Load 35(layer) + 189: 16(float) CompositeExtract 187 0 + 190: 16(float) CompositeExtract 187 1 + 191: 74(fvec3) CompositeConstruct 189 190 188 + 192: 19(fvec4) ImageSampleImplicitLod 183 191 + 193: 16(float) CompositeExtract 192 0 + Store 162(dist) 193 + 195: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 196 196 12 12 + 194: 25(ptr) AccessChain 118(shadowCoord) 13 + 197: 16(float) Load 194 + 199: 141(bool) FOrdGreaterThan 197 198 + SelectionMerge 201 None + BranchConditional 199 200 201 + 200: Label + 203: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40 + 204: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 196 196 12 12 + 202: 16(float) Load 162(dist) + 205: 25(ptr) AccessChain 118(shadowCoord) 28 + 206: 16(float) Load 205 + 207: 141(bool) FOrdLessThan 202 206 + Branch 201 + 201: Label + 208: 141(bool) Phi 199 158 207 200 + 211: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40 + 212: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 196 196 12 12 + SelectionMerge 210 None + BranchConditional 208 209 210 + 209: Label + 214: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40 + 215: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 216 216 12 12 + Store 112(shadow) 213 + Branch 210 + 210: Label + Branch 159 + 159: Label + 218: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40 + 219: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 220 220 12 12 + 217: 16(float) Load 112(shadow) + ReturnValue 217 + FunctionEnd +62(filterPCF(vf4;f1;): 16(float) Function None 58 + 60(sc): 22(ptr) FunctionParameter + 61(layer): 25(ptr) FunctionParameter + 63: Label + 231(texDim): 229(ptr) Variable Function + 243(scale): 25(ptr) Variable Function + 250(dx): 25(ptr) Variable Function + 264(dy): 25(ptr) Variable Function +276(shadowFactor): 25(ptr) Variable Function + 282(count): 258(ptr) Variable Function + 288(range): 258(ptr) Variable Function + 295(x): 258(ptr) Variable Function + 315(y): 258(ptr) Variable Function + 348(param): 22(ptr) Variable Function + 350(param): 25(ptr) Variable Function + 352(param): 30(ptr) Variable Function + 70: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 66 66 12 12 + 69: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 67 60(sc) 49 + 73: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 72 61(layer) 49 + 226: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 65 62(filterPCF(vf4;f1;) + 236: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 234 234 12 12 + 235: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 232 231(texDim) 49 + 237: 174 Load 180(samplerShadowMap) + 238: 169 Image 237 + 241: 239(ivec3) ImageQuerySizeLod 238 108 + 242: 227(ivec2) VectorShuffle 241 241 0 1 + Store 231(texDim) 242 + 248: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 246 246 12 12 + 247: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 244 243(scale) 49 + Store 243(scale) 249 + 255: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 253 253 12 12 + 254: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 251 250(dx) 49 + 256: 16(float) Load 243(scale) + 257: 16(float) FMul 256 117 + 260: 258(ptr) AccessChain 231(texDim) 12 + 261: 98(int) Load 260 + 262: 16(float) ConvertSToF 261 + 263: 16(float) FDiv 257 262 + Store 250(dx) 263 + 269: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 267 267 12 12 + 268: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 265 264(dy) 49 + 270: 16(float) Load 243(scale) + 271: 16(float) FMul 270 117 + 272: 258(ptr) AccessChain 231(texDim) 45 + 273: 98(int) Load 272 + 274: 16(float) ConvertSToF 273 + 275: 16(float) FDiv 271 274 + Store 264(dy) 275 + 281: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 279 279 12 12 + 280: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 277 276(shadowFactor) 49 + Store 276(shadowFactor) 198 + 287: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 285 285 12 12 + 286: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 283 282(count) 49 + Store 282(count) 108 + 293: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 291 291 12 12 + 292: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 289 288(range) 49 + Store 288(range) 294 + 300: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 298 298 12 12 + 299: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 296 295(x) 49 + 301: 98(int) Load 288(range) + 302: 98(int) SNegate 301 + Store 295(x) 302 + Branch 303 + 303: Label + 307: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 308: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 298 298 12 12 + LoopMerge 305 306 None + Branch 309 + 309: Label + 311: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 312: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 298 298 12 12 + 310: 98(int) Load 295(x) + 313: 98(int) Load 288(range) + 314: 141(bool) SLessThanEqual 310 313 + BranchConditional 314 304 305 + 304: Label + 320: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 321: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 318 318 12 12 + 319: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 316 315(y) 49 + 322: 98(int) Load 288(range) + 323: 98(int) SNegate 322 + Store 315(y) 323 + Branch 324 + 324: Label + 328: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 329: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 318 318 12 12 + LoopMerge 326 327 None + Branch 330 + 330: Label + 332: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 333: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 318 318 12 12 + 331: 98(int) Load 315(y) + 334: 98(int) Load 288(range) + 335: 141(bool) SLessThanEqual 331 334 + BranchConditional 335 325 326 + 325: Label + 337: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 338: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 339 339 12 12 + 336: 16(float) Load 250(dx) + 340: 98(int) Load 295(x) + 341: 16(float) ConvertSToF 340 + 342: 16(float) FMul 336 341 + 343: 16(float) Load 264(dy) + 344: 98(int) Load 315(y) + 345: 16(float) ConvertSToF 344 + 346: 16(float) FMul 343 345 + 347: 27(fvec2) CompositeConstruct 342 346 + 349: 19(fvec4) Load 60(sc) + Store 348(param) 349 + 351: 16(float) Load 61(layer) + Store 350(param) 351 + Store 352(param) 347 + 353: 16(float) FunctionCall 37(textureProj(vf4;f1;vf2;) 348(param) 350(param) 352(param) + 354: 16(float) Load 276(shadowFactor) + 355: 16(float) FAdd 354 353 + Store 276(shadowFactor) 355 + 357: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 358 358 12 12 + 356: 98(int) Load 282(count) + 359: 98(int) IAdd 356 294 + Store 282(count) 359 + Branch 327 + 327: Label + 361: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 362: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 318 318 12 12 + 360: 98(int) Load 315(y) + 363: 98(int) IAdd 360 294 + Store 315(y) 363 + Branch 324 + 326: Label + Branch 306 + 306: Label + 365: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 366: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 298 298 12 12 + 364: 98(int) Load 295(x) + 367: 98(int) IAdd 364 294 + Store 295(x) 367 + Branch 303 + 305: Label + 369: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 370: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 371 371 12 12 + 368: 16(float) Load 276(shadowFactor) + 372: 98(int) Load 282(count) + 373: 16(float) ConvertSToF 372 + 374: 16(float) FDiv 368 373 + ReturnValue 374 + FunctionEnd +82(shadow(vf3;vf3;): 74(fvec3) Function None 78 + 80(fragcolor): 76(ptr) FunctionParameter + 81(fragpos): 76(ptr) FunctionParameter + 83: Label + 381(i): 258(ptr) Variable Function + 399(shadowClip): 22(ptr) Variable Function +449(shadowFactor): 25(ptr) Variable Function + 456(param): 22(ptr) Variable Function + 458(param): 25(ptr) Variable Function + 90: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 86 86 12 12 + 89: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 87 80(fragcolor) 49 + 94: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 92 81(fragpos) 49 + 380: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 85 82(shadow(vf3;vf3;) + 386: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 384 384 12 12 + 385: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 382 381(i) 49 + Store 381(i) 108 + Branch 387 + 387: Label + 391: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 392: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 384 384 12 12 + LoopMerge 389 390 None + Branch 393 + 393: Label + 395: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 396: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 384 384 12 12 + 394: 98(int) Load 381(i) + 398: 141(bool) SLessThan 394 397 + BranchConditional 398 388 389 + 388: Label + 404: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 405: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 402 402 12 12 + 403: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 400 399(shadowClip) 49 + 438: 98(int) Load 381(i) + 441: 439(ptr) AccessChain 435(ubo) 294 438 397 + 442: 406 Load 441 + 443: 74(fvec3) Load 81(fragpos) + 444: 16(float) CompositeExtract 443 0 + 445: 16(float) CompositeExtract 443 1 + 446: 16(float) CompositeExtract 443 2 + 447: 19(fvec4) CompositeConstruct 444 445 446 117 + 448: 19(fvec4) MatrixTimesVector 442 447 + Store 399(shadowClip) 448 + 453: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 451 451 12 12 + 452: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 450 449(shadowFactor) 49 + 454: 98(int) Load 381(i) + 455: 16(float) ConvertSToF 454 + 457: 19(fvec4) Load 399(shadowClip) + Store 456(param) 457 + Store 458(param) 455 + 459: 16(float) FunctionCall 62(filterPCF(vf4;f1;) 456(param) 458(param) + Store 449(shadowFactor) 459 + 461: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 462 462 12 12 + 460: 16(float) Load 449(shadowFactor) + 463: 74(fvec3) Load 80(fragcolor) + 464: 74(fvec3) VectorTimesScalar 463 460 + Store 80(fragcolor) 464 + Branch 390 + 390: Label + 466: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 467: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 384 384 12 12 + 465: 98(int) Load 381(i) + 468: 98(int) IAdd 465 294 + Store 381(i) 468 + Branch 387 + 389: Label + 470: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 471: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 472 472 12 12 + 469: 74(fvec3) Load 80(fragcolor) + ReturnValue 469 + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.glsl.geom.out b/Test/baseResults/spv.debuginfo.glsl.geom.out new file mode 100644 index 0000000000..0f8ceab639 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.glsl.geom.out @@ -0,0 +1,452 @@ +spv.debuginfo.glsl.geom +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 276 + + Capability Geometry + Capability MultiViewport + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 14 "main" 64 98 121 130 134 168 208 217 236 250 256 260 + ExecutionMode 14 Triangles + ExecutionMode 14 Invocations 2 + ExecutionMode 14 OutputTriangleStrip + ExecutionMode 14 OutputVertices 3 + 2: String "spv.debuginfo.glsl.geom" + 8: String "uint" + 16: String "main" + 19: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +#extension GL_ARB_viewport_array : enable + +layout (triangles, invocations = 2) in; +layout (triangle_strip, max_vertices = 3) out; + +layout (binding = 0) uniform UBO +{ + mat4 projection[2]; + mat4 modelview[2]; + vec4 lightPos; +} ubo; + +layout (location = 0) in vec3 inNormal[]; +layout (location = 1) in vec3 inColor[]; + +layout (location = 0) out vec3 outNormal; +layout (location = 1) out vec3 outColor; +layout (location = 2) out vec3 outViewVec; +layout (location = 3) out vec3 outLightVec; + +void main(void) +{ + for(int i = 0; i < gl_in.length(); i++) + { + outNormal = mat3(ubo.modelview[gl_InvocationID]) * inNormal[i]; + outColor = inColor[i]; + + vec4 pos = gl_in[i].gl_Position; + vec4 worldPos = (ubo.modelview[gl_InvocationID] * pos); + + vec3 lPos = vec3(ubo.modelview[gl_InvocationID] * ubo.lightPos); + outLightVec = lPos - worldPos.xyz; + outViewVec = -worldPos.xyz; + + gl_Position = ubo.projection[gl_InvocationID] * worldPos; + + // Set the viewport index that the vertex will be emitted to + gl_ViewportIndex = gl_InvocationID; + gl_PrimitiveID = gl_PrimitiveIDIn; + EmitVertex(); + } + EndPrimitive(); +} +" + 29: String "int" + 36: String "i" + 54: String "bool" + 58: String "float" + 66: String "outNormal" + 80: String "projection" + 83: String "modelview" + 86: String "lightPos" + 89: String "UBO" + 94: String "ubo" + 100: String "gl_InvocationID" + 123: String "inNormal" + 132: String "outColor" + 136: String "inColor" + 145: String "pos" + 153: String "gl_Position" + 156: String "gl_PointSize" + 159: String "gl_CullDistance" + 163: String "gl_PerVertex" + 170: String "gl_in" + 178: String "worldPos" + 191: String "lPos" + 210: String "outLightVec" + 219: String "outViewVec" + 238: String "" + 252: String "gl_ViewportIndex" + 258: String "gl_PrimitiveID" + 262: String "gl_PrimitiveIDIn" + SourceExtension "GL_ARB_viewport_array" + Name 14 "main" + Name 34 "i" + Name 64 "outNormal" + Name 78 "UBO" + MemberName 78(UBO) 0 "projection" + MemberName 78(UBO) 1 "modelview" + MemberName 78(UBO) 2 "lightPos" + Name 92 "ubo" + Name 98 "gl_InvocationID" + Name 121 "inNormal" + Name 130 "outColor" + Name 134 "inColor" + Name 143 "pos" + Name 151 "gl_PerVertex" + MemberName 151(gl_PerVertex) 0 "gl_Position" + MemberName 151(gl_PerVertex) 1 "gl_PointSize" + MemberName 151(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 151(gl_PerVertex) 3 "gl_CullDistance" + Name 168 "gl_in" + Name 176 "worldPos" + Name 189 "lPos" + Name 208 "outLightVec" + Name 217 "outViewVec" + Name 225 "gl_PerVertex" + MemberName 225(gl_PerVertex) 0 "gl_Position" + MemberName 225(gl_PerVertex) 1 "gl_PointSize" + MemberName 225(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 225(gl_PerVertex) 3 "gl_CullDistance" + Name 236 "" + Name 250 "gl_ViewportIndex" + Name 256 "gl_PrimitiveID" + Name 260 "gl_PrimitiveIDIn" + Decorate 64(outNormal) Location 0 + Decorate 74 ArrayStride 64 + Decorate 76 ArrayStride 64 + Decorate 78(UBO) Block + MemberDecorate 78(UBO) 0 ColMajor + MemberDecorate 78(UBO) 0 MatrixStride 16 + MemberDecorate 78(UBO) 0 Offset 0 + MemberDecorate 78(UBO) 1 ColMajor + MemberDecorate 78(UBO) 1 MatrixStride 16 + MemberDecorate 78(UBO) 1 Offset 128 + MemberDecorate 78(UBO) 2 Offset 256 + Decorate 92(ubo) Binding 0 + Decorate 92(ubo) DescriptorSet 0 + Decorate 98(gl_InvocationID) BuiltIn InvocationId + Decorate 121(inNormal) Location 0 + Decorate 130(outColor) Location 1 + Decorate 134(inColor) Location 1 + Decorate 151(gl_PerVertex) Block + MemberDecorate 151(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 151(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 151(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 151(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 208(outLightVec) Location 3 + Decorate 217(outViewVec) Location 2 + Decorate 225(gl_PerVertex) Block + MemberDecorate 225(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 225(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 225(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 225(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 250(gl_ViewportIndex) BuiltIn ViewportIndex + Decorate 256(gl_PrimitiveID) BuiltIn PrimitiveId + Decorate 260(gl_PrimitiveIDIn) BuiltIn PrimitiveId + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19 + 20: 7(int) Constant 47 + 22: 7(int) Constant 1 + 23: 7(int) Constant 4 + 24: 7(int) Constant 2 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24 + 17: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20 + 28: TypeInt 32 1 + 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 23 12 + 31: TypePointer Function 28(int) + 32: 7(int) Constant 7 + 33: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 32 12 + 37: 7(int) Constant 49 + 35: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 36 30 18 37 12 17 23 + 39: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 41: 28(int) Constant 0 + 52: 28(int) Constant 3 + 53: TypeBool + 55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 54 10 24 12 + 57: TypeFloat 32 + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 58 10 13 12 + 60: TypeVector 57(float) 3 + 61: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 59 13 + 62: TypePointer Output 60(fvec3) + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 61 13 12 + 64(outNormal): 62(ptr) Variable Output + 67: 7(int) Constant 51 + 68: 7(int) Constant 8 + 65: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 66 61 18 67 12 21 66 64(outNormal) 68 + 69: TypeVector 57(float) 4 + 70: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 59 23 + 71: TypeMatrix 69(fvec4) 4 + 73: 53(bool) ConstantTrue + 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 70 23 73 + 74: TypeArray 71 24 + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 72 24 + 76: TypeArray 71 24 + 77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 72 24 + 78(UBO): TypeStruct 74 76 69(fvec4) + 81: 7(int) Constant 34 + 79: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 75 18 81 32 12 12 13 + 84: 7(int) Constant 35 + 82: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 83 77 18 84 32 12 12 13 + 87: 7(int) Constant 36 + 85: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 86 70 18 87 32 12 12 13 + 88: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 89 22 18 67 12 21 89 12 13 79 82 85 + 90: TypePointer Uniform 78(UBO) + 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 88 24 12 + 92(ubo): 90(ptr) Variable Uniform + 93: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 94 88 18 67 12 21 94 92(ubo) 68 + 95: 28(int) Constant 1 + 96: TypePointer Input 28(int) + 97: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 22 12 +98(gl_InvocationID): 96(ptr) Variable Input + 99: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 100 30 18 67 12 21 100 98(gl_InvocationID) 68 + 104: TypePointer Uniform 71 + 105: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 72 24 12 + 108: TypeMatrix 60(fvec3) 3 + 109: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 61 13 73 + 117: TypeArray 60(fvec3) 13 + 118: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 61 13 + 119: TypePointer Input 117 + 120: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 118 22 12 + 121(inNormal): 119(ptr) Variable Input + 122: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 123 118 18 67 12 21 123 121(inNormal) 68 + 125: TypePointer Input 60(fvec3) + 126: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 61 22 12 + 130(outColor): 62(ptr) Variable Output + 133: 7(int) Constant 52 + 131: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 132 61 18 133 12 21 132 130(outColor) 68 + 134(inColor): 119(ptr) Variable Input + 135: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 136 118 18 133 12 21 136 134(inColor) 68 + 141: TypePointer Function 69(fvec4) + 142: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 70 32 12 + 146: 7(int) Constant 54 + 144: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 145 70 18 146 12 17 23 + 149: TypeArray 57(float) 22 + 150: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 59 22 +151(gl_PerVertex): TypeStruct 69(fvec4) 57(float) 149 149 + 154: 7(int) Constant 23 + 152: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 153 70 18 24 154 12 12 13 + 157: 7(int) Constant 41 + 155: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 156 59 18 24 157 12 12 13 + 160: 7(int) Constant 84 + 158: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 159 150 18 24 160 12 12 13 + 161: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 159 150 18 24 160 12 12 13 + 162: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 163 22 18 146 12 21 163 12 13 152 155 158 161 + 164: TypeArray 151(gl_PerVertex) 13 + 165: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 162 13 + 166: TypePointer Input 164 + 167: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 165 22 12 + 168(gl_in): 166(ptr) Variable Input + 169: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 170 165 18 146 12 21 170 168(gl_in) 68 + 172: TypePointer Input 69(fvec4) + 173: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 70 22 12 + 179: 7(int) Constant 55 + 177: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 178 70 18 179 12 17 23 + 187: TypePointer Function 60(fvec3) + 188: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 61 32 12 + 192: 7(int) Constant 57 + 190: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 191 61 18 192 12 17 23 + 198: 28(int) Constant 2 + 199: TypePointer Uniform 69(fvec4) + 200: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 70 24 12 +208(outLightVec): 62(ptr) Variable Output + 211: 7(int) Constant 58 + 209: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 210 61 18 211 12 21 210 208(outLightVec) 68 + 217(outViewVec): 62(ptr) Variable Output + 220: 7(int) Constant 59 + 218: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 219 61 18 220 12 21 219 217(outViewVec) 68 +225(gl_PerVertex): TypeStruct 69(fvec4) 57(float) 149 149 + 227: 7(int) Constant 215 + 226: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 153 70 18 24 227 12 12 13 + 229: 7(int) Constant 233 + 228: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 156 59 18 24 229 12 12 13 + 230: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 159 150 18 13 32 12 12 13 + 231: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 159 150 18 13 32 12 12 13 + 233: 7(int) Constant 61 + 232: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 163 22 18 233 12 21 163 12 13 226 228 230 231 + 234: TypePointer Output 225(gl_PerVertex) + 235: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 232 13 12 + 236: 234(ptr) Variable Output + 237: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 238 232 18 233 12 21 238 236 68 + 245: TypePointer Output 69(fvec4) + 246: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 70 13 12 + 248: TypePointer Output 28(int) + 249: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 13 12 +250(gl_ViewportIndex): 248(ptr) Variable Output + 253: 7(int) Constant 64 + 251: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 252 30 18 253 12 21 252 250(gl_ViewportIndex) 68 +256(gl_PrimitiveID): 248(ptr) Variable Output + 259: 7(int) Constant 65 + 257: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 258 30 18 259 12 21 258 256(gl_PrimitiveID) 68 +260(gl_PrimitiveIDIn): 96(ptr) Variable Input + 261: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 262 30 18 259 12 21 262 260(gl_PrimitiveIDIn) 68 + 266: 7(int) Constant 66 + 273: 7(int) Constant 68 + 275: 7(int) Constant 69 + 14(main): 4 Function None 5 + 15: Label + 34(i): 31(ptr) Variable Function + 143(pos): 141(ptr) Variable Function + 176(worldPos): 141(ptr) Variable Function + 189(lPos): 187(ptr) Variable Function + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12 + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main) + 40: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 37 37 12 12 + 38: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 35 34(i) 39 + Store 34(i) 41 + Branch 42 + 42: Label + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 47: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 37 37 12 12 + LoopMerge 44 45 None + Branch 48 + 48: Label + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 51: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 37 37 12 12 + 49: 28(int) Load 34(i) + 56: 53(bool) SLessThan 49 52 + BranchConditional 56 43 44 + 43: Label + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 103: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 67 67 12 12 + 101: 28(int) Load 98(gl_InvocationID) + 106: 104(ptr) AccessChain 92(ubo) 95 101 + 107: 71 Load 106 + 110: 69(fvec4) CompositeExtract 107 0 + 111: 60(fvec3) VectorShuffle 110 110 0 1 2 + 112: 69(fvec4) CompositeExtract 107 1 + 113: 60(fvec3) VectorShuffle 112 112 0 1 2 + 114: 69(fvec4) CompositeExtract 107 2 + 115: 60(fvec3) VectorShuffle 114 114 0 1 2 + 116: 108 CompositeConstruct 111 113 115 + 124: 28(int) Load 34(i) + 127: 125(ptr) AccessChain 121(inNormal) 124 + 128: 60(fvec3) Load 127 + 129: 60(fvec3) MatrixTimesVector 116 128 + Store 64(outNormal) 129 + 138: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 133 133 12 12 + 137: 28(int) Load 34(i) + 139: 125(ptr) AccessChain 134(inColor) 137 + 140: 60(fvec3) Load 139 + Store 130(outColor) 140 + 148: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 146 146 12 12 + 147: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 144 143(pos) 39 + 171: 28(int) Load 34(i) + 174: 172(ptr) AccessChain 168(gl_in) 171 41 + 175: 69(fvec4) Load 174 + Store 143(pos) 175 + 181: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 179 179 12 12 + 180: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 177 176(worldPos) 39 + 182: 28(int) Load 98(gl_InvocationID) + 183: 104(ptr) AccessChain 92(ubo) 95 182 + 184: 71 Load 183 + 185: 69(fvec4) Load 143(pos) + 186: 69(fvec4) MatrixTimesVector 184 185 + Store 176(worldPos) 186 + 194: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 192 192 12 12 + 193: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 190 189(lPos) 39 + 195: 28(int) Load 98(gl_InvocationID) + 196: 104(ptr) AccessChain 92(ubo) 95 195 + 197: 71 Load 196 + 201: 199(ptr) AccessChain 92(ubo) 198 + 202: 69(fvec4) Load 201 + 203: 69(fvec4) MatrixTimesVector 197 202 + 204: 57(float) CompositeExtract 203 0 + 205: 57(float) CompositeExtract 203 1 + 206: 57(float) CompositeExtract 203 2 + 207: 60(fvec3) CompositeConstruct 204 205 206 + Store 189(lPos) 207 + 213: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 211 211 12 12 + 212: 60(fvec3) Load 189(lPos) + 214: 69(fvec4) Load 176(worldPos) + 215: 60(fvec3) VectorShuffle 214 214 0 1 2 + 216: 60(fvec3) FSub 212 215 + Store 208(outLightVec) 216 + 222: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 220 220 12 12 + 221: 69(fvec4) Load 176(worldPos) + 223: 60(fvec3) VectorShuffle 221 221 0 1 2 + 224: 60(fvec3) FNegate 223 + Store 217(outViewVec) 224 + 240: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 233 233 12 12 + 239: 28(int) Load 98(gl_InvocationID) + 241: 104(ptr) AccessChain 92(ubo) 41 239 + 242: 71 Load 241 + 243: 69(fvec4) Load 176(worldPos) + 244: 69(fvec4) MatrixTimesVector 242 243 + 247: 245(ptr) AccessChain 236 41 + Store 247 244 + 255: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 253 253 12 12 + 254: 28(int) Load 98(gl_InvocationID) + Store 250(gl_ViewportIndex) 254 + 264: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 259 259 12 12 + 263: 28(int) Load 260(gl_PrimitiveIDIn) + Store 256(gl_PrimitiveID) 263 + 265: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 266 266 12 12 + EmitVertex + Branch 45 + 45: Label + 268: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 269: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 37 37 12 12 + 267: 28(int) Load 34(i) + 270: 28(int) IAdd 267 95 + Store 34(i) 270 + Branch 42 + 44: Label + 271: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 272: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 273 273 12 12 + EndPrimitive + 274: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 275 275 12 12 + Return + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.glsl.tesc.out b/Test/baseResults/spv.debuginfo.glsl.tesc.out new file mode 100644 index 0000000000..e81dff1feb --- /dev/null +++ b/Test/baseResults/spv.debuginfo.glsl.tesc.out @@ -0,0 +1,875 @@ +spv.debuginfo.glsl.tesc +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 571 + + Capability Tessellation + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 14 "main" 262 267 296 385 401 516 532 542 557 + ExecutionMode 14 OutputVertices 4 + 2: String "spv.debuginfo.glsl.tesc" + 8: String "uint" + 17: String "float" + 31: String "screenSpaceTessFactor" + 34: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +layout(set = 0, binding = 0) uniform UBO +{ + mat4 projection; + mat4 modelview; + vec4 lightPos; + vec4 frustumPlanes[6]; + float displacementFactor; + float tessellationFactor; + vec2 viewportDim; + float tessellatedEdgeSize; +} ubo; + +layout(set = 0, binding = 1) uniform sampler2D samplerHeight; + +layout (vertices = 4) out; + +layout (location = 0) in vec3 inNormal[]; +layout (location = 1) in vec2 inUV[]; + +layout (location = 0) out vec3 outNormal[4]; +layout (location = 1) out vec2 outUV[4]; + +// Calculate the tessellation factor based on screen space +// dimensions of the edge +float screenSpaceTessFactor(vec4 p0, vec4 p1) +{ + // Calculate edge mid point + vec4 midPoint = 0.5 * (p0 + p1); + // Sphere radius as distance between the control points + float radius = distance(p0, p1) / 2.0; + + // View space + vec4 v0 = ubo.modelview * midPoint; + + // Project into clip space + vec4 clip0 = (ubo.projection * (v0 - vec4(radius, vec3(0.0)))); + vec4 clip1 = (ubo.projection * (v0 + vec4(radius, vec3(0.0)))); + + // Get normalized device coordinates + clip0 /= clip0.w; + clip1 /= clip1.w; + + // Convert to viewport coordinates + clip0.xy *= ubo.viewportDim; + clip1.xy *= ubo.viewportDim; + + // Return the tessellation factor based on the screen size + // given by the distance of the two edge control points in screen space + // and a reference (min.) tessellation size for the edge set by the application + return clamp(distance(clip0, clip1) / ubo.tessellatedEdgeSize * ubo.tessellationFactor, 1.0, 64.0); +} + +// Checks the current's patch visibility against the frustum using a sphere check +// Sphere radius is given by the patch size +bool frustumCheck() +{ + // Fixed radius (increase if patch size is increased in example) + const float radius = 8.0f; + vec4 pos = gl_in[gl_InvocationID].gl_Position; + pos.y -= textureLod(samplerHeight, inUV[0], 0.0).r * ubo.displacementFactor; + + // Check sphere against frustum planes + for (int i = 0; i < 6; i++) { + if (dot(pos, ubo.frustumPlanes[i]) + radius < 0.0) + { + return false; + } + } + return true; +} + +void main() +{ + if (gl_InvocationID == 0) + { + if (!frustumCheck()) + { + gl_TessLevelInner[0] = 0.0; + gl_TessLevelInner[1] = 0.0; + gl_TessLevelOuter[0] = 0.0; + gl_TessLevelOuter[1] = 0.0; + gl_TessLevelOuter[2] = 0.0; + gl_TessLevelOuter[3] = 0.0; + } + else + { + if (ubo.tessellationFactor > 0.0) + { + gl_TessLevelOuter[0] = screenSpaceTessFactor(gl_in[3].gl_Position, gl_in[0].gl_Position); + gl_TessLevelOuter[1] = screenSpaceTessFactor(gl_in[0].gl_Position, gl_in[1].gl_Position); + gl_TessLevelOuter[2] = screenSpaceTessFactor(gl_in[1].gl_Position, gl_in[2].gl_Position); + gl_TessLevelOuter[3] = screenSpaceTessFactor(gl_in[2].gl_Position, gl_in[3].gl_Position); + gl_TessLevelInner[0] = mix(gl_TessLevelOuter[0], gl_TessLevelOuter[3], 0.5); + gl_TessLevelInner[1] = mix(gl_TessLevelOuter[2], gl_TessLevelOuter[1], 0.5); + } + else + { + // Tessellation factor can be set to zero by example + // to demonstrate a simple passthrough + gl_TessLevelInner[0] = 1.0; + gl_TessLevelInner[1] = 1.0; + gl_TessLevelOuter[0] = 1.0; + gl_TessLevelOuter[1] = 1.0; + gl_TessLevelOuter[2] = 1.0; + gl_TessLevelOuter[3] = 1.0; + } + } + + } + + gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position; + outNormal[gl_InvocationID] = inNormal[gl_InvocationID]; + outUV[gl_InvocationID] = inUV[gl_InvocationID]; +} +" + 40: String "p0" + 46: String "p1" + 49: String "bool" + 55: String "frustumCheck" + 58: String "main" + 64: String "midPoint" + 77: String "radius" + 88: String "v0" + 101: String "modelview" + 105: String "lightPos" + 108: String "frustumPlanes" + 110: String "tessellatedEdgeSize" + 115: String "viewportDim" + 119: String "UBO" + 124: String "ubo" + 126: String "int" + 137: String "clip0" + 158: String "clip1" + 239: String "pos" + 247: String "gl_Position" + 250: String "gl_PointSize" + 253: String "gl_CullDistance" + 257: String "gl_PerVertex" + 264: String "gl_in" + 269: String "gl_InvocationID" + 277: String "type.2d.image" + 279: String "@type.2d.image" + 283: String "type.sampled.image" + 284: String "@type.sampled.image" + 289: String "samplerHeight" + 298: String "inUV" + 317: String "i" + 387: String "gl_TessLevelInner" + 403: String "gl_TessLevelOuter" + 518: String "gl_out" + 534: String "outNormal" + 544: String "inNormal" + 559: String "outUV" + Name 14 "main" + Name 29 "screenSpaceTessFactor(vf4;vf4;" + Name 27 "p0" + Name 28 "p1" + Name 53 "frustumCheck(" + Name 62 "midPoint" + Name 75 "radius" + Name 86 "v0" + Name 99 "UBO" + MemberName 99(UBO) 0 "projection" + MemberName 99(UBO) 1 "modelview" + MemberName 99(UBO) 2 "lightPos" + MemberName 99(UBO) 3 "frustumPlanes" + MemberName 99(UBO) 4 "displacementFactor" + MemberName 99(UBO) 5 "tessellationFactor" + MemberName 99(UBO) 6 "viewportDim" + MemberName 99(UBO) 7 "tessellatedEdgeSize" + Name 122 "ubo" + Name 135 "clip0" + Name 156 "clip1" + Name 237 "pos" + Name 245 "gl_PerVertex" + MemberName 245(gl_PerVertex) 0 "gl_Position" + MemberName 245(gl_PerVertex) 1 "gl_PointSize" + MemberName 245(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 245(gl_PerVertex) 3 "gl_CullDistance" + Name 262 "gl_in" + Name 267 "gl_InvocationID" + Name 287 "samplerHeight" + Name 296 "inUV" + Name 315 "i" + Name 385 "gl_TessLevelInner" + Name 401 "gl_TessLevelOuter" + Name 426 "param" + Name 432 "param" + Name 437 "param" + Name 442 "param" + Name 447 "param" + Name 452 "param" + Name 457 "param" + Name 462 "param" + Name 503 "gl_PerVertex" + MemberName 503(gl_PerVertex) 0 "gl_Position" + MemberName 503(gl_PerVertex) 1 "gl_PointSize" + MemberName 503(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 503(gl_PerVertex) 3 "gl_CullDistance" + Name 516 "gl_out" + Name 532 "outNormal" + Name 542 "inNormal" + Name 557 "outUV" + Decorate 95 ArrayStride 16 + Decorate 99(UBO) Block + MemberDecorate 99(UBO) 0 ColMajor + MemberDecorate 99(UBO) 0 MatrixStride 16 + MemberDecorate 99(UBO) 0 Offset 0 + MemberDecorate 99(UBO) 1 ColMajor + MemberDecorate 99(UBO) 1 MatrixStride 16 + MemberDecorate 99(UBO) 1 Offset 64 + MemberDecorate 99(UBO) 2 Offset 128 + MemberDecorate 99(UBO) 3 Offset 144 + MemberDecorate 99(UBO) 4 Offset 240 + MemberDecorate 99(UBO) 5 Offset 244 + MemberDecorate 99(UBO) 6 Offset 248 + MemberDecorate 99(UBO) 7 Offset 256 + Decorate 122(ubo) Binding 0 + Decorate 122(ubo) DescriptorSet 0 + Decorate 245(gl_PerVertex) Block + MemberDecorate 245(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 245(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 245(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 245(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 267(gl_InvocationID) BuiltIn InvocationId + Decorate 287(samplerHeight) Binding 1 + Decorate 287(samplerHeight) DescriptorSet 0 + Decorate 296(inUV) Location 1 + Decorate 385(gl_TessLevelInner) BuiltIn TessLevelInner + Decorate 385(gl_TessLevelInner) Patch + Decorate 401(gl_TessLevelOuter) BuiltIn TessLevelOuter + Decorate 401(gl_TessLevelOuter) Patch + Decorate 503(gl_PerVertex) Block + MemberDecorate 503(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 503(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 503(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 503(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 532(outNormal) Location 0 + Decorate 542(inNormal) Location 0 + Decorate 557(outUV) Location 1 + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 16: TypeFloat 32 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 17 10 13 12 + 19: TypeVector 16(float) 4 + 20: 7(int) Constant 4 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 20 + 22: TypePointer Function 19(fvec4) + 23: 7(int) Constant 7 + 24: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 23 12 + 25: TypeFunction 16(float) 22(ptr) 22(ptr) + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 18 21 21 + 33: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 34 + 35: 7(int) Constant 51 + 37: 7(int) Constant 1 + 38: 7(int) Constant 2 + 36: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 37 20 33 38 + 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 31 26 33 35 12 36 31 13 35 + 39: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 40 21 33 35 12 32 20 37 + 42: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 46 21 33 35 12 32 20 38 + 48: TypeBool + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 10 38 12 + 51: TypeFunction 48(bool) + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 50 + 57: 7(int) Constant 81 + 56: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 55 52 33 57 12 36 55 13 57 + 60: 7(int) Constant 98 + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 58 6 33 60 12 36 58 13 60 + 65: 7(int) Constant 54 + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 64 21 33 65 12 32 20 + 68: 16(float) Constant 1056964608 + 73: TypePointer Function 16(float) + 74: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 23 12 + 78: 7(int) Constant 56 + 76: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 77 18 33 78 12 32 20 + 84: 16(float) Constant 1073741824 + 89: 7(int) Constant 59 + 87: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 88 21 33 89 12 32 20 + 92: TypeMatrix 19(fvec4) 4 + 94: 48(bool) ConstantTrue + 93: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 21 20 94 + 95: TypeArray 19(fvec4) 11 + 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 21 11 + 97: TypeVector 16(float) 2 + 98: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 38 + 99(UBO): TypeStruct 92 92 19(fvec4) 95 16(float) 16(float) 97(fvec2) 16(float) + 102: 7(int) Constant 30 + 100: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 101 93 33 102 23 12 12 13 + 103: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 101 93 33 102 23 12 12 13 + 106: 7(int) Constant 31 + 104: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 105 21 33 106 23 12 12 13 + 107: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 108 96 33 10 23 12 12 13 + 111: 7(int) Constant 36 + 112: 7(int) Constant 8 + 109: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 110 18 33 111 112 12 12 13 + 113: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 110 18 33 111 112 12 12 13 + 116: 7(int) Constant 35 + 114: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 115 98 33 116 23 12 12 13 + 117: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 110 18 33 111 112 12 12 13 + 118: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 119 37 33 89 12 36 119 12 13 100 103 104 107 109 113 114 117 + 120: TypePointer Uniform 99(UBO) + 121: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 118 38 12 + 122(ubo): 120(ptr) Variable Uniform + 123: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 124 118 33 89 12 36 124 122(ubo) 112 + 125: TypeInt 32 1 + 127: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 126 10 20 12 + 128: 125(int) Constant 1 + 129: TypePointer Uniform 92 + 130: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 93 38 12 + 138: 7(int) Constant 62 + 136: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 137 21 33 138 12 32 20 + 141: 125(int) Constant 0 + 146: TypeVector 16(float) 3 + 147: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 13 + 148: 16(float) Constant 0 + 149: 146(fvec3) ConstantComposite 148 148 148 + 159: 7(int) Constant 63 + 157: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 158 21 33 159 12 32 20 + 174: 7(int) Constant 66 + 181: 7(int) Constant 67 + 186: 125(int) Constant 6 + 187: TypePointer Uniform 97(fvec2) + 188: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 98 38 12 + 191: 7(int) Constant 70 + 202: 7(int) Constant 71 + 213: 7(int) Constant 76 + 216: 125(int) Constant 7 + 217: TypePointer Uniform 16(float) + 218: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 38 12 + 222: 125(int) Constant 5 + 226: 16(float) Constant 1065353216 + 227: 16(float) Constant 1115684864 + 233: 7(int) Constant 77 + 240: 7(int) Constant 85 + 238: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 239 21 33 240 12 56 20 + 243: TypeArray 16(float) 37 + 244: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 18 37 +245(gl_PerVertex): TypeStruct 19(fvec4) 16(float) 243 243 + 248: 7(int) Constant 1756 + 246: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 247 21 33 37 248 12 12 13 + 251: 7(int) Constant 1774 + 249: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 250 18 33 37 251 12 12 13 + 254: 7(int) Constant 1817 + 252: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 33 37 254 12 12 13 + 255: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 33 37 254 12 12 13 + 256: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 257 37 33 240 12 36 257 12 13 246 249 252 255 + 258: TypeArray 245(gl_PerVertex) 10 + 259: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 256 10 + 260: TypePointer Input 258 + 261: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 259 37 12 + 262(gl_in): 260(ptr) Variable Input + 263: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 264 259 33 240 12 36 264 262(gl_in) 112 + 265: TypePointer Input 125(int) + 266: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 127 37 12 +267(gl_InvocationID): 265(ptr) Variable Input + 268: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 269 127 33 240 12 36 269 267(gl_InvocationID) 112 + 271: TypePointer Input 19(fvec4) + 272: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 37 12 + 275: TypeImage 16(float) 2D sampled format:Unknown + 278: 7(int) Constant 86 + 280: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone) + 276: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 277 12 33 278 12 36 279 280 13 + 281: TypeSampledImage 275 + 282: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 283 12 33 278 12 36 284 280 13 + 285: TypePointer UniformConstant 281 + 286: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 282 12 12 +287(samplerHeight): 285(ptr) Variable UniformConstant + 288: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 289 282 33 278 12 36 289 287(samplerHeight) 112 + 292: TypeArray 97(fvec2) 10 + 293: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 98 10 + 294: TypePointer Input 292 + 295: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 293 37 12 + 296(inUV): 294(ptr) Variable Input + 297: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 298 293 33 278 12 36 298 296(inUV) 112 + 299: TypePointer Input 97(fvec2) + 300: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 98 37 12 + 305: 125(int) Constant 4 + 313: TypePointer Function 125(int) + 314: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 127 23 12 + 318: 7(int) Constant 89 + 316: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 317 127 33 318 12 56 20 + 335: 7(int) Constant 90 + 336: 125(int) Constant 3 + 338: TypePointer Uniform 19(fvec4) + 339: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 38 12 + 343: 16(float) Constant 1090519040 + 348: 48(bool) ConstantFalse + 351: 7(int) Constant 92 + 359: 7(int) Constant 95 + 364: 7(int) Constant 96 + 370: 7(int) Constant 100 + 377: 7(int) Constant 102 + 381: TypeArray 16(float) 38 + 382: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 18 38 + 383: TypePointer Output 381 + 384: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 382 13 12 +385(gl_TessLevelInner): 383(ptr) Variable Output + 388: 7(int) Constant 104 + 386: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 387 382 33 388 12 36 387 385(gl_TessLevelInner) 112 + 389: TypePointer Output 16(float) + 390: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 13 12 + 396: 7(int) Constant 105 + 397: TypeArray 16(float) 20 + 398: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 18 20 + 399: TypePointer Output 397 + 400: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 398 13 12 +401(gl_TessLevelOuter): 399(ptr) Variable Output + 404: 7(int) Constant 106 + 402: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 403 398 33 404 12 36 403 401(gl_TessLevelOuter) 112 + 409: 7(int) Constant 107 + 410: 125(int) Constant 2 + 413: 7(int) Constant 108 + 416: 7(int) Constant 109 + 421: 7(int) Constant 113 + 430: 7(int) Constant 115 + 440: 7(int) Constant 116 + 450: 7(int) Constant 117 + 460: 7(int) Constant 118 + 469: 7(int) Constant 119 + 477: 7(int) Constant 120 + 487: 7(int) Constant 126 + 490: 7(int) Constant 127 + 493: 7(int) Constant 128 + 496: 7(int) Constant 129 + 499: 7(int) Constant 130 + 502: 7(int) Constant 131 +503(gl_PerVertex): TypeStruct 19(fvec4) 16(float) 243 243 + 505: 7(int) Constant 110 + 504: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 247 21 33 37 505 12 12 13 + 506: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 250 18 33 37 493 12 12 13 + 508: 7(int) Constant 171 + 507: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 33 37 508 12 12 13 + 509: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 33 37 508 12 12 13 + 511: 7(int) Constant 137 + 510: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 257 37 33 511 12 36 257 12 13 504 506 507 509 + 512: TypeArray 503(gl_PerVertex) 20 + 513: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 510 20 + 514: TypePointer Output 512 + 515: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 513 13 12 + 516(gl_out): 514(ptr) Variable Output + 517: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 518 513 33 511 12 36 518 516(gl_out) 112 + 525: TypePointer Output 19(fvec4) + 526: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 13 12 + 528: TypeArray 146(fvec3) 20 + 529: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 147 20 + 530: TypePointer Output 528 + 531: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 529 13 12 + 532(outNormal): 530(ptr) Variable Output + 535: 7(int) Constant 138 + 533: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 534 529 33 535 12 36 534 532(outNormal) 112 + 538: TypeArray 146(fvec3) 10 + 539: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 147 10 + 540: TypePointer Input 538 + 541: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 539 37 12 + 542(inNormal): 540(ptr) Variable Input + 543: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 544 539 33 535 12 36 544 542(inNormal) 112 + 546: TypePointer Input 146(fvec3) + 547: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 147 37 12 + 550: TypePointer Output 146(fvec3) + 551: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 147 13 12 + 553: TypeArray 97(fvec2) 20 + 554: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 98 20 + 555: TypePointer Output 553 + 556: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 554 13 12 + 557(outUV): 555(ptr) Variable Output + 560: 7(int) Constant 139 + 558: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 559 554 33 560 12 36 559 557(outUV) 112 + 566: TypePointer Output 97(fvec2) + 567: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 98 13 12 + 570: 7(int) Constant 140 + 14(main): 4 Function None 5 + 15: Label + 426(param): 22(ptr) Variable Function + 432(param): 22(ptr) Variable Function + 437(param): 22(ptr) Variable Function + 442(param): 22(ptr) Variable Function + 447(param): 22(ptr) Variable Function + 452(param): 22(ptr) Variable Function + 457(param): 22(ptr) Variable Function + 462(param): 22(ptr) Variable Function + 366: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59 + 367: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 60 60 12 12 + 365: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 59 14(main) + 369: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 370 370 12 12 + 368: 125(int) Load 267(gl_InvocationID) + 371: 48(bool) IEqual 368 141 + SelectionMerge 373 None + BranchConditional 371 372 373 + 372: Label + 375: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59 + 376: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 377 377 12 12 + 374: 48(bool) FunctionCall 53(frustumCheck() + 378: 48(bool) LogicalNot 374 + SelectionMerge 380 None + BranchConditional 378 379 417 + 379: Label + 392: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59 + 393: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 388 388 12 12 + 391: 389(ptr) AccessChain 385(gl_TessLevelInner) 141 + Store 391 148 + 395: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 396 396 12 12 + 394: 389(ptr) AccessChain 385(gl_TessLevelInner) 128 + Store 394 148 + 406: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 404 404 12 12 + 405: 389(ptr) AccessChain 401(gl_TessLevelOuter) 141 + Store 405 148 + 408: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 409 409 12 12 + 407: 389(ptr) AccessChain 401(gl_TessLevelOuter) 128 + Store 407 148 + 412: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 413 413 12 12 + 411: 389(ptr) AccessChain 401(gl_TessLevelOuter) 410 + Store 411 148 + 415: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 416 416 12 12 + 414: 389(ptr) AccessChain 401(gl_TessLevelOuter) 336 + Store 414 148 + Branch 380 + 417: Label + 419: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59 + 420: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 421 421 12 12 + 418: 217(ptr) AccessChain 122(ubo) 222 + 422: 16(float) Load 418 + 423: 48(bool) FOrdGreaterThan 422 148 + SelectionMerge 425 None + BranchConditional 423 424 483 + 424: Label + 428: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59 + 429: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 430 430 12 12 + 427: 271(ptr) AccessChain 262(gl_in) 336 141 + 431: 19(fvec4) Load 427 + Store 426(param) 431 + 433: 271(ptr) AccessChain 262(gl_in) 141 141 + 434: 19(fvec4) Load 433 + Store 432(param) 434 + 435: 16(float) FunctionCall 29(screenSpaceTessFactor(vf4;vf4;) 426(param) 432(param) + 436: 389(ptr) AccessChain 401(gl_TessLevelOuter) 141 + Store 436 435 + 439: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 440 440 12 12 + 438: 271(ptr) AccessChain 262(gl_in) 141 141 + 441: 19(fvec4) Load 438 + Store 437(param) 441 + 443: 271(ptr) AccessChain 262(gl_in) 128 141 + 444: 19(fvec4) Load 443 + Store 442(param) 444 + 445: 16(float) FunctionCall 29(screenSpaceTessFactor(vf4;vf4;) 437(param) 442(param) + 446: 389(ptr) AccessChain 401(gl_TessLevelOuter) 128 + Store 446 445 + 449: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 450 450 12 12 + 448: 271(ptr) AccessChain 262(gl_in) 128 141 + 451: 19(fvec4) Load 448 + Store 447(param) 451 + 453: 271(ptr) AccessChain 262(gl_in) 410 141 + 454: 19(fvec4) Load 453 + Store 452(param) 454 + 455: 16(float) FunctionCall 29(screenSpaceTessFactor(vf4;vf4;) 447(param) 452(param) + 456: 389(ptr) AccessChain 401(gl_TessLevelOuter) 410 + Store 456 455 + 459: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 460 460 12 12 + 458: 271(ptr) AccessChain 262(gl_in) 410 141 + 461: 19(fvec4) Load 458 + Store 457(param) 461 + 463: 271(ptr) AccessChain 262(gl_in) 336 141 + 464: 19(fvec4) Load 463 + Store 462(param) 464 + 465: 16(float) FunctionCall 29(screenSpaceTessFactor(vf4;vf4;) 457(param) 462(param) + 466: 389(ptr) AccessChain 401(gl_TessLevelOuter) 336 + Store 466 465 + 468: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 469 469 12 12 + 467: 389(ptr) AccessChain 401(gl_TessLevelOuter) 141 + 470: 16(float) Load 467 + 471: 389(ptr) AccessChain 401(gl_TessLevelOuter) 336 + 472: 16(float) Load 471 + 473: 16(float) ExtInst 3(GLSL.std.450) 46(FMix) 470 472 68 + 474: 389(ptr) AccessChain 385(gl_TessLevelInner) 141 + Store 474 473 + 476: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 477 477 12 12 + 475: 389(ptr) AccessChain 401(gl_TessLevelOuter) 410 + 478: 16(float) Load 475 + 479: 389(ptr) AccessChain 401(gl_TessLevelOuter) 128 + 480: 16(float) Load 479 + 481: 16(float) ExtInst 3(GLSL.std.450) 46(FMix) 478 480 68 + 482: 389(ptr) AccessChain 385(gl_TessLevelInner) 128 + Store 482 481 + Branch 425 + 483: Label + 485: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59 + 486: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 487 487 12 12 + 484: 389(ptr) AccessChain 385(gl_TessLevelInner) 141 + Store 484 226 + 489: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 490 490 12 12 + 488: 389(ptr) AccessChain 385(gl_TessLevelInner) 128 + Store 488 226 + 492: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 493 493 12 12 + 491: 389(ptr) AccessChain 401(gl_TessLevelOuter) 141 + Store 491 226 + 495: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 496 496 12 12 + 494: 389(ptr) AccessChain 401(gl_TessLevelOuter) 128 + Store 494 226 + 498: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 499 499 12 12 + 497: 389(ptr) AccessChain 401(gl_TessLevelOuter) 410 + Store 497 226 + 501: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 502 502 12 12 + 500: 389(ptr) AccessChain 401(gl_TessLevelOuter) 336 + Store 500 226 + Branch 425 + 425: Label + Branch 380 + 380: Label + Branch 373 + 373: Label + 520: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59 + 521: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 511 511 12 12 + 519: 125(int) Load 267(gl_InvocationID) + 522: 125(int) Load 267(gl_InvocationID) + 523: 271(ptr) AccessChain 262(gl_in) 522 141 + 524: 19(fvec4) Load 523 + 527: 525(ptr) AccessChain 516(gl_out) 519 141 + Store 527 524 + 537: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 535 535 12 12 + 536: 125(int) Load 267(gl_InvocationID) + 545: 125(int) Load 267(gl_InvocationID) + 548: 546(ptr) AccessChain 542(inNormal) 545 + 549: 146(fvec3) Load 548 + 552: 550(ptr) AccessChain 532(outNormal) 536 + Store 552 549 + 562: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 560 560 12 12 + 561: 125(int) Load 267(gl_InvocationID) + 563: 125(int) Load 267(gl_InvocationID) + 564: 299(ptr) AccessChain 296(inUV) 563 + 565: 97(fvec2) Load 564 + 568: 566(ptr) AccessChain 557(outUV) 561 + Store 568 565 + 569: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 570 570 12 12 + Return + FunctionEnd +29(screenSpaceTessFactor(vf4;vf4;): 16(float) Function None 25 + 27(p0): 22(ptr) FunctionParameter + 28(p1): 22(ptr) FunctionParameter + 30: Label + 62(midPoint): 22(ptr) Variable Function + 75(radius): 73(ptr) Variable Function + 86(v0): 22(ptr) Variable Function + 135(clip0): 22(ptr) Variable Function + 156(clip1): 22(ptr) Variable Function + 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 32 + 44: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 35 35 12 12 + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 39 27(p0) 42 + 47: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 45 28(p1) 42 + 61: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 32 29(screenSpaceTessFactor(vf4;vf4;) + 67: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 65 65 12 12 + 66: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 63 62(midPoint) 42 + 69: 19(fvec4) Load 27(p0) + 70: 19(fvec4) Load 28(p1) + 71: 19(fvec4) FAdd 69 70 + 72: 19(fvec4) VectorTimesScalar 71 68 + Store 62(midPoint) 72 + 80: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 78 78 12 12 + 79: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 76 75(radius) 42 + 81: 19(fvec4) Load 27(p0) + 82: 19(fvec4) Load 28(p1) + 83: 16(float) ExtInst 3(GLSL.std.450) 67(Distance) 81 82 + 85: 16(float) FDiv 83 84 + Store 75(radius) 85 + 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 89 89 12 12 + 90: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 87 86(v0) 42 + 131: 129(ptr) AccessChain 122(ubo) 128 + 132: 92 Load 131 + 133: 19(fvec4) Load 62(midPoint) + 134: 19(fvec4) MatrixTimesVector 132 133 + Store 86(v0) 134 + 140: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 138 138 12 12 + 139: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 136 135(clip0) 42 + 142: 129(ptr) AccessChain 122(ubo) 141 + 143: 92 Load 142 + 144: 19(fvec4) Load 86(v0) + 145: 16(float) Load 75(radius) + 150: 16(float) CompositeExtract 149 0 + 151: 16(float) CompositeExtract 149 1 + 152: 16(float) CompositeExtract 149 2 + 153: 19(fvec4) CompositeConstruct 145 150 151 152 + 154: 19(fvec4) FSub 144 153 + 155: 19(fvec4) MatrixTimesVector 143 154 + Store 135(clip0) 155 + 161: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 159 159 12 12 + 160: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 157 156(clip1) 42 + 162: 129(ptr) AccessChain 122(ubo) 141 + 163: 92 Load 162 + 164: 19(fvec4) Load 86(v0) + 165: 16(float) Load 75(radius) + 166: 16(float) CompositeExtract 149 0 + 167: 16(float) CompositeExtract 149 1 + 168: 16(float) CompositeExtract 149 2 + 169: 19(fvec4) CompositeConstruct 165 166 167 168 + 170: 19(fvec4) FAdd 164 169 + 171: 19(fvec4) MatrixTimesVector 163 170 + Store 156(clip1) 171 + 173: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 174 174 12 12 + 172: 73(ptr) AccessChain 135(clip0) 13 + 175: 16(float) Load 172 + 176: 19(fvec4) Load 135(clip0) + 177: 19(fvec4) CompositeConstruct 175 175 175 175 + 178: 19(fvec4) FDiv 176 177 + Store 135(clip0) 178 + 180: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 181 181 12 12 + 179: 73(ptr) AccessChain 156(clip1) 13 + 182: 16(float) Load 179 + 183: 19(fvec4) Load 156(clip1) + 184: 19(fvec4) CompositeConstruct 182 182 182 182 + 185: 19(fvec4) FDiv 183 184 + Store 156(clip1) 185 + 190: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 191 191 12 12 + 189: 187(ptr) AccessChain 122(ubo) 186 + 192: 97(fvec2) Load 189 + 193: 19(fvec4) Load 135(clip0) + 194: 97(fvec2) VectorShuffle 193 193 0 1 + 195: 97(fvec2) FMul 194 192 + 196: 73(ptr) AccessChain 135(clip0) 12 + 197: 16(float) CompositeExtract 195 0 + Store 196 197 + 198: 73(ptr) AccessChain 135(clip0) 37 + 199: 16(float) CompositeExtract 195 1 + Store 198 199 + 201: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 202 202 12 12 + 200: 187(ptr) AccessChain 122(ubo) 186 + 203: 97(fvec2) Load 200 + 204: 19(fvec4) Load 156(clip1) + 205: 97(fvec2) VectorShuffle 204 204 0 1 + 206: 97(fvec2) FMul 205 203 + 207: 73(ptr) AccessChain 156(clip1) 12 + 208: 16(float) CompositeExtract 206 0 + Store 207 208 + 209: 73(ptr) AccessChain 156(clip1) 37 + 210: 16(float) CompositeExtract 206 1 + Store 209 210 + 212: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 213 213 12 12 + 211: 19(fvec4) Load 135(clip0) + 214: 19(fvec4) Load 156(clip1) + 215: 16(float) ExtInst 3(GLSL.std.450) 67(Distance) 211 214 + 219: 217(ptr) AccessChain 122(ubo) 216 + 220: 16(float) Load 219 + 221: 16(float) FDiv 215 220 + 223: 217(ptr) AccessChain 122(ubo) 222 + 224: 16(float) Load 223 + 225: 16(float) FMul 221 224 + 228: 16(float) ExtInst 3(GLSL.std.450) 43(FClamp) 225 226 227 + ReturnValue 228 + FunctionEnd +53(frustumCheck(): 48(bool) Function None 51 + 54: Label + 237(pos): 22(ptr) Variable Function + 315(i): 313(ptr) Variable Function + 235: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56 + 236: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 57 57 12 12 + 234: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 56 53(frustumCheck() + 242: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 240 240 12 12 + 241: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 238 237(pos) 42 + 270: 125(int) Load 267(gl_InvocationID) + 273: 271(ptr) AccessChain 262(gl_in) 270 141 + 274: 19(fvec4) Load 273 + Store 237(pos) 274 + 291: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 278 278 12 12 + 290: 281 Load 287(samplerHeight) + 301: 299(ptr) AccessChain 296(inUV) 141 + 302: 97(fvec2) Load 301 + 303: 19(fvec4) ImageSampleExplicitLod 290 302 Lod 148 + 304: 16(float) CompositeExtract 303 0 + 306: 217(ptr) AccessChain 122(ubo) 305 + 307: 16(float) Load 306 + 308: 16(float) FMul 304 307 + 309: 73(ptr) AccessChain 237(pos) 37 + 310: 16(float) Load 309 + 311: 16(float) FSub 310 308 + 312: 73(ptr) AccessChain 237(pos) 37 + Store 312 311 + 320: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 318 318 12 12 + 319: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 316 315(i) 42 + Store 315(i) 141 + Branch 321 + 321: Label + 325: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56 + 326: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 318 318 12 12 + LoopMerge 323 324 None + Branch 327 + 327: Label + 329: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56 + 330: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 318 318 12 12 + 328: 125(int) Load 315(i) + 331: 48(bool) SLessThan 328 186 + BranchConditional 331 322 323 + 322: Label + 333: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56 + 334: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 335 335 12 12 + 332: 19(fvec4) Load 237(pos) + 337: 125(int) Load 315(i) + 340: 338(ptr) AccessChain 122(ubo) 336 337 + 341: 19(fvec4) Load 340 + 342: 16(float) Dot 332 341 + 344: 16(float) FAdd 342 343 + 345: 48(bool) FOrdLessThan 344 148 + SelectionMerge 347 None + BranchConditional 345 346 347 + 346: Label + 349: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56 + 350: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 351 351 12 12 + ReturnValue 348 + 347: Label + Branch 324 + 324: Label + 354: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56 + 355: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 318 318 12 12 + 353: 125(int) Load 315(i) + 356: 125(int) IAdd 353 128 + Store 315(i) 356 + Branch 321 + 323: Label + 357: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56 + 358: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 359 359 12 12 + ReturnValue 94 + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.glsl.tese.out b/Test/baseResults/spv.debuginfo.glsl.tese.out new file mode 100644 index 0000000000..bce85b48a1 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.glsl.tese.out @@ -0,0 +1,549 @@ +spv.debuginfo.glsl.tese +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 359 + + Capability Tessellation + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationEvaluation 14 "main" 47 66 93 116 143 183 300 316 324 337 344 + ExecutionMode 14 Quads + ExecutionMode 14 SpacingEqual + ExecutionMode 14 VertexOrderCw + 2: String "spv.debuginfo.glsl.tese" + 8: String "uint" + 16: String "main" + 19: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +layout (set = 0, binding = 0) uniform UBO +{ + mat4 projection; + mat4 modelview; + vec4 lightPos; + vec4 frustumPlanes[6]; + float displacementFactor; + float tessellationFactor; + vec2 viewportDim; + float tessellatedEdgeSize; +} ubo; + +layout (set = 0, binding = 1) uniform sampler2D displacementMap; + +layout(quads, equal_spacing, cw) in; + +layout (location = 0) in vec3 inNormal[]; +layout (location = 1) in vec2 inUV[]; + +layout (location = 0) out vec3 outNormal; +layout (location = 1) out vec2 outUV; +layout (location = 2) out vec3 outViewVec; +layout (location = 3) out vec3 outLightVec; +layout (location = 4) out vec3 outEyePos; +layout (location = 5) out vec3 outWorldPos; + +void main() +{ + // Interpolate UV coordinates + vec2 uv1 = mix(inUV[0], inUV[1], gl_TessCoord.x); + vec2 uv2 = mix(inUV[3], inUV[2], gl_TessCoord.x); + outUV = mix(uv1, uv2, gl_TessCoord.y); + + vec3 n1 = mix(inNormal[0], inNormal[1], gl_TessCoord.x); + vec3 n2 = mix(inNormal[3], inNormal[2], gl_TessCoord.x); + outNormal = mix(n1, n2, gl_TessCoord.y); + + // Interpolate positions + vec4 pos1 = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x); + vec4 pos2 = mix(gl_in[3].gl_Position, gl_in[2].gl_Position, gl_TessCoord.x); + vec4 pos = mix(pos1, pos2, gl_TessCoord.y); + // Displace + pos.y -= textureLod(displacementMap, outUV, 0.0).r * ubo.displacementFactor; + // Perspective projection + gl_Position = ubo.projection * ubo.modelview * pos; + + // Calculate vectors for lighting based on tessellated position + outViewVec = -pos.xyz; + outLightVec = normalize(ubo.lightPos.xyz + outViewVec); + outWorldPos = pos.xyz; + outEyePos = vec3(ubo.modelview * pos); +} +" + 29: String "float" + 38: String "uv1" + 49: String "inUV" + 52: String "int" + 68: String "gl_TessCoord" + 77: String "uv2" + 95: String "outUV" + 108: String "n1" + 118: String "inNormal" + 129: String "n2" + 145: String "outNormal" + 160: String "pos1" + 168: String "gl_Position" + 171: String "gl_PointSize" + 174: String "gl_CullDistance" + 178: String "gl_PerVertex" + 185: String "gl_in" + 198: String "pos2" + 212: String "pos" + 224: String "type.2d.image" + 226: String "@type.2d.image" + 230: String "type.sampled.image" + 231: String "@type.sampled.image" + 236: String "displacementMap" + 246: String "bool" + 253: String "modelview" + 257: String "lightPos" + 260: String "frustumPlanes" + 262: String "tessellatedEdgeSize" + 266: String "viewportDim" + 270: String "UBO" + 275: String "ubo" + 302: String "" + 318: String "outViewVec" + 326: String "outLightVec" + 339: String "outWorldPos" + 346: String "outEyePos" + Name 14 "main" + Name 36 "uv1" + Name 47 "inUV" + Name 66 "gl_TessCoord" + Name 75 "uv2" + Name 93 "outUV" + Name 106 "n1" + Name 116 "inNormal" + Name 127 "n2" + Name 143 "outNormal" + Name 158 "pos1" + Name 166 "gl_PerVertex" + MemberName 166(gl_PerVertex) 0 "gl_Position" + MemberName 166(gl_PerVertex) 1 "gl_PointSize" + MemberName 166(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 166(gl_PerVertex) 3 "gl_CullDistance" + Name 183 "gl_in" + Name 196 "pos2" + Name 210 "pos" + Name 234 "displacementMap" + Name 251 "UBO" + MemberName 251(UBO) 0 "projection" + MemberName 251(UBO) 1 "modelview" + MemberName 251(UBO) 2 "lightPos" + MemberName 251(UBO) 3 "frustumPlanes" + MemberName 251(UBO) 4 "displacementFactor" + MemberName 251(UBO) 5 "tessellationFactor" + MemberName 251(UBO) 6 "viewportDim" + MemberName 251(UBO) 7 "tessellatedEdgeSize" + Name 273 "ubo" + Name 288 "gl_PerVertex" + MemberName 288(gl_PerVertex) 0 "gl_Position" + MemberName 288(gl_PerVertex) 1 "gl_PointSize" + MemberName 288(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 288(gl_PerVertex) 3 "gl_CullDistance" + Name 300 "" + Name 316 "outViewVec" + Name 324 "outLightVec" + Name 337 "outWorldPos" + Name 344 "outEyePos" + Decorate 47(inUV) Location 1 + Decorate 66(gl_TessCoord) BuiltIn TessCoord + Decorate 93(outUV) Location 1 + Decorate 116(inNormal) Location 0 + Decorate 143(outNormal) Location 0 + Decorate 166(gl_PerVertex) Block + MemberDecorate 166(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 166(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 166(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 166(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 234(displacementMap) Binding 1 + Decorate 234(displacementMap) DescriptorSet 0 + Decorate 249 ArrayStride 16 + Decorate 251(UBO) Block + MemberDecorate 251(UBO) 0 ColMajor + MemberDecorate 251(UBO) 0 MatrixStride 16 + MemberDecorate 251(UBO) 0 Offset 0 + MemberDecorate 251(UBO) 1 ColMajor + MemberDecorate 251(UBO) 1 MatrixStride 16 + MemberDecorate 251(UBO) 1 Offset 64 + MemberDecorate 251(UBO) 2 Offset 128 + MemberDecorate 251(UBO) 3 Offset 144 + MemberDecorate 251(UBO) 4 Offset 240 + MemberDecorate 251(UBO) 5 Offset 244 + MemberDecorate 251(UBO) 6 Offset 248 + MemberDecorate 251(UBO) 7 Offset 256 + Decorate 273(ubo) Binding 0 + Decorate 273(ubo) DescriptorSet 0 + Decorate 288(gl_PerVertex) Block + MemberDecorate 288(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 288(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 288(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 288(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 316(outViewVec) Location 2 + Decorate 324(outLightVec) Location 3 + Decorate 337(outWorldPos) Location 5 + Decorate 344(outEyePos) Location 4 + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19 + 20: 7(int) Constant 53 + 22: 7(int) Constant 1 + 23: 7(int) Constant 4 + 24: 7(int) Constant 2 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24 + 17: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20 + 28: TypeFloat 32 + 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 13 12 + 31: TypeVector 28(float) 2 + 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 24 + 33: TypePointer Function 31(fvec2) + 34: 7(int) Constant 7 + 35: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 34 12 + 39: 7(int) Constant 56 + 37: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 38 32 18 39 12 17 23 + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 43: TypeArray 31(fvec2) 10 + 44: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 32 10 + 45: TypePointer Input 43 + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 44 22 12 + 47(inUV): 45(ptr) Variable Input + 50: 7(int) Constant 8 + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 49 44 18 39 12 21 49 47(inUV) 50 + 51: TypeInt 32 1 + 53: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 52 10 23 12 + 54: 51(int) Constant 0 + 55: TypePointer Input 31(fvec2) + 56: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 22 12 + 59: 51(int) Constant 1 + 62: TypeVector 28(float) 3 + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 13 + 64: TypePointer Input 62(fvec3) + 65: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 63 22 12 +66(gl_TessCoord): 64(ptr) Variable Input + 67: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 68 63 18 39 12 21 68 66(gl_TessCoord) 50 + 69: TypePointer Input 28(float) + 70: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 22 12 + 78: 7(int) Constant 57 + 76: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 77 32 18 78 12 17 23 + 81: 51(int) Constant 3 + 84: 51(int) Constant 2 + 91: TypePointer Output 31(fvec2) + 92: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 13 12 + 93(outUV): 91(ptr) Variable Output + 96: 7(int) Constant 58 + 94: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 95 32 18 96 12 21 95 93(outUV) 50 + 104: TypePointer Function 62(fvec3) + 105: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 63 34 12 + 109: 7(int) Constant 60 + 107: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 108 63 18 109 12 17 23 + 112: TypeArray 62(fvec3) 10 + 113: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 63 10 + 114: TypePointer Input 112 + 115: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 113 22 12 + 116(inNormal): 114(ptr) Variable Input + 117: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 118 113 18 109 12 21 118 116(inNormal) 50 + 130: 7(int) Constant 61 + 128: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 129 63 18 130 12 17 23 + 141: TypePointer Output 62(fvec3) + 142: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 63 13 12 + 143(outNormal): 141(ptr) Variable Output + 146: 7(int) Constant 62 + 144: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 145 63 18 146 12 21 145 143(outNormal) 50 + 154: TypeVector 28(float) 4 + 155: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 23 + 156: TypePointer Function 154(fvec4) + 157: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 155 34 12 + 161: 7(int) Constant 65 + 159: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 160 155 18 161 12 17 23 + 164: TypeArray 28(float) 22 + 165: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 30 22 +166(gl_PerVertex): TypeStruct 154(fvec4) 28(float) 164 164 + 169: 7(int) Constant 1756 + 167: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 168 155 18 22 169 12 12 13 + 172: 7(int) Constant 1774 + 170: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 171 30 18 22 172 12 12 13 + 175: 7(int) Constant 1817 + 173: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 174 165 18 22 175 12 12 13 + 176: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 174 165 18 22 175 12 12 13 + 177: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 178 22 18 161 12 21 178 12 13 167 170 173 176 + 179: TypeArray 166(gl_PerVertex) 10 + 180: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 177 10 + 181: TypePointer Input 179 + 182: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 180 22 12 + 183(gl_in): 181(ptr) Variable Input + 184: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 185 180 18 161 12 21 185 183(gl_in) 50 + 186: TypePointer Input 154(fvec4) + 187: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 155 22 12 + 199: 7(int) Constant 66 + 197: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 198 155 18 199 12 17 23 + 213: 7(int) Constant 67 + 211: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 212 155 18 213 12 17 23 + 222: TypeImage 28(float) 2D sampled format:Unknown + 225: 7(int) Constant 69 + 227: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone) + 223: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 224 12 18 225 12 21 226 227 13 + 228: TypeSampledImage 222 + 229: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 230 12 18 225 12 21 231 227 13 + 232: TypePointer UniformConstant 228 + 233: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 229 12 12 +234(displacementMap): 232(ptr) Variable UniformConstant + 235: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 236 229 18 225 12 21 236 234(displacementMap) 50 + 240: 28(float) Constant 0 + 243: TypeMatrix 154(fvec4) 4 + 245: TypeBool + 247: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 246 10 24 12 + 248: 245(bool) ConstantTrue + 244: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 155 23 248 + 249: TypeArray 154(fvec4) 11 + 250: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 155 11 + 251(UBO): TypeStruct 243 243 154(fvec4) 249 28(float) 28(float) 31(fvec2) 28(float) + 254: 7(int) Constant 30 + 252: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 18 254 34 12 12 13 + 255: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 18 254 34 12 12 13 + 258: 7(int) Constant 31 + 256: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 257 155 18 258 34 12 12 13 + 259: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 260 250 18 10 34 12 12 13 + 263: 7(int) Constant 36 + 261: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 262 30 18 263 50 12 12 13 + 264: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 262 30 18 263 50 12 12 13 + 267: 7(int) Constant 35 + 265: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 266 32 18 267 34 12 12 13 + 268: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 262 30 18 263 50 12 12 13 + 269: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 270 22 18 225 12 21 270 12 13 252 255 256 259 261 264 265 268 + 271: TypePointer Uniform 251(UBO) + 272: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 269 24 12 + 273(ubo): 271(ptr) Variable Uniform + 274: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 275 269 18 225 12 21 275 273(ubo) 50 + 276: 51(int) Constant 4 + 277: TypePointer Uniform 28(float) + 278: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 24 12 + 282: TypePointer Function 28(float) + 283: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 34 12 +288(gl_PerVertex): TypeStruct 154(fvec4) 28(float) 164 164 + 290: 7(int) Constant 165 + 289: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 168 155 18 22 290 12 12 13 + 292: 7(int) Constant 183 + 291: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 171 30 18 22 292 12 12 13 + 294: 7(int) Constant 226 + 293: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 174 165 18 22 294 12 12 13 + 295: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 174 165 18 22 294 12 12 13 + 297: 7(int) Constant 71 + 296: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 178 22 18 297 12 21 178 12 13 289 291 293 295 + 298: TypePointer Output 288(gl_PerVertex) + 299: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 296 13 12 + 300: 298(ptr) Variable Output + 301: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 302 296 18 297 12 21 302 300 50 + 303: TypePointer Uniform 243 + 304: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 244 24 12 + 313: TypePointer Output 154(fvec4) + 314: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 155 13 12 + 316(outViewVec): 141(ptr) Variable Output + 319: 7(int) Constant 74 + 317: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 318 63 18 319 12 21 318 316(outViewVec) 50 +324(outLightVec): 141(ptr) Variable Output + 327: 7(int) Constant 75 + 325: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 326 63 18 327 12 21 326 324(outLightVec) 50 + 328: TypePointer Uniform 154(fvec4) + 329: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 155 24 12 +337(outWorldPos): 141(ptr) Variable Output + 340: 7(int) Constant 76 + 338: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 339 63 18 340 12 21 339 337(outWorldPos) 50 + 344(outEyePos): 141(ptr) Variable Output + 347: 7(int) Constant 77 + 345: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 346 63 18 347 12 21 346 344(outEyePos) 50 + 358: 7(int) Constant 78 + 14(main): 4 Function None 5 + 15: Label + 36(uv1): 33(ptr) Variable Function + 75(uv2): 33(ptr) Variable Function + 106(n1): 104(ptr) Variable Function + 127(n2): 104(ptr) Variable Function + 158(pos1): 156(ptr) Variable Function + 196(pos2): 156(ptr) Variable Function + 210(pos): 156(ptr) Variable Function + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12 + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main) + 42: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 39 39 12 12 + 40: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 37 36(uv1) 41 + 57: 55(ptr) AccessChain 47(inUV) 54 + 58: 31(fvec2) Load 57 + 60: 55(ptr) AccessChain 47(inUV) 59 + 61: 31(fvec2) Load 60 + 71: 69(ptr) AccessChain 66(gl_TessCoord) 12 + 72: 28(float) Load 71 + 73: 31(fvec2) CompositeConstruct 72 72 + 74: 31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 58 61 73 + Store 36(uv1) 74 + 80: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 78 78 12 12 + 79: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 76 75(uv2) 41 + 82: 55(ptr) AccessChain 47(inUV) 81 + 83: 31(fvec2) Load 82 + 85: 55(ptr) AccessChain 47(inUV) 84 + 86: 31(fvec2) Load 85 + 87: 69(ptr) AccessChain 66(gl_TessCoord) 12 + 88: 28(float) Load 87 + 89: 31(fvec2) CompositeConstruct 88 88 + 90: 31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 83 86 89 + Store 75(uv2) 90 + 98: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 96 96 12 12 + 97: 31(fvec2) Load 36(uv1) + 99: 31(fvec2) Load 75(uv2) + 100: 69(ptr) AccessChain 66(gl_TessCoord) 22 + 101: 28(float) Load 100 + 102: 31(fvec2) CompositeConstruct 101 101 + 103: 31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 97 99 102 + Store 93(outUV) 103 + 111: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 109 109 12 12 + 110: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 107 106(n1) 41 + 119: 64(ptr) AccessChain 116(inNormal) 54 + 120: 62(fvec3) Load 119 + 121: 64(ptr) AccessChain 116(inNormal) 59 + 122: 62(fvec3) Load 121 + 123: 69(ptr) AccessChain 66(gl_TessCoord) 12 + 124: 28(float) Load 123 + 125: 62(fvec3) CompositeConstruct 124 124 124 + 126: 62(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 120 122 125 + Store 106(n1) 126 + 132: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 130 130 12 12 + 131: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 128 127(n2) 41 + 133: 64(ptr) AccessChain 116(inNormal) 81 + 134: 62(fvec3) Load 133 + 135: 64(ptr) AccessChain 116(inNormal) 84 + 136: 62(fvec3) Load 135 + 137: 69(ptr) AccessChain 66(gl_TessCoord) 12 + 138: 28(float) Load 137 + 139: 62(fvec3) CompositeConstruct 138 138 138 + 140: 62(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 134 136 139 + Store 127(n2) 140 + 148: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 146 146 12 12 + 147: 62(fvec3) Load 106(n1) + 149: 62(fvec3) Load 127(n2) + 150: 69(ptr) AccessChain 66(gl_TessCoord) 22 + 151: 28(float) Load 150 + 152: 62(fvec3) CompositeConstruct 151 151 151 + 153: 62(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 147 149 152 + Store 143(outNormal) 153 + 163: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 161 161 12 12 + 162: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 159 158(pos1) 41 + 188: 186(ptr) AccessChain 183(gl_in) 54 54 + 189: 154(fvec4) Load 188 + 190: 186(ptr) AccessChain 183(gl_in) 59 54 + 191: 154(fvec4) Load 190 + 192: 69(ptr) AccessChain 66(gl_TessCoord) 12 + 193: 28(float) Load 192 + 194: 154(fvec4) CompositeConstruct 193 193 193 193 + 195: 154(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 189 191 194 + Store 158(pos1) 195 + 201: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 199 199 12 12 + 200: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 197 196(pos2) 41 + 202: 186(ptr) AccessChain 183(gl_in) 81 54 + 203: 154(fvec4) Load 202 + 204: 186(ptr) AccessChain 183(gl_in) 84 54 + 205: 154(fvec4) Load 204 + 206: 69(ptr) AccessChain 66(gl_TessCoord) 12 + 207: 28(float) Load 206 + 208: 154(fvec4) CompositeConstruct 207 207 207 207 + 209: 154(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 203 205 208 + Store 196(pos2) 209 + 215: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 213 213 12 12 + 214: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 211 210(pos) 41 + 216: 154(fvec4) Load 158(pos1) + 217: 154(fvec4) Load 196(pos2) + 218: 69(ptr) AccessChain 66(gl_TessCoord) 22 + 219: 28(float) Load 218 + 220: 154(fvec4) CompositeConstruct 219 219 219 219 + 221: 154(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 216 217 220 + Store 210(pos) 221 + 238: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 225 225 12 12 + 237: 228 Load 234(displacementMap) + 239: 31(fvec2) Load 93(outUV) + 241: 154(fvec4) ImageSampleExplicitLod 237 239 Lod 240 + 242: 28(float) CompositeExtract 241 0 + 279: 277(ptr) AccessChain 273(ubo) 276 + 280: 28(float) Load 279 + 281: 28(float) FMul 242 280 + 284: 282(ptr) AccessChain 210(pos) 22 + 285: 28(float) Load 284 + 286: 28(float) FSub 285 281 + 287: 282(ptr) AccessChain 210(pos) 22 + Store 287 286 + 306: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 297 297 12 12 + 305: 303(ptr) AccessChain 273(ubo) 54 + 307: 243 Load 305 + 308: 303(ptr) AccessChain 273(ubo) 59 + 309: 243 Load 308 + 310: 243 MatrixTimesMatrix 307 309 + 311: 154(fvec4) Load 210(pos) + 312: 154(fvec4) MatrixTimesVector 310 311 + 315: 313(ptr) AccessChain 300 54 + Store 315 312 + 321: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 319 319 12 12 + 320: 154(fvec4) Load 210(pos) + 322: 62(fvec3) VectorShuffle 320 320 0 1 2 + 323: 62(fvec3) FNegate 322 + Store 316(outViewVec) 323 + 331: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 327 327 12 12 + 330: 328(ptr) AccessChain 273(ubo) 84 + 332: 154(fvec4) Load 330 + 333: 62(fvec3) VectorShuffle 332 332 0 1 2 + 334: 62(fvec3) Load 316(outViewVec) + 335: 62(fvec3) FAdd 333 334 + 336: 62(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 335 + Store 324(outLightVec) 336 + 342: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 340 340 12 12 + 341: 154(fvec4) Load 210(pos) + 343: 62(fvec3) VectorShuffle 341 341 0 1 2 + Store 337(outWorldPos) 343 + 349: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 347 347 12 12 + 348: 303(ptr) AccessChain 273(ubo) 59 + 350: 243 Load 348 + 351: 154(fvec4) Load 210(pos) + 352: 154(fvec4) MatrixTimesVector 350 351 + 353: 28(float) CompositeExtract 352 0 + 354: 28(float) CompositeExtract 352 1 + 355: 28(float) CompositeExtract 352 2 + 356: 62(fvec3) CompositeConstruct 353 354 355 + Store 344(outEyePos) 356 + 357: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 358 358 12 12 + Return + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.glsl.vert.out b/Test/baseResults/spv.debuginfo.glsl.vert.out new file mode 100644 index 0000000000..9eef2dd2df --- /dev/null +++ b/Test/baseResults/spv.debuginfo.glsl.vert.out @@ -0,0 +1,668 @@ +spv.debuginfo.glsl.vert +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 447 + + Capability Shader + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 14 "main" 35 42 47 55 65 83 305 323 328 353 371 390 428 437 + 2: String "spv.debuginfo.glsl.vert" + 8: String "uint" + 16: String "main" + 19: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +// Vertex attributes +layout (location = 0) in vec3 inPos; +layout (location = 1) in vec3 inNormal; +layout (location = 2) in vec2 inUV; +layout (location = 3) in vec3 inColor; + +// Instanced attributes +layout (location = 4) in vec3 instancePos; +layout (location = 5) in vec3 instanceRot; +layout (location = 6) in float instanceScale; +layout (location = 7) in int instanceTexIndex; + +layout (binding = 0) uniform UBO +{ + mat4 projection; + mat4 modelview; + vec4 lightPos; + float locSpeed; + float globSpeed; +} ubo; + +layout (location = 0) out vec3 outNormal; +layout (location = 1) out vec3 outColor; +layout (location = 2) out vec3 outUV; +layout (location = 3) out vec3 outViewVec; +layout (location = 4) out vec3 outLightVec; + +void main() +{ + outColor = inColor; + outUV = vec3(inUV, instanceTexIndex); + + mat3 mx, my, mz; + + // rotate around x + float s = sin(instanceRot.x + ubo.locSpeed); + float c = cos(instanceRot.x + ubo.locSpeed); + + mx[0] = vec3(c, s, 0.0); + mx[1] = vec3(-s, c, 0.0); + mx[2] = vec3(0.0, 0.0, 1.0); + + // rotate around y + s = sin(instanceRot.y + ubo.locSpeed); + c = cos(instanceRot.y + ubo.locSpeed); + + my[0] = vec3(c, 0.0, s); + my[1] = vec3(0.0, 1.0, 0.0); + my[2] = vec3(-s, 0.0, c); + + // rot around z + s = sin(instanceRot.z + ubo.locSpeed); + c = cos(instanceRot.z + ubo.locSpeed); + + mz[0] = vec3(1.0, 0.0, 0.0); + mz[1] = vec3(0.0, c, s); + mz[2] = vec3(0.0, -s, c); + + mat3 rotMat = mz * my * mx; + + mat4 gRotMat; + s = sin(instanceRot.y + ubo.globSpeed); + c = cos(instanceRot.y + ubo.globSpeed); + gRotMat[0] = vec4(c, 0.0, s, 0.0); + gRotMat[1] = vec4(0.0, 1.0, 0.0, 0.0); + gRotMat[2] = vec4(-s, 0.0, c, 0.0); + gRotMat[3] = vec4(0.0, 0.0, 0.0, 1.0); + + vec4 locPos = vec4(inPos.xyz * rotMat, 1.0); + vec4 pos = vec4((locPos.xyz * instanceScale) + instancePos, 1.0); + + gl_Position = ubo.projection * ubo.modelview * gRotMat * pos; + outNormal = mat3(ubo.modelview * gRotMat) * inverse(rotMat) * inNormal; + + pos = ubo.modelview * vec4(inPos.xyz + instancePos, 1.0); + vec3 lPos = mat3(ubo.modelview) * ubo.lightPos.xyz; + outLightVec = lPos - pos.xyz; + outViewVec = -pos.xyz; +} +" + 29: String "float" + 37: String "outColor" + 44: String "inColor" + 49: String "outUV" + 57: String "inUV" + 61: String "int" + 67: String "instanceTexIndex" + 78: String "s" + 85: String "instanceRot" + 95: String "bool" + 100: String "modelview" + 104: String "lightPos" + 107: String "globSpeed" + 111: String "UBO" + 116: String "ubo" + 126: String "c" + 142: String "mx" + 186: String "my" + 223: String "mz" + 244: String "rotMat" + 274: String "gRotMat" + 301: String "locPos" + 307: String "inPos" + 317: String "pos" + 325: String "instanceScale" + 330: String "instancePos" + 341: String "gl_Position" + 344: String "gl_PointSize" + 346: String "gl_CullDistance" + 349: String "gl_PerVertex" + 355: String "" + 373: String "outNormal" + 392: String "inNormal" + 409: String "lPos" + 430: String "outLightVec" + 439: String "outViewVec" + Name 14 "main" + Name 35 "outColor" + Name 42 "inColor" + Name 47 "outUV" + Name 55 "inUV" + Name 65 "instanceTexIndex" + Name 76 "s" + Name 83 "instanceRot" + Name 98 "UBO" + MemberName 98(UBO) 0 "projection" + MemberName 98(UBO) 1 "modelview" + MemberName 98(UBO) 2 "lightPos" + MemberName 98(UBO) 3 "locSpeed" + MemberName 98(UBO) 4 "globSpeed" + Name 114 "ubo" + Name 124 "c" + Name 140 "mx" + Name 184 "my" + Name 221 "mz" + Name 242 "rotMat" + Name 272 "gRotMat" + Name 299 "locPos" + Name 305 "inPos" + Name 315 "pos" + Name 323 "instanceScale" + Name 328 "instancePos" + Name 339 "gl_PerVertex" + MemberName 339(gl_PerVertex) 0 "gl_Position" + MemberName 339(gl_PerVertex) 1 "gl_PointSize" + MemberName 339(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 339(gl_PerVertex) 3 "gl_CullDistance" + Name 353 "" + Name 371 "outNormal" + Name 390 "inNormal" + Name 407 "lPos" + Name 428 "outLightVec" + Name 437 "outViewVec" + Decorate 35(outColor) Location 1 + Decorate 42(inColor) Location 3 + Decorate 47(outUV) Location 2 + Decorate 55(inUV) Location 2 + Decorate 65(instanceTexIndex) Location 7 + Decorate 83(instanceRot) Location 5 + Decorate 98(UBO) Block + MemberDecorate 98(UBO) 0 ColMajor + MemberDecorate 98(UBO) 0 MatrixStride 16 + MemberDecorate 98(UBO) 0 Offset 0 + MemberDecorate 98(UBO) 1 ColMajor + MemberDecorate 98(UBO) 1 MatrixStride 16 + MemberDecorate 98(UBO) 1 Offset 64 + MemberDecorate 98(UBO) 2 Offset 128 + MemberDecorate 98(UBO) 3 Offset 144 + MemberDecorate 98(UBO) 4 Offset 148 + Decorate 114(ubo) Binding 0 + Decorate 114(ubo) DescriptorSet 0 + Decorate 305(inPos) Location 0 + Decorate 323(instanceScale) Location 6 + Decorate 328(instancePos) Location 4 + Decorate 339(gl_PerVertex) Block + MemberDecorate 339(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 339(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 339(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 339(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 371(outNormal) Location 0 + Decorate 390(inNormal) Location 1 + Decorate 428(outLightVec) Location 4 + Decorate 437(outViewVec) Location 3 + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19 + 20: 7(int) Constant 54 + 22: 7(int) Constant 1 + 23: 7(int) Constant 4 + 24: 7(int) Constant 2 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24 + 17: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20 + 28: TypeFloat 32 + 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 13 12 + 31: TypeVector 28(float) 3 + 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 13 + 33: TypePointer Output 31(fvec3) + 34: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 13 12 + 35(outColor): 33(ptr) Variable Output + 38: 7(int) Constant 56 + 39: 7(int) Constant 8 + 36: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 37 32 18 38 12 21 37 35(outColor) 39 + 40: TypePointer Input 31(fvec3) + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 22 12 + 42(inColor): 40(ptr) Variable Input + 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 44 32 18 38 12 21 44 42(inColor) 39 + 47(outUV): 33(ptr) Variable Output + 50: 7(int) Constant 57 + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 49 32 18 50 12 21 49 47(outUV) 39 + 51: TypeVector 28(float) 2 + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 24 + 53: TypePointer Input 51(fvec2) + 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 52 22 12 + 55(inUV): 53(ptr) Variable Input + 56: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 57 52 18 50 12 21 57 55(inUV) 39 + 60: TypeInt 32 1 + 62: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 61 10 23 12 + 63: TypePointer Input 60(int) + 64: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 62 22 12 +65(instanceTexIndex): 63(ptr) Variable Input + 66: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 67 62 18 50 12 21 67 65(instanceTexIndex) 39 + 73: TypePointer Function 28(float) + 74: 7(int) Constant 7 + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 74 12 + 79: 7(int) Constant 62 + 77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 78 30 18 79 12 17 23 + 81: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 83(instanceRot): 40(ptr) Variable Input + 84: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 85 32 18 79 12 21 85 83(instanceRot) 39 + 86: TypePointer Input 28(float) + 87: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 22 12 + 90: TypeVector 28(float) 4 + 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 23 + 92: TypeMatrix 90(fvec4) 4 + 94: TypeBool + 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 95 10 24 12 + 97: 94(bool) ConstantTrue + 93: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 91 23 97 + 98(UBO): TypeStruct 92 92 90(fvec4) 28(float) 28(float) + 101: 7(int) Constant 42 + 99: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 100 93 18 101 74 12 12 13 + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 100 93 18 101 74 12 12 13 + 105: 7(int) Constant 43 + 103: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 104 91 18 105 74 12 12 13 + 108: 7(int) Constant 45 + 106: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 107 30 18 108 39 12 12 13 + 109: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 107 30 18 108 39 12 12 13 + 110: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 111 22 18 79 12 21 111 12 13 99 102 103 106 109 + 112: TypePointer Uniform 98(UBO) + 113: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 110 24 12 + 114(ubo): 112(ptr) Variable Uniform + 115: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 116 110 18 79 12 21 116 114(ubo) 39 + 117: 60(int) Constant 3 + 118: TypePointer Uniform 28(float) + 119: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 24 12 + 127: 7(int) Constant 63 + 125: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 126 30 18 127 12 17 23 + 136: TypeMatrix 31(fvec3) 3 + 137: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 32 13 97 + 138: TypePointer Function 136 + 139: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 137 74 12 + 143: 7(int) Constant 65 + 141: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 142 137 18 143 12 17 23 + 146: 60(int) Constant 0 + 149: 28(float) Constant 0 + 151: TypePointer Function 31(fvec3) + 152: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 74 12 + 154: 60(int) Constant 1 + 157: 7(int) Constant 66 + 162: 60(int) Constant 2 + 163: 28(float) Constant 1065353216 + 164: 31(fvec3) ConstantComposite 149 149 163 + 167: 7(int) Constant 67 + 170: 7(int) Constant 70 + 178: 7(int) Constant 71 + 187: 7(int) Constant 73 + 185: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 186 137 18 187 12 17 23 + 194: 31(fvec3) ConstantComposite 149 163 149 + 197: 7(int) Constant 74 + 200: 7(int) Constant 75 + 207: 7(int) Constant 78 + 215: 7(int) Constant 79 + 224: 7(int) Constant 81 + 222: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 223 137 18 224 12 17 23 + 227: 31(fvec3) ConstantComposite 163 149 149 + 231: 7(int) Constant 82 + 237: 7(int) Constant 83 + 245: 7(int) Constant 85 + 243: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 244 137 18 245 12 17 23 + 255: 7(int) Constant 88 + 257: 60(int) Constant 4 + 264: 7(int) Constant 89 + 270: TypePointer Function 92 + 271: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 93 74 12 + 275: 7(int) Constant 90 + 273: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 274 93 18 275 12 17 23 + 281: TypePointer Function 90(fvec4) + 282: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 91 74 12 + 284: 90(fvec4) ConstantComposite 149 163 149 149 + 287: 7(int) Constant 91 + 290: 7(int) Constant 92 + 295: 90(fvec4) ConstantComposite 149 149 149 163 + 298: 7(int) Constant 93 + 302: 7(int) Constant 95 + 300: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 301 91 18 302 12 17 23 + 305(inPos): 40(ptr) Variable Input + 306: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 307 32 18 302 12 21 307 305(inPos) 39 + 318: 7(int) Constant 96 + 316: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 317 91 18 318 12 17 23 +323(instanceScale): 86(ptr) Variable Input + 324: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 325 30 18 318 12 21 325 323(instanceScale) 39 +328(instancePos): 40(ptr) Variable Input + 329: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 330 32 18 318 12 21 330 328(instancePos) 39 + 337: TypeArray 28(float) 22 + 338: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 30 22 +339(gl_PerVertex): TypeStruct 90(fvec4) 28(float) 337 337 + 342: 7(int) Constant 24 + 340: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 341 91 18 22 342 12 12 13 + 343: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 344 30 18 22 101 12 12 13 + 345: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 346 338 18 22 245 12 12 13 + 347: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 346 338 18 22 245 12 12 13 + 350: 7(int) Constant 98 + 348: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 349 22 18 350 12 21 349 12 13 340 343 345 347 + 351: TypePointer Output 339(gl_PerVertex) + 352: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 348 13 12 + 353: 351(ptr) Variable Output + 354: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 355 348 18 350 12 21 355 353 39 + 356: TypePointer Uniform 92 + 357: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 93 24 12 + 368: TypePointer Output 90(fvec4) + 369: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 91 13 12 + 371(outNormal): 33(ptr) Variable Output + 374: 7(int) Constant 99 + 372: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 373 32 18 374 12 21 373 371(outNormal) 39 + 390(inNormal): 40(ptr) Variable Input + 391: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 392 32 18 374 12 21 392 390(inNormal) 39 + 397: 7(int) Constant 101 + 410: 7(int) Constant 102 + 408: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 409 32 18 410 12 17 23 + 422: TypePointer Uniform 90(fvec4) + 423: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 91 24 12 +428(outLightVec): 33(ptr) Variable Output + 431: 7(int) Constant 103 + 429: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 430 32 18 431 12 21 430 428(outLightVec) 39 + 437(outViewVec): 33(ptr) Variable Output + 440: 7(int) Constant 104 + 438: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 439 32 18 440 12 21 439 437(outViewVec) 39 + 446: 7(int) Constant 105 + 14(main): 4 Function None 5 + 15: Label + 76(s): 73(ptr) Variable Function + 124(c): 73(ptr) Variable Function + 140(mx): 138(ptr) Variable Function + 184(my): 138(ptr) Variable Function + 221(mz): 138(ptr) Variable Function + 242(rotMat): 138(ptr) Variable Function + 272(gRotMat): 270(ptr) Variable Function + 299(locPos): 281(ptr) Variable Function + 315(pos): 281(ptr) Variable Function + 407(lPos): 151(ptr) Variable Function + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12 + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main) + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 38 38 12 12 + 45: 31(fvec3) Load 42(inColor) + Store 35(outColor) 45 + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 50 50 12 12 + 58: 51(fvec2) Load 55(inUV) + 68: 60(int) Load 65(instanceTexIndex) + 69: 28(float) ConvertSToF 68 + 70: 28(float) CompositeExtract 58 0 + 71: 28(float) CompositeExtract 58 1 + 72: 31(fvec3) CompositeConstruct 70 71 69 + Store 47(outUV) 72 + 82: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 79 79 12 12 + 80: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 77 76(s) 81 + 88: 86(ptr) AccessChain 83(instanceRot) 12 + 89: 28(float) Load 88 + 120: 118(ptr) AccessChain 114(ubo) 117 + 121: 28(float) Load 120 + 122: 28(float) FAdd 89 121 + 123: 28(float) ExtInst 3(GLSL.std.450) 13(Sin) 122 + Store 76(s) 123 + 129: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 127 127 12 12 + 128: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 125 124(c) 81 + 130: 86(ptr) AccessChain 83(instanceRot) 12 + 131: 28(float) Load 130 + 132: 118(ptr) AccessChain 114(ubo) 117 + 133: 28(float) Load 132 + 134: 28(float) FAdd 131 133 + 135: 28(float) ExtInst 3(GLSL.std.450) 14(Cos) 134 + Store 124(c) 135 + 145: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 143 143 12 12 + 144: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 141 140(mx) 81 + 147: 28(float) Load 124(c) + 148: 28(float) Load 76(s) + 150: 31(fvec3) CompositeConstruct 147 148 149 + 153: 151(ptr) AccessChain 140(mx) 146 + Store 153 150 + 156: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 157 157 12 12 + 155: 28(float) Load 76(s) + 158: 28(float) FNegate 155 + 159: 28(float) Load 124(c) + 160: 31(fvec3) CompositeConstruct 158 159 149 + 161: 151(ptr) AccessChain 140(mx) 154 + Store 161 160 + 166: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 167 167 12 12 + 165: 151(ptr) AccessChain 140(mx) 162 + Store 165 164 + 169: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 170 170 12 12 + 168: 86(ptr) AccessChain 83(instanceRot) 22 + 171: 28(float) Load 168 + 172: 118(ptr) AccessChain 114(ubo) 117 + 173: 28(float) Load 172 + 174: 28(float) FAdd 171 173 + 175: 28(float) ExtInst 3(GLSL.std.450) 13(Sin) 174 + Store 76(s) 175 + 177: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 178 178 12 12 + 176: 86(ptr) AccessChain 83(instanceRot) 22 + 179: 28(float) Load 176 + 180: 118(ptr) AccessChain 114(ubo) 117 + 181: 28(float) Load 180 + 182: 28(float) FAdd 179 181 + 183: 28(float) ExtInst 3(GLSL.std.450) 14(Cos) 182 + Store 124(c) 183 + 189: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 187 187 12 12 + 188: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 185 184(my) 81 + 190: 28(float) Load 124(c) + 191: 28(float) Load 76(s) + 192: 31(fvec3) CompositeConstruct 190 149 191 + 193: 151(ptr) AccessChain 184(my) 146 + Store 193 192 + 196: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 197 197 12 12 + 195: 151(ptr) AccessChain 184(my) 154 + Store 195 194 + 199: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 200 200 12 12 + 198: 28(float) Load 76(s) + 201: 28(float) FNegate 198 + 202: 28(float) Load 124(c) + 203: 31(fvec3) CompositeConstruct 201 149 202 + 204: 151(ptr) AccessChain 184(my) 162 + Store 204 203 + 206: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 207 207 12 12 + 205: 86(ptr) AccessChain 83(instanceRot) 24 + 208: 28(float) Load 205 + 209: 118(ptr) AccessChain 114(ubo) 117 + 210: 28(float) Load 209 + 211: 28(float) FAdd 208 210 + 212: 28(float) ExtInst 3(GLSL.std.450) 13(Sin) 211 + Store 76(s) 212 + 214: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 215 215 12 12 + 213: 86(ptr) AccessChain 83(instanceRot) 24 + 216: 28(float) Load 213 + 217: 118(ptr) AccessChain 114(ubo) 117 + 218: 28(float) Load 217 + 219: 28(float) FAdd 216 218 + 220: 28(float) ExtInst 3(GLSL.std.450) 14(Cos) 219 + Store 124(c) 220 + 226: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 224 224 12 12 + 225: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 222 221(mz) 81 + 228: 151(ptr) AccessChain 221(mz) 146 + Store 228 227 + 230: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 231 231 12 12 + 229: 28(float) Load 124(c) + 232: 28(float) Load 76(s) + 233: 31(fvec3) CompositeConstruct 149 229 232 + 234: 151(ptr) AccessChain 221(mz) 154 + Store 234 233 + 236: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 237 237 12 12 + 235: 28(float) Load 76(s) + 238: 28(float) FNegate 235 + 239: 28(float) Load 124(c) + 240: 31(fvec3) CompositeConstruct 149 238 239 + 241: 151(ptr) AccessChain 221(mz) 162 + Store 241 240 + 247: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 245 245 12 12 + 246: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 243 242(rotMat) 81 + 248: 136 Load 221(mz) + 249: 136 Load 184(my) + 250: 136 MatrixTimesMatrix 248 249 + 251: 136 Load 140(mx) + 252: 136 MatrixTimesMatrix 250 251 + Store 242(rotMat) 252 + 254: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 255 255 12 12 + 253: 86(ptr) AccessChain 83(instanceRot) 22 + 256: 28(float) Load 253 + 258: 118(ptr) AccessChain 114(ubo) 257 + 259: 28(float) Load 258 + 260: 28(float) FAdd 256 259 + 261: 28(float) ExtInst 3(GLSL.std.450) 13(Sin) 260 + Store 76(s) 261 + 263: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 264 264 12 12 + 262: 86(ptr) AccessChain 83(instanceRot) 22 + 265: 28(float) Load 262 + 266: 118(ptr) AccessChain 114(ubo) 257 + 267: 28(float) Load 266 + 268: 28(float) FAdd 265 267 + 269: 28(float) ExtInst 3(GLSL.std.450) 14(Cos) 268 + Store 124(c) 269 + 277: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 275 275 12 12 + 276: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 273 272(gRotMat) 81 + 278: 28(float) Load 124(c) + 279: 28(float) Load 76(s) + 280: 90(fvec4) CompositeConstruct 278 149 279 149 + 283: 281(ptr) AccessChain 272(gRotMat) 146 + Store 283 280 + 286: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 287 287 12 12 + 285: 281(ptr) AccessChain 272(gRotMat) 154 + Store 285 284 + 289: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 290 290 12 12 + 288: 28(float) Load 76(s) + 291: 28(float) FNegate 288 + 292: 28(float) Load 124(c) + 293: 90(fvec4) CompositeConstruct 291 149 292 149 + 294: 281(ptr) AccessChain 272(gRotMat) 162 + Store 294 293 + 297: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 298 298 12 12 + 296: 281(ptr) AccessChain 272(gRotMat) 117 + Store 296 295 + 304: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 302 302 12 12 + 303: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 300 299(locPos) 81 + 308: 31(fvec3) Load 305(inPos) + 309: 136 Load 242(rotMat) + 310: 31(fvec3) VectorTimesMatrix 308 309 + 311: 28(float) CompositeExtract 310 0 + 312: 28(float) CompositeExtract 310 1 + 313: 28(float) CompositeExtract 310 2 + 314: 90(fvec4) CompositeConstruct 311 312 313 163 + Store 299(locPos) 314 + 320: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 318 318 12 12 + 319: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 316 315(pos) 81 + 321: 90(fvec4) Load 299(locPos) + 322: 31(fvec3) VectorShuffle 321 321 0 1 2 + 326: 28(float) Load 323(instanceScale) + 327: 31(fvec3) VectorTimesScalar 322 326 + 331: 31(fvec3) Load 328(instancePos) + 332: 31(fvec3) FAdd 327 331 + 333: 28(float) CompositeExtract 332 0 + 334: 28(float) CompositeExtract 332 1 + 335: 28(float) CompositeExtract 332 2 + 336: 90(fvec4) CompositeConstruct 333 334 335 163 + Store 315(pos) 336 + 359: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 350 350 12 12 + 358: 356(ptr) AccessChain 114(ubo) 146 + 360: 92 Load 358 + 361: 356(ptr) AccessChain 114(ubo) 154 + 362: 92 Load 361 + 363: 92 MatrixTimesMatrix 360 362 + 364: 92 Load 272(gRotMat) + 365: 92 MatrixTimesMatrix 363 364 + 366: 90(fvec4) Load 315(pos) + 367: 90(fvec4) MatrixTimesVector 365 366 + 370: 368(ptr) AccessChain 353 146 + Store 370 367 + 376: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 374 374 12 12 + 375: 356(ptr) AccessChain 114(ubo) 154 + 377: 92 Load 375 + 378: 92 Load 272(gRotMat) + 379: 92 MatrixTimesMatrix 377 378 + 380: 90(fvec4) CompositeExtract 379 0 + 381: 31(fvec3) VectorShuffle 380 380 0 1 2 + 382: 90(fvec4) CompositeExtract 379 1 + 383: 31(fvec3) VectorShuffle 382 382 0 1 2 + 384: 90(fvec4) CompositeExtract 379 2 + 385: 31(fvec3) VectorShuffle 384 384 0 1 2 + 386: 136 CompositeConstruct 381 383 385 + 387: 136 Load 242(rotMat) + 388: 136 ExtInst 3(GLSL.std.450) 34(MatrixInverse) 387 + 389: 136 MatrixTimesMatrix 386 388 + 393: 31(fvec3) Load 390(inNormal) + 394: 31(fvec3) MatrixTimesVector 389 393 + Store 371(outNormal) 394 + 396: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 397 397 12 12 + 395: 356(ptr) AccessChain 114(ubo) 154 + 398: 92 Load 395 + 399: 31(fvec3) Load 305(inPos) + 400: 31(fvec3) Load 328(instancePos) + 401: 31(fvec3) FAdd 399 400 + 402: 28(float) CompositeExtract 401 0 + 403: 28(float) CompositeExtract 401 1 + 404: 28(float) CompositeExtract 401 2 + 405: 90(fvec4) CompositeConstruct 402 403 404 163 + 406: 90(fvec4) MatrixTimesVector 398 405 + Store 315(pos) 406 + 412: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 410 410 12 12 + 411: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 408 407(lPos) 81 + 413: 356(ptr) AccessChain 114(ubo) 154 + 414: 92 Load 413 + 415: 90(fvec4) CompositeExtract 414 0 + 416: 31(fvec3) VectorShuffle 415 415 0 1 2 + 417: 90(fvec4) CompositeExtract 414 1 + 418: 31(fvec3) VectorShuffle 417 417 0 1 2 + 419: 90(fvec4) CompositeExtract 414 2 + 420: 31(fvec3) VectorShuffle 419 419 0 1 2 + 421: 136 CompositeConstruct 416 418 420 + 424: 422(ptr) AccessChain 114(ubo) 162 + 425: 90(fvec4) Load 424 + 426: 31(fvec3) VectorShuffle 425 425 0 1 2 + 427: 31(fvec3) MatrixTimesVector 421 426 + Store 407(lPos) 427 + 433: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 431 431 12 12 + 432: 31(fvec3) Load 407(lPos) + 434: 90(fvec4) Load 315(pos) + 435: 31(fvec3) VectorShuffle 434 434 0 1 2 + 436: 31(fvec3) FSub 432 435 + Store 428(outLightVec) 436 + 442: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 440 440 12 12 + 441: 90(fvec4) Load 315(pos) + 443: 31(fvec3) VectorShuffle 441 441 0 1 2 + 444: 31(fvec3) FNegate 443 + Store 437(outViewVec) 444 + 445: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 446 446 12 12 + Return + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.hlsl.comp.out b/Test/baseResults/spv.debuginfo.hlsl.comp.out new file mode 100644 index 0000000000..e6fbf123a5 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.hlsl.comp.out @@ -0,0 +1,1222 @@ +spv.debuginfo.hlsl.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 968 + + Capability Shader + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 6 "main" 963 + ExecutionMode 6 LocalSize 10 10 1 + 2: String "" + 9: String "float" + 12: String "uint" + 32: String "springForce" + 35: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed entry-point main +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed hlsl-offsets +#line 1 +" + 42: String "p0" + 48: String "p1" + 52: String "restDist" + 63: String "@main" + 67: String "id" + 74: String "dist" + 88: String "int" + 94: String "sphereRadius" + 105: String "gravity" + 110: String "particleCount" + 113: String "UBO" + 116: String "params" + 120: String "ubo" + 147: String "index" + 173: String "bool" + 184: String "normal" + 191: String "pinned" + 195: String "Particle" + 201: String "@data" + 205: String "particleIn" + 226: String "particleOut" + 253: String "force" + 267: String "pos" + 277: String "vel" + 561: String "f" + 610: String "sphereDist" + 661: String "calculateNormals" + 665: String "PushConstants" + 669: String "pushConstants" + 672: String "$Global" + 710: String "a" + 724: String "b" + 741: String "c" + Name 6 "main" + Name 30 "springForce(vf3;vf3;f1;" + Name 27 "p0" + Name 28 "p1" + Name 29 "restDist" + Name 61 "@main(vu3;" + Name 60 "id" + Name 72 "dist" + Name 92 "UBO" + MemberName 92(UBO) 0 "deltaT" + MemberName 92(UBO) 1 "particleMass" + MemberName 92(UBO) 2 "springStiffness" + MemberName 92(UBO) 3 "damping" + MemberName 92(UBO) 4 "restDistH" + MemberName 92(UBO) 5 "restDistV" + MemberName 92(UBO) 6 "restDistD" + MemberName 92(UBO) 7 "sphereRadius" + MemberName 92(UBO) 8 "spherePos" + MemberName 92(UBO) 9 "gravity" + MemberName 92(UBO) 10 "particleCount" + Name 114 "ubo" + MemberName 114(ubo) 0 "params" + Name 123 "" + Name 145 "index" + Name 182 "Particle" + MemberName 182(Particle) 0 "pos" + MemberName 182(Particle) 1 "vel" + MemberName 182(Particle) 2 "uv" + MemberName 182(Particle) 3 "normal" + MemberName 182(Particle) 4 "pinned" + Name 199 "particleIn" + MemberName 199(particleIn) 0 "@data" + Name 208 "particleIn" + Name 222 "particleOut" + MemberName 222(particleOut) 0 "@data" + Name 230 "particleOut" + Name 251 "force" + Name 265 "pos" + Name 275 "vel" + Name 297 "param" + Name 301 "param" + Name 303 "param" + Name 326 "param" + Name 330 "param" + Name 332 "param" + Name 359 "param" + Name 363 "param" + Name 365 "param" + Name 387 "param" + Name 391 "param" + Name 393 "param" + Name 425 "param" + Name 429 "param" + Name 431 "param" + Name 458 "param" + Name 462 "param" + Name 464 "param" + Name 499 "param" + Name 503 "param" + Name 505 "param" + Name 536 "param" + Name 540 "param" + Name 542 "param" + Name 559 "f" + Name 608 "sphereDist" + Name 659 "PushConstants" + MemberName 659(PushConstants) 0 "calculateNormals" + Name 667 "$Global" + MemberName 667($Global) 0 "pushConstants" + Name 675 "" + Name 686 "normal" + Name 708 "a" + Name 722 "b" + Name 739 "c" + Name 961 "id" + Name 963 "id" + Name 965 "param" + MemberDecorate 92(UBO) 0 Offset 0 + MemberDecorate 92(UBO) 1 Offset 4 + MemberDecorate 92(UBO) 2 Offset 8 + MemberDecorate 92(UBO) 3 Offset 12 + MemberDecorate 92(UBO) 4 Offset 16 + MemberDecorate 92(UBO) 5 Offset 20 + MemberDecorate 92(UBO) 6 Offset 24 + MemberDecorate 92(UBO) 7 Offset 28 + MemberDecorate 92(UBO) 8 Offset 32 + MemberDecorate 92(UBO) 9 Offset 48 + MemberDecorate 92(UBO) 10 Offset 64 + Decorate 114(ubo) Block + MemberDecorate 114(ubo) 0 Offset 0 + Decorate 123 Binding 2 + Decorate 123 DescriptorSet 0 + MemberDecorate 182(Particle) 0 Offset 0 + MemberDecorate 182(Particle) 1 Offset 16 + MemberDecorate 182(Particle) 2 Offset 32 + MemberDecorate 182(Particle) 3 Offset 48 + MemberDecorate 182(Particle) 4 Offset 64 + Decorate 197 ArrayStride 80 + Decorate 199(particleIn) BufferBlock + MemberDecorate 199(particleIn) 0 NonWritable + MemberDecorate 199(particleIn) 0 Offset 0 + Decorate 208(particleIn) NonWritable + Decorate 208(particleIn) Binding 0 + Decorate 208(particleIn) DescriptorSet 0 + Decorate 220 ArrayStride 80 + Decorate 222(particleOut) BufferBlock + MemberDecorate 222(particleOut) 0 Offset 0 + Decorate 230(particleOut) Binding 1 + Decorate 230(particleOut) DescriptorSet 0 + MemberDecorate 659(PushConstants) 0 Offset 0 + Decorate 667($Global) Block + MemberDecorate 667($Global) 0 Offset 0 + Decorate 675 Binding 3 + Decorate 675 DescriptorSet 0 + Decorate 963(id) BuiltIn GlobalInvocationId + 4: TypeVoid + 5: TypeFunction 4 + 8: TypeFloat 32 + 11: TypeInt 32 0 + 14: 11(int) Constant 32 + 15: 11(int) Constant 6 + 16: 11(int) Constant 0 + 13: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16 + 17: 11(int) Constant 3 + 10: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16 + 18: TypeVector 8(float) 3 + 19: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17 + 20: TypePointer Function 18(fvec3) + 21: 11(int) Constant 7 + 22: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 19 21 16 + 23: TypePointer Function 8(float) + 24: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 21 16 + 25: TypeFunction 18(fvec3) 20(ptr) 20(ptr) 23(ptr) + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 19 19 19 10 + 34: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 35 + 36: 11(int) Constant 75 + 38: 11(int) Constant 1 + 39: 11(int) Constant 4 + 40: 11(int) Constant 5 + 37: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 38 39 34 40 + 33: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 32 26 34 36 16 37 32 17 36 + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 42 19 34 36 16 33 39 38 + 44: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 49: 11(int) Constant 2 + 47: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 48 19 34 36 16 33 39 49 + 51: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 52 10 34 36 16 33 39 17 + 54: TypeVector 11(int) 3 + 55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 13 17 + 56: TypePointer Function 54(ivec3) + 57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 55 21 16 + 58: TypeFunction 4 56(ptr) + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 4 55 + 65: 11(int) Constant 82 + 64: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 63 59 34 65 16 37 63 17 65 + 66: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 67 55 34 65 16 64 39 38 + 75: 11(int) Constant 76 + 73: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 74 19 34 75 16 33 39 + 83: 11(int) Constant 77 + 85: TypeVector 8(float) 4 + 86: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 39 + 87: TypeInt 32 1 + 89: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 88 14 39 16 + 90: TypeVector 87(int) 2 + 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 89 49 + 92(UBO): TypeStruct 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 85(fvec4) 85(fvec4) 90(ivec2) + 95: 11(int) Constant 48 + 96: 11(int) Constant 20 + 93: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 94 10 34 95 96 16 16 17 + 97: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 94 10 34 95 96 16 16 17 + 98: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 94 10 34 95 96 16 16 17 + 99: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 94 10 34 95 96 16 16 17 + 100: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 94 10 34 95 96 16 16 17 + 101: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 94 10 34 95 96 16 16 17 + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 94 10 34 95 96 16 16 17 + 103: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 94 10 34 95 96 16 16 17 + 106: 11(int) Constant 50 + 107: 11(int) Constant 16 + 104: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 105 86 34 106 107 16 16 17 + 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 105 86 34 106 107 16 16 17 + 111: 11(int) Constant 51 + 109: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 110 91 34 111 96 16 16 17 + 112: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 113 38 34 83 16 37 113 16 17 93 97 98 99 100 101 102 103 104 108 109 + 114(ubo): TypeStruct 92(UBO) + 117: 11(int) Constant 56 + 118: 11(int) Constant 12 + 115: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 116 112 34 117 118 16 16 17 + 119: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 120 38 34 83 16 37 120 16 17 115 + 121: TypePointer Uniform 114(ubo) + 122: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 119 49 16 + 123: 121(ptr) Variable Uniform + 125: 11(int) Constant 8 + 124: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 2 119 34 83 16 37 2 123 125 + 126: 87(int) Constant 0 + 127: 87(int) Constant 2 + 128: TypePointer Uniform 8(float) + 129: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 49 16 + 143: TypePointer Function 11(int) + 144: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 21 16 + 148: 11(int) Constant 83 + 146: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 147 13 34 148 16 64 39 + 153: 87(int) Constant 10 + 154: TypePointer Uniform 87(int) + 155: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 89 49 16 + 165: 11(int) Constant 84 + 172: TypeBool + 174: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 173 14 49 16 + 180: 11(int) Constant 85 + 182(Particle): TypeStruct 85(fvec4) 85(fvec4) 85(fvec4) 85(fvec4) 8(float) + 185: 11(int) Constant 30 + 186: 11(int) Constant 15 + 183: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 184 86 34 185 186 16 16 17 + 187: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 184 86 34 185 186 16 16 17 + 188: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 184 86 34 185 186 16 16 17 + 189: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 184 86 34 185 186 16 16 17 + 192: 11(int) Constant 31 + 193: 11(int) Constant 14 + 190: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 191 10 34 192 193 16 16 17 + 196: 11(int) Constant 88 + 194: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 195 38 34 196 16 37 195 16 17 183 187 188 189 190 + 197: TypeRuntimeArray 182(Particle) + 198: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 194 16 + 199(particleIn): TypeStruct 197 + 202: 11(int) Constant 35 + 203: 11(int) Constant 28 + 200: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 201 198 34 202 203 16 16 17 + 204: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 205 38 34 196 16 37 205 16 17 200 + 206: TypePointer Uniform 199(particleIn) + 207: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 204 49 16 + 208(particleIn): 206(ptr) Variable Uniform + 209: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 205 204 34 196 16 37 205 208(particleIn) 125 + 213: 87(int) Constant 4 + 216: 8(float) Constant 1065353216 + 220: TypeRuntimeArray 182(Particle) + 221: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 194 16 +222(particleOut): TypeStruct 220 + 224: 11(int) Constant 37 + 223: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 201 221 34 224 185 16 16 17 + 227: 11(int) Constant 89 + 225: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 226 38 34 227 16 37 226 16 17 223 + 228: TypePointer Uniform 222(particleOut) + 229: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 225 49 16 +230(particleOut): 228(ptr) Variable Uniform + 231: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 226 225 34 227 16 37 226 230(particleOut) 125 + 236: TypePointer Uniform 85(fvec4) + 237: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 86 49 16 + 243: 11(int) Constant 90 + 244: 87(int) Constant 1 + 245: 8(float) Constant 0 + 246: 85(fvec4) ConstantComposite 245 245 245 245 + 249: 11(int) Constant 91 + 254: 11(int) Constant 95 + 252: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 253 19 34 254 16 64 39 + 258: 87(int) Constant 9 + 268: 11(int) Constant 97 + 266: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 267 19 34 268 16 64 39 + 278: 11(int) Constant 98 + 276: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 277 19 34 278 16 64 39 + 287: 11(int) Constant 102 + 295: 11(int) Constant 103 + 312: 11(int) Constant 106 + 324: 11(int) Constant 107 + 341: 11(int) Constant 110 + 353: 11(int) Constant 111 + 358: 87(int) Constant 5 + 374: 11(int) Constant 114 + 382: 11(int) Constant 115 + 402: 11(int) Constant 118 + 418: 11(int) Constant 119 + 424: 87(int) Constant 6 + 440: 11(int) Constant 122 + 452: 11(int) Constant 123 + 473: 11(int) Constant 126 + 493: 11(int) Constant 127 + 514: 11(int) Constant 130 + 530: 11(int) Constant 131 + 548: 87(int) Constant 3 + 552: 11(int) Constant 134 + 562: 11(int) Constant 137 + 560: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 561 19 34 562 16 64 39 + 572: 11(int) Constant 138 + 579: 8(float) Constant 1056964608 + 596: 11(int) Constant 139 + 611: 11(int) Constant 142 + 609: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 610 19 34 611 16 64 39 + 618: 87(int) Constant 8 + 625: 11(int) Constant 143 + 627: 87(int) Constant 7 + 630: 8(float) Constant 1008981770 + 638: 11(int) Constant 145 + 657: 11(int) Constant 147 +659(PushConstants): TypeStruct 11(int) + 662: 11(int) Constant 67 + 663: 11(int) Constant 23 + 660: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 661 13 34 662 663 16 16 17 + 666: 11(int) Constant 151 + 664: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 665 38 34 666 16 37 665 16 17 660 + 667($Global): TypeStruct 659(PushConstants) + 670: 11(int) Constant 71 + 668: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 669 664 34 670 186 16 16 17 + 671: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 672 38 34 666 16 37 672 16 17 668 + 673: TypePointer Uniform 667($Global) + 674: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 671 49 16 + 675: 673(ptr) Variable Uniform + 676: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 2 671 34 666 16 37 2 675 125 + 677: TypePointer Uniform 11(int) + 678: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 49 16 + 688: 11(int) Constant 152 + 687: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 184 19 34 688 16 64 39 + 692: 18(fvec3) ConstantComposite 245 245 245 + 695: 11(int) Constant 154 + 703: 11(int) Constant 155 + 711: 11(int) Constant 156 + 709: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 710 19 34 711 16 64 39 + 725: 11(int) Constant 157 + 723: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 724 19 34 725 16 64 39 + 742: 11(int) Constant 158 + 740: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 741 19 34 742 16 64 39 + 757: 11(int) Constant 159 + 769: 11(int) Constant 161 + 781: 11(int) Constant 162 + 793: 11(int) Constant 163 + 806: 11(int) Constant 164 + 815: 11(int) Constant 165 + 827: 11(int) Constant 168 + 839: 11(int) Constant 169 + 847: 11(int) Constant 170 + 859: 11(int) Constant 171 + 872: 11(int) Constant 172 + 881: 11(int) Constant 173 + 893: 11(int) Constant 175 + 905: 11(int) Constant 176 + 914: 11(int) Constant 177 + 927: 11(int) Constant 178 + 939: 11(int) Constant 179 + 951: 11(int) Constant 182 + 962: TypePointer Input 54(ivec3) + 963(id): 962(ptr) Variable Input + 6(main): 4 Function None 5 + 7: Label + 961(id): 56(ptr) Variable Function + 965(param): 56(ptr) Variable Function + 964: 54(ivec3) Load 963(id) + Store 961(id) 964 + 966: 54(ivec3) Load 961(id) + Store 965(param) 966 + 967: 4 FunctionCall 61(@main(vu3;) 965(param) + Return + FunctionEnd +30(springForce(vf3;vf3;f1;): 18(fvec3) Function None 25 + 27(p0): 20(ptr) FunctionParameter + 28(p1): 20(ptr) FunctionParameter + 29(restDist): 23(ptr) FunctionParameter + 31: Label + 72(dist): 20(ptr) Variable Function + 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 33 + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 36 36 16 16 + 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 41 27(p0) 44 + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 47 28(p1) 44 + 53: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 51 29(restDist) 44 + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 33 30(springForce(vf3;vf3;f1;) + 77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 75 75 16 16 + 76: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 73 72(dist) 44 + 78: 18(fvec3) Load 27(p0) + 79: 18(fvec3) Load 28(p1) + 80: 18(fvec3) FSub 78 79 + Store 72(dist) 80 + 82: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 83 83 16 16 + 81: 18(fvec3) Load 72(dist) + 84: 18(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 81 + 130: 128(ptr) AccessChain 123 126 127 + 131: 8(float) Load 130 + 132: 18(fvec3) VectorTimesScalar 84 131 + 133: 18(fvec3) Load 72(dist) + 134: 8(float) ExtInst 3(GLSL.std.450) 66(Length) 133 + 135: 8(float) Load 29(restDist) + 136: 8(float) FSub 134 135 + 137: 18(fvec3) VectorTimesScalar 132 136 + ReturnValue 137 + FunctionEnd + 61(@main(vu3;): 4 Function None 58 + 60(id): 56(ptr) FunctionParameter + 62: Label + 145(index): 143(ptr) Variable Function + 251(force): 20(ptr) Variable Function + 265(pos): 20(ptr) Variable Function + 275(vel): 20(ptr) Variable Function + 297(param): 20(ptr) Variable Function + 301(param): 20(ptr) Variable Function + 303(param): 23(ptr) Variable Function + 326(param): 20(ptr) Variable Function + 330(param): 20(ptr) Variable Function + 332(param): 23(ptr) Variable Function + 359(param): 20(ptr) Variable Function + 363(param): 20(ptr) Variable Function + 365(param): 23(ptr) Variable Function + 387(param): 20(ptr) Variable Function + 391(param): 20(ptr) Variable Function + 393(param): 23(ptr) Variable Function + 425(param): 20(ptr) Variable Function + 429(param): 20(ptr) Variable Function + 431(param): 23(ptr) Variable Function + 458(param): 20(ptr) Variable Function + 462(param): 20(ptr) Variable Function + 464(param): 23(ptr) Variable Function + 499(param): 20(ptr) Variable Function + 503(param): 20(ptr) Variable Function + 505(param): 23(ptr) Variable Function + 536(param): 20(ptr) Variable Function + 540(param): 20(ptr) Variable Function + 542(param): 23(ptr) Variable Function + 559(f): 20(ptr) Variable Function + 608(sphereDist): 20(ptr) Variable Function + 686(normal): 20(ptr) Variable Function + 708(a): 20(ptr) Variable Function + 722(b): 20(ptr) Variable Function + 739(c): 20(ptr) Variable Function + 69: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 70: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 65 65 16 16 + 68: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 66 60(id) 44 + 142: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 64 61(@main(vu3;) + 150: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 148 148 16 16 + 149: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 146 145(index) 44 + 151: 143(ptr) AccessChain 60(id) 38 + 152: 11(int) Load 151 + 156: 154(ptr) AccessChain 123 126 153 16 + 157: 87(int) Load 156 + 158: 11(int) Bitcast 157 + 159: 11(int) IMul 152 158 + 160: 143(ptr) AccessChain 60(id) 16 + 161: 11(int) Load 160 + 162: 11(int) IAdd 159 161 + Store 145(index) 162 + 164: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 165 165 16 16 + 163: 11(int) Load 145(index) + 166: 154(ptr) AccessChain 123 126 153 16 + 167: 87(int) Load 166 + 168: 154(ptr) AccessChain 123 126 153 38 + 169: 87(int) Load 168 + 170: 87(int) IMul 167 169 + 171: 11(int) Bitcast 170 + 175: 172(bool) UGreaterThan 163 171 + SelectionMerge 177 None + BranchConditional 175 176 177 + 176: Label + 178: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 179: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 180 180 16 16 + Return + 177: Label + 211: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 212: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 196 196 16 16 + 210: 11(int) Load 145(index) + 214: 128(ptr) AccessChain 208(particleIn) 126 210 213 + 215: 8(float) Load 214 + 217: 172(bool) FOrdEqual 215 216 + SelectionMerge 219 None + BranchConditional 217 218 219 + 218: Label + 233: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 234: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 227 227 16 16 + 232: 11(int) Load 145(index) + 235: 11(int) Load 145(index) + 238: 236(ptr) AccessChain 230(particleOut) 126 235 126 + 239: 85(fvec4) Load 238 + 240: 236(ptr) AccessChain 230(particleOut) 126 232 126 + Store 240 239 + 242: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 243 243 16 16 + 241: 11(int) Load 145(index) + 247: 236(ptr) AccessChain 230(particleOut) 126 241 244 + Store 247 246 + 248: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 249 249 16 16 + Return + 219: Label + 256: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 257: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 254 254 16 16 + 255: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 252 251(force) 44 + 259: 236(ptr) AccessChain 123 126 258 + 260: 85(fvec4) Load 259 + 261: 18(fvec3) VectorShuffle 260 260 0 1 2 + 262: 128(ptr) AccessChain 123 126 244 + 263: 8(float) Load 262 + 264: 18(fvec3) VectorTimesScalar 261 263 + Store 251(force) 264 + 270: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 268 268 16 16 + 269: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 266 265(pos) 44 + 271: 11(int) Load 145(index) + 272: 236(ptr) AccessChain 208(particleIn) 126 271 126 + 273: 85(fvec4) Load 272 + 274: 18(fvec3) VectorShuffle 273 273 0 1 2 + Store 265(pos) 274 + 280: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 278 278 16 16 + 279: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 276 275(vel) 44 + 281: 11(int) Load 145(index) + 282: 236(ptr) AccessChain 208(particleIn) 126 281 244 + 283: 85(fvec4) Load 282 + 284: 18(fvec3) VectorShuffle 283 283 0 1 2 + Store 275(vel) 284 + 286: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 287 287 16 16 + 285: 143(ptr) AccessChain 60(id) 16 + 288: 11(int) Load 285 + 289: 172(bool) UGreaterThan 288 16 + SelectionMerge 291 None + BranchConditional 289 290 291 + 290: Label + 293: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 294: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 295 295 16 16 + 292: 11(int) Load 145(index) + 296: 11(int) ISub 292 38 + 298: 236(ptr) AccessChain 208(particleIn) 126 296 126 + 299: 85(fvec4) Load 298 + 300: 18(fvec3) VectorShuffle 299 299 0 1 2 + Store 297(param) 300 + 302: 18(fvec3) Load 265(pos) + Store 301(param) 302 + 304: 128(ptr) AccessChain 123 126 213 + 305: 8(float) Load 304 + Store 303(param) 305 + 306: 18(fvec3) FunctionCall 30(springForce(vf3;vf3;f1;) 297(param) 301(param) 303(param) + 307: 18(fvec3) Load 251(force) + 308: 18(fvec3) FAdd 307 306 + Store 251(force) 308 + Branch 291 + 291: Label + 310: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 311: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 312 312 16 16 + 309: 143(ptr) AccessChain 60(id) 16 + 313: 11(int) Load 309 + 314: 154(ptr) AccessChain 123 126 153 16 + 315: 87(int) Load 314 + 316: 87(int) ISub 315 244 + 317: 11(int) Bitcast 316 + 318: 172(bool) ULessThan 313 317 + SelectionMerge 320 None + BranchConditional 318 319 320 + 319: Label + 322: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 323: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 324 324 16 16 + 321: 11(int) Load 145(index) + 325: 11(int) IAdd 321 38 + 327: 236(ptr) AccessChain 208(particleIn) 126 325 126 + 328: 85(fvec4) Load 327 + 329: 18(fvec3) VectorShuffle 328 328 0 1 2 + Store 326(param) 329 + 331: 18(fvec3) Load 265(pos) + Store 330(param) 331 + 333: 128(ptr) AccessChain 123 126 213 + 334: 8(float) Load 333 + Store 332(param) 334 + 335: 18(fvec3) FunctionCall 30(springForce(vf3;vf3;f1;) 326(param) 330(param) 332(param) + 336: 18(fvec3) Load 251(force) + 337: 18(fvec3) FAdd 336 335 + Store 251(force) 337 + Branch 320 + 320: Label + 339: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 340: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 341 341 16 16 + 338: 143(ptr) AccessChain 60(id) 38 + 342: 11(int) Load 338 + 343: 154(ptr) AccessChain 123 126 153 38 + 344: 87(int) Load 343 + 345: 87(int) ISub 344 244 + 346: 11(int) Bitcast 345 + 347: 172(bool) ULessThan 342 346 + SelectionMerge 349 None + BranchConditional 347 348 349 + 348: Label + 351: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 352: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 353 353 16 16 + 350: 11(int) Load 145(index) + 354: 154(ptr) AccessChain 123 126 153 16 + 355: 87(int) Load 354 + 356: 11(int) Bitcast 355 + 357: 11(int) IAdd 350 356 + 360: 236(ptr) AccessChain 208(particleIn) 126 357 126 + 361: 85(fvec4) Load 360 + 362: 18(fvec3) VectorShuffle 361 361 0 1 2 + Store 359(param) 362 + 364: 18(fvec3) Load 265(pos) + Store 363(param) 364 + 366: 128(ptr) AccessChain 123 126 358 + 367: 8(float) Load 366 + Store 365(param) 367 + 368: 18(fvec3) FunctionCall 30(springForce(vf3;vf3;f1;) 359(param) 363(param) 365(param) + 369: 18(fvec3) Load 251(force) + 370: 18(fvec3) FAdd 369 368 + Store 251(force) 370 + Branch 349 + 349: Label + 372: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 373: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 374 374 16 16 + 371: 143(ptr) AccessChain 60(id) 38 + 375: 11(int) Load 371 + 376: 172(bool) UGreaterThan 375 16 + SelectionMerge 378 None + BranchConditional 376 377 378 + 377: Label + 380: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 381: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 382 382 16 16 + 379: 11(int) Load 145(index) + 383: 154(ptr) AccessChain 123 126 153 16 + 384: 87(int) Load 383 + 385: 11(int) Bitcast 384 + 386: 11(int) ISub 379 385 + 388: 236(ptr) AccessChain 208(particleIn) 126 386 126 + 389: 85(fvec4) Load 388 + 390: 18(fvec3) VectorShuffle 389 389 0 1 2 + Store 387(param) 390 + 392: 18(fvec3) Load 265(pos) + Store 391(param) 392 + 394: 128(ptr) AccessChain 123 126 358 + 395: 8(float) Load 394 + Store 393(param) 395 + 396: 18(fvec3) FunctionCall 30(springForce(vf3;vf3;f1;) 387(param) 391(param) 393(param) + 397: 18(fvec3) Load 251(force) + 398: 18(fvec3) FAdd 397 396 + Store 251(force) 398 + Branch 378 + 378: Label + 400: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 401: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 402 402 16 16 + 399: 143(ptr) AccessChain 60(id) 16 + 403: 11(int) Load 399 + 404: 172(bool) UGreaterThan 403 16 + 405: 143(ptr) AccessChain 60(id) 38 + 406: 11(int) Load 405 + 407: 154(ptr) AccessChain 123 126 153 38 + 408: 87(int) Load 407 + 409: 87(int) ISub 408 244 + 410: 11(int) Bitcast 409 + 411: 172(bool) ULessThan 406 410 + 412: 172(bool) LogicalAnd 404 411 + SelectionMerge 414 None + BranchConditional 412 413 414 + 413: Label + 416: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 417: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 418 418 16 16 + 415: 11(int) Load 145(index) + 419: 154(ptr) AccessChain 123 126 153 16 + 420: 87(int) Load 419 + 421: 11(int) Bitcast 420 + 422: 11(int) IAdd 415 421 + 423: 11(int) ISub 422 38 + 426: 236(ptr) AccessChain 208(particleIn) 126 423 126 + 427: 85(fvec4) Load 426 + 428: 18(fvec3) VectorShuffle 427 427 0 1 2 + Store 425(param) 428 + 430: 18(fvec3) Load 265(pos) + Store 429(param) 430 + 432: 128(ptr) AccessChain 123 126 424 + 433: 8(float) Load 432 + Store 431(param) 433 + 434: 18(fvec3) FunctionCall 30(springForce(vf3;vf3;f1;) 425(param) 429(param) 431(param) + 435: 18(fvec3) Load 251(force) + 436: 18(fvec3) FAdd 435 434 + Store 251(force) 436 + Branch 414 + 414: Label + 438: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 439: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 440 440 16 16 + 437: 143(ptr) AccessChain 60(id) 16 + 441: 11(int) Load 437 + 442: 172(bool) UGreaterThan 441 16 + 443: 143(ptr) AccessChain 60(id) 38 + 444: 11(int) Load 443 + 445: 172(bool) UGreaterThan 444 16 + 446: 172(bool) LogicalAnd 442 445 + SelectionMerge 448 None + BranchConditional 446 447 448 + 447: Label + 450: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 451: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 452 452 16 16 + 449: 11(int) Load 145(index) + 453: 154(ptr) AccessChain 123 126 153 16 + 454: 87(int) Load 453 + 455: 11(int) Bitcast 454 + 456: 11(int) ISub 449 455 + 457: 11(int) ISub 456 38 + 459: 236(ptr) AccessChain 208(particleIn) 126 457 126 + 460: 85(fvec4) Load 459 + 461: 18(fvec3) VectorShuffle 460 460 0 1 2 + Store 458(param) 461 + 463: 18(fvec3) Load 265(pos) + Store 462(param) 463 + 465: 128(ptr) AccessChain 123 126 424 + 466: 8(float) Load 465 + Store 464(param) 466 + 467: 18(fvec3) FunctionCall 30(springForce(vf3;vf3;f1;) 458(param) 462(param) 464(param) + 468: 18(fvec3) Load 251(force) + 469: 18(fvec3) FAdd 468 467 + Store 251(force) 469 + Branch 448 + 448: Label + 471: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 472: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 473 473 16 16 + 470: 143(ptr) AccessChain 60(id) 16 + 474: 11(int) Load 470 + 475: 154(ptr) AccessChain 123 126 153 16 + 476: 87(int) Load 475 + 477: 87(int) ISub 476 244 + 478: 11(int) Bitcast 477 + 479: 172(bool) ULessThan 474 478 + 480: 143(ptr) AccessChain 60(id) 38 + 481: 11(int) Load 480 + 482: 154(ptr) AccessChain 123 126 153 38 + 483: 87(int) Load 482 + 484: 87(int) ISub 483 244 + 485: 11(int) Bitcast 484 + 486: 172(bool) ULessThan 481 485 + 487: 172(bool) LogicalAnd 479 486 + SelectionMerge 489 None + BranchConditional 487 488 489 + 488: Label + 491: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 492: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 493 493 16 16 + 490: 11(int) Load 145(index) + 494: 154(ptr) AccessChain 123 126 153 16 + 495: 87(int) Load 494 + 496: 11(int) Bitcast 495 + 497: 11(int) IAdd 490 496 + 498: 11(int) IAdd 497 38 + 500: 236(ptr) AccessChain 208(particleIn) 126 498 126 + 501: 85(fvec4) Load 500 + 502: 18(fvec3) VectorShuffle 501 501 0 1 2 + Store 499(param) 502 + 504: 18(fvec3) Load 265(pos) + Store 503(param) 504 + 506: 128(ptr) AccessChain 123 126 424 + 507: 8(float) Load 506 + Store 505(param) 507 + 508: 18(fvec3) FunctionCall 30(springForce(vf3;vf3;f1;) 499(param) 503(param) 505(param) + 509: 18(fvec3) Load 251(force) + 510: 18(fvec3) FAdd 509 508 + Store 251(force) 510 + Branch 489 + 489: Label + 512: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 513: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 514 514 16 16 + 511: 143(ptr) AccessChain 60(id) 16 + 515: 11(int) Load 511 + 516: 154(ptr) AccessChain 123 126 153 16 + 517: 87(int) Load 516 + 518: 87(int) ISub 517 244 + 519: 11(int) Bitcast 518 + 520: 172(bool) ULessThan 515 519 + 521: 143(ptr) AccessChain 60(id) 38 + 522: 11(int) Load 521 + 523: 172(bool) UGreaterThan 522 16 + 524: 172(bool) LogicalAnd 520 523 + SelectionMerge 526 None + BranchConditional 524 525 526 + 525: Label + 528: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 529: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 530 530 16 16 + 527: 11(int) Load 145(index) + 531: 154(ptr) AccessChain 123 126 153 16 + 532: 87(int) Load 531 + 533: 11(int) Bitcast 532 + 534: 11(int) ISub 527 533 + 535: 11(int) IAdd 534 38 + 537: 236(ptr) AccessChain 208(particleIn) 126 535 126 + 538: 85(fvec4) Load 537 + 539: 18(fvec3) VectorShuffle 538 538 0 1 2 + Store 536(param) 539 + 541: 18(fvec3) Load 265(pos) + Store 540(param) 541 + 543: 128(ptr) AccessChain 123 126 424 + 544: 8(float) Load 543 + Store 542(param) 544 + 545: 18(fvec3) FunctionCall 30(springForce(vf3;vf3;f1;) 536(param) 540(param) 542(param) + 546: 18(fvec3) Load 251(force) + 547: 18(fvec3) FAdd 546 545 + Store 251(force) 547 + Branch 526 + 526: Label + 550: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 551: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 552 552 16 16 + 549: 128(ptr) AccessChain 123 126 548 + 553: 8(float) Load 549 + 554: 8(float) FNegate 553 + 555: 18(fvec3) Load 275(vel) + 556: 18(fvec3) VectorTimesScalar 555 554 + 557: 18(fvec3) Load 251(force) + 558: 18(fvec3) FAdd 557 556 + Store 251(force) 558 + 564: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 562 562 16 16 + 563: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 560 559(f) 44 + 565: 18(fvec3) Load 251(force) + 566: 128(ptr) AccessChain 123 126 244 + 567: 8(float) Load 566 + 568: 8(float) FDiv 216 567 + 569: 18(fvec3) VectorTimesScalar 565 568 + Store 559(f) 569 + 571: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 572 572 16 16 + 570: 11(int) Load 145(index) + 573: 18(fvec3) Load 265(pos) + 574: 18(fvec3) Load 275(vel) + 575: 128(ptr) AccessChain 123 126 126 + 576: 8(float) Load 575 + 577: 18(fvec3) VectorTimesScalar 574 576 + 578: 18(fvec3) FAdd 573 577 + 580: 18(fvec3) Load 559(f) + 581: 18(fvec3) VectorTimesScalar 580 579 + 582: 128(ptr) AccessChain 123 126 126 + 583: 8(float) Load 582 + 584: 18(fvec3) VectorTimesScalar 581 583 + 585: 128(ptr) AccessChain 123 126 126 + 586: 8(float) Load 585 + 587: 18(fvec3) VectorTimesScalar 584 586 + 588: 18(fvec3) FAdd 578 587 + 589: 8(float) CompositeExtract 588 0 + 590: 8(float) CompositeExtract 588 1 + 591: 8(float) CompositeExtract 588 2 + 592: 85(fvec4) CompositeConstruct 589 590 591 216 + 593: 236(ptr) AccessChain 230(particleOut) 126 570 126 + Store 593 592 + 595: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 596 596 16 16 + 594: 11(int) Load 145(index) + 597: 18(fvec3) Load 275(vel) + 598: 18(fvec3) Load 559(f) + 599: 128(ptr) AccessChain 123 126 126 + 600: 8(float) Load 599 + 601: 18(fvec3) VectorTimesScalar 598 600 + 602: 18(fvec3) FAdd 597 601 + 603: 8(float) CompositeExtract 602 0 + 604: 8(float) CompositeExtract 602 1 + 605: 8(float) CompositeExtract 602 2 + 606: 85(fvec4) CompositeConstruct 603 604 605 245 + 607: 236(ptr) AccessChain 230(particleOut) 126 594 244 + Store 607 606 + 613: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 611 611 16 16 + 612: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 609 608(sphereDist) 44 + 614: 11(int) Load 145(index) + 615: 236(ptr) AccessChain 230(particleOut) 126 614 126 + 616: 85(fvec4) Load 615 + 617: 18(fvec3) VectorShuffle 616 616 0 1 2 + 619: 236(ptr) AccessChain 123 126 618 + 620: 85(fvec4) Load 619 + 621: 18(fvec3) VectorShuffle 620 620 0 1 2 + 622: 18(fvec3) FSub 617 621 + Store 608(sphereDist) 622 + 624: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 625 625 16 16 + 623: 18(fvec3) Load 608(sphereDist) + 626: 8(float) ExtInst 3(GLSL.std.450) 66(Length) 623 + 628: 128(ptr) AccessChain 123 126 627 + 629: 8(float) Load 628 + 631: 8(float) FAdd 629 630 + 632: 172(bool) FOrdLessThan 626 631 + SelectionMerge 634 None + BranchConditional 632 633 634 + 633: Label + 636: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 637: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 638 638 16 16 + 635: 11(int) Load 145(index) + 639: 236(ptr) AccessChain 123 126 618 + 640: 85(fvec4) Load 639 + 641: 18(fvec3) VectorShuffle 640 640 0 1 2 + 642: 18(fvec3) Load 608(sphereDist) + 643: 18(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 642 + 644: 128(ptr) AccessChain 123 126 627 + 645: 8(float) Load 644 + 646: 8(float) FAdd 645 630 + 647: 18(fvec3) VectorTimesScalar 643 646 + 648: 18(fvec3) FAdd 641 647 + 649: 128(ptr) AccessChain 230(particleOut) 126 635 126 16 + 650: 8(float) CompositeExtract 648 0 + Store 649 650 + 651: 128(ptr) AccessChain 230(particleOut) 126 635 126 38 + 652: 8(float) CompositeExtract 648 1 + Store 651 652 + 653: 128(ptr) AccessChain 230(particleOut) 126 635 126 49 + 654: 8(float) CompositeExtract 648 2 + Store 653 654 + 656: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 657 657 16 16 + 655: 11(int) Load 145(index) + 658: 236(ptr) AccessChain 230(particleOut) 126 655 244 + Store 658 246 + Branch 634 + 634: Label + 680: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 681: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 666 666 16 16 + 679: 677(ptr) AccessChain 675 126 126 + 682: 11(int) Load 679 + 683: 172(bool) IEqual 682 38 + SelectionMerge 685 None + BranchConditional 683 684 685 + 684: Label + 690: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 691: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 688 688 16 16 + 689: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 687 686(normal) 44 + Store 686(normal) 692 + 694: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 695 695 16 16 + 693: 143(ptr) AccessChain 60(id) 38 + 696: 11(int) Load 693 + 697: 172(bool) UGreaterThan 696 16 + SelectionMerge 699 None + BranchConditional 697 698 699 + 698: Label + 701: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 702: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 703 703 16 16 + 700: 143(ptr) AccessChain 60(id) 16 + 704: 11(int) Load 700 + 705: 172(bool) UGreaterThan 704 16 + SelectionMerge 707 None + BranchConditional 705 706 707 + 706: Label + 713: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 714: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 711 711 16 16 + 712: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 709 708(a) 44 + 715: 11(int) Load 145(index) + 716: 11(int) ISub 715 38 + 717: 236(ptr) AccessChain 208(particleIn) 126 716 126 + 718: 85(fvec4) Load 717 + 719: 18(fvec3) VectorShuffle 718 718 0 1 2 + 720: 18(fvec3) Load 265(pos) + 721: 18(fvec3) FSub 719 720 + Store 708(a) 721 + 727: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 725 725 16 16 + 726: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 723 722(b) 44 + 728: 11(int) Load 145(index) + 729: 154(ptr) AccessChain 123 126 153 16 + 730: 87(int) Load 729 + 731: 11(int) Bitcast 730 + 732: 11(int) ISub 728 731 + 733: 11(int) ISub 732 38 + 734: 236(ptr) AccessChain 208(particleIn) 126 733 126 + 735: 85(fvec4) Load 734 + 736: 18(fvec3) VectorShuffle 735 735 0 1 2 + 737: 18(fvec3) Load 265(pos) + 738: 18(fvec3) FSub 736 737 + Store 722(b) 738 + 744: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 742 742 16 16 + 743: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 740 739(c) 44 + 745: 11(int) Load 145(index) + 746: 154(ptr) AccessChain 123 126 153 16 + 747: 87(int) Load 746 + 748: 11(int) Bitcast 747 + 749: 11(int) ISub 745 748 + 750: 236(ptr) AccessChain 208(particleIn) 126 749 126 + 751: 85(fvec4) Load 750 + 752: 18(fvec3) VectorShuffle 751 751 0 1 2 + 753: 18(fvec3) Load 265(pos) + 754: 18(fvec3) FSub 752 753 + Store 739(c) 754 + 756: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 757 757 16 16 + 755: 18(fvec3) Load 708(a) + 758: 18(fvec3) Load 722(b) + 759: 18(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 755 758 + 760: 18(fvec3) Load 722(b) + 761: 18(fvec3) Load 739(c) + 762: 18(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 760 761 + 763: 18(fvec3) FAdd 759 762 + 764: 18(fvec3) Load 686(normal) + 765: 18(fvec3) FAdd 764 763 + Store 686(normal) 765 + Branch 707 + 707: Label + 767: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 768: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 769 769 16 16 + 766: 143(ptr) AccessChain 60(id) 16 + 770: 11(int) Load 766 + 771: 154(ptr) AccessChain 123 126 153 16 + 772: 87(int) Load 771 + 773: 87(int) ISub 772 244 + 774: 11(int) Bitcast 773 + 775: 172(bool) ULessThan 770 774 + SelectionMerge 777 None + BranchConditional 775 776 777 + 776: Label + 779: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 780: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 781 781 16 16 + 778: 11(int) Load 145(index) + 782: 154(ptr) AccessChain 123 126 153 16 + 783: 87(int) Load 782 + 784: 11(int) Bitcast 783 + 785: 11(int) ISub 778 784 + 786: 236(ptr) AccessChain 208(particleIn) 126 785 126 + 787: 85(fvec4) Load 786 + 788: 18(fvec3) VectorShuffle 787 787 0 1 2 + 789: 18(fvec3) Load 265(pos) + 790: 18(fvec3) FSub 788 789 + Store 708(a) 790 + 792: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 793 793 16 16 + 791: 11(int) Load 145(index) + 794: 154(ptr) AccessChain 123 126 153 16 + 795: 87(int) Load 794 + 796: 11(int) Bitcast 795 + 797: 11(int) ISub 791 796 + 798: 11(int) IAdd 797 38 + 799: 236(ptr) AccessChain 208(particleIn) 126 798 126 + 800: 85(fvec4) Load 799 + 801: 18(fvec3) VectorShuffle 800 800 0 1 2 + 802: 18(fvec3) Load 265(pos) + 803: 18(fvec3) FSub 801 802 + Store 722(b) 803 + 805: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 806 806 16 16 + 804: 11(int) Load 145(index) + 807: 11(int) IAdd 804 38 + 808: 236(ptr) AccessChain 208(particleIn) 126 807 126 + 809: 85(fvec4) Load 808 + 810: 18(fvec3) VectorShuffle 809 809 0 1 2 + 811: 18(fvec3) Load 265(pos) + 812: 18(fvec3) FSub 810 811 + Store 739(c) 812 + 814: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 815 815 16 16 + 813: 18(fvec3) Load 708(a) + 816: 18(fvec3) Load 722(b) + 817: 18(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 813 816 + 818: 18(fvec3) Load 722(b) + 819: 18(fvec3) Load 739(c) + 820: 18(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 818 819 + 821: 18(fvec3) FAdd 817 820 + 822: 18(fvec3) Load 686(normal) + 823: 18(fvec3) FAdd 822 821 + Store 686(normal) 823 + Branch 777 + 777: Label + Branch 699 + 699: Label + 825: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 826: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 827 827 16 16 + 824: 143(ptr) AccessChain 60(id) 38 + 828: 11(int) Load 824 + 829: 154(ptr) AccessChain 123 126 153 38 + 830: 87(int) Load 829 + 831: 87(int) ISub 830 244 + 832: 11(int) Bitcast 831 + 833: 172(bool) ULessThan 828 832 + SelectionMerge 835 None + BranchConditional 833 834 835 + 834: Label + 837: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 838: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 839 839 16 16 + 836: 143(ptr) AccessChain 60(id) 16 + 840: 11(int) Load 836 + 841: 172(bool) UGreaterThan 840 16 + SelectionMerge 843 None + BranchConditional 841 842 843 + 842: Label + 845: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 846: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 847 847 16 16 + 844: 11(int) Load 145(index) + 848: 154(ptr) AccessChain 123 126 153 16 + 849: 87(int) Load 848 + 850: 11(int) Bitcast 849 + 851: 11(int) IAdd 844 850 + 852: 236(ptr) AccessChain 208(particleIn) 126 851 126 + 853: 85(fvec4) Load 852 + 854: 18(fvec3) VectorShuffle 853 853 0 1 2 + 855: 18(fvec3) Load 265(pos) + 856: 18(fvec3) FSub 854 855 + Store 708(a) 856 + 858: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 859 859 16 16 + 857: 11(int) Load 145(index) + 860: 154(ptr) AccessChain 123 126 153 16 + 861: 87(int) Load 860 + 862: 11(int) Bitcast 861 + 863: 11(int) IAdd 857 862 + 864: 11(int) ISub 863 38 + 865: 236(ptr) AccessChain 208(particleIn) 126 864 126 + 866: 85(fvec4) Load 865 + 867: 18(fvec3) VectorShuffle 866 866 0 1 2 + 868: 18(fvec3) Load 265(pos) + 869: 18(fvec3) FSub 867 868 + Store 722(b) 869 + 871: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 872 872 16 16 + 870: 11(int) Load 145(index) + 873: 11(int) ISub 870 38 + 874: 236(ptr) AccessChain 208(particleIn) 126 873 126 + 875: 85(fvec4) Load 874 + 876: 18(fvec3) VectorShuffle 875 875 0 1 2 + 877: 18(fvec3) Load 265(pos) + 878: 18(fvec3) FSub 876 877 + Store 739(c) 878 + 880: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 881 881 16 16 + 879: 18(fvec3) Load 708(a) + 882: 18(fvec3) Load 722(b) + 883: 18(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 879 882 + 884: 18(fvec3) Load 722(b) + 885: 18(fvec3) Load 739(c) + 886: 18(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 884 885 + 887: 18(fvec3) FAdd 883 886 + 888: 18(fvec3) Load 686(normal) + 889: 18(fvec3) FAdd 888 887 + Store 686(normal) 889 + Branch 843 + 843: Label + 891: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 892: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 893 893 16 16 + 890: 143(ptr) AccessChain 60(id) 16 + 894: 11(int) Load 890 + 895: 154(ptr) AccessChain 123 126 153 16 + 896: 87(int) Load 895 + 897: 87(int) ISub 896 244 + 898: 11(int) Bitcast 897 + 899: 172(bool) ULessThan 894 898 + SelectionMerge 901 None + BranchConditional 899 900 901 + 900: Label + 903: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 904: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 905 905 16 16 + 902: 11(int) Load 145(index) + 906: 11(int) IAdd 902 38 + 907: 236(ptr) AccessChain 208(particleIn) 126 906 126 + 908: 85(fvec4) Load 907 + 909: 18(fvec3) VectorShuffle 908 908 0 1 2 + 910: 18(fvec3) Load 265(pos) + 911: 18(fvec3) FSub 909 910 + Store 708(a) 911 + 913: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 914 914 16 16 + 912: 11(int) Load 145(index) + 915: 154(ptr) AccessChain 123 126 153 16 + 916: 87(int) Load 915 + 917: 11(int) Bitcast 916 + 918: 11(int) IAdd 912 917 + 919: 11(int) IAdd 918 38 + 920: 236(ptr) AccessChain 208(particleIn) 126 919 126 + 921: 85(fvec4) Load 920 + 922: 18(fvec3) VectorShuffle 921 921 0 1 2 + 923: 18(fvec3) Load 265(pos) + 924: 18(fvec3) FSub 922 923 + Store 722(b) 924 + 926: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 927 927 16 16 + 925: 11(int) Load 145(index) + 928: 154(ptr) AccessChain 123 126 153 16 + 929: 87(int) Load 928 + 930: 11(int) Bitcast 929 + 931: 11(int) IAdd 925 930 + 932: 236(ptr) AccessChain 208(particleIn) 126 931 126 + 933: 85(fvec4) Load 932 + 934: 18(fvec3) VectorShuffle 933 933 0 1 2 + 935: 18(fvec3) Load 265(pos) + 936: 18(fvec3) FSub 934 935 + Store 739(c) 936 + 938: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 939 939 16 16 + 937: 18(fvec3) Load 708(a) + 940: 18(fvec3) Load 722(b) + 941: 18(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 937 940 + 942: 18(fvec3) Load 722(b) + 943: 18(fvec3) Load 739(c) + 944: 18(fvec3) ExtInst 3(GLSL.std.450) 68(Cross) 942 943 + 945: 18(fvec3) FAdd 941 944 + 946: 18(fvec3) Load 686(normal) + 947: 18(fvec3) FAdd 946 945 + Store 686(normal) 947 + Branch 901 + 901: Label + Branch 835 + 835: Label + 949: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 950: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 951 951 16 16 + 948: 11(int) Load 145(index) + 952: 18(fvec3) Load 686(normal) + 953: 18(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 952 + 954: 8(float) CompositeExtract 953 0 + 955: 8(float) CompositeExtract 953 1 + 956: 8(float) CompositeExtract 953 2 + 957: 85(fvec4) CompositeConstruct 954 955 956 245 + 958: 236(ptr) AccessChain 230(particleOut) 126 948 548 + Store 958 957 + Branch 685 + 685: Label + 959: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64 + 960: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 951 951 16 16 + Return + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.hlsl.frag.out b/Test/baseResults/spv.debuginfo.hlsl.frag.out new file mode 100644 index 0000000000..5d0d7f7c2f --- /dev/null +++ b/Test/baseResults/spv.debuginfo.hlsl.frag.out @@ -0,0 +1,1142 @@ +spv.debuginfo.hlsl.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 899 + + Capability Shader + Capability ImageQuery + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 6 "main" 892 895 + ExecutionMode 6 OriginUpperLeft + 2: String "" + 9: String "float" + 12: String "uint" + 38: String "textureProj" + 41: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed entry-point main +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed hlsl-offsets +#line 1 +" + 47: String "P" + 53: String "layer" + 56: String "offset" + 64: String "filterPCF" + 68: String "sc" + 84: String "shadow" + 88: String "fragcolor" + 93: String "fragPos" + 100: String "@main" + 104: String "inUV" + 117: String "shadowCoord" + 144: String "bool" + 155: String "dist" + 162: String "type.2d.image" + 163: String "@type.2d.image" + 169: String "textureShadowMap" + 174: String "type.sampler" + 175: String "@type.sampler" + 180: String "samplerShadowMap" + 184: String "type.sampled.image" + 185: String "@type.sampled.image" + 229: String "sizeQueryTemp" + 236: String "int" + 244: String "texDim" + 260: String "elements" + 267: String "levels" + 274: String "scale" + 281: String "dx" + 293: String "dy" + 305: String "shadowFactor" + 311: String "count" + 318: String "range" + 325: String "x" + 345: String "y" + 410: String "i" + 428: String "shadowClip" + 443: String "color" + 449: String "viewMatrix" + 453: String "Light" + 459: String "lights" + 462: String "displayDebugTarget" + 467: String "UBO" + 470: String "ubo" + 524: String "textureposition" + 529: String "samplerposition" + 539: String "normal" + 545: String "textureNormal" + 550: String "samplerNormal" + 558: String "albedo" + 564: String "textureAlbedo" + 569: String "samplerAlbedo" + 657: String "N" + 681: String "L" + 707: String "V" + 722: String "lightCosInnerAngle" + 729: String "lightCosOuterAngle" + 736: String "lightRange" + 743: String "dir" + 759: String "cosDir" + 768: String "spotEffect" + 778: String "heightAttenuation" + 787: String "NdotL" + 797: String "diff" + 805: String "R" + 815: String "NdotR" + 825: String "spec" + Name 6 "main" + Name 36 "textureProj(vf4;f1;vf2;" + Name 33 "P" + Name 34 "layer" + Name 35 "offset" + Name 62 "filterPCF(vf4;f1;" + Name 60 "sc" + Name 61 "layer" + Name 82 "shadow(vf3;vf3;" + Name 80 "fragcolor" + Name 81 "fragPos" + Name 98 "@main(vf2;" + Name 97 "inUV" + Name 109 "shadow" + Name 115 "shadowCoord" + Name 153 "dist" + Name 167 "textureShadowMap" + Name 178 "samplerShadowMap" + Name 227 "sizeQueryTemp" + Name 242 "texDim" + Name 258 "elements" + Name 265 "levels" + Name 272 "scale" + Name 279 "dx" + Name 291 "dy" + Name 303 "shadowFactor" + Name 309 "count" + Name 316 "range" + Name 323 "x" + Name 343 "y" + Name 376 "param" + Name 378 "param" + Name 380 "param" + Name 408 "i" + Name 426 "shadowClip" + Name 441 "Light" + MemberName 441(Light) 0 "position" + MemberName 441(Light) 1 "target" + MemberName 441(Light) 2 "color" + MemberName 441(Light) 3 "viewMatrix" + Name 456 "UBO" + MemberName 456(UBO) 0 "viewPos" + MemberName 456(UBO) 1 "lights" + MemberName 456(UBO) 2 "useShadows" + MemberName 456(UBO) 3 "displayDebugTarget" + Name 468 "ubo" + MemberName 468(ubo) 0 "ubo" + Name 476 "" + Name 484 "shadowFactor" + Name 491 "param" + Name 493 "param" + Name 513 "fragPos" + Name 522 "textureposition" + Name 527 "samplerposition" + Name 537 "normal" + Name 543 "textureNormal" + Name 548 "samplerNormal" + Name 556 "albedo" + Name 562 "textureAlbedo" + Name 567 "samplerAlbedo" + Name 594 "fragcolor" + Name 601 "param" + Name 602 "param" + Name 655 "N" + Name 663 "i" + Name 679 "L" + Name 694 "dist" + Name 705 "V" + Name 720 "lightCosInnerAngle" + Name 727 "lightCosOuterAngle" + Name 734 "lightRange" + Name 741 "dir" + Name 757 "cosDir" + Name 766 "spotEffect" + Name 776 "heightAttenuation" + Name 785 "NdotL" + Name 795 "diff" + Name 803 "R" + Name 813 "NdotR" + Name 823 "spec" + Name 870 "param" + Name 875 "param" + Name 890 "inUV" + Name 892 "inUV" + Name 895 "@entryPointOutput" + Name 896 "param" + Decorate 167(textureShadowMap) Binding 5 + Decorate 167(textureShadowMap) DescriptorSet 0 + Decorate 178(samplerShadowMap) Binding 5 + Decorate 178(samplerShadowMap) DescriptorSet 0 + MemberDecorate 441(Light) 0 Offset 0 + MemberDecorate 441(Light) 1 Offset 16 + MemberDecorate 441(Light) 2 Offset 32 + MemberDecorate 441(Light) 3 RowMajor + MemberDecorate 441(Light) 3 MatrixStride 16 + MemberDecorate 441(Light) 3 Offset 48 + Decorate 454 ArrayStride 112 + MemberDecorate 456(UBO) 0 Offset 0 + MemberDecorate 456(UBO) 1 Offset 16 + MemberDecorate 456(UBO) 2 Offset 352 + MemberDecorate 456(UBO) 3 Offset 356 + Decorate 468(ubo) Block + MemberDecorate 468(ubo) 0 Offset 0 + Decorate 476 Binding 4 + Decorate 476 DescriptorSet 0 + Decorate 522(textureposition) Binding 1 + Decorate 522(textureposition) DescriptorSet 0 + Decorate 527(samplerposition) Binding 1 + Decorate 527(samplerposition) DescriptorSet 0 + Decorate 543(textureNormal) Binding 2 + Decorate 543(textureNormal) DescriptorSet 0 + Decorate 548(samplerNormal) Binding 2 + Decorate 548(samplerNormal) DescriptorSet 0 + Decorate 562(textureAlbedo) Binding 3 + Decorate 562(textureAlbedo) DescriptorSet 0 + Decorate 567(samplerAlbedo) Binding 3 + Decorate 567(samplerAlbedo) DescriptorSet 0 + Decorate 892(inUV) Location 0 + Decorate 895(@entryPointOutput) Location 0 + 4: TypeVoid + 5: TypeFunction 4 + 8: TypeFloat 32 + 11: TypeInt 32 0 + 14: 11(int) Constant 32 + 15: 11(int) Constant 6 + 16: 11(int) Constant 0 + 13: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16 + 17: 11(int) Constant 3 + 10: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16 + 18: TypeVector 8(float) 4 + 19: 11(int) Constant 4 + 20: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 19 + 21: TypePointer Function 18(fvec4) + 22: 11(int) Constant 7 + 23: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 22 16 + 24: TypePointer Function 8(float) + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 22 16 + 26: TypeVector 8(float) 2 + 27: 11(int) Constant 2 + 28: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 27 + 29: TypePointer Function 26(fvec2) + 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 28 22 16 + 31: TypeFunction 8(float) 21(ptr) 24(ptr) 29(ptr) + 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 10 20 10 28 + 40: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 41 + 42: 11(int) Constant 61 + 44: 11(int) Constant 1 + 45: 11(int) Constant 5 + 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 44 19 40 45 + 39: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 38 32 40 42 16 43 38 17 42 + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 20 40 42 16 39 19 44 + 49: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 10 40 42 16 39 19 27 + 55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 56 28 40 42 16 39 19 17 + 58: TypeFunction 8(float) 21(ptr) 24(ptr) + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 10 20 10 + 66: 11(int) Constant 78 + 65: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 64 59 40 66 16 43 64 17 66 + 67: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 68 20 40 66 16 65 19 44 + 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 10 40 66 16 65 19 27 + 74: TypeVector 8(float) 3 + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17 + 76: TypePointer Function 74(fvec3) + 77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 75 22 16 + 78: TypeFunction 74(fvec3) 76(ptr) 76(ptr) + 79: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 75 75 75 + 86: 11(int) Constant 101 + 85: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 84 79 40 86 16 43 84 17 86 + 87: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 88 75 40 86 16 85 19 44 + 92: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 93 75 40 86 16 85 19 27 + 95: TypeFunction 18(fvec4) 29(ptr) + 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 20 28 + 102: 11(int) Constant 119 + 101: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 100 96 40 102 16 43 100 17 102 + 103: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 104 28 40 102 16 101 19 44 + 111: 11(int) Constant 62 + 110: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 84 10 40 111 16 39 19 + 114: 8(float) Constant 1065353216 + 118: 11(int) Constant 63 + 116: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 117 20 40 118 16 39 19 + 128: 11(int) Constant 64 + 130: 8(float) Constant 1056964608 + 140: 11(int) Constant 66 + 142: 8(float) Constant 3212836864 + 143: TypeBool + 145: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 144 14 27 16 + 156: 11(int) Constant 68 + 154: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 155 10 40 156 16 39 19 + 160: TypeImage 8(float) 2D array sampled format:Unknown + 164: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone) + 161: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 162 16 40 156 16 43 163 164 17 + 165: TypePointer UniformConstant 160 + 166: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 161 16 16 +167(textureShadowMap): 165(ptr) Variable UniformConstant + 170: 11(int) Constant 8 + 168: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 169 161 40 156 16 43 169 167(textureShadowMap) 170 + 172: TypeSampler + 173: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 174 44 40 156 16 43 175 164 17 + 176: TypePointer UniformConstant 172 + 177: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 173 16 16 +178(samplerShadowMap): 176(ptr) Variable UniformConstant + 179: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 180 173 40 156 16 43 180 178(samplerShadowMap) 170 + 182: TypeSampledImage 160 + 183: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 184 16 40 156 16 43 185 164 17 + 199: 11(int) Constant 69 + 201: 8(float) Constant 0 + 210: 8(float) Constant 1048576000 + 213: 11(int) Constant 71 + 217: 11(int) Constant 74 + 223: TypeVector 11(int) 3 + 224: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 13 17 + 225: TypePointer Function 223(ivec3) + 226: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 224 22 16 + 230: 11(int) Constant 80 + 228: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 229 224 40 230 16 65 19 + 235: TypeInt 32 1 + 237: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 236 14 19 16 + 238: TypeVector 235(int) 2 + 239: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 237 27 + 240: TypePointer Function 238(ivec2) + 241: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 239 22 16 + 243: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 244 239 40 230 16 65 19 + 246: TypePointer Function 11(int) + 247: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 22 16 + 251: TypePointer Function 235(int) + 252: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 237 22 16 + 259: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 260 237 40 230 16 65 19 + 266: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 267 237 40 230 16 65 19 + 275: 11(int) Constant 81 + 273: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 274 10 40 275 16 65 19 + 278: 8(float) Constant 1069547520 + 282: 11(int) Constant 82 + 280: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 281 10 40 282 16 65 19 + 294: 11(int) Constant 83 + 292: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 293 10 40 294 16 65 19 + 306: 11(int) Constant 85 + 304: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 305 10 40 306 16 65 19 + 312: 11(int) Constant 86 + 310: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 311 237 40 312 16 65 19 + 315: 235(int) Constant 0 + 319: 11(int) Constant 87 + 317: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 318 237 40 319 16 65 19 + 322: 235(int) Constant 1 + 326: 11(int) Constant 89 + 324: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 325 237 40 326 16 65 19 + 346: 11(int) Constant 91 + 344: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 345 237 40 346 16 65 19 + 367: 11(int) Constant 93 + 386: 11(int) Constant 94 + 399: 11(int) Constant 98 + 411: 11(int) Constant 102 + 409: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 410 237 40 411 16 85 19 + 424: 235(int) Constant 3 + 429: 11(int) Constant 104 + 427: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 428 20 40 429 16 85 19 + 438: TypeMatrix 18(fvec4) 4 + 440: 143(bool) ConstantTrue + 439: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 440 + 441(Light): TypeStruct 18(fvec4) 18(fvec4) 18(fvec4) 438 + 444: 11(int) Constant 46 + 445: 11(int) Constant 14 + 442: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 443 20 40 444 445 16 16 17 + 446: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 443 20 40 444 445 16 16 17 + 447: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 443 20 40 444 445 16 16 17 + 450: 11(int) Constant 47 + 451: 11(int) Constant 21 + 448: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 449 439 40 450 451 16 16 17 + 452: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 453 44 40 429 16 43 453 16 17 442 446 447 448 + 454: TypeArray 441(Light) 17 + 455: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 452 17 + 456(UBO): TypeStruct 18(fvec4) 454 235(int) 235(int) + 457: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 443 20 40 444 445 16 16 17 + 460: 11(int) Constant 53 + 458: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 459 455 40 460 445 16 16 17 + 463: 11(int) Constant 55 + 464: 11(int) Constant 24 + 461: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 462 237 40 463 464 16 16 17 + 465: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 462 237 40 463 464 16 16 17 + 466: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 467 44 40 429 16 43 467 16 17 457 458 461 465 + 468(ubo): TypeStruct 456(UBO) + 471: 11(int) Constant 58 + 472: 11(int) Constant 37 + 469: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 470 466 40 471 472 16 16 17 + 473: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 470 44 40 429 16 43 470 16 17 469 + 474: TypePointer Uniform 468(ubo) + 475: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 473 27 16 + 476: 474(ptr) Variable Uniform + 477: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 2 473 40 429 16 43 2 476 170 + 479: TypePointer Uniform 438 + 480: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 439 27 16 + 486: 11(int) Constant 108 + 485: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 305 10 40 486 16 85 19 + 497: 11(int) Constant 113 + 507: 11(int) Constant 115 + 515: 11(int) Constant 121 + 514: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 93 75 40 515 16 101 19 + 518: TypeImage 8(float) 2D sampled format:Unknown + 519: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 162 16 40 515 16 43 163 164 17 + 520: TypePointer UniformConstant 518 + 521: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 519 16 16 +522(textureposition): 520(ptr) Variable UniformConstant + 523: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 524 519 40 515 16 43 524 522(textureposition) 170 + 526: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 174 44 40 515 16 43 175 164 17 +527(samplerposition): 176(ptr) Variable UniformConstant + 528: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 529 526 40 515 16 43 529 527(samplerposition) 170 + 531: TypeSampledImage 518 + 532: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 184 16 40 515 16 43 185 164 17 + 540: 11(int) Constant 122 + 538: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 539 75 40 540 16 101 19 +543(textureNormal): 520(ptr) Variable UniformConstant + 544: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 545 519 40 540 16 43 545 543(textureNormal) 170 + 547: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 174 44 40 540 16 43 175 164 17 +548(samplerNormal): 176(ptr) Variable UniformConstant + 549: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 550 547 40 540 16 43 550 548(samplerNormal) 170 + 559: 11(int) Constant 123 + 557: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 558 20 40 559 16 101 19 +562(textureAlbedo): 520(ptr) Variable UniformConstant + 563: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 564 519 40 559 16 43 564 562(textureAlbedo) 170 + 566: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 174 44 40 559 16 43 175 164 17 +567(samplerAlbedo): 176(ptr) Variable UniformConstant + 568: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 569 566 40 559 16 43 569 567(samplerAlbedo) 170 + 574: TypePointer Uniform 235(int) + 575: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 237 27 16 + 578: 11(int) Constant 128 + 586: 11(int) Constant 129 + 596: 11(int) Constant 131 + 595: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 88 75 40 596 16 101 19 + 600: 74(fvec3) ConstantComposite 114 114 114 + 606: 11(int) Constant 132 + 611: 11(int) Constant 134 + 613: 11(int) Constant 135 + 618: 11(int) Constant 137 + 620: 11(int) Constant 138 + 625: 11(int) Constant 140 + 628: 11(int) Constant 141 + 633: 11(int) Constant 143 + 636: 11(int) Constant 144 + 642: 11(int) Constant 146 + 651: 11(int) Constant 150 + 653: 8(float) Constant 1036831949 + 658: 11(int) Constant 152 + 656: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 657 75 40 658 16 101 19 + 665: 11(int) Constant 154 + 664: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 410 237 40 665 16 101 19 + 682: 11(int) Constant 157 + 680: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 681 75 40 682 16 101 19 + 687: TypePointer Uniform 18(fvec4) + 688: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 27 16 + 696: 11(int) Constant 159 + 695: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 155 10 40 696 16 101 19 + 703: 11(int) Constant 160 + 708: 11(int) Constant 163 + 706: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 707 75 40 708 16 101 19 + 718: 11(int) Constant 164 + 723: 11(int) Constant 166 + 721: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 722 10 40 723 16 101 19 + 726: 8(float) Constant 1064781546 + 730: 11(int) Constant 167 + 728: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 729 10 40 730 16 101 19 + 733: 8(float) Constant 1063781322 + 737: 11(int) Constant 168 + 735: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 736 10 40 737 16 101 19 + 740: 8(float) Constant 1120403456 + 744: 11(int) Constant 171 + 742: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 743 75 40 744 16 101 19 + 760: 11(int) Constant 174 + 758: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 759 10 40 760 16 101 19 + 769: 11(int) Constant 175 + 767: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 768 10 40 769 16 101 19 + 779: 11(int) Constant 176 + 777: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 778 10 40 779 16 101 19 + 788: 11(int) Constant 179 + 786: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 787 10 40 788 16 101 19 + 798: 11(int) Constant 180 + 796: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 797 75 40 798 16 101 19 + 806: 11(int) Constant 183 + 804: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 805 75 40 806 16 101 19 + 816: 11(int) Constant 184 + 814: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 815 10 40 816 16 101 19 + 826: 11(int) Constant 185 + 824: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 825 75 40 826 16 101 19 + 830: 8(float) Constant 1098907648 + 835: 8(float) Constant 1075838976 + 840: 11(int) Constant 187 + 848: 235(int) Constant 2 + 865: 11(int) Constant 191 + 874: 11(int) Constant 193 + 881: 11(int) Constant 196 + 891: TypePointer Input 26(fvec2) + 892(inUV): 891(ptr) Variable Input + 894: TypePointer Output 18(fvec4) +895(@entryPointOutput): 894(ptr) Variable Output + 6(main): 4 Function None 5 + 7: Label + 890(inUV): 29(ptr) Variable Function + 896(param): 29(ptr) Variable Function + 893: 26(fvec2) Load 892(inUV) + Store 890(inUV) 893 + 897: 26(fvec2) Load 890(inUV) + Store 896(param) 897 + 898: 18(fvec4) FunctionCall 98(@main(vf2;) 896(param) + Store 895(@entryPointOutput) 898 + Return + FunctionEnd +36(textureProj(vf4;f1;vf2;): 8(float) Function None 31 + 33(P): 21(ptr) FunctionParameter + 34(layer): 24(ptr) FunctionParameter + 35(offset): 29(ptr) FunctionParameter + 37: Label + 109(shadow): 24(ptr) Variable Function +115(shadowCoord): 21(ptr) Variable Function + 153(dist): 24(ptr) Variable Function + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39 + 51: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 42 42 16 16 + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 46 33(P) 49 + 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 34(layer) 49 + 57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 55 35(offset) 49 + 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 39 36(textureProj(vf4;f1;vf2;) + 113: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 111 111 16 16 + 112: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 110 109(shadow) 49 + Store 109(shadow) 114 + 120: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 118 118 16 16 + 119: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 116 115(shadowCoord) 49 + 121: 18(fvec4) Load 33(P) + 122: 24(ptr) AccessChain 33(P) 17 + 123: 8(float) Load 122 + 124: 18(fvec4) CompositeConstruct 123 123 123 123 + 125: 18(fvec4) FDiv 121 124 + Store 115(shadowCoord) 125 + 127: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 128 128 16 16 + 126: 18(fvec4) Load 115(shadowCoord) + 129: 26(fvec2) VectorShuffle 126 126 0 1 + 131: 26(fvec2) VectorTimesScalar 129 130 + 132: 26(fvec2) CompositeConstruct 130 130 + 133: 26(fvec2) FAdd 131 132 + 134: 24(ptr) AccessChain 115(shadowCoord) 16 + 135: 8(float) CompositeExtract 133 0 + Store 134 135 + 136: 24(ptr) AccessChain 115(shadowCoord) 44 + 137: 8(float) CompositeExtract 133 1 + Store 136 137 + 139: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 140 140 16 16 + 138: 24(ptr) AccessChain 115(shadowCoord) 27 + 141: 8(float) Load 138 + 146: 143(bool) FOrdGreaterThan 141 142 + 147: 24(ptr) AccessChain 115(shadowCoord) 27 + 148: 8(float) Load 147 + 149: 143(bool) FOrdLessThan 148 114 + 150: 143(bool) LogicalAnd 146 149 + SelectionMerge 152 None + BranchConditional 150 151 152 + 151: Label + 158: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39 + 159: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 156 156 16 16 + 157: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 154 153(dist) 49 + 171: 160 Load 167(textureShadowMap) + 181: 172 Load 178(samplerShadowMap) + 186: 182 SampledImage 171 181 + 187: 18(fvec4) Load 115(shadowCoord) + 188: 26(fvec2) VectorShuffle 187 187 0 1 + 189: 26(fvec2) Load 35(offset) + 190: 26(fvec2) FAdd 188 189 + 191: 8(float) Load 34(layer) + 192: 8(float) CompositeExtract 190 0 + 193: 8(float) CompositeExtract 190 1 + 194: 74(fvec3) CompositeConstruct 192 193 191 + 195: 18(fvec4) ImageSampleImplicitLod 186 194 + 196: 8(float) CompositeExtract 195 0 + Store 153(dist) 196 + 198: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 199 199 16 16 + 197: 24(ptr) AccessChain 115(shadowCoord) 17 + 200: 8(float) Load 197 + 202: 143(bool) FOrdGreaterThan 200 201 + 203: 8(float) Load 153(dist) + 204: 24(ptr) AccessChain 115(shadowCoord) 27 + 205: 8(float) Load 204 + 206: 143(bool) FOrdLessThan 203 205 + 207: 143(bool) LogicalAnd 202 206 + SelectionMerge 209 None + BranchConditional 207 208 209 + 208: Label + 211: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39 + 212: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 213 213 16 16 + Store 109(shadow) 210 + Branch 209 + 209: Label + Branch 152 + 152: Label + 215: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39 + 216: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 217 217 16 16 + 214: 8(float) Load 109(shadow) + ReturnValue 214 + FunctionEnd +62(filterPCF(vf4;f1;): 8(float) Function None 58 + 60(sc): 21(ptr) FunctionParameter + 61(layer): 24(ptr) FunctionParameter + 63: Label +227(sizeQueryTemp): 225(ptr) Variable Function + 242(texDim): 240(ptr) Variable Function + 258(elements): 251(ptr) Variable Function + 265(levels): 251(ptr) Variable Function + 272(scale): 24(ptr) Variable Function + 279(dx): 24(ptr) Variable Function + 291(dy): 24(ptr) Variable Function +303(shadowFactor): 24(ptr) Variable Function + 309(count): 251(ptr) Variable Function + 316(range): 251(ptr) Variable Function + 323(x): 251(ptr) Variable Function + 343(y): 251(ptr) Variable Function + 376(param): 21(ptr) Variable Function + 378(param): 24(ptr) Variable Function + 380(param): 29(ptr) Variable Function + 70: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 66 66 16 16 + 69: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 67 60(sc) 49 + 73: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 72 61(layer) 49 + 222: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 65 62(filterPCF(vf4;f1;) + 232: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 230 230 16 16 + 231: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 228 227(sizeQueryTemp) 49 + 233: 160 Load 167(textureShadowMap) + 234: 223(ivec3) ImageQuerySizeLod 233 16 + Store 227(sizeQueryTemp) 234 + 245: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 243 242(texDim) 49 + 248: 246(ptr) AccessChain 227(sizeQueryTemp) 16 + 249: 11(int) Load 248 + 250: 235(int) Bitcast 249 + 253: 251(ptr) AccessChain 242(texDim) 16 + Store 253 250 + 254: 246(ptr) AccessChain 227(sizeQueryTemp) 44 + 255: 11(int) Load 254 + 256: 235(int) Bitcast 255 + 257: 251(ptr) AccessChain 242(texDim) 44 + Store 257 256 + 261: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 259 258(elements) 49 + 262: 246(ptr) AccessChain 227(sizeQueryTemp) 27 + 263: 11(int) Load 262 + 264: 235(int) Bitcast 263 + Store 258(elements) 264 + 268: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 266 265(levels) 49 + 269: 160 Load 167(textureShadowMap) + 270: 11(int) ImageQueryLevels 269 + 271: 235(int) Bitcast 270 + Store 265(levels) 271 + 277: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 275 275 16 16 + 276: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 273 272(scale) 49 + Store 272(scale) 278 + 284: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 282 282 16 16 + 283: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 280 279(dx) 49 + 285: 8(float) Load 272(scale) + 286: 8(float) FMul 285 114 + 287: 251(ptr) AccessChain 242(texDim) 16 + 288: 235(int) Load 287 + 289: 8(float) ConvertSToF 288 + 290: 8(float) FDiv 286 289 + Store 279(dx) 290 + 296: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 294 294 16 16 + 295: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 292 291(dy) 49 + 297: 8(float) Load 272(scale) + 298: 8(float) FMul 297 114 + 299: 251(ptr) AccessChain 242(texDim) 44 + 300: 235(int) Load 299 + 301: 8(float) ConvertSToF 300 + 302: 8(float) FDiv 298 301 + Store 291(dy) 302 + 308: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 306 306 16 16 + 307: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 304 303(shadowFactor) 49 + Store 303(shadowFactor) 201 + 314: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 312 312 16 16 + 313: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 310 309(count) 49 + Store 309(count) 315 + 321: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 319 319 16 16 + 320: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 317 316(range) 49 + Store 316(range) 322 + 328: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 326 326 16 16 + 327: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 324 323(x) 49 + 329: 235(int) Load 316(range) + 330: 235(int) SNegate 329 + Store 323(x) 330 + Branch 331 + 331: Label + 335: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 336: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 326 326 16 16 + LoopMerge 333 334 None + Branch 337 + 337: Label + 339: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 340: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 326 326 16 16 + 338: 235(int) Load 323(x) + 341: 235(int) Load 316(range) + 342: 143(bool) SLessThanEqual 338 341 + BranchConditional 342 332 333 + 332: Label + 348: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 349: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 346 346 16 16 + 347: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 344 343(y) 49 + 350: 235(int) Load 316(range) + 351: 235(int) SNegate 350 + Store 343(y) 351 + Branch 352 + 352: Label + 356: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 357: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 346 346 16 16 + LoopMerge 354 355 None + Branch 358 + 358: Label + 360: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 361: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 346 346 16 16 + 359: 235(int) Load 343(y) + 362: 235(int) Load 316(range) + 363: 143(bool) SLessThanEqual 359 362 + BranchConditional 363 353 354 + 353: Label + 365: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 366: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 367 367 16 16 + 364: 8(float) Load 279(dx) + 368: 235(int) Load 323(x) + 369: 8(float) ConvertSToF 368 + 370: 8(float) FMul 364 369 + 371: 8(float) Load 291(dy) + 372: 235(int) Load 343(y) + 373: 8(float) ConvertSToF 372 + 374: 8(float) FMul 371 373 + 375: 26(fvec2) CompositeConstruct 370 374 + 377: 18(fvec4) Load 60(sc) + Store 376(param) 377 + 379: 8(float) Load 61(layer) + Store 378(param) 379 + Store 380(param) 375 + 381: 8(float) FunctionCall 36(textureProj(vf4;f1;vf2;) 376(param) 378(param) 380(param) + 382: 8(float) Load 303(shadowFactor) + 383: 8(float) FAdd 382 381 + Store 303(shadowFactor) 383 + 385: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 386 386 16 16 + 384: 235(int) Load 309(count) + 387: 235(int) IAdd 384 322 + Store 309(count) 387 + Branch 355 + 355: Label + 389: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 390: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 346 346 16 16 + 388: 235(int) Load 343(y) + 391: 235(int) IAdd 388 322 + Store 343(y) 391 + Branch 352 + 354: Label + Branch 334 + 334: Label + 393: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 394: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 326 326 16 16 + 392: 235(int) Load 323(x) + 395: 235(int) IAdd 392 322 + Store 323(x) 395 + Branch 331 + 333: Label + 397: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65 + 398: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 399 399 16 16 + 396: 8(float) Load 303(shadowFactor) + 400: 235(int) Load 309(count) + 401: 8(float) ConvertSToF 400 + 402: 8(float) FDiv 396 401 + ReturnValue 402 + FunctionEnd +82(shadow(vf3;vf3;): 74(fvec3) Function None 78 + 80(fragcolor): 76(ptr) FunctionParameter + 81(fragPos): 76(ptr) FunctionParameter + 83: Label + 408(i): 251(ptr) Variable Function + 426(shadowClip): 21(ptr) Variable Function +484(shadowFactor): 24(ptr) Variable Function + 491(param): 21(ptr) Variable Function + 493(param): 24(ptr) Variable Function + 90: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 86 86 16 16 + 89: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 87 80(fragcolor) 49 + 94: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 92 81(fragPos) 49 + 407: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 85 82(shadow(vf3;vf3;) + 413: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 411 411 16 16 + 412: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 409 408(i) 49 + Store 408(i) 315 + Branch 414 + 414: Label + 418: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 419: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 411 411 16 16 + LoopMerge 416 417 None + Branch 420 + 420: Label + 422: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 423: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 411 411 16 16 + 421: 235(int) Load 408(i) + 425: 143(bool) SLessThan 421 424 + BranchConditional 425 415 416 + 415: Label + 431: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 432: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 429 429 16 16 + 430: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 427 426(shadowClip) 49 + 433: 74(fvec3) Load 81(fragPos) + 434: 8(float) CompositeExtract 433 0 + 435: 8(float) CompositeExtract 433 1 + 436: 8(float) CompositeExtract 433 2 + 437: 18(fvec4) CompositeConstruct 434 435 436 114 + 478: 235(int) Load 408(i) + 481: 479(ptr) AccessChain 476 315 322 478 424 + 482: 438 Load 481 + 483: 18(fvec4) VectorTimesMatrix 437 482 + Store 426(shadowClip) 483 + 488: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 486 486 16 16 + 487: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 485 484(shadowFactor) 49 + 489: 235(int) Load 408(i) + 490: 8(float) ConvertSToF 489 + 492: 18(fvec4) Load 426(shadowClip) + Store 491(param) 492 + Store 493(param) 490 + 494: 8(float) FunctionCall 62(filterPCF(vf4;f1;) 491(param) 493(param) + Store 484(shadowFactor) 494 + 496: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 497 497 16 16 + 495: 8(float) Load 484(shadowFactor) + 498: 74(fvec3) Load 80(fragcolor) + 499: 74(fvec3) VectorTimesScalar 498 495 + Store 80(fragcolor) 499 + Branch 417 + 417: Label + 501: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 502: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 411 411 16 16 + 500: 235(int) Load 408(i) + 503: 235(int) IAdd 500 322 + Store 408(i) 503 + Branch 414 + 416: Label + 505: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85 + 506: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 507 507 16 16 + 504: 74(fvec3) Load 80(fragcolor) + ReturnValue 504 + FunctionEnd + 98(@main(vf2;): 18(fvec4) Function None 95 + 97(inUV): 29(ptr) FunctionParameter + 99: Label + 513(fragPos): 76(ptr) Variable Function + 537(normal): 76(ptr) Variable Function + 556(albedo): 21(ptr) Variable Function + 594(fragcolor): 76(ptr) Variable Function + 601(param): 76(ptr) Variable Function + 602(param): 76(ptr) Variable Function + 655(N): 76(ptr) Variable Function + 663(i): 251(ptr) Variable Function + 679(L): 76(ptr) Variable Function + 694(dist): 24(ptr) Variable Function + 705(V): 76(ptr) Variable Function +720(lightCosInnerAngle): 24(ptr) Variable Function +727(lightCosOuterAngle): 24(ptr) Variable Function + 734(lightRange): 24(ptr) Variable Function + 741(dir): 76(ptr) Variable Function + 757(cosDir): 24(ptr) Variable Function + 766(spotEffect): 24(ptr) Variable Function +776(heightAttenuation): 24(ptr) Variable Function + 785(NdotL): 24(ptr) Variable Function + 795(diff): 76(ptr) Variable Function + 803(R): 76(ptr) Variable Function + 813(NdotR): 24(ptr) Variable Function + 823(spec): 76(ptr) Variable Function + 870(param): 76(ptr) Variable Function + 875(param): 76(ptr) Variable Function + 106: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 107: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 102 102 16 16 + 105: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 103 97(inUV) 49 + 512: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 101 98(@main(vf2;) + 517: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 515 515 16 16 + 516: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 514 513(fragPos) 49 + 525: 518 Load 522(textureposition) + 530: 172 Load 527(samplerposition) + 533: 531 SampledImage 525 530 + 534: 26(fvec2) Load 97(inUV) + 535: 18(fvec4) ImageSampleImplicitLod 533 534 + 536: 74(fvec3) VectorShuffle 535 535 0 1 2 + Store 513(fragPos) 536 + 542: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 540 540 16 16 + 541: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 538 537(normal) 49 + 546: 518 Load 543(textureNormal) + 551: 172 Load 548(samplerNormal) + 552: 531 SampledImage 546 551 + 553: 26(fvec2) Load 97(inUV) + 554: 18(fvec4) ImageSampleImplicitLod 552 553 + 555: 74(fvec3) VectorShuffle 554 554 0 1 2 + Store 537(normal) 555 + 561: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 559 559 16 16 + 560: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 557 556(albedo) 49 + 565: 518 Load 562(textureAlbedo) + 570: 172 Load 567(samplerAlbedo) + 571: 531 SampledImage 565 570 + 572: 26(fvec2) Load 97(inUV) + 573: 18(fvec4) ImageSampleImplicitLod 571 572 + Store 556(albedo) 573 + 577: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 578 578 16 16 + 576: 574(ptr) AccessChain 476 315 424 + 579: 235(int) Load 576 + 580: 143(bool) SGreaterThan 579 315 + SelectionMerge 582 None + BranchConditional 580 581 582 + 581: Label + 584: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 585: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 586 586 16 16 + 583: 574(ptr) AccessChain 476 315 424 + 587: 235(int) Load 583 + SelectionMerge 593 None + Switch 587 593 + case 1: 588 + case 2: 589 + case 3: 590 + case 4: 591 + case 5: 592 + 588: Label + 598: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 599: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 596 596 16 16 + 597: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 595 594(fragcolor) 49 + Store 601(param) 600 + 603: 74(fvec3) Load 513(fragPos) + Store 602(param) 603 + 604: 74(fvec3) FunctionCall 82(shadow(vf3;vf3;) 601(param) 602(param) + Store 594(fragcolor) 604 + 605: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 606 606 16 16 + Branch 593 + 589: Label + 609: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 610: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 611 611 16 16 + 608: 74(fvec3) Load 513(fragPos) + Store 594(fragcolor) 608 + 612: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 613 613 16 16 + Branch 593 + 590: Label + 616: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 617: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 618 618 16 16 + 615: 74(fvec3) Load 537(normal) + Store 594(fragcolor) 615 + 619: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 620 620 16 16 + Branch 593 + 591: Label + 623: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 624: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 625 625 16 16 + 622: 18(fvec4) Load 556(albedo) + 626: 74(fvec3) VectorShuffle 622 622 0 1 2 + Store 594(fragcolor) 626 + 627: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 628 628 16 16 + Branch 593 + 592: Label + 631: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 632: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 633 633 16 16 + 630: 18(fvec4) Load 556(albedo) + 634: 74(fvec3) VectorShuffle 630 630 3 3 3 + Store 594(fragcolor) 634 + 635: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 636 636 16 16 + Branch 593 + 593: Label + 640: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 641: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 642 642 16 16 + 639: 74(fvec3) Load 594(fragcolor) + 643: 8(float) CompositeExtract 639 0 + 644: 8(float) CompositeExtract 639 1 + 645: 8(float) CompositeExtract 639 2 + 646: 18(fvec4) CompositeConstruct 643 644 645 114 + ReturnValue 646 + 582: Label + 649: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 650: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 651 651 16 16 + 648: 18(fvec4) Load 556(albedo) + 652: 74(fvec3) VectorShuffle 648 648 0 1 2 + 654: 74(fvec3) VectorTimesScalar 652 653 + Store 594(fragcolor) 654 + 660: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 658 658 16 16 + 659: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 656 655(N) 49 + 661: 74(fvec3) Load 537(normal) + 662: 74(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 661 + Store 655(N) 662 + 667: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 665 665 16 16 + 666: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 664 663(i) 49 + Store 663(i) 315 + Branch 668 + 668: Label + 672: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 673: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 665 665 16 16 + LoopMerge 670 671 None + Branch 674 + 674: Label + 676: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 677: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 665 665 16 16 + 675: 235(int) Load 663(i) + 678: 143(bool) SLessThan 675 424 + BranchConditional 678 669 670 + 669: Label + 684: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 685: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 682 682 16 16 + 683: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 680 679(L) 49 + 686: 235(int) Load 663(i) + 689: 687(ptr) AccessChain 476 315 322 686 315 + 690: 18(fvec4) Load 689 + 691: 74(fvec3) VectorShuffle 690 690 0 1 2 + 692: 74(fvec3) Load 513(fragPos) + 693: 74(fvec3) FSub 691 692 + Store 679(L) 693 + 698: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 696 696 16 16 + 697: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 695 694(dist) 49 + 699: 74(fvec3) Load 679(L) + 700: 8(float) ExtInst 3(GLSL.std.450) 66(Length) 699 + Store 694(dist) 700 + 702: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 703 703 16 16 + 701: 74(fvec3) Load 679(L) + 704: 74(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 701 + Store 679(L) 704 + 710: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 708 708 16 16 + 709: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 706 705(V) 49 + 711: 687(ptr) AccessChain 476 315 315 + 712: 18(fvec4) Load 711 + 713: 74(fvec3) VectorShuffle 712 712 0 1 2 + 714: 74(fvec3) Load 513(fragPos) + 715: 74(fvec3) FSub 713 714 + Store 705(V) 715 + 717: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 718 718 16 16 + 716: 74(fvec3) Load 705(V) + 719: 74(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 716 + Store 705(V) 719 + 725: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 723 723 16 16 + 724: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 721 720(lightCosInnerAngle) 49 + Store 720(lightCosInnerAngle) 726 + 732: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 730 730 16 16 + 731: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 728 727(lightCosOuterAngle) 49 + Store 727(lightCosOuterAngle) 733 + 739: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 737 737 16 16 + 738: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 735 734(lightRange) 49 + Store 734(lightRange) 740 + 746: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 744 744 16 16 + 745: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 742 741(dir) 49 + 747: 235(int) Load 663(i) + 748: 687(ptr) AccessChain 476 315 322 747 315 + 749: 18(fvec4) Load 748 + 750: 74(fvec3) VectorShuffle 749 749 0 1 2 + 751: 235(int) Load 663(i) + 752: 687(ptr) AccessChain 476 315 322 751 322 + 753: 18(fvec4) Load 752 + 754: 74(fvec3) VectorShuffle 753 753 0 1 2 + 755: 74(fvec3) FSub 750 754 + 756: 74(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 755 + Store 741(dir) 756 + 762: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 760 760 16 16 + 761: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 758 757(cosDir) 49 + 763: 74(fvec3) Load 679(L) + 764: 74(fvec3) Load 741(dir) + 765: 8(float) Dot 763 764 + Store 757(cosDir) 765 + 771: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 769 769 16 16 + 770: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 767 766(spotEffect) 49 + 772: 8(float) Load 727(lightCosOuterAngle) + 773: 8(float) Load 720(lightCosInnerAngle) + 774: 8(float) Load 757(cosDir) + 775: 8(float) ExtInst 3(GLSL.std.450) 49(SmoothStep) 772 773 774 + Store 766(spotEffect) 775 + 781: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 779 779 16 16 + 780: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 777 776(heightAttenuation) 49 + 782: 8(float) Load 734(lightRange) + 783: 8(float) Load 694(dist) + 784: 8(float) ExtInst 3(GLSL.std.450) 49(SmoothStep) 782 201 783 + Store 776(heightAttenuation) 784 + 790: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 788 788 16 16 + 789: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 786 785(NdotL) 49 + 791: 74(fvec3) Load 655(N) + 792: 74(fvec3) Load 679(L) + 793: 8(float) Dot 791 792 + 794: 8(float) ExtInst 3(GLSL.std.450) 40(FMax) 201 793 + Store 785(NdotL) 794 + 800: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 798 798 16 16 + 799: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 796 795(diff) 49 + 801: 8(float) Load 785(NdotL) + 802: 74(fvec3) CompositeConstruct 801 801 801 + Store 795(diff) 802 + 808: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 806 806 16 16 + 807: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 804 803(R) 49 + 809: 74(fvec3) Load 679(L) + 810: 74(fvec3) FNegate 809 + 811: 74(fvec3) Load 655(N) + 812: 74(fvec3) ExtInst 3(GLSL.std.450) 71(Reflect) 810 811 + Store 803(R) 812 + 818: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 816 816 16 16 + 817: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 814 813(NdotR) 49 + 819: 74(fvec3) Load 803(R) + 820: 74(fvec3) Load 705(V) + 821: 8(float) Dot 819 820 + 822: 8(float) ExtInst 3(GLSL.std.450) 40(FMax) 201 821 + Store 813(NdotR) 822 + 828: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 826 826 16 16 + 827: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 824 823(spec) 49 + 829: 8(float) Load 813(NdotR) + 831: 8(float) ExtInst 3(GLSL.std.450) 26(Pow) 829 830 + 832: 24(ptr) AccessChain 556(albedo) 17 + 833: 8(float) Load 832 + 834: 8(float) FMul 831 833 + 836: 8(float) FMul 834 835 + 837: 74(fvec3) CompositeConstruct 836 836 836 + Store 823(spec) 837 + 839: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 840 840 16 16 + 838: 74(fvec3) Load 795(diff) + 841: 74(fvec3) Load 823(spec) + 842: 74(fvec3) FAdd 838 841 + 843: 8(float) Load 766(spotEffect) + 844: 74(fvec3) VectorTimesScalar 842 843 + 845: 8(float) Load 776(heightAttenuation) + 846: 74(fvec3) VectorTimesScalar 844 845 + 847: 235(int) Load 663(i) + 849: 687(ptr) AccessChain 476 315 322 847 848 + 850: 18(fvec4) Load 849 + 851: 74(fvec3) VectorShuffle 850 850 0 1 2 + 852: 74(fvec3) FMul 846 851 + 853: 18(fvec4) Load 556(albedo) + 854: 74(fvec3) VectorShuffle 853 853 0 1 2 + 855: 74(fvec3) FMul 852 854 + 856: 74(fvec3) Load 594(fragcolor) + 857: 74(fvec3) FAdd 856 855 + Store 594(fragcolor) 857 + Branch 671 + 671: Label + 859: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 860: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 665 665 16 16 + 858: 235(int) Load 663(i) + 861: 235(int) IAdd 858 322 + Store 663(i) 861 + Branch 668 + 670: Label + 863: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 864: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 865 865 16 16 + 862: 574(ptr) AccessChain 476 315 848 + 866: 235(int) Load 862 + 867: 143(bool) SGreaterThan 866 315 + SelectionMerge 869 None + BranchConditional 867 868 869 + 868: Label + 872: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 873: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 874 874 16 16 + 871: 74(fvec3) Load 594(fragcolor) + Store 870(param) 871 + 876: 74(fvec3) Load 513(fragPos) + Store 875(param) 876 + 877: 74(fvec3) FunctionCall 82(shadow(vf3;vf3;) 870(param) 875(param) + Store 594(fragcolor) 877 + Branch 869 + 869: Label + 879: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101 + 880: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 881 881 16 16 + 878: 74(fvec3) Load 594(fragcolor) + 882: 8(float) CompositeExtract 878 0 + 883: 8(float) CompositeExtract 878 1 + 884: 8(float) CompositeExtract 878 2 + 885: 18(fvec4) CompositeConstruct 882 883 884 114 + ReturnValue 885 + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.hlsl.geom.out b/Test/baseResults/spv.debuginfo.hlsl.geom.out new file mode 100644 index 0000000000..3c094d3501 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.hlsl.geom.out @@ -0,0 +1,509 @@ +spv.debuginfo.hlsl.geom +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 366 + + Capability Geometry + Capability MultiViewport + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 6 "main" 264 273 278 285 290 295 300 315 322 327 351 354 + ExecutionMode 6 Triangles + ExecutionMode 6 Invocations 2 + ExecutionMode 6 OutputTriangleStrip + ExecutionMode 6 OutputVertices 3 + 2: String "" + 9: String "float" + 12: String "uint" + 25: String "Pos" + 27: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed entry-point main +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed hlsl-offsets +#line 1 +" + 31: String "Color" + 36: String "VSOutput" + 50: String "PrimitiveID" + 55: String "LightVec" + 61: String "GSOutput" + 74: String "@main" + 77: String "input" + 83: String "outStream" + 87: String "InvocationID" + 93: String "int" + 99: String "i" + 116: String "bool" + 121: String "output" + 147: String "projection" + 151: String "modelview" + 155: String "lightPos" + 159: String "UBO" + 162: String "ubo" + 198: String "pos" + 207: String "worldPos" + 218: String "lPos" + 266: String "outStream.Pos" + 275: String "outStream.ViewportIndex" + 280: String "outStream.PrimitiveID" + 287: String "outStream.Normal" + 292: String "outStream.Color" + 297: String "outStream.ViewVec" + 302: String "outStream.LightVec" + Name 6 "main" + Name 23 "VSOutput" + MemberName 23(VSOutput) 0 "Pos" + MemberName 23(VSOutput) 1 "Normal" + MemberName 23(VSOutput) 2 "Color" + Name 46 "GSOutput" + MemberName 46(GSOutput) 0 "Pos" + MemberName 46(GSOutput) 1 "ViewportIndex" + MemberName 46(GSOutput) 2 "PrimitiveID" + MemberName 46(GSOutput) 3 "Normal" + MemberName 46(GSOutput) 4 "Color" + MemberName 46(GSOutput) 5 "ViewVec" + MemberName 46(GSOutput) 6 "LightVec" + Name 72 "@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;" + Name 68 "input" + Name 69 "outStream" + Name 70 "InvocationID" + Name 71 "PrimitiveID" + Name 97 "i" + Name 119 "output" + Name 145 "UBO" + MemberName 145(UBO) 0 "projection" + MemberName 145(UBO) 1 "modelview" + MemberName 145(UBO) 2 "lightPos" + Name 160 "ubo" + MemberName 160(ubo) 0 "ubo" + Name 167 "" + Name 196 "pos" + Name 205 "worldPos" + Name 216 "lPos" + Name 264 "outStream.Pos" + Name 273 "outStream.ViewportIndex" + Name 278 "outStream.PrimitiveID" + Name 285 "outStream.Normal" + Name 290 "outStream.Color" + Name 295 "outStream.ViewVec" + Name 300 "outStream.LightVec" + Name 312 "input" + Name 315 "input.Pos" + Name 322 "input.Normal" + Name 327 "input.Color" + Name 349 "InvocationID" + Name 351 "InvocationID" + Name 353 "PrimitiveID" + Name 354 "PrimitiveID" + Name 356 "outStream" + Name 357 "param" + Name 359 "param" + Name 360 "param" + Name 362 "param" + Decorate 141 ArrayStride 64 + Decorate 143 ArrayStride 64 + MemberDecorate 145(UBO) 0 RowMajor + MemberDecorate 145(UBO) 0 MatrixStride 16 + MemberDecorate 145(UBO) 0 Offset 0 + MemberDecorate 145(UBO) 1 RowMajor + MemberDecorate 145(UBO) 1 MatrixStride 16 + MemberDecorate 145(UBO) 1 Offset 128 + MemberDecorate 145(UBO) 2 Offset 256 + Decorate 160(ubo) Block + MemberDecorate 160(ubo) 0 Offset 0 + Decorate 167 Binding 0 + Decorate 167 DescriptorSet 0 + Decorate 264(outStream.Pos) BuiltIn Position + Decorate 273(outStream.ViewportIndex) BuiltIn ViewportIndex + Decorate 278(outStream.PrimitiveID) BuiltIn PrimitiveId + Decorate 285(outStream.Normal) Location 0 + Decorate 290(outStream.Color) Location 1 + Decorate 295(outStream.ViewVec) Location 2 + Decorate 300(outStream.LightVec) Location 3 + Decorate 315(input.Pos) BuiltIn Position + Decorate 322(input.Normal) Location 0 + Decorate 327(input.Color) Location 1 + Decorate 351(InvocationID) BuiltIn InvocationId + Decorate 354(PrimitiveID) BuiltIn PrimitiveId + 4: TypeVoid + 5: TypeFunction 4 + 8: TypeFloat 32 + 11: TypeInt 32 0 + 14: 11(int) Constant 32 + 15: 11(int) Constant 6 + 16: 11(int) Constant 0 + 13: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16 + 17: 11(int) Constant 3 + 10: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16 + 18: TypeVector 8(float) 4 + 19: 11(int) Constant 4 + 20: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 19 + 21: TypeVector 8(float) 3 + 22: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17 + 23(VSOutput): TypeStruct 18(fvec4) 21(fvec3) 21(fvec3) + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 27 + 28: 11(int) Constant 37 + 29: 11(int) Constant 13 + 24: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 25 20 26 28 29 16 16 17 + 32: 11(int) Constant 39 + 33: 11(int) Constant 34 + 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 31 22 26 32 33 16 16 17 + 34: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 31 22 26 32 33 16 16 17 + 37: 11(int) Constant 1 + 38: 11(int) Constant 56 + 40: 11(int) Constant 5 + 39: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 37 19 26 40 + 35: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 36 37 26 38 16 39 36 16 17 24 30 34 + 41: TypeArray 23(VSOutput) 17 + 42: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 35 17 + 43: TypePointer Function 41 + 44: 11(int) Constant 7 + 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 42 44 16 + 46(GSOutput): TypeStruct 18(fvec4) 11(int) 11(int) 21(fvec3) 21(fvec3) 21(fvec3) 21(fvec3) + 48: 11(int) Constant 44 + 47: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 25 20 26 48 29 16 16 17 + 51: 11(int) Constant 46 + 52: 11(int) Constant 19 + 49: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 50 13 26 51 52 16 16 17 + 53: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 50 13 26 51 52 16 16 17 + 56: 11(int) Constant 50 + 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 55 22 26 56 28 16 16 17 + 57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 55 22 26 56 28 16 16 17 + 58: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 55 22 26 56 28 16 16 17 + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 55 22 26 56 28 16 16 17 + 60: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 61 37 26 38 16 39 61 16 17 47 49 53 54 57 58 59 + 62: TypePointer Function 46(GSOutput) + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 60 44 16 + 64: TypePointer Function 11(int) + 65: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 44 16 + 66: TypeFunction 4 43(ptr) 62(ptr) 64(ptr) 64(ptr) + 67: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 4 42 60 13 13 + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 74 67 26 38 16 39 74 17 38 + 76: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 77 42 26 38 16 75 19 37 + 79: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 84: 11(int) Constant 2 + 82: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 83 60 26 38 16 75 19 84 + 86: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 87 13 26 38 16 75 19 17 + 89: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 13 26 38 16 75 19 19 + 92: TypeInt 32 1 + 94: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 93 14 19 16 + 95: TypePointer Function 92(int) + 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 94 44 16 + 100: 11(int) Constant 57 + 98: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 99 94 26 100 16 75 19 + 103: 92(int) Constant 0 + 114: 92(int) Constant 3 + 115: TypeBool + 117: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 116 14 84 16 + 122: 11(int) Constant 59 + 120: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 121 60 26 122 16 75 19 + 126: 8(float) Constant 0 + 127: 18(fvec4) ConstantComposite 126 126 126 126 + 128: 21(fvec3) ConstantComposite 126 126 126 + 129:46(GSOutput) ConstantComposite 127 16 16 128 128 128 128 + 132: 11(int) Constant 60 + 133: 92(int) Constant 1 + 134: TypePointer Function 21(fvec3) + 135: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 44 16 + 138: TypeMatrix 18(fvec4) 4 + 140: 115(bool) ConstantTrue + 139: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 140 + 141: TypeArray 138 84 + 142: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 139 84 + 143: TypeArray 138 84 + 144: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 139 84 + 145(UBO): TypeStruct 141 143 18(fvec4) + 148: 11(int) Constant 28 + 149: 11(int) Constant 21 + 146: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 147 142 26 148 149 16 16 17 + 152: 11(int) Constant 29 + 153: 11(int) Constant 20 + 150: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 151 144 26 152 153 16 16 17 + 156: 11(int) Constant 30 + 157: 11(int) Constant 17 + 154: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 155 20 26 156 157 16 16 17 + 158: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 159 37 26 132 16 39 159 16 17 146 150 154 + 160(ubo): TypeStruct 145(UBO) + 163: 11(int) Constant 33 + 161: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 162 158 26 163 28 16 16 17 + 164: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 162 37 26 132 16 39 162 16 17 161 + 165: TypePointer Uniform 160(ubo) + 166: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 164 84 16 + 167: 165(ptr) Variable Uniform + 169: 11(int) Constant 8 + 168: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 2 164 26 132 16 39 2 167 169 + 171: TypePointer Uniform 138 + 172: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 139 84 16 + 175: TypeMatrix 21(fvec3) 3 + 176: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 22 17 140 + 186: 92(int) Constant 4 + 189: 11(int) Constant 61 + 190: 92(int) Constant 2 + 194: TypePointer Function 18(fvec4) + 195: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 44 16 + 199: 11(int) Constant 63 + 197: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 198 20 26 199 16 75 19 + 208: 11(int) Constant 64 + 206: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 207 20 26 208 16 75 19 + 219: 11(int) Constant 66 + 217: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 218 22 26 219 16 75 19 + 222: TypePointer Uniform 18(fvec4) + 223: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 84 16 + 231: 92(int) Constant 6 + 234: 11(int) Constant 67 + 239: 92(int) Constant 5 + 242: 11(int) Constant 68 + 248: 11(int) Constant 70 + 256: 11(int) Constant 73 + 260: 11(int) Constant 74 + 262: TypePointer Output 18(fvec4) + 263: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 17 16 +264(outStream.Pos): 262(ptr) Variable Output + 267: 11(int) Constant 75 + 265: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 266 20 26 267 16 39 266 264(outStream.Pos) 169 + 271: TypePointer Output 11(int) + 272: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 17 16 +273(outStream.ViewportIndex): 271(ptr) Variable Output + 274: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 275 13 26 267 16 39 275 273(outStream.ViewportIndex) 169 +278(outStream.PrimitiveID): 271(ptr) Variable Output + 279: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 280 13 26 267 16 39 280 278(outStream.PrimitiveID) 169 + 283: TypePointer Output 21(fvec3) + 284: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 17 16 +285(outStream.Normal): 283(ptr) Variable Output + 286: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 287 22 26 267 16 39 287 285(outStream.Normal) 169 +290(outStream.Color): 283(ptr) Variable Output + 291: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 292 22 26 267 16 39 292 290(outStream.Color) 169 +295(outStream.ViewVec): 283(ptr) Variable Output + 296: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 297 22 26 267 16 39 297 295(outStream.ViewVec) 169 +300(outStream.LightVec): 283(ptr) Variable Output + 301: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 302 22 26 267 16 39 302 300(outStream.LightVec) 169 + 311: 11(int) Constant 78 + 313: TypeArray 18(fvec4) 17 + 314: TypePointer Input 313 + 315(input.Pos): 314(ptr) Variable Input + 316: TypePointer Input 18(fvec4) + 320: TypeArray 21(fvec3) 17 + 321: TypePointer Input 320 +322(input.Normal): 321(ptr) Variable Input + 323: TypePointer Input 21(fvec3) +327(input.Color): 321(ptr) Variable Input + 350: TypePointer Input 11(int) +351(InvocationID): 350(ptr) Variable Input +354(PrimitiveID): 350(ptr) Variable Input + 6(main): 4 Function None 5 + 7: Label + 312(input): 43(ptr) Variable Function +349(InvocationID): 64(ptr) Variable Function +353(PrimitiveID): 64(ptr) Variable Function + 356(outStream): 62(ptr) Variable Function + 357(param): 43(ptr) Variable Function + 359(param): 62(ptr) Variable Function + 360(param): 64(ptr) Variable Function + 362(param): 64(ptr) Variable Function + 317: 316(ptr) AccessChain 315(input.Pos) 103 + 318: 18(fvec4) Load 317 + 319: 194(ptr) AccessChain 312(input) 103 103 + Store 319 318 + 324: 323(ptr) AccessChain 322(input.Normal) 103 + 325: 21(fvec3) Load 324 + 326: 134(ptr) AccessChain 312(input) 103 133 + Store 326 325 + 328: 323(ptr) AccessChain 327(input.Color) 103 + 329: 21(fvec3) Load 328 + 330: 134(ptr) AccessChain 312(input) 103 190 + Store 330 329 + 331: 316(ptr) AccessChain 315(input.Pos) 133 + 332: 18(fvec4) Load 331 + 333: 194(ptr) AccessChain 312(input) 133 103 + Store 333 332 + 334: 323(ptr) AccessChain 322(input.Normal) 133 + 335: 21(fvec3) Load 334 + 336: 134(ptr) AccessChain 312(input) 133 133 + Store 336 335 + 337: 323(ptr) AccessChain 327(input.Color) 133 + 338: 21(fvec3) Load 337 + 339: 134(ptr) AccessChain 312(input) 133 190 + Store 339 338 + 340: 316(ptr) AccessChain 315(input.Pos) 190 + 341: 18(fvec4) Load 340 + 342: 194(ptr) AccessChain 312(input) 190 103 + Store 342 341 + 343: 323(ptr) AccessChain 322(input.Normal) 190 + 344: 21(fvec3) Load 343 + 345: 134(ptr) AccessChain 312(input) 190 133 + Store 345 344 + 346: 323(ptr) AccessChain 327(input.Color) 190 + 347: 21(fvec3) Load 346 + 348: 134(ptr) AccessChain 312(input) 190 190 + Store 348 347 + 352: 11(int) Load 351(InvocationID) + Store 349(InvocationID) 352 + 355: 11(int) Load 354(PrimitiveID) + Store 353(PrimitiveID) 355 + 358: 41 Load 312(input) + Store 357(param) 358 + 361: 11(int) Load 349(InvocationID) + Store 360(param) 361 + 363: 11(int) Load 353(PrimitiveID) + Store 362(param) 363 + 364: 4 FunctionCall 72(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;) 357(param) 359(param) 360(param) 362(param) + 365:46(GSOutput) Load 359(param) + Store 356(outStream) 365 + Return + FunctionEnd +72(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;): 4 Function None 66 + 68(input): 43(ptr) FunctionParameter + 69(outStream): 62(ptr) FunctionParameter +70(InvocationID): 64(ptr) FunctionParameter + 71(PrimitiveID): 64(ptr) FunctionParameter + 73: Label + 97(i): 95(ptr) Variable Function + 119(output): 62(ptr) Variable Function + 196(pos): 194(ptr) Variable Function + 205(worldPos): 194(ptr) Variable Function + 216(lPos): 134(ptr) Variable Function + 80: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 75 + 81: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 38 38 16 16 + 78: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 76 68(input) 79 + 85: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 82 69(outStream) 79 + 88: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 86 70(InvocationID) 79 + 90: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 89 71(PrimitiveID) 79 + 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 75 72(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;) + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 100 100 16 16 + 101: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 98 97(i) 79 + Store 97(i) 103 + Branch 104 + 104: Label + 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 75 + 109: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 100 100 16 16 + LoopMerge 106 107 None + Branch 110 + 110: Label + 112: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 75 + 113: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 100 100 16 16 + 111: 92(int) Load 97(i) + 118: 115(bool) SLessThan 111 114 + BranchConditional 118 105 106 + 105: Label + 124: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 75 + 125: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 122 122 16 16 + 123: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 120 119(output) 79 + Store 119(output) 129 + 131: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 132 132 16 16 + 130: 92(int) Load 97(i) + 136: 134(ptr) AccessChain 68(input) 130 133 + 137: 21(fvec3) Load 136 + 170: 11(int) Load 70(InvocationID) + 173: 171(ptr) AccessChain 167 103 133 170 + 174: 138 Load 173 + 177: 18(fvec4) CompositeExtract 174 0 + 178: 21(fvec3) VectorShuffle 177 177 0 1 2 + 179: 18(fvec4) CompositeExtract 174 1 + 180: 21(fvec3) VectorShuffle 179 179 0 1 2 + 181: 18(fvec4) CompositeExtract 174 2 + 182: 21(fvec3) VectorShuffle 181 181 0 1 2 + 183: 175 CompositeConstruct 178 180 182 + 184: 21(fvec3) VectorTimesMatrix 137 183 + 185: 134(ptr) AccessChain 119(output) 114 + Store 185 184 + 188: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 189 189 16 16 + 187: 92(int) Load 97(i) + 191: 134(ptr) AccessChain 68(input) 187 190 + 192: 21(fvec3) Load 191 + 193: 134(ptr) AccessChain 119(output) 186 + Store 193 192 + 201: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 199 199 16 16 + 200: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 197 196(pos) 79 + 202: 92(int) Load 97(i) + 203: 194(ptr) AccessChain 68(input) 202 103 + 204: 18(fvec4) Load 203 + Store 196(pos) 204 + 210: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 208 208 16 16 + 209: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 206 205(worldPos) 79 + 211: 18(fvec4) Load 196(pos) + 212: 11(int) Load 70(InvocationID) + 213: 171(ptr) AccessChain 167 103 133 212 + 214: 138 Load 213 + 215: 18(fvec4) VectorTimesMatrix 211 214 + Store 205(worldPos) 215 + 221: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 219 219 16 16 + 220: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 217 216(lPos) 79 + 224: 222(ptr) AccessChain 167 103 190 + 225: 18(fvec4) Load 224 + 226: 11(int) Load 70(InvocationID) + 227: 171(ptr) AccessChain 167 103 133 226 + 228: 138 Load 227 + 229: 18(fvec4) VectorTimesMatrix 225 228 + 230: 21(fvec3) VectorShuffle 229 229 0 1 2 + Store 216(lPos) 230 + 233: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 234 234 16 16 + 232: 21(fvec3) Load 216(lPos) + 235: 18(fvec4) Load 205(worldPos) + 236: 21(fvec3) VectorShuffle 235 235 0 1 2 + 237: 21(fvec3) FSub 232 236 + 238: 134(ptr) AccessChain 119(output) 231 + Store 238 237 + 241: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 242 242 16 16 + 240: 18(fvec4) Load 205(worldPos) + 243: 21(fvec3) VectorShuffle 240 240 0 1 2 + 244: 21(fvec3) FNegate 243 + 245: 134(ptr) AccessChain 119(output) 239 + Store 245 244 + 247: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 248 248 16 16 + 246: 18(fvec4) Load 205(worldPos) + 249: 11(int) Load 70(InvocationID) + 250: 171(ptr) AccessChain 167 103 103 249 + 251: 138 Load 250 + 252: 18(fvec4) VectorTimesMatrix 246 251 + 253: 194(ptr) AccessChain 119(output) 103 + Store 253 252 + 255: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 256 256 16 16 + 254: 11(int) Load 70(InvocationID) + 257: 64(ptr) AccessChain 119(output) 133 + Store 257 254 + 259: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 260 260 16 16 + 258: 11(int) Load 71(PrimitiveID) + 261: 64(ptr) AccessChain 119(output) 190 + Store 261 258 + 269: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 267 267 16 16 + 268: 194(ptr) AccessChain 119(output) 103 + 270: 18(fvec4) Load 268 + Store 264(outStream.Pos) 270 + 276: 64(ptr) AccessChain 119(output) 133 + 277: 11(int) Load 276 + Store 273(outStream.ViewportIndex) 277 + 281: 64(ptr) AccessChain 119(output) 190 + 282: 11(int) Load 281 + Store 278(outStream.PrimitiveID) 282 + 288: 134(ptr) AccessChain 119(output) 114 + 289: 21(fvec3) Load 288 + Store 285(outStream.Normal) 289 + 293: 134(ptr) AccessChain 119(output) 186 + 294: 21(fvec3) Load 293 + Store 290(outStream.Color) 294 + 298: 134(ptr) AccessChain 119(output) 239 + 299: 21(fvec3) Load 298 + Store 295(outStream.ViewVec) 299 + 303: 134(ptr) AccessChain 119(output) 231 + 304: 21(fvec3) Load 303 + Store 300(outStream.LightVec) 304 + EmitVertex + Branch 107 + 107: Label + 306: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 75 + 307: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 100 100 16 16 + 305: 92(int) Load 97(i) + 308: 92(int) IAdd 305 133 + Store 97(i) 308 + Branch 104 + 106: Label + 309: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 75 + 310: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 311 311 16 16 + EndPrimitive + Return + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.hlsl.tesc.out b/Test/baseResults/spv.debuginfo.hlsl.tesc.out new file mode 100644 index 0000000000..a3cbcc5eae --- /dev/null +++ b/Test/baseResults/spv.debuginfo.hlsl.tesc.out @@ -0,0 +1,921 @@ +spv.debuginfo.hlsl.tesc +WARNING: 0:158: '' : attribute does not apply to entry point + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 706 + + Capability Tessellation + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 6 "main" 598 605 612 646 655 662 669 684 699 + ExecutionMode 6 OutputVertices 4 + ExecutionMode 6 Quads + ExecutionMode 6 SpacingEqual + ExecutionMode 6 VertexOrderCw + 2: String "" + 9: String "float" + 12: String "uint" + 30: String "screenSpaceTessFactor" + 33: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed entry-point main +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed hlsl-offsets +#line 1 +" + 39: String "p0" + 45: String "p1" + 53: String "bool" + 61: String "frustumCheck" + 65: String "Pos" + 70: String "inUV" + 79: String "Normal" + 83: String "UV" + 87: String "VSOutput" + 99: String "TessLevelOuter" + 103: String "TessLevelInner" + 106: String "ConstantsHSOutput" + 112: String "ConstantsHS" + 115: String "patch" + 129: String "HSOutput" + 137: String "@main" + 144: String "InvocationID" + 149: String "midPoint" + 162: String "radius" + 173: String "v0" + 185: String "modelview" + 190: String "lightPos" + 194: String "frustumPlanes" + 197: String "tessellatedEdgeSize" + 201: String "viewportDim" + 205: String "UBO" + 208: String "ubo" + 217: String "int" + 228: String "clip0" + 246: String "clip1" + 324: String "pos" + 331: String "type.2d.image" + 333: String "@type.2d.image" + 339: String "textureHeight" + 344: String "type.sampler" + 345: String "@type.sampler" + 350: String "samplerHeight" + 354: String "type.sampled.image" + 355: String "@type.sampled.image" + 372: String "i" + 424: String "output" + Name 6 "main" + Name 28 "screenSpaceTessFactor(vf4;vf4;" + Name 26 "p0" + Name 27 "p1" + Name 59 "frustumCheck(vf4;vf2;" + Name 57 "Pos" + Name 58 "inUV" + Name 74 "VSOutput" + MemberName 74(VSOutput) 0 "Pos" + MemberName 74(VSOutput) 1 "Normal" + MemberName 74(VSOutput) 2 "UV" + Name 97 "ConstantsHSOutput" + MemberName 97(ConstantsHSOutput) 0 "TessLevelOuter" + MemberName 97(ConstantsHSOutput) 1 "TessLevelInner" + Name 110 "ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];" + Name 109 "patch" + Name 121 "HSOutput" + MemberName 121(HSOutput) 0 "Pos" + MemberName 121(HSOutput) 1 "Normal" + MemberName 121(HSOutput) 2 "UV" + Name 135 "@main(struct-VSOutput-vf4-vf3-vf21[4];u1;" + Name 133 "patch" + Name 134 "InvocationID" + Name 147 "midPoint" + Name 160 "radius" + Name 171 "v0" + Name 183 "UBO" + MemberName 183(UBO) 0 "projection" + MemberName 183(UBO) 1 "modelview" + MemberName 183(UBO) 2 "lightPos" + MemberName 183(UBO) 3 "frustumPlanes" + MemberName 183(UBO) 4 "displacementFactor" + MemberName 183(UBO) 5 "tessellationFactor" + MemberName 183(UBO) 6 "viewportDim" + MemberName 183(UBO) 7 "tessellatedEdgeSize" + Name 206 "ubo" + MemberName 206(ubo) 0 "ubo" + Name 213 "" + Name 226 "clip0" + Name 244 "clip1" + Name 322 "pos" + Name 337 "textureHeight" + Name 348 "samplerHeight" + Name 370 "i" + Name 422 "output" + Name 432 "param" + Name 437 "param" + Name 472 "param" + Name 478 "param" + Name 483 "param" + Name 488 "param" + Name 493 "param" + Name 498 "param" + Name 503 "param" + Name 508 "param" + Name 560 "output" + Name 595 "patch" + Name 598 "patch.Pos" + Name 605 "patch.Normal" + Name 612 "patch.UV" + Name 644 "InvocationID" + Name 646 "InvocationID" + Name 648 "flattenTemp" + Name 649 "param" + Name 651 "param" + Name 655 "@entryPointOutput.Pos" + Name 662 "@entryPointOutput.Normal" + Name 669 "@entryPointOutput.UV" + Name 679 "@patchConstantResult" + Name 680 "param" + Name 684 "@patchConstantOutput.TessLevelOuter" + Name 699 "@patchConstantOutput.TessLevelInner" + Decorate 181 ArrayStride 16 + MemberDecorate 183(UBO) 0 RowMajor + MemberDecorate 183(UBO) 0 MatrixStride 16 + MemberDecorate 183(UBO) 0 Offset 0 + MemberDecorate 183(UBO) 1 RowMajor + MemberDecorate 183(UBO) 1 MatrixStride 16 + MemberDecorate 183(UBO) 1 Offset 64 + MemberDecorate 183(UBO) 2 Offset 128 + MemberDecorate 183(UBO) 3 Offset 144 + MemberDecorate 183(UBO) 4 Offset 240 + MemberDecorate 183(UBO) 5 Offset 244 + MemberDecorate 183(UBO) 6 Offset 248 + MemberDecorate 183(UBO) 7 Offset 256 + Decorate 206(ubo) Block + MemberDecorate 206(ubo) 0 Offset 0 + Decorate 213 Binding 0 + Decorate 213 DescriptorSet 0 + Decorate 337(textureHeight) Binding 1 + Decorate 337(textureHeight) DescriptorSet 0 + Decorate 348(samplerHeight) Binding 1 + Decorate 348(samplerHeight) DescriptorSet 0 + Decorate 598(patch.Pos) BuiltIn Position + Decorate 605(patch.Normal) Location 0 + Decorate 612(patch.UV) Location 1 + Decorate 646(InvocationID) BuiltIn InvocationId + Decorate 655(@entryPointOutput.Pos) BuiltIn Position + Decorate 662(@entryPointOutput.Normal) Location 0 + Decorate 669(@entryPointOutput.UV) Location 1 + Decorate 684(@patchConstantOutput.TessLevelOuter) BuiltIn TessLevelOuter + Decorate 684(@patchConstantOutput.TessLevelOuter) Patch + Decorate 699(@patchConstantOutput.TessLevelInner) BuiltIn TessLevelInner + Decorate 699(@patchConstantOutput.TessLevelInner) Patch + 4: TypeVoid + 5: TypeFunction 4 + 8: TypeFloat 32 + 11: TypeInt 32 0 + 14: 11(int) Constant 32 + 15: 11(int) Constant 6 + 16: 11(int) Constant 0 + 13: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16 + 17: 11(int) Constant 3 + 10: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16 + 18: TypeVector 8(float) 4 + 19: 11(int) Constant 4 + 20: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 19 + 21: TypePointer Function 18(fvec4) + 22: 11(int) Constant 7 + 23: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 22 16 + 24: TypeFunction 8(float) 21(ptr) 21(ptr) + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 10 20 20 + 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 33 + 34: 11(int) Constant 65 + 36: 11(int) Constant 1 + 37: 11(int) Constant 5 + 35: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 36 19 32 37 + 31: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 30 25 32 34 16 35 30 17 34 + 38: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 39 20 32 34 16 31 19 36 + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 46: 11(int) Constant 2 + 44: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 45 20 32 34 16 31 19 46 + 48: TypeVector 8(float) 2 + 49: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 46 + 50: TypePointer Function 48(fvec2) + 51: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 49 22 16 + 52: TypeBool + 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 53 14 46 16 + 55: TypeFunction 52(bool) 21(ptr) 50(ptr) + 56: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 54 20 49 + 63: 11(int) Constant 95 + 62: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 61 56 32 63 16 35 61 17 63 + 64: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 65 20 32 63 16 62 19 36 + 69: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 70 49 32 63 16 62 19 46 + 72: TypeVector 8(float) 3 + 73: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17 + 74(VSOutput): TypeStruct 18(fvec4) 72(fvec3) 48(fvec2) + 76: 11(int) Constant 44 + 77: 11(int) Constant 13 + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 65 20 32 76 77 16 16 17 + 80: 11(int) Constant 45 + 81: 11(int) Constant 35 + 78: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 79 73 32 80 81 16 16 17 + 84: 11(int) Constant 46 + 85: 11(int) Constant 31 + 82: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 83 49 32 84 85 16 16 17 + 88: 11(int) Constant 112 + 86: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 87 36 32 88 16 35 87 16 17 75 78 82 + 89: TypeArray 74(VSOutput) 19 + 90: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 86 19 + 91: TypePointer Function 89 + 92: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 90 22 16 + 93: TypeArray 8(float) 19 + 94: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 19 + 95: TypeArray 8(float) 46 + 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 46 +97(ConstantsHSOutput): TypeStruct 93 95 + 100: 11(int) Constant 58 + 101: 11(int) Constant 25 + 98: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 99 94 32 100 101 16 16 17 + 104: 11(int) Constant 59 + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 103 96 32 104 101 16 16 17 + 105: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 106 36 32 88 16 35 106 16 17 98 102 + 107: TypeFunction 97(ConstantsHSOutput) 91(ptr) + 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 105 90 + 113: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 112 108 32 88 16 35 112 17 88 + 114: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 115 90 32 88 16 113 19 36 + 119: TypePointer Function 11(int) + 120: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 22 16 + 121(HSOutput): TypeStruct 18(fvec4) 72(fvec3) 48(fvec2) + 123: 11(int) Constant 51 + 122: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 65 20 32 123 14 16 16 17 + 125: 11(int) Constant 52 + 124: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 79 73 32 125 81 16 16 17 + 127: 11(int) Constant 53 + 126: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 83 49 32 127 85 16 16 17 + 130: 11(int) Constant 158 + 128: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 129 36 32 130 16 35 129 16 17 122 124 126 + 131: TypeFunction 121(HSOutput) 91(ptr) 119(ptr) + 132: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 128 90 13 + 138: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 137 132 32 130 16 35 137 17 130 + 139: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 115 90 32 130 16 138 19 36 + 143: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 144 13 32 130 16 138 19 46 + 150: 11(int) Constant 67 + 148: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 149 20 32 150 16 31 19 + 153: 8(float) Constant 1056964608 + 158: TypePointer Function 8(float) + 159: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 22 16 + 163: 11(int) Constant 69 + 161: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 162 10 32 163 16 31 19 + 169: 8(float) Constant 1073741824 + 174: 11(int) Constant 72 + 172: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 173 20 32 174 16 31 19 + 178: TypeMatrix 18(fvec4) 4 + 180: 52(bool) ConstantTrue + 179: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 180 + 181: TypeArray 18(fvec4) 15 + 182: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 20 15 + 183(UBO): TypeStruct 178 178 18(fvec4) 181 8(float) 8(float) 48(fvec2) 8(float) + 186: 11(int) Constant 29 + 187: 11(int) Constant 20 + 184: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 185 179 32 186 187 16 16 17 + 188: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 185 179 32 186 187 16 16 17 + 191: 11(int) Constant 30 + 192: 11(int) Constant 17 + 189: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 190 20 32 191 192 16 16 17 + 195: 11(int) Constant 22 + 193: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 194 182 32 85 195 16 16 17 + 198: 11(int) Constant 27 + 196: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 197 10 32 81 198 16 16 17 + 199: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 197 10 32 81 198 16 16 17 + 202: 11(int) Constant 34 + 200: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 201 49 32 202 187 16 16 17 + 203: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 197 10 32 81 198 16 16 17 + 204: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 205 36 32 174 16 35 205 16 17 184 188 189 193 196 199 200 203 + 206(ubo): TypeStruct 183(UBO) + 209: 11(int) Constant 37 + 207: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 208 204 32 209 209 16 16 17 + 210: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 208 36 32 174 16 35 208 16 17 207 + 211: TypePointer Uniform 206(ubo) + 212: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 210 46 16 + 213: 211(ptr) Variable Uniform + 215: 11(int) Constant 8 + 214: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 2 210 32 174 16 35 2 213 215 + 216: TypeInt 32 1 + 218: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 217 14 19 16 + 219: 216(int) Constant 0 + 220: 216(int) Constant 1 + 221: TypePointer Uniform 178 + 222: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 179 46 16 + 229: 11(int) Constant 75 + 227: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 228 20 32 229 16 31 19 + 234: 8(float) Constant 0 + 235: 72(fvec3) ConstantComposite 234 234 234 + 247: 11(int) Constant 76 + 245: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 246 20 32 247 16 31 19 + 262: 11(int) Constant 79 + 269: 11(int) Constant 80 + 274: 216(int) Constant 6 + 275: TypePointer Uniform 48(fvec2) + 276: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 49 46 16 + 279: 11(int) Constant 83 + 290: 11(int) Constant 84 + 301: 11(int) Constant 89 + 304: 216(int) Constant 7 + 305: TypePointer Uniform 8(float) + 306: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 46 16 + 310: 216(int) Constant 5 + 314: 8(float) Constant 1065353216 + 315: 8(float) Constant 1115684864 + 325: 11(int) Constant 98 + 323: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 324 20 32 325 16 62 19 + 329: TypeImage 8(float) 2D sampled format:Unknown + 332: 11(int) Constant 99 + 334: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone) + 330: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 331 16 32 332 16 35 333 334 17 + 335: TypePointer UniformConstant 329 + 336: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 330 16 16 +337(textureHeight): 335(ptr) Variable UniformConstant + 338: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 339 330 32 332 16 35 339 337(textureHeight) 215 + 342: TypeSampler + 343: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 344 36 32 332 16 35 345 334 17 + 346: TypePointer UniformConstant 342 + 347: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 343 16 16 +348(samplerHeight): 346(ptr) Variable UniformConstant + 349: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 350 343 32 332 16 35 350 348(samplerHeight) 215 + 352: TypeSampledImage 329 + 353: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 354 16 32 332 16 35 355 334 17 + 360: 216(int) Constant 4 + 368: TypePointer Function 216(int) + 369: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 218 22 16 + 373: 11(int) Constant 102 + 371: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 372 218 32 373 16 62 19 + 390: 11(int) Constant 103 + 391: 216(int) Constant 3 + 393: TypePointer Uniform 18(fvec4) + 394: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 46 16 + 398: 8(float) Constant 1090519040 + 403: 52(bool) ConstantFalse + 406: 11(int) Constant 105 + 414: 11(int) Constant 108 + 420: TypePointer Function 97(ConstantsHSOutput) + 421: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 105 22 16 + 425: 11(int) Constant 113 + 423: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 424 105 32 425 16 113 19 + 428: 93 ConstantComposite 234 234 234 234 + 429: 95 ConstantComposite 234 234 + 430:97(ConstantsHSOutput) ConstantComposite 428 429 + 431: 216(int) Constant 2 + 435: 11(int) Constant 115 + 447: 11(int) Constant 117 + 450: 11(int) Constant 118 + 453: 11(int) Constant 119 + 456: 11(int) Constant 120 + 459: 11(int) Constant 121 + 462: 11(int) Constant 122 + 467: 11(int) Constant 126 + 476: 11(int) Constant 128 + 486: 11(int) Constant 129 + 496: 11(int) Constant 130 + 506: 11(int) Constant 131 + 515: 11(int) Constant 132 + 523: 11(int) Constant 133 + 533: 11(int) Constant 139 + 536: 11(int) Constant 140 + 539: 11(int) Constant 141 + 542: 11(int) Constant 142 + 545: 11(int) Constant 143 + 548: 11(int) Constant 144 + 552: 11(int) Constant 148 + 558: TypePointer Function 121(HSOutput) + 559: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 128 22 16 + 562: 11(int) Constant 159 + 561: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 424 128 32 562 16 138 19 + 565: 18(fvec4) ConstantComposite 234 234 234 234 + 566: 48(fvec2) ConstantComposite 234 234 + 567:121(HSOutput) ConstantComposite 565 235 566 + 570: 11(int) Constant 160 + 576: 11(int) Constant 161 + 577: TypePointer Function 72(fvec3) + 578: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 73 22 16 + 584: 11(int) Constant 162 + 590: 11(int) Constant 163 + 596: TypeArray 18(fvec4) 19 + 597: TypePointer Input 596 + 598(patch.Pos): 597(ptr) Variable Input + 599: TypePointer Input 18(fvec4) + 603: TypeArray 72(fvec3) 19 + 604: TypePointer Input 603 +605(patch.Normal): 604(ptr) Variable Input + 606: TypePointer Input 72(fvec3) + 610: TypeArray 48(fvec2) 19 + 611: TypePointer Input 610 + 612(patch.UV): 611(ptr) Variable Input + 613: TypePointer Input 48(fvec2) + 645: TypePointer Input 11(int) +646(InvocationID): 645(ptr) Variable Input + 654: TypePointer Output 596 +655(@entryPointOutput.Pos): 654(ptr) Variable Output + 659: TypePointer Output 18(fvec4) + 661: TypePointer Output 603 +662(@entryPointOutput.Normal): 661(ptr) Variable Output + 666: TypePointer Output 72(fvec3) + 668: TypePointer Output 610 +669(@entryPointOutput.UV): 668(ptr) Variable Output + 673: TypePointer Output 48(fvec2) + 683: TypePointer Output 93 +684(@patchConstantOutput.TessLevelOuter): 683(ptr) Variable Output + 687: TypePointer Output 8(float) + 698: TypePointer Output 95 +699(@patchConstantOutput.TessLevelInner): 698(ptr) Variable Output + 6(main): 4 Function None 5 + 7: Label + 595(patch): 91(ptr) Variable Function +644(InvocationID): 119(ptr) Variable Function +648(flattenTemp): 558(ptr) Variable Function + 649(param): 91(ptr) Variable Function + 651(param): 119(ptr) Variable Function +679(@patchConstantResult): 420(ptr) Variable Function + 680(param): 91(ptr) Variable Function + 600: 599(ptr) AccessChain 598(patch.Pos) 219 + 601: 18(fvec4) Load 600 + 602: 21(ptr) AccessChain 595(patch) 219 219 + Store 602 601 + 607: 606(ptr) AccessChain 605(patch.Normal) 219 + 608: 72(fvec3) Load 607 + 609: 577(ptr) AccessChain 595(patch) 219 220 + Store 609 608 + 614: 613(ptr) AccessChain 612(patch.UV) 219 + 615: 48(fvec2) Load 614 + 616: 50(ptr) AccessChain 595(patch) 219 431 + Store 616 615 + 617: 599(ptr) AccessChain 598(patch.Pos) 220 + 618: 18(fvec4) Load 617 + 619: 21(ptr) AccessChain 595(patch) 220 219 + Store 619 618 + 620: 606(ptr) AccessChain 605(patch.Normal) 220 + 621: 72(fvec3) Load 620 + 622: 577(ptr) AccessChain 595(patch) 220 220 + Store 622 621 + 623: 613(ptr) AccessChain 612(patch.UV) 220 + 624: 48(fvec2) Load 623 + 625: 50(ptr) AccessChain 595(patch) 220 431 + Store 625 624 + 626: 599(ptr) AccessChain 598(patch.Pos) 431 + 627: 18(fvec4) Load 626 + 628: 21(ptr) AccessChain 595(patch) 431 219 + Store 628 627 + 629: 606(ptr) AccessChain 605(patch.Normal) 431 + 630: 72(fvec3) Load 629 + 631: 577(ptr) AccessChain 595(patch) 431 220 + Store 631 630 + 632: 613(ptr) AccessChain 612(patch.UV) 431 + 633: 48(fvec2) Load 632 + 634: 50(ptr) AccessChain 595(patch) 431 431 + Store 634 633 + 635: 599(ptr) AccessChain 598(patch.Pos) 391 + 636: 18(fvec4) Load 635 + 637: 21(ptr) AccessChain 595(patch) 391 219 + Store 637 636 + 638: 606(ptr) AccessChain 605(patch.Normal) 391 + 639: 72(fvec3) Load 638 + 640: 577(ptr) AccessChain 595(patch) 391 220 + Store 640 639 + 641: 613(ptr) AccessChain 612(patch.UV) 391 + 642: 48(fvec2) Load 641 + 643: 50(ptr) AccessChain 595(patch) 391 431 + Store 643 642 + 647: 11(int) Load 646(InvocationID) + Store 644(InvocationID) 647 + 650: 89 Load 595(patch) + Store 649(param) 650 + 652: 11(int) Load 644(InvocationID) + Store 651(param) 652 + 653:121(HSOutput) FunctionCall 135(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;) 649(param) 651(param) + Store 648(flattenTemp) 653 + 656: 11(int) Load 646(InvocationID) + 657: 21(ptr) AccessChain 648(flattenTemp) 219 + 658: 18(fvec4) Load 657 + 660: 659(ptr) AccessChain 655(@entryPointOutput.Pos) 656 + Store 660 658 + 663: 11(int) Load 646(InvocationID) + 664: 577(ptr) AccessChain 648(flattenTemp) 220 + 665: 72(fvec3) Load 664 + 667: 666(ptr) AccessChain 662(@entryPointOutput.Normal) 663 + Store 667 665 + 670: 11(int) Load 646(InvocationID) + 671: 50(ptr) AccessChain 648(flattenTemp) 431 + 672: 48(fvec2) Load 671 + 674: 673(ptr) AccessChain 669(@entryPointOutput.UV) 670 + Store 674 672 + ControlBarrier 46 19 16 + 675: 11(int) Load 646(InvocationID) + 676: 52(bool) IEqual 675 219 + SelectionMerge 678 None + BranchConditional 676 677 678 + 677: Label + 681: 89 Load 595(patch) + Store 680(param) 681 + 682:97(ConstantsHSOutput) FunctionCall 110(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];) 680(param) + Store 679(@patchConstantResult) 682 + 685: 158(ptr) AccessChain 679(@patchConstantResult) 219 219 + 686: 8(float) Load 685 + 688: 687(ptr) AccessChain 684(@patchConstantOutput.TessLevelOuter) 219 + Store 688 686 + 689: 158(ptr) AccessChain 679(@patchConstantResult) 219 220 + 690: 8(float) Load 689 + 691: 687(ptr) AccessChain 684(@patchConstantOutput.TessLevelOuter) 220 + Store 691 690 + 692: 158(ptr) AccessChain 679(@patchConstantResult) 219 431 + 693: 8(float) Load 692 + 694: 687(ptr) AccessChain 684(@patchConstantOutput.TessLevelOuter) 431 + Store 694 693 + 695: 158(ptr) AccessChain 679(@patchConstantResult) 219 391 + 696: 8(float) Load 695 + 697: 687(ptr) AccessChain 684(@patchConstantOutput.TessLevelOuter) 391 + Store 697 696 + 700: 158(ptr) AccessChain 679(@patchConstantResult) 220 219 + 701: 8(float) Load 700 + 702: 687(ptr) AccessChain 699(@patchConstantOutput.TessLevelInner) 219 + Store 702 701 + 703: 158(ptr) AccessChain 679(@patchConstantResult) 220 220 + 704: 8(float) Load 703 + 705: 687(ptr) AccessChain 699(@patchConstantOutput.TessLevelInner) 220 + Store 705 704 + Branch 678 + 678: Label + Return + FunctionEnd +28(screenSpaceTessFactor(vf4;vf4;): 8(float) Function None 24 + 26(p0): 21(ptr) FunctionParameter + 27(p1): 21(ptr) FunctionParameter + 29: Label + 147(midPoint): 21(ptr) Variable Function + 160(radius): 158(ptr) Variable Function + 171(v0): 21(ptr) Variable Function + 226(clip0): 21(ptr) Variable Function + 244(clip1): 21(ptr) Variable Function + 42: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 31 + 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 34 34 16 16 + 40: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 38 26(p0) 41 + 47: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 44 27(p1) 41 + 146: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 31 28(screenSpaceTessFactor(vf4;vf4;) + 152: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 150 150 16 16 + 151: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 148 147(midPoint) 41 + 154: 18(fvec4) Load 26(p0) + 155: 18(fvec4) Load 27(p1) + 156: 18(fvec4) FAdd 154 155 + 157: 18(fvec4) VectorTimesScalar 156 153 + Store 147(midPoint) 157 + 165: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 163 163 16 16 + 164: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 161 160(radius) 41 + 166: 18(fvec4) Load 26(p0) + 167: 18(fvec4) Load 27(p1) + 168: 8(float) ExtInst 3(GLSL.std.450) 67(Distance) 166 167 + 170: 8(float) FDiv 168 169 + Store 160(radius) 170 + 176: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 174 174 16 16 + 175: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 172 171(v0) 41 + 177: 18(fvec4) Load 147(midPoint) + 223: 221(ptr) AccessChain 213 219 220 + 224: 178 Load 223 + 225: 18(fvec4) VectorTimesMatrix 177 224 + Store 171(v0) 225 + 231: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 229 229 16 16 + 230: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 227 226(clip0) 41 + 232: 18(fvec4) Load 171(v0) + 233: 8(float) Load 160(radius) + 236: 8(float) CompositeExtract 235 0 + 237: 8(float) CompositeExtract 235 1 + 238: 8(float) CompositeExtract 235 2 + 239: 18(fvec4) CompositeConstruct 233 236 237 238 + 240: 18(fvec4) FSub 232 239 + 241: 221(ptr) AccessChain 213 219 219 + 242: 178 Load 241 + 243: 18(fvec4) VectorTimesMatrix 240 242 + Store 226(clip0) 243 + 249: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 247 247 16 16 + 248: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 245 244(clip1) 41 + 250: 18(fvec4) Load 171(v0) + 251: 8(float) Load 160(radius) + 252: 8(float) CompositeExtract 235 0 + 253: 8(float) CompositeExtract 235 1 + 254: 8(float) CompositeExtract 235 2 + 255: 18(fvec4) CompositeConstruct 251 252 253 254 + 256: 18(fvec4) FAdd 250 255 + 257: 221(ptr) AccessChain 213 219 219 + 258: 178 Load 257 + 259: 18(fvec4) VectorTimesMatrix 256 258 + Store 244(clip1) 259 + 261: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 262 262 16 16 + 260: 158(ptr) AccessChain 226(clip0) 17 + 263: 8(float) Load 260 + 264: 18(fvec4) Load 226(clip0) + 265: 18(fvec4) CompositeConstruct 263 263 263 263 + 266: 18(fvec4) FDiv 264 265 + Store 226(clip0) 266 + 268: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 269 269 16 16 + 267: 158(ptr) AccessChain 244(clip1) 17 + 270: 8(float) Load 267 + 271: 18(fvec4) Load 244(clip1) + 272: 18(fvec4) CompositeConstruct 270 270 270 270 + 273: 18(fvec4) FDiv 271 272 + Store 244(clip1) 273 + 278: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 279 279 16 16 + 277: 275(ptr) AccessChain 213 219 274 + 280: 48(fvec2) Load 277 + 281: 18(fvec4) Load 226(clip0) + 282: 48(fvec2) VectorShuffle 281 281 0 1 + 283: 48(fvec2) FMul 282 280 + 284: 158(ptr) AccessChain 226(clip0) 16 + 285: 8(float) CompositeExtract 283 0 + Store 284 285 + 286: 158(ptr) AccessChain 226(clip0) 36 + 287: 8(float) CompositeExtract 283 1 + Store 286 287 + 289: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 290 290 16 16 + 288: 275(ptr) AccessChain 213 219 274 + 291: 48(fvec2) Load 288 + 292: 18(fvec4) Load 244(clip1) + 293: 48(fvec2) VectorShuffle 292 292 0 1 + 294: 48(fvec2) FMul 293 291 + 295: 158(ptr) AccessChain 244(clip1) 16 + 296: 8(float) CompositeExtract 294 0 + Store 295 296 + 297: 158(ptr) AccessChain 244(clip1) 36 + 298: 8(float) CompositeExtract 294 1 + Store 297 298 + 300: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 301 301 16 16 + 299: 18(fvec4) Load 226(clip0) + 302: 18(fvec4) Load 244(clip1) + 303: 8(float) ExtInst 3(GLSL.std.450) 67(Distance) 299 302 + 307: 305(ptr) AccessChain 213 219 304 + 308: 8(float) Load 307 + 309: 8(float) FDiv 303 308 + 311: 305(ptr) AccessChain 213 219 310 + 312: 8(float) Load 311 + 313: 8(float) FMul 309 312 + 316: 8(float) ExtInst 3(GLSL.std.450) 43(FClamp) 313 314 315 + ReturnValue 316 + FunctionEnd +59(frustumCheck(vf4;vf2;): 52(bool) Function None 55 + 57(Pos): 21(ptr) FunctionParameter + 58(inUV): 50(ptr) FunctionParameter + 60: Label + 322(pos): 21(ptr) Variable Function + 370(i): 368(ptr) Variable Function + 67: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 62 + 68: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 63 63 16 16 + 66: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 64 57(Pos) 41 + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 69 58(inUV) 41 + 321: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 62 59(frustumCheck(vf4;vf2;) + 327: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 325 325 16 16 + 326: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 323 322(pos) 41 + 328: 18(fvec4) Load 57(Pos) + Store 322(pos) 328 + 341: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 332 332 16 16 + 340: 329 Load 337(textureHeight) + 351: 342 Load 348(samplerHeight) + 356: 352 SampledImage 340 351 + 357: 48(fvec2) Load 58(inUV) + 358: 18(fvec4) ImageSampleExplicitLod 356 357 Lod 234 + 359: 8(float) CompositeExtract 358 0 + 361: 305(ptr) AccessChain 213 219 360 + 362: 8(float) Load 361 + 363: 8(float) FMul 359 362 + 364: 158(ptr) AccessChain 322(pos) 36 + 365: 8(float) Load 364 + 366: 8(float) FSub 365 363 + 367: 158(ptr) AccessChain 322(pos) 36 + Store 367 366 + 375: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 373 373 16 16 + 374: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 371 370(i) 41 + Store 370(i) 219 + Branch 376 + 376: Label + 380: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 62 + 381: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 373 373 16 16 + LoopMerge 378 379 None + Branch 382 + 382: Label + 384: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 62 + 385: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 373 373 16 16 + 383: 216(int) Load 370(i) + 386: 52(bool) SLessThan 383 274 + BranchConditional 386 377 378 + 377: Label + 388: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 62 + 389: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 390 390 16 16 + 387: 18(fvec4) Load 322(pos) + 392: 216(int) Load 370(i) + 395: 393(ptr) AccessChain 213 219 391 392 + 396: 18(fvec4) Load 395 + 397: 8(float) Dot 387 396 + 399: 8(float) FAdd 397 398 + 400: 52(bool) FOrdLessThan 399 234 + SelectionMerge 402 None + BranchConditional 400 401 402 + 401: Label + 404: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 62 + 405: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 406 406 16 16 + ReturnValue 403 + 402: Label + Branch 379 + 379: Label + 409: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 62 + 410: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 373 373 16 16 + 408: 216(int) Load 370(i) + 411: 216(int) IAdd 408 220 + Store 370(i) 411 + Branch 376 + 378: Label + 412: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 62 + 413: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 414 414 16 16 + ReturnValue 180 + FunctionEnd +110(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];):97(ConstantsHSOutput) Function None 107 + 109(patch): 91(ptr) FunctionParameter + 111: Label + 422(output): 420(ptr) Variable Function + 432(param): 21(ptr) Variable Function + 437(param): 50(ptr) Variable Function + 472(param): 21(ptr) Variable Function + 478(param): 21(ptr) Variable Function + 483(param): 21(ptr) Variable Function + 488(param): 21(ptr) Variable Function + 493(param): 21(ptr) Variable Function + 498(param): 21(ptr) Variable Function + 503(param): 21(ptr) Variable Function + 508(param): 21(ptr) Variable Function + 117: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 113 + 118: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 88 88 16 16 + 116: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 114 109(patch) 41 + 419: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 113 110(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];) + 427: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 425 425 16 16 + 426: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 423 422(output) 41 + Store 422(output) 430 + 434: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 435 435 16 16 + 433: 21(ptr) AccessChain 109(patch) 219 219 + 436: 18(fvec4) Load 433 + Store 432(param) 436 + 438: 50(ptr) AccessChain 109(patch) 219 431 + 439: 48(fvec2) Load 438 + Store 437(param) 439 + 440: 52(bool) FunctionCall 59(frustumCheck(vf4;vf2;) 432(param) 437(param) + 441: 52(bool) LogicalNot 440 + SelectionMerge 443 None + BranchConditional 441 442 463 + 442: Label + 445: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 113 + 446: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 447 447 16 16 + 444: 158(ptr) AccessChain 422(output) 220 219 + Store 444 234 + 449: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 450 450 16 16 + 448: 158(ptr) AccessChain 422(output) 220 220 + Store 448 234 + 452: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 453 453 16 16 + 451: 158(ptr) AccessChain 422(output) 219 219 + Store 451 234 + 455: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 456 456 16 16 + 454: 158(ptr) AccessChain 422(output) 219 220 + Store 454 234 + 458: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 459 459 16 16 + 457: 158(ptr) AccessChain 422(output) 219 431 + Store 457 234 + 461: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 462 462 16 16 + 460: 158(ptr) AccessChain 422(output) 219 391 + Store 460 234 + Branch 443 + 463: Label + 465: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 113 + 466: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 467 467 16 16 + 464: 305(ptr) AccessChain 213 219 310 + 468: 8(float) Load 464 + 469: 52(bool) FOrdGreaterThan 468 234 + SelectionMerge 471 None + BranchConditional 469 470 529 + 470: Label + 474: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 113 + 475: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 476 476 16 16 + 473: 21(ptr) AccessChain 109(patch) 391 219 + 477: 18(fvec4) Load 473 + Store 472(param) 477 + 479: 21(ptr) AccessChain 109(patch) 219 219 + 480: 18(fvec4) Load 479 + Store 478(param) 480 + 481: 8(float) FunctionCall 28(screenSpaceTessFactor(vf4;vf4;) 472(param) 478(param) + 482: 158(ptr) AccessChain 422(output) 219 219 + Store 482 481 + 485: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 486 486 16 16 + 484: 21(ptr) AccessChain 109(patch) 219 219 + 487: 18(fvec4) Load 484 + Store 483(param) 487 + 489: 21(ptr) AccessChain 109(patch) 220 219 + 490: 18(fvec4) Load 489 + Store 488(param) 490 + 491: 8(float) FunctionCall 28(screenSpaceTessFactor(vf4;vf4;) 483(param) 488(param) + 492: 158(ptr) AccessChain 422(output) 219 220 + Store 492 491 + 495: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 496 496 16 16 + 494: 21(ptr) AccessChain 109(patch) 220 219 + 497: 18(fvec4) Load 494 + Store 493(param) 497 + 499: 21(ptr) AccessChain 109(patch) 431 219 + 500: 18(fvec4) Load 499 + Store 498(param) 500 + 501: 8(float) FunctionCall 28(screenSpaceTessFactor(vf4;vf4;) 493(param) 498(param) + 502: 158(ptr) AccessChain 422(output) 219 431 + Store 502 501 + 505: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 506 506 16 16 + 504: 21(ptr) AccessChain 109(patch) 431 219 + 507: 18(fvec4) Load 504 + Store 503(param) 507 + 509: 21(ptr) AccessChain 109(patch) 391 219 + 510: 18(fvec4) Load 509 + Store 508(param) 510 + 511: 8(float) FunctionCall 28(screenSpaceTessFactor(vf4;vf4;) 503(param) 508(param) + 512: 158(ptr) AccessChain 422(output) 219 391 + Store 512 511 + 514: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 515 515 16 16 + 513: 158(ptr) AccessChain 422(output) 219 219 + 516: 8(float) Load 513 + 517: 158(ptr) AccessChain 422(output) 219 391 + 518: 8(float) Load 517 + 519: 8(float) ExtInst 3(GLSL.std.450) 46(FMix) 516 518 153 + 520: 158(ptr) AccessChain 422(output) 220 219 + Store 520 519 + 522: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 523 523 16 16 + 521: 158(ptr) AccessChain 422(output) 219 431 + 524: 8(float) Load 521 + 525: 158(ptr) AccessChain 422(output) 219 220 + 526: 8(float) Load 525 + 527: 8(float) ExtInst 3(GLSL.std.450) 46(FMix) 524 526 153 + 528: 158(ptr) AccessChain 422(output) 220 220 + Store 528 527 + Branch 471 + 529: Label + 531: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 113 + 532: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 533 533 16 16 + 530: 158(ptr) AccessChain 422(output) 220 219 + Store 530 314 + 535: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 536 536 16 16 + 534: 158(ptr) AccessChain 422(output) 220 220 + Store 534 314 + 538: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 539 539 16 16 + 537: 158(ptr) AccessChain 422(output) 219 219 + Store 537 314 + 541: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 542 542 16 16 + 540: 158(ptr) AccessChain 422(output) 219 220 + Store 540 314 + 544: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 545 545 16 16 + 543: 158(ptr) AccessChain 422(output) 219 431 + Store 543 314 + 547: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 548 548 16 16 + 546: 158(ptr) AccessChain 422(output) 219 391 + Store 546 314 + Branch 471 + 471: Label + Branch 443 + 443: Label + 550: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 113 + 551: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 552 552 16 16 + 549:97(ConstantsHSOutput) Load 422(output) + ReturnValue 549 + FunctionEnd +135(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;):121(HSOutput) Function None 131 + 133(patch): 91(ptr) FunctionParameter +134(InvocationID): 119(ptr) FunctionParameter + 136: Label + 560(output): 558(ptr) Variable Function + 141: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 138 + 142: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 130 130 16 16 + 140: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 139 133(patch) 41 + 145: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 143 134(InvocationID) 41 + 557: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 138 135(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;) + 564: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 562 562 16 16 + 563: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 561 560(output) 41 + Store 560(output) 567 + 569: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 570 570 16 16 + 568: 11(int) Load 134(InvocationID) + 571: 21(ptr) AccessChain 133(patch) 568 219 + 572: 18(fvec4) Load 571 + 573: 21(ptr) AccessChain 560(output) 219 + Store 573 572 + 575: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 576 576 16 16 + 574: 11(int) Load 134(InvocationID) + 579: 577(ptr) AccessChain 133(patch) 574 220 + 580: 72(fvec3) Load 579 + 581: 577(ptr) AccessChain 560(output) 220 + Store 581 580 + 583: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 584 584 16 16 + 582: 11(int) Load 134(InvocationID) + 585: 50(ptr) AccessChain 133(patch) 582 431 + 586: 48(fvec2) Load 585 + 587: 50(ptr) AccessChain 560(output) 431 + Store 587 586 + 589: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 590 590 16 16 + 588:121(HSOutput) Load 560(output) + ReturnValue 588 + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.hlsl.tese.out b/Test/baseResults/spv.debuginfo.hlsl.tese.out new file mode 100644 index 0000000000..230e96a8bd --- /dev/null +++ b/Test/baseResults/spv.debuginfo.hlsl.tese.out @@ -0,0 +1,638 @@ +spv.debuginfo.hlsl.tese +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 478 + + Capability Tessellation + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationEvaluation 6 "main" 369 384 393 402 409 415 455 459 463 466 469 472 475 + ExecutionMode 6 Quads + 2: String "" + 9: String "float" + 12: String "uint" + 26: String "TessLevelOuter" + 28: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed entry-point main +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed hlsl-offsets +#line 1 +" + 32: String "TessLevelInner" + 35: String "ConstantsHSOutput" + 53: String "Pos" + 56: String "Normal" + 60: String "UV" + 64: String "HSOutput" + 72: String "WorldPos" + 82: String "DSOutput" + 90: String "@main" + 93: String "input" + 99: String "TessCoord" + 102: String "patch" + 109: String "output" + 120: String "uv1" + 125: String "int" + 140: String "uv2" + 164: String "n1" + 176: String "n2" + 199: String "pos1" + 211: String "pos2" + 223: String "pos" + 235: String "type.2d.image" + 237: String "@type.2d.image" + 243: String "displacementMapTexture" + 249: String "type.sampler" + 250: String "@type.sampler" + 255: String "displacementMapSampler" + 259: String "type.sampled.image" + 260: String "@type.sampled.image" + 269: String "bool" + 276: String "modelview" + 281: String "lightPos" + 285: String "frustumPlanes" + 288: String "tessellatedEdgeSize" + 292: String "viewportDim" + 296: String "UBO" + 299: String "ubo" + Name 6 "main" + Name 24 "ConstantsHSOutput" + MemberName 24(ConstantsHSOutput) 0 "TessLevelOuter" + MemberName 24(ConstantsHSOutput) 1 "TessLevelInner" + Name 51 "HSOutput" + MemberName 51(HSOutput) 0 "Pos" + MemberName 51(HSOutput) 1 "Normal" + MemberName 51(HSOutput) 2 "UV" + Name 67 "DSOutput" + MemberName 67(DSOutput) 0 "Pos" + MemberName 67(DSOutput) 1 "Normal" + MemberName 67(DSOutput) 2 "UV" + MemberName 67(DSOutput) 3 "ViewVec" + MemberName 67(DSOutput) 4 "LightVec" + MemberName 67(DSOutput) 5 "EyePos" + MemberName 67(DSOutput) 6 "WorldPos" + Name 88 "@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];" + Name 85 "input" + Name 86 "TessCoord" + Name 87 "patch" + Name 107 "output" + Name 118 "uv1" + Name 138 "uv2" + Name 162 "n1" + Name 174 "n2" + Name 197 "pos1" + Name 209 "pos2" + Name 221 "pos" + Name 241 "displacementMapTexture" + Name 253 "displacementMapSampler" + Name 274 "UBO" + MemberName 274(UBO) 0 "projection" + MemberName 274(UBO) 1 "modelview" + MemberName 274(UBO) 2 "lightPos" + MemberName 274(UBO) 3 "frustumPlanes" + MemberName 274(UBO) 4 "displacementFactor" + MemberName 274(UBO) 5 "tessellationFactor" + MemberName 274(UBO) 6 "viewportDim" + MemberName 274(UBO) 7 "tessellatedEdgeSize" + Name 297 "ubo" + MemberName 297(ubo) 0 "ubo" + Name 303 "" + Name 367 "input" + Name 369 "input.TessLevelOuter" + Name 384 "input.TessLevelInner" + Name 391 "TessCoord" + Name 393 "TessCoord" + Name 399 "patch" + Name 402 "patch.Pos" + Name 409 "patch.Normal" + Name 415 "patch.UV" + Name 447 "flattenTemp" + Name 449 "param" + Name 451 "param" + Name 455 "@entryPointOutput.Pos" + Name 459 "@entryPointOutput.Normal" + Name 463 "@entryPointOutput.UV" + Name 466 "@entryPointOutput.ViewVec" + Name 469 "@entryPointOutput.LightVec" + Name 472 "@entryPointOutput.EyePos" + Name 475 "@entryPointOutput.WorldPos" + Decorate 241(displacementMapTexture) Binding 1 + Decorate 241(displacementMapTexture) DescriptorSet 0 + Decorate 253(displacementMapSampler) Binding 1 + Decorate 253(displacementMapSampler) DescriptorSet 0 + Decorate 272 ArrayStride 16 + MemberDecorate 274(UBO) 0 RowMajor + MemberDecorate 274(UBO) 0 MatrixStride 16 + MemberDecorate 274(UBO) 0 Offset 0 + MemberDecorate 274(UBO) 1 RowMajor + MemberDecorate 274(UBO) 1 MatrixStride 16 + MemberDecorate 274(UBO) 1 Offset 64 + MemberDecorate 274(UBO) 2 Offset 128 + MemberDecorate 274(UBO) 3 Offset 144 + MemberDecorate 274(UBO) 4 Offset 240 + MemberDecorate 274(UBO) 5 Offset 244 + MemberDecorate 274(UBO) 6 Offset 248 + MemberDecorate 274(UBO) 7 Offset 256 + Decorate 297(ubo) Block + MemberDecorate 297(ubo) 0 Offset 0 + Decorate 303 Binding 0 + Decorate 303 DescriptorSet 0 + Decorate 369(input.TessLevelOuter) BuiltIn TessLevelOuter + Decorate 369(input.TessLevelOuter) Patch + Decorate 384(input.TessLevelInner) BuiltIn TessLevelInner + Decorate 384(input.TessLevelInner) Patch + Decorate 393(TessCoord) BuiltIn TessCoord + Decorate 393(TessCoord) Patch + Decorate 402(patch.Pos) BuiltIn Position + Decorate 409(patch.Normal) Location 0 + Decorate 415(patch.UV) Location 1 + Decorate 455(@entryPointOutput.Pos) BuiltIn Position + Decorate 459(@entryPointOutput.Normal) Location 0 + Decorate 463(@entryPointOutput.UV) Location 1 + Decorate 466(@entryPointOutput.ViewVec) Location 2 + Decorate 469(@entryPointOutput.LightVec) Location 3 + Decorate 472(@entryPointOutput.EyePos) Location 4 + Decorate 475(@entryPointOutput.WorldPos) Location 5 + 4: TypeVoid + 5: TypeFunction 4 + 8: TypeFloat 32 + 11: TypeInt 32 0 + 14: 11(int) Constant 32 + 15: 11(int) Constant 6 + 16: 11(int) Constant 0 + 13: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16 + 17: 11(int) Constant 3 + 10: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16 + 18: 11(int) Constant 4 + 19: TypeArray 8(float) 18 + 20: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 18 + 21: 11(int) Constant 2 + 22: TypeArray 8(float) 21 + 23: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 21 +24(ConstantsHSOutput): TypeStruct 19 22 + 27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 28 + 29: 11(int) Constant 51 + 30: 11(int) Constant 25 + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 26 20 27 29 30 16 16 17 + 33: 11(int) Constant 52 + 31: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 32 23 27 33 30 16 16 17 + 36: 11(int) Constant 1 + 37: 11(int) Constant 68 + 39: 11(int) Constant 5 + 38: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 36 18 27 39 + 34: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 35 36 27 37 16 38 35 16 17 25 31 + 40: TypePointer Function 24(ConstantsHSOutput) + 41: 11(int) Constant 7 + 42: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 34 41 16 + 43: TypeVector 8(float) 2 + 44: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 21 + 45: TypePointer Function 43(fvec2) + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 44 41 16 + 47: TypeVector 8(float) 4 + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 18 + 49: TypeVector 8(float) 3 + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17 + 51(HSOutput): TypeStruct 47(fvec4) 49(fvec3) 43(fvec2) + 54: 11(int) Constant 44 + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 53 48 27 54 14 16 16 17 + 57: 11(int) Constant 45 + 58: 11(int) Constant 35 + 55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 56 50 27 57 58 16 16 17 + 61: 11(int) Constant 46 + 62: 11(int) Constant 31 + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 60 44 27 61 62 16 16 17 + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 64 36 27 37 16 38 64 16 17 52 55 59 + 65: TypeArray 51(HSOutput) 18 + 66: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 63 18 + 67(DSOutput): TypeStruct 47(fvec4) 49(fvec3) 43(fvec2) 49(fvec3) 49(fvec3) 49(fvec3) 49(fvec3) + 69: 11(int) Constant 57 + 70: 11(int) Constant 13 + 68: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 53 48 27 69 70 16 16 17 + 73: 11(int) Constant 63 + 74: 11(int) Constant 37 + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 72 50 27 73 74 16 16 17 + 76: 11(int) Constant 59 + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 60 44 27 76 62 16 16 17 + 77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 72 50 27 73 74 16 16 17 + 78: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 72 50 27 73 74 16 16 17 + 79: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 72 50 27 73 74 16 16 17 + 80: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 72 50 27 73 74 16 16 17 + 81: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 82 36 27 37 16 38 82 16 17 68 71 75 77 78 79 80 + 83: TypeFunction 67(DSOutput) 40(ptr) 45(ptr) 65 + 84: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 81 34 44 63 + 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 90 84 27 37 16 38 90 17 37 + 92: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 93 34 27 37 16 91 18 36 + 95: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 98: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 99 44 27 37 16 91 18 21 + 101: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 102 63 27 37 16 91 18 17 + 105: TypePointer Function 67(DSOutput) + 106: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 81 41 16 + 110: 11(int) Constant 70 + 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 109 81 27 110 16 91 18 + 113: 8(float) Constant 0 + 114: 47(fvec4) ConstantComposite 113 113 113 113 + 115: 49(fvec3) ConstantComposite 113 113 113 + 116: 43(fvec2) ConstantComposite 113 113 + 117:67(DSOutput) ConstantComposite 114 115 116 115 115 115 115 + 121: 11(int) Constant 71 + 119: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 120 44 27 121 16 91 18 + 124: TypeInt 32 1 + 126: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 125 14 18 16 + 127: 124(int) Constant 0 + 128: 124(int) Constant 2 + 130: 124(int) Constant 1 + 132: TypePointer Function 8(float) + 133: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 41 16 + 141: 11(int) Constant 72 + 139: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 140 44 27 141 16 91 18 + 144: 124(int) Constant 3 + 153: 11(int) Constant 73 + 160: TypePointer Function 49(fvec3) + 161: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 50 41 16 + 165: 11(int) Constant 75 + 163: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 164 50 27 165 16 91 18 + 177: 11(int) Constant 76 + 175: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 176 50 27 177 16 91 18 + 188: 11(int) Constant 77 + 195: TypePointer Function 47(fvec4) + 196: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 48 41 16 + 200: 11(int) Constant 80 + 198: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 199 48 27 200 16 91 18 + 212: 11(int) Constant 81 + 210: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 211 48 27 212 16 91 18 + 224: 11(int) Constant 82 + 222: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 223 48 27 224 16 91 18 + 233: TypeImage 8(float) 2D sampled format:Unknown + 236: 11(int) Constant 84 + 238: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone) + 234: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 235 16 27 236 16 38 237 238 17 + 239: TypePointer UniformConstant 233 + 240: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 234 16 16 +241(displacementMapTexture): 239(ptr) Variable UniformConstant + 244: 11(int) Constant 8 + 242: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 243 234 27 236 16 38 243 241(displacementMapTexture) 244 + 247: TypeSampler + 248: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 249 36 27 236 16 38 250 238 17 + 251: TypePointer UniformConstant 247 + 252: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 248 16 16 +253(displacementMapSampler): 251(ptr) Variable UniformConstant + 254: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 255 248 27 236 16 38 255 253(displacementMapSampler) 244 + 257: TypeSampledImage 233 + 258: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 259 16 27 236 16 38 260 238 17 + 266: TypeMatrix 47(fvec4) 4 + 268: TypeBool + 270: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 269 14 21 16 + 271: 268(bool) ConstantTrue + 267: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 48 18 271 + 272: TypeArray 47(fvec4) 15 + 273: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 48 15 + 274(UBO): TypeStruct 266 266 47(fvec4) 272 8(float) 8(float) 43(fvec2) 8(float) + 277: 11(int) Constant 29 + 278: 11(int) Constant 20 + 275: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 276 267 27 277 278 16 16 17 + 279: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 276 267 27 277 278 16 16 17 + 282: 11(int) Constant 30 + 283: 11(int) Constant 17 + 280: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 281 48 27 282 283 16 16 17 + 286: 11(int) Constant 22 + 284: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 285 273 27 62 286 16 16 17 + 289: 11(int) Constant 27 + 287: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 288 10 27 58 289 16 16 17 + 290: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 288 10 27 58 289 16 16 17 + 293: 11(int) Constant 34 + 291: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 292 44 27 293 278 16 16 17 + 294: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 288 10 27 58 289 16 16 17 + 295: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 296 36 27 236 16 38 296 16 17 275 279 280 284 287 290 291 294 + 297(ubo): TypeStruct 274(UBO) + 298: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 299 295 27 74 74 16 16 17 + 300: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 299 36 27 236 16 38 299 16 17 298 + 301: TypePointer Uniform 297(ubo) + 302: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 300 21 16 + 303: 301(ptr) Variable Uniform + 304: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 2 300 27 236 16 38 2 303 244 + 305: 124(int) Constant 4 + 306: TypePointer Uniform 8(float) + 307: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 21 16 + 317: 11(int) Constant 86 + 318: TypePointer Uniform 266 + 319: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 267 21 16 + 329: 11(int) Constant 89 + 333: TypePointer Uniform 47(fvec4) + 334: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 48 21 16 + 337: 11(int) Constant 90 + 345: 124(int) Constant 6 + 348: 11(int) Constant 91 + 351: 124(int) Constant 5 + 354: 11(int) Constant 92 + 362: 11(int) Constant 93 + 368: TypePointer Input 19 +369(input.TessLevelOuter): 368(ptr) Variable Input + 370: TypePointer Input 8(float) + 383: TypePointer Input 22 +384(input.TessLevelInner): 383(ptr) Variable Input + 392: TypePointer Input 49(fvec3) + 393(TessCoord): 392(ptr) Variable Input + 398: TypePointer Function 65 + 400: TypeArray 47(fvec4) 18 + 401: TypePointer Input 400 + 402(patch.Pos): 401(ptr) Variable Input + 403: TypePointer Input 47(fvec4) + 407: TypeArray 49(fvec3) 18 + 408: TypePointer Input 407 +409(patch.Normal): 408(ptr) Variable Input + 413: TypeArray 43(fvec2) 18 + 414: TypePointer Input 413 + 415(patch.UV): 414(ptr) Variable Input + 416: TypePointer Input 43(fvec2) + 454: TypePointer Output 47(fvec4) +455(@entryPointOutput.Pos): 454(ptr) Variable Output + 458: TypePointer Output 49(fvec3) +459(@entryPointOutput.Normal): 458(ptr) Variable Output + 462: TypePointer Output 43(fvec2) +463(@entryPointOutput.UV): 462(ptr) Variable Output +466(@entryPointOutput.ViewVec): 458(ptr) Variable Output +469(@entryPointOutput.LightVec): 458(ptr) Variable Output +472(@entryPointOutput.EyePos): 458(ptr) Variable Output +475(@entryPointOutput.WorldPos): 458(ptr) Variable Output + 6(main): 4 Function None 5 + 7: Label + 367(input): 40(ptr) Variable Function + 391(TessCoord): 45(ptr) Variable Function + 399(patch): 398(ptr) Variable Function +447(flattenTemp): 105(ptr) Variable Function + 449(param): 40(ptr) Variable Function + 451(param): 45(ptr) Variable Function + 371: 370(ptr) AccessChain 369(input.TessLevelOuter) 127 + 372: 8(float) Load 371 + 373: 132(ptr) AccessChain 367(input) 127 127 + Store 373 372 + 374: 370(ptr) AccessChain 369(input.TessLevelOuter) 130 + 375: 8(float) Load 374 + 376: 132(ptr) AccessChain 367(input) 127 130 + Store 376 375 + 377: 370(ptr) AccessChain 369(input.TessLevelOuter) 128 + 378: 8(float) Load 377 + 379: 132(ptr) AccessChain 367(input) 127 128 + Store 379 378 + 380: 370(ptr) AccessChain 369(input.TessLevelOuter) 144 + 381: 8(float) Load 380 + 382: 132(ptr) AccessChain 367(input) 127 144 + Store 382 381 + 385: 370(ptr) AccessChain 384(input.TessLevelInner) 127 + 386: 8(float) Load 385 + 387: 132(ptr) AccessChain 367(input) 130 127 + Store 387 386 + 388: 370(ptr) AccessChain 384(input.TessLevelInner) 130 + 389: 8(float) Load 388 + 390: 132(ptr) AccessChain 367(input) 130 130 + Store 390 389 + 394: 49(fvec3) Load 393(TessCoord) + 395: 8(float) CompositeExtract 394 0 + 396: 8(float) CompositeExtract 394 1 + 397: 43(fvec2) CompositeConstruct 395 396 + Store 391(TessCoord) 397 + 404: 403(ptr) AccessChain 402(patch.Pos) 127 + 405: 47(fvec4) Load 404 + 406: 195(ptr) AccessChain 399(patch) 127 127 + Store 406 405 + 410: 392(ptr) AccessChain 409(patch.Normal) 127 + 411: 49(fvec3) Load 410 + 412: 160(ptr) AccessChain 399(patch) 127 130 + Store 412 411 + 417: 416(ptr) AccessChain 415(patch.UV) 127 + 418: 43(fvec2) Load 417 + 419: 45(ptr) AccessChain 399(patch) 127 128 + Store 419 418 + 420: 403(ptr) AccessChain 402(patch.Pos) 130 + 421: 47(fvec4) Load 420 + 422: 195(ptr) AccessChain 399(patch) 130 127 + Store 422 421 + 423: 392(ptr) AccessChain 409(patch.Normal) 130 + 424: 49(fvec3) Load 423 + 425: 160(ptr) AccessChain 399(patch) 130 130 + Store 425 424 + 426: 416(ptr) AccessChain 415(patch.UV) 130 + 427: 43(fvec2) Load 426 + 428: 45(ptr) AccessChain 399(patch) 130 128 + Store 428 427 + 429: 403(ptr) AccessChain 402(patch.Pos) 128 + 430: 47(fvec4) Load 429 + 431: 195(ptr) AccessChain 399(patch) 128 127 + Store 431 430 + 432: 392(ptr) AccessChain 409(patch.Normal) 128 + 433: 49(fvec3) Load 432 + 434: 160(ptr) AccessChain 399(patch) 128 130 + Store 434 433 + 435: 416(ptr) AccessChain 415(patch.UV) 128 + 436: 43(fvec2) Load 435 + 437: 45(ptr) AccessChain 399(patch) 128 128 + Store 437 436 + 438: 403(ptr) AccessChain 402(patch.Pos) 144 + 439: 47(fvec4) Load 438 + 440: 195(ptr) AccessChain 399(patch) 144 127 + Store 440 439 + 441: 392(ptr) AccessChain 409(patch.Normal) 144 + 442: 49(fvec3) Load 441 + 443: 160(ptr) AccessChain 399(patch) 144 130 + Store 443 442 + 444: 416(ptr) AccessChain 415(patch.UV) 144 + 445: 43(fvec2) Load 444 + 446: 45(ptr) AccessChain 399(patch) 144 128 + Store 446 445 + 448: 65 Load 399(patch) + 450:24(ConstantsHSOutput) Load 367(input) + Store 449(param) 450 + 452: 43(fvec2) Load 391(TessCoord) + Store 451(param) 452 + 453:67(DSOutput) FunctionCall 88(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];) 449(param) 451(param) 448 + Store 447(flattenTemp) 453 + 456: 195(ptr) AccessChain 447(flattenTemp) 127 + 457: 47(fvec4) Load 456 + Store 455(@entryPointOutput.Pos) 457 + 460: 160(ptr) AccessChain 447(flattenTemp) 130 + 461: 49(fvec3) Load 460 + Store 459(@entryPointOutput.Normal) 461 + 464: 45(ptr) AccessChain 447(flattenTemp) 128 + 465: 43(fvec2) Load 464 + Store 463(@entryPointOutput.UV) 465 + 467: 160(ptr) AccessChain 447(flattenTemp) 144 + 468: 49(fvec3) Load 467 + Store 466(@entryPointOutput.ViewVec) 468 + 470: 160(ptr) AccessChain 447(flattenTemp) 305 + 471: 49(fvec3) Load 470 + Store 469(@entryPointOutput.LightVec) 471 + 473: 160(ptr) AccessChain 447(flattenTemp) 351 + 474: 49(fvec3) Load 473 + Store 472(@entryPointOutput.EyePos) 474 + 476: 160(ptr) AccessChain 447(flattenTemp) 345 + 477: 49(fvec3) Load 476 + Store 475(@entryPointOutput.WorldPos) 477 + Return + FunctionEnd +88(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];):67(DSOutput) Function None 83 + 85(input): 40(ptr) FunctionParameter + 86(TessCoord): 45(ptr) FunctionParameter + 87(patch): 65 FunctionParameter + 89: Label + 107(output): 105(ptr) Variable Function + 118(uv1): 45(ptr) Variable Function + 138(uv2): 45(ptr) Variable Function + 162(n1): 160(ptr) Variable Function + 174(n2): 160(ptr) Variable Function + 197(pos1): 195(ptr) Variable Function + 209(pos2): 195(ptr) Variable Function + 221(pos): 195(ptr) Variable Function + 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 91 + 97: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 37 37 16 16 + 94: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 92 85(input) 95 + 100: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 98 86(TessCoord) 95 + 103: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 101 87(patch) 95 + 104: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 91 88(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];) + 112: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 110 110 16 16 + 111: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 108 107(output) 95 + Store 107(output) 117 + 123: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 121 121 16 16 + 122: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 119 118(uv1) 95 + 129: 43(fvec2) CompositeExtract 87(patch) 0 2 + 131: 43(fvec2) CompositeExtract 87(patch) 1 2 + 134: 132(ptr) AccessChain 86(TessCoord) 16 + 135: 8(float) Load 134 + 136: 43(fvec2) CompositeConstruct 135 135 + 137: 43(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 129 131 136 + Store 118(uv1) 137 + 143: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 141 141 16 16 + 142: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 139 138(uv2) 95 + 145: 43(fvec2) CompositeExtract 87(patch) 3 2 + 146: 43(fvec2) CompositeExtract 87(patch) 2 2 + 147: 132(ptr) AccessChain 86(TessCoord) 16 + 148: 8(float) Load 147 + 149: 43(fvec2) CompositeConstruct 148 148 + 150: 43(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 145 146 149 + Store 138(uv2) 150 + 152: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 153 153 16 16 + 151: 43(fvec2) Load 118(uv1) + 154: 43(fvec2) Load 138(uv2) + 155: 132(ptr) AccessChain 86(TessCoord) 36 + 156: 8(float) Load 155 + 157: 43(fvec2) CompositeConstruct 156 156 + 158: 43(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 151 154 157 + 159: 45(ptr) AccessChain 107(output) 128 + Store 159 158 + 167: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 165 165 16 16 + 166: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 163 162(n1) 95 + 168: 49(fvec3) CompositeExtract 87(patch) 0 1 + 169: 49(fvec3) CompositeExtract 87(patch) 1 1 + 170: 132(ptr) AccessChain 86(TessCoord) 16 + 171: 8(float) Load 170 + 172: 49(fvec3) CompositeConstruct 171 171 171 + 173: 49(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 168 169 172 + Store 162(n1) 173 + 179: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 177 177 16 16 + 178: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 175 174(n2) 95 + 180: 49(fvec3) CompositeExtract 87(patch) 3 1 + 181: 49(fvec3) CompositeExtract 87(patch) 2 1 + 182: 132(ptr) AccessChain 86(TessCoord) 16 + 183: 8(float) Load 182 + 184: 49(fvec3) CompositeConstruct 183 183 183 + 185: 49(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 180 181 184 + Store 174(n2) 185 + 187: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 188 188 16 16 + 186: 49(fvec3) Load 162(n1) + 189: 49(fvec3) Load 174(n2) + 190: 132(ptr) AccessChain 86(TessCoord) 36 + 191: 8(float) Load 190 + 192: 49(fvec3) CompositeConstruct 191 191 191 + 193: 49(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 186 189 192 + 194: 160(ptr) AccessChain 107(output) 130 + Store 194 193 + 202: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 200 200 16 16 + 201: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 198 197(pos1) 95 + 203: 47(fvec4) CompositeExtract 87(patch) 0 0 + 204: 47(fvec4) CompositeExtract 87(patch) 1 0 + 205: 132(ptr) AccessChain 86(TessCoord) 16 + 206: 8(float) Load 205 + 207: 47(fvec4) CompositeConstruct 206 206 206 206 + 208: 47(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 203 204 207 + Store 197(pos1) 208 + 214: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 212 212 16 16 + 213: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 210 209(pos2) 95 + 215: 47(fvec4) CompositeExtract 87(patch) 3 0 + 216: 47(fvec4) CompositeExtract 87(patch) 2 0 + 217: 132(ptr) AccessChain 86(TessCoord) 16 + 218: 8(float) Load 217 + 219: 47(fvec4) CompositeConstruct 218 218 218 218 + 220: 47(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 215 216 219 + Store 209(pos2) 220 + 226: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 224 224 16 16 + 225: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 222 221(pos) 95 + 227: 47(fvec4) Load 197(pos1) + 228: 47(fvec4) Load 209(pos2) + 229: 132(ptr) AccessChain 86(TessCoord) 36 + 230: 8(float) Load 229 + 231: 47(fvec4) CompositeConstruct 230 230 230 230 + 232: 47(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 227 228 231 + Store 221(pos) 232 + 246: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 236 236 16 16 + 245: 233 Load 241(displacementMapTexture) + 256: 247 Load 253(displacementMapSampler) + 261: 257 SampledImage 245 256 + 262: 45(ptr) AccessChain 107(output) 128 + 263: 43(fvec2) Load 262 + 264: 47(fvec4) ImageSampleExplicitLod 261 263 Lod 113 + 265: 8(float) CompositeExtract 264 0 + 308: 306(ptr) AccessChain 303 127 305 + 309: 8(float) Load 308 + 310: 8(float) FMul 265 309 + 311: 132(ptr) AccessChain 221(pos) 36 + 312: 8(float) Load 311 + 313: 8(float) FSub 312 310 + 314: 132(ptr) AccessChain 221(pos) 36 + Store 314 313 + 316: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 317 317 16 16 + 315: 47(fvec4) Load 221(pos) + 320: 318(ptr) AccessChain 303 127 130 + 321: 266 Load 320 + 322: 47(fvec4) VectorTimesMatrix 315 321 + 323: 318(ptr) AccessChain 303 127 127 + 324: 266 Load 323 + 325: 47(fvec4) VectorTimesMatrix 322 324 + 326: 195(ptr) AccessChain 107(output) 127 + Store 326 325 + 328: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 329 329 16 16 + 327: 47(fvec4) Load 221(pos) + 330: 49(fvec3) VectorShuffle 327 327 0 1 2 + 331: 49(fvec3) FNegate 330 + 332: 160(ptr) AccessChain 107(output) 144 + Store 332 331 + 336: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 337 337 16 16 + 335: 333(ptr) AccessChain 303 127 128 + 338: 47(fvec4) Load 335 + 339: 49(fvec3) VectorShuffle 338 338 0 1 2 + 340: 160(ptr) AccessChain 107(output) 144 + 341: 49(fvec3) Load 340 + 342: 49(fvec3) FAdd 339 341 + 343: 49(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 342 + 344: 160(ptr) AccessChain 107(output) 305 + Store 344 343 + 347: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 348 348 16 16 + 346: 47(fvec4) Load 221(pos) + 349: 49(fvec3) VectorShuffle 346 346 0 1 2 + 350: 160(ptr) AccessChain 107(output) 345 + Store 350 349 + 353: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 354 354 16 16 + 352: 47(fvec4) Load 221(pos) + 355: 318(ptr) AccessChain 303 127 130 + 356: 266 Load 355 + 357: 47(fvec4) VectorTimesMatrix 352 356 + 358: 49(fvec3) VectorShuffle 357 357 0 1 2 + 359: 160(ptr) AccessChain 107(output) 351 + Store 359 358 + 361: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 362 362 16 16 + 360:67(DSOutput) Load 107(output) + ReturnValue 360 + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.hlsl.vert.out b/Test/baseResults/spv.debuginfo.hlsl.vert.out new file mode 100644 index 0000000000..d26021cf7f --- /dev/null +++ b/Test/baseResults/spv.debuginfo.hlsl.vert.out @@ -0,0 +1,655 @@ +spv.debuginfo.hlsl.vert +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 513 + + Capability Shader + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 6 "main" 462 465 469 472 475 478 482 486 494 498 501 504 507 510 + 2: String "" + 9: String "float" + 12: String "uint" + 24: String "int" + 29: String "instanceRot" + 31: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed entry-point main +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed hlsl-offsets +#line 1 +" + 36: String "UV" + 43: String "instanceScale" + 47: String "instanceTexIndex" + 51: String "VSInput" + 63: String "Pos" + 67: String "LightVec" + 74: String "VSOutput" + 80: String "@main" + 83: String "input" + 93: String "output" + 130: String "s" + 140: String "bool" + 145: String "modelview" + 150: String "lightPos" + 154: String "globSpeed" + 158: String "UBO" + 161: String "ubo" + 178: String "c" + 194: String "mx" + 229: String "my" + 263: String "mz" + 283: String "rotMat" + 313: String "gRotMat" + 341: String "locPos" + 355: String "pos" + 421: String "lPos" + Name 6 "main" + Name 27 "VSInput" + MemberName 27(VSInput) 0 "Pos" + MemberName 27(VSInput) 1 "Normal" + MemberName 27(VSInput) 2 "UV" + MemberName 27(VSInput) 3 "Color" + MemberName 27(VSInput) 4 "instancePos" + MemberName 27(VSInput) 5 "instanceRot" + MemberName 27(VSInput) 6 "instanceScale" + MemberName 27(VSInput) 7 "instanceTexIndex" + Name 61 "VSOutput" + MemberName 61(VSOutput) 0 "Pos" + MemberName 61(VSOutput) 1 "Normal" + MemberName 61(VSOutput) 2 "Color" + MemberName 61(VSOutput) 3 "UV" + MemberName 61(VSOutput) 4 "ViewVec" + MemberName 61(VSOutput) 5 "LightVec" + Name 78 "@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;" + Name 77 "input" + Name 91 "output" + Name 128 "s" + Name 143 "UBO" + MemberName 143(UBO) 0 "projection" + MemberName 143(UBO) 1 "modelview" + MemberName 143(UBO) 2 "lightPos" + MemberName 143(UBO) 3 "locSpeed" + MemberName 143(UBO) 4 "globSpeed" + Name 159 "ubo" + MemberName 159(ubo) 0 "ubo" + Name 166 "" + Name 176 "c" + Name 192 "mx" + Name 227 "my" + Name 261 "mz" + Name 281 "rotMat" + Name 311 "gRotMat" + Name 339 "locPos" + Name 353 "pos" + Name 419 "lPos" + Name 460 "input" + Name 462 "input.Pos" + Name 465 "input.Normal" + Name 469 "input.UV" + Name 472 "input.Color" + Name 475 "input.instancePos" + Name 478 "input.instanceRot" + Name 482 "input.instanceScale" + Name 486 "input.instanceTexIndex" + Name 489 "flattenTemp" + Name 490 "param" + Name 494 "@entryPointOutput.Pos" + Name 498 "@entryPointOutput.Normal" + Name 501 "@entryPointOutput.Color" + Name 504 "@entryPointOutput.UV" + Name 507 "@entryPointOutput.ViewVec" + Name 510 "@entryPointOutput.LightVec" + MemberDecorate 143(UBO) 0 RowMajor + MemberDecorate 143(UBO) 0 MatrixStride 16 + MemberDecorate 143(UBO) 0 Offset 0 + MemberDecorate 143(UBO) 1 RowMajor + MemberDecorate 143(UBO) 1 MatrixStride 16 + MemberDecorate 143(UBO) 1 Offset 64 + MemberDecorate 143(UBO) 2 Offset 128 + MemberDecorate 143(UBO) 3 Offset 144 + MemberDecorate 143(UBO) 4 Offset 148 + Decorate 159(ubo) Block + MemberDecorate 159(ubo) 0 Offset 0 + Decorate 166 Binding 0 + Decorate 166 DescriptorSet 0 + Decorate 462(input.Pos) Location 0 + Decorate 465(input.Normal) Location 1 + Decorate 469(input.UV) Location 2 + Decorate 472(input.Color) Location 3 + Decorate 475(input.instancePos) Location 4 + Decorate 478(input.instanceRot) Location 5 + Decorate 482(input.instanceScale) Location 6 + Decorate 486(input.instanceTexIndex) Location 7 + Decorate 494(@entryPointOutput.Pos) BuiltIn Position + Decorate 498(@entryPointOutput.Normal) Location 0 + Decorate 501(@entryPointOutput.Color) Location 1 + Decorate 504(@entryPointOutput.UV) Location 2 + Decorate 507(@entryPointOutput.ViewVec) Location 3 + Decorate 510(@entryPointOutput.LightVec) Location 4 + 4: TypeVoid + 5: TypeFunction 4 + 8: TypeFloat 32 + 11: TypeInt 32 0 + 14: 11(int) Constant 32 + 15: 11(int) Constant 6 + 16: 11(int) Constant 0 + 13: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16 + 17: 11(int) Constant 3 + 10: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16 + 18: TypeVector 8(float) 3 + 19: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17 + 20: TypeVector 8(float) 2 + 21: 11(int) Constant 2 + 22: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 21 + 23: TypeInt 32 1 + 26: 11(int) Constant 4 + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 24 14 26 16 + 27(VSInput): TypeStruct 18(fvec3) 18(fvec3) 20(fvec2) 18(fvec3) 18(fvec3) 18(fvec3) 8(float) 23(int) + 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 31 + 32: 11(int) Constant 35 + 33: 11(int) Constant 40 + 28: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17 + 34: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17 + 37: 11(int) Constant 30 + 38: 11(int) Constant 31 + 35: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 36 22 30 37 38 16 16 17 + 39: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17 + 40: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17 + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17 + 44: 11(int) Constant 36 + 45: 11(int) Constant 41 + 42: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 43 10 30 44 45 16 16 17 + 48: 11(int) Constant 37 + 49: 11(int) Constant 42 + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 47 25 30 48 49 16 16 17 + 52: 11(int) Constant 1 + 53: 11(int) Constant 62 + 55: 11(int) Constant 5 + 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 52 26 30 55 + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 51 52 30 53 16 54 51 16 17 28 34 35 39 40 41 42 46 + 56: TypePointer Function 27(VSInput) + 57: 11(int) Constant 7 + 58: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 50 57 16 + 59: TypeVector 8(float) 4 + 60: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 26 + 61(VSOutput): TypeStruct 59(fvec4) 18(fvec3) 18(fvec3) 18(fvec3) 18(fvec3) 18(fvec3) + 64: 11(int) Constant 53 + 65: 11(int) Constant 13 + 62: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 63 60 30 64 65 16 16 17 + 68: 11(int) Constant 58 + 66: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 67 19 30 68 48 16 16 17 + 69: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 67 19 30 68 48 16 16 17 + 70: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 67 19 30 68 48 16 16 17 + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 67 19 30 68 48 16 16 17 + 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 67 19 30 68 48 16 16 17 + 73: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 74 52 30 53 16 54 74 16 17 62 66 69 70 71 72 + 75: TypeFunction 61(VSOutput) 56(ptr) + 76: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 73 50 + 81: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 80 76 30 53 16 54 80 17 53 + 82: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 83 50 30 53 16 81 26 52 + 85: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 89: TypePointer Function 61(VSOutput) + 90: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 73 57 16 + 94: 11(int) Constant 63 + 92: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 93 73 30 94 16 81 26 + 97: 8(float) Constant 0 + 98: 59(fvec4) ConstantComposite 97 97 97 97 + 99: 18(fvec3) ConstantComposite 97 97 97 + 100:61(VSOutput) ConstantComposite 98 99 99 99 99 99 + 101: 23(int) Constant 2 + 102: 23(int) Constant 3 + 103: TypePointer Function 18(fvec3) + 104: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 19 57 16 + 107: 11(int) Constant 64 + 110: TypePointer Function 20(fvec2) + 111: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 57 16 + 114: 11(int) Constant 65 + 116: 23(int) Constant 7 + 117: TypePointer Function 23(int) + 118: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 25 57 16 + 126: TypePointer Function 8(float) + 127: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 57 16 + 131: 11(int) Constant 68 + 129: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 130 10 30 131 16 81 26 + 134: 23(int) Constant 5 + 137: TypeMatrix 59(fvec4) 4 + 139: TypeBool + 141: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 140 14 21 16 + 142: 139(bool) ConstantTrue + 138: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 60 26 142 + 143(UBO): TypeStruct 137 137 59(fvec4) 8(float) 8(float) + 146: 11(int) Constant 43 + 147: 11(int) Constant 20 + 144: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 145 138 30 146 147 16 16 17 + 148: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 145 138 30 146 147 16 16 17 + 151: 11(int) Constant 44 + 152: 11(int) Constant 17 + 149: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 150 60 30 151 152 16 16 17 + 155: 11(int) Constant 46 + 153: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 154 10 30 155 152 16 16 17 + 156: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 154 10 30 155 152 16 16 17 + 157: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 158 52 30 131 16 54 158 16 17 144 148 149 153 156 + 159(ubo): TypeStruct 143(UBO) + 162: 11(int) Constant 49 + 160: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 161 157 30 162 48 16 16 17 + 163: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 161 52 30 131 16 54 161 16 17 160 + 164: TypePointer Uniform 159(ubo) + 165: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 163 21 16 + 166: 164(ptr) Variable Uniform + 168: 11(int) Constant 8 + 167: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 2 163 30 131 16 54 2 166 168 + 169: 23(int) Constant 0 + 170: TypePointer Uniform 8(float) + 171: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 21 16 + 179: 11(int) Constant 69 + 177: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 178 10 30 179 16 81 26 + 188: TypeMatrix 18(fvec3) 3 + 189: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 19 17 142 + 190: TypePointer Function 188 + 191: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 189 57 16 + 195: 11(int) Constant 71 + 193: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 194 189 30 195 16 81 26 + 203: 11(int) Constant 72 + 205: 8(float) Constant 1065353216 + 213: 11(int) Constant 76 + 221: 11(int) Constant 77 + 230: 11(int) Constant 79 + 228: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 229 189 30 230 16 81 26 + 238: 11(int) Constant 81 + 247: 11(int) Constant 84 + 255: 11(int) Constant 85 + 264: 11(int) Constant 87 + 262: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 263 189 30 264 16 81 26 + 269: 11(int) Constant 88 + 274: 11(int) Constant 89 + 284: 11(int) Constant 91 + 282: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 283 189 30 284 16 81 26 + 294: 11(int) Constant 94 + 296: 23(int) Constant 4 + 303: 11(int) Constant 95 + 309: TypePointer Function 137 + 310: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 138 57 16 + 314: 11(int) Constant 96 + 312: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 313 138 30 314 16 81 26 + 321: TypePointer Function 59(fvec4) + 322: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 60 57 16 + 324: 23(int) Constant 1 + 325: 59(fvec4) ConstantComposite 97 205 97 97 + 328: 11(int) Constant 97 + 331: 11(int) Constant 98 + 335: 59(fvec4) ConstantComposite 97 97 97 205 + 338: 11(int) Constant 99 + 342: 11(int) Constant 101 + 340: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 341 60 30 342 16 81 26 + 356: 11(int) Constant 102 + 354: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 355 60 30 356 16 81 26 + 361: 23(int) Constant 6 + 374: 11(int) Constant 104 + 377: TypePointer Uniform 137 + 378: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 138 21 16 + 388: 11(int) Constant 105 + 407: 11(int) Constant 107 + 422: 11(int) Constant 108 + 420: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 421 19 30 422 16 81 26 + 425: TypePointer Uniform 59(fvec4) + 426: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 60 21 16 + 442: 11(int) Constant 109 + 449: 11(int) Constant 110 + 455: 11(int) Constant 111 + 461: TypePointer Input 18(fvec3) + 462(input.Pos): 461(ptr) Variable Input +465(input.Normal): 461(ptr) Variable Input + 468: TypePointer Input 20(fvec2) + 469(input.UV): 468(ptr) Variable Input +472(input.Color): 461(ptr) Variable Input +475(input.instancePos): 461(ptr) Variable Input +478(input.instanceRot): 461(ptr) Variable Input + 481: TypePointer Input 8(float) +482(input.instanceScale): 481(ptr) Variable Input + 485: TypePointer Input 23(int) +486(input.instanceTexIndex): 485(ptr) Variable Input + 493: TypePointer Output 59(fvec4) +494(@entryPointOutput.Pos): 493(ptr) Variable Output + 497: TypePointer Output 18(fvec3) +498(@entryPointOutput.Normal): 497(ptr) Variable Output +501(@entryPointOutput.Color): 497(ptr) Variable Output +504(@entryPointOutput.UV): 497(ptr) Variable Output +507(@entryPointOutput.ViewVec): 497(ptr) Variable Output +510(@entryPointOutput.LightVec): 497(ptr) Variable Output + 6(main): 4 Function None 5 + 7: Label + 460(input): 56(ptr) Variable Function +489(flattenTemp): 89(ptr) Variable Function + 490(param): 56(ptr) Variable Function + 463: 18(fvec3) Load 462(input.Pos) + 464: 103(ptr) AccessChain 460(input) 169 + Store 464 463 + 466: 18(fvec3) Load 465(input.Normal) + 467: 103(ptr) AccessChain 460(input) 324 + Store 467 466 + 470: 20(fvec2) Load 469(input.UV) + 471: 110(ptr) AccessChain 460(input) 101 + Store 471 470 + 473: 18(fvec3) Load 472(input.Color) + 474: 103(ptr) AccessChain 460(input) 102 + Store 474 473 + 476: 18(fvec3) Load 475(input.instancePos) + 477: 103(ptr) AccessChain 460(input) 296 + Store 477 476 + 479: 18(fvec3) Load 478(input.instanceRot) + 480: 103(ptr) AccessChain 460(input) 134 + Store 480 479 + 483: 8(float) Load 482(input.instanceScale) + 484: 126(ptr) AccessChain 460(input) 361 + Store 484 483 + 487: 23(int) Load 486(input.instanceTexIndex) + 488: 117(ptr) AccessChain 460(input) 116 + Store 488 487 + 491: 27(VSInput) Load 460(input) + Store 490(param) 491 + 492:61(VSOutput) FunctionCall 78(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;) 490(param) + Store 489(flattenTemp) 492 + 495: 321(ptr) AccessChain 489(flattenTemp) 169 + 496: 59(fvec4) Load 495 + Store 494(@entryPointOutput.Pos) 496 + 499: 103(ptr) AccessChain 489(flattenTemp) 324 + 500: 18(fvec3) Load 499 + Store 498(@entryPointOutput.Normal) 500 + 502: 103(ptr) AccessChain 489(flattenTemp) 101 + 503: 18(fvec3) Load 502 + Store 501(@entryPointOutput.Color) 503 + 505: 103(ptr) AccessChain 489(flattenTemp) 102 + 506: 18(fvec3) Load 505 + Store 504(@entryPointOutput.UV) 506 + 508: 103(ptr) AccessChain 489(flattenTemp) 296 + 509: 18(fvec3) Load 508 + Store 507(@entryPointOutput.ViewVec) 509 + 511: 103(ptr) AccessChain 489(flattenTemp) 134 + 512: 18(fvec3) Load 511 + Store 510(@entryPointOutput.LightVec) 512 + Return + FunctionEnd +78(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;):61(VSOutput) Function None 75 + 77(input): 56(ptr) FunctionParameter + 79: Label + 91(output): 89(ptr) Variable Function + 128(s): 126(ptr) Variable Function + 176(c): 126(ptr) Variable Function + 192(mx): 190(ptr) Variable Function + 227(my): 190(ptr) Variable Function + 261(mz): 190(ptr) Variable Function + 281(rotMat): 190(ptr) Variable Function + 311(gRotMat): 309(ptr) Variable Function + 339(locPos): 321(ptr) Variable Function + 353(pos): 321(ptr) Variable Function + 419(lPos): 103(ptr) Variable Function + 86: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 81 + 87: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 53 53 16 16 + 84: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 82 77(input) 85 + 88: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 81 78(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;) + 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 94 94 16 16 + 95: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 92 91(output) 85 + Store 91(output) 100 + 106: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 107 107 16 16 + 105: 103(ptr) AccessChain 77(input) 102 + 108: 18(fvec3) Load 105 + 109: 103(ptr) AccessChain 91(output) 101 + Store 109 108 + 113: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 114 114 16 16 + 112: 110(ptr) AccessChain 77(input) 101 + 115: 20(fvec2) Load 112 + 119: 117(ptr) AccessChain 77(input) 116 + 120: 23(int) Load 119 + 121: 8(float) ConvertSToF 120 + 122: 8(float) CompositeExtract 115 0 + 123: 8(float) CompositeExtract 115 1 + 124: 18(fvec3) CompositeConstruct 122 123 121 + 125: 103(ptr) AccessChain 91(output) 102 + Store 125 124 + 133: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 131 131 16 16 + 132: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 129 128(s) 85 + 135: 126(ptr) AccessChain 77(input) 134 16 + 136: 8(float) Load 135 + 172: 170(ptr) AccessChain 166 169 102 + 173: 8(float) Load 172 + 174: 8(float) FAdd 136 173 + 175: 8(float) ExtInst 3(GLSL.std.450) 13(Sin) 174 + Store 128(s) 175 + 181: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 179 179 16 16 + 180: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 177 176(c) 85 + 182: 126(ptr) AccessChain 77(input) 134 16 + 183: 8(float) Load 182 + 184: 170(ptr) AccessChain 166 169 102 + 185: 8(float) Load 184 + 186: 8(float) FAdd 183 185 + 187: 8(float) ExtInst 3(GLSL.std.450) 14(Cos) 186 + Store 176(c) 187 + 197: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 195 195 16 16 + 196: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 193 192(mx) 85 + 198: 8(float) Load 176(c) + 199: 8(float) Load 128(s) + 200: 8(float) FNegate 199 + 202: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 203 203 16 16 + 201: 8(float) Load 128(s) + 204: 8(float) Load 176(c) + 206: 18(fvec3) CompositeConstruct 198 200 97 + 207: 18(fvec3) CompositeConstruct 201 204 97 + 208: 18(fvec3) CompositeConstruct 97 97 205 + 209: 188 CompositeConstruct 206 207 208 + 210: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 195 195 16 16 + Store 192(mx) 209 + 212: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 213 213 16 16 + 211: 126(ptr) AccessChain 77(input) 134 52 + 214: 8(float) Load 211 + 215: 170(ptr) AccessChain 166 169 102 + 216: 8(float) Load 215 + 217: 8(float) FAdd 214 216 + 218: 8(float) ExtInst 3(GLSL.std.450) 13(Sin) 217 + Store 128(s) 218 + 220: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 221 221 16 16 + 219: 126(ptr) AccessChain 77(input) 134 52 + 222: 8(float) Load 219 + 223: 170(ptr) AccessChain 166 169 102 + 224: 8(float) Load 223 + 225: 8(float) FAdd 222 224 + 226: 8(float) ExtInst 3(GLSL.std.450) 14(Cos) 225 + Store 176(c) 226 + 232: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 230 230 16 16 + 231: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 228 227(my) 85 + 233: 8(float) Load 176(c) + 234: 8(float) Load 128(s) + 235: 8(float) FNegate 234 + 237: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 238 238 16 16 + 236: 8(float) Load 128(s) + 239: 8(float) Load 176(c) + 240: 18(fvec3) CompositeConstruct 233 97 235 + 241: 18(fvec3) CompositeConstruct 97 205 97 + 242: 18(fvec3) CompositeConstruct 236 97 239 + 243: 188 CompositeConstruct 240 241 242 + 244: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 230 230 16 16 + Store 227(my) 243 + 246: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 247 247 16 16 + 245: 126(ptr) AccessChain 77(input) 134 21 + 248: 8(float) Load 245 + 249: 170(ptr) AccessChain 166 169 102 + 250: 8(float) Load 249 + 251: 8(float) FAdd 248 250 + 252: 8(float) ExtInst 3(GLSL.std.450) 13(Sin) 251 + Store 128(s) 252 + 254: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 255 255 16 16 + 253: 126(ptr) AccessChain 77(input) 134 21 + 256: 8(float) Load 253 + 257: 170(ptr) AccessChain 166 169 102 + 258: 8(float) Load 257 + 259: 8(float) FAdd 256 258 + 260: 8(float) ExtInst 3(GLSL.std.450) 14(Cos) 259 + Store 176(c) 260 + 266: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 264 264 16 16 + 265: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 262 261(mz) 85 + 268: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 269 269 16 16 + 267: 8(float) Load 176(c) + 270: 8(float) Load 128(s) + 271: 8(float) FNegate 270 + 273: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 274 274 16 16 + 272: 8(float) Load 128(s) + 275: 8(float) Load 176(c) + 276: 18(fvec3) CompositeConstruct 205 97 97 + 277: 18(fvec3) CompositeConstruct 97 267 271 + 278: 18(fvec3) CompositeConstruct 97 272 275 + 279: 188 CompositeConstruct 276 277 278 + 280: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 264 264 16 16 + Store 261(mz) 279 + 286: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 284 284 16 16 + 285: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 282 281(rotMat) 85 + 287: 188 Load 192(mx) + 288: 188 Load 227(my) + 289: 188 MatrixTimesMatrix 287 288 + 290: 188 Load 261(mz) + 291: 188 MatrixTimesMatrix 289 290 + Store 281(rotMat) 291 + 293: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 294 294 16 16 + 292: 126(ptr) AccessChain 77(input) 134 52 + 295: 8(float) Load 292 + 297: 170(ptr) AccessChain 166 169 296 + 298: 8(float) Load 297 + 299: 8(float) FAdd 295 298 + 300: 8(float) ExtInst 3(GLSL.std.450) 13(Sin) 299 + Store 128(s) 300 + 302: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 303 303 16 16 + 301: 126(ptr) AccessChain 77(input) 134 52 + 304: 8(float) Load 301 + 305: 170(ptr) AccessChain 166 169 296 + 306: 8(float) Load 305 + 307: 8(float) FAdd 304 306 + 308: 8(float) ExtInst 3(GLSL.std.450) 14(Cos) 307 + Store 176(c) 308 + 316: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 314 314 16 16 + 315: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 312 311(gRotMat) 85 + 317: 8(float) Load 176(c) + 318: 8(float) Load 128(s) + 319: 8(float) FNegate 318 + 320: 59(fvec4) CompositeConstruct 317 97 319 97 + 323: 321(ptr) AccessChain 311(gRotMat) 169 + Store 323 320 + 327: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 328 328 16 16 + 326: 321(ptr) AccessChain 311(gRotMat) 324 + Store 326 325 + 330: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 331 331 16 16 + 329: 8(float) Load 128(s) + 332: 8(float) Load 176(c) + 333: 59(fvec4) CompositeConstruct 329 97 332 97 + 334: 321(ptr) AccessChain 311(gRotMat) 101 + Store 334 333 + 337: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 338 338 16 16 + 336: 321(ptr) AccessChain 311(gRotMat) 102 + Store 336 335 + 344: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 342 342 16 16 + 343: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 340 339(locPos) 85 + 345: 103(ptr) AccessChain 77(input) 169 + 346: 18(fvec3) Load 345 + 347: 188 Load 281(rotMat) + 348: 18(fvec3) VectorTimesMatrix 346 347 + 349: 8(float) CompositeExtract 348 0 + 350: 8(float) CompositeExtract 348 1 + 351: 8(float) CompositeExtract 348 2 + 352: 59(fvec4) CompositeConstruct 349 350 351 205 + Store 339(locPos) 352 + 358: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 356 356 16 16 + 357: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 354 353(pos) 85 + 359: 59(fvec4) Load 339(locPos) + 360: 18(fvec3) VectorShuffle 359 359 0 1 2 + 362: 126(ptr) AccessChain 77(input) 361 + 363: 8(float) Load 362 + 364: 18(fvec3) VectorTimesScalar 360 363 + 365: 103(ptr) AccessChain 77(input) 296 + 366: 18(fvec3) Load 365 + 367: 18(fvec3) FAdd 364 366 + 368: 8(float) CompositeExtract 367 0 + 369: 8(float) CompositeExtract 367 1 + 370: 8(float) CompositeExtract 367 2 + 371: 59(fvec4) CompositeConstruct 368 369 370 205 + Store 353(pos) 371 + 373: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 374 374 16 16 + 372: 59(fvec4) Load 353(pos) + 375: 137 Load 311(gRotMat) + 376: 59(fvec4) VectorTimesMatrix 372 375 + 379: 377(ptr) AccessChain 166 169 324 + 380: 137 Load 379 + 381: 59(fvec4) VectorTimesMatrix 376 380 + 382: 377(ptr) AccessChain 166 169 169 + 383: 137 Load 382 + 384: 59(fvec4) VectorTimesMatrix 381 383 + 385: 321(ptr) AccessChain 91(output) 169 + Store 385 384 + 387: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 388 388 16 16 + 386: 103(ptr) AccessChain 77(input) 324 + 389: 18(fvec3) Load 386 + 390: 188 Load 281(rotMat) + 391: 18(fvec3) VectorTimesMatrix 389 390 + 392: 137 Load 311(gRotMat) + 393: 377(ptr) AccessChain 166 169 324 + 394: 137 Load 393 + 395: 137 MatrixTimesMatrix 392 394 + 396: 59(fvec4) CompositeExtract 395 0 + 397: 18(fvec3) VectorShuffle 396 396 0 1 2 + 398: 59(fvec4) CompositeExtract 395 1 + 399: 18(fvec3) VectorShuffle 398 398 0 1 2 + 400: 59(fvec4) CompositeExtract 395 2 + 401: 18(fvec3) VectorShuffle 400 400 0 1 2 + 402: 188 CompositeConstruct 397 399 401 + 403: 18(fvec3) VectorTimesMatrix 391 402 + 404: 103(ptr) AccessChain 91(output) 324 + Store 404 403 + 406: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 407 407 16 16 + 405: 103(ptr) AccessChain 77(input) 169 + 408: 18(fvec3) Load 405 + 409: 103(ptr) AccessChain 77(input) 296 + 410: 18(fvec3) Load 409 + 411: 18(fvec3) FAdd 408 410 + 412: 8(float) CompositeExtract 411 0 + 413: 8(float) CompositeExtract 411 1 + 414: 8(float) CompositeExtract 411 2 + 415: 59(fvec4) CompositeConstruct 412 413 414 205 + 416: 377(ptr) AccessChain 166 169 324 + 417: 137 Load 416 + 418: 59(fvec4) VectorTimesMatrix 415 417 + Store 353(pos) 418 + 424: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 422 422 16 16 + 423: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 420 419(lPos) 85 + 427: 425(ptr) AccessChain 166 169 101 + 428: 59(fvec4) Load 427 + 429: 18(fvec3) VectorShuffle 428 428 0 1 2 + 430: 377(ptr) AccessChain 166 169 324 + 431: 137 Load 430 + 432: 59(fvec4) CompositeExtract 431 0 + 433: 18(fvec3) VectorShuffle 432 432 0 1 2 + 434: 59(fvec4) CompositeExtract 431 1 + 435: 18(fvec3) VectorShuffle 434 434 0 1 2 + 436: 59(fvec4) CompositeExtract 431 2 + 437: 18(fvec3) VectorShuffle 436 436 0 1 2 + 438: 188 CompositeConstruct 433 435 437 + 439: 18(fvec3) VectorTimesMatrix 429 438 + Store 419(lPos) 439 + 441: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 442 442 16 16 + 440: 18(fvec3) Load 419(lPos) + 443: 59(fvec4) Load 353(pos) + 444: 18(fvec3) VectorShuffle 443 443 0 1 2 + 445: 18(fvec3) FSub 440 444 + 446: 103(ptr) AccessChain 91(output) 134 + Store 446 445 + 448: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 449 449 16 16 + 447: 59(fvec4) Load 353(pos) + 450: 18(fvec3) VectorShuffle 447 447 0 1 2 + 451: 18(fvec3) FNegate 450 + 452: 103(ptr) AccessChain 91(output) 296 + Store 452 451 + 454: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 455 455 16 16 + 453:61(VSOutput) Load 91(output) + ReturnValue 453 + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.implicit_br.glsl.frag.out b/Test/baseResults/spv.debuginfo.implicit_br.glsl.frag.out new file mode 100644 index 0000000000..8b2af8e8e3 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.implicit_br.glsl.frag.out @@ -0,0 +1,325 @@ +spv.debuginfo.implicit_br.glsl.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 194 + + Capability Shader + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 14 "main" 186 + ExecutionMode 14 OriginUpperLeft + 2: String "spv.debuginfo.implicit_br.glsl.frag" + 8: String "uint" + 18: String "test_if" + 21: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +#version 460 + +out int outx; +int counter = 0; + +void test_if() { + if (false) { + counter += 1; + } +} + +void test_ifelse() { + if (false) { + counter += 1; + } + else { + counter += 2; + } +} + +void test_if_compound() { + if (false) { + if (false) { + counter += 1; + } + } +} + +void test_if_compound2() { + if (false) { + if (false) { + counter += 1; + } + + counter += 2; + } +} + +void test_switch() { + switch (0) { + case 0: + counter += 1; + // implict fallthrough + case 1: + counter += 2; + break; + default: + counter += 3; + // implicit break + } +} + +void main() { + test_if(); + test_ifelse(); + test_if_compound(); + test_if_compound2(); + test_switch(); + outx = counter; +}" + 28: String "test_ifelse" + 33: String "test_if_compound" + 38: String "test_if_compound2" + 43: String "test_switch" + 46: String "main" + 50: String "int" + 56: String "counter" + 65: String "bool" + 188: String "outx" + Name 14 "main" + Name 16 "test_if(" + Name 26 "test_ifelse(" + Name 31 "test_if_compound(" + Name 36 "test_if_compound2(" + Name 41 "test_switch(" + Name 54 "counter" + Name 186 "outx" + Decorate 186(outx) Location 0 + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 20: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 21 + 23: 7(int) Constant 1 + 24: 7(int) Constant 4 + 25: 7(int) Constant 2 + 22: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 23 24 20 25 + 19: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 18 6 20 11 12 22 18 13 11 + 30: 7(int) Constant 12 + 29: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 28 6 20 30 12 22 28 13 30 + 35: 7(int) Constant 21 + 34: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 33 6 20 35 12 22 33 13 35 + 40: 7(int) Constant 29 + 39: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 38 6 20 40 12 22 38 13 40 + 45: 7(int) Constant 39 + 44: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 43 6 20 45 12 22 43 13 45 + 48: 7(int) Constant 53 + 47: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 46 6 20 48 12 22 46 13 48 + 49: TypeInt 32 1 + 51: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 50 10 24 12 + 52: TypePointer Private 49(int) + 53: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 51 11 12 + 54(counter): 52(ptr) Variable Private + 57: 7(int) Constant 8 + 55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 56 51 20 24 12 22 56 54(counter) 57 + 58: 49(int) Constant 0 + 64: TypeBool + 66: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 65 10 25 12 + 67: 64(bool) ConstantFalse + 70: 49(int) Constant 1 + 77: 7(int) Constant 10 + 86: 7(int) Constant 14 + 89: 49(int) Constant 2 + 93: 7(int) Constant 17 + 97: 7(int) Constant 19 + 110: 7(int) Constant 24 + 114: 7(int) Constant 27 + 131: 7(int) Constant 35 + 135: 7(int) Constant 37 + 146: 7(int) Constant 42 + 151: 7(int) Constant 45 + 154: 7(int) Constant 46 + 156: 49(int) Constant 3 + 160: 7(int) Constant 48 + 165: 7(int) Constant 51 + 171: 7(int) Constant 54 + 174: 7(int) Constant 55 + 177: 7(int) Constant 56 + 180: 7(int) Constant 57 + 183: 7(int) Constant 58 + 184: TypePointer Output 49(int) + 185: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 51 13 12 + 186(outx): 184(ptr) Variable Output + 189: 7(int) Constant 59 + 187: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 188 51 20 189 12 22 188 186(outx) 57 + 193: 7(int) Constant 60 + 14(main): 4 Function None 5 + 15: Label + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 22 + 60: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 24 24 12 12 + Store 54(counter) 58 + 167: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 47 + 168: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 48 48 12 12 + 166: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 47 14(main) + 170: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 171 171 12 12 + 169: 4 FunctionCall 16(test_if() + 173: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 174 174 12 12 + 172: 4 FunctionCall 26(test_ifelse() + 176: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 177 177 12 12 + 175: 4 FunctionCall 31(test_if_compound() + 179: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 180 180 12 12 + 178: 4 FunctionCall 36(test_if_compound2() + 182: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 183 183 12 12 + 181: 4 FunctionCall 41(test_switch() + 191: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 189 189 12 12 + 190: 49(int) Load 54(counter) + Store 186(outx) 190 + 192: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 193 193 12 12 + Return + FunctionEnd + 16(test_if(): 4 Function None 5 + 17: Label + 62: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 19 + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 11 11 12 12 + 61: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 19 16(test_if() + SelectionMerge 69 None + BranchConditional 67 68 69 + 68: Label + 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 19 + 73: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 57 57 12 12 + 71: 49(int) Load 54(counter) + 74: 49(int) IAdd 71 70 + Store 54(counter) 74 + Branch 69 + 69: Label + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 19 + 76: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 77 77 12 12 + Return + FunctionEnd +26(test_ifelse(): 4 Function None 5 + 27: Label + 79: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 29 + 80: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 30 30 12 12 + 78: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 29 26(test_ifelse() + SelectionMerge 82 None + BranchConditional 67 81 88 + 81: Label + 84: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 29 + 85: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 86 86 12 12 + 83: 49(int) Load 54(counter) + 87: 49(int) IAdd 83 70 + Store 54(counter) 87 + Branch 82 + 88: Label + 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 29 + 92: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 93 93 12 12 + 90: 49(int) Load 54(counter) + 94: 49(int) IAdd 90 89 + Store 54(counter) 94 + Branch 82 + 82: Label + 95: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 29 + 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 97 97 12 12 + Return + FunctionEnd +31(test_if_compound(): 4 Function None 5 + 32: Label + 99: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34 + 100: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 35 35 12 12 + 98: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 34 31(test_if_compound() + SelectionMerge 102 None + BranchConditional 67 101 102 + 101: Label + 105: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34 + 106: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 35 35 12 12 + SelectionMerge 104 None + BranchConditional 67 103 104 + 103: Label + 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34 + 109: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 110 110 12 12 + 107: 49(int) Load 54(counter) + 111: 49(int) IAdd 107 70 + Store 54(counter) 111 + Branch 104 + 104: Label + Branch 102 + 102: Label + 112: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34 + 113: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 114 114 12 12 + Return + FunctionEnd +36(test_if_compound2(): 4 Function None 5 + 37: Label + 116: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39 + 117: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 40 40 12 12 + 115: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 39 36(test_if_compound2() + SelectionMerge 119 None + BranchConditional 67 118 119 + 118: Label + 122: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39 + 123: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 40 40 12 12 + SelectionMerge 121 None + BranchConditional 67 120 121 + 120: Label + 125: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39 + 126: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 10 10 12 12 + 124: 49(int) Load 54(counter) + 127: 49(int) IAdd 124 70 + Store 54(counter) 127 + Branch 121 + 121: Label + 129: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39 + 130: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 131 131 12 12 + 128: 49(int) Load 54(counter) + 132: 49(int) IAdd 128 89 + Store 54(counter) 132 + Branch 119 + 119: Label + 133: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39 + 134: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 135 135 12 12 + Return + FunctionEnd +41(test_switch(): 4 Function None 5 + 42: Label + 137: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44 + 138: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 45 45 12 12 + 136: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 44 41(test_switch() + SelectionMerge 142 None + Switch 58 141 + case 0: 139 + case 1: 140 + 141: Label + 158: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44 + 159: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 160 160 12 12 + 157: 49(int) Load 54(counter) + 161: 49(int) IAdd 157 156 + Store 54(counter) 161 + Branch 142 + 139: Label + 144: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44 + 145: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 146 146 12 12 + 143: 49(int) Load 54(counter) + 147: 49(int) IAdd 143 70 + Store 54(counter) 147 + Branch 140 + 140: Label + 149: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44 + 150: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 151 151 12 12 + 148: 49(int) Load 54(counter) + 152: 49(int) IAdd 148 89 + Store 54(counter) 152 + 153: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 154 154 12 12 + Branch 142 + 142: Label + 163: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44 + 164: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 165 165 12 12 + Return + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.include.glsl.frag.out b/Test/baseResults/spv.debuginfo.include.glsl.frag.out new file mode 100644 index 0000000000..1d8348ae7b --- /dev/null +++ b/Test/baseResults/spv.debuginfo.include.glsl.frag.out @@ -0,0 +1,167 @@ +spv.debuginfo.include.glsl.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 112 + + Capability Shader + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 4: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 15 "main" 82 + ExecutionMode 15 OriginUpperLeft + 2: String "spv.debuginfo.include.glsl.frag" + 3: String "spv.debuginfo.include.glsl.h" + 9: String "uint" + 18: String "float" + 31: String "headerFunction" + 34: String " +out vec4 headerOut; + +uniform UBO { + vec4 headerUboItem; +}; + +vec4 headerFunction(vec4 a) { + return -a; +}" + 39: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "spv.debuginfo.include.glsl.h" + +vec4 mainFileFunction(vec4 v) { + return -v; +} + +void main() { + headerOut = headerFunction(mainFileFunction(headerUboItem)); +}" + 42: String "a" + 50: String "mainFileFunction" + 53: String "v" + 57: String "main" + 84: String "headerOut" + 88: String "headerUboItem" + 91: String "UBO" + 96: String "" + 98: String "int" + SourceExtension "GL_GOOGLE_cpp_style_line_directive" + SourceExtension "GL_GOOGLE_include_directive" + Name 15 "main" + Name 29 "headerFunction(vf4;" + Name 28 "a" + Name 48 "mainFileFunction(vf4;" + Name 47 "v" + Name 82 "headerOut" + Name 86 "UBO" + MemberName 86(UBO) 0 "headerUboItem" + Name 94 "" + Name 101 "param" + Name 108 "param" + Decorate 82(headerOut) Location 0 + Decorate 86(UBO) Block + MemberDecorate 86(UBO) 0 Offset 0 + Decorate 94 Binding 0 + Decorate 94 DescriptorSet 0 + 5: TypeVoid + 6: TypeFunction 5 + 8: TypeInt 32 0 + 11: 8(int) Constant 32 + 12: 8(int) Constant 6 + 13: 8(int) Constant 0 + 10: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 11 12 13 + 14: 8(int) Constant 3 + 7: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 14 5 + 17: TypeFloat 32 + 19: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 18 11 14 13 + 20: TypeVector 17(float) 4 + 21: 8(int) Constant 4 + 22: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 19 21 + 23: TypePointer Function 20(fvec4) + 24: 8(int) Constant 7 + 25: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 24 13 + 26: TypeFunction 20(fvec4) 23(ptr) + 27: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 14 22 22 + 33: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 3 34 + 35: 8(int) Constant 8 + 37: 8(int) Constant 1 + 38: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 39 + 40: 8(int) Constant 2 + 36: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 37 21 38 40 + 32: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 31 27 33 35 13 36 31 14 35 + 41: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 42 22 33 35 13 32 21 37 + 44: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 51: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 50 27 38 12 13 36 50 14 12 + 52: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 22 38 12 13 51 21 37 + 59: 8(int) Constant 10 + 58: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 57 7 38 59 13 36 57 14 59 + 63: 8(int) Constant 9 + 80: TypePointer Output 20(fvec4) + 81: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 14 13 + 82(headerOut): 80(ptr) Variable Output + 85: 8(int) Constant 11 + 83: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 84 22 38 85 13 36 84 82(headerOut) 35 + 86(UBO): TypeStruct 20(fvec4) + 89: 8(int) Constant 5 + 87: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 88 22 38 89 24 13 13 14 + 90: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 91 37 38 85 13 36 91 13 14 87 + 92: TypePointer Uniform 86(UBO) + 93: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 90 40 13 + 94: 92(ptr) Variable Uniform + 95: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 96 90 38 85 13 36 96 94 35 + 97: TypeInt 32 1 + 99: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 98 11 21 13 + 100: 97(int) Constant 0 + 102: TypePointer Uniform 20(fvec4) + 103: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 40 13 + 111: 8(int) Constant 12 + 15(main): 5 Function None 6 + 16: Label + 101(param): 23(ptr) Variable Function + 108(param): 23(ptr) Variable Function + 78: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58 + 79: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 38 59 59 13 13 + 77: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 58 15(main) + 105: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 38 85 85 13 13 + 104: 102(ptr) AccessChain 94 100 + 106: 20(fvec4) Load 104 + Store 101(param) 106 + 107: 20(fvec4) FunctionCall 48(mainFileFunction(vf4;) 101(param) + Store 108(param) 107 + 109: 20(fvec4) FunctionCall 29(headerFunction(vf4;) 108(param) + Store 82(headerOut) 109 + 110: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 38 111 111 13 13 + Return + FunctionEnd +29(headerFunction(vf4;): 20(fvec4) Function None 26 + 28(a): 23(ptr) FunctionParameter + 30: Label + 45: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 32 + 46: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 35 35 13 13 + 43: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 41 28(a) 44 + 60: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 32 29(headerFunction(vf4;) + 62: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 63 63 13 13 + 61: 20(fvec4) Load 28(a) + 64: 20(fvec4) FNegate 61 + ReturnValue 64 + FunctionEnd +48(mainFileFunction(vf4;): 20(fvec4) Function None 26 + 47(v): 23(ptr) FunctionParameter + 49: Label + 55: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 51 + 56: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 38 12 12 13 13 + 54: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 47(v) 44 + 69: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 51 48(mainFileFunction(vf4;) + 71: 5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 38 24 24 13 13 + 70: 20(fvec4) Load 47(v) + 72: 20(fvec4) FNegate 70 + ReturnValue 72 + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.multiline.glsl.frag.out b/Test/baseResults/spv.debuginfo.multiline.glsl.frag.out new file mode 100644 index 0000000000..b16727df3e --- /dev/null +++ b/Test/baseResults/spv.debuginfo.multiline.glsl.frag.out @@ -0,0 +1,165 @@ +spv.debuginfo.multiline.glsl.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 109 + + Capability Shader + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 14 "main" 75 81 + ExecutionMode 14 OriginUpperLeft + 2: String "spv.debuginfo.multiline.glsl.frag" + 8: String "uint" + 17: String "float" + 29: String "add" + 32: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +#version 460 + +in float inx; +out float outx; + +float add(float x, float y, float z) { + return + x + + + y + + + z + ; +} + +void main() { + outx + = + add( + inx+1, + inx+2, + inx+3 + ) + ; +}" + 38: String "x" + 44: String "y" + 47: String "z" + 49: String "main" + 77: String "outx" + 83: String "inx" + Name 14 "main" + Name 27 "add(f1;f1;f1;" + Name 24 "x" + Name 25 "y" + Name 26 "z" + Name 75 "outx" + Name 81 "inx" + Name 99 "param" + Name 102 "param" + Name 103 "param" + Decorate 75(outx) Location 0 + Decorate 81(inx) Location 0 + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 16: TypeFloat 32 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 17 10 13 12 + 19: TypePointer Function 16(float) + 20: 7(int) Constant 7 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 20 12 + 22: TypeFunction 16(float) 19(ptr) 19(ptr) 19(ptr) + 23: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 18 18 18 18 + 31: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 32 + 34: 7(int) Constant 1 + 35: 7(int) Constant 4 + 36: 7(int) Constant 2 + 33: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 34 35 31 36 + 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 29 23 31 11 12 33 29 13 11 + 37: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 38 18 31 11 12 30 35 34 + 40: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 44 18 31 11 12 30 35 36 + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 18 31 11 12 30 35 13 + 51: 7(int) Constant 16 + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 49 6 31 51 12 33 49 13 51 + 55: 7(int) Constant 8 + 58: 7(int) Constant 10 + 62: 7(int) Constant 12 + 69: 7(int) Constant 14 + 73: TypePointer Output 16(float) + 74: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 13 12 + 75(outx): 73(ptr) Variable Output + 78: 7(int) Constant 17 + 76: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 77 18 31 78 12 33 77 75(outx) 55 + 79: TypePointer Input 16(float) + 80: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 34 12 + 81(inx): 79(ptr) Variable Input + 84: 7(int) Constant 20 + 82: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 83 18 31 84 12 33 83 81(inx) 55 + 87: 16(float) Constant 1065353216 + 91: 7(int) Constant 21 + 92: 16(float) Constant 1073741824 + 96: 7(int) Constant 22 + 97: 16(float) Constant 1077936128 + 101: 7(int) Constant 23 + 106: 7(int) Constant 18 + 108: 7(int) Constant 25 + 14(main): 4 Function None 5 + 15: Label + 99(param): 19(ptr) Variable Function + 102(param): 19(ptr) Variable Function + 103(param): 19(ptr) Variable Function + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 50 + 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 51 51 12 12 + 70: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 50 14(main) + 86: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 84 84 12 12 + 85: 16(float) Load 81(inx) + 88: 16(float) FAdd 85 87 + 90: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 91 91 12 12 + 89: 16(float) Load 81(inx) + 93: 16(float) FAdd 89 92 + 95: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 96 96 12 12 + 94: 16(float) Load 81(inx) + 98: 16(float) FAdd 94 97 + 100: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 101 101 12 12 + Store 99(param) 88 + Store 102(param) 93 + Store 103(param) 98 + 104: 16(float) FunctionCall 27(add(f1;f1;f1;) 99(param) 102(param) 103(param) + 105: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 106 106 12 12 + Store 75(outx) 104 + 107: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 108 108 12 12 + Return + FunctionEnd +27(add(f1;f1;f1;): 16(float) Function None 22 + 24(x): 19(ptr) FunctionParameter + 25(y): 19(ptr) FunctionParameter + 26(z): 19(ptr) FunctionParameter + 28: Label + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 30 + 42: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 11 11 12 12 + 39: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 37 24(x) 40 + 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 43 25(y) 40 + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 46 26(z) 40 + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 30 27(add(f1;f1;f1;) + 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 55 55 12 12 + 53: 16(float) Load 24(x) + 57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 58 58 12 12 + 56: 16(float) Load 25(y) + 59: 16(float) FAdd 53 56 + 61: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 62 62 12 12 + 60: 16(float) Load 26(z) + 63: 16(float) FAdd 59 60 + 64: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 20 20 12 12 + ReturnValue 63 + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.rt_types.glsl.rgen.out b/Test/baseResults/spv.debuginfo.rt_types.glsl.rgen.out new file mode 100644 index 0000000000..02e5280be7 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.rt_types.glsl.rgen.out @@ -0,0 +1,193 @@ +spv.debuginfo.rt_types.glsl.rgen +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 125 + + Capability RayQueryKHR + Capability RayTracingNV + Extension "SPV_KHR_non_semantic_info" + Extension "SPV_KHR_ray_query" + Extension "SPV_NV_ray_tracing" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 14 "main" + 2: String "spv.debuginfo.rt_types.glsl.rgen" + 8: String "uint" + 16: String "main" + 19: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +#version 460 +#extension GL_NV_ray_tracing : enable +#extension GL_EXT_ray_query : enable +layout(binding = 0, set = 0) uniform accelerationStructureEXT acc0; + +layout(shaderRecordNV) buffer block +{ + vec3 dir; + vec3 origin; +}; + +void main() +{ + rayQueryEXT localRayQuery; + uint rayFlags = gl_RayFlagsOpaqueEXT | gl_RayFlagsSkipClosestHitShaderEXT; + float tMin = 0.f; + float tMax = 1000.f; + rayQueryInitializeEXT(localRayQuery, acc0, rayFlags, 0xFF , origin, tMin, dir, tMax); + if (!rayQueryProceedEXT(localRayQuery)) + { + rayQueryTerminateEXT(localRayQuery); + } +} +" + 33: String "rayFlags" + 40: String "float" + 46: String "tMin" + 53: String "tMax" + 60: String "rayQuery" + 62: String "@rayQuery" + 68: String "localRayQuery" + 72: String "accelerationStructure" + 73: String "@accelerationStructure" + 78: String "acc0" + 87: String "origin" + 90: String "block" + 96: String "" + 98: String "int" + 111: String "bool" + SourceExtension "GL_EXT_ray_query" + SourceExtension "GL_NV_ray_tracing" + Name 14 "main" + Name 31 "rayFlags" + Name 44 "tMin" + Name 51 "tMax" + Name 66 "localRayQuery" + Name 76 "acc0" + Name 85 "block" + MemberName 85(block) 0 "dir" + MemberName 85(block) 1 "origin" + Name 94 "" + Decorate 76(acc0) Binding 0 + Decorate 76(acc0) DescriptorSet 0 + Decorate 85(block) BufferBlock + MemberDecorate 85(block) 0 Offset 0 + MemberDecorate 85(block) 1 Offset 16 + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19 + 20: 7(int) Constant 12 + 22: 7(int) Constant 1 + 23: 7(int) Constant 4 + 24: 7(int) Constant 2 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24 + 17: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20 + 28: TypePointer Function 7(int) + 29: 7(int) Constant 7 + 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 29 12 + 34: 7(int) Constant 15 + 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 33 9 18 34 12 17 23 + 36: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 38: 7(int) Constant 9 + 39: TypeFloat 32 + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 40 10 13 12 + 42: TypePointer Function 39(float) + 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 41 29 12 + 47: 7(int) Constant 16 + 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 46 41 18 47 12 17 23 + 50: 39(float) Constant 0 + 54: 7(int) Constant 17 + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 41 18 54 12 17 23 + 57: 39(float) Constant 1148846080 + 58: TypeRayQueryKHR + 61: 7(int) Constant 18 + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone) + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 60 22 18 61 12 21 62 63 13 + 64: TypePointer Private 58 + 65: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 59 11 12 +66(localRayQuery): 64(ptr) Variable Private + 69: 7(int) Constant 8 + 67: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 68 59 18 61 12 21 68 66(localRayQuery) 69 + 70: TypeAccelerationStructureKHR + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 72 22 18 61 12 21 73 63 13 + 74: TypePointer UniformConstant 70 + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 71 12 12 + 76(acc0): 74(ptr) Variable UniformConstant + 77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 78 71 18 61 12 21 78 76(acc0) 69 + 82: 7(int) Constant 255 + 83: TypeVector 39(float) 3 + 84: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 13 + 85(block): TypeStruct 83(fvec3) 83(fvec3) + 86: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 87 84 18 38 29 12 12 13 + 88: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 87 84 18 38 29 12 12 13 + 89: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 90 22 18 61 12 21 90 12 13 86 88 + 91: TypePointer ShaderRecordBufferKHR 85(block) + 92: 7(int) Constant 5343 + 93: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 89 92 12 + 94: 91(ptr) Variable ShaderRecordBufferKHR + 95: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 96 89 18 61 12 21 96 94 69 + 97: TypeInt 32 1 + 99: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 98 10 23 12 + 100: 97(int) Constant 1 + 101: TypePointer ShaderRecordBufferKHR 83(fvec3) + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 84 92 12 + 106: 97(int) Constant 0 + 110: TypeBool + 112: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 111 10 24 12 + 115: 7(int) Constant 19 + 121: 7(int) Constant 21 + 124: 7(int) Constant 23 + 14(main): 4 Function None 5 + 15: Label + 31(rayFlags): 28(ptr) Variable Function + 44(tMin): 42(ptr) Variable Function + 51(tMax): 42(ptr) Variable Function + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12 + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main) + 37: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 34 34 12 12 + 35: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 32 31(rayFlags) 36 + Store 31(rayFlags) 38 + 49: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 47 47 12 12 + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 45 44(tMin) 36 + Store 44(tMin) 50 + 56: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 54 54 12 12 + 55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 51(tMax) 36 + Store 51(tMax) 57 + 80: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 61 61 12 12 + 79: 70 Load 76(acc0) + 81: 7(int) Load 31(rayFlags) + 103: 101(ptr) AccessChain 94 100 + 104: 83(fvec3) Load 103 + 105: 39(float) Load 44(tMin) + 107: 101(ptr) AccessChain 94 106 + 108: 83(fvec3) Load 107 + 109: 39(float) Load 51(tMax) + RayQueryInitializeKHR 66(localRayQuery) 79 81 82 104 105 108 109 + 114: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 115 115 12 12 + 113: 110(bool) RayQueryProceedKHR 66(localRayQuery) + 116: 110(bool) LogicalNot 113 + SelectionMerge 118 None + BranchConditional 116 117 118 + 117: Label + 119: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 120: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 121 121 12 12 + RayQueryTerminateKHR 66(localRayQuery) + Branch 118 + 118: Label + 122: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 123: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 124 124 12 12 + Return + FunctionEnd diff --git a/Test/baseResults/spv.debuginfo.scalar_types.glsl.frag.out b/Test/baseResults/spv.debuginfo.scalar_types.glsl.frag.out new file mode 100644 index 0000000000..019c0a0363 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.scalar_types.glsl.frag.out @@ -0,0 +1,264 @@ +spv.debuginfo.scalar_types.glsl.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 161 + + Capability Shader + Capability Float16 + Capability Float64 + Capability Int64 + Capability Int16 + Capability Int8 + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 14 "main" + ExecutionMode 14 OriginUpperLeft + 2: String "spv.debuginfo.scalar_types.glsl.frag" + 8: String "uint" + 16: String "main" + 19: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +/* +The MIT License (MIT) + +Copyright (c) 2023 NVIDIA CORPORATION. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 460 + +#extension GL_EXT_shader_explicit_arithmetic_types : require + +bool VAR_bool; +int VAR_int; +uint VAR_uint; +float VAR_float; +double VAR_double; +int8_t VAR_int8_t; +uint8_t VAR_uint8_t; +int16_t VAR_int16_t; +uint16_t VAR_uint16_t; +int64_t VAR_int64_t; +uint64_t VAR_uint64_t; +float16_t VAR_float16_t; + +void main() { + VAR_bool = bool(0); + VAR_int = int(0); + VAR_uint = uint(0); + VAR_float = float(0); + VAR_double = double(0); + VAR_int8_t = int8_t(0); + VAR_uint8_t = uint8_t(0); + VAR_int16_t = int16_t(0); + VAR_uint16_t = uint16_t(0); + VAR_int64_t = int64_t(0); + VAR_uint64_t = uint64_t(0); + VAR_float16_t = float16_t(0); +}" + 29: String "bool" + 35: String "VAR_bool" + 41: String "int" + 47: String "VAR_int" + 55: String "VAR_uint" + 59: String "float" + 65: String "VAR_float" + 70: String "double" + 77: String "VAR_double" + 82: String "int8_t" + 88: String "VAR_int8_t" + 93: String "uint8_t" + 99: String "VAR_uint8_t" + 104: String "int16_t" + 111: String "VAR_int16_t" + 116: String "uint16_t" + 122: String "VAR_uint16_t" + 127: String "int64_t" + 133: String "VAR_int64_t" + 138: String "uint64_t" + 144: String "VAR_uint64_t" + 149: String "float16_t" + 155: String "VAR_float16_t" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types" + Name 14 "main" + Name 33 "VAR_bool" + Name 45 "VAR_int" + Name 53 "VAR_uint" + Name 63 "VAR_float" + Name 75 "VAR_double" + Name 86 "VAR_int8_t" + Name 97 "VAR_uint8_t" + Name 109 "VAR_int16_t" + Name 120 "VAR_uint16_t" + Name 131 "VAR_int64_t" + Name 142 "VAR_uint64_t" + Name 153 "VAR_float16_t" + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19 + 20: 7(int) Constant 42 + 22: 7(int) Constant 1 + 23: 7(int) Constant 4 + 24: 7(int) Constant 2 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24 + 17: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20 + 28: TypeBool + 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 24 12 + 31: TypePointer Private 28(bool) + 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 11 12 + 33(VAR_bool): 31(ptr) Variable Private + 36: 7(int) Constant 43 + 37: 7(int) Constant 8 + 34: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 35 30 18 36 12 21 35 33(VAR_bool) 37 + 38: 28(bool) ConstantFalse + 40: TypeInt 32 1 + 42: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 41 10 23 12 + 43: TypePointer Private 40(int) + 44: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 42 11 12 + 45(VAR_int): 43(ptr) Variable Private + 48: 7(int) Constant 44 + 46: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 47 42 18 48 12 21 47 45(VAR_int) 37 + 49: 40(int) Constant 0 + 51: TypePointer Private 7(int) + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 11 12 + 53(VAR_uint): 51(ptr) Variable Private + 56: 7(int) Constant 45 + 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 55 9 18 56 12 21 55 53(VAR_uint) 37 + 58: TypeFloat 32 + 60: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 59 10 13 12 + 61: TypePointer Private 58(float) + 62: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 60 11 12 + 63(VAR_float): 61(ptr) Variable Private + 66: 7(int) Constant 46 + 64: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 65 60 18 66 12 21 65 63(VAR_float) 37 + 67: 58(float) Constant 0 + 69: TypeFloat 64 + 72: 7(int) Constant 64 + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 70 72 13 12 + 73: TypePointer Private 69(float64_t) + 74: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 71 11 12 + 75(VAR_double): 73(ptr) Variable Private + 78: 7(int) Constant 47 + 76: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 77 71 18 78 12 21 77 75(VAR_double) 37 + 79:69(float64_t) Constant 0 0 + 81: TypeInt 8 1 + 83: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 82 37 23 12 + 84: TypePointer Private 81(int8_t) + 85: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 83 11 12 + 86(VAR_int8_t): 84(ptr) Variable Private + 89: 7(int) Constant 48 + 87: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 88 83 18 89 12 21 88 86(VAR_int8_t) 37 + 90: 81(int8_t) Constant 0 + 92: TypeInt 8 0 + 94: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 93 37 11 12 + 95: TypePointer Private 92(int8_t) + 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 94 11 12 + 97(VAR_uint8_t): 95(ptr) Variable Private + 100: 7(int) Constant 49 + 98: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 99 94 18 100 12 21 99 97(VAR_uint8_t) 37 + 101: 92(int8_t) Constant 0 + 103: TypeInt 16 1 + 106: 7(int) Constant 16 + 105: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 104 106 23 12 + 107: TypePointer Private 103(int16_t) + 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 105 11 12 +109(VAR_int16_t): 107(ptr) Variable Private + 112: 7(int) Constant 50 + 110: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 111 105 18 112 12 21 111 109(VAR_int16_t) 37 + 113:103(int16_t) Constant 0 + 115: TypeInt 16 0 + 117: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 116 106 11 12 + 118: TypePointer Private 115(int16_t) + 119: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 117 11 12 +120(VAR_uint16_t): 118(ptr) Variable Private + 123: 7(int) Constant 51 + 121: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 122 117 18 123 12 21 122 120(VAR_uint16_t) 37 + 124:115(int16_t) Constant 0 + 126: TypeInt 64 1 + 128: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 127 72 23 12 + 129: TypePointer Private 126(int64_t) + 130: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 128 11 12 +131(VAR_int64_t): 129(ptr) Variable Private + 134: 7(int) Constant 52 + 132: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 133 128 18 134 12 21 133 131(VAR_int64_t) 37 + 135:126(int64_t) Constant 0 0 + 137: TypeInt 64 0 + 139: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 72 11 12 + 140: TypePointer Private 137(int64_t) + 141: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 139 11 12 +142(VAR_uint64_t): 140(ptr) Variable Private + 145: 7(int) Constant 53 + 143: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 144 139 18 145 12 21 144 142(VAR_uint64_t) 37 + 146:137(int64_t) Constant 0 0 + 148: TypeFloat 16 + 150: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 149 106 13 12 + 151: TypePointer Private 148(float16_t) + 152: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 150 11 12 +153(VAR_float16_t): 151(ptr) Variable Private + 156: 7(int) Constant 54 + 154: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 155 150 18 156 12 21 155 153(VAR_float16_t) 37 + 157:148(float16_t) Constant 0 + 160: 7(int) Constant 55 + 14(main): 4 Function None 5 + 15: Label + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12 + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main) + 39: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 36 36 12 12 + Store 33(VAR_bool) 38 + 50: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 48 48 12 12 + Store 45(VAR_int) 49 + 57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 56 56 12 12 + Store 53(VAR_uint) 12 + 68: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 66 66 12 12 + Store 63(VAR_float) 67 + 80: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 78 78 12 12 + Store 75(VAR_double) 79 + 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 89 89 12 12 + Store 86(VAR_int8_t) 90 + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 100 100 12 12 + Store 97(VAR_uint8_t) 101 + 114: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 112 112 12 12 + Store 109(VAR_int16_t) 113 + 125: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 123 123 12 12 + Store 120(VAR_uint16_t) 124 + 136: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 134 134 12 12 + Store 131(VAR_int64_t) 135 + 147: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 145 145 12 12 + Store 142(VAR_uint64_t) 146 + 158: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 156 156 12 12 + Store 153(VAR_float16_t) 157 + 159: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 160 160 12 12 + Return + FunctionEnd diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out index d46159d705..a278a9cf0f 100644 --- a/Test/baseResults/spv.deepRvalue.frag.out +++ b/Test/baseResults/spv.deepRvalue.frag.out @@ -1,6 +1,6 @@ spv.deepRvalue.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 152 Capability Shader @@ -27,8 +27,8 @@ spv.deepRvalue.frag MemberName 131(str) 2 "c" Name 133 "t" Name 146 "gl_FragColor" - Decorate 111(samp2D) DescriptorSet 0 Decorate 111(samp2D) Binding 0 + Decorate 111(samp2D) DescriptorSet 0 Decorate 146(gl_FragColor) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.depthOut.frag.out b/Test/baseResults/spv.depthOut.frag.out index 50c4770268..4d69949fcf 100644 --- a/Test/baseResults/spv.depthOut.frag.out +++ b/Test/baseResults/spv.depthOut.frag.out @@ -1,6 +1,6 @@ spv.depthOut.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 15 Capability Shader diff --git a/Test/baseResults/spv.depthUnchanged.frag.out b/Test/baseResults/spv.depthUnchanged.frag.out index 0074007836..34785c086a 100644 --- a/Test/baseResults/spv.depthUnchanged.frag.out +++ b/Test/baseResults/spv.depthUnchanged.frag.out @@ -1,6 +1,6 @@ spv.depthUnchanged.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader diff --git a/Test/baseResults/spv.deviceGroup.frag.out b/Test/baseResults/spv.deviceGroup.frag.out index 57c443c0e5..7ffc1957c4 100644 --- a/Test/baseResults/spv.deviceGroup.frag.out +++ b/Test/baseResults/spv.deviceGroup.frag.out @@ -1,6 +1,6 @@ spv.deviceGroup.frag // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 17 Capability Shader @@ -15,8 +15,8 @@ spv.deviceGroup.frag Name 9 "color" Name 12 "gl_DeviceIndex" Decorate 9(color) Location 0 - Decorate 12(gl_DeviceIndex) Flat Decorate 12(gl_DeviceIndex) BuiltIn DeviceIndex + Decorate 12(gl_DeviceIndex) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out index 93c2de8fc2..bddf6f9e8b 100644 --- a/Test/baseResults/spv.discard-dce.frag.out +++ b/Test/baseResults/spv.discard-dce.frag.out @@ -1,6 +1,6 @@ spv.discard-dce.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 84 Capability Shader diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out index c240c449ca..c0196c2b5b 100644 --- a/Test/baseResults/spv.do-simple.vert.out +++ b/Test/baseResults/spv.do-simple.vert.out @@ -1,6 +1,6 @@ spv.do-simple.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 21 Capability Shader diff --git a/Test/baseResults/spv.do-while-continue-break.vert.out b/Test/baseResults/spv.do-while-continue-break.vert.out index 081dc62033..26e67fcb29 100644 --- a/Test/baseResults/spv.do-while-continue-break.vert.out +++ b/Test/baseResults/spv.do-while-continue-break.vert.out @@ -1,6 +1,6 @@ spv.do-while-continue-break.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 43 Capability Shader diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out index a57b9b2e83..145776c978 100644 --- a/Test/baseResults/spv.doWhileLoop.frag.out +++ b/Test/baseResults/spv.doWhileLoop.frag.out @@ -1,6 +1,6 @@ spv.doWhileLoop.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 34 Capability Shader diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out index 800464cca0..f7a4f81112 100644 --- a/Test/baseResults/spv.double.comp.out +++ b/Test/baseResults/spv.double.comp.out @@ -1,6 +1,6 @@ spv.double.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 60 Capability Shader @@ -22,16 +22,16 @@ spv.double.comp Name 49 "aa" Name 54 "globalCoef" Name 59 "destTex" + Decorate 8(bufName) BufferBlock MemberDecorate 8(bufName) 0 Offset 0 MemberDecorate 8(bufName) 1 Offset 8 - Decorate 8(bufName) BufferBlock - Decorate 10(bufInst) DescriptorSet 0 Decorate 10(bufInst) Binding 0 + Decorate 10(bufInst) DescriptorSet 0 Decorate 26(gl_GlobalInvocationID) BuiltIn GlobalInvocationId Decorate 33(gl_LocalInvocationID) BuiltIn LocalInvocationId - Decorate 59(destTex) DescriptorSet 0 - Decorate 59(destTex) Binding 0 Decorate 59(destTex) NonReadable + Decorate 59(destTex) Binding 0 + Decorate 59(destTex) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.drawParams.vert.out b/Test/baseResults/spv.drawParams.vert.out index a8dab45c4f..23ba8a73c4 100644 --- a/Test/baseResults/spv.drawParams.vert.out +++ b/Test/baseResults/spv.drawParams.vert.out @@ -1,6 +1,6 @@ spv.drawParams.vert // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader diff --git a/Test/baseResults/spv.earlyAndlateFragmentTests.frag.out b/Test/baseResults/spv.earlyAndlateFragmentTests.frag.out new file mode 100644 index 0000000000..e5b9a4273a --- /dev/null +++ b/Test/baseResults/spv.earlyAndlateFragmentTests.frag.out @@ -0,0 +1,41 @@ +spv.earlyAndlateFragmentTests.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 16 + + Capability Shader + Extension "SPV_AMD_shader_early_and_late_fragment_tests" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 11 + ExecutionMode 4 OriginUpperLeft + ExecutionMode 4 EarlyAndLateFragmentTestsAMD + ExecutionMode 4 DepthReplacing + ExecutionMode 4 DepthLess + Source GLSL 450 + SourceExtension "GL_ARB_fragment_shader_interlock" + SourceExtension "GL_ARB_shader_stencil_export" + SourceExtension "GL_EXT_fragment_shading_rate" + Name 4 "main" + Name 8 "gl_FragDepth" + Name 11 "instanceIndex" + Decorate 8(gl_FragDepth) BuiltIn FragDepth + Decorate 11(instanceIndex) Flat + Decorate 11(instanceIndex) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Output 6(float) + 8(gl_FragDepth): 7(ptr) Variable Output + 9: TypeInt 32 1 + 10: TypePointer Input 9(int) +11(instanceIndex): 10(ptr) Variable Input + 14: 6(float) Constant 1117913088 + 4(main): 2 Function None 3 + 5: Label + 12: 9(int) Load 11(instanceIndex) + 13: 6(float) ConvertSToF 12 + 15: 6(float) FDiv 13 14 + Store 8(gl_FragDepth) 15 + Return + FunctionEnd diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out index 8f983cb548..273b7753d0 100644 --- a/Test/baseResults/spv.earlyReturnDiscard.frag.out +++ b/Test/baseResults/spv.earlyReturnDiscard.frag.out @@ -1,6 +1,6 @@ spv.earlyReturnDiscard.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 110 Capability Shader diff --git a/Test/baseResults/spv.expect_assume.assumeEXT.comp.out b/Test/baseResults/spv.expect_assume.assumeEXT.comp.out new file mode 100644 index 0000000000..2a1ca7fe7e --- /dev/null +++ b/Test/baseResults/spv.expect_assume.assumeEXT.comp.out @@ -0,0 +1,48 @@ +spv.expect_assume.assumeEXT.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 22 + + Capability Shader + Capability ExpectAssumeKHR + Extension "SPV_KHR_expect_assume" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 8 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_expect_assume" + Name 4 "main" + Name 7 "roblock" + MemberName 7(roblock) 0 "i" + Name 9 "ro" + Decorate 7(roblock) BufferBlock + MemberDecorate 7(roblock) 0 NonWritable + MemberDecorate 7(roblock) 0 Offset 0 + Decorate 9(ro) NonWritable + Decorate 9(ro) Binding 0 + Decorate 9(ro) DescriptorSet 0 + Decorate 21 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7(roblock): TypeStruct 6(int) + 8: TypePointer Uniform 7(roblock) + 9(ro): 8(ptr) Variable Uniform + 10: 6(int) Constant 0 + 11: TypePointer Uniform 6(int) + 14: 6(int) Constant 42 + 15: TypeBool + 17: TypeInt 32 0 + 18: TypeVector 17(int) 3 + 19: 17(int) Constant 8 + 20: 17(int) Constant 1 + 21: 18(ivec3) ConstantComposite 19 20 20 + 4(main): 2 Function None 3 + 5: Label + 12: 11(ptr) AccessChain 9(ro) 10 + 13: 6(int) Load 12 + 16: 15(bool) SGreaterThan 13 14 + AssumeTrueKHR 16 + Return + FunctionEnd diff --git a/Test/baseResults/spv.expect_assume.expectEXT.comp.out b/Test/baseResults/spv.expect_assume.expectEXT.comp.out new file mode 100644 index 0000000000..bb9d073f46 --- /dev/null +++ b/Test/baseResults/spv.expect_assume.expectEXT.comp.out @@ -0,0 +1,277 @@ +spv.expect_assume.expectEXT.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 178 + + Capability Shader + Capability ExpectAssumeKHR + Extension "SPV_KHR_expect_assume" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 8 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_expect_assume" + Name 4 "main" + Name 8 "x" + Name 18 "roblock" + MemberName 18(roblock) 0 "b" + MemberName 18(roblock) 1 "bv2" + MemberName 18(roblock) 2 "bv3" + MemberName 18(roblock) 3 "bv4" + MemberName 18(roblock) 4 "i" + MemberName 18(roblock) 5 "iv2" + MemberName 18(roblock) 6 "iv3" + MemberName 18(roblock) 7 "iv4" + MemberName 18(roblock) 8 "ui" + MemberName 18(roblock) 9 "uv2" + MemberName 18(roblock) 10 "uv3" + MemberName 18(roblock) 11 "uv4" + Name 20 "ro" + Decorate 18(roblock) BufferBlock + MemberDecorate 18(roblock) 0 NonWritable + MemberDecorate 18(roblock) 0 Offset 0 + MemberDecorate 18(roblock) 1 NonWritable + MemberDecorate 18(roblock) 1 Offset 8 + MemberDecorate 18(roblock) 2 NonWritable + MemberDecorate 18(roblock) 2 Offset 16 + MemberDecorate 18(roblock) 3 NonWritable + MemberDecorate 18(roblock) 3 Offset 32 + MemberDecorate 18(roblock) 4 NonWritable + MemberDecorate 18(roblock) 4 Offset 48 + MemberDecorate 18(roblock) 5 NonWritable + MemberDecorate 18(roblock) 5 Offset 56 + MemberDecorate 18(roblock) 6 NonWritable + MemberDecorate 18(roblock) 6 Offset 64 + MemberDecorate 18(roblock) 7 NonWritable + MemberDecorate 18(roblock) 7 Offset 80 + MemberDecorate 18(roblock) 8 NonWritable + MemberDecorate 18(roblock) 8 Offset 96 + MemberDecorate 18(roblock) 9 NonWritable + MemberDecorate 18(roblock) 9 Offset 104 + MemberDecorate 18(roblock) 10 NonWritable + MemberDecorate 18(roblock) 10 Offset 112 + MemberDecorate 18(roblock) 11 NonWritable + MemberDecorate 18(roblock) 11 Offset 128 + Decorate 20(ro) NonWritable + Decorate 20(ro) Binding 0 + Decorate 20(ro) DescriptorSet 0 + Decorate 177 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 10: TypeBool + 11: TypeInt 32 0 + 12: TypeVector 11(int) 2 + 13: TypeVector 11(int) 3 + 14: TypeVector 11(int) 4 + 15: TypeVector 6(int) 2 + 16: TypeVector 6(int) 3 + 17: TypeVector 6(int) 4 + 18(roblock): TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 6(int) 15(ivec2) 16(ivec3) 17(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4) + 19: TypePointer Uniform 18(roblock) + 20(ro): 19(ptr) Variable Uniform + 21: TypePointer Uniform 11(int) + 24: 11(int) Constant 0 + 26: 10(bool) ConstantTrue + 32: 6(int) Constant 1 + 33: TypePointer Uniform 12(ivec2) + 36: TypeVector 10(bool) 2 + 37: 12(ivec2) ConstantComposite 24 24 + 39: 10(bool) ConstantFalse + 40: 36(bvec2) ConstantComposite 26 39 + 48: 6(int) Constant 2 + 49: TypePointer Uniform 13(ivec3) + 52: TypeVector 10(bool) 3 + 53: 13(ivec3) ConstantComposite 24 24 24 + 55: 52(bvec3) ConstantComposite 26 39 26 + 63: 6(int) Constant 3 + 64: TypePointer Uniform 14(ivec4) + 67: TypeVector 10(bool) 4 + 68: 14(ivec4) ConstantComposite 24 24 24 24 + 70: 67(bvec4) ConstantComposite 39 26 39 26 + 79: 6(int) Constant 4 + 80: TypePointer Uniform 6(int) + 83: 6(int) Constant 10 + 89: 6(int) Constant 5 + 90: TypePointer Uniform 15(ivec2) + 93: 6(int) Constant 11 + 94: 6(int) Constant 4294967274 + 95: 15(ivec2) ConstantComposite 93 94 + 103: 6(int) Constant 6 + 104: TypePointer Uniform 16(ivec3) + 107: 6(int) Constant 33 + 108: 16(ivec3) ConstantComposite 93 94 107 + 116: 6(int) Constant 7 + 117: TypePointer Uniform 17(ivec4) + 120: 6(int) Constant 44 + 121: 17(ivec4) ConstantComposite 93 94 107 120 + 130: 6(int) Constant 8 + 133: 11(int) Constant 10 + 139: 6(int) Constant 9 + 142: 11(int) Constant 11 + 143: 11(int) Constant 22 + 144: 12(ivec2) ConstantComposite 142 143 + 154: 11(int) Constant 33 + 155: 13(ivec3) ConstantComposite 142 143 154 + 165: 11(int) Constant 44 + 166: 14(ivec4) ConstantComposite 142 143 154 165 + 175: 11(int) Constant 8 + 176: 11(int) Constant 1 + 177: 13(ivec3) ConstantComposite 175 176 176 + 4(main): 2 Function None 3 + 5: Label + 8(x): 7(ptr) Variable Function + Store 8(x) 9 + 22: 21(ptr) AccessChain 20(ro) 9 + 23: 11(int) Load 22 + 25: 10(bool) INotEqual 23 24 + 27: 10(bool) ExpectKHR 25 26 + 28: 10(bool) LogicalEqual 27 26 + 29: 10(bool) LogicalNot 28 + SelectionMerge 31 None + BranchConditional 29 30 31 + 30: Label + 34: 33(ptr) AccessChain 20(ro) 32 + 35: 12(ivec2) Load 34 + 38: 36(bvec2) INotEqual 35 37 + 41: 36(bvec2) ExpectKHR 38 40 + 42: 36(bvec2) LogicalEqual 41 40 + 43: 10(bool) All 42 + Branch 31 + 31: Label + 44: 10(bool) Phi 28 5 43 30 + 45: 10(bool) LogicalNot 44 + SelectionMerge 47 None + BranchConditional 45 46 47 + 46: Label + 50: 49(ptr) AccessChain 20(ro) 48 + 51: 13(ivec3) Load 50 + 54: 52(bvec3) INotEqual 51 53 + 56: 52(bvec3) ExpectKHR 54 55 + 57: 52(bvec3) LogicalEqual 56 55 + 58: 10(bool) All 57 + Branch 47 + 47: Label + 59: 10(bool) Phi 44 31 58 46 + 60: 10(bool) LogicalNot 59 + SelectionMerge 62 None + BranchConditional 60 61 62 + 61: Label + 65: 64(ptr) AccessChain 20(ro) 63 + 66: 14(ivec4) Load 65 + 69: 67(bvec4) INotEqual 66 68 + 71: 67(bvec4) ExpectKHR 69 70 + 72: 67(bvec4) LogicalEqual 71 70 + 73: 10(bool) All 72 + Branch 62 + 62: Label + 74: 10(bool) Phi 59 47 73 61 + SelectionMerge 76 None + BranchConditional 74 75 76 + 75: Label + 77: 6(int) Load 8(x) + 78: 6(int) IAdd 77 32 + Store 8(x) 78 + Branch 76 + 76: Label + 81: 80(ptr) AccessChain 20(ro) 79 + 82: 6(int) Load 81 + 84: 6(int) ExpectKHR 82 83 + 85: 10(bool) IEqual 84 83 + 86: 10(bool) LogicalNot 85 + SelectionMerge 88 None + BranchConditional 86 87 88 + 87: Label + 91: 90(ptr) AccessChain 20(ro) 89 + 92: 15(ivec2) Load 91 + 96: 15(ivec2) ExpectKHR 92 95 + 97: 36(bvec2) IEqual 96 95 + 98: 10(bool) All 97 + Branch 88 + 88: Label + 99: 10(bool) Phi 85 76 98 87 + 100: 10(bool) LogicalNot 99 + SelectionMerge 102 None + BranchConditional 100 101 102 + 101: Label + 105: 104(ptr) AccessChain 20(ro) 103 + 106: 16(ivec3) Load 105 + 109: 16(ivec3) ExpectKHR 106 108 + 110: 52(bvec3) IEqual 109 108 + 111: 10(bool) All 110 + Branch 102 + 102: Label + 112: 10(bool) Phi 99 88 111 101 + 113: 10(bool) LogicalNot 112 + SelectionMerge 115 None + BranchConditional 113 114 115 + 114: Label + 118: 117(ptr) AccessChain 20(ro) 116 + 119: 17(ivec4) Load 118 + 122: 17(ivec4) ExpectKHR 119 121 + 123: 67(bvec4) IEqual 122 121 + 124: 10(bool) All 123 + Branch 115 + 115: Label + 125: 10(bool) Phi 112 102 124 114 + SelectionMerge 127 None + BranchConditional 125 126 127 + 126: Label + 128: 6(int) Load 8(x) + 129: 6(int) IAdd 128 32 + Store 8(x) 129 + Branch 127 + 127: Label + 131: 21(ptr) AccessChain 20(ro) 130 + 132: 11(int) Load 131 + 134: 11(int) ExpectKHR 132 133 + 135: 10(bool) IEqual 134 133 + 136: 10(bool) LogicalNot 135 + SelectionMerge 138 None + BranchConditional 136 137 138 + 137: Label + 140: 33(ptr) AccessChain 20(ro) 139 + 141: 12(ivec2) Load 140 + 145: 12(ivec2) ExpectKHR 141 144 + 146: 36(bvec2) IEqual 145 144 + 147: 10(bool) All 146 + Branch 138 + 138: Label + 148: 10(bool) Phi 135 127 147 137 + 149: 10(bool) LogicalNot 148 + SelectionMerge 151 None + BranchConditional 149 150 151 + 150: Label + 152: 49(ptr) AccessChain 20(ro) 83 + 153: 13(ivec3) Load 152 + 156: 13(ivec3) ExpectKHR 153 155 + 157: 52(bvec3) IEqual 156 155 + 158: 10(bool) All 157 + Branch 151 + 151: Label + 159: 10(bool) Phi 148 138 158 150 + 160: 10(bool) LogicalNot 159 + SelectionMerge 162 None + BranchConditional 160 161 162 + 161: Label + 163: 64(ptr) AccessChain 20(ro) 93 + 164: 14(ivec4) Load 163 + 167: 14(ivec4) ExpectKHR 164 166 + 168: 67(bvec4) IEqual 167 166 + 169: 10(bool) All 168 + Branch 162 + 162: Label + 170: 10(bool) Phi 159 151 169 161 + SelectionMerge 172 None + BranchConditional 170 171 172 + 171: Label + 173: 6(int) Load 8(x) + 174: 6(int) IAdd 173 32 + Store 8(x) 174 + Branch 172 + 172: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.expect_assume.expectEXT.exttypes.comp.out b/Test/baseResults/spv.expect_assume.expectEXT.exttypes.comp.out new file mode 100644 index 0000000000..f449a63667 --- /dev/null +++ b/Test/baseResults/spv.expect_assume.expectEXT.exttypes.comp.out @@ -0,0 +1,690 @@ +spv.expect_assume.expectEXT.exttypes.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 458 + + Capability Shader + Capability Int64 + Capability Int16 + Capability Int8 + Capability StorageUniformBufferBlock16 + Capability UniformAndStorageBuffer8BitAccess + Capability ExpectAssumeKHR + Extension "SPV_KHR_16bit_storage" + Extension "SPV_KHR_8bit_storage" + Extension "SPV_KHR_expect_assume" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 8 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_expect_assume" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types" + Name 4 "main" + Name 8 "x" + Name 42 "roblock" + MemberName 42(roblock) 0 "i8" + MemberName 42(roblock) 1 "i8v2" + MemberName 42(roblock) 2 "i8v3" + MemberName 42(roblock) 3 "i8v4" + MemberName 42(roblock) 4 "u8" + MemberName 42(roblock) 5 "u8v2" + MemberName 42(roblock) 6 "u8v3" + MemberName 42(roblock) 7 "u8v4" + MemberName 42(roblock) 8 "i16" + MemberName 42(roblock) 9 "i16v2" + MemberName 42(roblock) 10 "i16v3" + MemberName 42(roblock) 11 "i16v4" + MemberName 42(roblock) 12 "u16" + MemberName 42(roblock) 13 "u16v2" + MemberName 42(roblock) 14 "u16v3" + MemberName 42(roblock) 15 "u16v4" + MemberName 42(roblock) 16 "i32" + MemberName 42(roblock) 17 "i32v2" + MemberName 42(roblock) 18 "i32v3" + MemberName 42(roblock) 19 "i32v4" + MemberName 42(roblock) 20 "u32" + MemberName 42(roblock) 21 "u32v2" + MemberName 42(roblock) 22 "u32v3" + MemberName 42(roblock) 23 "u32v4" + MemberName 42(roblock) 24 "i64" + MemberName 42(roblock) 25 "i64v2" + MemberName 42(roblock) 26 "i64v3" + MemberName 42(roblock) 27 "i64v4" + MemberName 42(roblock) 28 "u64" + MemberName 42(roblock) 29 "u64v2" + MemberName 42(roblock) 30 "u64v3" + MemberName 42(roblock) 31 "u64v4" + Name 44 "ro" + Decorate 42(roblock) BufferBlock + MemberDecorate 42(roblock) 0 NonWritable + MemberDecorate 42(roblock) 0 Offset 0 + MemberDecorate 42(roblock) 1 NonWritable + MemberDecorate 42(roblock) 1 Offset 2 + MemberDecorate 42(roblock) 2 NonWritable + MemberDecorate 42(roblock) 2 Offset 4 + MemberDecorate 42(roblock) 3 NonWritable + MemberDecorate 42(roblock) 3 Offset 8 + MemberDecorate 42(roblock) 4 NonWritable + MemberDecorate 42(roblock) 4 Offset 12 + MemberDecorate 42(roblock) 5 NonWritable + MemberDecorate 42(roblock) 5 Offset 14 + MemberDecorate 42(roblock) 6 NonWritable + MemberDecorate 42(roblock) 6 Offset 16 + MemberDecorate 42(roblock) 7 NonWritable + MemberDecorate 42(roblock) 7 Offset 20 + MemberDecorate 42(roblock) 8 NonWritable + MemberDecorate 42(roblock) 8 Offset 24 + MemberDecorate 42(roblock) 9 NonWritable + MemberDecorate 42(roblock) 9 Offset 28 + MemberDecorate 42(roblock) 10 NonWritable + MemberDecorate 42(roblock) 10 Offset 32 + MemberDecorate 42(roblock) 11 NonWritable + MemberDecorate 42(roblock) 11 Offset 40 + MemberDecorate 42(roblock) 12 NonWritable + MemberDecorate 42(roblock) 12 Offset 48 + MemberDecorate 42(roblock) 13 NonWritable + MemberDecorate 42(roblock) 13 Offset 52 + MemberDecorate 42(roblock) 14 NonWritable + MemberDecorate 42(roblock) 14 Offset 56 + MemberDecorate 42(roblock) 15 NonWritable + MemberDecorate 42(roblock) 15 Offset 64 + MemberDecorate 42(roblock) 16 NonWritable + MemberDecorate 42(roblock) 16 Offset 72 + MemberDecorate 42(roblock) 17 NonWritable + MemberDecorate 42(roblock) 17 Offset 80 + MemberDecorate 42(roblock) 18 NonWritable + MemberDecorate 42(roblock) 18 Offset 96 + MemberDecorate 42(roblock) 19 NonWritable + MemberDecorate 42(roblock) 19 Offset 112 + MemberDecorate 42(roblock) 20 NonWritable + MemberDecorate 42(roblock) 20 Offset 128 + MemberDecorate 42(roblock) 21 NonWritable + MemberDecorate 42(roblock) 21 Offset 136 + MemberDecorate 42(roblock) 22 NonWritable + MemberDecorate 42(roblock) 22 Offset 144 + MemberDecorate 42(roblock) 23 NonWritable + MemberDecorate 42(roblock) 23 Offset 160 + MemberDecorate 42(roblock) 24 NonWritable + MemberDecorate 42(roblock) 24 Offset 176 + MemberDecorate 42(roblock) 25 NonWritable + MemberDecorate 42(roblock) 25 Offset 192 + MemberDecorate 42(roblock) 26 NonWritable + MemberDecorate 42(roblock) 26 Offset 224 + MemberDecorate 42(roblock) 27 NonWritable + MemberDecorate 42(roblock) 27 Offset 256 + MemberDecorate 42(roblock) 28 NonWritable + MemberDecorate 42(roblock) 28 Offset 288 + MemberDecorate 42(roblock) 29 NonWritable + MemberDecorate 42(roblock) 29 Offset 304 + MemberDecorate 42(roblock) 30 NonWritable + MemberDecorate 42(roblock) 30 Offset 320 + MemberDecorate 42(roblock) 31 NonWritable + MemberDecorate 42(roblock) 31 Offset 352 + Decorate 44(ro) NonWritable + Decorate 44(ro) Binding 0 + Decorate 44(ro) DescriptorSet 0 + Decorate 457 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 10: TypeBool + 11: TypeInt 8 1 + 12: TypeVector 11(int8_t) 2 + 13: TypeVector 11(int8_t) 3 + 14: TypeVector 11(int8_t) 4 + 15: TypeInt 8 0 + 16: TypeVector 15(int8_t) 2 + 17: TypeVector 15(int8_t) 3 + 18: TypeVector 15(int8_t) 4 + 19: TypeInt 16 1 + 20: TypeVector 19(int16_t) 2 + 21: TypeVector 19(int16_t) 3 + 22: TypeVector 19(int16_t) 4 + 23: TypeInt 16 0 + 24: TypeVector 23(int16_t) 2 + 25: TypeVector 23(int16_t) 3 + 26: TypeVector 23(int16_t) 4 + 27: TypeVector 6(int) 2 + 28: TypeVector 6(int) 3 + 29: TypeVector 6(int) 4 + 30: TypeInt 32 0 + 31: TypeVector 30(int) 2 + 32: TypeVector 30(int) 3 + 33: TypeVector 30(int) 4 + 34: TypeInt 64 1 + 35: TypeVector 34(int64_t) 2 + 36: TypeVector 34(int64_t) 3 + 37: TypeVector 34(int64_t) 4 + 38: TypeInt 64 0 + 39: TypeVector 38(int64_t) 2 + 40: TypeVector 38(int64_t) 3 + 41: TypeVector 38(int64_t) 4 + 42(roblock): TypeStruct 11(int8_t) 12(i8vec2) 13(i8vec3) 14(i8vec4) 15(int8_t) 16(i8vec2) 17(i8vec3) 18(i8vec4) 19(int16_t) 20(i16vec2) 21(i16vec3) 22(i16vec4) 23(int16_t) 24(i16vec2) 25(i16vec3) 26(i16vec4) 6(int) 27(ivec2) 28(ivec3) 29(ivec4) 30(int) 31(ivec2) 32(ivec3) 33(ivec4) 34(int64_t) 35(i64vec2) 36(i64vec3) 37(i64vec4) 38(int64_t) 39(i64vec2) 40(i64vec3) 41(i64vec4) + 43: TypePointer Uniform 42(roblock) + 44(ro): 43(ptr) Variable Uniform + 45: TypePointer Uniform 11(int8_t) + 49: 6(int) Constant 10 + 55: 6(int) Constant 1 + 56: TypePointer Uniform 12(i8vec2) + 59: 11(int8_t) Constant 11 + 60: 11(int8_t) Constant 4294967274 + 61: 12(i8vec2) ConstantComposite 59 60 + 63: TypeVector 10(bool) 2 + 70: 6(int) Constant 2 + 71: TypePointer Uniform 13(i8vec3) + 74: 11(int8_t) Constant 33 + 75: 13(i8vec3) ConstantComposite 59 60 74 + 77: TypeVector 10(bool) 3 + 84: 6(int) Constant 3 + 85: TypePointer Uniform 14(i8vec4) + 88: 11(int8_t) Constant 44 + 89: 14(i8vec4) ConstantComposite 59 60 74 88 + 91: TypeVector 10(bool) 4 + 99: 6(int) Constant 4 + 100: TypePointer Uniform 15(int8_t) + 110: 6(int) Constant 5 + 111: TypePointer Uniform 16(i8vec2) + 114: 15(int8_t) Constant 11 + 115: 15(int8_t) Constant 22 + 116: 16(i8vec2) ConstantComposite 114 115 + 124: 6(int) Constant 6 + 125: TypePointer Uniform 17(i8vec3) + 128: 15(int8_t) Constant 33 + 129: 17(i8vec3) ConstantComposite 114 115 128 + 137: 6(int) Constant 7 + 138: TypePointer Uniform 18(i8vec4) + 141: 15(int8_t) Constant 44 + 142: 18(i8vec4) ConstantComposite 114 115 128 141 + 151: 6(int) Constant 8 + 152: TypePointer Uniform 19(int16_t) + 161: 6(int) Constant 9 + 162: TypePointer Uniform 20(i16vec2) + 165: 19(int16_t) Constant 11 + 166: 19(int16_t) Constant 4294967274 + 167: 20(i16vec2) ConstantComposite 165 166 + 175: TypePointer Uniform 21(i16vec3) + 178: 19(int16_t) Constant 33 + 179: 21(i16vec3) ConstantComposite 165 166 178 + 187: 6(int) Constant 11 + 188: TypePointer Uniform 22(i16vec4) + 191: 19(int16_t) Constant 44 + 192: 22(i16vec4) ConstantComposite 165 166 178 191 + 201: 6(int) Constant 12 + 202: TypePointer Uniform 23(int16_t) + 212: 6(int) Constant 13 + 213: TypePointer Uniform 24(i16vec2) + 216: 23(int16_t) Constant 11 + 217: 23(int16_t) Constant 22 + 218: 24(i16vec2) ConstantComposite 216 217 + 226: 6(int) Constant 14 + 227: TypePointer Uniform 25(i16vec3) + 230: 23(int16_t) Constant 33 + 231: 25(i16vec3) ConstantComposite 216 217 230 + 239: 6(int) Constant 15 + 240: TypePointer Uniform 26(i16vec4) + 243: 23(int16_t) Constant 44 + 244: 26(i16vec4) ConstantComposite 216 217 230 243 + 253: 6(int) Constant 16 + 254: TypePointer Uniform 6(int) + 262: 6(int) Constant 17 + 263: TypePointer Uniform 27(ivec2) + 266: 6(int) Constant 4294967274 + 267: 27(ivec2) ConstantComposite 187 266 + 275: 6(int) Constant 18 + 276: TypePointer Uniform 28(ivec3) + 279: 6(int) Constant 33 + 280: 28(ivec3) ConstantComposite 187 266 279 + 288: 6(int) Constant 19 + 289: TypePointer Uniform 29(ivec4) + 292: 6(int) Constant 44 + 293: 29(ivec4) ConstantComposite 187 266 279 292 + 302: 6(int) Constant 20 + 303: TypePointer Uniform 30(int) + 306: 30(int) Constant 10 + 312: 6(int) Constant 21 + 313: TypePointer Uniform 31(ivec2) + 316: 30(int) Constant 11 + 317: 30(int) Constant 22 + 318: 31(ivec2) ConstantComposite 316 317 + 326: 6(int) Constant 22 + 327: TypePointer Uniform 32(ivec3) + 330: 30(int) Constant 33 + 331: 32(ivec3) ConstantComposite 316 317 330 + 339: 6(int) Constant 23 + 340: TypePointer Uniform 33(ivec4) + 343: 30(int) Constant 44 + 344: 33(ivec4) ConstantComposite 316 317 330 343 + 353: 6(int) Constant 24 + 354: TypePointer Uniform 34(int64_t) + 357: 34(int64_t) Constant 10 0 + 363: 6(int) Constant 25 + 364: TypePointer Uniform 35(i64vec2) + 367: 34(int64_t) Constant 11 0 + 368: 34(int64_t) Constant 4294967274 4294967295 + 369: 35(i64vec2) ConstantComposite 367 368 + 377: 6(int) Constant 26 + 378: TypePointer Uniform 36(i64vec3) + 381: 34(int64_t) Constant 33 0 + 382: 36(i64vec3) ConstantComposite 367 368 381 + 390: 6(int) Constant 27 + 391: TypePointer Uniform 37(i64vec4) + 394: 34(int64_t) Constant 44 0 + 395: 37(i64vec4) ConstantComposite 367 368 381 394 + 404: 6(int) Constant 28 + 405: TypePointer Uniform 38(int64_t) + 408: 38(int64_t) Constant 10 0 + 414: 6(int) Constant 29 + 415: TypePointer Uniform 39(i64vec2) + 418: 38(int64_t) Constant 11 0 + 419: 38(int64_t) Constant 22 0 + 420: 39(i64vec2) ConstantComposite 418 419 + 428: 6(int) Constant 30 + 429: TypePointer Uniform 40(i64vec3) + 432: 38(int64_t) Constant 33 0 + 433: 40(i64vec3) ConstantComposite 418 419 432 + 441: 6(int) Constant 31 + 442: TypePointer Uniform 41(i64vec4) + 445: 38(int64_t) Constant 44 0 + 446: 41(i64vec4) ConstantComposite 418 419 432 445 + 455: 30(int) Constant 8 + 456: 30(int) Constant 1 + 457: 32(ivec3) ConstantComposite 455 456 456 + 4(main): 2 Function None 3 + 5: Label + 8(x): 7(ptr) Variable Function + Store 8(x) 9 + 46: 45(ptr) AccessChain 44(ro) 9 + 47: 11(int8_t) Load 46 + 48: 6(int) SConvert 47 + 50: 6(int) ExpectKHR 48 49 + 51: 10(bool) IEqual 50 49 + 52: 10(bool) LogicalNot 51 + SelectionMerge 54 None + BranchConditional 52 53 54 + 53: Label + 57: 56(ptr) AccessChain 44(ro) 55 + 58: 12(i8vec2) Load 57 + 62: 12(i8vec2) ExpectKHR 58 61 + 64: 63(bvec2) IEqual 62 61 + 65: 10(bool) All 64 + Branch 54 + 54: Label + 66: 10(bool) Phi 51 5 65 53 + 67: 10(bool) LogicalNot 66 + SelectionMerge 69 None + BranchConditional 67 68 69 + 68: Label + 72: 71(ptr) AccessChain 44(ro) 70 + 73: 13(i8vec3) Load 72 + 76: 13(i8vec3) ExpectKHR 73 75 + 78: 77(bvec3) IEqual 76 75 + 79: 10(bool) All 78 + Branch 69 + 69: Label + 80: 10(bool) Phi 66 54 79 68 + 81: 10(bool) LogicalNot 80 + SelectionMerge 83 None + BranchConditional 81 82 83 + 82: Label + 86: 85(ptr) AccessChain 44(ro) 84 + 87: 14(i8vec4) Load 86 + 90: 14(i8vec4) ExpectKHR 87 89 + 92: 91(bvec4) IEqual 90 89 + 93: 10(bool) All 92 + Branch 83 + 83: Label + 94: 10(bool) Phi 80 69 93 82 + SelectionMerge 96 None + BranchConditional 94 95 96 + 95: Label + 97: 6(int) Load 8(x) + 98: 6(int) IAdd 97 55 + Store 8(x) 98 + Branch 96 + 96: Label + 101: 100(ptr) AccessChain 44(ro) 99 + 102: 15(int8_t) Load 101 + 103: 30(int) UConvert 102 + 104: 6(int) Bitcast 103 + 105: 6(int) ExpectKHR 104 49 + 106: 10(bool) IEqual 105 49 + 107: 10(bool) LogicalNot 106 + SelectionMerge 109 None + BranchConditional 107 108 109 + 108: Label + 112: 111(ptr) AccessChain 44(ro) 110 + 113: 16(i8vec2) Load 112 + 117: 16(i8vec2) ExpectKHR 113 116 + 118: 63(bvec2) IEqual 117 116 + 119: 10(bool) All 118 + Branch 109 + 109: Label + 120: 10(bool) Phi 106 96 119 108 + 121: 10(bool) LogicalNot 120 + SelectionMerge 123 None + BranchConditional 121 122 123 + 122: Label + 126: 125(ptr) AccessChain 44(ro) 124 + 127: 17(i8vec3) Load 126 + 130: 17(i8vec3) ExpectKHR 127 129 + 131: 77(bvec3) IEqual 130 129 + 132: 10(bool) All 131 + Branch 123 + 123: Label + 133: 10(bool) Phi 120 109 132 122 + 134: 10(bool) LogicalNot 133 + SelectionMerge 136 None + BranchConditional 134 135 136 + 135: Label + 139: 138(ptr) AccessChain 44(ro) 137 + 140: 18(i8vec4) Load 139 + 143: 18(i8vec4) ExpectKHR 140 142 + 144: 91(bvec4) IEqual 143 142 + 145: 10(bool) All 144 + Branch 136 + 136: Label + 146: 10(bool) Phi 133 123 145 135 + SelectionMerge 148 None + BranchConditional 146 147 148 + 147: Label + 149: 6(int) Load 8(x) + 150: 6(int) IAdd 149 55 + Store 8(x) 150 + Branch 148 + 148: Label + 153: 152(ptr) AccessChain 44(ro) 151 + 154: 19(int16_t) Load 153 + 155: 6(int) SConvert 154 + 156: 6(int) ExpectKHR 155 49 + 157: 10(bool) IEqual 156 49 + 158: 10(bool) LogicalNot 157 + SelectionMerge 160 None + BranchConditional 158 159 160 + 159: Label + 163: 162(ptr) AccessChain 44(ro) 161 + 164: 20(i16vec2) Load 163 + 168: 20(i16vec2) ExpectKHR 164 167 + 169: 63(bvec2) IEqual 168 167 + 170: 10(bool) All 169 + Branch 160 + 160: Label + 171: 10(bool) Phi 157 148 170 159 + 172: 10(bool) LogicalNot 171 + SelectionMerge 174 None + BranchConditional 172 173 174 + 173: Label + 176: 175(ptr) AccessChain 44(ro) 49 + 177: 21(i16vec3) Load 176 + 180: 21(i16vec3) ExpectKHR 177 179 + 181: 77(bvec3) IEqual 180 179 + 182: 10(bool) All 181 + Branch 174 + 174: Label + 183: 10(bool) Phi 171 160 182 173 + 184: 10(bool) LogicalNot 183 + SelectionMerge 186 None + BranchConditional 184 185 186 + 185: Label + 189: 188(ptr) AccessChain 44(ro) 187 + 190: 22(i16vec4) Load 189 + 193: 22(i16vec4) ExpectKHR 190 192 + 194: 91(bvec4) IEqual 193 192 + 195: 10(bool) All 194 + Branch 186 + 186: Label + 196: 10(bool) Phi 183 174 195 185 + SelectionMerge 198 None + BranchConditional 196 197 198 + 197: Label + 199: 6(int) Load 8(x) + 200: 6(int) IAdd 199 55 + Store 8(x) 200 + Branch 198 + 198: Label + 203: 202(ptr) AccessChain 44(ro) 201 + 204: 23(int16_t) Load 203 + 205: 30(int) UConvert 204 + 206: 6(int) Bitcast 205 + 207: 6(int) ExpectKHR 206 49 + 208: 10(bool) IEqual 207 49 + 209: 10(bool) LogicalNot 208 + SelectionMerge 211 None + BranchConditional 209 210 211 + 210: Label + 214: 213(ptr) AccessChain 44(ro) 212 + 215: 24(i16vec2) Load 214 + 219: 24(i16vec2) ExpectKHR 215 218 + 220: 63(bvec2) IEqual 219 218 + 221: 10(bool) All 220 + Branch 211 + 211: Label + 222: 10(bool) Phi 208 198 221 210 + 223: 10(bool) LogicalNot 222 + SelectionMerge 225 None + BranchConditional 223 224 225 + 224: Label + 228: 227(ptr) AccessChain 44(ro) 226 + 229: 25(i16vec3) Load 228 + 232: 25(i16vec3) ExpectKHR 229 231 + 233: 77(bvec3) IEqual 232 231 + 234: 10(bool) All 233 + Branch 225 + 225: Label + 235: 10(bool) Phi 222 211 234 224 + 236: 10(bool) LogicalNot 235 + SelectionMerge 238 None + BranchConditional 236 237 238 + 237: Label + 241: 240(ptr) AccessChain 44(ro) 239 + 242: 26(i16vec4) Load 241 + 245: 26(i16vec4) ExpectKHR 242 244 + 246: 91(bvec4) IEqual 245 244 + 247: 10(bool) All 246 + Branch 238 + 238: Label + 248: 10(bool) Phi 235 225 247 237 + SelectionMerge 250 None + BranchConditional 248 249 250 + 249: Label + 251: 6(int) Load 8(x) + 252: 6(int) IAdd 251 55 + Store 8(x) 252 + Branch 250 + 250: Label + 255: 254(ptr) AccessChain 44(ro) 253 + 256: 6(int) Load 255 + 257: 6(int) ExpectKHR 256 49 + 258: 10(bool) IEqual 257 49 + 259: 10(bool) LogicalNot 258 + SelectionMerge 261 None + BranchConditional 259 260 261 + 260: Label + 264: 263(ptr) AccessChain 44(ro) 262 + 265: 27(ivec2) Load 264 + 268: 27(ivec2) ExpectKHR 265 267 + 269: 63(bvec2) IEqual 268 267 + 270: 10(bool) All 269 + Branch 261 + 261: Label + 271: 10(bool) Phi 258 250 270 260 + 272: 10(bool) LogicalNot 271 + SelectionMerge 274 None + BranchConditional 272 273 274 + 273: Label + 277: 276(ptr) AccessChain 44(ro) 275 + 278: 28(ivec3) Load 277 + 281: 28(ivec3) ExpectKHR 278 280 + 282: 77(bvec3) IEqual 281 280 + 283: 10(bool) All 282 + Branch 274 + 274: Label + 284: 10(bool) Phi 271 261 283 273 + 285: 10(bool) LogicalNot 284 + SelectionMerge 287 None + BranchConditional 285 286 287 + 286: Label + 290: 289(ptr) AccessChain 44(ro) 288 + 291: 29(ivec4) Load 290 + 294: 29(ivec4) ExpectKHR 291 293 + 295: 91(bvec4) IEqual 294 293 + 296: 10(bool) All 295 + Branch 287 + 287: Label + 297: 10(bool) Phi 284 274 296 286 + SelectionMerge 299 None + BranchConditional 297 298 299 + 298: Label + 300: 6(int) Load 8(x) + 301: 6(int) IAdd 300 55 + Store 8(x) 301 + Branch 299 + 299: Label + 304: 303(ptr) AccessChain 44(ro) 302 + 305: 30(int) Load 304 + 307: 30(int) ExpectKHR 305 306 + 308: 10(bool) IEqual 307 306 + 309: 10(bool) LogicalNot 308 + SelectionMerge 311 None + BranchConditional 309 310 311 + 310: Label + 314: 313(ptr) AccessChain 44(ro) 312 + 315: 31(ivec2) Load 314 + 319: 31(ivec2) ExpectKHR 315 318 + 320: 63(bvec2) IEqual 319 318 + 321: 10(bool) All 320 + Branch 311 + 311: Label + 322: 10(bool) Phi 308 299 321 310 + 323: 10(bool) LogicalNot 322 + SelectionMerge 325 None + BranchConditional 323 324 325 + 324: Label + 328: 327(ptr) AccessChain 44(ro) 326 + 329: 32(ivec3) Load 328 + 332: 32(ivec3) ExpectKHR 329 331 + 333: 77(bvec3) IEqual 332 331 + 334: 10(bool) All 333 + Branch 325 + 325: Label + 335: 10(bool) Phi 322 311 334 324 + 336: 10(bool) LogicalNot 335 + SelectionMerge 338 None + BranchConditional 336 337 338 + 337: Label + 341: 340(ptr) AccessChain 44(ro) 339 + 342: 33(ivec4) Load 341 + 345: 33(ivec4) ExpectKHR 342 344 + 346: 91(bvec4) IEqual 345 344 + 347: 10(bool) All 346 + Branch 338 + 338: Label + 348: 10(bool) Phi 335 325 347 337 + SelectionMerge 350 None + BranchConditional 348 349 350 + 349: Label + 351: 6(int) Load 8(x) + 352: 6(int) IAdd 351 55 + Store 8(x) 352 + Branch 350 + 350: Label + 355: 354(ptr) AccessChain 44(ro) 353 + 356: 34(int64_t) Load 355 + 358: 34(int64_t) ExpectKHR 356 357 + 359: 10(bool) IEqual 358 357 + 360: 10(bool) LogicalNot 359 + SelectionMerge 362 None + BranchConditional 360 361 362 + 361: Label + 365: 364(ptr) AccessChain 44(ro) 363 + 366: 35(i64vec2) Load 365 + 370: 35(i64vec2) ExpectKHR 366 369 + 371: 63(bvec2) IEqual 370 369 + 372: 10(bool) All 371 + Branch 362 + 362: Label + 373: 10(bool) Phi 359 350 372 361 + 374: 10(bool) LogicalNot 373 + SelectionMerge 376 None + BranchConditional 374 375 376 + 375: Label + 379: 378(ptr) AccessChain 44(ro) 377 + 380: 36(i64vec3) Load 379 + 383: 36(i64vec3) ExpectKHR 380 382 + 384: 77(bvec3) IEqual 383 382 + 385: 10(bool) All 384 + Branch 376 + 376: Label + 386: 10(bool) Phi 373 362 385 375 + 387: 10(bool) LogicalNot 386 + SelectionMerge 389 None + BranchConditional 387 388 389 + 388: Label + 392: 391(ptr) AccessChain 44(ro) 390 + 393: 37(i64vec4) Load 392 + 396: 37(i64vec4) ExpectKHR 393 395 + 397: 91(bvec4) IEqual 396 395 + 398: 10(bool) All 397 + Branch 389 + 389: Label + 399: 10(bool) Phi 386 376 398 388 + SelectionMerge 401 None + BranchConditional 399 400 401 + 400: Label + 402: 6(int) Load 8(x) + 403: 6(int) IAdd 402 55 + Store 8(x) 403 + Branch 401 + 401: Label + 406: 405(ptr) AccessChain 44(ro) 404 + 407: 38(int64_t) Load 406 + 409: 38(int64_t) ExpectKHR 407 408 + 410: 10(bool) IEqual 409 408 + 411: 10(bool) LogicalNot 410 + SelectionMerge 413 None + BranchConditional 411 412 413 + 412: Label + 416: 415(ptr) AccessChain 44(ro) 414 + 417: 39(i64vec2) Load 416 + 421: 39(i64vec2) ExpectKHR 417 420 + 422: 63(bvec2) IEqual 421 420 + 423: 10(bool) All 422 + Branch 413 + 413: Label + 424: 10(bool) Phi 410 401 423 412 + 425: 10(bool) LogicalNot 424 + SelectionMerge 427 None + BranchConditional 425 426 427 + 426: Label + 430: 429(ptr) AccessChain 44(ro) 428 + 431: 40(i64vec3) Load 430 + 434: 40(i64vec3) ExpectKHR 431 433 + 435: 77(bvec3) IEqual 434 433 + 436: 10(bool) All 435 + Branch 427 + 427: Label + 437: 10(bool) Phi 424 413 436 426 + 438: 10(bool) LogicalNot 437 + SelectionMerge 440 None + BranchConditional 438 439 440 + 439: Label + 443: 442(ptr) AccessChain 44(ro) 441 + 444: 41(i64vec4) Load 443 + 447: 41(i64vec4) ExpectKHR 444 446 + 448: 91(bvec4) IEqual 447 446 + 449: 10(bool) All 448 + Branch 440 + 440: Label + 450: 10(bool) Phi 437 427 449 439 + SelectionMerge 452 None + BranchConditional 450 451 452 + 451: Label + 453: 6(int) Load 8(x) + 454: 6(int) IAdd 453 55 + Store 8(x) 454 + Branch 452 + 452: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.explicittypes.frag.out b/Test/baseResults/spv.explicittypes.frag.out index 3382872020..eec771a964 100644 --- a/Test/baseResults/spv.explicittypes.frag.out +++ b/Test/baseResults/spv.explicittypes.frag.out @@ -1,7 +1,7 @@ spv.explicittypes.frag // Module Version 10300 -// Generated by (magic number): 8000a -// Id's are bound by 576 +// Generated by (magic number): 8000b +// Id's are bound by 567 Capability Shader Capability Float16 @@ -80,63 +80,63 @@ spv.explicittypes.frag Name 399 "f64v" Name 406 "i8v" Name 412 "i16v" - Name 429 "u8v" - Name 435 "u16v" - Name 452 "f16v" - Name 465 "bv" - Name 481 "u64v" - Name 482 "i64v" - Name 485 "f64v" - Name 490 "i8v" - Name 496 "i16v" - Name 502 "i32v" - Name 510 "u8v" - Name 516 "u16v" - Name 522 "u32v" - Name 534 "f16v" - Name 537 "f32v" - Name 548 "bv" - Name 573 "Block" - MemberName 573(Block) 0 "i16" - MemberName 573(Block) 1 "i16v2" - MemberName 573(Block) 2 "i16v3" - MemberName 573(Block) 3 "i16v4" - MemberName 573(Block) 4 "u16" - MemberName 573(Block) 5 "u16v2" - MemberName 573(Block) 6 "u16v3" - MemberName 573(Block) 7 "u16v4" - MemberName 573(Block) 8 "i32" - MemberName 573(Block) 9 "i32v2" - MemberName 573(Block) 10 "i32v3" - MemberName 573(Block) 11 "i32v4" - MemberName 573(Block) 12 "u32" - MemberName 573(Block) 13 "u32v2" - MemberName 573(Block) 14 "u32v3" - MemberName 573(Block) 15 "u32v4" - Name 575 "block" - MemberDecorate 26(Uniforms) 0 Offset 0 + Name 426 "u8v" + Name 432 "u16v" + Name 446 "f16v" + Name 459 "bv" + Name 475 "u64v" + Name 476 "i64v" + Name 479 "f64v" + Name 484 "i8v" + Name 490 "i16v" + Name 496 "i32v" + Name 504 "u8v" + Name 510 "u16v" + Name 516 "u32v" + Name 525 "f16v" + Name 528 "f32v" + Name 539 "bv" + Name 564 "Block" + MemberName 564(Block) 0 "i16" + MemberName 564(Block) 1 "i16v2" + MemberName 564(Block) 2 "i16v3" + MemberName 564(Block) 3 "i16v4" + MemberName 564(Block) 4 "u16" + MemberName 564(Block) 5 "u16v2" + MemberName 564(Block) 6 "u16v3" + MemberName 564(Block) 7 "u16v4" + MemberName 564(Block) 8 "i32" + MemberName 564(Block) 9 "i32v2" + MemberName 564(Block) 10 "i32v3" + MemberName 564(Block) 11 "i32v4" + MemberName 564(Block) 12 "u32" + MemberName 564(Block) 13 "u32v2" + MemberName 564(Block) 14 "u32v3" + MemberName 564(Block) 15 "u32v4" + Name 566 "block" Decorate 26(Uniforms) Block - Decorate 28 DescriptorSet 0 + MemberDecorate 26(Uniforms) 0 Offset 0 Decorate 28 Binding 0 - MemberDecorate 573(Block) 0 Offset 0 - MemberDecorate 573(Block) 1 Offset 4 - MemberDecorate 573(Block) 2 Offset 8 - MemberDecorate 573(Block) 3 Offset 16 - MemberDecorate 573(Block) 4 Offset 24 - MemberDecorate 573(Block) 5 Offset 28 - MemberDecorate 573(Block) 6 Offset 32 - MemberDecorate 573(Block) 7 Offset 40 - MemberDecorate 573(Block) 8 Offset 48 - MemberDecorate 573(Block) 9 Offset 56 - MemberDecorate 573(Block) 10 Offset 64 - MemberDecorate 573(Block) 11 Offset 80 - MemberDecorate 573(Block) 12 Offset 96 - MemberDecorate 573(Block) 13 Offset 104 - MemberDecorate 573(Block) 14 Offset 112 - MemberDecorate 573(Block) 15 Offset 128 - Decorate 573(Block) Block - Decorate 575(block) DescriptorSet 0 - Decorate 575(block) Binding 1 + Decorate 28 DescriptorSet 0 + Decorate 564(Block) Block + MemberDecorate 564(Block) 0 Offset 0 + MemberDecorate 564(Block) 1 Offset 4 + MemberDecorate 564(Block) 2 Offset 8 + MemberDecorate 564(Block) 3 Offset 16 + MemberDecorate 564(Block) 4 Offset 24 + MemberDecorate 564(Block) 5 Offset 28 + MemberDecorate 564(Block) 6 Offset 32 + MemberDecorate 564(Block) 7 Offset 40 + MemberDecorate 564(Block) 8 Offset 48 + MemberDecorate 564(Block) 9 Offset 56 + MemberDecorate 564(Block) 10 Offset 64 + MemberDecorate 564(Block) 11 Offset 80 + MemberDecorate 564(Block) 12 Offset 96 + MemberDecorate 564(Block) 13 Offset 104 + MemberDecorate 564(Block) 14 Offset 112 + MemberDecorate 564(Block) 15 Offset 128 + Decorate 566(block) Binding 1 + Decorate 566(block) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 16: TypeInt 64 1 @@ -249,32 +249,32 @@ spv.explicittypes.frag 372: 91(int16_t) Constant 1 373:145(i16vec2) ConstantComposite 371 371 374:145(i16vec2) ConstantComposite 372 372 - 467: 29(int) Constant 1 - 468: 148(ivec2) ConstantComposite 30 30 - 469: 148(ivec2) ConstantComposite 467 467 - 472: 19(int) Constant 0 - 473: 19(int) Constant 1 - 474: 154(ivec2) ConstantComposite 472 472 - 475: 154(ivec2) ConstantComposite 473 473 - 550: 16(int64_t) Constant 0 0 - 551: 16(int64_t) Constant 1 0 - 552:162(i64vec2) ConstantComposite 550 550 - 553:162(i64vec2) ConstantComposite 551 551 - 556: 38(int64_t) Constant 0 0 - 557: 38(int64_t) Constant 1 0 - 558:167(i64vec2) ConstantComposite 556 556 - 559:167(i64vec2) ConstantComposite 557 557 - 565: TypeVector 77(int16_t) 3 - 566: TypeVector 77(int16_t) 4 - 567: TypeVector 91(int16_t) 3 - 568: TypeVector 91(int16_t) 4 - 569: TypeVector 29(int) 3 - 570: TypeVector 29(int) 4 - 571: TypeVector 19(int) 3 - 572: TypeVector 19(int) 4 - 573(Block): TypeStruct 77(int16_t) 139(i16vec2) 565(i16vec3) 566(i16vec4) 91(int16_t) 145(i16vec2) 567(i16vec3) 568(i16vec4) 29(int) 148(ivec2) 569(ivec3) 570(ivec4) 19(int) 154(ivec2) 571(ivec3) 572(ivec4) - 574: TypePointer Uniform 573(Block) - 575(block): 574(ptr) Variable Uniform + 461: 29(int) Constant 1 + 462: 148(ivec2) ConstantComposite 30 30 + 463: 148(ivec2) ConstantComposite 461 461 + 466: 19(int) Constant 0 + 467: 19(int) Constant 1 + 468: 154(ivec2) ConstantComposite 466 466 + 469: 154(ivec2) ConstantComposite 467 467 + 541: 16(int64_t) Constant 0 0 + 542: 16(int64_t) Constant 1 0 + 543:162(i64vec2) ConstantComposite 541 541 + 544:162(i64vec2) ConstantComposite 542 542 + 547: 38(int64_t) Constant 0 0 + 548: 38(int64_t) Constant 1 0 + 549:167(i64vec2) ConstantComposite 547 547 + 550:167(i64vec2) ConstantComposite 548 548 + 556: TypeVector 77(int16_t) 3 + 557: TypeVector 77(int16_t) 4 + 558: TypeVector 91(int16_t) 3 + 559: TypeVector 91(int16_t) 4 + 560: TypeVector 29(int) 3 + 561: TypeVector 29(int) 4 + 562: TypeVector 19(int) 3 + 563: TypeVector 19(int) 4 + 564(Block): TypeStruct 77(int16_t) 139(i16vec2) 556(i16vec3) 557(i16vec4) 91(int16_t) 145(i16vec2) 558(i16vec3) 559(i16vec4) 29(int) 148(ivec2) 560(ivec3) 561(ivec4) 19(int) 154(ivec2) 562(ivec3) 563(ivec4) + 565: TypePointer Uniform 564(Block) + 566(block): 565(ptr) Variable Uniform 4(main): 2 Function None 3 5: Label Return @@ -649,10 +649,10 @@ spv.explicittypes.frag 399(f64v): 194(ptr) Variable Function 406(i8v): 135(ptr) Variable Function 412(i16v): 140(ptr) Variable Function - 429(u8v): 132(ptr) Variable Function - 435(u16v): 221(ptr) Variable Function - 452(f16v): 182(ptr) Variable Function - 465(bv): 251(ptr) Variable Function + 426(u8v): 132(ptr) Variable Function + 432(u16v): 221(ptr) Variable Function + 446(f16v): 182(ptr) Variable Function + 459(bv): 251(ptr) Variable Function 382: 148(ivec2) Load 381(i32v) 383: 154(ivec2) Bitcast 382 Store 380(u32v) 383 @@ -697,186 +697,177 @@ spv.explicittypes.frag 417:139(i16vec2) Bitcast 416 Store 412(i16v) 417 418: 148(ivec2) Load 381(i32v) - 419: 29(int) CompositeExtract 418 0 - 420: 29(int) CompositeExtract 418 1 - 421: 148(ivec2) CompositeConstruct 419 420 - Store 381(i32v) 421 - 422: 154(ivec2) Load 380(u32v) - 423: 148(ivec2) Bitcast 422 - Store 381(i32v) 423 - 424: 148(ivec2) Load 381(i32v) - 425:162(i64vec2) SConvert 424 + Store 381(i32v) 418 + 419: 154(ivec2) Load 380(u32v) + 420: 148(ivec2) Bitcast 419 + Store 381(i32v) 420 + 421: 148(ivec2) Load 381(i32v) + 422:162(i64vec2) SConvert 421 + Store 384(i64v) 422 + 423: 154(ivec2) Load 380(u32v) + 424:167(i64vec2) UConvert 423 + 425:162(i64vec2) Bitcast 424 Store 384(i64v) 425 - 426: 154(ivec2) Load 380(u32v) - 427:167(i64vec2) UConvert 426 - 428:162(i64vec2) Bitcast 427 - Store 384(i64v) 428 - 430: 148(ivec2) Load 381(i32v) - 431: 134(i8vec2) SConvert 430 - 432: 131(i8vec2) Bitcast 431 - Store 429(u8v) 432 - 433: 154(ivec2) Load 380(u32v) - 434: 131(i8vec2) UConvert 433 - Store 429(u8v) 434 - 436: 148(ivec2) Load 381(i32v) - 437:139(i16vec2) SConvert 436 - 438:145(i16vec2) Bitcast 437 - Store 435(u16v) 438 - 439: 154(ivec2) Load 380(u32v) - 440:145(i16vec2) UConvert 439 - Store 435(u16v) 440 + 427: 148(ivec2) Load 381(i32v) + 428: 134(i8vec2) SConvert 427 + 429: 131(i8vec2) Bitcast 428 + Store 426(u8v) 429 + 430: 154(ivec2) Load 380(u32v) + 431: 131(i8vec2) UConvert 430 + Store 426(u8v) 431 + 433: 148(ivec2) Load 381(i32v) + 434:139(i16vec2) SConvert 433 + 435:145(i16vec2) Bitcast 434 + Store 432(u16v) 435 + 436: 154(ivec2) Load 380(u32v) + 437:145(i16vec2) UConvert 436 + Store 432(u16v) 437 + 438: 148(ivec2) Load 381(i32v) + 439: 154(ivec2) Bitcast 438 + Store 380(u32v) 439 + 440: 154(ivec2) Load 380(u32v) + Store 380(u32v) 440 441: 148(ivec2) Load 381(i32v) - 442: 154(ivec2) Bitcast 441 - Store 380(u32v) 442 - 443: 154(ivec2) Load 380(u32v) - 444: 19(int) CompositeExtract 443 0 - 445: 19(int) CompositeExtract 443 1 - 446: 154(ivec2) CompositeConstruct 444 445 - Store 380(u32v) 446 + 442:162(i64vec2) SConvert 441 + 443:167(i64vec2) Bitcast 442 + Store 387(u64v) 443 + 444: 154(ivec2) Load 380(u32v) + 445:167(i64vec2) UConvert 444 + Store 387(u64v) 445 447: 148(ivec2) Load 381(i32v) - 448:162(i64vec2) SConvert 447 - 449:167(i64vec2) Bitcast 448 - Store 387(u64v) 449 - 450: 154(ivec2) Load 380(u32v) - 451:167(i64vec2) UConvert 450 - Store 387(u64v) 451 - 453: 148(ivec2) Load 381(i32v) - 454:181(f16vec2) ConvertSToF 453 - Store 452(f16v) 454 - 455: 148(ivec2) Load 381(i32v) - 456: 187(fvec2) ConvertSToF 455 + 448:181(f16vec2) ConvertSToF 447 + Store 446(f16v) 448 + 449: 148(ivec2) Load 381(i32v) + 450: 187(fvec2) ConvertSToF 449 + Store 396(f32v) 450 + 451: 148(ivec2) Load 381(i32v) + 452:193(f64vec2) ConvertSToF 451 + Store 399(f64v) 452 + 453: 154(ivec2) Load 380(u32v) + 454:181(f16vec2) ConvertUToF 453 + Store 446(f16v) 454 + 455: 154(ivec2) Load 380(u32v) + 456: 187(fvec2) ConvertUToF 455 Store 396(f32v) 456 - 457: 148(ivec2) Load 381(i32v) - 458:193(f64vec2) ConvertSToF 457 + 457: 154(ivec2) Load 380(u32v) + 458:193(f64vec2) ConvertUToF 457 Store 399(f64v) 458 - 459: 154(ivec2) Load 380(u32v) - 460:181(f16vec2) ConvertUToF 459 - Store 452(f16v) 460 - 461: 154(ivec2) Load 380(u32v) - 462: 187(fvec2) ConvertUToF 461 - Store 396(f32v) 462 - 463: 154(ivec2) Load 380(u32v) - 464:193(f64vec2) ConvertUToF 463 - Store 399(f64v) 464 - 466: 250(bvec2) Load 465(bv) - 470: 148(ivec2) Select 466 469 468 - Store 381(i32v) 470 - 471: 250(bvec2) Load 465(bv) - 476: 154(ivec2) Select 471 475 474 - Store 380(u32v) 476 - 477: 148(ivec2) Load 381(i32v) - 478: 250(bvec2) INotEqual 477 474 - Store 465(bv) 478 - 479: 154(ivec2) Load 380(u32v) - 480: 250(bvec2) INotEqual 479 474 - Store 465(bv) 480 + 460: 250(bvec2) Load 459(bv) + 464: 148(ivec2) Select 460 463 462 + Store 381(i32v) 464 + 465: 250(bvec2) Load 459(bv) + 470: 154(ivec2) Select 465 469 468 + Store 380(u32v) 470 + 471: 148(ivec2) Load 381(i32v) + 472: 250(bvec2) INotEqual 471 468 + Store 459(bv) 472 + 473: 154(ivec2) Load 380(u32v) + 474: 250(bvec2) INotEqual 473 468 + Store 459(bv) 474 Return FunctionEnd 14(typeCast64(): 2 Function None 3 15: Label - 481(u64v): 168(ptr) Variable Function - 482(i64v): 163(ptr) Variable Function - 485(f64v): 194(ptr) Variable Function - 490(i8v): 135(ptr) Variable Function - 496(i16v): 140(ptr) Variable Function - 502(i32v): 149(ptr) Variable Function - 510(u8v): 132(ptr) Variable Function - 516(u16v): 221(ptr) Variable Function - 522(u32v): 157(ptr) Variable Function - 534(f16v): 182(ptr) Variable Function - 537(f32v): 188(ptr) Variable Function - 548(bv): 251(ptr) Variable Function - 483:162(i64vec2) Load 482(i64v) - 484:167(i64vec2) Bitcast 483 - Store 481(u64v) 484 - 486:162(i64vec2) Load 482(i64v) - 487:193(f64vec2) ConvertSToF 486 - Store 485(f64v) 487 - 488:167(i64vec2) Load 481(u64v) - 489:193(f64vec2) ConvertUToF 488 - Store 485(f64v) 489 - 491:162(i64vec2) Load 482(i64v) - 492: 134(i8vec2) SConvert 491 - Store 490(i8v) 492 - 493:167(i64vec2) Load 481(u64v) - 494: 131(i8vec2) UConvert 493 - 495: 134(i8vec2) Bitcast 494 - Store 490(i8v) 495 - 497:162(i64vec2) Load 482(i64v) - 498:139(i16vec2) SConvert 497 - Store 496(i16v) 498 - 499:167(i64vec2) Load 481(u64v) - 500:145(i16vec2) UConvert 499 - 501:139(i16vec2) Bitcast 500 - Store 496(i16v) 501 - 503:162(i64vec2) Load 482(i64v) - 504: 148(ivec2) SConvert 503 - Store 502(i32v) 504 - 505:167(i64vec2) Load 481(u64v) - 506: 154(ivec2) UConvert 505 - 507: 148(ivec2) Bitcast 506 - Store 502(i32v) 507 - 508:167(i64vec2) Load 481(u64v) - 509:162(i64vec2) Bitcast 508 - Store 482(i64v) 509 - 511:162(i64vec2) Load 482(i64v) - 512: 134(i8vec2) SConvert 511 - 513: 131(i8vec2) Bitcast 512 - Store 510(u8v) 513 - 514:167(i64vec2) Load 481(u64v) - 515: 131(i8vec2) UConvert 514 - Store 510(u8v) 515 - 517:162(i64vec2) Load 482(i64v) - 518:139(i16vec2) SConvert 517 - 519:145(i16vec2) Bitcast 518 - Store 516(u16v) 519 - 520:167(i64vec2) Load 481(u64v) - 521:145(i16vec2) UConvert 520 - Store 516(u16v) 521 - 523:162(i64vec2) Load 482(i64v) - 524: 148(ivec2) SConvert 523 - 525: 154(ivec2) Bitcast 524 - Store 522(u32v) 525 - 526:167(i64vec2) Load 481(u64v) - 527: 154(ivec2) UConvert 526 - Store 522(u32v) 527 - 528:162(i64vec2) Load 482(i64v) - 529:167(i64vec2) Bitcast 528 - Store 481(u64v) 529 - 530:167(i64vec2) Load 481(u64v) - 531: 38(int64_t) CompositeExtract 530 0 - 532: 38(int64_t) CompositeExtract 530 1 - 533:167(i64vec2) CompositeConstruct 531 532 - Store 481(u64v) 533 - 535:162(i64vec2) Load 482(i64v) - 536:181(f16vec2) ConvertSToF 535 - Store 534(f16v) 536 - 538:162(i64vec2) Load 482(i64v) - 539: 187(fvec2) ConvertSToF 538 - Store 537(f32v) 539 - 540:162(i64vec2) Load 482(i64v) - 541:193(f64vec2) ConvertSToF 540 - Store 485(f64v) 541 - 542:167(i64vec2) Load 481(u64v) - 543:181(f16vec2) ConvertUToF 542 - Store 534(f16v) 543 - 544:167(i64vec2) Load 481(u64v) - 545: 187(fvec2) ConvertUToF 544 - Store 537(f32v) 545 - 546:167(i64vec2) Load 481(u64v) - 547:193(f64vec2) ConvertUToF 546 - Store 485(f64v) 547 - 549: 250(bvec2) Load 548(bv) - 554:162(i64vec2) Select 549 553 552 - Store 482(i64v) 554 - 555: 250(bvec2) Load 548(bv) - 560:167(i64vec2) Select 555 559 558 - Store 481(u64v) 560 - 561:162(i64vec2) Load 482(i64v) - 562: 250(bvec2) INotEqual 561 558 - Store 548(bv) 562 - 563:167(i64vec2) Load 481(u64v) - 564: 250(bvec2) INotEqual 563 558 - Store 548(bv) 564 + 475(u64v): 168(ptr) Variable Function + 476(i64v): 163(ptr) Variable Function + 479(f64v): 194(ptr) Variable Function + 484(i8v): 135(ptr) Variable Function + 490(i16v): 140(ptr) Variable Function + 496(i32v): 149(ptr) Variable Function + 504(u8v): 132(ptr) Variable Function + 510(u16v): 221(ptr) Variable Function + 516(u32v): 157(ptr) Variable Function + 525(f16v): 182(ptr) Variable Function + 528(f32v): 188(ptr) Variable Function + 539(bv): 251(ptr) Variable Function + 477:162(i64vec2) Load 476(i64v) + 478:167(i64vec2) Bitcast 477 + Store 475(u64v) 478 + 480:162(i64vec2) Load 476(i64v) + 481:193(f64vec2) ConvertSToF 480 + Store 479(f64v) 481 + 482:167(i64vec2) Load 475(u64v) + 483:193(f64vec2) ConvertUToF 482 + Store 479(f64v) 483 + 485:162(i64vec2) Load 476(i64v) + 486: 134(i8vec2) SConvert 485 + Store 484(i8v) 486 + 487:167(i64vec2) Load 475(u64v) + 488: 131(i8vec2) UConvert 487 + 489: 134(i8vec2) Bitcast 488 + Store 484(i8v) 489 + 491:162(i64vec2) Load 476(i64v) + 492:139(i16vec2) SConvert 491 + Store 490(i16v) 492 + 493:167(i64vec2) Load 475(u64v) + 494:145(i16vec2) UConvert 493 + 495:139(i16vec2) Bitcast 494 + Store 490(i16v) 495 + 497:162(i64vec2) Load 476(i64v) + 498: 148(ivec2) SConvert 497 + Store 496(i32v) 498 + 499:167(i64vec2) Load 475(u64v) + 500: 154(ivec2) UConvert 499 + 501: 148(ivec2) Bitcast 500 + Store 496(i32v) 501 + 502:167(i64vec2) Load 475(u64v) + 503:162(i64vec2) Bitcast 502 + Store 476(i64v) 503 + 505:162(i64vec2) Load 476(i64v) + 506: 134(i8vec2) SConvert 505 + 507: 131(i8vec2) Bitcast 506 + Store 504(u8v) 507 + 508:167(i64vec2) Load 475(u64v) + 509: 131(i8vec2) UConvert 508 + Store 504(u8v) 509 + 511:162(i64vec2) Load 476(i64v) + 512:139(i16vec2) SConvert 511 + 513:145(i16vec2) Bitcast 512 + Store 510(u16v) 513 + 514:167(i64vec2) Load 475(u64v) + 515:145(i16vec2) UConvert 514 + Store 510(u16v) 515 + 517:162(i64vec2) Load 476(i64v) + 518: 148(ivec2) SConvert 517 + 519: 154(ivec2) Bitcast 518 + Store 516(u32v) 519 + 520:167(i64vec2) Load 475(u64v) + 521: 154(ivec2) UConvert 520 + Store 516(u32v) 521 + 522:162(i64vec2) Load 476(i64v) + 523:167(i64vec2) Bitcast 522 + Store 475(u64v) 523 + 524:167(i64vec2) Load 475(u64v) + Store 475(u64v) 524 + 526:162(i64vec2) Load 476(i64v) + 527:181(f16vec2) ConvertSToF 526 + Store 525(f16v) 527 + 529:162(i64vec2) Load 476(i64v) + 530: 187(fvec2) ConvertSToF 529 + Store 528(f32v) 530 + 531:162(i64vec2) Load 476(i64v) + 532:193(f64vec2) ConvertSToF 531 + Store 479(f64v) 532 + 533:167(i64vec2) Load 475(u64v) + 534:181(f16vec2) ConvertUToF 533 + Store 525(f16v) 534 + 535:167(i64vec2) Load 475(u64v) + 536: 187(fvec2) ConvertUToF 535 + Store 528(f32v) 536 + 537:167(i64vec2) Load 475(u64v) + 538:193(f64vec2) ConvertUToF 537 + Store 479(f64v) 538 + 540: 250(bvec2) Load 539(bv) + 545:162(i64vec2) Select 540 544 543 + Store 476(i64v) 545 + 546: 250(bvec2) Load 539(bv) + 551:167(i64vec2) Select 546 550 549 + Store 475(u64v) 551 + 552:162(i64vec2) Load 476(i64v) + 553: 250(bvec2) INotEqual 552 549 + Store 539(bv) 553 + 554:167(i64vec2) Load 475(u64v) + 555: 250(bvec2) INotEqual 554 549 + Store 539(bv) 555 Return FunctionEnd diff --git a/Test/baseResults/spv.exportFunctions.comp.out b/Test/baseResults/spv.exportFunctions.comp.out new file mode 100644 index 0000000000..958cf680e8 --- /dev/null +++ b/Test/baseResults/spv.exportFunctions.comp.out @@ -0,0 +1,36 @@ +spv.exportFunctions.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 22 + + Capability Shader + Capability Linkage + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + Source GLSL 450 + Name 7 "add(f1;f1;" + Name 5 "a" + Name 6 "b" + Name 11 "foo(" + Decorate 7(add(f1;f1;) Linkage Attributes 6579297 0 + Decorate 11(foo() Linkage Attributes 7303014 0 + 2: TypeFloat 32 + 3: TypePointer Function 2(float) + 4: TypeFunction 2(float) 3(ptr) 3(ptr) + 9: TypeInt 32 1 + 10: TypeFunction 9(int) + 17: TypeVoid + 19: 9(int) Constant 0 + 7(add(f1;f1;): 2(float) Function None 4 + 5(a): 3(ptr) FunctionParameter + 6(b): 3(ptr) FunctionParameter + 8: Label + 13: 2(float) Load 5(a) + 14: 2(float) Load 6(b) + 15: 2(float) FAdd 13 14 + ReturnValue 15 + FunctionEnd + 11(foo(): 9(int) Function None 10 + 12: Label + ReturnValue 19 + FunctionEnd diff --git a/Test/baseResults/spv.ext.AccelDecl.frag.out b/Test/baseResults/spv.ext.AccelDecl.frag.out index 11d456065f..9b41897336 100644 --- a/Test/baseResults/spv.ext.AccelDecl.frag.out +++ b/Test/baseResults/spv.ext.AccelDecl.frag.out @@ -1,6 +1,6 @@ spv.ext.AccelDecl.frag // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 15 Capability Shader @@ -21,8 +21,8 @@ spv.ext.AccelDecl.frag Name 9 "outColor" Name 14 "topLevelAS" Decorate 9(outColor) Location 0 - Decorate 14(topLevelAS) DescriptorSet 0 Decorate 14(topLevelAS) Binding 1 + Decorate 14(topLevelAS) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out index df779bdd66..76e6738d08 100644 --- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out @@ -1,16 +1,22 @@ spv.ext.AnyHitShader.rahit // Module Version 10400 -// Generated by (magic number): 8000a -// Id's are bound by 107 +// Generated by (magic number): 8000b +// Id's are bound by 115 Capability GroupNonUniform Capability RayTracingKHR + Capability RayTracingPositionFetchKHR + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" + Extension "SPV_KHR_ray_tracing_position_fetch" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 98 + EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 57 63 66 69 81 87 92 106 Source GLSL 460 + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_EXT_ray_tracing_position_fetch" SourceExtension "GL_KHR_shader_subgroup_basic" Name 4 "main" Name 9 "v0" @@ -36,21 +42,22 @@ spv.ext.AnyHitShader.rahit Name 49 "v10" Name 50 "gl_RayTmaxEXT" Name 52 "v11" - Name 53 "gl_HitTEXT" - Name 56 "v12" - Name 58 "gl_HitKindEXT" - Name 62 "v13" - Name 64 "gl_ObjectToWorldEXT" - Name 66 "v14" - Name 67 "gl_WorldToObjectEXT" - Name 69 "v15" - Name 70 "gl_GeometryIndexEXT" - Name 75 "v16" - Name 76 "gl_ObjectToWorld3x4EXT" - Name 79 "v17" - Name 80 "gl_WorldToObject3x4EXT" - Name 84 "incomingPayload" - Name 98 "gl_SubgroupSize" + Name 55 "v12" + Name 57 "gl_HitKindEXT" + Name 61 "v13" + Name 63 "gl_ObjectToWorldEXT" + Name 65 "v14" + Name 66 "gl_WorldToObjectEXT" + Name 68 "v15" + Name 69 "gl_GeometryIndexEXT" + Name 74 "v16" + Name 77 "v17" + Name 80 "v18" + Name 81 "gl_CullMaskEXT" + Name 83 "v19" + Name 87 "gl_HitTriangleVertexPositionsEXT" + Name 92 "incomingPayload" + Name 106 "gl_SubgroupSize" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -62,17 +69,16 @@ spv.ext.AnyHitShader.rahit Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR - Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR - Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR - Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR - Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR - Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR - Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR - Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 98(gl_SubgroupSize) RelaxedPrecision - Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize - Decorate 99 RelaxedPrecision - Decorate 100 RelaxedPrecision + Decorate 57(gl_HitKindEXT) BuiltIn HitKindKHR + Decorate 63(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR + Decorate 66(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR + Decorate 69(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR + Decorate 81(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 87(gl_HitTriangleVertexPositionsEXT) BuiltIn HitTriangleVertexPositionsKHR + Decorate 106(gl_SubgroupSize) RelaxedPrecision + Decorate 106(gl_SubgroupSize) BuiltIn SubgroupSize + Decorate 107 RelaxedPrecision + Decorate 108 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -99,30 +105,33 @@ spv.ext.AnyHitShader.rahit 46: TypePointer Input 28(float) 47(gl_RayTminEXT): 46(ptr) Variable Input 50(gl_RayTmaxEXT): 46(ptr) Variable Input - 53(gl_HitTEXT): 46(ptr) Variable Input - 55: TypePointer Function 6(int) - 57: TypePointer Input 6(int) -58(gl_HitKindEXT): 57(ptr) Variable Input - 60: TypeMatrix 29(fvec3) 4 - 61: TypePointer Function 60 - 63: TypePointer Input 60 -64(gl_ObjectToWorldEXT): 63(ptr) Variable Input -67(gl_WorldToObjectEXT): 63(ptr) Variable Input -70(gl_GeometryIndexEXT): 19(ptr) Variable Input - 72: TypeVector 28(float) 4 - 73: TypeMatrix 72(fvec4) 3 - 74: TypePointer Function 73 -76(gl_ObjectToWorld3x4EXT): 63(ptr) Variable Input -80(gl_WorldToObject3x4EXT): 63(ptr) Variable Input - 83: TypePointer IncomingRayPayloadKHR 72(fvec4) -84(incomingPayload): 83(ptr) Variable IncomingRayPayloadKHR - 85: 28(float) Constant 1056964608 - 86: 72(fvec4) ConstantComposite 85 85 85 85 - 88: 16(int) Constant 1 - 89: TypeBool - 94: 6(int) Constant 0 -98(gl_SubgroupSize): 57(ptr) Variable Input - 101: TypePointer IncomingRayPayloadKHR 28(float) + 54: TypePointer Function 6(int) + 56: TypePointer Input 6(int) +57(gl_HitKindEXT): 56(ptr) Variable Input + 59: TypeMatrix 29(fvec3) 4 + 60: TypePointer Function 59 + 62: TypePointer Input 59 +63(gl_ObjectToWorldEXT): 62(ptr) Variable Input +66(gl_WorldToObjectEXT): 62(ptr) Variable Input +69(gl_GeometryIndexEXT): 19(ptr) Variable Input + 71: TypeVector 28(float) 4 + 72: TypeMatrix 71(fvec4) 3 + 73: TypePointer Function 72 +81(gl_CullMaskEXT): 56(ptr) Variable Input + 84: 6(int) Constant 3 + 85: TypeArray 29(fvec3) 84 + 86: TypePointer Input 85 +87(gl_HitTriangleVertexPositionsEXT): 86(ptr) Variable Input + 88: 16(int) Constant 0 + 91: TypePointer IncomingRayPayloadKHR 71(fvec4) +92(incomingPayload): 91(ptr) Variable IncomingRayPayloadKHR + 93: 28(float) Constant 1056964608 + 94: 71(fvec4) ConstantComposite 93 93 93 93 + 96: 16(int) Constant 1 + 97: TypeBool + 102: 6(int) Constant 0 +106(gl_SubgroupSize): 56(ptr) Variable Input + 109: TypePointer IncomingRayPayloadKHR 28(float) 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -137,12 +146,14 @@ spv.ext.AnyHitShader.rahit 45(v9): 44(ptr) Variable Function 49(v10): 44(ptr) Variable Function 52(v11): 44(ptr) Variable Function - 56(v12): 55(ptr) Variable Function - 62(v13): 61(ptr) Variable Function - 66(v14): 61(ptr) Variable Function - 69(v15): 17(ptr) Variable Function - 75(v16): 74(ptr) Variable Function - 79(v17): 74(ptr) Variable Function + 55(v12): 54(ptr) Variable Function + 61(v13): 60(ptr) Variable Function + 65(v14): 60(ptr) Variable Function + 68(v15): 17(ptr) Variable Function + 74(v16): 73(ptr) Variable Function + 77(v17): 73(ptr) Variable Function + 80(v18): 54(ptr) Variable Function + 83(v19): 30(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -165,36 +176,41 @@ spv.ext.AnyHitShader.rahit Store 45(v9) 48 51: 28(float) Load 50(gl_RayTmaxEXT) Store 49(v10) 51 - 54: 28(float) Load 53(gl_HitTEXT) - Store 52(v11) 54 - 59: 6(int) Load 58(gl_HitKindEXT) - Store 56(v12) 59 - 65: 60 Load 64(gl_ObjectToWorldEXT) - Store 62(v13) 65 - 68: 60 Load 67(gl_WorldToObjectEXT) - Store 66(v14) 68 - 71: 16(int) Load 70(gl_GeometryIndexEXT) - Store 69(v15) 71 - 77: 60 Load 76(gl_ObjectToWorld3x4EXT) - 78: 73 Transpose 77 - Store 75(v16) 78 - 81: 60 Load 80(gl_WorldToObject3x4EXT) - 82: 73 Transpose 81 - Store 79(v17) 82 - Store 84(incomingPayload) 86 - 87: 16(int) Load 18(v2) - 90: 89(bool) IEqual 87 88 - SelectionMerge 92 None - BranchConditional 90 91 92 - 91: Label + 53: 28(float) Load 50(gl_RayTmaxEXT) + Store 52(v11) 53 + 58: 6(int) Load 57(gl_HitKindEXT) + Store 55(v12) 58 + 64: 59 Load 63(gl_ObjectToWorldEXT) + Store 61(v13) 64 + 67: 59 Load 66(gl_WorldToObjectEXT) + Store 65(v14) 67 + 70: 16(int) Load 69(gl_GeometryIndexEXT) + Store 68(v15) 70 + 75: 59 Load 63(gl_ObjectToWorldEXT) + 76: 72 Transpose 75 + Store 74(v16) 76 + 78: 59 Load 66(gl_WorldToObjectEXT) + 79: 72 Transpose 78 + Store 77(v17) 79 + 82: 6(int) Load 81(gl_CullMaskEXT) + Store 80(v18) 82 + 89: 32(ptr) AccessChain 87(gl_HitTriangleVertexPositionsEXT) 88 + 90: 29(fvec3) Load 89 + Store 83(v19) 90 + Store 92(incomingPayload) 94 + 95: 16(int) Load 18(v2) + 98: 97(bool) IEqual 95 96 + SelectionMerge 100 None + BranchConditional 98 99 100 + 99: Label IgnoreIntersectionKHR - 92: Label - 99: 6(int) Load 98(gl_SubgroupSize) - 100: 28(float) ConvertUToF 99 - 102: 101(ptr) AccessChain 84(incomingPayload) 94 - 103: 28(float) Load 102 - 104: 28(float) FAdd 103 100 - 105: 101(ptr) AccessChain 84(incomingPayload) 94 - Store 105 104 + 100: Label + 107: 6(int) Load 106(gl_SubgroupSize) + 108: 28(float) ConvertUToF 107 + 110: 109(ptr) AccessChain 92(incomingPayload) 102 + 111: 28(float) Load 110 + 112: 28(float) FAdd 111 108 + 113: 109(ptr) AccessChain 92(incomingPayload) 102 + Store 113 112 TerminateRayKHR FunctionEnd diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out index 9a4eb288a9..3a47f1eaeb 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out @@ -1,15 +1,21 @@ spv.ext.ClosestHitShader.rchit // Module Version 10400 -// Generated by (magic number): 8000a -// Id's are bound by 101 +// Generated by (magic number): 8000b +// Id's are bound by 108 Capability RayTracingKHR + Capability RayTracingPositionFetchKHR + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" + Extension "SPV_KHR_ray_tracing_position_fetch" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint ClosestHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 85 98 100 + EntryPoint ClosestHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 57 63 66 69 81 87 93 105 107 Source GLSL 460 + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_EXT_ray_tracing_position_fetch" Name 4 "main" Name 9 "v0" Name 11 "gl_LaunchIDEXT" @@ -34,22 +40,23 @@ spv.ext.ClosestHitShader.rchit Name 49 "v10" Name 50 "gl_RayTmaxEXT" Name 52 "v11" - Name 53 "gl_HitTEXT" - Name 56 "v12" - Name 58 "gl_HitKindEXT" - Name 62 "v13" - Name 64 "gl_ObjectToWorldEXT" - Name 66 "v14" - Name 67 "gl_WorldToObjectEXT" - Name 69 "v15" - Name 70 "gl_GeometryIndexEXT" - Name 75 "v16" - Name 76 "gl_ObjectToWorld3x4EXT" - Name 79 "v17" - Name 80 "gl_WorldToObject3x4EXT" - Name 85 "accEXT" - Name 98 "incomingPayload" - Name 100 "localPayload" + Name 55 "v12" + Name 57 "gl_HitKindEXT" + Name 61 "v13" + Name 63 "gl_ObjectToWorldEXT" + Name 65 "v14" + Name 66 "gl_WorldToObjectEXT" + Name 68 "v15" + Name 69 "gl_GeometryIndexEXT" + Name 74 "v16" + Name 77 "v17" + Name 80 "v18" + Name 81 "gl_CullMaskEXT" + Name 83 "v19" + Name 87 "gl_HitTriangleVertexPositionsEXT" + Name 93 "accEXT" + Name 105 "incomingPayload" + Name 107 "localPayload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -61,15 +68,14 @@ spv.ext.ClosestHitShader.rchit Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR - Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR - Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR - Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR - Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR - Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR - Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR - Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 85(accEXT) DescriptorSet 0 - Decorate 85(accEXT) Binding 0 + Decorate 57(gl_HitKindEXT) BuiltIn HitKindKHR + Decorate 63(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR + Decorate 66(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR + Decorate 69(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR + Decorate 81(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 87(gl_HitTriangleVertexPositionsEXT) BuiltIn HitTriangleVertexPositionsKHR + Decorate 93(accEXT) Binding 0 + Decorate 93(accEXT) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -96,38 +102,40 @@ spv.ext.ClosestHitShader.rchit 46: TypePointer Input 28(float) 47(gl_RayTminEXT): 46(ptr) Variable Input 50(gl_RayTmaxEXT): 46(ptr) Variable Input - 53(gl_HitTEXT): 46(ptr) Variable Input - 55: TypePointer Function 6(int) - 57: TypePointer Input 6(int) -58(gl_HitKindEXT): 57(ptr) Variable Input - 60: TypeMatrix 29(fvec3) 4 - 61: TypePointer Function 60 - 63: TypePointer Input 60 -64(gl_ObjectToWorldEXT): 63(ptr) Variable Input -67(gl_WorldToObjectEXT): 63(ptr) Variable Input -70(gl_GeometryIndexEXT): 19(ptr) Variable Input - 72: TypeVector 28(float) 4 - 73: TypeMatrix 72(fvec4) 3 - 74: TypePointer Function 73 -76(gl_ObjectToWorld3x4EXT): 63(ptr) Variable Input -80(gl_WorldToObject3x4EXT): 63(ptr) Variable Input - 83: TypeAccelerationStructureKHR - 84: TypePointer UniformConstant 83 - 85(accEXT): 84(ptr) Variable UniformConstant - 87: 6(int) Constant 0 - 88: 6(int) Constant 1 - 89: 6(int) Constant 2 - 90: 6(int) Constant 3 - 91: 28(float) Constant 1056964608 - 92: 29(fvec3) ConstantComposite 91 91 91 - 93: 28(float) Constant 1065353216 - 94: 29(fvec3) ConstantComposite 93 93 93 - 95: 28(float) Constant 1061158912 - 96: 16(int) Constant 1 - 97: TypePointer IncomingRayPayloadKHR 72(fvec4) -98(incomingPayload): 97(ptr) Variable IncomingRayPayloadKHR - 99: TypePointer RayPayloadKHR 72(fvec4) -100(localPayload): 99(ptr) Variable RayPayloadKHR + 54: TypePointer Function 6(int) + 56: TypePointer Input 6(int) +57(gl_HitKindEXT): 56(ptr) Variable Input + 59: TypeMatrix 29(fvec3) 4 + 60: TypePointer Function 59 + 62: TypePointer Input 59 +63(gl_ObjectToWorldEXT): 62(ptr) Variable Input +66(gl_WorldToObjectEXT): 62(ptr) Variable Input +69(gl_GeometryIndexEXT): 19(ptr) Variable Input + 71: TypeVector 28(float) 4 + 72: TypeMatrix 71(fvec4) 3 + 73: TypePointer Function 72 +81(gl_CullMaskEXT): 56(ptr) Variable Input + 84: 6(int) Constant 3 + 85: TypeArray 29(fvec3) 84 + 86: TypePointer Input 85 +87(gl_HitTriangleVertexPositionsEXT): 86(ptr) Variable Input + 88: 16(int) Constant 0 + 91: TypeAccelerationStructureKHR + 92: TypePointer UniformConstant 91 + 93(accEXT): 92(ptr) Variable UniformConstant + 95: 6(int) Constant 0 + 96: 6(int) Constant 1 + 97: 6(int) Constant 2 + 98: 28(float) Constant 1056964608 + 99: 29(fvec3) ConstantComposite 98 98 98 + 100: 28(float) Constant 1065353216 + 101: 29(fvec3) ConstantComposite 100 100 100 + 102: 28(float) Constant 1061158912 + 103: 16(int) Constant 1 + 104: TypePointer IncomingRayPayloadKHR 71(fvec4) +105(incomingPayload): 104(ptr) Variable IncomingRayPayloadKHR + 106: TypePointer RayPayloadKHR 71(fvec4) +107(localPayload): 106(ptr) Variable RayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -142,12 +150,14 @@ spv.ext.ClosestHitShader.rchit 45(v9): 44(ptr) Variable Function 49(v10): 44(ptr) Variable Function 52(v11): 44(ptr) Variable Function - 56(v12): 55(ptr) Variable Function - 62(v13): 61(ptr) Variable Function - 66(v14): 61(ptr) Variable Function - 69(v15): 17(ptr) Variable Function - 75(v16): 74(ptr) Variable Function - 79(v17): 74(ptr) Variable Function + 55(v12): 54(ptr) Variable Function + 61(v13): 60(ptr) Variable Function + 65(v14): 60(ptr) Variable Function + 68(v15): 17(ptr) Variable Function + 74(v16): 73(ptr) Variable Function + 77(v17): 73(ptr) Variable Function + 80(v18): 54(ptr) Variable Function + 83(v19): 30(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -170,23 +180,28 @@ spv.ext.ClosestHitShader.rchit Store 45(v9) 48 51: 28(float) Load 50(gl_RayTmaxEXT) Store 49(v10) 51 - 54: 28(float) Load 53(gl_HitTEXT) - Store 52(v11) 54 - 59: 6(int) Load 58(gl_HitKindEXT) - Store 56(v12) 59 - 65: 60 Load 64(gl_ObjectToWorldEXT) - Store 62(v13) 65 - 68: 60 Load 67(gl_WorldToObjectEXT) - Store 66(v14) 68 - 71: 16(int) Load 70(gl_GeometryIndexEXT) - Store 69(v15) 71 - 77: 60 Load 76(gl_ObjectToWorld3x4EXT) - 78: 73 Transpose 77 - Store 75(v16) 78 - 81: 60 Load 80(gl_WorldToObject3x4EXT) - 82: 73 Transpose 81 - Store 79(v17) 82 - 86: 83 Load 85(accEXT) - TraceRayKHR 86 87 88 89 90 87 92 91 94 95 98(incomingPayload) + 53: 28(float) Load 50(gl_RayTmaxEXT) + Store 52(v11) 53 + 58: 6(int) Load 57(gl_HitKindEXT) + Store 55(v12) 58 + 64: 59 Load 63(gl_ObjectToWorldEXT) + Store 61(v13) 64 + 67: 59 Load 66(gl_WorldToObjectEXT) + Store 65(v14) 67 + 70: 16(int) Load 69(gl_GeometryIndexEXT) + Store 68(v15) 70 + 75: 59 Load 63(gl_ObjectToWorldEXT) + 76: 72 Transpose 75 + Store 74(v16) 76 + 78: 59 Load 66(gl_WorldToObjectEXT) + 79: 72 Transpose 78 + Store 77(v17) 79 + 82: 6(int) Load 81(gl_CullMaskEXT) + Store 80(v18) 82 + 89: 32(ptr) AccessChain 87(gl_HitTriangleVertexPositionsEXT) 88 + 90: 29(fvec3) Load 89 + Store 83(v19) 90 + 94: 91 Load 93(accEXT) + TraceRayKHR 94 95 96 97 84 95 99 98 101 102 105(incomingPayload) Return FunctionEnd diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out index 24ab4f46c3..28a5470096 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out @@ -1,6 +1,6 @@ spv.ext.ClosestHitShader_Subgroup.rchit // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 67 Capability Int64 @@ -32,8 +32,8 @@ spv.ext.ClosestHitShader_Subgroup.rchit Name 48 "gl_SubgroupLeMask" Name 53 "gl_SubGroupLtMaskARB" Name 61 "gl_SMIDNV" - Decorate 8(accEXT) DescriptorSet 0 Decorate 8(accEXT) Binding 0 + Decorate 8(accEXT) DescriptorSet 0 Decorate 28(gl_SubgroupInvocationID) RelaxedPrecision Decorate 28(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 29 RelaxedPrecision @@ -43,11 +43,9 @@ spv.ext.ClosestHitShader_Subgroup.rchit Decorate 42 RelaxedPrecision Decorate 43(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR Decorate 46 RelaxedPrecision - Decorate 46 RelaxedPrecision Decorate 47 RelaxedPrecision Decorate 48(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR Decorate 51 RelaxedPrecision - Decorate 51 RelaxedPrecision Decorate 52 RelaxedPrecision Decorate 53(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR Decorate 59 RelaxedPrecision diff --git a/Test/baseResults/spv.ext.IntersectShader.rint.out b/Test/baseResults/spv.ext.IntersectShader.rint.out index 2d389a0c50..fad466bb37 100644 --- a/Test/baseResults/spv.ext.IntersectShader.rint.out +++ b/Test/baseResults/spv.ext.IntersectShader.rint.out @@ -1,14 +1,17 @@ spv.ext.IntersectShader.rint // Module Version 10400 -// Generated by (magic number): 8000a -// Id's are bound by 81 +// Generated by (magic number): 8000b +// Id's are bound by 84 Capability RayTracingKHR + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint IntersectionKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 65 69 73 + EntryPoint IntersectionKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 73 76 Source GLSL 460 + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" Name 4 "main" Name 9 "v0" @@ -38,10 +41,10 @@ spv.ext.IntersectShader.rint Name 58 "v12" Name 59 "gl_WorldToObjectEXT" Name 64 "v13" - Name 65 "gl_ObjectToWorld3x4EXT" - Name 68 "v14" - Name 69 "gl_WorldToObject3x4EXT" - Name 73 "iAttr" + Name 67 "v14" + Name 71 "v15" + Name 73 "gl_CullMaskEXT" + Name 76 "iAttr" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -57,8 +60,7 @@ spv.ext.IntersectShader.rint Decorate 50(gl_RayTmaxEXT) Coherent Decorate 56(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR - Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR - Decorate 69(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR + Decorate 73(gl_CullMaskEXT) BuiltIn CullMaskKHR 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -93,16 +95,17 @@ spv.ext.IntersectShader.rint 61: TypeVector 28(float) 4 62: TypeMatrix 61(fvec4) 3 63: TypePointer Function 62 -65(gl_ObjectToWorld3x4EXT): 55(ptr) Variable Input -69(gl_WorldToObject3x4EXT): 55(ptr) Variable Input - 72: TypePointer HitAttributeKHR 61(fvec4) - 73(iAttr): 72(ptr) Variable HitAttributeKHR - 74: 28(float) Constant 1056964608 - 75: 28(float) Constant 0 - 76: 28(float) Constant 1065353216 - 77: 61(fvec4) ConstantComposite 74 74 75 76 - 78: 6(int) Constant 1 - 79: TypeBool + 70: TypePointer Function 6(int) + 72: TypePointer Input 6(int) +73(gl_CullMaskEXT): 72(ptr) Variable Input + 75: TypePointer HitAttributeKHR 61(fvec4) + 76(iAttr): 75(ptr) Variable HitAttributeKHR + 77: 28(float) Constant 1056964608 + 78: 28(float) Constant 0 + 79: 28(float) Constant 1065353216 + 80: 61(fvec4) ConstantComposite 77 77 78 79 + 81: 6(int) Constant 1 + 82: TypeBool 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -119,7 +122,8 @@ spv.ext.IntersectShader.rint 54(v11): 53(ptr) Variable Function 58(v12): 53(ptr) Variable Function 64(v13): 63(ptr) Variable Function - 68(v14): 63(ptr) Variable Function + 67(v14): 63(ptr) Variable Function + 71(v15): 70(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -146,13 +150,15 @@ spv.ext.IntersectShader.rint Store 54(v11) 57 60: 52 Load 59(gl_WorldToObjectEXT) Store 58(v12) 60 - 66: 52 Load 65(gl_ObjectToWorld3x4EXT) - 67: 62 Transpose 66 - Store 64(v13) 67 - 70: 52 Load 69(gl_WorldToObject3x4EXT) - 71: 62 Transpose 70 - Store 68(v14) 71 - Store 73(iAttr) 77 - 80: 79(bool) ReportIntersectionKHR 74 78 + 65: 52 Load 56(gl_ObjectToWorldEXT) + 66: 62 Transpose 65 + Store 64(v13) 66 + 68: 52 Load 59(gl_WorldToObjectEXT) + 69: 62 Transpose 68 + Store 67(v14) 69 + 74: 6(int) Load 73(gl_CullMaskEXT) + Store 71(v15) 74 + Store 76(iAttr) 80 + 83: 82(bool) ReportIntersectionKHR 77 81 Return FunctionEnd diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out index 1acd5ae660..d03c5c38b1 100644 --- a/Test/baseResults/spv.ext.MissShader.rmiss.out +++ b/Test/baseResults/spv.ext.MissShader.rmiss.out @@ -1,7 +1,7 @@ spv.ext.MissShader.rmiss // Module Version 10400 -// Generated by (magic number): 8000a -// Id's are bound by 90 +// Generated by (magic number): 8000b +// Id's are bound by 92 Capability MinLod Capability GroupNonUniform @@ -9,15 +9,18 @@ spv.ext.MissShader.rmiss Capability SubgroupBallotKHR Capability RayTracingKHR Capability ShaderSMBuiltinsNV + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" Extension "SPV_KHR_shader_ballot" Extension "SPV_NV_shader_sm_builtins" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53 58 63 74 78 85 89 + EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 37 41 56 57 62 67 78 82 87 91 Source GLSL 460 SourceExtension "GL_ARB_shader_ballot" SourceExtension "GL_ARB_sparse_texture_clamp" + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" SourceExtension "GL_KHR_shader_subgroup_ballot" SourceExtension "GL_KHR_shader_subgroup_basic" @@ -35,37 +38,40 @@ spv.ext.MissShader.rmiss Name 29 "gl_RayTminEXT" Name 31 "v5" Name 32 "gl_RayTmaxEXT" - Name 36 "accEXT" - Name 51 "incomingPayload" - Name 53 "gl_SubGroupSizeARB" - Name 58 "gl_SubgroupEqMask" - Name 63 "gl_WarpIDNV" - Name 70 "texel" - Name 74 "s2D" - Name 78 "c2" - Name 85 "lodClamp" - Name 89 "localPayload" + Name 35 "v6" + Name 37 "gl_CullMaskEXT" + Name 41 "accEXT" + Name 56 "incomingPayload" + Name 57 "gl_SubGroupSizeARB" + Name 62 "gl_SubgroupEqMask" + Name 67 "gl_WarpIDNV" + Name 74 "texel" + Name 78 "s2D" + Name 82 "c2" + Name 87 "lodClamp" + Name 91 "localPayload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR Decorate 24(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR Decorate 29(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR - Decorate 36(accEXT) DescriptorSet 0 - Decorate 36(accEXT) Binding 0 - Decorate 53(gl_SubGroupSizeARB) BuiltIn SubgroupSize - Decorate 53(gl_SubGroupSizeARB) Volatile - Decorate 53(gl_SubGroupSizeARB) Coherent - Decorate 58(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR - Decorate 58(gl_SubgroupEqMask) Volatile - Decorate 58(gl_SubgroupEqMask) Coherent - Decorate 63(gl_WarpIDNV) BuiltIn WarpIDNV - Decorate 63(gl_WarpIDNV) Volatile - Decorate 63(gl_WarpIDNV) Coherent - Decorate 74(s2D) DescriptorSet 0 - Decorate 74(s2D) Binding 1 - Decorate 78(c2) Location 2 - Decorate 85(lodClamp) Location 3 + Decorate 37(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 41(accEXT) Binding 0 + Decorate 41(accEXT) DescriptorSet 0 + Decorate 57(gl_SubGroupSizeARB) BuiltIn SubgroupSize + Decorate 57(gl_SubGroupSizeARB) Volatile + Decorate 57(gl_SubGroupSizeARB) Coherent + Decorate 62(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR + Decorate 62(gl_SubgroupEqMask) Volatile + Decorate 62(gl_SubgroupEqMask) Coherent + Decorate 67(gl_WarpIDNV) BuiltIn WarpIDNV + Decorate 67(gl_WarpIDNV) Volatile + Decorate 67(gl_WarpIDNV) Coherent + Decorate 78(s2D) Binding 1 + Decorate 78(s2D) DescriptorSet 0 + Decorate 82(c2) Location 2 + Decorate 87(lodClamp) Location 3 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -84,44 +90,46 @@ spv.ext.MissShader.rmiss 28: TypePointer Input 16(float) 29(gl_RayTminEXT): 28(ptr) Variable Input 32(gl_RayTmaxEXT): 28(ptr) Variable Input - 34: TypeAccelerationStructureKHR - 35: TypePointer UniformConstant 34 - 36(accEXT): 35(ptr) Variable UniformConstant - 38: 6(int) Constant 0 - 39: 6(int) Constant 1 - 40: 6(int) Constant 2 - 41: 6(int) Constant 3 - 42: 16(float) Constant 1056964608 - 43: 17(fvec3) ConstantComposite 42 42 42 - 44: 16(float) Constant 1065353216 - 45: 17(fvec3) ConstantComposite 44 44 44 - 46: 16(float) Constant 1061158912 - 47: TypeInt 32 1 - 48: 47(int) Constant 1 - 49: TypeVector 16(float) 4 - 50: TypePointer IncomingRayPayloadKHR 49(fvec4) -51(incomingPayload): 50(ptr) Variable IncomingRayPayloadKHR - 52: TypePointer Input 6(int) -53(gl_SubGroupSizeARB): 52(ptr) Variable Input - 56: TypeVector 6(int) 4 - 57: TypePointer Input 56(ivec4) -58(gl_SubgroupEqMask): 57(ptr) Variable Input - 63(gl_WarpIDNV): 52(ptr) Variable Input - 67: TypePointer IncomingRayPayloadKHR 16(float) - 69: TypePointer Function 49(fvec4) - 71: TypeImage 16(float) 2D sampled format:Unknown - 72: TypeSampledImage 71 - 73: TypePointer UniformConstant 72 - 74(s2D): 73(ptr) Variable UniformConstant - 76: TypeVector 16(float) 2 - 77: TypePointer Input 76(fvec2) - 78(c2): 77(ptr) Variable Input - 82: TypeVector 47(int) 2 - 83: 47(int) Constant 5 - 84: 82(ivec2) ConstantComposite 83 83 - 85(lodClamp): 28(ptr) Variable Input - 88: TypePointer RayPayloadKHR 49(fvec4) -89(localPayload): 88(ptr) Variable RayPayloadKHR + 34: TypePointer Function 6(int) + 36: TypePointer Input 6(int) +37(gl_CullMaskEXT): 36(ptr) Variable Input + 39: TypeAccelerationStructureKHR + 40: TypePointer UniformConstant 39 + 41(accEXT): 40(ptr) Variable UniformConstant + 43: 6(int) Constant 0 + 44: 6(int) Constant 1 + 45: 6(int) Constant 2 + 46: 6(int) Constant 3 + 47: 16(float) Constant 1056964608 + 48: 17(fvec3) ConstantComposite 47 47 47 + 49: 16(float) Constant 1065353216 + 50: 17(fvec3) ConstantComposite 49 49 49 + 51: 16(float) Constant 1061158912 + 52: TypeInt 32 1 + 53: 52(int) Constant 1 + 54: TypeVector 16(float) 4 + 55: TypePointer IncomingRayPayloadKHR 54(fvec4) +56(incomingPayload): 55(ptr) Variable IncomingRayPayloadKHR +57(gl_SubGroupSizeARB): 36(ptr) Variable Input + 60: TypeVector 6(int) 4 + 61: TypePointer Input 60(ivec4) +62(gl_SubgroupEqMask): 61(ptr) Variable Input + 67(gl_WarpIDNV): 36(ptr) Variable Input + 71: TypePointer IncomingRayPayloadKHR 16(float) + 73: TypePointer Function 54(fvec4) + 75: TypeImage 16(float) 2D sampled format:Unknown + 76: TypeSampledImage 75 + 77: TypePointer UniformConstant 76 + 78(s2D): 77(ptr) Variable UniformConstant + 80: TypeVector 16(float) 2 + 81: TypePointer Input 80(fvec2) + 82(c2): 81(ptr) Variable Input + 84: TypeVector 52(int) 2 + 85: 52(int) Constant 5 + 86: 84(ivec2) ConstantComposite 85 85 + 87(lodClamp): 28(ptr) Variable Input + 90: TypePointer RayPayloadKHR 54(fvec4) +91(localPayload): 90(ptr) Variable RayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -130,7 +138,8 @@ spv.ext.MissShader.rmiss 23(v3): 18(ptr) Variable Function 27(v4): 26(ptr) Variable Function 31(v5): 26(ptr) Variable Function - 70(texel): 69(ptr) Variable Function + 35(v6): 34(ptr) Variable Function + 74(texel): 73(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -143,25 +152,25 @@ spv.ext.MissShader.rmiss Store 27(v4) 30 33: 16(float) Load 32(gl_RayTmaxEXT) Store 31(v5) 33 - 37: 34 Load 36(accEXT) - TraceRayKHR 37 38 39 40 41 38 43 42 45 46 51(incomingPayload) - 54: 6(int) Load 53(gl_SubGroupSizeARB) - 55: 16(float) ConvertUToF 54 - 59: 56(ivec4) Load 58(gl_SubgroupEqMask) - 60: 49(fvec4) ConvertUToF 59 - 61: 16(float) CompositeExtract 60 0 - 62: 16(float) FAdd 55 61 - 64: 6(int) Load 63(gl_WarpIDNV) - 65: 16(float) ConvertUToF 64 - 66: 16(float) FAdd 62 65 - 68: 67(ptr) AccessChain 51(incomingPayload) 38 - Store 68 66 - 75: 72 Load 74(s2D) - 79: 76(fvec2) Load 78(c2) - 80: 76(fvec2) Load 78(c2) - 81: 76(fvec2) Load 78(c2) - 86: 16(float) Load 85(lodClamp) - 87: 49(fvec4) ImageSampleExplicitLod 75 79 Grad ConstOffset MinLod 80 81 84 86 - Store 70(texel) 87 + 38: 6(int) Load 37(gl_CullMaskEXT) + Store 35(v6) 38 + 42: 39 Load 41(accEXT) + TraceRayKHR 42 43 44 45 46 43 48 47 50 51 56(incomingPayload) + 58: 6(int) Load 57(gl_SubGroupSizeARB) + 59: 16(float) ConvertUToF 58 + 63: 60(ivec4) Load 62(gl_SubgroupEqMask) + 64: 54(fvec4) ConvertUToF 63 + 65: 16(float) CompositeExtract 64 0 + 66: 16(float) FAdd 59 65 + 68: 6(int) Load 67(gl_WarpIDNV) + 69: 16(float) ConvertUToF 68 + 70: 16(float) FAdd 66 69 + 72: 71(ptr) AccessChain 56(incomingPayload) 43 + Store 72 70 + 79: 76 Load 78(s2D) + 83: 80(fvec2) Load 82(c2) + 88: 16(float) Load 87(lodClamp) + 89: 54(fvec4) ImageSampleExplicitLod 79 83 Grad ConstOffset MinLod 83 83 86 88 + Store 74(texel) 89 Return FunctionEnd diff --git a/Test/baseResults/spv.ext.RayCallable.rcall.out b/Test/baseResults/spv.ext.RayCallable.rcall.out index 50e7fd8ff6..9e6cef1340 100644 --- a/Test/baseResults/spv.ext.RayCallable.rcall.out +++ b/Test/baseResults/spv.ext.RayCallable.rcall.out @@ -1,6 +1,6 @@ spv.ext.RayCallable.rcall // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability RayTracingKHR diff --git a/Test/baseResults/spv.ext.RayConstants.rgen.out b/Test/baseResults/spv.ext.RayConstants.rgen.out index 6ef9dd4de0..05fb8f790c 100644 --- a/Test/baseResults/spv.ext.RayConstants.rgen.out +++ b/Test/baseResults/spv.ext.RayConstants.rgen.out @@ -1,6 +1,6 @@ spv.ext.RayConstants.rgen // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability RayTracingKHR @@ -13,8 +13,8 @@ spv.ext.RayConstants.rgen Name 4 "main" Name 8 "accEXT" Name 26 "payload" - Decorate 8(accEXT) DescriptorSet 0 Decorate 8(accEXT) Binding 0 + Decorate 8(accEXT) DescriptorSet 0 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 88e3c004ce..7fec5c39a9 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out @@ -1,6 +1,6 @@ spv.ext.RayGenSBTlayout.rgen // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 74 Capability Int64 @@ -37,6 +37,7 @@ spv.ext.RayGenSBTlayout.rgen Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 34 ArrayStride 8 Decorate 35 ArrayStride 16 + Decorate 36(block) Block MemberDecorate 36(block) 0 Offset 0 MemberDecorate 36(block) 1 Offset 16 MemberDecorate 36(block) 2 Offset 28 @@ -48,7 +49,6 @@ spv.ext.RayGenSBTlayout.rgen MemberDecorate 36(block) 8 Offset 112 MemberDecorate 36(block) 9 Offset 120 MemberDecorate 36(block) 10 Offset 128 - Decorate 36(block) Block 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 ce5c306322..714242b023 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out @@ -1,6 +1,6 @@ spv.ext.RayGenSBTlayout140.rgen // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 74 Capability Int64 @@ -37,6 +37,7 @@ spv.ext.RayGenSBTlayout140.rgen Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 34 ArrayStride 16 Decorate 35 ArrayStride 16 + Decorate 36(block) Block MemberDecorate 36(block) 0 Offset 0 MemberDecorate 36(block) 1 Offset 16 MemberDecorate 36(block) 2 Offset 28 @@ -48,7 +49,6 @@ spv.ext.RayGenSBTlayout140.rgen MemberDecorate 36(block) 8 Offset 128 MemberDecorate 36(block) 9 Offset 136 MemberDecorate 36(block) 10 Offset 144 - Decorate 36(block) Block 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 7462abd9b4..ab2b9963a7 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out @@ -1,6 +1,6 @@ spv.ext.RayGenSBTlayout430.rgen // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 74 Capability Int64 @@ -37,6 +37,7 @@ spv.ext.RayGenSBTlayout430.rgen Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 34 ArrayStride 8 Decorate 35 ArrayStride 16 + Decorate 36(block) Block MemberDecorate 36(block) 0 Offset 0 MemberDecorate 36(block) 1 Offset 16 MemberDecorate 36(block) 2 Offset 28 @@ -48,7 +49,6 @@ spv.ext.RayGenSBTlayout430.rgen MemberDecorate 36(block) 8 Offset 112 MemberDecorate 36(block) 9 Offset 120 MemberDecorate 36(block) 10 Offset 128 - Decorate 36(block) Block 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 3573455616..6f4b471d1c 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out @@ -1,6 +1,6 @@ spv.ext.RayGenSBTlayoutscalar.rgen // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 74 Capability Int64 @@ -38,6 +38,7 @@ spv.ext.RayGenSBTlayoutscalar.rgen Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 34 ArrayStride 8 Decorate 35 ArrayStride 12 + Decorate 36(block) Block MemberDecorate 36(block) 0 Offset 0 MemberDecorate 36(block) 1 Offset 12 MemberDecorate 36(block) 2 Offset 24 @@ -49,7 +50,6 @@ spv.ext.RayGenSBTlayoutscalar.rgen MemberDecorate 36(block) 8 Offset 92 MemberDecorate 36(block) 9 Offset 96 MemberDecorate 36(block) 10 Offset 104 - Decorate 36(block) Block 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 46f920ac55..37380e9605 100644 --- a/Test/baseResults/spv.ext.RayGenShader.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out @@ -1,6 +1,6 @@ spv.ext.RayGenShader.rgen // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 58 Capability RayTraversalPrimitiveCullingKHR @@ -10,6 +10,7 @@ spv.ext.RayGenShader.rgen MemoryModel Logical GLSL450 EntryPoint RayGenerationKHR 4 "main" 11 21 29 40 53 54 57 Source GLSL 460 + SourceExtension "GL_EXT_opacity_micromap" SourceExtension "GL_EXT_ray_flags_primitive_culling" SourceExtension "GL_EXT_ray_tracing" Name 4 "main" @@ -29,15 +30,15 @@ spv.ext.RayGenShader.rgen Name 57 "imageu" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR - Decorate 29(accEXT0) DescriptorSet 0 Decorate 29(accEXT0) Binding 0 + Decorate 29(accEXT0) DescriptorSet 0 + Decorate 38(block) Block MemberDecorate 38(block) 0 Offset 0 MemberDecorate 38(block) 1 Offset 16 - Decorate 38(block) Block - Decorate 54(accEXT1) DescriptorSet 0 Decorate 54(accEXT1) Binding 1 - Decorate 57(imageu) DescriptorSet 0 + Decorate 54(accEXT1) DescriptorSet 0 Decorate 57(imageu) Binding 2 + Decorate 57(imageu) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -52,7 +53,7 @@ spv.ext.RayGenShader.rgen 27: TypeAccelerationStructureKHR 28: TypePointer UniformConstant 27 29(accEXT0): 28(ptr) Variable UniformConstant - 35: 6(int) Constant 768 + 35: 6(int) Constant 1792 36: TypeFloat 32 37: TypeVector 36(float) 3 38(block): TypeStruct 37(fvec3) 37(fvec3) diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out index b31ebd9abb..b8d725633c 100644 --- a/Test/baseResults/spv.ext.RayGenShader11.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out @@ -1,6 +1,6 @@ spv.ext.RayGenShader11.rgen // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 53 Capability RayTracingKHR @@ -25,11 +25,11 @@ spv.ext.RayGenShader11.rgen Name 52 "payload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR - Decorate 29(accEXT) DescriptorSet 0 Decorate 29(accEXT) Binding 0 + Decorate 29(accEXT) DescriptorSet 0 + Decorate 37(block) Block MemberDecorate 37(block) 0 Offset 0 MemberDecorate 37(block) 1 Offset 16 - Decorate 37(block) Block 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 08f72b28ef..ebe0d39a8e 100644 --- a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out @@ -1,6 +1,6 @@ spv.ext.RayGenShaderArray.rgen // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 117 Capability Int64 @@ -35,16 +35,16 @@ spv.ext.RayGenShaderArray.rgen Name 65 "accEXT1" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR - Decorate 30(accEXT0) DescriptorSet 0 Decorate 30(accEXT0) Binding 0 + Decorate 30(accEXT0) DescriptorSet 0 + Decorate 36(block) Block MemberDecorate 36(block) 0 Offset 0 MemberDecorate 36(block) 1 Offset 16 MemberDecorate 36(block) 2 Offset 28 MemberDecorate 36(block) 3 Offset 32 MemberDecorate 36(block) 4 Offset 40 - Decorate 36(block) Block - Decorate 65(accEXT1) DescriptorSet 0 Decorate 65(accEXT1) Binding 1 + Decorate 65(accEXT1) DescriptorSet 0 Decorate 80 DecorationNonUniformEXT Decorate 81 DecorationNonUniformEXT Decorate 82 DecorationNonUniformEXT diff --git a/Test/baseResults/spv.ext.RayQueryDecl.frag.out b/Test/baseResults/spv.ext.RayQueryDecl.frag.out index 97681e9f53..2eb14216d6 100644 --- a/Test/baseResults/spv.ext.RayQueryDecl.frag.out +++ b/Test/baseResults/spv.ext.RayQueryDecl.frag.out @@ -1,6 +1,6 @@ spv.ext.RayQueryDecl.frag // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 15 Capability Shader diff --git a/Test/baseResults/spv.ext.ShaderTileImage.color.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.color.frag.out new file mode 100644 index 0000000000..942a850c0a --- /dev/null +++ b/Test/baseResults/spv.ext.ShaderTileImage.color.frag.out @@ -0,0 +1,38 @@ +spv.ext.ShaderTileImage.color.frag +WARNING: 0:6: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: + "precision mediump int; precision highp float;" + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 15 + + Capability Shader + Capability TileImageColorReadAccessEXT + Extension "SPV_EXT_shader_tile_image" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + SourceExtension "GL_EXT_shader_tile_image" + Name 4 "main" + Name 9 "out_color" + Name 12 "in_color" + Decorate 9(out_color) Location 0 + Decorate 12(in_color) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(out_color): 8(ptr) Variable Output + 10: TypeImage 6(float) TileImageDataEXT nonsampled format:Unknown + 11: TypePointer TileImageEXT 10 + 12(in_color): 11(ptr) Variable TileImageEXT + 4(main): 2 Function None 3 + 5: Label + 13: 10 Load 12(in_color) + 14: 7(fvec4) ColorAttachmentReadEXT 13 + Store 9(out_color) 14 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.ShaderTileImage.depth_stencil.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.depth_stencil.frag.out new file mode 100644 index 0000000000..0dcf014812 --- /dev/null +++ b/Test/baseResults/spv.ext.ShaderTileImage.depth_stencil.frag.out @@ -0,0 +1,56 @@ +spv.ext.ShaderTileImage.depth_stencil.frag +WARNING: 0:6: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: + "precision mediump int; precision highp float;" + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 26 + + Capability Shader + Capability TileImageDepthReadAccessEXT + Capability TileImageStencilReadAccessEXT + Extension "SPV_EXT_shader_tile_image" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 16 22 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + SourceExtension "GL_EXT_shader_tile_image" + Name 4 "main" + Name 8 "depth" + Name 12 "stencil_value" + Name 16 "stencil_out" + Name 22 "depth_out" + Decorate 13 RelaxedPrecision + Decorate 16(stencil_out) Location 0 + Decorate 22(depth_out) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 10: TypeInt 32 0 + 11: TypePointer Function 10(int) + 14: TypeVector 10(int) 4 + 15: TypePointer Output 14(ivec4) + 16(stencil_out): 15(ptr) Variable Output + 18: 10(int) Constant 0 + 20: TypeVector 6(float) 4 + 21: TypePointer Output 20(fvec4) + 22(depth_out): 21(ptr) Variable Output + 24: 6(float) Constant 0 + 4(main): 2 Function None 3 + 5: Label + 8(depth): 7(ptr) Variable Function +12(stencil_value): 11(ptr) Variable Function + 9: 6(float) DepthAttachmentReadEXT + Store 8(depth) 9 + 13: 10(int) StencilAttachmentReadEXT + Store 12(stencil_value) 13 + 17: 10(int) Load 12(stencil_value) + 19: 14(ivec4) CompositeConstruct 17 18 18 18 + Store 16(stencil_out) 19 + 23: 6(float) Load 8(depth) + 25: 20(fvec4) CompositeConstruct 23 24 24 24 + Store 22(depth_out) 25 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.ShaderTileImage.overlap.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.overlap.frag.out new file mode 100644 index 0000000000..e7af421380 --- /dev/null +++ b/Test/baseResults/spv.ext.ShaderTileImage.overlap.frag.out @@ -0,0 +1,6 @@ +spv.ext.ShaderTileImage.overlap.frag +ERROR: 0:8: 'location' : overlapping use of location 1 +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.ext.ShaderTileImage.subpassinput.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.subpassinput.frag.out new file mode 100644 index 0000000000..0f08f49246 --- /dev/null +++ b/Test/baseResults/spv.ext.ShaderTileImage.subpassinput.frag.out @@ -0,0 +1,6 @@ +spv.ext.ShaderTileImage.subpassinput.frag +ERROR: 0:6: 'subpassInput' : can not be used with GL_EXT_shader_tile_image enabled +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out new file mode 100644 index 0000000000..057e5e1d58 --- /dev/null +++ b/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out @@ -0,0 +1,6 @@ +spv.ext.ShaderTileImage.typemismatch.frag +ERROR: 0:7: 'location' : the aliases sharing the location 0 must be the same basic type and interpolation qualification +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.ext.ShaderTileImage.wronglayout.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.wronglayout.frag.out new file mode 100644 index 0000000000..aa3a1982f6 --- /dev/null +++ b/Test/baseResults/spv.ext.ShaderTileImage.wronglayout.frag.out @@ -0,0 +1,9 @@ +spv.ext.ShaderTileImage.wronglayout.frag +ERROR: 0:7: 'binding' : requires uniform or buffer storage qualifier +ERROR: 0:7: 'set' : cannot be used with tileImageEXT +ERROR: 0:7: 'tileImageEXT' : can only be used with an explicit location +ERROR: 0:7: 'input_attachment_index' : can only be used with a subpass +ERROR: 4 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.ext.World3x4.rahit.out b/Test/baseResults/spv.ext.World3x4.rahit.out index 8c60912c40..3c63dd330c 100644 --- a/Test/baseResults/spv.ext.World3x4.rahit.out +++ b/Test/baseResults/spv.ext.World3x4.rahit.out @@ -1,6 +1,6 @@ spv.ext.World3x4.rahit // Module Version 10400 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 90 Capability RayTracingKHR @@ -26,8 +26,8 @@ spv.ext.World3x4.rahit Name 89 "hitValue" Decorate 43(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 60(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 78(result) DescriptorSet 0 Decorate 78(result) Binding 0 + Decorate 78(result) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out new file mode 100644 index 0000000000..7fac1a7e27 --- /dev/null +++ b/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out @@ -0,0 +1,267 @@ +spv.ext.meshShaderBuiltins.mesh +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 158 + + Capability ClipDistance + Capability CullDistance + Capability DrawParameters + Capability MultiView + Capability MeshShadingEXT + Extension "SPV_EXT_mesh_shader" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint MeshEXT 4 "main" 13 19 24 41 93 134 152 155 + ExecutionMode 4 LocalSize 32 1 1 + ExecutionMode 4 OutputVertices 81 + ExecutionMode 4 OutputPrimitivesNV 32 + ExecutionMode 4 OutputTrianglesNV + Source GLSL 460 + SourceExtension "GL_ARB_shader_draw_parameters" + SourceExtension "GL_EXT_mesh_shader" + SourceExtension "GL_EXT_multiview" + Name 4 "main" + Name 6 "testAdditionalBuiltins(" + Name 10 "iid" + Name 13 "gl_LocalInvocationID" + Name 18 "gid" + Name 19 "gl_WorkGroupID" + Name 23 "numWorkGrous" + Name 24 "gl_NumWorkGroups" + Name 26 "vertexCount" + Name 28 "primitiveCount" + Name 38 "gl_MeshPerVertexEXT" + MemberName 38(gl_MeshPerVertexEXT) 0 "gl_Position" + MemberName 38(gl_MeshPerVertexEXT) 1 "gl_PointSize" + MemberName 38(gl_MeshPerVertexEXT) 2 "gl_ClipDistance" + MemberName 38(gl_MeshPerVertexEXT) 3 "gl_CullDistance" + Name 41 "gl_MeshVerticesEXT" + Name 90 "gl_MeshPerPrimitiveEXT" + MemberName 90(gl_MeshPerPrimitiveEXT) 0 "gl_PrimitiveID" + MemberName 90(gl_MeshPerPrimitiveEXT) 1 "gl_Layer" + MemberName 90(gl_MeshPerPrimitiveEXT) 2 "gl_ViewportIndex" + MemberName 90(gl_MeshPerPrimitiveEXT) 3 "gl_CullPrimitiveEXT" + Name 93 "gl_MeshPrimitivesEXT" + Name 134 "gl_PrimitiveTriangleIndicesEXT" + Name 150 "id" + Name 152 "gl_DrawIDARB" + Name 154 "viewIdx" + Name 155 "gl_ViewIndex" + Decorate 13(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 24(gl_NumWorkGroups) BuiltIn NumWorkgroups + Decorate 38(gl_MeshPerVertexEXT) Block + MemberDecorate 38(gl_MeshPerVertexEXT) 0 BuiltIn Position + MemberDecorate 38(gl_MeshPerVertexEXT) 1 BuiltIn PointSize + MemberDecorate 38(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance + MemberDecorate 38(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance + Decorate 90(gl_MeshPerPrimitiveEXT) Block + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV + Decorate 134(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT + Decorate 152(gl_DrawIDARB) BuiltIn DrawIndex + Decorate 155(gl_ViewIndex) BuiltIn ViewIndex + Decorate 157 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeInt 32 0 + 9: TypePointer Function 8(int) + 11: TypeVector 8(int) 3 + 12: TypePointer Input 11(ivec3) +13(gl_LocalInvocationID): 12(ptr) Variable Input + 14: 8(int) Constant 0 + 15: TypePointer Input 8(int) +19(gl_WorkGroupID): 12(ptr) Variable Input + 22: TypePointer Function 11(ivec3) +24(gl_NumWorkGroups): 12(ptr) Variable Input + 27: 8(int) Constant 81 + 29: 8(int) Constant 32 + 32: TypeFloat 32 + 33: TypeVector 32(float) 4 + 34: 8(int) Constant 4 + 35: TypeArray 32(float) 34 + 36: 8(int) Constant 3 + 37: TypeArray 32(float) 36 +38(gl_MeshPerVertexEXT): TypeStruct 33(fvec4) 32(float) 35 37 + 39: TypeArray 38(gl_MeshPerVertexEXT) 27 + 40: TypePointer Output 39 +41(gl_MeshVerticesEXT): 40(ptr) Variable Output + 43: TypeInt 32 1 + 44: 43(int) Constant 0 + 45: 32(float) Constant 1065353216 + 46: 33(fvec4) ConstantComposite 45 45 45 45 + 47: TypePointer Output 33(fvec4) + 50: 43(int) Constant 1 + 51: 32(float) Constant 1073741824 + 52: TypePointer Output 32(float) + 55: 43(int) Constant 2 + 56: 43(int) Constant 3 + 57: 32(float) Constant 1077936128 + 60: 32(float) Constant 1082130432 + 62: 8(int) Constant 1 + 63: 8(int) Constant 264 + 64: 8(int) Constant 2 + 89: TypeBool +90(gl_MeshPerPrimitiveEXT): TypeStruct 43(int) 43(int) 43(int) 89(bool) + 91: TypeArray 90(gl_MeshPerPrimitiveEXT) 29 + 92: TypePointer Output 91 +93(gl_MeshPrimitivesEXT): 92(ptr) Variable Output + 95: 43(int) Constant 6 + 96: TypePointer Output 43(int) + 99: 43(int) Constant 7 + 102: 43(int) Constant 8 + 105: 89(bool) ConstantFalse + 106: TypePointer Output 89(bool) + 132: TypeArray 11(ivec3) 29 + 133: TypePointer Output 132 +134(gl_PrimitiveTriangleIndicesEXT): 133(ptr) Variable Output + 135: 8(int) Constant 257 + 136: 11(ivec3) ConstantComposite 135 135 135 + 137: TypePointer Output 11(ivec3) + 141: 11(ivec3) ConstantComposite 64 64 64 + 149: TypePointer Function 43(int) + 151: TypePointer Input 43(int) +152(gl_DrawIDARB): 151(ptr) Variable Input +155(gl_ViewIndex): 151(ptr) Variable Input + 157: 11(ivec3) ConstantComposite 29 62 62 + 4(main): 2 Function None 3 + 5: Label + 10(iid): 9(ptr) Variable Function + 18(gid): 9(ptr) Variable Function +23(numWorkGrous): 22(ptr) Variable Function + 26(vertexCount): 9(ptr) Variable Function +28(primitiveCount): 9(ptr) Variable Function + 16: 15(ptr) AccessChain 13(gl_LocalInvocationID) 14 + 17: 8(int) Load 16 + Store 10(iid) 17 + 20: 15(ptr) AccessChain 19(gl_WorkGroupID) 14 + 21: 8(int) Load 20 + Store 18(gid) 21 + 25: 11(ivec3) Load 24(gl_NumWorkGroups) + Store 23(numWorkGrous) 25 + Store 26(vertexCount) 27 + Store 28(primitiveCount) 29 + 30: 8(int) Load 26(vertexCount) + 31: 8(int) Load 28(primitiveCount) + SetMeshOutputsEXT 30 31 + 42: 8(int) Load 10(iid) + 48: 47(ptr) AccessChain 41(gl_MeshVerticesEXT) 42 44 + Store 48 46 + 49: 8(int) Load 10(iid) + 53: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 49 50 + Store 53 51 + 54: 8(int) Load 10(iid) + 58: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 54 55 56 + Store 58 57 + 59: 8(int) Load 10(iid) + 61: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 59 56 55 + Store 61 60 + MemoryBarrier 62 63 + ControlBarrier 64 64 63 + 65: 8(int) Load 10(iid) + 66: 8(int) IAdd 65 62 + 67: 8(int) Load 10(iid) + 68: 47(ptr) AccessChain 41(gl_MeshVerticesEXT) 67 44 + 69: 33(fvec4) Load 68 + 70: 47(ptr) AccessChain 41(gl_MeshVerticesEXT) 66 44 + Store 70 69 + 71: 8(int) Load 10(iid) + 72: 8(int) IAdd 71 62 + 73: 8(int) Load 10(iid) + 74: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 73 50 + 75: 32(float) Load 74 + 76: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 72 50 + Store 76 75 + 77: 8(int) Load 10(iid) + 78: 8(int) IAdd 77 62 + 79: 8(int) Load 10(iid) + 80: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 79 55 56 + 81: 32(float) Load 80 + 82: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 78 55 56 + Store 82 81 + 83: 8(int) Load 10(iid) + 84: 8(int) IAdd 83 62 + 85: 8(int) Load 10(iid) + 86: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 85 56 55 + 87: 32(float) Load 86 + 88: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 84 56 55 + Store 88 87 + MemoryBarrier 62 63 + ControlBarrier 64 64 63 + 94: 8(int) Load 10(iid) + 97: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 94 44 + Store 97 95 + 98: 8(int) Load 10(iid) + 100: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 98 50 + Store 100 99 + 101: 8(int) Load 10(iid) + 103: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 101 55 + Store 103 102 + 104: 8(int) Load 10(iid) + 107: 106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 104 56 + Store 107 105 + MemoryBarrier 62 63 + ControlBarrier 64 64 63 + 108: 8(int) Load 10(iid) + 109: 8(int) IAdd 108 62 + 110: 8(int) Load 10(iid) + 111: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 110 44 + 112: 43(int) Load 111 + 113: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 109 44 + Store 113 112 + 114: 8(int) Load 10(iid) + 115: 8(int) IAdd 114 62 + 116: 8(int) Load 10(iid) + 117: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 116 50 + 118: 43(int) Load 117 + 119: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 115 50 + Store 119 118 + 120: 8(int) Load 10(iid) + 121: 8(int) IAdd 120 62 + 122: 8(int) Load 10(iid) + 123: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 122 55 + 124: 43(int) Load 123 + 125: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 121 55 + Store 125 124 + 126: 8(int) Load 10(iid) + 127: 8(int) IAdd 126 62 + 128: 8(int) Load 10(iid) + 129: 106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 128 56 + 130: 89(bool) Load 129 + 131: 106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 127 56 + Store 131 130 + MemoryBarrier 62 63 + ControlBarrier 64 64 63 + 138: 137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 44 + Store 138 136 + 139: 8(int) Load 28(primitiveCount) + 140: 8(int) ISub 139 62 + 142: 137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 140 + Store 142 141 + 143: 8(int) Load 18(gid) + 144: 8(int) Load 18(gid) + 145: 8(int) ISub 144 62 + 146: 137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 145 + 147: 11(ivec3) Load 146 + 148: 137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 143 + Store 148 147 + MemoryBarrier 62 63 + ControlBarrier 64 64 63 + Return + FunctionEnd +6(testAdditionalBuiltins(): 2 Function None 3 + 7: Label + 150(id): 149(ptr) Variable Function + 154(viewIdx): 149(ptr) Variable Function + 153: 43(int) Load 152(gl_DrawIDARB) + Store 150(id) 153 + 156: 43(int) Load 155(gl_ViewIndex) + Store 154(viewIdx) 156 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.meshShaderBuiltinsShadingRate.mesh.out b/Test/baseResults/spv.ext.meshShaderBuiltinsShadingRate.mesh.out new file mode 100644 index 0000000000..fc14ff6c04 --- /dev/null +++ b/Test/baseResults/spv.ext.meshShaderBuiltinsShadingRate.mesh.out @@ -0,0 +1,281 @@ +spv.ext.meshShaderBuiltinsShadingRate.mesh +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 164 + + Capability ClipDistance + Capability CullDistance + Capability FragmentShadingRateKHR + Capability DrawParameters + Capability MultiView + Capability MeshShadingEXT + Extension "SPV_EXT_mesh_shader" + Extension "SPV_KHR_fragment_shading_rate" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint MeshEXT 4 "main" 13 19 24 41 93 140 158 161 + ExecutionMode 4 LocalSize 32 1 1 + ExecutionMode 4 OutputVertices 81 + ExecutionMode 4 OutputPrimitivesNV 32 + ExecutionMode 4 OutputTrianglesNV + Source GLSL 460 + SourceExtension "GL_ARB_shader_draw_parameters" + SourceExtension "GL_EXT_fragment_shading_rate" + SourceExtension "GL_EXT_mesh_shader" + SourceExtension "GL_EXT_multiview" + Name 4 "main" + Name 6 "testAdditionalBuiltins(" + Name 10 "iid" + Name 13 "gl_LocalInvocationID" + Name 18 "gid" + Name 19 "gl_WorkGroupID" + Name 23 "numWorkGrous" + Name 24 "gl_NumWorkGroups" + Name 26 "vertexCount" + Name 28 "primitiveCount" + Name 38 "gl_MeshPerVertexEXT" + MemberName 38(gl_MeshPerVertexEXT) 0 "gl_Position" + MemberName 38(gl_MeshPerVertexEXT) 1 "gl_PointSize" + MemberName 38(gl_MeshPerVertexEXT) 2 "gl_ClipDistance" + MemberName 38(gl_MeshPerVertexEXT) 3 "gl_CullDistance" + Name 41 "gl_MeshVerticesEXT" + Name 90 "gl_MeshPerPrimitiveEXT" + MemberName 90(gl_MeshPerPrimitiveEXT) 0 "gl_PrimitiveID" + MemberName 90(gl_MeshPerPrimitiveEXT) 1 "gl_Layer" + MemberName 90(gl_MeshPerPrimitiveEXT) 2 "gl_ViewportIndex" + MemberName 90(gl_MeshPerPrimitiveEXT) 3 "gl_CullPrimitiveEXT" + MemberName 90(gl_MeshPerPrimitiveEXT) 4 "gl_PrimitiveShadingRateEXT" + Name 93 "gl_MeshPrimitivesEXT" + Name 140 "gl_PrimitiveTriangleIndicesEXT" + Name 156 "id" + Name 158 "gl_DrawIDARB" + Name 160 "viewIdx" + Name 161 "gl_ViewIndex" + Decorate 13(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 24(gl_NumWorkGroups) BuiltIn NumWorkgroups + Decorate 38(gl_MeshPerVertexEXT) Block + MemberDecorate 38(gl_MeshPerVertexEXT) 0 BuiltIn Position + MemberDecorate 38(gl_MeshPerVertexEXT) 1 BuiltIn PointSize + MemberDecorate 38(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance + MemberDecorate 38(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance + Decorate 90(gl_MeshPerPrimitiveEXT) Block + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR + MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV + Decorate 140(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT + Decorate 158(gl_DrawIDARB) BuiltIn DrawIndex + Decorate 161(gl_ViewIndex) BuiltIn ViewIndex + Decorate 163 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeInt 32 0 + 9: TypePointer Function 8(int) + 11: TypeVector 8(int) 3 + 12: TypePointer Input 11(ivec3) +13(gl_LocalInvocationID): 12(ptr) Variable Input + 14: 8(int) Constant 0 + 15: TypePointer Input 8(int) +19(gl_WorkGroupID): 12(ptr) Variable Input + 22: TypePointer Function 11(ivec3) +24(gl_NumWorkGroups): 12(ptr) Variable Input + 27: 8(int) Constant 81 + 29: 8(int) Constant 32 + 32: TypeFloat 32 + 33: TypeVector 32(float) 4 + 34: 8(int) Constant 4 + 35: TypeArray 32(float) 34 + 36: 8(int) Constant 3 + 37: TypeArray 32(float) 36 +38(gl_MeshPerVertexEXT): TypeStruct 33(fvec4) 32(float) 35 37 + 39: TypeArray 38(gl_MeshPerVertexEXT) 27 + 40: TypePointer Output 39 +41(gl_MeshVerticesEXT): 40(ptr) Variable Output + 43: TypeInt 32 1 + 44: 43(int) Constant 0 + 45: 32(float) Constant 1065353216 + 46: 33(fvec4) ConstantComposite 45 45 45 45 + 47: TypePointer Output 33(fvec4) + 50: 43(int) Constant 1 + 51: 32(float) Constant 1073741824 + 52: TypePointer Output 32(float) + 55: 43(int) Constant 2 + 56: 43(int) Constant 3 + 57: 32(float) Constant 1077936128 + 60: 32(float) Constant 1082130432 + 62: 8(int) Constant 1 + 63: 8(int) Constant 264 + 64: 8(int) Constant 2 + 89: TypeBool +90(gl_MeshPerPrimitiveEXT): TypeStruct 43(int) 43(int) 43(int) 89(bool) 43(int) + 91: TypeArray 90(gl_MeshPerPrimitiveEXT) 29 + 92: TypePointer Output 91 +93(gl_MeshPrimitivesEXT): 92(ptr) Variable Output + 95: 43(int) Constant 6 + 96: TypePointer Output 43(int) + 99: 43(int) Constant 7 + 102: 43(int) Constant 8 + 105: 89(bool) ConstantFalse + 106: TypePointer Output 89(bool) + 109: 43(int) Constant 4 + 138: TypeArray 11(ivec3) 29 + 139: TypePointer Output 138 +140(gl_PrimitiveTriangleIndicesEXT): 139(ptr) Variable Output + 141: 8(int) Constant 257 + 142: 11(ivec3) ConstantComposite 141 141 141 + 143: TypePointer Output 11(ivec3) + 147: 11(ivec3) ConstantComposite 64 64 64 + 155: TypePointer Function 43(int) + 157: TypePointer Input 43(int) +158(gl_DrawIDARB): 157(ptr) Variable Input +161(gl_ViewIndex): 157(ptr) Variable Input + 163: 11(ivec3) ConstantComposite 29 62 62 + 4(main): 2 Function None 3 + 5: Label + 10(iid): 9(ptr) Variable Function + 18(gid): 9(ptr) Variable Function +23(numWorkGrous): 22(ptr) Variable Function + 26(vertexCount): 9(ptr) Variable Function +28(primitiveCount): 9(ptr) Variable Function + 16: 15(ptr) AccessChain 13(gl_LocalInvocationID) 14 + 17: 8(int) Load 16 + Store 10(iid) 17 + 20: 15(ptr) AccessChain 19(gl_WorkGroupID) 14 + 21: 8(int) Load 20 + Store 18(gid) 21 + 25: 11(ivec3) Load 24(gl_NumWorkGroups) + Store 23(numWorkGrous) 25 + Store 26(vertexCount) 27 + Store 28(primitiveCount) 29 + 30: 8(int) Load 26(vertexCount) + 31: 8(int) Load 28(primitiveCount) + SetMeshOutputsEXT 30 31 + 42: 8(int) Load 10(iid) + 48: 47(ptr) AccessChain 41(gl_MeshVerticesEXT) 42 44 + Store 48 46 + 49: 8(int) Load 10(iid) + 53: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 49 50 + Store 53 51 + 54: 8(int) Load 10(iid) + 58: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 54 55 56 + Store 58 57 + 59: 8(int) Load 10(iid) + 61: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 59 56 55 + Store 61 60 + MemoryBarrier 62 63 + ControlBarrier 64 64 63 + 65: 8(int) Load 10(iid) + 66: 8(int) IAdd 65 62 + 67: 8(int) Load 10(iid) + 68: 47(ptr) AccessChain 41(gl_MeshVerticesEXT) 67 44 + 69: 33(fvec4) Load 68 + 70: 47(ptr) AccessChain 41(gl_MeshVerticesEXT) 66 44 + Store 70 69 + 71: 8(int) Load 10(iid) + 72: 8(int) IAdd 71 62 + 73: 8(int) Load 10(iid) + 74: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 73 50 + 75: 32(float) Load 74 + 76: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 72 50 + Store 76 75 + 77: 8(int) Load 10(iid) + 78: 8(int) IAdd 77 62 + 79: 8(int) Load 10(iid) + 80: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 79 55 56 + 81: 32(float) Load 80 + 82: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 78 55 56 + Store 82 81 + 83: 8(int) Load 10(iid) + 84: 8(int) IAdd 83 62 + 85: 8(int) Load 10(iid) + 86: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 85 56 55 + 87: 32(float) Load 86 + 88: 52(ptr) AccessChain 41(gl_MeshVerticesEXT) 84 56 55 + Store 88 87 + MemoryBarrier 62 63 + ControlBarrier 64 64 63 + 94: 8(int) Load 10(iid) + 97: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 94 44 + Store 97 95 + 98: 8(int) Load 10(iid) + 100: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 98 50 + Store 100 99 + 101: 8(int) Load 10(iid) + 103: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 101 55 + Store 103 102 + 104: 8(int) Load 10(iid) + 107: 106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 104 56 + Store 107 105 + 108: 8(int) Load 10(iid) + 110: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 108 109 + Store 110 44 + MemoryBarrier 62 63 + ControlBarrier 64 64 63 + 111: 8(int) Load 10(iid) + 112: 8(int) IAdd 111 62 + 113: 8(int) Load 10(iid) + 114: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 113 44 + 115: 43(int) Load 114 + 116: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 112 44 + Store 116 115 + 117: 8(int) Load 10(iid) + 118: 8(int) IAdd 117 62 + 119: 8(int) Load 10(iid) + 120: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 119 50 + 121: 43(int) Load 120 + 122: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 118 50 + Store 122 121 + 123: 8(int) Load 10(iid) + 124: 8(int) IAdd 123 62 + 125: 8(int) Load 10(iid) + 126: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 125 55 + 127: 43(int) Load 126 + 128: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 124 55 + Store 128 127 + 129: 8(int) Load 10(iid) + 130: 8(int) IAdd 129 62 + 131: 8(int) Load 10(iid) + 132: 106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 131 56 + 133: 89(bool) Load 132 + 134: 106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 130 56 + Store 134 133 + 135: 8(int) Load 10(iid) + 136: 8(int) IAdd 135 62 + 137: 96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 136 109 + Store 137 44 + MemoryBarrier 62 63 + ControlBarrier 64 64 63 + 144: 143(ptr) AccessChain 140(gl_PrimitiveTriangleIndicesEXT) 44 + Store 144 142 + 145: 8(int) Load 28(primitiveCount) + 146: 8(int) ISub 145 62 + 148: 143(ptr) AccessChain 140(gl_PrimitiveTriangleIndicesEXT) 146 + Store 148 147 + 149: 8(int) Load 18(gid) + 150: 8(int) Load 18(gid) + 151: 8(int) ISub 150 62 + 152: 143(ptr) AccessChain 140(gl_PrimitiveTriangleIndicesEXT) 151 + 153: 11(ivec3) Load 152 + 154: 143(ptr) AccessChain 140(gl_PrimitiveTriangleIndicesEXT) 149 + Store 154 153 + MemoryBarrier 62 63 + ControlBarrier 64 64 63 + Return + FunctionEnd +6(testAdditionalBuiltins(): 2 Function None 3 + 7: Label + 156(id): 155(ptr) Variable Function + 160(viewIdx): 155(ptr) Variable Function + 159: 43(int) Load 158(gl_DrawIDARB) + Store 156(id) 159 + 162: 43(int) Load 161(gl_ViewIndex) + Store 160(viewIdx) 162 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out new file mode 100644 index 0000000000..534cf403fb --- /dev/null +++ b/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out @@ -0,0 +1,211 @@ +spv.ext.meshShaderRedeclBuiltins.mesh +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 128 + + Capability ClipDistance + Capability CullDistance + Capability MeshShadingEXT + Extension "SPV_EXT_mesh_shader" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint MeshEXT 4 "main" 11 17 29 81 122 + ExecutionMode 4 LocalSize 32 1 1 + ExecutionMode 4 OutputVertices 81 + ExecutionMode 4 OutputPrimitivesNV 32 + ExecutionMode 4 OutputPoints + Source GLSL 460 + SourceExtension "GL_EXT_mesh_shader" + Name 4 "main" + Name 8 "iid" + Name 11 "gl_LocalInvocationID" + Name 16 "gid" + Name 17 "gl_WorkGroupID" + Name 26 "gl_MeshPerVertexEXT" + MemberName 26(gl_MeshPerVertexEXT) 0 "gl_Position" + MemberName 26(gl_MeshPerVertexEXT) 1 "gl_PointSize" + MemberName 26(gl_MeshPerVertexEXT) 2 "gl_ClipDistance" + MemberName 26(gl_MeshPerVertexEXT) 3 "gl_CullDistance" + Name 29 "gl_MeshVerticesEXT" + Name 78 "gl_MeshPerPrimitiveEXT" + MemberName 78(gl_MeshPerPrimitiveEXT) 0 "gl_PrimitiveID" + MemberName 78(gl_MeshPerPrimitiveEXT) 1 "gl_Layer" + MemberName 78(gl_MeshPerPrimitiveEXT) 2 "gl_ViewportIndex" + MemberName 78(gl_MeshPerPrimitiveEXT) 3 "gl_CullPrimitiveEXT" + Name 81 "gl_MeshPrimitivesEXT" + Name 122 "gl_PrimitivePointIndicesEXT" + Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 26(gl_MeshPerVertexEXT) Block + MemberDecorate 26(gl_MeshPerVertexEXT) 0 BuiltIn Position + MemberDecorate 26(gl_MeshPerVertexEXT) 1 BuiltIn PointSize + MemberDecorate 26(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance + MemberDecorate 26(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance + Decorate 78(gl_MeshPerPrimitiveEXT) Block + MemberDecorate 78(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId + MemberDecorate 78(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV + MemberDecorate 78(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer + MemberDecorate 78(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV + MemberDecorate 78(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex + MemberDecorate 78(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV + MemberDecorate 78(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT + MemberDecorate 78(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV + Decorate 122(gl_PrimitivePointIndicesEXT) BuiltIn PrimitivePointIndicesEXT + Decorate 127 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypeVector 6(int) 3 + 10: TypePointer Input 9(ivec3) +11(gl_LocalInvocationID): 10(ptr) Variable Input + 12: 6(int) Constant 0 + 13: TypePointer Input 6(int) +17(gl_WorkGroupID): 10(ptr) Variable Input + 20: 6(int) Constant 81 + 21: 6(int) Constant 32 + 22: TypeFloat 32 + 23: TypeVector 22(float) 4 + 24: 6(int) Constant 4 + 25: TypeArray 22(float) 24 +26(gl_MeshPerVertexEXT): TypeStruct 23(fvec4) 22(float) 25 25 + 27: TypeArray 26(gl_MeshPerVertexEXT) 20 + 28: TypePointer Output 27 +29(gl_MeshVerticesEXT): 28(ptr) Variable Output + 31: TypeInt 32 1 + 32: 31(int) Constant 0 + 33: 22(float) Constant 1065353216 + 34: 23(fvec4) ConstantComposite 33 33 33 33 + 35: TypePointer Output 23(fvec4) + 38: 31(int) Constant 1 + 39: 22(float) Constant 1073741824 + 40: TypePointer Output 22(float) + 43: 31(int) Constant 2 + 44: 31(int) Constant 3 + 45: 22(float) Constant 1077936128 + 48: 22(float) Constant 1082130432 + 50: 6(int) Constant 1 + 51: 6(int) Constant 264 + 52: 6(int) Constant 2 + 77: TypeBool +78(gl_MeshPerPrimitiveEXT): TypeStruct 31(int) 31(int) 31(int) 77(bool) + 79: TypeArray 78(gl_MeshPerPrimitiveEXT) 21 + 80: TypePointer Output 79 +81(gl_MeshPrimitivesEXT): 80(ptr) Variable Output + 83: 31(int) Constant 6 + 84: TypePointer Output 31(int) + 87: 31(int) Constant 7 + 90: 31(int) Constant 8 + 93: 77(bool) ConstantFalse + 94: TypePointer Output 77(bool) + 120: TypeArray 6(int) 21 + 121: TypePointer Output 120 +122(gl_PrimitivePointIndicesEXT): 121(ptr) Variable Output + 123: TypePointer Output 6(int) + 125: 31(int) Constant 31 + 127: 9(ivec3) ConstantComposite 21 50 50 + 4(main): 2 Function None 3 + 5: Label + 8(iid): 7(ptr) Variable Function + 16(gid): 7(ptr) Variable Function + 14: 13(ptr) AccessChain 11(gl_LocalInvocationID) 12 + 15: 6(int) Load 14 + Store 8(iid) 15 + 18: 13(ptr) AccessChain 17(gl_WorkGroupID) 12 + 19: 6(int) Load 18 + Store 16(gid) 19 + SetMeshOutputsEXT 20 21 + 30: 6(int) Load 8(iid) + 36: 35(ptr) AccessChain 29(gl_MeshVerticesEXT) 30 32 + Store 36 34 + 37: 6(int) Load 8(iid) + 41: 40(ptr) AccessChain 29(gl_MeshVerticesEXT) 37 38 + Store 41 39 + 42: 6(int) Load 8(iid) + 46: 40(ptr) AccessChain 29(gl_MeshVerticesEXT) 42 43 44 + Store 46 45 + 47: 6(int) Load 8(iid) + 49: 40(ptr) AccessChain 29(gl_MeshVerticesEXT) 47 44 43 + Store 49 48 + MemoryBarrier 50 51 + ControlBarrier 52 52 51 + 53: 6(int) Load 8(iid) + 54: 6(int) IAdd 53 50 + 55: 6(int) Load 8(iid) + 56: 35(ptr) AccessChain 29(gl_MeshVerticesEXT) 55 32 + 57: 23(fvec4) Load 56 + 58: 35(ptr) AccessChain 29(gl_MeshVerticesEXT) 54 32 + Store 58 57 + 59: 6(int) Load 8(iid) + 60: 6(int) IAdd 59 50 + 61: 6(int) Load 8(iid) + 62: 40(ptr) AccessChain 29(gl_MeshVerticesEXT) 61 38 + 63: 22(float) Load 62 + 64: 40(ptr) AccessChain 29(gl_MeshVerticesEXT) 60 38 + Store 64 63 + 65: 6(int) Load 8(iid) + 66: 6(int) IAdd 65 50 + 67: 6(int) Load 8(iid) + 68: 40(ptr) AccessChain 29(gl_MeshVerticesEXT) 67 43 44 + 69: 22(float) Load 68 + 70: 40(ptr) AccessChain 29(gl_MeshVerticesEXT) 66 43 44 + Store 70 69 + 71: 6(int) Load 8(iid) + 72: 6(int) IAdd 71 50 + 73: 6(int) Load 8(iid) + 74: 40(ptr) AccessChain 29(gl_MeshVerticesEXT) 73 44 43 + 75: 22(float) Load 74 + 76: 40(ptr) AccessChain 29(gl_MeshVerticesEXT) 72 44 43 + Store 76 75 + MemoryBarrier 50 51 + ControlBarrier 52 52 51 + 82: 6(int) Load 8(iid) + 85: 84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 82 32 + Store 85 83 + 86: 6(int) Load 8(iid) + 88: 84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 86 38 + Store 88 87 + 89: 6(int) Load 8(iid) + 91: 84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 89 43 + Store 91 90 + 92: 6(int) Load 8(iid) + 95: 94(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 92 44 + Store 95 93 + MemoryBarrier 50 51 + ControlBarrier 52 52 51 + 96: 6(int) Load 8(iid) + 97: 6(int) IAdd 96 50 + 98: 6(int) Load 8(iid) + 99: 84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 98 32 + 100: 31(int) Load 99 + 101: 84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 97 32 + Store 101 100 + 102: 6(int) Load 8(iid) + 103: 6(int) IAdd 102 50 + 104: 6(int) Load 8(iid) + 105: 84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 104 38 + 106: 31(int) Load 105 + 107: 84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 103 38 + Store 107 106 + 108: 6(int) Load 8(iid) + 109: 6(int) IAdd 108 50 + 110: 6(int) Load 8(iid) + 111: 84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 110 43 + 112: 31(int) Load 111 + 113: 84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 109 43 + Store 113 112 + 114: 6(int) Load 8(iid) + 115: 6(int) IAdd 114 50 + 116: 6(int) Load 8(iid) + 117: 94(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 116 44 + 118: 77(bool) Load 117 + 119: 94(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 115 44 + Store 119 118 + MemoryBarrier 50 51 + ControlBarrier 52 52 51 + 124: 123(ptr) AccessChain 122(gl_PrimitivePointIndicesEXT) 32 + Store 124 50 + 126: 123(ptr) AccessChain 122(gl_PrimitivePointIndicesEXT) 125 + Store 126 52 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out new file mode 100644 index 0000000000..5af26300f7 --- /dev/null +++ b/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out @@ -0,0 +1,102 @@ +spv.ext.meshShaderTaskMem.mesh +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 58 + + Capability MeshShadingEXT + Extension "SPV_EXT_mesh_shader" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint MeshEXT 4 "main" 11 22 30 38 + ExecutionMode 4 LocalSize 32 1 1 + ExecutionMode 4 OutputVertices 81 + ExecutionMode 4 OutputPrimitivesNV 32 + ExecutionMode 4 OutputTrianglesNV + Source GLSL 450 + SourceExtension "GL_EXT_mesh_shader" + Name 4 "main" + Name 8 "iid" + Name 11 "gl_LocalInvocationID" + Name 18 "outBlock" + MemberName 18(outBlock) 0 "gid5" + MemberName 18(outBlock) 1 "gid6" + Name 22 "myblk" + Name 28 "taskBlock" + MemberName 28(taskBlock) 0 "gid1" + MemberName 28(taskBlock) 1 "gid2" + Name 30 "mytask" + Name 36 "bufferBlock" + MemberName 36(bufferBlock) 0 "gid3" + MemberName 36(bufferBlock) 1 "gid4" + Name 38 "mybuf" + Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 18(outBlock) Block + Decorate 22(myblk) Location 0 + Decorate 35 ArrayStride 4 + Decorate 36(bufferBlock) Block + MemberDecorate 36(bufferBlock) 0 Offset 0 + MemberDecorate 36(bufferBlock) 1 Offset 16 + Decorate 38(mybuf) Binding 0 + Decorate 38(mybuf) DescriptorSet 0 + Decorate 57 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypeVector 6(int) 3 + 10: TypePointer Input 9(ivec3) +11(gl_LocalInvocationID): 10(ptr) Variable Input + 12: 6(int) Constant 0 + 13: TypePointer Input 6(int) + 16: TypeFloat 32 + 17: TypeVector 16(float) 4 + 18(outBlock): TypeStruct 16(float) 17(fvec4) + 19: 6(int) Constant 81 + 20: TypeArray 18(outBlock) 19 + 21: TypePointer Output 20 + 22(myblk): 21(ptr) Variable Output + 24: TypeInt 32 1 + 25: 24(int) Constant 0 + 26: 6(int) Constant 2 + 27: TypeArray 16(float) 26 + 28(taskBlock): TypeStruct 27 17(fvec4) + 29: TypePointer TaskPayloadWorkgroupEXT 28(taskBlock) + 30(mytask): 29(ptr) Variable TaskPayloadWorkgroupEXT + 31: 24(int) Constant 1 + 32: TypePointer TaskPayloadWorkgroupEXT 16(float) + 35: TypeArray 16(float) 26 + 36(bufferBlock): TypeStruct 35 17(fvec4) + 37: TypePointer StorageBuffer 36(bufferBlock) + 38(mybuf): 37(ptr) Variable StorageBuffer + 39: TypePointer StorageBuffer 16(float) + 43: TypePointer Output 16(float) + 46: TypePointer TaskPayloadWorkgroupEXT 17(fvec4) + 49: TypePointer StorageBuffer 17(fvec4) + 53: TypePointer Output 17(fvec4) + 55: 6(int) Constant 32 + 56: 6(int) Constant 1 + 57: 9(ivec3) ConstantComposite 55 56 56 + 4(main): 2 Function None 3 + 5: Label + 8(iid): 7(ptr) Variable Function + 14: 13(ptr) AccessChain 11(gl_LocalInvocationID) 12 + 15: 6(int) Load 14 + Store 8(iid) 15 + 23: 6(int) Load 8(iid) + 33: 32(ptr) AccessChain 30(mytask) 25 31 + 34: 16(float) Load 33 + 40: 39(ptr) AccessChain 38(mybuf) 25 31 + 41: 16(float) Load 40 + 42: 16(float) FAdd 34 41 + 44: 43(ptr) AccessChain 22(myblk) 23 25 + Store 44 42 + 45: 6(int) Load 8(iid) + 47: 46(ptr) AccessChain 30(mytask) 31 + 48: 17(fvec4) Load 47 + 50: 49(ptr) AccessChain 38(mybuf) 31 + 51: 17(fvec4) Load 50 + 52: 17(fvec4) FAdd 48 51 + 54: 53(ptr) AccessChain 22(myblk) 45 31 + Store 54 52 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out new file mode 100644 index 0000000000..6fcd594e07 --- /dev/null +++ b/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out @@ -0,0 +1,208 @@ +spv.ext.meshShaderUserDefined.mesh +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 141 + + Capability MeshShadingEXT + Extension "SPV_EXT_mesh_shader" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint MeshEXT 4 "main" 11 17 34 104 + ExecutionMode 4 LocalSize 32 1 1 + ExecutionMode 4 OutputVertices 81 + ExecutionMode 4 OutputPrimitivesNV 32 + ExecutionMode 4 OutputTrianglesNV + Source GLSL 450 + SourceExtension "GL_EXT_mesh_shader" + Name 4 "main" + Name 8 "iid" + Name 11 "gl_LocalInvocationID" + Name 16 "gid" + Name 17 "gl_WorkGroupID" + Name 30 "myblock" + MemberName 30(myblock) 0 "f" + MemberName 30(myblock) 1 "fArr" + MemberName 30(myblock) 2 "pos" + MemberName 30(myblock) 3 "posArr" + MemberName 30(myblock) 4 "m" + MemberName 30(myblock) 5 "mArr" + Name 34 "blk" + Name 100 "myblock2" + MemberName 100(myblock2) 0 "f" + MemberName 100(myblock2) 1 "pos" + MemberName 100(myblock2) 2 "m" + Name 104 "blk2" + Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 30(myblock) Block + MemberDecorate 30(myblock) 0 PerPrimitiveNV + MemberDecorate 30(myblock) 1 PerPrimitiveNV + MemberDecorate 30(myblock) 2 PerPrimitiveNV + MemberDecorate 30(myblock) 3 PerPrimitiveNV + MemberDecorate 30(myblock) 4 PerPrimitiveNV + MemberDecorate 30(myblock) 5 PerPrimitiveNV + Decorate 34(blk) Location 0 + Decorate 100(myblock2) Block + Decorate 104(blk2) Location 20 + Decorate 140 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypeVector 6(int) 3 + 10: TypePointer Input 9(ivec3) +11(gl_LocalInvocationID): 10(ptr) Variable Input + 12: 6(int) Constant 0 + 13: TypePointer Input 6(int) +17(gl_WorkGroupID): 10(ptr) Variable Input + 20: TypeFloat 32 + 21: 6(int) Constant 4 + 22: TypeArray 20(float) 21 + 23: TypeVector 20(float) 3 + 24: TypeVector 20(float) 4 + 25: TypeArray 24(fvec4) 21 + 26: TypeMatrix 24(fvec4) 4 + 27: TypeMatrix 23(fvec3) 3 + 28: 6(int) Constant 2 + 29: TypeArray 27 28 + 30(myblock): TypeStruct 20(float) 22 23(fvec3) 25 26 29 + 31: 6(int) Constant 32 + 32: TypeArray 30(myblock) 31 + 33: TypePointer Output 32 + 34(blk): 33(ptr) Variable Output + 36: TypeInt 32 1 + 37: 36(int) Constant 0 + 38: 20(float) Constant 1093664768 + 39: TypePointer Output 20(float) + 42: 6(int) Constant 1 + 44: 36(int) Constant 1 + 52: 36(int) Constant 2 + 53: 20(float) Constant 1096810496 + 54: 20(float) Constant 1097859072 + 55: 20(float) Constant 1095761920 + 56: 23(fvec3) ConstantComposite 53 54 55 + 57: TypePointer Output 23(fvec3) + 63: 36(int) Constant 3 + 72: 6(int) Constant 3 + 77: 36(int) Constant 4 + 78: 20(float) Constant 1098907648 + 79: 24(fvec4) ConstantComposite 55 53 54 78 + 80: TypePointer Output 24(fvec4) + 85: 36(int) Constant 5 + 94: 20(float) Constant 1099431936 + 95: 20(float) Constant 1099956224 + 96: 20(float) Constant 1100480512 + 97: 23(fvec3) ConstantComposite 94 95 96 + 99: 6(int) Constant 264 + 100(myblock2): TypeStruct 20(float) 24(fvec4) 26 + 101: 6(int) Constant 81 + 102: TypeArray 100(myblock2) 101 + 103: TypePointer Output 102 + 104(blk2): 103(ptr) Variable Output + 110: 20(float) Constant 1101004800 + 114: 20(float) Constant 1101529088 + 115: 20(float) Constant 1102053376 + 116: 20(float) Constant 1102577664 + 117: 20(float) Constant 1103101952 + 118: 24(fvec4) ConstantComposite 114 115 116 117 + 130: 20(float) Constant 1105723392 + 140: 9(ivec3) ConstantComposite 31 42 42 + 4(main): 2 Function None 3 + 5: Label + 8(iid): 7(ptr) Variable Function + 16(gid): 7(ptr) Variable Function + 14: 13(ptr) AccessChain 11(gl_LocalInvocationID) 12 + 15: 6(int) Load 14 + Store 8(iid) 15 + 18: 13(ptr) AccessChain 17(gl_WorkGroupID) 12 + 19: 6(int) Load 18 + Store 16(gid) 19 + 35: 6(int) Load 8(iid) + 40: 39(ptr) AccessChain 34(blk) 35 37 + Store 40 38 + 41: 6(int) Load 8(iid) + 43: 6(int) IAdd 41 42 + 45: 6(int) Load 16(gid) + 46: 6(int) Load 8(iid) + 47: 39(ptr) AccessChain 34(blk) 46 37 + 48: 20(float) Load 47 + 49: 39(ptr) AccessChain 34(blk) 43 44 45 + Store 49 48 + 50: 6(int) Load 8(iid) + 51: 6(int) UDiv 50 28 + 58: 57(ptr) AccessChain 34(blk) 51 52 + 59: 23(fvec3) Load 58 + 60: 23(fvec3) VectorShuffle 59 56 5 3 4 + Store 58 60 + 61: 6(int) Load 8(iid) + 62: 6(int) IMul 61 28 + 64: 6(int) Load 8(iid) + 65: 6(int) UDiv 64 28 + 66: 57(ptr) AccessChain 34(blk) 65 52 + 67: 23(fvec3) Load 66 + 68: 39(ptr) AccessChain 34(blk) 62 63 44 42 + 69: 20(float) CompositeExtract 67 0 + Store 68 69 + 70: 39(ptr) AccessChain 34(blk) 62 63 44 28 + 71: 20(float) CompositeExtract 67 1 + Store 70 71 + 73: 39(ptr) AccessChain 34(blk) 62 63 44 72 + 74: 20(float) CompositeExtract 67 2 + Store 73 74 + 75: 6(int) Load 8(iid) + 76: 6(int) UDiv 75 21 + 81: 80(ptr) AccessChain 34(blk) 76 77 52 + 82: 24(fvec4) Load 81 + 83: 24(fvec4) VectorShuffle 82 79 7 6 5 4 + Store 81 83 + 84: 6(int) Load 8(iid) + 86: 6(int) Load 8(iid) + 87: 6(int) UDiv 86 21 + 88: 39(ptr) AccessChain 34(blk) 87 77 52 72 + 89: 20(float) Load 88 + 90: 39(ptr) AccessChain 34(blk) 84 85 37 44 42 + Store 90 89 + 91: 6(int) Load 8(iid) + 92: 6(int) IMul 91 21 + 93: 6(int) Load 16(gid) + 98: 57(ptr) AccessChain 34(blk) 92 85 44 93 + Store 98 97 + MemoryBarrier 42 99 + ControlBarrier 28 28 99 + 105: 6(int) Load 8(iid) + 106: 6(int) Load 8(iid) + 107: 6(int) ISub 106 42 + 108: 39(ptr) AccessChain 104(blk2) 107 37 + 109: 20(float) Load 108 + 111: 20(float) FAdd 109 110 + 112: 39(ptr) AccessChain 104(blk2) 105 37 + Store 112 111 + 113: 6(int) Load 8(iid) + 119: 80(ptr) AccessChain 104(blk2) 113 44 + Store 119 118 + 120: 6(int) Load 8(iid) + 121: 6(int) IAdd 120 42 + 122: 6(int) Load 16(gid) + 123: 6(int) Load 8(iid) + 124: 80(ptr) AccessChain 104(blk2) 123 44 + 125: 24(fvec4) Load 124 + 126: 80(ptr) AccessChain 104(blk2) 121 52 122 + Store 126 125 + 127: 6(int) Load 8(iid) + 128: 6(int) IAdd 127 42 + 129: 6(int) Load 16(gid) + 131: 39(ptr) AccessChain 104(blk2) 128 52 129 28 + Store 131 130 + 132: 6(int) Load 8(iid) + 133: 6(int) IAdd 132 28 + 134: 6(int) Load 8(iid) + 135: 6(int) IAdd 134 42 + 136: 6(int) Load 16(gid) + 137: 80(ptr) AccessChain 104(blk2) 135 52 136 + 138: 24(fvec4) Load 137 + 139: 80(ptr) AccessChain 104(blk2) 133 52 63 + Store 139 138 + MemoryBarrier 42 99 + ControlBarrier 28 28 99 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.meshTaskShader.task.out b/Test/baseResults/spv.ext.meshTaskShader.task.out new file mode 100644 index 0000000000..d3f26116ec --- /dev/null +++ b/Test/baseResults/spv.ext.meshTaskShader.task.out @@ -0,0 +1,162 @@ +spv.ext.meshTaskShader.task +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 103 + + Capability StorageImageWriteWithoutFormat + Capability MeshShadingEXT + Extension "SPV_EXT_mesh_shader" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TaskEXT 4 "main" 11 17 34 39 55 80 + ExecutionMode 4 LocalSize 32 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_mesh_shader" + Name 4 "main" + Name 8 "iid" + Name 11 "gl_LocalInvocationID" + Name 16 "gid" + Name 17 "gl_WorkGroupID" + Name 20 "i" + Name 34 "mem" + Name 37 "block0" + MemberName 37(block0) 0 "uni_value" + Name 39 "" + Name 55 "uni_image" + Name 78 "Task" + MemberName 78(Task) 0 "dummy" + MemberName 78(Task) 1 "submesh" + Name 80 "mytask" + Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 37(block0) Block + MemberDecorate 37(block0) 0 Offset 0 + Decorate 39 Binding 1 + Decorate 39 DescriptorSet 0 + Decorate 55(uni_image) NonReadable + Decorate 55(uni_image) Binding 0 + Decorate 55(uni_image) DescriptorSet 0 + Decorate 102 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypeVector 6(int) 3 + 10: TypePointer Input 9(ivec3) +11(gl_LocalInvocationID): 10(ptr) Variable Input + 12: 6(int) Constant 0 + 13: TypePointer Input 6(int) +17(gl_WorkGroupID): 10(ptr) Variable Input + 27: 6(int) Constant 10 + 28: TypeBool + 30: TypeFloat 32 + 31: TypeVector 30(float) 4 + 32: TypeArray 31(fvec4) 27 + 33: TypePointer Workgroup 32 + 34(mem): 33(ptr) Variable Workgroup + 37(block0): TypeStruct 6(int) + 38: TypePointer Uniform 37(block0) + 39: 38(ptr) Variable Uniform + 40: TypeInt 32 1 + 41: 40(int) Constant 0 + 42: TypePointer Uniform 6(int) + 48: TypePointer Workgroup 31(fvec4) + 51: 40(int) Constant 1 + 53: TypeImage 30(float) 2D nonsampled format:Unknown + 54: TypePointer UniformConstant 53 + 55(uni_image): 54(ptr) Variable UniformConstant + 59: TypeVector 40(int) 2 + 69: 6(int) Constant 1 + 73: 6(int) Constant 264 + 74: 6(int) Constant 2 + 75: TypeVector 30(float) 2 + 76: 6(int) Constant 3 + 77: TypeArray 75(fvec2) 76 + 78(Task): TypeStruct 75(fvec2) 77 + 79: TypePointer TaskPayloadWorkgroupEXT 78(Task) + 80(mytask): 79(ptr) Variable TaskPayloadWorkgroupEXT + 81: 30(float) Constant 1106247680 + 82: 30(float) Constant 1106771968 + 83: 75(fvec2) ConstantComposite 81 82 + 84: TypePointer TaskPayloadWorkgroupEXT 75(fvec2) + 86: 30(float) Constant 1107296256 + 87: 30(float) Constant 1107558400 + 88: 75(fvec2) ConstantComposite 86 87 + 90: 30(float) Constant 1107820544 + 91: 30(float) Constant 1108082688 + 92: 75(fvec2) ConstantComposite 90 91 + 94: 40(int) Constant 2 + 101: 6(int) Constant 32 + 102: 9(ivec3) ConstantComposite 101 69 69 + 4(main): 2 Function None 3 + 5: Label + 8(iid): 7(ptr) Variable Function + 16(gid): 7(ptr) Variable Function + 20(i): 7(ptr) Variable Function + 14: 13(ptr) AccessChain 11(gl_LocalInvocationID) 12 + 15: 6(int) Load 14 + Store 8(iid) 15 + 18: 13(ptr) AccessChain 17(gl_WorkGroupID) 12 + 19: 6(int) Load 18 + Store 16(gid) 19 + Store 20(i) 12 + Branch 21 + 21: Label + LoopMerge 23 24 None + Branch 25 + 25: Label + 26: 6(int) Load 20(i) + 29: 28(bool) ULessThan 26 27 + BranchConditional 29 22 23 + 22: Label + 35: 6(int) Load 20(i) + 36: 6(int) Load 20(i) + 43: 42(ptr) AccessChain 39 41 + 44: 6(int) Load 43 + 45: 6(int) IAdd 36 44 + 46: 30(float) ConvertUToF 45 + 47: 31(fvec4) CompositeConstruct 46 46 46 46 + 49: 48(ptr) AccessChain 34(mem) 35 + Store 49 47 + Branch 24 + 24: Label + 50: 6(int) Load 20(i) + 52: 6(int) IAdd 50 51 + Store 20(i) 52 + Branch 21 + 23: Label + 56: 53 Load 55(uni_image) + 57: 6(int) Load 8(iid) + 58: 40(int) Bitcast 57 + 60: 59(ivec2) CompositeConstruct 58 58 + 61: 6(int) Load 16(gid) + 62: 48(ptr) AccessChain 34(mem) 61 + 63: 31(fvec4) Load 62 + ImageWrite 56 60 63 + 64: 53 Load 55(uni_image) + 65: 6(int) Load 8(iid) + 66: 40(int) Bitcast 65 + 67: 59(ivec2) CompositeConstruct 66 66 + 68: 6(int) Load 16(gid) + 70: 6(int) IAdd 68 69 + 71: 48(ptr) AccessChain 34(mem) 70 + 72: 31(fvec4) Load 71 + ImageWrite 64 67 72 + MemoryBarrier 69 73 + ControlBarrier 74 74 73 + 85: 84(ptr) AccessChain 80(mytask) 41 + Store 85 83 + 89: 84(ptr) AccessChain 80(mytask) 51 41 + Store 89 88 + 93: 84(ptr) AccessChain 80(mytask) 51 51 + Store 93 92 + 95: 6(int) Load 16(gid) + 96: 6(int) UMod 95 74 + 97: 84(ptr) AccessChain 80(mytask) 51 96 + 98: 75(fvec2) Load 97 + 99: 84(ptr) AccessChain 80(mytask) 51 94 + Store 99 98 + MemoryBarrier 69 73 + ControlBarrier 74 74 73 + EmitMeshTasksEXT 76 69 69 80(mytask) + FunctionEnd diff --git a/Test/baseResults/spv.ext.textureShadowLod.error.frag.out b/Test/baseResults/spv.ext.textureShadowLod.error.frag.out new file mode 100644 index 0000000000..18adb05962 --- /dev/null +++ b/Test/baseResults/spv.ext.textureShadowLod.error.frag.out @@ -0,0 +1,6 @@ +spv.ext.textureShadowLod.error.frag +ERROR: 0:11: 'textureLod(..., float lod)' : required extension not requested: GL_EXT_texture_shadow_lod +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.ext.textureShadowLod.frag.out b/Test/baseResults/spv.ext.textureShadowLod.frag.out new file mode 100644 index 0000000000..c4f9f3529b --- /dev/null +++ b/Test/baseResults/spv.ext.textureShadowLod.frag.out @@ -0,0 +1,89 @@ +spv.ext.textureShadowLod.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 55 + + Capability Shader + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 16 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_EXT_texture_shadow_lod" + Name 4 "main" + Name 8 "c" + Name 12 "s2da" + Name 16 "tc" + Name 24 "sca" + Name 43 "sc" + Decorate 8(c) Location 0 + Decorate 12(s2da) Binding 0 + Decorate 12(s2da) DescriptorSet 0 + Decorate 16(tc) Location 0 + Decorate 24(sca) Binding 1 + Decorate 24(sca) DescriptorSet 0 + Decorate 43(sc) Binding 2 + Decorate 43(sc) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Output 6(float) + 8(c): 7(ptr) Variable Output + 9: TypeImage 6(float) 2D depth array sampled format:Unknown + 10: TypeSampledImage 9 + 11: TypePointer UniformConstant 10 + 12(s2da): 11(ptr) Variable UniformConstant + 14: TypeVector 6(float) 4 + 15: TypePointer Input 14(fvec4) + 16(tc): 15(ptr) Variable Input + 18: 6(float) Constant 0 + 21: TypeImage 6(float) Cube depth array sampled format:Unknown + 22: TypeSampledImage 21 + 23: TypePointer UniformConstant 22 + 24(sca): 23(ptr) Variable UniformConstant + 30: TypeInt 32 1 + 31: TypeVector 30(int) 2 + 32: 30(int) Constant 0 + 33: 31(ivec2) ConstantComposite 32 32 + 40: TypeImage 6(float) Cube depth sampled format:Unknown + 41: TypeSampledImage 40 + 42: TypePointer UniformConstant 41 + 43(sc): 42(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 13: 10 Load 12(s2da) + 17: 14(fvec4) Load 16(tc) + 19: 6(float) CompositeExtract 17 3 + 20: 6(float) ImageSampleDrefImplicitLod 13 17 19 Bias 18 + Store 8(c) 20 + 25: 22 Load 24(sca) + 26: 14(fvec4) Load 16(tc) + 27: 6(float) ImageSampleDrefImplicitLod 25 26 18 + Store 8(c) 27 + 28: 10 Load 12(s2da) + 29: 14(fvec4) Load 16(tc) + 34: 6(float) CompositeExtract 29 3 + 35: 6(float) ImageSampleDrefImplicitLod 28 29 34 Bias ConstOffset 18 33 + Store 8(c) 35 + 36: 10 Load 12(s2da) + 37: 14(fvec4) Load 16(tc) + 38: 6(float) CompositeExtract 37 3 + 39: 6(float) ImageSampleDrefExplicitLod 36 37 38 Lod 18 + Store 8(c) 39 + 44: 41 Load 43(sc) + 45: 14(fvec4) Load 16(tc) + 46: 6(float) CompositeExtract 45 3 + 47: 6(float) ImageSampleDrefExplicitLod 44 45 46 Lod 18 + Store 8(c) 47 + 48: 22 Load 24(sca) + 49: 14(fvec4) Load 16(tc) + 50: 6(float) ImageSampleDrefExplicitLod 48 49 18 Lod 18 + Store 8(c) 50 + 51: 10 Load 12(s2da) + 52: 14(fvec4) Load 16(tc) + 53: 6(float) CompositeExtract 52 3 + 54: 6(float) ImageSampleDrefExplicitLod 51 52 53 Lod ConstOffset 18 33 + Store 8(c) 54 + Return + FunctionEnd diff --git a/Test/baseResults/spv.extPostDepthCoverage.frag.out b/Test/baseResults/spv.extPostDepthCoverage.frag.out index cc96fb4f9c..7e4c6f5dfa 100644 --- a/Test/baseResults/spv.extPostDepthCoverage.frag.out +++ b/Test/baseResults/spv.extPostDepthCoverage.frag.out @@ -1,6 +1,6 @@ spv.extPostDepthCoverage.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 6 Capability Shader diff --git a/Test/baseResults/spv.float16.frag.out b/Test/baseResults/spv.float16.frag.out index 8c33a66724..21e916382c 100644 --- a/Test/baseResults/spv.float16.frag.out +++ b/Test/baseResults/spv.float16.frag.out @@ -1,8 +1,8 @@ spv.float16.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 542 +// Generated by (magic number): 8000b +// Id's are bound by 538 Capability Shader Capability Float16 @@ -17,7 +17,7 @@ Validation failed Extension "SPV_KHR_16bit_storage" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 465 + EntryPoint Fragment 4 "main" 461 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_AMD_gpu_shader_half_float" @@ -43,124 +43,124 @@ Validation failed Name 156 "bv" Name 167 "fv" Name 175 "dv" - Name 186 "iv" - Name 193 "uv" - Name 201 "i64v" - Name 209 "u64v" - Name 216 "f16v2" - Name 217 "f16v1" - Name 249 "f16v2" - Name 250 "f16v1" - Name 266 "f16v2" - Name 267 "f16v1" - Name 288 "f16" - Name 292 "f16v3" - Name 332 "bv" - Name 353 "b" - Name 363 "iv" - Name 364 "ResType" - Name 372 "u" - Name 373 "f16v" - Name 378 "f16" - Name 379 "f16v1" - Name 383 "f16v2" - Name 389 "f16v3" - Name 408 "f16m3" - Name 409 "f16m1" - Name 411 "f16m2" - Name 420 "f16v1" - Name 422 "f16v2" - Name 427 "f16m4" - Name 430 "f16" - Name 433 "f16m5" - Name 438 "f16m6" - Name 439 "f16m7" - Name 442 "bv" - Name 443 "f16v1" - Name 445 "f16v2" - Name 463 "f16v" - Name 465 "if16v" - Name 522 "S" - MemberName 522(S) 0 "x" - MemberName 522(S) 1 "y" - MemberName 522(S) 2 "z" - Name 524 "B1" - MemberName 524(B1) 0 "a" - MemberName 524(B1) 1 "b" - MemberName 524(B1) 2 "c" - MemberName 524(B1) 3 "d" - MemberName 524(B1) 4 "e" - MemberName 524(B1) 5 "f" - MemberName 524(B1) 6 "g" - MemberName 524(B1) 7 "h" - Name 526 "" - Name 529 "S" - MemberName 529(S) 0 "x" - MemberName 529(S) 1 "y" - MemberName 529(S) 2 "z" - Name 531 "B2" - MemberName 531(B2) 0 "o" - MemberName 531(B2) 1 "p" - MemberName 531(B2) 2 "q" - MemberName 531(B2) 3 "r" - MemberName 531(B2) 4 "s" - MemberName 531(B2) 5 "t" - MemberName 531(B2) 6 "u" - MemberName 531(B2) 7 "v" - Name 533 "" - Name 534 "sf16" - Name 535 "sf" - Name 536 "sd" - Name 537 "f16_to_f" - Name 539 "f16_to_d" - Name 540 "f_to_f16" - Name 541 "d_to_f16" - Decorate 465(if16v) Location 0 - Decorate 520 ArrayStride 16 - Decorate 521 ArrayStride 32 - MemberDecorate 522(S) 0 Offset 0 - MemberDecorate 522(S) 1 Offset 4 - MemberDecorate 522(S) 2 Offset 8 - Decorate 523 ArrayStride 16 - MemberDecorate 524(B1) 0 Offset 0 - MemberDecorate 524(B1) 1 Offset 4 - MemberDecorate 524(B1) 2 Offset 8 - MemberDecorate 524(B1) 3 Offset 16 - MemberDecorate 524(B1) 4 ColMajor - MemberDecorate 524(B1) 4 Offset 48 - MemberDecorate 524(B1) 4 MatrixStride 16 - MemberDecorate 524(B1) 5 ColMajor - MemberDecorate 524(B1) 5 Offset 80 - MemberDecorate 524(B1) 5 MatrixStride 16 - MemberDecorate 524(B1) 6 Offset 144 - MemberDecorate 524(B1) 7 Offset 160 - Decorate 524(B1) Block - Decorate 526 DescriptorSet 0 - Decorate 526 Binding 0 - Decorate 527 ArrayStride 2 - Decorate 528 ArrayStride 12 - MemberDecorate 529(S) 0 Offset 0 - MemberDecorate 529(S) 1 Offset 4 - MemberDecorate 529(S) 2 Offset 8 - Decorate 530 ArrayStride 16 - MemberDecorate 531(B2) 0 Offset 0 - MemberDecorate 531(B2) 1 Offset 4 - MemberDecorate 531(B2) 2 Offset 8 - MemberDecorate 531(B2) 3 Offset 14 - MemberDecorate 531(B2) 4 RowMajor - MemberDecorate 531(B2) 4 Offset 20 - MemberDecorate 531(B2) 4 MatrixStride 4 - MemberDecorate 531(B2) 5 RowMajor - MemberDecorate 531(B2) 5 Offset 32 - MemberDecorate 531(B2) 5 MatrixStride 4 - MemberDecorate 531(B2) 6 Offset 56 - MemberDecorate 531(B2) 7 Offset 72 - Decorate 531(B2) BufferBlock - Decorate 533 DescriptorSet 0 - Decorate 533 Binding 0 - Decorate 534(sf16) SpecId 100 - Decorate 535(sf) SpecId 101 - Decorate 536(sd) SpecId 102 + Name 182 "iv" + Name 189 "uv" + Name 197 "i64v" + Name 205 "u64v" + Name 212 "f16v2" + Name 213 "f16v1" + Name 245 "f16v2" + Name 246 "f16v1" + Name 262 "f16v2" + Name 263 "f16v1" + Name 284 "f16" + Name 288 "f16v3" + Name 328 "bv" + Name 349 "b" + Name 359 "iv" + Name 360 "ResType" + Name 368 "u" + Name 369 "f16v" + Name 374 "f16" + Name 375 "f16v1" + Name 379 "f16v2" + Name 385 "f16v3" + Name 404 "f16m3" + Name 405 "f16m1" + Name 407 "f16m2" + Name 416 "f16v1" + Name 418 "f16v2" + Name 423 "f16m4" + Name 426 "f16" + Name 429 "f16m5" + Name 434 "f16m6" + Name 435 "f16m7" + Name 438 "bv" + Name 439 "f16v1" + Name 441 "f16v2" + Name 459 "f16v" + Name 461 "if16v" + Name 518 "S" + MemberName 518(S) 0 "x" + MemberName 518(S) 1 "y" + MemberName 518(S) 2 "z" + Name 520 "B1" + MemberName 520(B1) 0 "a" + MemberName 520(B1) 1 "b" + MemberName 520(B1) 2 "c" + MemberName 520(B1) 3 "d" + MemberName 520(B1) 4 "e" + MemberName 520(B1) 5 "f" + MemberName 520(B1) 6 "g" + MemberName 520(B1) 7 "h" + Name 522 "" + Name 525 "S" + MemberName 525(S) 0 "x" + MemberName 525(S) 1 "y" + MemberName 525(S) 2 "z" + Name 527 "B2" + MemberName 527(B2) 0 "o" + MemberName 527(B2) 1 "p" + MemberName 527(B2) 2 "q" + MemberName 527(B2) 3 "r" + MemberName 527(B2) 4 "s" + MemberName 527(B2) 5 "t" + MemberName 527(B2) 6 "u" + MemberName 527(B2) 7 "v" + Name 529 "" + Name 530 "sf16" + Name 531 "sf" + Name 532 "sd" + Name 533 "f16_to_f" + Name 535 "f16_to_d" + Name 536 "f_to_f16" + Name 537 "d_to_f16" + Decorate 461(if16v) Location 0 + Decorate 516 ArrayStride 16 + Decorate 517 ArrayStride 32 + MemberDecorate 518(S) 0 Offset 0 + MemberDecorate 518(S) 1 Offset 4 + MemberDecorate 518(S) 2 Offset 8 + Decorate 519 ArrayStride 16 + Decorate 520(B1) Block + MemberDecorate 520(B1) 0 Offset 0 + MemberDecorate 520(B1) 1 Offset 4 + MemberDecorate 520(B1) 2 Offset 8 + MemberDecorate 520(B1) 3 Offset 16 + MemberDecorate 520(B1) 4 ColMajor + MemberDecorate 520(B1) 4 MatrixStride 16 + MemberDecorate 520(B1) 4 Offset 48 + MemberDecorate 520(B1) 5 ColMajor + MemberDecorate 520(B1) 5 MatrixStride 16 + MemberDecorate 520(B1) 5 Offset 80 + MemberDecorate 520(B1) 6 Offset 144 + MemberDecorate 520(B1) 7 Offset 160 + Decorate 522 Binding 0 + Decorate 522 DescriptorSet 0 + Decorate 523 ArrayStride 2 + Decorate 524 ArrayStride 12 + MemberDecorate 525(S) 0 Offset 0 + MemberDecorate 525(S) 1 Offset 4 + MemberDecorate 525(S) 2 Offset 8 + Decorate 526 ArrayStride 16 + Decorate 527(B2) BufferBlock + MemberDecorate 527(B2) 0 Offset 0 + MemberDecorate 527(B2) 1 Offset 4 + MemberDecorate 527(B2) 2 Offset 8 + MemberDecorate 527(B2) 3 Offset 14 + MemberDecorate 527(B2) 4 RowMajor + MemberDecorate 527(B2) 4 MatrixStride 4 + MemberDecorate 527(B2) 4 Offset 20 + MemberDecorate 527(B2) 5 RowMajor + MemberDecorate 527(B2) 5 MatrixStride 4 + MemberDecorate 527(B2) 5 Offset 32 + MemberDecorate 527(B2) 6 Offset 56 + MemberDecorate 527(B2) 7 Offset 72 + Decorate 529 Binding 0 + Decorate 529 DescriptorSet 0 + Decorate 530(sf16) SpecId 100 + Decorate 531(sf) SpecId 101 + Decorate 532(sd) SpecId 102 2: TypeVoid 3: TypeFunction 2 28: TypeFloat 16 @@ -192,58 +192,58 @@ Validation failed 172: TypeFloat 64 173: TypeVector 172(float64_t) 3 174: TypePointer Function 173(f64vec3) - 183: TypeInt 32 1 - 184: TypeVector 183(int) 3 - 185: TypePointer Function 184(ivec3) - 191: TypeVector 33(int) 3 - 192: TypePointer Function 191(ivec3) - 198: TypeInt 64 1 - 199: TypeVector 198(int64_t) 3 - 200: TypePointer Function 199(i64vec3) - 206: TypeInt 64 0 - 207: TypeVector 206(int64_t) 3 - 208: TypePointer Function 207(i64vec3) - 214: TypeVector 28(float16_t) 4 - 215: TypePointer Function 214(f16vec4) - 364(ResType): TypeStruct 151(f16vec3) 184(ivec3) - 371: TypePointer Function 33(int) - 406: TypeMatrix 151(f16vec3) 2 - 407: TypePointer Function 406 - 425: TypeMatrix 29(f16vec2) 3 - 426: TypePointer Function 425 - 431: TypeMatrix 151(f16vec3) 3 - 432: TypePointer Function 431 - 436: TypeMatrix 214(f16vec4) 4 - 437: TypePointer Function 436 - 464: TypePointer Input 151(f16vec3) - 465(if16v): 464(ptr) Variable Input - 466: TypePointer Input 28(float16_t) - 509: 183(int) Constant 1 - 516:28(float16_t) Constant 14336 - 517: 29(f16vec2) ConstantComposite 516 516 - 519: 33(int) Constant 2 - 520: TypeArray 28(float16_t) 519 - 521: TypeArray 406 519 - 522(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) - 523: TypeArray 522(S) 519 - 524(B1): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 520 406 521 522(S) 523 - 525: TypePointer Uniform 524(B1) - 526: 525(ptr) Variable Uniform - 527: TypeArray 28(float16_t) 519 - 528: TypeArray 406 519 - 529(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) - 530: TypeArray 529(S) 519 - 531(B2): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 527 406 528 529(S) 530 - 532: TypePointer Uniform 531(B2) - 533: 532(ptr) Variable Uniform - 534(sf16):28(float16_t) SpecConstant 12288 - 535(sf): 164(float) SpecConstant 1048576000 - 536(sd):172(float64_t) SpecConstant 0 1071644672 - 537(f16_to_f): 164(float) SpecConstantOp 115 534(sf16) - 538: 164(float) SpecConstantOp 115 534(sf16) - 539(f16_to_d):172(float64_t) SpecConstantOp 115 538 - 540(f_to_f16):28(float16_t) SpecConstantOp 115 535(sf) - 541(d_to_f16):28(float16_t) SpecConstantOp 115 536(sd) + 179: TypeInt 32 1 + 180: TypeVector 179(int) 3 + 181: TypePointer Function 180(ivec3) + 187: TypeVector 33(int) 3 + 188: TypePointer Function 187(ivec3) + 194: TypeInt 64 1 + 195: TypeVector 194(int64_t) 3 + 196: TypePointer Function 195(i64vec3) + 202: TypeInt 64 0 + 203: TypeVector 202(int64_t) 3 + 204: TypePointer Function 203(i64vec3) + 210: TypeVector 28(float16_t) 4 + 211: TypePointer Function 210(f16vec4) + 360(ResType): TypeStruct 151(f16vec3) 180(ivec3) + 367: TypePointer Function 33(int) + 402: TypeMatrix 151(f16vec3) 2 + 403: TypePointer Function 402 + 421: TypeMatrix 29(f16vec2) 3 + 422: TypePointer Function 421 + 427: TypeMatrix 151(f16vec3) 3 + 428: TypePointer Function 427 + 432: TypeMatrix 210(f16vec4) 4 + 433: TypePointer Function 432 + 460: TypePointer Input 151(f16vec3) + 461(if16v): 460(ptr) Variable Input + 462: TypePointer Input 28(float16_t) + 505: 179(int) Constant 1 + 512:28(float16_t) Constant 14336 + 513: 29(f16vec2) ConstantComposite 512 512 + 515: 33(int) Constant 2 + 516: TypeArray 28(float16_t) 515 + 517: TypeArray 402 515 + 518(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) + 519: TypeArray 518(S) 515 + 520(B1): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 516 402 517 518(S) 519 + 521: TypePointer Uniform 520(B1) + 522: 521(ptr) Variable Uniform + 523: TypeArray 28(float16_t) 515 + 524: TypeArray 402 515 + 525(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) + 526: TypeArray 525(S) 515 + 527(B2): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 523 402 524 525(S) 526 + 528: TypePointer Uniform 527(B2) + 529: 528(ptr) Variable Uniform + 530(sf16):28(float16_t) SpecConstant 12288 + 531(sf): 164(float) SpecConstant 1048576000 + 532(sd):172(float64_t) SpecConstant 0 1071644672 + 533(f16_to_f): 164(float) SpecConstantOp 115 530(sf16) + 534: 164(float) SpecConstantOp 115 530(sf16) + 535(f16_to_d):172(float64_t) SpecConstantOp 115 534 + 536(f_to_f16):28(float16_t) SpecConstantOp 115 531(sf) + 537(d_to_f16):28(float16_t) SpecConstantOp 115 532(sd) 4(main): 2 Function None 3 5: Label Return @@ -396,10 +396,10 @@ Validation failed 156(bv): 155(ptr) Variable Function 167(fv): 166(ptr) Variable Function 175(dv): 174(ptr) Variable Function - 186(iv): 185(ptr) Variable Function - 193(uv): 192(ptr) Variable Function - 201(i64v): 200(ptr) Variable Function - 209(u64v): 208(ptr) Variable Function + 182(iv): 181(ptr) Variable Function + 189(uv): 188(ptr) Variable Function + 197(i64v): 196(ptr) Variable Function + 205(u64v): 204(ptr) Variable Function 157: 154(bvec3) Load 156(bv) 161:151(f16vec3) Select 157 160 159 Store 153(f16v) 161 @@ -416,442 +416,438 @@ Validation failed 177:151(f16vec3) FConvert 176 Store 153(f16v) 177 178:173(f64vec3) Load 175(dv) - 179:172(float64_t) CompositeExtract 178 0 - 180:172(float64_t) CompositeExtract 178 1 - 181:172(float64_t) CompositeExtract 178 2 - 182:173(f64vec3) CompositeConstruct 179 180 181 - Store 175(dv) 182 - 187: 184(ivec3) Load 186(iv) - 188:151(f16vec3) ConvertSToF 187 - Store 153(f16v) 188 - 189:151(f16vec3) Load 153(f16v) - 190: 184(ivec3) ConvertFToS 189 - Store 186(iv) 190 - 194: 191(ivec3) Load 193(uv) - 195:151(f16vec3) ConvertUToF 194 - Store 153(f16v) 195 - 196:151(f16vec3) Load 153(f16v) - 197: 191(ivec3) ConvertFToU 196 - Store 193(uv) 197 - 202:199(i64vec3) Load 201(i64v) - 203:151(f16vec3) ConvertSToF 202 - Store 153(f16v) 203 - 204:151(f16vec3) Load 153(f16v) - 205:199(i64vec3) ConvertFToS 204 - Store 201(i64v) 205 - 210:207(i64vec3) Load 209(u64v) - 211:151(f16vec3) ConvertUToF 210 - Store 153(f16v) 211 - 212:151(f16vec3) Load 153(f16v) - 213:207(i64vec3) ConvertFToU 212 - Store 209(u64v) 213 + Store 175(dv) 178 + 183: 180(ivec3) Load 182(iv) + 184:151(f16vec3) ConvertSToF 183 + Store 153(f16v) 184 + 185:151(f16vec3) Load 153(f16v) + 186: 180(ivec3) ConvertFToS 185 + Store 182(iv) 186 + 190: 187(ivec3) Load 189(uv) + 191:151(f16vec3) ConvertUToF 190 + Store 153(f16v) 191 + 192:151(f16vec3) Load 153(f16v) + 193: 187(ivec3) ConvertFToU 192 + Store 189(uv) 193 + 198:195(i64vec3) Load 197(i64v) + 199:151(f16vec3) ConvertSToF 198 + Store 153(f16v) 199 + 200:151(f16vec3) Load 153(f16v) + 201:195(i64vec3) ConvertFToS 200 + Store 197(i64v) 201 + 206:203(i64vec3) Load 205(u64v) + 207:151(f16vec3) ConvertUToF 206 + Store 153(f16v) 207 + 208:151(f16vec3) Load 153(f16v) + 209:203(i64vec3) ConvertFToU 208 + Store 205(u64v) 209 Return FunctionEnd 12(builtinAngleTrigFuncs(): 2 Function None 3 13: Label - 216(f16v2): 215(ptr) Variable Function - 217(f16v1): 215(ptr) Variable Function - 218:214(f16vec4) Load 217(f16v1) - 219:214(f16vec4) ExtInst 1(GLSL.std.450) 11(Radians) 218 - Store 216(f16v2) 219 - 220:214(f16vec4) Load 217(f16v1) - 221:214(f16vec4) ExtInst 1(GLSL.std.450) 12(Degrees) 220 - Store 216(f16v2) 221 - 222:214(f16vec4) Load 217(f16v1) - 223:214(f16vec4) ExtInst 1(GLSL.std.450) 13(Sin) 222 - Store 216(f16v2) 223 - 224:214(f16vec4) Load 217(f16v1) - 225:214(f16vec4) ExtInst 1(GLSL.std.450) 14(Cos) 224 - Store 216(f16v2) 225 - 226:214(f16vec4) Load 217(f16v1) - 227:214(f16vec4) ExtInst 1(GLSL.std.450) 15(Tan) 226 - Store 216(f16v2) 227 - 228:214(f16vec4) Load 217(f16v1) - 229:214(f16vec4) ExtInst 1(GLSL.std.450) 16(Asin) 228 - Store 216(f16v2) 229 - 230:214(f16vec4) Load 217(f16v1) - 231:214(f16vec4) ExtInst 1(GLSL.std.450) 17(Acos) 230 - Store 216(f16v2) 231 - 232:214(f16vec4) Load 217(f16v1) - 233:214(f16vec4) Load 216(f16v2) - 234:214(f16vec4) ExtInst 1(GLSL.std.450) 25(Atan2) 232 233 - Store 216(f16v2) 234 - 235:214(f16vec4) Load 217(f16v1) - 236:214(f16vec4) ExtInst 1(GLSL.std.450) 18(Atan) 235 - Store 216(f16v2) 236 - 237:214(f16vec4) Load 217(f16v1) - 238:214(f16vec4) ExtInst 1(GLSL.std.450) 19(Sinh) 237 - Store 216(f16v2) 238 - 239:214(f16vec4) Load 217(f16v1) - 240:214(f16vec4) ExtInst 1(GLSL.std.450) 20(Cosh) 239 - Store 216(f16v2) 240 - 241:214(f16vec4) Load 217(f16v1) - 242:214(f16vec4) ExtInst 1(GLSL.std.450) 21(Tanh) 241 - Store 216(f16v2) 242 - 243:214(f16vec4) Load 217(f16v1) - 244:214(f16vec4) ExtInst 1(GLSL.std.450) 22(Asinh) 243 - Store 216(f16v2) 244 - 245:214(f16vec4) Load 217(f16v1) - 246:214(f16vec4) ExtInst 1(GLSL.std.450) 23(Acosh) 245 - Store 216(f16v2) 246 - 247:214(f16vec4) Load 217(f16v1) - 248:214(f16vec4) ExtInst 1(GLSL.std.450) 24(Atanh) 247 - Store 216(f16v2) 248 + 212(f16v2): 211(ptr) Variable Function + 213(f16v1): 211(ptr) Variable Function + 214:210(f16vec4) Load 213(f16v1) + 215:210(f16vec4) ExtInst 1(GLSL.std.450) 11(Radians) 214 + Store 212(f16v2) 215 + 216:210(f16vec4) Load 213(f16v1) + 217:210(f16vec4) ExtInst 1(GLSL.std.450) 12(Degrees) 216 + Store 212(f16v2) 217 + 218:210(f16vec4) Load 213(f16v1) + 219:210(f16vec4) ExtInst 1(GLSL.std.450) 13(Sin) 218 + Store 212(f16v2) 219 + 220:210(f16vec4) Load 213(f16v1) + 221:210(f16vec4) ExtInst 1(GLSL.std.450) 14(Cos) 220 + Store 212(f16v2) 221 + 222:210(f16vec4) Load 213(f16v1) + 223:210(f16vec4) ExtInst 1(GLSL.std.450) 15(Tan) 222 + Store 212(f16v2) 223 + 224:210(f16vec4) Load 213(f16v1) + 225:210(f16vec4) ExtInst 1(GLSL.std.450) 16(Asin) 224 + Store 212(f16v2) 225 + 226:210(f16vec4) Load 213(f16v1) + 227:210(f16vec4) ExtInst 1(GLSL.std.450) 17(Acos) 226 + Store 212(f16v2) 227 + 228:210(f16vec4) Load 213(f16v1) + 229:210(f16vec4) Load 212(f16v2) + 230:210(f16vec4) ExtInst 1(GLSL.std.450) 25(Atan2) 228 229 + Store 212(f16v2) 230 + 231:210(f16vec4) Load 213(f16v1) + 232:210(f16vec4) ExtInst 1(GLSL.std.450) 18(Atan) 231 + Store 212(f16v2) 232 + 233:210(f16vec4) Load 213(f16v1) + 234:210(f16vec4) ExtInst 1(GLSL.std.450) 19(Sinh) 233 + Store 212(f16v2) 234 + 235:210(f16vec4) Load 213(f16v1) + 236:210(f16vec4) ExtInst 1(GLSL.std.450) 20(Cosh) 235 + Store 212(f16v2) 236 + 237:210(f16vec4) Load 213(f16v1) + 238:210(f16vec4) ExtInst 1(GLSL.std.450) 21(Tanh) 237 + Store 212(f16v2) 238 + 239:210(f16vec4) Load 213(f16v1) + 240:210(f16vec4) ExtInst 1(GLSL.std.450) 22(Asinh) 239 + Store 212(f16v2) 240 + 241:210(f16vec4) Load 213(f16v1) + 242:210(f16vec4) ExtInst 1(GLSL.std.450) 23(Acosh) 241 + Store 212(f16v2) 242 + 243:210(f16vec4) Load 213(f16v1) + 244:210(f16vec4) ExtInst 1(GLSL.std.450) 24(Atanh) 243 + Store 212(f16v2) 244 Return FunctionEnd 14(builtinExpFuncs(): 2 Function None 3 15: Label - 249(f16v2): 30(ptr) Variable Function - 250(f16v1): 30(ptr) Variable Function - 251: 29(f16vec2) Load 250(f16v1) - 252: 29(f16vec2) Load 249(f16v2) - 253: 29(f16vec2) ExtInst 1(GLSL.std.450) 26(Pow) 251 252 - Store 249(f16v2) 253 - 254: 29(f16vec2) Load 250(f16v1) - 255: 29(f16vec2) ExtInst 1(GLSL.std.450) 27(Exp) 254 - Store 249(f16v2) 255 - 256: 29(f16vec2) Load 250(f16v1) - 257: 29(f16vec2) ExtInst 1(GLSL.std.450) 28(Log) 256 - Store 249(f16v2) 257 - 258: 29(f16vec2) Load 250(f16v1) - 259: 29(f16vec2) ExtInst 1(GLSL.std.450) 29(Exp2) 258 - Store 249(f16v2) 259 - 260: 29(f16vec2) Load 250(f16v1) - 261: 29(f16vec2) ExtInst 1(GLSL.std.450) 30(Log2) 260 - Store 249(f16v2) 261 - 262: 29(f16vec2) Load 250(f16v1) - 263: 29(f16vec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 262 - Store 249(f16v2) 263 - 264: 29(f16vec2) Load 250(f16v1) - 265: 29(f16vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 264 - Store 249(f16v2) 265 + 245(f16v2): 30(ptr) Variable Function + 246(f16v1): 30(ptr) Variable Function + 247: 29(f16vec2) Load 246(f16v1) + 248: 29(f16vec2) Load 245(f16v2) + 249: 29(f16vec2) ExtInst 1(GLSL.std.450) 26(Pow) 247 248 + Store 245(f16v2) 249 + 250: 29(f16vec2) Load 246(f16v1) + 251: 29(f16vec2) ExtInst 1(GLSL.std.450) 27(Exp) 250 + Store 245(f16v2) 251 + 252: 29(f16vec2) Load 246(f16v1) + 253: 29(f16vec2) ExtInst 1(GLSL.std.450) 28(Log) 252 + Store 245(f16v2) 253 + 254: 29(f16vec2) Load 246(f16v1) + 255: 29(f16vec2) ExtInst 1(GLSL.std.450) 29(Exp2) 254 + Store 245(f16v2) 255 + 256: 29(f16vec2) Load 246(f16v1) + 257: 29(f16vec2) ExtInst 1(GLSL.std.450) 30(Log2) 256 + Store 245(f16v2) 257 + 258: 29(f16vec2) Load 246(f16v1) + 259: 29(f16vec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 258 + Store 245(f16v2) 259 + 260: 29(f16vec2) Load 246(f16v1) + 261: 29(f16vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 260 + Store 245(f16v2) 261 Return FunctionEnd 16(builtinCommonFuncs(): 2 Function None 3 17: Label - 266(f16v2): 152(ptr) Variable Function - 267(f16v1): 152(ptr) Variable Function - 288(f16): 35(ptr) Variable Function - 292(f16v3): 152(ptr) Variable Function - 332(bv): 155(ptr) Variable Function - 353(b): 110(ptr) Variable Function - 363(iv): 185(ptr) Variable Function - 268:151(f16vec3) Load 267(f16v1) - 269:151(f16vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 268 - Store 266(f16v2) 269 - 270:151(f16vec3) Load 267(f16v1) - 271:151(f16vec3) ExtInst 1(GLSL.std.450) 6(FSign) 270 - Store 266(f16v2) 271 - 272:151(f16vec3) Load 267(f16v1) - 273:151(f16vec3) ExtInst 1(GLSL.std.450) 8(Floor) 272 - Store 266(f16v2) 273 - 274:151(f16vec3) Load 267(f16v1) - 275:151(f16vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 274 - Store 266(f16v2) 275 - 276:151(f16vec3) Load 267(f16v1) - 277:151(f16vec3) ExtInst 1(GLSL.std.450) 1(Round) 276 - Store 266(f16v2) 277 - 278:151(f16vec3) Load 267(f16v1) - 279:151(f16vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 278 - Store 266(f16v2) 279 - 280:151(f16vec3) Load 267(f16v1) - 281:151(f16vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 280 - Store 266(f16v2) 281 - 282:151(f16vec3) Load 267(f16v1) - 283:151(f16vec3) ExtInst 1(GLSL.std.450) 10(Fract) 282 - Store 266(f16v2) 283 - 284:151(f16vec3) Load 267(f16v1) - 285:151(f16vec3) Load 266(f16v2) - 286:151(f16vec3) FMod 284 285 - Store 266(f16v2) 286 - 287:151(f16vec3) Load 267(f16v1) - 289:28(float16_t) Load 288(f16) - 290:151(f16vec3) CompositeConstruct 289 289 289 - 291:151(f16vec3) FMod 287 290 - Store 266(f16v2) 291 - 293:151(f16vec3) Load 267(f16v1) - 294:151(f16vec3) ExtInst 1(GLSL.std.450) 35(Modf) 293 266(f16v2) - Store 292(f16v3) 294 - 295:151(f16vec3) Load 267(f16v1) - 296:151(f16vec3) Load 266(f16v2) - 297:151(f16vec3) ExtInst 1(GLSL.std.450) 37(FMin) 295 296 - Store 292(f16v3) 297 - 298:151(f16vec3) Load 267(f16v1) - 299:28(float16_t) Load 288(f16) - 300:151(f16vec3) CompositeConstruct 299 299 299 - 301:151(f16vec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 300 - Store 292(f16v3) 301 - 302:151(f16vec3) Load 267(f16v1) - 303:151(f16vec3) Load 266(f16v2) - 304:151(f16vec3) ExtInst 1(GLSL.std.450) 40(FMax) 302 303 - Store 292(f16v3) 304 - 305:151(f16vec3) Load 267(f16v1) - 306:28(float16_t) Load 288(f16) - 307:151(f16vec3) CompositeConstruct 306 306 306 - 308:151(f16vec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 307 - Store 292(f16v3) 308 - 309:151(f16vec3) Load 267(f16v1) - 310:28(float16_t) Load 288(f16) - 311: 35(ptr) AccessChain 266(f16v2) 34 - 312:28(float16_t) Load 311 - 313:151(f16vec3) CompositeConstruct 310 310 310 - 314:151(f16vec3) CompositeConstruct 312 312 312 - 315:151(f16vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 309 313 314 - Store 292(f16v3) 315 - 316:151(f16vec3) Load 267(f16v1) - 317:151(f16vec3) Load 266(f16v2) - 318:28(float16_t) Load 288(f16) - 319:151(f16vec3) CompositeConstruct 318 318 318 - 320:151(f16vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 316 317 319 - Store 292(f16v3) 320 - 321:151(f16vec3) Load 267(f16v1) - 322:151(f16vec3) Load 266(f16v2) - 323:28(float16_t) Load 288(f16) - 324:151(f16vec3) CompositeConstruct 323 323 323 - 325:151(f16vec3) ExtInst 1(GLSL.std.450) 46(FMix) 321 322 324 - Store 292(f16v3) 325 - 326:151(f16vec3) Load 267(f16v1) - 327:151(f16vec3) Load 266(f16v2) - 328:151(f16vec3) Load 292(f16v3) - 329:151(f16vec3) ExtInst 1(GLSL.std.450) 46(FMix) 326 327 328 - Store 292(f16v3) 329 - 330:151(f16vec3) Load 267(f16v1) - 331:151(f16vec3) Load 266(f16v2) - 333: 154(bvec3) Load 332(bv) - 334:151(f16vec3) Select 333 331 330 - Store 292(f16v3) 334 - 335:151(f16vec3) Load 267(f16v1) - 336:151(f16vec3) Load 266(f16v2) - 337:151(f16vec3) ExtInst 1(GLSL.std.450) 48(Step) 335 336 - Store 292(f16v3) 337 - 338:28(float16_t) Load 288(f16) - 339:151(f16vec3) Load 292(f16v3) - 340:151(f16vec3) CompositeConstruct 338 338 338 - 341:151(f16vec3) ExtInst 1(GLSL.std.450) 48(Step) 340 339 - Store 292(f16v3) 341 - 342:151(f16vec3) Load 267(f16v1) - 343:151(f16vec3) Load 266(f16v2) - 344:151(f16vec3) Load 292(f16v3) - 345:151(f16vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 342 343 344 - Store 292(f16v3) 345 - 346:28(float16_t) Load 288(f16) - 347: 35(ptr) AccessChain 267(f16v1) 34 - 348:28(float16_t) Load 347 - 349:151(f16vec3) Load 266(f16v2) - 350:151(f16vec3) CompositeConstruct 346 346 346 - 351:151(f16vec3) CompositeConstruct 348 348 348 - 352:151(f16vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 350 351 349 - Store 292(f16v3) 352 - 354:28(float16_t) Load 288(f16) - 355: 109(bool) IsNan 354 - Store 353(b) 355 - 356:151(f16vec3) Load 267(f16v1) - 357: 154(bvec3) IsInf 356 - Store 332(bv) 357 - 358:151(f16vec3) Load 267(f16v1) - 359:151(f16vec3) Load 266(f16v2) - 360:151(f16vec3) Load 292(f16v3) - 361:151(f16vec3) ExtInst 1(GLSL.std.450) 50(Fma) 358 359 360 - Store 292(f16v3) 361 - 362:151(f16vec3) Load 267(f16v1) - 365:364(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 362 - 366: 184(ivec3) CompositeExtract 365 1 - Store 363(iv) 366 - 367:151(f16vec3) CompositeExtract 365 0 - Store 266(f16v2) 367 - 368:151(f16vec3) Load 267(f16v1) - 369: 184(ivec3) Load 363(iv) - 370:151(f16vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 368 369 - Store 266(f16v2) 370 + 262(f16v2): 152(ptr) Variable Function + 263(f16v1): 152(ptr) Variable Function + 284(f16): 35(ptr) Variable Function + 288(f16v3): 152(ptr) Variable Function + 328(bv): 155(ptr) Variable Function + 349(b): 110(ptr) Variable Function + 359(iv): 181(ptr) Variable Function + 264:151(f16vec3) Load 263(f16v1) + 265:151(f16vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 264 + Store 262(f16v2) 265 + 266:151(f16vec3) Load 263(f16v1) + 267:151(f16vec3) ExtInst 1(GLSL.std.450) 6(FSign) 266 + Store 262(f16v2) 267 + 268:151(f16vec3) Load 263(f16v1) + 269:151(f16vec3) ExtInst 1(GLSL.std.450) 8(Floor) 268 + Store 262(f16v2) 269 + 270:151(f16vec3) Load 263(f16v1) + 271:151(f16vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 270 + Store 262(f16v2) 271 + 272:151(f16vec3) Load 263(f16v1) + 273:151(f16vec3) ExtInst 1(GLSL.std.450) 1(Round) 272 + Store 262(f16v2) 273 + 274:151(f16vec3) Load 263(f16v1) + 275:151(f16vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 274 + Store 262(f16v2) 275 + 276:151(f16vec3) Load 263(f16v1) + 277:151(f16vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 276 + Store 262(f16v2) 277 + 278:151(f16vec3) Load 263(f16v1) + 279:151(f16vec3) ExtInst 1(GLSL.std.450) 10(Fract) 278 + Store 262(f16v2) 279 + 280:151(f16vec3) Load 263(f16v1) + 281:151(f16vec3) Load 262(f16v2) + 282:151(f16vec3) FMod 280 281 + Store 262(f16v2) 282 + 283:151(f16vec3) Load 263(f16v1) + 285:28(float16_t) Load 284(f16) + 286:151(f16vec3) CompositeConstruct 285 285 285 + 287:151(f16vec3) FMod 283 286 + Store 262(f16v2) 287 + 289:151(f16vec3) Load 263(f16v1) + 290:151(f16vec3) ExtInst 1(GLSL.std.450) 35(Modf) 289 262(f16v2) + Store 288(f16v3) 290 + 291:151(f16vec3) Load 263(f16v1) + 292:151(f16vec3) Load 262(f16v2) + 293:151(f16vec3) ExtInst 1(GLSL.std.450) 37(FMin) 291 292 + Store 288(f16v3) 293 + 294:151(f16vec3) Load 263(f16v1) + 295:28(float16_t) Load 284(f16) + 296:151(f16vec3) CompositeConstruct 295 295 295 + 297:151(f16vec3) ExtInst 1(GLSL.std.450) 37(FMin) 294 296 + Store 288(f16v3) 297 + 298:151(f16vec3) Load 263(f16v1) + 299:151(f16vec3) Load 262(f16v2) + 300:151(f16vec3) ExtInst 1(GLSL.std.450) 40(FMax) 298 299 + Store 288(f16v3) 300 + 301:151(f16vec3) Load 263(f16v1) + 302:28(float16_t) Load 284(f16) + 303:151(f16vec3) CompositeConstruct 302 302 302 + 304:151(f16vec3) ExtInst 1(GLSL.std.450) 40(FMax) 301 303 + Store 288(f16v3) 304 + 305:151(f16vec3) Load 263(f16v1) + 306:28(float16_t) Load 284(f16) + 307: 35(ptr) AccessChain 262(f16v2) 34 + 308:28(float16_t) Load 307 + 309:151(f16vec3) CompositeConstruct 306 306 306 + 310:151(f16vec3) CompositeConstruct 308 308 308 + 311:151(f16vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 305 309 310 + Store 288(f16v3) 311 + 312:151(f16vec3) Load 263(f16v1) + 313:151(f16vec3) Load 262(f16v2) + 314:28(float16_t) Load 284(f16) + 315:151(f16vec3) CompositeConstruct 314 314 314 + 316:151(f16vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 312 313 315 + Store 288(f16v3) 316 + 317:151(f16vec3) Load 263(f16v1) + 318:151(f16vec3) Load 262(f16v2) + 319:28(float16_t) Load 284(f16) + 320:151(f16vec3) CompositeConstruct 319 319 319 + 321:151(f16vec3) ExtInst 1(GLSL.std.450) 46(FMix) 317 318 320 + Store 288(f16v3) 321 + 322:151(f16vec3) Load 263(f16v1) + 323:151(f16vec3) Load 262(f16v2) + 324:151(f16vec3) Load 288(f16v3) + 325:151(f16vec3) ExtInst 1(GLSL.std.450) 46(FMix) 322 323 324 + Store 288(f16v3) 325 + 326:151(f16vec3) Load 263(f16v1) + 327:151(f16vec3) Load 262(f16v2) + 329: 154(bvec3) Load 328(bv) + 330:151(f16vec3) Select 329 327 326 + Store 288(f16v3) 330 + 331:151(f16vec3) Load 263(f16v1) + 332:151(f16vec3) Load 262(f16v2) + 333:151(f16vec3) ExtInst 1(GLSL.std.450) 48(Step) 331 332 + Store 288(f16v3) 333 + 334:28(float16_t) Load 284(f16) + 335:151(f16vec3) Load 288(f16v3) + 336:151(f16vec3) CompositeConstruct 334 334 334 + 337:151(f16vec3) ExtInst 1(GLSL.std.450) 48(Step) 336 335 + Store 288(f16v3) 337 + 338:151(f16vec3) Load 263(f16v1) + 339:151(f16vec3) Load 262(f16v2) + 340:151(f16vec3) Load 288(f16v3) + 341:151(f16vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 338 339 340 + Store 288(f16v3) 341 + 342:28(float16_t) Load 284(f16) + 343: 35(ptr) AccessChain 263(f16v1) 34 + 344:28(float16_t) Load 343 + 345:151(f16vec3) Load 262(f16v2) + 346:151(f16vec3) CompositeConstruct 342 342 342 + 347:151(f16vec3) CompositeConstruct 344 344 344 + 348:151(f16vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 346 347 345 + Store 288(f16v3) 348 + 350:28(float16_t) Load 284(f16) + 351: 109(bool) IsNan 350 + Store 349(b) 351 + 352:151(f16vec3) Load 263(f16v1) + 353: 154(bvec3) IsInf 352 + Store 328(bv) 353 + 354:151(f16vec3) Load 263(f16v1) + 355:151(f16vec3) Load 262(f16v2) + 356:151(f16vec3) Load 288(f16v3) + 357:151(f16vec3) ExtInst 1(GLSL.std.450) 50(Fma) 354 355 356 + Store 288(f16v3) 357 + 358:151(f16vec3) Load 263(f16v1) + 361:360(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 358 + 362: 180(ivec3) CompositeExtract 361 1 + Store 359(iv) 362 + 363:151(f16vec3) CompositeExtract 361 0 + Store 262(f16v2) 363 + 364:151(f16vec3) Load 263(f16v1) + 365: 180(ivec3) Load 359(iv) + 366:151(f16vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 364 365 + Store 262(f16v2) 366 Return FunctionEnd 18(builtinPackUnpackFuncs(): 2 Function None 3 19: Label - 372(u): 371(ptr) Variable Function - 373(f16v): 30(ptr) Variable Function - 374: 29(f16vec2) Load 373(f16v) - 375: 33(int) Bitcast 374 - Store 372(u) 375 - 376: 33(int) Load 372(u) - 377: 29(f16vec2) Bitcast 376 - Store 373(f16v) 377 + 368(u): 367(ptr) Variable Function + 369(f16v): 30(ptr) Variable Function + 370: 29(f16vec2) Load 369(f16v) + 371: 33(int) Bitcast 370 + Store 368(u) 371 + 372: 33(int) Load 368(u) + 373: 29(f16vec2) Bitcast 372 + Store 369(f16v) 373 Return FunctionEnd 20(builtinGeometryFuncs(): 2 Function None 3 21: Label - 378(f16): 35(ptr) Variable Function - 379(f16v1): 152(ptr) Variable Function - 383(f16v2): 152(ptr) Variable Function - 389(f16v3): 152(ptr) Variable Function - 380:151(f16vec3) Load 379(f16v1) - 381:28(float16_t) ExtInst 1(GLSL.std.450) 66(Length) 380 - Store 378(f16) 381 - 382:151(f16vec3) Load 379(f16v1) - 384:151(f16vec3) Load 383(f16v2) - 385:28(float16_t) ExtInst 1(GLSL.std.450) 67(Distance) 382 384 - Store 378(f16) 385 - 386:151(f16vec3) Load 379(f16v1) - 387:151(f16vec3) Load 383(f16v2) - 388:28(float16_t) Dot 386 387 - Store 378(f16) 388 - 390:151(f16vec3) Load 379(f16v1) - 391:151(f16vec3) Load 383(f16v2) - 392:151(f16vec3) ExtInst 1(GLSL.std.450) 68(Cross) 390 391 - Store 389(f16v3) 392 - 393:151(f16vec3) Load 379(f16v1) - 394:151(f16vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 393 - Store 383(f16v2) 394 - 395:151(f16vec3) Load 379(f16v1) - 396:151(f16vec3) Load 383(f16v2) - 397:151(f16vec3) Load 389(f16v3) - 398:151(f16vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 395 396 397 - Store 389(f16v3) 398 - 399:151(f16vec3) Load 379(f16v1) - 400:151(f16vec3) Load 383(f16v2) - 401:151(f16vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 399 400 - Store 389(f16v3) 401 - 402:151(f16vec3) Load 379(f16v1) - 403:151(f16vec3) Load 383(f16v2) - 404:28(float16_t) Load 378(f16) - 405:151(f16vec3) ExtInst 1(GLSL.std.450) 72(Refract) 402 403 404 - Store 389(f16v3) 405 + 374(f16): 35(ptr) Variable Function + 375(f16v1): 152(ptr) Variable Function + 379(f16v2): 152(ptr) Variable Function + 385(f16v3): 152(ptr) Variable Function + 376:151(f16vec3) Load 375(f16v1) + 377:28(float16_t) ExtInst 1(GLSL.std.450) 66(Length) 376 + Store 374(f16) 377 + 378:151(f16vec3) Load 375(f16v1) + 380:151(f16vec3) Load 379(f16v2) + 381:28(float16_t) ExtInst 1(GLSL.std.450) 67(Distance) 378 380 + Store 374(f16) 381 + 382:151(f16vec3) Load 375(f16v1) + 383:151(f16vec3) Load 379(f16v2) + 384:28(float16_t) Dot 382 383 + Store 374(f16) 384 + 386:151(f16vec3) Load 375(f16v1) + 387:151(f16vec3) Load 379(f16v2) + 388:151(f16vec3) ExtInst 1(GLSL.std.450) 68(Cross) 386 387 + Store 385(f16v3) 388 + 389:151(f16vec3) Load 375(f16v1) + 390:151(f16vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 389 + Store 379(f16v2) 390 + 391:151(f16vec3) Load 375(f16v1) + 392:151(f16vec3) Load 379(f16v2) + 393:151(f16vec3) Load 385(f16v3) + 394:151(f16vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 391 392 393 + Store 385(f16v3) 394 + 395:151(f16vec3) Load 375(f16v1) + 396:151(f16vec3) Load 379(f16v2) + 397:151(f16vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 395 396 + Store 385(f16v3) 397 + 398:151(f16vec3) Load 375(f16v1) + 399:151(f16vec3) Load 379(f16v2) + 400:28(float16_t) Load 374(f16) + 401:151(f16vec3) ExtInst 1(GLSL.std.450) 72(Refract) 398 399 400 + Store 385(f16v3) 401 Return FunctionEnd 22(builtinMatrixFuncs(): 2 Function None 3 23: Label - 408(f16m3): 407(ptr) Variable Function - 409(f16m1): 407(ptr) Variable Function - 411(f16m2): 407(ptr) Variable Function - 420(f16v1): 152(ptr) Variable Function - 422(f16v2): 30(ptr) Variable Function - 427(f16m4): 426(ptr) Variable Function - 430(f16): 35(ptr) Variable Function - 433(f16m5): 432(ptr) Variable Function - 438(f16m6): 437(ptr) Variable Function - 439(f16m7): 437(ptr) Variable Function - 410: 406 Load 409(f16m1) - 412: 406 Load 411(f16m2) - 413:151(f16vec3) CompositeExtract 410 0 - 414:151(f16vec3) CompositeExtract 412 0 - 415:151(f16vec3) FMul 413 414 - 416:151(f16vec3) CompositeExtract 410 1 - 417:151(f16vec3) CompositeExtract 412 1 - 418:151(f16vec3) FMul 416 417 - 419: 406 CompositeConstruct 415 418 - Store 408(f16m3) 419 - 421:151(f16vec3) Load 420(f16v1) - 423: 29(f16vec2) Load 422(f16v2) - 424: 406 OuterProduct 421 423 - Store 409(f16m1) 424 - 428: 406 Load 409(f16m1) - 429: 425 Transpose 428 - Store 427(f16m4) 429 - 434: 431 Load 433(f16m5) - 435:28(float16_t) ExtInst 1(GLSL.std.450) 33(Determinant) 434 - Store 430(f16) 435 - 440: 436 Load 439(f16m7) - 441: 436 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 440 - Store 438(f16m6) 441 + 404(f16m3): 403(ptr) Variable Function + 405(f16m1): 403(ptr) Variable Function + 407(f16m2): 403(ptr) Variable Function + 416(f16v1): 152(ptr) Variable Function + 418(f16v2): 30(ptr) Variable Function + 423(f16m4): 422(ptr) Variable Function + 426(f16): 35(ptr) Variable Function + 429(f16m5): 428(ptr) Variable Function + 434(f16m6): 433(ptr) Variable Function + 435(f16m7): 433(ptr) Variable Function + 406: 402 Load 405(f16m1) + 408: 402 Load 407(f16m2) + 409:151(f16vec3) CompositeExtract 406 0 + 410:151(f16vec3) CompositeExtract 408 0 + 411:151(f16vec3) FMul 409 410 + 412:151(f16vec3) CompositeExtract 406 1 + 413:151(f16vec3) CompositeExtract 408 1 + 414:151(f16vec3) FMul 412 413 + 415: 402 CompositeConstruct 411 414 + Store 404(f16m3) 415 + 417:151(f16vec3) Load 416(f16v1) + 419: 29(f16vec2) Load 418(f16v2) + 420: 402 OuterProduct 417 419 + Store 405(f16m1) 420 + 424: 402 Load 405(f16m1) + 425: 421 Transpose 424 + Store 423(f16m4) 425 + 430: 427 Load 429(f16m5) + 431:28(float16_t) ExtInst 1(GLSL.std.450) 33(Determinant) 430 + Store 426(f16) 431 + 436: 432 Load 435(f16m7) + 437: 432 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 436 + Store 434(f16m6) 437 Return FunctionEnd 24(builtinVecRelFuncs(): 2 Function None 3 25: Label - 442(bv): 155(ptr) Variable Function - 443(f16v1): 152(ptr) Variable Function - 445(f16v2): 152(ptr) Variable Function - 444:151(f16vec3) Load 443(f16v1) - 446:151(f16vec3) Load 445(f16v2) - 447: 154(bvec3) FOrdLessThan 444 446 - Store 442(bv) 447 - 448:151(f16vec3) Load 443(f16v1) - 449:151(f16vec3) Load 445(f16v2) - 450: 154(bvec3) FOrdLessThanEqual 448 449 - Store 442(bv) 450 - 451:151(f16vec3) Load 443(f16v1) - 452:151(f16vec3) Load 445(f16v2) - 453: 154(bvec3) FOrdGreaterThan 451 452 - Store 442(bv) 453 - 454:151(f16vec3) Load 443(f16v1) - 455:151(f16vec3) Load 445(f16v2) - 456: 154(bvec3) FOrdGreaterThanEqual 454 455 - Store 442(bv) 456 - 457:151(f16vec3) Load 443(f16v1) - 458:151(f16vec3) Load 445(f16v2) - 459: 154(bvec3) FOrdEqual 457 458 - Store 442(bv) 459 - 460:151(f16vec3) Load 443(f16v1) - 461:151(f16vec3) Load 445(f16v2) - 462: 154(bvec3) FUnordNotEqual 460 461 - Store 442(bv) 462 + 438(bv): 155(ptr) Variable Function + 439(f16v1): 152(ptr) Variable Function + 441(f16v2): 152(ptr) Variable Function + 440:151(f16vec3) Load 439(f16v1) + 442:151(f16vec3) Load 441(f16v2) + 443: 154(bvec3) FOrdLessThan 440 442 + Store 438(bv) 443 + 444:151(f16vec3) Load 439(f16v1) + 445:151(f16vec3) Load 441(f16v2) + 446: 154(bvec3) FOrdLessThanEqual 444 445 + Store 438(bv) 446 + 447:151(f16vec3) Load 439(f16v1) + 448:151(f16vec3) Load 441(f16v2) + 449: 154(bvec3) FOrdGreaterThan 447 448 + Store 438(bv) 449 + 450:151(f16vec3) Load 439(f16v1) + 451:151(f16vec3) Load 441(f16v2) + 452: 154(bvec3) FOrdGreaterThanEqual 450 451 + Store 438(bv) 452 + 453:151(f16vec3) Load 439(f16v1) + 454:151(f16vec3) Load 441(f16v2) + 455: 154(bvec3) FOrdEqual 453 454 + Store 438(bv) 455 + 456:151(f16vec3) Load 439(f16v1) + 457:151(f16vec3) Load 441(f16v2) + 458: 154(bvec3) FUnordNotEqual 456 457 + Store 438(bv) 458 Return FunctionEnd 26(builtinFragProcFuncs(): 2 Function None 3 27: Label - 463(f16v): 152(ptr) Variable Function - 467: 466(ptr) AccessChain 465(if16v) 34 + 459(f16v): 152(ptr) Variable Function + 463: 462(ptr) AccessChain 461(if16v) 34 + 464:28(float16_t) Load 463 + 465:28(float16_t) DPdx 464 + 466: 35(ptr) AccessChain 459(f16v) 34 + Store 466 465 + 467: 462(ptr) AccessChain 461(if16v) 90 468:28(float16_t) Load 467 - 469:28(float16_t) DPdx 468 - 470: 35(ptr) AccessChain 463(f16v) 34 + 469:28(float16_t) DPdy 468 + 470: 35(ptr) AccessChain 459(f16v) 90 Store 470 469 - 471: 466(ptr) AccessChain 465(if16v) 90 - 472:28(float16_t) Load 471 - 473:28(float16_t) DPdy 472 - 474: 35(ptr) AccessChain 463(f16v) 90 - Store 474 473 - 475:151(f16vec3) Load 465(if16v) - 476: 29(f16vec2) VectorShuffle 475 475 0 1 - 477: 29(f16vec2) DPdxFine 476 - 478: 35(ptr) AccessChain 463(f16v) 34 - 479:28(float16_t) CompositeExtract 477 0 - Store 478 479 - 480: 35(ptr) AccessChain 463(f16v) 90 - 481:28(float16_t) CompositeExtract 477 1 - Store 480 481 - 482:151(f16vec3) Load 465(if16v) - 483: 29(f16vec2) VectorShuffle 482 482 0 1 - 484: 29(f16vec2) DPdyFine 483 - 485: 35(ptr) AccessChain 463(f16v) 34 - 486:28(float16_t) CompositeExtract 484 0 - Store 485 486 - 487: 35(ptr) AccessChain 463(f16v) 90 - 488:28(float16_t) CompositeExtract 484 1 - Store 487 488 - 489:151(f16vec3) Load 465(if16v) - 490:151(f16vec3) DPdxCoarse 489 - Store 463(f16v) 490 - 491:151(f16vec3) Load 465(if16v) - 492:151(f16vec3) DPdxCoarse 491 - Store 463(f16v) 492 - 493: 466(ptr) AccessChain 465(if16v) 34 - 494:28(float16_t) Load 493 - 495:28(float16_t) Fwidth 494 - 496: 35(ptr) AccessChain 463(f16v) 34 - Store 496 495 - 497:151(f16vec3) Load 465(if16v) - 498: 29(f16vec2) VectorShuffle 497 497 0 1 - 499: 29(f16vec2) FwidthFine 498 - 500: 35(ptr) AccessChain 463(f16v) 34 - 501:28(float16_t) CompositeExtract 499 0 - Store 500 501 - 502: 35(ptr) AccessChain 463(f16v) 90 - 503:28(float16_t) CompositeExtract 499 1 - Store 502 503 - 504:151(f16vec3) Load 465(if16v) - 505:151(f16vec3) FwidthCoarse 504 - Store 463(f16v) 505 - 506: 466(ptr) AccessChain 465(if16v) 34 - 507:28(float16_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 506 - 508: 35(ptr) AccessChain 463(f16v) 34 - Store 508 507 - 510:151(f16vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 465(if16v) 509 - 511: 29(f16vec2) VectorShuffle 510 510 0 1 - 512: 35(ptr) AccessChain 463(f16v) 34 - 513:28(float16_t) CompositeExtract 511 0 - Store 512 513 - 514: 35(ptr) AccessChain 463(f16v) 90 - 515:28(float16_t) CompositeExtract 511 1 - Store 514 515 - 518:151(f16vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 465(if16v) 517 - Store 463(f16v) 518 + 471:151(f16vec3) Load 461(if16v) + 472: 29(f16vec2) VectorShuffle 471 471 0 1 + 473: 29(f16vec2) DPdxFine 472 + 474: 35(ptr) AccessChain 459(f16v) 34 + 475:28(float16_t) CompositeExtract 473 0 + Store 474 475 + 476: 35(ptr) AccessChain 459(f16v) 90 + 477:28(float16_t) CompositeExtract 473 1 + Store 476 477 + 478:151(f16vec3) Load 461(if16v) + 479: 29(f16vec2) VectorShuffle 478 478 0 1 + 480: 29(f16vec2) DPdyFine 479 + 481: 35(ptr) AccessChain 459(f16v) 34 + 482:28(float16_t) CompositeExtract 480 0 + Store 481 482 + 483: 35(ptr) AccessChain 459(f16v) 90 + 484:28(float16_t) CompositeExtract 480 1 + Store 483 484 + 485:151(f16vec3) Load 461(if16v) + 486:151(f16vec3) DPdxCoarse 485 + Store 459(f16v) 486 + 487:151(f16vec3) Load 461(if16v) + 488:151(f16vec3) DPdxCoarse 487 + Store 459(f16v) 488 + 489: 462(ptr) AccessChain 461(if16v) 34 + 490:28(float16_t) Load 489 + 491:28(float16_t) Fwidth 490 + 492: 35(ptr) AccessChain 459(f16v) 34 + Store 492 491 + 493:151(f16vec3) Load 461(if16v) + 494: 29(f16vec2) VectorShuffle 493 493 0 1 + 495: 29(f16vec2) FwidthFine 494 + 496: 35(ptr) AccessChain 459(f16v) 34 + 497:28(float16_t) CompositeExtract 495 0 + Store 496 497 + 498: 35(ptr) AccessChain 459(f16v) 90 + 499:28(float16_t) CompositeExtract 495 1 + Store 498 499 + 500:151(f16vec3) Load 461(if16v) + 501:151(f16vec3) FwidthCoarse 500 + Store 459(f16v) 501 + 502: 462(ptr) AccessChain 461(if16v) 34 + 503:28(float16_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 502 + 504: 35(ptr) AccessChain 459(f16v) 34 + Store 504 503 + 506:151(f16vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 461(if16v) 505 + 507: 29(f16vec2) VectorShuffle 506 506 0 1 + 508: 35(ptr) AccessChain 459(f16v) 34 + 509:28(float16_t) CompositeExtract 507 0 + Store 508 509 + 510: 35(ptr) AccessChain 459(f16v) 90 + 511:28(float16_t) CompositeExtract 507 1 + Store 510 511 + 514:151(f16vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 461(if16v) 513 + Store 459(f16v) 514 Return FunctionEnd diff --git a/Test/baseResults/spv.float16Fetch.frag.out b/Test/baseResults/spv.float16Fetch.frag.out index da4aa4ddbc..cfe2491413 100644 --- a/Test/baseResults/spv.float16Fetch.frag.out +++ b/Test/baseResults/spv.float16Fetch.frag.out @@ -1,8 +1,8 @@ spv.float16Fetch.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 5979 +// Generated by (magic number): 8000b +// Id's are bound by 5787 Capability Shader Capability Float16 @@ -29,7 +29,7 @@ Validation failed Extension "SPV_KHR_16bit_storage" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 128 135 137 148 156 169 177 215 251 309 565 572 1393 1401 1409 1417 1425 1433 4311 4318 5969 5978 + EntryPoint Fragment 4 "main" 128 135 137 148 156 169 177 215 251 309 565 572 1393 1400 1407 1414 1421 1428 4187 4194 5777 5786 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_AMD_gpu_shader_half_float" @@ -130,195 +130,195 @@ Validation failed Name 1334 "texel" Name 1390 "texel" Name 1393 "dPdxy1" - Name 1401 "f16dPdxy1" - Name 1409 "dPdxy2" - Name 1417 "f16dPdxy2" - Name 1425 "dPdxy3" - Name 1433 "f16dPdxy3" - Name 1632 "texel" - Name 1820 "texel" - Name 2002 "texel" - Name 2184 "texel" - Name 2303 "texel" - Name 2375 "texel" - Name 2450 "texel" - Name 2502 "texel" - Name 2530 "texel" - Name 2559 "size" - Name 2777 "lod" - Name 2913 "levels" - Name 2982 "samples" - Name 2996 "texel" - Name 2999 "i1D" - Name 3008 "i2D" - Name 3017 "i3D" - Name 3026 "i2DRect" - Name 3035 "iCube" - Name 3044 "iBuffer" - Name 3053 "i1DArray" - Name 3062 "i2DArray" - Name 3071 "iCubeArray" - Name 3080 "i2DMS" - Name 3089 "i2DMSArray" - Name 3143 "texel" - Name 3146 "ResType" - Name 3182 "ResType" - Name 3286 "texel" + Name 1400 "f16dPdxy1" + Name 1407 "dPdxy2" + Name 1414 "f16dPdxy2" + Name 1421 "dPdxy3" + Name 1428 "f16dPdxy3" + Name 1604 "texel" + Name 1770 "texel" + Name 1932 "texel" + Name 2094 "texel" + Name 2213 "texel" + Name 2285 "texel" + Name 2360 "texel" + Name 2412 "texel" + Name 2440 "texel" + Name 2469 "size" + Name 2687 "lod" + Name 2823 "levels" + Name 2892 "samples" + Name 2906 "texel" + Name 2909 "i1D" + Name 2918 "i2D" + Name 2927 "i3D" + Name 2936 "i2DRect" + Name 2945 "iCube" + Name 2954 "iBuffer" + Name 2963 "i1DArray" + Name 2972 "i2DArray" + Name 2981 "iCubeArray" + Name 2990 "i2DMS" + Name 2999 "i2DMSArray" + Name 3053 "texel" + Name 3056 "ResType" + Name 3092 "ResType" + Name 3196 "texel" + Name 3276 "texel" Name 3366 "texel" - Name 3456 "texel" - Name 3512 "texel" - Name 3672 "texel" - Name 3786 "texel" - Name 3838 "texel" - Name 3876 "texel" - Name 3994 "texel" - Name 4066 "texel" - Name 4148 "texel" - Name 4200 "texel" - Name 4228 "texel" - Name 4256 "texel" - Name 4308 "texel" - Name 4311 "lodClamp" - Name 4318 "f16lodClamp" - Name 4445 "texel" - Name 4652 "texel" - Name 4728 "texel" - Name 4872 "texel" - Name 5016 "texel" - Name 5242 "texel" - Name 5334 "texel" - Name 5506 "texel" - Name 5508 "t1D" - Name 5512 "s" - Name 5528 "t2D" - Name 5545 "t3D" - Name 5562 "tCube" - Name 5579 "sShadow" - Name 5643 "t1DArray" - Name 5660 "t2DArray" - Name 5677 "tCubeArray" - Name 5735 "t2DRect" - Name 5795 "subpass" - Name 5801 "subpassMS" - Name 5807 "result" - Name 5890 "param" - Name 5969 "fragColor" - Name 5973 "tBuffer" - Name 5975 "t2DMS" - Name 5977 "t2DMSArray" - Name 5978 "bias" - Decorate 125(s1D) DescriptorSet 0 + Name 3422 "texel" + Name 3562 "texel" + Name 3662 "texel" + Name 3714 "texel" + Name 3752 "texel" + Name 3870 "texel" + Name 3942 "texel" + Name 4024 "texel" + Name 4076 "texel" + Name 4104 "texel" + Name 4132 "texel" + Name 4184 "texel" + Name 4187 "lodClamp" + Name 4194 "f16lodClamp" + Name 4321 "texel" + Name 4528 "texel" + Name 4604 "texel" + Name 4748 "texel" + Name 4876 "texel" + Name 5078 "texel" + Name 5160 "texel" + Name 5314 "texel" + Name 5316 "t1D" + Name 5320 "s" + Name 5336 "t2D" + Name 5353 "t3D" + Name 5370 "tCube" + Name 5387 "sShadow" + Name 5451 "t1DArray" + Name 5468 "t2DArray" + Name 5485 "tCubeArray" + Name 5543 "t2DRect" + Name 5603 "subpass" + Name 5609 "subpassMS" + Name 5615 "result" + Name 5698 "param" + Name 5777 "fragColor" + Name 5781 "tBuffer" + Name 5783 "t2DMS" + Name 5785 "t2DMSArray" + Name 5786 "bias" Decorate 125(s1D) Binding 0 + Decorate 125(s1D) DescriptorSet 0 Decorate 128(c1) Location 0 Decorate 135(f16c1) Location 11 Decorate 137(f16bias) Location 16 - Decorate 145(s2D) DescriptorSet 0 Decorate 145(s2D) Binding 1 + Decorate 145(s2D) DescriptorSet 0 Decorate 148(c2) Location 1 Decorate 156(f16c2) Location 12 - Decorate 165(s3D) DescriptorSet 0 Decorate 165(s3D) Binding 2 + Decorate 165(s3D) DescriptorSet 0 Decorate 169(c3) Location 2 Decorate 177(f16c3) Location 13 - Decorate 186(sCube) DescriptorSet 0 Decorate 186(sCube) Binding 4 - Decorate 201(s1DShadow) DescriptorSet 0 + Decorate 186(sCube) DescriptorSet 0 Decorate 201(s1DShadow) Binding 11 + Decorate 201(s1DShadow) DescriptorSet 0 Decorate 215(compare) Location 4 - Decorate 226(s2DShadow) DescriptorSet 0 Decorate 226(s2DShadow) Binding 12 - Decorate 247(sCubeShadow) DescriptorSet 0 + Decorate 226(s2DShadow) DescriptorSet 0 Decorate 247(sCubeShadow) Binding 14 + Decorate 247(sCubeShadow) DescriptorSet 0 Decorate 251(c4) Location 3 - Decorate 271(s1DArray) DescriptorSet 0 Decorate 271(s1DArray) Binding 7 - Decorate 286(s2DArray) DescriptorSet 0 + Decorate 271(s1DArray) DescriptorSet 0 Decorate 286(s2DArray) Binding 8 - Decorate 301(sCubeArray) DescriptorSet 0 + Decorate 286(s2DArray) DescriptorSet 0 Decorate 301(sCubeArray) Binding 9 + Decorate 301(sCubeArray) DescriptorSet 0 Decorate 309(f16c4) Location 14 - Decorate 318(s1DArrayShadow) DescriptorSet 0 Decorate 318(s1DArrayShadow) Binding 15 - Decorate 339(s2DArrayShadow) DescriptorSet 0 + Decorate 318(s1DArrayShadow) DescriptorSet 0 Decorate 339(s2DArrayShadow) Binding 16 - Decorate 359(s2DRect) DescriptorSet 0 + Decorate 339(s2DArrayShadow) DescriptorSet 0 Decorate 359(s2DRect) Binding 3 - Decorate 373(s2DRectShadow) DescriptorSet 0 + Decorate 359(s2DRect) DescriptorSet 0 Decorate 373(s2DRectShadow) Binding 13 - Decorate 393(sCubeArrayShadow) DescriptorSet 0 + Decorate 373(s2DRectShadow) DescriptorSet 0 Decorate 393(sCubeArrayShadow) Binding 17 + Decorate 393(sCubeArrayShadow) DescriptorSet 0 Decorate 565(lod) Location 5 Decorate 572(f16lod) Location 15 - Decorate 1300(sBuffer) DescriptorSet 0 Decorate 1300(sBuffer) Binding 5 - Decorate 1311(s2DMS) DescriptorSet 0 + Decorate 1300(sBuffer) DescriptorSet 0 Decorate 1311(s2DMS) Binding 6 - Decorate 1322(s2DMSArray) DescriptorSet 0 + Decorate 1311(s2DMS) DescriptorSet 0 Decorate 1322(s2DMSArray) Binding 10 + Decorate 1322(s2DMSArray) DescriptorSet 0 Decorate 1393(dPdxy1) Location 8 - Decorate 1401(f16dPdxy1) Location 18 - Decorate 1409(dPdxy2) Location 9 - Decorate 1417(f16dPdxy2) Location 19 - Decorate 1425(dPdxy3) Location 10 - Decorate 1433(f16dPdxy3) Location 20 - Decorate 2999(i1D) DescriptorSet 1 - Decorate 2999(i1D) Binding 0 - Decorate 3008(i2D) DescriptorSet 1 - Decorate 3008(i2D) Binding 1 - Decorate 3017(i3D) DescriptorSet 1 - Decorate 3017(i3D) Binding 2 - Decorate 3026(i2DRect) DescriptorSet 1 - Decorate 3026(i2DRect) Binding 3 - Decorate 3035(iCube) DescriptorSet 1 - Decorate 3035(iCube) Binding 4 - Decorate 3044(iBuffer) DescriptorSet 1 - Decorate 3044(iBuffer) Binding 8 - Decorate 3053(i1DArray) DescriptorSet 1 - Decorate 3053(i1DArray) Binding 5 - Decorate 3062(i2DArray) DescriptorSet 1 - Decorate 3062(i2DArray) Binding 6 - Decorate 3071(iCubeArray) DescriptorSet 1 - Decorate 3071(iCubeArray) Binding 7 - Decorate 3080(i2DMS) DescriptorSet 1 - Decorate 3080(i2DMS) Binding 9 - Decorate 3089(i2DMSArray) DescriptorSet 1 - Decorate 3089(i2DMSArray) Binding 10 - Decorate 4311(lodClamp) Location 7 - Decorate 4318(f16lodClamp) Location 17 - Decorate 5508(t1D) DescriptorSet 2 - Decorate 5508(t1D) Binding 0 - Decorate 5512(s) DescriptorSet 2 - Decorate 5512(s) Binding 11 - Decorate 5528(t2D) DescriptorSet 2 - Decorate 5528(t2D) Binding 1 - Decorate 5545(t3D) DescriptorSet 2 - Decorate 5545(t3D) Binding 2 - Decorate 5562(tCube) DescriptorSet 2 - Decorate 5562(tCube) Binding 4 - Decorate 5579(sShadow) DescriptorSet 2 - Decorate 5579(sShadow) Binding 12 - Decorate 5643(t1DArray) DescriptorSet 2 - Decorate 5643(t1DArray) Binding 5 - Decorate 5660(t2DArray) DescriptorSet 2 - Decorate 5660(t2DArray) Binding 6 - Decorate 5677(tCubeArray) DescriptorSet 2 - Decorate 5677(tCubeArray) Binding 7 - Decorate 5735(t2DRect) DescriptorSet 2 - Decorate 5735(t2DRect) Binding 3 - Decorate 5795(subpass) DescriptorSet 3 - Decorate 5795(subpass) Binding 0 - Decorate 5795(subpass) InputAttachmentIndex 0 - Decorate 5801(subpassMS) DescriptorSet 3 - Decorate 5801(subpassMS) Binding 1 - Decorate 5801(subpassMS) InputAttachmentIndex 0 - Decorate 5969(fragColor) Location 0 - Decorate 5973(tBuffer) DescriptorSet 2 - Decorate 5973(tBuffer) Binding 8 - Decorate 5975(t2DMS) DescriptorSet 2 - Decorate 5975(t2DMS) Binding 9 - Decorate 5977(t2DMSArray) DescriptorSet 2 - Decorate 5977(t2DMSArray) Binding 10 - Decorate 5978(bias) Location 6 + Decorate 1400(f16dPdxy1) Location 18 + Decorate 1407(dPdxy2) Location 9 + Decorate 1414(f16dPdxy2) Location 19 + Decorate 1421(dPdxy3) Location 10 + Decorate 1428(f16dPdxy3) Location 20 + Decorate 2909(i1D) Binding 0 + Decorate 2909(i1D) DescriptorSet 1 + Decorate 2918(i2D) Binding 1 + Decorate 2918(i2D) DescriptorSet 1 + Decorate 2927(i3D) Binding 2 + Decorate 2927(i3D) DescriptorSet 1 + Decorate 2936(i2DRect) Binding 3 + Decorate 2936(i2DRect) DescriptorSet 1 + Decorate 2945(iCube) Binding 4 + Decorate 2945(iCube) DescriptorSet 1 + Decorate 2954(iBuffer) Binding 8 + Decorate 2954(iBuffer) DescriptorSet 1 + Decorate 2963(i1DArray) Binding 5 + Decorate 2963(i1DArray) DescriptorSet 1 + Decorate 2972(i2DArray) Binding 6 + Decorate 2972(i2DArray) DescriptorSet 1 + Decorate 2981(iCubeArray) Binding 7 + Decorate 2981(iCubeArray) DescriptorSet 1 + Decorate 2990(i2DMS) Binding 9 + Decorate 2990(i2DMS) DescriptorSet 1 + Decorate 2999(i2DMSArray) Binding 10 + Decorate 2999(i2DMSArray) DescriptorSet 1 + Decorate 4187(lodClamp) Location 7 + Decorate 4194(f16lodClamp) Location 17 + Decorate 5316(t1D) Binding 0 + Decorate 5316(t1D) DescriptorSet 2 + Decorate 5320(s) Binding 11 + Decorate 5320(s) DescriptorSet 2 + Decorate 5336(t2D) Binding 1 + Decorate 5336(t2D) DescriptorSet 2 + Decorate 5353(t3D) Binding 2 + Decorate 5353(t3D) DescriptorSet 2 + Decorate 5370(tCube) Binding 4 + Decorate 5370(tCube) DescriptorSet 2 + Decorate 5387(sShadow) Binding 12 + Decorate 5387(sShadow) DescriptorSet 2 + Decorate 5451(t1DArray) Binding 5 + Decorate 5451(t1DArray) DescriptorSet 2 + Decorate 5468(t2DArray) Binding 6 + Decorate 5468(t2DArray) DescriptorSet 2 + Decorate 5485(tCubeArray) Binding 7 + Decorate 5485(tCubeArray) DescriptorSet 2 + Decorate 5543(t2DRect) Binding 3 + Decorate 5543(t2DRect) DescriptorSet 2 + Decorate 5603(subpass) Binding 0 + Decorate 5603(subpass) DescriptorSet 3 + Decorate 5603(subpass) InputAttachmentIndex 0 + Decorate 5609(subpassMS) Binding 1 + Decorate 5609(subpassMS) DescriptorSet 3 + Decorate 5609(subpassMS) InputAttachmentIndex 0 + Decorate 5777(fragColor) Location 0 + Decorate 5781(tBuffer) Binding 8 + Decorate 5781(tBuffer) DescriptorSet 2 + Decorate 5783(t2DMS) Binding 9 + Decorate 5783(t2DMS) DescriptorSet 2 + Decorate 5785(t2DMSArray) Binding 10 + Decorate 5785(t2DMSArray) DescriptorSet 2 + Decorate 5786(bias) Location 6 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 16 @@ -441,323 +441,323 @@ Validation failed 1322(s2DMSArray): 1321(ptr) Variable UniformConstant 1326: 47(int) Constant 2 1393(dPdxy1): 127(ptr) Variable Input - 1401(f16dPdxy1): 134(ptr) Variable Input - 1409(dPdxy2): 147(ptr) Variable Input - 1417(f16dPdxy2): 155(ptr) Variable Input - 1425(dPdxy3): 168(ptr) Variable Input - 1433(f16dPdxy3): 176(ptr) Variable Input - 2187: 47(int) Constant 0 - 2378: 206(int) Constant 4 - 2379: TypeArray 721(ivec2) 2378 - 2380: 2379 ConstantComposite 722 722 722 722 - 2558: TypePointer Function 48(ivec4) - 2560: 48(ivec4) ConstantComposite 2187 2187 2187 2187 - 2566: TypePointer Function 47(int) - 2581: 206(int) Constant 1 - 2596: 206(int) Constant 2 - 2776: TypePointer Function 53(fvec2) - 2778: 52(float) Constant 0 - 2779: 53(fvec2) ConstantComposite 2778 2778 - 2997: TypeImage 6(float16_t) 1D nonsampled format:Rgba16f + 1400(f16dPdxy1): 134(ptr) Variable Input + 1407(dPdxy2): 147(ptr) Variable Input + 1414(f16dPdxy2): 155(ptr) Variable Input + 1421(dPdxy3): 168(ptr) Variable Input + 1428(f16dPdxy3): 176(ptr) Variable Input + 2097: 47(int) Constant 0 + 2288: 206(int) Constant 4 + 2289: TypeArray 721(ivec2) 2288 + 2290: 2289 ConstantComposite 722 722 722 722 + 2468: TypePointer Function 48(ivec4) + 2470: 48(ivec4) ConstantComposite 2097 2097 2097 2097 + 2476: TypePointer Function 47(int) + 2491: 206(int) Constant 1 + 2506: 206(int) Constant 2 + 2686: TypePointer Function 53(fvec2) + 2688: 52(float) Constant 0 + 2689: 53(fvec2) ConstantComposite 2688 2688 + 2907: TypeImage 6(float16_t) 1D nonsampled format:Rgba16f + 2908: TypePointer UniformConstant 2907 + 2909(i1D): 2908(ptr) Variable UniformConstant + 2916: TypeImage 6(float16_t) 2D nonsampled format:Rgba16f + 2917: TypePointer UniformConstant 2916 + 2918(i2D): 2917(ptr) Variable UniformConstant + 2925: TypeImage 6(float16_t) 3D nonsampled format:Rgba16f + 2926: TypePointer UniformConstant 2925 + 2927(i3D): 2926(ptr) Variable UniformConstant + 2934: TypeImage 6(float16_t) Rect nonsampled format:Rgba16f + 2935: TypePointer UniformConstant 2934 + 2936(i2DRect): 2935(ptr) Variable UniformConstant + 2943: TypeImage 6(float16_t) Cube nonsampled format:Rgba16f + 2944: TypePointer UniformConstant 2943 + 2945(iCube): 2944(ptr) Variable UniformConstant + 2952: TypeImage 6(float16_t) Buffer nonsampled format:Rgba16f + 2953: TypePointer UniformConstant 2952 + 2954(iBuffer): 2953(ptr) Variable UniformConstant + 2961: TypeImage 6(float16_t) 1D array nonsampled format:Rgba16f + 2962: TypePointer UniformConstant 2961 + 2963(i1DArray): 2962(ptr) Variable UniformConstant + 2970: TypeImage 6(float16_t) 2D array nonsampled format:Rgba16f + 2971: TypePointer UniformConstant 2970 + 2972(i2DArray): 2971(ptr) Variable UniformConstant + 2979: TypeImage 6(float16_t) Cube array nonsampled format:Rgba16f + 2980: TypePointer UniformConstant 2979 +2981(iCubeArray): 2980(ptr) Variable UniformConstant + 2988: TypeImage 6(float16_t) 2D multi-sampled nonsampled format:Rgba16f + 2989: TypePointer UniformConstant 2988 + 2990(i2DMS): 2989(ptr) Variable UniformConstant + 2997: TypeImage 6(float16_t) 2D array multi-sampled nonsampled format:Rgba16f 2998: TypePointer UniformConstant 2997 - 2999(i1D): 2998(ptr) Variable UniformConstant - 3006: TypeImage 6(float16_t) 2D nonsampled format:Rgba16f - 3007: TypePointer UniformConstant 3006 - 3008(i2D): 3007(ptr) Variable UniformConstant - 3015: TypeImage 6(float16_t) 3D nonsampled format:Rgba16f - 3016: TypePointer UniformConstant 3015 - 3017(i3D): 3016(ptr) Variable UniformConstant - 3024: TypeImage 6(float16_t) Rect nonsampled format:Rgba16f - 3025: TypePointer UniformConstant 3024 - 3026(i2DRect): 3025(ptr) Variable UniformConstant - 3033: TypeImage 6(float16_t) Cube nonsampled format:Rgba16f - 3034: TypePointer UniformConstant 3033 - 3035(iCube): 3034(ptr) Variable UniformConstant - 3042: TypeImage 6(float16_t) Buffer nonsampled format:Rgba16f - 3043: TypePointer UniformConstant 3042 - 3044(iBuffer): 3043(ptr) Variable UniformConstant - 3051: TypeImage 6(float16_t) 1D array nonsampled format:Rgba16f - 3052: TypePointer UniformConstant 3051 - 3053(i1DArray): 3052(ptr) Variable UniformConstant - 3060: TypeImage 6(float16_t) 2D array nonsampled format:Rgba16f - 3061: TypePointer UniformConstant 3060 - 3062(i2DArray): 3061(ptr) Variable UniformConstant - 3069: TypeImage 6(float16_t) Cube array nonsampled format:Rgba16f - 3070: TypePointer UniformConstant 3069 -3071(iCubeArray): 3070(ptr) Variable UniformConstant - 3078: TypeImage 6(float16_t) 2D multi-sampled nonsampled format:Rgba16f - 3079: TypePointer UniformConstant 3078 - 3080(i2DMS): 3079(ptr) Variable UniformConstant - 3087: TypeImage 6(float16_t) 2D array multi-sampled nonsampled format:Rgba16f - 3088: TypePointer UniformConstant 3087 -3089(i2DMSArray): 3088(ptr) Variable UniformConstant - 3146(ResType): TypeStruct 47(int) 7(f16vec4) - 3182(ResType): TypeStruct 47(int) 6(float16_t) - 4069: 721(ivec2) ConstantComposite 709 1326 - 4070: 47(int) Constant 3 - 4071: 47(int) Constant 4 - 4072: 721(ivec2) ConstantComposite 4070 4071 - 4073: 47(int) Constant 15 - 4074: 47(int) Constant 16 - 4075: 721(ivec2) ConstantComposite 4073 4074 - 4076: 47(int) Constant 4294967294 - 4077: 721(ivec2) ConstantComposite 4076 2187 - 4078: 2379 ConstantComposite 4069 4072 4075 4077 - 4311(lodClamp): 127(ptr) Variable Input -4318(f16lodClamp): 134(ptr) Variable Input - 5507: TypePointer UniformConstant 122 - 5508(t1D): 5507(ptr) Variable UniformConstant - 5510: TypeSampler - 5511: TypePointer UniformConstant 5510 - 5512(s): 5511(ptr) Variable UniformConstant - 5527: TypePointer UniformConstant 142 - 5528(t2D): 5527(ptr) Variable UniformConstant - 5544: TypePointer UniformConstant 162 - 5545(t3D): 5544(ptr) Variable UniformConstant - 5561: TypePointer UniformConstant 183 - 5562(tCube): 5561(ptr) Variable UniformConstant - 5579(sShadow): 5511(ptr) Variable UniformConstant - 5642: TypePointer UniformConstant 268 - 5643(t1DArray): 5642(ptr) Variable UniformConstant - 5659: TypePointer UniformConstant 283 - 5660(t2DArray): 5659(ptr) Variable UniformConstant - 5676: TypePointer UniformConstant 298 -5677(tCubeArray): 5676(ptr) Variable UniformConstant - 5734: TypePointer UniformConstant 356 - 5735(t2DRect): 5734(ptr) Variable UniformConstant - 5793: TypeImage 6(float16_t) SubpassData nonsampled format:Unknown - 5794: TypePointer UniformConstant 5793 - 5795(subpass): 5794(ptr) Variable UniformConstant - 5797: 721(ivec2) ConstantComposite 2187 2187 - 5799: TypeImage 6(float16_t) SubpassData multi-sampled nonsampled format:Unknown - 5800: TypePointer UniformConstant 5799 - 5801(subpassMS): 5800(ptr) Variable UniformConstant - 5968: TypePointer Output 249(fvec4) - 5969(fragColor): 5968(ptr) Variable Output - 5972: TypePointer UniformConstant 1297 - 5973(tBuffer): 5972(ptr) Variable UniformConstant - 5974: TypePointer UniformConstant 1308 - 5975(t2DMS): 5974(ptr) Variable UniformConstant - 5976: TypePointer UniformConstant 1319 -5977(t2DMSArray): 5976(ptr) Variable UniformConstant - 5978(bias): 127(ptr) Variable Input +2999(i2DMSArray): 2998(ptr) Variable UniformConstant + 3056(ResType): TypeStruct 47(int) 7(f16vec4) + 3092(ResType): TypeStruct 47(int) 6(float16_t) + 3945: 721(ivec2) ConstantComposite 709 1326 + 3946: 47(int) Constant 3 + 3947: 47(int) Constant 4 + 3948: 721(ivec2) ConstantComposite 3946 3947 + 3949: 47(int) Constant 15 + 3950: 47(int) Constant 16 + 3951: 721(ivec2) ConstantComposite 3949 3950 + 3952: 47(int) Constant 4294967294 + 3953: 721(ivec2) ConstantComposite 3952 2097 + 3954: 2289 ConstantComposite 3945 3948 3951 3953 + 4187(lodClamp): 127(ptr) Variable Input +4194(f16lodClamp): 134(ptr) Variable Input + 5315: TypePointer UniformConstant 122 + 5316(t1D): 5315(ptr) Variable UniformConstant + 5318: TypeSampler + 5319: TypePointer UniformConstant 5318 + 5320(s): 5319(ptr) Variable UniformConstant + 5335: TypePointer UniformConstant 142 + 5336(t2D): 5335(ptr) Variable UniformConstant + 5352: TypePointer UniformConstant 162 + 5353(t3D): 5352(ptr) Variable UniformConstant + 5369: TypePointer UniformConstant 183 + 5370(tCube): 5369(ptr) Variable UniformConstant + 5387(sShadow): 5319(ptr) Variable UniformConstant + 5450: TypePointer UniformConstant 268 + 5451(t1DArray): 5450(ptr) Variable UniformConstant + 5467: TypePointer UniformConstant 283 + 5468(t2DArray): 5467(ptr) Variable UniformConstant + 5484: TypePointer UniformConstant 298 +5485(tCubeArray): 5484(ptr) Variable UniformConstant + 5542: TypePointer UniformConstant 356 + 5543(t2DRect): 5542(ptr) Variable UniformConstant + 5601: TypeImage 6(float16_t) SubpassData nonsampled format:Unknown + 5602: TypePointer UniformConstant 5601 + 5603(subpass): 5602(ptr) Variable UniformConstant + 5605: 721(ivec2) ConstantComposite 2097 2097 + 5607: TypeImage 6(float16_t) SubpassData multi-sampled nonsampled format:Unknown + 5608: TypePointer UniformConstant 5607 + 5609(subpassMS): 5608(ptr) Variable UniformConstant + 5776: TypePointer Output 249(fvec4) + 5777(fragColor): 5776(ptr) Variable Output + 5780: TypePointer UniformConstant 1297 + 5781(tBuffer): 5780(ptr) Variable UniformConstant + 5782: TypePointer UniformConstant 1308 + 5783(t2DMS): 5782(ptr) Variable UniformConstant + 5784: TypePointer UniformConstant 1319 +5785(t2DMSArray): 5784(ptr) Variable UniformConstant + 5786(bias): 127(ptr) Variable Input 4(main): 2 Function None 3 5: Label - 5807(result): 64(ptr) Variable Function - 5890(param): 64(ptr) Variable Function - Store 5807(result) 121 - 5808: 7(f16vec4) FunctionCall 9(testTexture() - 5809: 7(f16vec4) Load 5807(result) - 5810: 7(f16vec4) FAdd 5809 5808 - Store 5807(result) 5810 - 5811: 7(f16vec4) FunctionCall 11(testTextureProj() - 5812: 7(f16vec4) Load 5807(result) - 5813: 7(f16vec4) FAdd 5812 5811 - Store 5807(result) 5813 - 5814: 7(f16vec4) FunctionCall 13(testTextureLod() - 5815: 7(f16vec4) Load 5807(result) - 5816: 7(f16vec4) FAdd 5815 5814 - Store 5807(result) 5816 - 5817: 7(f16vec4) FunctionCall 15(testTextureOffset() - 5818: 7(f16vec4) Load 5807(result) - 5819: 7(f16vec4) FAdd 5818 5817 - Store 5807(result) 5819 - 5820: 7(f16vec4) FunctionCall 19(testTextureLodOffset() - 5821: 7(f16vec4) Load 5807(result) - 5822: 7(f16vec4) FAdd 5821 5820 - Store 5807(result) 5822 - 5823: 7(f16vec4) FunctionCall 21(testTextureProjLodOffset() - 5824: 7(f16vec4) Load 5807(result) - 5825: 7(f16vec4) FAdd 5824 5823 - Store 5807(result) 5825 - 5826: 7(f16vec4) FunctionCall 23(testTexelFetch() - 5827: 7(f16vec4) Load 5807(result) - 5828: 7(f16vec4) FAdd 5827 5826 - Store 5807(result) 5828 - 5829: 7(f16vec4) FunctionCall 25(testTexelFetchOffset() - 5830: 7(f16vec4) Load 5807(result) - 5831: 7(f16vec4) FAdd 5830 5829 - Store 5807(result) 5831 - 5832: 7(f16vec4) FunctionCall 27(testTextureGrad() - 5833: 7(f16vec4) Load 5807(result) - 5834: 7(f16vec4) FAdd 5833 5832 - Store 5807(result) 5834 - 5835: 7(f16vec4) FunctionCall 29(testTextureGradOffset() - 5836: 7(f16vec4) Load 5807(result) - 5837: 7(f16vec4) FAdd 5836 5835 - Store 5807(result) 5837 - 5838: 7(f16vec4) FunctionCall 31(testTextureProjGrad() - 5839: 7(f16vec4) Load 5807(result) - 5840: 7(f16vec4) FAdd 5839 5838 - Store 5807(result) 5840 - 5841: 7(f16vec4) FunctionCall 33(testTextureProjGradoffset() - 5842: 7(f16vec4) Load 5807(result) - 5843: 7(f16vec4) FAdd 5842 5841 - Store 5807(result) 5843 - 5844: 7(f16vec4) FunctionCall 35(testTextureGather() - 5845: 7(f16vec4) Load 5807(result) - 5846: 7(f16vec4) FAdd 5845 5844 - Store 5807(result) 5846 - 5847: 7(f16vec4) FunctionCall 37(testTextureGatherOffset() - 5848: 7(f16vec4) Load 5807(result) - 5849: 7(f16vec4) FAdd 5848 5847 - Store 5807(result) 5849 - 5850: 7(f16vec4) FunctionCall 39(testTextureGatherOffsets() - 5851: 7(f16vec4) Load 5807(result) - 5852: 7(f16vec4) FAdd 5851 5850 - Store 5807(result) 5852 - 5853: 7(f16vec4) FunctionCall 41(testTextureGatherLod() - 5854: 7(f16vec4) Load 5807(result) - 5855: 7(f16vec4) FAdd 5854 5853 - Store 5807(result) 5855 - 5856: 7(f16vec4) FunctionCall 43(testTextureGatherLodOffset() - 5857: 7(f16vec4) Load 5807(result) - 5858: 7(f16vec4) FAdd 5857 5856 - Store 5807(result) 5858 - 5859: 7(f16vec4) FunctionCall 45(testTextureGatherLodOffsets() - 5860: 7(f16vec4) Load 5807(result) - 5861: 7(f16vec4) FAdd 5860 5859 - Store 5807(result) 5861 - 5862: 48(ivec4) FunctionCall 50(testTextureSize() - 5863: 7(f16vec4) ConvertSToF 5862 - 5864: 7(f16vec4) Load 5807(result) - 5865: 7(f16vec4) FAdd 5864 5863 - Store 5807(result) 5865 - 5866: 53(fvec2) FunctionCall 55(testTextureQueryLod() - 5867:154(f16vec2) FConvert 5866 - 5868: 7(f16vec4) Load 5807(result) - 5869:154(f16vec2) VectorShuffle 5868 5868 0 1 - 5870:154(f16vec2) FAdd 5869 5867 - 5871: 208(ptr) AccessChain 5807(result) 207 - 5872:6(float16_t) CompositeExtract 5870 0 - Store 5871 5872 - 5873: 208(ptr) AccessChain 5807(result) 2581 - 5874:6(float16_t) CompositeExtract 5870 1 - Store 5873 5874 - 5875: 47(int) FunctionCall 58(testTextureQueryLevels() - 5876:6(float16_t) ConvertSToF 5875 - 5877: 208(ptr) AccessChain 5807(result) 207 - 5878:6(float16_t) Load 5877 - 5879:6(float16_t) FAdd 5878 5876 - 5880: 208(ptr) AccessChain 5807(result) 207 - Store 5880 5879 - 5881: 47(int) FunctionCall 60(testTextureSamples() - 5882:6(float16_t) ConvertSToF 5881 - 5883: 208(ptr) AccessChain 5807(result) 207 - 5884:6(float16_t) Load 5883 - 5885:6(float16_t) FAdd 5884 5882 - 5886: 208(ptr) AccessChain 5807(result) 207 - Store 5886 5885 - 5887: 7(f16vec4) FunctionCall 62(testImageLoad() - 5888: 7(f16vec4) Load 5807(result) - 5889: 7(f16vec4) FAdd 5888 5887 - Store 5807(result) 5889 - 5891: 7(f16vec4) Load 5807(result) - Store 5890(param) 5891 - 5892: 2 FunctionCall 67(testImageStore(vf164;) 5890(param) - 5893: 7(f16vec4) FunctionCall 69(testSparseTexture() - 5894: 7(f16vec4) Load 5807(result) - 5895: 7(f16vec4) FAdd 5894 5893 - Store 5807(result) 5895 - 5896: 7(f16vec4) FunctionCall 71(testSparseTextureLod() - 5897: 7(f16vec4) Load 5807(result) - 5898: 7(f16vec4) FAdd 5897 5896 - Store 5807(result) 5898 - 5899: 7(f16vec4) FunctionCall 73(testSparseTextureOffset() - 5900: 7(f16vec4) Load 5807(result) - 5901: 7(f16vec4) FAdd 5900 5899 - Store 5807(result) 5901 - 5902: 7(f16vec4) FunctionCall 75(testSparseTextureLodOffset() - 5903: 7(f16vec4) Load 5807(result) - 5904: 7(f16vec4) FAdd 5903 5902 - Store 5807(result) 5904 - 5905: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() - 5906: 7(f16vec4) Load 5807(result) - 5907: 7(f16vec4) FAdd 5906 5905 - Store 5807(result) 5907 - 5908: 7(f16vec4) FunctionCall 79(testSparseTextureGradOffset() - 5909: 7(f16vec4) Load 5807(result) - 5910: 7(f16vec4) FAdd 5909 5908 - Store 5807(result) 5910 - 5911: 7(f16vec4) FunctionCall 81(testSparseTexelFetch() - 5912: 7(f16vec4) Load 5807(result) - 5913: 7(f16vec4) FAdd 5912 5911 - Store 5807(result) 5913 - 5914: 7(f16vec4) FunctionCall 83(testSparseTexelFetchOffset() - 5915: 7(f16vec4) Load 5807(result) - 5916: 7(f16vec4) FAdd 5915 5914 - Store 5807(result) 5916 - 5917: 7(f16vec4) FunctionCall 85(testSparseTextureGather() - 5918: 7(f16vec4) Load 5807(result) - 5919: 7(f16vec4) FAdd 5918 5917 - Store 5807(result) 5919 - 5920: 7(f16vec4) FunctionCall 87(testSparseTextureGatherOffset() - 5921: 7(f16vec4) Load 5807(result) - 5922: 7(f16vec4) FAdd 5921 5920 - Store 5807(result) 5922 - 5923: 7(f16vec4) FunctionCall 89(testSparseTextureGatherOffsets() - 5924: 7(f16vec4) Load 5807(result) - 5925: 7(f16vec4) FAdd 5924 5923 - Store 5807(result) 5925 - 5926: 7(f16vec4) FunctionCall 91(testSparseTextureGatherLod() - 5927: 7(f16vec4) Load 5807(result) - 5928: 7(f16vec4) FAdd 5927 5926 - Store 5807(result) 5928 - 5929: 7(f16vec4) FunctionCall 93(testSparseTextureGatherLodOffset() - 5930: 7(f16vec4) Load 5807(result) - 5931: 7(f16vec4) FAdd 5930 5929 - Store 5807(result) 5931 - 5932: 7(f16vec4) FunctionCall 95(testSparseTextureGatherLodOffsets() - 5933: 7(f16vec4) Load 5807(result) - 5934: 7(f16vec4) FAdd 5933 5932 - Store 5807(result) 5934 - 5935: 7(f16vec4) FunctionCall 97(testSparseImageLoad() - 5936: 7(f16vec4) Load 5807(result) - 5937: 7(f16vec4) FAdd 5936 5935 - Store 5807(result) 5937 - 5938: 7(f16vec4) FunctionCall 99(testSparseTextureClamp() - 5939: 7(f16vec4) Load 5807(result) - 5940: 7(f16vec4) FAdd 5939 5938 - Store 5807(result) 5940 - 5941: 7(f16vec4) FunctionCall 101(testTextureClamp() - 5942: 7(f16vec4) Load 5807(result) - 5943: 7(f16vec4) FAdd 5942 5941 - Store 5807(result) 5943 - 5944: 7(f16vec4) FunctionCall 103(testSparseTextureOffsetClamp() - 5945: 7(f16vec4) Load 5807(result) - 5946: 7(f16vec4) FAdd 5945 5944 - Store 5807(result) 5946 - 5947: 7(f16vec4) FunctionCall 105(testTextureOffsetClamp() - 5948: 7(f16vec4) Load 5807(result) - 5949: 7(f16vec4) FAdd 5948 5947 - Store 5807(result) 5949 - 5950: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() - 5951: 7(f16vec4) Load 5807(result) - 5952: 7(f16vec4) FAdd 5951 5950 - Store 5807(result) 5952 - 5953: 7(f16vec4) FunctionCall 27(testTextureGrad() - 5954: 7(f16vec4) Load 5807(result) - 5955: 7(f16vec4) FAdd 5954 5953 - Store 5807(result) 5955 - 5956: 7(f16vec4) FunctionCall 111(testSparseTextureGradOffsetClamp() - 5957: 7(f16vec4) Load 5807(result) - 5958: 7(f16vec4) FAdd 5957 5956 - Store 5807(result) 5958 - 5959: 7(f16vec4) FunctionCall 113(testTextureGradOffsetClamp() - 5960: 7(f16vec4) Load 5807(result) - 5961: 7(f16vec4) FAdd 5960 5959 - Store 5807(result) 5961 - 5962: 7(f16vec4) FunctionCall 115(testCombinedTextureSampler() - 5963: 7(f16vec4) Load 5807(result) - 5964: 7(f16vec4) FAdd 5963 5962 - Store 5807(result) 5964 - 5965: 7(f16vec4) FunctionCall 117(testSubpassLoad() - 5966: 7(f16vec4) Load 5807(result) - 5967: 7(f16vec4) FAdd 5966 5965 - Store 5807(result) 5967 - 5970: 7(f16vec4) Load 5807(result) - 5971: 249(fvec4) FConvert 5970 - Store 5969(fragColor) 5971 + 5615(result): 64(ptr) Variable Function + 5698(param): 64(ptr) Variable Function + Store 5615(result) 121 + 5616: 7(f16vec4) FunctionCall 9(testTexture() + 5617: 7(f16vec4) Load 5615(result) + 5618: 7(f16vec4) FAdd 5617 5616 + Store 5615(result) 5618 + 5619: 7(f16vec4) FunctionCall 11(testTextureProj() + 5620: 7(f16vec4) Load 5615(result) + 5621: 7(f16vec4) FAdd 5620 5619 + Store 5615(result) 5621 + 5622: 7(f16vec4) FunctionCall 13(testTextureLod() + 5623: 7(f16vec4) Load 5615(result) + 5624: 7(f16vec4) FAdd 5623 5622 + Store 5615(result) 5624 + 5625: 7(f16vec4) FunctionCall 15(testTextureOffset() + 5626: 7(f16vec4) Load 5615(result) + 5627: 7(f16vec4) FAdd 5626 5625 + Store 5615(result) 5627 + 5628: 7(f16vec4) FunctionCall 19(testTextureLodOffset() + 5629: 7(f16vec4) Load 5615(result) + 5630: 7(f16vec4) FAdd 5629 5628 + Store 5615(result) 5630 + 5631: 7(f16vec4) FunctionCall 21(testTextureProjLodOffset() + 5632: 7(f16vec4) Load 5615(result) + 5633: 7(f16vec4) FAdd 5632 5631 + Store 5615(result) 5633 + 5634: 7(f16vec4) FunctionCall 23(testTexelFetch() + 5635: 7(f16vec4) Load 5615(result) + 5636: 7(f16vec4) FAdd 5635 5634 + Store 5615(result) 5636 + 5637: 7(f16vec4) FunctionCall 25(testTexelFetchOffset() + 5638: 7(f16vec4) Load 5615(result) + 5639: 7(f16vec4) FAdd 5638 5637 + Store 5615(result) 5639 + 5640: 7(f16vec4) FunctionCall 27(testTextureGrad() + 5641: 7(f16vec4) Load 5615(result) + 5642: 7(f16vec4) FAdd 5641 5640 + Store 5615(result) 5642 + 5643: 7(f16vec4) FunctionCall 29(testTextureGradOffset() + 5644: 7(f16vec4) Load 5615(result) + 5645: 7(f16vec4) FAdd 5644 5643 + Store 5615(result) 5645 + 5646: 7(f16vec4) FunctionCall 31(testTextureProjGrad() + 5647: 7(f16vec4) Load 5615(result) + 5648: 7(f16vec4) FAdd 5647 5646 + Store 5615(result) 5648 + 5649: 7(f16vec4) FunctionCall 33(testTextureProjGradoffset() + 5650: 7(f16vec4) Load 5615(result) + 5651: 7(f16vec4) FAdd 5650 5649 + Store 5615(result) 5651 + 5652: 7(f16vec4) FunctionCall 35(testTextureGather() + 5653: 7(f16vec4) Load 5615(result) + 5654: 7(f16vec4) FAdd 5653 5652 + Store 5615(result) 5654 + 5655: 7(f16vec4) FunctionCall 37(testTextureGatherOffset() + 5656: 7(f16vec4) Load 5615(result) + 5657: 7(f16vec4) FAdd 5656 5655 + Store 5615(result) 5657 + 5658: 7(f16vec4) FunctionCall 39(testTextureGatherOffsets() + 5659: 7(f16vec4) Load 5615(result) + 5660: 7(f16vec4) FAdd 5659 5658 + Store 5615(result) 5660 + 5661: 7(f16vec4) FunctionCall 41(testTextureGatherLod() + 5662: 7(f16vec4) Load 5615(result) + 5663: 7(f16vec4) FAdd 5662 5661 + Store 5615(result) 5663 + 5664: 7(f16vec4) FunctionCall 43(testTextureGatherLodOffset() + 5665: 7(f16vec4) Load 5615(result) + 5666: 7(f16vec4) FAdd 5665 5664 + Store 5615(result) 5666 + 5667: 7(f16vec4) FunctionCall 45(testTextureGatherLodOffsets() + 5668: 7(f16vec4) Load 5615(result) + 5669: 7(f16vec4) FAdd 5668 5667 + Store 5615(result) 5669 + 5670: 48(ivec4) FunctionCall 50(testTextureSize() + 5671: 7(f16vec4) ConvertSToF 5670 + 5672: 7(f16vec4) Load 5615(result) + 5673: 7(f16vec4) FAdd 5672 5671 + Store 5615(result) 5673 + 5674: 53(fvec2) FunctionCall 55(testTextureQueryLod() + 5675:154(f16vec2) FConvert 5674 + 5676: 7(f16vec4) Load 5615(result) + 5677:154(f16vec2) VectorShuffle 5676 5676 0 1 + 5678:154(f16vec2) FAdd 5677 5675 + 5679: 208(ptr) AccessChain 5615(result) 207 + 5680:6(float16_t) CompositeExtract 5678 0 + Store 5679 5680 + 5681: 208(ptr) AccessChain 5615(result) 2491 + 5682:6(float16_t) CompositeExtract 5678 1 + Store 5681 5682 + 5683: 47(int) FunctionCall 58(testTextureQueryLevels() + 5684:6(float16_t) ConvertSToF 5683 + 5685: 208(ptr) AccessChain 5615(result) 207 + 5686:6(float16_t) Load 5685 + 5687:6(float16_t) FAdd 5686 5684 + 5688: 208(ptr) AccessChain 5615(result) 207 + Store 5688 5687 + 5689: 47(int) FunctionCall 60(testTextureSamples() + 5690:6(float16_t) ConvertSToF 5689 + 5691: 208(ptr) AccessChain 5615(result) 207 + 5692:6(float16_t) Load 5691 + 5693:6(float16_t) FAdd 5692 5690 + 5694: 208(ptr) AccessChain 5615(result) 207 + Store 5694 5693 + 5695: 7(f16vec4) FunctionCall 62(testImageLoad() + 5696: 7(f16vec4) Load 5615(result) + 5697: 7(f16vec4) FAdd 5696 5695 + Store 5615(result) 5697 + 5699: 7(f16vec4) Load 5615(result) + Store 5698(param) 5699 + 5700: 2 FunctionCall 67(testImageStore(vf164;) 5698(param) + 5701: 7(f16vec4) FunctionCall 69(testSparseTexture() + 5702: 7(f16vec4) Load 5615(result) + 5703: 7(f16vec4) FAdd 5702 5701 + Store 5615(result) 5703 + 5704: 7(f16vec4) FunctionCall 71(testSparseTextureLod() + 5705: 7(f16vec4) Load 5615(result) + 5706: 7(f16vec4) FAdd 5705 5704 + Store 5615(result) 5706 + 5707: 7(f16vec4) FunctionCall 73(testSparseTextureOffset() + 5708: 7(f16vec4) Load 5615(result) + 5709: 7(f16vec4) FAdd 5708 5707 + Store 5615(result) 5709 + 5710: 7(f16vec4) FunctionCall 75(testSparseTextureLodOffset() + 5711: 7(f16vec4) Load 5615(result) + 5712: 7(f16vec4) FAdd 5711 5710 + Store 5615(result) 5712 + 5713: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() + 5714: 7(f16vec4) Load 5615(result) + 5715: 7(f16vec4) FAdd 5714 5713 + Store 5615(result) 5715 + 5716: 7(f16vec4) FunctionCall 79(testSparseTextureGradOffset() + 5717: 7(f16vec4) Load 5615(result) + 5718: 7(f16vec4) FAdd 5717 5716 + Store 5615(result) 5718 + 5719: 7(f16vec4) FunctionCall 81(testSparseTexelFetch() + 5720: 7(f16vec4) Load 5615(result) + 5721: 7(f16vec4) FAdd 5720 5719 + Store 5615(result) 5721 + 5722: 7(f16vec4) FunctionCall 83(testSparseTexelFetchOffset() + 5723: 7(f16vec4) Load 5615(result) + 5724: 7(f16vec4) FAdd 5723 5722 + Store 5615(result) 5724 + 5725: 7(f16vec4) FunctionCall 85(testSparseTextureGather() + 5726: 7(f16vec4) Load 5615(result) + 5727: 7(f16vec4) FAdd 5726 5725 + Store 5615(result) 5727 + 5728: 7(f16vec4) FunctionCall 87(testSparseTextureGatherOffset() + 5729: 7(f16vec4) Load 5615(result) + 5730: 7(f16vec4) FAdd 5729 5728 + Store 5615(result) 5730 + 5731: 7(f16vec4) FunctionCall 89(testSparseTextureGatherOffsets() + 5732: 7(f16vec4) Load 5615(result) + 5733: 7(f16vec4) FAdd 5732 5731 + Store 5615(result) 5733 + 5734: 7(f16vec4) FunctionCall 91(testSparseTextureGatherLod() + 5735: 7(f16vec4) Load 5615(result) + 5736: 7(f16vec4) FAdd 5735 5734 + Store 5615(result) 5736 + 5737: 7(f16vec4) FunctionCall 93(testSparseTextureGatherLodOffset() + 5738: 7(f16vec4) Load 5615(result) + 5739: 7(f16vec4) FAdd 5738 5737 + Store 5615(result) 5739 + 5740: 7(f16vec4) FunctionCall 95(testSparseTextureGatherLodOffsets() + 5741: 7(f16vec4) Load 5615(result) + 5742: 7(f16vec4) FAdd 5741 5740 + Store 5615(result) 5742 + 5743: 7(f16vec4) FunctionCall 97(testSparseImageLoad() + 5744: 7(f16vec4) Load 5615(result) + 5745: 7(f16vec4) FAdd 5744 5743 + Store 5615(result) 5745 + 5746: 7(f16vec4) FunctionCall 99(testSparseTextureClamp() + 5747: 7(f16vec4) Load 5615(result) + 5748: 7(f16vec4) FAdd 5747 5746 + Store 5615(result) 5748 + 5749: 7(f16vec4) FunctionCall 101(testTextureClamp() + 5750: 7(f16vec4) Load 5615(result) + 5751: 7(f16vec4) FAdd 5750 5749 + Store 5615(result) 5751 + 5752: 7(f16vec4) FunctionCall 103(testSparseTextureOffsetClamp() + 5753: 7(f16vec4) Load 5615(result) + 5754: 7(f16vec4) FAdd 5753 5752 + Store 5615(result) 5754 + 5755: 7(f16vec4) FunctionCall 105(testTextureOffsetClamp() + 5756: 7(f16vec4) Load 5615(result) + 5757: 7(f16vec4) FAdd 5756 5755 + Store 5615(result) 5757 + 5758: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() + 5759: 7(f16vec4) Load 5615(result) + 5760: 7(f16vec4) FAdd 5759 5758 + Store 5615(result) 5760 + 5761: 7(f16vec4) FunctionCall 27(testTextureGrad() + 5762: 7(f16vec4) Load 5615(result) + 5763: 7(f16vec4) FAdd 5762 5761 + Store 5615(result) 5763 + 5764: 7(f16vec4) FunctionCall 111(testSparseTextureGradOffsetClamp() + 5765: 7(f16vec4) Load 5615(result) + 5766: 7(f16vec4) FAdd 5765 5764 + Store 5615(result) 5766 + 5767: 7(f16vec4) FunctionCall 113(testTextureGradOffsetClamp() + 5768: 7(f16vec4) Load 5615(result) + 5769: 7(f16vec4) FAdd 5768 5767 + Store 5615(result) 5769 + 5770: 7(f16vec4) FunctionCall 115(testCombinedTextureSampler() + 5771: 7(f16vec4) Load 5615(result) + 5772: 7(f16vec4) FAdd 5771 5770 + Store 5615(result) 5772 + 5773: 7(f16vec4) FunctionCall 117(testSubpassLoad() + 5774: 7(f16vec4) Load 5615(result) + 5775: 7(f16vec4) FAdd 5774 5773 + Store 5615(result) 5775 + 5778: 7(f16vec4) Load 5615(result) + 5779: 249(fvec4) FConvert 5778 + Store 5777(fragColor) 5779 Return FunctionEnd 9(testTexture(): 7(f16vec4) Function None 8 @@ -2115,5035 +2115,4843 @@ Validation failed 1391: 123 Load 125(s1D) 1392: 52(float) Load 128(c1) 1394: 52(float) Load 1393(dPdxy1) - 1395: 52(float) Load 1393(dPdxy1) - 1396: 7(f16vec4) ImageSampleExplicitLod 1391 1392 Grad 1394 1395 - 1397: 7(f16vec4) Load 1390(texel) - 1398: 7(f16vec4) FAdd 1397 1396 - Store 1390(texel) 1398 - 1399: 123 Load 125(s1D) - 1400:6(float16_t) Load 135(f16c1) - 1402:6(float16_t) Load 1401(f16dPdxy1) - 1403:6(float16_t) Load 1401(f16dPdxy1) - 1404: 7(f16vec4) ImageSampleExplicitLod 1399 1400 Grad 1402 1403 - 1405: 7(f16vec4) Load 1390(texel) - 1406: 7(f16vec4) FAdd 1405 1404 - Store 1390(texel) 1406 - 1407: 143 Load 145(s2D) - 1408: 53(fvec2) Load 148(c2) - 1410: 53(fvec2) Load 1409(dPdxy2) - 1411: 53(fvec2) Load 1409(dPdxy2) - 1412: 7(f16vec4) ImageSampleExplicitLod 1407 1408 Grad 1410 1411 - 1413: 7(f16vec4) Load 1390(texel) - 1414: 7(f16vec4) FAdd 1413 1412 - Store 1390(texel) 1414 - 1415: 143 Load 145(s2D) - 1416:154(f16vec2) Load 156(f16c2) - 1418:154(f16vec2) Load 1417(f16dPdxy2) - 1419:154(f16vec2) Load 1417(f16dPdxy2) - 1420: 7(f16vec4) ImageSampleExplicitLod 1415 1416 Grad 1418 1419 - 1421: 7(f16vec4) Load 1390(texel) - 1422: 7(f16vec4) FAdd 1421 1420 - Store 1390(texel) 1422 - 1423: 163 Load 165(s3D) - 1424: 167(fvec3) Load 169(c3) - 1426: 167(fvec3) Load 1425(dPdxy3) - 1427: 167(fvec3) Load 1425(dPdxy3) - 1428: 7(f16vec4) ImageSampleExplicitLod 1423 1424 Grad 1426 1427 - 1429: 7(f16vec4) Load 1390(texel) - 1430: 7(f16vec4) FAdd 1429 1428 - Store 1390(texel) 1430 - 1431: 163 Load 165(s3D) - 1432:175(f16vec3) Load 177(f16c3) - 1434:175(f16vec3) Load 1433(f16dPdxy3) - 1435:175(f16vec3) Load 1433(f16dPdxy3) - 1436: 7(f16vec4) ImageSampleExplicitLod 1431 1432 Grad 1434 1435 + 1395: 7(f16vec4) ImageSampleExplicitLod 1391 1392 Grad 1394 1394 + 1396: 7(f16vec4) Load 1390(texel) + 1397: 7(f16vec4) FAdd 1396 1395 + Store 1390(texel) 1397 + 1398: 123 Load 125(s1D) + 1399:6(float16_t) Load 135(f16c1) + 1401:6(float16_t) Load 1400(f16dPdxy1) + 1402: 7(f16vec4) ImageSampleExplicitLod 1398 1399 Grad 1401 1401 + 1403: 7(f16vec4) Load 1390(texel) + 1404: 7(f16vec4) FAdd 1403 1402 + Store 1390(texel) 1404 + 1405: 143 Load 145(s2D) + 1406: 53(fvec2) Load 148(c2) + 1408: 53(fvec2) Load 1407(dPdxy2) + 1409: 7(f16vec4) ImageSampleExplicitLod 1405 1406 Grad 1408 1408 + 1410: 7(f16vec4) Load 1390(texel) + 1411: 7(f16vec4) FAdd 1410 1409 + Store 1390(texel) 1411 + 1412: 143 Load 145(s2D) + 1413:154(f16vec2) Load 156(f16c2) + 1415:154(f16vec2) Load 1414(f16dPdxy2) + 1416: 7(f16vec4) ImageSampleExplicitLod 1412 1413 Grad 1415 1415 + 1417: 7(f16vec4) Load 1390(texel) + 1418: 7(f16vec4) FAdd 1417 1416 + Store 1390(texel) 1418 + 1419: 163 Load 165(s3D) + 1420: 167(fvec3) Load 169(c3) + 1422: 167(fvec3) Load 1421(dPdxy3) + 1423: 7(f16vec4) ImageSampleExplicitLod 1419 1420 Grad 1422 1422 + 1424: 7(f16vec4) Load 1390(texel) + 1425: 7(f16vec4) FAdd 1424 1423 + Store 1390(texel) 1425 + 1426: 163 Load 165(s3D) + 1427:175(f16vec3) Load 177(f16c3) + 1429:175(f16vec3) Load 1428(f16dPdxy3) + 1430: 7(f16vec4) ImageSampleExplicitLod 1426 1427 Grad 1429 1429 + 1431: 7(f16vec4) Load 1390(texel) + 1432: 7(f16vec4) FAdd 1431 1430 + Store 1390(texel) 1432 + 1433: 184 Load 186(sCube) + 1434: 167(fvec3) Load 169(c3) + 1435: 167(fvec3) Load 1421(dPdxy3) + 1436: 7(f16vec4) ImageSampleExplicitLod 1433 1434 Grad 1435 1435 1437: 7(f16vec4) Load 1390(texel) 1438: 7(f16vec4) FAdd 1437 1436 Store 1390(texel) 1438 1439: 184 Load 186(sCube) - 1440: 167(fvec3) Load 169(c3) - 1441: 167(fvec3) Load 1425(dPdxy3) - 1442: 167(fvec3) Load 1425(dPdxy3) - 1443: 7(f16vec4) ImageSampleExplicitLod 1439 1440 Grad 1441 1442 - 1444: 7(f16vec4) Load 1390(texel) - 1445: 7(f16vec4) FAdd 1444 1443 - Store 1390(texel) 1445 - 1446: 184 Load 186(sCube) - 1447:175(f16vec3) Load 177(f16c3) - 1448:175(f16vec3) Load 1433(f16dPdxy3) - 1449:175(f16vec3) Load 1433(f16dPdxy3) - 1450: 7(f16vec4) ImageSampleExplicitLod 1446 1447 Grad 1448 1449 - 1451: 7(f16vec4) Load 1390(texel) - 1452: 7(f16vec4) FAdd 1451 1450 - Store 1390(texel) 1452 - 1453: 357 Load 359(s2DRect) - 1454: 53(fvec2) Load 148(c2) - 1455: 53(fvec2) Load 1409(dPdxy2) - 1456: 53(fvec2) Load 1409(dPdxy2) - 1457: 7(f16vec4) ImageSampleExplicitLod 1453 1454 Grad 1455 1456 - 1458: 7(f16vec4) Load 1390(texel) - 1459: 7(f16vec4) FAdd 1458 1457 - Store 1390(texel) 1459 - 1460: 357 Load 359(s2DRect) - 1461:154(f16vec2) Load 156(f16c2) - 1462:154(f16vec2) Load 1417(f16dPdxy2) - 1463:154(f16vec2) Load 1417(f16dPdxy2) - 1464: 7(f16vec4) ImageSampleExplicitLod 1460 1461 Grad 1462 1463 - 1465: 7(f16vec4) Load 1390(texel) - 1466: 7(f16vec4) FAdd 1465 1464 - Store 1390(texel) 1466 - 1467: 371 Load 373(s2DRectShadow) - 1468: 167(fvec3) Load 169(c3) - 1469: 53(fvec2) Load 1409(dPdxy2) - 1470: 53(fvec2) Load 1409(dPdxy2) - 1471: 52(float) CompositeExtract 1468 2 - 1472:6(float16_t) ImageSampleDrefExplicitLod 1467 1468 1471 Grad 1469 1470 - 1473: 208(ptr) AccessChain 1390(texel) 207 - 1474:6(float16_t) Load 1473 - 1475:6(float16_t) FAdd 1474 1472 - 1476: 208(ptr) AccessChain 1390(texel) 207 - Store 1476 1475 - 1477: 371 Load 373(s2DRectShadow) - 1478:154(f16vec2) Load 156(f16c2) - 1479: 52(float) Load 215(compare) - 1480:154(f16vec2) Load 1417(f16dPdxy2) - 1481:154(f16vec2) Load 1417(f16dPdxy2) - 1482:6(float16_t) ImageSampleDrefExplicitLod 1477 1478 1479 Grad 1480 1481 + 1440:175(f16vec3) Load 177(f16c3) + 1441:175(f16vec3) Load 1428(f16dPdxy3) + 1442: 7(f16vec4) ImageSampleExplicitLod 1439 1440 Grad 1441 1441 + 1443: 7(f16vec4) Load 1390(texel) + 1444: 7(f16vec4) FAdd 1443 1442 + Store 1390(texel) 1444 + 1445: 357 Load 359(s2DRect) + 1446: 53(fvec2) Load 148(c2) + 1447: 53(fvec2) Load 1407(dPdxy2) + 1448: 7(f16vec4) ImageSampleExplicitLod 1445 1446 Grad 1447 1447 + 1449: 7(f16vec4) Load 1390(texel) + 1450: 7(f16vec4) FAdd 1449 1448 + Store 1390(texel) 1450 + 1451: 357 Load 359(s2DRect) + 1452:154(f16vec2) Load 156(f16c2) + 1453:154(f16vec2) Load 1414(f16dPdxy2) + 1454: 7(f16vec4) ImageSampleExplicitLod 1451 1452 Grad 1453 1453 + 1455: 7(f16vec4) Load 1390(texel) + 1456: 7(f16vec4) FAdd 1455 1454 + Store 1390(texel) 1456 + 1457: 371 Load 373(s2DRectShadow) + 1458: 167(fvec3) Load 169(c3) + 1459: 53(fvec2) Load 1407(dPdxy2) + 1460: 52(float) CompositeExtract 1458 2 + 1461:6(float16_t) ImageSampleDrefExplicitLod 1457 1458 1460 Grad 1459 1459 + 1462: 208(ptr) AccessChain 1390(texel) 207 + 1463:6(float16_t) Load 1462 + 1464:6(float16_t) FAdd 1463 1461 + 1465: 208(ptr) AccessChain 1390(texel) 207 + Store 1465 1464 + 1466: 371 Load 373(s2DRectShadow) + 1467:154(f16vec2) Load 156(f16c2) + 1468: 52(float) Load 215(compare) + 1469:154(f16vec2) Load 1414(f16dPdxy2) + 1470:6(float16_t) ImageSampleDrefExplicitLod 1466 1467 1468 Grad 1469 1469 + 1471: 208(ptr) AccessChain 1390(texel) 207 + 1472:6(float16_t) Load 1471 + 1473:6(float16_t) FAdd 1472 1470 + 1474: 208(ptr) AccessChain 1390(texel) 207 + Store 1474 1473 + 1475: 199 Load 201(s1DShadow) + 1476: 167(fvec3) Load 169(c3) + 1477: 52(float) Load 1393(dPdxy1) + 1478: 52(float) CompositeExtract 1476 2 + 1479:6(float16_t) ImageSampleDrefExplicitLod 1475 1476 1478 Grad 1477 1477 + 1480: 208(ptr) AccessChain 1390(texel) 207 + 1481:6(float16_t) Load 1480 + 1482:6(float16_t) FAdd 1481 1479 1483: 208(ptr) AccessChain 1390(texel) 207 - 1484:6(float16_t) Load 1483 - 1485:6(float16_t) FAdd 1484 1482 - 1486: 208(ptr) AccessChain 1390(texel) 207 - Store 1486 1485 - 1487: 199 Load 201(s1DShadow) - 1488: 167(fvec3) Load 169(c3) - 1489: 52(float) Load 1393(dPdxy1) - 1490: 52(float) Load 1393(dPdxy1) - 1491: 52(float) CompositeExtract 1488 2 - 1492:6(float16_t) ImageSampleDrefExplicitLod 1487 1488 1491 Grad 1489 1490 - 1493: 208(ptr) AccessChain 1390(texel) 207 - 1494:6(float16_t) Load 1493 - 1495:6(float16_t) FAdd 1494 1492 - 1496: 208(ptr) AccessChain 1390(texel) 207 - Store 1496 1495 - 1497: 199 Load 201(s1DShadow) - 1498:154(f16vec2) Load 156(f16c2) - 1499: 52(float) Load 215(compare) - 1500:6(float16_t) Load 1401(f16dPdxy1) - 1501:6(float16_t) Load 1401(f16dPdxy1) - 1502:6(float16_t) ImageSampleDrefExplicitLod 1497 1498 1499 Grad 1500 1501 - 1503: 208(ptr) AccessChain 1390(texel) 207 - 1504:6(float16_t) Load 1503 - 1505:6(float16_t) FAdd 1504 1502 - 1506: 208(ptr) AccessChain 1390(texel) 207 - Store 1506 1505 - 1507: 224 Load 226(s2DShadow) - 1508: 167(fvec3) Load 169(c3) - 1509: 53(fvec2) Load 1409(dPdxy2) - 1510: 53(fvec2) Load 1409(dPdxy2) - 1511: 52(float) CompositeExtract 1508 2 - 1512:6(float16_t) ImageSampleDrefExplicitLod 1507 1508 1511 Grad 1509 1510 - 1513: 208(ptr) AccessChain 1390(texel) 207 - 1514:6(float16_t) Load 1513 - 1515:6(float16_t) FAdd 1514 1512 + Store 1483 1482 + 1484: 199 Load 201(s1DShadow) + 1485:154(f16vec2) Load 156(f16c2) + 1486: 52(float) Load 215(compare) + 1487:6(float16_t) Load 1400(f16dPdxy1) + 1488:6(float16_t) ImageSampleDrefExplicitLod 1484 1485 1486 Grad 1487 1487 + 1489: 208(ptr) AccessChain 1390(texel) 207 + 1490:6(float16_t) Load 1489 + 1491:6(float16_t) FAdd 1490 1488 + 1492: 208(ptr) AccessChain 1390(texel) 207 + Store 1492 1491 + 1493: 224 Load 226(s2DShadow) + 1494: 167(fvec3) Load 169(c3) + 1495: 53(fvec2) Load 1407(dPdxy2) + 1496: 52(float) CompositeExtract 1494 2 + 1497:6(float16_t) ImageSampleDrefExplicitLod 1493 1494 1496 Grad 1495 1495 + 1498: 208(ptr) AccessChain 1390(texel) 207 + 1499:6(float16_t) Load 1498 + 1500:6(float16_t) FAdd 1499 1497 + 1501: 208(ptr) AccessChain 1390(texel) 207 + Store 1501 1500 + 1502: 224 Load 226(s2DShadow) + 1503:154(f16vec2) Load 156(f16c2) + 1504: 52(float) Load 215(compare) + 1505:154(f16vec2) Load 1414(f16dPdxy2) + 1506:6(float16_t) ImageSampleDrefExplicitLod 1502 1503 1504 Grad 1505 1505 + 1507: 208(ptr) AccessChain 1390(texel) 207 + 1508:6(float16_t) Load 1507 + 1509:6(float16_t) FAdd 1508 1506 + 1510: 208(ptr) AccessChain 1390(texel) 207 + Store 1510 1509 + 1511: 245 Load 247(sCubeShadow) + 1512: 249(fvec4) Load 251(c4) + 1513: 167(fvec3) Load 1421(dPdxy3) + 1514: 52(float) CompositeExtract 1512 3 + 1515:6(float16_t) ImageSampleDrefExplicitLod 1511 1512 1514 Grad 1513 1513 1516: 208(ptr) AccessChain 1390(texel) 207 - Store 1516 1515 - 1517: 224 Load 226(s2DShadow) - 1518:154(f16vec2) Load 156(f16c2) - 1519: 52(float) Load 215(compare) - 1520:154(f16vec2) Load 1417(f16dPdxy2) - 1521:154(f16vec2) Load 1417(f16dPdxy2) - 1522:6(float16_t) ImageSampleDrefExplicitLod 1517 1518 1519 Grad 1520 1521 - 1523: 208(ptr) AccessChain 1390(texel) 207 - 1524:6(float16_t) Load 1523 - 1525:6(float16_t) FAdd 1524 1522 - 1526: 208(ptr) AccessChain 1390(texel) 207 - Store 1526 1525 - 1527: 245 Load 247(sCubeShadow) - 1528: 249(fvec4) Load 251(c4) - 1529: 167(fvec3) Load 1425(dPdxy3) - 1530: 167(fvec3) Load 1425(dPdxy3) - 1531: 52(float) CompositeExtract 1528 3 - 1532:6(float16_t) ImageSampleDrefExplicitLod 1527 1528 1531 Grad 1529 1530 - 1533: 208(ptr) AccessChain 1390(texel) 207 - 1534:6(float16_t) Load 1533 - 1535:6(float16_t) FAdd 1534 1532 - 1536: 208(ptr) AccessChain 1390(texel) 207 - Store 1536 1535 - 1537: 245 Load 247(sCubeShadow) - 1538:175(f16vec3) Load 177(f16c3) - 1539: 52(float) Load 215(compare) - 1540:175(f16vec3) Load 1433(f16dPdxy3) - 1541:175(f16vec3) Load 1433(f16dPdxy3) - 1542:6(float16_t) ImageSampleDrefExplicitLod 1537 1538 1539 Grad 1540 1541 - 1543: 208(ptr) AccessChain 1390(texel) 207 - 1544:6(float16_t) Load 1543 - 1545:6(float16_t) FAdd 1544 1542 - 1546: 208(ptr) AccessChain 1390(texel) 207 - Store 1546 1545 - 1547: 269 Load 271(s1DArray) - 1548: 53(fvec2) Load 148(c2) - 1549: 52(float) Load 1393(dPdxy1) - 1550: 52(float) Load 1393(dPdxy1) - 1551: 7(f16vec4) ImageSampleExplicitLod 1547 1548 Grad 1549 1550 - 1552: 7(f16vec4) Load 1390(texel) - 1553: 7(f16vec4) FAdd 1552 1551 - Store 1390(texel) 1553 - 1554: 269 Load 271(s1DArray) - 1555:154(f16vec2) Load 156(f16c2) - 1556:6(float16_t) Load 1401(f16dPdxy1) - 1557:6(float16_t) Load 1401(f16dPdxy1) - 1558: 7(f16vec4) ImageSampleExplicitLod 1554 1555 Grad 1556 1557 - 1559: 7(f16vec4) Load 1390(texel) - 1560: 7(f16vec4) FAdd 1559 1558 - Store 1390(texel) 1560 - 1561: 284 Load 286(s2DArray) - 1562: 167(fvec3) Load 169(c3) - 1563: 53(fvec2) Load 1409(dPdxy2) - 1564: 53(fvec2) Load 1409(dPdxy2) - 1565: 7(f16vec4) ImageSampleExplicitLod 1561 1562 Grad 1563 1564 - 1566: 7(f16vec4) Load 1390(texel) - 1567: 7(f16vec4) FAdd 1566 1565 - Store 1390(texel) 1567 - 1568: 284 Load 286(s2DArray) - 1569:175(f16vec3) Load 177(f16c3) - 1570:154(f16vec2) Load 1417(f16dPdxy2) - 1571:154(f16vec2) Load 1417(f16dPdxy2) - 1572: 7(f16vec4) ImageSampleExplicitLod 1568 1569 Grad 1570 1571 - 1573: 7(f16vec4) Load 1390(texel) - 1574: 7(f16vec4) FAdd 1573 1572 - Store 1390(texel) 1574 - 1575: 316 Load 318(s1DArrayShadow) - 1576: 167(fvec3) Load 169(c3) - 1577: 52(float) Load 1393(dPdxy1) - 1578: 52(float) Load 1393(dPdxy1) - 1579: 52(float) CompositeExtract 1576 2 - 1580:6(float16_t) ImageSampleDrefExplicitLod 1575 1576 1579 Grad 1577 1578 - 1581: 208(ptr) AccessChain 1390(texel) 207 - 1582:6(float16_t) Load 1581 - 1583:6(float16_t) FAdd 1582 1580 - 1584: 208(ptr) AccessChain 1390(texel) 207 - Store 1584 1583 - 1585: 316 Load 318(s1DArrayShadow) - 1586:154(f16vec2) Load 156(f16c2) - 1587: 52(float) Load 215(compare) - 1588:6(float16_t) Load 1401(f16dPdxy1) - 1589:6(float16_t) Load 1401(f16dPdxy1) - 1590:6(float16_t) ImageSampleDrefExplicitLod 1585 1586 1587 Grad 1588 1589 - 1591: 208(ptr) AccessChain 1390(texel) 207 - 1592:6(float16_t) Load 1591 - 1593:6(float16_t) FAdd 1592 1590 - 1594: 208(ptr) AccessChain 1390(texel) 207 - Store 1594 1593 - 1595: 337 Load 339(s2DArrayShadow) - 1596: 249(fvec4) Load 251(c4) - 1597: 53(fvec2) Load 1409(dPdxy2) - 1598: 53(fvec2) Load 1409(dPdxy2) - 1599: 52(float) CompositeExtract 1596 3 - 1600:6(float16_t) ImageSampleDrefExplicitLod 1595 1596 1599 Grad 1597 1598 - 1601: 208(ptr) AccessChain 1390(texel) 207 - 1602:6(float16_t) Load 1601 - 1603:6(float16_t) FAdd 1602 1600 - 1604: 208(ptr) AccessChain 1390(texel) 207 - Store 1604 1603 - 1605: 337 Load 339(s2DArrayShadow) - 1606:175(f16vec3) Load 177(f16c3) - 1607: 52(float) Load 215(compare) - 1608:154(f16vec2) Load 1417(f16dPdxy2) - 1609:154(f16vec2) Load 1417(f16dPdxy2) - 1610:6(float16_t) ImageSampleDrefExplicitLod 1605 1606 1607 Grad 1608 1609 - 1611: 208(ptr) AccessChain 1390(texel) 207 - 1612:6(float16_t) Load 1611 - 1613:6(float16_t) FAdd 1612 1610 - 1614: 208(ptr) AccessChain 1390(texel) 207 - Store 1614 1613 - 1615: 299 Load 301(sCubeArray) - 1616: 249(fvec4) Load 251(c4) - 1617: 167(fvec3) Load 1425(dPdxy3) - 1618: 167(fvec3) Load 1425(dPdxy3) - 1619: 7(f16vec4) ImageSampleExplicitLod 1615 1616 Grad 1617 1618 - 1620: 7(f16vec4) Load 1390(texel) - 1621: 7(f16vec4) FAdd 1620 1619 - Store 1390(texel) 1621 - 1622: 299 Load 301(sCubeArray) - 1623: 7(f16vec4) Load 309(f16c4) - 1624:175(f16vec3) Load 1433(f16dPdxy3) - 1625:175(f16vec3) Load 1433(f16dPdxy3) - 1626: 7(f16vec4) ImageSampleExplicitLod 1622 1623 Grad 1624 1625 - 1627: 7(f16vec4) Load 1390(texel) - 1628: 7(f16vec4) FAdd 1627 1626 - Store 1390(texel) 1628 - 1629: 7(f16vec4) Load 1390(texel) - ReturnValue 1629 + 1517:6(float16_t) Load 1516 + 1518:6(float16_t) FAdd 1517 1515 + 1519: 208(ptr) AccessChain 1390(texel) 207 + Store 1519 1518 + 1520: 245 Load 247(sCubeShadow) + 1521:175(f16vec3) Load 177(f16c3) + 1522: 52(float) Load 215(compare) + 1523:175(f16vec3) Load 1428(f16dPdxy3) + 1524:6(float16_t) ImageSampleDrefExplicitLod 1520 1521 1522 Grad 1523 1523 + 1525: 208(ptr) AccessChain 1390(texel) 207 + 1526:6(float16_t) Load 1525 + 1527:6(float16_t) FAdd 1526 1524 + 1528: 208(ptr) AccessChain 1390(texel) 207 + Store 1528 1527 + 1529: 269 Load 271(s1DArray) + 1530: 53(fvec2) Load 148(c2) + 1531: 52(float) Load 1393(dPdxy1) + 1532: 7(f16vec4) ImageSampleExplicitLod 1529 1530 Grad 1531 1531 + 1533: 7(f16vec4) Load 1390(texel) + 1534: 7(f16vec4) FAdd 1533 1532 + Store 1390(texel) 1534 + 1535: 269 Load 271(s1DArray) + 1536:154(f16vec2) Load 156(f16c2) + 1537:6(float16_t) Load 1400(f16dPdxy1) + 1538: 7(f16vec4) ImageSampleExplicitLod 1535 1536 Grad 1537 1537 + 1539: 7(f16vec4) Load 1390(texel) + 1540: 7(f16vec4) FAdd 1539 1538 + Store 1390(texel) 1540 + 1541: 284 Load 286(s2DArray) + 1542: 167(fvec3) Load 169(c3) + 1543: 53(fvec2) Load 1407(dPdxy2) + 1544: 7(f16vec4) ImageSampleExplicitLod 1541 1542 Grad 1543 1543 + 1545: 7(f16vec4) Load 1390(texel) + 1546: 7(f16vec4) FAdd 1545 1544 + Store 1390(texel) 1546 + 1547: 284 Load 286(s2DArray) + 1548:175(f16vec3) Load 177(f16c3) + 1549:154(f16vec2) Load 1414(f16dPdxy2) + 1550: 7(f16vec4) ImageSampleExplicitLod 1547 1548 Grad 1549 1549 + 1551: 7(f16vec4) Load 1390(texel) + 1552: 7(f16vec4) FAdd 1551 1550 + Store 1390(texel) 1552 + 1553: 316 Load 318(s1DArrayShadow) + 1554: 167(fvec3) Load 169(c3) + 1555: 52(float) Load 1393(dPdxy1) + 1556: 52(float) CompositeExtract 1554 2 + 1557:6(float16_t) ImageSampleDrefExplicitLod 1553 1554 1556 Grad 1555 1555 + 1558: 208(ptr) AccessChain 1390(texel) 207 + 1559:6(float16_t) Load 1558 + 1560:6(float16_t) FAdd 1559 1557 + 1561: 208(ptr) AccessChain 1390(texel) 207 + Store 1561 1560 + 1562: 316 Load 318(s1DArrayShadow) + 1563:154(f16vec2) Load 156(f16c2) + 1564: 52(float) Load 215(compare) + 1565:6(float16_t) Load 1400(f16dPdxy1) + 1566:6(float16_t) ImageSampleDrefExplicitLod 1562 1563 1564 Grad 1565 1565 + 1567: 208(ptr) AccessChain 1390(texel) 207 + 1568:6(float16_t) Load 1567 + 1569:6(float16_t) FAdd 1568 1566 + 1570: 208(ptr) AccessChain 1390(texel) 207 + Store 1570 1569 + 1571: 337 Load 339(s2DArrayShadow) + 1572: 249(fvec4) Load 251(c4) + 1573: 53(fvec2) Load 1407(dPdxy2) + 1574: 52(float) CompositeExtract 1572 3 + 1575:6(float16_t) ImageSampleDrefExplicitLod 1571 1572 1574 Grad 1573 1573 + 1576: 208(ptr) AccessChain 1390(texel) 207 + 1577:6(float16_t) Load 1576 + 1578:6(float16_t) FAdd 1577 1575 + 1579: 208(ptr) AccessChain 1390(texel) 207 + Store 1579 1578 + 1580: 337 Load 339(s2DArrayShadow) + 1581:175(f16vec3) Load 177(f16c3) + 1582: 52(float) Load 215(compare) + 1583:154(f16vec2) Load 1414(f16dPdxy2) + 1584:6(float16_t) ImageSampleDrefExplicitLod 1580 1581 1582 Grad 1583 1583 + 1585: 208(ptr) AccessChain 1390(texel) 207 + 1586:6(float16_t) Load 1585 + 1587:6(float16_t) FAdd 1586 1584 + 1588: 208(ptr) AccessChain 1390(texel) 207 + Store 1588 1587 + 1589: 299 Load 301(sCubeArray) + 1590: 249(fvec4) Load 251(c4) + 1591: 167(fvec3) Load 1421(dPdxy3) + 1592: 7(f16vec4) ImageSampleExplicitLod 1589 1590 Grad 1591 1591 + 1593: 7(f16vec4) Load 1390(texel) + 1594: 7(f16vec4) FAdd 1593 1592 + Store 1390(texel) 1594 + 1595: 299 Load 301(sCubeArray) + 1596: 7(f16vec4) Load 309(f16c4) + 1597:175(f16vec3) Load 1428(f16dPdxy3) + 1598: 7(f16vec4) ImageSampleExplicitLod 1595 1596 Grad 1597 1597 + 1599: 7(f16vec4) Load 1390(texel) + 1600: 7(f16vec4) FAdd 1599 1598 + Store 1390(texel) 1600 + 1601: 7(f16vec4) Load 1390(texel) + ReturnValue 1601 FunctionEnd 29(testTextureGradOffset(): 7(f16vec4) Function None 8 30: Label - 1632(texel): 64(ptr) Variable Function - Store 1632(texel) 121 - 1633: 123 Load 125(s1D) - 1634: 52(float) Load 128(c1) - 1635: 52(float) Load 1393(dPdxy1) - 1636: 52(float) Load 1393(dPdxy1) - 1637: 7(f16vec4) ImageSampleExplicitLod 1633 1634 Grad ConstOffset 1635 1636 709 - 1638: 7(f16vec4) Load 1632(texel) - 1639: 7(f16vec4) FAdd 1638 1637 - Store 1632(texel) 1639 - 1640: 123 Load 125(s1D) - 1641:6(float16_t) Load 135(f16c1) - 1642:6(float16_t) Load 1401(f16dPdxy1) - 1643:6(float16_t) Load 1401(f16dPdxy1) - 1644: 7(f16vec4) ImageSampleExplicitLod 1640 1641 Grad ConstOffset 1642 1643 709 - 1645: 7(f16vec4) Load 1632(texel) + 1604(texel): 64(ptr) Variable Function + Store 1604(texel) 121 + 1605: 123 Load 125(s1D) + 1606: 52(float) Load 128(c1) + 1607: 52(float) Load 1393(dPdxy1) + 1608: 7(f16vec4) ImageSampleExplicitLod 1605 1606 Grad ConstOffset 1607 1607 709 + 1609: 7(f16vec4) Load 1604(texel) + 1610: 7(f16vec4) FAdd 1609 1608 + Store 1604(texel) 1610 + 1611: 123 Load 125(s1D) + 1612:6(float16_t) Load 135(f16c1) + 1613:6(float16_t) Load 1400(f16dPdxy1) + 1614: 7(f16vec4) ImageSampleExplicitLod 1611 1612 Grad ConstOffset 1613 1613 709 + 1615: 7(f16vec4) Load 1604(texel) + 1616: 7(f16vec4) FAdd 1615 1614 + Store 1604(texel) 1616 + 1617: 143 Load 145(s2D) + 1618: 53(fvec2) Load 148(c2) + 1619: 53(fvec2) Load 1407(dPdxy2) + 1620: 7(f16vec4) ImageSampleExplicitLod 1617 1618 Grad ConstOffset 1619 1619 722 + 1621: 7(f16vec4) Load 1604(texel) + 1622: 7(f16vec4) FAdd 1621 1620 + Store 1604(texel) 1622 + 1623: 143 Load 145(s2D) + 1624:154(f16vec2) Load 156(f16c2) + 1625:154(f16vec2) Load 1414(f16dPdxy2) + 1626: 7(f16vec4) ImageSampleExplicitLod 1623 1624 Grad ConstOffset 1625 1625 722 + 1627: 7(f16vec4) Load 1604(texel) + 1628: 7(f16vec4) FAdd 1627 1626 + Store 1604(texel) 1628 + 1629: 163 Load 165(s3D) + 1630: 167(fvec3) Load 169(c3) + 1631: 167(fvec3) Load 1421(dPdxy3) + 1632: 7(f16vec4) ImageSampleExplicitLod 1629 1630 Grad ConstOffset 1631 1631 735 + 1633: 7(f16vec4) Load 1604(texel) + 1634: 7(f16vec4) FAdd 1633 1632 + Store 1604(texel) 1634 + 1635: 163 Load 165(s3D) + 1636:175(f16vec3) Load 177(f16c3) + 1637:175(f16vec3) Load 1428(f16dPdxy3) + 1638: 7(f16vec4) ImageSampleExplicitLod 1635 1636 Grad ConstOffset 1637 1637 735 + 1639: 7(f16vec4) Load 1604(texel) + 1640: 7(f16vec4) FAdd 1639 1638 + Store 1604(texel) 1640 + 1641: 357 Load 359(s2DRect) + 1642: 53(fvec2) Load 148(c2) + 1643: 53(fvec2) Load 1407(dPdxy2) + 1644: 7(f16vec4) ImageSampleExplicitLod 1641 1642 Grad ConstOffset 1643 1643 722 + 1645: 7(f16vec4) Load 1604(texel) 1646: 7(f16vec4) FAdd 1645 1644 - Store 1632(texel) 1646 - 1647: 143 Load 145(s2D) - 1648: 53(fvec2) Load 148(c2) - 1649: 53(fvec2) Load 1409(dPdxy2) - 1650: 53(fvec2) Load 1409(dPdxy2) - 1651: 7(f16vec4) ImageSampleExplicitLod 1647 1648 Grad ConstOffset 1649 1650 722 - 1652: 7(f16vec4) Load 1632(texel) - 1653: 7(f16vec4) FAdd 1652 1651 - Store 1632(texel) 1653 - 1654: 143 Load 145(s2D) - 1655:154(f16vec2) Load 156(f16c2) - 1656:154(f16vec2) Load 1417(f16dPdxy2) - 1657:154(f16vec2) Load 1417(f16dPdxy2) - 1658: 7(f16vec4) ImageSampleExplicitLod 1654 1655 Grad ConstOffset 1656 1657 722 - 1659: 7(f16vec4) Load 1632(texel) - 1660: 7(f16vec4) FAdd 1659 1658 - Store 1632(texel) 1660 - 1661: 163 Load 165(s3D) - 1662: 167(fvec3) Load 169(c3) - 1663: 167(fvec3) Load 1425(dPdxy3) - 1664: 167(fvec3) Load 1425(dPdxy3) - 1665: 7(f16vec4) ImageSampleExplicitLod 1661 1662 Grad ConstOffset 1663 1664 735 - 1666: 7(f16vec4) Load 1632(texel) - 1667: 7(f16vec4) FAdd 1666 1665 - Store 1632(texel) 1667 - 1668: 163 Load 165(s3D) - 1669:175(f16vec3) Load 177(f16c3) - 1670:175(f16vec3) Load 1433(f16dPdxy3) - 1671:175(f16vec3) Load 1433(f16dPdxy3) - 1672: 7(f16vec4) ImageSampleExplicitLod 1668 1669 Grad ConstOffset 1670 1671 735 - 1673: 7(f16vec4) Load 1632(texel) - 1674: 7(f16vec4) FAdd 1673 1672 - Store 1632(texel) 1674 - 1675: 357 Load 359(s2DRect) - 1676: 53(fvec2) Load 148(c2) - 1677: 53(fvec2) Load 1409(dPdxy2) - 1678: 53(fvec2) Load 1409(dPdxy2) - 1679: 7(f16vec4) ImageSampleExplicitLod 1675 1676 Grad ConstOffset 1677 1678 722 - 1680: 7(f16vec4) Load 1632(texel) - 1681: 7(f16vec4) FAdd 1680 1679 - Store 1632(texel) 1681 - 1682: 357 Load 359(s2DRect) - 1683:154(f16vec2) Load 156(f16c2) - 1684:154(f16vec2) Load 1417(f16dPdxy2) - 1685:154(f16vec2) Load 1417(f16dPdxy2) - 1686: 7(f16vec4) ImageSampleExplicitLod 1682 1683 Grad ConstOffset 1684 1685 722 - 1687: 7(f16vec4) Load 1632(texel) - 1688: 7(f16vec4) FAdd 1687 1686 - Store 1632(texel) 1688 - 1689: 371 Load 373(s2DRectShadow) + Store 1604(texel) 1646 + 1647: 357 Load 359(s2DRect) + 1648:154(f16vec2) Load 156(f16c2) + 1649:154(f16vec2) Load 1414(f16dPdxy2) + 1650: 7(f16vec4) ImageSampleExplicitLod 1647 1648 Grad ConstOffset 1649 1649 722 + 1651: 7(f16vec4) Load 1604(texel) + 1652: 7(f16vec4) FAdd 1651 1650 + Store 1604(texel) 1652 + 1653: 371 Load 373(s2DRectShadow) + 1654: 167(fvec3) Load 169(c3) + 1655: 53(fvec2) Load 1407(dPdxy2) + 1656: 52(float) CompositeExtract 1654 2 + 1657:6(float16_t) ImageSampleDrefExplicitLod 1653 1654 1656 Grad ConstOffset 1655 1655 722 + 1658: 208(ptr) AccessChain 1604(texel) 207 + 1659:6(float16_t) Load 1658 + 1660:6(float16_t) FAdd 1659 1657 + 1661: 208(ptr) AccessChain 1604(texel) 207 + Store 1661 1660 + 1662: 371 Load 373(s2DRectShadow) + 1663:154(f16vec2) Load 156(f16c2) + 1664: 52(float) Load 215(compare) + 1665:154(f16vec2) Load 1414(f16dPdxy2) + 1666:6(float16_t) ImageSampleDrefExplicitLod 1662 1663 1664 Grad ConstOffset 1665 1665 722 + 1667: 208(ptr) AccessChain 1604(texel) 207 + 1668:6(float16_t) Load 1667 + 1669:6(float16_t) FAdd 1668 1666 + 1670: 208(ptr) AccessChain 1604(texel) 207 + Store 1670 1669 + 1671: 199 Load 201(s1DShadow) + 1672: 167(fvec3) Load 169(c3) + 1673: 52(float) Load 1393(dPdxy1) + 1674: 52(float) CompositeExtract 1672 2 + 1675:6(float16_t) ImageSampleDrefExplicitLod 1671 1672 1674 Grad ConstOffset 1673 1673 709 + 1676: 208(ptr) AccessChain 1604(texel) 207 + 1677:6(float16_t) Load 1676 + 1678:6(float16_t) FAdd 1677 1675 + 1679: 208(ptr) AccessChain 1604(texel) 207 + Store 1679 1678 + 1680: 199 Load 201(s1DShadow) + 1681:154(f16vec2) Load 156(f16c2) + 1682: 52(float) Load 215(compare) + 1683:6(float16_t) Load 1400(f16dPdxy1) + 1684:6(float16_t) ImageSampleDrefExplicitLod 1680 1681 1682 Grad ConstOffset 1683 1683 709 + 1685: 208(ptr) AccessChain 1604(texel) 207 + 1686:6(float16_t) Load 1685 + 1687:6(float16_t) FAdd 1686 1684 + 1688: 208(ptr) AccessChain 1604(texel) 207 + Store 1688 1687 + 1689: 224 Load 226(s2DShadow) 1690: 167(fvec3) Load 169(c3) - 1691: 53(fvec2) Load 1409(dPdxy2) - 1692: 53(fvec2) Load 1409(dPdxy2) - 1693: 52(float) CompositeExtract 1690 2 - 1694:6(float16_t) ImageSampleDrefExplicitLod 1689 1690 1693 Grad ConstOffset 1691 1692 722 - 1695: 208(ptr) AccessChain 1632(texel) 207 - 1696:6(float16_t) Load 1695 - 1697:6(float16_t) FAdd 1696 1694 - 1698: 208(ptr) AccessChain 1632(texel) 207 - Store 1698 1697 - 1699: 371 Load 373(s2DRectShadow) - 1700:154(f16vec2) Load 156(f16c2) - 1701: 52(float) Load 215(compare) - 1702:154(f16vec2) Load 1417(f16dPdxy2) - 1703:154(f16vec2) Load 1417(f16dPdxy2) - 1704:6(float16_t) ImageSampleDrefExplicitLod 1699 1700 1701 Grad ConstOffset 1702 1703 722 - 1705: 208(ptr) AccessChain 1632(texel) 207 - 1706:6(float16_t) Load 1705 - 1707:6(float16_t) FAdd 1706 1704 - 1708: 208(ptr) AccessChain 1632(texel) 207 - Store 1708 1707 - 1709: 199 Load 201(s1DShadow) - 1710: 167(fvec3) Load 169(c3) - 1711: 52(float) Load 1393(dPdxy1) - 1712: 52(float) Load 1393(dPdxy1) - 1713: 52(float) CompositeExtract 1710 2 - 1714:6(float16_t) ImageSampleDrefExplicitLod 1709 1710 1713 Grad ConstOffset 1711 1712 709 - 1715: 208(ptr) AccessChain 1632(texel) 207 - 1716:6(float16_t) Load 1715 - 1717:6(float16_t) FAdd 1716 1714 - 1718: 208(ptr) AccessChain 1632(texel) 207 - Store 1718 1717 - 1719: 199 Load 201(s1DShadow) - 1720:154(f16vec2) Load 156(f16c2) - 1721: 52(float) Load 215(compare) - 1722:6(float16_t) Load 1401(f16dPdxy1) - 1723:6(float16_t) Load 1401(f16dPdxy1) - 1724:6(float16_t) ImageSampleDrefExplicitLod 1719 1720 1721 Grad ConstOffset 1722 1723 709 - 1725: 208(ptr) AccessChain 1632(texel) 207 - 1726:6(float16_t) Load 1725 - 1727:6(float16_t) FAdd 1726 1724 - 1728: 208(ptr) AccessChain 1632(texel) 207 - Store 1728 1727 - 1729: 224 Load 226(s2DShadow) - 1730: 167(fvec3) Load 169(c3) - 1731: 53(fvec2) Load 1409(dPdxy2) - 1732: 53(fvec2) Load 1409(dPdxy2) - 1733: 52(float) CompositeExtract 1730 2 - 1734:6(float16_t) ImageSampleDrefExplicitLod 1729 1730 1733 Grad ConstOffset 1731 1732 722 - 1735: 208(ptr) AccessChain 1632(texel) 207 - 1736:6(float16_t) Load 1735 - 1737:6(float16_t) FAdd 1736 1734 - 1738: 208(ptr) AccessChain 1632(texel) 207 - Store 1738 1737 - 1739: 224 Load 226(s2DShadow) - 1740:154(f16vec2) Load 156(f16c2) - 1741: 52(float) Load 215(compare) - 1742:154(f16vec2) Load 1417(f16dPdxy2) - 1743:154(f16vec2) Load 1417(f16dPdxy2) - 1744:6(float16_t) ImageSampleDrefExplicitLod 1739 1740 1741 Grad ConstOffset 1742 1743 722 - 1745: 208(ptr) AccessChain 1632(texel) 207 + 1691: 53(fvec2) Load 1407(dPdxy2) + 1692: 52(float) CompositeExtract 1690 2 + 1693:6(float16_t) ImageSampleDrefExplicitLod 1689 1690 1692 Grad ConstOffset 1691 1691 722 + 1694: 208(ptr) AccessChain 1604(texel) 207 + 1695:6(float16_t) Load 1694 + 1696:6(float16_t) FAdd 1695 1693 + 1697: 208(ptr) AccessChain 1604(texel) 207 + Store 1697 1696 + 1698: 224 Load 226(s2DShadow) + 1699:154(f16vec2) Load 156(f16c2) + 1700: 52(float) Load 215(compare) + 1701:154(f16vec2) Load 1414(f16dPdxy2) + 1702:6(float16_t) ImageSampleDrefExplicitLod 1698 1699 1700 Grad ConstOffset 1701 1701 722 + 1703: 208(ptr) AccessChain 1604(texel) 207 + 1704:6(float16_t) Load 1703 + 1705:6(float16_t) FAdd 1704 1702 + 1706: 208(ptr) AccessChain 1604(texel) 207 + Store 1706 1705 + 1707: 269 Load 271(s1DArray) + 1708: 53(fvec2) Load 148(c2) + 1709: 52(float) Load 1393(dPdxy1) + 1710: 7(f16vec4) ImageSampleExplicitLod 1707 1708 Grad ConstOffset 1709 1709 709 + 1711: 7(f16vec4) Load 1604(texel) + 1712: 7(f16vec4) FAdd 1711 1710 + Store 1604(texel) 1712 + 1713: 269 Load 271(s1DArray) + 1714:154(f16vec2) Load 156(f16c2) + 1715:6(float16_t) Load 1400(f16dPdxy1) + 1716: 7(f16vec4) ImageSampleExplicitLod 1713 1714 Grad ConstOffset 1715 1715 709 + 1717: 7(f16vec4) Load 1604(texel) + 1718: 7(f16vec4) FAdd 1717 1716 + Store 1604(texel) 1718 + 1719: 284 Load 286(s2DArray) + 1720: 167(fvec3) Load 169(c3) + 1721: 53(fvec2) Load 1407(dPdxy2) + 1722: 7(f16vec4) ImageSampleExplicitLod 1719 1720 Grad ConstOffset 1721 1721 722 + 1723: 7(f16vec4) Load 1604(texel) + 1724: 7(f16vec4) FAdd 1723 1722 + Store 1604(texel) 1724 + 1725: 284 Load 286(s2DArray) + 1726:175(f16vec3) Load 177(f16c3) + 1727:154(f16vec2) Load 1414(f16dPdxy2) + 1728: 7(f16vec4) ImageSampleExplicitLod 1725 1726 Grad ConstOffset 1727 1727 722 + 1729: 7(f16vec4) Load 1604(texel) + 1730: 7(f16vec4) FAdd 1729 1728 + Store 1604(texel) 1730 + 1731: 316 Load 318(s1DArrayShadow) + 1732: 167(fvec3) Load 169(c3) + 1733: 52(float) Load 1393(dPdxy1) + 1734: 52(float) CompositeExtract 1732 2 + 1735:6(float16_t) ImageSampleDrefExplicitLod 1731 1732 1734 Grad ConstOffset 1733 1733 709 + 1736: 208(ptr) AccessChain 1604(texel) 207 + 1737:6(float16_t) Load 1736 + 1738:6(float16_t) FAdd 1737 1735 + 1739: 208(ptr) AccessChain 1604(texel) 207 + Store 1739 1738 + 1740: 316 Load 318(s1DArrayShadow) + 1741:154(f16vec2) Load 156(f16c2) + 1742: 52(float) Load 215(compare) + 1743:6(float16_t) Load 1400(f16dPdxy1) + 1744:6(float16_t) ImageSampleDrefExplicitLod 1740 1741 1742 Grad ConstOffset 1743 1743 709 + 1745: 208(ptr) AccessChain 1604(texel) 207 1746:6(float16_t) Load 1745 1747:6(float16_t) FAdd 1746 1744 - 1748: 208(ptr) AccessChain 1632(texel) 207 + 1748: 208(ptr) AccessChain 1604(texel) 207 Store 1748 1747 - 1749: 269 Load 271(s1DArray) - 1750: 53(fvec2) Load 148(c2) - 1751: 52(float) Load 1393(dPdxy1) - 1752: 52(float) Load 1393(dPdxy1) - 1753: 7(f16vec4) ImageSampleExplicitLod 1749 1750 Grad ConstOffset 1751 1752 709 - 1754: 7(f16vec4) Load 1632(texel) - 1755: 7(f16vec4) FAdd 1754 1753 - Store 1632(texel) 1755 - 1756: 269 Load 271(s1DArray) - 1757:154(f16vec2) Load 156(f16c2) - 1758:6(float16_t) Load 1401(f16dPdxy1) - 1759:6(float16_t) Load 1401(f16dPdxy1) - 1760: 7(f16vec4) ImageSampleExplicitLod 1756 1757 Grad ConstOffset 1758 1759 709 - 1761: 7(f16vec4) Load 1632(texel) - 1762: 7(f16vec4) FAdd 1761 1760 - Store 1632(texel) 1762 - 1763: 284 Load 286(s2DArray) - 1764: 167(fvec3) Load 169(c3) - 1765: 53(fvec2) Load 1409(dPdxy2) - 1766: 53(fvec2) Load 1409(dPdxy2) - 1767: 7(f16vec4) ImageSampleExplicitLod 1763 1764 Grad ConstOffset 1765 1766 722 - 1768: 7(f16vec4) Load 1632(texel) - 1769: 7(f16vec4) FAdd 1768 1767 - Store 1632(texel) 1769 - 1770: 284 Load 286(s2DArray) - 1771:175(f16vec3) Load 177(f16c3) - 1772:154(f16vec2) Load 1417(f16dPdxy2) - 1773:154(f16vec2) Load 1417(f16dPdxy2) - 1774: 7(f16vec4) ImageSampleExplicitLod 1770 1771 Grad ConstOffset 1772 1773 722 - 1775: 7(f16vec4) Load 1632(texel) - 1776: 7(f16vec4) FAdd 1775 1774 - Store 1632(texel) 1776 - 1777: 316 Load 318(s1DArrayShadow) - 1778: 167(fvec3) Load 169(c3) - 1779: 52(float) Load 1393(dPdxy1) - 1780: 52(float) Load 1393(dPdxy1) - 1781: 52(float) CompositeExtract 1778 2 - 1782:6(float16_t) ImageSampleDrefExplicitLod 1777 1778 1781 Grad ConstOffset 1779 1780 709 - 1783: 208(ptr) AccessChain 1632(texel) 207 - 1784:6(float16_t) Load 1783 - 1785:6(float16_t) FAdd 1784 1782 - 1786: 208(ptr) AccessChain 1632(texel) 207 - Store 1786 1785 - 1787: 316 Load 318(s1DArrayShadow) - 1788:154(f16vec2) Load 156(f16c2) - 1789: 52(float) Load 215(compare) - 1790:6(float16_t) Load 1401(f16dPdxy1) - 1791:6(float16_t) Load 1401(f16dPdxy1) - 1792:6(float16_t) ImageSampleDrefExplicitLod 1787 1788 1789 Grad ConstOffset 1790 1791 709 - 1793: 208(ptr) AccessChain 1632(texel) 207 - 1794:6(float16_t) Load 1793 - 1795:6(float16_t) FAdd 1794 1792 - 1796: 208(ptr) AccessChain 1632(texel) 207 - Store 1796 1795 - 1797: 337 Load 339(s2DArrayShadow) - 1798: 249(fvec4) Load 251(c4) - 1799: 53(fvec2) Load 1409(dPdxy2) - 1800: 53(fvec2) Load 1409(dPdxy2) - 1801: 52(float) CompositeExtract 1798 3 - 1802:6(float16_t) ImageSampleDrefExplicitLod 1797 1798 1801 Grad ConstOffset 1799 1800 722 - 1803: 208(ptr) AccessChain 1632(texel) 207 - 1804:6(float16_t) Load 1803 - 1805:6(float16_t) FAdd 1804 1802 - 1806: 208(ptr) AccessChain 1632(texel) 207 - Store 1806 1805 - 1807: 337 Load 339(s2DArrayShadow) - 1808:175(f16vec3) Load 177(f16c3) - 1809: 52(float) Load 215(compare) - 1810:154(f16vec2) Load 1417(f16dPdxy2) - 1811:154(f16vec2) Load 1417(f16dPdxy2) - 1812:6(float16_t) ImageSampleDrefExplicitLod 1807 1808 1809 Grad ConstOffset 1810 1811 722 - 1813: 208(ptr) AccessChain 1632(texel) 207 - 1814:6(float16_t) Load 1813 - 1815:6(float16_t) FAdd 1814 1812 - 1816: 208(ptr) AccessChain 1632(texel) 207 - Store 1816 1815 - 1817: 7(f16vec4) Load 1632(texel) - ReturnValue 1817 + 1749: 337 Load 339(s2DArrayShadow) + 1750: 249(fvec4) Load 251(c4) + 1751: 53(fvec2) Load 1407(dPdxy2) + 1752: 52(float) CompositeExtract 1750 3 + 1753:6(float16_t) ImageSampleDrefExplicitLod 1749 1750 1752 Grad ConstOffset 1751 1751 722 + 1754: 208(ptr) AccessChain 1604(texel) 207 + 1755:6(float16_t) Load 1754 + 1756:6(float16_t) FAdd 1755 1753 + 1757: 208(ptr) AccessChain 1604(texel) 207 + Store 1757 1756 + 1758: 337 Load 339(s2DArrayShadow) + 1759:175(f16vec3) Load 177(f16c3) + 1760: 52(float) Load 215(compare) + 1761:154(f16vec2) Load 1414(f16dPdxy2) + 1762:6(float16_t) ImageSampleDrefExplicitLod 1758 1759 1760 Grad ConstOffset 1761 1761 722 + 1763: 208(ptr) AccessChain 1604(texel) 207 + 1764:6(float16_t) Load 1763 + 1765:6(float16_t) FAdd 1764 1762 + 1766: 208(ptr) AccessChain 1604(texel) 207 + Store 1766 1765 + 1767: 7(f16vec4) Load 1604(texel) + ReturnValue 1767 FunctionEnd 31(testTextureProjGrad(): 7(f16vec4) Function None 8 32: Label - 1820(texel): 64(ptr) Variable Function - Store 1820(texel) 121 - 1821: 123 Load 125(s1D) - 1822: 53(fvec2) Load 148(c2) - 1823: 52(float) Load 1393(dPdxy1) - 1824: 52(float) Load 1393(dPdxy1) - 1825: 7(f16vec4) ImageSampleProjExplicitLod 1821 1822 Grad 1823 1824 - 1826: 7(f16vec4) Load 1820(texel) - 1827: 7(f16vec4) FAdd 1826 1825 - Store 1820(texel) 1827 - 1828: 123 Load 125(s1D) - 1829:154(f16vec2) Load 156(f16c2) - 1830:6(float16_t) Load 1401(f16dPdxy1) - 1831:6(float16_t) Load 1401(f16dPdxy1) - 1832: 7(f16vec4) ImageSampleProjExplicitLod 1828 1829 Grad 1830 1831 - 1833: 7(f16vec4) Load 1820(texel) - 1834: 7(f16vec4) FAdd 1833 1832 - Store 1820(texel) 1834 - 1835: 123 Load 125(s1D) - 1836: 249(fvec4) Load 251(c4) - 1837: 52(float) Load 1393(dPdxy1) - 1838: 52(float) Load 1393(dPdxy1) - 1839: 52(float) CompositeExtract 1836 3 - 1840: 249(fvec4) CompositeInsert 1839 1836 1 - 1841: 7(f16vec4) ImageSampleProjExplicitLod 1835 1840 Grad 1837 1838 - 1842: 7(f16vec4) Load 1820(texel) - 1843: 7(f16vec4) FAdd 1842 1841 - Store 1820(texel) 1843 - 1844: 123 Load 125(s1D) - 1845: 7(f16vec4) Load 309(f16c4) - 1846:6(float16_t) Load 1401(f16dPdxy1) - 1847:6(float16_t) Load 1401(f16dPdxy1) - 1848:6(float16_t) CompositeExtract 1845 3 - 1849: 7(f16vec4) CompositeInsert 1848 1845 1 - 1850: 7(f16vec4) ImageSampleProjExplicitLod 1844 1849 Grad 1846 1847 - 1851: 7(f16vec4) Load 1820(texel) - 1852: 7(f16vec4) FAdd 1851 1850 - Store 1820(texel) 1852 - 1853: 143 Load 145(s2D) - 1854: 167(fvec3) Load 169(c3) - 1855: 53(fvec2) Load 1409(dPdxy2) - 1856: 53(fvec2) Load 1409(dPdxy2) - 1857: 7(f16vec4) ImageSampleProjExplicitLod 1853 1854 Grad 1855 1856 - 1858: 7(f16vec4) Load 1820(texel) - 1859: 7(f16vec4) FAdd 1858 1857 - Store 1820(texel) 1859 - 1860: 143 Load 145(s2D) - 1861:175(f16vec3) Load 177(f16c3) - 1862:154(f16vec2) Load 1417(f16dPdxy2) - 1863:154(f16vec2) Load 1417(f16dPdxy2) - 1864: 7(f16vec4) ImageSampleProjExplicitLod 1860 1861 Grad 1862 1863 - 1865: 7(f16vec4) Load 1820(texel) + 1770(texel): 64(ptr) Variable Function + Store 1770(texel) 121 + 1771: 123 Load 125(s1D) + 1772: 53(fvec2) Load 148(c2) + 1773: 52(float) Load 1393(dPdxy1) + 1774: 7(f16vec4) ImageSampleProjExplicitLod 1771 1772 Grad 1773 1773 + 1775: 7(f16vec4) Load 1770(texel) + 1776: 7(f16vec4) FAdd 1775 1774 + Store 1770(texel) 1776 + 1777: 123 Load 125(s1D) + 1778:154(f16vec2) Load 156(f16c2) + 1779:6(float16_t) Load 1400(f16dPdxy1) + 1780: 7(f16vec4) ImageSampleProjExplicitLod 1777 1778 Grad 1779 1779 + 1781: 7(f16vec4) Load 1770(texel) + 1782: 7(f16vec4) FAdd 1781 1780 + Store 1770(texel) 1782 + 1783: 123 Load 125(s1D) + 1784: 249(fvec4) Load 251(c4) + 1785: 52(float) Load 1393(dPdxy1) + 1786: 52(float) CompositeExtract 1784 3 + 1787: 249(fvec4) CompositeInsert 1786 1784 1 + 1788: 7(f16vec4) ImageSampleProjExplicitLod 1783 1787 Grad 1785 1785 + 1789: 7(f16vec4) Load 1770(texel) + 1790: 7(f16vec4) FAdd 1789 1788 + Store 1770(texel) 1790 + 1791: 123 Load 125(s1D) + 1792: 7(f16vec4) Load 309(f16c4) + 1793:6(float16_t) Load 1400(f16dPdxy1) + 1794:6(float16_t) CompositeExtract 1792 3 + 1795: 7(f16vec4) CompositeInsert 1794 1792 1 + 1796: 7(f16vec4) ImageSampleProjExplicitLod 1791 1795 Grad 1793 1793 + 1797: 7(f16vec4) Load 1770(texel) + 1798: 7(f16vec4) FAdd 1797 1796 + Store 1770(texel) 1798 + 1799: 143 Load 145(s2D) + 1800: 167(fvec3) Load 169(c3) + 1801: 53(fvec2) Load 1407(dPdxy2) + 1802: 7(f16vec4) ImageSampleProjExplicitLod 1799 1800 Grad 1801 1801 + 1803: 7(f16vec4) Load 1770(texel) + 1804: 7(f16vec4) FAdd 1803 1802 + Store 1770(texel) 1804 + 1805: 143 Load 145(s2D) + 1806:175(f16vec3) Load 177(f16c3) + 1807:154(f16vec2) Load 1414(f16dPdxy2) + 1808: 7(f16vec4) ImageSampleProjExplicitLod 1805 1806 Grad 1807 1807 + 1809: 7(f16vec4) Load 1770(texel) + 1810: 7(f16vec4) FAdd 1809 1808 + Store 1770(texel) 1810 + 1811: 143 Load 145(s2D) + 1812: 249(fvec4) Load 251(c4) + 1813: 53(fvec2) Load 1407(dPdxy2) + 1814: 52(float) CompositeExtract 1812 3 + 1815: 249(fvec4) CompositeInsert 1814 1812 2 + 1816: 7(f16vec4) ImageSampleProjExplicitLod 1811 1815 Grad 1813 1813 + 1817: 7(f16vec4) Load 1770(texel) + 1818: 7(f16vec4) FAdd 1817 1816 + Store 1770(texel) 1818 + 1819: 143 Load 145(s2D) + 1820: 7(f16vec4) Load 309(f16c4) + 1821:154(f16vec2) Load 1414(f16dPdxy2) + 1822:6(float16_t) CompositeExtract 1820 3 + 1823: 7(f16vec4) CompositeInsert 1822 1820 2 + 1824: 7(f16vec4) ImageSampleProjExplicitLod 1819 1823 Grad 1821 1821 + 1825: 7(f16vec4) Load 1770(texel) + 1826: 7(f16vec4) FAdd 1825 1824 + Store 1770(texel) 1826 + 1827: 163 Load 165(s3D) + 1828: 249(fvec4) Load 251(c4) + 1829: 167(fvec3) Load 1421(dPdxy3) + 1830: 7(f16vec4) ImageSampleProjExplicitLod 1827 1828 Grad 1829 1829 + 1831: 7(f16vec4) Load 1770(texel) + 1832: 7(f16vec4) FAdd 1831 1830 + Store 1770(texel) 1832 + 1833: 163 Load 165(s3D) + 1834: 7(f16vec4) Load 309(f16c4) + 1835:175(f16vec3) Load 1428(f16dPdxy3) + 1836: 7(f16vec4) ImageSampleProjExplicitLod 1833 1834 Grad 1835 1835 + 1837: 7(f16vec4) Load 1770(texel) + 1838: 7(f16vec4) FAdd 1837 1836 + Store 1770(texel) 1838 + 1839: 357 Load 359(s2DRect) + 1840: 167(fvec3) Load 169(c3) + 1841: 53(fvec2) Load 1407(dPdxy2) + 1842: 7(f16vec4) ImageSampleProjExplicitLod 1839 1840 Grad 1841 1841 + 1843: 7(f16vec4) Load 1770(texel) + 1844: 7(f16vec4) FAdd 1843 1842 + Store 1770(texel) 1844 + 1845: 357 Load 359(s2DRect) + 1846:175(f16vec3) Load 177(f16c3) + 1847:154(f16vec2) Load 1414(f16dPdxy2) + 1848: 7(f16vec4) ImageSampleProjExplicitLod 1845 1846 Grad 1847 1847 + 1849: 7(f16vec4) Load 1770(texel) + 1850: 7(f16vec4) FAdd 1849 1848 + Store 1770(texel) 1850 + 1851: 357 Load 359(s2DRect) + 1852: 249(fvec4) Load 251(c4) + 1853: 53(fvec2) Load 1407(dPdxy2) + 1854: 52(float) CompositeExtract 1852 3 + 1855: 249(fvec4) CompositeInsert 1854 1852 2 + 1856: 7(f16vec4) ImageSampleProjExplicitLod 1851 1855 Grad 1853 1853 + 1857: 7(f16vec4) Load 1770(texel) + 1858: 7(f16vec4) FAdd 1857 1856 + Store 1770(texel) 1858 + 1859: 357 Load 359(s2DRect) + 1860: 7(f16vec4) Load 309(f16c4) + 1861:154(f16vec2) Load 1414(f16dPdxy2) + 1862:6(float16_t) CompositeExtract 1860 3 + 1863: 7(f16vec4) CompositeInsert 1862 1860 2 + 1864: 7(f16vec4) ImageSampleProjExplicitLod 1859 1863 Grad 1861 1861 + 1865: 7(f16vec4) Load 1770(texel) 1866: 7(f16vec4) FAdd 1865 1864 - Store 1820(texel) 1866 - 1867: 143 Load 145(s2D) + Store 1770(texel) 1866 + 1867: 371 Load 373(s2DRectShadow) 1868: 249(fvec4) Load 251(c4) - 1869: 53(fvec2) Load 1409(dPdxy2) - 1870: 53(fvec2) Load 1409(dPdxy2) + 1869: 53(fvec2) Load 1407(dPdxy2) + 1870: 52(float) CompositeExtract 1868 2 1871: 52(float) CompositeExtract 1868 3 1872: 249(fvec4) CompositeInsert 1871 1868 2 - 1873: 7(f16vec4) ImageSampleProjExplicitLod 1867 1872 Grad 1869 1870 - 1874: 7(f16vec4) Load 1820(texel) - 1875: 7(f16vec4) FAdd 1874 1873 - Store 1820(texel) 1875 - 1876: 143 Load 145(s2D) - 1877: 7(f16vec4) Load 309(f16c4) - 1878:154(f16vec2) Load 1417(f16dPdxy2) - 1879:154(f16vec2) Load 1417(f16dPdxy2) - 1880:6(float16_t) CompositeExtract 1877 3 - 1881: 7(f16vec4) CompositeInsert 1880 1877 2 - 1882: 7(f16vec4) ImageSampleProjExplicitLod 1876 1881 Grad 1878 1879 - 1883: 7(f16vec4) Load 1820(texel) - 1884: 7(f16vec4) FAdd 1883 1882 - Store 1820(texel) 1884 - 1885: 163 Load 165(s3D) - 1886: 249(fvec4) Load 251(c4) - 1887: 167(fvec3) Load 1425(dPdxy3) - 1888: 167(fvec3) Load 1425(dPdxy3) - 1889: 7(f16vec4) ImageSampleProjExplicitLod 1885 1886 Grad 1887 1888 - 1890: 7(f16vec4) Load 1820(texel) - 1891: 7(f16vec4) FAdd 1890 1889 - Store 1820(texel) 1891 - 1892: 163 Load 165(s3D) - 1893: 7(f16vec4) Load 309(f16c4) - 1894:175(f16vec3) Load 1433(f16dPdxy3) - 1895:175(f16vec3) Load 1433(f16dPdxy3) - 1896: 7(f16vec4) ImageSampleProjExplicitLod 1892 1893 Grad 1894 1895 - 1897: 7(f16vec4) Load 1820(texel) - 1898: 7(f16vec4) FAdd 1897 1896 - Store 1820(texel) 1898 - 1899: 357 Load 359(s2DRect) - 1900: 167(fvec3) Load 169(c3) - 1901: 53(fvec2) Load 1409(dPdxy2) - 1902: 53(fvec2) Load 1409(dPdxy2) - 1903: 7(f16vec4) ImageSampleProjExplicitLod 1899 1900 Grad 1901 1902 - 1904: 7(f16vec4) Load 1820(texel) - 1905: 7(f16vec4) FAdd 1904 1903 - Store 1820(texel) 1905 - 1906: 357 Load 359(s2DRect) - 1907:175(f16vec3) Load 177(f16c3) - 1908:154(f16vec2) Load 1417(f16dPdxy2) - 1909:154(f16vec2) Load 1417(f16dPdxy2) - 1910: 7(f16vec4) ImageSampleProjExplicitLod 1906 1907 Grad 1908 1909 - 1911: 7(f16vec4) Load 1820(texel) - 1912: 7(f16vec4) FAdd 1911 1910 - Store 1820(texel) 1912 - 1913: 357 Load 359(s2DRect) - 1914: 249(fvec4) Load 251(c4) - 1915: 53(fvec2) Load 1409(dPdxy2) - 1916: 53(fvec2) Load 1409(dPdxy2) - 1917: 52(float) CompositeExtract 1914 3 - 1918: 249(fvec4) CompositeInsert 1917 1914 2 - 1919: 7(f16vec4) ImageSampleProjExplicitLod 1913 1918 Grad 1915 1916 - 1920: 7(f16vec4) Load 1820(texel) - 1921: 7(f16vec4) FAdd 1920 1919 - Store 1820(texel) 1921 - 1922: 357 Load 359(s2DRect) - 1923: 7(f16vec4) Load 309(f16c4) - 1924:154(f16vec2) Load 1417(f16dPdxy2) - 1925:154(f16vec2) Load 1417(f16dPdxy2) - 1926:6(float16_t) CompositeExtract 1923 3 - 1927: 7(f16vec4) CompositeInsert 1926 1923 2 - 1928: 7(f16vec4) ImageSampleProjExplicitLod 1922 1927 Grad 1924 1925 - 1929: 7(f16vec4) Load 1820(texel) - 1930: 7(f16vec4) FAdd 1929 1928 - Store 1820(texel) 1930 - 1931: 371 Load 373(s2DRectShadow) - 1932: 249(fvec4) Load 251(c4) - 1933: 53(fvec2) Load 1409(dPdxy2) - 1934: 53(fvec2) Load 1409(dPdxy2) - 1935: 52(float) CompositeExtract 1932 2 - 1936: 52(float) CompositeExtract 1932 3 - 1937: 249(fvec4) CompositeInsert 1936 1932 2 - 1938:6(float16_t) ImageSampleProjDrefExplicitLod 1931 1937 1935 Grad 1933 1934 - 1939: 208(ptr) AccessChain 1820(texel) 207 - 1940:6(float16_t) Load 1939 - 1941:6(float16_t) FAdd 1940 1938 - 1942: 208(ptr) AccessChain 1820(texel) 207 - Store 1942 1941 - 1943: 371 Load 373(s2DRectShadow) - 1944:175(f16vec3) Load 177(f16c3) - 1945: 52(float) Load 215(compare) - 1946:154(f16vec2) Load 1417(f16dPdxy2) - 1947:154(f16vec2) Load 1417(f16dPdxy2) - 1948:6(float16_t) ImageSampleProjDrefExplicitLod 1943 1944 1945 Grad 1946 1947 - 1949: 208(ptr) AccessChain 1820(texel) 207 - 1950:6(float16_t) Load 1949 - 1951:6(float16_t) FAdd 1950 1948 - 1952: 208(ptr) AccessChain 1820(texel) 207 - Store 1952 1951 - 1953: 199 Load 201(s1DShadow) - 1954: 249(fvec4) Load 251(c4) - 1955: 52(float) Load 1393(dPdxy1) - 1956: 52(float) Load 1393(dPdxy1) - 1957: 52(float) CompositeExtract 1954 2 - 1958: 52(float) CompositeExtract 1954 3 - 1959: 249(fvec4) CompositeInsert 1958 1954 1 - 1960:6(float16_t) ImageSampleProjDrefExplicitLod 1953 1959 1957 Grad 1955 1956 - 1961: 208(ptr) AccessChain 1820(texel) 207 - 1962:6(float16_t) Load 1961 - 1963:6(float16_t) FAdd 1962 1960 - 1964: 208(ptr) AccessChain 1820(texel) 207 - Store 1964 1963 - 1965: 199 Load 201(s1DShadow) - 1966:175(f16vec3) Load 177(f16c3) - 1967: 52(float) Load 215(compare) - 1968:6(float16_t) Load 1401(f16dPdxy1) - 1969:6(float16_t) Load 1401(f16dPdxy1) - 1970:6(float16_t) CompositeExtract 1966 2 - 1971:175(f16vec3) CompositeInsert 1970 1966 1 - 1972:6(float16_t) ImageSampleProjDrefExplicitLod 1965 1971 1967 Grad 1968 1969 - 1973: 208(ptr) AccessChain 1820(texel) 207 - 1974:6(float16_t) Load 1973 - 1975:6(float16_t) FAdd 1974 1972 - 1976: 208(ptr) AccessChain 1820(texel) 207 - Store 1976 1975 - 1977: 224 Load 226(s2DShadow) - 1978: 249(fvec4) Load 251(c4) - 1979: 53(fvec2) Load 1409(dPdxy2) - 1980: 53(fvec2) Load 1409(dPdxy2) - 1981: 52(float) CompositeExtract 1978 2 - 1982: 52(float) CompositeExtract 1978 3 - 1983: 249(fvec4) CompositeInsert 1982 1978 2 - 1984:6(float16_t) ImageSampleProjDrefExplicitLod 1977 1983 1981 Grad 1979 1980 - 1985: 208(ptr) AccessChain 1820(texel) 207 - 1986:6(float16_t) Load 1985 - 1987:6(float16_t) FAdd 1986 1984 - 1988: 208(ptr) AccessChain 1820(texel) 207 - Store 1988 1987 - 1989: 224 Load 226(s2DShadow) - 1990:175(f16vec3) Load 177(f16c3) - 1991: 52(float) Load 215(compare) - 1992:154(f16vec2) Load 1417(f16dPdxy2) - 1993:154(f16vec2) Load 1417(f16dPdxy2) - 1994:6(float16_t) ImageSampleProjDrefExplicitLod 1989 1990 1991 Grad 1992 1993 - 1995: 208(ptr) AccessChain 1820(texel) 207 - 1996:6(float16_t) Load 1995 - 1997:6(float16_t) FAdd 1996 1994 - 1998: 208(ptr) AccessChain 1820(texel) 207 - Store 1998 1997 - 1999: 7(f16vec4) Load 1820(texel) - ReturnValue 1999 + 1873:6(float16_t) ImageSampleProjDrefExplicitLod 1867 1872 1870 Grad 1869 1869 + 1874: 208(ptr) AccessChain 1770(texel) 207 + 1875:6(float16_t) Load 1874 + 1876:6(float16_t) FAdd 1875 1873 + 1877: 208(ptr) AccessChain 1770(texel) 207 + Store 1877 1876 + 1878: 371 Load 373(s2DRectShadow) + 1879:175(f16vec3) Load 177(f16c3) + 1880: 52(float) Load 215(compare) + 1881:154(f16vec2) Load 1414(f16dPdxy2) + 1882:6(float16_t) ImageSampleProjDrefExplicitLod 1878 1879 1880 Grad 1881 1881 + 1883: 208(ptr) AccessChain 1770(texel) 207 + 1884:6(float16_t) Load 1883 + 1885:6(float16_t) FAdd 1884 1882 + 1886: 208(ptr) AccessChain 1770(texel) 207 + Store 1886 1885 + 1887: 199 Load 201(s1DShadow) + 1888: 249(fvec4) Load 251(c4) + 1889: 52(float) Load 1393(dPdxy1) + 1890: 52(float) CompositeExtract 1888 2 + 1891: 52(float) CompositeExtract 1888 3 + 1892: 249(fvec4) CompositeInsert 1891 1888 1 + 1893:6(float16_t) ImageSampleProjDrefExplicitLod 1887 1892 1890 Grad 1889 1889 + 1894: 208(ptr) AccessChain 1770(texel) 207 + 1895:6(float16_t) Load 1894 + 1896:6(float16_t) FAdd 1895 1893 + 1897: 208(ptr) AccessChain 1770(texel) 207 + Store 1897 1896 + 1898: 199 Load 201(s1DShadow) + 1899:175(f16vec3) Load 177(f16c3) + 1900: 52(float) Load 215(compare) + 1901:6(float16_t) Load 1400(f16dPdxy1) + 1902:6(float16_t) CompositeExtract 1899 2 + 1903:175(f16vec3) CompositeInsert 1902 1899 1 + 1904:6(float16_t) ImageSampleProjDrefExplicitLod 1898 1903 1900 Grad 1901 1901 + 1905: 208(ptr) AccessChain 1770(texel) 207 + 1906:6(float16_t) Load 1905 + 1907:6(float16_t) FAdd 1906 1904 + 1908: 208(ptr) AccessChain 1770(texel) 207 + Store 1908 1907 + 1909: 224 Load 226(s2DShadow) + 1910: 249(fvec4) Load 251(c4) + 1911: 53(fvec2) Load 1407(dPdxy2) + 1912: 52(float) CompositeExtract 1910 2 + 1913: 52(float) CompositeExtract 1910 3 + 1914: 249(fvec4) CompositeInsert 1913 1910 2 + 1915:6(float16_t) ImageSampleProjDrefExplicitLod 1909 1914 1912 Grad 1911 1911 + 1916: 208(ptr) AccessChain 1770(texel) 207 + 1917:6(float16_t) Load 1916 + 1918:6(float16_t) FAdd 1917 1915 + 1919: 208(ptr) AccessChain 1770(texel) 207 + Store 1919 1918 + 1920: 224 Load 226(s2DShadow) + 1921:175(f16vec3) Load 177(f16c3) + 1922: 52(float) Load 215(compare) + 1923:154(f16vec2) Load 1414(f16dPdxy2) + 1924:6(float16_t) ImageSampleProjDrefExplicitLod 1920 1921 1922 Grad 1923 1923 + 1925: 208(ptr) AccessChain 1770(texel) 207 + 1926:6(float16_t) Load 1925 + 1927:6(float16_t) FAdd 1926 1924 + 1928: 208(ptr) AccessChain 1770(texel) 207 + Store 1928 1927 + 1929: 7(f16vec4) Load 1770(texel) + ReturnValue 1929 FunctionEnd 33(testTextureProjGradoffset(): 7(f16vec4) Function None 8 34: Label - 2002(texel): 64(ptr) Variable Function - Store 2002(texel) 121 - 2003: 123 Load 125(s1D) - 2004: 53(fvec2) Load 148(c2) - 2005: 52(float) Load 1393(dPdxy1) - 2006: 52(float) Load 1393(dPdxy1) - 2007: 7(f16vec4) ImageSampleProjExplicitLod 2003 2004 Grad ConstOffset 2005 2006 709 - 2008: 7(f16vec4) Load 2002(texel) - 2009: 7(f16vec4) FAdd 2008 2007 - Store 2002(texel) 2009 - 2010: 123 Load 125(s1D) - 2011:154(f16vec2) Load 156(f16c2) - 2012:6(float16_t) Load 1401(f16dPdxy1) - 2013:6(float16_t) Load 1401(f16dPdxy1) - 2014: 7(f16vec4) ImageSampleProjExplicitLod 2010 2011 Grad ConstOffset 2012 2013 709 - 2015: 7(f16vec4) Load 2002(texel) + 1932(texel): 64(ptr) Variable Function + Store 1932(texel) 121 + 1933: 123 Load 125(s1D) + 1934: 53(fvec2) Load 148(c2) + 1935: 52(float) Load 1393(dPdxy1) + 1936: 7(f16vec4) ImageSampleProjExplicitLod 1933 1934 Grad ConstOffset 1935 1935 709 + 1937: 7(f16vec4) Load 1932(texel) + 1938: 7(f16vec4) FAdd 1937 1936 + Store 1932(texel) 1938 + 1939: 123 Load 125(s1D) + 1940:154(f16vec2) Load 156(f16c2) + 1941:6(float16_t) Load 1400(f16dPdxy1) + 1942: 7(f16vec4) ImageSampleProjExplicitLod 1939 1940 Grad ConstOffset 1941 1941 709 + 1943: 7(f16vec4) Load 1932(texel) + 1944: 7(f16vec4) FAdd 1943 1942 + Store 1932(texel) 1944 + 1945: 123 Load 125(s1D) + 1946: 249(fvec4) Load 251(c4) + 1947: 52(float) Load 1393(dPdxy1) + 1948: 52(float) CompositeExtract 1946 3 + 1949: 249(fvec4) CompositeInsert 1948 1946 1 + 1950: 7(f16vec4) ImageSampleProjExplicitLod 1945 1949 Grad ConstOffset 1947 1947 709 + 1951: 7(f16vec4) Load 1932(texel) + 1952: 7(f16vec4) FAdd 1951 1950 + Store 1932(texel) 1952 + 1953: 123 Load 125(s1D) + 1954: 7(f16vec4) Load 309(f16c4) + 1955:6(float16_t) Load 1400(f16dPdxy1) + 1956:6(float16_t) CompositeExtract 1954 3 + 1957: 7(f16vec4) CompositeInsert 1956 1954 1 + 1958: 7(f16vec4) ImageSampleProjExplicitLod 1953 1957 Grad ConstOffset 1955 1955 709 + 1959: 7(f16vec4) Load 1932(texel) + 1960: 7(f16vec4) FAdd 1959 1958 + Store 1932(texel) 1960 + 1961: 143 Load 145(s2D) + 1962: 167(fvec3) Load 169(c3) + 1963: 53(fvec2) Load 1407(dPdxy2) + 1964: 7(f16vec4) ImageSampleProjExplicitLod 1961 1962 Grad ConstOffset 1963 1963 722 + 1965: 7(f16vec4) Load 1932(texel) + 1966: 7(f16vec4) FAdd 1965 1964 + Store 1932(texel) 1966 + 1967: 143 Load 145(s2D) + 1968:175(f16vec3) Load 177(f16c3) + 1969:154(f16vec2) Load 1414(f16dPdxy2) + 1970: 7(f16vec4) ImageSampleProjExplicitLod 1967 1968 Grad ConstOffset 1969 1969 722 + 1971: 7(f16vec4) Load 1932(texel) + 1972: 7(f16vec4) FAdd 1971 1970 + Store 1932(texel) 1972 + 1973: 143 Load 145(s2D) + 1974: 249(fvec4) Load 251(c4) + 1975: 53(fvec2) Load 1407(dPdxy2) + 1976: 52(float) CompositeExtract 1974 3 + 1977: 249(fvec4) CompositeInsert 1976 1974 2 + 1978: 7(f16vec4) ImageSampleProjExplicitLod 1973 1977 Grad ConstOffset 1975 1975 722 + 1979: 7(f16vec4) Load 1932(texel) + 1980: 7(f16vec4) FAdd 1979 1978 + Store 1932(texel) 1980 + 1981: 143 Load 145(s2D) + 1982: 7(f16vec4) Load 309(f16c4) + 1983:154(f16vec2) Load 1414(f16dPdxy2) + 1984:6(float16_t) CompositeExtract 1982 3 + 1985: 7(f16vec4) CompositeInsert 1984 1982 2 + 1986: 7(f16vec4) ImageSampleProjExplicitLod 1981 1985 Grad ConstOffset 1983 1983 722 + 1987: 7(f16vec4) Load 1932(texel) + 1988: 7(f16vec4) FAdd 1987 1986 + Store 1932(texel) 1988 + 1989: 357 Load 359(s2DRect) + 1990: 167(fvec3) Load 169(c3) + 1991: 53(fvec2) Load 1407(dPdxy2) + 1992: 7(f16vec4) ImageSampleProjExplicitLod 1989 1990 Grad ConstOffset 1991 1991 722 + 1993: 7(f16vec4) Load 1932(texel) + 1994: 7(f16vec4) FAdd 1993 1992 + Store 1932(texel) 1994 + 1995: 357 Load 359(s2DRect) + 1996:175(f16vec3) Load 177(f16c3) + 1997:154(f16vec2) Load 1414(f16dPdxy2) + 1998: 7(f16vec4) ImageSampleProjExplicitLod 1995 1996 Grad ConstOffset 1997 1997 722 + 1999: 7(f16vec4) Load 1932(texel) + 2000: 7(f16vec4) FAdd 1999 1998 + Store 1932(texel) 2000 + 2001: 357 Load 359(s2DRect) + 2002: 249(fvec4) Load 251(c4) + 2003: 53(fvec2) Load 1407(dPdxy2) + 2004: 52(float) CompositeExtract 2002 3 + 2005: 249(fvec4) CompositeInsert 2004 2002 2 + 2006: 7(f16vec4) ImageSampleProjExplicitLod 2001 2005 Grad ConstOffset 2003 2003 722 + 2007: 7(f16vec4) Load 1932(texel) + 2008: 7(f16vec4) FAdd 2007 2006 + Store 1932(texel) 2008 + 2009: 357 Load 359(s2DRect) + 2010: 7(f16vec4) Load 309(f16c4) + 2011:154(f16vec2) Load 1414(f16dPdxy2) + 2012:6(float16_t) CompositeExtract 2010 3 + 2013: 7(f16vec4) CompositeInsert 2012 2010 2 + 2014: 7(f16vec4) ImageSampleProjExplicitLod 2009 2013 Grad ConstOffset 2011 2011 722 + 2015: 7(f16vec4) Load 1932(texel) 2016: 7(f16vec4) FAdd 2015 2014 - Store 2002(texel) 2016 - 2017: 123 Load 125(s1D) + Store 1932(texel) 2016 + 2017: 371 Load 373(s2DRectShadow) 2018: 249(fvec4) Load 251(c4) - 2019: 52(float) Load 1393(dPdxy1) - 2020: 52(float) Load 1393(dPdxy1) + 2019: 53(fvec2) Load 1407(dPdxy2) + 2020: 52(float) CompositeExtract 2018 2 2021: 52(float) CompositeExtract 2018 3 - 2022: 249(fvec4) CompositeInsert 2021 2018 1 - 2023: 7(f16vec4) ImageSampleProjExplicitLod 2017 2022 Grad ConstOffset 2019 2020 709 - 2024: 7(f16vec4) Load 2002(texel) - 2025: 7(f16vec4) FAdd 2024 2023 - Store 2002(texel) 2025 - 2026: 123 Load 125(s1D) - 2027: 7(f16vec4) Load 309(f16c4) - 2028:6(float16_t) Load 1401(f16dPdxy1) - 2029:6(float16_t) Load 1401(f16dPdxy1) - 2030:6(float16_t) CompositeExtract 2027 3 - 2031: 7(f16vec4) CompositeInsert 2030 2027 1 - 2032: 7(f16vec4) ImageSampleProjExplicitLod 2026 2031 Grad ConstOffset 2028 2029 709 - 2033: 7(f16vec4) Load 2002(texel) - 2034: 7(f16vec4) FAdd 2033 2032 - Store 2002(texel) 2034 - 2035: 143 Load 145(s2D) - 2036: 167(fvec3) Load 169(c3) - 2037: 53(fvec2) Load 1409(dPdxy2) - 2038: 53(fvec2) Load 1409(dPdxy2) - 2039: 7(f16vec4) ImageSampleProjExplicitLod 2035 2036 Grad ConstOffset 2037 2038 722 - 2040: 7(f16vec4) Load 2002(texel) - 2041: 7(f16vec4) FAdd 2040 2039 - Store 2002(texel) 2041 - 2042: 143 Load 145(s2D) - 2043:175(f16vec3) Load 177(f16c3) - 2044:154(f16vec2) Load 1417(f16dPdxy2) - 2045:154(f16vec2) Load 1417(f16dPdxy2) - 2046: 7(f16vec4) ImageSampleProjExplicitLod 2042 2043 Grad ConstOffset 2044 2045 722 - 2047: 7(f16vec4) Load 2002(texel) + 2022: 249(fvec4) CompositeInsert 2021 2018 2 + 2023:6(float16_t) ImageSampleProjDrefExplicitLod 2017 2022 2020 Grad ConstOffset 2019 2019 722 + 2024: 208(ptr) AccessChain 1932(texel) 207 + 2025:6(float16_t) Load 2024 + 2026:6(float16_t) FAdd 2025 2023 + 2027: 208(ptr) AccessChain 1932(texel) 207 + Store 2027 2026 + 2028: 371 Load 373(s2DRectShadow) + 2029:175(f16vec3) Load 177(f16c3) + 2030: 52(float) Load 215(compare) + 2031:154(f16vec2) Load 1414(f16dPdxy2) + 2032:6(float16_t) ImageSampleProjDrefExplicitLod 2028 2029 2030 Grad ConstOffset 2031 2031 722 + 2033: 208(ptr) AccessChain 1932(texel) 207 + 2034:6(float16_t) Load 2033 + 2035:6(float16_t) FAdd 2034 2032 + 2036: 208(ptr) AccessChain 1932(texel) 207 + Store 2036 2035 + 2037: 163 Load 165(s3D) + 2038: 249(fvec4) Load 251(c4) + 2039: 167(fvec3) Load 1421(dPdxy3) + 2040: 7(f16vec4) ImageSampleProjExplicitLod 2037 2038 Grad ConstOffset 2039 2039 735 + 2041: 7(f16vec4) Load 1932(texel) + 2042: 7(f16vec4) FAdd 2041 2040 + Store 1932(texel) 2042 + 2043: 163 Load 165(s3D) + 2044: 7(f16vec4) Load 309(f16c4) + 2045:175(f16vec3) Load 1428(f16dPdxy3) + 2046: 7(f16vec4) ImageSampleProjExplicitLod 2043 2044 Grad ConstOffset 2045 2045 735 + 2047: 7(f16vec4) Load 1932(texel) 2048: 7(f16vec4) FAdd 2047 2046 - Store 2002(texel) 2048 - 2049: 143 Load 145(s2D) + Store 1932(texel) 2048 + 2049: 199 Load 201(s1DShadow) 2050: 249(fvec4) Load 251(c4) - 2051: 53(fvec2) Load 1409(dPdxy2) - 2052: 53(fvec2) Load 1409(dPdxy2) + 2051: 52(float) Load 1393(dPdxy1) + 2052: 52(float) CompositeExtract 2050 2 2053: 52(float) CompositeExtract 2050 3 - 2054: 249(fvec4) CompositeInsert 2053 2050 2 - 2055: 7(f16vec4) ImageSampleProjExplicitLod 2049 2054 Grad ConstOffset 2051 2052 722 - 2056: 7(f16vec4) Load 2002(texel) - 2057: 7(f16vec4) FAdd 2056 2055 - Store 2002(texel) 2057 - 2058: 143 Load 145(s2D) - 2059: 7(f16vec4) Load 309(f16c4) - 2060:154(f16vec2) Load 1417(f16dPdxy2) - 2061:154(f16vec2) Load 1417(f16dPdxy2) - 2062:6(float16_t) CompositeExtract 2059 3 - 2063: 7(f16vec4) CompositeInsert 2062 2059 2 - 2064: 7(f16vec4) ImageSampleProjExplicitLod 2058 2063 Grad ConstOffset 2060 2061 722 - 2065: 7(f16vec4) Load 2002(texel) - 2066: 7(f16vec4) FAdd 2065 2064 - Store 2002(texel) 2066 - 2067: 357 Load 359(s2DRect) - 2068: 167(fvec3) Load 169(c3) - 2069: 53(fvec2) Load 1409(dPdxy2) - 2070: 53(fvec2) Load 1409(dPdxy2) - 2071: 7(f16vec4) ImageSampleProjExplicitLod 2067 2068 Grad ConstOffset 2069 2070 722 - 2072: 7(f16vec4) Load 2002(texel) - 2073: 7(f16vec4) FAdd 2072 2071 - Store 2002(texel) 2073 - 2074: 357 Load 359(s2DRect) - 2075:175(f16vec3) Load 177(f16c3) - 2076:154(f16vec2) Load 1417(f16dPdxy2) - 2077:154(f16vec2) Load 1417(f16dPdxy2) - 2078: 7(f16vec4) ImageSampleProjExplicitLod 2074 2075 Grad ConstOffset 2076 2077 722 - 2079: 7(f16vec4) Load 2002(texel) - 2080: 7(f16vec4) FAdd 2079 2078 - Store 2002(texel) 2080 - 2081: 357 Load 359(s2DRect) - 2082: 249(fvec4) Load 251(c4) - 2083: 53(fvec2) Load 1409(dPdxy2) - 2084: 53(fvec2) Load 1409(dPdxy2) - 2085: 52(float) CompositeExtract 2082 3 - 2086: 249(fvec4) CompositeInsert 2085 2082 2 - 2087: 7(f16vec4) ImageSampleProjExplicitLod 2081 2086 Grad ConstOffset 2083 2084 722 - 2088: 7(f16vec4) Load 2002(texel) - 2089: 7(f16vec4) FAdd 2088 2087 - Store 2002(texel) 2089 - 2090: 357 Load 359(s2DRect) - 2091: 7(f16vec4) Load 309(f16c4) - 2092:154(f16vec2) Load 1417(f16dPdxy2) - 2093:154(f16vec2) Load 1417(f16dPdxy2) - 2094:6(float16_t) CompositeExtract 2091 3 - 2095: 7(f16vec4) CompositeInsert 2094 2091 2 - 2096: 7(f16vec4) ImageSampleProjExplicitLod 2090 2095 Grad ConstOffset 2092 2093 722 - 2097: 7(f16vec4) Load 2002(texel) - 2098: 7(f16vec4) FAdd 2097 2096 - Store 2002(texel) 2098 - 2099: 371 Load 373(s2DRectShadow) - 2100: 249(fvec4) Load 251(c4) - 2101: 53(fvec2) Load 1409(dPdxy2) - 2102: 53(fvec2) Load 1409(dPdxy2) - 2103: 52(float) CompositeExtract 2100 2 - 2104: 52(float) CompositeExtract 2100 3 - 2105: 249(fvec4) CompositeInsert 2104 2100 2 - 2106:6(float16_t) ImageSampleProjDrefExplicitLod 2099 2105 2103 Grad ConstOffset 2101 2102 722 - 2107: 208(ptr) AccessChain 2002(texel) 207 - 2108:6(float16_t) Load 2107 - 2109:6(float16_t) FAdd 2108 2106 - 2110: 208(ptr) AccessChain 2002(texel) 207 - Store 2110 2109 - 2111: 371 Load 373(s2DRectShadow) - 2112:175(f16vec3) Load 177(f16c3) - 2113: 52(float) Load 215(compare) - 2114:154(f16vec2) Load 1417(f16dPdxy2) - 2115:154(f16vec2) Load 1417(f16dPdxy2) - 2116:6(float16_t) ImageSampleProjDrefExplicitLod 2111 2112 2113 Grad ConstOffset 2114 2115 722 - 2117: 208(ptr) AccessChain 2002(texel) 207 - 2118:6(float16_t) Load 2117 - 2119:6(float16_t) FAdd 2118 2116 - 2120: 208(ptr) AccessChain 2002(texel) 207 - Store 2120 2119 - 2121: 163 Load 165(s3D) - 2122: 249(fvec4) Load 251(c4) - 2123: 167(fvec3) Load 1425(dPdxy3) - 2124: 167(fvec3) Load 1425(dPdxy3) - 2125: 7(f16vec4) ImageSampleProjExplicitLod 2121 2122 Grad ConstOffset 2123 2124 735 - 2126: 7(f16vec4) Load 2002(texel) - 2127: 7(f16vec4) FAdd 2126 2125 - Store 2002(texel) 2127 - 2128: 163 Load 165(s3D) - 2129: 7(f16vec4) Load 309(f16c4) - 2130:175(f16vec3) Load 1433(f16dPdxy3) - 2131:175(f16vec3) Load 1433(f16dPdxy3) - 2132: 7(f16vec4) ImageSampleProjExplicitLod 2128 2129 Grad ConstOffset 2130 2131 735 - 2133: 7(f16vec4) Load 2002(texel) - 2134: 7(f16vec4) FAdd 2133 2132 - Store 2002(texel) 2134 - 2135: 199 Load 201(s1DShadow) - 2136: 249(fvec4) Load 251(c4) - 2137: 52(float) Load 1393(dPdxy1) - 2138: 52(float) Load 1393(dPdxy1) - 2139: 52(float) CompositeExtract 2136 2 - 2140: 52(float) CompositeExtract 2136 3 - 2141: 249(fvec4) CompositeInsert 2140 2136 1 - 2142:6(float16_t) ImageSampleProjDrefExplicitLod 2135 2141 2139 Grad ConstOffset 2137 2138 709 - 2143: 208(ptr) AccessChain 2002(texel) 207 - 2144:6(float16_t) Load 2143 - 2145:6(float16_t) FAdd 2144 2142 - 2146: 208(ptr) AccessChain 2002(texel) 207 - Store 2146 2145 - 2147: 199 Load 201(s1DShadow) - 2148:175(f16vec3) Load 177(f16c3) - 2149: 52(float) Load 215(compare) - 2150:6(float16_t) Load 1401(f16dPdxy1) - 2151:6(float16_t) Load 1401(f16dPdxy1) - 2152:6(float16_t) CompositeExtract 2148 2 - 2153:175(f16vec3) CompositeInsert 2152 2148 1 - 2154:6(float16_t) ImageSampleProjDrefExplicitLod 2147 2153 2149 Grad ConstOffset 2150 2151 709 - 2155: 208(ptr) AccessChain 2002(texel) 207 - 2156:6(float16_t) Load 2155 - 2157:6(float16_t) FAdd 2156 2154 - 2158: 208(ptr) AccessChain 2002(texel) 207 - Store 2158 2157 - 2159: 224 Load 226(s2DShadow) - 2160: 249(fvec4) Load 251(c4) - 2161: 53(fvec2) Load 1409(dPdxy2) - 2162: 53(fvec2) Load 1409(dPdxy2) - 2163: 52(float) CompositeExtract 2160 2 - 2164: 52(float) CompositeExtract 2160 3 - 2165: 249(fvec4) CompositeInsert 2164 2160 2 - 2166:6(float16_t) ImageSampleProjDrefExplicitLod 2159 2165 2163 Grad ConstOffset 2161 2162 722 - 2167: 208(ptr) AccessChain 2002(texel) 207 - 2168:6(float16_t) Load 2167 - 2169:6(float16_t) FAdd 2168 2166 - 2170: 208(ptr) AccessChain 2002(texel) 207 - Store 2170 2169 - 2171: 224 Load 226(s2DShadow) - 2172:175(f16vec3) Load 177(f16c3) - 2173: 52(float) Load 215(compare) - 2174:154(f16vec2) Load 1417(f16dPdxy2) - 2175:154(f16vec2) Load 1417(f16dPdxy2) - 2176:6(float16_t) ImageSampleProjDrefExplicitLod 2171 2172 2173 Grad ConstOffset 2174 2175 722 - 2177: 208(ptr) AccessChain 2002(texel) 207 - 2178:6(float16_t) Load 2177 - 2179:6(float16_t) FAdd 2178 2176 - 2180: 208(ptr) AccessChain 2002(texel) 207 - Store 2180 2179 - 2181: 7(f16vec4) Load 2002(texel) - ReturnValue 2181 + 2054: 249(fvec4) CompositeInsert 2053 2050 1 + 2055:6(float16_t) ImageSampleProjDrefExplicitLod 2049 2054 2052 Grad ConstOffset 2051 2051 709 + 2056: 208(ptr) AccessChain 1932(texel) 207 + 2057:6(float16_t) Load 2056 + 2058:6(float16_t) FAdd 2057 2055 + 2059: 208(ptr) AccessChain 1932(texel) 207 + Store 2059 2058 + 2060: 199 Load 201(s1DShadow) + 2061:175(f16vec3) Load 177(f16c3) + 2062: 52(float) Load 215(compare) + 2063:6(float16_t) Load 1400(f16dPdxy1) + 2064:6(float16_t) CompositeExtract 2061 2 + 2065:175(f16vec3) CompositeInsert 2064 2061 1 + 2066:6(float16_t) ImageSampleProjDrefExplicitLod 2060 2065 2062 Grad ConstOffset 2063 2063 709 + 2067: 208(ptr) AccessChain 1932(texel) 207 + 2068:6(float16_t) Load 2067 + 2069:6(float16_t) FAdd 2068 2066 + 2070: 208(ptr) AccessChain 1932(texel) 207 + Store 2070 2069 + 2071: 224 Load 226(s2DShadow) + 2072: 249(fvec4) Load 251(c4) + 2073: 53(fvec2) Load 1407(dPdxy2) + 2074: 52(float) CompositeExtract 2072 2 + 2075: 52(float) CompositeExtract 2072 3 + 2076: 249(fvec4) CompositeInsert 2075 2072 2 + 2077:6(float16_t) ImageSampleProjDrefExplicitLod 2071 2076 2074 Grad ConstOffset 2073 2073 722 + 2078: 208(ptr) AccessChain 1932(texel) 207 + 2079:6(float16_t) Load 2078 + 2080:6(float16_t) FAdd 2079 2077 + 2081: 208(ptr) AccessChain 1932(texel) 207 + Store 2081 2080 + 2082: 224 Load 226(s2DShadow) + 2083:175(f16vec3) Load 177(f16c3) + 2084: 52(float) Load 215(compare) + 2085:154(f16vec2) Load 1414(f16dPdxy2) + 2086:6(float16_t) ImageSampleProjDrefExplicitLod 2082 2083 2084 Grad ConstOffset 2085 2085 722 + 2087: 208(ptr) AccessChain 1932(texel) 207 + 2088:6(float16_t) Load 2087 + 2089:6(float16_t) FAdd 2088 2086 + 2090: 208(ptr) AccessChain 1932(texel) 207 + Store 2090 2089 + 2091: 7(f16vec4) Load 1932(texel) + ReturnValue 2091 FunctionEnd 35(testTextureGather(): 7(f16vec4) Function None 8 36: Label - 2184(texel): 64(ptr) Variable Function - Store 2184(texel) 121 - 2185: 143 Load 145(s2D) - 2186: 53(fvec2) Load 148(c2) - 2188: 7(f16vec4) ImageGather 2185 2186 2187 - 2189: 7(f16vec4) Load 2184(texel) - 2190: 7(f16vec4) FAdd 2189 2188 - Store 2184(texel) 2190 - 2191: 143 Load 145(s2D) - 2192:154(f16vec2) Load 156(f16c2) - 2193:6(float16_t) Load 137(f16bias) - 2194: 7(f16vec4) ImageGather 2191 2192 2187 Bias 2193 - 2195: 7(f16vec4) Load 2184(texel) - 2196: 7(f16vec4) FAdd 2195 2194 - Store 2184(texel) 2196 - 2197: 284 Load 286(s2DArray) - 2198: 167(fvec3) Load 169(c3) - 2199: 7(f16vec4) ImageGather 2197 2198 2187 - 2200: 7(f16vec4) Load 2184(texel) - 2201: 7(f16vec4) FAdd 2200 2199 - Store 2184(texel) 2201 - 2202: 284 Load 286(s2DArray) - 2203:175(f16vec3) Load 177(f16c3) - 2204:6(float16_t) Load 137(f16bias) - 2205: 7(f16vec4) ImageGather 2202 2203 2187 Bias 2204 - 2206: 7(f16vec4) Load 2184(texel) - 2207: 7(f16vec4) FAdd 2206 2205 - Store 2184(texel) 2207 - 2208: 184 Load 186(sCube) - 2209: 167(fvec3) Load 169(c3) - 2210: 7(f16vec4) ImageGather 2208 2209 2187 - 2211: 7(f16vec4) Load 2184(texel) - 2212: 7(f16vec4) FAdd 2211 2210 - Store 2184(texel) 2212 - 2213: 184 Load 186(sCube) - 2214:175(f16vec3) Load 177(f16c3) - 2215:6(float16_t) Load 137(f16bias) - 2216: 7(f16vec4) ImageGather 2213 2214 2187 Bias 2215 - 2217: 7(f16vec4) Load 2184(texel) + 2094(texel): 64(ptr) Variable Function + Store 2094(texel) 121 + 2095: 143 Load 145(s2D) + 2096: 53(fvec2) Load 148(c2) + 2098: 7(f16vec4) ImageGather 2095 2096 2097 + 2099: 7(f16vec4) Load 2094(texel) + 2100: 7(f16vec4) FAdd 2099 2098 + Store 2094(texel) 2100 + 2101: 143 Load 145(s2D) + 2102:154(f16vec2) Load 156(f16c2) + 2103:6(float16_t) Load 137(f16bias) + 2104: 7(f16vec4) ImageGather 2101 2102 2097 Bias 2103 + 2105: 7(f16vec4) Load 2094(texel) + 2106: 7(f16vec4) FAdd 2105 2104 + Store 2094(texel) 2106 + 2107: 284 Load 286(s2DArray) + 2108: 167(fvec3) Load 169(c3) + 2109: 7(f16vec4) ImageGather 2107 2108 2097 + 2110: 7(f16vec4) Load 2094(texel) + 2111: 7(f16vec4) FAdd 2110 2109 + Store 2094(texel) 2111 + 2112: 284 Load 286(s2DArray) + 2113:175(f16vec3) Load 177(f16c3) + 2114:6(float16_t) Load 137(f16bias) + 2115: 7(f16vec4) ImageGather 2112 2113 2097 Bias 2114 + 2116: 7(f16vec4) Load 2094(texel) + 2117: 7(f16vec4) FAdd 2116 2115 + Store 2094(texel) 2117 + 2118: 184 Load 186(sCube) + 2119: 167(fvec3) Load 169(c3) + 2120: 7(f16vec4) ImageGather 2118 2119 2097 + 2121: 7(f16vec4) Load 2094(texel) + 2122: 7(f16vec4) FAdd 2121 2120 + Store 2094(texel) 2122 + 2123: 184 Load 186(sCube) + 2124:175(f16vec3) Load 177(f16c3) + 2125:6(float16_t) Load 137(f16bias) + 2126: 7(f16vec4) ImageGather 2123 2124 2097 Bias 2125 + 2127: 7(f16vec4) Load 2094(texel) + 2128: 7(f16vec4) FAdd 2127 2126 + Store 2094(texel) 2128 + 2129: 299 Load 301(sCubeArray) + 2130: 249(fvec4) Load 251(c4) + 2131: 7(f16vec4) ImageGather 2129 2130 2097 + 2132: 7(f16vec4) Load 2094(texel) + 2133: 7(f16vec4) FAdd 2132 2131 + Store 2094(texel) 2133 + 2134: 299 Load 301(sCubeArray) + 2135: 7(f16vec4) Load 309(f16c4) + 2136:6(float16_t) Load 137(f16bias) + 2137: 7(f16vec4) ImageGather 2134 2135 2097 Bias 2136 + 2138: 7(f16vec4) Load 2094(texel) + 2139: 7(f16vec4) FAdd 2138 2137 + Store 2094(texel) 2139 + 2140: 357 Load 359(s2DRect) + 2141: 53(fvec2) Load 148(c2) + 2142: 7(f16vec4) ImageGather 2140 2141 2097 + 2143: 7(f16vec4) Load 2094(texel) + 2144: 7(f16vec4) FAdd 2143 2142 + Store 2094(texel) 2144 + 2145: 357 Load 359(s2DRect) + 2146:154(f16vec2) Load 156(f16c2) + 2147: 7(f16vec4) ImageGather 2145 2146 2097 + 2148: 7(f16vec4) Load 2094(texel) + 2149: 7(f16vec4) FAdd 2148 2147 + Store 2094(texel) 2149 + 2150: 224 Load 226(s2DShadow) + 2151: 53(fvec2) Load 148(c2) + 2152: 52(float) Load 215(compare) + 2153: 7(f16vec4) ImageDrefGather 2150 2151 2152 + 2154: 7(f16vec4) Load 2094(texel) + 2155: 7(f16vec4) FAdd 2154 2153 + Store 2094(texel) 2155 + 2156: 224 Load 226(s2DShadow) + 2157:154(f16vec2) Load 156(f16c2) + 2158: 52(float) Load 215(compare) + 2159: 7(f16vec4) ImageDrefGather 2156 2157 2158 + 2160: 7(f16vec4) Load 2094(texel) + 2161: 7(f16vec4) FAdd 2160 2159 + Store 2094(texel) 2161 + 2162: 337 Load 339(s2DArrayShadow) + 2163: 167(fvec3) Load 169(c3) + 2164: 52(float) Load 215(compare) + 2165: 7(f16vec4) ImageDrefGather 2162 2163 2164 + 2166: 7(f16vec4) Load 2094(texel) + 2167: 7(f16vec4) FAdd 2166 2165 + Store 2094(texel) 2167 + 2168: 337 Load 339(s2DArrayShadow) + 2169:175(f16vec3) Load 177(f16c3) + 2170: 52(float) Load 215(compare) + 2171: 7(f16vec4) ImageDrefGather 2168 2169 2170 + 2172: 7(f16vec4) Load 2094(texel) + 2173: 7(f16vec4) FAdd 2172 2171 + Store 2094(texel) 2173 + 2174: 245 Load 247(sCubeShadow) + 2175: 167(fvec3) Load 169(c3) + 2176: 52(float) Load 215(compare) + 2177: 7(f16vec4) ImageDrefGather 2174 2175 2176 + 2178: 7(f16vec4) Load 2094(texel) + 2179: 7(f16vec4) FAdd 2178 2177 + Store 2094(texel) 2179 + 2180: 245 Load 247(sCubeShadow) + 2181:175(f16vec3) Load 177(f16c3) + 2182: 52(float) Load 215(compare) + 2183: 7(f16vec4) ImageDrefGather 2180 2181 2182 + 2184: 7(f16vec4) Load 2094(texel) + 2185: 7(f16vec4) FAdd 2184 2183 + Store 2094(texel) 2185 + 2186: 391 Load 393(sCubeArrayShadow) + 2187: 249(fvec4) Load 251(c4) + 2188: 52(float) Load 215(compare) + 2189: 7(f16vec4) ImageDrefGather 2186 2187 2188 + 2190: 7(f16vec4) Load 2094(texel) + 2191: 7(f16vec4) FAdd 2190 2189 + Store 2094(texel) 2191 + 2192: 391 Load 393(sCubeArrayShadow) + 2193: 7(f16vec4) Load 309(f16c4) + 2194: 52(float) Load 215(compare) + 2195: 7(f16vec4) ImageDrefGather 2192 2193 2194 + 2196: 7(f16vec4) Load 2094(texel) + 2197: 7(f16vec4) FAdd 2196 2195 + Store 2094(texel) 2197 + 2198: 371 Load 373(s2DRectShadow) + 2199: 53(fvec2) Load 148(c2) + 2200: 52(float) Load 215(compare) + 2201: 7(f16vec4) ImageDrefGather 2198 2199 2200 + 2202: 7(f16vec4) Load 2094(texel) + 2203: 7(f16vec4) FAdd 2202 2201 + Store 2094(texel) 2203 + 2204: 371 Load 373(s2DRectShadow) + 2205:154(f16vec2) Load 156(f16c2) + 2206: 52(float) Load 215(compare) + 2207: 7(f16vec4) ImageDrefGather 2204 2205 2206 + 2208: 7(f16vec4) Load 2094(texel) + 2209: 7(f16vec4) FAdd 2208 2207 + Store 2094(texel) 2209 + 2210: 7(f16vec4) Load 2094(texel) + ReturnValue 2210 + FunctionEnd +37(testTextureGatherOffset(): 7(f16vec4) Function None 8 + 38: Label + 2213(texel): 64(ptr) Variable Function + Store 2213(texel) 121 + 2214: 143 Load 145(s2D) + 2215: 53(fvec2) Load 148(c2) + 2216: 7(f16vec4) ImageGather 2214 2215 2097 ConstOffset 722 + 2217: 7(f16vec4) Load 2213(texel) 2218: 7(f16vec4) FAdd 2217 2216 - Store 2184(texel) 2218 - 2219: 299 Load 301(sCubeArray) - 2220: 249(fvec4) Load 251(c4) - 2221: 7(f16vec4) ImageGather 2219 2220 2187 - 2222: 7(f16vec4) Load 2184(texel) - 2223: 7(f16vec4) FAdd 2222 2221 - Store 2184(texel) 2223 - 2224: 299 Load 301(sCubeArray) - 2225: 7(f16vec4) Load 309(f16c4) - 2226:6(float16_t) Load 137(f16bias) - 2227: 7(f16vec4) ImageGather 2224 2225 2187 Bias 2226 - 2228: 7(f16vec4) Load 2184(texel) + Store 2213(texel) 2218 + 2219: 143 Load 145(s2D) + 2220:154(f16vec2) Load 156(f16c2) + 2221:6(float16_t) Load 137(f16bias) + 2222: 7(f16vec4) ImageGather 2219 2220 2097 Bias ConstOffset 2221 722 + 2223: 7(f16vec4) Load 2213(texel) + 2224: 7(f16vec4) FAdd 2223 2222 + Store 2213(texel) 2224 + 2225: 284 Load 286(s2DArray) + 2226: 167(fvec3) Load 169(c3) + 2227: 7(f16vec4) ImageGather 2225 2226 2097 ConstOffset 722 + 2228: 7(f16vec4) Load 2213(texel) 2229: 7(f16vec4) FAdd 2228 2227 - Store 2184(texel) 2229 - 2230: 357 Load 359(s2DRect) - 2231: 53(fvec2) Load 148(c2) - 2232: 7(f16vec4) ImageGather 2230 2231 2187 - 2233: 7(f16vec4) Load 2184(texel) - 2234: 7(f16vec4) FAdd 2233 2232 - Store 2184(texel) 2234 - 2235: 357 Load 359(s2DRect) - 2236:154(f16vec2) Load 156(f16c2) - 2237: 7(f16vec4) ImageGather 2235 2236 2187 - 2238: 7(f16vec4) Load 2184(texel) - 2239: 7(f16vec4) FAdd 2238 2237 - Store 2184(texel) 2239 - 2240: 224 Load 226(s2DShadow) - 2241: 53(fvec2) Load 148(c2) - 2242: 52(float) Load 215(compare) - 2243: 7(f16vec4) ImageDrefGather 2240 2241 2242 - 2244: 7(f16vec4) Load 2184(texel) + Store 2213(texel) 2229 + 2230: 284 Load 286(s2DArray) + 2231:175(f16vec3) Load 177(f16c3) + 2232:6(float16_t) Load 137(f16bias) + 2233: 7(f16vec4) ImageGather 2230 2231 2097 Bias ConstOffset 2232 722 + 2234: 7(f16vec4) Load 2213(texel) + 2235: 7(f16vec4) FAdd 2234 2233 + Store 2213(texel) 2235 + 2236: 357 Load 359(s2DRect) + 2237: 53(fvec2) Load 148(c2) + 2238: 7(f16vec4) ImageGather 2236 2237 2097 ConstOffset 722 + 2239: 7(f16vec4) Load 2213(texel) + 2240: 7(f16vec4) FAdd 2239 2238 + Store 2213(texel) 2240 + 2241: 357 Load 359(s2DRect) + 2242:154(f16vec2) Load 156(f16c2) + 2243: 7(f16vec4) ImageGather 2241 2242 2097 ConstOffset 722 + 2244: 7(f16vec4) Load 2213(texel) 2245: 7(f16vec4) FAdd 2244 2243 - Store 2184(texel) 2245 + Store 2213(texel) 2245 2246: 224 Load 226(s2DShadow) - 2247:154(f16vec2) Load 156(f16c2) + 2247: 53(fvec2) Load 148(c2) 2248: 52(float) Load 215(compare) - 2249: 7(f16vec4) ImageDrefGather 2246 2247 2248 - 2250: 7(f16vec4) Load 2184(texel) + 2249: 7(f16vec4) ImageDrefGather 2246 2247 2248 ConstOffset 722 + 2250: 7(f16vec4) Load 2213(texel) 2251: 7(f16vec4) FAdd 2250 2249 - Store 2184(texel) 2251 - 2252: 337 Load 339(s2DArrayShadow) - 2253: 167(fvec3) Load 169(c3) + Store 2213(texel) 2251 + 2252: 224 Load 226(s2DShadow) + 2253:154(f16vec2) Load 156(f16c2) 2254: 52(float) Load 215(compare) - 2255: 7(f16vec4) ImageDrefGather 2252 2253 2254 - 2256: 7(f16vec4) Load 2184(texel) + 2255: 7(f16vec4) ImageDrefGather 2252 2253 2254 ConstOffset 722 + 2256: 7(f16vec4) Load 2213(texel) 2257: 7(f16vec4) FAdd 2256 2255 - Store 2184(texel) 2257 + Store 2213(texel) 2257 2258: 337 Load 339(s2DArrayShadow) - 2259:175(f16vec3) Load 177(f16c3) + 2259: 167(fvec3) Load 169(c3) 2260: 52(float) Load 215(compare) - 2261: 7(f16vec4) ImageDrefGather 2258 2259 2260 - 2262: 7(f16vec4) Load 2184(texel) + 2261: 7(f16vec4) ImageDrefGather 2258 2259 2260 ConstOffset 722 + 2262: 7(f16vec4) Load 2213(texel) 2263: 7(f16vec4) FAdd 2262 2261 - Store 2184(texel) 2263 - 2264: 245 Load 247(sCubeShadow) - 2265: 167(fvec3) Load 169(c3) + Store 2213(texel) 2263 + 2264: 337 Load 339(s2DArrayShadow) + 2265:175(f16vec3) Load 177(f16c3) 2266: 52(float) Load 215(compare) - 2267: 7(f16vec4) ImageDrefGather 2264 2265 2266 - 2268: 7(f16vec4) Load 2184(texel) + 2267: 7(f16vec4) ImageDrefGather 2264 2265 2266 ConstOffset 722 + 2268: 7(f16vec4) Load 2213(texel) 2269: 7(f16vec4) FAdd 2268 2267 - Store 2184(texel) 2269 - 2270: 245 Load 247(sCubeShadow) - 2271:175(f16vec3) Load 177(f16c3) + Store 2213(texel) 2269 + 2270: 371 Load 373(s2DRectShadow) + 2271: 53(fvec2) Load 148(c2) 2272: 52(float) Load 215(compare) - 2273: 7(f16vec4) ImageDrefGather 2270 2271 2272 - 2274: 7(f16vec4) Load 2184(texel) + 2273: 7(f16vec4) ImageDrefGather 2270 2271 2272 ConstOffset 722 + 2274: 7(f16vec4) Load 2213(texel) 2275: 7(f16vec4) FAdd 2274 2273 - Store 2184(texel) 2275 - 2276: 391 Load 393(sCubeArrayShadow) - 2277: 249(fvec4) Load 251(c4) + Store 2213(texel) 2275 + 2276: 371 Load 373(s2DRectShadow) + 2277:154(f16vec2) Load 156(f16c2) 2278: 52(float) Load 215(compare) - 2279: 7(f16vec4) ImageDrefGather 2276 2277 2278 - 2280: 7(f16vec4) Load 2184(texel) + 2279: 7(f16vec4) ImageDrefGather 2276 2277 2278 ConstOffset 722 + 2280: 7(f16vec4) Load 2213(texel) 2281: 7(f16vec4) FAdd 2280 2279 - Store 2184(texel) 2281 - 2282: 391 Load 393(sCubeArrayShadow) - 2283: 7(f16vec4) Load 309(f16c4) - 2284: 52(float) Load 215(compare) - 2285: 7(f16vec4) ImageDrefGather 2282 2283 2284 - 2286: 7(f16vec4) Load 2184(texel) - 2287: 7(f16vec4) FAdd 2286 2285 - Store 2184(texel) 2287 - 2288: 371 Load 373(s2DRectShadow) - 2289: 53(fvec2) Load 148(c2) - 2290: 52(float) Load 215(compare) - 2291: 7(f16vec4) ImageDrefGather 2288 2289 2290 - 2292: 7(f16vec4) Load 2184(texel) - 2293: 7(f16vec4) FAdd 2292 2291 - Store 2184(texel) 2293 - 2294: 371 Load 373(s2DRectShadow) - 2295:154(f16vec2) Load 156(f16c2) - 2296: 52(float) Load 215(compare) - 2297: 7(f16vec4) ImageDrefGather 2294 2295 2296 - 2298: 7(f16vec4) Load 2184(texel) - 2299: 7(f16vec4) FAdd 2298 2297 - Store 2184(texel) 2299 - 2300: 7(f16vec4) Load 2184(texel) - ReturnValue 2300 - FunctionEnd -37(testTextureGatherOffset(): 7(f16vec4) Function None 8 - 38: Label - 2303(texel): 64(ptr) Variable Function - Store 2303(texel) 121 - 2304: 143 Load 145(s2D) - 2305: 53(fvec2) Load 148(c2) - 2306: 7(f16vec4) ImageGather 2304 2305 2187 ConstOffset 722 - 2307: 7(f16vec4) Load 2303(texel) - 2308: 7(f16vec4) FAdd 2307 2306 - Store 2303(texel) 2308 - 2309: 143 Load 145(s2D) - 2310:154(f16vec2) Load 156(f16c2) - 2311:6(float16_t) Load 137(f16bias) - 2312: 7(f16vec4) ImageGather 2309 2310 2187 Bias ConstOffset 2311 722 - 2313: 7(f16vec4) Load 2303(texel) - 2314: 7(f16vec4) FAdd 2313 2312 - Store 2303(texel) 2314 - 2315: 284 Load 286(s2DArray) - 2316: 167(fvec3) Load 169(c3) - 2317: 7(f16vec4) ImageGather 2315 2316 2187 ConstOffset 722 - 2318: 7(f16vec4) Load 2303(texel) - 2319: 7(f16vec4) FAdd 2318 2317 - Store 2303(texel) 2319 - 2320: 284 Load 286(s2DArray) - 2321:175(f16vec3) Load 177(f16c3) - 2322:6(float16_t) Load 137(f16bias) - 2323: 7(f16vec4) ImageGather 2320 2321 2187 Bias ConstOffset 2322 722 - 2324: 7(f16vec4) Load 2303(texel) - 2325: 7(f16vec4) FAdd 2324 2323 - Store 2303(texel) 2325 - 2326: 357 Load 359(s2DRect) - 2327: 53(fvec2) Load 148(c2) - 2328: 7(f16vec4) ImageGather 2326 2327 2187 ConstOffset 722 - 2329: 7(f16vec4) Load 2303(texel) - 2330: 7(f16vec4) FAdd 2329 2328 - Store 2303(texel) 2330 - 2331: 357 Load 359(s2DRect) - 2332:154(f16vec2) Load 156(f16c2) - 2333: 7(f16vec4) ImageGather 2331 2332 2187 ConstOffset 722 - 2334: 7(f16vec4) Load 2303(texel) - 2335: 7(f16vec4) FAdd 2334 2333 - Store 2303(texel) 2335 - 2336: 224 Load 226(s2DShadow) - 2337: 53(fvec2) Load 148(c2) - 2338: 52(float) Load 215(compare) - 2339: 7(f16vec4) ImageDrefGather 2336 2337 2338 ConstOffset 722 - 2340: 7(f16vec4) Load 2303(texel) - 2341: 7(f16vec4) FAdd 2340 2339 - Store 2303(texel) 2341 - 2342: 224 Load 226(s2DShadow) - 2343:154(f16vec2) Load 156(f16c2) - 2344: 52(float) Load 215(compare) - 2345: 7(f16vec4) ImageDrefGather 2342 2343 2344 ConstOffset 722 - 2346: 7(f16vec4) Load 2303(texel) - 2347: 7(f16vec4) FAdd 2346 2345 - Store 2303(texel) 2347 - 2348: 337 Load 339(s2DArrayShadow) - 2349: 167(fvec3) Load 169(c3) - 2350: 52(float) Load 215(compare) - 2351: 7(f16vec4) ImageDrefGather 2348 2349 2350 ConstOffset 722 - 2352: 7(f16vec4) Load 2303(texel) - 2353: 7(f16vec4) FAdd 2352 2351 - Store 2303(texel) 2353 - 2354: 337 Load 339(s2DArrayShadow) - 2355:175(f16vec3) Load 177(f16c3) - 2356: 52(float) Load 215(compare) - 2357: 7(f16vec4) ImageDrefGather 2354 2355 2356 ConstOffset 722 - 2358: 7(f16vec4) Load 2303(texel) - 2359: 7(f16vec4) FAdd 2358 2357 - Store 2303(texel) 2359 - 2360: 371 Load 373(s2DRectShadow) - 2361: 53(fvec2) Load 148(c2) - 2362: 52(float) Load 215(compare) - 2363: 7(f16vec4) ImageDrefGather 2360 2361 2362 ConstOffset 722 - 2364: 7(f16vec4) Load 2303(texel) - 2365: 7(f16vec4) FAdd 2364 2363 - Store 2303(texel) 2365 - 2366: 371 Load 373(s2DRectShadow) - 2367:154(f16vec2) Load 156(f16c2) - 2368: 52(float) Load 215(compare) - 2369: 7(f16vec4) ImageDrefGather 2366 2367 2368 ConstOffset 722 - 2370: 7(f16vec4) Load 2303(texel) - 2371: 7(f16vec4) FAdd 2370 2369 - Store 2303(texel) 2371 - 2372: 7(f16vec4) Load 2303(texel) - ReturnValue 2372 + Store 2213(texel) 2281 + 2282: 7(f16vec4) Load 2213(texel) + ReturnValue 2282 FunctionEnd 39(testTextureGatherOffsets(): 7(f16vec4) Function None 8 40: Label - 2375(texel): 64(ptr) Variable Function - Store 2375(texel) 121 - 2376: 143 Load 145(s2D) - 2377: 53(fvec2) Load 148(c2) - 2381: 7(f16vec4) ImageGather 2376 2377 2187 ConstOffsets 2380 - 2382: 7(f16vec4) Load 2375(texel) - 2383: 7(f16vec4) FAdd 2382 2381 - Store 2375(texel) 2383 - 2384: 143 Load 145(s2D) - 2385:154(f16vec2) Load 156(f16c2) - 2386:6(float16_t) Load 137(f16bias) - 2387: 7(f16vec4) ImageGather 2384 2385 2187 Bias ConstOffsets 2386 2380 - 2388: 7(f16vec4) Load 2375(texel) - 2389: 7(f16vec4) FAdd 2388 2387 - Store 2375(texel) 2389 - 2390: 284 Load 286(s2DArray) - 2391: 167(fvec3) Load 169(c3) - 2392: 7(f16vec4) ImageGather 2390 2391 2187 ConstOffsets 2380 - 2393: 7(f16vec4) Load 2375(texel) - 2394: 7(f16vec4) FAdd 2393 2392 - Store 2375(texel) 2394 - 2395: 284 Load 286(s2DArray) - 2396:175(f16vec3) Load 177(f16c3) - 2397:6(float16_t) Load 137(f16bias) - 2398: 7(f16vec4) ImageGather 2395 2396 2187 Bias ConstOffsets 2397 2380 - 2399: 7(f16vec4) Load 2375(texel) - 2400: 7(f16vec4) FAdd 2399 2398 - Store 2375(texel) 2400 - 2401: 357 Load 359(s2DRect) - 2402: 53(fvec2) Load 148(c2) - 2403: 7(f16vec4) ImageGather 2401 2402 2187 ConstOffsets 2380 - 2404: 7(f16vec4) Load 2375(texel) - 2405: 7(f16vec4) FAdd 2404 2403 - Store 2375(texel) 2405 - 2406: 357 Load 359(s2DRect) - 2407:154(f16vec2) Load 156(f16c2) - 2408: 7(f16vec4) ImageGather 2406 2407 2187 ConstOffsets 2380 - 2409: 7(f16vec4) Load 2375(texel) - 2410: 7(f16vec4) FAdd 2409 2408 - Store 2375(texel) 2410 - 2411: 224 Load 226(s2DShadow) - 2412: 53(fvec2) Load 148(c2) - 2413: 52(float) Load 215(compare) - 2414: 7(f16vec4) ImageDrefGather 2411 2412 2413 ConstOffsets 2380 - 2415: 7(f16vec4) Load 2375(texel) - 2416: 7(f16vec4) FAdd 2415 2414 - Store 2375(texel) 2416 - 2417: 224 Load 226(s2DShadow) - 2418:154(f16vec2) Load 156(f16c2) - 2419: 52(float) Load 215(compare) - 2420: 7(f16vec4) ImageDrefGather 2417 2418 2419 ConstOffsets 2380 - 2421: 7(f16vec4) Load 2375(texel) - 2422: 7(f16vec4) FAdd 2421 2420 - Store 2375(texel) 2422 - 2423: 337 Load 339(s2DArrayShadow) - 2424: 167(fvec3) Load 169(c3) - 2425: 52(float) Load 215(compare) - 2426: 7(f16vec4) ImageDrefGather 2423 2424 2425 ConstOffsets 2380 - 2427: 7(f16vec4) Load 2375(texel) - 2428: 7(f16vec4) FAdd 2427 2426 - Store 2375(texel) 2428 - 2429: 337 Load 339(s2DArrayShadow) - 2430:175(f16vec3) Load 177(f16c3) - 2431: 52(float) Load 215(compare) - 2432: 7(f16vec4) ImageDrefGather 2429 2430 2431 ConstOffsets 2380 - 2433: 7(f16vec4) Load 2375(texel) - 2434: 7(f16vec4) FAdd 2433 2432 - Store 2375(texel) 2434 - 2435: 371 Load 373(s2DRectShadow) - 2436: 53(fvec2) Load 148(c2) - 2437: 52(float) Load 215(compare) - 2438: 7(f16vec4) ImageDrefGather 2435 2436 2437 ConstOffsets 2380 - 2439: 7(f16vec4) Load 2375(texel) - 2440: 7(f16vec4) FAdd 2439 2438 - Store 2375(texel) 2440 - 2441: 371 Load 373(s2DRectShadow) - 2442:154(f16vec2) Load 156(f16c2) - 2443: 52(float) Load 215(compare) - 2444: 7(f16vec4) ImageDrefGather 2441 2442 2443 ConstOffsets 2380 - 2445: 7(f16vec4) Load 2375(texel) - 2446: 7(f16vec4) FAdd 2445 2444 - Store 2375(texel) 2446 - 2447: 7(f16vec4) Load 2375(texel) - ReturnValue 2447 + 2285(texel): 64(ptr) Variable Function + Store 2285(texel) 121 + 2286: 143 Load 145(s2D) + 2287: 53(fvec2) Load 148(c2) + 2291: 7(f16vec4) ImageGather 2286 2287 2097 ConstOffsets 2290 + 2292: 7(f16vec4) Load 2285(texel) + 2293: 7(f16vec4) FAdd 2292 2291 + Store 2285(texel) 2293 + 2294: 143 Load 145(s2D) + 2295:154(f16vec2) Load 156(f16c2) + 2296:6(float16_t) Load 137(f16bias) + 2297: 7(f16vec4) ImageGather 2294 2295 2097 Bias ConstOffsets 2296 2290 + 2298: 7(f16vec4) Load 2285(texel) + 2299: 7(f16vec4) FAdd 2298 2297 + Store 2285(texel) 2299 + 2300: 284 Load 286(s2DArray) + 2301: 167(fvec3) Load 169(c3) + 2302: 7(f16vec4) ImageGather 2300 2301 2097 ConstOffsets 2290 + 2303: 7(f16vec4) Load 2285(texel) + 2304: 7(f16vec4) FAdd 2303 2302 + Store 2285(texel) 2304 + 2305: 284 Load 286(s2DArray) + 2306:175(f16vec3) Load 177(f16c3) + 2307:6(float16_t) Load 137(f16bias) + 2308: 7(f16vec4) ImageGather 2305 2306 2097 Bias ConstOffsets 2307 2290 + 2309: 7(f16vec4) Load 2285(texel) + 2310: 7(f16vec4) FAdd 2309 2308 + Store 2285(texel) 2310 + 2311: 357 Load 359(s2DRect) + 2312: 53(fvec2) Load 148(c2) + 2313: 7(f16vec4) ImageGather 2311 2312 2097 ConstOffsets 2290 + 2314: 7(f16vec4) Load 2285(texel) + 2315: 7(f16vec4) FAdd 2314 2313 + Store 2285(texel) 2315 + 2316: 357 Load 359(s2DRect) + 2317:154(f16vec2) Load 156(f16c2) + 2318: 7(f16vec4) ImageGather 2316 2317 2097 ConstOffsets 2290 + 2319: 7(f16vec4) Load 2285(texel) + 2320: 7(f16vec4) FAdd 2319 2318 + Store 2285(texel) 2320 + 2321: 224 Load 226(s2DShadow) + 2322: 53(fvec2) Load 148(c2) + 2323: 52(float) Load 215(compare) + 2324: 7(f16vec4) ImageDrefGather 2321 2322 2323 ConstOffsets 2290 + 2325: 7(f16vec4) Load 2285(texel) + 2326: 7(f16vec4) FAdd 2325 2324 + Store 2285(texel) 2326 + 2327: 224 Load 226(s2DShadow) + 2328:154(f16vec2) Load 156(f16c2) + 2329: 52(float) Load 215(compare) + 2330: 7(f16vec4) ImageDrefGather 2327 2328 2329 ConstOffsets 2290 + 2331: 7(f16vec4) Load 2285(texel) + 2332: 7(f16vec4) FAdd 2331 2330 + Store 2285(texel) 2332 + 2333: 337 Load 339(s2DArrayShadow) + 2334: 167(fvec3) Load 169(c3) + 2335: 52(float) Load 215(compare) + 2336: 7(f16vec4) ImageDrefGather 2333 2334 2335 ConstOffsets 2290 + 2337: 7(f16vec4) Load 2285(texel) + 2338: 7(f16vec4) FAdd 2337 2336 + Store 2285(texel) 2338 + 2339: 337 Load 339(s2DArrayShadow) + 2340:175(f16vec3) Load 177(f16c3) + 2341: 52(float) Load 215(compare) + 2342: 7(f16vec4) ImageDrefGather 2339 2340 2341 ConstOffsets 2290 + 2343: 7(f16vec4) Load 2285(texel) + 2344: 7(f16vec4) FAdd 2343 2342 + Store 2285(texel) 2344 + 2345: 371 Load 373(s2DRectShadow) + 2346: 53(fvec2) Load 148(c2) + 2347: 52(float) Load 215(compare) + 2348: 7(f16vec4) ImageDrefGather 2345 2346 2347 ConstOffsets 2290 + 2349: 7(f16vec4) Load 2285(texel) + 2350: 7(f16vec4) FAdd 2349 2348 + Store 2285(texel) 2350 + 2351: 371 Load 373(s2DRectShadow) + 2352:154(f16vec2) Load 156(f16c2) + 2353: 52(float) Load 215(compare) + 2354: 7(f16vec4) ImageDrefGather 2351 2352 2353 ConstOffsets 2290 + 2355: 7(f16vec4) Load 2285(texel) + 2356: 7(f16vec4) FAdd 2355 2354 + Store 2285(texel) 2356 + 2357: 7(f16vec4) Load 2285(texel) + ReturnValue 2357 FunctionEnd 41(testTextureGatherLod(): 7(f16vec4) Function None 8 42: Label - 2450(texel): 64(ptr) Variable Function - Store 2450(texel) 121 - 2451: 143 Load 145(s2D) - 2452: 53(fvec2) Load 148(c2) - 2453: 52(float) Load 565(lod) - 2454: 7(f16vec4) ImageGather 2451 2452 2187 Lod 2453 - 2455: 7(f16vec4) Load 2450(texel) - 2456: 7(f16vec4) FAdd 2455 2454 - Store 2450(texel) 2456 - 2457: 143 Load 145(s2D) - 2458:154(f16vec2) Load 156(f16c2) - 2459:6(float16_t) Load 572(f16lod) - 2460: 7(f16vec4) ImageGather 2457 2458 2187 Lod 2459 - 2461: 7(f16vec4) Load 2450(texel) - 2462: 7(f16vec4) FAdd 2461 2460 - Store 2450(texel) 2462 - 2463: 284 Load 286(s2DArray) - 2464: 167(fvec3) Load 169(c3) - 2465: 52(float) Load 565(lod) - 2466: 7(f16vec4) ImageGather 2463 2464 2187 Lod 2465 - 2467: 7(f16vec4) Load 2450(texel) - 2468: 7(f16vec4) FAdd 2467 2466 - Store 2450(texel) 2468 - 2469: 284 Load 286(s2DArray) - 2470:175(f16vec3) Load 177(f16c3) - 2471:6(float16_t) Load 572(f16lod) - 2472: 7(f16vec4) ImageGather 2469 2470 2187 Lod 2471 - 2473: 7(f16vec4) Load 2450(texel) - 2474: 7(f16vec4) FAdd 2473 2472 - Store 2450(texel) 2474 - 2475: 184 Load 186(sCube) - 2476: 167(fvec3) Load 169(c3) - 2477: 52(float) Load 565(lod) - 2478: 7(f16vec4) ImageGather 2475 2476 2187 Lod 2477 - 2479: 7(f16vec4) Load 2450(texel) - 2480: 7(f16vec4) FAdd 2479 2478 - Store 2450(texel) 2480 - 2481: 184 Load 186(sCube) - 2482:175(f16vec3) Load 177(f16c3) - 2483:6(float16_t) Load 572(f16lod) - 2484: 7(f16vec4) ImageGather 2481 2482 2187 Lod 2483 - 2485: 7(f16vec4) Load 2450(texel) - 2486: 7(f16vec4) FAdd 2485 2484 - Store 2450(texel) 2486 - 2487: 299 Load 301(sCubeArray) - 2488: 249(fvec4) Load 251(c4) - 2489: 52(float) Load 565(lod) - 2490: 7(f16vec4) ImageGather 2487 2488 2187 Lod 2489 - 2491: 7(f16vec4) Load 2450(texel) - 2492: 7(f16vec4) FAdd 2491 2490 - Store 2450(texel) 2492 - 2493: 299 Load 301(sCubeArray) - 2494: 7(f16vec4) Load 309(f16c4) - 2495:6(float16_t) Load 572(f16lod) - 2496: 7(f16vec4) ImageGather 2493 2494 2187 Lod 2495 - 2497: 7(f16vec4) Load 2450(texel) - 2498: 7(f16vec4) FAdd 2497 2496 - Store 2450(texel) 2498 - 2499: 7(f16vec4) Load 2450(texel) - ReturnValue 2499 + 2360(texel): 64(ptr) Variable Function + Store 2360(texel) 121 + 2361: 143 Load 145(s2D) + 2362: 53(fvec2) Load 148(c2) + 2363: 52(float) Load 565(lod) + 2364: 7(f16vec4) ImageGather 2361 2362 2097 Lod 2363 + 2365: 7(f16vec4) Load 2360(texel) + 2366: 7(f16vec4) FAdd 2365 2364 + Store 2360(texel) 2366 + 2367: 143 Load 145(s2D) + 2368:154(f16vec2) Load 156(f16c2) + 2369:6(float16_t) Load 572(f16lod) + 2370: 7(f16vec4) ImageGather 2367 2368 2097 Lod 2369 + 2371: 7(f16vec4) Load 2360(texel) + 2372: 7(f16vec4) FAdd 2371 2370 + Store 2360(texel) 2372 + 2373: 284 Load 286(s2DArray) + 2374: 167(fvec3) Load 169(c3) + 2375: 52(float) Load 565(lod) + 2376: 7(f16vec4) ImageGather 2373 2374 2097 Lod 2375 + 2377: 7(f16vec4) Load 2360(texel) + 2378: 7(f16vec4) FAdd 2377 2376 + Store 2360(texel) 2378 + 2379: 284 Load 286(s2DArray) + 2380:175(f16vec3) Load 177(f16c3) + 2381:6(float16_t) Load 572(f16lod) + 2382: 7(f16vec4) ImageGather 2379 2380 2097 Lod 2381 + 2383: 7(f16vec4) Load 2360(texel) + 2384: 7(f16vec4) FAdd 2383 2382 + Store 2360(texel) 2384 + 2385: 184 Load 186(sCube) + 2386: 167(fvec3) Load 169(c3) + 2387: 52(float) Load 565(lod) + 2388: 7(f16vec4) ImageGather 2385 2386 2097 Lod 2387 + 2389: 7(f16vec4) Load 2360(texel) + 2390: 7(f16vec4) FAdd 2389 2388 + Store 2360(texel) 2390 + 2391: 184 Load 186(sCube) + 2392:175(f16vec3) Load 177(f16c3) + 2393:6(float16_t) Load 572(f16lod) + 2394: 7(f16vec4) ImageGather 2391 2392 2097 Lod 2393 + 2395: 7(f16vec4) Load 2360(texel) + 2396: 7(f16vec4) FAdd 2395 2394 + Store 2360(texel) 2396 + 2397: 299 Load 301(sCubeArray) + 2398: 249(fvec4) Load 251(c4) + 2399: 52(float) Load 565(lod) + 2400: 7(f16vec4) ImageGather 2397 2398 2097 Lod 2399 + 2401: 7(f16vec4) Load 2360(texel) + 2402: 7(f16vec4) FAdd 2401 2400 + Store 2360(texel) 2402 + 2403: 299 Load 301(sCubeArray) + 2404: 7(f16vec4) Load 309(f16c4) + 2405:6(float16_t) Load 572(f16lod) + 2406: 7(f16vec4) ImageGather 2403 2404 2097 Lod 2405 + 2407: 7(f16vec4) Load 2360(texel) + 2408: 7(f16vec4) FAdd 2407 2406 + Store 2360(texel) 2408 + 2409: 7(f16vec4) Load 2360(texel) + ReturnValue 2409 FunctionEnd 43(testTextureGatherLodOffset(): 7(f16vec4) Function None 8 44: Label - 2502(texel): 64(ptr) Variable Function - Store 2502(texel) 121 - 2503: 143 Load 145(s2D) - 2504: 53(fvec2) Load 148(c2) - 2505: 52(float) Load 565(lod) - 2506: 7(f16vec4) ImageGather 2503 2504 2187 Lod ConstOffset 2505 722 - 2507: 7(f16vec4) Load 2502(texel) - 2508: 7(f16vec4) FAdd 2507 2506 - Store 2502(texel) 2508 - 2509: 143 Load 145(s2D) - 2510:154(f16vec2) Load 156(f16c2) - 2511:6(float16_t) Load 572(f16lod) - 2512: 7(f16vec4) ImageGather 2509 2510 2187 Lod ConstOffset 2511 722 - 2513: 7(f16vec4) Load 2502(texel) - 2514: 7(f16vec4) FAdd 2513 2512 - Store 2502(texel) 2514 - 2515: 284 Load 286(s2DArray) - 2516: 167(fvec3) Load 169(c3) - 2517: 52(float) Load 565(lod) - 2518: 7(f16vec4) ImageGather 2515 2516 2187 Lod ConstOffset 2517 722 - 2519: 7(f16vec4) Load 2502(texel) - 2520: 7(f16vec4) FAdd 2519 2518 - Store 2502(texel) 2520 - 2521: 284 Load 286(s2DArray) - 2522:175(f16vec3) Load 177(f16c3) - 2523:6(float16_t) Load 572(f16lod) - 2524: 7(f16vec4) ImageGather 2521 2522 2187 Lod ConstOffset 2523 722 - 2525: 7(f16vec4) Load 2502(texel) - 2526: 7(f16vec4) FAdd 2525 2524 - Store 2502(texel) 2526 - 2527: 7(f16vec4) Load 2502(texel) - ReturnValue 2527 + 2412(texel): 64(ptr) Variable Function + Store 2412(texel) 121 + 2413: 143 Load 145(s2D) + 2414: 53(fvec2) Load 148(c2) + 2415: 52(float) Load 565(lod) + 2416: 7(f16vec4) ImageGather 2413 2414 2097 Lod ConstOffset 2415 722 + 2417: 7(f16vec4) Load 2412(texel) + 2418: 7(f16vec4) FAdd 2417 2416 + Store 2412(texel) 2418 + 2419: 143 Load 145(s2D) + 2420:154(f16vec2) Load 156(f16c2) + 2421:6(float16_t) Load 572(f16lod) + 2422: 7(f16vec4) ImageGather 2419 2420 2097 Lod ConstOffset 2421 722 + 2423: 7(f16vec4) Load 2412(texel) + 2424: 7(f16vec4) FAdd 2423 2422 + Store 2412(texel) 2424 + 2425: 284 Load 286(s2DArray) + 2426: 167(fvec3) Load 169(c3) + 2427: 52(float) Load 565(lod) + 2428: 7(f16vec4) ImageGather 2425 2426 2097 Lod ConstOffset 2427 722 + 2429: 7(f16vec4) Load 2412(texel) + 2430: 7(f16vec4) FAdd 2429 2428 + Store 2412(texel) 2430 + 2431: 284 Load 286(s2DArray) + 2432:175(f16vec3) Load 177(f16c3) + 2433:6(float16_t) Load 572(f16lod) + 2434: 7(f16vec4) ImageGather 2431 2432 2097 Lod ConstOffset 2433 722 + 2435: 7(f16vec4) Load 2412(texel) + 2436: 7(f16vec4) FAdd 2435 2434 + Store 2412(texel) 2436 + 2437: 7(f16vec4) Load 2412(texel) + ReturnValue 2437 FunctionEnd 45(testTextureGatherLodOffsets(): 7(f16vec4) Function None 8 46: Label - 2530(texel): 64(ptr) Variable Function - Store 2530(texel) 121 - 2531: 143 Load 145(s2D) - 2532: 53(fvec2) Load 148(c2) - 2533: 52(float) Load 565(lod) - 2534: 7(f16vec4) ImageGather 2531 2532 2187 Lod ConstOffsets 2533 2380 - 2535: 7(f16vec4) Load 2530(texel) - 2536: 7(f16vec4) FAdd 2535 2534 - Store 2530(texel) 2536 - 2537: 143 Load 145(s2D) - 2538:154(f16vec2) Load 156(f16c2) - 2539:6(float16_t) Load 572(f16lod) - 2540: 7(f16vec4) ImageGather 2537 2538 2187 Lod ConstOffsets 2539 2380 - 2541: 7(f16vec4) Load 2530(texel) - 2542: 7(f16vec4) FAdd 2541 2540 - Store 2530(texel) 2542 - 2543: 284 Load 286(s2DArray) - 2544: 167(fvec3) Load 169(c3) - 2545: 52(float) Load 565(lod) - 2546: 7(f16vec4) ImageGather 2543 2544 2187 Lod ConstOffsets 2545 2380 - 2547: 7(f16vec4) Load 2530(texel) - 2548: 7(f16vec4) FAdd 2547 2546 - Store 2530(texel) 2548 - 2549: 284 Load 286(s2DArray) - 2550:175(f16vec3) Load 177(f16c3) - 2551:6(float16_t) Load 572(f16lod) - 2552: 7(f16vec4) ImageGather 2549 2550 2187 Lod ConstOffsets 2551 2380 - 2553: 7(f16vec4) Load 2530(texel) - 2554: 7(f16vec4) FAdd 2553 2552 - Store 2530(texel) 2554 - 2555: 7(f16vec4) Load 2530(texel) - ReturnValue 2555 + 2440(texel): 64(ptr) Variable Function + Store 2440(texel) 121 + 2441: 143 Load 145(s2D) + 2442: 53(fvec2) Load 148(c2) + 2443: 52(float) Load 565(lod) + 2444: 7(f16vec4) ImageGather 2441 2442 2097 Lod ConstOffsets 2443 2290 + 2445: 7(f16vec4) Load 2440(texel) + 2446: 7(f16vec4) FAdd 2445 2444 + Store 2440(texel) 2446 + 2447: 143 Load 145(s2D) + 2448:154(f16vec2) Load 156(f16c2) + 2449:6(float16_t) Load 572(f16lod) + 2450: 7(f16vec4) ImageGather 2447 2448 2097 Lod ConstOffsets 2449 2290 + 2451: 7(f16vec4) Load 2440(texel) + 2452: 7(f16vec4) FAdd 2451 2450 + Store 2440(texel) 2452 + 2453: 284 Load 286(s2DArray) + 2454: 167(fvec3) Load 169(c3) + 2455: 52(float) Load 565(lod) + 2456: 7(f16vec4) ImageGather 2453 2454 2097 Lod ConstOffsets 2455 2290 + 2457: 7(f16vec4) Load 2440(texel) + 2458: 7(f16vec4) FAdd 2457 2456 + Store 2440(texel) 2458 + 2459: 284 Load 286(s2DArray) + 2460:175(f16vec3) Load 177(f16c3) + 2461:6(float16_t) Load 572(f16lod) + 2462: 7(f16vec4) ImageGather 2459 2460 2097 Lod ConstOffsets 2461 2290 + 2463: 7(f16vec4) Load 2440(texel) + 2464: 7(f16vec4) FAdd 2463 2462 + Store 2440(texel) 2464 + 2465: 7(f16vec4) Load 2440(texel) + ReturnValue 2465 FunctionEnd 50(testTextureSize(): 48(ivec4) Function None 49 51: Label - 2559(size): 2558(ptr) Variable Function - Store 2559(size) 2560 - 2561: 123 Load 125(s1D) - 2562: 52(float) Load 565(lod) - 2563: 47(int) ConvertFToS 2562 - 2564: 122 Image 2561 - 2565: 47(int) ImageQuerySizeLod 2564 2563 - 2567: 2566(ptr) AccessChain 2559(size) 207 - 2568: 47(int) Load 2567 - 2569: 47(int) IAdd 2568 2565 - 2570: 2566(ptr) AccessChain 2559(size) 207 - Store 2570 2569 - 2571: 143 Load 145(s2D) - 2572: 52(float) Load 565(lod) - 2573: 47(int) ConvertFToS 2572 - 2574: 142 Image 2571 - 2575: 721(ivec2) ImageQuerySizeLod 2574 2573 - 2576: 48(ivec4) Load 2559(size) - 2577: 721(ivec2) VectorShuffle 2576 2576 0 1 - 2578: 721(ivec2) IAdd 2577 2575 - 2579: 2566(ptr) AccessChain 2559(size) 207 - 2580: 47(int) CompositeExtract 2578 0 - Store 2579 2580 - 2582: 2566(ptr) AccessChain 2559(size) 2581 - 2583: 47(int) CompositeExtract 2578 1 - Store 2582 2583 - 2584: 163 Load 165(s3D) - 2585: 52(float) Load 565(lod) - 2586: 47(int) ConvertFToS 2585 - 2587: 162 Image 2584 - 2588: 734(ivec3) ImageQuerySizeLod 2587 2586 - 2589: 48(ivec4) Load 2559(size) - 2590: 734(ivec3) VectorShuffle 2589 2589 0 1 2 - 2591: 734(ivec3) IAdd 2590 2588 - 2592: 2566(ptr) AccessChain 2559(size) 207 - 2593: 47(int) CompositeExtract 2591 0 - Store 2592 2593 - 2594: 2566(ptr) AccessChain 2559(size) 2581 - 2595: 47(int) CompositeExtract 2591 1 - Store 2594 2595 - 2597: 2566(ptr) AccessChain 2559(size) 2596 - 2598: 47(int) CompositeExtract 2591 2 - Store 2597 2598 - 2599: 184 Load 186(sCube) - 2600: 52(float) Load 565(lod) - 2601: 47(int) ConvertFToS 2600 - 2602: 183 Image 2599 - 2603: 721(ivec2) ImageQuerySizeLod 2602 2601 - 2604: 48(ivec4) Load 2559(size) - 2605: 721(ivec2) VectorShuffle 2604 2604 0 1 - 2606: 721(ivec2) IAdd 2605 2603 - 2607: 2566(ptr) AccessChain 2559(size) 207 - 2608: 47(int) CompositeExtract 2606 0 - Store 2607 2608 - 2609: 2566(ptr) AccessChain 2559(size) 2581 - 2610: 47(int) CompositeExtract 2606 1 - Store 2609 2610 - 2611: 199 Load 201(s1DShadow) - 2612: 52(float) Load 565(lod) - 2613: 47(int) ConvertFToS 2612 - 2614: 198 Image 2611 - 2615: 47(int) ImageQuerySizeLod 2614 2613 - 2616: 2566(ptr) AccessChain 2559(size) 207 - 2617: 47(int) Load 2616 - 2618: 47(int) IAdd 2617 2615 - 2619: 2566(ptr) AccessChain 2559(size) 207 - Store 2619 2618 - 2620: 224 Load 226(s2DShadow) - 2621: 52(float) Load 565(lod) - 2622: 47(int) ConvertFToS 2621 - 2623: 223 Image 2620 - 2624: 721(ivec2) ImageQuerySizeLod 2623 2622 - 2625: 48(ivec4) Load 2559(size) - 2626: 721(ivec2) VectorShuffle 2625 2625 0 1 - 2627: 721(ivec2) IAdd 2626 2624 - 2628: 2566(ptr) AccessChain 2559(size) 207 - 2629: 47(int) CompositeExtract 2627 0 - Store 2628 2629 - 2630: 2566(ptr) AccessChain 2559(size) 2581 - 2631: 47(int) CompositeExtract 2627 1 - Store 2630 2631 - 2632: 245 Load 247(sCubeShadow) - 2633: 52(float) Load 565(lod) - 2634: 47(int) ConvertFToS 2633 - 2635: 244 Image 2632 - 2636: 721(ivec2) ImageQuerySizeLod 2635 2634 - 2637: 48(ivec4) Load 2559(size) - 2638: 721(ivec2) VectorShuffle 2637 2637 0 1 - 2639: 721(ivec2) IAdd 2638 2636 - 2640: 2566(ptr) AccessChain 2559(size) 207 - 2641: 47(int) CompositeExtract 2639 0 - Store 2640 2641 - 2642: 2566(ptr) AccessChain 2559(size) 2581 - 2643: 47(int) CompositeExtract 2639 1 - Store 2642 2643 - 2644: 299 Load 301(sCubeArray) - 2645: 52(float) Load 565(lod) - 2646: 47(int) ConvertFToS 2645 - 2647: 298 Image 2644 - 2648: 734(ivec3) ImageQuerySizeLod 2647 2646 - 2649: 48(ivec4) Load 2559(size) - 2650: 734(ivec3) VectorShuffle 2649 2649 0 1 2 - 2651: 734(ivec3) IAdd 2650 2648 - 2652: 2566(ptr) AccessChain 2559(size) 207 - 2653: 47(int) CompositeExtract 2651 0 + 2469(size): 2468(ptr) Variable Function + Store 2469(size) 2470 + 2471: 123 Load 125(s1D) + 2472: 52(float) Load 565(lod) + 2473: 47(int) ConvertFToS 2472 + 2474: 122 Image 2471 + 2475: 47(int) ImageQuerySizeLod 2474 2473 + 2477: 2476(ptr) AccessChain 2469(size) 207 + 2478: 47(int) Load 2477 + 2479: 47(int) IAdd 2478 2475 + 2480: 2476(ptr) AccessChain 2469(size) 207 + Store 2480 2479 + 2481: 143 Load 145(s2D) + 2482: 52(float) Load 565(lod) + 2483: 47(int) ConvertFToS 2482 + 2484: 142 Image 2481 + 2485: 721(ivec2) ImageQuerySizeLod 2484 2483 + 2486: 48(ivec4) Load 2469(size) + 2487: 721(ivec2) VectorShuffle 2486 2486 0 1 + 2488: 721(ivec2) IAdd 2487 2485 + 2489: 2476(ptr) AccessChain 2469(size) 207 + 2490: 47(int) CompositeExtract 2488 0 + Store 2489 2490 + 2492: 2476(ptr) AccessChain 2469(size) 2491 + 2493: 47(int) CompositeExtract 2488 1 + Store 2492 2493 + 2494: 163 Load 165(s3D) + 2495: 52(float) Load 565(lod) + 2496: 47(int) ConvertFToS 2495 + 2497: 162 Image 2494 + 2498: 734(ivec3) ImageQuerySizeLod 2497 2496 + 2499: 48(ivec4) Load 2469(size) + 2500: 734(ivec3) VectorShuffle 2499 2499 0 1 2 + 2501: 734(ivec3) IAdd 2500 2498 + 2502: 2476(ptr) AccessChain 2469(size) 207 + 2503: 47(int) CompositeExtract 2501 0 + Store 2502 2503 + 2504: 2476(ptr) AccessChain 2469(size) 2491 + 2505: 47(int) CompositeExtract 2501 1 + Store 2504 2505 + 2507: 2476(ptr) AccessChain 2469(size) 2506 + 2508: 47(int) CompositeExtract 2501 2 + Store 2507 2508 + 2509: 184 Load 186(sCube) + 2510: 52(float) Load 565(lod) + 2511: 47(int) ConvertFToS 2510 + 2512: 183 Image 2509 + 2513: 721(ivec2) ImageQuerySizeLod 2512 2511 + 2514: 48(ivec4) Load 2469(size) + 2515: 721(ivec2) VectorShuffle 2514 2514 0 1 + 2516: 721(ivec2) IAdd 2515 2513 + 2517: 2476(ptr) AccessChain 2469(size) 207 + 2518: 47(int) CompositeExtract 2516 0 + Store 2517 2518 + 2519: 2476(ptr) AccessChain 2469(size) 2491 + 2520: 47(int) CompositeExtract 2516 1 + Store 2519 2520 + 2521: 199 Load 201(s1DShadow) + 2522: 52(float) Load 565(lod) + 2523: 47(int) ConvertFToS 2522 + 2524: 198 Image 2521 + 2525: 47(int) ImageQuerySizeLod 2524 2523 + 2526: 2476(ptr) AccessChain 2469(size) 207 + 2527: 47(int) Load 2526 + 2528: 47(int) IAdd 2527 2525 + 2529: 2476(ptr) AccessChain 2469(size) 207 + Store 2529 2528 + 2530: 224 Load 226(s2DShadow) + 2531: 52(float) Load 565(lod) + 2532: 47(int) ConvertFToS 2531 + 2533: 223 Image 2530 + 2534: 721(ivec2) ImageQuerySizeLod 2533 2532 + 2535: 48(ivec4) Load 2469(size) + 2536: 721(ivec2) VectorShuffle 2535 2535 0 1 + 2537: 721(ivec2) IAdd 2536 2534 + 2538: 2476(ptr) AccessChain 2469(size) 207 + 2539: 47(int) CompositeExtract 2537 0 + Store 2538 2539 + 2540: 2476(ptr) AccessChain 2469(size) 2491 + 2541: 47(int) CompositeExtract 2537 1 + Store 2540 2541 + 2542: 245 Load 247(sCubeShadow) + 2543: 52(float) Load 565(lod) + 2544: 47(int) ConvertFToS 2543 + 2545: 244 Image 2542 + 2546: 721(ivec2) ImageQuerySizeLod 2545 2544 + 2547: 48(ivec4) Load 2469(size) + 2548: 721(ivec2) VectorShuffle 2547 2547 0 1 + 2549: 721(ivec2) IAdd 2548 2546 + 2550: 2476(ptr) AccessChain 2469(size) 207 + 2551: 47(int) CompositeExtract 2549 0 + Store 2550 2551 + 2552: 2476(ptr) AccessChain 2469(size) 2491 + 2553: 47(int) CompositeExtract 2549 1 + Store 2552 2553 + 2554: 299 Load 301(sCubeArray) + 2555: 52(float) Load 565(lod) + 2556: 47(int) ConvertFToS 2555 + 2557: 298 Image 2554 + 2558: 734(ivec3) ImageQuerySizeLod 2557 2556 + 2559: 48(ivec4) Load 2469(size) + 2560: 734(ivec3) VectorShuffle 2559 2559 0 1 2 + 2561: 734(ivec3) IAdd 2560 2558 + 2562: 2476(ptr) AccessChain 2469(size) 207 + 2563: 47(int) CompositeExtract 2561 0 + Store 2562 2563 + 2564: 2476(ptr) AccessChain 2469(size) 2491 + 2565: 47(int) CompositeExtract 2561 1 + Store 2564 2565 + 2566: 2476(ptr) AccessChain 2469(size) 2506 + 2567: 47(int) CompositeExtract 2561 2 + Store 2566 2567 + 2568: 391 Load 393(sCubeArrayShadow) + 2569: 52(float) Load 565(lod) + 2570: 47(int) ConvertFToS 2569 + 2571: 390 Image 2568 + 2572: 734(ivec3) ImageQuerySizeLod 2571 2570 + 2573: 48(ivec4) Load 2469(size) + 2574: 734(ivec3) VectorShuffle 2573 2573 0 1 2 + 2575: 734(ivec3) IAdd 2574 2572 + 2576: 2476(ptr) AccessChain 2469(size) 207 + 2577: 47(int) CompositeExtract 2575 0 + Store 2576 2577 + 2578: 2476(ptr) AccessChain 2469(size) 2491 + 2579: 47(int) CompositeExtract 2575 1 + Store 2578 2579 + 2580: 2476(ptr) AccessChain 2469(size) 2506 + 2581: 47(int) CompositeExtract 2575 2 + Store 2580 2581 + 2582: 357 Load 359(s2DRect) + 2583: 356 Image 2582 + 2584: 721(ivec2) ImageQuerySize 2583 + 2585: 48(ivec4) Load 2469(size) + 2586: 721(ivec2) VectorShuffle 2585 2585 0 1 + 2587: 721(ivec2) IAdd 2586 2584 + 2588: 2476(ptr) AccessChain 2469(size) 207 + 2589: 47(int) CompositeExtract 2587 0 + Store 2588 2589 + 2590: 2476(ptr) AccessChain 2469(size) 2491 + 2591: 47(int) CompositeExtract 2587 1 + Store 2590 2591 + 2592: 371 Load 373(s2DRectShadow) + 2593: 370 Image 2592 + 2594: 721(ivec2) ImageQuerySize 2593 + 2595: 48(ivec4) Load 2469(size) + 2596: 721(ivec2) VectorShuffle 2595 2595 0 1 + 2597: 721(ivec2) IAdd 2596 2594 + 2598: 2476(ptr) AccessChain 2469(size) 207 + 2599: 47(int) CompositeExtract 2597 0 + Store 2598 2599 + 2600: 2476(ptr) AccessChain 2469(size) 2491 + 2601: 47(int) CompositeExtract 2597 1 + Store 2600 2601 + 2602: 269 Load 271(s1DArray) + 2603: 52(float) Load 565(lod) + 2604: 47(int) ConvertFToS 2603 + 2605: 268 Image 2602 + 2606: 721(ivec2) ImageQuerySizeLod 2605 2604 + 2607: 48(ivec4) Load 2469(size) + 2608: 721(ivec2) VectorShuffle 2607 2607 0 1 + 2609: 721(ivec2) IAdd 2608 2606 + 2610: 2476(ptr) AccessChain 2469(size) 207 + 2611: 47(int) CompositeExtract 2609 0 + Store 2610 2611 + 2612: 2476(ptr) AccessChain 2469(size) 2491 + 2613: 47(int) CompositeExtract 2609 1 + Store 2612 2613 + 2614: 284 Load 286(s2DArray) + 2615: 52(float) Load 565(lod) + 2616: 47(int) ConvertFToS 2615 + 2617: 283 Image 2614 + 2618: 734(ivec3) ImageQuerySizeLod 2617 2616 + 2619: 48(ivec4) Load 2469(size) + 2620: 734(ivec3) VectorShuffle 2619 2619 0 1 2 + 2621: 734(ivec3) IAdd 2620 2618 + 2622: 2476(ptr) AccessChain 2469(size) 207 + 2623: 47(int) CompositeExtract 2621 0 + Store 2622 2623 + 2624: 2476(ptr) AccessChain 2469(size) 2491 + 2625: 47(int) CompositeExtract 2621 1 + Store 2624 2625 + 2626: 2476(ptr) AccessChain 2469(size) 2506 + 2627: 47(int) CompositeExtract 2621 2 + Store 2626 2627 + 2628: 316 Load 318(s1DArrayShadow) + 2629: 52(float) Load 565(lod) + 2630: 47(int) ConvertFToS 2629 + 2631: 315 Image 2628 + 2632: 721(ivec2) ImageQuerySizeLod 2631 2630 + 2633: 48(ivec4) Load 2469(size) + 2634: 721(ivec2) VectorShuffle 2633 2633 0 1 + 2635: 721(ivec2) IAdd 2634 2632 + 2636: 2476(ptr) AccessChain 2469(size) 207 + 2637: 47(int) CompositeExtract 2635 0 + Store 2636 2637 + 2638: 2476(ptr) AccessChain 2469(size) 2491 + 2639: 47(int) CompositeExtract 2635 1 + Store 2638 2639 + 2640: 337 Load 339(s2DArrayShadow) + 2641: 52(float) Load 565(lod) + 2642: 47(int) ConvertFToS 2641 + 2643: 336 Image 2640 + 2644: 734(ivec3) ImageQuerySizeLod 2643 2642 + 2645: 48(ivec4) Load 2469(size) + 2646: 734(ivec3) VectorShuffle 2645 2645 0 1 2 + 2647: 734(ivec3) IAdd 2646 2644 + 2648: 2476(ptr) AccessChain 2469(size) 207 + 2649: 47(int) CompositeExtract 2647 0 + Store 2648 2649 + 2650: 2476(ptr) AccessChain 2469(size) 2491 + 2651: 47(int) CompositeExtract 2647 1 + Store 2650 2651 + 2652: 2476(ptr) AccessChain 2469(size) 2506 + 2653: 47(int) CompositeExtract 2647 2 Store 2652 2653 - 2654: 2566(ptr) AccessChain 2559(size) 2581 - 2655: 47(int) CompositeExtract 2651 1 - Store 2654 2655 - 2656: 2566(ptr) AccessChain 2559(size) 2596 - 2657: 47(int) CompositeExtract 2651 2 - Store 2656 2657 - 2658: 391 Load 393(sCubeArrayShadow) - 2659: 52(float) Load 565(lod) - 2660: 47(int) ConvertFToS 2659 - 2661: 390 Image 2658 - 2662: 734(ivec3) ImageQuerySizeLod 2661 2660 - 2663: 48(ivec4) Load 2559(size) - 2664: 734(ivec3) VectorShuffle 2663 2663 0 1 2 - 2665: 734(ivec3) IAdd 2664 2662 - 2666: 2566(ptr) AccessChain 2559(size) 207 - 2667: 47(int) CompositeExtract 2665 0 - Store 2666 2667 - 2668: 2566(ptr) AccessChain 2559(size) 2581 - 2669: 47(int) CompositeExtract 2665 1 - Store 2668 2669 - 2670: 2566(ptr) AccessChain 2559(size) 2596 - 2671: 47(int) CompositeExtract 2665 2 - Store 2670 2671 - 2672: 357 Load 359(s2DRect) - 2673: 356 Image 2672 - 2674: 721(ivec2) ImageQuerySize 2673 - 2675: 48(ivec4) Load 2559(size) - 2676: 721(ivec2) VectorShuffle 2675 2675 0 1 - 2677: 721(ivec2) IAdd 2676 2674 - 2678: 2566(ptr) AccessChain 2559(size) 207 - 2679: 47(int) CompositeExtract 2677 0 - Store 2678 2679 - 2680: 2566(ptr) AccessChain 2559(size) 2581 - 2681: 47(int) CompositeExtract 2677 1 - Store 2680 2681 - 2682: 371 Load 373(s2DRectShadow) - 2683: 370 Image 2682 - 2684: 721(ivec2) ImageQuerySize 2683 - 2685: 48(ivec4) Load 2559(size) - 2686: 721(ivec2) VectorShuffle 2685 2685 0 1 - 2687: 721(ivec2) IAdd 2686 2684 - 2688: 2566(ptr) AccessChain 2559(size) 207 - 2689: 47(int) CompositeExtract 2687 0 - Store 2688 2689 - 2690: 2566(ptr) AccessChain 2559(size) 2581 - 2691: 47(int) CompositeExtract 2687 1 - Store 2690 2691 - 2692: 269 Load 271(s1DArray) - 2693: 52(float) Load 565(lod) - 2694: 47(int) ConvertFToS 2693 - 2695: 268 Image 2692 - 2696: 721(ivec2) ImageQuerySizeLod 2695 2694 - 2697: 48(ivec4) Load 2559(size) - 2698: 721(ivec2) VectorShuffle 2697 2697 0 1 - 2699: 721(ivec2) IAdd 2698 2696 - 2700: 2566(ptr) AccessChain 2559(size) 207 - 2701: 47(int) CompositeExtract 2699 0 - Store 2700 2701 - 2702: 2566(ptr) AccessChain 2559(size) 2581 - 2703: 47(int) CompositeExtract 2699 1 - Store 2702 2703 - 2704: 284 Load 286(s2DArray) - 2705: 52(float) Load 565(lod) - 2706: 47(int) ConvertFToS 2705 - 2707: 283 Image 2704 - 2708: 734(ivec3) ImageQuerySizeLod 2707 2706 - 2709: 48(ivec4) Load 2559(size) - 2710: 734(ivec3) VectorShuffle 2709 2709 0 1 2 - 2711: 734(ivec3) IAdd 2710 2708 - 2712: 2566(ptr) AccessChain 2559(size) 207 - 2713: 47(int) CompositeExtract 2711 0 - Store 2712 2713 - 2714: 2566(ptr) AccessChain 2559(size) 2581 - 2715: 47(int) CompositeExtract 2711 1 - Store 2714 2715 - 2716: 2566(ptr) AccessChain 2559(size) 2596 - 2717: 47(int) CompositeExtract 2711 2 - Store 2716 2717 - 2718: 316 Load 318(s1DArrayShadow) - 2719: 52(float) Load 565(lod) - 2720: 47(int) ConvertFToS 2719 - 2721: 315 Image 2718 - 2722: 721(ivec2) ImageQuerySizeLod 2721 2720 - 2723: 48(ivec4) Load 2559(size) - 2724: 721(ivec2) VectorShuffle 2723 2723 0 1 - 2725: 721(ivec2) IAdd 2724 2722 - 2726: 2566(ptr) AccessChain 2559(size) 207 - 2727: 47(int) CompositeExtract 2725 0 - Store 2726 2727 - 2728: 2566(ptr) AccessChain 2559(size) 2581 - 2729: 47(int) CompositeExtract 2725 1 - Store 2728 2729 - 2730: 337 Load 339(s2DArrayShadow) - 2731: 52(float) Load 565(lod) - 2732: 47(int) ConvertFToS 2731 - 2733: 336 Image 2730 - 2734: 734(ivec3) ImageQuerySizeLod 2733 2732 - 2735: 48(ivec4) Load 2559(size) - 2736: 734(ivec3) VectorShuffle 2735 2735 0 1 2 - 2737: 734(ivec3) IAdd 2736 2734 - 2738: 2566(ptr) AccessChain 2559(size) 207 - 2739: 47(int) CompositeExtract 2737 0 - Store 2738 2739 - 2740: 2566(ptr) AccessChain 2559(size) 2581 - 2741: 47(int) CompositeExtract 2737 1 - Store 2740 2741 - 2742: 2566(ptr) AccessChain 2559(size) 2596 - 2743: 47(int) CompositeExtract 2737 2 - Store 2742 2743 - 2744: 1298 Load 1300(sBuffer) - 2745: 1297 Image 2744 - 2746: 47(int) ImageQuerySize 2745 - 2747: 2566(ptr) AccessChain 2559(size) 207 - 2748: 47(int) Load 2747 - 2749: 47(int) IAdd 2748 2746 - 2750: 2566(ptr) AccessChain 2559(size) 207 - Store 2750 2749 - 2751: 1309 Load 1311(s2DMS) - 2752: 1308 Image 2751 - 2753: 721(ivec2) ImageQuerySize 2752 - 2754: 48(ivec4) Load 2559(size) - 2755: 721(ivec2) VectorShuffle 2754 2754 0 1 - 2756: 721(ivec2) IAdd 2755 2753 - 2757: 2566(ptr) AccessChain 2559(size) 207 - 2758: 47(int) CompositeExtract 2756 0 - Store 2757 2758 - 2759: 2566(ptr) AccessChain 2559(size) 2581 - 2760: 47(int) CompositeExtract 2756 1 - Store 2759 2760 - 2761: 1320 Load 1322(s2DMSArray) - 2762: 1319 Image 2761 - 2763: 734(ivec3) ImageQuerySize 2762 - 2764: 48(ivec4) Load 2559(size) - 2765: 734(ivec3) VectorShuffle 2764 2764 0 1 2 - 2766: 734(ivec3) IAdd 2765 2763 - 2767: 2566(ptr) AccessChain 2559(size) 207 - 2768: 47(int) CompositeExtract 2766 0 - Store 2767 2768 - 2769: 2566(ptr) AccessChain 2559(size) 2581 - 2770: 47(int) CompositeExtract 2766 1 - Store 2769 2770 - 2771: 2566(ptr) AccessChain 2559(size) 2596 - 2772: 47(int) CompositeExtract 2766 2 - Store 2771 2772 - 2773: 48(ivec4) Load 2559(size) - ReturnValue 2773 + 2654: 1298 Load 1300(sBuffer) + 2655: 1297 Image 2654 + 2656: 47(int) ImageQuerySize 2655 + 2657: 2476(ptr) AccessChain 2469(size) 207 + 2658: 47(int) Load 2657 + 2659: 47(int) IAdd 2658 2656 + 2660: 2476(ptr) AccessChain 2469(size) 207 + Store 2660 2659 + 2661: 1309 Load 1311(s2DMS) + 2662: 1308 Image 2661 + 2663: 721(ivec2) ImageQuerySize 2662 + 2664: 48(ivec4) Load 2469(size) + 2665: 721(ivec2) VectorShuffle 2664 2664 0 1 + 2666: 721(ivec2) IAdd 2665 2663 + 2667: 2476(ptr) AccessChain 2469(size) 207 + 2668: 47(int) CompositeExtract 2666 0 + Store 2667 2668 + 2669: 2476(ptr) AccessChain 2469(size) 2491 + 2670: 47(int) CompositeExtract 2666 1 + Store 2669 2670 + 2671: 1320 Load 1322(s2DMSArray) + 2672: 1319 Image 2671 + 2673: 734(ivec3) ImageQuerySize 2672 + 2674: 48(ivec4) Load 2469(size) + 2675: 734(ivec3) VectorShuffle 2674 2674 0 1 2 + 2676: 734(ivec3) IAdd 2675 2673 + 2677: 2476(ptr) AccessChain 2469(size) 207 + 2678: 47(int) CompositeExtract 2676 0 + Store 2677 2678 + 2679: 2476(ptr) AccessChain 2469(size) 2491 + 2680: 47(int) CompositeExtract 2676 1 + Store 2679 2680 + 2681: 2476(ptr) AccessChain 2469(size) 2506 + 2682: 47(int) CompositeExtract 2676 2 + Store 2681 2682 + 2683: 48(ivec4) Load 2469(size) + ReturnValue 2683 FunctionEnd 55(testTextureQueryLod(): 53(fvec2) Function None 54 56: Label - 2777(lod): 2776(ptr) Variable Function - Store 2777(lod) 2779 - 2780: 123 Load 125(s1D) - 2781: 52(float) Load 128(c1) + 2687(lod): 2686(ptr) Variable Function + Store 2687(lod) 2689 + 2690: 123 Load 125(s1D) + 2691: 52(float) Load 128(c1) + 2692: 53(fvec2) ImageQueryLod 2690 2691 + 2693: 53(fvec2) Load 2687(lod) + 2694: 53(fvec2) FAdd 2693 2692 + Store 2687(lod) 2694 + 2695: 123 Load 125(s1D) + 2696:6(float16_t) Load 135(f16c1) + 2697:154(f16vec2) ImageQueryLod 2695 2696 + 2698: 53(fvec2) Load 2687(lod) + 2699: 53(fvec2) FAdd 2698 2697 + Store 2687(lod) 2699 + 2700: 143 Load 145(s2D) + 2701: 53(fvec2) Load 148(c2) + 2702: 53(fvec2) ImageQueryLod 2700 2701 + 2703: 53(fvec2) Load 2687(lod) + 2704: 53(fvec2) FAdd 2703 2702 + Store 2687(lod) 2704 + 2705: 143 Load 145(s2D) + 2706:154(f16vec2) Load 156(f16c2) + 2707:154(f16vec2) ImageQueryLod 2705 2706 + 2708: 53(fvec2) Load 2687(lod) + 2709: 53(fvec2) FAdd 2708 2707 + Store 2687(lod) 2709 + 2710: 163 Load 165(s3D) + 2711: 167(fvec3) Load 169(c3) + 2712: 53(fvec2) ImageQueryLod 2710 2711 + 2713: 53(fvec2) Load 2687(lod) + 2714: 53(fvec2) FAdd 2713 2712 + Store 2687(lod) 2714 + 2715: 163 Load 165(s3D) + 2716:175(f16vec3) Load 177(f16c3) + 2717:154(f16vec2) ImageQueryLod 2715 2716 + 2718: 53(fvec2) Load 2687(lod) + 2719: 53(fvec2) FAdd 2718 2717 + Store 2687(lod) 2719 + 2720: 184 Load 186(sCube) + 2721: 167(fvec3) Load 169(c3) + 2722: 53(fvec2) ImageQueryLod 2720 2721 + 2723: 53(fvec2) Load 2687(lod) + 2724: 53(fvec2) FAdd 2723 2722 + Store 2687(lod) 2724 + 2725: 184 Load 186(sCube) + 2726:175(f16vec3) Load 177(f16c3) + 2727:154(f16vec2) ImageQueryLod 2725 2726 + 2728: 53(fvec2) Load 2687(lod) + 2729: 53(fvec2) FAdd 2728 2727 + Store 2687(lod) 2729 + 2730: 269 Load 271(s1DArray) + 2731: 52(float) Load 128(c1) + 2732: 53(fvec2) ImageQueryLod 2730 2731 + 2733: 53(fvec2) Load 2687(lod) + 2734: 53(fvec2) FAdd 2733 2732 + Store 2687(lod) 2734 + 2735: 269 Load 271(s1DArray) + 2736:6(float16_t) Load 135(f16c1) + 2737:154(f16vec2) ImageQueryLod 2735 2736 + 2738: 53(fvec2) Load 2687(lod) + 2739: 53(fvec2) FAdd 2738 2737 + Store 2687(lod) 2739 + 2740: 284 Load 286(s2DArray) + 2741: 53(fvec2) Load 148(c2) + 2742: 53(fvec2) ImageQueryLod 2740 2741 + 2743: 53(fvec2) Load 2687(lod) + 2744: 53(fvec2) FAdd 2743 2742 + Store 2687(lod) 2744 + 2745: 284 Load 286(s2DArray) + 2746:154(f16vec2) Load 156(f16c2) + 2747:154(f16vec2) ImageQueryLod 2745 2746 + 2748: 53(fvec2) Load 2687(lod) + 2749: 53(fvec2) FAdd 2748 2747 + Store 2687(lod) 2749 + 2750: 299 Load 301(sCubeArray) + 2751: 167(fvec3) Load 169(c3) + 2752: 53(fvec2) ImageQueryLod 2750 2751 + 2753: 53(fvec2) Load 2687(lod) + 2754: 53(fvec2) FAdd 2753 2752 + Store 2687(lod) 2754 + 2755: 299 Load 301(sCubeArray) + 2756:175(f16vec3) Load 177(f16c3) + 2757:154(f16vec2) ImageQueryLod 2755 2756 + 2758: 53(fvec2) Load 2687(lod) + 2759: 53(fvec2) FAdd 2758 2757 + Store 2687(lod) 2759 + 2760: 199 Load 201(s1DShadow) + 2761: 52(float) Load 128(c1) + 2762: 53(fvec2) ImageQueryLod 2760 2761 + 2763: 53(fvec2) Load 2687(lod) + 2764: 53(fvec2) FAdd 2763 2762 + Store 2687(lod) 2764 + 2765: 199 Load 201(s1DShadow) + 2766:6(float16_t) Load 135(f16c1) + 2767:154(f16vec2) ImageQueryLod 2765 2766 + 2768: 53(fvec2) Load 2687(lod) + 2769: 53(fvec2) FAdd 2768 2767 + Store 2687(lod) 2769 + 2770: 224 Load 226(s2DShadow) + 2771: 53(fvec2) Load 148(c2) + 2772: 53(fvec2) ImageQueryLod 2770 2771 + 2773: 53(fvec2) Load 2687(lod) + 2774: 53(fvec2) FAdd 2773 2772 + Store 2687(lod) 2774 + 2775: 224 Load 226(s2DShadow) + 2776:154(f16vec2) Load 156(f16c2) + 2777:154(f16vec2) ImageQueryLod 2775 2776 + 2778: 53(fvec2) Load 2687(lod) + 2779: 53(fvec2) FAdd 2778 2777 + Store 2687(lod) 2779 + 2780: 391 Load 393(sCubeArrayShadow) + 2781: 167(fvec3) Load 169(c3) 2782: 53(fvec2) ImageQueryLod 2780 2781 - 2783: 53(fvec2) Load 2777(lod) + 2783: 53(fvec2) Load 2687(lod) 2784: 53(fvec2) FAdd 2783 2782 - Store 2777(lod) 2784 - 2785: 123 Load 125(s1D) - 2786:6(float16_t) Load 135(f16c1) + Store 2687(lod) 2784 + 2785: 391 Load 393(sCubeArrayShadow) + 2786:175(f16vec3) Load 177(f16c3) 2787:154(f16vec2) ImageQueryLod 2785 2786 - 2788: 53(fvec2) Load 2777(lod) + 2788: 53(fvec2) Load 2687(lod) 2789: 53(fvec2) FAdd 2788 2787 - Store 2777(lod) 2789 - 2790: 143 Load 145(s2D) - 2791: 53(fvec2) Load 148(c2) + Store 2687(lod) 2789 + 2790: 316 Load 318(s1DArrayShadow) + 2791: 52(float) Load 128(c1) 2792: 53(fvec2) ImageQueryLod 2790 2791 - 2793: 53(fvec2) Load 2777(lod) + 2793: 53(fvec2) Load 2687(lod) 2794: 53(fvec2) FAdd 2793 2792 - Store 2777(lod) 2794 - 2795: 143 Load 145(s2D) - 2796:154(f16vec2) Load 156(f16c2) + Store 2687(lod) 2794 + 2795: 316 Load 318(s1DArrayShadow) + 2796:6(float16_t) Load 135(f16c1) 2797:154(f16vec2) ImageQueryLod 2795 2796 - 2798: 53(fvec2) Load 2777(lod) + 2798: 53(fvec2) Load 2687(lod) 2799: 53(fvec2) FAdd 2798 2797 - Store 2777(lod) 2799 - 2800: 163 Load 165(s3D) - 2801: 167(fvec3) Load 169(c3) + Store 2687(lod) 2799 + 2800: 337 Load 339(s2DArrayShadow) + 2801: 53(fvec2) Load 148(c2) 2802: 53(fvec2) ImageQueryLod 2800 2801 - 2803: 53(fvec2) Load 2777(lod) + 2803: 53(fvec2) Load 2687(lod) 2804: 53(fvec2) FAdd 2803 2802 - Store 2777(lod) 2804 - 2805: 163 Load 165(s3D) - 2806:175(f16vec3) Load 177(f16c3) + Store 2687(lod) 2804 + 2805: 337 Load 339(s2DArrayShadow) + 2806:154(f16vec2) Load 156(f16c2) 2807:154(f16vec2) ImageQueryLod 2805 2806 - 2808: 53(fvec2) Load 2777(lod) + 2808: 53(fvec2) Load 2687(lod) 2809: 53(fvec2) FAdd 2808 2807 - Store 2777(lod) 2809 - 2810: 184 Load 186(sCube) + Store 2687(lod) 2809 + 2810: 391 Load 393(sCubeArrayShadow) 2811: 167(fvec3) Load 169(c3) 2812: 53(fvec2) ImageQueryLod 2810 2811 - 2813: 53(fvec2) Load 2777(lod) + 2813: 53(fvec2) Load 2687(lod) 2814: 53(fvec2) FAdd 2813 2812 - Store 2777(lod) 2814 - 2815: 184 Load 186(sCube) + Store 2687(lod) 2814 + 2815: 391 Load 393(sCubeArrayShadow) 2816:175(f16vec3) Load 177(f16c3) 2817:154(f16vec2) ImageQueryLod 2815 2816 - 2818: 53(fvec2) Load 2777(lod) + 2818: 53(fvec2) Load 2687(lod) 2819: 53(fvec2) FAdd 2818 2817 - Store 2777(lod) 2819 - 2820: 269 Load 271(s1DArray) - 2821: 52(float) Load 128(c1) - 2822: 53(fvec2) ImageQueryLod 2820 2821 - 2823: 53(fvec2) Load 2777(lod) - 2824: 53(fvec2) FAdd 2823 2822 - Store 2777(lod) 2824 - 2825: 269 Load 271(s1DArray) - 2826:6(float16_t) Load 135(f16c1) - 2827:154(f16vec2) ImageQueryLod 2825 2826 - 2828: 53(fvec2) Load 2777(lod) - 2829: 53(fvec2) FAdd 2828 2827 - Store 2777(lod) 2829 - 2830: 284 Load 286(s2DArray) - 2831: 53(fvec2) Load 148(c2) - 2832: 53(fvec2) ImageQueryLod 2830 2831 - 2833: 53(fvec2) Load 2777(lod) - 2834: 53(fvec2) FAdd 2833 2832 - Store 2777(lod) 2834 - 2835: 284 Load 286(s2DArray) - 2836:154(f16vec2) Load 156(f16c2) - 2837:154(f16vec2) ImageQueryLod 2835 2836 - 2838: 53(fvec2) Load 2777(lod) - 2839: 53(fvec2) FAdd 2838 2837 - Store 2777(lod) 2839 - 2840: 299 Load 301(sCubeArray) - 2841: 167(fvec3) Load 169(c3) - 2842: 53(fvec2) ImageQueryLod 2840 2841 - 2843: 53(fvec2) Load 2777(lod) - 2844: 53(fvec2) FAdd 2843 2842 - Store 2777(lod) 2844 - 2845: 299 Load 301(sCubeArray) - 2846:175(f16vec3) Load 177(f16c3) - 2847:154(f16vec2) ImageQueryLod 2845 2846 - 2848: 53(fvec2) Load 2777(lod) - 2849: 53(fvec2) FAdd 2848 2847 - Store 2777(lod) 2849 - 2850: 199 Load 201(s1DShadow) - 2851: 52(float) Load 128(c1) - 2852: 53(fvec2) ImageQueryLod 2850 2851 - 2853: 53(fvec2) Load 2777(lod) - 2854: 53(fvec2) FAdd 2853 2852 - Store 2777(lod) 2854 - 2855: 199 Load 201(s1DShadow) - 2856:6(float16_t) Load 135(f16c1) - 2857:154(f16vec2) ImageQueryLod 2855 2856 - 2858: 53(fvec2) Load 2777(lod) - 2859: 53(fvec2) FAdd 2858 2857 - Store 2777(lod) 2859 - 2860: 224 Load 226(s2DShadow) - 2861: 53(fvec2) Load 148(c2) - 2862: 53(fvec2) ImageQueryLod 2860 2861 - 2863: 53(fvec2) Load 2777(lod) - 2864: 53(fvec2) FAdd 2863 2862 - Store 2777(lod) 2864 - 2865: 224 Load 226(s2DShadow) - 2866:154(f16vec2) Load 156(f16c2) - 2867:154(f16vec2) ImageQueryLod 2865 2866 - 2868: 53(fvec2) Load 2777(lod) - 2869: 53(fvec2) FAdd 2868 2867 - Store 2777(lod) 2869 - 2870: 391 Load 393(sCubeArrayShadow) - 2871: 167(fvec3) Load 169(c3) - 2872: 53(fvec2) ImageQueryLod 2870 2871 - 2873: 53(fvec2) Load 2777(lod) - 2874: 53(fvec2) FAdd 2873 2872 - Store 2777(lod) 2874 - 2875: 391 Load 393(sCubeArrayShadow) - 2876:175(f16vec3) Load 177(f16c3) - 2877:154(f16vec2) ImageQueryLod 2875 2876 - 2878: 53(fvec2) Load 2777(lod) - 2879: 53(fvec2) FAdd 2878 2877 - Store 2777(lod) 2879 - 2880: 316 Load 318(s1DArrayShadow) - 2881: 52(float) Load 128(c1) - 2882: 53(fvec2) ImageQueryLod 2880 2881 - 2883: 53(fvec2) Load 2777(lod) - 2884: 53(fvec2) FAdd 2883 2882 - Store 2777(lod) 2884 - 2885: 316 Load 318(s1DArrayShadow) - 2886:6(float16_t) Load 135(f16c1) - 2887:154(f16vec2) ImageQueryLod 2885 2886 - 2888: 53(fvec2) Load 2777(lod) - 2889: 53(fvec2) FAdd 2888 2887 - Store 2777(lod) 2889 - 2890: 337 Load 339(s2DArrayShadow) - 2891: 53(fvec2) Load 148(c2) - 2892: 53(fvec2) ImageQueryLod 2890 2891 - 2893: 53(fvec2) Load 2777(lod) - 2894: 53(fvec2) FAdd 2893 2892 - Store 2777(lod) 2894 - 2895: 337 Load 339(s2DArrayShadow) - 2896:154(f16vec2) Load 156(f16c2) - 2897:154(f16vec2) ImageQueryLod 2895 2896 - 2898: 53(fvec2) Load 2777(lod) - 2899: 53(fvec2) FAdd 2898 2897 - Store 2777(lod) 2899 - 2900: 391 Load 393(sCubeArrayShadow) - 2901: 167(fvec3) Load 169(c3) - 2902: 53(fvec2) ImageQueryLod 2900 2901 - 2903: 53(fvec2) Load 2777(lod) - 2904: 53(fvec2) FAdd 2903 2902 - Store 2777(lod) 2904 - 2905: 391 Load 393(sCubeArrayShadow) - 2906:175(f16vec3) Load 177(f16c3) - 2907:154(f16vec2) ImageQueryLod 2905 2906 - 2908: 53(fvec2) Load 2777(lod) - 2909: 53(fvec2) FAdd 2908 2907 - Store 2777(lod) 2909 - 2910: 53(fvec2) Load 2777(lod) - ReturnValue 2910 + Store 2687(lod) 2819 + 2820: 53(fvec2) Load 2687(lod) + ReturnValue 2820 FunctionEnd 58(testTextureQueryLevels(): 47(int) Function None 57 59: Label - 2913(levels): 2566(ptr) Variable Function - Store 2913(levels) 2187 - 2914: 123 Load 125(s1D) - 2915: 122 Image 2914 - 2916: 47(int) ImageQueryLevels 2915 - 2917: 47(int) Load 2913(levels) - 2918: 47(int) IAdd 2917 2916 - Store 2913(levels) 2918 - 2919: 143 Load 145(s2D) - 2920: 142 Image 2919 - 2921: 47(int) ImageQueryLevels 2920 - 2922: 47(int) Load 2913(levels) - 2923: 47(int) IAdd 2922 2921 - Store 2913(levels) 2923 - 2924: 163 Load 165(s3D) - 2925: 162 Image 2924 - 2926: 47(int) ImageQueryLevels 2925 - 2927: 47(int) Load 2913(levels) - 2928: 47(int) IAdd 2927 2926 - Store 2913(levels) 2928 - 2929: 184 Load 186(sCube) - 2930: 183 Image 2929 - 2931: 47(int) ImageQueryLevels 2930 - 2932: 47(int) Load 2913(levels) - 2933: 47(int) IAdd 2932 2931 - Store 2913(levels) 2933 - 2934: 199 Load 201(s1DShadow) - 2935: 198 Image 2934 - 2936: 47(int) ImageQueryLevels 2935 - 2937: 47(int) Load 2913(levels) - 2938: 47(int) IAdd 2937 2936 - Store 2913(levels) 2938 - 2939: 224 Load 226(s2DShadow) - 2940: 223 Image 2939 - 2941: 47(int) ImageQueryLevels 2940 - 2942: 47(int) Load 2913(levels) - 2943: 47(int) IAdd 2942 2941 - Store 2913(levels) 2943 - 2944: 245 Load 247(sCubeShadow) - 2945: 244 Image 2944 - 2946: 47(int) ImageQueryLevels 2945 - 2947: 47(int) Load 2913(levels) - 2948: 47(int) IAdd 2947 2946 - Store 2913(levels) 2948 - 2949: 299 Load 301(sCubeArray) - 2950: 298 Image 2949 - 2951: 47(int) ImageQueryLevels 2950 - 2952: 47(int) Load 2913(levels) - 2953: 47(int) IAdd 2952 2951 - Store 2913(levels) 2953 - 2954: 391 Load 393(sCubeArrayShadow) - 2955: 390 Image 2954 - 2956: 47(int) ImageQueryLevels 2955 - 2957: 47(int) Load 2913(levels) - 2958: 47(int) IAdd 2957 2956 - Store 2913(levels) 2958 - 2959: 269 Load 271(s1DArray) - 2960: 268 Image 2959 - 2961: 47(int) ImageQueryLevels 2960 - 2962: 47(int) Load 2913(levels) - 2963: 47(int) IAdd 2962 2961 - Store 2913(levels) 2963 - 2964: 284 Load 286(s2DArray) - 2965: 283 Image 2964 - 2966: 47(int) ImageQueryLevels 2965 - 2967: 47(int) Load 2913(levels) - 2968: 47(int) IAdd 2967 2966 - Store 2913(levels) 2968 - 2969: 316 Load 318(s1DArrayShadow) - 2970: 315 Image 2969 - 2971: 47(int) ImageQueryLevels 2970 - 2972: 47(int) Load 2913(levels) - 2973: 47(int) IAdd 2972 2971 - Store 2913(levels) 2973 - 2974: 337 Load 339(s2DArrayShadow) - 2975: 336 Image 2974 - 2976: 47(int) ImageQueryLevels 2975 - 2977: 47(int) Load 2913(levels) - 2978: 47(int) IAdd 2977 2976 - Store 2913(levels) 2978 - 2979: 47(int) Load 2913(levels) - ReturnValue 2979 + 2823(levels): 2476(ptr) Variable Function + Store 2823(levels) 2097 + 2824: 123 Load 125(s1D) + 2825: 122 Image 2824 + 2826: 47(int) ImageQueryLevels 2825 + 2827: 47(int) Load 2823(levels) + 2828: 47(int) IAdd 2827 2826 + Store 2823(levels) 2828 + 2829: 143 Load 145(s2D) + 2830: 142 Image 2829 + 2831: 47(int) ImageQueryLevels 2830 + 2832: 47(int) Load 2823(levels) + 2833: 47(int) IAdd 2832 2831 + Store 2823(levels) 2833 + 2834: 163 Load 165(s3D) + 2835: 162 Image 2834 + 2836: 47(int) ImageQueryLevels 2835 + 2837: 47(int) Load 2823(levels) + 2838: 47(int) IAdd 2837 2836 + Store 2823(levels) 2838 + 2839: 184 Load 186(sCube) + 2840: 183 Image 2839 + 2841: 47(int) ImageQueryLevels 2840 + 2842: 47(int) Load 2823(levels) + 2843: 47(int) IAdd 2842 2841 + Store 2823(levels) 2843 + 2844: 199 Load 201(s1DShadow) + 2845: 198 Image 2844 + 2846: 47(int) ImageQueryLevels 2845 + 2847: 47(int) Load 2823(levels) + 2848: 47(int) IAdd 2847 2846 + Store 2823(levels) 2848 + 2849: 224 Load 226(s2DShadow) + 2850: 223 Image 2849 + 2851: 47(int) ImageQueryLevels 2850 + 2852: 47(int) Load 2823(levels) + 2853: 47(int) IAdd 2852 2851 + Store 2823(levels) 2853 + 2854: 245 Load 247(sCubeShadow) + 2855: 244 Image 2854 + 2856: 47(int) ImageQueryLevels 2855 + 2857: 47(int) Load 2823(levels) + 2858: 47(int) IAdd 2857 2856 + Store 2823(levels) 2858 + 2859: 299 Load 301(sCubeArray) + 2860: 298 Image 2859 + 2861: 47(int) ImageQueryLevels 2860 + 2862: 47(int) Load 2823(levels) + 2863: 47(int) IAdd 2862 2861 + Store 2823(levels) 2863 + 2864: 391 Load 393(sCubeArrayShadow) + 2865: 390 Image 2864 + 2866: 47(int) ImageQueryLevels 2865 + 2867: 47(int) Load 2823(levels) + 2868: 47(int) IAdd 2867 2866 + Store 2823(levels) 2868 + 2869: 269 Load 271(s1DArray) + 2870: 268 Image 2869 + 2871: 47(int) ImageQueryLevels 2870 + 2872: 47(int) Load 2823(levels) + 2873: 47(int) IAdd 2872 2871 + Store 2823(levels) 2873 + 2874: 284 Load 286(s2DArray) + 2875: 283 Image 2874 + 2876: 47(int) ImageQueryLevels 2875 + 2877: 47(int) Load 2823(levels) + 2878: 47(int) IAdd 2877 2876 + Store 2823(levels) 2878 + 2879: 316 Load 318(s1DArrayShadow) + 2880: 315 Image 2879 + 2881: 47(int) ImageQueryLevels 2880 + 2882: 47(int) Load 2823(levels) + 2883: 47(int) IAdd 2882 2881 + Store 2823(levels) 2883 + 2884: 337 Load 339(s2DArrayShadow) + 2885: 336 Image 2884 + 2886: 47(int) ImageQueryLevels 2885 + 2887: 47(int) Load 2823(levels) + 2888: 47(int) IAdd 2887 2886 + Store 2823(levels) 2888 + 2889: 47(int) Load 2823(levels) + ReturnValue 2889 FunctionEnd 60(testTextureSamples(): 47(int) Function None 57 61: Label - 2982(samples): 2566(ptr) Variable Function - Store 2982(samples) 2187 - 2983: 1309 Load 1311(s2DMS) - 2984: 1308 Image 2983 - 2985: 47(int) ImageQuerySamples 2984 - 2986: 47(int) Load 2982(samples) - 2987: 47(int) IAdd 2986 2985 - Store 2982(samples) 2987 - 2988: 1320 Load 1322(s2DMSArray) - 2989: 1319 Image 2988 - 2990: 47(int) ImageQuerySamples 2989 - 2991: 47(int) Load 2982(samples) - 2992: 47(int) IAdd 2991 2990 - Store 2982(samples) 2992 - 2993: 47(int) Load 2982(samples) - ReturnValue 2993 + 2892(samples): 2476(ptr) Variable Function + Store 2892(samples) 2097 + 2893: 1309 Load 1311(s2DMS) + 2894: 1308 Image 2893 + 2895: 47(int) ImageQuerySamples 2894 + 2896: 47(int) Load 2892(samples) + 2897: 47(int) IAdd 2896 2895 + Store 2892(samples) 2897 + 2898: 1320 Load 1322(s2DMSArray) + 2899: 1319 Image 2898 + 2900: 47(int) ImageQuerySamples 2899 + 2901: 47(int) Load 2892(samples) + 2902: 47(int) IAdd 2901 2900 + Store 2892(samples) 2902 + 2903: 47(int) Load 2892(samples) + ReturnValue 2903 FunctionEnd 62(testImageLoad(): 7(f16vec4) Function None 8 63: Label - 2996(texel): 64(ptr) Variable Function - Store 2996(texel) 121 - 3000: 2997 Load 2999(i1D) - 3001: 52(float) Load 128(c1) - 3002: 47(int) ConvertFToS 3001 - 3003: 7(f16vec4) ImageRead 3000 3002 - 3004: 7(f16vec4) Load 2996(texel) + 2906(texel): 64(ptr) Variable Function + Store 2906(texel) 121 + 2910: 2907 Load 2909(i1D) + 2911: 52(float) Load 128(c1) + 2912: 47(int) ConvertFToS 2911 + 2913: 7(f16vec4) ImageRead 2910 2912 + 2914: 7(f16vec4) Load 2906(texel) + 2915: 7(f16vec4) FAdd 2914 2913 + Store 2906(texel) 2915 + 2919: 2916 Load 2918(i2D) + 2920: 53(fvec2) Load 148(c2) + 2921: 721(ivec2) ConvertFToS 2920 + 2922: 7(f16vec4) ImageRead 2919 2921 + 2923: 7(f16vec4) Load 2906(texel) + 2924: 7(f16vec4) FAdd 2923 2922 + Store 2906(texel) 2924 + 2928: 2925 Load 2927(i3D) + 2929: 167(fvec3) Load 169(c3) + 2930: 734(ivec3) ConvertFToS 2929 + 2931: 7(f16vec4) ImageRead 2928 2930 + 2932: 7(f16vec4) Load 2906(texel) + 2933: 7(f16vec4) FAdd 2932 2931 + Store 2906(texel) 2933 + 2937: 2934 Load 2936(i2DRect) + 2938: 53(fvec2) Load 148(c2) + 2939: 721(ivec2) ConvertFToS 2938 + 2940: 7(f16vec4) ImageRead 2937 2939 + 2941: 7(f16vec4) Load 2906(texel) + 2942: 7(f16vec4) FAdd 2941 2940 + Store 2906(texel) 2942 + 2946: 2943 Load 2945(iCube) + 2947: 167(fvec3) Load 169(c3) + 2948: 734(ivec3) ConvertFToS 2947 + 2949: 7(f16vec4) ImageRead 2946 2948 + 2950: 7(f16vec4) Load 2906(texel) + 2951: 7(f16vec4) FAdd 2950 2949 + Store 2906(texel) 2951 + 2955: 2952 Load 2954(iBuffer) + 2956: 52(float) Load 128(c1) + 2957: 47(int) ConvertFToS 2956 + 2958: 7(f16vec4) ImageRead 2955 2957 + 2959: 7(f16vec4) Load 2906(texel) + 2960: 7(f16vec4) FAdd 2959 2958 + Store 2906(texel) 2960 + 2964: 2961 Load 2963(i1DArray) + 2965: 53(fvec2) Load 148(c2) + 2966: 721(ivec2) ConvertFToS 2965 + 2967: 7(f16vec4) ImageRead 2964 2966 + 2968: 7(f16vec4) Load 2906(texel) + 2969: 7(f16vec4) FAdd 2968 2967 + Store 2906(texel) 2969 + 2973: 2970 Load 2972(i2DArray) + 2974: 167(fvec3) Load 169(c3) + 2975: 734(ivec3) ConvertFToS 2974 + 2976: 7(f16vec4) ImageRead 2973 2975 + 2977: 7(f16vec4) Load 2906(texel) + 2978: 7(f16vec4) FAdd 2977 2976 + Store 2906(texel) 2978 + 2982: 2979 Load 2981(iCubeArray) + 2983: 167(fvec3) Load 169(c3) + 2984: 734(ivec3) ConvertFToS 2983 + 2985: 7(f16vec4) ImageRead 2982 2984 + 2986: 7(f16vec4) Load 2906(texel) + 2987: 7(f16vec4) FAdd 2986 2985 + Store 2906(texel) 2987 + 2991: 2988 Load 2990(i2DMS) + 2992: 53(fvec2) Load 148(c2) + 2993: 721(ivec2) ConvertFToS 2992 + 2994: 7(f16vec4) ImageRead 2991 2993 Sample 709 + 2995: 7(f16vec4) Load 2906(texel) + 2996: 7(f16vec4) FAdd 2995 2994 + Store 2906(texel) 2996 + 3000: 2997 Load 2999(i2DMSArray) + 3001: 167(fvec3) Load 169(c3) + 3002: 734(ivec3) ConvertFToS 3001 + 3003: 7(f16vec4) ImageRead 3000 3002 Sample 709 + 3004: 7(f16vec4) Load 2906(texel) 3005: 7(f16vec4) FAdd 3004 3003 - Store 2996(texel) 3005 - 3009: 3006 Load 3008(i2D) - 3010: 53(fvec2) Load 148(c2) - 3011: 721(ivec2) ConvertFToS 3010 - 3012: 7(f16vec4) ImageRead 3009 3011 - 3013: 7(f16vec4) Load 2996(texel) - 3014: 7(f16vec4) FAdd 3013 3012 - Store 2996(texel) 3014 - 3018: 3015 Load 3017(i3D) - 3019: 167(fvec3) Load 169(c3) - 3020: 734(ivec3) ConvertFToS 3019 - 3021: 7(f16vec4) ImageRead 3018 3020 - 3022: 7(f16vec4) Load 2996(texel) - 3023: 7(f16vec4) FAdd 3022 3021 - Store 2996(texel) 3023 - 3027: 3024 Load 3026(i2DRect) - 3028: 53(fvec2) Load 148(c2) - 3029: 721(ivec2) ConvertFToS 3028 - 3030: 7(f16vec4) ImageRead 3027 3029 - 3031: 7(f16vec4) Load 2996(texel) - 3032: 7(f16vec4) FAdd 3031 3030 - Store 2996(texel) 3032 - 3036: 3033 Load 3035(iCube) - 3037: 167(fvec3) Load 169(c3) - 3038: 734(ivec3) ConvertFToS 3037 - 3039: 7(f16vec4) ImageRead 3036 3038 - 3040: 7(f16vec4) Load 2996(texel) - 3041: 7(f16vec4) FAdd 3040 3039 - Store 2996(texel) 3041 - 3045: 3042 Load 3044(iBuffer) - 3046: 52(float) Load 128(c1) - 3047: 47(int) ConvertFToS 3046 - 3048: 7(f16vec4) ImageRead 3045 3047 - 3049: 7(f16vec4) Load 2996(texel) - 3050: 7(f16vec4) FAdd 3049 3048 - Store 2996(texel) 3050 - 3054: 3051 Load 3053(i1DArray) - 3055: 53(fvec2) Load 148(c2) - 3056: 721(ivec2) ConvertFToS 3055 - 3057: 7(f16vec4) ImageRead 3054 3056 - 3058: 7(f16vec4) Load 2996(texel) - 3059: 7(f16vec4) FAdd 3058 3057 - Store 2996(texel) 3059 - 3063: 3060 Load 3062(i2DArray) - 3064: 167(fvec3) Load 169(c3) - 3065: 734(ivec3) ConvertFToS 3064 - 3066: 7(f16vec4) ImageRead 3063 3065 - 3067: 7(f16vec4) Load 2996(texel) - 3068: 7(f16vec4) FAdd 3067 3066 - Store 2996(texel) 3068 - 3072: 3069 Load 3071(iCubeArray) - 3073: 167(fvec3) Load 169(c3) - 3074: 734(ivec3) ConvertFToS 3073 - 3075: 7(f16vec4) ImageRead 3072 3074 - 3076: 7(f16vec4) Load 2996(texel) - 3077: 7(f16vec4) FAdd 3076 3075 - Store 2996(texel) 3077 - 3081: 3078 Load 3080(i2DMS) - 3082: 53(fvec2) Load 148(c2) - 3083: 721(ivec2) ConvertFToS 3082 - 3084: 7(f16vec4) ImageRead 3081 3083 Sample 709 - 3085: 7(f16vec4) Load 2996(texel) - 3086: 7(f16vec4) FAdd 3085 3084 - Store 2996(texel) 3086 - 3090: 3087 Load 3089(i2DMSArray) - 3091: 167(fvec3) Load 169(c3) - 3092: 734(ivec3) ConvertFToS 3091 - 3093: 7(f16vec4) ImageRead 3090 3092 Sample 709 - 3094: 7(f16vec4) Load 2996(texel) - 3095: 7(f16vec4) FAdd 3094 3093 - Store 2996(texel) 3095 - 3096: 7(f16vec4) Load 2996(texel) - ReturnValue 3096 + Store 2906(texel) 3005 + 3006: 7(f16vec4) Load 2906(texel) + ReturnValue 3006 FunctionEnd 67(testImageStore(vf164;): 2 Function None 65 66(data): 64(ptr) FunctionParameter 68: Label - 3099: 2997 Load 2999(i1D) - 3100: 52(float) Load 128(c1) - 3101: 47(int) ConvertFToS 3100 - 3102: 7(f16vec4) Load 66(data) - ImageWrite 3099 3101 3102 - 3103: 3006 Load 3008(i2D) - 3104: 53(fvec2) Load 148(c2) - 3105: 721(ivec2) ConvertFToS 3104 - 3106: 7(f16vec4) Load 66(data) - ImageWrite 3103 3105 3106 - 3107: 3015 Load 3017(i3D) - 3108: 167(fvec3) Load 169(c3) - 3109: 734(ivec3) ConvertFToS 3108 - 3110: 7(f16vec4) Load 66(data) - ImageWrite 3107 3109 3110 - 3111: 3024 Load 3026(i2DRect) - 3112: 53(fvec2) Load 148(c2) - 3113: 721(ivec2) ConvertFToS 3112 - 3114: 7(f16vec4) Load 66(data) - ImageWrite 3111 3113 3114 - 3115: 3033 Load 3035(iCube) - 3116: 167(fvec3) Load 169(c3) - 3117: 734(ivec3) ConvertFToS 3116 - 3118: 7(f16vec4) Load 66(data) - ImageWrite 3115 3117 3118 - 3119: 3042 Load 3044(iBuffer) - 3120: 52(float) Load 128(c1) - 3121: 47(int) ConvertFToS 3120 - 3122: 7(f16vec4) Load 66(data) - ImageWrite 3119 3121 3122 - 3123: 3051 Load 3053(i1DArray) - 3124: 53(fvec2) Load 148(c2) - 3125: 721(ivec2) ConvertFToS 3124 - 3126: 7(f16vec4) Load 66(data) - ImageWrite 3123 3125 3126 - 3127: 3060 Load 3062(i2DArray) - 3128: 167(fvec3) Load 169(c3) - 3129: 734(ivec3) ConvertFToS 3128 - 3130: 7(f16vec4) Load 66(data) - ImageWrite 3127 3129 3130 - 3131: 3069 Load 3071(iCubeArray) - 3132: 167(fvec3) Load 169(c3) - 3133: 734(ivec3) ConvertFToS 3132 - 3134: 7(f16vec4) Load 66(data) - ImageWrite 3131 3133 3134 - 3135: 3078 Load 3080(i2DMS) - 3136: 53(fvec2) Load 148(c2) - 3137: 721(ivec2) ConvertFToS 3136 - 3138: 7(f16vec4) Load 66(data) - ImageWrite 3135 3137 3138 Sample 709 - 3139: 3087 Load 3089(i2DMSArray) - 3140: 167(fvec3) Load 169(c3) - 3141: 734(ivec3) ConvertFToS 3140 - 3142: 7(f16vec4) Load 66(data) - ImageWrite 3139 3141 3142 Sample 709 + 3009: 2907 Load 2909(i1D) + 3010: 52(float) Load 128(c1) + 3011: 47(int) ConvertFToS 3010 + 3012: 7(f16vec4) Load 66(data) + ImageWrite 3009 3011 3012 + 3013: 2916 Load 2918(i2D) + 3014: 53(fvec2) Load 148(c2) + 3015: 721(ivec2) ConvertFToS 3014 + 3016: 7(f16vec4) Load 66(data) + ImageWrite 3013 3015 3016 + 3017: 2925 Load 2927(i3D) + 3018: 167(fvec3) Load 169(c3) + 3019: 734(ivec3) ConvertFToS 3018 + 3020: 7(f16vec4) Load 66(data) + ImageWrite 3017 3019 3020 + 3021: 2934 Load 2936(i2DRect) + 3022: 53(fvec2) Load 148(c2) + 3023: 721(ivec2) ConvertFToS 3022 + 3024: 7(f16vec4) Load 66(data) + ImageWrite 3021 3023 3024 + 3025: 2943 Load 2945(iCube) + 3026: 167(fvec3) Load 169(c3) + 3027: 734(ivec3) ConvertFToS 3026 + 3028: 7(f16vec4) Load 66(data) + ImageWrite 3025 3027 3028 + 3029: 2952 Load 2954(iBuffer) + 3030: 52(float) Load 128(c1) + 3031: 47(int) ConvertFToS 3030 + 3032: 7(f16vec4) Load 66(data) + ImageWrite 3029 3031 3032 + 3033: 2961 Load 2963(i1DArray) + 3034: 53(fvec2) Load 148(c2) + 3035: 721(ivec2) ConvertFToS 3034 + 3036: 7(f16vec4) Load 66(data) + ImageWrite 3033 3035 3036 + 3037: 2970 Load 2972(i2DArray) + 3038: 167(fvec3) Load 169(c3) + 3039: 734(ivec3) ConvertFToS 3038 + 3040: 7(f16vec4) Load 66(data) + ImageWrite 3037 3039 3040 + 3041: 2979 Load 2981(iCubeArray) + 3042: 167(fvec3) Load 169(c3) + 3043: 734(ivec3) ConvertFToS 3042 + 3044: 7(f16vec4) Load 66(data) + ImageWrite 3041 3043 3044 + 3045: 2988 Load 2990(i2DMS) + 3046: 53(fvec2) Load 148(c2) + 3047: 721(ivec2) ConvertFToS 3046 + 3048: 7(f16vec4) Load 66(data) + ImageWrite 3045 3047 3048 Sample 709 + 3049: 2997 Load 2999(i2DMSArray) + 3050: 167(fvec3) Load 169(c3) + 3051: 734(ivec3) ConvertFToS 3050 + 3052: 7(f16vec4) Load 66(data) + ImageWrite 3049 3051 3052 Sample 709 Return FunctionEnd 69(testSparseTexture(): 7(f16vec4) Function None 8 70: Label - 3143(texel): 64(ptr) Variable Function - Store 3143(texel) 121 - 3144: 143 Load 145(s2D) - 3145: 53(fvec2) Load 148(c2) - 3147:3146(ResType) ImageSparseSampleImplicitLod 3144 3145 - 3148: 7(f16vec4) CompositeExtract 3147 1 - Store 3143(texel) 3148 - 3149: 47(int) CompositeExtract 3147 0 - 3150: 143 Load 145(s2D) - 3151:154(f16vec2) Load 156(f16c2) - 3152:6(float16_t) Load 137(f16bias) - 3153:3146(ResType) ImageSparseSampleImplicitLod 3150 3151 Bias 3152 - 3154: 7(f16vec4) CompositeExtract 3153 1 - Store 3143(texel) 3154 - 3155: 47(int) CompositeExtract 3153 0 - 3156: 163 Load 165(s3D) - 3157: 167(fvec3) Load 169(c3) - 3158:3146(ResType) ImageSparseSampleImplicitLod 3156 3157 - 3159: 7(f16vec4) CompositeExtract 3158 1 - Store 3143(texel) 3159 - 3160: 47(int) CompositeExtract 3158 0 - 3161: 163 Load 165(s3D) - 3162:175(f16vec3) Load 177(f16c3) - 3163:6(float16_t) Load 137(f16bias) - 3164:3146(ResType) ImageSparseSampleImplicitLod 3161 3162 Bias 3163 - 3165: 7(f16vec4) CompositeExtract 3164 1 - Store 3143(texel) 3165 - 3166: 47(int) CompositeExtract 3164 0 - 3167: 184 Load 186(sCube) - 3168: 167(fvec3) Load 169(c3) - 3169:3146(ResType) ImageSparseSampleImplicitLod 3167 3168 - 3170: 7(f16vec4) CompositeExtract 3169 1 - Store 3143(texel) 3170 + 3053(texel): 64(ptr) Variable Function + Store 3053(texel) 121 + 3054: 143 Load 145(s2D) + 3055: 53(fvec2) Load 148(c2) + 3057:3056(ResType) ImageSparseSampleImplicitLod 3054 3055 + 3058: 7(f16vec4) CompositeExtract 3057 1 + Store 3053(texel) 3058 + 3059: 47(int) CompositeExtract 3057 0 + 3060: 143 Load 145(s2D) + 3061:154(f16vec2) Load 156(f16c2) + 3062:6(float16_t) Load 137(f16bias) + 3063:3056(ResType) ImageSparseSampleImplicitLod 3060 3061 Bias 3062 + 3064: 7(f16vec4) CompositeExtract 3063 1 + Store 3053(texel) 3064 + 3065: 47(int) CompositeExtract 3063 0 + 3066: 163 Load 165(s3D) + 3067: 167(fvec3) Load 169(c3) + 3068:3056(ResType) ImageSparseSampleImplicitLod 3066 3067 + 3069: 7(f16vec4) CompositeExtract 3068 1 + Store 3053(texel) 3069 + 3070: 47(int) CompositeExtract 3068 0 + 3071: 163 Load 165(s3D) + 3072:175(f16vec3) Load 177(f16c3) + 3073:6(float16_t) Load 137(f16bias) + 3074:3056(ResType) ImageSparseSampleImplicitLod 3071 3072 Bias 3073 + 3075: 7(f16vec4) CompositeExtract 3074 1 + Store 3053(texel) 3075 + 3076: 47(int) CompositeExtract 3074 0 + 3077: 184 Load 186(sCube) + 3078: 167(fvec3) Load 169(c3) + 3079:3056(ResType) ImageSparseSampleImplicitLod 3077 3078 + 3080: 7(f16vec4) CompositeExtract 3079 1 + Store 3053(texel) 3080 + 3081: 47(int) CompositeExtract 3079 0 + 3082: 184 Load 186(sCube) + 3083:175(f16vec3) Load 177(f16c3) + 3084:6(float16_t) Load 137(f16bias) + 3085:3056(ResType) ImageSparseSampleImplicitLod 3082 3083 Bias 3084 + 3086: 7(f16vec4) CompositeExtract 3085 1 + Store 3053(texel) 3086 + 3087: 47(int) CompositeExtract 3085 0 + 3088: 224 Load 226(s2DShadow) + 3089: 167(fvec3) Load 169(c3) + 3090: 208(ptr) AccessChain 3053(texel) 207 + 3091: 52(float) CompositeExtract 3089 2 + 3093:3092(ResType) ImageSparseSampleDrefImplicitLod 3088 3089 3091 + 3094:6(float16_t) CompositeExtract 3093 1 + Store 3090 3094 + 3095: 47(int) CompositeExtract 3093 0 + 3096: 224 Load 226(s2DShadow) + 3097:154(f16vec2) Load 156(f16c2) + 3098: 52(float) Load 215(compare) + 3099: 208(ptr) AccessChain 3053(texel) 207 + 3100:6(float16_t) Load 137(f16bias) + 3101:3092(ResType) ImageSparseSampleDrefImplicitLod 3096 3097 3098 Bias 3100 + 3102:6(float16_t) CompositeExtract 3101 1 + Store 3099 3102 + 3103: 47(int) CompositeExtract 3101 0 + 3104: 245 Load 247(sCubeShadow) + 3105: 249(fvec4) Load 251(c4) + 3106: 208(ptr) AccessChain 3053(texel) 207 + 3107: 52(float) CompositeExtract 3105 3 + 3108:3092(ResType) ImageSparseSampleDrefImplicitLod 3104 3105 3107 + 3109:6(float16_t) CompositeExtract 3108 1 + Store 3106 3109 + 3110: 47(int) CompositeExtract 3108 0 + 3111: 245 Load 247(sCubeShadow) + 3112:175(f16vec3) Load 177(f16c3) + 3113: 52(float) Load 215(compare) + 3114: 208(ptr) AccessChain 3053(texel) 207 + 3115:6(float16_t) Load 137(f16bias) + 3116:3092(ResType) ImageSparseSampleDrefImplicitLod 3111 3112 3113 Bias 3115 + 3117:6(float16_t) CompositeExtract 3116 1 + Store 3114 3117 + 3118: 47(int) CompositeExtract 3116 0 + 3119: 284 Load 286(s2DArray) + 3120: 167(fvec3) Load 169(c3) + 3121:3056(ResType) ImageSparseSampleImplicitLod 3119 3120 + 3122: 7(f16vec4) CompositeExtract 3121 1 + Store 3053(texel) 3122 + 3123: 47(int) CompositeExtract 3121 0 + 3124: 284 Load 286(s2DArray) + 3125:175(f16vec3) Load 177(f16c3) + 3126:6(float16_t) Load 137(f16bias) + 3127:3056(ResType) ImageSparseSampleImplicitLod 3124 3125 Bias 3126 + 3128: 7(f16vec4) CompositeExtract 3127 1 + Store 3053(texel) 3128 + 3129: 47(int) CompositeExtract 3127 0 + 3130: 299 Load 301(sCubeArray) + 3131: 249(fvec4) Load 251(c4) + 3132:3056(ResType) ImageSparseSampleImplicitLod 3130 3131 + 3133: 7(f16vec4) CompositeExtract 3132 1 + Store 3053(texel) 3133 + 3134: 47(int) CompositeExtract 3132 0 + 3135: 299 Load 301(sCubeArray) + 3136: 7(f16vec4) Load 309(f16c4) + 3137:6(float16_t) Load 137(f16bias) + 3138:3056(ResType) ImageSparseSampleImplicitLod 3135 3136 Bias 3137 + 3139: 7(f16vec4) CompositeExtract 3138 1 + Store 3053(texel) 3139 + 3140: 47(int) CompositeExtract 3138 0 + 3141: 337 Load 339(s2DArrayShadow) + 3142: 249(fvec4) Load 251(c4) + 3143: 208(ptr) AccessChain 3053(texel) 207 + 3144: 52(float) CompositeExtract 3142 3 + 3145:3092(ResType) ImageSparseSampleDrefImplicitLod 3141 3142 3144 + 3146:6(float16_t) CompositeExtract 3145 1 + Store 3143 3146 + 3147: 47(int) CompositeExtract 3145 0 + 3148: 337 Load 339(s2DArrayShadow) + 3149:175(f16vec3) Load 177(f16c3) + 3150: 52(float) Load 215(compare) + 3151: 208(ptr) AccessChain 3053(texel) 207 + 3152:3092(ResType) ImageSparseSampleDrefImplicitLod 3148 3149 3150 + 3153:6(float16_t) CompositeExtract 3152 1 + Store 3151 3153 + 3154: 47(int) CompositeExtract 3152 0 + 3155: 357 Load 359(s2DRect) + 3156: 53(fvec2) Load 148(c2) + 3157:3056(ResType) ImageSparseSampleImplicitLod 3155 3156 + 3158: 7(f16vec4) CompositeExtract 3157 1 + Store 3053(texel) 3158 + 3159: 47(int) CompositeExtract 3157 0 + 3160: 357 Load 359(s2DRect) + 3161:154(f16vec2) Load 156(f16c2) + 3162:3056(ResType) ImageSparseSampleImplicitLod 3160 3161 + 3163: 7(f16vec4) CompositeExtract 3162 1 + Store 3053(texel) 3163 + 3164: 47(int) CompositeExtract 3162 0 + 3165: 371 Load 373(s2DRectShadow) + 3166: 167(fvec3) Load 169(c3) + 3167: 208(ptr) AccessChain 3053(texel) 207 + 3168: 52(float) CompositeExtract 3166 2 + 3169:3092(ResType) ImageSparseSampleDrefImplicitLod 3165 3166 3168 + 3170:6(float16_t) CompositeExtract 3169 1 + Store 3167 3170 3171: 47(int) CompositeExtract 3169 0 - 3172: 184 Load 186(sCube) - 3173:175(f16vec3) Load 177(f16c3) - 3174:6(float16_t) Load 137(f16bias) - 3175:3146(ResType) ImageSparseSampleImplicitLod 3172 3173 Bias 3174 - 3176: 7(f16vec4) CompositeExtract 3175 1 - Store 3143(texel) 3176 - 3177: 47(int) CompositeExtract 3175 0 - 3178: 224 Load 226(s2DShadow) - 3179: 167(fvec3) Load 169(c3) - 3180: 208(ptr) AccessChain 3143(texel) 207 - 3181: 52(float) CompositeExtract 3179 2 - 3183:3182(ResType) ImageSparseSampleDrefImplicitLod 3178 3179 3181 + 3172: 371 Load 373(s2DRectShadow) + 3173:154(f16vec2) Load 156(f16c2) + 3174: 52(float) Load 215(compare) + 3175: 208(ptr) AccessChain 3053(texel) 207 + 3176:3092(ResType) ImageSparseSampleDrefImplicitLod 3172 3173 3174 + 3177:6(float16_t) CompositeExtract 3176 1 + Store 3175 3177 + 3178: 47(int) CompositeExtract 3176 0 + 3179: 391 Load 393(sCubeArrayShadow) + 3180: 249(fvec4) Load 251(c4) + 3181: 52(float) Load 215(compare) + 3182: 208(ptr) AccessChain 3053(texel) 207 + 3183:3092(ResType) ImageSparseSampleDrefImplicitLod 3179 3180 3181 3184:6(float16_t) CompositeExtract 3183 1 - Store 3180 3184 + Store 3182 3184 3185: 47(int) CompositeExtract 3183 0 - 3186: 224 Load 226(s2DShadow) - 3187:154(f16vec2) Load 156(f16c2) + 3186: 391 Load 393(sCubeArrayShadow) + 3187: 7(f16vec4) Load 309(f16c4) 3188: 52(float) Load 215(compare) - 3189: 208(ptr) AccessChain 3143(texel) 207 - 3190:6(float16_t) Load 137(f16bias) - 3191:3182(ResType) ImageSparseSampleDrefImplicitLod 3186 3187 3188 Bias 3190 - 3192:6(float16_t) CompositeExtract 3191 1 - Store 3189 3192 - 3193: 47(int) CompositeExtract 3191 0 - 3194: 245 Load 247(sCubeShadow) - 3195: 249(fvec4) Load 251(c4) - 3196: 208(ptr) AccessChain 3143(texel) 207 - 3197: 52(float) CompositeExtract 3195 3 - 3198:3182(ResType) ImageSparseSampleDrefImplicitLod 3194 3195 3197 - 3199:6(float16_t) CompositeExtract 3198 1 - Store 3196 3199 - 3200: 47(int) CompositeExtract 3198 0 - 3201: 245 Load 247(sCubeShadow) - 3202:175(f16vec3) Load 177(f16c3) - 3203: 52(float) Load 215(compare) - 3204: 208(ptr) AccessChain 3143(texel) 207 - 3205:6(float16_t) Load 137(f16bias) - 3206:3182(ResType) ImageSparseSampleDrefImplicitLod 3201 3202 3203 Bias 3205 - 3207:6(float16_t) CompositeExtract 3206 1 - Store 3204 3207 + 3189: 208(ptr) AccessChain 3053(texel) 207 + 3190:3092(ResType) ImageSparseSampleDrefImplicitLod 3186 3187 3188 + 3191:6(float16_t) CompositeExtract 3190 1 + Store 3189 3191 + 3192: 47(int) CompositeExtract 3190 0 + 3193: 7(f16vec4) Load 3053(texel) + ReturnValue 3193 + FunctionEnd +71(testSparseTextureLod(): 7(f16vec4) Function None 8 + 72: Label + 3196(texel): 64(ptr) Variable Function + Store 3196(texel) 121 + 3197: 143 Load 145(s2D) + 3198: 53(fvec2) Load 148(c2) + 3199: 52(float) Load 565(lod) + 3200:3056(ResType) ImageSparseSampleExplicitLod 3197 3198 Lod 3199 + 3201: 7(f16vec4) CompositeExtract 3200 1 + Store 3196(texel) 3201 + 3202: 47(int) CompositeExtract 3200 0 + 3203: 143 Load 145(s2D) + 3204:154(f16vec2) Load 156(f16c2) + 3205:6(float16_t) Load 572(f16lod) + 3206:3056(ResType) ImageSparseSampleExplicitLod 3203 3204 Lod 3205 + 3207: 7(f16vec4) CompositeExtract 3206 1 + Store 3196(texel) 3207 3208: 47(int) CompositeExtract 3206 0 - 3209: 284 Load 286(s2DArray) + 3209: 163 Load 165(s3D) 3210: 167(fvec3) Load 169(c3) - 3211:3146(ResType) ImageSparseSampleImplicitLod 3209 3210 - 3212: 7(f16vec4) CompositeExtract 3211 1 - Store 3143(texel) 3212 - 3213: 47(int) CompositeExtract 3211 0 - 3214: 284 Load 286(s2DArray) - 3215:175(f16vec3) Load 177(f16c3) - 3216:6(float16_t) Load 137(f16bias) - 3217:3146(ResType) ImageSparseSampleImplicitLod 3214 3215 Bias 3216 - 3218: 7(f16vec4) CompositeExtract 3217 1 - Store 3143(texel) 3218 - 3219: 47(int) CompositeExtract 3217 0 - 3220: 299 Load 301(sCubeArray) - 3221: 249(fvec4) Load 251(c4) - 3222:3146(ResType) ImageSparseSampleImplicitLod 3220 3221 - 3223: 7(f16vec4) CompositeExtract 3222 1 - Store 3143(texel) 3223 - 3224: 47(int) CompositeExtract 3222 0 - 3225: 299 Load 301(sCubeArray) - 3226: 7(f16vec4) Load 309(f16c4) - 3227:6(float16_t) Load 137(f16bias) - 3228:3146(ResType) ImageSparseSampleImplicitLod 3225 3226 Bias 3227 - 3229: 7(f16vec4) CompositeExtract 3228 1 - Store 3143(texel) 3229 - 3230: 47(int) CompositeExtract 3228 0 - 3231: 337 Load 339(s2DArrayShadow) - 3232: 249(fvec4) Load 251(c4) - 3233: 208(ptr) AccessChain 3143(texel) 207 - 3234: 52(float) CompositeExtract 3232 3 - 3235:3182(ResType) ImageSparseSampleDrefImplicitLod 3231 3232 3234 - 3236:6(float16_t) CompositeExtract 3235 1 - Store 3233 3236 - 3237: 47(int) CompositeExtract 3235 0 - 3238: 337 Load 339(s2DArrayShadow) - 3239:175(f16vec3) Load 177(f16c3) - 3240: 52(float) Load 215(compare) - 3241: 208(ptr) AccessChain 3143(texel) 207 - 3242:3182(ResType) ImageSparseSampleDrefImplicitLod 3238 3239 3240 - 3243:6(float16_t) CompositeExtract 3242 1 - Store 3241 3243 - 3244: 47(int) CompositeExtract 3242 0 - 3245: 357 Load 359(s2DRect) - 3246: 53(fvec2) Load 148(c2) - 3247:3146(ResType) ImageSparseSampleImplicitLod 3245 3246 - 3248: 7(f16vec4) CompositeExtract 3247 1 - Store 3143(texel) 3248 - 3249: 47(int) CompositeExtract 3247 0 - 3250: 357 Load 359(s2DRect) - 3251:154(f16vec2) Load 156(f16c2) - 3252:3146(ResType) ImageSparseSampleImplicitLod 3250 3251 + 3211: 52(float) Load 565(lod) + 3212:3056(ResType) ImageSparseSampleExplicitLod 3209 3210 Lod 3211 + 3213: 7(f16vec4) CompositeExtract 3212 1 + Store 3196(texel) 3213 + 3214: 47(int) CompositeExtract 3212 0 + 3215: 163 Load 165(s3D) + 3216:175(f16vec3) Load 177(f16c3) + 3217:6(float16_t) Load 572(f16lod) + 3218:3056(ResType) ImageSparseSampleExplicitLod 3215 3216 Lod 3217 + 3219: 7(f16vec4) CompositeExtract 3218 1 + Store 3196(texel) 3219 + 3220: 47(int) CompositeExtract 3218 0 + 3221: 184 Load 186(sCube) + 3222: 167(fvec3) Load 169(c3) + 3223: 52(float) Load 565(lod) + 3224:3056(ResType) ImageSparseSampleExplicitLod 3221 3222 Lod 3223 + 3225: 7(f16vec4) CompositeExtract 3224 1 + Store 3196(texel) 3225 + 3226: 47(int) CompositeExtract 3224 0 + 3227: 184 Load 186(sCube) + 3228:175(f16vec3) Load 177(f16c3) + 3229:6(float16_t) Load 572(f16lod) + 3230:3056(ResType) ImageSparseSampleExplicitLod 3227 3228 Lod 3229 + 3231: 7(f16vec4) CompositeExtract 3230 1 + Store 3196(texel) 3231 + 3232: 47(int) CompositeExtract 3230 0 + 3233: 224 Load 226(s2DShadow) + 3234: 167(fvec3) Load 169(c3) + 3235: 52(float) Load 565(lod) + 3236: 208(ptr) AccessChain 3196(texel) 207 + 3237: 52(float) CompositeExtract 3234 2 + 3238:3092(ResType) ImageSparseSampleDrefExplicitLod 3233 3234 3237 Lod 3235 + 3239:6(float16_t) CompositeExtract 3238 1 + Store 3236 3239 + 3240: 47(int) CompositeExtract 3238 0 + 3241: 224 Load 226(s2DShadow) + 3242:154(f16vec2) Load 156(f16c2) + 3243: 52(float) Load 215(compare) + 3244:6(float16_t) Load 572(f16lod) + 3245: 208(ptr) AccessChain 3196(texel) 207 + 3246:3092(ResType) ImageSparseSampleDrefExplicitLod 3241 3242 3243 Lod 3244 + 3247:6(float16_t) CompositeExtract 3246 1 + Store 3245 3247 + 3248: 47(int) CompositeExtract 3246 0 + 3249: 284 Load 286(s2DArray) + 3250: 167(fvec3) Load 169(c3) + 3251: 52(float) Load 565(lod) + 3252:3056(ResType) ImageSparseSampleExplicitLod 3249 3250 Lod 3251 3253: 7(f16vec4) CompositeExtract 3252 1 - Store 3143(texel) 3253 + Store 3196(texel) 3253 3254: 47(int) CompositeExtract 3252 0 - 3255: 371 Load 373(s2DRectShadow) - 3256: 167(fvec3) Load 169(c3) - 3257: 208(ptr) AccessChain 3143(texel) 207 - 3258: 52(float) CompositeExtract 3256 2 - 3259:3182(ResType) ImageSparseSampleDrefImplicitLod 3255 3256 3258 - 3260:6(float16_t) CompositeExtract 3259 1 - Store 3257 3260 - 3261: 47(int) CompositeExtract 3259 0 - 3262: 371 Load 373(s2DRectShadow) - 3263:154(f16vec2) Load 156(f16c2) - 3264: 52(float) Load 215(compare) - 3265: 208(ptr) AccessChain 3143(texel) 207 - 3266:3182(ResType) ImageSparseSampleDrefImplicitLod 3262 3263 3264 - 3267:6(float16_t) CompositeExtract 3266 1 - Store 3265 3267 - 3268: 47(int) CompositeExtract 3266 0 - 3269: 391 Load 393(sCubeArrayShadow) - 3270: 249(fvec4) Load 251(c4) - 3271: 52(float) Load 215(compare) - 3272: 208(ptr) AccessChain 3143(texel) 207 - 3273:3182(ResType) ImageSparseSampleDrefImplicitLod 3269 3270 3271 - 3274:6(float16_t) CompositeExtract 3273 1 - Store 3272 3274 - 3275: 47(int) CompositeExtract 3273 0 - 3276: 391 Load 393(sCubeArrayShadow) - 3277: 7(f16vec4) Load 309(f16c4) - 3278: 52(float) Load 215(compare) - 3279: 208(ptr) AccessChain 3143(texel) 207 - 3280:3182(ResType) ImageSparseSampleDrefImplicitLod 3276 3277 3278 - 3281:6(float16_t) CompositeExtract 3280 1 - Store 3279 3281 - 3282: 47(int) CompositeExtract 3280 0 - 3283: 7(f16vec4) Load 3143(texel) - ReturnValue 3283 + 3255: 284 Load 286(s2DArray) + 3256:175(f16vec3) Load 177(f16c3) + 3257:6(float16_t) Load 572(f16lod) + 3258:3056(ResType) ImageSparseSampleExplicitLod 3255 3256 Lod 3257 + 3259: 7(f16vec4) CompositeExtract 3258 1 + Store 3196(texel) 3259 + 3260: 47(int) CompositeExtract 3258 0 + 3261: 299 Load 301(sCubeArray) + 3262: 249(fvec4) Load 251(c4) + 3263: 52(float) Load 565(lod) + 3264:3056(ResType) ImageSparseSampleExplicitLod 3261 3262 Lod 3263 + 3265: 7(f16vec4) CompositeExtract 3264 1 + Store 3196(texel) 3265 + 3266: 47(int) CompositeExtract 3264 0 + 3267: 299 Load 301(sCubeArray) + 3268: 7(f16vec4) Load 309(f16c4) + 3269:6(float16_t) Load 572(f16lod) + 3270:3056(ResType) ImageSparseSampleExplicitLod 3267 3268 Lod 3269 + 3271: 7(f16vec4) CompositeExtract 3270 1 + Store 3196(texel) 3271 + 3272: 47(int) CompositeExtract 3270 0 + 3273: 7(f16vec4) Load 3196(texel) + ReturnValue 3273 FunctionEnd -71(testSparseTextureLod(): 7(f16vec4) Function None 8 - 72: Label - 3286(texel): 64(ptr) Variable Function - Store 3286(texel) 121 - 3287: 143 Load 145(s2D) - 3288: 53(fvec2) Load 148(c2) - 3289: 52(float) Load 565(lod) - 3290:3146(ResType) ImageSparseSampleExplicitLod 3287 3288 Lod 3289 +73(testSparseTextureOffset(): 7(f16vec4) Function None 8 + 74: Label + 3276(texel): 64(ptr) Variable Function + Store 3276(texel) 121 + 3277: 143 Load 145(s2D) + 3278: 53(fvec2) Load 148(c2) + 3279:3056(ResType) ImageSparseSampleImplicitLod 3277 3278 ConstOffset 722 + 3280: 7(f16vec4) CompositeExtract 3279 1 + Store 3276(texel) 3280 + 3281: 47(int) CompositeExtract 3279 0 + 3282: 143 Load 145(s2D) + 3283:154(f16vec2) Load 156(f16c2) + 3284:6(float16_t) Load 137(f16bias) + 3285:3056(ResType) ImageSparseSampleImplicitLod 3282 3283 Bias ConstOffset 3284 722 + 3286: 7(f16vec4) CompositeExtract 3285 1 + Store 3276(texel) 3286 + 3287: 47(int) CompositeExtract 3285 0 + 3288: 163 Load 165(s3D) + 3289: 167(fvec3) Load 169(c3) + 3290:3056(ResType) ImageSparseSampleImplicitLod 3288 3289 ConstOffset 735 3291: 7(f16vec4) CompositeExtract 3290 1 - Store 3286(texel) 3291 + Store 3276(texel) 3291 3292: 47(int) CompositeExtract 3290 0 - 3293: 143 Load 145(s2D) - 3294:154(f16vec2) Load 156(f16c2) - 3295:6(float16_t) Load 572(f16lod) - 3296:3146(ResType) ImageSparseSampleExplicitLod 3293 3294 Lod 3295 + 3293: 163 Load 165(s3D) + 3294:175(f16vec3) Load 177(f16c3) + 3295:6(float16_t) Load 137(f16bias) + 3296:3056(ResType) ImageSparseSampleImplicitLod 3293 3294 Bias ConstOffset 3295 735 3297: 7(f16vec4) CompositeExtract 3296 1 - Store 3286(texel) 3297 + Store 3276(texel) 3297 3298: 47(int) CompositeExtract 3296 0 - 3299: 163 Load 165(s3D) - 3300: 167(fvec3) Load 169(c3) - 3301: 52(float) Load 565(lod) - 3302:3146(ResType) ImageSparseSampleExplicitLod 3299 3300 Lod 3301 - 3303: 7(f16vec4) CompositeExtract 3302 1 - Store 3286(texel) 3303 - 3304: 47(int) CompositeExtract 3302 0 - 3305: 163 Load 165(s3D) - 3306:175(f16vec3) Load 177(f16c3) - 3307:6(float16_t) Load 572(f16lod) - 3308:3146(ResType) ImageSparseSampleExplicitLod 3305 3306 Lod 3307 - 3309: 7(f16vec4) CompositeExtract 3308 1 - Store 3286(texel) 3309 - 3310: 47(int) CompositeExtract 3308 0 - 3311: 184 Load 186(sCube) - 3312: 167(fvec3) Load 169(c3) - 3313: 52(float) Load 565(lod) - 3314:3146(ResType) ImageSparseSampleExplicitLod 3311 3312 Lod 3313 - 3315: 7(f16vec4) CompositeExtract 3314 1 - Store 3286(texel) 3315 - 3316: 47(int) CompositeExtract 3314 0 - 3317: 184 Load 186(sCube) - 3318:175(f16vec3) Load 177(f16c3) - 3319:6(float16_t) Load 572(f16lod) - 3320:3146(ResType) ImageSparseSampleExplicitLod 3317 3318 Lod 3319 - 3321: 7(f16vec4) CompositeExtract 3320 1 - Store 3286(texel) 3321 + 3299: 357 Load 359(s2DRect) + 3300: 53(fvec2) Load 148(c2) + 3301:3056(ResType) ImageSparseSampleImplicitLod 3299 3300 ConstOffset 722 + 3302: 7(f16vec4) CompositeExtract 3301 1 + Store 3276(texel) 3302 + 3303: 47(int) CompositeExtract 3301 0 + 3304: 357 Load 359(s2DRect) + 3305:154(f16vec2) Load 156(f16c2) + 3306:3056(ResType) ImageSparseSampleImplicitLod 3304 3305 ConstOffset 722 + 3307: 7(f16vec4) CompositeExtract 3306 1 + Store 3276(texel) 3307 + 3308: 47(int) CompositeExtract 3306 0 + 3309: 371 Load 373(s2DRectShadow) + 3310: 167(fvec3) Load 169(c3) + 3311: 208(ptr) AccessChain 3276(texel) 207 + 3312: 52(float) CompositeExtract 3310 2 + 3313:3092(ResType) ImageSparseSampleDrefImplicitLod 3309 3310 3312 ConstOffset 722 + 3314:6(float16_t) CompositeExtract 3313 1 + Store 3311 3314 + 3315: 47(int) CompositeExtract 3313 0 + 3316: 371 Load 373(s2DRectShadow) + 3317:154(f16vec2) Load 156(f16c2) + 3318: 52(float) Load 215(compare) + 3319: 208(ptr) AccessChain 3276(texel) 207 + 3320:3092(ResType) ImageSparseSampleDrefImplicitLod 3316 3317 3318 ConstOffset 722 + 3321:6(float16_t) CompositeExtract 3320 1 + Store 3319 3321 3322: 47(int) CompositeExtract 3320 0 3323: 224 Load 226(s2DShadow) 3324: 167(fvec3) Load 169(c3) - 3325: 52(float) Load 565(lod) - 3326: 208(ptr) AccessChain 3286(texel) 207 - 3327: 52(float) CompositeExtract 3324 2 - 3328:3182(ResType) ImageSparseSampleDrefExplicitLod 3323 3324 3327 Lod 3325 - 3329:6(float16_t) CompositeExtract 3328 1 - Store 3326 3329 - 3330: 47(int) CompositeExtract 3328 0 - 3331: 224 Load 226(s2DShadow) - 3332:154(f16vec2) Load 156(f16c2) - 3333: 52(float) Load 215(compare) - 3334:6(float16_t) Load 572(f16lod) - 3335: 208(ptr) AccessChain 3286(texel) 207 - 3336:3182(ResType) ImageSparseSampleDrefExplicitLod 3331 3332 3333 Lod 3334 - 3337:6(float16_t) CompositeExtract 3336 1 - Store 3335 3337 - 3338: 47(int) CompositeExtract 3336 0 - 3339: 284 Load 286(s2DArray) - 3340: 167(fvec3) Load 169(c3) - 3341: 52(float) Load 565(lod) - 3342:3146(ResType) ImageSparseSampleExplicitLod 3339 3340 Lod 3341 - 3343: 7(f16vec4) CompositeExtract 3342 1 - Store 3286(texel) 3343 - 3344: 47(int) CompositeExtract 3342 0 - 3345: 284 Load 286(s2DArray) - 3346:175(f16vec3) Load 177(f16c3) - 3347:6(float16_t) Load 572(f16lod) - 3348:3146(ResType) ImageSparseSampleExplicitLod 3345 3346 Lod 3347 - 3349: 7(f16vec4) CompositeExtract 3348 1 - Store 3286(texel) 3349 - 3350: 47(int) CompositeExtract 3348 0 - 3351: 299 Load 301(sCubeArray) - 3352: 249(fvec4) Load 251(c4) - 3353: 52(float) Load 565(lod) - 3354:3146(ResType) ImageSparseSampleExplicitLod 3351 3352 Lod 3353 - 3355: 7(f16vec4) CompositeExtract 3354 1 - Store 3286(texel) 3355 - 3356: 47(int) CompositeExtract 3354 0 - 3357: 299 Load 301(sCubeArray) - 3358: 7(f16vec4) Load 309(f16c4) - 3359:6(float16_t) Load 572(f16lod) - 3360:3146(ResType) ImageSparseSampleExplicitLod 3357 3358 Lod 3359 - 3361: 7(f16vec4) CompositeExtract 3360 1 - Store 3286(texel) 3361 + 3325: 208(ptr) AccessChain 3276(texel) 207 + 3326: 52(float) CompositeExtract 3324 2 + 3327:3092(ResType) ImageSparseSampleDrefImplicitLod 3323 3324 3326 ConstOffset 722 + 3328:6(float16_t) CompositeExtract 3327 1 + Store 3325 3328 + 3329: 47(int) CompositeExtract 3327 0 + 3330: 224 Load 226(s2DShadow) + 3331:154(f16vec2) Load 156(f16c2) + 3332: 52(float) Load 215(compare) + 3333: 208(ptr) AccessChain 3276(texel) 207 + 3334:6(float16_t) Load 137(f16bias) + 3335:3092(ResType) ImageSparseSampleDrefImplicitLod 3330 3331 3332 Bias ConstOffset 3334 722 + 3336:6(float16_t) CompositeExtract 3335 1 + Store 3333 3336 + 3337: 47(int) CompositeExtract 3335 0 + 3338: 284 Load 286(s2DArray) + 3339: 167(fvec3) Load 169(c3) + 3340:3056(ResType) ImageSparseSampleImplicitLod 3338 3339 ConstOffset 722 + 3341: 7(f16vec4) CompositeExtract 3340 1 + Store 3276(texel) 3341 + 3342: 47(int) CompositeExtract 3340 0 + 3343: 284 Load 286(s2DArray) + 3344:175(f16vec3) Load 177(f16c3) + 3345:6(float16_t) Load 137(f16bias) + 3346:3056(ResType) ImageSparseSampleImplicitLod 3343 3344 Bias ConstOffset 3345 722 + 3347: 7(f16vec4) CompositeExtract 3346 1 + Store 3276(texel) 3347 + 3348: 47(int) CompositeExtract 3346 0 + 3349: 337 Load 339(s2DArrayShadow) + 3350: 249(fvec4) Load 251(c4) + 3351: 208(ptr) AccessChain 3276(texel) 207 + 3352: 52(float) CompositeExtract 3350 3 + 3353:3092(ResType) ImageSparseSampleDrefImplicitLod 3349 3350 3352 ConstOffset 722 + 3354:6(float16_t) CompositeExtract 3353 1 + Store 3351 3354 + 3355: 47(int) CompositeExtract 3353 0 + 3356: 337 Load 339(s2DArrayShadow) + 3357:175(f16vec3) Load 177(f16c3) + 3358: 52(float) Load 215(compare) + 3359: 208(ptr) AccessChain 3276(texel) 207 + 3360:3092(ResType) ImageSparseSampleDrefImplicitLod 3356 3357 3358 ConstOffset 722 + 3361:6(float16_t) CompositeExtract 3360 1 + Store 3359 3361 3362: 47(int) CompositeExtract 3360 0 - 3363: 7(f16vec4) Load 3286(texel) + 3363: 7(f16vec4) Load 3276(texel) ReturnValue 3363 FunctionEnd -73(testSparseTextureOffset(): 7(f16vec4) Function None 8 - 74: Label +75(testSparseTextureLodOffset(): 7(f16vec4) Function None 8 + 76: Label 3366(texel): 64(ptr) Variable Function Store 3366(texel) 121 3367: 143 Load 145(s2D) 3368: 53(fvec2) Load 148(c2) - 3369:3146(ResType) ImageSparseSampleImplicitLod 3367 3368 ConstOffset 722 - 3370: 7(f16vec4) CompositeExtract 3369 1 - Store 3366(texel) 3370 - 3371: 47(int) CompositeExtract 3369 0 - 3372: 143 Load 145(s2D) - 3373:154(f16vec2) Load 156(f16c2) - 3374:6(float16_t) Load 137(f16bias) - 3375:3146(ResType) ImageSparseSampleImplicitLod 3372 3373 Bias ConstOffset 3374 722 - 3376: 7(f16vec4) CompositeExtract 3375 1 - Store 3366(texel) 3376 - 3377: 47(int) CompositeExtract 3375 0 - 3378: 163 Load 165(s3D) - 3379: 167(fvec3) Load 169(c3) - 3380:3146(ResType) ImageSparseSampleImplicitLod 3378 3379 ConstOffset 735 - 3381: 7(f16vec4) CompositeExtract 3380 1 - Store 3366(texel) 3381 - 3382: 47(int) CompositeExtract 3380 0 - 3383: 163 Load 165(s3D) - 3384:175(f16vec3) Load 177(f16c3) - 3385:6(float16_t) Load 137(f16bias) - 3386:3146(ResType) ImageSparseSampleImplicitLod 3383 3384 Bias ConstOffset 3385 735 - 3387: 7(f16vec4) CompositeExtract 3386 1 - Store 3366(texel) 3387 - 3388: 47(int) CompositeExtract 3386 0 - 3389: 357 Load 359(s2DRect) - 3390: 53(fvec2) Load 148(c2) - 3391:3146(ResType) ImageSparseSampleImplicitLod 3389 3390 ConstOffset 722 - 3392: 7(f16vec4) CompositeExtract 3391 1 - Store 3366(texel) 3392 - 3393: 47(int) CompositeExtract 3391 0 - 3394: 357 Load 359(s2DRect) - 3395:154(f16vec2) Load 156(f16c2) - 3396:3146(ResType) ImageSparseSampleImplicitLod 3394 3395 ConstOffset 722 - 3397: 7(f16vec4) CompositeExtract 3396 1 - Store 3366(texel) 3397 + 3369: 52(float) Load 565(lod) + 3370:3056(ResType) ImageSparseSampleExplicitLod 3367 3368 Lod ConstOffset 3369 722 + 3371: 7(f16vec4) CompositeExtract 3370 1 + Store 3366(texel) 3371 + 3372: 47(int) CompositeExtract 3370 0 + 3373: 143 Load 145(s2D) + 3374:154(f16vec2) Load 156(f16c2) + 3375:6(float16_t) Load 572(f16lod) + 3376:3056(ResType) ImageSparseSampleExplicitLod 3373 3374 Lod ConstOffset 3375 722 + 3377: 7(f16vec4) CompositeExtract 3376 1 + Store 3366(texel) 3377 + 3378: 47(int) CompositeExtract 3376 0 + 3379: 163 Load 165(s3D) + 3380: 167(fvec3) Load 169(c3) + 3381: 52(float) Load 565(lod) + 3382:3056(ResType) ImageSparseSampleExplicitLod 3379 3380 Lod ConstOffset 3381 735 + 3383: 7(f16vec4) CompositeExtract 3382 1 + Store 3366(texel) 3383 + 3384: 47(int) CompositeExtract 3382 0 + 3385: 163 Load 165(s3D) + 3386:175(f16vec3) Load 177(f16c3) + 3387:6(float16_t) Load 572(f16lod) + 3388:3056(ResType) ImageSparseSampleExplicitLod 3385 3386 Lod ConstOffset 3387 735 + 3389: 7(f16vec4) CompositeExtract 3388 1 + Store 3366(texel) 3389 + 3390: 47(int) CompositeExtract 3388 0 + 3391: 224 Load 226(s2DShadow) + 3392: 167(fvec3) Load 169(c3) + 3393: 52(float) Load 565(lod) + 3394: 208(ptr) AccessChain 3366(texel) 207 + 3395: 52(float) CompositeExtract 3392 2 + 3396:3092(ResType) ImageSparseSampleDrefExplicitLod 3391 3392 3395 Lod ConstOffset 3393 722 + 3397:6(float16_t) CompositeExtract 3396 1 + Store 3394 3397 3398: 47(int) CompositeExtract 3396 0 - 3399: 371 Load 373(s2DRectShadow) - 3400: 167(fvec3) Load 169(c3) - 3401: 208(ptr) AccessChain 3366(texel) 207 - 3402: 52(float) CompositeExtract 3400 2 - 3403:3182(ResType) ImageSparseSampleDrefImplicitLod 3399 3400 3402 ConstOffset 722 - 3404:6(float16_t) CompositeExtract 3403 1 - Store 3401 3404 - 3405: 47(int) CompositeExtract 3403 0 - 3406: 371 Load 373(s2DRectShadow) - 3407:154(f16vec2) Load 156(f16c2) - 3408: 52(float) Load 215(compare) - 3409: 208(ptr) AccessChain 3366(texel) 207 - 3410:3182(ResType) ImageSparseSampleDrefImplicitLod 3406 3407 3408 ConstOffset 722 - 3411:6(float16_t) CompositeExtract 3410 1 - Store 3409 3411 + 3399: 224 Load 226(s2DShadow) + 3400:154(f16vec2) Load 156(f16c2) + 3401: 52(float) Load 215(compare) + 3402:6(float16_t) Load 572(f16lod) + 3403: 208(ptr) AccessChain 3366(texel) 207 + 3404:3092(ResType) ImageSparseSampleDrefExplicitLod 3399 3400 3401 Lod ConstOffset 3402 722 + 3405:6(float16_t) CompositeExtract 3404 1 + Store 3403 3405 + 3406: 47(int) CompositeExtract 3404 0 + 3407: 284 Load 286(s2DArray) + 3408: 167(fvec3) Load 169(c3) + 3409: 52(float) Load 565(lod) + 3410:3056(ResType) ImageSparseSampleExplicitLod 3407 3408 Lod ConstOffset 3409 722 + 3411: 7(f16vec4) CompositeExtract 3410 1 + Store 3366(texel) 3411 3412: 47(int) CompositeExtract 3410 0 - 3413: 224 Load 226(s2DShadow) - 3414: 167(fvec3) Load 169(c3) - 3415: 208(ptr) AccessChain 3366(texel) 207 - 3416: 52(float) CompositeExtract 3414 2 - 3417:3182(ResType) ImageSparseSampleDrefImplicitLod 3413 3414 3416 ConstOffset 722 - 3418:6(float16_t) CompositeExtract 3417 1 - Store 3415 3418 - 3419: 47(int) CompositeExtract 3417 0 - 3420: 224 Load 226(s2DShadow) - 3421:154(f16vec2) Load 156(f16c2) - 3422: 52(float) Load 215(compare) - 3423: 208(ptr) AccessChain 3366(texel) 207 - 3424:6(float16_t) Load 137(f16bias) - 3425:3182(ResType) ImageSparseSampleDrefImplicitLod 3420 3421 3422 Bias ConstOffset 3424 722 - 3426:6(float16_t) CompositeExtract 3425 1 - Store 3423 3426 - 3427: 47(int) CompositeExtract 3425 0 - 3428: 284 Load 286(s2DArray) - 3429: 167(fvec3) Load 169(c3) - 3430:3146(ResType) ImageSparseSampleImplicitLod 3428 3429 ConstOffset 722 - 3431: 7(f16vec4) CompositeExtract 3430 1 - Store 3366(texel) 3431 - 3432: 47(int) CompositeExtract 3430 0 - 3433: 284 Load 286(s2DArray) - 3434:175(f16vec3) Load 177(f16c3) - 3435:6(float16_t) Load 137(f16bias) - 3436:3146(ResType) ImageSparseSampleImplicitLod 3433 3434 Bias ConstOffset 3435 722 - 3437: 7(f16vec4) CompositeExtract 3436 1 - Store 3366(texel) 3437 - 3438: 47(int) CompositeExtract 3436 0 - 3439: 337 Load 339(s2DArrayShadow) - 3440: 249(fvec4) Load 251(c4) - 3441: 208(ptr) AccessChain 3366(texel) 207 - 3442: 52(float) CompositeExtract 3440 3 - 3443:3182(ResType) ImageSparseSampleDrefImplicitLod 3439 3440 3442 ConstOffset 722 - 3444:6(float16_t) CompositeExtract 3443 1 - Store 3441 3444 - 3445: 47(int) CompositeExtract 3443 0 - 3446: 337 Load 339(s2DArrayShadow) - 3447:175(f16vec3) Load 177(f16c3) - 3448: 52(float) Load 215(compare) - 3449: 208(ptr) AccessChain 3366(texel) 207 - 3450:3182(ResType) ImageSparseSampleDrefImplicitLod 3446 3447 3448 ConstOffset 722 - 3451:6(float16_t) CompositeExtract 3450 1 - Store 3449 3451 - 3452: 47(int) CompositeExtract 3450 0 - 3453: 7(f16vec4) Load 3366(texel) - ReturnValue 3453 - FunctionEnd -75(testSparseTextureLodOffset(): 7(f16vec4) Function None 8 - 76: Label - 3456(texel): 64(ptr) Variable Function - Store 3456(texel) 121 - 3457: 143 Load 145(s2D) - 3458: 53(fvec2) Load 148(c2) - 3459: 52(float) Load 565(lod) - 3460:3146(ResType) ImageSparseSampleExplicitLod 3457 3458 Lod ConstOffset 3459 722 - 3461: 7(f16vec4) CompositeExtract 3460 1 - Store 3456(texel) 3461 - 3462: 47(int) CompositeExtract 3460 0 - 3463: 143 Load 145(s2D) - 3464:154(f16vec2) Load 156(f16c2) - 3465:6(float16_t) Load 572(f16lod) - 3466:3146(ResType) ImageSparseSampleExplicitLod 3463 3464 Lod ConstOffset 3465 722 - 3467: 7(f16vec4) CompositeExtract 3466 1 - Store 3456(texel) 3467 - 3468: 47(int) CompositeExtract 3466 0 - 3469: 163 Load 165(s3D) - 3470: 167(fvec3) Load 169(c3) - 3471: 52(float) Load 565(lod) - 3472:3146(ResType) ImageSparseSampleExplicitLod 3469 3470 Lod ConstOffset 3471 735 - 3473: 7(f16vec4) CompositeExtract 3472 1 - Store 3456(texel) 3473 - 3474: 47(int) CompositeExtract 3472 0 - 3475: 163 Load 165(s3D) - 3476:175(f16vec3) Load 177(f16c3) - 3477:6(float16_t) Load 572(f16lod) - 3478:3146(ResType) ImageSparseSampleExplicitLod 3475 3476 Lod ConstOffset 3477 735 - 3479: 7(f16vec4) CompositeExtract 3478 1 - Store 3456(texel) 3479 - 3480: 47(int) CompositeExtract 3478 0 - 3481: 224 Load 226(s2DShadow) - 3482: 167(fvec3) Load 169(c3) - 3483: 52(float) Load 565(lod) - 3484: 208(ptr) AccessChain 3456(texel) 207 - 3485: 52(float) CompositeExtract 3482 2 - 3486:3182(ResType) ImageSparseSampleDrefExplicitLod 3481 3482 3485 Lod ConstOffset 3483 722 - 3487:6(float16_t) CompositeExtract 3486 1 - Store 3484 3487 - 3488: 47(int) CompositeExtract 3486 0 - 3489: 224 Load 226(s2DShadow) - 3490:154(f16vec2) Load 156(f16c2) - 3491: 52(float) Load 215(compare) - 3492:6(float16_t) Load 572(f16lod) - 3493: 208(ptr) AccessChain 3456(texel) 207 - 3494:3182(ResType) ImageSparseSampleDrefExplicitLod 3489 3490 3491 Lod ConstOffset 3492 722 - 3495:6(float16_t) CompositeExtract 3494 1 - Store 3493 3495 - 3496: 47(int) CompositeExtract 3494 0 - 3497: 284 Load 286(s2DArray) - 3498: 167(fvec3) Load 169(c3) - 3499: 52(float) Load 565(lod) - 3500:3146(ResType) ImageSparseSampleExplicitLod 3497 3498 Lod ConstOffset 3499 722 - 3501: 7(f16vec4) CompositeExtract 3500 1 - Store 3456(texel) 3501 - 3502: 47(int) CompositeExtract 3500 0 - 3503: 284 Load 286(s2DArray) - 3504:175(f16vec3) Load 177(f16c3) - 3505:6(float16_t) Load 572(f16lod) - 3506:3146(ResType) ImageSparseSampleExplicitLod 3503 3504 Lod ConstOffset 3505 722 - 3507: 7(f16vec4) CompositeExtract 3506 1 - Store 3456(texel) 3507 - 3508: 47(int) CompositeExtract 3506 0 - 3509: 7(f16vec4) Load 3456(texel) - ReturnValue 3509 + 3413: 284 Load 286(s2DArray) + 3414:175(f16vec3) Load 177(f16c3) + 3415:6(float16_t) Load 572(f16lod) + 3416:3056(ResType) ImageSparseSampleExplicitLod 3413 3414 Lod ConstOffset 3415 722 + 3417: 7(f16vec4) CompositeExtract 3416 1 + Store 3366(texel) 3417 + 3418: 47(int) CompositeExtract 3416 0 + 3419: 7(f16vec4) Load 3366(texel) + ReturnValue 3419 FunctionEnd 77(testSparseTextureGrad(): 7(f16vec4) Function None 8 78: Label - 3512(texel): 64(ptr) Variable Function - Store 3512(texel) 121 - 3513: 143 Load 145(s2D) - 3514: 53(fvec2) Load 148(c2) - 3515: 53(fvec2) Load 1409(dPdxy2) - 3516: 53(fvec2) Load 1409(dPdxy2) - 3517:3146(ResType) ImageSparseSampleExplicitLod 3513 3514 Grad 3515 3516 - 3518: 7(f16vec4) CompositeExtract 3517 1 - Store 3512(texel) 3518 - 3519: 47(int) CompositeExtract 3517 0 - 3520: 143 Load 145(s2D) - 3521:154(f16vec2) Load 156(f16c2) - 3522:154(f16vec2) Load 1417(f16dPdxy2) - 3523:154(f16vec2) Load 1417(f16dPdxy2) - 3524:3146(ResType) ImageSparseSampleExplicitLod 3520 3521 Grad 3522 3523 - 3525: 7(f16vec4) CompositeExtract 3524 1 - Store 3512(texel) 3525 - 3526: 47(int) CompositeExtract 3524 0 - 3527: 163 Load 165(s3D) - 3528: 167(fvec3) Load 169(c3) - 3529: 167(fvec3) Load 1425(dPdxy3) - 3530: 167(fvec3) Load 1425(dPdxy3) - 3531:3146(ResType) ImageSparseSampleExplicitLod 3527 3528 Grad 3529 3530 - 3532: 7(f16vec4) CompositeExtract 3531 1 - Store 3512(texel) 3532 - 3533: 47(int) CompositeExtract 3531 0 - 3534: 163 Load 165(s3D) - 3535:175(f16vec3) Load 177(f16c3) - 3536:175(f16vec3) Load 1433(f16dPdxy3) - 3537:175(f16vec3) Load 1433(f16dPdxy3) - 3538:3146(ResType) ImageSparseSampleExplicitLod 3534 3535 Grad 3536 3537 - 3539: 7(f16vec4) CompositeExtract 3538 1 - Store 3512(texel) 3539 - 3540: 47(int) CompositeExtract 3538 0 - 3541: 184 Load 186(sCube) - 3542: 167(fvec3) Load 169(c3) - 3543: 167(fvec3) Load 1425(dPdxy3) - 3544: 167(fvec3) Load 1425(dPdxy3) - 3545:3146(ResType) ImageSparseSampleExplicitLod 3541 3542 Grad 3543 3544 - 3546: 7(f16vec4) CompositeExtract 3545 1 - Store 3512(texel) 3546 - 3547: 47(int) CompositeExtract 3545 0 - 3548: 184 Load 186(sCube) - 3549:175(f16vec3) Load 177(f16c3) - 3550:175(f16vec3) Load 1433(f16dPdxy3) - 3551:175(f16vec3) Load 1433(f16dPdxy3) - 3552:3146(ResType) ImageSparseSampleExplicitLod 3548 3549 Grad 3550 3551 - 3553: 7(f16vec4) CompositeExtract 3552 1 - Store 3512(texel) 3553 - 3554: 47(int) CompositeExtract 3552 0 - 3555: 357 Load 359(s2DRect) - 3556: 53(fvec2) Load 148(c2) - 3557: 53(fvec2) Load 1409(dPdxy2) - 3558: 53(fvec2) Load 1409(dPdxy2) - 3559:3146(ResType) ImageSparseSampleExplicitLod 3555 3556 Grad 3557 3558 - 3560: 7(f16vec4) CompositeExtract 3559 1 - Store 3512(texel) 3560 - 3561: 47(int) CompositeExtract 3559 0 - 3562: 357 Load 359(s2DRect) - 3563:154(f16vec2) Load 156(f16c2) - 3564:154(f16vec2) Load 1417(f16dPdxy2) - 3565:154(f16vec2) Load 1417(f16dPdxy2) - 3566:3146(ResType) ImageSparseSampleExplicitLod 3562 3563 Grad 3564 3565 + 3422(texel): 64(ptr) Variable Function + Store 3422(texel) 121 + 3423: 143 Load 145(s2D) + 3424: 53(fvec2) Load 148(c2) + 3425: 53(fvec2) Load 1407(dPdxy2) + 3426:3056(ResType) ImageSparseSampleExplicitLod 3423 3424 Grad 3425 3425 + 3427: 7(f16vec4) CompositeExtract 3426 1 + Store 3422(texel) 3427 + 3428: 47(int) CompositeExtract 3426 0 + 3429: 143 Load 145(s2D) + 3430:154(f16vec2) Load 156(f16c2) + 3431:154(f16vec2) Load 1414(f16dPdxy2) + 3432:3056(ResType) ImageSparseSampleExplicitLod 3429 3430 Grad 3431 3431 + 3433: 7(f16vec4) CompositeExtract 3432 1 + Store 3422(texel) 3433 + 3434: 47(int) CompositeExtract 3432 0 + 3435: 163 Load 165(s3D) + 3436: 167(fvec3) Load 169(c3) + 3437: 167(fvec3) Load 1421(dPdxy3) + 3438:3056(ResType) ImageSparseSampleExplicitLod 3435 3436 Grad 3437 3437 + 3439: 7(f16vec4) CompositeExtract 3438 1 + Store 3422(texel) 3439 + 3440: 47(int) CompositeExtract 3438 0 + 3441: 163 Load 165(s3D) + 3442:175(f16vec3) Load 177(f16c3) + 3443:175(f16vec3) Load 1428(f16dPdxy3) + 3444:3056(ResType) ImageSparseSampleExplicitLod 3441 3442 Grad 3443 3443 + 3445: 7(f16vec4) CompositeExtract 3444 1 + Store 3422(texel) 3445 + 3446: 47(int) CompositeExtract 3444 0 + 3447: 184 Load 186(sCube) + 3448: 167(fvec3) Load 169(c3) + 3449: 167(fvec3) Load 1421(dPdxy3) + 3450:3056(ResType) ImageSparseSampleExplicitLod 3447 3448 Grad 3449 3449 + 3451: 7(f16vec4) CompositeExtract 3450 1 + Store 3422(texel) 3451 + 3452: 47(int) CompositeExtract 3450 0 + 3453: 184 Load 186(sCube) + 3454:175(f16vec3) Load 177(f16c3) + 3455:175(f16vec3) Load 1428(f16dPdxy3) + 3456:3056(ResType) ImageSparseSampleExplicitLod 3453 3454 Grad 3455 3455 + 3457: 7(f16vec4) CompositeExtract 3456 1 + Store 3422(texel) 3457 + 3458: 47(int) CompositeExtract 3456 0 + 3459: 357 Load 359(s2DRect) + 3460: 53(fvec2) Load 148(c2) + 3461: 53(fvec2) Load 1407(dPdxy2) + 3462:3056(ResType) ImageSparseSampleExplicitLod 3459 3460 Grad 3461 3461 + 3463: 7(f16vec4) CompositeExtract 3462 1 + Store 3422(texel) 3463 + 3464: 47(int) CompositeExtract 3462 0 + 3465: 357 Load 359(s2DRect) + 3466:154(f16vec2) Load 156(f16c2) + 3467:154(f16vec2) Load 1414(f16dPdxy2) + 3468:3056(ResType) ImageSparseSampleExplicitLod 3465 3466 Grad 3467 3467 + 3469: 7(f16vec4) CompositeExtract 3468 1 + Store 3422(texel) 3469 + 3470: 47(int) CompositeExtract 3468 0 + 3471: 371 Load 373(s2DRectShadow) + 3472: 167(fvec3) Load 169(c3) + 3473: 53(fvec2) Load 1407(dPdxy2) + 3474: 208(ptr) AccessChain 3422(texel) 207 + 3475: 52(float) CompositeExtract 3472 2 + 3476:3092(ResType) ImageSparseSampleDrefExplicitLod 3471 3472 3475 Grad 3473 3473 + 3477:6(float16_t) CompositeExtract 3476 1 + Store 3474 3477 + 3478: 47(int) CompositeExtract 3476 0 + 3479: 371 Load 373(s2DRectShadow) + 3480:154(f16vec2) Load 156(f16c2) + 3481: 52(float) Load 215(compare) + 3482:154(f16vec2) Load 1414(f16dPdxy2) + 3483: 208(ptr) AccessChain 3422(texel) 207 + 3484:3092(ResType) ImageSparseSampleDrefExplicitLod 3479 3480 3481 Grad 3482 3482 + 3485:6(float16_t) CompositeExtract 3484 1 + Store 3483 3485 + 3486: 47(int) CompositeExtract 3484 0 + 3487: 224 Load 226(s2DShadow) + 3488: 167(fvec3) Load 169(c3) + 3489: 53(fvec2) Load 1407(dPdxy2) + 3490: 208(ptr) AccessChain 3422(texel) 207 + 3491: 52(float) CompositeExtract 3488 2 + 3492:3092(ResType) ImageSparseSampleDrefExplicitLod 3487 3488 3491 Grad 3489 3489 + 3493:6(float16_t) CompositeExtract 3492 1 + Store 3490 3493 + 3494: 47(int) CompositeExtract 3492 0 + 3495: 224 Load 226(s2DShadow) + 3496:154(f16vec2) Load 156(f16c2) + 3497: 52(float) Load 215(compare) + 3498:154(f16vec2) Load 1414(f16dPdxy2) + 3499: 208(ptr) AccessChain 3422(texel) 207 + 3500:3092(ResType) ImageSparseSampleDrefExplicitLod 3495 3496 3497 Grad 3498 3498 + 3501:6(float16_t) CompositeExtract 3500 1 + Store 3499 3501 + 3502: 47(int) CompositeExtract 3500 0 + 3503: 245 Load 247(sCubeShadow) + 3504: 249(fvec4) Load 251(c4) + 3505: 167(fvec3) Load 1421(dPdxy3) + 3506: 208(ptr) AccessChain 3422(texel) 207 + 3507: 52(float) CompositeExtract 3504 3 + 3508:3092(ResType) ImageSparseSampleDrefExplicitLod 3503 3504 3507 Grad 3505 3505 + 3509:6(float16_t) CompositeExtract 3508 1 + Store 3506 3509 + 3510: 47(int) CompositeExtract 3508 0 + 3511: 245 Load 247(sCubeShadow) + 3512:175(f16vec3) Load 177(f16c3) + 3513: 52(float) Load 215(compare) + 3514:175(f16vec3) Load 1428(f16dPdxy3) + 3515: 208(ptr) AccessChain 3422(texel) 207 + 3516:3092(ResType) ImageSparseSampleDrefExplicitLod 3511 3512 3513 Grad 3514 3514 + 3517:6(float16_t) CompositeExtract 3516 1 + Store 3515 3517 + 3518: 47(int) CompositeExtract 3516 0 + 3519: 284 Load 286(s2DArray) + 3520: 167(fvec3) Load 169(c3) + 3521: 53(fvec2) Load 1407(dPdxy2) + 3522:3056(ResType) ImageSparseSampleExplicitLod 3519 3520 Grad 3521 3521 + 3523: 7(f16vec4) CompositeExtract 3522 1 + Store 3422(texel) 3523 + 3524: 47(int) CompositeExtract 3522 0 + 3525: 284 Load 286(s2DArray) + 3526:175(f16vec3) Load 177(f16c3) + 3527:154(f16vec2) Load 1414(f16dPdxy2) + 3528:3056(ResType) ImageSparseSampleExplicitLod 3525 3526 Grad 3527 3527 + 3529: 7(f16vec4) CompositeExtract 3528 1 + Store 3422(texel) 3529 + 3530: 47(int) CompositeExtract 3528 0 + 3531: 337 Load 339(s2DArrayShadow) + 3532: 249(fvec4) Load 251(c4) + 3533: 53(fvec2) Load 1407(dPdxy2) + 3534: 208(ptr) AccessChain 3422(texel) 207 + 3535: 52(float) CompositeExtract 3532 3 + 3536:3092(ResType) ImageSparseSampleDrefExplicitLod 3531 3532 3535 Grad 3533 3533 + 3537:6(float16_t) CompositeExtract 3536 1 + Store 3534 3537 + 3538: 47(int) CompositeExtract 3536 0 + 3539: 337 Load 339(s2DArrayShadow) + 3540:175(f16vec3) Load 177(f16c3) + 3541: 52(float) Load 215(compare) + 3542:154(f16vec2) Load 1414(f16dPdxy2) + 3543: 208(ptr) AccessChain 3422(texel) 207 + 3544:3092(ResType) ImageSparseSampleDrefExplicitLod 3539 3540 3541 Grad 3542 3542 + 3545:6(float16_t) CompositeExtract 3544 1 + Store 3543 3545 + 3546: 47(int) CompositeExtract 3544 0 + 3547: 299 Load 301(sCubeArray) + 3548: 249(fvec4) Load 251(c4) + 3549: 167(fvec3) Load 1421(dPdxy3) + 3550:3056(ResType) ImageSparseSampleExplicitLod 3547 3548 Grad 3549 3549 + 3551: 7(f16vec4) CompositeExtract 3550 1 + Store 3422(texel) 3551 + 3552: 47(int) CompositeExtract 3550 0 + 3553: 299 Load 301(sCubeArray) + 3554: 7(f16vec4) Load 309(f16c4) + 3555:175(f16vec3) Load 1428(f16dPdxy3) + 3556:3056(ResType) ImageSparseSampleExplicitLod 3553 3554 Grad 3555 3555 + 3557: 7(f16vec4) CompositeExtract 3556 1 + Store 3422(texel) 3557 + 3558: 47(int) CompositeExtract 3556 0 + 3559: 7(f16vec4) Load 3422(texel) + ReturnValue 3559 + FunctionEnd +79(testSparseTextureGradOffset(): 7(f16vec4) Function None 8 + 80: Label + 3562(texel): 64(ptr) Variable Function + Store 3562(texel) 121 + 3563: 143 Load 145(s2D) + 3564: 53(fvec2) Load 148(c2) + 3565: 53(fvec2) Load 1407(dPdxy2) + 3566:3056(ResType) ImageSparseSampleExplicitLod 3563 3564 Grad ConstOffset 3565 3565 722 3567: 7(f16vec4) CompositeExtract 3566 1 - Store 3512(texel) 3567 + Store 3562(texel) 3567 3568: 47(int) CompositeExtract 3566 0 - 3569: 371 Load 373(s2DRectShadow) - 3570: 167(fvec3) Load 169(c3) - 3571: 53(fvec2) Load 1409(dPdxy2) - 3572: 53(fvec2) Load 1409(dPdxy2) - 3573: 208(ptr) AccessChain 3512(texel) 207 - 3574: 52(float) CompositeExtract 3570 2 - 3575:3182(ResType) ImageSparseSampleDrefExplicitLod 3569 3570 3574 Grad 3571 3572 - 3576:6(float16_t) CompositeExtract 3575 1 - Store 3573 3576 - 3577: 47(int) CompositeExtract 3575 0 - 3578: 371 Load 373(s2DRectShadow) - 3579:154(f16vec2) Load 156(f16c2) - 3580: 52(float) Load 215(compare) - 3581:154(f16vec2) Load 1417(f16dPdxy2) - 3582:154(f16vec2) Load 1417(f16dPdxy2) - 3583: 208(ptr) AccessChain 3512(texel) 207 - 3584:3182(ResType) ImageSparseSampleDrefExplicitLod 3578 3579 3580 Grad 3581 3582 - 3585:6(float16_t) CompositeExtract 3584 1 - Store 3583 3585 + 3569: 143 Load 145(s2D) + 3570:154(f16vec2) Load 156(f16c2) + 3571:154(f16vec2) Load 1414(f16dPdxy2) + 3572:3056(ResType) ImageSparseSampleExplicitLod 3569 3570 Grad ConstOffset 3571 3571 722 + 3573: 7(f16vec4) CompositeExtract 3572 1 + Store 3562(texel) 3573 + 3574: 47(int) CompositeExtract 3572 0 + 3575: 163 Load 165(s3D) + 3576: 167(fvec3) Load 169(c3) + 3577: 167(fvec3) Load 1421(dPdxy3) + 3578:3056(ResType) ImageSparseSampleExplicitLod 3575 3576 Grad ConstOffset 3577 3577 735 + 3579: 7(f16vec4) CompositeExtract 3578 1 + Store 3562(texel) 3579 + 3580: 47(int) CompositeExtract 3578 0 + 3581: 163 Load 165(s3D) + 3582:175(f16vec3) Load 177(f16c3) + 3583:175(f16vec3) Load 1428(f16dPdxy3) + 3584:3056(ResType) ImageSparseSampleExplicitLod 3581 3582 Grad ConstOffset 3583 3583 735 + 3585: 7(f16vec4) CompositeExtract 3584 1 + Store 3562(texel) 3585 3586: 47(int) CompositeExtract 3584 0 - 3587: 224 Load 226(s2DShadow) - 3588: 167(fvec3) Load 169(c3) - 3589: 53(fvec2) Load 1409(dPdxy2) - 3590: 53(fvec2) Load 1409(dPdxy2) - 3591: 208(ptr) AccessChain 3512(texel) 207 - 3592: 52(float) CompositeExtract 3588 2 - 3593:3182(ResType) ImageSparseSampleDrefExplicitLod 3587 3588 3592 Grad 3589 3590 - 3594:6(float16_t) CompositeExtract 3593 1 - Store 3591 3594 - 3595: 47(int) CompositeExtract 3593 0 - 3596: 224 Load 226(s2DShadow) - 3597:154(f16vec2) Load 156(f16c2) - 3598: 52(float) Load 215(compare) - 3599:154(f16vec2) Load 1417(f16dPdxy2) - 3600:154(f16vec2) Load 1417(f16dPdxy2) - 3601: 208(ptr) AccessChain 3512(texel) 207 - 3602:3182(ResType) ImageSparseSampleDrefExplicitLod 3596 3597 3598 Grad 3599 3600 - 3603:6(float16_t) CompositeExtract 3602 1 - Store 3601 3603 - 3604: 47(int) CompositeExtract 3602 0 - 3605: 245 Load 247(sCubeShadow) - 3606: 249(fvec4) Load 251(c4) - 3607: 167(fvec3) Load 1425(dPdxy3) - 3608: 167(fvec3) Load 1425(dPdxy3) - 3609: 208(ptr) AccessChain 3512(texel) 207 - 3610: 52(float) CompositeExtract 3606 3 - 3611:3182(ResType) ImageSparseSampleDrefExplicitLod 3605 3606 3610 Grad 3607 3608 - 3612:6(float16_t) CompositeExtract 3611 1 - Store 3609 3612 - 3613: 47(int) CompositeExtract 3611 0 - 3614: 245 Load 247(sCubeShadow) - 3615:175(f16vec3) Load 177(f16c3) - 3616: 52(float) Load 215(compare) - 3617:175(f16vec3) Load 1433(f16dPdxy3) - 3618:175(f16vec3) Load 1433(f16dPdxy3) - 3619: 208(ptr) AccessChain 3512(texel) 207 - 3620:3182(ResType) ImageSparseSampleDrefExplicitLod 3614 3615 3616 Grad 3617 3618 + 3587: 357 Load 359(s2DRect) + 3588: 53(fvec2) Load 148(c2) + 3589: 53(fvec2) Load 1407(dPdxy2) + 3590:3056(ResType) ImageSparseSampleExplicitLod 3587 3588 Grad ConstOffset 3589 3589 722 + 3591: 7(f16vec4) CompositeExtract 3590 1 + Store 3562(texel) 3591 + 3592: 47(int) CompositeExtract 3590 0 + 3593: 357 Load 359(s2DRect) + 3594:154(f16vec2) Load 156(f16c2) + 3595:154(f16vec2) Load 1414(f16dPdxy2) + 3596:3056(ResType) ImageSparseSampleExplicitLod 3593 3594 Grad ConstOffset 3595 3595 722 + 3597: 7(f16vec4) CompositeExtract 3596 1 + Store 3562(texel) 3597 + 3598: 47(int) CompositeExtract 3596 0 + 3599: 371 Load 373(s2DRectShadow) + 3600: 167(fvec3) Load 169(c3) + 3601: 53(fvec2) Load 1407(dPdxy2) + 3602: 208(ptr) AccessChain 3562(texel) 207 + 3603: 52(float) CompositeExtract 3600 2 + 3604:3092(ResType) ImageSparseSampleDrefExplicitLod 3599 3600 3603 Grad ConstOffset 3601 3601 722 + 3605:6(float16_t) CompositeExtract 3604 1 + Store 3602 3605 + 3606: 47(int) CompositeExtract 3604 0 + 3607: 371 Load 373(s2DRectShadow) + 3608:154(f16vec2) Load 156(f16c2) + 3609: 52(float) Load 215(compare) + 3610:154(f16vec2) Load 1414(f16dPdxy2) + 3611: 208(ptr) AccessChain 3562(texel) 207 + 3612:3092(ResType) ImageSparseSampleDrefExplicitLod 3607 3608 3609 Grad ConstOffset 3610 3610 722 + 3613:6(float16_t) CompositeExtract 3612 1 + Store 3611 3613 + 3614: 47(int) CompositeExtract 3612 0 + 3615: 224 Load 226(s2DShadow) + 3616: 167(fvec3) Load 169(c3) + 3617: 53(fvec2) Load 1407(dPdxy2) + 3618: 208(ptr) AccessChain 3562(texel) 207 + 3619: 52(float) CompositeExtract 3616 2 + 3620:3092(ResType) ImageSparseSampleDrefExplicitLod 3615 3616 3619 Grad ConstOffset 3617 3617 722 3621:6(float16_t) CompositeExtract 3620 1 - Store 3619 3621 + Store 3618 3621 3622: 47(int) CompositeExtract 3620 0 - 3623: 284 Load 286(s2DArray) - 3624: 167(fvec3) Load 169(c3) - 3625: 53(fvec2) Load 1409(dPdxy2) - 3626: 53(fvec2) Load 1409(dPdxy2) - 3627:3146(ResType) ImageSparseSampleExplicitLod 3623 3624 Grad 3625 3626 - 3628: 7(f16vec4) CompositeExtract 3627 1 - Store 3512(texel) 3628 - 3629: 47(int) CompositeExtract 3627 0 - 3630: 284 Load 286(s2DArray) - 3631:175(f16vec3) Load 177(f16c3) - 3632:154(f16vec2) Load 1417(f16dPdxy2) - 3633:154(f16vec2) Load 1417(f16dPdxy2) - 3634:3146(ResType) ImageSparseSampleExplicitLod 3630 3631 Grad 3632 3633 + 3623: 224 Load 226(s2DShadow) + 3624:154(f16vec2) Load 156(f16c2) + 3625: 52(float) Load 215(compare) + 3626:154(f16vec2) Load 1414(f16dPdxy2) + 3627: 208(ptr) AccessChain 3562(texel) 207 + 3628:3092(ResType) ImageSparseSampleDrefExplicitLod 3623 3624 3625 Grad ConstOffset 3626 3626 722 + 3629:6(float16_t) CompositeExtract 3628 1 + Store 3627 3629 + 3630: 47(int) CompositeExtract 3628 0 + 3631: 284 Load 286(s2DArray) + 3632: 167(fvec3) Load 169(c3) + 3633: 53(fvec2) Load 1407(dPdxy2) + 3634:3056(ResType) ImageSparseSampleExplicitLod 3631 3632 Grad ConstOffset 3633 3633 722 3635: 7(f16vec4) CompositeExtract 3634 1 - Store 3512(texel) 3635 + Store 3562(texel) 3635 3636: 47(int) CompositeExtract 3634 0 - 3637: 337 Load 339(s2DArrayShadow) - 3638: 249(fvec4) Load 251(c4) - 3639: 53(fvec2) Load 1409(dPdxy2) - 3640: 53(fvec2) Load 1409(dPdxy2) - 3641: 208(ptr) AccessChain 3512(texel) 207 - 3642: 52(float) CompositeExtract 3638 3 - 3643:3182(ResType) ImageSparseSampleDrefExplicitLod 3637 3638 3642 Grad 3639 3640 - 3644:6(float16_t) CompositeExtract 3643 1 - Store 3641 3644 - 3645: 47(int) CompositeExtract 3643 0 - 3646: 337 Load 339(s2DArrayShadow) - 3647:175(f16vec3) Load 177(f16c3) - 3648: 52(float) Load 215(compare) - 3649:154(f16vec2) Load 1417(f16dPdxy2) - 3650:154(f16vec2) Load 1417(f16dPdxy2) - 3651: 208(ptr) AccessChain 3512(texel) 207 - 3652:3182(ResType) ImageSparseSampleDrefExplicitLod 3646 3647 3648 Grad 3649 3650 - 3653:6(float16_t) CompositeExtract 3652 1 - Store 3651 3653 - 3654: 47(int) CompositeExtract 3652 0 - 3655: 299 Load 301(sCubeArray) - 3656: 249(fvec4) Load 251(c4) - 3657: 167(fvec3) Load 1425(dPdxy3) - 3658: 167(fvec3) Load 1425(dPdxy3) - 3659:3146(ResType) ImageSparseSampleExplicitLod 3655 3656 Grad 3657 3658 - 3660: 7(f16vec4) CompositeExtract 3659 1 - Store 3512(texel) 3660 - 3661: 47(int) CompositeExtract 3659 0 - 3662: 299 Load 301(sCubeArray) - 3663: 7(f16vec4) Load 309(f16c4) - 3664:175(f16vec3) Load 1433(f16dPdxy3) - 3665:175(f16vec3) Load 1433(f16dPdxy3) - 3666:3146(ResType) ImageSparseSampleExplicitLod 3662 3663 Grad 3664 3665 - 3667: 7(f16vec4) CompositeExtract 3666 1 - Store 3512(texel) 3667 - 3668: 47(int) CompositeExtract 3666 0 - 3669: 7(f16vec4) Load 3512(texel) - ReturnValue 3669 - FunctionEnd -79(testSparseTextureGradOffset(): 7(f16vec4) Function None 8 - 80: Label - 3672(texel): 64(ptr) Variable Function - Store 3672(texel) 121 - 3673: 143 Load 145(s2D) - 3674: 53(fvec2) Load 148(c2) - 3675: 53(fvec2) Load 1409(dPdxy2) - 3676: 53(fvec2) Load 1409(dPdxy2) - 3677:3146(ResType) ImageSparseSampleExplicitLod 3673 3674 Grad ConstOffset 3675 3676 722 - 3678: 7(f16vec4) CompositeExtract 3677 1 - Store 3672(texel) 3678 - 3679: 47(int) CompositeExtract 3677 0 - 3680: 143 Load 145(s2D) - 3681:154(f16vec2) Load 156(f16c2) - 3682:154(f16vec2) Load 1417(f16dPdxy2) - 3683:154(f16vec2) Load 1417(f16dPdxy2) - 3684:3146(ResType) ImageSparseSampleExplicitLod 3680 3681 Grad ConstOffset 3682 3683 722 - 3685: 7(f16vec4) CompositeExtract 3684 1 - Store 3672(texel) 3685 - 3686: 47(int) CompositeExtract 3684 0 - 3687: 163 Load 165(s3D) - 3688: 167(fvec3) Load 169(c3) - 3689: 167(fvec3) Load 1425(dPdxy3) - 3690: 167(fvec3) Load 1425(dPdxy3) - 3691:3146(ResType) ImageSparseSampleExplicitLod 3687 3688 Grad ConstOffset 3689 3690 735 - 3692: 7(f16vec4) CompositeExtract 3691 1 - Store 3672(texel) 3692 - 3693: 47(int) CompositeExtract 3691 0 - 3694: 163 Load 165(s3D) - 3695:175(f16vec3) Load 177(f16c3) - 3696:175(f16vec3) Load 1433(f16dPdxy3) - 3697:175(f16vec3) Load 1433(f16dPdxy3) - 3698:3146(ResType) ImageSparseSampleExplicitLod 3694 3695 Grad ConstOffset 3696 3697 735 - 3699: 7(f16vec4) CompositeExtract 3698 1 - Store 3672(texel) 3699 - 3700: 47(int) CompositeExtract 3698 0 - 3701: 357 Load 359(s2DRect) - 3702: 53(fvec2) Load 148(c2) - 3703: 53(fvec2) Load 1409(dPdxy2) - 3704: 53(fvec2) Load 1409(dPdxy2) - 3705:3146(ResType) ImageSparseSampleExplicitLod 3701 3702 Grad ConstOffset 3703 3704 722 - 3706: 7(f16vec4) CompositeExtract 3705 1 - Store 3672(texel) 3706 - 3707: 47(int) CompositeExtract 3705 0 - 3708: 357 Load 359(s2DRect) - 3709:154(f16vec2) Load 156(f16c2) - 3710:154(f16vec2) Load 1417(f16dPdxy2) - 3711:154(f16vec2) Load 1417(f16dPdxy2) - 3712:3146(ResType) ImageSparseSampleExplicitLod 3708 3709 Grad ConstOffset 3710 3711 722 - 3713: 7(f16vec4) CompositeExtract 3712 1 - Store 3672(texel) 3713 - 3714: 47(int) CompositeExtract 3712 0 - 3715: 371 Load 373(s2DRectShadow) - 3716: 167(fvec3) Load 169(c3) - 3717: 53(fvec2) Load 1409(dPdxy2) - 3718: 53(fvec2) Load 1409(dPdxy2) - 3719: 208(ptr) AccessChain 3672(texel) 207 - 3720: 52(float) CompositeExtract 3716 2 - 3721:3182(ResType) ImageSparseSampleDrefExplicitLod 3715 3716 3720 Grad ConstOffset 3717 3718 722 - 3722:6(float16_t) CompositeExtract 3721 1 - Store 3719 3722 - 3723: 47(int) CompositeExtract 3721 0 - 3724: 371 Load 373(s2DRectShadow) - 3725:154(f16vec2) Load 156(f16c2) - 3726: 52(float) Load 215(compare) - 3727:154(f16vec2) Load 1417(f16dPdxy2) - 3728:154(f16vec2) Load 1417(f16dPdxy2) - 3729: 208(ptr) AccessChain 3672(texel) 207 - 3730:3182(ResType) ImageSparseSampleDrefExplicitLod 3724 3725 3726 Grad ConstOffset 3727 3728 722 - 3731:6(float16_t) CompositeExtract 3730 1 - Store 3729 3731 - 3732: 47(int) CompositeExtract 3730 0 - 3733: 224 Load 226(s2DShadow) - 3734: 167(fvec3) Load 169(c3) - 3735: 53(fvec2) Load 1409(dPdxy2) - 3736: 53(fvec2) Load 1409(dPdxy2) - 3737: 208(ptr) AccessChain 3672(texel) 207 - 3738: 52(float) CompositeExtract 3734 2 - 3739:3182(ResType) ImageSparseSampleDrefExplicitLod 3733 3734 3738 Grad ConstOffset 3735 3736 722 - 3740:6(float16_t) CompositeExtract 3739 1 - Store 3737 3740 - 3741: 47(int) CompositeExtract 3739 0 - 3742: 224 Load 226(s2DShadow) - 3743:154(f16vec2) Load 156(f16c2) - 3744: 52(float) Load 215(compare) - 3745:154(f16vec2) Load 1417(f16dPdxy2) - 3746:154(f16vec2) Load 1417(f16dPdxy2) - 3747: 208(ptr) AccessChain 3672(texel) 207 - 3748:3182(ResType) ImageSparseSampleDrefExplicitLod 3742 3743 3744 Grad ConstOffset 3745 3746 722 - 3749:6(float16_t) CompositeExtract 3748 1 - Store 3747 3749 - 3750: 47(int) CompositeExtract 3748 0 - 3751: 284 Load 286(s2DArray) - 3752: 167(fvec3) Load 169(c3) - 3753: 53(fvec2) Load 1409(dPdxy2) - 3754: 53(fvec2) Load 1409(dPdxy2) - 3755:3146(ResType) ImageSparseSampleExplicitLod 3751 3752 Grad ConstOffset 3753 3754 722 - 3756: 7(f16vec4) CompositeExtract 3755 1 - Store 3672(texel) 3756 - 3757: 47(int) CompositeExtract 3755 0 - 3758: 284 Load 286(s2DArray) - 3759:175(f16vec3) Load 177(f16c3) - 3760:154(f16vec2) Load 1417(f16dPdxy2) - 3761:154(f16vec2) Load 1417(f16dPdxy2) - 3762:3146(ResType) ImageSparseSampleExplicitLod 3758 3759 Grad ConstOffset 3760 3761 722 - 3763: 7(f16vec4) CompositeExtract 3762 1 - Store 3672(texel) 3763 - 3764: 47(int) CompositeExtract 3762 0 - 3765: 337 Load 339(s2DArrayShadow) - 3766: 249(fvec4) Load 251(c4) - 3767: 53(fvec2) Load 1409(dPdxy2) - 3768: 53(fvec2) Load 1409(dPdxy2) - 3769: 208(ptr) AccessChain 3672(texel) 207 - 3770: 52(float) CompositeExtract 3766 3 - 3771:3182(ResType) ImageSparseSampleDrefExplicitLod 3765 3766 3770 Grad ConstOffset 3767 3768 722 - 3772:6(float16_t) CompositeExtract 3771 1 - Store 3769 3772 - 3773: 47(int) CompositeExtract 3771 0 - 3774: 337 Load 339(s2DArrayShadow) - 3775:175(f16vec3) Load 177(f16c3) - 3776: 52(float) Load 215(compare) - 3777:154(f16vec2) Load 1417(f16dPdxy2) - 3778:154(f16vec2) Load 1417(f16dPdxy2) - 3779: 208(ptr) AccessChain 3672(texel) 207 - 3780:3182(ResType) ImageSparseSampleDrefExplicitLod 3774 3775 3776 Grad ConstOffset 3777 3778 722 - 3781:6(float16_t) CompositeExtract 3780 1 - Store 3779 3781 - 3782: 47(int) CompositeExtract 3780 0 - 3783: 7(f16vec4) Load 3672(texel) - ReturnValue 3783 + 3637: 284 Load 286(s2DArray) + 3638:175(f16vec3) Load 177(f16c3) + 3639:154(f16vec2) Load 1414(f16dPdxy2) + 3640:3056(ResType) ImageSparseSampleExplicitLod 3637 3638 Grad ConstOffset 3639 3639 722 + 3641: 7(f16vec4) CompositeExtract 3640 1 + Store 3562(texel) 3641 + 3642: 47(int) CompositeExtract 3640 0 + 3643: 337 Load 339(s2DArrayShadow) + 3644: 249(fvec4) Load 251(c4) + 3645: 53(fvec2) Load 1407(dPdxy2) + 3646: 208(ptr) AccessChain 3562(texel) 207 + 3647: 52(float) CompositeExtract 3644 3 + 3648:3092(ResType) ImageSparseSampleDrefExplicitLod 3643 3644 3647 Grad ConstOffset 3645 3645 722 + 3649:6(float16_t) CompositeExtract 3648 1 + Store 3646 3649 + 3650: 47(int) CompositeExtract 3648 0 + 3651: 337 Load 339(s2DArrayShadow) + 3652:175(f16vec3) Load 177(f16c3) + 3653: 52(float) Load 215(compare) + 3654:154(f16vec2) Load 1414(f16dPdxy2) + 3655: 208(ptr) AccessChain 3562(texel) 207 + 3656:3092(ResType) ImageSparseSampleDrefExplicitLod 3651 3652 3653 Grad ConstOffset 3654 3654 722 + 3657:6(float16_t) CompositeExtract 3656 1 + Store 3655 3657 + 3658: 47(int) CompositeExtract 3656 0 + 3659: 7(f16vec4) Load 3562(texel) + ReturnValue 3659 FunctionEnd 81(testSparseTexelFetch(): 7(f16vec4) Function None 8 82: Label - 3786(texel): 64(ptr) Variable Function - Store 3786(texel) 121 - 3787: 143 Load 145(s2D) - 3788: 53(fvec2) Load 148(c2) - 3789: 721(ivec2) ConvertFToS 3788 - 3790: 52(float) Load 565(lod) - 3791: 47(int) ConvertFToS 3790 - 3792: 142 Image 3787 - 3793:3146(ResType) ImageSparseFetch 3792 3789 Lod 3791 - 3794: 7(f16vec4) CompositeExtract 3793 1 - Store 3786(texel) 3794 - 3795: 47(int) CompositeExtract 3793 0 - 3796: 163 Load 165(s3D) - 3797: 167(fvec3) Load 169(c3) - 3798: 734(ivec3) ConvertFToS 3797 - 3799: 52(float) Load 565(lod) - 3800: 47(int) ConvertFToS 3799 - 3801: 162 Image 3796 - 3802:3146(ResType) ImageSparseFetch 3801 3798 Lod 3800 - 3803: 7(f16vec4) CompositeExtract 3802 1 - Store 3786(texel) 3803 - 3804: 47(int) CompositeExtract 3802 0 - 3805: 357 Load 359(s2DRect) - 3806: 53(fvec2) Load 148(c2) - 3807: 721(ivec2) ConvertFToS 3806 - 3808: 356 Image 3805 - 3809:3146(ResType) ImageSparseFetch 3808 3807 - 3810: 7(f16vec4) CompositeExtract 3809 1 - Store 3786(texel) 3810 - 3811: 47(int) CompositeExtract 3809 0 - 3812: 284 Load 286(s2DArray) - 3813: 167(fvec3) Load 169(c3) - 3814: 734(ivec3) ConvertFToS 3813 - 3815: 52(float) Load 565(lod) - 3816: 47(int) ConvertFToS 3815 - 3817: 283 Image 3812 - 3818:3146(ResType) ImageSparseFetch 3817 3814 Lod 3816 - 3819: 7(f16vec4) CompositeExtract 3818 1 - Store 3786(texel) 3819 - 3820: 47(int) CompositeExtract 3818 0 - 3821: 1309 Load 1311(s2DMS) - 3822: 53(fvec2) Load 148(c2) - 3823: 721(ivec2) ConvertFToS 3822 - 3824: 1308 Image 3821 - 3825:3146(ResType) ImageSparseFetch 3824 3823 Sample 709 - 3826: 7(f16vec4) CompositeExtract 3825 1 - Store 3786(texel) 3826 - 3827: 47(int) CompositeExtract 3825 0 - 3828: 1320 Load 1322(s2DMSArray) - 3829: 167(fvec3) Load 169(c3) - 3830: 734(ivec3) ConvertFToS 3829 - 3831: 1319 Image 3828 - 3832:3146(ResType) ImageSparseFetch 3831 3830 Sample 1326 - 3833: 7(f16vec4) CompositeExtract 3832 1 - Store 3786(texel) 3833 - 3834: 47(int) CompositeExtract 3832 0 - 3835: 7(f16vec4) Load 3786(texel) - ReturnValue 3835 + 3662(texel): 64(ptr) Variable Function + Store 3662(texel) 121 + 3663: 143 Load 145(s2D) + 3664: 53(fvec2) Load 148(c2) + 3665: 721(ivec2) ConvertFToS 3664 + 3666: 52(float) Load 565(lod) + 3667: 47(int) ConvertFToS 3666 + 3668: 142 Image 3663 + 3669:3056(ResType) ImageSparseFetch 3668 3665 Lod 3667 + 3670: 7(f16vec4) CompositeExtract 3669 1 + Store 3662(texel) 3670 + 3671: 47(int) CompositeExtract 3669 0 + 3672: 163 Load 165(s3D) + 3673: 167(fvec3) Load 169(c3) + 3674: 734(ivec3) ConvertFToS 3673 + 3675: 52(float) Load 565(lod) + 3676: 47(int) ConvertFToS 3675 + 3677: 162 Image 3672 + 3678:3056(ResType) ImageSparseFetch 3677 3674 Lod 3676 + 3679: 7(f16vec4) CompositeExtract 3678 1 + Store 3662(texel) 3679 + 3680: 47(int) CompositeExtract 3678 0 + 3681: 357 Load 359(s2DRect) + 3682: 53(fvec2) Load 148(c2) + 3683: 721(ivec2) ConvertFToS 3682 + 3684: 356 Image 3681 + 3685:3056(ResType) ImageSparseFetch 3684 3683 + 3686: 7(f16vec4) CompositeExtract 3685 1 + Store 3662(texel) 3686 + 3687: 47(int) CompositeExtract 3685 0 + 3688: 284 Load 286(s2DArray) + 3689: 167(fvec3) Load 169(c3) + 3690: 734(ivec3) ConvertFToS 3689 + 3691: 52(float) Load 565(lod) + 3692: 47(int) ConvertFToS 3691 + 3693: 283 Image 3688 + 3694:3056(ResType) ImageSparseFetch 3693 3690 Lod 3692 + 3695: 7(f16vec4) CompositeExtract 3694 1 + Store 3662(texel) 3695 + 3696: 47(int) CompositeExtract 3694 0 + 3697: 1309 Load 1311(s2DMS) + 3698: 53(fvec2) Load 148(c2) + 3699: 721(ivec2) ConvertFToS 3698 + 3700: 1308 Image 3697 + 3701:3056(ResType) ImageSparseFetch 3700 3699 Sample 709 + 3702: 7(f16vec4) CompositeExtract 3701 1 + Store 3662(texel) 3702 + 3703: 47(int) CompositeExtract 3701 0 + 3704: 1320 Load 1322(s2DMSArray) + 3705: 167(fvec3) Load 169(c3) + 3706: 734(ivec3) ConvertFToS 3705 + 3707: 1319 Image 3704 + 3708:3056(ResType) ImageSparseFetch 3707 3706 Sample 1326 + 3709: 7(f16vec4) CompositeExtract 3708 1 + Store 3662(texel) 3709 + 3710: 47(int) CompositeExtract 3708 0 + 3711: 7(f16vec4) Load 3662(texel) + ReturnValue 3711 FunctionEnd 83(testSparseTexelFetchOffset(): 7(f16vec4) Function None 8 84: Label - 3838(texel): 64(ptr) Variable Function - Store 3838(texel) 121 - 3839: 143 Load 145(s2D) - 3840: 53(fvec2) Load 148(c2) - 3841: 721(ivec2) ConvertFToS 3840 - 3842: 52(float) Load 565(lod) - 3843: 47(int) ConvertFToS 3842 - 3844: 142 Image 3839 - 3845:3146(ResType) ImageSparseFetch 3844 3841 Lod ConstOffset 3843 722 - 3846: 7(f16vec4) CompositeExtract 3845 1 - Store 3838(texel) 3846 - 3847: 47(int) CompositeExtract 3845 0 - 3848: 163 Load 165(s3D) - 3849: 167(fvec3) Load 169(c3) - 3850: 734(ivec3) ConvertFToS 3849 - 3851: 52(float) Load 565(lod) - 3852: 47(int) ConvertFToS 3851 - 3853: 162 Image 3848 - 3854:3146(ResType) ImageSparseFetch 3853 3850 Lod ConstOffset 3852 735 - 3855: 7(f16vec4) CompositeExtract 3854 1 - Store 3838(texel) 3855 - 3856: 47(int) CompositeExtract 3854 0 - 3857: 357 Load 359(s2DRect) - 3858: 53(fvec2) Load 148(c2) - 3859: 721(ivec2) ConvertFToS 3858 - 3860: 356 Image 3857 - 3861:3146(ResType) ImageSparseFetch 3860 3859 ConstOffset 722 - 3862: 7(f16vec4) CompositeExtract 3861 1 - Store 3838(texel) 3862 - 3863: 47(int) CompositeExtract 3861 0 - 3864: 284 Load 286(s2DArray) - 3865: 167(fvec3) Load 169(c3) - 3866: 734(ivec3) ConvertFToS 3865 - 3867: 52(float) Load 565(lod) - 3868: 47(int) ConvertFToS 3867 - 3869: 283 Image 3864 - 3870:3146(ResType) ImageSparseFetch 3869 3866 Lod ConstOffset 3868 722 - 3871: 7(f16vec4) CompositeExtract 3870 1 - Store 3838(texel) 3871 - 3872: 47(int) CompositeExtract 3870 0 - 3873: 7(f16vec4) Load 3838(texel) - ReturnValue 3873 + 3714(texel): 64(ptr) Variable Function + Store 3714(texel) 121 + 3715: 143 Load 145(s2D) + 3716: 53(fvec2) Load 148(c2) + 3717: 721(ivec2) ConvertFToS 3716 + 3718: 52(float) Load 565(lod) + 3719: 47(int) ConvertFToS 3718 + 3720: 142 Image 3715 + 3721:3056(ResType) ImageSparseFetch 3720 3717 Lod ConstOffset 3719 722 + 3722: 7(f16vec4) CompositeExtract 3721 1 + Store 3714(texel) 3722 + 3723: 47(int) CompositeExtract 3721 0 + 3724: 163 Load 165(s3D) + 3725: 167(fvec3) Load 169(c3) + 3726: 734(ivec3) ConvertFToS 3725 + 3727: 52(float) Load 565(lod) + 3728: 47(int) ConvertFToS 3727 + 3729: 162 Image 3724 + 3730:3056(ResType) ImageSparseFetch 3729 3726 Lod ConstOffset 3728 735 + 3731: 7(f16vec4) CompositeExtract 3730 1 + Store 3714(texel) 3731 + 3732: 47(int) CompositeExtract 3730 0 + 3733: 357 Load 359(s2DRect) + 3734: 53(fvec2) Load 148(c2) + 3735: 721(ivec2) ConvertFToS 3734 + 3736: 356 Image 3733 + 3737:3056(ResType) ImageSparseFetch 3736 3735 ConstOffset 722 + 3738: 7(f16vec4) CompositeExtract 3737 1 + Store 3714(texel) 3738 + 3739: 47(int) CompositeExtract 3737 0 + 3740: 284 Load 286(s2DArray) + 3741: 167(fvec3) Load 169(c3) + 3742: 734(ivec3) ConvertFToS 3741 + 3743: 52(float) Load 565(lod) + 3744: 47(int) ConvertFToS 3743 + 3745: 283 Image 3740 + 3746:3056(ResType) ImageSparseFetch 3745 3742 Lod ConstOffset 3744 722 + 3747: 7(f16vec4) CompositeExtract 3746 1 + Store 3714(texel) 3747 + 3748: 47(int) CompositeExtract 3746 0 + 3749: 7(f16vec4) Load 3714(texel) + ReturnValue 3749 FunctionEnd 85(testSparseTextureGather(): 7(f16vec4) Function None 8 86: Label - 3876(texel): 64(ptr) Variable Function - Store 3876(texel) 121 - 3877: 143 Load 145(s2D) - 3878: 53(fvec2) Load 148(c2) - 3879:3146(ResType) ImageSparseGather 3877 3878 2187 + 3752(texel): 64(ptr) Variable Function + Store 3752(texel) 121 + 3753: 143 Load 145(s2D) + 3754: 53(fvec2) Load 148(c2) + 3755:3056(ResType) ImageSparseGather 3753 3754 2097 + 3756: 7(f16vec4) CompositeExtract 3755 1 + Store 3752(texel) 3756 + 3757: 47(int) CompositeExtract 3755 0 + 3758: 143 Load 145(s2D) + 3759:154(f16vec2) Load 156(f16c2) + 3760:6(float16_t) Load 137(f16bias) + 3761:3056(ResType) ImageSparseGather 3758 3759 2097 Bias 3760 + 3762: 7(f16vec4) CompositeExtract 3761 1 + Store 3752(texel) 3762 + 3763: 47(int) CompositeExtract 3761 0 + 3764: 284 Load 286(s2DArray) + 3765: 167(fvec3) Load 169(c3) + 3766:3056(ResType) ImageSparseGather 3764 3765 2097 + 3767: 7(f16vec4) CompositeExtract 3766 1 + Store 3752(texel) 3767 + 3768: 47(int) CompositeExtract 3766 0 + 3769: 284 Load 286(s2DArray) + 3770:175(f16vec3) Load 177(f16c3) + 3771:6(float16_t) Load 137(f16bias) + 3772:3056(ResType) ImageSparseGather 3769 3770 2097 Bias 3771 + 3773: 7(f16vec4) CompositeExtract 3772 1 + Store 3752(texel) 3773 + 3774: 47(int) CompositeExtract 3772 0 + 3775: 184 Load 186(sCube) + 3776: 167(fvec3) Load 169(c3) + 3777:3056(ResType) ImageSparseGather 3775 3776 2097 + 3778: 7(f16vec4) CompositeExtract 3777 1 + Store 3752(texel) 3778 + 3779: 47(int) CompositeExtract 3777 0 + 3780: 184 Load 186(sCube) + 3781:175(f16vec3) Load 177(f16c3) + 3782:6(float16_t) Load 137(f16bias) + 3783:3056(ResType) ImageSparseGather 3780 3781 2097 Bias 3782 + 3784: 7(f16vec4) CompositeExtract 3783 1 + Store 3752(texel) 3784 + 3785: 47(int) CompositeExtract 3783 0 + 3786: 299 Load 301(sCubeArray) + 3787: 249(fvec4) Load 251(c4) + 3788:3056(ResType) ImageSparseGather 3786 3787 2097 + 3789: 7(f16vec4) CompositeExtract 3788 1 + Store 3752(texel) 3789 + 3790: 47(int) CompositeExtract 3788 0 + 3791: 299 Load 301(sCubeArray) + 3792: 7(f16vec4) Load 309(f16c4) + 3793:6(float16_t) Load 137(f16bias) + 3794:3056(ResType) ImageSparseGather 3791 3792 2097 Bias 3793 + 3795: 7(f16vec4) CompositeExtract 3794 1 + Store 3752(texel) 3795 + 3796: 47(int) CompositeExtract 3794 0 + 3797: 357 Load 359(s2DRect) + 3798: 53(fvec2) Load 148(c2) + 3799:3056(ResType) ImageSparseGather 3797 3798 2097 + 3800: 7(f16vec4) CompositeExtract 3799 1 + Store 3752(texel) 3800 + 3801: 47(int) CompositeExtract 3799 0 + 3802: 357 Load 359(s2DRect) + 3803:154(f16vec2) Load 156(f16c2) + 3804:3056(ResType) ImageSparseGather 3802 3803 2097 + 3805: 7(f16vec4) CompositeExtract 3804 1 + Store 3752(texel) 3805 + 3806: 47(int) CompositeExtract 3804 0 + 3807: 224 Load 226(s2DShadow) + 3808: 53(fvec2) Load 148(c2) + 3809: 52(float) Load 215(compare) + 3810:3056(ResType) ImageSparseDrefGather 3807 3808 3809 + 3811: 7(f16vec4) CompositeExtract 3810 1 + Store 3752(texel) 3811 + 3812: 47(int) CompositeExtract 3810 0 + 3813: 224 Load 226(s2DShadow) + 3814:154(f16vec2) Load 156(f16c2) + 3815: 52(float) Load 215(compare) + 3816:3056(ResType) ImageSparseDrefGather 3813 3814 3815 + 3817: 7(f16vec4) CompositeExtract 3816 1 + Store 3752(texel) 3817 + 3818: 47(int) CompositeExtract 3816 0 + 3819: 337 Load 339(s2DArrayShadow) + 3820: 167(fvec3) Load 169(c3) + 3821: 52(float) Load 215(compare) + 3822:3056(ResType) ImageSparseDrefGather 3819 3820 3821 + 3823: 7(f16vec4) CompositeExtract 3822 1 + Store 3752(texel) 3823 + 3824: 47(int) CompositeExtract 3822 0 + 3825: 337 Load 339(s2DArrayShadow) + 3826:175(f16vec3) Load 177(f16c3) + 3827: 52(float) Load 215(compare) + 3828:3056(ResType) ImageSparseDrefGather 3825 3826 3827 + 3829: 7(f16vec4) CompositeExtract 3828 1 + Store 3752(texel) 3829 + 3830: 47(int) CompositeExtract 3828 0 + 3831: 245 Load 247(sCubeShadow) + 3832: 167(fvec3) Load 169(c3) + 3833: 52(float) Load 215(compare) + 3834:3056(ResType) ImageSparseDrefGather 3831 3832 3833 + 3835: 7(f16vec4) CompositeExtract 3834 1 + Store 3752(texel) 3835 + 3836: 47(int) CompositeExtract 3834 0 + 3837: 245 Load 247(sCubeShadow) + 3838:175(f16vec3) Load 177(f16c3) + 3839: 52(float) Load 215(compare) + 3840:3056(ResType) ImageSparseDrefGather 3837 3838 3839 + 3841: 7(f16vec4) CompositeExtract 3840 1 + Store 3752(texel) 3841 + 3842: 47(int) CompositeExtract 3840 0 + 3843: 391 Load 393(sCubeArrayShadow) + 3844: 249(fvec4) Load 251(c4) + 3845: 52(float) Load 215(compare) + 3846:3056(ResType) ImageSparseDrefGather 3843 3844 3845 + 3847: 7(f16vec4) CompositeExtract 3846 1 + Store 3752(texel) 3847 + 3848: 47(int) CompositeExtract 3846 0 + 3849: 391 Load 393(sCubeArrayShadow) + 3850: 7(f16vec4) Load 309(f16c4) + 3851: 52(float) Load 215(compare) + 3852:3056(ResType) ImageSparseDrefGather 3849 3850 3851 + 3853: 7(f16vec4) CompositeExtract 3852 1 + Store 3752(texel) 3853 + 3854: 47(int) CompositeExtract 3852 0 + 3855: 371 Load 373(s2DRectShadow) + 3856: 53(fvec2) Load 148(c2) + 3857: 52(float) Load 215(compare) + 3858:3056(ResType) ImageSparseDrefGather 3855 3856 3857 + 3859: 7(f16vec4) CompositeExtract 3858 1 + Store 3752(texel) 3859 + 3860: 47(int) CompositeExtract 3858 0 + 3861: 371 Load 373(s2DRectShadow) + 3862:154(f16vec2) Load 156(f16c2) + 3863: 52(float) Load 215(compare) + 3864:3056(ResType) ImageSparseDrefGather 3861 3862 3863 + 3865: 7(f16vec4) CompositeExtract 3864 1 + Store 3752(texel) 3865 + 3866: 47(int) CompositeExtract 3864 0 + 3867: 7(f16vec4) Load 3752(texel) + ReturnValue 3867 + FunctionEnd +87(testSparseTextureGatherOffset(): 7(f16vec4) Function None 8 + 88: Label + 3870(texel): 64(ptr) Variable Function + Store 3870(texel) 121 + 3871: 143 Load 145(s2D) + 3872: 53(fvec2) Load 148(c2) + 3873:3056(ResType) ImageSparseGather 3871 3872 2097 ConstOffset 722 + 3874: 7(f16vec4) CompositeExtract 3873 1 + Store 3870(texel) 3874 + 3875: 47(int) CompositeExtract 3873 0 + 3876: 143 Load 145(s2D) + 3877:154(f16vec2) Load 156(f16c2) + 3878:6(float16_t) Load 137(f16bias) + 3879:3056(ResType) ImageSparseGather 3876 3877 2097 Bias ConstOffset 3878 722 3880: 7(f16vec4) CompositeExtract 3879 1 - Store 3876(texel) 3880 + Store 3870(texel) 3880 3881: 47(int) CompositeExtract 3879 0 - 3882: 143 Load 145(s2D) - 3883:154(f16vec2) Load 156(f16c2) - 3884:6(float16_t) Load 137(f16bias) - 3885:3146(ResType) ImageSparseGather 3882 3883 2187 Bias 3884 - 3886: 7(f16vec4) CompositeExtract 3885 1 - Store 3876(texel) 3886 - 3887: 47(int) CompositeExtract 3885 0 - 3888: 284 Load 286(s2DArray) - 3889: 167(fvec3) Load 169(c3) - 3890:3146(ResType) ImageSparseGather 3888 3889 2187 + 3882: 284 Load 286(s2DArray) + 3883: 167(fvec3) Load 169(c3) + 3884:3056(ResType) ImageSparseGather 3882 3883 2097 ConstOffset 722 + 3885: 7(f16vec4) CompositeExtract 3884 1 + Store 3870(texel) 3885 + 3886: 47(int) CompositeExtract 3884 0 + 3887: 284 Load 286(s2DArray) + 3888:175(f16vec3) Load 177(f16c3) + 3889:6(float16_t) Load 137(f16bias) + 3890:3056(ResType) ImageSparseGather 3887 3888 2097 Bias ConstOffset 3889 722 3891: 7(f16vec4) CompositeExtract 3890 1 - Store 3876(texel) 3891 + Store 3870(texel) 3891 3892: 47(int) CompositeExtract 3890 0 - 3893: 284 Load 286(s2DArray) - 3894:175(f16vec3) Load 177(f16c3) - 3895:6(float16_t) Load 137(f16bias) - 3896:3146(ResType) ImageSparseGather 3893 3894 2187 Bias 3895 - 3897: 7(f16vec4) CompositeExtract 3896 1 - Store 3876(texel) 3897 - 3898: 47(int) CompositeExtract 3896 0 - 3899: 184 Load 186(sCube) - 3900: 167(fvec3) Load 169(c3) - 3901:3146(ResType) ImageSparseGather 3899 3900 2187 - 3902: 7(f16vec4) CompositeExtract 3901 1 - Store 3876(texel) 3902 - 3903: 47(int) CompositeExtract 3901 0 - 3904: 184 Load 186(sCube) - 3905:175(f16vec3) Load 177(f16c3) - 3906:6(float16_t) Load 137(f16bias) - 3907:3146(ResType) ImageSparseGather 3904 3905 2187 Bias 3906 - 3908: 7(f16vec4) CompositeExtract 3907 1 - Store 3876(texel) 3908 - 3909: 47(int) CompositeExtract 3907 0 - 3910: 299 Load 301(sCubeArray) - 3911: 249(fvec4) Load 251(c4) - 3912:3146(ResType) ImageSparseGather 3910 3911 2187 + 3893: 357 Load 359(s2DRect) + 3894: 53(fvec2) Load 148(c2) + 3895:3056(ResType) ImageSparseGather 3893 3894 2097 ConstOffset 722 + 3896: 7(f16vec4) CompositeExtract 3895 1 + Store 3870(texel) 3896 + 3897: 47(int) CompositeExtract 3895 0 + 3898: 357 Load 359(s2DRect) + 3899:154(f16vec2) Load 156(f16c2) + 3900:3056(ResType) ImageSparseGather 3898 3899 2097 ConstOffset 722 + 3901: 7(f16vec4) CompositeExtract 3900 1 + Store 3870(texel) 3901 + 3902: 47(int) CompositeExtract 3900 0 + 3903: 224 Load 226(s2DShadow) + 3904: 53(fvec2) Load 148(c2) + 3905: 52(float) Load 215(compare) + 3906:3056(ResType) ImageSparseDrefGather 3903 3904 3905 ConstOffset 722 + 3907: 7(f16vec4) CompositeExtract 3906 1 + Store 3870(texel) 3907 + 3908: 47(int) CompositeExtract 3906 0 + 3909: 224 Load 226(s2DShadow) + 3910:154(f16vec2) Load 156(f16c2) + 3911: 52(float) Load 215(compare) + 3912:3056(ResType) ImageSparseDrefGather 3909 3910 3911 ConstOffset 722 3913: 7(f16vec4) CompositeExtract 3912 1 - Store 3876(texel) 3913 + Store 3870(texel) 3913 3914: 47(int) CompositeExtract 3912 0 - 3915: 299 Load 301(sCubeArray) - 3916: 7(f16vec4) Load 309(f16c4) - 3917:6(float16_t) Load 137(f16bias) - 3918:3146(ResType) ImageSparseGather 3915 3916 2187 Bias 3917 + 3915: 337 Load 339(s2DArrayShadow) + 3916: 167(fvec3) Load 169(c3) + 3917: 52(float) Load 215(compare) + 3918:3056(ResType) ImageSparseDrefGather 3915 3916 3917 ConstOffset 722 3919: 7(f16vec4) CompositeExtract 3918 1 - Store 3876(texel) 3919 + Store 3870(texel) 3919 3920: 47(int) CompositeExtract 3918 0 - 3921: 357 Load 359(s2DRect) - 3922: 53(fvec2) Load 148(c2) - 3923:3146(ResType) ImageSparseGather 3921 3922 2187 - 3924: 7(f16vec4) CompositeExtract 3923 1 - Store 3876(texel) 3924 - 3925: 47(int) CompositeExtract 3923 0 - 3926: 357 Load 359(s2DRect) - 3927:154(f16vec2) Load 156(f16c2) - 3928:3146(ResType) ImageSparseGather 3926 3927 2187 - 3929: 7(f16vec4) CompositeExtract 3928 1 - Store 3876(texel) 3929 - 3930: 47(int) CompositeExtract 3928 0 - 3931: 224 Load 226(s2DShadow) - 3932: 53(fvec2) Load 148(c2) - 3933: 52(float) Load 215(compare) - 3934:3146(ResType) ImageSparseDrefGather 3931 3932 3933 - 3935: 7(f16vec4) CompositeExtract 3934 1 - Store 3876(texel) 3935 - 3936: 47(int) CompositeExtract 3934 0 - 3937: 224 Load 226(s2DShadow) - 3938:154(f16vec2) Load 156(f16c2) - 3939: 52(float) Load 215(compare) - 3940:3146(ResType) ImageSparseDrefGather 3937 3938 3939 - 3941: 7(f16vec4) CompositeExtract 3940 1 - Store 3876(texel) 3941 - 3942: 47(int) CompositeExtract 3940 0 - 3943: 337 Load 339(s2DArrayShadow) - 3944: 167(fvec3) Load 169(c3) - 3945: 52(float) Load 215(compare) - 3946:3146(ResType) ImageSparseDrefGather 3943 3944 3945 - 3947: 7(f16vec4) CompositeExtract 3946 1 - Store 3876(texel) 3947 - 3948: 47(int) CompositeExtract 3946 0 - 3949: 337 Load 339(s2DArrayShadow) - 3950:175(f16vec3) Load 177(f16c3) - 3951: 52(float) Load 215(compare) - 3952:3146(ResType) ImageSparseDrefGather 3949 3950 3951 - 3953: 7(f16vec4) CompositeExtract 3952 1 - Store 3876(texel) 3953 - 3954: 47(int) CompositeExtract 3952 0 - 3955: 245 Load 247(sCubeShadow) - 3956: 167(fvec3) Load 169(c3) - 3957: 52(float) Load 215(compare) - 3958:3146(ResType) ImageSparseDrefGather 3955 3956 3957 - 3959: 7(f16vec4) CompositeExtract 3958 1 - Store 3876(texel) 3959 - 3960: 47(int) CompositeExtract 3958 0 - 3961: 245 Load 247(sCubeShadow) - 3962:175(f16vec3) Load 177(f16c3) - 3963: 52(float) Load 215(compare) - 3964:3146(ResType) ImageSparseDrefGather 3961 3962 3963 - 3965: 7(f16vec4) CompositeExtract 3964 1 - Store 3876(texel) 3965 - 3966: 47(int) CompositeExtract 3964 0 - 3967: 391 Load 393(sCubeArrayShadow) - 3968: 249(fvec4) Load 251(c4) - 3969: 52(float) Load 215(compare) - 3970:3146(ResType) ImageSparseDrefGather 3967 3968 3969 - 3971: 7(f16vec4) CompositeExtract 3970 1 - Store 3876(texel) 3971 - 3972: 47(int) CompositeExtract 3970 0 - 3973: 391 Load 393(sCubeArrayShadow) - 3974: 7(f16vec4) Load 309(f16c4) - 3975: 52(float) Load 215(compare) - 3976:3146(ResType) ImageSparseDrefGather 3973 3974 3975 - 3977: 7(f16vec4) CompositeExtract 3976 1 - Store 3876(texel) 3977 - 3978: 47(int) CompositeExtract 3976 0 - 3979: 371 Load 373(s2DRectShadow) - 3980: 53(fvec2) Load 148(c2) - 3981: 52(float) Load 215(compare) - 3982:3146(ResType) ImageSparseDrefGather 3979 3980 3981 + 3921: 337 Load 339(s2DArrayShadow) + 3922:175(f16vec3) Load 177(f16c3) + 3923: 52(float) Load 215(compare) + 3924:3056(ResType) ImageSparseDrefGather 3921 3922 3923 ConstOffset 722 + 3925: 7(f16vec4) CompositeExtract 3924 1 + Store 3870(texel) 3925 + 3926: 47(int) CompositeExtract 3924 0 + 3927: 371 Load 373(s2DRectShadow) + 3928: 53(fvec2) Load 148(c2) + 3929: 52(float) Load 215(compare) + 3930:3056(ResType) ImageSparseDrefGather 3927 3928 3929 ConstOffset 722 + 3931: 7(f16vec4) CompositeExtract 3930 1 + Store 3870(texel) 3931 + 3932: 47(int) CompositeExtract 3930 0 + 3933: 371 Load 373(s2DRectShadow) + 3934:154(f16vec2) Load 156(f16c2) + 3935: 52(float) Load 215(compare) + 3936:3056(ResType) ImageSparseDrefGather 3933 3934 3935 ConstOffset 722 + 3937: 7(f16vec4) CompositeExtract 3936 1 + Store 3870(texel) 3937 + 3938: 47(int) CompositeExtract 3936 0 + 3939: 7(f16vec4) Load 3870(texel) + ReturnValue 3939 + FunctionEnd +89(testSparseTextureGatherOffsets(): 7(f16vec4) Function None 8 + 90: Label + 3942(texel): 64(ptr) Variable Function + Store 3942(texel) 121 + 3943: 143 Load 145(s2D) + 3944: 53(fvec2) Load 148(c2) + 3955:3056(ResType) ImageSparseGather 3943 3944 2097 ConstOffsets 3954 + 3956: 7(f16vec4) CompositeExtract 3955 1 + Store 3942(texel) 3956 + 3957: 47(int) CompositeExtract 3955 0 + 3958: 143 Load 145(s2D) + 3959:154(f16vec2) Load 156(f16c2) + 3960:6(float16_t) Load 137(f16bias) + 3961:3056(ResType) ImageSparseGather 3958 3959 2097 Bias ConstOffsets 3960 3954 + 3962: 7(f16vec4) CompositeExtract 3961 1 + Store 3942(texel) 3962 + 3963: 47(int) CompositeExtract 3961 0 + 3964: 284 Load 286(s2DArray) + 3965: 167(fvec3) Load 169(c3) + 3966:3056(ResType) ImageSparseGather 3964 3965 2097 ConstOffsets 3954 + 3967: 7(f16vec4) CompositeExtract 3966 1 + Store 3942(texel) 3967 + 3968: 47(int) CompositeExtract 3966 0 + 3969: 284 Load 286(s2DArray) + 3970:175(f16vec3) Load 177(f16c3) + 3971:6(float16_t) Load 137(f16bias) + 3972:3056(ResType) ImageSparseGather 3969 3970 2097 Bias ConstOffsets 3971 3954 + 3973: 7(f16vec4) CompositeExtract 3972 1 + Store 3942(texel) 3973 + 3974: 47(int) CompositeExtract 3972 0 + 3975: 357 Load 359(s2DRect) + 3976: 53(fvec2) Load 148(c2) + 3977:3056(ResType) ImageSparseGather 3975 3976 2097 ConstOffsets 3954 + 3978: 7(f16vec4) CompositeExtract 3977 1 + Store 3942(texel) 3978 + 3979: 47(int) CompositeExtract 3977 0 + 3980: 357 Load 359(s2DRect) + 3981:154(f16vec2) Load 156(f16c2) + 3982:3056(ResType) ImageSparseGather 3980 3981 2097 ConstOffsets 3954 3983: 7(f16vec4) CompositeExtract 3982 1 - Store 3876(texel) 3983 + Store 3942(texel) 3983 3984: 47(int) CompositeExtract 3982 0 - 3985: 371 Load 373(s2DRectShadow) - 3986:154(f16vec2) Load 156(f16c2) + 3985: 224 Load 226(s2DShadow) + 3986: 53(fvec2) Load 148(c2) 3987: 52(float) Load 215(compare) - 3988:3146(ResType) ImageSparseDrefGather 3985 3986 3987 + 3988:3056(ResType) ImageSparseDrefGather 3985 3986 3987 ConstOffsets 3954 3989: 7(f16vec4) CompositeExtract 3988 1 - Store 3876(texel) 3989 + Store 3942(texel) 3989 3990: 47(int) CompositeExtract 3988 0 - 3991: 7(f16vec4) Load 3876(texel) - ReturnValue 3991 - FunctionEnd -87(testSparseTextureGatherOffset(): 7(f16vec4) Function None 8 - 88: Label - 3994(texel): 64(ptr) Variable Function - Store 3994(texel) 121 - 3995: 143 Load 145(s2D) - 3996: 53(fvec2) Load 148(c2) - 3997:3146(ResType) ImageSparseGather 3995 3996 2187 ConstOffset 722 - 3998: 7(f16vec4) CompositeExtract 3997 1 - Store 3994(texel) 3998 - 3999: 47(int) CompositeExtract 3997 0 - 4000: 143 Load 145(s2D) - 4001:154(f16vec2) Load 156(f16c2) - 4002:6(float16_t) Load 137(f16bias) - 4003:3146(ResType) ImageSparseGather 4000 4001 2187 Bias ConstOffset 4002 722 - 4004: 7(f16vec4) CompositeExtract 4003 1 - Store 3994(texel) 4004 - 4005: 47(int) CompositeExtract 4003 0 - 4006: 284 Load 286(s2DArray) - 4007: 167(fvec3) Load 169(c3) - 4008:3146(ResType) ImageSparseGather 4006 4007 2187 ConstOffset 722 - 4009: 7(f16vec4) CompositeExtract 4008 1 - Store 3994(texel) 4009 - 4010: 47(int) CompositeExtract 4008 0 - 4011: 284 Load 286(s2DArray) - 4012:175(f16vec3) Load 177(f16c3) - 4013:6(float16_t) Load 137(f16bias) - 4014:3146(ResType) ImageSparseGather 4011 4012 2187 Bias ConstOffset 4013 722 - 4015: 7(f16vec4) CompositeExtract 4014 1 - Store 3994(texel) 4015 - 4016: 47(int) CompositeExtract 4014 0 - 4017: 357 Load 359(s2DRect) - 4018: 53(fvec2) Load 148(c2) - 4019:3146(ResType) ImageSparseGather 4017 4018 2187 ConstOffset 722 - 4020: 7(f16vec4) CompositeExtract 4019 1 - Store 3994(texel) 4020 - 4021: 47(int) CompositeExtract 4019 0 - 4022: 357 Load 359(s2DRect) - 4023:154(f16vec2) Load 156(f16c2) - 4024:3146(ResType) ImageSparseGather 4022 4023 2187 ConstOffset 722 - 4025: 7(f16vec4) CompositeExtract 4024 1 - Store 3994(texel) 4025 - 4026: 47(int) CompositeExtract 4024 0 - 4027: 224 Load 226(s2DShadow) - 4028: 53(fvec2) Load 148(c2) - 4029: 52(float) Load 215(compare) - 4030:3146(ResType) ImageSparseDrefGather 4027 4028 4029 ConstOffset 722 - 4031: 7(f16vec4) CompositeExtract 4030 1 - Store 3994(texel) 4031 - 4032: 47(int) CompositeExtract 4030 0 - 4033: 224 Load 226(s2DShadow) - 4034:154(f16vec2) Load 156(f16c2) - 4035: 52(float) Load 215(compare) - 4036:3146(ResType) ImageSparseDrefGather 4033 4034 4035 ConstOffset 722 - 4037: 7(f16vec4) CompositeExtract 4036 1 - Store 3994(texel) 4037 - 4038: 47(int) CompositeExtract 4036 0 - 4039: 337 Load 339(s2DArrayShadow) - 4040: 167(fvec3) Load 169(c3) - 4041: 52(float) Load 215(compare) - 4042:3146(ResType) ImageSparseDrefGather 4039 4040 4041 ConstOffset 722 - 4043: 7(f16vec4) CompositeExtract 4042 1 - Store 3994(texel) 4043 - 4044: 47(int) CompositeExtract 4042 0 - 4045: 337 Load 339(s2DArrayShadow) - 4046:175(f16vec3) Load 177(f16c3) - 4047: 52(float) Load 215(compare) - 4048:3146(ResType) ImageSparseDrefGather 4045 4046 4047 ConstOffset 722 - 4049: 7(f16vec4) CompositeExtract 4048 1 - Store 3994(texel) 4049 - 4050: 47(int) CompositeExtract 4048 0 - 4051: 371 Load 373(s2DRectShadow) - 4052: 53(fvec2) Load 148(c2) - 4053: 52(float) Load 215(compare) - 4054:3146(ResType) ImageSparseDrefGather 4051 4052 4053 ConstOffset 722 - 4055: 7(f16vec4) CompositeExtract 4054 1 - Store 3994(texel) 4055 - 4056: 47(int) CompositeExtract 4054 0 - 4057: 371 Load 373(s2DRectShadow) - 4058:154(f16vec2) Load 156(f16c2) - 4059: 52(float) Load 215(compare) - 4060:3146(ResType) ImageSparseDrefGather 4057 4058 4059 ConstOffset 722 - 4061: 7(f16vec4) CompositeExtract 4060 1 - Store 3994(texel) 4061 - 4062: 47(int) CompositeExtract 4060 0 - 4063: 7(f16vec4) Load 3994(texel) - ReturnValue 4063 - FunctionEnd -89(testSparseTextureGatherOffsets(): 7(f16vec4) Function None 8 - 90: Label - 4066(texel): 64(ptr) Variable Function - Store 4066(texel) 121 - 4067: 143 Load 145(s2D) - 4068: 53(fvec2) Load 148(c2) - 4079:3146(ResType) ImageSparseGather 4067 4068 2187 ConstOffsets 4078 - 4080: 7(f16vec4) CompositeExtract 4079 1 - Store 4066(texel) 4080 - 4081: 47(int) CompositeExtract 4079 0 - 4082: 143 Load 145(s2D) - 4083:154(f16vec2) Load 156(f16c2) - 4084:6(float16_t) Load 137(f16bias) - 4085:3146(ResType) ImageSparseGather 4082 4083 2187 Bias ConstOffsets 4084 4078 - 4086: 7(f16vec4) CompositeExtract 4085 1 - Store 4066(texel) 4086 - 4087: 47(int) CompositeExtract 4085 0 - 4088: 284 Load 286(s2DArray) - 4089: 167(fvec3) Load 169(c3) - 4090:3146(ResType) ImageSparseGather 4088 4089 2187 ConstOffsets 4078 - 4091: 7(f16vec4) CompositeExtract 4090 1 - Store 4066(texel) 4091 - 4092: 47(int) CompositeExtract 4090 0 - 4093: 284 Load 286(s2DArray) - 4094:175(f16vec3) Load 177(f16c3) - 4095:6(float16_t) Load 137(f16bias) - 4096:3146(ResType) ImageSparseGather 4093 4094 2187 Bias ConstOffsets 4095 4078 - 4097: 7(f16vec4) CompositeExtract 4096 1 - Store 4066(texel) 4097 - 4098: 47(int) CompositeExtract 4096 0 - 4099: 357 Load 359(s2DRect) - 4100: 53(fvec2) Load 148(c2) - 4101:3146(ResType) ImageSparseGather 4099 4100 2187 ConstOffsets 4078 - 4102: 7(f16vec4) CompositeExtract 4101 1 - Store 4066(texel) 4102 - 4103: 47(int) CompositeExtract 4101 0 - 4104: 357 Load 359(s2DRect) - 4105:154(f16vec2) Load 156(f16c2) - 4106:3146(ResType) ImageSparseGather 4104 4105 2187 ConstOffsets 4078 - 4107: 7(f16vec4) CompositeExtract 4106 1 - Store 4066(texel) 4107 - 4108: 47(int) CompositeExtract 4106 0 - 4109: 224 Load 226(s2DShadow) - 4110: 53(fvec2) Load 148(c2) - 4111: 52(float) Load 215(compare) - 4112:3146(ResType) ImageSparseDrefGather 4109 4110 4111 ConstOffsets 4078 - 4113: 7(f16vec4) CompositeExtract 4112 1 - Store 4066(texel) 4113 - 4114: 47(int) CompositeExtract 4112 0 - 4115: 224 Load 226(s2DShadow) - 4116:154(f16vec2) Load 156(f16c2) - 4117: 52(float) Load 215(compare) - 4118:3146(ResType) ImageSparseDrefGather 4115 4116 4117 ConstOffsets 4078 - 4119: 7(f16vec4) CompositeExtract 4118 1 - Store 4066(texel) 4119 - 4120: 47(int) CompositeExtract 4118 0 - 4121: 337 Load 339(s2DArrayShadow) - 4122: 167(fvec3) Load 169(c3) - 4123: 52(float) Load 215(compare) - 4124:3146(ResType) ImageSparseDrefGather 4121 4122 4123 ConstOffsets 4078 - 4125: 7(f16vec4) CompositeExtract 4124 1 - Store 4066(texel) 4125 - 4126: 47(int) CompositeExtract 4124 0 - 4127: 337 Load 339(s2DArrayShadow) - 4128:175(f16vec3) Load 177(f16c3) - 4129: 52(float) Load 215(compare) - 4130:3146(ResType) ImageSparseDrefGather 4127 4128 4129 ConstOffsets 4078 - 4131: 7(f16vec4) CompositeExtract 4130 1 - Store 4066(texel) 4131 - 4132: 47(int) CompositeExtract 4130 0 - 4133: 371 Load 373(s2DRectShadow) - 4134: 53(fvec2) Load 148(c2) - 4135: 52(float) Load 215(compare) - 4136:3146(ResType) ImageSparseDrefGather 4133 4134 4135 ConstOffsets 4078 - 4137: 7(f16vec4) CompositeExtract 4136 1 - Store 4066(texel) 4137 - 4138: 47(int) CompositeExtract 4136 0 - 4139: 371 Load 373(s2DRectShadow) - 4140:154(f16vec2) Load 156(f16c2) - 4141: 52(float) Load 215(compare) - 4142:3146(ResType) ImageSparseDrefGather 4139 4140 4141 ConstOffsets 4078 - 4143: 7(f16vec4) CompositeExtract 4142 1 - Store 4066(texel) 4143 - 4144: 47(int) CompositeExtract 4142 0 - 4145: 7(f16vec4) Load 4066(texel) - ReturnValue 4145 + 3991: 224 Load 226(s2DShadow) + 3992:154(f16vec2) Load 156(f16c2) + 3993: 52(float) Load 215(compare) + 3994:3056(ResType) ImageSparseDrefGather 3991 3992 3993 ConstOffsets 3954 + 3995: 7(f16vec4) CompositeExtract 3994 1 + Store 3942(texel) 3995 + 3996: 47(int) CompositeExtract 3994 0 + 3997: 337 Load 339(s2DArrayShadow) + 3998: 167(fvec3) Load 169(c3) + 3999: 52(float) Load 215(compare) + 4000:3056(ResType) ImageSparseDrefGather 3997 3998 3999 ConstOffsets 3954 + 4001: 7(f16vec4) CompositeExtract 4000 1 + Store 3942(texel) 4001 + 4002: 47(int) CompositeExtract 4000 0 + 4003: 337 Load 339(s2DArrayShadow) + 4004:175(f16vec3) Load 177(f16c3) + 4005: 52(float) Load 215(compare) + 4006:3056(ResType) ImageSparseDrefGather 4003 4004 4005 ConstOffsets 3954 + 4007: 7(f16vec4) CompositeExtract 4006 1 + Store 3942(texel) 4007 + 4008: 47(int) CompositeExtract 4006 0 + 4009: 371 Load 373(s2DRectShadow) + 4010: 53(fvec2) Load 148(c2) + 4011: 52(float) Load 215(compare) + 4012:3056(ResType) ImageSparseDrefGather 4009 4010 4011 ConstOffsets 3954 + 4013: 7(f16vec4) CompositeExtract 4012 1 + Store 3942(texel) 4013 + 4014: 47(int) CompositeExtract 4012 0 + 4015: 371 Load 373(s2DRectShadow) + 4016:154(f16vec2) Load 156(f16c2) + 4017: 52(float) Load 215(compare) + 4018:3056(ResType) ImageSparseDrefGather 4015 4016 4017 ConstOffsets 3954 + 4019: 7(f16vec4) CompositeExtract 4018 1 + Store 3942(texel) 4019 + 4020: 47(int) CompositeExtract 4018 0 + 4021: 7(f16vec4) Load 3942(texel) + ReturnValue 4021 FunctionEnd 91(testSparseTextureGatherLod(): 7(f16vec4) Function None 8 92: Label - 4148(texel): 64(ptr) Variable Function - Store 4148(texel) 121 - 4149: 143 Load 145(s2D) - 4150: 53(fvec2) Load 148(c2) - 4151: 52(float) Load 565(lod) - 4152:3146(ResType) ImageSparseGather 4149 4150 2187 Lod 4151 - 4153: 7(f16vec4) CompositeExtract 4152 1 - Store 4148(texel) 4153 - 4154: 47(int) CompositeExtract 4152 0 - 4155: 143 Load 145(s2D) - 4156:154(f16vec2) Load 156(f16c2) - 4157:6(float16_t) Load 572(f16lod) - 4158:3146(ResType) ImageSparseGather 4155 4156 2187 Lod 4157 - 4159: 7(f16vec4) CompositeExtract 4158 1 - Store 4148(texel) 4159 - 4160: 47(int) CompositeExtract 4158 0 - 4161: 284 Load 286(s2DArray) - 4162: 167(fvec3) Load 169(c3) - 4163: 52(float) Load 565(lod) - 4164:3146(ResType) ImageSparseGather 4161 4162 2187 Lod 4163 - 4165: 7(f16vec4) CompositeExtract 4164 1 - Store 4148(texel) 4165 - 4166: 47(int) CompositeExtract 4164 0 - 4167: 284 Load 286(s2DArray) - 4168:175(f16vec3) Load 177(f16c3) - 4169:6(float16_t) Load 572(f16lod) - 4170:3146(ResType) ImageSparseGather 4167 4168 2187 Lod 4169 - 4171: 7(f16vec4) CompositeExtract 4170 1 - Store 4148(texel) 4171 - 4172: 47(int) CompositeExtract 4170 0 - 4173: 184 Load 186(sCube) - 4174: 167(fvec3) Load 169(c3) - 4175: 52(float) Load 565(lod) - 4176:3146(ResType) ImageSparseGather 4173 4174 2187 Lod 4175 - 4177: 7(f16vec4) CompositeExtract 4176 1 - Store 4148(texel) 4177 - 4178: 47(int) CompositeExtract 4176 0 - 4179: 184 Load 186(sCube) - 4180:175(f16vec3) Load 177(f16c3) - 4181:6(float16_t) Load 572(f16lod) - 4182:3146(ResType) ImageSparseGather 4179 4180 2187 Lod 4181 - 4183: 7(f16vec4) CompositeExtract 4182 1 - Store 4148(texel) 4183 - 4184: 47(int) CompositeExtract 4182 0 - 4185: 299 Load 301(sCubeArray) - 4186: 249(fvec4) Load 251(c4) - 4187: 52(float) Load 565(lod) - 4188:3146(ResType) ImageSparseGather 4185 4186 2187 Lod 4187 - 4189: 7(f16vec4) CompositeExtract 4188 1 - Store 4148(texel) 4189 - 4190: 47(int) CompositeExtract 4188 0 - 4191: 299 Load 301(sCubeArray) - 4192: 7(f16vec4) Load 309(f16c4) - 4193:6(float16_t) Load 572(f16lod) - 4194:3146(ResType) ImageSparseGather 4191 4192 2187 Lod 4193 - 4195: 7(f16vec4) CompositeExtract 4194 1 - Store 4148(texel) 4195 - 4196: 47(int) CompositeExtract 4194 0 - 4197: 7(f16vec4) Load 4148(texel) - ReturnValue 4197 + 4024(texel): 64(ptr) Variable Function + Store 4024(texel) 121 + 4025: 143 Load 145(s2D) + 4026: 53(fvec2) Load 148(c2) + 4027: 52(float) Load 565(lod) + 4028:3056(ResType) ImageSparseGather 4025 4026 2097 Lod 4027 + 4029: 7(f16vec4) CompositeExtract 4028 1 + Store 4024(texel) 4029 + 4030: 47(int) CompositeExtract 4028 0 + 4031: 143 Load 145(s2D) + 4032:154(f16vec2) Load 156(f16c2) + 4033:6(float16_t) Load 572(f16lod) + 4034:3056(ResType) ImageSparseGather 4031 4032 2097 Lod 4033 + 4035: 7(f16vec4) CompositeExtract 4034 1 + Store 4024(texel) 4035 + 4036: 47(int) CompositeExtract 4034 0 + 4037: 284 Load 286(s2DArray) + 4038: 167(fvec3) Load 169(c3) + 4039: 52(float) Load 565(lod) + 4040:3056(ResType) ImageSparseGather 4037 4038 2097 Lod 4039 + 4041: 7(f16vec4) CompositeExtract 4040 1 + Store 4024(texel) 4041 + 4042: 47(int) CompositeExtract 4040 0 + 4043: 284 Load 286(s2DArray) + 4044:175(f16vec3) Load 177(f16c3) + 4045:6(float16_t) Load 572(f16lod) + 4046:3056(ResType) ImageSparseGather 4043 4044 2097 Lod 4045 + 4047: 7(f16vec4) CompositeExtract 4046 1 + Store 4024(texel) 4047 + 4048: 47(int) CompositeExtract 4046 0 + 4049: 184 Load 186(sCube) + 4050: 167(fvec3) Load 169(c3) + 4051: 52(float) Load 565(lod) + 4052:3056(ResType) ImageSparseGather 4049 4050 2097 Lod 4051 + 4053: 7(f16vec4) CompositeExtract 4052 1 + Store 4024(texel) 4053 + 4054: 47(int) CompositeExtract 4052 0 + 4055: 184 Load 186(sCube) + 4056:175(f16vec3) Load 177(f16c3) + 4057:6(float16_t) Load 572(f16lod) + 4058:3056(ResType) ImageSparseGather 4055 4056 2097 Lod 4057 + 4059: 7(f16vec4) CompositeExtract 4058 1 + Store 4024(texel) 4059 + 4060: 47(int) CompositeExtract 4058 0 + 4061: 299 Load 301(sCubeArray) + 4062: 249(fvec4) Load 251(c4) + 4063: 52(float) Load 565(lod) + 4064:3056(ResType) ImageSparseGather 4061 4062 2097 Lod 4063 + 4065: 7(f16vec4) CompositeExtract 4064 1 + Store 4024(texel) 4065 + 4066: 47(int) CompositeExtract 4064 0 + 4067: 299 Load 301(sCubeArray) + 4068: 7(f16vec4) Load 309(f16c4) + 4069:6(float16_t) Load 572(f16lod) + 4070:3056(ResType) ImageSparseGather 4067 4068 2097 Lod 4069 + 4071: 7(f16vec4) CompositeExtract 4070 1 + Store 4024(texel) 4071 + 4072: 47(int) CompositeExtract 4070 0 + 4073: 7(f16vec4) Load 4024(texel) + ReturnValue 4073 FunctionEnd 93(testSparseTextureGatherLodOffset(): 7(f16vec4) Function None 8 94: Label - 4200(texel): 64(ptr) Variable Function - Store 4200(texel) 121 - 4201: 143 Load 145(s2D) - 4202: 53(fvec2) Load 148(c2) - 4203: 52(float) Load 565(lod) - 4204:3146(ResType) ImageSparseGather 4201 4202 2187 Lod ConstOffset 4203 722 - 4205: 7(f16vec4) CompositeExtract 4204 1 - Store 4200(texel) 4205 - 4206: 47(int) CompositeExtract 4204 0 - 4207: 143 Load 145(s2D) - 4208:154(f16vec2) Load 156(f16c2) - 4209:6(float16_t) Load 572(f16lod) - 4210:3146(ResType) ImageSparseGather 4207 4208 2187 Lod ConstOffset 4209 722 - 4211: 7(f16vec4) CompositeExtract 4210 1 - Store 4200(texel) 4211 - 4212: 47(int) CompositeExtract 4210 0 - 4213: 284 Load 286(s2DArray) - 4214: 167(fvec3) Load 169(c3) - 4215: 52(float) Load 565(lod) - 4216:3146(ResType) ImageSparseGather 4213 4214 2187 Lod ConstOffset 4215 722 - 4217: 7(f16vec4) CompositeExtract 4216 1 - Store 4200(texel) 4217 - 4218: 47(int) CompositeExtract 4216 0 - 4219: 284 Load 286(s2DArray) - 4220:175(f16vec3) Load 177(f16c3) - 4221:6(float16_t) Load 572(f16lod) - 4222:3146(ResType) ImageSparseGather 4219 4220 2187 Lod ConstOffset 4221 722 - 4223: 7(f16vec4) CompositeExtract 4222 1 - Store 4200(texel) 4223 - 4224: 47(int) CompositeExtract 4222 0 - 4225: 7(f16vec4) Load 4200(texel) - ReturnValue 4225 + 4076(texel): 64(ptr) Variable Function + Store 4076(texel) 121 + 4077: 143 Load 145(s2D) + 4078: 53(fvec2) Load 148(c2) + 4079: 52(float) Load 565(lod) + 4080:3056(ResType) ImageSparseGather 4077 4078 2097 Lod ConstOffset 4079 722 + 4081: 7(f16vec4) CompositeExtract 4080 1 + Store 4076(texel) 4081 + 4082: 47(int) CompositeExtract 4080 0 + 4083: 143 Load 145(s2D) + 4084:154(f16vec2) Load 156(f16c2) + 4085:6(float16_t) Load 572(f16lod) + 4086:3056(ResType) ImageSparseGather 4083 4084 2097 Lod ConstOffset 4085 722 + 4087: 7(f16vec4) CompositeExtract 4086 1 + Store 4076(texel) 4087 + 4088: 47(int) CompositeExtract 4086 0 + 4089: 284 Load 286(s2DArray) + 4090: 167(fvec3) Load 169(c3) + 4091: 52(float) Load 565(lod) + 4092:3056(ResType) ImageSparseGather 4089 4090 2097 Lod ConstOffset 4091 722 + 4093: 7(f16vec4) CompositeExtract 4092 1 + Store 4076(texel) 4093 + 4094: 47(int) CompositeExtract 4092 0 + 4095: 284 Load 286(s2DArray) + 4096:175(f16vec3) Load 177(f16c3) + 4097:6(float16_t) Load 572(f16lod) + 4098:3056(ResType) ImageSparseGather 4095 4096 2097 Lod ConstOffset 4097 722 + 4099: 7(f16vec4) CompositeExtract 4098 1 + Store 4076(texel) 4099 + 4100: 47(int) CompositeExtract 4098 0 + 4101: 7(f16vec4) Load 4076(texel) + ReturnValue 4101 FunctionEnd 95(testSparseTextureGatherLodOffsets(): 7(f16vec4) Function None 8 96: Label - 4228(texel): 64(ptr) Variable Function - Store 4228(texel) 121 - 4229: 143 Load 145(s2D) - 4230: 53(fvec2) Load 148(c2) - 4231: 52(float) Load 565(lod) - 4232:3146(ResType) ImageSparseGather 4229 4230 2187 Lod ConstOffsets 4231 2380 - 4233: 7(f16vec4) CompositeExtract 4232 1 - Store 4228(texel) 4233 - 4234: 47(int) CompositeExtract 4232 0 - 4235: 143 Load 145(s2D) - 4236:154(f16vec2) Load 156(f16c2) - 4237:6(float16_t) Load 572(f16lod) - 4238:3146(ResType) ImageSparseGather 4235 4236 2187 Lod ConstOffsets 4237 2380 - 4239: 7(f16vec4) CompositeExtract 4238 1 - Store 4228(texel) 4239 - 4240: 47(int) CompositeExtract 4238 0 - 4241: 284 Load 286(s2DArray) - 4242: 167(fvec3) Load 169(c3) - 4243: 52(float) Load 565(lod) - 4244:3146(ResType) ImageSparseGather 4241 4242 2187 Lod ConstOffsets 4243 2380 - 4245: 7(f16vec4) CompositeExtract 4244 1 - Store 4228(texel) 4245 - 4246: 47(int) CompositeExtract 4244 0 - 4247: 284 Load 286(s2DArray) - 4248:175(f16vec3) Load 177(f16c3) - 4249:6(float16_t) Load 572(f16lod) - 4250:3146(ResType) ImageSparseGather 4247 4248 2187 Lod ConstOffsets 4249 2380 - 4251: 7(f16vec4) CompositeExtract 4250 1 - Store 4228(texel) 4251 - 4252: 47(int) CompositeExtract 4250 0 - 4253: 7(f16vec4) Load 4228(texel) - ReturnValue 4253 + 4104(texel): 64(ptr) Variable Function + Store 4104(texel) 121 + 4105: 143 Load 145(s2D) + 4106: 53(fvec2) Load 148(c2) + 4107: 52(float) Load 565(lod) + 4108:3056(ResType) ImageSparseGather 4105 4106 2097 Lod ConstOffsets 4107 2290 + 4109: 7(f16vec4) CompositeExtract 4108 1 + Store 4104(texel) 4109 + 4110: 47(int) CompositeExtract 4108 0 + 4111: 143 Load 145(s2D) + 4112:154(f16vec2) Load 156(f16c2) + 4113:6(float16_t) Load 572(f16lod) + 4114:3056(ResType) ImageSparseGather 4111 4112 2097 Lod ConstOffsets 4113 2290 + 4115: 7(f16vec4) CompositeExtract 4114 1 + Store 4104(texel) 4115 + 4116: 47(int) CompositeExtract 4114 0 + 4117: 284 Load 286(s2DArray) + 4118: 167(fvec3) Load 169(c3) + 4119: 52(float) Load 565(lod) + 4120:3056(ResType) ImageSparseGather 4117 4118 2097 Lod ConstOffsets 4119 2290 + 4121: 7(f16vec4) CompositeExtract 4120 1 + Store 4104(texel) 4121 + 4122: 47(int) CompositeExtract 4120 0 + 4123: 284 Load 286(s2DArray) + 4124:175(f16vec3) Load 177(f16c3) + 4125:6(float16_t) Load 572(f16lod) + 4126:3056(ResType) ImageSparseGather 4123 4124 2097 Lod ConstOffsets 4125 2290 + 4127: 7(f16vec4) CompositeExtract 4126 1 + Store 4104(texel) 4127 + 4128: 47(int) CompositeExtract 4126 0 + 4129: 7(f16vec4) Load 4104(texel) + ReturnValue 4129 FunctionEnd 97(testSparseImageLoad(): 7(f16vec4) Function None 8 98: Label - 4256(texel): 64(ptr) Variable Function - Store 4256(texel) 121 - 4257: 3006 Load 3008(i2D) - 4258: 53(fvec2) Load 148(c2) - 4259: 721(ivec2) ConvertFToS 4258 - 4260:3146(ResType) ImageSparseRead 4257 4259 - 4261: 7(f16vec4) CompositeExtract 4260 1 - Store 4256(texel) 4261 - 4262: 47(int) CompositeExtract 4260 0 - 4263: 3015 Load 3017(i3D) - 4264: 167(fvec3) Load 169(c3) - 4265: 734(ivec3) ConvertFToS 4264 - 4266:3146(ResType) ImageSparseRead 4263 4265 - 4267: 7(f16vec4) CompositeExtract 4266 1 - Store 4256(texel) 4267 - 4268: 47(int) CompositeExtract 4266 0 - 4269: 3024 Load 3026(i2DRect) - 4270: 53(fvec2) Load 148(c2) - 4271: 721(ivec2) ConvertFToS 4270 - 4272:3146(ResType) ImageSparseRead 4269 4271 - 4273: 7(f16vec4) CompositeExtract 4272 1 - Store 4256(texel) 4273 - 4274: 47(int) CompositeExtract 4272 0 - 4275: 3033 Load 3035(iCube) - 4276: 167(fvec3) Load 169(c3) - 4277: 734(ivec3) ConvertFToS 4276 - 4278:3146(ResType) ImageSparseRead 4275 4277 - 4279: 7(f16vec4) CompositeExtract 4278 1 - Store 4256(texel) 4279 - 4280: 47(int) CompositeExtract 4278 0 - 4281: 3060 Load 3062(i2DArray) - 4282: 167(fvec3) Load 169(c3) - 4283: 734(ivec3) ConvertFToS 4282 - 4284:3146(ResType) ImageSparseRead 4281 4283 - 4285: 7(f16vec4) CompositeExtract 4284 1 - Store 4256(texel) 4285 - 4286: 47(int) CompositeExtract 4284 0 - 4287: 3069 Load 3071(iCubeArray) - 4288: 167(fvec3) Load 169(c3) - 4289: 734(ivec3) ConvertFToS 4288 - 4290:3146(ResType) ImageSparseRead 4287 4289 - 4291: 7(f16vec4) CompositeExtract 4290 1 - Store 4256(texel) 4291 - 4292: 47(int) CompositeExtract 4290 0 - 4293: 3078 Load 3080(i2DMS) - 4294: 53(fvec2) Load 148(c2) - 4295: 721(ivec2) ConvertFToS 4294 - 4296:3146(ResType) ImageSparseRead 4293 4295 Sample 709 - 4297: 7(f16vec4) CompositeExtract 4296 1 - Store 4256(texel) 4297 - 4298: 47(int) CompositeExtract 4296 0 - 4299: 3087 Load 3089(i2DMSArray) - 4300: 167(fvec3) Load 169(c3) - 4301: 734(ivec3) ConvertFToS 4300 - 4302:3146(ResType) ImageSparseRead 4299 4301 Sample 1326 - 4303: 7(f16vec4) CompositeExtract 4302 1 - Store 4256(texel) 4303 - 4304: 47(int) CompositeExtract 4302 0 - 4305: 7(f16vec4) Load 4256(texel) - ReturnValue 4305 + 4132(texel): 64(ptr) Variable Function + Store 4132(texel) 121 + 4133: 2916 Load 2918(i2D) + 4134: 53(fvec2) Load 148(c2) + 4135: 721(ivec2) ConvertFToS 4134 + 4136:3056(ResType) ImageSparseRead 4133 4135 + 4137: 7(f16vec4) CompositeExtract 4136 1 + Store 4132(texel) 4137 + 4138: 47(int) CompositeExtract 4136 0 + 4139: 2925 Load 2927(i3D) + 4140: 167(fvec3) Load 169(c3) + 4141: 734(ivec3) ConvertFToS 4140 + 4142:3056(ResType) ImageSparseRead 4139 4141 + 4143: 7(f16vec4) CompositeExtract 4142 1 + Store 4132(texel) 4143 + 4144: 47(int) CompositeExtract 4142 0 + 4145: 2934 Load 2936(i2DRect) + 4146: 53(fvec2) Load 148(c2) + 4147: 721(ivec2) ConvertFToS 4146 + 4148:3056(ResType) ImageSparseRead 4145 4147 + 4149: 7(f16vec4) CompositeExtract 4148 1 + Store 4132(texel) 4149 + 4150: 47(int) CompositeExtract 4148 0 + 4151: 2943 Load 2945(iCube) + 4152: 167(fvec3) Load 169(c3) + 4153: 734(ivec3) ConvertFToS 4152 + 4154:3056(ResType) ImageSparseRead 4151 4153 + 4155: 7(f16vec4) CompositeExtract 4154 1 + Store 4132(texel) 4155 + 4156: 47(int) CompositeExtract 4154 0 + 4157: 2970 Load 2972(i2DArray) + 4158: 167(fvec3) Load 169(c3) + 4159: 734(ivec3) ConvertFToS 4158 + 4160:3056(ResType) ImageSparseRead 4157 4159 + 4161: 7(f16vec4) CompositeExtract 4160 1 + Store 4132(texel) 4161 + 4162: 47(int) CompositeExtract 4160 0 + 4163: 2979 Load 2981(iCubeArray) + 4164: 167(fvec3) Load 169(c3) + 4165: 734(ivec3) ConvertFToS 4164 + 4166:3056(ResType) ImageSparseRead 4163 4165 + 4167: 7(f16vec4) CompositeExtract 4166 1 + Store 4132(texel) 4167 + 4168: 47(int) CompositeExtract 4166 0 + 4169: 2988 Load 2990(i2DMS) + 4170: 53(fvec2) Load 148(c2) + 4171: 721(ivec2) ConvertFToS 4170 + 4172:3056(ResType) ImageSparseRead 4169 4171 Sample 709 + 4173: 7(f16vec4) CompositeExtract 4172 1 + Store 4132(texel) 4173 + 4174: 47(int) CompositeExtract 4172 0 + 4175: 2997 Load 2999(i2DMSArray) + 4176: 167(fvec3) Load 169(c3) + 4177: 734(ivec3) ConvertFToS 4176 + 4178:3056(ResType) ImageSparseRead 4175 4177 Sample 1326 + 4179: 7(f16vec4) CompositeExtract 4178 1 + Store 4132(texel) 4179 + 4180: 47(int) CompositeExtract 4178 0 + 4181: 7(f16vec4) Load 4132(texel) + ReturnValue 4181 FunctionEnd 99(testSparseTextureClamp(): 7(f16vec4) Function None 8 100: Label - 4308(texel): 64(ptr) Variable Function - Store 4308(texel) 121 - 4309: 143 Load 145(s2D) - 4310: 53(fvec2) Load 148(c2) - 4312: 52(float) Load 4311(lodClamp) - 4313:3146(ResType) ImageSparseSampleImplicitLod 4309 4310 MinLod 4312 - 4314: 7(f16vec4) CompositeExtract 4313 1 - Store 4308(texel) 4314 - 4315: 47(int) CompositeExtract 4313 0 - 4316: 143 Load 145(s2D) - 4317:154(f16vec2) Load 156(f16c2) - 4319:6(float16_t) Load 4318(f16lodClamp) - 4320:6(float16_t) Load 137(f16bias) - 4321:3146(ResType) ImageSparseSampleImplicitLod 4316 4317 Bias MinLod 4320 4319 - 4322: 7(f16vec4) CompositeExtract 4321 1 - Store 4308(texel) 4322 - 4323: 47(int) CompositeExtract 4321 0 - 4324: 163 Load 165(s3D) - 4325: 167(fvec3) Load 169(c3) - 4326: 52(float) Load 4311(lodClamp) - 4327:3146(ResType) ImageSparseSampleImplicitLod 4324 4325 MinLod 4326 - 4328: 7(f16vec4) CompositeExtract 4327 1 - Store 4308(texel) 4328 - 4329: 47(int) CompositeExtract 4327 0 - 4330: 163 Load 165(s3D) - 4331:175(f16vec3) Load 177(f16c3) - 4332:6(float16_t) Load 4318(f16lodClamp) - 4333:6(float16_t) Load 137(f16bias) - 4334:3146(ResType) ImageSparseSampleImplicitLod 4330 4331 Bias MinLod 4333 4332 - 4335: 7(f16vec4) CompositeExtract 4334 1 - Store 4308(texel) 4335 - 4336: 47(int) CompositeExtract 4334 0 - 4337: 184 Load 186(sCube) - 4338: 167(fvec3) Load 169(c3) - 4339: 52(float) Load 4311(lodClamp) - 4340:3146(ResType) ImageSparseSampleImplicitLod 4337 4338 MinLod 4339 - 4341: 7(f16vec4) CompositeExtract 4340 1 - Store 4308(texel) 4341 - 4342: 47(int) CompositeExtract 4340 0 - 4343: 184 Load 186(sCube) - 4344:175(f16vec3) Load 177(f16c3) - 4345:6(float16_t) Load 4318(f16lodClamp) - 4346:6(float16_t) Load 137(f16bias) - 4347:3146(ResType) ImageSparseSampleImplicitLod 4343 4344 Bias MinLod 4346 4345 - 4348: 7(f16vec4) CompositeExtract 4347 1 - Store 4308(texel) 4348 - 4349: 47(int) CompositeExtract 4347 0 - 4350: 224 Load 226(s2DShadow) - 4351: 167(fvec3) Load 169(c3) - 4352: 52(float) Load 4311(lodClamp) - 4353: 208(ptr) AccessChain 4308(texel) 207 - 4354: 52(float) CompositeExtract 4351 2 - 4355:3182(ResType) ImageSparseSampleDrefImplicitLod 4350 4351 4354 MinLod 4352 - 4356:6(float16_t) CompositeExtract 4355 1 - Store 4353 4356 - 4357: 47(int) CompositeExtract 4355 0 - 4358: 224 Load 226(s2DShadow) - 4359:154(f16vec2) Load 156(f16c2) - 4360: 52(float) Load 215(compare) - 4361:6(float16_t) Load 4318(f16lodClamp) - 4362: 208(ptr) AccessChain 4308(texel) 207 - 4363:6(float16_t) Load 137(f16bias) - 4364:3182(ResType) ImageSparseSampleDrefImplicitLod 4358 4359 4360 Bias MinLod 4363 4361 - 4365:6(float16_t) CompositeExtract 4364 1 - Store 4362 4365 - 4366: 47(int) CompositeExtract 4364 0 - 4367: 245 Load 247(sCubeShadow) - 4368: 249(fvec4) Load 251(c4) - 4369: 52(float) Load 4311(lodClamp) - 4370: 208(ptr) AccessChain 4308(texel) 207 - 4371: 52(float) CompositeExtract 4368 3 - 4372:3182(ResType) ImageSparseSampleDrefImplicitLod 4367 4368 4371 MinLod 4369 - 4373:6(float16_t) CompositeExtract 4372 1 - Store 4370 4373 - 4374: 47(int) CompositeExtract 4372 0 - 4375: 245 Load 247(sCubeShadow) - 4376:175(f16vec3) Load 177(f16c3) - 4377: 52(float) Load 215(compare) - 4378:6(float16_t) Load 4318(f16lodClamp) - 4379: 208(ptr) AccessChain 4308(texel) 207 - 4380:6(float16_t) Load 137(f16bias) - 4381:3182(ResType) ImageSparseSampleDrefImplicitLod 4375 4376 4377 Bias MinLod 4380 4378 - 4382:6(float16_t) CompositeExtract 4381 1 - Store 4379 4382 - 4383: 47(int) CompositeExtract 4381 0 - 4384: 284 Load 286(s2DArray) - 4385: 167(fvec3) Load 169(c3) - 4386: 52(float) Load 4311(lodClamp) - 4387:3146(ResType) ImageSparseSampleImplicitLod 4384 4385 MinLod 4386 - 4388: 7(f16vec4) CompositeExtract 4387 1 - Store 4308(texel) 4388 - 4389: 47(int) CompositeExtract 4387 0 - 4390: 284 Load 286(s2DArray) - 4391:175(f16vec3) Load 177(f16c3) - 4392:6(float16_t) Load 4318(f16lodClamp) - 4393:6(float16_t) Load 137(f16bias) - 4394:3146(ResType) ImageSparseSampleImplicitLod 4390 4391 Bias MinLod 4393 4392 - 4395: 7(f16vec4) CompositeExtract 4394 1 - Store 4308(texel) 4395 - 4396: 47(int) CompositeExtract 4394 0 - 4397: 299 Load 301(sCubeArray) - 4398: 249(fvec4) Load 251(c4) - 4399: 52(float) Load 4311(lodClamp) - 4400:3146(ResType) ImageSparseSampleImplicitLod 4397 4398 MinLod 4399 - 4401: 7(f16vec4) CompositeExtract 4400 1 - Store 4308(texel) 4401 - 4402: 47(int) CompositeExtract 4400 0 - 4403: 299 Load 301(sCubeArray) - 4404: 7(f16vec4) Load 309(f16c4) - 4405:6(float16_t) Load 4318(f16lodClamp) - 4406:6(float16_t) Load 137(f16bias) - 4407:3146(ResType) ImageSparseSampleImplicitLod 4403 4404 Bias MinLod 4406 4405 - 4408: 7(f16vec4) CompositeExtract 4407 1 - Store 4308(texel) 4408 - 4409: 47(int) CompositeExtract 4407 0 - 4410: 337 Load 339(s2DArrayShadow) - 4411: 249(fvec4) Load 251(c4) - 4412: 52(float) Load 4311(lodClamp) - 4413: 208(ptr) AccessChain 4308(texel) 207 - 4414: 52(float) CompositeExtract 4411 3 - 4415:3182(ResType) ImageSparseSampleDrefImplicitLod 4410 4411 4414 MinLod 4412 - 4416:6(float16_t) CompositeExtract 4415 1 - Store 4413 4416 - 4417: 47(int) CompositeExtract 4415 0 - 4418: 337 Load 339(s2DArrayShadow) - 4419:175(f16vec3) Load 177(f16c3) - 4420: 52(float) Load 215(compare) - 4421:6(float16_t) Load 4318(f16lodClamp) - 4422: 208(ptr) AccessChain 4308(texel) 207 - 4423:3182(ResType) ImageSparseSampleDrefImplicitLod 4418 4419 4420 MinLod 4421 - 4424:6(float16_t) CompositeExtract 4423 1 - Store 4422 4424 - 4425: 47(int) CompositeExtract 4423 0 - 4426: 391 Load 393(sCubeArrayShadow) - 4427: 249(fvec4) Load 251(c4) - 4428: 52(float) Load 215(compare) - 4429: 52(float) Load 4311(lodClamp) - 4430: 208(ptr) AccessChain 4308(texel) 207 - 4431:3182(ResType) ImageSparseSampleDrefImplicitLod 4426 4427 4428 MinLod 4429 - 4432:6(float16_t) CompositeExtract 4431 1 - Store 4430 4432 - 4433: 47(int) CompositeExtract 4431 0 - 4434: 391 Load 393(sCubeArrayShadow) - 4435: 7(f16vec4) Load 309(f16c4) - 4436: 52(float) Load 215(compare) - 4437:6(float16_t) Load 4318(f16lodClamp) - 4438: 208(ptr) AccessChain 4308(texel) 207 - 4439:3182(ResType) ImageSparseSampleDrefImplicitLod 4434 4435 4436 MinLod 4437 - 4440:6(float16_t) CompositeExtract 4439 1 - Store 4438 4440 - 4441: 47(int) CompositeExtract 4439 0 - 4442: 7(f16vec4) Load 4308(texel) - ReturnValue 4442 + 4184(texel): 64(ptr) Variable Function + Store 4184(texel) 121 + 4185: 143 Load 145(s2D) + 4186: 53(fvec2) Load 148(c2) + 4188: 52(float) Load 4187(lodClamp) + 4189:3056(ResType) ImageSparseSampleImplicitLod 4185 4186 MinLod 4188 + 4190: 7(f16vec4) CompositeExtract 4189 1 + Store 4184(texel) 4190 + 4191: 47(int) CompositeExtract 4189 0 + 4192: 143 Load 145(s2D) + 4193:154(f16vec2) Load 156(f16c2) + 4195:6(float16_t) Load 4194(f16lodClamp) + 4196:6(float16_t) Load 137(f16bias) + 4197:3056(ResType) ImageSparseSampleImplicitLod 4192 4193 Bias MinLod 4196 4195 + 4198: 7(f16vec4) CompositeExtract 4197 1 + Store 4184(texel) 4198 + 4199: 47(int) CompositeExtract 4197 0 + 4200: 163 Load 165(s3D) + 4201: 167(fvec3) Load 169(c3) + 4202: 52(float) Load 4187(lodClamp) + 4203:3056(ResType) ImageSparseSampleImplicitLod 4200 4201 MinLod 4202 + 4204: 7(f16vec4) CompositeExtract 4203 1 + Store 4184(texel) 4204 + 4205: 47(int) CompositeExtract 4203 0 + 4206: 163 Load 165(s3D) + 4207:175(f16vec3) Load 177(f16c3) + 4208:6(float16_t) Load 4194(f16lodClamp) + 4209:6(float16_t) Load 137(f16bias) + 4210:3056(ResType) ImageSparseSampleImplicitLod 4206 4207 Bias MinLod 4209 4208 + 4211: 7(f16vec4) CompositeExtract 4210 1 + Store 4184(texel) 4211 + 4212: 47(int) CompositeExtract 4210 0 + 4213: 184 Load 186(sCube) + 4214: 167(fvec3) Load 169(c3) + 4215: 52(float) Load 4187(lodClamp) + 4216:3056(ResType) ImageSparseSampleImplicitLod 4213 4214 MinLod 4215 + 4217: 7(f16vec4) CompositeExtract 4216 1 + Store 4184(texel) 4217 + 4218: 47(int) CompositeExtract 4216 0 + 4219: 184 Load 186(sCube) + 4220:175(f16vec3) Load 177(f16c3) + 4221:6(float16_t) Load 4194(f16lodClamp) + 4222:6(float16_t) Load 137(f16bias) + 4223:3056(ResType) ImageSparseSampleImplicitLod 4219 4220 Bias MinLod 4222 4221 + 4224: 7(f16vec4) CompositeExtract 4223 1 + Store 4184(texel) 4224 + 4225: 47(int) CompositeExtract 4223 0 + 4226: 224 Load 226(s2DShadow) + 4227: 167(fvec3) Load 169(c3) + 4228: 52(float) Load 4187(lodClamp) + 4229: 208(ptr) AccessChain 4184(texel) 207 + 4230: 52(float) CompositeExtract 4227 2 + 4231:3092(ResType) ImageSparseSampleDrefImplicitLod 4226 4227 4230 MinLod 4228 + 4232:6(float16_t) CompositeExtract 4231 1 + Store 4229 4232 + 4233: 47(int) CompositeExtract 4231 0 + 4234: 224 Load 226(s2DShadow) + 4235:154(f16vec2) Load 156(f16c2) + 4236: 52(float) Load 215(compare) + 4237:6(float16_t) Load 4194(f16lodClamp) + 4238: 208(ptr) AccessChain 4184(texel) 207 + 4239:6(float16_t) Load 137(f16bias) + 4240:3092(ResType) ImageSparseSampleDrefImplicitLod 4234 4235 4236 Bias MinLod 4239 4237 + 4241:6(float16_t) CompositeExtract 4240 1 + Store 4238 4241 + 4242: 47(int) CompositeExtract 4240 0 + 4243: 245 Load 247(sCubeShadow) + 4244: 249(fvec4) Load 251(c4) + 4245: 52(float) Load 4187(lodClamp) + 4246: 208(ptr) AccessChain 4184(texel) 207 + 4247: 52(float) CompositeExtract 4244 3 + 4248:3092(ResType) ImageSparseSampleDrefImplicitLod 4243 4244 4247 MinLod 4245 + 4249:6(float16_t) CompositeExtract 4248 1 + Store 4246 4249 + 4250: 47(int) CompositeExtract 4248 0 + 4251: 245 Load 247(sCubeShadow) + 4252:175(f16vec3) Load 177(f16c3) + 4253: 52(float) Load 215(compare) + 4254:6(float16_t) Load 4194(f16lodClamp) + 4255: 208(ptr) AccessChain 4184(texel) 207 + 4256:6(float16_t) Load 137(f16bias) + 4257:3092(ResType) ImageSparseSampleDrefImplicitLod 4251 4252 4253 Bias MinLod 4256 4254 + 4258:6(float16_t) CompositeExtract 4257 1 + Store 4255 4258 + 4259: 47(int) CompositeExtract 4257 0 + 4260: 284 Load 286(s2DArray) + 4261: 167(fvec3) Load 169(c3) + 4262: 52(float) Load 4187(lodClamp) + 4263:3056(ResType) ImageSparseSampleImplicitLod 4260 4261 MinLod 4262 + 4264: 7(f16vec4) CompositeExtract 4263 1 + Store 4184(texel) 4264 + 4265: 47(int) CompositeExtract 4263 0 + 4266: 284 Load 286(s2DArray) + 4267:175(f16vec3) Load 177(f16c3) + 4268:6(float16_t) Load 4194(f16lodClamp) + 4269:6(float16_t) Load 137(f16bias) + 4270:3056(ResType) ImageSparseSampleImplicitLod 4266 4267 Bias MinLod 4269 4268 + 4271: 7(f16vec4) CompositeExtract 4270 1 + Store 4184(texel) 4271 + 4272: 47(int) CompositeExtract 4270 0 + 4273: 299 Load 301(sCubeArray) + 4274: 249(fvec4) Load 251(c4) + 4275: 52(float) Load 4187(lodClamp) + 4276:3056(ResType) ImageSparseSampleImplicitLod 4273 4274 MinLod 4275 + 4277: 7(f16vec4) CompositeExtract 4276 1 + Store 4184(texel) 4277 + 4278: 47(int) CompositeExtract 4276 0 + 4279: 299 Load 301(sCubeArray) + 4280: 7(f16vec4) Load 309(f16c4) + 4281:6(float16_t) Load 4194(f16lodClamp) + 4282:6(float16_t) Load 137(f16bias) + 4283:3056(ResType) ImageSparseSampleImplicitLod 4279 4280 Bias MinLod 4282 4281 + 4284: 7(f16vec4) CompositeExtract 4283 1 + Store 4184(texel) 4284 + 4285: 47(int) CompositeExtract 4283 0 + 4286: 337 Load 339(s2DArrayShadow) + 4287: 249(fvec4) Load 251(c4) + 4288: 52(float) Load 4187(lodClamp) + 4289: 208(ptr) AccessChain 4184(texel) 207 + 4290: 52(float) CompositeExtract 4287 3 + 4291:3092(ResType) ImageSparseSampleDrefImplicitLod 4286 4287 4290 MinLod 4288 + 4292:6(float16_t) CompositeExtract 4291 1 + Store 4289 4292 + 4293: 47(int) CompositeExtract 4291 0 + 4294: 337 Load 339(s2DArrayShadow) + 4295:175(f16vec3) Load 177(f16c3) + 4296: 52(float) Load 215(compare) + 4297:6(float16_t) Load 4194(f16lodClamp) + 4298: 208(ptr) AccessChain 4184(texel) 207 + 4299:3092(ResType) ImageSparseSampleDrefImplicitLod 4294 4295 4296 MinLod 4297 + 4300:6(float16_t) CompositeExtract 4299 1 + Store 4298 4300 + 4301: 47(int) CompositeExtract 4299 0 + 4302: 391 Load 393(sCubeArrayShadow) + 4303: 249(fvec4) Load 251(c4) + 4304: 52(float) Load 215(compare) + 4305: 52(float) Load 4187(lodClamp) + 4306: 208(ptr) AccessChain 4184(texel) 207 + 4307:3092(ResType) ImageSparseSampleDrefImplicitLod 4302 4303 4304 MinLod 4305 + 4308:6(float16_t) CompositeExtract 4307 1 + Store 4306 4308 + 4309: 47(int) CompositeExtract 4307 0 + 4310: 391 Load 393(sCubeArrayShadow) + 4311: 7(f16vec4) Load 309(f16c4) + 4312: 52(float) Load 215(compare) + 4313:6(float16_t) Load 4194(f16lodClamp) + 4314: 208(ptr) AccessChain 4184(texel) 207 + 4315:3092(ResType) ImageSparseSampleDrefImplicitLod 4310 4311 4312 MinLod 4313 + 4316:6(float16_t) CompositeExtract 4315 1 + Store 4314 4316 + 4317: 47(int) CompositeExtract 4315 0 + 4318: 7(f16vec4) Load 4184(texel) + ReturnValue 4318 FunctionEnd 101(testTextureClamp(): 7(f16vec4) Function None 8 102: Label - 4445(texel): 64(ptr) Variable Function - Store 4445(texel) 121 - 4446: 123 Load 125(s1D) - 4447: 52(float) Load 128(c1) - 4448: 52(float) Load 4311(lodClamp) - 4449: 7(f16vec4) ImageSampleImplicitLod 4446 4447 MinLod 4448 - 4450: 7(f16vec4) Load 4445(texel) - 4451: 7(f16vec4) FAdd 4450 4449 - Store 4445(texel) 4451 - 4452: 123 Load 125(s1D) - 4453:6(float16_t) Load 135(f16c1) - 4454:6(float16_t) Load 4318(f16lodClamp) - 4455:6(float16_t) Load 137(f16bias) - 4456: 7(f16vec4) ImageSampleImplicitLod 4452 4453 Bias MinLod 4455 4454 - 4457: 7(f16vec4) Load 4445(texel) - 4458: 7(f16vec4) FAdd 4457 4456 - Store 4445(texel) 4458 - 4459: 143 Load 145(s2D) - 4460: 53(fvec2) Load 148(c2) - 4461: 52(float) Load 4311(lodClamp) - 4462: 7(f16vec4) ImageSampleImplicitLod 4459 4460 MinLod 4461 - 4463: 7(f16vec4) Load 4445(texel) - 4464: 7(f16vec4) FAdd 4463 4462 - Store 4445(texel) 4464 - 4465: 143 Load 145(s2D) - 4466:154(f16vec2) Load 156(f16c2) - 4467:6(float16_t) Load 4318(f16lodClamp) - 4468:6(float16_t) Load 137(f16bias) - 4469: 7(f16vec4) ImageSampleImplicitLod 4465 4466 Bias MinLod 4468 4467 - 4470: 7(f16vec4) Load 4445(texel) - 4471: 7(f16vec4) FAdd 4470 4469 - Store 4445(texel) 4471 - 4472: 163 Load 165(s3D) - 4473: 167(fvec3) Load 169(c3) - 4474: 52(float) Load 4311(lodClamp) - 4475: 7(f16vec4) ImageSampleImplicitLod 4472 4473 MinLod 4474 - 4476: 7(f16vec4) Load 4445(texel) - 4477: 7(f16vec4) FAdd 4476 4475 - Store 4445(texel) 4477 - 4478: 163 Load 165(s3D) - 4479:175(f16vec3) Load 177(f16c3) - 4480:6(float16_t) Load 4318(f16lodClamp) - 4481:6(float16_t) Load 137(f16bias) - 4482: 7(f16vec4) ImageSampleImplicitLod 4478 4479 Bias MinLod 4481 4480 - 4483: 7(f16vec4) Load 4445(texel) - 4484: 7(f16vec4) FAdd 4483 4482 - Store 4445(texel) 4484 - 4485: 184 Load 186(sCube) - 4486: 167(fvec3) Load 169(c3) - 4487: 52(float) Load 4311(lodClamp) - 4488: 7(f16vec4) ImageSampleImplicitLod 4485 4486 MinLod 4487 - 4489: 7(f16vec4) Load 4445(texel) - 4490: 7(f16vec4) FAdd 4489 4488 - Store 4445(texel) 4490 - 4491: 184 Load 186(sCube) - 4492:175(f16vec3) Load 177(f16c3) - 4493:6(float16_t) Load 4318(f16lodClamp) - 4494:6(float16_t) Load 137(f16bias) - 4495: 7(f16vec4) ImageSampleImplicitLod 4491 4492 Bias MinLod 4494 4493 - 4496: 7(f16vec4) Load 4445(texel) - 4497: 7(f16vec4) FAdd 4496 4495 - Store 4445(texel) 4497 - 4498: 199 Load 201(s1DShadow) - 4499: 167(fvec3) Load 169(c3) - 4500: 52(float) Load 4311(lodClamp) - 4501: 52(float) CompositeExtract 4499 2 - 4502:6(float16_t) ImageSampleDrefImplicitLod 4498 4499 4501 MinLod 4500 - 4503: 208(ptr) AccessChain 4445(texel) 207 + 4321(texel): 64(ptr) Variable Function + Store 4321(texel) 121 + 4322: 123 Load 125(s1D) + 4323: 52(float) Load 128(c1) + 4324: 52(float) Load 4187(lodClamp) + 4325: 7(f16vec4) ImageSampleImplicitLod 4322 4323 MinLod 4324 + 4326: 7(f16vec4) Load 4321(texel) + 4327: 7(f16vec4) FAdd 4326 4325 + Store 4321(texel) 4327 + 4328: 123 Load 125(s1D) + 4329:6(float16_t) Load 135(f16c1) + 4330:6(float16_t) Load 4194(f16lodClamp) + 4331:6(float16_t) Load 137(f16bias) + 4332: 7(f16vec4) ImageSampleImplicitLod 4328 4329 Bias MinLod 4331 4330 + 4333: 7(f16vec4) Load 4321(texel) + 4334: 7(f16vec4) FAdd 4333 4332 + Store 4321(texel) 4334 + 4335: 143 Load 145(s2D) + 4336: 53(fvec2) Load 148(c2) + 4337: 52(float) Load 4187(lodClamp) + 4338: 7(f16vec4) ImageSampleImplicitLod 4335 4336 MinLod 4337 + 4339: 7(f16vec4) Load 4321(texel) + 4340: 7(f16vec4) FAdd 4339 4338 + Store 4321(texel) 4340 + 4341: 143 Load 145(s2D) + 4342:154(f16vec2) Load 156(f16c2) + 4343:6(float16_t) Load 4194(f16lodClamp) + 4344:6(float16_t) Load 137(f16bias) + 4345: 7(f16vec4) ImageSampleImplicitLod 4341 4342 Bias MinLod 4344 4343 + 4346: 7(f16vec4) Load 4321(texel) + 4347: 7(f16vec4) FAdd 4346 4345 + Store 4321(texel) 4347 + 4348: 163 Load 165(s3D) + 4349: 167(fvec3) Load 169(c3) + 4350: 52(float) Load 4187(lodClamp) + 4351: 7(f16vec4) ImageSampleImplicitLod 4348 4349 MinLod 4350 + 4352: 7(f16vec4) Load 4321(texel) + 4353: 7(f16vec4) FAdd 4352 4351 + Store 4321(texel) 4353 + 4354: 163 Load 165(s3D) + 4355:175(f16vec3) Load 177(f16c3) + 4356:6(float16_t) Load 4194(f16lodClamp) + 4357:6(float16_t) Load 137(f16bias) + 4358: 7(f16vec4) ImageSampleImplicitLod 4354 4355 Bias MinLod 4357 4356 + 4359: 7(f16vec4) Load 4321(texel) + 4360: 7(f16vec4) FAdd 4359 4358 + Store 4321(texel) 4360 + 4361: 184 Load 186(sCube) + 4362: 167(fvec3) Load 169(c3) + 4363: 52(float) Load 4187(lodClamp) + 4364: 7(f16vec4) ImageSampleImplicitLod 4361 4362 MinLod 4363 + 4365: 7(f16vec4) Load 4321(texel) + 4366: 7(f16vec4) FAdd 4365 4364 + Store 4321(texel) 4366 + 4367: 184 Load 186(sCube) + 4368:175(f16vec3) Load 177(f16c3) + 4369:6(float16_t) Load 4194(f16lodClamp) + 4370:6(float16_t) Load 137(f16bias) + 4371: 7(f16vec4) ImageSampleImplicitLod 4367 4368 Bias MinLod 4370 4369 + 4372: 7(f16vec4) Load 4321(texel) + 4373: 7(f16vec4) FAdd 4372 4371 + Store 4321(texel) 4373 + 4374: 199 Load 201(s1DShadow) + 4375: 167(fvec3) Load 169(c3) + 4376: 52(float) Load 4187(lodClamp) + 4377: 52(float) CompositeExtract 4375 2 + 4378:6(float16_t) ImageSampleDrefImplicitLod 4374 4375 4377 MinLod 4376 + 4379: 208(ptr) AccessChain 4321(texel) 207 + 4380:6(float16_t) Load 4379 + 4381:6(float16_t) FAdd 4380 4378 + 4382: 208(ptr) AccessChain 4321(texel) 207 + Store 4382 4381 + 4383: 199 Load 201(s1DShadow) + 4384:154(f16vec2) Load 156(f16c2) + 4385: 52(float) Load 215(compare) + 4386:6(float16_t) Load 4194(f16lodClamp) + 4387:6(float16_t) Load 137(f16bias) + 4388:6(float16_t) ImageSampleDrefImplicitLod 4383 4384 4385 Bias MinLod 4387 4386 + 4389: 208(ptr) AccessChain 4321(texel) 207 + 4390:6(float16_t) Load 4389 + 4391:6(float16_t) FAdd 4390 4388 + 4392: 208(ptr) AccessChain 4321(texel) 207 + Store 4392 4391 + 4393: 224 Load 226(s2DShadow) + 4394: 167(fvec3) Load 169(c3) + 4395: 52(float) Load 4187(lodClamp) + 4396: 52(float) CompositeExtract 4394 2 + 4397:6(float16_t) ImageSampleDrefImplicitLod 4393 4394 4396 MinLod 4395 + 4398: 208(ptr) AccessChain 4321(texel) 207 + 4399:6(float16_t) Load 4398 + 4400:6(float16_t) FAdd 4399 4397 + 4401: 208(ptr) AccessChain 4321(texel) 207 + Store 4401 4400 + 4402: 224 Load 226(s2DShadow) + 4403:154(f16vec2) Load 156(f16c2) + 4404: 52(float) Load 215(compare) + 4405:6(float16_t) Load 4194(f16lodClamp) + 4406:6(float16_t) Load 137(f16bias) + 4407:6(float16_t) ImageSampleDrefImplicitLod 4402 4403 4404 Bias MinLod 4406 4405 + 4408: 208(ptr) AccessChain 4321(texel) 207 + 4409:6(float16_t) Load 4408 + 4410:6(float16_t) FAdd 4409 4407 + 4411: 208(ptr) AccessChain 4321(texel) 207 + Store 4411 4410 + 4412: 245 Load 247(sCubeShadow) + 4413: 249(fvec4) Load 251(c4) + 4414: 52(float) Load 4187(lodClamp) + 4415: 52(float) CompositeExtract 4413 3 + 4416:6(float16_t) ImageSampleDrefImplicitLod 4412 4413 4415 MinLod 4414 + 4417: 208(ptr) AccessChain 4321(texel) 207 + 4418:6(float16_t) Load 4417 + 4419:6(float16_t) FAdd 4418 4416 + 4420: 208(ptr) AccessChain 4321(texel) 207 + Store 4420 4419 + 4421: 245 Load 247(sCubeShadow) + 4422:175(f16vec3) Load 177(f16c3) + 4423: 52(float) Load 215(compare) + 4424:6(float16_t) Load 4194(f16lodClamp) + 4425:6(float16_t) Load 137(f16bias) + 4426:6(float16_t) ImageSampleDrefImplicitLod 4421 4422 4423 Bias MinLod 4425 4424 + 4427: 208(ptr) AccessChain 4321(texel) 207 + 4428:6(float16_t) Load 4427 + 4429:6(float16_t) FAdd 4428 4426 + 4430: 208(ptr) AccessChain 4321(texel) 207 + Store 4430 4429 + 4431: 269 Load 271(s1DArray) + 4432: 53(fvec2) Load 148(c2) + 4433: 52(float) Load 4187(lodClamp) + 4434: 7(f16vec4) ImageSampleImplicitLod 4431 4432 MinLod 4433 + 4435: 7(f16vec4) Load 4321(texel) + 4436: 7(f16vec4) FAdd 4435 4434 + Store 4321(texel) 4436 + 4437: 269 Load 271(s1DArray) + 4438:154(f16vec2) Load 156(f16c2) + 4439:6(float16_t) Load 4194(f16lodClamp) + 4440:6(float16_t) Load 137(f16bias) + 4441: 7(f16vec4) ImageSampleImplicitLod 4437 4438 Bias MinLod 4440 4439 + 4442: 7(f16vec4) Load 4321(texel) + 4443: 7(f16vec4) FAdd 4442 4441 + Store 4321(texel) 4443 + 4444: 284 Load 286(s2DArray) + 4445: 167(fvec3) Load 169(c3) + 4446: 52(float) Load 4187(lodClamp) + 4447: 7(f16vec4) ImageSampleImplicitLod 4444 4445 MinLod 4446 + 4448: 7(f16vec4) Load 4321(texel) + 4449: 7(f16vec4) FAdd 4448 4447 + Store 4321(texel) 4449 + 4450: 284 Load 286(s2DArray) + 4451:175(f16vec3) Load 177(f16c3) + 4452:6(float16_t) Load 4194(f16lodClamp) + 4453:6(float16_t) Load 137(f16bias) + 4454: 7(f16vec4) ImageSampleImplicitLod 4450 4451 Bias MinLod 4453 4452 + 4455: 7(f16vec4) Load 4321(texel) + 4456: 7(f16vec4) FAdd 4455 4454 + Store 4321(texel) 4456 + 4457: 299 Load 301(sCubeArray) + 4458: 249(fvec4) Load 251(c4) + 4459: 52(float) Load 4187(lodClamp) + 4460: 7(f16vec4) ImageSampleImplicitLod 4457 4458 MinLod 4459 + 4461: 7(f16vec4) Load 4321(texel) + 4462: 7(f16vec4) FAdd 4461 4460 + Store 4321(texel) 4462 + 4463: 299 Load 301(sCubeArray) + 4464: 7(f16vec4) Load 309(f16c4) + 4465:6(float16_t) Load 4194(f16lodClamp) + 4466:6(float16_t) Load 137(f16bias) + 4467: 7(f16vec4) ImageSampleImplicitLod 4463 4464 Bias MinLod 4466 4465 + 4468: 7(f16vec4) Load 4321(texel) + 4469: 7(f16vec4) FAdd 4468 4467 + Store 4321(texel) 4469 + 4470: 316 Load 318(s1DArrayShadow) + 4471: 167(fvec3) Load 169(c3) + 4472: 52(float) Load 4187(lodClamp) + 4473: 52(float) CompositeExtract 4471 2 + 4474:6(float16_t) ImageSampleDrefImplicitLod 4470 4471 4473 MinLod 4472 + 4475: 208(ptr) AccessChain 4321(texel) 207 + 4476:6(float16_t) Load 4475 + 4477:6(float16_t) FAdd 4476 4474 + 4478: 208(ptr) AccessChain 4321(texel) 207 + Store 4478 4477 + 4479: 316 Load 318(s1DArrayShadow) + 4480:154(f16vec2) Load 156(f16c2) + 4481: 52(float) Load 215(compare) + 4482:6(float16_t) Load 4194(f16lodClamp) + 4483:6(float16_t) Load 137(f16bias) + 4484:6(float16_t) ImageSampleDrefImplicitLod 4479 4480 4481 Bias MinLod 4483 4482 + 4485: 208(ptr) AccessChain 4321(texel) 207 + 4486:6(float16_t) Load 4485 + 4487:6(float16_t) FAdd 4486 4484 + 4488: 208(ptr) AccessChain 4321(texel) 207 + Store 4488 4487 + 4489: 337 Load 339(s2DArrayShadow) + 4490: 249(fvec4) Load 251(c4) + 4491: 52(float) Load 4187(lodClamp) + 4492: 52(float) CompositeExtract 4490 3 + 4493:6(float16_t) ImageSampleDrefImplicitLod 4489 4490 4492 MinLod 4491 + 4494: 208(ptr) AccessChain 4321(texel) 207 + 4495:6(float16_t) Load 4494 + 4496:6(float16_t) FAdd 4495 4493 + 4497: 208(ptr) AccessChain 4321(texel) 207 + Store 4497 4496 + 4498: 337 Load 339(s2DArrayShadow) + 4499:175(f16vec3) Load 177(f16c3) + 4500: 52(float) Load 215(compare) + 4501:6(float16_t) Load 4194(f16lodClamp) + 4502:6(float16_t) ImageSampleDrefImplicitLod 4498 4499 4500 MinLod 4501 + 4503: 208(ptr) AccessChain 4321(texel) 207 4504:6(float16_t) Load 4503 4505:6(float16_t) FAdd 4504 4502 - 4506: 208(ptr) AccessChain 4445(texel) 207 + 4506: 208(ptr) AccessChain 4321(texel) 207 Store 4506 4505 - 4507: 199 Load 201(s1DShadow) - 4508:154(f16vec2) Load 156(f16c2) + 4507: 391 Load 393(sCubeArrayShadow) + 4508: 249(fvec4) Load 251(c4) 4509: 52(float) Load 215(compare) - 4510:6(float16_t) Load 4318(f16lodClamp) - 4511:6(float16_t) Load 137(f16bias) - 4512:6(float16_t) ImageSampleDrefImplicitLod 4507 4508 4509 Bias MinLod 4511 4510 - 4513: 208(ptr) AccessChain 4445(texel) 207 - 4514:6(float16_t) Load 4513 - 4515:6(float16_t) FAdd 4514 4512 - 4516: 208(ptr) AccessChain 4445(texel) 207 - Store 4516 4515 - 4517: 224 Load 226(s2DShadow) - 4518: 167(fvec3) Load 169(c3) - 4519: 52(float) Load 4311(lodClamp) - 4520: 52(float) CompositeExtract 4518 2 - 4521:6(float16_t) ImageSampleDrefImplicitLod 4517 4518 4520 MinLod 4519 - 4522: 208(ptr) AccessChain 4445(texel) 207 - 4523:6(float16_t) Load 4522 - 4524:6(float16_t) FAdd 4523 4521 - 4525: 208(ptr) AccessChain 4445(texel) 207 - Store 4525 4524 - 4526: 224 Load 226(s2DShadow) - 4527:154(f16vec2) Load 156(f16c2) - 4528: 52(float) Load 215(compare) - 4529:6(float16_t) Load 4318(f16lodClamp) - 4530:6(float16_t) Load 137(f16bias) - 4531:6(float16_t) ImageSampleDrefImplicitLod 4526 4527 4528 Bias MinLod 4530 4529 - 4532: 208(ptr) AccessChain 4445(texel) 207 - 4533:6(float16_t) Load 4532 - 4534:6(float16_t) FAdd 4533 4531 - 4535: 208(ptr) AccessChain 4445(texel) 207 - Store 4535 4534 - 4536: 245 Load 247(sCubeShadow) - 4537: 249(fvec4) Load 251(c4) - 4538: 52(float) Load 4311(lodClamp) - 4539: 52(float) CompositeExtract 4537 3 - 4540:6(float16_t) ImageSampleDrefImplicitLod 4536 4537 4539 MinLod 4538 - 4541: 208(ptr) AccessChain 4445(texel) 207 - 4542:6(float16_t) Load 4541 - 4543:6(float16_t) FAdd 4542 4540 - 4544: 208(ptr) AccessChain 4445(texel) 207 - Store 4544 4543 - 4545: 245 Load 247(sCubeShadow) - 4546:175(f16vec3) Load 177(f16c3) - 4547: 52(float) Load 215(compare) - 4548:6(float16_t) Load 4318(f16lodClamp) - 4549:6(float16_t) Load 137(f16bias) - 4550:6(float16_t) ImageSampleDrefImplicitLod 4545 4546 4547 Bias MinLod 4549 4548 - 4551: 208(ptr) AccessChain 4445(texel) 207 - 4552:6(float16_t) Load 4551 - 4553:6(float16_t) FAdd 4552 4550 - 4554: 208(ptr) AccessChain 4445(texel) 207 - Store 4554 4553 - 4555: 269 Load 271(s1DArray) - 4556: 53(fvec2) Load 148(c2) - 4557: 52(float) Load 4311(lodClamp) - 4558: 7(f16vec4) ImageSampleImplicitLod 4555 4556 MinLod 4557 - 4559: 7(f16vec4) Load 4445(texel) - 4560: 7(f16vec4) FAdd 4559 4558 - Store 4445(texel) 4560 - 4561: 269 Load 271(s1DArray) - 4562:154(f16vec2) Load 156(f16c2) - 4563:6(float16_t) Load 4318(f16lodClamp) - 4564:6(float16_t) Load 137(f16bias) - 4565: 7(f16vec4) ImageSampleImplicitLod 4561 4562 Bias MinLod 4564 4563 - 4566: 7(f16vec4) Load 4445(texel) - 4567: 7(f16vec4) FAdd 4566 4565 - Store 4445(texel) 4567 - 4568: 284 Load 286(s2DArray) - 4569: 167(fvec3) Load 169(c3) - 4570: 52(float) Load 4311(lodClamp) - 4571: 7(f16vec4) ImageSampleImplicitLod 4568 4569 MinLod 4570 - 4572: 7(f16vec4) Load 4445(texel) - 4573: 7(f16vec4) FAdd 4572 4571 - Store 4445(texel) 4573 - 4574: 284 Load 286(s2DArray) - 4575:175(f16vec3) Load 177(f16c3) - 4576:6(float16_t) Load 4318(f16lodClamp) - 4577:6(float16_t) Load 137(f16bias) - 4578: 7(f16vec4) ImageSampleImplicitLod 4574 4575 Bias MinLod 4577 4576 - 4579: 7(f16vec4) Load 4445(texel) - 4580: 7(f16vec4) FAdd 4579 4578 - Store 4445(texel) 4580 - 4581: 299 Load 301(sCubeArray) - 4582: 249(fvec4) Load 251(c4) - 4583: 52(float) Load 4311(lodClamp) - 4584: 7(f16vec4) ImageSampleImplicitLod 4581 4582 MinLod 4583 - 4585: 7(f16vec4) Load 4445(texel) - 4586: 7(f16vec4) FAdd 4585 4584 - Store 4445(texel) 4586 - 4587: 299 Load 301(sCubeArray) - 4588: 7(f16vec4) Load 309(f16c4) - 4589:6(float16_t) Load 4318(f16lodClamp) - 4590:6(float16_t) Load 137(f16bias) - 4591: 7(f16vec4) ImageSampleImplicitLod 4587 4588 Bias MinLod 4590 4589 - 4592: 7(f16vec4) Load 4445(texel) - 4593: 7(f16vec4) FAdd 4592 4591 - Store 4445(texel) 4593 - 4594: 316 Load 318(s1DArrayShadow) - 4595: 167(fvec3) Load 169(c3) - 4596: 52(float) Load 4311(lodClamp) - 4597: 52(float) CompositeExtract 4595 2 - 4598:6(float16_t) ImageSampleDrefImplicitLod 4594 4595 4597 MinLod 4596 - 4599: 208(ptr) AccessChain 4445(texel) 207 - 4600:6(float16_t) Load 4599 - 4601:6(float16_t) FAdd 4600 4598 - 4602: 208(ptr) AccessChain 4445(texel) 207 - Store 4602 4601 - 4603: 316 Load 318(s1DArrayShadow) - 4604:154(f16vec2) Load 156(f16c2) - 4605: 52(float) Load 215(compare) - 4606:6(float16_t) Load 4318(f16lodClamp) - 4607:6(float16_t) Load 137(f16bias) - 4608:6(float16_t) ImageSampleDrefImplicitLod 4603 4604 4605 Bias MinLod 4607 4606 - 4609: 208(ptr) AccessChain 4445(texel) 207 - 4610:6(float16_t) Load 4609 - 4611:6(float16_t) FAdd 4610 4608 - 4612: 208(ptr) AccessChain 4445(texel) 207 - Store 4612 4611 - 4613: 337 Load 339(s2DArrayShadow) - 4614: 249(fvec4) Load 251(c4) - 4615: 52(float) Load 4311(lodClamp) - 4616: 52(float) CompositeExtract 4614 3 - 4617:6(float16_t) ImageSampleDrefImplicitLod 4613 4614 4616 MinLod 4615 - 4618: 208(ptr) AccessChain 4445(texel) 207 - 4619:6(float16_t) Load 4618 - 4620:6(float16_t) FAdd 4619 4617 - 4621: 208(ptr) AccessChain 4445(texel) 207 - Store 4621 4620 - 4622: 337 Load 339(s2DArrayShadow) - 4623:175(f16vec3) Load 177(f16c3) - 4624: 52(float) Load 215(compare) - 4625:6(float16_t) Load 4318(f16lodClamp) - 4626:6(float16_t) ImageSampleDrefImplicitLod 4622 4623 4624 MinLod 4625 - 4627: 208(ptr) AccessChain 4445(texel) 207 - 4628:6(float16_t) Load 4627 - 4629:6(float16_t) FAdd 4628 4626 - 4630: 208(ptr) AccessChain 4445(texel) 207 - Store 4630 4629 - 4631: 391 Load 393(sCubeArrayShadow) - 4632: 249(fvec4) Load 251(c4) - 4633: 52(float) Load 215(compare) - 4634: 52(float) Load 4311(lodClamp) - 4635:6(float16_t) ImageSampleDrefImplicitLod 4631 4632 4633 MinLod 4634 - 4636: 208(ptr) AccessChain 4445(texel) 207 - 4637:6(float16_t) Load 4636 - 4638:6(float16_t) FAdd 4637 4635 - 4639: 208(ptr) AccessChain 4445(texel) 207 - Store 4639 4638 - 4640: 391 Load 393(sCubeArrayShadow) - 4641: 7(f16vec4) Load 309(f16c4) - 4642: 52(float) Load 215(compare) - 4643:6(float16_t) Load 4318(f16lodClamp) - 4644:6(float16_t) ImageSampleDrefImplicitLod 4640 4641 4642 MinLod 4643 - 4645: 208(ptr) AccessChain 4445(texel) 207 - 4646:6(float16_t) Load 4645 - 4647:6(float16_t) FAdd 4646 4644 - 4648: 208(ptr) AccessChain 4445(texel) 207 - Store 4648 4647 - 4649: 7(f16vec4) Load 4445(texel) - ReturnValue 4649 + 4510: 52(float) Load 4187(lodClamp) + 4511:6(float16_t) ImageSampleDrefImplicitLod 4507 4508 4509 MinLod 4510 + 4512: 208(ptr) AccessChain 4321(texel) 207 + 4513:6(float16_t) Load 4512 + 4514:6(float16_t) FAdd 4513 4511 + 4515: 208(ptr) AccessChain 4321(texel) 207 + Store 4515 4514 + 4516: 391 Load 393(sCubeArrayShadow) + 4517: 7(f16vec4) Load 309(f16c4) + 4518: 52(float) Load 215(compare) + 4519:6(float16_t) Load 4194(f16lodClamp) + 4520:6(float16_t) ImageSampleDrefImplicitLod 4516 4517 4518 MinLod 4519 + 4521: 208(ptr) AccessChain 4321(texel) 207 + 4522:6(float16_t) Load 4521 + 4523:6(float16_t) FAdd 4522 4520 + 4524: 208(ptr) AccessChain 4321(texel) 207 + Store 4524 4523 + 4525: 7(f16vec4) Load 4321(texel) + ReturnValue 4525 FunctionEnd 103(testSparseTextureOffsetClamp(): 7(f16vec4) Function None 8 104: Label - 4652(texel): 64(ptr) Variable Function - Store 4652(texel) 121 - 4653: 143 Load 145(s2D) - 4654: 53(fvec2) Load 148(c2) - 4655: 52(float) Load 4311(lodClamp) - 4656:3146(ResType) ImageSparseSampleImplicitLod 4653 4654 ConstOffset MinLod 722 4655 - 4657: 7(f16vec4) CompositeExtract 4656 1 - Store 4652(texel) 4657 - 4658: 47(int) CompositeExtract 4656 0 - 4659: 143 Load 145(s2D) - 4660:154(f16vec2) Load 156(f16c2) - 4661:6(float16_t) Load 4318(f16lodClamp) - 4662:6(float16_t) Load 137(f16bias) - 4663:3146(ResType) ImageSparseSampleImplicitLod 4659 4660 Bias ConstOffset MinLod 4662 722 4661 - 4664: 7(f16vec4) CompositeExtract 4663 1 - Store 4652(texel) 4664 - 4665: 47(int) CompositeExtract 4663 0 - 4666: 163 Load 165(s3D) - 4667: 167(fvec3) Load 169(c3) - 4668: 52(float) Load 4311(lodClamp) - 4669:3146(ResType) ImageSparseSampleImplicitLod 4666 4667 ConstOffset MinLod 735 4668 - 4670: 7(f16vec4) CompositeExtract 4669 1 - Store 4652(texel) 4670 - 4671: 47(int) CompositeExtract 4669 0 - 4672: 163 Load 165(s3D) - 4673:175(f16vec3) Load 177(f16c3) - 4674:6(float16_t) Load 4318(f16lodClamp) - 4675:6(float16_t) Load 137(f16bias) - 4676:3146(ResType) ImageSparseSampleImplicitLod 4672 4673 Bias ConstOffset MinLod 4675 735 4674 - 4677: 7(f16vec4) CompositeExtract 4676 1 - Store 4652(texel) 4677 - 4678: 47(int) CompositeExtract 4676 0 - 4679: 224 Load 226(s2DShadow) - 4680: 167(fvec3) Load 169(c3) - 4681: 52(float) Load 4311(lodClamp) - 4682: 208(ptr) AccessChain 4652(texel) 207 - 4683: 52(float) CompositeExtract 4680 2 - 4684:3182(ResType) ImageSparseSampleDrefImplicitLod 4679 4680 4683 ConstOffset MinLod 722 4681 - 4685:6(float16_t) CompositeExtract 4684 1 - Store 4682 4685 - 4686: 47(int) CompositeExtract 4684 0 - 4687: 224 Load 226(s2DShadow) - 4688:154(f16vec2) Load 156(f16c2) - 4689: 52(float) Load 215(compare) - 4690:6(float16_t) Load 4318(f16lodClamp) - 4691: 208(ptr) AccessChain 4652(texel) 207 - 4692:6(float16_t) Load 137(f16bias) - 4693:3182(ResType) ImageSparseSampleDrefImplicitLod 4687 4688 4689 Bias ConstOffset MinLod 4692 722 4690 - 4694:6(float16_t) CompositeExtract 4693 1 - Store 4691 4694 - 4695: 47(int) CompositeExtract 4693 0 - 4696: 284 Load 286(s2DArray) - 4697: 167(fvec3) Load 169(c3) - 4698: 52(float) Load 4311(lodClamp) - 4699:3146(ResType) ImageSparseSampleImplicitLod 4696 4697 ConstOffset MinLod 722 4698 - 4700: 7(f16vec4) CompositeExtract 4699 1 - Store 4652(texel) 4700 - 4701: 47(int) CompositeExtract 4699 0 - 4702: 284 Load 286(s2DArray) - 4703:175(f16vec3) Load 177(f16c3) - 4704:6(float16_t) Load 4318(f16lodClamp) - 4705:6(float16_t) Load 137(f16bias) - 4706:3146(ResType) ImageSparseSampleImplicitLod 4702 4703 Bias ConstOffset MinLod 4705 722 4704 - 4707: 7(f16vec4) CompositeExtract 4706 1 - Store 4652(texel) 4707 - 4708: 47(int) CompositeExtract 4706 0 - 4709: 337 Load 339(s2DArrayShadow) - 4710: 249(fvec4) Load 251(c4) - 4711: 52(float) Load 4311(lodClamp) - 4712: 208(ptr) AccessChain 4652(texel) 207 - 4713: 52(float) CompositeExtract 4710 3 - 4714:3182(ResType) ImageSparseSampleDrefImplicitLod 4709 4710 4713 ConstOffset MinLod 722 4711 - 4715:6(float16_t) CompositeExtract 4714 1 - Store 4712 4715 - 4716: 47(int) CompositeExtract 4714 0 - 4717: 337 Load 339(s2DArrayShadow) - 4718:175(f16vec3) Load 177(f16c3) - 4719: 52(float) Load 215(compare) - 4720:6(float16_t) Load 4318(f16lodClamp) - 4721: 208(ptr) AccessChain 4652(texel) 207 - 4722:3182(ResType) ImageSparseSampleDrefImplicitLod 4717 4718 4719 ConstOffset MinLod 722 4720 - 4723:6(float16_t) CompositeExtract 4722 1 - Store 4721 4723 - 4724: 47(int) CompositeExtract 4722 0 - 4725: 7(f16vec4) Load 4652(texel) - ReturnValue 4725 + 4528(texel): 64(ptr) Variable Function + Store 4528(texel) 121 + 4529: 143 Load 145(s2D) + 4530: 53(fvec2) Load 148(c2) + 4531: 52(float) Load 4187(lodClamp) + 4532:3056(ResType) ImageSparseSampleImplicitLod 4529 4530 ConstOffset MinLod 722 4531 + 4533: 7(f16vec4) CompositeExtract 4532 1 + Store 4528(texel) 4533 + 4534: 47(int) CompositeExtract 4532 0 + 4535: 143 Load 145(s2D) + 4536:154(f16vec2) Load 156(f16c2) + 4537:6(float16_t) Load 4194(f16lodClamp) + 4538:6(float16_t) Load 137(f16bias) + 4539:3056(ResType) ImageSparseSampleImplicitLod 4535 4536 Bias ConstOffset MinLod 4538 722 4537 + 4540: 7(f16vec4) CompositeExtract 4539 1 + Store 4528(texel) 4540 + 4541: 47(int) CompositeExtract 4539 0 + 4542: 163 Load 165(s3D) + 4543: 167(fvec3) Load 169(c3) + 4544: 52(float) Load 4187(lodClamp) + 4545:3056(ResType) ImageSparseSampleImplicitLod 4542 4543 ConstOffset MinLod 735 4544 + 4546: 7(f16vec4) CompositeExtract 4545 1 + Store 4528(texel) 4546 + 4547: 47(int) CompositeExtract 4545 0 + 4548: 163 Load 165(s3D) + 4549:175(f16vec3) Load 177(f16c3) + 4550:6(float16_t) Load 4194(f16lodClamp) + 4551:6(float16_t) Load 137(f16bias) + 4552:3056(ResType) ImageSparseSampleImplicitLod 4548 4549 Bias ConstOffset MinLod 4551 735 4550 + 4553: 7(f16vec4) CompositeExtract 4552 1 + Store 4528(texel) 4553 + 4554: 47(int) CompositeExtract 4552 0 + 4555: 224 Load 226(s2DShadow) + 4556: 167(fvec3) Load 169(c3) + 4557: 52(float) Load 4187(lodClamp) + 4558: 208(ptr) AccessChain 4528(texel) 207 + 4559: 52(float) CompositeExtract 4556 2 + 4560:3092(ResType) ImageSparseSampleDrefImplicitLod 4555 4556 4559 ConstOffset MinLod 722 4557 + 4561:6(float16_t) CompositeExtract 4560 1 + Store 4558 4561 + 4562: 47(int) CompositeExtract 4560 0 + 4563: 224 Load 226(s2DShadow) + 4564:154(f16vec2) Load 156(f16c2) + 4565: 52(float) Load 215(compare) + 4566:6(float16_t) Load 4194(f16lodClamp) + 4567: 208(ptr) AccessChain 4528(texel) 207 + 4568:6(float16_t) Load 137(f16bias) + 4569:3092(ResType) ImageSparseSampleDrefImplicitLod 4563 4564 4565 Bias ConstOffset MinLod 4568 722 4566 + 4570:6(float16_t) CompositeExtract 4569 1 + Store 4567 4570 + 4571: 47(int) CompositeExtract 4569 0 + 4572: 284 Load 286(s2DArray) + 4573: 167(fvec3) Load 169(c3) + 4574: 52(float) Load 4187(lodClamp) + 4575:3056(ResType) ImageSparseSampleImplicitLod 4572 4573 ConstOffset MinLod 722 4574 + 4576: 7(f16vec4) CompositeExtract 4575 1 + Store 4528(texel) 4576 + 4577: 47(int) CompositeExtract 4575 0 + 4578: 284 Load 286(s2DArray) + 4579:175(f16vec3) Load 177(f16c3) + 4580:6(float16_t) Load 4194(f16lodClamp) + 4581:6(float16_t) Load 137(f16bias) + 4582:3056(ResType) ImageSparseSampleImplicitLod 4578 4579 Bias ConstOffset MinLod 4581 722 4580 + 4583: 7(f16vec4) CompositeExtract 4582 1 + Store 4528(texel) 4583 + 4584: 47(int) CompositeExtract 4582 0 + 4585: 337 Load 339(s2DArrayShadow) + 4586: 249(fvec4) Load 251(c4) + 4587: 52(float) Load 4187(lodClamp) + 4588: 208(ptr) AccessChain 4528(texel) 207 + 4589: 52(float) CompositeExtract 4586 3 + 4590:3092(ResType) ImageSparseSampleDrefImplicitLod 4585 4586 4589 ConstOffset MinLod 722 4587 + 4591:6(float16_t) CompositeExtract 4590 1 + Store 4588 4591 + 4592: 47(int) CompositeExtract 4590 0 + 4593: 337 Load 339(s2DArrayShadow) + 4594:175(f16vec3) Load 177(f16c3) + 4595: 52(float) Load 215(compare) + 4596:6(float16_t) Load 4194(f16lodClamp) + 4597: 208(ptr) AccessChain 4528(texel) 207 + 4598:3092(ResType) ImageSparseSampleDrefImplicitLod 4593 4594 4595 ConstOffset MinLod 722 4596 + 4599:6(float16_t) CompositeExtract 4598 1 + Store 4597 4599 + 4600: 47(int) CompositeExtract 4598 0 + 4601: 7(f16vec4) Load 4528(texel) + ReturnValue 4601 FunctionEnd 105(testTextureOffsetClamp(): 7(f16vec4) Function None 8 106: Label - 4728(texel): 64(ptr) Variable Function - Store 4728(texel) 121 - 4729: 123 Load 125(s1D) - 4730: 52(float) Load 128(c1) - 4731: 52(float) Load 4311(lodClamp) - 4732: 7(f16vec4) ImageSampleImplicitLod 4729 4730 ConstOffset MinLod 709 4731 - 4733: 7(f16vec4) Load 4728(texel) - 4734: 7(f16vec4) FAdd 4733 4732 - Store 4728(texel) 4734 - 4735: 123 Load 125(s1D) - 4736:6(float16_t) Load 135(f16c1) - 4737:6(float16_t) Load 4318(f16lodClamp) - 4738:6(float16_t) Load 137(f16bias) - 4739: 7(f16vec4) ImageSampleImplicitLod 4735 4736 Bias ConstOffset MinLod 4738 709 4737 - 4740: 7(f16vec4) Load 4728(texel) - 4741: 7(f16vec4) FAdd 4740 4739 - Store 4728(texel) 4741 - 4742: 143 Load 145(s2D) - 4743: 53(fvec2) Load 148(c2) - 4744: 52(float) Load 4311(lodClamp) - 4745: 7(f16vec4) ImageSampleImplicitLod 4742 4743 ConstOffset MinLod 722 4744 - 4746: 7(f16vec4) Load 4728(texel) - 4747: 7(f16vec4) FAdd 4746 4745 - Store 4728(texel) 4747 - 4748: 143 Load 145(s2D) - 4749:154(f16vec2) Load 156(f16c2) - 4750:6(float16_t) Load 4318(f16lodClamp) - 4751:6(float16_t) Load 137(f16bias) - 4752: 7(f16vec4) ImageSampleImplicitLod 4748 4749 Bias ConstOffset MinLod 4751 722 4750 - 4753: 7(f16vec4) Load 4728(texel) - 4754: 7(f16vec4) FAdd 4753 4752 - Store 4728(texel) 4754 - 4755: 163 Load 165(s3D) - 4756: 167(fvec3) Load 169(c3) - 4757: 52(float) Load 4311(lodClamp) - 4758: 7(f16vec4) ImageSampleImplicitLod 4755 4756 ConstOffset MinLod 735 4757 - 4759: 7(f16vec4) Load 4728(texel) - 4760: 7(f16vec4) FAdd 4759 4758 - Store 4728(texel) 4760 - 4761: 163 Load 165(s3D) - 4762:175(f16vec3) Load 177(f16c3) - 4763:6(float16_t) Load 4318(f16lodClamp) - 4764:6(float16_t) Load 137(f16bias) - 4765: 7(f16vec4) ImageSampleImplicitLod 4761 4762 Bias ConstOffset MinLod 4764 735 4763 - 4766: 7(f16vec4) Load 4728(texel) - 4767: 7(f16vec4) FAdd 4766 4765 - Store 4728(texel) 4767 - 4768: 199 Load 201(s1DShadow) - 4769: 167(fvec3) Load 169(c3) - 4770: 52(float) Load 4311(lodClamp) - 4771: 52(float) CompositeExtract 4769 2 - 4772:6(float16_t) ImageSampleDrefImplicitLod 4768 4769 4771 ConstOffset MinLod 709 4770 - 4773: 208(ptr) AccessChain 4728(texel) 207 - 4774:6(float16_t) Load 4773 - 4775:6(float16_t) FAdd 4774 4772 - 4776: 208(ptr) AccessChain 4728(texel) 207 - Store 4776 4775 - 4777: 199 Load 201(s1DShadow) - 4778:154(f16vec2) Load 156(f16c2) - 4779: 52(float) Load 215(compare) - 4780:6(float16_t) Load 4318(f16lodClamp) - 4781:6(float16_t) Load 137(f16bias) - 4782:6(float16_t) ImageSampleDrefImplicitLod 4777 4778 4779 Bias ConstOffset MinLod 4781 709 4780 - 4783: 208(ptr) AccessChain 4728(texel) 207 - 4784:6(float16_t) Load 4783 - 4785:6(float16_t) FAdd 4784 4782 - 4786: 208(ptr) AccessChain 4728(texel) 207 - Store 4786 4785 - 4787: 224 Load 226(s2DShadow) - 4788: 167(fvec3) Load 169(c3) - 4789: 52(float) Load 4311(lodClamp) - 4790: 52(float) CompositeExtract 4788 2 - 4791:6(float16_t) ImageSampleDrefImplicitLod 4787 4788 4790 ConstOffset MinLod 722 4789 - 4792: 208(ptr) AccessChain 4728(texel) 207 - 4793:6(float16_t) Load 4792 - 4794:6(float16_t) FAdd 4793 4791 - 4795: 208(ptr) AccessChain 4728(texel) 207 - Store 4795 4794 - 4796: 224 Load 226(s2DShadow) - 4797:154(f16vec2) Load 156(f16c2) - 4798: 52(float) Load 215(compare) - 4799:6(float16_t) Load 4318(f16lodClamp) - 4800:6(float16_t) Load 137(f16bias) - 4801:6(float16_t) ImageSampleDrefImplicitLod 4796 4797 4798 Bias ConstOffset MinLod 4800 722 4799 - 4802: 208(ptr) AccessChain 4728(texel) 207 - 4803:6(float16_t) Load 4802 - 4804:6(float16_t) FAdd 4803 4801 - 4805: 208(ptr) AccessChain 4728(texel) 207 - Store 4805 4804 - 4806: 269 Load 271(s1DArray) - 4807: 53(fvec2) Load 148(c2) - 4808: 52(float) Load 4311(lodClamp) - 4809: 7(f16vec4) ImageSampleImplicitLod 4806 4807 ConstOffset MinLod 709 4808 - 4810: 7(f16vec4) Load 4728(texel) - 4811: 7(f16vec4) FAdd 4810 4809 - Store 4728(texel) 4811 - 4812: 269 Load 271(s1DArray) - 4813:154(f16vec2) Load 156(f16c2) - 4814:6(float16_t) Load 4318(f16lodClamp) - 4815:6(float16_t) Load 137(f16bias) - 4816: 7(f16vec4) ImageSampleImplicitLod 4812 4813 Bias ConstOffset MinLod 4815 709 4814 - 4817: 7(f16vec4) Load 4728(texel) - 4818: 7(f16vec4) FAdd 4817 4816 - Store 4728(texel) 4818 - 4819: 284 Load 286(s2DArray) - 4820: 167(fvec3) Load 169(c3) - 4821: 52(float) Load 4311(lodClamp) - 4822: 7(f16vec4) ImageSampleImplicitLod 4819 4820 ConstOffset MinLod 722 4821 - 4823: 7(f16vec4) Load 4728(texel) - 4824: 7(f16vec4) FAdd 4823 4822 - Store 4728(texel) 4824 - 4825: 284 Load 286(s2DArray) - 4826:175(f16vec3) Load 177(f16c3) - 4827:6(float16_t) Load 4318(f16lodClamp) - 4828:6(float16_t) Load 137(f16bias) - 4829: 7(f16vec4) ImageSampleImplicitLod 4825 4826 Bias ConstOffset MinLod 4828 722 4827 - 4830: 7(f16vec4) Load 4728(texel) - 4831: 7(f16vec4) FAdd 4830 4829 - Store 4728(texel) 4831 - 4832: 316 Load 318(s1DArrayShadow) - 4833: 167(fvec3) Load 169(c3) - 4834: 52(float) Load 4311(lodClamp) - 4835: 52(float) CompositeExtract 4833 2 - 4836:6(float16_t) ImageSampleDrefImplicitLod 4832 4833 4835 ConstOffset MinLod 709 4834 - 4837: 208(ptr) AccessChain 4728(texel) 207 - 4838:6(float16_t) Load 4837 - 4839:6(float16_t) FAdd 4838 4836 - 4840: 208(ptr) AccessChain 4728(texel) 207 - Store 4840 4839 - 4841: 316 Load 318(s1DArrayShadow) - 4842:154(f16vec2) Load 156(f16c2) - 4843: 52(float) Load 215(compare) - 4844:6(float16_t) Load 4318(f16lodClamp) - 4845:6(float16_t) Load 137(f16bias) - 4846:6(float16_t) ImageSampleDrefImplicitLod 4841 4842 4843 Bias ConstOffset MinLod 4845 709 4844 - 4847: 208(ptr) AccessChain 4728(texel) 207 - 4848:6(float16_t) Load 4847 - 4849:6(float16_t) FAdd 4848 4846 - 4850: 208(ptr) AccessChain 4728(texel) 207 - Store 4850 4849 - 4851: 337 Load 339(s2DArrayShadow) - 4852: 249(fvec4) Load 251(c4) - 4853: 52(float) Load 4311(lodClamp) - 4854: 52(float) CompositeExtract 4852 3 - 4855:6(float16_t) ImageSampleDrefImplicitLod 4851 4852 4854 ConstOffset MinLod 722 4853 - 4856: 208(ptr) AccessChain 4728(texel) 207 - 4857:6(float16_t) Load 4856 - 4858:6(float16_t) FAdd 4857 4855 - 4859: 208(ptr) AccessChain 4728(texel) 207 - Store 4859 4858 - 4860: 337 Load 339(s2DArrayShadow) - 4861:175(f16vec3) Load 177(f16c3) - 4862: 52(float) Load 215(compare) - 4863:6(float16_t) Load 4318(f16lodClamp) - 4864:6(float16_t) ImageSampleDrefImplicitLod 4860 4861 4862 ConstOffset MinLod 722 4863 - 4865: 208(ptr) AccessChain 4728(texel) 207 - 4866:6(float16_t) Load 4865 - 4867:6(float16_t) FAdd 4866 4864 - 4868: 208(ptr) AccessChain 4728(texel) 207 - Store 4868 4867 - 4869: 7(f16vec4) Load 4728(texel) - ReturnValue 4869 + 4604(texel): 64(ptr) Variable Function + Store 4604(texel) 121 + 4605: 123 Load 125(s1D) + 4606: 52(float) Load 128(c1) + 4607: 52(float) Load 4187(lodClamp) + 4608: 7(f16vec4) ImageSampleImplicitLod 4605 4606 ConstOffset MinLod 709 4607 + 4609: 7(f16vec4) Load 4604(texel) + 4610: 7(f16vec4) FAdd 4609 4608 + Store 4604(texel) 4610 + 4611: 123 Load 125(s1D) + 4612:6(float16_t) Load 135(f16c1) + 4613:6(float16_t) Load 4194(f16lodClamp) + 4614:6(float16_t) Load 137(f16bias) + 4615: 7(f16vec4) ImageSampleImplicitLod 4611 4612 Bias ConstOffset MinLod 4614 709 4613 + 4616: 7(f16vec4) Load 4604(texel) + 4617: 7(f16vec4) FAdd 4616 4615 + Store 4604(texel) 4617 + 4618: 143 Load 145(s2D) + 4619: 53(fvec2) Load 148(c2) + 4620: 52(float) Load 4187(lodClamp) + 4621: 7(f16vec4) ImageSampleImplicitLod 4618 4619 ConstOffset MinLod 722 4620 + 4622: 7(f16vec4) Load 4604(texel) + 4623: 7(f16vec4) FAdd 4622 4621 + Store 4604(texel) 4623 + 4624: 143 Load 145(s2D) + 4625:154(f16vec2) Load 156(f16c2) + 4626:6(float16_t) Load 4194(f16lodClamp) + 4627:6(float16_t) Load 137(f16bias) + 4628: 7(f16vec4) ImageSampleImplicitLod 4624 4625 Bias ConstOffset MinLod 4627 722 4626 + 4629: 7(f16vec4) Load 4604(texel) + 4630: 7(f16vec4) FAdd 4629 4628 + Store 4604(texel) 4630 + 4631: 163 Load 165(s3D) + 4632: 167(fvec3) Load 169(c3) + 4633: 52(float) Load 4187(lodClamp) + 4634: 7(f16vec4) ImageSampleImplicitLod 4631 4632 ConstOffset MinLod 735 4633 + 4635: 7(f16vec4) Load 4604(texel) + 4636: 7(f16vec4) FAdd 4635 4634 + Store 4604(texel) 4636 + 4637: 163 Load 165(s3D) + 4638:175(f16vec3) Load 177(f16c3) + 4639:6(float16_t) Load 4194(f16lodClamp) + 4640:6(float16_t) Load 137(f16bias) + 4641: 7(f16vec4) ImageSampleImplicitLod 4637 4638 Bias ConstOffset MinLod 4640 735 4639 + 4642: 7(f16vec4) Load 4604(texel) + 4643: 7(f16vec4) FAdd 4642 4641 + Store 4604(texel) 4643 + 4644: 199 Load 201(s1DShadow) + 4645: 167(fvec3) Load 169(c3) + 4646: 52(float) Load 4187(lodClamp) + 4647: 52(float) CompositeExtract 4645 2 + 4648:6(float16_t) ImageSampleDrefImplicitLod 4644 4645 4647 ConstOffset MinLod 709 4646 + 4649: 208(ptr) AccessChain 4604(texel) 207 + 4650:6(float16_t) Load 4649 + 4651:6(float16_t) FAdd 4650 4648 + 4652: 208(ptr) AccessChain 4604(texel) 207 + Store 4652 4651 + 4653: 199 Load 201(s1DShadow) + 4654:154(f16vec2) Load 156(f16c2) + 4655: 52(float) Load 215(compare) + 4656:6(float16_t) Load 4194(f16lodClamp) + 4657:6(float16_t) Load 137(f16bias) + 4658:6(float16_t) ImageSampleDrefImplicitLod 4653 4654 4655 Bias ConstOffset MinLod 4657 709 4656 + 4659: 208(ptr) AccessChain 4604(texel) 207 + 4660:6(float16_t) Load 4659 + 4661:6(float16_t) FAdd 4660 4658 + 4662: 208(ptr) AccessChain 4604(texel) 207 + Store 4662 4661 + 4663: 224 Load 226(s2DShadow) + 4664: 167(fvec3) Load 169(c3) + 4665: 52(float) Load 4187(lodClamp) + 4666: 52(float) CompositeExtract 4664 2 + 4667:6(float16_t) ImageSampleDrefImplicitLod 4663 4664 4666 ConstOffset MinLod 722 4665 + 4668: 208(ptr) AccessChain 4604(texel) 207 + 4669:6(float16_t) Load 4668 + 4670:6(float16_t) FAdd 4669 4667 + 4671: 208(ptr) AccessChain 4604(texel) 207 + Store 4671 4670 + 4672: 224 Load 226(s2DShadow) + 4673:154(f16vec2) Load 156(f16c2) + 4674: 52(float) Load 215(compare) + 4675:6(float16_t) Load 4194(f16lodClamp) + 4676:6(float16_t) Load 137(f16bias) + 4677:6(float16_t) ImageSampleDrefImplicitLod 4672 4673 4674 Bias ConstOffset MinLod 4676 722 4675 + 4678: 208(ptr) AccessChain 4604(texel) 207 + 4679:6(float16_t) Load 4678 + 4680:6(float16_t) FAdd 4679 4677 + 4681: 208(ptr) AccessChain 4604(texel) 207 + Store 4681 4680 + 4682: 269 Load 271(s1DArray) + 4683: 53(fvec2) Load 148(c2) + 4684: 52(float) Load 4187(lodClamp) + 4685: 7(f16vec4) ImageSampleImplicitLod 4682 4683 ConstOffset MinLod 709 4684 + 4686: 7(f16vec4) Load 4604(texel) + 4687: 7(f16vec4) FAdd 4686 4685 + Store 4604(texel) 4687 + 4688: 269 Load 271(s1DArray) + 4689:154(f16vec2) Load 156(f16c2) + 4690:6(float16_t) Load 4194(f16lodClamp) + 4691:6(float16_t) Load 137(f16bias) + 4692: 7(f16vec4) ImageSampleImplicitLod 4688 4689 Bias ConstOffset MinLod 4691 709 4690 + 4693: 7(f16vec4) Load 4604(texel) + 4694: 7(f16vec4) FAdd 4693 4692 + Store 4604(texel) 4694 + 4695: 284 Load 286(s2DArray) + 4696: 167(fvec3) Load 169(c3) + 4697: 52(float) Load 4187(lodClamp) + 4698: 7(f16vec4) ImageSampleImplicitLod 4695 4696 ConstOffset MinLod 722 4697 + 4699: 7(f16vec4) Load 4604(texel) + 4700: 7(f16vec4) FAdd 4699 4698 + Store 4604(texel) 4700 + 4701: 284 Load 286(s2DArray) + 4702:175(f16vec3) Load 177(f16c3) + 4703:6(float16_t) Load 4194(f16lodClamp) + 4704:6(float16_t) Load 137(f16bias) + 4705: 7(f16vec4) ImageSampleImplicitLod 4701 4702 Bias ConstOffset MinLod 4704 722 4703 + 4706: 7(f16vec4) Load 4604(texel) + 4707: 7(f16vec4) FAdd 4706 4705 + Store 4604(texel) 4707 + 4708: 316 Load 318(s1DArrayShadow) + 4709: 167(fvec3) Load 169(c3) + 4710: 52(float) Load 4187(lodClamp) + 4711: 52(float) CompositeExtract 4709 2 + 4712:6(float16_t) ImageSampleDrefImplicitLod 4708 4709 4711 ConstOffset MinLod 709 4710 + 4713: 208(ptr) AccessChain 4604(texel) 207 + 4714:6(float16_t) Load 4713 + 4715:6(float16_t) FAdd 4714 4712 + 4716: 208(ptr) AccessChain 4604(texel) 207 + Store 4716 4715 + 4717: 316 Load 318(s1DArrayShadow) + 4718:154(f16vec2) Load 156(f16c2) + 4719: 52(float) Load 215(compare) + 4720:6(float16_t) Load 4194(f16lodClamp) + 4721:6(float16_t) Load 137(f16bias) + 4722:6(float16_t) ImageSampleDrefImplicitLod 4717 4718 4719 Bias ConstOffset MinLod 4721 709 4720 + 4723: 208(ptr) AccessChain 4604(texel) 207 + 4724:6(float16_t) Load 4723 + 4725:6(float16_t) FAdd 4724 4722 + 4726: 208(ptr) AccessChain 4604(texel) 207 + Store 4726 4725 + 4727: 337 Load 339(s2DArrayShadow) + 4728: 249(fvec4) Load 251(c4) + 4729: 52(float) Load 4187(lodClamp) + 4730: 52(float) CompositeExtract 4728 3 + 4731:6(float16_t) ImageSampleDrefImplicitLod 4727 4728 4730 ConstOffset MinLod 722 4729 + 4732: 208(ptr) AccessChain 4604(texel) 207 + 4733:6(float16_t) Load 4732 + 4734:6(float16_t) FAdd 4733 4731 + 4735: 208(ptr) AccessChain 4604(texel) 207 + Store 4735 4734 + 4736: 337 Load 339(s2DArrayShadow) + 4737:175(f16vec3) Load 177(f16c3) + 4738: 52(float) Load 215(compare) + 4739:6(float16_t) Load 4194(f16lodClamp) + 4740:6(float16_t) ImageSampleDrefImplicitLod 4736 4737 4738 ConstOffset MinLod 722 4739 + 4741: 208(ptr) AccessChain 4604(texel) 207 + 4742:6(float16_t) Load 4741 + 4743:6(float16_t) FAdd 4742 4740 + 4744: 208(ptr) AccessChain 4604(texel) 207 + Store 4744 4743 + 4745: 7(f16vec4) Load 4604(texel) + ReturnValue 4745 FunctionEnd 107(testSparseTextureGradClamp(): 7(f16vec4) Function None 8 108: Label - 4872(texel): 64(ptr) Variable Function - Store 4872(texel) 121 - 4873: 143 Load 145(s2D) - 4874: 53(fvec2) Load 148(c2) - 4875: 53(fvec2) Load 1409(dPdxy2) - 4876: 53(fvec2) Load 1409(dPdxy2) - 4877: 52(float) Load 4311(lodClamp) - 4878:3146(ResType) ImageSparseSampleExplicitLod 4873 4874 Grad MinLod 4875 4876 4877 - 4879: 7(f16vec4) CompositeExtract 4878 1 - Store 4872(texel) 4879 - 4880: 47(int) CompositeExtract 4878 0 - 4881: 143 Load 145(s2D) - 4882:154(f16vec2) Load 156(f16c2) - 4883:154(f16vec2) Load 1417(f16dPdxy2) - 4884:154(f16vec2) Load 1417(f16dPdxy2) - 4885:6(float16_t) Load 4318(f16lodClamp) - 4886:3146(ResType) ImageSparseSampleExplicitLod 4881 4882 Grad MinLod 4883 4884 4885 - 4887: 7(f16vec4) CompositeExtract 4886 1 - Store 4872(texel) 4887 - 4888: 47(int) CompositeExtract 4886 0 - 4889: 163 Load 165(s3D) - 4890: 167(fvec3) Load 169(c3) - 4891: 167(fvec3) Load 1425(dPdxy3) - 4892: 167(fvec3) Load 1425(dPdxy3) - 4893: 52(float) Load 4311(lodClamp) - 4894:3146(ResType) ImageSparseSampleExplicitLod 4889 4890 Grad MinLod 4891 4892 4893 - 4895: 7(f16vec4) CompositeExtract 4894 1 - Store 4872(texel) 4895 - 4896: 47(int) CompositeExtract 4894 0 - 4897: 163 Load 165(s3D) - 4898:175(f16vec3) Load 177(f16c3) - 4899:175(f16vec3) Load 1433(f16dPdxy3) - 4900:175(f16vec3) Load 1433(f16dPdxy3) - 4901:6(float16_t) Load 4318(f16lodClamp) - 4902:3146(ResType) ImageSparseSampleExplicitLod 4897 4898 Grad MinLod 4899 4900 4901 - 4903: 7(f16vec4) CompositeExtract 4902 1 - Store 4872(texel) 4903 - 4904: 47(int) CompositeExtract 4902 0 - 4905: 184 Load 186(sCube) - 4906: 167(fvec3) Load 169(c3) - 4907: 167(fvec3) Load 1425(dPdxy3) - 4908: 167(fvec3) Load 1425(dPdxy3) - 4909: 52(float) Load 4311(lodClamp) - 4910:3146(ResType) ImageSparseSampleExplicitLod 4905 4906 Grad MinLod 4907 4908 4909 - 4911: 7(f16vec4) CompositeExtract 4910 1 - Store 4872(texel) 4911 - 4912: 47(int) CompositeExtract 4910 0 - 4913: 184 Load 186(sCube) - 4914:175(f16vec3) Load 177(f16c3) - 4915:175(f16vec3) Load 1433(f16dPdxy3) - 4916:175(f16vec3) Load 1433(f16dPdxy3) - 4917:6(float16_t) Load 4318(f16lodClamp) - 4918:3146(ResType) ImageSparseSampleExplicitLod 4913 4914 Grad MinLod 4915 4916 4917 - 4919: 7(f16vec4) CompositeExtract 4918 1 - Store 4872(texel) 4919 - 4920: 47(int) CompositeExtract 4918 0 - 4921: 224 Load 226(s2DShadow) - 4922: 167(fvec3) Load 169(c3) - 4923: 53(fvec2) Load 1409(dPdxy2) - 4924: 53(fvec2) Load 1409(dPdxy2) - 4925: 52(float) Load 4311(lodClamp) - 4926: 208(ptr) AccessChain 4872(texel) 207 - 4927: 52(float) CompositeExtract 4922 2 - 4928:3182(ResType) ImageSparseSampleDrefExplicitLod 4921 4922 4927 Grad MinLod 4923 4924 4925 - 4929:6(float16_t) CompositeExtract 4928 1 - Store 4926 4929 - 4930: 47(int) CompositeExtract 4928 0 - 4931: 224 Load 226(s2DShadow) - 4932:154(f16vec2) Load 156(f16c2) - 4933: 52(float) Load 215(compare) - 4934:154(f16vec2) Load 1417(f16dPdxy2) - 4935:154(f16vec2) Load 1417(f16dPdxy2) - 4936:6(float16_t) Load 4318(f16lodClamp) - 4937: 208(ptr) AccessChain 4872(texel) 207 - 4938:3182(ResType) ImageSparseSampleDrefExplicitLod 4931 4932 4933 Grad MinLod 4934 4935 4936 - 4939:6(float16_t) CompositeExtract 4938 1 - Store 4937 4939 - 4940: 47(int) CompositeExtract 4938 0 - 4941: 245 Load 247(sCubeShadow) - 4942: 249(fvec4) Load 251(c4) - 4943: 167(fvec3) Load 1425(dPdxy3) - 4944: 167(fvec3) Load 1425(dPdxy3) - 4945: 52(float) Load 4311(lodClamp) - 4946: 208(ptr) AccessChain 4872(texel) 207 - 4947: 52(float) CompositeExtract 4942 3 - 4948:3182(ResType) ImageSparseSampleDrefExplicitLod 4941 4942 4947 Grad MinLod 4943 4944 4945 - 4949:6(float16_t) CompositeExtract 4948 1 - Store 4946 4949 - 4950: 47(int) CompositeExtract 4948 0 - 4951: 245 Load 247(sCubeShadow) - 4952:175(f16vec3) Load 177(f16c3) - 4953: 52(float) Load 215(compare) - 4954:175(f16vec3) Load 1433(f16dPdxy3) - 4955:175(f16vec3) Load 1433(f16dPdxy3) - 4956:6(float16_t) Load 4318(f16lodClamp) - 4957: 208(ptr) AccessChain 4872(texel) 207 - 4958:3182(ResType) ImageSparseSampleDrefExplicitLod 4951 4952 4953 Grad MinLod 4954 4955 4956 - 4959:6(float16_t) CompositeExtract 4958 1 - Store 4957 4959 - 4960: 47(int) CompositeExtract 4958 0 - 4961: 284 Load 286(s2DArray) - 4962: 167(fvec3) Load 169(c3) - 4963: 53(fvec2) Load 1409(dPdxy2) - 4964: 53(fvec2) Load 1409(dPdxy2) - 4965: 52(float) Load 4311(lodClamp) - 4966:3146(ResType) ImageSparseSampleExplicitLod 4961 4962 Grad MinLod 4963 4964 4965 - 4967: 7(f16vec4) CompositeExtract 4966 1 - Store 4872(texel) 4967 - 4968: 47(int) CompositeExtract 4966 0 - 4969: 284 Load 286(s2DArray) - 4970:175(f16vec3) Load 177(f16c3) - 4971:154(f16vec2) Load 1417(f16dPdxy2) - 4972:154(f16vec2) Load 1417(f16dPdxy2) - 4973:6(float16_t) Load 4318(f16lodClamp) - 4974:3146(ResType) ImageSparseSampleExplicitLod 4969 4970 Grad MinLod 4971 4972 4973 - 4975: 7(f16vec4) CompositeExtract 4974 1 - Store 4872(texel) 4975 - 4976: 47(int) CompositeExtract 4974 0 - 4977: 337 Load 339(s2DArrayShadow) - 4978: 249(fvec4) Load 251(c4) - 4979: 53(fvec2) Load 1409(dPdxy2) - 4980: 53(fvec2) Load 1409(dPdxy2) - 4981: 52(float) Load 4311(lodClamp) - 4982: 208(ptr) AccessChain 4872(texel) 207 - 4983: 52(float) CompositeExtract 4978 3 - 4984:3182(ResType) ImageSparseSampleDrefExplicitLod 4977 4978 4983 Grad MinLod 4979 4980 4981 - 4985:6(float16_t) CompositeExtract 4984 1 - Store 4982 4985 - 4986: 47(int) CompositeExtract 4984 0 - 4987: 337 Load 339(s2DArrayShadow) - 4988:175(f16vec3) Load 177(f16c3) - 4989: 52(float) Load 215(compare) - 4990:154(f16vec2) Load 1417(f16dPdxy2) - 4991:154(f16vec2) Load 1417(f16dPdxy2) - 4992:6(float16_t) Load 4318(f16lodClamp) - 4993: 208(ptr) AccessChain 4872(texel) 207 - 4994:3182(ResType) ImageSparseSampleDrefExplicitLod 4987 4988 4989 Grad MinLod 4990 4991 4992 - 4995:6(float16_t) CompositeExtract 4994 1 - Store 4993 4995 - 4996: 47(int) CompositeExtract 4994 0 - 4997: 299 Load 301(sCubeArray) - 4998: 249(fvec4) Load 251(c4) - 4999: 167(fvec3) Load 1425(dPdxy3) - 5000: 167(fvec3) Load 1425(dPdxy3) - 5001: 52(float) Load 4311(lodClamp) - 5002:3146(ResType) ImageSparseSampleExplicitLod 4997 4998 Grad MinLod 4999 5000 5001 - 5003: 7(f16vec4) CompositeExtract 5002 1 - Store 4872(texel) 5003 - 5004: 47(int) CompositeExtract 5002 0 - 5005: 299 Load 301(sCubeArray) - 5006: 7(f16vec4) Load 309(f16c4) - 5007:175(f16vec3) Load 1433(f16dPdxy3) - 5008:175(f16vec3) Load 1433(f16dPdxy3) - 5009:6(float16_t) Load 4318(f16lodClamp) - 5010:3146(ResType) ImageSparseSampleExplicitLod 5005 5006 Grad MinLod 5007 5008 5009 - 5011: 7(f16vec4) CompositeExtract 5010 1 - Store 4872(texel) 5011 - 5012: 47(int) CompositeExtract 5010 0 - 5013: 7(f16vec4) Load 4872(texel) - ReturnValue 5013 + 4748(texel): 64(ptr) Variable Function + Store 4748(texel) 121 + 4749: 143 Load 145(s2D) + 4750: 53(fvec2) Load 148(c2) + 4751: 53(fvec2) Load 1407(dPdxy2) + 4752: 52(float) Load 4187(lodClamp) + 4753:3056(ResType) ImageSparseSampleExplicitLod 4749 4750 Grad MinLod 4751 4751 4752 + 4754: 7(f16vec4) CompositeExtract 4753 1 + Store 4748(texel) 4754 + 4755: 47(int) CompositeExtract 4753 0 + 4756: 143 Load 145(s2D) + 4757:154(f16vec2) Load 156(f16c2) + 4758:154(f16vec2) Load 1414(f16dPdxy2) + 4759:6(float16_t) Load 4194(f16lodClamp) + 4760:3056(ResType) ImageSparseSampleExplicitLod 4756 4757 Grad MinLod 4758 4758 4759 + 4761: 7(f16vec4) CompositeExtract 4760 1 + Store 4748(texel) 4761 + 4762: 47(int) CompositeExtract 4760 0 + 4763: 163 Load 165(s3D) + 4764: 167(fvec3) Load 169(c3) + 4765: 167(fvec3) Load 1421(dPdxy3) + 4766: 52(float) Load 4187(lodClamp) + 4767:3056(ResType) ImageSparseSampleExplicitLod 4763 4764 Grad MinLod 4765 4765 4766 + 4768: 7(f16vec4) CompositeExtract 4767 1 + Store 4748(texel) 4768 + 4769: 47(int) CompositeExtract 4767 0 + 4770: 163 Load 165(s3D) + 4771:175(f16vec3) Load 177(f16c3) + 4772:175(f16vec3) Load 1428(f16dPdxy3) + 4773:6(float16_t) Load 4194(f16lodClamp) + 4774:3056(ResType) ImageSparseSampleExplicitLod 4770 4771 Grad MinLod 4772 4772 4773 + 4775: 7(f16vec4) CompositeExtract 4774 1 + Store 4748(texel) 4775 + 4776: 47(int) CompositeExtract 4774 0 + 4777: 184 Load 186(sCube) + 4778: 167(fvec3) Load 169(c3) + 4779: 167(fvec3) Load 1421(dPdxy3) + 4780: 52(float) Load 4187(lodClamp) + 4781:3056(ResType) ImageSparseSampleExplicitLod 4777 4778 Grad MinLod 4779 4779 4780 + 4782: 7(f16vec4) CompositeExtract 4781 1 + Store 4748(texel) 4782 + 4783: 47(int) CompositeExtract 4781 0 + 4784: 184 Load 186(sCube) + 4785:175(f16vec3) Load 177(f16c3) + 4786:175(f16vec3) Load 1428(f16dPdxy3) + 4787:6(float16_t) Load 4194(f16lodClamp) + 4788:3056(ResType) ImageSparseSampleExplicitLod 4784 4785 Grad MinLod 4786 4786 4787 + 4789: 7(f16vec4) CompositeExtract 4788 1 + Store 4748(texel) 4789 + 4790: 47(int) CompositeExtract 4788 0 + 4791: 224 Load 226(s2DShadow) + 4792: 167(fvec3) Load 169(c3) + 4793: 53(fvec2) Load 1407(dPdxy2) + 4794: 52(float) Load 4187(lodClamp) + 4795: 208(ptr) AccessChain 4748(texel) 207 + 4796: 52(float) CompositeExtract 4792 2 + 4797:3092(ResType) ImageSparseSampleDrefExplicitLod 4791 4792 4796 Grad MinLod 4793 4793 4794 + 4798:6(float16_t) CompositeExtract 4797 1 + Store 4795 4798 + 4799: 47(int) CompositeExtract 4797 0 + 4800: 224 Load 226(s2DShadow) + 4801:154(f16vec2) Load 156(f16c2) + 4802: 52(float) Load 215(compare) + 4803:154(f16vec2) Load 1414(f16dPdxy2) + 4804:6(float16_t) Load 4194(f16lodClamp) + 4805: 208(ptr) AccessChain 4748(texel) 207 + 4806:3092(ResType) ImageSparseSampleDrefExplicitLod 4800 4801 4802 Grad MinLod 4803 4803 4804 + 4807:6(float16_t) CompositeExtract 4806 1 + Store 4805 4807 + 4808: 47(int) CompositeExtract 4806 0 + 4809: 245 Load 247(sCubeShadow) + 4810: 249(fvec4) Load 251(c4) + 4811: 167(fvec3) Load 1421(dPdxy3) + 4812: 52(float) Load 4187(lodClamp) + 4813: 208(ptr) AccessChain 4748(texel) 207 + 4814: 52(float) CompositeExtract 4810 3 + 4815:3092(ResType) ImageSparseSampleDrefExplicitLod 4809 4810 4814 Grad MinLod 4811 4811 4812 + 4816:6(float16_t) CompositeExtract 4815 1 + Store 4813 4816 + 4817: 47(int) CompositeExtract 4815 0 + 4818: 245 Load 247(sCubeShadow) + 4819:175(f16vec3) Load 177(f16c3) + 4820: 52(float) Load 215(compare) + 4821:175(f16vec3) Load 1428(f16dPdxy3) + 4822:6(float16_t) Load 4194(f16lodClamp) + 4823: 208(ptr) AccessChain 4748(texel) 207 + 4824:3092(ResType) ImageSparseSampleDrefExplicitLod 4818 4819 4820 Grad MinLod 4821 4821 4822 + 4825:6(float16_t) CompositeExtract 4824 1 + Store 4823 4825 + 4826: 47(int) CompositeExtract 4824 0 + 4827: 284 Load 286(s2DArray) + 4828: 167(fvec3) Load 169(c3) + 4829: 53(fvec2) Load 1407(dPdxy2) + 4830: 52(float) Load 4187(lodClamp) + 4831:3056(ResType) ImageSparseSampleExplicitLod 4827 4828 Grad MinLod 4829 4829 4830 + 4832: 7(f16vec4) CompositeExtract 4831 1 + Store 4748(texel) 4832 + 4833: 47(int) CompositeExtract 4831 0 + 4834: 284 Load 286(s2DArray) + 4835:175(f16vec3) Load 177(f16c3) + 4836:154(f16vec2) Load 1414(f16dPdxy2) + 4837:6(float16_t) Load 4194(f16lodClamp) + 4838:3056(ResType) ImageSparseSampleExplicitLod 4834 4835 Grad MinLod 4836 4836 4837 + 4839: 7(f16vec4) CompositeExtract 4838 1 + Store 4748(texel) 4839 + 4840: 47(int) CompositeExtract 4838 0 + 4841: 337 Load 339(s2DArrayShadow) + 4842: 249(fvec4) Load 251(c4) + 4843: 53(fvec2) Load 1407(dPdxy2) + 4844: 52(float) Load 4187(lodClamp) + 4845: 208(ptr) AccessChain 4748(texel) 207 + 4846: 52(float) CompositeExtract 4842 3 + 4847:3092(ResType) ImageSparseSampleDrefExplicitLod 4841 4842 4846 Grad MinLod 4843 4843 4844 + 4848:6(float16_t) CompositeExtract 4847 1 + Store 4845 4848 + 4849: 47(int) CompositeExtract 4847 0 + 4850: 337 Load 339(s2DArrayShadow) + 4851:175(f16vec3) Load 177(f16c3) + 4852: 52(float) Load 215(compare) + 4853:154(f16vec2) Load 1414(f16dPdxy2) + 4854:6(float16_t) Load 4194(f16lodClamp) + 4855: 208(ptr) AccessChain 4748(texel) 207 + 4856:3092(ResType) ImageSparseSampleDrefExplicitLod 4850 4851 4852 Grad MinLod 4853 4853 4854 + 4857:6(float16_t) CompositeExtract 4856 1 + Store 4855 4857 + 4858: 47(int) CompositeExtract 4856 0 + 4859: 299 Load 301(sCubeArray) + 4860: 249(fvec4) Load 251(c4) + 4861: 167(fvec3) Load 1421(dPdxy3) + 4862: 52(float) Load 4187(lodClamp) + 4863:3056(ResType) ImageSparseSampleExplicitLod 4859 4860 Grad MinLod 4861 4861 4862 + 4864: 7(f16vec4) CompositeExtract 4863 1 + Store 4748(texel) 4864 + 4865: 47(int) CompositeExtract 4863 0 + 4866: 299 Load 301(sCubeArray) + 4867: 7(f16vec4) Load 309(f16c4) + 4868:175(f16vec3) Load 1428(f16dPdxy3) + 4869:6(float16_t) Load 4194(f16lodClamp) + 4870:3056(ResType) ImageSparseSampleExplicitLod 4866 4867 Grad MinLod 4868 4868 4869 + 4871: 7(f16vec4) CompositeExtract 4870 1 + Store 4748(texel) 4871 + 4872: 47(int) CompositeExtract 4870 0 + 4873: 7(f16vec4) Load 4748(texel) + ReturnValue 4873 FunctionEnd 109(testTextureGradClamp(): 7(f16vec4) Function None 8 110: Label - 5016(texel): 64(ptr) Variable Function - Store 5016(texel) 121 - 5017: 123 Load 125(s1D) - 5018: 52(float) Load 128(c1) - 5019: 52(float) Load 1393(dPdxy1) - 5020: 52(float) Load 1393(dPdxy1) - 5021: 52(float) Load 4311(lodClamp) - 5022: 7(f16vec4) ImageSampleExplicitLod 5017 5018 Grad MinLod 5019 5020 5021 - 5023: 7(f16vec4) Load 5016(texel) - 5024: 7(f16vec4) FAdd 5023 5022 - Store 5016(texel) 5024 - 5025: 123 Load 125(s1D) - 5026:6(float16_t) Load 135(f16c1) - 5027:6(float16_t) Load 1401(f16dPdxy1) - 5028:6(float16_t) Load 1401(f16dPdxy1) - 5029:6(float16_t) Load 4318(f16lodClamp) - 5030: 7(f16vec4) ImageSampleExplicitLod 5025 5026 Grad MinLod 5027 5028 5029 - 5031: 7(f16vec4) Load 5016(texel) - 5032: 7(f16vec4) FAdd 5031 5030 - Store 5016(texel) 5032 - 5033: 143 Load 145(s2D) - 5034: 53(fvec2) Load 148(c2) - 5035: 53(fvec2) Load 1409(dPdxy2) - 5036: 53(fvec2) Load 1409(dPdxy2) - 5037: 52(float) Load 4311(lodClamp) - 5038: 7(f16vec4) ImageSampleExplicitLod 5033 5034 Grad MinLod 5035 5036 5037 - 5039: 7(f16vec4) Load 5016(texel) - 5040: 7(f16vec4) FAdd 5039 5038 - Store 5016(texel) 5040 - 5041: 143 Load 145(s2D) - 5042:154(f16vec2) Load 156(f16c2) - 5043:154(f16vec2) Load 1417(f16dPdxy2) - 5044:154(f16vec2) Load 1417(f16dPdxy2) - 5045:6(float16_t) Load 4318(f16lodClamp) - 5046: 7(f16vec4) ImageSampleExplicitLod 5041 5042 Grad MinLod 5043 5044 5045 - 5047: 7(f16vec4) Load 5016(texel) - 5048: 7(f16vec4) FAdd 5047 5046 - Store 5016(texel) 5048 - 5049: 163 Load 165(s3D) - 5050: 167(fvec3) Load 169(c3) - 5051: 167(fvec3) Load 1425(dPdxy3) - 5052: 167(fvec3) Load 1425(dPdxy3) - 5053: 52(float) Load 4311(lodClamp) - 5054: 7(f16vec4) ImageSampleExplicitLod 5049 5050 Grad MinLod 5051 5052 5053 - 5055: 7(f16vec4) Load 5016(texel) - 5056: 7(f16vec4) FAdd 5055 5054 - Store 5016(texel) 5056 - 5057: 163 Load 165(s3D) - 5058:175(f16vec3) Load 177(f16c3) - 5059:175(f16vec3) Load 1433(f16dPdxy3) - 5060:175(f16vec3) Load 1433(f16dPdxy3) - 5061:6(float16_t) Load 4318(f16lodClamp) - 5062: 7(f16vec4) ImageSampleExplicitLod 5057 5058 Grad MinLod 5059 5060 5061 - 5063: 7(f16vec4) Load 5016(texel) - 5064: 7(f16vec4) FAdd 5063 5062 - Store 5016(texel) 5064 - 5065: 184 Load 186(sCube) - 5066: 167(fvec3) Load 169(c3) - 5067: 167(fvec3) Load 1425(dPdxy3) - 5068: 167(fvec3) Load 1425(dPdxy3) - 5069: 52(float) Load 4311(lodClamp) - 5070: 7(f16vec4) ImageSampleExplicitLod 5065 5066 Grad MinLod 5067 5068 5069 - 5071: 7(f16vec4) Load 5016(texel) - 5072: 7(f16vec4) FAdd 5071 5070 - Store 5016(texel) 5072 - 5073: 184 Load 186(sCube) - 5074:175(f16vec3) Load 177(f16c3) - 5075:175(f16vec3) Load 1433(f16dPdxy3) - 5076:175(f16vec3) Load 1433(f16dPdxy3) - 5077:6(float16_t) Load 4318(f16lodClamp) - 5078: 7(f16vec4) ImageSampleExplicitLod 5073 5074 Grad MinLod 5075 5076 5077 - 5079: 7(f16vec4) Load 5016(texel) - 5080: 7(f16vec4) FAdd 5079 5078 - Store 5016(texel) 5080 - 5081: 199 Load 201(s1DShadow) - 5082: 167(fvec3) Load 169(c3) - 5083: 52(float) Load 1393(dPdxy1) - 5084: 52(float) Load 1393(dPdxy1) - 5085: 52(float) Load 4311(lodClamp) - 5086: 52(float) CompositeExtract 5082 2 - 5087:6(float16_t) ImageSampleDrefExplicitLod 5081 5082 5086 Grad MinLod 5083 5084 5085 - 5088: 208(ptr) AccessChain 5016(texel) 207 - 5089:6(float16_t) Load 5088 - 5090:6(float16_t) FAdd 5089 5087 - 5091: 208(ptr) AccessChain 5016(texel) 207 - Store 5091 5090 - 5092: 199 Load 201(s1DShadow) - 5093:154(f16vec2) Load 156(f16c2) - 5094: 52(float) Load 215(compare) - 5095:6(float16_t) Load 1401(f16dPdxy1) - 5096:6(float16_t) Load 1401(f16dPdxy1) - 5097:6(float16_t) Load 4318(f16lodClamp) - 5098:6(float16_t) ImageSampleDrefExplicitLod 5092 5093 5094 Grad MinLod 5095 5096 5097 - 5099: 208(ptr) AccessChain 5016(texel) 207 - 5100:6(float16_t) Load 5099 - 5101:6(float16_t) FAdd 5100 5098 - 5102: 208(ptr) AccessChain 5016(texel) 207 - Store 5102 5101 - 5103: 224 Load 226(s2DShadow) - 5104: 167(fvec3) Load 169(c3) - 5105: 53(fvec2) Load 1409(dPdxy2) - 5106: 53(fvec2) Load 1409(dPdxy2) - 5107: 52(float) Load 4311(lodClamp) - 5108: 52(float) CompositeExtract 5104 2 - 5109:6(float16_t) ImageSampleDrefExplicitLod 5103 5104 5108 Grad MinLod 5105 5106 5107 - 5110: 208(ptr) AccessChain 5016(texel) 207 - 5111:6(float16_t) Load 5110 - 5112:6(float16_t) FAdd 5111 5109 - 5113: 208(ptr) AccessChain 5016(texel) 207 - Store 5113 5112 - 5114: 224 Load 226(s2DShadow) - 5115:154(f16vec2) Load 156(f16c2) - 5116: 52(float) Load 215(compare) - 5117:154(f16vec2) Load 1417(f16dPdxy2) - 5118:154(f16vec2) Load 1417(f16dPdxy2) - 5119:6(float16_t) Load 4318(f16lodClamp) - 5120:6(float16_t) ImageSampleDrefExplicitLod 5114 5115 5116 Grad MinLod 5117 5118 5119 - 5121: 208(ptr) AccessChain 5016(texel) 207 - 5122:6(float16_t) Load 5121 - 5123:6(float16_t) FAdd 5122 5120 - 5124: 208(ptr) AccessChain 5016(texel) 207 - Store 5124 5123 - 5125: 245 Load 247(sCubeShadow) - 5126: 249(fvec4) Load 251(c4) - 5127: 167(fvec3) Load 1425(dPdxy3) - 5128: 167(fvec3) Load 1425(dPdxy3) - 5129: 52(float) Load 4311(lodClamp) - 5130: 52(float) CompositeExtract 5126 3 - 5131:6(float16_t) ImageSampleDrefExplicitLod 5125 5126 5130 Grad MinLod 5127 5128 5129 - 5132: 208(ptr) AccessChain 5016(texel) 207 - 5133:6(float16_t) Load 5132 - 5134:6(float16_t) FAdd 5133 5131 - 5135: 208(ptr) AccessChain 5016(texel) 207 - Store 5135 5134 - 5136: 245 Load 247(sCubeShadow) - 5137:175(f16vec3) Load 177(f16c3) - 5138: 52(float) Load 215(compare) - 5139:175(f16vec3) Load 1433(f16dPdxy3) - 5140:175(f16vec3) Load 1433(f16dPdxy3) - 5141:6(float16_t) Load 4318(f16lodClamp) - 5142:6(float16_t) ImageSampleDrefExplicitLod 5136 5137 5138 Grad MinLod 5139 5140 5141 - 5143: 208(ptr) AccessChain 5016(texel) 207 - 5144:6(float16_t) Load 5143 - 5145:6(float16_t) FAdd 5144 5142 - 5146: 208(ptr) AccessChain 5016(texel) 207 - Store 5146 5145 - 5147: 269 Load 271(s1DArray) - 5148: 53(fvec2) Load 148(c2) - 5149: 52(float) Load 1393(dPdxy1) - 5150: 52(float) Load 1393(dPdxy1) - 5151: 52(float) Load 4311(lodClamp) - 5152: 7(f16vec4) ImageSampleExplicitLod 5147 5148 Grad MinLod 5149 5150 5151 - 5153: 7(f16vec4) Load 5016(texel) - 5154: 7(f16vec4) FAdd 5153 5152 - Store 5016(texel) 5154 - 5155: 269 Load 271(s1DArray) - 5156:154(f16vec2) Load 156(f16c2) - 5157:6(float16_t) Load 1401(f16dPdxy1) - 5158:6(float16_t) Load 1401(f16dPdxy1) - 5159:6(float16_t) Load 4318(f16lodClamp) - 5160: 7(f16vec4) ImageSampleExplicitLod 5155 5156 Grad MinLod 5157 5158 5159 - 5161: 7(f16vec4) Load 5016(texel) - 5162: 7(f16vec4) FAdd 5161 5160 - Store 5016(texel) 5162 - 5163: 284 Load 286(s2DArray) - 5164: 167(fvec3) Load 169(c3) - 5165: 53(fvec2) Load 1409(dPdxy2) - 5166: 53(fvec2) Load 1409(dPdxy2) - 5167: 52(float) Load 4311(lodClamp) - 5168: 7(f16vec4) ImageSampleExplicitLod 5163 5164 Grad MinLod 5165 5166 5167 - 5169: 7(f16vec4) Load 5016(texel) - 5170: 7(f16vec4) FAdd 5169 5168 - Store 5016(texel) 5170 - 5171: 284 Load 286(s2DArray) - 5172:175(f16vec3) Load 177(f16c3) - 5173:154(f16vec2) Load 1417(f16dPdxy2) - 5174:154(f16vec2) Load 1417(f16dPdxy2) - 5175:6(float16_t) Load 4318(f16lodClamp) - 5176: 7(f16vec4) ImageSampleExplicitLod 5171 5172 Grad MinLod 5173 5174 5175 - 5177: 7(f16vec4) Load 5016(texel) - 5178: 7(f16vec4) FAdd 5177 5176 - Store 5016(texel) 5178 - 5179: 316 Load 318(s1DArrayShadow) - 5180: 167(fvec3) Load 169(c3) - 5181: 52(float) Load 1393(dPdxy1) - 5182: 52(float) Load 1393(dPdxy1) - 5183: 52(float) Load 4311(lodClamp) - 5184: 52(float) CompositeExtract 5180 2 - 5185:6(float16_t) ImageSampleDrefExplicitLod 5179 5180 5184 Grad MinLod 5181 5182 5183 - 5186: 208(ptr) AccessChain 5016(texel) 207 - 5187:6(float16_t) Load 5186 - 5188:6(float16_t) FAdd 5187 5185 - 5189: 208(ptr) AccessChain 5016(texel) 207 - Store 5189 5188 - 5190: 316 Load 318(s1DArrayShadow) - 5191:154(f16vec2) Load 156(f16c2) - 5192: 52(float) Load 215(compare) - 5193:6(float16_t) Load 1401(f16dPdxy1) - 5194:6(float16_t) Load 1401(f16dPdxy1) - 5195:6(float16_t) Load 4318(f16lodClamp) - 5196:6(float16_t) ImageSampleDrefExplicitLod 5190 5191 5192 Grad MinLod 5193 5194 5195 - 5197: 208(ptr) AccessChain 5016(texel) 207 - 5198:6(float16_t) Load 5197 - 5199:6(float16_t) FAdd 5198 5196 - 5200: 208(ptr) AccessChain 5016(texel) 207 - Store 5200 5199 - 5201: 337 Load 339(s2DArrayShadow) - 5202: 249(fvec4) Load 251(c4) - 5203: 53(fvec2) Load 1409(dPdxy2) - 5204: 53(fvec2) Load 1409(dPdxy2) - 5205: 52(float) Load 4311(lodClamp) - 5206: 52(float) CompositeExtract 5202 3 - 5207:6(float16_t) ImageSampleDrefExplicitLod 5201 5202 5206 Grad MinLod 5203 5204 5205 - 5208: 208(ptr) AccessChain 5016(texel) 207 - 5209:6(float16_t) Load 5208 - 5210:6(float16_t) FAdd 5209 5207 - 5211: 208(ptr) AccessChain 5016(texel) 207 - Store 5211 5210 - 5212: 337 Load 339(s2DArrayShadow) - 5213:175(f16vec3) Load 177(f16c3) - 5214: 52(float) Load 215(compare) - 5215:154(f16vec2) Load 1417(f16dPdxy2) - 5216:154(f16vec2) Load 1417(f16dPdxy2) - 5217:6(float16_t) Load 4318(f16lodClamp) - 5218:6(float16_t) ImageSampleDrefExplicitLod 5212 5213 5214 Grad MinLod 5215 5216 5217 - 5219: 208(ptr) AccessChain 5016(texel) 207 - 5220:6(float16_t) Load 5219 - 5221:6(float16_t) FAdd 5220 5218 - 5222: 208(ptr) AccessChain 5016(texel) 207 - Store 5222 5221 - 5223: 299 Load 301(sCubeArray) - 5224: 249(fvec4) Load 251(c4) - 5225: 167(fvec3) Load 1425(dPdxy3) - 5226: 167(fvec3) Load 1425(dPdxy3) - 5227: 52(float) Load 4311(lodClamp) - 5228: 7(f16vec4) ImageSampleExplicitLod 5223 5224 Grad MinLod 5225 5226 5227 - 5229: 7(f16vec4) Load 5016(texel) - 5230: 7(f16vec4) FAdd 5229 5228 - Store 5016(texel) 5230 - 5231: 299 Load 301(sCubeArray) - 5232: 7(f16vec4) Load 309(f16c4) - 5233:175(f16vec3) Load 1433(f16dPdxy3) - 5234:175(f16vec3) Load 1433(f16dPdxy3) - 5235:6(float16_t) Load 4318(f16lodClamp) - 5236: 7(f16vec4) ImageSampleExplicitLod 5231 5232 Grad MinLod 5233 5234 5235 - 5237: 7(f16vec4) Load 5016(texel) - 5238: 7(f16vec4) FAdd 5237 5236 - Store 5016(texel) 5238 - 5239: 7(f16vec4) Load 5016(texel) - ReturnValue 5239 + 4876(texel): 64(ptr) Variable Function + Store 4876(texel) 121 + 4877: 123 Load 125(s1D) + 4878: 52(float) Load 128(c1) + 4879: 52(float) Load 1393(dPdxy1) + 4880: 52(float) Load 4187(lodClamp) + 4881: 7(f16vec4) ImageSampleExplicitLod 4877 4878 Grad MinLod 4879 4879 4880 + 4882: 7(f16vec4) Load 4876(texel) + 4883: 7(f16vec4) FAdd 4882 4881 + Store 4876(texel) 4883 + 4884: 123 Load 125(s1D) + 4885:6(float16_t) Load 135(f16c1) + 4886:6(float16_t) Load 1400(f16dPdxy1) + 4887:6(float16_t) Load 4194(f16lodClamp) + 4888: 7(f16vec4) ImageSampleExplicitLod 4884 4885 Grad MinLod 4886 4886 4887 + 4889: 7(f16vec4) Load 4876(texel) + 4890: 7(f16vec4) FAdd 4889 4888 + Store 4876(texel) 4890 + 4891: 143 Load 145(s2D) + 4892: 53(fvec2) Load 148(c2) + 4893: 53(fvec2) Load 1407(dPdxy2) + 4894: 52(float) Load 4187(lodClamp) + 4895: 7(f16vec4) ImageSampleExplicitLod 4891 4892 Grad MinLod 4893 4893 4894 + 4896: 7(f16vec4) Load 4876(texel) + 4897: 7(f16vec4) FAdd 4896 4895 + Store 4876(texel) 4897 + 4898: 143 Load 145(s2D) + 4899:154(f16vec2) Load 156(f16c2) + 4900:154(f16vec2) Load 1414(f16dPdxy2) + 4901:6(float16_t) Load 4194(f16lodClamp) + 4902: 7(f16vec4) ImageSampleExplicitLod 4898 4899 Grad MinLod 4900 4900 4901 + 4903: 7(f16vec4) Load 4876(texel) + 4904: 7(f16vec4) FAdd 4903 4902 + Store 4876(texel) 4904 + 4905: 163 Load 165(s3D) + 4906: 167(fvec3) Load 169(c3) + 4907: 167(fvec3) Load 1421(dPdxy3) + 4908: 52(float) Load 4187(lodClamp) + 4909: 7(f16vec4) ImageSampleExplicitLod 4905 4906 Grad MinLod 4907 4907 4908 + 4910: 7(f16vec4) Load 4876(texel) + 4911: 7(f16vec4) FAdd 4910 4909 + Store 4876(texel) 4911 + 4912: 163 Load 165(s3D) + 4913:175(f16vec3) Load 177(f16c3) + 4914:175(f16vec3) Load 1428(f16dPdxy3) + 4915:6(float16_t) Load 4194(f16lodClamp) + 4916: 7(f16vec4) ImageSampleExplicitLod 4912 4913 Grad MinLod 4914 4914 4915 + 4917: 7(f16vec4) Load 4876(texel) + 4918: 7(f16vec4) FAdd 4917 4916 + Store 4876(texel) 4918 + 4919: 184 Load 186(sCube) + 4920: 167(fvec3) Load 169(c3) + 4921: 167(fvec3) Load 1421(dPdxy3) + 4922: 52(float) Load 4187(lodClamp) + 4923: 7(f16vec4) ImageSampleExplicitLod 4919 4920 Grad MinLod 4921 4921 4922 + 4924: 7(f16vec4) Load 4876(texel) + 4925: 7(f16vec4) FAdd 4924 4923 + Store 4876(texel) 4925 + 4926: 184 Load 186(sCube) + 4927:175(f16vec3) Load 177(f16c3) + 4928:175(f16vec3) Load 1428(f16dPdxy3) + 4929:6(float16_t) Load 4194(f16lodClamp) + 4930: 7(f16vec4) ImageSampleExplicitLod 4926 4927 Grad MinLod 4928 4928 4929 + 4931: 7(f16vec4) Load 4876(texel) + 4932: 7(f16vec4) FAdd 4931 4930 + Store 4876(texel) 4932 + 4933: 199 Load 201(s1DShadow) + 4934: 167(fvec3) Load 169(c3) + 4935: 52(float) Load 1393(dPdxy1) + 4936: 52(float) Load 4187(lodClamp) + 4937: 52(float) CompositeExtract 4934 2 + 4938:6(float16_t) ImageSampleDrefExplicitLod 4933 4934 4937 Grad MinLod 4935 4935 4936 + 4939: 208(ptr) AccessChain 4876(texel) 207 + 4940:6(float16_t) Load 4939 + 4941:6(float16_t) FAdd 4940 4938 + 4942: 208(ptr) AccessChain 4876(texel) 207 + Store 4942 4941 + 4943: 199 Load 201(s1DShadow) + 4944:154(f16vec2) Load 156(f16c2) + 4945: 52(float) Load 215(compare) + 4946:6(float16_t) Load 1400(f16dPdxy1) + 4947:6(float16_t) Load 4194(f16lodClamp) + 4948:6(float16_t) ImageSampleDrefExplicitLod 4943 4944 4945 Grad MinLod 4946 4946 4947 + 4949: 208(ptr) AccessChain 4876(texel) 207 + 4950:6(float16_t) Load 4949 + 4951:6(float16_t) FAdd 4950 4948 + 4952: 208(ptr) AccessChain 4876(texel) 207 + Store 4952 4951 + 4953: 224 Load 226(s2DShadow) + 4954: 167(fvec3) Load 169(c3) + 4955: 53(fvec2) Load 1407(dPdxy2) + 4956: 52(float) Load 4187(lodClamp) + 4957: 52(float) CompositeExtract 4954 2 + 4958:6(float16_t) ImageSampleDrefExplicitLod 4953 4954 4957 Grad MinLod 4955 4955 4956 + 4959: 208(ptr) AccessChain 4876(texel) 207 + 4960:6(float16_t) Load 4959 + 4961:6(float16_t) FAdd 4960 4958 + 4962: 208(ptr) AccessChain 4876(texel) 207 + Store 4962 4961 + 4963: 224 Load 226(s2DShadow) + 4964:154(f16vec2) Load 156(f16c2) + 4965: 52(float) Load 215(compare) + 4966:154(f16vec2) Load 1414(f16dPdxy2) + 4967:6(float16_t) Load 4194(f16lodClamp) + 4968:6(float16_t) ImageSampleDrefExplicitLod 4963 4964 4965 Grad MinLod 4966 4966 4967 + 4969: 208(ptr) AccessChain 4876(texel) 207 + 4970:6(float16_t) Load 4969 + 4971:6(float16_t) FAdd 4970 4968 + 4972: 208(ptr) AccessChain 4876(texel) 207 + Store 4972 4971 + 4973: 245 Load 247(sCubeShadow) + 4974: 249(fvec4) Load 251(c4) + 4975: 167(fvec3) Load 1421(dPdxy3) + 4976: 52(float) Load 4187(lodClamp) + 4977: 52(float) CompositeExtract 4974 3 + 4978:6(float16_t) ImageSampleDrefExplicitLod 4973 4974 4977 Grad MinLod 4975 4975 4976 + 4979: 208(ptr) AccessChain 4876(texel) 207 + 4980:6(float16_t) Load 4979 + 4981:6(float16_t) FAdd 4980 4978 + 4982: 208(ptr) AccessChain 4876(texel) 207 + Store 4982 4981 + 4983: 245 Load 247(sCubeShadow) + 4984:175(f16vec3) Load 177(f16c3) + 4985: 52(float) Load 215(compare) + 4986:175(f16vec3) Load 1428(f16dPdxy3) + 4987:6(float16_t) Load 4194(f16lodClamp) + 4988:6(float16_t) ImageSampleDrefExplicitLod 4983 4984 4985 Grad MinLod 4986 4986 4987 + 4989: 208(ptr) AccessChain 4876(texel) 207 + 4990:6(float16_t) Load 4989 + 4991:6(float16_t) FAdd 4990 4988 + 4992: 208(ptr) AccessChain 4876(texel) 207 + Store 4992 4991 + 4993: 269 Load 271(s1DArray) + 4994: 53(fvec2) Load 148(c2) + 4995: 52(float) Load 1393(dPdxy1) + 4996: 52(float) Load 4187(lodClamp) + 4997: 7(f16vec4) ImageSampleExplicitLod 4993 4994 Grad MinLod 4995 4995 4996 + 4998: 7(f16vec4) Load 4876(texel) + 4999: 7(f16vec4) FAdd 4998 4997 + Store 4876(texel) 4999 + 5000: 269 Load 271(s1DArray) + 5001:154(f16vec2) Load 156(f16c2) + 5002:6(float16_t) Load 1400(f16dPdxy1) + 5003:6(float16_t) Load 4194(f16lodClamp) + 5004: 7(f16vec4) ImageSampleExplicitLod 5000 5001 Grad MinLod 5002 5002 5003 + 5005: 7(f16vec4) Load 4876(texel) + 5006: 7(f16vec4) FAdd 5005 5004 + Store 4876(texel) 5006 + 5007: 284 Load 286(s2DArray) + 5008: 167(fvec3) Load 169(c3) + 5009: 53(fvec2) Load 1407(dPdxy2) + 5010: 52(float) Load 4187(lodClamp) + 5011: 7(f16vec4) ImageSampleExplicitLod 5007 5008 Grad MinLod 5009 5009 5010 + 5012: 7(f16vec4) Load 4876(texel) + 5013: 7(f16vec4) FAdd 5012 5011 + Store 4876(texel) 5013 + 5014: 284 Load 286(s2DArray) + 5015:175(f16vec3) Load 177(f16c3) + 5016:154(f16vec2) Load 1414(f16dPdxy2) + 5017:6(float16_t) Load 4194(f16lodClamp) + 5018: 7(f16vec4) ImageSampleExplicitLod 5014 5015 Grad MinLod 5016 5016 5017 + 5019: 7(f16vec4) Load 4876(texel) + 5020: 7(f16vec4) FAdd 5019 5018 + Store 4876(texel) 5020 + 5021: 316 Load 318(s1DArrayShadow) + 5022: 167(fvec3) Load 169(c3) + 5023: 52(float) Load 1393(dPdxy1) + 5024: 52(float) Load 4187(lodClamp) + 5025: 52(float) CompositeExtract 5022 2 + 5026:6(float16_t) ImageSampleDrefExplicitLod 5021 5022 5025 Grad MinLod 5023 5023 5024 + 5027: 208(ptr) AccessChain 4876(texel) 207 + 5028:6(float16_t) Load 5027 + 5029:6(float16_t) FAdd 5028 5026 + 5030: 208(ptr) AccessChain 4876(texel) 207 + Store 5030 5029 + 5031: 316 Load 318(s1DArrayShadow) + 5032:154(f16vec2) Load 156(f16c2) + 5033: 52(float) Load 215(compare) + 5034:6(float16_t) Load 1400(f16dPdxy1) + 5035:6(float16_t) Load 4194(f16lodClamp) + 5036:6(float16_t) ImageSampleDrefExplicitLod 5031 5032 5033 Grad MinLod 5034 5034 5035 + 5037: 208(ptr) AccessChain 4876(texel) 207 + 5038:6(float16_t) Load 5037 + 5039:6(float16_t) FAdd 5038 5036 + 5040: 208(ptr) AccessChain 4876(texel) 207 + Store 5040 5039 + 5041: 337 Load 339(s2DArrayShadow) + 5042: 249(fvec4) Load 251(c4) + 5043: 53(fvec2) Load 1407(dPdxy2) + 5044: 52(float) Load 4187(lodClamp) + 5045: 52(float) CompositeExtract 5042 3 + 5046:6(float16_t) ImageSampleDrefExplicitLod 5041 5042 5045 Grad MinLod 5043 5043 5044 + 5047: 208(ptr) AccessChain 4876(texel) 207 + 5048:6(float16_t) Load 5047 + 5049:6(float16_t) FAdd 5048 5046 + 5050: 208(ptr) AccessChain 4876(texel) 207 + Store 5050 5049 + 5051: 337 Load 339(s2DArrayShadow) + 5052:175(f16vec3) Load 177(f16c3) + 5053: 52(float) Load 215(compare) + 5054:154(f16vec2) Load 1414(f16dPdxy2) + 5055:6(float16_t) Load 4194(f16lodClamp) + 5056:6(float16_t) ImageSampleDrefExplicitLod 5051 5052 5053 Grad MinLod 5054 5054 5055 + 5057: 208(ptr) AccessChain 4876(texel) 207 + 5058:6(float16_t) Load 5057 + 5059:6(float16_t) FAdd 5058 5056 + 5060: 208(ptr) AccessChain 4876(texel) 207 + Store 5060 5059 + 5061: 299 Load 301(sCubeArray) + 5062: 249(fvec4) Load 251(c4) + 5063: 167(fvec3) Load 1421(dPdxy3) + 5064: 52(float) Load 4187(lodClamp) + 5065: 7(f16vec4) ImageSampleExplicitLod 5061 5062 Grad MinLod 5063 5063 5064 + 5066: 7(f16vec4) Load 4876(texel) + 5067: 7(f16vec4) FAdd 5066 5065 + Store 4876(texel) 5067 + 5068: 299 Load 301(sCubeArray) + 5069: 7(f16vec4) Load 309(f16c4) + 5070:175(f16vec3) Load 1428(f16dPdxy3) + 5071:6(float16_t) Load 4194(f16lodClamp) + 5072: 7(f16vec4) ImageSampleExplicitLod 5068 5069 Grad MinLod 5070 5070 5071 + 5073: 7(f16vec4) Load 4876(texel) + 5074: 7(f16vec4) FAdd 5073 5072 + Store 4876(texel) 5074 + 5075: 7(f16vec4) Load 4876(texel) + ReturnValue 5075 FunctionEnd 111(testSparseTextureGradOffsetClamp(): 7(f16vec4) Function None 8 112: Label - 5242(texel): 64(ptr) Variable Function - Store 5242(texel) 121 - 5243: 143 Load 145(s2D) - 5244: 53(fvec2) Load 148(c2) - 5245: 53(fvec2) Load 1409(dPdxy2) - 5246: 53(fvec2) Load 1409(dPdxy2) - 5247: 52(float) Load 4311(lodClamp) - 5248:3146(ResType) ImageSparseSampleExplicitLod 5243 5244 Grad ConstOffset MinLod 5245 5246 722 5247 - 5249: 7(f16vec4) CompositeExtract 5248 1 - Store 5242(texel) 5249 - 5250: 47(int) CompositeExtract 5248 0 - 5251: 143 Load 145(s2D) - 5252:154(f16vec2) Load 156(f16c2) - 5253:154(f16vec2) Load 1417(f16dPdxy2) - 5254:154(f16vec2) Load 1417(f16dPdxy2) - 5255:6(float16_t) Load 4318(f16lodClamp) - 5256:3146(ResType) ImageSparseSampleExplicitLod 5251 5252 Grad ConstOffset MinLod 5253 5254 722 5255 - 5257: 7(f16vec4) CompositeExtract 5256 1 - Store 5242(texel) 5257 - 5258: 47(int) CompositeExtract 5256 0 - 5259: 163 Load 165(s3D) - 5260: 167(fvec3) Load 169(c3) - 5261: 167(fvec3) Load 1425(dPdxy3) - 5262: 167(fvec3) Load 1425(dPdxy3) - 5263: 52(float) Load 4311(lodClamp) - 5264:3146(ResType) ImageSparseSampleExplicitLod 5259 5260 Grad ConstOffset MinLod 5261 5262 735 5263 - 5265: 7(f16vec4) CompositeExtract 5264 1 - Store 5242(texel) 5265 - 5266: 47(int) CompositeExtract 5264 0 - 5267: 163 Load 165(s3D) - 5268:175(f16vec3) Load 177(f16c3) - 5269:175(f16vec3) Load 1433(f16dPdxy3) - 5270:175(f16vec3) Load 1433(f16dPdxy3) - 5271:6(float16_t) Load 4318(f16lodClamp) - 5272:3146(ResType) ImageSparseSampleExplicitLod 5267 5268 Grad ConstOffset MinLod 5269 5270 735 5271 - 5273: 7(f16vec4) CompositeExtract 5272 1 - Store 5242(texel) 5273 - 5274: 47(int) CompositeExtract 5272 0 - 5275: 224 Load 226(s2DShadow) - 5276: 167(fvec3) Load 169(c3) - 5277: 53(fvec2) Load 1409(dPdxy2) - 5278: 53(fvec2) Load 1409(dPdxy2) - 5279: 52(float) Load 4311(lodClamp) - 5280: 208(ptr) AccessChain 5242(texel) 207 - 5281: 52(float) CompositeExtract 5276 2 - 5282:3182(ResType) ImageSparseSampleDrefExplicitLod 5275 5276 5281 Grad ConstOffset MinLod 5277 5278 722 5279 - 5283:6(float16_t) CompositeExtract 5282 1 - Store 5280 5283 - 5284: 47(int) CompositeExtract 5282 0 - 5285: 224 Load 226(s2DShadow) - 5286:154(f16vec2) Load 156(f16c2) - 5287: 52(float) Load 215(compare) - 5288:154(f16vec2) Load 1417(f16dPdxy2) - 5289:154(f16vec2) Load 1417(f16dPdxy2) - 5290:6(float16_t) Load 4318(f16lodClamp) - 5291: 208(ptr) AccessChain 5242(texel) 207 - 5292:3182(ResType) ImageSparseSampleDrefExplicitLod 5285 5286 5287 Grad ConstOffset MinLod 5288 5289 722 5290 - 5293:6(float16_t) CompositeExtract 5292 1 - Store 5291 5293 - 5294: 47(int) CompositeExtract 5292 0 - 5295: 284 Load 286(s2DArray) - 5296: 167(fvec3) Load 169(c3) - 5297: 53(fvec2) Load 1409(dPdxy2) - 5298: 53(fvec2) Load 1409(dPdxy2) - 5299: 52(float) Load 4311(lodClamp) - 5300:3146(ResType) ImageSparseSampleExplicitLod 5295 5296 Grad ConstOffset MinLod 5297 5298 722 5299 - 5301: 7(f16vec4) CompositeExtract 5300 1 - Store 5242(texel) 5301 - 5302: 47(int) CompositeExtract 5300 0 - 5303: 284 Load 286(s2DArray) - 5304:175(f16vec3) Load 177(f16c3) - 5305:154(f16vec2) Load 1417(f16dPdxy2) - 5306:154(f16vec2) Load 1417(f16dPdxy2) - 5307:6(float16_t) Load 4318(f16lodClamp) - 5308:3146(ResType) ImageSparseSampleExplicitLod 5303 5304 Grad ConstOffset MinLod 5305 5306 722 5307 - 5309: 7(f16vec4) CompositeExtract 5308 1 - Store 5242(texel) 5309 - 5310: 47(int) CompositeExtract 5308 0 - 5311: 337 Load 339(s2DArrayShadow) - 5312: 249(fvec4) Load 251(c4) - 5313: 53(fvec2) Load 1409(dPdxy2) - 5314: 53(fvec2) Load 1409(dPdxy2) - 5315: 52(float) Load 4311(lodClamp) - 5316: 208(ptr) AccessChain 5242(texel) 207 - 5317: 52(float) CompositeExtract 5312 3 - 5318:3182(ResType) ImageSparseSampleDrefExplicitLod 5311 5312 5317 Grad ConstOffset MinLod 5313 5314 722 5315 - 5319:6(float16_t) CompositeExtract 5318 1 - Store 5316 5319 - 5320: 47(int) CompositeExtract 5318 0 - 5321: 337 Load 339(s2DArrayShadow) - 5322:175(f16vec3) Load 177(f16c3) - 5323: 52(float) Load 215(compare) - 5324:154(f16vec2) Load 1417(f16dPdxy2) - 5325:154(f16vec2) Load 1417(f16dPdxy2) - 5326:6(float16_t) Load 4318(f16lodClamp) - 5327: 208(ptr) AccessChain 5242(texel) 207 - 5328:3182(ResType) ImageSparseSampleDrefExplicitLod 5321 5322 5323 Grad ConstOffset MinLod 5324 5325 722 5326 - 5329:6(float16_t) CompositeExtract 5328 1 - Store 5327 5329 - 5330: 47(int) CompositeExtract 5328 0 - 5331: 7(f16vec4) Load 5242(texel) - ReturnValue 5331 + 5078(texel): 64(ptr) Variable Function + Store 5078(texel) 121 + 5079: 143 Load 145(s2D) + 5080: 53(fvec2) Load 148(c2) + 5081: 53(fvec2) Load 1407(dPdxy2) + 5082: 52(float) Load 4187(lodClamp) + 5083:3056(ResType) ImageSparseSampleExplicitLod 5079 5080 Grad ConstOffset MinLod 5081 5081 722 5082 + 5084: 7(f16vec4) CompositeExtract 5083 1 + Store 5078(texel) 5084 + 5085: 47(int) CompositeExtract 5083 0 + 5086: 143 Load 145(s2D) + 5087:154(f16vec2) Load 156(f16c2) + 5088:154(f16vec2) Load 1414(f16dPdxy2) + 5089:6(float16_t) Load 4194(f16lodClamp) + 5090:3056(ResType) ImageSparseSampleExplicitLod 5086 5087 Grad ConstOffset MinLod 5088 5088 722 5089 + 5091: 7(f16vec4) CompositeExtract 5090 1 + Store 5078(texel) 5091 + 5092: 47(int) CompositeExtract 5090 0 + 5093: 163 Load 165(s3D) + 5094: 167(fvec3) Load 169(c3) + 5095: 167(fvec3) Load 1421(dPdxy3) + 5096: 52(float) Load 4187(lodClamp) + 5097:3056(ResType) ImageSparseSampleExplicitLod 5093 5094 Grad ConstOffset MinLod 5095 5095 735 5096 + 5098: 7(f16vec4) CompositeExtract 5097 1 + Store 5078(texel) 5098 + 5099: 47(int) CompositeExtract 5097 0 + 5100: 163 Load 165(s3D) + 5101:175(f16vec3) Load 177(f16c3) + 5102:175(f16vec3) Load 1428(f16dPdxy3) + 5103:6(float16_t) Load 4194(f16lodClamp) + 5104:3056(ResType) ImageSparseSampleExplicitLod 5100 5101 Grad ConstOffset MinLod 5102 5102 735 5103 + 5105: 7(f16vec4) CompositeExtract 5104 1 + Store 5078(texel) 5105 + 5106: 47(int) CompositeExtract 5104 0 + 5107: 224 Load 226(s2DShadow) + 5108: 167(fvec3) Load 169(c3) + 5109: 53(fvec2) Load 1407(dPdxy2) + 5110: 52(float) Load 4187(lodClamp) + 5111: 208(ptr) AccessChain 5078(texel) 207 + 5112: 52(float) CompositeExtract 5108 2 + 5113:3092(ResType) ImageSparseSampleDrefExplicitLod 5107 5108 5112 Grad ConstOffset MinLod 5109 5109 722 5110 + 5114:6(float16_t) CompositeExtract 5113 1 + Store 5111 5114 + 5115: 47(int) CompositeExtract 5113 0 + 5116: 224 Load 226(s2DShadow) + 5117:154(f16vec2) Load 156(f16c2) + 5118: 52(float) Load 215(compare) + 5119:154(f16vec2) Load 1414(f16dPdxy2) + 5120:6(float16_t) Load 4194(f16lodClamp) + 5121: 208(ptr) AccessChain 5078(texel) 207 + 5122:3092(ResType) ImageSparseSampleDrefExplicitLod 5116 5117 5118 Grad ConstOffset MinLod 5119 5119 722 5120 + 5123:6(float16_t) CompositeExtract 5122 1 + Store 5121 5123 + 5124: 47(int) CompositeExtract 5122 0 + 5125: 284 Load 286(s2DArray) + 5126: 167(fvec3) Load 169(c3) + 5127: 53(fvec2) Load 1407(dPdxy2) + 5128: 52(float) Load 4187(lodClamp) + 5129:3056(ResType) ImageSparseSampleExplicitLod 5125 5126 Grad ConstOffset MinLod 5127 5127 722 5128 + 5130: 7(f16vec4) CompositeExtract 5129 1 + Store 5078(texel) 5130 + 5131: 47(int) CompositeExtract 5129 0 + 5132: 284 Load 286(s2DArray) + 5133:175(f16vec3) Load 177(f16c3) + 5134:154(f16vec2) Load 1414(f16dPdxy2) + 5135:6(float16_t) Load 4194(f16lodClamp) + 5136:3056(ResType) ImageSparseSampleExplicitLod 5132 5133 Grad ConstOffset MinLod 5134 5134 722 5135 + 5137: 7(f16vec4) CompositeExtract 5136 1 + Store 5078(texel) 5137 + 5138: 47(int) CompositeExtract 5136 0 + 5139: 337 Load 339(s2DArrayShadow) + 5140: 249(fvec4) Load 251(c4) + 5141: 53(fvec2) Load 1407(dPdxy2) + 5142: 52(float) Load 4187(lodClamp) + 5143: 208(ptr) AccessChain 5078(texel) 207 + 5144: 52(float) CompositeExtract 5140 3 + 5145:3092(ResType) ImageSparseSampleDrefExplicitLod 5139 5140 5144 Grad ConstOffset MinLod 5141 5141 722 5142 + 5146:6(float16_t) CompositeExtract 5145 1 + Store 5143 5146 + 5147: 47(int) CompositeExtract 5145 0 + 5148: 337 Load 339(s2DArrayShadow) + 5149:175(f16vec3) Load 177(f16c3) + 5150: 52(float) Load 215(compare) + 5151:154(f16vec2) Load 1414(f16dPdxy2) + 5152:6(float16_t) Load 4194(f16lodClamp) + 5153: 208(ptr) AccessChain 5078(texel) 207 + 5154:3092(ResType) ImageSparseSampleDrefExplicitLod 5148 5149 5150 Grad ConstOffset MinLod 5151 5151 722 5152 + 5155:6(float16_t) CompositeExtract 5154 1 + Store 5153 5155 + 5156: 47(int) CompositeExtract 5154 0 + 5157: 7(f16vec4) Load 5078(texel) + ReturnValue 5157 FunctionEnd 113(testTextureGradOffsetClamp(): 7(f16vec4) Function None 8 114: Label - 5334(texel): 64(ptr) Variable Function - Store 5334(texel) 121 - 5335: 123 Load 125(s1D) - 5336: 52(float) Load 128(c1) - 5337: 52(float) Load 1393(dPdxy1) - 5338: 52(float) Load 1393(dPdxy1) - 5339: 52(float) Load 4311(lodClamp) - 5340: 7(f16vec4) ImageSampleExplicitLod 5335 5336 Grad ConstOffset MinLod 5337 5338 709 5339 - 5341: 7(f16vec4) Load 5334(texel) - 5342: 7(f16vec4) FAdd 5341 5340 - Store 5334(texel) 5342 - 5343: 123 Load 125(s1D) - 5344:6(float16_t) Load 135(f16c1) - 5345:6(float16_t) Load 1401(f16dPdxy1) - 5346:6(float16_t) Load 1401(f16dPdxy1) - 5347:6(float16_t) Load 4318(f16lodClamp) - 5348: 7(f16vec4) ImageSampleExplicitLod 5343 5344 Grad ConstOffset MinLod 5345 5346 709 5347 - 5349: 7(f16vec4) Load 5334(texel) - 5350: 7(f16vec4) FAdd 5349 5348 - Store 5334(texel) 5350 - 5351: 143 Load 145(s2D) - 5352: 53(fvec2) Load 148(c2) - 5353: 53(fvec2) Load 1409(dPdxy2) - 5354: 53(fvec2) Load 1409(dPdxy2) - 5355: 52(float) Load 4311(lodClamp) - 5356: 7(f16vec4) ImageSampleExplicitLod 5351 5352 Grad ConstOffset MinLod 5353 5354 722 5355 - 5357: 7(f16vec4) Load 5334(texel) - 5358: 7(f16vec4) FAdd 5357 5356 - Store 5334(texel) 5358 - 5359: 143 Load 145(s2D) - 5360:154(f16vec2) Load 156(f16c2) - 5361:154(f16vec2) Load 1417(f16dPdxy2) - 5362:154(f16vec2) Load 1417(f16dPdxy2) - 5363:6(float16_t) Load 4318(f16lodClamp) - 5364: 7(f16vec4) ImageSampleExplicitLod 5359 5360 Grad ConstOffset MinLod 5361 5362 722 5363 - 5365: 7(f16vec4) Load 5334(texel) - 5366: 7(f16vec4) FAdd 5365 5364 - Store 5334(texel) 5366 - 5367: 163 Load 165(s3D) - 5368: 167(fvec3) Load 169(c3) - 5369: 167(fvec3) Load 1425(dPdxy3) - 5370: 167(fvec3) Load 1425(dPdxy3) - 5371: 52(float) Load 4311(lodClamp) - 5372: 7(f16vec4) ImageSampleExplicitLod 5367 5368 Grad ConstOffset MinLod 5369 5370 735 5371 - 5373: 7(f16vec4) Load 5334(texel) - 5374: 7(f16vec4) FAdd 5373 5372 - Store 5334(texel) 5374 - 5375: 163 Load 165(s3D) - 5376:175(f16vec3) Load 177(f16c3) - 5377:175(f16vec3) Load 1433(f16dPdxy3) - 5378:175(f16vec3) Load 1433(f16dPdxy3) - 5379:6(float16_t) Load 4318(f16lodClamp) - 5380: 7(f16vec4) ImageSampleExplicitLod 5375 5376 Grad ConstOffset MinLod 5377 5378 735 5379 - 5381: 7(f16vec4) Load 5334(texel) - 5382: 7(f16vec4) FAdd 5381 5380 - Store 5334(texel) 5382 - 5383: 199 Load 201(s1DShadow) - 5384: 167(fvec3) Load 169(c3) - 5385: 52(float) Load 1393(dPdxy1) - 5386: 52(float) Load 1393(dPdxy1) - 5387: 52(float) Load 4311(lodClamp) - 5388: 52(float) CompositeExtract 5384 2 - 5389:6(float16_t) ImageSampleDrefExplicitLod 5383 5384 5388 Grad ConstOffset MinLod 5385 5386 709 5387 - 5390: 208(ptr) AccessChain 5334(texel) 207 - 5391:6(float16_t) Load 5390 - 5392:6(float16_t) FAdd 5391 5389 - 5393: 208(ptr) AccessChain 5334(texel) 207 - Store 5393 5392 - 5394: 199 Load 201(s1DShadow) - 5395:154(f16vec2) Load 156(f16c2) - 5396: 52(float) Load 215(compare) - 5397:6(float16_t) Load 1401(f16dPdxy1) - 5398:6(float16_t) Load 1401(f16dPdxy1) - 5399:6(float16_t) Load 4318(f16lodClamp) - 5400:6(float16_t) ImageSampleDrefExplicitLod 5394 5395 5396 Grad ConstOffset MinLod 5397 5398 709 5399 - 5401: 208(ptr) AccessChain 5334(texel) 207 - 5402:6(float16_t) Load 5401 - 5403:6(float16_t) FAdd 5402 5400 - 5404: 208(ptr) AccessChain 5334(texel) 207 - Store 5404 5403 - 5405: 224 Load 226(s2DShadow) - 5406: 167(fvec3) Load 169(c3) - 5407: 53(fvec2) Load 1409(dPdxy2) - 5408: 53(fvec2) Load 1409(dPdxy2) - 5409: 52(float) Load 4311(lodClamp) - 5410: 52(float) CompositeExtract 5406 2 - 5411:6(float16_t) ImageSampleDrefExplicitLod 5405 5406 5410 Grad ConstOffset MinLod 5407 5408 722 5409 - 5412: 208(ptr) AccessChain 5334(texel) 207 - 5413:6(float16_t) Load 5412 - 5414:6(float16_t) FAdd 5413 5411 - 5415: 208(ptr) AccessChain 5334(texel) 207 - Store 5415 5414 - 5416: 224 Load 226(s2DShadow) - 5417:154(f16vec2) Load 156(f16c2) - 5418: 52(float) Load 215(compare) - 5419:154(f16vec2) Load 1417(f16dPdxy2) - 5420:154(f16vec2) Load 1417(f16dPdxy2) - 5421:6(float16_t) Load 4318(f16lodClamp) - 5422:6(float16_t) ImageSampleDrefExplicitLod 5416 5417 5418 Grad ConstOffset MinLod 5419 5420 722 5421 - 5423: 208(ptr) AccessChain 5334(texel) 207 - 5424:6(float16_t) Load 5423 - 5425:6(float16_t) FAdd 5424 5422 - 5426: 208(ptr) AccessChain 5334(texel) 207 - Store 5426 5425 - 5427: 269 Load 271(s1DArray) - 5428: 53(fvec2) Load 148(c2) - 5429: 52(float) Load 1393(dPdxy1) - 5430: 52(float) Load 1393(dPdxy1) - 5431: 52(float) Load 4311(lodClamp) - 5432: 7(f16vec4) ImageSampleExplicitLod 5427 5428 Grad ConstOffset MinLod 5429 5430 709 5431 - 5433: 7(f16vec4) Load 5334(texel) - 5434: 7(f16vec4) FAdd 5433 5432 - Store 5334(texel) 5434 - 5435: 269 Load 271(s1DArray) - 5436:154(f16vec2) Load 156(f16c2) - 5437:6(float16_t) Load 1401(f16dPdxy1) - 5438:6(float16_t) Load 1401(f16dPdxy1) - 5439:6(float16_t) Load 4318(f16lodClamp) - 5440: 7(f16vec4) ImageSampleExplicitLod 5435 5436 Grad ConstOffset MinLod 5437 5438 709 5439 - 5441: 7(f16vec4) Load 5334(texel) - 5442: 7(f16vec4) FAdd 5441 5440 - Store 5334(texel) 5442 - 5443: 284 Load 286(s2DArray) - 5444: 167(fvec3) Load 169(c3) - 5445: 53(fvec2) Load 1409(dPdxy2) - 5446: 53(fvec2) Load 1409(dPdxy2) - 5447: 52(float) Load 4311(lodClamp) - 5448: 7(f16vec4) ImageSampleExplicitLod 5443 5444 Grad ConstOffset MinLod 5445 5446 722 5447 - 5449: 7(f16vec4) Load 5334(texel) - 5450: 7(f16vec4) FAdd 5449 5448 - Store 5334(texel) 5450 - 5451: 284 Load 286(s2DArray) - 5452:175(f16vec3) Load 177(f16c3) - 5453:154(f16vec2) Load 1417(f16dPdxy2) - 5454:154(f16vec2) Load 1417(f16dPdxy2) - 5455:6(float16_t) Load 4318(f16lodClamp) - 5456: 7(f16vec4) ImageSampleExplicitLod 5451 5452 Grad ConstOffset MinLod 5453 5454 722 5455 - 5457: 7(f16vec4) Load 5334(texel) - 5458: 7(f16vec4) FAdd 5457 5456 - Store 5334(texel) 5458 - 5459: 316 Load 318(s1DArrayShadow) - 5460: 167(fvec3) Load 169(c3) - 5461: 52(float) Load 1393(dPdxy1) - 5462: 52(float) Load 1393(dPdxy1) - 5463: 52(float) Load 4311(lodClamp) - 5464: 52(float) CompositeExtract 5460 2 - 5465:6(float16_t) ImageSampleDrefExplicitLod 5459 5460 5464 Grad ConstOffset MinLod 5461 5462 709 5463 - 5466: 208(ptr) AccessChain 5334(texel) 207 - 5467:6(float16_t) Load 5466 - 5468:6(float16_t) FAdd 5467 5465 - 5469: 208(ptr) AccessChain 5334(texel) 207 - Store 5469 5468 - 5470: 316 Load 318(s1DArrayShadow) - 5471:154(f16vec2) Load 156(f16c2) - 5472: 52(float) Load 215(compare) - 5473:6(float16_t) Load 1401(f16dPdxy1) - 5474:6(float16_t) Load 1401(f16dPdxy1) - 5475:6(float16_t) Load 4318(f16lodClamp) - 5476:6(float16_t) ImageSampleDrefExplicitLod 5470 5471 5472 Grad ConstOffset MinLod 5473 5474 709 5475 - 5477: 208(ptr) AccessChain 5334(texel) 207 - 5478:6(float16_t) Load 5477 - 5479:6(float16_t) FAdd 5478 5476 - 5480: 208(ptr) AccessChain 5334(texel) 207 - Store 5480 5479 - 5481: 337 Load 339(s2DArrayShadow) - 5482: 249(fvec4) Load 251(c4) - 5483: 53(fvec2) Load 1409(dPdxy2) - 5484: 53(fvec2) Load 1409(dPdxy2) - 5485: 52(float) Load 4311(lodClamp) - 5486: 52(float) CompositeExtract 5482 3 - 5487:6(float16_t) ImageSampleDrefExplicitLod 5481 5482 5486 Grad ConstOffset MinLod 5483 5484 722 5485 - 5488: 208(ptr) AccessChain 5334(texel) 207 - 5489:6(float16_t) Load 5488 - 5490:6(float16_t) FAdd 5489 5487 - 5491: 208(ptr) AccessChain 5334(texel) 207 - Store 5491 5490 - 5492: 337 Load 339(s2DArrayShadow) - 5493:175(f16vec3) Load 177(f16c3) - 5494: 52(float) Load 215(compare) - 5495:154(f16vec2) Load 1417(f16dPdxy2) - 5496:154(f16vec2) Load 1417(f16dPdxy2) - 5497:6(float16_t) Load 4318(f16lodClamp) - 5498:6(float16_t) ImageSampleDrefExplicitLod 5492 5493 5494 Grad ConstOffset MinLod 5495 5496 722 5497 - 5499: 208(ptr) AccessChain 5334(texel) 207 - 5500:6(float16_t) Load 5499 - 5501:6(float16_t) FAdd 5500 5498 - 5502: 208(ptr) AccessChain 5334(texel) 207 - Store 5502 5501 - 5503: 7(f16vec4) Load 5334(texel) - ReturnValue 5503 + 5160(texel): 64(ptr) Variable Function + Store 5160(texel) 121 + 5161: 123 Load 125(s1D) + 5162: 52(float) Load 128(c1) + 5163: 52(float) Load 1393(dPdxy1) + 5164: 52(float) Load 4187(lodClamp) + 5165: 7(f16vec4) ImageSampleExplicitLod 5161 5162 Grad ConstOffset MinLod 5163 5163 709 5164 + 5166: 7(f16vec4) Load 5160(texel) + 5167: 7(f16vec4) FAdd 5166 5165 + Store 5160(texel) 5167 + 5168: 123 Load 125(s1D) + 5169:6(float16_t) Load 135(f16c1) + 5170:6(float16_t) Load 1400(f16dPdxy1) + 5171:6(float16_t) Load 4194(f16lodClamp) + 5172: 7(f16vec4) ImageSampleExplicitLod 5168 5169 Grad ConstOffset MinLod 5170 5170 709 5171 + 5173: 7(f16vec4) Load 5160(texel) + 5174: 7(f16vec4) FAdd 5173 5172 + Store 5160(texel) 5174 + 5175: 143 Load 145(s2D) + 5176: 53(fvec2) Load 148(c2) + 5177: 53(fvec2) Load 1407(dPdxy2) + 5178: 52(float) Load 4187(lodClamp) + 5179: 7(f16vec4) ImageSampleExplicitLod 5175 5176 Grad ConstOffset MinLod 5177 5177 722 5178 + 5180: 7(f16vec4) Load 5160(texel) + 5181: 7(f16vec4) FAdd 5180 5179 + Store 5160(texel) 5181 + 5182: 143 Load 145(s2D) + 5183:154(f16vec2) Load 156(f16c2) + 5184:154(f16vec2) Load 1414(f16dPdxy2) + 5185:6(float16_t) Load 4194(f16lodClamp) + 5186: 7(f16vec4) ImageSampleExplicitLod 5182 5183 Grad ConstOffset MinLod 5184 5184 722 5185 + 5187: 7(f16vec4) Load 5160(texel) + 5188: 7(f16vec4) FAdd 5187 5186 + Store 5160(texel) 5188 + 5189: 163 Load 165(s3D) + 5190: 167(fvec3) Load 169(c3) + 5191: 167(fvec3) Load 1421(dPdxy3) + 5192: 52(float) Load 4187(lodClamp) + 5193: 7(f16vec4) ImageSampleExplicitLod 5189 5190 Grad ConstOffset MinLod 5191 5191 735 5192 + 5194: 7(f16vec4) Load 5160(texel) + 5195: 7(f16vec4) FAdd 5194 5193 + Store 5160(texel) 5195 + 5196: 163 Load 165(s3D) + 5197:175(f16vec3) Load 177(f16c3) + 5198:175(f16vec3) Load 1428(f16dPdxy3) + 5199:6(float16_t) Load 4194(f16lodClamp) + 5200: 7(f16vec4) ImageSampleExplicitLod 5196 5197 Grad ConstOffset MinLod 5198 5198 735 5199 + 5201: 7(f16vec4) Load 5160(texel) + 5202: 7(f16vec4) FAdd 5201 5200 + Store 5160(texel) 5202 + 5203: 199 Load 201(s1DShadow) + 5204: 167(fvec3) Load 169(c3) + 5205: 52(float) Load 1393(dPdxy1) + 5206: 52(float) Load 4187(lodClamp) + 5207: 52(float) CompositeExtract 5204 2 + 5208:6(float16_t) ImageSampleDrefExplicitLod 5203 5204 5207 Grad ConstOffset MinLod 5205 5205 709 5206 + 5209: 208(ptr) AccessChain 5160(texel) 207 + 5210:6(float16_t) Load 5209 + 5211:6(float16_t) FAdd 5210 5208 + 5212: 208(ptr) AccessChain 5160(texel) 207 + Store 5212 5211 + 5213: 199 Load 201(s1DShadow) + 5214:154(f16vec2) Load 156(f16c2) + 5215: 52(float) Load 215(compare) + 5216:6(float16_t) Load 1400(f16dPdxy1) + 5217:6(float16_t) Load 4194(f16lodClamp) + 5218:6(float16_t) ImageSampleDrefExplicitLod 5213 5214 5215 Grad ConstOffset MinLod 5216 5216 709 5217 + 5219: 208(ptr) AccessChain 5160(texel) 207 + 5220:6(float16_t) Load 5219 + 5221:6(float16_t) FAdd 5220 5218 + 5222: 208(ptr) AccessChain 5160(texel) 207 + Store 5222 5221 + 5223: 224 Load 226(s2DShadow) + 5224: 167(fvec3) Load 169(c3) + 5225: 53(fvec2) Load 1407(dPdxy2) + 5226: 52(float) Load 4187(lodClamp) + 5227: 52(float) CompositeExtract 5224 2 + 5228:6(float16_t) ImageSampleDrefExplicitLod 5223 5224 5227 Grad ConstOffset MinLod 5225 5225 722 5226 + 5229: 208(ptr) AccessChain 5160(texel) 207 + 5230:6(float16_t) Load 5229 + 5231:6(float16_t) FAdd 5230 5228 + 5232: 208(ptr) AccessChain 5160(texel) 207 + Store 5232 5231 + 5233: 224 Load 226(s2DShadow) + 5234:154(f16vec2) Load 156(f16c2) + 5235: 52(float) Load 215(compare) + 5236:154(f16vec2) Load 1414(f16dPdxy2) + 5237:6(float16_t) Load 4194(f16lodClamp) + 5238:6(float16_t) ImageSampleDrefExplicitLod 5233 5234 5235 Grad ConstOffset MinLod 5236 5236 722 5237 + 5239: 208(ptr) AccessChain 5160(texel) 207 + 5240:6(float16_t) Load 5239 + 5241:6(float16_t) FAdd 5240 5238 + 5242: 208(ptr) AccessChain 5160(texel) 207 + Store 5242 5241 + 5243: 269 Load 271(s1DArray) + 5244: 53(fvec2) Load 148(c2) + 5245: 52(float) Load 1393(dPdxy1) + 5246: 52(float) Load 4187(lodClamp) + 5247: 7(f16vec4) ImageSampleExplicitLod 5243 5244 Grad ConstOffset MinLod 5245 5245 709 5246 + 5248: 7(f16vec4) Load 5160(texel) + 5249: 7(f16vec4) FAdd 5248 5247 + Store 5160(texel) 5249 + 5250: 269 Load 271(s1DArray) + 5251:154(f16vec2) Load 156(f16c2) + 5252:6(float16_t) Load 1400(f16dPdxy1) + 5253:6(float16_t) Load 4194(f16lodClamp) + 5254: 7(f16vec4) ImageSampleExplicitLod 5250 5251 Grad ConstOffset MinLod 5252 5252 709 5253 + 5255: 7(f16vec4) Load 5160(texel) + 5256: 7(f16vec4) FAdd 5255 5254 + Store 5160(texel) 5256 + 5257: 284 Load 286(s2DArray) + 5258: 167(fvec3) Load 169(c3) + 5259: 53(fvec2) Load 1407(dPdxy2) + 5260: 52(float) Load 4187(lodClamp) + 5261: 7(f16vec4) ImageSampleExplicitLod 5257 5258 Grad ConstOffset MinLod 5259 5259 722 5260 + 5262: 7(f16vec4) Load 5160(texel) + 5263: 7(f16vec4) FAdd 5262 5261 + Store 5160(texel) 5263 + 5264: 284 Load 286(s2DArray) + 5265:175(f16vec3) Load 177(f16c3) + 5266:154(f16vec2) Load 1414(f16dPdxy2) + 5267:6(float16_t) Load 4194(f16lodClamp) + 5268: 7(f16vec4) ImageSampleExplicitLod 5264 5265 Grad ConstOffset MinLod 5266 5266 722 5267 + 5269: 7(f16vec4) Load 5160(texel) + 5270: 7(f16vec4) FAdd 5269 5268 + Store 5160(texel) 5270 + 5271: 316 Load 318(s1DArrayShadow) + 5272: 167(fvec3) Load 169(c3) + 5273: 52(float) Load 1393(dPdxy1) + 5274: 52(float) Load 4187(lodClamp) + 5275: 52(float) CompositeExtract 5272 2 + 5276:6(float16_t) ImageSampleDrefExplicitLod 5271 5272 5275 Grad ConstOffset MinLod 5273 5273 709 5274 + 5277: 208(ptr) AccessChain 5160(texel) 207 + 5278:6(float16_t) Load 5277 + 5279:6(float16_t) FAdd 5278 5276 + 5280: 208(ptr) AccessChain 5160(texel) 207 + Store 5280 5279 + 5281: 316 Load 318(s1DArrayShadow) + 5282:154(f16vec2) Load 156(f16c2) + 5283: 52(float) Load 215(compare) + 5284:6(float16_t) Load 1400(f16dPdxy1) + 5285:6(float16_t) Load 4194(f16lodClamp) + 5286:6(float16_t) ImageSampleDrefExplicitLod 5281 5282 5283 Grad ConstOffset MinLod 5284 5284 709 5285 + 5287: 208(ptr) AccessChain 5160(texel) 207 + 5288:6(float16_t) Load 5287 + 5289:6(float16_t) FAdd 5288 5286 + 5290: 208(ptr) AccessChain 5160(texel) 207 + Store 5290 5289 + 5291: 337 Load 339(s2DArrayShadow) + 5292: 249(fvec4) Load 251(c4) + 5293: 53(fvec2) Load 1407(dPdxy2) + 5294: 52(float) Load 4187(lodClamp) + 5295: 52(float) CompositeExtract 5292 3 + 5296:6(float16_t) ImageSampleDrefExplicitLod 5291 5292 5295 Grad ConstOffset MinLod 5293 5293 722 5294 + 5297: 208(ptr) AccessChain 5160(texel) 207 + 5298:6(float16_t) Load 5297 + 5299:6(float16_t) FAdd 5298 5296 + 5300: 208(ptr) AccessChain 5160(texel) 207 + Store 5300 5299 + 5301: 337 Load 339(s2DArrayShadow) + 5302:175(f16vec3) Load 177(f16c3) + 5303: 52(float) Load 215(compare) + 5304:154(f16vec2) Load 1414(f16dPdxy2) + 5305:6(float16_t) Load 4194(f16lodClamp) + 5306:6(float16_t) ImageSampleDrefExplicitLod 5301 5302 5303 Grad ConstOffset MinLod 5304 5304 722 5305 + 5307: 208(ptr) AccessChain 5160(texel) 207 + 5308:6(float16_t) Load 5307 + 5309:6(float16_t) FAdd 5308 5306 + 5310: 208(ptr) AccessChain 5160(texel) 207 + Store 5310 5309 + 5311: 7(f16vec4) Load 5160(texel) + ReturnValue 5311 FunctionEnd 115(testCombinedTextureSampler(): 7(f16vec4) Function None 8 116: Label - 5506(texel): 64(ptr) Variable Function - Store 5506(texel) 121 - 5509: 122 Load 5508(t1D) - 5513: 5510 Load 5512(s) - 5514: 123 SampledImage 5509 5513 - 5515: 52(float) Load 128(c1) - 5516: 7(f16vec4) ImageSampleImplicitLod 5514 5515 - 5517: 7(f16vec4) Load 5506(texel) - 5518: 7(f16vec4) FAdd 5517 5516 - Store 5506(texel) 5518 - 5519: 122 Load 5508(t1D) - 5520: 5510 Load 5512(s) - 5521: 123 SampledImage 5519 5520 - 5522:6(float16_t) Load 135(f16c1) - 5523:6(float16_t) Load 137(f16bias) - 5524: 7(f16vec4) ImageSampleImplicitLod 5521 5522 Bias 5523 - 5525: 7(f16vec4) Load 5506(texel) - 5526: 7(f16vec4) FAdd 5525 5524 - Store 5506(texel) 5526 - 5529: 142 Load 5528(t2D) - 5530: 5510 Load 5512(s) - 5531: 143 SampledImage 5529 5530 - 5532: 53(fvec2) Load 148(c2) - 5533: 7(f16vec4) ImageSampleImplicitLod 5531 5532 - 5534: 7(f16vec4) Load 5506(texel) - 5535: 7(f16vec4) FAdd 5534 5533 - Store 5506(texel) 5535 - 5536: 142 Load 5528(t2D) - 5537: 5510 Load 5512(s) - 5538: 143 SampledImage 5536 5537 - 5539:154(f16vec2) Load 156(f16c2) - 5540:6(float16_t) Load 137(f16bias) - 5541: 7(f16vec4) ImageSampleImplicitLod 5538 5539 Bias 5540 - 5542: 7(f16vec4) Load 5506(texel) - 5543: 7(f16vec4) FAdd 5542 5541 - Store 5506(texel) 5543 - 5546: 162 Load 5545(t3D) - 5547: 5510 Load 5512(s) - 5548: 163 SampledImage 5546 5547 - 5549: 167(fvec3) Load 169(c3) - 5550: 7(f16vec4) ImageSampleImplicitLod 5548 5549 - 5551: 7(f16vec4) Load 5506(texel) - 5552: 7(f16vec4) FAdd 5551 5550 - Store 5506(texel) 5552 - 5553: 162 Load 5545(t3D) - 5554: 5510 Load 5512(s) - 5555: 163 SampledImage 5553 5554 - 5556:175(f16vec3) Load 177(f16c3) - 5557:6(float16_t) Load 137(f16bias) - 5558: 7(f16vec4) ImageSampleImplicitLod 5555 5556 Bias 5557 - 5559: 7(f16vec4) Load 5506(texel) - 5560: 7(f16vec4) FAdd 5559 5558 - Store 5506(texel) 5560 - 5563: 183 Load 5562(tCube) - 5564: 5510 Load 5512(s) - 5565: 184 SampledImage 5563 5564 - 5566: 167(fvec3) Load 169(c3) - 5567: 7(f16vec4) ImageSampleImplicitLod 5565 5566 - 5568: 7(f16vec4) Load 5506(texel) - 5569: 7(f16vec4) FAdd 5568 5567 - Store 5506(texel) 5569 - 5570: 183 Load 5562(tCube) - 5571: 5510 Load 5512(s) - 5572: 184 SampledImage 5570 5571 - 5573:175(f16vec3) Load 177(f16c3) - 5574:6(float16_t) Load 137(f16bias) - 5575: 7(f16vec4) ImageSampleImplicitLod 5572 5573 Bias 5574 - 5576: 7(f16vec4) Load 5506(texel) - 5577: 7(f16vec4) FAdd 5576 5575 - Store 5506(texel) 5577 - 5578: 122 Load 5508(t1D) - 5580: 5510 Load 5579(sShadow) - 5581: 199 SampledImage 5578 5580 - 5582: 167(fvec3) Load 169(c3) - 5583: 52(float) CompositeExtract 5582 2 - 5584:6(float16_t) ImageSampleDrefImplicitLod 5581 5582 5583 - 5585: 208(ptr) AccessChain 5506(texel) 207 - 5586:6(float16_t) Load 5585 - 5587:6(float16_t) FAdd 5586 5584 - 5588: 208(ptr) AccessChain 5506(texel) 207 - Store 5588 5587 - 5589: 122 Load 5508(t1D) - 5590: 5510 Load 5579(sShadow) - 5591: 199 SampledImage 5589 5590 - 5592:154(f16vec2) Load 156(f16c2) - 5593: 52(float) Load 215(compare) - 5594:6(float16_t) Load 137(f16bias) - 5595:6(float16_t) ImageSampleDrefImplicitLod 5591 5592 5593 Bias 5594 - 5596: 208(ptr) AccessChain 5506(texel) 207 - 5597:6(float16_t) Load 5596 - 5598:6(float16_t) FAdd 5597 5595 - 5599: 208(ptr) AccessChain 5506(texel) 207 - Store 5599 5598 - 5600: 142 Load 5528(t2D) - 5601: 5510 Load 5579(sShadow) - 5602: 224 SampledImage 5600 5601 - 5603: 167(fvec3) Load 169(c3) - 5604: 52(float) CompositeExtract 5603 2 - 5605:6(float16_t) ImageSampleDrefImplicitLod 5602 5603 5604 - 5606: 208(ptr) AccessChain 5506(texel) 207 - 5607:6(float16_t) Load 5606 - 5608:6(float16_t) FAdd 5607 5605 - 5609: 208(ptr) AccessChain 5506(texel) 207 - Store 5609 5608 - 5610: 142 Load 5528(t2D) - 5611: 5510 Load 5579(sShadow) - 5612: 224 SampledImage 5610 5611 - 5613:154(f16vec2) Load 156(f16c2) - 5614: 52(float) Load 215(compare) - 5615:6(float16_t) Load 137(f16bias) - 5616:6(float16_t) ImageSampleDrefImplicitLod 5612 5613 5614 Bias 5615 - 5617: 208(ptr) AccessChain 5506(texel) 207 - 5618:6(float16_t) Load 5617 - 5619:6(float16_t) FAdd 5618 5616 - 5620: 208(ptr) AccessChain 5506(texel) 207 - Store 5620 5619 - 5621: 183 Load 5562(tCube) - 5622: 5510 Load 5579(sShadow) - 5623: 245 SampledImage 5621 5622 - 5624: 249(fvec4) Load 251(c4) - 5625: 52(float) CompositeExtract 5624 3 - 5626:6(float16_t) ImageSampleDrefImplicitLod 5623 5624 5625 - 5627: 208(ptr) AccessChain 5506(texel) 207 - 5628:6(float16_t) Load 5627 - 5629:6(float16_t) FAdd 5628 5626 - 5630: 208(ptr) AccessChain 5506(texel) 207 - Store 5630 5629 - 5631: 183 Load 5562(tCube) - 5632: 5510 Load 5579(sShadow) - 5633: 245 SampledImage 5631 5632 - 5634:175(f16vec3) Load 177(f16c3) - 5635: 52(float) Load 215(compare) - 5636:6(float16_t) Load 137(f16bias) - 5637:6(float16_t) ImageSampleDrefImplicitLod 5633 5634 5635 Bias 5636 - 5638: 208(ptr) AccessChain 5506(texel) 207 - 5639:6(float16_t) Load 5638 - 5640:6(float16_t) FAdd 5639 5637 - 5641: 208(ptr) AccessChain 5506(texel) 207 - Store 5641 5640 - 5644: 268 Load 5643(t1DArray) - 5645: 5510 Load 5512(s) - 5646: 269 SampledImage 5644 5645 - 5647: 53(fvec2) Load 148(c2) - 5648: 7(f16vec4) ImageSampleImplicitLod 5646 5647 - 5649: 7(f16vec4) Load 5506(texel) - 5650: 7(f16vec4) FAdd 5649 5648 - Store 5506(texel) 5650 - 5651: 268 Load 5643(t1DArray) - 5652: 5510 Load 5512(s) - 5653: 269 SampledImage 5651 5652 - 5654:154(f16vec2) Load 156(f16c2) - 5655:6(float16_t) Load 137(f16bias) - 5656: 7(f16vec4) ImageSampleImplicitLod 5653 5654 Bias 5655 - 5657: 7(f16vec4) Load 5506(texel) - 5658: 7(f16vec4) FAdd 5657 5656 - Store 5506(texel) 5658 - 5661: 283 Load 5660(t2DArray) - 5662: 5510 Load 5512(s) - 5663: 284 SampledImage 5661 5662 - 5664: 167(fvec3) Load 169(c3) - 5665: 7(f16vec4) ImageSampleImplicitLod 5663 5664 - 5666: 7(f16vec4) Load 5506(texel) - 5667: 7(f16vec4) FAdd 5666 5665 - Store 5506(texel) 5667 - 5668: 283 Load 5660(t2DArray) - 5669: 5510 Load 5512(s) - 5670: 284 SampledImage 5668 5669 - 5671:175(f16vec3) Load 177(f16c3) - 5672:6(float16_t) Load 137(f16bias) - 5673: 7(f16vec4) ImageSampleImplicitLod 5670 5671 Bias 5672 - 5674: 7(f16vec4) Load 5506(texel) - 5675: 7(f16vec4) FAdd 5674 5673 - Store 5506(texel) 5675 - 5678: 298 Load 5677(tCubeArray) - 5679: 5510 Load 5512(s) - 5680: 299 SampledImage 5678 5679 - 5681: 249(fvec4) Load 251(c4) - 5682: 7(f16vec4) ImageSampleImplicitLod 5680 5681 - 5683: 7(f16vec4) Load 5506(texel) - 5684: 7(f16vec4) FAdd 5683 5682 - Store 5506(texel) 5684 - 5685: 298 Load 5677(tCubeArray) - 5686: 5510 Load 5512(s) - 5687: 299 SampledImage 5685 5686 - 5688: 7(f16vec4) Load 309(f16c4) - 5689:6(float16_t) Load 137(f16bias) - 5690: 7(f16vec4) ImageSampleImplicitLod 5687 5688 Bias 5689 - 5691: 7(f16vec4) Load 5506(texel) - 5692: 7(f16vec4) FAdd 5691 5690 - Store 5506(texel) 5692 - 5693: 268 Load 5643(t1DArray) - 5694: 5510 Load 5579(sShadow) - 5695: 316 SampledImage 5693 5694 - 5696: 167(fvec3) Load 169(c3) - 5697: 52(float) CompositeExtract 5696 2 - 5698:6(float16_t) ImageSampleDrefImplicitLod 5695 5696 5697 - 5699: 208(ptr) AccessChain 5506(texel) 207 - 5700:6(float16_t) Load 5699 - 5701:6(float16_t) FAdd 5700 5698 - 5702: 208(ptr) AccessChain 5506(texel) 207 - Store 5702 5701 - 5703: 268 Load 5643(t1DArray) - 5704: 5510 Load 5579(sShadow) - 5705: 316 SampledImage 5703 5704 - 5706:154(f16vec2) Load 156(f16c2) - 5707: 52(float) Load 215(compare) - 5708:6(float16_t) Load 137(f16bias) - 5709:6(float16_t) ImageSampleDrefImplicitLod 5705 5706 5707 Bias 5708 - 5710: 208(ptr) AccessChain 5506(texel) 207 - 5711:6(float16_t) Load 5710 - 5712:6(float16_t) FAdd 5711 5709 - 5713: 208(ptr) AccessChain 5506(texel) 207 - Store 5713 5712 - 5714: 283 Load 5660(t2DArray) - 5715: 5510 Load 5579(sShadow) - 5716: 337 SampledImage 5714 5715 - 5717: 249(fvec4) Load 251(c4) - 5718: 52(float) CompositeExtract 5717 3 - 5719:6(float16_t) ImageSampleDrefImplicitLod 5716 5717 5718 - 5720: 208(ptr) AccessChain 5506(texel) 207 - 5721:6(float16_t) Load 5720 - 5722:6(float16_t) FAdd 5721 5719 - 5723: 208(ptr) AccessChain 5506(texel) 207 - Store 5723 5722 - 5724: 283 Load 5660(t2DArray) - 5725: 5510 Load 5579(sShadow) - 5726: 337 SampledImage 5724 5725 - 5727:175(f16vec3) Load 177(f16c3) - 5728: 52(float) Load 215(compare) - 5729:6(float16_t) ImageSampleDrefImplicitLod 5726 5727 5728 - 5730: 208(ptr) AccessChain 5506(texel) 207 - 5731:6(float16_t) Load 5730 - 5732:6(float16_t) FAdd 5731 5729 - 5733: 208(ptr) AccessChain 5506(texel) 207 - Store 5733 5732 - 5736: 356 Load 5735(t2DRect) - 5737: 5510 Load 5512(s) - 5738: 357 SampledImage 5736 5737 - 5739: 53(fvec2) Load 148(c2) - 5740: 7(f16vec4) ImageSampleImplicitLod 5738 5739 - 5741: 7(f16vec4) Load 5506(texel) - 5742: 7(f16vec4) FAdd 5741 5740 - Store 5506(texel) 5742 - 5743: 356 Load 5735(t2DRect) - 5744: 5510 Load 5512(s) - 5745: 357 SampledImage 5743 5744 - 5746:154(f16vec2) Load 156(f16c2) - 5747: 7(f16vec4) ImageSampleImplicitLod 5745 5746 - 5748: 7(f16vec4) Load 5506(texel) - 5749: 7(f16vec4) FAdd 5748 5747 - Store 5506(texel) 5749 - 5750: 356 Load 5735(t2DRect) - 5751: 5510 Load 5579(sShadow) - 5752: 371 SampledImage 5750 5751 - 5753: 167(fvec3) Load 169(c3) - 5754: 52(float) CompositeExtract 5753 2 - 5755:6(float16_t) ImageSampleDrefImplicitLod 5752 5753 5754 - 5756: 208(ptr) AccessChain 5506(texel) 207 - 5757:6(float16_t) Load 5756 - 5758:6(float16_t) FAdd 5757 5755 - 5759: 208(ptr) AccessChain 5506(texel) 207 - Store 5759 5758 - 5760: 356 Load 5735(t2DRect) - 5761: 5510 Load 5579(sShadow) - 5762: 371 SampledImage 5760 5761 - 5763:154(f16vec2) Load 156(f16c2) - 5764: 52(float) Load 215(compare) - 5765:6(float16_t) ImageSampleDrefImplicitLod 5762 5763 5764 - 5766: 208(ptr) AccessChain 5506(texel) 207 - 5767:6(float16_t) Load 5766 - 5768:6(float16_t) FAdd 5767 5765 - 5769: 208(ptr) AccessChain 5506(texel) 207 - Store 5769 5768 - 5770: 298 Load 5677(tCubeArray) - 5771: 5510 Load 5579(sShadow) - 5772: 391 SampledImage 5770 5771 - 5773: 249(fvec4) Load 251(c4) - 5774: 52(float) Load 215(compare) - 5775:6(float16_t) ImageSampleDrefImplicitLod 5772 5773 5774 - 5776: 208(ptr) AccessChain 5506(texel) 207 - 5777:6(float16_t) Load 5776 - 5778:6(float16_t) FAdd 5777 5775 - 5779: 208(ptr) AccessChain 5506(texel) 207 - Store 5779 5778 - 5780: 298 Load 5677(tCubeArray) - 5781: 5510 Load 5579(sShadow) - 5782: 391 SampledImage 5780 5781 - 5783: 7(f16vec4) Load 309(f16c4) - 5784: 52(float) Load 215(compare) - 5785:6(float16_t) ImageSampleDrefImplicitLod 5782 5783 5784 - 5786: 208(ptr) AccessChain 5506(texel) 207 - 5787:6(float16_t) Load 5786 - 5788:6(float16_t) FAdd 5787 5785 - 5789: 208(ptr) AccessChain 5506(texel) 207 - Store 5789 5788 - 5790: 7(f16vec4) Load 5506(texel) - ReturnValue 5790 + 5314(texel): 64(ptr) Variable Function + Store 5314(texel) 121 + 5317: 122 Load 5316(t1D) + 5321: 5318 Load 5320(s) + 5322: 123 SampledImage 5317 5321 + 5323: 52(float) Load 128(c1) + 5324: 7(f16vec4) ImageSampleImplicitLod 5322 5323 + 5325: 7(f16vec4) Load 5314(texel) + 5326: 7(f16vec4) FAdd 5325 5324 + Store 5314(texel) 5326 + 5327: 122 Load 5316(t1D) + 5328: 5318 Load 5320(s) + 5329: 123 SampledImage 5327 5328 + 5330:6(float16_t) Load 135(f16c1) + 5331:6(float16_t) Load 137(f16bias) + 5332: 7(f16vec4) ImageSampleImplicitLod 5329 5330 Bias 5331 + 5333: 7(f16vec4) Load 5314(texel) + 5334: 7(f16vec4) FAdd 5333 5332 + Store 5314(texel) 5334 + 5337: 142 Load 5336(t2D) + 5338: 5318 Load 5320(s) + 5339: 143 SampledImage 5337 5338 + 5340: 53(fvec2) Load 148(c2) + 5341: 7(f16vec4) ImageSampleImplicitLod 5339 5340 + 5342: 7(f16vec4) Load 5314(texel) + 5343: 7(f16vec4) FAdd 5342 5341 + Store 5314(texel) 5343 + 5344: 142 Load 5336(t2D) + 5345: 5318 Load 5320(s) + 5346: 143 SampledImage 5344 5345 + 5347:154(f16vec2) Load 156(f16c2) + 5348:6(float16_t) Load 137(f16bias) + 5349: 7(f16vec4) ImageSampleImplicitLod 5346 5347 Bias 5348 + 5350: 7(f16vec4) Load 5314(texel) + 5351: 7(f16vec4) FAdd 5350 5349 + Store 5314(texel) 5351 + 5354: 162 Load 5353(t3D) + 5355: 5318 Load 5320(s) + 5356: 163 SampledImage 5354 5355 + 5357: 167(fvec3) Load 169(c3) + 5358: 7(f16vec4) ImageSampleImplicitLod 5356 5357 + 5359: 7(f16vec4) Load 5314(texel) + 5360: 7(f16vec4) FAdd 5359 5358 + Store 5314(texel) 5360 + 5361: 162 Load 5353(t3D) + 5362: 5318 Load 5320(s) + 5363: 163 SampledImage 5361 5362 + 5364:175(f16vec3) Load 177(f16c3) + 5365:6(float16_t) Load 137(f16bias) + 5366: 7(f16vec4) ImageSampleImplicitLod 5363 5364 Bias 5365 + 5367: 7(f16vec4) Load 5314(texel) + 5368: 7(f16vec4) FAdd 5367 5366 + Store 5314(texel) 5368 + 5371: 183 Load 5370(tCube) + 5372: 5318 Load 5320(s) + 5373: 184 SampledImage 5371 5372 + 5374: 167(fvec3) Load 169(c3) + 5375: 7(f16vec4) ImageSampleImplicitLod 5373 5374 + 5376: 7(f16vec4) Load 5314(texel) + 5377: 7(f16vec4) FAdd 5376 5375 + Store 5314(texel) 5377 + 5378: 183 Load 5370(tCube) + 5379: 5318 Load 5320(s) + 5380: 184 SampledImage 5378 5379 + 5381:175(f16vec3) Load 177(f16c3) + 5382:6(float16_t) Load 137(f16bias) + 5383: 7(f16vec4) ImageSampleImplicitLod 5380 5381 Bias 5382 + 5384: 7(f16vec4) Load 5314(texel) + 5385: 7(f16vec4) FAdd 5384 5383 + Store 5314(texel) 5385 + 5386: 122 Load 5316(t1D) + 5388: 5318 Load 5387(sShadow) + 5389: 199 SampledImage 5386 5388 + 5390: 167(fvec3) Load 169(c3) + 5391: 52(float) CompositeExtract 5390 2 + 5392:6(float16_t) ImageSampleDrefImplicitLod 5389 5390 5391 + 5393: 208(ptr) AccessChain 5314(texel) 207 + 5394:6(float16_t) Load 5393 + 5395:6(float16_t) FAdd 5394 5392 + 5396: 208(ptr) AccessChain 5314(texel) 207 + Store 5396 5395 + 5397: 122 Load 5316(t1D) + 5398: 5318 Load 5387(sShadow) + 5399: 199 SampledImage 5397 5398 + 5400:154(f16vec2) Load 156(f16c2) + 5401: 52(float) Load 215(compare) + 5402:6(float16_t) Load 137(f16bias) + 5403:6(float16_t) ImageSampleDrefImplicitLod 5399 5400 5401 Bias 5402 + 5404: 208(ptr) AccessChain 5314(texel) 207 + 5405:6(float16_t) Load 5404 + 5406:6(float16_t) FAdd 5405 5403 + 5407: 208(ptr) AccessChain 5314(texel) 207 + Store 5407 5406 + 5408: 142 Load 5336(t2D) + 5409: 5318 Load 5387(sShadow) + 5410: 224 SampledImage 5408 5409 + 5411: 167(fvec3) Load 169(c3) + 5412: 52(float) CompositeExtract 5411 2 + 5413:6(float16_t) ImageSampleDrefImplicitLod 5410 5411 5412 + 5414: 208(ptr) AccessChain 5314(texel) 207 + 5415:6(float16_t) Load 5414 + 5416:6(float16_t) FAdd 5415 5413 + 5417: 208(ptr) AccessChain 5314(texel) 207 + Store 5417 5416 + 5418: 142 Load 5336(t2D) + 5419: 5318 Load 5387(sShadow) + 5420: 224 SampledImage 5418 5419 + 5421:154(f16vec2) Load 156(f16c2) + 5422: 52(float) Load 215(compare) + 5423:6(float16_t) Load 137(f16bias) + 5424:6(float16_t) ImageSampleDrefImplicitLod 5420 5421 5422 Bias 5423 + 5425: 208(ptr) AccessChain 5314(texel) 207 + 5426:6(float16_t) Load 5425 + 5427:6(float16_t) FAdd 5426 5424 + 5428: 208(ptr) AccessChain 5314(texel) 207 + Store 5428 5427 + 5429: 183 Load 5370(tCube) + 5430: 5318 Load 5387(sShadow) + 5431: 245 SampledImage 5429 5430 + 5432: 249(fvec4) Load 251(c4) + 5433: 52(float) CompositeExtract 5432 3 + 5434:6(float16_t) ImageSampleDrefImplicitLod 5431 5432 5433 + 5435: 208(ptr) AccessChain 5314(texel) 207 + 5436:6(float16_t) Load 5435 + 5437:6(float16_t) FAdd 5436 5434 + 5438: 208(ptr) AccessChain 5314(texel) 207 + Store 5438 5437 + 5439: 183 Load 5370(tCube) + 5440: 5318 Load 5387(sShadow) + 5441: 245 SampledImage 5439 5440 + 5442:175(f16vec3) Load 177(f16c3) + 5443: 52(float) Load 215(compare) + 5444:6(float16_t) Load 137(f16bias) + 5445:6(float16_t) ImageSampleDrefImplicitLod 5441 5442 5443 Bias 5444 + 5446: 208(ptr) AccessChain 5314(texel) 207 + 5447:6(float16_t) Load 5446 + 5448:6(float16_t) FAdd 5447 5445 + 5449: 208(ptr) AccessChain 5314(texel) 207 + Store 5449 5448 + 5452: 268 Load 5451(t1DArray) + 5453: 5318 Load 5320(s) + 5454: 269 SampledImage 5452 5453 + 5455: 53(fvec2) Load 148(c2) + 5456: 7(f16vec4) ImageSampleImplicitLod 5454 5455 + 5457: 7(f16vec4) Load 5314(texel) + 5458: 7(f16vec4) FAdd 5457 5456 + Store 5314(texel) 5458 + 5459: 268 Load 5451(t1DArray) + 5460: 5318 Load 5320(s) + 5461: 269 SampledImage 5459 5460 + 5462:154(f16vec2) Load 156(f16c2) + 5463:6(float16_t) Load 137(f16bias) + 5464: 7(f16vec4) ImageSampleImplicitLod 5461 5462 Bias 5463 + 5465: 7(f16vec4) Load 5314(texel) + 5466: 7(f16vec4) FAdd 5465 5464 + Store 5314(texel) 5466 + 5469: 283 Load 5468(t2DArray) + 5470: 5318 Load 5320(s) + 5471: 284 SampledImage 5469 5470 + 5472: 167(fvec3) Load 169(c3) + 5473: 7(f16vec4) ImageSampleImplicitLod 5471 5472 + 5474: 7(f16vec4) Load 5314(texel) + 5475: 7(f16vec4) FAdd 5474 5473 + Store 5314(texel) 5475 + 5476: 283 Load 5468(t2DArray) + 5477: 5318 Load 5320(s) + 5478: 284 SampledImage 5476 5477 + 5479:175(f16vec3) Load 177(f16c3) + 5480:6(float16_t) Load 137(f16bias) + 5481: 7(f16vec4) ImageSampleImplicitLod 5478 5479 Bias 5480 + 5482: 7(f16vec4) Load 5314(texel) + 5483: 7(f16vec4) FAdd 5482 5481 + Store 5314(texel) 5483 + 5486: 298 Load 5485(tCubeArray) + 5487: 5318 Load 5320(s) + 5488: 299 SampledImage 5486 5487 + 5489: 249(fvec4) Load 251(c4) + 5490: 7(f16vec4) ImageSampleImplicitLod 5488 5489 + 5491: 7(f16vec4) Load 5314(texel) + 5492: 7(f16vec4) FAdd 5491 5490 + Store 5314(texel) 5492 + 5493: 298 Load 5485(tCubeArray) + 5494: 5318 Load 5320(s) + 5495: 299 SampledImage 5493 5494 + 5496: 7(f16vec4) Load 309(f16c4) + 5497:6(float16_t) Load 137(f16bias) + 5498: 7(f16vec4) ImageSampleImplicitLod 5495 5496 Bias 5497 + 5499: 7(f16vec4) Load 5314(texel) + 5500: 7(f16vec4) FAdd 5499 5498 + Store 5314(texel) 5500 + 5501: 268 Load 5451(t1DArray) + 5502: 5318 Load 5387(sShadow) + 5503: 316 SampledImage 5501 5502 + 5504: 167(fvec3) Load 169(c3) + 5505: 52(float) CompositeExtract 5504 2 + 5506:6(float16_t) ImageSampleDrefImplicitLod 5503 5504 5505 + 5507: 208(ptr) AccessChain 5314(texel) 207 + 5508:6(float16_t) Load 5507 + 5509:6(float16_t) FAdd 5508 5506 + 5510: 208(ptr) AccessChain 5314(texel) 207 + Store 5510 5509 + 5511: 268 Load 5451(t1DArray) + 5512: 5318 Load 5387(sShadow) + 5513: 316 SampledImage 5511 5512 + 5514:154(f16vec2) Load 156(f16c2) + 5515: 52(float) Load 215(compare) + 5516:6(float16_t) Load 137(f16bias) + 5517:6(float16_t) ImageSampleDrefImplicitLod 5513 5514 5515 Bias 5516 + 5518: 208(ptr) AccessChain 5314(texel) 207 + 5519:6(float16_t) Load 5518 + 5520:6(float16_t) FAdd 5519 5517 + 5521: 208(ptr) AccessChain 5314(texel) 207 + Store 5521 5520 + 5522: 283 Load 5468(t2DArray) + 5523: 5318 Load 5387(sShadow) + 5524: 337 SampledImage 5522 5523 + 5525: 249(fvec4) Load 251(c4) + 5526: 52(float) CompositeExtract 5525 3 + 5527:6(float16_t) ImageSampleDrefImplicitLod 5524 5525 5526 + 5528: 208(ptr) AccessChain 5314(texel) 207 + 5529:6(float16_t) Load 5528 + 5530:6(float16_t) FAdd 5529 5527 + 5531: 208(ptr) AccessChain 5314(texel) 207 + Store 5531 5530 + 5532: 283 Load 5468(t2DArray) + 5533: 5318 Load 5387(sShadow) + 5534: 337 SampledImage 5532 5533 + 5535:175(f16vec3) Load 177(f16c3) + 5536: 52(float) Load 215(compare) + 5537:6(float16_t) ImageSampleDrefImplicitLod 5534 5535 5536 + 5538: 208(ptr) AccessChain 5314(texel) 207 + 5539:6(float16_t) Load 5538 + 5540:6(float16_t) FAdd 5539 5537 + 5541: 208(ptr) AccessChain 5314(texel) 207 + Store 5541 5540 + 5544: 356 Load 5543(t2DRect) + 5545: 5318 Load 5320(s) + 5546: 357 SampledImage 5544 5545 + 5547: 53(fvec2) Load 148(c2) + 5548: 7(f16vec4) ImageSampleImplicitLod 5546 5547 + 5549: 7(f16vec4) Load 5314(texel) + 5550: 7(f16vec4) FAdd 5549 5548 + Store 5314(texel) 5550 + 5551: 356 Load 5543(t2DRect) + 5552: 5318 Load 5320(s) + 5553: 357 SampledImage 5551 5552 + 5554:154(f16vec2) Load 156(f16c2) + 5555: 7(f16vec4) ImageSampleImplicitLod 5553 5554 + 5556: 7(f16vec4) Load 5314(texel) + 5557: 7(f16vec4) FAdd 5556 5555 + Store 5314(texel) 5557 + 5558: 356 Load 5543(t2DRect) + 5559: 5318 Load 5387(sShadow) + 5560: 371 SampledImage 5558 5559 + 5561: 167(fvec3) Load 169(c3) + 5562: 52(float) CompositeExtract 5561 2 + 5563:6(float16_t) ImageSampleDrefImplicitLod 5560 5561 5562 + 5564: 208(ptr) AccessChain 5314(texel) 207 + 5565:6(float16_t) Load 5564 + 5566:6(float16_t) FAdd 5565 5563 + 5567: 208(ptr) AccessChain 5314(texel) 207 + Store 5567 5566 + 5568: 356 Load 5543(t2DRect) + 5569: 5318 Load 5387(sShadow) + 5570: 371 SampledImage 5568 5569 + 5571:154(f16vec2) Load 156(f16c2) + 5572: 52(float) Load 215(compare) + 5573:6(float16_t) ImageSampleDrefImplicitLod 5570 5571 5572 + 5574: 208(ptr) AccessChain 5314(texel) 207 + 5575:6(float16_t) Load 5574 + 5576:6(float16_t) FAdd 5575 5573 + 5577: 208(ptr) AccessChain 5314(texel) 207 + Store 5577 5576 + 5578: 298 Load 5485(tCubeArray) + 5579: 5318 Load 5387(sShadow) + 5580: 391 SampledImage 5578 5579 + 5581: 249(fvec4) Load 251(c4) + 5582: 52(float) Load 215(compare) + 5583:6(float16_t) ImageSampleDrefImplicitLod 5580 5581 5582 + 5584: 208(ptr) AccessChain 5314(texel) 207 + 5585:6(float16_t) Load 5584 + 5586:6(float16_t) FAdd 5585 5583 + 5587: 208(ptr) AccessChain 5314(texel) 207 + Store 5587 5586 + 5588: 298 Load 5485(tCubeArray) + 5589: 5318 Load 5387(sShadow) + 5590: 391 SampledImage 5588 5589 + 5591: 7(f16vec4) Load 309(f16c4) + 5592: 52(float) Load 215(compare) + 5593:6(float16_t) ImageSampleDrefImplicitLod 5590 5591 5592 + 5594: 208(ptr) AccessChain 5314(texel) 207 + 5595:6(float16_t) Load 5594 + 5596:6(float16_t) FAdd 5595 5593 + 5597: 208(ptr) AccessChain 5314(texel) 207 + Store 5597 5596 + 5598: 7(f16vec4) Load 5314(texel) + ReturnValue 5598 FunctionEnd 117(testSubpassLoad(): 7(f16vec4) Function None 8 118: Label - 5796: 5793 Load 5795(subpass) - 5798: 7(f16vec4) ImageRead 5796 5797 - 5802: 5799 Load 5801(subpassMS) - 5803: 7(f16vec4) ImageRead 5802 5797 Sample 1326 - 5804: 7(f16vec4) FAdd 5798 5803 - ReturnValue 5804 + 5604: 5601 Load 5603(subpass) + 5606: 7(f16vec4) ImageRead 5604 5605 + 5610: 5607 Load 5609(subpassMS) + 5611: 7(f16vec4) ImageRead 5610 5605 Sample 1326 + 5612: 7(f16vec4) FAdd 5606 5611 + ReturnValue 5612 FunctionEnd diff --git a/Test/baseResults/spv.float16NoRelaxed.vert.out b/Test/baseResults/spv.float16NoRelaxed.vert.out new file mode 100644 index 0000000000..2f72839db4 --- /dev/null +++ b/Test/baseResults/spv.float16NoRelaxed.vert.out @@ -0,0 +1,72 @@ +spv.float16NoRelaxed.vert +// Module Version 10300 +// Generated by (magic number): 8000b +// 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 + Decorate 26(Buffer1) Block + MemberDecorate 26(Buffer1) 0 Offset 0 + Decorate 28 Binding 0 + Decorate 28 DescriptorSet 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.float16convertonlyarith.comp.out b/Test/baseResults/spv.float16convertonlyarith.comp.out index 1666f79f3d..81d1c60203 100644 --- a/Test/baseResults/spv.float16convertonlyarith.comp.out +++ b/Test/baseResults/spv.float16convertonlyarith.comp.out @@ -1,6 +1,6 @@ spv.float16convertonlyarith.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader diff --git a/Test/baseResults/spv.float16convertonlystorage.comp.out b/Test/baseResults/spv.float16convertonlystorage.comp.out index 8eb42f6fd5..be15f43c86 100644 --- a/Test/baseResults/spv.float16convertonlystorage.comp.out +++ b/Test/baseResults/spv.float16convertonlystorage.comp.out @@ -1,6 +1,6 @@ spv.float16convertonlystorage.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader diff --git a/Test/baseResults/spv.float32.frag.out b/Test/baseResults/spv.float32.frag.out index 2ffa2311f0..fbde7e5bda 100644 --- a/Test/baseResults/spv.float32.frag.out +++ b/Test/baseResults/spv.float32.frag.out @@ -1,6 +1,6 @@ spv.float32.frag // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 541 Capability Shader @@ -111,21 +111,21 @@ spv.float32.frag MemberDecorate 528(S) 1 Offset 8 MemberDecorate 528(S) 2 Offset 16 Decorate 529 ArrayStride 32 + Decorate 530(B1) Block MemberDecorate 530(B1) 0 Offset 0 MemberDecorate 530(B1) 1 Offset 8 MemberDecorate 530(B1) 2 Offset 16 MemberDecorate 530(B1) 3 Offset 32 MemberDecorate 530(B1) 4 ColMajor - MemberDecorate 530(B1) 4 Offset 64 MemberDecorate 530(B1) 4 MatrixStride 16 + MemberDecorate 530(B1) 4 Offset 64 MemberDecorate 530(B1) 5 ColMajor - MemberDecorate 530(B1) 5 Offset 96 MemberDecorate 530(B1) 5 MatrixStride 16 + MemberDecorate 530(B1) 5 Offset 96 MemberDecorate 530(B1) 6 Offset 160 MemberDecorate 530(B1) 7 Offset 192 - Decorate 530(B1) Block - Decorate 532 DescriptorSet 0 Decorate 532 Binding 0 + Decorate 532 DescriptorSet 0 Decorate 533(sf16) SpecId 100 Decorate 534(sf) SpecId 101 Decorate 535(sd) SpecId 102 diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out index cd5f80d677..de8a8ee676 100644 --- a/Test/baseResults/spv.float64.frag.out +++ b/Test/baseResults/spv.float64.frag.out @@ -1,7 +1,7 @@ spv.float64.frag Validation failed // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 485 Capability Shader @@ -109,21 +109,21 @@ Validation failed MemberDecorate 471(S) 1 Offset 16 MemberDecorate 471(S) 2 Offset 32 Decorate 472 ArrayStride 64 + Decorate 473(B1) Block MemberDecorate 473(B1) 0 Offset 0 MemberDecorate 473(B1) 1 Offset 16 MemberDecorate 473(B1) 2 Offset 32 MemberDecorate 473(B1) 3 Offset 64 MemberDecorate 473(B1) 4 ColMajor - MemberDecorate 473(B1) 4 Offset 96 MemberDecorate 473(B1) 4 MatrixStride 32 + MemberDecorate 473(B1) 4 Offset 96 MemberDecorate 473(B1) 5 ColMajor - MemberDecorate 473(B1) 5 Offset 160 MemberDecorate 473(B1) 5 MatrixStride 32 + MemberDecorate 473(B1) 5 Offset 160 MemberDecorate 473(B1) 6 Offset 288 MemberDecorate 473(B1) 7 Offset 352 - Decorate 473(B1) Block - Decorate 475 DescriptorSet 0 Decorate 475 Binding 0 + Decorate 475 DescriptorSet 0 Decorate 476(sf16) SpecId 100 Decorate 478(sf) SpecId 101 Decorate 479(sd) SpecId 102 diff --git a/Test/baseResults/spv.floatFetch.frag.out b/Test/baseResults/spv.floatFetch.frag.out new file mode 100644 index 0000000000..0848455fde --- /dev/null +++ b/Test/baseResults/spv.floatFetch.frag.out @@ -0,0 +1,4324 @@ +spv.floatFetch.frag +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 3500 + + Capability Shader + Capability ImageGatherExtended + Capability StorageImageMultisample + Capability ImageCubeArray + Capability ImageRect + Capability SampledRect + Capability InputAttachment + Capability SparseResidency + Capability MinLod + Capability Sampled1D + Capability Image1D + Capability SampledCubeArray + Capability SampledBuffer + Capability ImageBuffer + Capability ImageMSArray + Capability ImageQuery + Capability ImageGatherBiasLodAMD + Extension "SPV_AMD_texture_gather_bias_lod" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 127 138 150 197 283 371 866 873 880 2603 3491 3499 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_AMD_texture_gather_bias_lod" + SourceExtension "GL_ARB_sparse_texture2" + SourceExtension "GL_ARB_sparse_texture_clamp" + Name 4 "main" + Name 9 "testTexture(" + Name 11 "testTextureProj(" + Name 13 "testTextureLod(" + Name 15 "testTextureOffset(" + Name 17 "testTextureProjOffset(" + Name 19 "testTextureLodOffset(" + Name 21 "testTextureProjLodOffset(" + Name 23 "testTexelFetch(" + Name 25 "testTexelFetchOffset(" + Name 27 "testTextureGrad(" + Name 29 "testTextureGradOffset(" + Name 31 "testTextureProjGrad(" + Name 33 "testTextureProjGradoffset(" + Name 35 "testTextureGather(" + Name 37 "testTextureGatherOffset(" + Name 39 "testTextureGatherOffsets(" + Name 41 "testTextureGatherLod(" + Name 43 "testTextureGatherLodOffset(" + Name 45 "testTextureGatherLodOffsets(" + Name 50 "testTextureSize(" + Name 54 "testTextureQueryLod(" + Name 57 "testTextureQueryLevels(" + Name 59 "testTextureSamples(" + Name 61 "testImageLoad(" + Name 66 "testImageStore(vf4;" + Name 65 "data" + Name 68 "testSparseTexture(" + Name 70 "testSparseTextureLod(" + Name 72 "testSparseTextureOffset(" + Name 74 "testSparseTextureLodOffset(" + Name 76 "testSparseTextureGrad(" + Name 78 "testSparseTextureGradOffset(" + Name 80 "testSparseTexelFetch(" + Name 82 "testSparseTexelFetchOffset(" + Name 84 "testSparseTextureGather(" + Name 86 "testSparseTextureGatherOffset(" + Name 88 "testSparseTextureGatherOffsets(" + Name 90 "testSparseTextureGatherLod(" + Name 92 "testSparseTextureGatherLodOffset(" + Name 94 "testSparseTextureGatherLodOffsets(" + Name 96 "testSparseImageLoad(" + Name 98 "testSparseTextureClamp(" + Name 100 "testTextureClamp(" + Name 102 "testSparseTextureOffsetClamp(" + Name 104 "testTextureOffsetClamp(" + Name 106 "testSparseTextureGradClamp(" + Name 108 "testTextureGradClamp(" + Name 110 "testSparseTextureGradOffsetClamp(" + Name 112 "testTextureGradOffsetClamp(" + Name 114 "testCombinedTextureSampler(" + Name 116 "testSubpassLoad(" + Name 118 "texel" + Name 124 "s1D" + Name 127 "c1" + Name 135 "s2D" + Name 138 "c2" + Name 146 "s3D" + Name 150 "c3" + Name 158 "sCube" + Name 167 "s1DShadow" + Name 182 "s2DShadow" + Name 194 "sCubeShadow" + Name 197 "c4" + Name 208 "s1DArray" + Name 217 "s2DArray" + Name 226 "sCubeArray" + Name 235 "s1DArrayShadow" + Name 247 "s2DArrayShadow" + Name 259 "s2DRect" + Name 268 "s2DRectShadow" + Name 280 "sCubeArrayShadow" + Name 283 "compare" + Name 293 "texel" + Name 368 "texel" + Name 371 "lod" + Name 442 "texel" + Name 521 "texel" + Name 596 "texel" + Name 657 "texel" + Name 717 "texel" + Name 773 "sBuffer" + Name 784 "s2DMS" + Name 795 "s2DMSArray" + Name 807 "texel" + Name 863 "texel" + Name 866 "dPdxy1" + Name 873 "dPdxy2" + Name 880 "dPdxy3" + Name 972 "texel" + Name 1057 "texel" + Name 1142 "texel" + Name 1227 "texel" + Name 1287 "texel" + Name 1324 "texel" + Name 1364 "texel" + Name 1392 "texel" + Name 1408 "texel" + Name 1425 "size" + Name 1643 "lod" + Name 1713 "levels" + Name 1782 "samples" + Name 1796 "texel" + Name 1799 "i1D" + Name 1808 "i2D" + Name 1817 "i3D" + Name 1826 "i2DRect" + Name 1835 "iCube" + Name 1844 "iBuffer" + Name 1853 "i1DArray" + Name 1862 "i2DArray" + Name 1871 "iCubeArray" + Name 1880 "i2DMS" + Name 1889 "i2DMSArray" + Name 1943 "texel" + Name 1946 "ResType" + Name 1964 "ResType" + Name 2014 "texel" + Name 2056 "texel" + Name 2101 "texel" + Name 2131 "texel" + Name 2203 "texel" + Name 2255 "texel" + Name 2307 "texel" + Name 2345 "texel" + Name 2404 "texel" + Name 2441 "texel" + Name 2488 "texel" + Name 2516 "texel" + Name 2532 "texel" + Name 2548 "texel" + Name 2600 "texel" + Name 2603 "lodClamp" + Name 2667 "texel" + Name 2767 "texel" + Name 2805 "texel" + Name 2875 "texel" + Name 2941 "texel" + Name 3044 "texel" + Name 3087 "texel" + Name 3166 "texel" + Name 3168 "t1D" + Name 3172 "s" + Name 3180 "t2D" + Name 3189 "t3D" + Name 3198 "tCube" + Name 3207 "sShadow" + Name 3238 "t1DArray" + Name 3247 "t2DArray" + Name 3256 "tCubeArray" + Name 3285 "t2DRect" + Name 3318 "subpass" + Name 3324 "subpassMS" + Name 3330 "result" + Name 3412 "param" + Name 3491 "fragColor" + Name 3494 "tBuffer" + Name 3496 "t2DMS" + Name 3498 "t2DMSArray" + Name 3499 "bias" + Decorate 124(s1D) Binding 0 + Decorate 124(s1D) DescriptorSet 0 + Decorate 127(c1) Location 0 + Decorate 135(s2D) Binding 1 + Decorate 135(s2D) DescriptorSet 0 + Decorate 138(c2) Location 1 + Decorate 146(s3D) Binding 2 + Decorate 146(s3D) DescriptorSet 0 + Decorate 150(c3) Location 2 + Decorate 158(sCube) Binding 4 + Decorate 158(sCube) DescriptorSet 0 + Decorate 167(s1DShadow) Binding 11 + Decorate 167(s1DShadow) DescriptorSet 0 + Decorate 182(s2DShadow) Binding 12 + Decorate 182(s2DShadow) DescriptorSet 0 + Decorate 194(sCubeShadow) Binding 14 + Decorate 194(sCubeShadow) DescriptorSet 0 + Decorate 197(c4) Location 3 + Decorate 208(s1DArray) Binding 7 + Decorate 208(s1DArray) DescriptorSet 0 + Decorate 217(s2DArray) Binding 8 + Decorate 217(s2DArray) DescriptorSet 0 + Decorate 226(sCubeArray) Binding 9 + Decorate 226(sCubeArray) DescriptorSet 0 + Decorate 235(s1DArrayShadow) Binding 15 + Decorate 235(s1DArrayShadow) DescriptorSet 0 + Decorate 247(s2DArrayShadow) Binding 16 + Decorate 247(s2DArrayShadow) DescriptorSet 0 + Decorate 259(s2DRect) Binding 3 + Decorate 259(s2DRect) DescriptorSet 0 + Decorate 268(s2DRectShadow) Binding 13 + Decorate 268(s2DRectShadow) DescriptorSet 0 + Decorate 280(sCubeArrayShadow) Binding 17 + Decorate 280(sCubeArrayShadow) DescriptorSet 0 + Decorate 283(compare) Location 4 + Decorate 371(lod) Location 5 + Decorate 773(sBuffer) Binding 5 + Decorate 773(sBuffer) DescriptorSet 0 + Decorate 784(s2DMS) Binding 6 + Decorate 784(s2DMS) DescriptorSet 0 + Decorate 795(s2DMSArray) Binding 10 + Decorate 795(s2DMSArray) DescriptorSet 0 + Decorate 866(dPdxy1) Location 8 + Decorate 873(dPdxy2) Location 9 + Decorate 880(dPdxy3) Location 10 + Decorate 1799(i1D) Binding 0 + Decorate 1799(i1D) DescriptorSet 1 + Decorate 1808(i2D) Binding 1 + Decorate 1808(i2D) DescriptorSet 1 + Decorate 1817(i3D) Binding 2 + Decorate 1817(i3D) DescriptorSet 1 + Decorate 1826(i2DRect) Binding 3 + Decorate 1826(i2DRect) DescriptorSet 1 + Decorate 1835(iCube) Binding 4 + Decorate 1835(iCube) DescriptorSet 1 + Decorate 1844(iBuffer) Binding 8 + Decorate 1844(iBuffer) DescriptorSet 1 + Decorate 1853(i1DArray) Binding 5 + Decorate 1853(i1DArray) DescriptorSet 1 + Decorate 1862(i2DArray) Binding 6 + Decorate 1862(i2DArray) DescriptorSet 1 + Decorate 1871(iCubeArray) Binding 7 + Decorate 1871(iCubeArray) DescriptorSet 1 + Decorate 1880(i2DMS) Binding 9 + Decorate 1880(i2DMS) DescriptorSet 1 + Decorate 1889(i2DMSArray) Binding 10 + Decorate 1889(i2DMSArray) DescriptorSet 1 + Decorate 2603(lodClamp) Location 7 + Decorate 3168(t1D) Binding 0 + Decorate 3168(t1D) DescriptorSet 2 + Decorate 3172(s) Binding 11 + Decorate 3172(s) DescriptorSet 2 + Decorate 3180(t2D) Binding 1 + Decorate 3180(t2D) DescriptorSet 2 + Decorate 3189(t3D) Binding 2 + Decorate 3189(t3D) DescriptorSet 2 + Decorate 3198(tCube) Binding 4 + Decorate 3198(tCube) DescriptorSet 2 + Decorate 3207(sShadow) Binding 12 + Decorate 3207(sShadow) DescriptorSet 2 + Decorate 3238(t1DArray) Binding 5 + Decorate 3238(t1DArray) DescriptorSet 2 + Decorate 3247(t2DArray) Binding 6 + Decorate 3247(t2DArray) DescriptorSet 2 + Decorate 3256(tCubeArray) Binding 7 + Decorate 3256(tCubeArray) DescriptorSet 2 + Decorate 3285(t2DRect) Binding 3 + Decorate 3285(t2DRect) DescriptorSet 2 + Decorate 3318(subpass) Binding 0 + Decorate 3318(subpass) DescriptorSet 3 + Decorate 3318(subpass) InputAttachmentIndex 0 + Decorate 3324(subpassMS) Binding 1 + Decorate 3324(subpassMS) DescriptorSet 3 + Decorate 3324(subpassMS) InputAttachmentIndex 0 + Decorate 3491(fragColor) Location 0 + Decorate 3494(tBuffer) Binding 8 + Decorate 3494(tBuffer) DescriptorSet 2 + Decorate 3496(t2DMS) Binding 9 + Decorate 3496(t2DMS) DescriptorSet 2 + Decorate 3498(t2DMSArray) Binding 10 + Decorate 3498(t2DMSArray) DescriptorSet 2 + Decorate 3499(bias) Location 6 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 47: TypeInt 32 1 + 48: TypeVector 47(int) 4 + 49: TypeFunction 48(ivec4) + 52: TypeVector 6(float) 2 + 53: TypeFunction 52(fvec2) + 56: TypeFunction 47(int) + 63: TypePointer Function 7(fvec4) + 64: TypeFunction 2 63(ptr) + 119: 6(float) Constant 0 + 120: 7(fvec4) ConstantComposite 119 119 119 119 + 121: TypeImage 6(float) 1D sampled format:Unknown + 122: TypeSampledImage 121 + 123: TypePointer UniformConstant 122 + 124(s1D): 123(ptr) Variable UniformConstant + 126: TypePointer Input 6(float) + 127(c1): 126(ptr) Variable Input + 132: TypeImage 6(float) 2D sampled format:Unknown + 133: TypeSampledImage 132 + 134: TypePointer UniformConstant 133 + 135(s2D): 134(ptr) Variable UniformConstant + 137: TypePointer Input 52(fvec2) + 138(c2): 137(ptr) Variable Input + 143: TypeImage 6(float) 3D sampled format:Unknown + 144: TypeSampledImage 143 + 145: TypePointer UniformConstant 144 + 146(s3D): 145(ptr) Variable UniformConstant + 148: TypeVector 6(float) 3 + 149: TypePointer Input 148(fvec3) + 150(c3): 149(ptr) Variable Input + 155: TypeImage 6(float) Cube sampled format:Unknown + 156: TypeSampledImage 155 + 157: TypePointer UniformConstant 156 + 158(sCube): 157(ptr) Variable UniformConstant + 164: TypeImage 6(float) 1D depth sampled format:Unknown + 165: TypeSampledImage 164 + 166: TypePointer UniformConstant 165 + 167(s1DShadow): 166(ptr) Variable UniformConstant + 172: TypeInt 32 0 + 173: 172(int) Constant 0 + 174: TypePointer Function 6(float) + 179: TypeImage 6(float) 2D depth sampled format:Unknown + 180: TypeSampledImage 179 + 181: TypePointer UniformConstant 180 + 182(s2DShadow): 181(ptr) Variable UniformConstant + 191: TypeImage 6(float) Cube depth sampled format:Unknown + 192: TypeSampledImage 191 + 193: TypePointer UniformConstant 192 +194(sCubeShadow): 193(ptr) Variable UniformConstant + 196: TypePointer Input 7(fvec4) + 197(c4): 196(ptr) Variable Input + 205: TypeImage 6(float) 1D array sampled format:Unknown + 206: TypeSampledImage 205 + 207: TypePointer UniformConstant 206 + 208(s1DArray): 207(ptr) Variable UniformConstant + 214: TypeImage 6(float) 2D array sampled format:Unknown + 215: TypeSampledImage 214 + 216: TypePointer UniformConstant 215 + 217(s2DArray): 216(ptr) Variable UniformConstant + 223: TypeImage 6(float) Cube array sampled format:Unknown + 224: TypeSampledImage 223 + 225: TypePointer UniformConstant 224 + 226(sCubeArray): 225(ptr) Variable UniformConstant + 232: TypeImage 6(float) 1D depth array sampled format:Unknown + 233: TypeSampledImage 232 + 234: TypePointer UniformConstant 233 +235(s1DArrayShadow): 234(ptr) Variable UniformConstant + 244: TypeImage 6(float) 2D depth array sampled format:Unknown + 245: TypeSampledImage 244 + 246: TypePointer UniformConstant 245 +247(s2DArrayShadow): 246(ptr) Variable UniformConstant + 256: TypeImage 6(float) Rect sampled format:Unknown + 257: TypeSampledImage 256 + 258: TypePointer UniformConstant 257 + 259(s2DRect): 258(ptr) Variable UniformConstant + 265: TypeImage 6(float) Rect depth sampled format:Unknown + 266: TypeSampledImage 265 + 267: TypePointer UniformConstant 266 +268(s2DRectShadow): 267(ptr) Variable UniformConstant + 277: TypeImage 6(float) Cube depth array sampled format:Unknown + 278: TypeSampledImage 277 + 279: TypePointer UniformConstant 278 +280(sCubeArrayShadow): 279(ptr) Variable UniformConstant + 283(compare): 126(ptr) Variable Input + 371(lod): 126(ptr) Variable Input + 445: 47(int) Constant 1 + 451: TypeVector 47(int) 2 + 452: 451(ivec2) ConstantComposite 445 445 + 458: TypeVector 47(int) 3 + 459: 458(ivec3) ConstantComposite 445 445 445 + 770: TypeImage 6(float) Buffer sampled format:Unknown + 771: TypeSampledImage 770 + 772: TypePointer UniformConstant 771 + 773(sBuffer): 772(ptr) Variable UniformConstant + 781: TypeImage 6(float) 2D multi-sampled sampled format:Unknown + 782: TypeSampledImage 781 + 783: TypePointer UniformConstant 782 + 784(s2DMS): 783(ptr) Variable UniformConstant + 792: TypeImage 6(float) 2D array multi-sampled sampled format:Unknown + 793: TypeSampledImage 792 + 794: TypePointer UniformConstant 793 + 795(s2DMSArray): 794(ptr) Variable UniformConstant + 799: 47(int) Constant 2 + 866(dPdxy1): 126(ptr) Variable Input + 873(dPdxy2): 137(ptr) Variable Input + 880(dPdxy3): 149(ptr) Variable Input + 1230: 47(int) Constant 0 + 1327: 172(int) Constant 4 + 1328: TypeArray 451(ivec2) 1327 + 1329: 1328 ConstantComposite 452 452 452 452 + 1424: TypePointer Function 48(ivec4) + 1426: 48(ivec4) ConstantComposite 1230 1230 1230 1230 + 1432: TypePointer Function 47(int) + 1447: 172(int) Constant 1 + 1462: 172(int) Constant 2 + 1642: TypePointer Function 52(fvec2) + 1644: 52(fvec2) ConstantComposite 119 119 + 1797: TypeImage 6(float) 1D nonsampled format:Rgba16f + 1798: TypePointer UniformConstant 1797 + 1799(i1D): 1798(ptr) Variable UniformConstant + 1806: TypeImage 6(float) 2D nonsampled format:Rgba16f + 1807: TypePointer UniformConstant 1806 + 1808(i2D): 1807(ptr) Variable UniformConstant + 1815: TypeImage 6(float) 3D nonsampled format:Rgba16f + 1816: TypePointer UniformConstant 1815 + 1817(i3D): 1816(ptr) Variable UniformConstant + 1824: TypeImage 6(float) Rect nonsampled format:Rgba16f + 1825: TypePointer UniformConstant 1824 + 1826(i2DRect): 1825(ptr) Variable UniformConstant + 1833: TypeImage 6(float) Cube nonsampled format:Rgba16f + 1834: TypePointer UniformConstant 1833 + 1835(iCube): 1834(ptr) Variable UniformConstant + 1842: TypeImage 6(float) Buffer nonsampled format:Rgba16f + 1843: TypePointer UniformConstant 1842 + 1844(iBuffer): 1843(ptr) Variable UniformConstant + 1851: TypeImage 6(float) 1D array nonsampled format:Rgba16f + 1852: TypePointer UniformConstant 1851 + 1853(i1DArray): 1852(ptr) Variable UniformConstant + 1860: TypeImage 6(float) 2D array nonsampled format:Rgba16f + 1861: TypePointer UniformConstant 1860 + 1862(i2DArray): 1861(ptr) Variable UniformConstant + 1869: TypeImage 6(float) Cube array nonsampled format:Rgba16f + 1870: TypePointer UniformConstant 1869 +1871(iCubeArray): 1870(ptr) Variable UniformConstant + 1878: TypeImage 6(float) 2D multi-sampled nonsampled format:Rgba16f + 1879: TypePointer UniformConstant 1878 + 1880(i2DMS): 1879(ptr) Variable UniformConstant + 1887: TypeImage 6(float) 2D array multi-sampled nonsampled format:Rgba16f + 1888: TypePointer UniformConstant 1887 +1889(i2DMSArray): 1888(ptr) Variable UniformConstant + 1946(ResType): TypeStruct 47(int) 7(fvec4) + 1964(ResType): TypeStruct 47(int) 6(float) + 2444: 451(ivec2) ConstantComposite 445 799 + 2445: 47(int) Constant 3 + 2446: 47(int) Constant 4 + 2447: 451(ivec2) ConstantComposite 2445 2446 + 2448: 47(int) Constant 15 + 2449: 47(int) Constant 16 + 2450: 451(ivec2) ConstantComposite 2448 2449 + 2451: 47(int) Constant 4294967294 + 2452: 451(ivec2) ConstantComposite 2451 1230 + 2453: 1328 ConstantComposite 2444 2447 2450 2452 + 2603(lodClamp): 126(ptr) Variable Input + 3167: TypePointer UniformConstant 121 + 3168(t1D): 3167(ptr) Variable UniformConstant + 3170: TypeSampler + 3171: TypePointer UniformConstant 3170 + 3172(s): 3171(ptr) Variable UniformConstant + 3179: TypePointer UniformConstant 132 + 3180(t2D): 3179(ptr) Variable UniformConstant + 3188: TypePointer UniformConstant 143 + 3189(t3D): 3188(ptr) Variable UniformConstant + 3197: TypePointer UniformConstant 155 + 3198(tCube): 3197(ptr) Variable UniformConstant + 3207(sShadow): 3171(ptr) Variable UniformConstant + 3237: TypePointer UniformConstant 205 + 3238(t1DArray): 3237(ptr) Variable UniformConstant + 3246: TypePointer UniformConstant 214 + 3247(t2DArray): 3246(ptr) Variable UniformConstant + 3255: TypePointer UniformConstant 223 +3256(tCubeArray): 3255(ptr) Variable UniformConstant + 3284: TypePointer UniformConstant 256 + 3285(t2DRect): 3284(ptr) Variable UniformConstant + 3316: TypeImage 6(float) SubpassData nonsampled format:Unknown + 3317: TypePointer UniformConstant 3316 + 3318(subpass): 3317(ptr) Variable UniformConstant + 3320: 451(ivec2) ConstantComposite 1230 1230 + 3322: TypeImage 6(float) SubpassData multi-sampled nonsampled format:Unknown + 3323: TypePointer UniformConstant 3322 + 3324(subpassMS): 3323(ptr) Variable UniformConstant + 3490: TypePointer Output 7(fvec4) + 3491(fragColor): 3490(ptr) Variable Output + 3493: TypePointer UniformConstant 770 + 3494(tBuffer): 3493(ptr) Variable UniformConstant + 3495: TypePointer UniformConstant 781 + 3496(t2DMS): 3495(ptr) Variable UniformConstant + 3497: TypePointer UniformConstant 792 +3498(t2DMSArray): 3497(ptr) Variable UniformConstant + 3499(bias): 126(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 3330(result): 63(ptr) Variable Function + 3412(param): 63(ptr) Variable Function + Store 3330(result) 120 + 3331: 7(fvec4) FunctionCall 9(testTexture() + 3332: 7(fvec4) Load 3330(result) + 3333: 7(fvec4) FAdd 3332 3331 + Store 3330(result) 3333 + 3334: 7(fvec4) FunctionCall 11(testTextureProj() + 3335: 7(fvec4) Load 3330(result) + 3336: 7(fvec4) FAdd 3335 3334 + Store 3330(result) 3336 + 3337: 7(fvec4) FunctionCall 13(testTextureLod() + 3338: 7(fvec4) Load 3330(result) + 3339: 7(fvec4) FAdd 3338 3337 + Store 3330(result) 3339 + 3340: 7(fvec4) FunctionCall 15(testTextureOffset() + 3341: 7(fvec4) Load 3330(result) + 3342: 7(fvec4) FAdd 3341 3340 + Store 3330(result) 3342 + 3343: 7(fvec4) FunctionCall 19(testTextureLodOffset() + 3344: 7(fvec4) Load 3330(result) + 3345: 7(fvec4) FAdd 3344 3343 + Store 3330(result) 3345 + 3346: 7(fvec4) FunctionCall 21(testTextureProjLodOffset() + 3347: 7(fvec4) Load 3330(result) + 3348: 7(fvec4) FAdd 3347 3346 + Store 3330(result) 3348 + 3349: 7(fvec4) FunctionCall 23(testTexelFetch() + 3350: 7(fvec4) Load 3330(result) + 3351: 7(fvec4) FAdd 3350 3349 + Store 3330(result) 3351 + 3352: 7(fvec4) FunctionCall 25(testTexelFetchOffset() + 3353: 7(fvec4) Load 3330(result) + 3354: 7(fvec4) FAdd 3353 3352 + Store 3330(result) 3354 + 3355: 7(fvec4) FunctionCall 27(testTextureGrad() + 3356: 7(fvec4) Load 3330(result) + 3357: 7(fvec4) FAdd 3356 3355 + Store 3330(result) 3357 + 3358: 7(fvec4) FunctionCall 29(testTextureGradOffset() + 3359: 7(fvec4) Load 3330(result) + 3360: 7(fvec4) FAdd 3359 3358 + Store 3330(result) 3360 + 3361: 7(fvec4) FunctionCall 31(testTextureProjGrad() + 3362: 7(fvec4) Load 3330(result) + 3363: 7(fvec4) FAdd 3362 3361 + Store 3330(result) 3363 + 3364: 7(fvec4) FunctionCall 33(testTextureProjGradoffset() + 3365: 7(fvec4) Load 3330(result) + 3366: 7(fvec4) FAdd 3365 3364 + Store 3330(result) 3366 + 3367: 7(fvec4) FunctionCall 35(testTextureGather() + 3368: 7(fvec4) Load 3330(result) + 3369: 7(fvec4) FAdd 3368 3367 + Store 3330(result) 3369 + 3370: 7(fvec4) FunctionCall 37(testTextureGatherOffset() + 3371: 7(fvec4) Load 3330(result) + 3372: 7(fvec4) FAdd 3371 3370 + Store 3330(result) 3372 + 3373: 7(fvec4) FunctionCall 39(testTextureGatherOffsets() + 3374: 7(fvec4) Load 3330(result) + 3375: 7(fvec4) FAdd 3374 3373 + Store 3330(result) 3375 + 3376: 7(fvec4) FunctionCall 41(testTextureGatherLod() + 3377: 7(fvec4) Load 3330(result) + 3378: 7(fvec4) FAdd 3377 3376 + Store 3330(result) 3378 + 3379: 7(fvec4) FunctionCall 43(testTextureGatherLodOffset() + 3380: 7(fvec4) Load 3330(result) + 3381: 7(fvec4) FAdd 3380 3379 + Store 3330(result) 3381 + 3382: 7(fvec4) FunctionCall 45(testTextureGatherLodOffsets() + 3383: 7(fvec4) Load 3330(result) + 3384: 7(fvec4) FAdd 3383 3382 + Store 3330(result) 3384 + 3385: 48(ivec4) FunctionCall 50(testTextureSize() + 3386: 7(fvec4) ConvertSToF 3385 + 3387: 7(fvec4) Load 3330(result) + 3388: 7(fvec4) FAdd 3387 3386 + Store 3330(result) 3388 + 3389: 52(fvec2) FunctionCall 54(testTextureQueryLod() + 3390: 7(fvec4) Load 3330(result) + 3391: 52(fvec2) VectorShuffle 3390 3390 0 1 + 3392: 52(fvec2) FAdd 3391 3389 + 3393: 174(ptr) AccessChain 3330(result) 173 + 3394: 6(float) CompositeExtract 3392 0 + Store 3393 3394 + 3395: 174(ptr) AccessChain 3330(result) 1447 + 3396: 6(float) CompositeExtract 3392 1 + Store 3395 3396 + 3397: 47(int) FunctionCall 57(testTextureQueryLevels() + 3398: 6(float) ConvertSToF 3397 + 3399: 174(ptr) AccessChain 3330(result) 173 + 3400: 6(float) Load 3399 + 3401: 6(float) FAdd 3400 3398 + 3402: 174(ptr) AccessChain 3330(result) 173 + Store 3402 3401 + 3403: 47(int) FunctionCall 59(testTextureSamples() + 3404: 6(float) ConvertSToF 3403 + 3405: 174(ptr) AccessChain 3330(result) 173 + 3406: 6(float) Load 3405 + 3407: 6(float) FAdd 3406 3404 + 3408: 174(ptr) AccessChain 3330(result) 173 + Store 3408 3407 + 3409: 7(fvec4) FunctionCall 61(testImageLoad() + 3410: 7(fvec4) Load 3330(result) + 3411: 7(fvec4) FAdd 3410 3409 + Store 3330(result) 3411 + 3413: 7(fvec4) Load 3330(result) + Store 3412(param) 3413 + 3414: 2 FunctionCall 66(testImageStore(vf4;) 3412(param) + 3415: 7(fvec4) FunctionCall 68(testSparseTexture() + 3416: 7(fvec4) Load 3330(result) + 3417: 7(fvec4) FAdd 3416 3415 + Store 3330(result) 3417 + 3418: 7(fvec4) FunctionCall 70(testSparseTextureLod() + 3419: 7(fvec4) Load 3330(result) + 3420: 7(fvec4) FAdd 3419 3418 + Store 3330(result) 3420 + 3421: 7(fvec4) FunctionCall 72(testSparseTextureOffset() + 3422: 7(fvec4) Load 3330(result) + 3423: 7(fvec4) FAdd 3422 3421 + Store 3330(result) 3423 + 3424: 7(fvec4) FunctionCall 74(testSparseTextureLodOffset() + 3425: 7(fvec4) Load 3330(result) + 3426: 7(fvec4) FAdd 3425 3424 + Store 3330(result) 3426 + 3427: 7(fvec4) FunctionCall 76(testSparseTextureGrad() + 3428: 7(fvec4) Load 3330(result) + 3429: 7(fvec4) FAdd 3428 3427 + Store 3330(result) 3429 + 3430: 7(fvec4) FunctionCall 78(testSparseTextureGradOffset() + 3431: 7(fvec4) Load 3330(result) + 3432: 7(fvec4) FAdd 3431 3430 + Store 3330(result) 3432 + 3433: 7(fvec4) FunctionCall 80(testSparseTexelFetch() + 3434: 7(fvec4) Load 3330(result) + 3435: 7(fvec4) FAdd 3434 3433 + Store 3330(result) 3435 + 3436: 7(fvec4) FunctionCall 82(testSparseTexelFetchOffset() + 3437: 7(fvec4) Load 3330(result) + 3438: 7(fvec4) FAdd 3437 3436 + Store 3330(result) 3438 + 3439: 7(fvec4) FunctionCall 84(testSparseTextureGather() + 3440: 7(fvec4) Load 3330(result) + 3441: 7(fvec4) FAdd 3440 3439 + Store 3330(result) 3441 + 3442: 7(fvec4) FunctionCall 86(testSparseTextureGatherOffset() + 3443: 7(fvec4) Load 3330(result) + 3444: 7(fvec4) FAdd 3443 3442 + Store 3330(result) 3444 + 3445: 7(fvec4) FunctionCall 88(testSparseTextureGatherOffsets() + 3446: 7(fvec4) Load 3330(result) + 3447: 7(fvec4) FAdd 3446 3445 + Store 3330(result) 3447 + 3448: 7(fvec4) FunctionCall 90(testSparseTextureGatherLod() + 3449: 7(fvec4) Load 3330(result) + 3450: 7(fvec4) FAdd 3449 3448 + Store 3330(result) 3450 + 3451: 7(fvec4) FunctionCall 92(testSparseTextureGatherLodOffset() + 3452: 7(fvec4) Load 3330(result) + 3453: 7(fvec4) FAdd 3452 3451 + Store 3330(result) 3453 + 3454: 7(fvec4) FunctionCall 94(testSparseTextureGatherLodOffsets() + 3455: 7(fvec4) Load 3330(result) + 3456: 7(fvec4) FAdd 3455 3454 + Store 3330(result) 3456 + 3457: 7(fvec4) FunctionCall 96(testSparseImageLoad() + 3458: 7(fvec4) Load 3330(result) + 3459: 7(fvec4) FAdd 3458 3457 + Store 3330(result) 3459 + 3460: 7(fvec4) FunctionCall 98(testSparseTextureClamp() + 3461: 7(fvec4) Load 3330(result) + 3462: 7(fvec4) FAdd 3461 3460 + Store 3330(result) 3462 + 3463: 7(fvec4) FunctionCall 100(testTextureClamp() + 3464: 7(fvec4) Load 3330(result) + 3465: 7(fvec4) FAdd 3464 3463 + Store 3330(result) 3465 + 3466: 7(fvec4) FunctionCall 102(testSparseTextureOffsetClamp() + 3467: 7(fvec4) Load 3330(result) + 3468: 7(fvec4) FAdd 3467 3466 + Store 3330(result) 3468 + 3469: 7(fvec4) FunctionCall 104(testTextureOffsetClamp() + 3470: 7(fvec4) Load 3330(result) + 3471: 7(fvec4) FAdd 3470 3469 + Store 3330(result) 3471 + 3472: 7(fvec4) FunctionCall 76(testSparseTextureGrad() + 3473: 7(fvec4) Load 3330(result) + 3474: 7(fvec4) FAdd 3473 3472 + Store 3330(result) 3474 + 3475: 7(fvec4) FunctionCall 27(testTextureGrad() + 3476: 7(fvec4) Load 3330(result) + 3477: 7(fvec4) FAdd 3476 3475 + Store 3330(result) 3477 + 3478: 7(fvec4) FunctionCall 110(testSparseTextureGradOffsetClamp() + 3479: 7(fvec4) Load 3330(result) + 3480: 7(fvec4) FAdd 3479 3478 + Store 3330(result) 3480 + 3481: 7(fvec4) FunctionCall 112(testTextureGradOffsetClamp() + 3482: 7(fvec4) Load 3330(result) + 3483: 7(fvec4) FAdd 3482 3481 + Store 3330(result) 3483 + 3484: 7(fvec4) FunctionCall 114(testCombinedTextureSampler() + 3485: 7(fvec4) Load 3330(result) + 3486: 7(fvec4) FAdd 3485 3484 + Store 3330(result) 3486 + 3487: 7(fvec4) FunctionCall 116(testSubpassLoad() + 3488: 7(fvec4) Load 3330(result) + 3489: 7(fvec4) FAdd 3488 3487 + Store 3330(result) 3489 + 3492: 7(fvec4) Load 3330(result) + Store 3491(fragColor) 3492 + Return + FunctionEnd + 9(testTexture(): 7(fvec4) Function None 8 + 10: Label + 118(texel): 63(ptr) Variable Function + Store 118(texel) 120 + 125: 122 Load 124(s1D) + 128: 6(float) Load 127(c1) + 129: 7(fvec4) ImageSampleImplicitLod 125 128 + 130: 7(fvec4) Load 118(texel) + 131: 7(fvec4) FAdd 130 129 + Store 118(texel) 131 + 136: 133 Load 135(s2D) + 139: 52(fvec2) Load 138(c2) + 140: 7(fvec4) ImageSampleImplicitLod 136 139 + 141: 7(fvec4) Load 118(texel) + 142: 7(fvec4) FAdd 141 140 + Store 118(texel) 142 + 147: 144 Load 146(s3D) + 151: 148(fvec3) Load 150(c3) + 152: 7(fvec4) ImageSampleImplicitLod 147 151 + 153: 7(fvec4) Load 118(texel) + 154: 7(fvec4) FAdd 153 152 + Store 118(texel) 154 + 159: 156 Load 158(sCube) + 160: 148(fvec3) Load 150(c3) + 161: 7(fvec4) ImageSampleImplicitLod 159 160 + 162: 7(fvec4) Load 118(texel) + 163: 7(fvec4) FAdd 162 161 + Store 118(texel) 163 + 168: 165 Load 167(s1DShadow) + 169: 148(fvec3) Load 150(c3) + 170: 6(float) CompositeExtract 169 2 + 171: 6(float) ImageSampleDrefImplicitLod 168 169 170 + 175: 174(ptr) AccessChain 118(texel) 173 + 176: 6(float) Load 175 + 177: 6(float) FAdd 176 171 + 178: 174(ptr) AccessChain 118(texel) 173 + Store 178 177 + 183: 180 Load 182(s2DShadow) + 184: 148(fvec3) Load 150(c3) + 185: 6(float) CompositeExtract 184 2 + 186: 6(float) ImageSampleDrefImplicitLod 183 184 185 + 187: 174(ptr) AccessChain 118(texel) 173 + 188: 6(float) Load 187 + 189: 6(float) FAdd 188 186 + 190: 174(ptr) AccessChain 118(texel) 173 + Store 190 189 + 195: 192 Load 194(sCubeShadow) + 198: 7(fvec4) Load 197(c4) + 199: 6(float) CompositeExtract 198 3 + 200: 6(float) ImageSampleDrefImplicitLod 195 198 199 + 201: 174(ptr) AccessChain 118(texel) 173 + 202: 6(float) Load 201 + 203: 6(float) FAdd 202 200 + 204: 174(ptr) AccessChain 118(texel) 173 + Store 204 203 + 209: 206 Load 208(s1DArray) + 210: 52(fvec2) Load 138(c2) + 211: 7(fvec4) ImageSampleImplicitLod 209 210 + 212: 7(fvec4) Load 118(texel) + 213: 7(fvec4) FAdd 212 211 + Store 118(texel) 213 + 218: 215 Load 217(s2DArray) + 219: 148(fvec3) Load 150(c3) + 220: 7(fvec4) ImageSampleImplicitLod 218 219 + 221: 7(fvec4) Load 118(texel) + 222: 7(fvec4) FAdd 221 220 + Store 118(texel) 222 + 227: 224 Load 226(sCubeArray) + 228: 7(fvec4) Load 197(c4) + 229: 7(fvec4) ImageSampleImplicitLod 227 228 + 230: 7(fvec4) Load 118(texel) + 231: 7(fvec4) FAdd 230 229 + Store 118(texel) 231 + 236: 233 Load 235(s1DArrayShadow) + 237: 148(fvec3) Load 150(c3) + 238: 6(float) CompositeExtract 237 2 + 239: 6(float) ImageSampleDrefImplicitLod 236 237 238 + 240: 174(ptr) AccessChain 118(texel) 173 + 241: 6(float) Load 240 + 242: 6(float) FAdd 241 239 + 243: 174(ptr) AccessChain 118(texel) 173 + Store 243 242 + 248: 245 Load 247(s2DArrayShadow) + 249: 7(fvec4) Load 197(c4) + 250: 6(float) CompositeExtract 249 3 + 251: 6(float) ImageSampleDrefImplicitLod 248 249 250 + 252: 174(ptr) AccessChain 118(texel) 173 + 253: 6(float) Load 252 + 254: 6(float) FAdd 253 251 + 255: 174(ptr) AccessChain 118(texel) 173 + Store 255 254 + 260: 257 Load 259(s2DRect) + 261: 52(fvec2) Load 138(c2) + 262: 7(fvec4) ImageSampleImplicitLod 260 261 + 263: 7(fvec4) Load 118(texel) + 264: 7(fvec4) FAdd 263 262 + Store 118(texel) 264 + 269: 266 Load 268(s2DRectShadow) + 270: 148(fvec3) Load 150(c3) + 271: 6(float) CompositeExtract 270 2 + 272: 6(float) ImageSampleDrefImplicitLod 269 270 271 + 273: 174(ptr) AccessChain 118(texel) 173 + 274: 6(float) Load 273 + 275: 6(float) FAdd 274 272 + 276: 174(ptr) AccessChain 118(texel) 173 + Store 276 275 + 281: 278 Load 280(sCubeArrayShadow) + 282: 7(fvec4) Load 197(c4) + 284: 6(float) Load 283(compare) + 285: 6(float) ImageSampleDrefImplicitLod 281 282 284 + 286: 174(ptr) AccessChain 118(texel) 173 + 287: 6(float) Load 286 + 288: 6(float) FAdd 287 285 + 289: 174(ptr) AccessChain 118(texel) 173 + Store 289 288 + 290: 7(fvec4) Load 118(texel) + ReturnValue 290 + FunctionEnd +11(testTextureProj(): 7(fvec4) Function None 8 + 12: Label + 293(texel): 63(ptr) Variable Function + Store 293(texel) 120 + 294: 122 Load 124(s1D) + 295: 52(fvec2) Load 138(c2) + 296: 7(fvec4) ImageSampleProjImplicitLod 294 295 + 297: 7(fvec4) Load 293(texel) + 298: 7(fvec4) FAdd 297 296 + Store 293(texel) 298 + 299: 122 Load 124(s1D) + 300: 7(fvec4) Load 197(c4) + 301: 6(float) CompositeExtract 300 3 + 302: 7(fvec4) CompositeInsert 301 300 1 + 303: 7(fvec4) ImageSampleProjImplicitLod 299 302 + 304: 7(fvec4) Load 293(texel) + 305: 7(fvec4) FAdd 304 303 + Store 293(texel) 305 + 306: 133 Load 135(s2D) + 307: 148(fvec3) Load 150(c3) + 308: 7(fvec4) ImageSampleProjImplicitLod 306 307 + 309: 7(fvec4) Load 293(texel) + 310: 7(fvec4) FAdd 309 308 + Store 293(texel) 310 + 311: 133 Load 135(s2D) + 312: 7(fvec4) Load 197(c4) + 313: 6(float) CompositeExtract 312 3 + 314: 7(fvec4) CompositeInsert 313 312 2 + 315: 7(fvec4) ImageSampleProjImplicitLod 311 314 + 316: 7(fvec4) Load 293(texel) + 317: 7(fvec4) FAdd 316 315 + Store 293(texel) 317 + 318: 144 Load 146(s3D) + 319: 7(fvec4) Load 197(c4) + 320: 7(fvec4) ImageSampleProjImplicitLod 318 319 + 321: 7(fvec4) Load 293(texel) + 322: 7(fvec4) FAdd 321 320 + Store 293(texel) 322 + 323: 165 Load 167(s1DShadow) + 324: 7(fvec4) Load 197(c4) + 325: 6(float) CompositeExtract 324 2 + 326: 6(float) CompositeExtract 324 3 + 327: 7(fvec4) CompositeInsert 326 324 1 + 328: 6(float) ImageSampleProjDrefImplicitLod 323 327 325 + 329: 174(ptr) AccessChain 293(texel) 173 + 330: 6(float) Load 329 + 331: 6(float) FAdd 330 328 + 332: 174(ptr) AccessChain 293(texel) 173 + Store 332 331 + 333: 180 Load 182(s2DShadow) + 334: 7(fvec4) Load 197(c4) + 335: 6(float) CompositeExtract 334 2 + 336: 6(float) CompositeExtract 334 3 + 337: 7(fvec4) CompositeInsert 336 334 2 + 338: 6(float) ImageSampleProjDrefImplicitLod 333 337 335 + 339: 174(ptr) AccessChain 293(texel) 173 + 340: 6(float) Load 339 + 341: 6(float) FAdd 340 338 + 342: 174(ptr) AccessChain 293(texel) 173 + Store 342 341 + 343: 257 Load 259(s2DRect) + 344: 148(fvec3) Load 150(c3) + 345: 7(fvec4) ImageSampleProjImplicitLod 343 344 + 346: 7(fvec4) Load 293(texel) + 347: 7(fvec4) FAdd 346 345 + Store 293(texel) 347 + 348: 257 Load 259(s2DRect) + 349: 7(fvec4) Load 197(c4) + 350: 6(float) CompositeExtract 349 3 + 351: 7(fvec4) CompositeInsert 350 349 2 + 352: 7(fvec4) ImageSampleProjImplicitLod 348 351 + 353: 7(fvec4) Load 293(texel) + 354: 7(fvec4) FAdd 353 352 + Store 293(texel) 354 + 355: 266 Load 268(s2DRectShadow) + 356: 7(fvec4) Load 197(c4) + 357: 6(float) CompositeExtract 356 2 + 358: 6(float) CompositeExtract 356 3 + 359: 7(fvec4) CompositeInsert 358 356 2 + 360: 6(float) ImageSampleProjDrefImplicitLod 355 359 357 + 361: 174(ptr) AccessChain 293(texel) 173 + 362: 6(float) Load 361 + 363: 6(float) FAdd 362 360 + 364: 174(ptr) AccessChain 293(texel) 173 + Store 364 363 + 365: 7(fvec4) Load 293(texel) + ReturnValue 365 + FunctionEnd +13(testTextureLod(): 7(fvec4) Function None 8 + 14: Label + 368(texel): 63(ptr) Variable Function + Store 368(texel) 120 + 369: 122 Load 124(s1D) + 370: 6(float) Load 127(c1) + 372: 6(float) Load 371(lod) + 373: 7(fvec4) ImageSampleExplicitLod 369 370 Lod 372 + 374: 7(fvec4) Load 368(texel) + 375: 7(fvec4) FAdd 374 373 + Store 368(texel) 375 + 376: 133 Load 135(s2D) + 377: 52(fvec2) Load 138(c2) + 378: 6(float) Load 371(lod) + 379: 7(fvec4) ImageSampleExplicitLod 376 377 Lod 378 + 380: 7(fvec4) Load 368(texel) + 381: 7(fvec4) FAdd 380 379 + Store 368(texel) 381 + 382: 144 Load 146(s3D) + 383: 148(fvec3) Load 150(c3) + 384: 6(float) Load 371(lod) + 385: 7(fvec4) ImageSampleExplicitLod 382 383 Lod 384 + 386: 7(fvec4) Load 368(texel) + 387: 7(fvec4) FAdd 386 385 + Store 368(texel) 387 + 388: 156 Load 158(sCube) + 389: 148(fvec3) Load 150(c3) + 390: 6(float) Load 371(lod) + 391: 7(fvec4) ImageSampleExplicitLod 388 389 Lod 390 + 392: 7(fvec4) Load 368(texel) + 393: 7(fvec4) FAdd 392 391 + Store 368(texel) 393 + 394: 165 Load 167(s1DShadow) + 395: 148(fvec3) Load 150(c3) + 396: 6(float) Load 371(lod) + 397: 6(float) CompositeExtract 395 2 + 398: 6(float) ImageSampleDrefExplicitLod 394 395 397 Lod 396 + 399: 174(ptr) AccessChain 368(texel) 173 + 400: 6(float) Load 399 + 401: 6(float) FAdd 400 398 + 402: 174(ptr) AccessChain 368(texel) 173 + Store 402 401 + 403: 180 Load 182(s2DShadow) + 404: 148(fvec3) Load 150(c3) + 405: 6(float) Load 371(lod) + 406: 6(float) CompositeExtract 404 2 + 407: 6(float) ImageSampleDrefExplicitLod 403 404 406 Lod 405 + 408: 174(ptr) AccessChain 368(texel) 173 + 409: 6(float) Load 408 + 410: 6(float) FAdd 409 407 + 411: 174(ptr) AccessChain 368(texel) 173 + Store 411 410 + 412: 206 Load 208(s1DArray) + 413: 52(fvec2) Load 138(c2) + 414: 6(float) Load 371(lod) + 415: 7(fvec4) ImageSampleExplicitLod 412 413 Lod 414 + 416: 7(fvec4) Load 368(texel) + 417: 7(fvec4) FAdd 416 415 + Store 368(texel) 417 + 418: 215 Load 217(s2DArray) + 419: 148(fvec3) Load 150(c3) + 420: 6(float) Load 371(lod) + 421: 7(fvec4) ImageSampleExplicitLod 418 419 Lod 420 + 422: 7(fvec4) Load 368(texel) + 423: 7(fvec4) FAdd 422 421 + Store 368(texel) 423 + 424: 233 Load 235(s1DArrayShadow) + 425: 148(fvec3) Load 150(c3) + 426: 6(float) Load 371(lod) + 427: 6(float) CompositeExtract 425 2 + 428: 6(float) ImageSampleDrefExplicitLod 424 425 427 Lod 426 + 429: 174(ptr) AccessChain 368(texel) 173 + 430: 6(float) Load 429 + 431: 6(float) FAdd 430 428 + 432: 174(ptr) AccessChain 368(texel) 173 + Store 432 431 + 433: 224 Load 226(sCubeArray) + 434: 7(fvec4) Load 197(c4) + 435: 6(float) Load 371(lod) + 436: 7(fvec4) ImageSampleExplicitLod 433 434 Lod 435 + 437: 7(fvec4) Load 368(texel) + 438: 7(fvec4) FAdd 437 436 + Store 368(texel) 438 + 439: 7(fvec4) Load 368(texel) + ReturnValue 439 + FunctionEnd +15(testTextureOffset(): 7(fvec4) Function None 8 + 16: Label + 442(texel): 63(ptr) Variable Function + Store 442(texel) 120 + 443: 122 Load 124(s1D) + 444: 6(float) Load 127(c1) + 446: 7(fvec4) ImageSampleImplicitLod 443 444 ConstOffset 445 + 447: 7(fvec4) Load 442(texel) + 448: 7(fvec4) FAdd 447 446 + Store 442(texel) 448 + 449: 133 Load 135(s2D) + 450: 52(fvec2) Load 138(c2) + 453: 7(fvec4) ImageSampleImplicitLod 449 450 ConstOffset 452 + 454: 7(fvec4) Load 442(texel) + 455: 7(fvec4) FAdd 454 453 + Store 442(texel) 455 + 456: 144 Load 146(s3D) + 457: 148(fvec3) Load 150(c3) + 460: 7(fvec4) ImageSampleImplicitLod 456 457 ConstOffset 459 + 461: 7(fvec4) Load 442(texel) + 462: 7(fvec4) FAdd 461 460 + Store 442(texel) 462 + 463: 257 Load 259(s2DRect) + 464: 52(fvec2) Load 138(c2) + 465: 7(fvec4) ImageSampleImplicitLod 463 464 ConstOffset 452 + 466: 7(fvec4) Load 442(texel) + 467: 7(fvec4) FAdd 466 465 + Store 442(texel) 467 + 468: 266 Load 268(s2DRectShadow) + 469: 148(fvec3) Load 150(c3) + 470: 6(float) CompositeExtract 469 2 + 471: 6(float) ImageSampleDrefImplicitLod 468 469 470 ConstOffset 452 + 472: 174(ptr) AccessChain 442(texel) 173 + 473: 6(float) Load 472 + 474: 6(float) FAdd 473 471 + 475: 174(ptr) AccessChain 442(texel) 173 + Store 475 474 + 476: 165 Load 167(s1DShadow) + 477: 148(fvec3) Load 150(c3) + 478: 6(float) CompositeExtract 477 2 + 479: 6(float) ImageSampleDrefImplicitLod 476 477 478 ConstOffset 445 + 480: 174(ptr) AccessChain 442(texel) 173 + 481: 6(float) Load 480 + 482: 6(float) FAdd 481 479 + 483: 174(ptr) AccessChain 442(texel) 173 + Store 483 482 + 484: 180 Load 182(s2DShadow) + 485: 148(fvec3) Load 150(c3) + 486: 6(float) CompositeExtract 485 2 + 487: 6(float) ImageSampleDrefImplicitLod 484 485 486 ConstOffset 452 + 488: 174(ptr) AccessChain 442(texel) 173 + 489: 6(float) Load 488 + 490: 6(float) FAdd 489 487 + 491: 174(ptr) AccessChain 442(texel) 173 + Store 491 490 + 492: 206 Load 208(s1DArray) + 493: 52(fvec2) Load 138(c2) + 494: 7(fvec4) ImageSampleImplicitLod 492 493 ConstOffset 445 + 495: 7(fvec4) Load 442(texel) + 496: 7(fvec4) FAdd 495 494 + Store 442(texel) 496 + 497: 215 Load 217(s2DArray) + 498: 148(fvec3) Load 150(c3) + 499: 7(fvec4) ImageSampleImplicitLod 497 498 ConstOffset 452 + 500: 7(fvec4) Load 442(texel) + 501: 7(fvec4) FAdd 500 499 + Store 442(texel) 501 + 502: 233 Load 235(s1DArrayShadow) + 503: 148(fvec3) Load 150(c3) + 504: 6(float) CompositeExtract 503 2 + 505: 6(float) ImageSampleDrefImplicitLod 502 503 504 ConstOffset 445 + 506: 174(ptr) AccessChain 442(texel) 173 + 507: 6(float) Load 506 + 508: 6(float) FAdd 507 505 + 509: 174(ptr) AccessChain 442(texel) 173 + Store 509 508 + 510: 245 Load 247(s2DArrayShadow) + 511: 7(fvec4) Load 197(c4) + 512: 6(float) CompositeExtract 511 3 + 513: 6(float) ImageSampleDrefImplicitLod 510 511 512 ConstOffset 452 + 514: 174(ptr) AccessChain 442(texel) 173 + 515: 6(float) Load 514 + 516: 6(float) FAdd 515 513 + 517: 174(ptr) AccessChain 442(texel) 173 + Store 517 516 + 518: 7(fvec4) Load 442(texel) + ReturnValue 518 + FunctionEnd +17(testTextureProjOffset(): 7(fvec4) Function None 8 + 18: Label + 521(texel): 63(ptr) Variable Function + Store 521(texel) 120 + 522: 122 Load 124(s1D) + 523: 52(fvec2) Load 138(c2) + 524: 7(fvec4) ImageSampleProjImplicitLod 522 523 ConstOffset 445 + 525: 7(fvec4) Load 521(texel) + 526: 7(fvec4) FAdd 525 524 + Store 521(texel) 526 + 527: 122 Load 124(s1D) + 528: 7(fvec4) Load 197(c4) + 529: 6(float) CompositeExtract 528 3 + 530: 7(fvec4) CompositeInsert 529 528 1 + 531: 7(fvec4) ImageSampleProjImplicitLod 527 530 ConstOffset 445 + 532: 7(fvec4) Load 521(texel) + 533: 7(fvec4) FAdd 532 531 + Store 521(texel) 533 + 534: 133 Load 135(s2D) + 535: 148(fvec3) Load 150(c3) + 536: 7(fvec4) ImageSampleProjImplicitLod 534 535 ConstOffset 452 + 537: 7(fvec4) Load 521(texel) + 538: 7(fvec4) FAdd 537 536 + Store 521(texel) 538 + 539: 133 Load 135(s2D) + 540: 7(fvec4) Load 197(c4) + 541: 6(float) CompositeExtract 540 3 + 542: 7(fvec4) CompositeInsert 541 540 2 + 543: 7(fvec4) ImageSampleProjImplicitLod 539 542 ConstOffset 452 + 544: 7(fvec4) Load 521(texel) + 545: 7(fvec4) FAdd 544 543 + Store 521(texel) 545 + 546: 144 Load 146(s3D) + 547: 7(fvec4) Load 197(c4) + 548: 7(fvec4) ImageSampleProjImplicitLod 546 547 ConstOffset 459 + 549: 7(fvec4) Load 521(texel) + 550: 7(fvec4) FAdd 549 548 + Store 521(texel) 550 + 551: 257 Load 259(s2DRect) + 552: 148(fvec3) Load 150(c3) + 553: 7(fvec4) ImageSampleProjImplicitLod 551 552 ConstOffset 452 + 554: 7(fvec4) Load 521(texel) + 555: 7(fvec4) FAdd 554 553 + Store 521(texel) 555 + 556: 257 Load 259(s2DRect) + 557: 7(fvec4) Load 197(c4) + 558: 6(float) CompositeExtract 557 3 + 559: 7(fvec4) CompositeInsert 558 557 2 + 560: 7(fvec4) ImageSampleProjImplicitLod 556 559 ConstOffset 452 + 561: 7(fvec4) Load 521(texel) + 562: 7(fvec4) FAdd 561 560 + Store 521(texel) 562 + 563: 266 Load 268(s2DRectShadow) + 564: 7(fvec4) Load 197(c4) + 565: 6(float) CompositeExtract 564 2 + 566: 6(float) CompositeExtract 564 3 + 567: 7(fvec4) CompositeInsert 566 564 2 + 568: 6(float) ImageSampleProjDrefImplicitLod 563 567 565 ConstOffset 452 + 569: 174(ptr) AccessChain 521(texel) 173 + 570: 6(float) Load 569 + 571: 6(float) FAdd 570 568 + 572: 174(ptr) AccessChain 521(texel) 173 + Store 572 571 + 573: 165 Load 167(s1DShadow) + 574: 7(fvec4) Load 197(c4) + 575: 6(float) CompositeExtract 574 2 + 576: 6(float) CompositeExtract 574 3 + 577: 7(fvec4) CompositeInsert 576 574 1 + 578: 6(float) ImageSampleProjDrefImplicitLod 573 577 575 ConstOffset 445 + 579: 174(ptr) AccessChain 521(texel) 173 + 580: 6(float) Load 579 + 581: 6(float) FAdd 580 578 + 582: 174(ptr) AccessChain 521(texel) 173 + Store 582 581 + 583: 180 Load 182(s2DShadow) + 584: 7(fvec4) Load 197(c4) + 585: 6(float) CompositeExtract 584 2 + 586: 6(float) CompositeExtract 584 3 + 587: 7(fvec4) CompositeInsert 586 584 2 + 588: 6(float) ImageSampleProjDrefImplicitLod 583 587 585 ConstOffset 452 + 589: 174(ptr) AccessChain 521(texel) 173 + 590: 6(float) Load 589 + 591: 6(float) FAdd 590 588 + 592: 174(ptr) AccessChain 521(texel) 173 + Store 592 591 + 593: 7(fvec4) Load 521(texel) + ReturnValue 593 + FunctionEnd +19(testTextureLodOffset(): 7(fvec4) Function None 8 + 20: Label + 596(texel): 63(ptr) Variable Function + Store 596(texel) 120 + 597: 122 Load 124(s1D) + 598: 6(float) Load 127(c1) + 599: 6(float) Load 371(lod) + 600: 7(fvec4) ImageSampleExplicitLod 597 598 Lod ConstOffset 599 445 + 601: 7(fvec4) Load 596(texel) + 602: 7(fvec4) FAdd 601 600 + Store 596(texel) 602 + 603: 133 Load 135(s2D) + 604: 52(fvec2) Load 138(c2) + 605: 6(float) Load 371(lod) + 606: 7(fvec4) ImageSampleExplicitLod 603 604 Lod ConstOffset 605 452 + 607: 7(fvec4) Load 596(texel) + 608: 7(fvec4) FAdd 607 606 + Store 596(texel) 608 + 609: 144 Load 146(s3D) + 610: 148(fvec3) Load 150(c3) + 611: 6(float) Load 371(lod) + 612: 7(fvec4) ImageSampleExplicitLod 609 610 Lod ConstOffset 611 459 + 613: 7(fvec4) Load 596(texel) + 614: 7(fvec4) FAdd 613 612 + Store 596(texel) 614 + 615: 165 Load 167(s1DShadow) + 616: 148(fvec3) Load 150(c3) + 617: 6(float) Load 371(lod) + 618: 6(float) CompositeExtract 616 2 + 619: 6(float) ImageSampleDrefExplicitLod 615 616 618 Lod ConstOffset 617 445 + 620: 174(ptr) AccessChain 596(texel) 173 + 621: 6(float) Load 620 + 622: 6(float) FAdd 621 619 + 623: 174(ptr) AccessChain 596(texel) 173 + Store 623 622 + 624: 180 Load 182(s2DShadow) + 625: 148(fvec3) Load 150(c3) + 626: 6(float) Load 371(lod) + 627: 6(float) CompositeExtract 625 2 + 628: 6(float) ImageSampleDrefExplicitLod 624 625 627 Lod ConstOffset 626 452 + 629: 174(ptr) AccessChain 596(texel) 173 + 630: 6(float) Load 629 + 631: 6(float) FAdd 630 628 + 632: 174(ptr) AccessChain 596(texel) 173 + Store 632 631 + 633: 206 Load 208(s1DArray) + 634: 52(fvec2) Load 138(c2) + 635: 6(float) Load 371(lod) + 636: 7(fvec4) ImageSampleExplicitLod 633 634 Lod ConstOffset 635 445 + 637: 7(fvec4) Load 596(texel) + 638: 7(fvec4) FAdd 637 636 + Store 596(texel) 638 + 639: 215 Load 217(s2DArray) + 640: 148(fvec3) Load 150(c3) + 641: 6(float) Load 371(lod) + 642: 7(fvec4) ImageSampleExplicitLod 639 640 Lod ConstOffset 641 452 + 643: 7(fvec4) Load 596(texel) + 644: 7(fvec4) FAdd 643 642 + Store 596(texel) 644 + 645: 233 Load 235(s1DArrayShadow) + 646: 148(fvec3) Load 150(c3) + 647: 6(float) Load 371(lod) + 648: 6(float) CompositeExtract 646 2 + 649: 6(float) ImageSampleDrefExplicitLod 645 646 648 Lod ConstOffset 647 445 + 650: 174(ptr) AccessChain 596(texel) 173 + 651: 6(float) Load 650 + 652: 6(float) FAdd 651 649 + 653: 174(ptr) AccessChain 596(texel) 173 + Store 653 652 + 654: 7(fvec4) Load 596(texel) + ReturnValue 654 + FunctionEnd +21(testTextureProjLodOffset(): 7(fvec4) Function None 8 + 22: Label + 657(texel): 63(ptr) Variable Function + Store 657(texel) 120 + 658: 122 Load 124(s1D) + 659: 52(fvec2) Load 138(c2) + 660: 6(float) Load 371(lod) + 661: 7(fvec4) ImageSampleProjExplicitLod 658 659 Lod ConstOffset 660 445 + 662: 7(fvec4) Load 657(texel) + 663: 7(fvec4) FAdd 662 661 + Store 657(texel) 663 + 664: 122 Load 124(s1D) + 665: 7(fvec4) Load 197(c4) + 666: 6(float) Load 371(lod) + 667: 6(float) CompositeExtract 665 3 + 668: 7(fvec4) CompositeInsert 667 665 1 + 669: 7(fvec4) ImageSampleProjExplicitLod 664 668 Lod ConstOffset 666 445 + 670: 7(fvec4) Load 657(texel) + 671: 7(fvec4) FAdd 670 669 + Store 657(texel) 671 + 672: 133 Load 135(s2D) + 673: 148(fvec3) Load 150(c3) + 674: 6(float) Load 371(lod) + 675: 7(fvec4) ImageSampleProjExplicitLod 672 673 Lod ConstOffset 674 452 + 676: 7(fvec4) Load 657(texel) + 677: 7(fvec4) FAdd 676 675 + Store 657(texel) 677 + 678: 133 Load 135(s2D) + 679: 7(fvec4) Load 197(c4) + 680: 6(float) Load 371(lod) + 681: 6(float) CompositeExtract 679 3 + 682: 7(fvec4) CompositeInsert 681 679 2 + 683: 7(fvec4) ImageSampleProjExplicitLod 678 682 Lod ConstOffset 680 452 + 684: 7(fvec4) Load 657(texel) + 685: 7(fvec4) FAdd 684 683 + Store 657(texel) 685 + 686: 144 Load 146(s3D) + 687: 7(fvec4) Load 197(c4) + 688: 6(float) Load 371(lod) + 689: 7(fvec4) ImageSampleProjExplicitLod 686 687 Lod ConstOffset 688 459 + 690: 7(fvec4) Load 657(texel) + 691: 7(fvec4) FAdd 690 689 + Store 657(texel) 691 + 692: 165 Load 167(s1DShadow) + 693: 7(fvec4) Load 197(c4) + 694: 6(float) Load 371(lod) + 695: 6(float) CompositeExtract 693 2 + 696: 6(float) CompositeExtract 693 3 + 697: 7(fvec4) CompositeInsert 696 693 1 + 698: 6(float) ImageSampleProjDrefExplicitLod 692 697 695 Lod ConstOffset 694 445 + 699: 174(ptr) AccessChain 657(texel) 173 + 700: 6(float) Load 699 + 701: 6(float) FAdd 700 698 + 702: 174(ptr) AccessChain 657(texel) 173 + Store 702 701 + 703: 180 Load 182(s2DShadow) + 704: 7(fvec4) Load 197(c4) + 705: 6(float) Load 371(lod) + 706: 6(float) CompositeExtract 704 2 + 707: 6(float) CompositeExtract 704 3 + 708: 7(fvec4) CompositeInsert 707 704 2 + 709: 6(float) ImageSampleProjDrefExplicitLod 703 708 706 Lod ConstOffset 705 452 + 710: 174(ptr) AccessChain 657(texel) 173 + 711: 6(float) Load 710 + 712: 6(float) FAdd 711 709 + 713: 174(ptr) AccessChain 657(texel) 173 + Store 713 712 + 714: 7(fvec4) Load 657(texel) + ReturnValue 714 + FunctionEnd +23(testTexelFetch(): 7(fvec4) Function None 8 + 24: Label + 717(texel): 63(ptr) Variable Function + Store 717(texel) 120 + 718: 122 Load 124(s1D) + 719: 6(float) Load 127(c1) + 720: 47(int) ConvertFToS 719 + 721: 6(float) Load 371(lod) + 722: 47(int) ConvertFToS 721 + 723: 121 Image 718 + 724: 7(fvec4) ImageFetch 723 720 Lod 722 + 725: 7(fvec4) Load 717(texel) + 726: 7(fvec4) FAdd 725 724 + Store 717(texel) 726 + 727: 133 Load 135(s2D) + 728: 52(fvec2) Load 138(c2) + 729: 451(ivec2) ConvertFToS 728 + 730: 6(float) Load 371(lod) + 731: 47(int) ConvertFToS 730 + 732: 132 Image 727 + 733: 7(fvec4) ImageFetch 732 729 Lod 731 + 734: 7(fvec4) Load 717(texel) + 735: 7(fvec4) FAdd 734 733 + Store 717(texel) 735 + 736: 144 Load 146(s3D) + 737: 148(fvec3) Load 150(c3) + 738: 458(ivec3) ConvertFToS 737 + 739: 6(float) Load 371(lod) + 740: 47(int) ConvertFToS 739 + 741: 143 Image 736 + 742: 7(fvec4) ImageFetch 741 738 Lod 740 + 743: 7(fvec4) Load 717(texel) + 744: 7(fvec4) FAdd 743 742 + Store 717(texel) 744 + 745: 257 Load 259(s2DRect) + 746: 52(fvec2) Load 138(c2) + 747: 451(ivec2) ConvertFToS 746 + 748: 256 Image 745 + 749: 7(fvec4) ImageFetch 748 747 + 750: 7(fvec4) Load 717(texel) + 751: 7(fvec4) FAdd 750 749 + Store 717(texel) 751 + 752: 206 Load 208(s1DArray) + 753: 52(fvec2) Load 138(c2) + 754: 451(ivec2) ConvertFToS 753 + 755: 6(float) Load 371(lod) + 756: 47(int) ConvertFToS 755 + 757: 205 Image 752 + 758: 7(fvec4) ImageFetch 757 754 Lod 756 + 759: 7(fvec4) Load 717(texel) + 760: 7(fvec4) FAdd 759 758 + Store 717(texel) 760 + 761: 215 Load 217(s2DArray) + 762: 148(fvec3) Load 150(c3) + 763: 458(ivec3) ConvertFToS 762 + 764: 6(float) Load 371(lod) + 765: 47(int) ConvertFToS 764 + 766: 214 Image 761 + 767: 7(fvec4) ImageFetch 766 763 Lod 765 + 768: 7(fvec4) Load 717(texel) + 769: 7(fvec4) FAdd 768 767 + Store 717(texel) 769 + 774: 771 Load 773(sBuffer) + 775: 6(float) Load 127(c1) + 776: 47(int) ConvertFToS 775 + 777: 770 Image 774 + 778: 7(fvec4) ImageFetch 777 776 + 779: 7(fvec4) Load 717(texel) + 780: 7(fvec4) FAdd 779 778 + Store 717(texel) 780 + 785: 782 Load 784(s2DMS) + 786: 52(fvec2) Load 138(c2) + 787: 451(ivec2) ConvertFToS 786 + 788: 781 Image 785 + 789: 7(fvec4) ImageFetch 788 787 Sample 445 + 790: 7(fvec4) Load 717(texel) + 791: 7(fvec4) FAdd 790 789 + Store 717(texel) 791 + 796: 793 Load 795(s2DMSArray) + 797: 148(fvec3) Load 150(c3) + 798: 458(ivec3) ConvertFToS 797 + 800: 792 Image 796 + 801: 7(fvec4) ImageFetch 800 798 Sample 799 + 802: 7(fvec4) Load 717(texel) + 803: 7(fvec4) FAdd 802 801 + Store 717(texel) 803 + 804: 7(fvec4) Load 717(texel) + ReturnValue 804 + FunctionEnd +25(testTexelFetchOffset(): 7(fvec4) Function None 8 + 26: Label + 807(texel): 63(ptr) Variable Function + Store 807(texel) 120 + 808: 122 Load 124(s1D) + 809: 6(float) Load 127(c1) + 810: 47(int) ConvertFToS 809 + 811: 6(float) Load 371(lod) + 812: 47(int) ConvertFToS 811 + 813: 121 Image 808 + 814: 7(fvec4) ImageFetch 813 810 Lod ConstOffset 812 445 + 815: 7(fvec4) Load 807(texel) + 816: 7(fvec4) FAdd 815 814 + Store 807(texel) 816 + 817: 133 Load 135(s2D) + 818: 52(fvec2) Load 138(c2) + 819: 451(ivec2) ConvertFToS 818 + 820: 6(float) Load 371(lod) + 821: 47(int) ConvertFToS 820 + 822: 132 Image 817 + 823: 7(fvec4) ImageFetch 822 819 Lod ConstOffset 821 452 + 824: 7(fvec4) Load 807(texel) + 825: 7(fvec4) FAdd 824 823 + Store 807(texel) 825 + 826: 144 Load 146(s3D) + 827: 148(fvec3) Load 150(c3) + 828: 458(ivec3) ConvertFToS 827 + 829: 6(float) Load 371(lod) + 830: 47(int) ConvertFToS 829 + 831: 143 Image 826 + 832: 7(fvec4) ImageFetch 831 828 Lod ConstOffset 830 459 + 833: 7(fvec4) Load 807(texel) + 834: 7(fvec4) FAdd 833 832 + Store 807(texel) 834 + 835: 257 Load 259(s2DRect) + 836: 52(fvec2) Load 138(c2) + 837: 451(ivec2) ConvertFToS 836 + 838: 256 Image 835 + 839: 7(fvec4) ImageFetch 838 837 ConstOffset 452 + 840: 7(fvec4) Load 807(texel) + 841: 7(fvec4) FAdd 840 839 + Store 807(texel) 841 + 842: 206 Load 208(s1DArray) + 843: 52(fvec2) Load 138(c2) + 844: 451(ivec2) ConvertFToS 843 + 845: 6(float) Load 371(lod) + 846: 47(int) ConvertFToS 845 + 847: 205 Image 842 + 848: 7(fvec4) ImageFetch 847 844 Lod ConstOffset 846 445 + 849: 7(fvec4) Load 807(texel) + 850: 7(fvec4) FAdd 849 848 + Store 807(texel) 850 + 851: 215 Load 217(s2DArray) + 852: 148(fvec3) Load 150(c3) + 853: 458(ivec3) ConvertFToS 852 + 854: 6(float) Load 371(lod) + 855: 47(int) ConvertFToS 854 + 856: 214 Image 851 + 857: 7(fvec4) ImageFetch 856 853 Lod ConstOffset 855 452 + 858: 7(fvec4) Load 807(texel) + 859: 7(fvec4) FAdd 858 857 + Store 807(texel) 859 + 860: 7(fvec4) Load 807(texel) + ReturnValue 860 + FunctionEnd +27(testTextureGrad(): 7(fvec4) Function None 8 + 28: Label + 863(texel): 63(ptr) Variable Function + Store 863(texel) 120 + 864: 122 Load 124(s1D) + 865: 6(float) Load 127(c1) + 867: 6(float) Load 866(dPdxy1) + 868: 7(fvec4) ImageSampleExplicitLod 864 865 Grad 867 867 + 869: 7(fvec4) Load 863(texel) + 870: 7(fvec4) FAdd 869 868 + Store 863(texel) 870 + 871: 133 Load 135(s2D) + 872: 52(fvec2) Load 138(c2) + 874: 52(fvec2) Load 873(dPdxy2) + 875: 7(fvec4) ImageSampleExplicitLod 871 872 Grad 874 874 + 876: 7(fvec4) Load 863(texel) + 877: 7(fvec4) FAdd 876 875 + Store 863(texel) 877 + 878: 144 Load 146(s3D) + 879: 148(fvec3) Load 150(c3) + 881: 148(fvec3) Load 880(dPdxy3) + 882: 7(fvec4) ImageSampleExplicitLod 878 879 Grad 881 881 + 883: 7(fvec4) Load 863(texel) + 884: 7(fvec4) FAdd 883 882 + Store 863(texel) 884 + 885: 156 Load 158(sCube) + 886: 148(fvec3) Load 150(c3) + 887: 148(fvec3) Load 880(dPdxy3) + 888: 7(fvec4) ImageSampleExplicitLod 885 886 Grad 887 887 + 889: 7(fvec4) Load 863(texel) + 890: 7(fvec4) FAdd 889 888 + Store 863(texel) 890 + 891: 257 Load 259(s2DRect) + 892: 52(fvec2) Load 138(c2) + 893: 52(fvec2) Load 873(dPdxy2) + 894: 7(fvec4) ImageSampleExplicitLod 891 892 Grad 893 893 + 895: 7(fvec4) Load 863(texel) + 896: 7(fvec4) FAdd 895 894 + Store 863(texel) 896 + 897: 266 Load 268(s2DRectShadow) + 898: 148(fvec3) Load 150(c3) + 899: 52(fvec2) Load 873(dPdxy2) + 900: 6(float) CompositeExtract 898 2 + 901: 6(float) ImageSampleDrefExplicitLod 897 898 900 Grad 899 899 + 902: 174(ptr) AccessChain 863(texel) 173 + 903: 6(float) Load 902 + 904: 6(float) FAdd 903 901 + 905: 174(ptr) AccessChain 863(texel) 173 + Store 905 904 + 906: 165 Load 167(s1DShadow) + 907: 148(fvec3) Load 150(c3) + 908: 6(float) Load 866(dPdxy1) + 909: 6(float) CompositeExtract 907 2 + 910: 6(float) ImageSampleDrefExplicitLod 906 907 909 Grad 908 908 + 911: 174(ptr) AccessChain 863(texel) 173 + 912: 6(float) Load 911 + 913: 6(float) FAdd 912 910 + 914: 174(ptr) AccessChain 863(texel) 173 + Store 914 913 + 915: 180 Load 182(s2DShadow) + 916: 148(fvec3) Load 150(c3) + 917: 52(fvec2) Load 873(dPdxy2) + 918: 6(float) CompositeExtract 916 2 + 919: 6(float) ImageSampleDrefExplicitLod 915 916 918 Grad 917 917 + 920: 174(ptr) AccessChain 863(texel) 173 + 921: 6(float) Load 920 + 922: 6(float) FAdd 921 919 + 923: 174(ptr) AccessChain 863(texel) 173 + Store 923 922 + 924: 192 Load 194(sCubeShadow) + 925: 7(fvec4) Load 197(c4) + 926: 148(fvec3) Load 880(dPdxy3) + 927: 6(float) CompositeExtract 925 3 + 928: 6(float) ImageSampleDrefExplicitLod 924 925 927 Grad 926 926 + 929: 174(ptr) AccessChain 863(texel) 173 + 930: 6(float) Load 929 + 931: 6(float) FAdd 930 928 + 932: 174(ptr) AccessChain 863(texel) 173 + Store 932 931 + 933: 206 Load 208(s1DArray) + 934: 52(fvec2) Load 138(c2) + 935: 6(float) Load 866(dPdxy1) + 936: 7(fvec4) ImageSampleExplicitLod 933 934 Grad 935 935 + 937: 7(fvec4) Load 863(texel) + 938: 7(fvec4) FAdd 937 936 + Store 863(texel) 938 + 939: 215 Load 217(s2DArray) + 940: 148(fvec3) Load 150(c3) + 941: 52(fvec2) Load 873(dPdxy2) + 942: 7(fvec4) ImageSampleExplicitLod 939 940 Grad 941 941 + 943: 7(fvec4) Load 863(texel) + 944: 7(fvec4) FAdd 943 942 + Store 863(texel) 944 + 945: 233 Load 235(s1DArrayShadow) + 946: 148(fvec3) Load 150(c3) + 947: 6(float) Load 866(dPdxy1) + 948: 6(float) CompositeExtract 946 2 + 949: 6(float) ImageSampleDrefExplicitLod 945 946 948 Grad 947 947 + 950: 174(ptr) AccessChain 863(texel) 173 + 951: 6(float) Load 950 + 952: 6(float) FAdd 951 949 + 953: 174(ptr) AccessChain 863(texel) 173 + Store 953 952 + 954: 245 Load 247(s2DArrayShadow) + 955: 7(fvec4) Load 197(c4) + 956: 52(fvec2) Load 873(dPdxy2) + 957: 6(float) CompositeExtract 955 3 + 958: 6(float) ImageSampleDrefExplicitLod 954 955 957 Grad 956 956 + 959: 174(ptr) AccessChain 863(texel) 173 + 960: 6(float) Load 959 + 961: 6(float) FAdd 960 958 + 962: 174(ptr) AccessChain 863(texel) 173 + Store 962 961 + 963: 224 Load 226(sCubeArray) + 964: 7(fvec4) Load 197(c4) + 965: 148(fvec3) Load 880(dPdxy3) + 966: 7(fvec4) ImageSampleExplicitLod 963 964 Grad 965 965 + 967: 7(fvec4) Load 863(texel) + 968: 7(fvec4) FAdd 967 966 + Store 863(texel) 968 + 969: 7(fvec4) Load 863(texel) + ReturnValue 969 + FunctionEnd +29(testTextureGradOffset(): 7(fvec4) Function None 8 + 30: Label + 972(texel): 63(ptr) Variable Function + Store 972(texel) 120 + 973: 122 Load 124(s1D) + 974: 6(float) Load 127(c1) + 975: 6(float) Load 866(dPdxy1) + 976: 7(fvec4) ImageSampleExplicitLod 973 974 Grad ConstOffset 975 975 445 + 977: 7(fvec4) Load 972(texel) + 978: 7(fvec4) FAdd 977 976 + Store 972(texel) 978 + 979: 133 Load 135(s2D) + 980: 52(fvec2) Load 138(c2) + 981: 52(fvec2) Load 873(dPdxy2) + 982: 7(fvec4) ImageSampleExplicitLod 979 980 Grad ConstOffset 981 981 452 + 983: 7(fvec4) Load 972(texel) + 984: 7(fvec4) FAdd 983 982 + Store 972(texel) 984 + 985: 144 Load 146(s3D) + 986: 148(fvec3) Load 150(c3) + 987: 148(fvec3) Load 880(dPdxy3) + 988: 7(fvec4) ImageSampleExplicitLod 985 986 Grad ConstOffset 987 987 459 + 989: 7(fvec4) Load 972(texel) + 990: 7(fvec4) FAdd 989 988 + Store 972(texel) 990 + 991: 257 Load 259(s2DRect) + 992: 52(fvec2) Load 138(c2) + 993: 52(fvec2) Load 873(dPdxy2) + 994: 7(fvec4) ImageSampleExplicitLod 991 992 Grad ConstOffset 993 993 452 + 995: 7(fvec4) Load 972(texel) + 996: 7(fvec4) FAdd 995 994 + Store 972(texel) 996 + 997: 266 Load 268(s2DRectShadow) + 998: 148(fvec3) Load 150(c3) + 999: 52(fvec2) Load 873(dPdxy2) + 1000: 6(float) CompositeExtract 998 2 + 1001: 6(float) ImageSampleDrefExplicitLod 997 998 1000 Grad ConstOffset 999 999 452 + 1002: 174(ptr) AccessChain 972(texel) 173 + 1003: 6(float) Load 1002 + 1004: 6(float) FAdd 1003 1001 + 1005: 174(ptr) AccessChain 972(texel) 173 + Store 1005 1004 + 1006: 165 Load 167(s1DShadow) + 1007: 148(fvec3) Load 150(c3) + 1008: 6(float) Load 866(dPdxy1) + 1009: 6(float) CompositeExtract 1007 2 + 1010: 6(float) ImageSampleDrefExplicitLod 1006 1007 1009 Grad ConstOffset 1008 1008 445 + 1011: 174(ptr) AccessChain 972(texel) 173 + 1012: 6(float) Load 1011 + 1013: 6(float) FAdd 1012 1010 + 1014: 174(ptr) AccessChain 972(texel) 173 + Store 1014 1013 + 1015: 180 Load 182(s2DShadow) + 1016: 148(fvec3) Load 150(c3) + 1017: 52(fvec2) Load 873(dPdxy2) + 1018: 6(float) CompositeExtract 1016 2 + 1019: 6(float) ImageSampleDrefExplicitLod 1015 1016 1018 Grad ConstOffset 1017 1017 452 + 1020: 174(ptr) AccessChain 972(texel) 173 + 1021: 6(float) Load 1020 + 1022: 6(float) FAdd 1021 1019 + 1023: 174(ptr) AccessChain 972(texel) 173 + Store 1023 1022 + 1024: 206 Load 208(s1DArray) + 1025: 52(fvec2) Load 138(c2) + 1026: 6(float) Load 866(dPdxy1) + 1027: 7(fvec4) ImageSampleExplicitLod 1024 1025 Grad ConstOffset 1026 1026 445 + 1028: 7(fvec4) Load 972(texel) + 1029: 7(fvec4) FAdd 1028 1027 + Store 972(texel) 1029 + 1030: 215 Load 217(s2DArray) + 1031: 148(fvec3) Load 150(c3) + 1032: 52(fvec2) Load 873(dPdxy2) + 1033: 7(fvec4) ImageSampleExplicitLod 1030 1031 Grad ConstOffset 1032 1032 452 + 1034: 7(fvec4) Load 972(texel) + 1035: 7(fvec4) FAdd 1034 1033 + Store 972(texel) 1035 + 1036: 233 Load 235(s1DArrayShadow) + 1037: 148(fvec3) Load 150(c3) + 1038: 6(float) Load 866(dPdxy1) + 1039: 6(float) CompositeExtract 1037 2 + 1040: 6(float) ImageSampleDrefExplicitLod 1036 1037 1039 Grad ConstOffset 1038 1038 445 + 1041: 174(ptr) AccessChain 972(texel) 173 + 1042: 6(float) Load 1041 + 1043: 6(float) FAdd 1042 1040 + 1044: 174(ptr) AccessChain 972(texel) 173 + Store 1044 1043 + 1045: 245 Load 247(s2DArrayShadow) + 1046: 7(fvec4) Load 197(c4) + 1047: 52(fvec2) Load 873(dPdxy2) + 1048: 6(float) CompositeExtract 1046 3 + 1049: 6(float) ImageSampleDrefExplicitLod 1045 1046 1048 Grad ConstOffset 1047 1047 452 + 1050: 174(ptr) AccessChain 972(texel) 173 + 1051: 6(float) Load 1050 + 1052: 6(float) FAdd 1051 1049 + 1053: 174(ptr) AccessChain 972(texel) 173 + Store 1053 1052 + 1054: 7(fvec4) Load 972(texel) + ReturnValue 1054 + FunctionEnd +31(testTextureProjGrad(): 7(fvec4) Function None 8 + 32: Label + 1057(texel): 63(ptr) Variable Function + Store 1057(texel) 120 + 1058: 122 Load 124(s1D) + 1059: 52(fvec2) Load 138(c2) + 1060: 6(float) Load 866(dPdxy1) + 1061: 7(fvec4) ImageSampleProjExplicitLod 1058 1059 Grad 1060 1060 + 1062: 7(fvec4) Load 1057(texel) + 1063: 7(fvec4) FAdd 1062 1061 + Store 1057(texel) 1063 + 1064: 122 Load 124(s1D) + 1065: 7(fvec4) Load 197(c4) + 1066: 6(float) Load 866(dPdxy1) + 1067: 6(float) CompositeExtract 1065 3 + 1068: 7(fvec4) CompositeInsert 1067 1065 1 + 1069: 7(fvec4) ImageSampleProjExplicitLod 1064 1068 Grad 1066 1066 + 1070: 7(fvec4) Load 1057(texel) + 1071: 7(fvec4) FAdd 1070 1069 + Store 1057(texel) 1071 + 1072: 133 Load 135(s2D) + 1073: 148(fvec3) Load 150(c3) + 1074: 52(fvec2) Load 873(dPdxy2) + 1075: 7(fvec4) ImageSampleProjExplicitLod 1072 1073 Grad 1074 1074 + 1076: 7(fvec4) Load 1057(texel) + 1077: 7(fvec4) FAdd 1076 1075 + Store 1057(texel) 1077 + 1078: 133 Load 135(s2D) + 1079: 7(fvec4) Load 197(c4) + 1080: 52(fvec2) Load 873(dPdxy2) + 1081: 6(float) CompositeExtract 1079 3 + 1082: 7(fvec4) CompositeInsert 1081 1079 2 + 1083: 7(fvec4) ImageSampleProjExplicitLod 1078 1082 Grad 1080 1080 + 1084: 7(fvec4) Load 1057(texel) + 1085: 7(fvec4) FAdd 1084 1083 + Store 1057(texel) 1085 + 1086: 144 Load 146(s3D) + 1087: 7(fvec4) Load 197(c4) + 1088: 148(fvec3) Load 880(dPdxy3) + 1089: 7(fvec4) ImageSampleProjExplicitLod 1086 1087 Grad 1088 1088 + 1090: 7(fvec4) Load 1057(texel) + 1091: 7(fvec4) FAdd 1090 1089 + Store 1057(texel) 1091 + 1092: 257 Load 259(s2DRect) + 1093: 148(fvec3) Load 150(c3) + 1094: 52(fvec2) Load 873(dPdxy2) + 1095: 7(fvec4) ImageSampleProjExplicitLod 1092 1093 Grad 1094 1094 + 1096: 7(fvec4) Load 1057(texel) + 1097: 7(fvec4) FAdd 1096 1095 + Store 1057(texel) 1097 + 1098: 257 Load 259(s2DRect) + 1099: 7(fvec4) Load 197(c4) + 1100: 52(fvec2) Load 873(dPdxy2) + 1101: 6(float) CompositeExtract 1099 3 + 1102: 7(fvec4) CompositeInsert 1101 1099 2 + 1103: 7(fvec4) ImageSampleProjExplicitLod 1098 1102 Grad 1100 1100 + 1104: 7(fvec4) Load 1057(texel) + 1105: 7(fvec4) FAdd 1104 1103 + Store 1057(texel) 1105 + 1106: 266 Load 268(s2DRectShadow) + 1107: 7(fvec4) Load 197(c4) + 1108: 52(fvec2) Load 873(dPdxy2) + 1109: 6(float) CompositeExtract 1107 2 + 1110: 6(float) CompositeExtract 1107 3 + 1111: 7(fvec4) CompositeInsert 1110 1107 2 + 1112: 6(float) ImageSampleProjDrefExplicitLod 1106 1111 1109 Grad 1108 1108 + 1113: 174(ptr) AccessChain 1057(texel) 173 + 1114: 6(float) Load 1113 + 1115: 6(float) FAdd 1114 1112 + 1116: 174(ptr) AccessChain 1057(texel) 173 + Store 1116 1115 + 1117: 165 Load 167(s1DShadow) + 1118: 7(fvec4) Load 197(c4) + 1119: 6(float) Load 866(dPdxy1) + 1120: 6(float) CompositeExtract 1118 2 + 1121: 6(float) CompositeExtract 1118 3 + 1122: 7(fvec4) CompositeInsert 1121 1118 1 + 1123: 6(float) ImageSampleProjDrefExplicitLod 1117 1122 1120 Grad 1119 1119 + 1124: 174(ptr) AccessChain 1057(texel) 173 + 1125: 6(float) Load 1124 + 1126: 6(float) FAdd 1125 1123 + 1127: 174(ptr) AccessChain 1057(texel) 173 + Store 1127 1126 + 1128: 180 Load 182(s2DShadow) + 1129: 7(fvec4) Load 197(c4) + 1130: 52(fvec2) Load 873(dPdxy2) + 1131: 6(float) CompositeExtract 1129 2 + 1132: 6(float) CompositeExtract 1129 3 + 1133: 7(fvec4) CompositeInsert 1132 1129 2 + 1134: 6(float) ImageSampleProjDrefExplicitLod 1128 1133 1131 Grad 1130 1130 + 1135: 174(ptr) AccessChain 1057(texel) 173 + 1136: 6(float) Load 1135 + 1137: 6(float) FAdd 1136 1134 + 1138: 174(ptr) AccessChain 1057(texel) 173 + Store 1138 1137 + 1139: 7(fvec4) Load 1057(texel) + ReturnValue 1139 + FunctionEnd +33(testTextureProjGradoffset(): 7(fvec4) Function None 8 + 34: Label + 1142(texel): 63(ptr) Variable Function + Store 1142(texel) 120 + 1143: 122 Load 124(s1D) + 1144: 52(fvec2) Load 138(c2) + 1145: 6(float) Load 866(dPdxy1) + 1146: 7(fvec4) ImageSampleProjExplicitLod 1143 1144 Grad ConstOffset 1145 1145 445 + 1147: 7(fvec4) Load 1142(texel) + 1148: 7(fvec4) FAdd 1147 1146 + Store 1142(texel) 1148 + 1149: 122 Load 124(s1D) + 1150: 7(fvec4) Load 197(c4) + 1151: 6(float) Load 866(dPdxy1) + 1152: 6(float) CompositeExtract 1150 3 + 1153: 7(fvec4) CompositeInsert 1152 1150 1 + 1154: 7(fvec4) ImageSampleProjExplicitLod 1149 1153 Grad ConstOffset 1151 1151 445 + 1155: 7(fvec4) Load 1142(texel) + 1156: 7(fvec4) FAdd 1155 1154 + Store 1142(texel) 1156 + 1157: 133 Load 135(s2D) + 1158: 148(fvec3) Load 150(c3) + 1159: 52(fvec2) Load 873(dPdxy2) + 1160: 7(fvec4) ImageSampleProjExplicitLod 1157 1158 Grad ConstOffset 1159 1159 452 + 1161: 7(fvec4) Load 1142(texel) + 1162: 7(fvec4) FAdd 1161 1160 + Store 1142(texel) 1162 + 1163: 133 Load 135(s2D) + 1164: 7(fvec4) Load 197(c4) + 1165: 52(fvec2) Load 873(dPdxy2) + 1166: 6(float) CompositeExtract 1164 3 + 1167: 7(fvec4) CompositeInsert 1166 1164 2 + 1168: 7(fvec4) ImageSampleProjExplicitLod 1163 1167 Grad ConstOffset 1165 1165 452 + 1169: 7(fvec4) Load 1142(texel) + 1170: 7(fvec4) FAdd 1169 1168 + Store 1142(texel) 1170 + 1171: 257 Load 259(s2DRect) + 1172: 148(fvec3) Load 150(c3) + 1173: 52(fvec2) Load 873(dPdxy2) + 1174: 7(fvec4) ImageSampleProjExplicitLod 1171 1172 Grad ConstOffset 1173 1173 452 + 1175: 7(fvec4) Load 1142(texel) + 1176: 7(fvec4) FAdd 1175 1174 + Store 1142(texel) 1176 + 1177: 257 Load 259(s2DRect) + 1178: 7(fvec4) Load 197(c4) + 1179: 52(fvec2) Load 873(dPdxy2) + 1180: 6(float) CompositeExtract 1178 3 + 1181: 7(fvec4) CompositeInsert 1180 1178 2 + 1182: 7(fvec4) ImageSampleProjExplicitLod 1177 1181 Grad ConstOffset 1179 1179 452 + 1183: 7(fvec4) Load 1142(texel) + 1184: 7(fvec4) FAdd 1183 1182 + Store 1142(texel) 1184 + 1185: 266 Load 268(s2DRectShadow) + 1186: 7(fvec4) Load 197(c4) + 1187: 52(fvec2) Load 873(dPdxy2) + 1188: 6(float) CompositeExtract 1186 2 + 1189: 6(float) CompositeExtract 1186 3 + 1190: 7(fvec4) CompositeInsert 1189 1186 2 + 1191: 6(float) ImageSampleProjDrefExplicitLod 1185 1190 1188 Grad ConstOffset 1187 1187 452 + 1192: 174(ptr) AccessChain 1142(texel) 173 + 1193: 6(float) Load 1192 + 1194: 6(float) FAdd 1193 1191 + 1195: 174(ptr) AccessChain 1142(texel) 173 + Store 1195 1194 + 1196: 144 Load 146(s3D) + 1197: 7(fvec4) Load 197(c4) + 1198: 148(fvec3) Load 880(dPdxy3) + 1199: 7(fvec4) ImageSampleProjExplicitLod 1196 1197 Grad ConstOffset 1198 1198 459 + 1200: 7(fvec4) Load 1142(texel) + 1201: 7(fvec4) FAdd 1200 1199 + Store 1142(texel) 1201 + 1202: 165 Load 167(s1DShadow) + 1203: 7(fvec4) Load 197(c4) + 1204: 6(float) Load 866(dPdxy1) + 1205: 6(float) CompositeExtract 1203 2 + 1206: 6(float) CompositeExtract 1203 3 + 1207: 7(fvec4) CompositeInsert 1206 1203 1 + 1208: 6(float) ImageSampleProjDrefExplicitLod 1202 1207 1205 Grad ConstOffset 1204 1204 445 + 1209: 174(ptr) AccessChain 1142(texel) 173 + 1210: 6(float) Load 1209 + 1211: 6(float) FAdd 1210 1208 + 1212: 174(ptr) AccessChain 1142(texel) 173 + Store 1212 1211 + 1213: 180 Load 182(s2DShadow) + 1214: 7(fvec4) Load 197(c4) + 1215: 52(fvec2) Load 873(dPdxy2) + 1216: 6(float) CompositeExtract 1214 2 + 1217: 6(float) CompositeExtract 1214 3 + 1218: 7(fvec4) CompositeInsert 1217 1214 2 + 1219: 6(float) ImageSampleProjDrefExplicitLod 1213 1218 1216 Grad ConstOffset 1215 1215 452 + 1220: 174(ptr) AccessChain 1142(texel) 173 + 1221: 6(float) Load 1220 + 1222: 6(float) FAdd 1221 1219 + 1223: 174(ptr) AccessChain 1142(texel) 173 + Store 1223 1222 + 1224: 7(fvec4) Load 1142(texel) + ReturnValue 1224 + FunctionEnd +35(testTextureGather(): 7(fvec4) Function None 8 + 36: Label + 1227(texel): 63(ptr) Variable Function + Store 1227(texel) 120 + 1228: 133 Load 135(s2D) + 1229: 52(fvec2) Load 138(c2) + 1231: 7(fvec4) ImageGather 1228 1229 1230 + 1232: 7(fvec4) Load 1227(texel) + 1233: 7(fvec4) FAdd 1232 1231 + Store 1227(texel) 1233 + 1234: 215 Load 217(s2DArray) + 1235: 148(fvec3) Load 150(c3) + 1236: 7(fvec4) ImageGather 1234 1235 1230 + 1237: 7(fvec4) Load 1227(texel) + 1238: 7(fvec4) FAdd 1237 1236 + Store 1227(texel) 1238 + 1239: 156 Load 158(sCube) + 1240: 148(fvec3) Load 150(c3) + 1241: 7(fvec4) ImageGather 1239 1240 1230 + 1242: 7(fvec4) Load 1227(texel) + 1243: 7(fvec4) FAdd 1242 1241 + Store 1227(texel) 1243 + 1244: 224 Load 226(sCubeArray) + 1245: 7(fvec4) Load 197(c4) + 1246: 7(fvec4) ImageGather 1244 1245 1230 + 1247: 7(fvec4) Load 1227(texel) + 1248: 7(fvec4) FAdd 1247 1246 + Store 1227(texel) 1248 + 1249: 257 Load 259(s2DRect) + 1250: 52(fvec2) Load 138(c2) + 1251: 7(fvec4) ImageGather 1249 1250 1230 + 1252: 7(fvec4) Load 1227(texel) + 1253: 7(fvec4) FAdd 1252 1251 + Store 1227(texel) 1253 + 1254: 180 Load 182(s2DShadow) + 1255: 52(fvec2) Load 138(c2) + 1256: 6(float) Load 283(compare) + 1257: 7(fvec4) ImageDrefGather 1254 1255 1256 + 1258: 7(fvec4) Load 1227(texel) + 1259: 7(fvec4) FAdd 1258 1257 + Store 1227(texel) 1259 + 1260: 245 Load 247(s2DArrayShadow) + 1261: 148(fvec3) Load 150(c3) + 1262: 6(float) Load 283(compare) + 1263: 7(fvec4) ImageDrefGather 1260 1261 1262 + 1264: 7(fvec4) Load 1227(texel) + 1265: 7(fvec4) FAdd 1264 1263 + Store 1227(texel) 1265 + 1266: 192 Load 194(sCubeShadow) + 1267: 148(fvec3) Load 150(c3) + 1268: 6(float) Load 283(compare) + 1269: 7(fvec4) ImageDrefGather 1266 1267 1268 + 1270: 7(fvec4) Load 1227(texel) + 1271: 7(fvec4) FAdd 1270 1269 + Store 1227(texel) 1271 + 1272: 278 Load 280(sCubeArrayShadow) + 1273: 7(fvec4) Load 197(c4) + 1274: 6(float) Load 283(compare) + 1275: 7(fvec4) ImageDrefGather 1272 1273 1274 + 1276: 7(fvec4) Load 1227(texel) + 1277: 7(fvec4) FAdd 1276 1275 + Store 1227(texel) 1277 + 1278: 266 Load 268(s2DRectShadow) + 1279: 52(fvec2) Load 138(c2) + 1280: 6(float) Load 283(compare) + 1281: 7(fvec4) ImageDrefGather 1278 1279 1280 + 1282: 7(fvec4) Load 1227(texel) + 1283: 7(fvec4) FAdd 1282 1281 + Store 1227(texel) 1283 + 1284: 7(fvec4) Load 1227(texel) + ReturnValue 1284 + FunctionEnd +37(testTextureGatherOffset(): 7(fvec4) Function None 8 + 38: Label + 1287(texel): 63(ptr) Variable Function + Store 1287(texel) 120 + 1288: 133 Load 135(s2D) + 1289: 52(fvec2) Load 138(c2) + 1290: 7(fvec4) ImageGather 1288 1289 1230 ConstOffset 452 + 1291: 7(fvec4) Load 1287(texel) + 1292: 7(fvec4) FAdd 1291 1290 + Store 1287(texel) 1292 + 1293: 215 Load 217(s2DArray) + 1294: 148(fvec3) Load 150(c3) + 1295: 7(fvec4) ImageGather 1293 1294 1230 ConstOffset 452 + 1296: 7(fvec4) Load 1287(texel) + 1297: 7(fvec4) FAdd 1296 1295 + Store 1287(texel) 1297 + 1298: 257 Load 259(s2DRect) + 1299: 52(fvec2) Load 138(c2) + 1300: 7(fvec4) ImageGather 1298 1299 1230 ConstOffset 452 + 1301: 7(fvec4) Load 1287(texel) + 1302: 7(fvec4) FAdd 1301 1300 + Store 1287(texel) 1302 + 1303: 180 Load 182(s2DShadow) + 1304: 52(fvec2) Load 138(c2) + 1305: 6(float) Load 283(compare) + 1306: 7(fvec4) ImageDrefGather 1303 1304 1305 ConstOffset 452 + 1307: 7(fvec4) Load 1287(texel) + 1308: 7(fvec4) FAdd 1307 1306 + Store 1287(texel) 1308 + 1309: 245 Load 247(s2DArrayShadow) + 1310: 148(fvec3) Load 150(c3) + 1311: 6(float) Load 283(compare) + 1312: 7(fvec4) ImageDrefGather 1309 1310 1311 ConstOffset 452 + 1313: 7(fvec4) Load 1287(texel) + 1314: 7(fvec4) FAdd 1313 1312 + Store 1287(texel) 1314 + 1315: 266 Load 268(s2DRectShadow) + 1316: 52(fvec2) Load 138(c2) + 1317: 6(float) Load 283(compare) + 1318: 7(fvec4) ImageDrefGather 1315 1316 1317 ConstOffset 452 + 1319: 7(fvec4) Load 1287(texel) + 1320: 7(fvec4) FAdd 1319 1318 + Store 1287(texel) 1320 + 1321: 7(fvec4) Load 1287(texel) + ReturnValue 1321 + FunctionEnd +39(testTextureGatherOffsets(): 7(fvec4) Function None 8 + 40: Label + 1324(texel): 63(ptr) Variable Function + Store 1324(texel) 120 + 1325: 133 Load 135(s2D) + 1326: 52(fvec2) Load 138(c2) + 1330: 7(fvec4) ImageGather 1325 1326 1230 ConstOffsets 1329 + 1331: 7(fvec4) Load 1324(texel) + 1332: 7(fvec4) FAdd 1331 1330 + Store 1324(texel) 1332 + 1333: 215 Load 217(s2DArray) + 1334: 148(fvec3) Load 150(c3) + 1335: 7(fvec4) ImageGather 1333 1334 1230 ConstOffsets 1329 + 1336: 7(fvec4) Load 1324(texel) + 1337: 7(fvec4) FAdd 1336 1335 + Store 1324(texel) 1337 + 1338: 257 Load 259(s2DRect) + 1339: 52(fvec2) Load 138(c2) + 1340: 7(fvec4) ImageGather 1338 1339 1230 ConstOffsets 1329 + 1341: 7(fvec4) Load 1324(texel) + 1342: 7(fvec4) FAdd 1341 1340 + Store 1324(texel) 1342 + 1343: 180 Load 182(s2DShadow) + 1344: 52(fvec2) Load 138(c2) + 1345: 6(float) Load 283(compare) + 1346: 7(fvec4) ImageDrefGather 1343 1344 1345 ConstOffsets 1329 + 1347: 7(fvec4) Load 1324(texel) + 1348: 7(fvec4) FAdd 1347 1346 + Store 1324(texel) 1348 + 1349: 245 Load 247(s2DArrayShadow) + 1350: 148(fvec3) Load 150(c3) + 1351: 6(float) Load 283(compare) + 1352: 7(fvec4) ImageDrefGather 1349 1350 1351 ConstOffsets 1329 + 1353: 7(fvec4) Load 1324(texel) + 1354: 7(fvec4) FAdd 1353 1352 + Store 1324(texel) 1354 + 1355: 266 Load 268(s2DRectShadow) + 1356: 52(fvec2) Load 138(c2) + 1357: 6(float) Load 283(compare) + 1358: 7(fvec4) ImageDrefGather 1355 1356 1357 ConstOffsets 1329 + 1359: 7(fvec4) Load 1324(texel) + 1360: 7(fvec4) FAdd 1359 1358 + Store 1324(texel) 1360 + 1361: 7(fvec4) Load 1324(texel) + ReturnValue 1361 + FunctionEnd +41(testTextureGatherLod(): 7(fvec4) Function None 8 + 42: Label + 1364(texel): 63(ptr) Variable Function + Store 1364(texel) 120 + 1365: 133 Load 135(s2D) + 1366: 52(fvec2) Load 138(c2) + 1367: 6(float) Load 371(lod) + 1368: 7(fvec4) ImageGather 1365 1366 1230 Lod 1367 + 1369: 7(fvec4) Load 1364(texel) + 1370: 7(fvec4) FAdd 1369 1368 + Store 1364(texel) 1370 + 1371: 215 Load 217(s2DArray) + 1372: 148(fvec3) Load 150(c3) + 1373: 6(float) Load 371(lod) + 1374: 7(fvec4) ImageGather 1371 1372 1230 Lod 1373 + 1375: 7(fvec4) Load 1364(texel) + 1376: 7(fvec4) FAdd 1375 1374 + Store 1364(texel) 1376 + 1377: 156 Load 158(sCube) + 1378: 148(fvec3) Load 150(c3) + 1379: 6(float) Load 371(lod) + 1380: 7(fvec4) ImageGather 1377 1378 1230 Lod 1379 + 1381: 7(fvec4) Load 1364(texel) + 1382: 7(fvec4) FAdd 1381 1380 + Store 1364(texel) 1382 + 1383: 224 Load 226(sCubeArray) + 1384: 7(fvec4) Load 197(c4) + 1385: 6(float) Load 371(lod) + 1386: 7(fvec4) ImageGather 1383 1384 1230 Lod 1385 + 1387: 7(fvec4) Load 1364(texel) + 1388: 7(fvec4) FAdd 1387 1386 + Store 1364(texel) 1388 + 1389: 7(fvec4) Load 1364(texel) + ReturnValue 1389 + FunctionEnd +43(testTextureGatherLodOffset(): 7(fvec4) Function None 8 + 44: Label + 1392(texel): 63(ptr) Variable Function + Store 1392(texel) 120 + 1393: 133 Load 135(s2D) + 1394: 52(fvec2) Load 138(c2) + 1395: 6(float) Load 371(lod) + 1396: 7(fvec4) ImageGather 1393 1394 1230 Lod ConstOffset 1395 452 + 1397: 7(fvec4) Load 1392(texel) + 1398: 7(fvec4) FAdd 1397 1396 + Store 1392(texel) 1398 + 1399: 215 Load 217(s2DArray) + 1400: 148(fvec3) Load 150(c3) + 1401: 6(float) Load 371(lod) + 1402: 7(fvec4) ImageGather 1399 1400 1230 Lod ConstOffset 1401 452 + 1403: 7(fvec4) Load 1392(texel) + 1404: 7(fvec4) FAdd 1403 1402 + Store 1392(texel) 1404 + 1405: 7(fvec4) Load 1392(texel) + ReturnValue 1405 + FunctionEnd +45(testTextureGatherLodOffsets(): 7(fvec4) Function None 8 + 46: Label + 1408(texel): 63(ptr) Variable Function + Store 1408(texel) 120 + 1409: 133 Load 135(s2D) + 1410: 52(fvec2) Load 138(c2) + 1411: 6(float) Load 371(lod) + 1412: 7(fvec4) ImageGather 1409 1410 1230 Lod ConstOffsets 1411 1329 + 1413: 7(fvec4) Load 1408(texel) + 1414: 7(fvec4) FAdd 1413 1412 + Store 1408(texel) 1414 + 1415: 215 Load 217(s2DArray) + 1416: 148(fvec3) Load 150(c3) + 1417: 6(float) Load 371(lod) + 1418: 7(fvec4) ImageGather 1415 1416 1230 Lod ConstOffsets 1417 1329 + 1419: 7(fvec4) Load 1408(texel) + 1420: 7(fvec4) FAdd 1419 1418 + Store 1408(texel) 1420 + 1421: 7(fvec4) Load 1408(texel) + ReturnValue 1421 + FunctionEnd +50(testTextureSize(): 48(ivec4) Function None 49 + 51: Label + 1425(size): 1424(ptr) Variable Function + Store 1425(size) 1426 + 1427: 122 Load 124(s1D) + 1428: 6(float) Load 371(lod) + 1429: 47(int) ConvertFToS 1428 + 1430: 121 Image 1427 + 1431: 47(int) ImageQuerySizeLod 1430 1429 + 1433: 1432(ptr) AccessChain 1425(size) 173 + 1434: 47(int) Load 1433 + 1435: 47(int) IAdd 1434 1431 + 1436: 1432(ptr) AccessChain 1425(size) 173 + Store 1436 1435 + 1437: 133 Load 135(s2D) + 1438: 6(float) Load 371(lod) + 1439: 47(int) ConvertFToS 1438 + 1440: 132 Image 1437 + 1441: 451(ivec2) ImageQuerySizeLod 1440 1439 + 1442: 48(ivec4) Load 1425(size) + 1443: 451(ivec2) VectorShuffle 1442 1442 0 1 + 1444: 451(ivec2) IAdd 1443 1441 + 1445: 1432(ptr) AccessChain 1425(size) 173 + 1446: 47(int) CompositeExtract 1444 0 + Store 1445 1446 + 1448: 1432(ptr) AccessChain 1425(size) 1447 + 1449: 47(int) CompositeExtract 1444 1 + Store 1448 1449 + 1450: 144 Load 146(s3D) + 1451: 6(float) Load 371(lod) + 1452: 47(int) ConvertFToS 1451 + 1453: 143 Image 1450 + 1454: 458(ivec3) ImageQuerySizeLod 1453 1452 + 1455: 48(ivec4) Load 1425(size) + 1456: 458(ivec3) VectorShuffle 1455 1455 0 1 2 + 1457: 458(ivec3) IAdd 1456 1454 + 1458: 1432(ptr) AccessChain 1425(size) 173 + 1459: 47(int) CompositeExtract 1457 0 + Store 1458 1459 + 1460: 1432(ptr) AccessChain 1425(size) 1447 + 1461: 47(int) CompositeExtract 1457 1 + Store 1460 1461 + 1463: 1432(ptr) AccessChain 1425(size) 1462 + 1464: 47(int) CompositeExtract 1457 2 + Store 1463 1464 + 1465: 156 Load 158(sCube) + 1466: 6(float) Load 371(lod) + 1467: 47(int) ConvertFToS 1466 + 1468: 155 Image 1465 + 1469: 451(ivec2) ImageQuerySizeLod 1468 1467 + 1470: 48(ivec4) Load 1425(size) + 1471: 451(ivec2) VectorShuffle 1470 1470 0 1 + 1472: 451(ivec2) IAdd 1471 1469 + 1473: 1432(ptr) AccessChain 1425(size) 173 + 1474: 47(int) CompositeExtract 1472 0 + Store 1473 1474 + 1475: 1432(ptr) AccessChain 1425(size) 1447 + 1476: 47(int) CompositeExtract 1472 1 + Store 1475 1476 + 1477: 165 Load 167(s1DShadow) + 1478: 6(float) Load 371(lod) + 1479: 47(int) ConvertFToS 1478 + 1480: 164 Image 1477 + 1481: 47(int) ImageQuerySizeLod 1480 1479 + 1482: 1432(ptr) AccessChain 1425(size) 173 + 1483: 47(int) Load 1482 + 1484: 47(int) IAdd 1483 1481 + 1485: 1432(ptr) AccessChain 1425(size) 173 + Store 1485 1484 + 1486: 180 Load 182(s2DShadow) + 1487: 6(float) Load 371(lod) + 1488: 47(int) ConvertFToS 1487 + 1489: 179 Image 1486 + 1490: 451(ivec2) ImageQuerySizeLod 1489 1488 + 1491: 48(ivec4) Load 1425(size) + 1492: 451(ivec2) VectorShuffle 1491 1491 0 1 + 1493: 451(ivec2) IAdd 1492 1490 + 1494: 1432(ptr) AccessChain 1425(size) 173 + 1495: 47(int) CompositeExtract 1493 0 + Store 1494 1495 + 1496: 1432(ptr) AccessChain 1425(size) 1447 + 1497: 47(int) CompositeExtract 1493 1 + Store 1496 1497 + 1498: 192 Load 194(sCubeShadow) + 1499: 6(float) Load 371(lod) + 1500: 47(int) ConvertFToS 1499 + 1501: 191 Image 1498 + 1502: 451(ivec2) ImageQuerySizeLod 1501 1500 + 1503: 48(ivec4) Load 1425(size) + 1504: 451(ivec2) VectorShuffle 1503 1503 0 1 + 1505: 451(ivec2) IAdd 1504 1502 + 1506: 1432(ptr) AccessChain 1425(size) 173 + 1507: 47(int) CompositeExtract 1505 0 + Store 1506 1507 + 1508: 1432(ptr) AccessChain 1425(size) 1447 + 1509: 47(int) CompositeExtract 1505 1 + Store 1508 1509 + 1510: 224 Load 226(sCubeArray) + 1511: 6(float) Load 371(lod) + 1512: 47(int) ConvertFToS 1511 + 1513: 223 Image 1510 + 1514: 458(ivec3) ImageQuerySizeLod 1513 1512 + 1515: 48(ivec4) Load 1425(size) + 1516: 458(ivec3) VectorShuffle 1515 1515 0 1 2 + 1517: 458(ivec3) IAdd 1516 1514 + 1518: 1432(ptr) AccessChain 1425(size) 173 + 1519: 47(int) CompositeExtract 1517 0 + Store 1518 1519 + 1520: 1432(ptr) AccessChain 1425(size) 1447 + 1521: 47(int) CompositeExtract 1517 1 + Store 1520 1521 + 1522: 1432(ptr) AccessChain 1425(size) 1462 + 1523: 47(int) CompositeExtract 1517 2 + Store 1522 1523 + 1524: 278 Load 280(sCubeArrayShadow) + 1525: 6(float) Load 371(lod) + 1526: 47(int) ConvertFToS 1525 + 1527: 277 Image 1524 + 1528: 458(ivec3) ImageQuerySizeLod 1527 1526 + 1529: 48(ivec4) Load 1425(size) + 1530: 458(ivec3) VectorShuffle 1529 1529 0 1 2 + 1531: 458(ivec3) IAdd 1530 1528 + 1532: 1432(ptr) AccessChain 1425(size) 173 + 1533: 47(int) CompositeExtract 1531 0 + Store 1532 1533 + 1534: 1432(ptr) AccessChain 1425(size) 1447 + 1535: 47(int) CompositeExtract 1531 1 + Store 1534 1535 + 1536: 1432(ptr) AccessChain 1425(size) 1462 + 1537: 47(int) CompositeExtract 1531 2 + Store 1536 1537 + 1538: 257 Load 259(s2DRect) + 1539: 256 Image 1538 + 1540: 451(ivec2) ImageQuerySize 1539 + 1541: 48(ivec4) Load 1425(size) + 1542: 451(ivec2) VectorShuffle 1541 1541 0 1 + 1543: 451(ivec2) IAdd 1542 1540 + 1544: 1432(ptr) AccessChain 1425(size) 173 + 1545: 47(int) CompositeExtract 1543 0 + Store 1544 1545 + 1546: 1432(ptr) AccessChain 1425(size) 1447 + 1547: 47(int) CompositeExtract 1543 1 + Store 1546 1547 + 1548: 266 Load 268(s2DRectShadow) + 1549: 265 Image 1548 + 1550: 451(ivec2) ImageQuerySize 1549 + 1551: 48(ivec4) Load 1425(size) + 1552: 451(ivec2) VectorShuffle 1551 1551 0 1 + 1553: 451(ivec2) IAdd 1552 1550 + 1554: 1432(ptr) AccessChain 1425(size) 173 + 1555: 47(int) CompositeExtract 1553 0 + Store 1554 1555 + 1556: 1432(ptr) AccessChain 1425(size) 1447 + 1557: 47(int) CompositeExtract 1553 1 + Store 1556 1557 + 1558: 206 Load 208(s1DArray) + 1559: 6(float) Load 371(lod) + 1560: 47(int) ConvertFToS 1559 + 1561: 205 Image 1558 + 1562: 451(ivec2) ImageQuerySizeLod 1561 1560 + 1563: 48(ivec4) Load 1425(size) + 1564: 451(ivec2) VectorShuffle 1563 1563 0 1 + 1565: 451(ivec2) IAdd 1564 1562 + 1566: 1432(ptr) AccessChain 1425(size) 173 + 1567: 47(int) CompositeExtract 1565 0 + Store 1566 1567 + 1568: 1432(ptr) AccessChain 1425(size) 1447 + 1569: 47(int) CompositeExtract 1565 1 + Store 1568 1569 + 1570: 215 Load 217(s2DArray) + 1571: 6(float) Load 371(lod) + 1572: 47(int) ConvertFToS 1571 + 1573: 214 Image 1570 + 1574: 458(ivec3) ImageQuerySizeLod 1573 1572 + 1575: 48(ivec4) Load 1425(size) + 1576: 458(ivec3) VectorShuffle 1575 1575 0 1 2 + 1577: 458(ivec3) IAdd 1576 1574 + 1578: 1432(ptr) AccessChain 1425(size) 173 + 1579: 47(int) CompositeExtract 1577 0 + Store 1578 1579 + 1580: 1432(ptr) AccessChain 1425(size) 1447 + 1581: 47(int) CompositeExtract 1577 1 + Store 1580 1581 + 1582: 1432(ptr) AccessChain 1425(size) 1462 + 1583: 47(int) CompositeExtract 1577 2 + Store 1582 1583 + 1584: 233 Load 235(s1DArrayShadow) + 1585: 6(float) Load 371(lod) + 1586: 47(int) ConvertFToS 1585 + 1587: 232 Image 1584 + 1588: 451(ivec2) ImageQuerySizeLod 1587 1586 + 1589: 48(ivec4) Load 1425(size) + 1590: 451(ivec2) VectorShuffle 1589 1589 0 1 + 1591: 451(ivec2) IAdd 1590 1588 + 1592: 1432(ptr) AccessChain 1425(size) 173 + 1593: 47(int) CompositeExtract 1591 0 + Store 1592 1593 + 1594: 1432(ptr) AccessChain 1425(size) 1447 + 1595: 47(int) CompositeExtract 1591 1 + Store 1594 1595 + 1596: 245 Load 247(s2DArrayShadow) + 1597: 6(float) Load 371(lod) + 1598: 47(int) ConvertFToS 1597 + 1599: 244 Image 1596 + 1600: 458(ivec3) ImageQuerySizeLod 1599 1598 + 1601: 48(ivec4) Load 1425(size) + 1602: 458(ivec3) VectorShuffle 1601 1601 0 1 2 + 1603: 458(ivec3) IAdd 1602 1600 + 1604: 1432(ptr) AccessChain 1425(size) 173 + 1605: 47(int) CompositeExtract 1603 0 + Store 1604 1605 + 1606: 1432(ptr) AccessChain 1425(size) 1447 + 1607: 47(int) CompositeExtract 1603 1 + Store 1606 1607 + 1608: 1432(ptr) AccessChain 1425(size) 1462 + 1609: 47(int) CompositeExtract 1603 2 + Store 1608 1609 + 1610: 771 Load 773(sBuffer) + 1611: 770 Image 1610 + 1612: 47(int) ImageQuerySize 1611 + 1613: 1432(ptr) AccessChain 1425(size) 173 + 1614: 47(int) Load 1613 + 1615: 47(int) IAdd 1614 1612 + 1616: 1432(ptr) AccessChain 1425(size) 173 + Store 1616 1615 + 1617: 782 Load 784(s2DMS) + 1618: 781 Image 1617 + 1619: 451(ivec2) ImageQuerySize 1618 + 1620: 48(ivec4) Load 1425(size) + 1621: 451(ivec2) VectorShuffle 1620 1620 0 1 + 1622: 451(ivec2) IAdd 1621 1619 + 1623: 1432(ptr) AccessChain 1425(size) 173 + 1624: 47(int) CompositeExtract 1622 0 + Store 1623 1624 + 1625: 1432(ptr) AccessChain 1425(size) 1447 + 1626: 47(int) CompositeExtract 1622 1 + Store 1625 1626 + 1627: 793 Load 795(s2DMSArray) + 1628: 792 Image 1627 + 1629: 458(ivec3) ImageQuerySize 1628 + 1630: 48(ivec4) Load 1425(size) + 1631: 458(ivec3) VectorShuffle 1630 1630 0 1 2 + 1632: 458(ivec3) IAdd 1631 1629 + 1633: 1432(ptr) AccessChain 1425(size) 173 + 1634: 47(int) CompositeExtract 1632 0 + Store 1633 1634 + 1635: 1432(ptr) AccessChain 1425(size) 1447 + 1636: 47(int) CompositeExtract 1632 1 + Store 1635 1636 + 1637: 1432(ptr) AccessChain 1425(size) 1462 + 1638: 47(int) CompositeExtract 1632 2 + Store 1637 1638 + 1639: 48(ivec4) Load 1425(size) + ReturnValue 1639 + FunctionEnd +54(testTextureQueryLod(): 52(fvec2) Function None 53 + 55: Label + 1643(lod): 1642(ptr) Variable Function + Store 1643(lod) 1644 + 1645: 122 Load 124(s1D) + 1646: 6(float) Load 127(c1) + 1647: 52(fvec2) ImageQueryLod 1645 1646 + 1648: 52(fvec2) Load 1643(lod) + 1649: 52(fvec2) FAdd 1648 1647 + Store 1643(lod) 1649 + 1650: 133 Load 135(s2D) + 1651: 52(fvec2) Load 138(c2) + 1652: 52(fvec2) ImageQueryLod 1650 1651 + 1653: 52(fvec2) Load 1643(lod) + 1654: 52(fvec2) FAdd 1653 1652 + Store 1643(lod) 1654 + 1655: 144 Load 146(s3D) + 1656: 148(fvec3) Load 150(c3) + 1657: 52(fvec2) ImageQueryLod 1655 1656 + 1658: 52(fvec2) Load 1643(lod) + 1659: 52(fvec2) FAdd 1658 1657 + Store 1643(lod) 1659 + 1660: 156 Load 158(sCube) + 1661: 148(fvec3) Load 150(c3) + 1662: 52(fvec2) ImageQueryLod 1660 1661 + 1663: 52(fvec2) Load 1643(lod) + 1664: 52(fvec2) FAdd 1663 1662 + Store 1643(lod) 1664 + 1665: 206 Load 208(s1DArray) + 1666: 6(float) Load 127(c1) + 1667: 52(fvec2) ImageQueryLod 1665 1666 + 1668: 52(fvec2) Load 1643(lod) + 1669: 52(fvec2) FAdd 1668 1667 + Store 1643(lod) 1669 + 1670: 215 Load 217(s2DArray) + 1671: 52(fvec2) Load 138(c2) + 1672: 52(fvec2) ImageQueryLod 1670 1671 + 1673: 52(fvec2) Load 1643(lod) + 1674: 52(fvec2) FAdd 1673 1672 + Store 1643(lod) 1674 + 1675: 224 Load 226(sCubeArray) + 1676: 148(fvec3) Load 150(c3) + 1677: 52(fvec2) ImageQueryLod 1675 1676 + 1678: 52(fvec2) Load 1643(lod) + 1679: 52(fvec2) FAdd 1678 1677 + Store 1643(lod) 1679 + 1680: 165 Load 167(s1DShadow) + 1681: 6(float) Load 127(c1) + 1682: 52(fvec2) ImageQueryLod 1680 1681 + 1683: 52(fvec2) Load 1643(lod) + 1684: 52(fvec2) FAdd 1683 1682 + Store 1643(lod) 1684 + 1685: 180 Load 182(s2DShadow) + 1686: 52(fvec2) Load 138(c2) + 1687: 52(fvec2) ImageQueryLod 1685 1686 + 1688: 52(fvec2) Load 1643(lod) + 1689: 52(fvec2) FAdd 1688 1687 + Store 1643(lod) 1689 + 1690: 278 Load 280(sCubeArrayShadow) + 1691: 148(fvec3) Load 150(c3) + 1692: 52(fvec2) ImageQueryLod 1690 1691 + 1693: 52(fvec2) Load 1643(lod) + 1694: 52(fvec2) FAdd 1693 1692 + Store 1643(lod) 1694 + 1695: 233 Load 235(s1DArrayShadow) + 1696: 6(float) Load 127(c1) + 1697: 52(fvec2) ImageQueryLod 1695 1696 + 1698: 52(fvec2) Load 1643(lod) + 1699: 52(fvec2) FAdd 1698 1697 + Store 1643(lod) 1699 + 1700: 245 Load 247(s2DArrayShadow) + 1701: 52(fvec2) Load 138(c2) + 1702: 52(fvec2) ImageQueryLod 1700 1701 + 1703: 52(fvec2) Load 1643(lod) + 1704: 52(fvec2) FAdd 1703 1702 + Store 1643(lod) 1704 + 1705: 278 Load 280(sCubeArrayShadow) + 1706: 148(fvec3) Load 150(c3) + 1707: 52(fvec2) ImageQueryLod 1705 1706 + 1708: 52(fvec2) Load 1643(lod) + 1709: 52(fvec2) FAdd 1708 1707 + Store 1643(lod) 1709 + 1710: 52(fvec2) Load 1643(lod) + ReturnValue 1710 + FunctionEnd +57(testTextureQueryLevels(): 47(int) Function None 56 + 58: Label + 1713(levels): 1432(ptr) Variable Function + Store 1713(levels) 1230 + 1714: 122 Load 124(s1D) + 1715: 121 Image 1714 + 1716: 47(int) ImageQueryLevels 1715 + 1717: 47(int) Load 1713(levels) + 1718: 47(int) IAdd 1717 1716 + Store 1713(levels) 1718 + 1719: 133 Load 135(s2D) + 1720: 132 Image 1719 + 1721: 47(int) ImageQueryLevels 1720 + 1722: 47(int) Load 1713(levels) + 1723: 47(int) IAdd 1722 1721 + Store 1713(levels) 1723 + 1724: 144 Load 146(s3D) + 1725: 143 Image 1724 + 1726: 47(int) ImageQueryLevels 1725 + 1727: 47(int) Load 1713(levels) + 1728: 47(int) IAdd 1727 1726 + Store 1713(levels) 1728 + 1729: 156 Load 158(sCube) + 1730: 155 Image 1729 + 1731: 47(int) ImageQueryLevels 1730 + 1732: 47(int) Load 1713(levels) + 1733: 47(int) IAdd 1732 1731 + Store 1713(levels) 1733 + 1734: 165 Load 167(s1DShadow) + 1735: 164 Image 1734 + 1736: 47(int) ImageQueryLevels 1735 + 1737: 47(int) Load 1713(levels) + 1738: 47(int) IAdd 1737 1736 + Store 1713(levels) 1738 + 1739: 180 Load 182(s2DShadow) + 1740: 179 Image 1739 + 1741: 47(int) ImageQueryLevels 1740 + 1742: 47(int) Load 1713(levels) + 1743: 47(int) IAdd 1742 1741 + Store 1713(levels) 1743 + 1744: 192 Load 194(sCubeShadow) + 1745: 191 Image 1744 + 1746: 47(int) ImageQueryLevels 1745 + 1747: 47(int) Load 1713(levels) + 1748: 47(int) IAdd 1747 1746 + Store 1713(levels) 1748 + 1749: 224 Load 226(sCubeArray) + 1750: 223 Image 1749 + 1751: 47(int) ImageQueryLevels 1750 + 1752: 47(int) Load 1713(levels) + 1753: 47(int) IAdd 1752 1751 + Store 1713(levels) 1753 + 1754: 278 Load 280(sCubeArrayShadow) + 1755: 277 Image 1754 + 1756: 47(int) ImageQueryLevels 1755 + 1757: 47(int) Load 1713(levels) + 1758: 47(int) IAdd 1757 1756 + Store 1713(levels) 1758 + 1759: 206 Load 208(s1DArray) + 1760: 205 Image 1759 + 1761: 47(int) ImageQueryLevels 1760 + 1762: 47(int) Load 1713(levels) + 1763: 47(int) IAdd 1762 1761 + Store 1713(levels) 1763 + 1764: 215 Load 217(s2DArray) + 1765: 214 Image 1764 + 1766: 47(int) ImageQueryLevels 1765 + 1767: 47(int) Load 1713(levels) + 1768: 47(int) IAdd 1767 1766 + Store 1713(levels) 1768 + 1769: 233 Load 235(s1DArrayShadow) + 1770: 232 Image 1769 + 1771: 47(int) ImageQueryLevels 1770 + 1772: 47(int) Load 1713(levels) + 1773: 47(int) IAdd 1772 1771 + Store 1713(levels) 1773 + 1774: 245 Load 247(s2DArrayShadow) + 1775: 244 Image 1774 + 1776: 47(int) ImageQueryLevels 1775 + 1777: 47(int) Load 1713(levels) + 1778: 47(int) IAdd 1777 1776 + Store 1713(levels) 1778 + 1779: 47(int) Load 1713(levels) + ReturnValue 1779 + FunctionEnd +59(testTextureSamples(): 47(int) Function None 56 + 60: Label + 1782(samples): 1432(ptr) Variable Function + Store 1782(samples) 1230 + 1783: 782 Load 784(s2DMS) + 1784: 781 Image 1783 + 1785: 47(int) ImageQuerySamples 1784 + 1786: 47(int) Load 1782(samples) + 1787: 47(int) IAdd 1786 1785 + Store 1782(samples) 1787 + 1788: 793 Load 795(s2DMSArray) + 1789: 792 Image 1788 + 1790: 47(int) ImageQuerySamples 1789 + 1791: 47(int) Load 1782(samples) + 1792: 47(int) IAdd 1791 1790 + Store 1782(samples) 1792 + 1793: 47(int) Load 1782(samples) + ReturnValue 1793 + FunctionEnd +61(testImageLoad(): 7(fvec4) Function None 8 + 62: Label + 1796(texel): 63(ptr) Variable Function + Store 1796(texel) 120 + 1800: 1797 Load 1799(i1D) + 1801: 6(float) Load 127(c1) + 1802: 47(int) ConvertFToS 1801 + 1803: 7(fvec4) ImageRead 1800 1802 + 1804: 7(fvec4) Load 1796(texel) + 1805: 7(fvec4) FAdd 1804 1803 + Store 1796(texel) 1805 + 1809: 1806 Load 1808(i2D) + 1810: 52(fvec2) Load 138(c2) + 1811: 451(ivec2) ConvertFToS 1810 + 1812: 7(fvec4) ImageRead 1809 1811 + 1813: 7(fvec4) Load 1796(texel) + 1814: 7(fvec4) FAdd 1813 1812 + Store 1796(texel) 1814 + 1818: 1815 Load 1817(i3D) + 1819: 148(fvec3) Load 150(c3) + 1820: 458(ivec3) ConvertFToS 1819 + 1821: 7(fvec4) ImageRead 1818 1820 + 1822: 7(fvec4) Load 1796(texel) + 1823: 7(fvec4) FAdd 1822 1821 + Store 1796(texel) 1823 + 1827: 1824 Load 1826(i2DRect) + 1828: 52(fvec2) Load 138(c2) + 1829: 451(ivec2) ConvertFToS 1828 + 1830: 7(fvec4) ImageRead 1827 1829 + 1831: 7(fvec4) Load 1796(texel) + 1832: 7(fvec4) FAdd 1831 1830 + Store 1796(texel) 1832 + 1836: 1833 Load 1835(iCube) + 1837: 148(fvec3) Load 150(c3) + 1838: 458(ivec3) ConvertFToS 1837 + 1839: 7(fvec4) ImageRead 1836 1838 + 1840: 7(fvec4) Load 1796(texel) + 1841: 7(fvec4) FAdd 1840 1839 + Store 1796(texel) 1841 + 1845: 1842 Load 1844(iBuffer) + 1846: 6(float) Load 127(c1) + 1847: 47(int) ConvertFToS 1846 + 1848: 7(fvec4) ImageRead 1845 1847 + 1849: 7(fvec4) Load 1796(texel) + 1850: 7(fvec4) FAdd 1849 1848 + Store 1796(texel) 1850 + 1854: 1851 Load 1853(i1DArray) + 1855: 52(fvec2) Load 138(c2) + 1856: 451(ivec2) ConvertFToS 1855 + 1857: 7(fvec4) ImageRead 1854 1856 + 1858: 7(fvec4) Load 1796(texel) + 1859: 7(fvec4) FAdd 1858 1857 + Store 1796(texel) 1859 + 1863: 1860 Load 1862(i2DArray) + 1864: 148(fvec3) Load 150(c3) + 1865: 458(ivec3) ConvertFToS 1864 + 1866: 7(fvec4) ImageRead 1863 1865 + 1867: 7(fvec4) Load 1796(texel) + 1868: 7(fvec4) FAdd 1867 1866 + Store 1796(texel) 1868 + 1872: 1869 Load 1871(iCubeArray) + 1873: 148(fvec3) Load 150(c3) + 1874: 458(ivec3) ConvertFToS 1873 + 1875: 7(fvec4) ImageRead 1872 1874 + 1876: 7(fvec4) Load 1796(texel) + 1877: 7(fvec4) FAdd 1876 1875 + Store 1796(texel) 1877 + 1881: 1878 Load 1880(i2DMS) + 1882: 52(fvec2) Load 138(c2) + 1883: 451(ivec2) ConvertFToS 1882 + 1884: 7(fvec4) ImageRead 1881 1883 Sample 445 + 1885: 7(fvec4) Load 1796(texel) + 1886: 7(fvec4) FAdd 1885 1884 + Store 1796(texel) 1886 + 1890: 1887 Load 1889(i2DMSArray) + 1891: 148(fvec3) Load 150(c3) + 1892: 458(ivec3) ConvertFToS 1891 + 1893: 7(fvec4) ImageRead 1890 1892 Sample 445 + 1894: 7(fvec4) Load 1796(texel) + 1895: 7(fvec4) FAdd 1894 1893 + Store 1796(texel) 1895 + 1896: 7(fvec4) Load 1796(texel) + ReturnValue 1896 + FunctionEnd +66(testImageStore(vf4;): 2 Function None 64 + 65(data): 63(ptr) FunctionParameter + 67: Label + 1899: 1797 Load 1799(i1D) + 1900: 6(float) Load 127(c1) + 1901: 47(int) ConvertFToS 1900 + 1902: 7(fvec4) Load 65(data) + ImageWrite 1899 1901 1902 + 1903: 1806 Load 1808(i2D) + 1904: 52(fvec2) Load 138(c2) + 1905: 451(ivec2) ConvertFToS 1904 + 1906: 7(fvec4) Load 65(data) + ImageWrite 1903 1905 1906 + 1907: 1815 Load 1817(i3D) + 1908: 148(fvec3) Load 150(c3) + 1909: 458(ivec3) ConvertFToS 1908 + 1910: 7(fvec4) Load 65(data) + ImageWrite 1907 1909 1910 + 1911: 1824 Load 1826(i2DRect) + 1912: 52(fvec2) Load 138(c2) + 1913: 451(ivec2) ConvertFToS 1912 + 1914: 7(fvec4) Load 65(data) + ImageWrite 1911 1913 1914 + 1915: 1833 Load 1835(iCube) + 1916: 148(fvec3) Load 150(c3) + 1917: 458(ivec3) ConvertFToS 1916 + 1918: 7(fvec4) Load 65(data) + ImageWrite 1915 1917 1918 + 1919: 1842 Load 1844(iBuffer) + 1920: 6(float) Load 127(c1) + 1921: 47(int) ConvertFToS 1920 + 1922: 7(fvec4) Load 65(data) + ImageWrite 1919 1921 1922 + 1923: 1851 Load 1853(i1DArray) + 1924: 52(fvec2) Load 138(c2) + 1925: 451(ivec2) ConvertFToS 1924 + 1926: 7(fvec4) Load 65(data) + ImageWrite 1923 1925 1926 + 1927: 1860 Load 1862(i2DArray) + 1928: 148(fvec3) Load 150(c3) + 1929: 458(ivec3) ConvertFToS 1928 + 1930: 7(fvec4) Load 65(data) + ImageWrite 1927 1929 1930 + 1931: 1869 Load 1871(iCubeArray) + 1932: 148(fvec3) Load 150(c3) + 1933: 458(ivec3) ConvertFToS 1932 + 1934: 7(fvec4) Load 65(data) + ImageWrite 1931 1933 1934 + 1935: 1878 Load 1880(i2DMS) + 1936: 52(fvec2) Load 138(c2) + 1937: 451(ivec2) ConvertFToS 1936 + 1938: 7(fvec4) Load 65(data) + ImageWrite 1935 1937 1938 Sample 445 + 1939: 1887 Load 1889(i2DMSArray) + 1940: 148(fvec3) Load 150(c3) + 1941: 458(ivec3) ConvertFToS 1940 + 1942: 7(fvec4) Load 65(data) + ImageWrite 1939 1941 1942 Sample 445 + Return + FunctionEnd +68(testSparseTexture(): 7(fvec4) Function None 8 + 69: Label + 1943(texel): 63(ptr) Variable Function + Store 1943(texel) 120 + 1944: 133 Load 135(s2D) + 1945: 52(fvec2) Load 138(c2) + 1947:1946(ResType) ImageSparseSampleImplicitLod 1944 1945 + 1948: 7(fvec4) CompositeExtract 1947 1 + Store 1943(texel) 1948 + 1949: 47(int) CompositeExtract 1947 0 + 1950: 144 Load 146(s3D) + 1951: 148(fvec3) Load 150(c3) + 1952:1946(ResType) ImageSparseSampleImplicitLod 1950 1951 + 1953: 7(fvec4) CompositeExtract 1952 1 + Store 1943(texel) 1953 + 1954: 47(int) CompositeExtract 1952 0 + 1955: 156 Load 158(sCube) + 1956: 148(fvec3) Load 150(c3) + 1957:1946(ResType) ImageSparseSampleImplicitLod 1955 1956 + 1958: 7(fvec4) CompositeExtract 1957 1 + Store 1943(texel) 1958 + 1959: 47(int) CompositeExtract 1957 0 + 1960: 180 Load 182(s2DShadow) + 1961: 148(fvec3) Load 150(c3) + 1962: 174(ptr) AccessChain 1943(texel) 173 + 1963: 6(float) CompositeExtract 1961 2 + 1965:1964(ResType) ImageSparseSampleDrefImplicitLod 1960 1961 1963 + 1966: 6(float) CompositeExtract 1965 1 + Store 1962 1966 + 1967: 47(int) CompositeExtract 1965 0 + 1968: 192 Load 194(sCubeShadow) + 1969: 7(fvec4) Load 197(c4) + 1970: 174(ptr) AccessChain 1943(texel) 173 + 1971: 6(float) CompositeExtract 1969 3 + 1972:1964(ResType) ImageSparseSampleDrefImplicitLod 1968 1969 1971 + 1973: 6(float) CompositeExtract 1972 1 + Store 1970 1973 + 1974: 47(int) CompositeExtract 1972 0 + 1975: 215 Load 217(s2DArray) + 1976: 148(fvec3) Load 150(c3) + 1977:1946(ResType) ImageSparseSampleImplicitLod 1975 1976 + 1978: 7(fvec4) CompositeExtract 1977 1 + Store 1943(texel) 1978 + 1979: 47(int) CompositeExtract 1977 0 + 1980: 224 Load 226(sCubeArray) + 1981: 7(fvec4) Load 197(c4) + 1982:1946(ResType) ImageSparseSampleImplicitLod 1980 1981 + 1983: 7(fvec4) CompositeExtract 1982 1 + Store 1943(texel) 1983 + 1984: 47(int) CompositeExtract 1982 0 + 1985: 245 Load 247(s2DArrayShadow) + 1986: 7(fvec4) Load 197(c4) + 1987: 174(ptr) AccessChain 1943(texel) 173 + 1988: 6(float) CompositeExtract 1986 3 + 1989:1964(ResType) ImageSparseSampleDrefImplicitLod 1985 1986 1988 + 1990: 6(float) CompositeExtract 1989 1 + Store 1987 1990 + 1991: 47(int) CompositeExtract 1989 0 + 1992: 257 Load 259(s2DRect) + 1993: 52(fvec2) Load 138(c2) + 1994:1946(ResType) ImageSparseSampleImplicitLod 1992 1993 + 1995: 7(fvec4) CompositeExtract 1994 1 + Store 1943(texel) 1995 + 1996: 47(int) CompositeExtract 1994 0 + 1997: 266 Load 268(s2DRectShadow) + 1998: 148(fvec3) Load 150(c3) + 1999: 174(ptr) AccessChain 1943(texel) 173 + 2000: 6(float) CompositeExtract 1998 2 + 2001:1964(ResType) ImageSparseSampleDrefImplicitLod 1997 1998 2000 + 2002: 6(float) CompositeExtract 2001 1 + Store 1999 2002 + 2003: 47(int) CompositeExtract 2001 0 + 2004: 278 Load 280(sCubeArrayShadow) + 2005: 7(fvec4) Load 197(c4) + 2006: 6(float) Load 283(compare) + 2007: 174(ptr) AccessChain 1943(texel) 173 + 2008:1964(ResType) ImageSparseSampleDrefImplicitLod 2004 2005 2006 + 2009: 6(float) CompositeExtract 2008 1 + Store 2007 2009 + 2010: 47(int) CompositeExtract 2008 0 + 2011: 7(fvec4) Load 1943(texel) + ReturnValue 2011 + FunctionEnd +70(testSparseTextureLod(): 7(fvec4) Function None 8 + 71: Label + 2014(texel): 63(ptr) Variable Function + Store 2014(texel) 120 + 2015: 133 Load 135(s2D) + 2016: 52(fvec2) Load 138(c2) + 2017: 6(float) Load 371(lod) + 2018:1946(ResType) ImageSparseSampleExplicitLod 2015 2016 Lod 2017 + 2019: 7(fvec4) CompositeExtract 2018 1 + Store 2014(texel) 2019 + 2020: 47(int) CompositeExtract 2018 0 + 2021: 144 Load 146(s3D) + 2022: 148(fvec3) Load 150(c3) + 2023: 6(float) Load 371(lod) + 2024:1946(ResType) ImageSparseSampleExplicitLod 2021 2022 Lod 2023 + 2025: 7(fvec4) CompositeExtract 2024 1 + Store 2014(texel) 2025 + 2026: 47(int) CompositeExtract 2024 0 + 2027: 156 Load 158(sCube) + 2028: 148(fvec3) Load 150(c3) + 2029: 6(float) Load 371(lod) + 2030:1946(ResType) ImageSparseSampleExplicitLod 2027 2028 Lod 2029 + 2031: 7(fvec4) CompositeExtract 2030 1 + Store 2014(texel) 2031 + 2032: 47(int) CompositeExtract 2030 0 + 2033: 180 Load 182(s2DShadow) + 2034: 148(fvec3) Load 150(c3) + 2035: 6(float) Load 371(lod) + 2036: 174(ptr) AccessChain 2014(texel) 173 + 2037: 6(float) CompositeExtract 2034 2 + 2038:1964(ResType) ImageSparseSampleDrefExplicitLod 2033 2034 2037 Lod 2035 + 2039: 6(float) CompositeExtract 2038 1 + Store 2036 2039 + 2040: 47(int) CompositeExtract 2038 0 + 2041: 215 Load 217(s2DArray) + 2042: 148(fvec3) Load 150(c3) + 2043: 6(float) Load 371(lod) + 2044:1946(ResType) ImageSparseSampleExplicitLod 2041 2042 Lod 2043 + 2045: 7(fvec4) CompositeExtract 2044 1 + Store 2014(texel) 2045 + 2046: 47(int) CompositeExtract 2044 0 + 2047: 224 Load 226(sCubeArray) + 2048: 7(fvec4) Load 197(c4) + 2049: 6(float) Load 371(lod) + 2050:1946(ResType) ImageSparseSampleExplicitLod 2047 2048 Lod 2049 + 2051: 7(fvec4) CompositeExtract 2050 1 + Store 2014(texel) 2051 + 2052: 47(int) CompositeExtract 2050 0 + 2053: 7(fvec4) Load 2014(texel) + ReturnValue 2053 + FunctionEnd +72(testSparseTextureOffset(): 7(fvec4) Function None 8 + 73: Label + 2056(texel): 63(ptr) Variable Function + Store 2056(texel) 120 + 2057: 133 Load 135(s2D) + 2058: 52(fvec2) Load 138(c2) + 2059:1946(ResType) ImageSparseSampleImplicitLod 2057 2058 ConstOffset 452 + 2060: 7(fvec4) CompositeExtract 2059 1 + Store 2056(texel) 2060 + 2061: 47(int) CompositeExtract 2059 0 + 2062: 144 Load 146(s3D) + 2063: 148(fvec3) Load 150(c3) + 2064:1946(ResType) ImageSparseSampleImplicitLod 2062 2063 ConstOffset 459 + 2065: 7(fvec4) CompositeExtract 2064 1 + Store 2056(texel) 2065 + 2066: 47(int) CompositeExtract 2064 0 + 2067: 257 Load 259(s2DRect) + 2068: 52(fvec2) Load 138(c2) + 2069:1946(ResType) ImageSparseSampleImplicitLod 2067 2068 ConstOffset 452 + 2070: 7(fvec4) CompositeExtract 2069 1 + Store 2056(texel) 2070 + 2071: 47(int) CompositeExtract 2069 0 + 2072: 266 Load 268(s2DRectShadow) + 2073: 148(fvec3) Load 150(c3) + 2074: 174(ptr) AccessChain 2056(texel) 173 + 2075: 6(float) CompositeExtract 2073 2 + 2076:1964(ResType) ImageSparseSampleDrefImplicitLod 2072 2073 2075 ConstOffset 452 + 2077: 6(float) CompositeExtract 2076 1 + Store 2074 2077 + 2078: 47(int) CompositeExtract 2076 0 + 2079: 180 Load 182(s2DShadow) + 2080: 148(fvec3) Load 150(c3) + 2081: 174(ptr) AccessChain 2056(texel) 173 + 2082: 6(float) CompositeExtract 2080 2 + 2083:1964(ResType) ImageSparseSampleDrefImplicitLod 2079 2080 2082 ConstOffset 452 + 2084: 6(float) CompositeExtract 2083 1 + Store 2081 2084 + 2085: 47(int) CompositeExtract 2083 0 + 2086: 215 Load 217(s2DArray) + 2087: 148(fvec3) Load 150(c3) + 2088:1946(ResType) ImageSparseSampleImplicitLod 2086 2087 ConstOffset 452 + 2089: 7(fvec4) CompositeExtract 2088 1 + Store 2056(texel) 2089 + 2090: 47(int) CompositeExtract 2088 0 + 2091: 245 Load 247(s2DArrayShadow) + 2092: 7(fvec4) Load 197(c4) + 2093: 174(ptr) AccessChain 2056(texel) 173 + 2094: 6(float) CompositeExtract 2092 3 + 2095:1964(ResType) ImageSparseSampleDrefImplicitLod 2091 2092 2094 ConstOffset 452 + 2096: 6(float) CompositeExtract 2095 1 + Store 2093 2096 + 2097: 47(int) CompositeExtract 2095 0 + 2098: 7(fvec4) Load 2056(texel) + ReturnValue 2098 + FunctionEnd +74(testSparseTextureLodOffset(): 7(fvec4) Function None 8 + 75: Label + 2101(texel): 63(ptr) Variable Function + Store 2101(texel) 120 + 2102: 133 Load 135(s2D) + 2103: 52(fvec2) Load 138(c2) + 2104: 6(float) Load 371(lod) + 2105:1946(ResType) ImageSparseSampleExplicitLod 2102 2103 Lod ConstOffset 2104 452 + 2106: 7(fvec4) CompositeExtract 2105 1 + Store 2101(texel) 2106 + 2107: 47(int) CompositeExtract 2105 0 + 2108: 144 Load 146(s3D) + 2109: 148(fvec3) Load 150(c3) + 2110: 6(float) Load 371(lod) + 2111:1946(ResType) ImageSparseSampleExplicitLod 2108 2109 Lod ConstOffset 2110 459 + 2112: 7(fvec4) CompositeExtract 2111 1 + Store 2101(texel) 2112 + 2113: 47(int) CompositeExtract 2111 0 + 2114: 180 Load 182(s2DShadow) + 2115: 148(fvec3) Load 150(c3) + 2116: 6(float) Load 371(lod) + 2117: 174(ptr) AccessChain 2101(texel) 173 + 2118: 6(float) CompositeExtract 2115 2 + 2119:1964(ResType) ImageSparseSampleDrefExplicitLod 2114 2115 2118 Lod ConstOffset 2116 452 + 2120: 6(float) CompositeExtract 2119 1 + Store 2117 2120 + 2121: 47(int) CompositeExtract 2119 0 + 2122: 215 Load 217(s2DArray) + 2123: 148(fvec3) Load 150(c3) + 2124: 6(float) Load 371(lod) + 2125:1946(ResType) ImageSparseSampleExplicitLod 2122 2123 Lod ConstOffset 2124 452 + 2126: 7(fvec4) CompositeExtract 2125 1 + Store 2101(texel) 2126 + 2127: 47(int) CompositeExtract 2125 0 + 2128: 7(fvec4) Load 2101(texel) + ReturnValue 2128 + FunctionEnd +76(testSparseTextureGrad(): 7(fvec4) Function None 8 + 77: Label + 2131(texel): 63(ptr) Variable Function + Store 2131(texel) 120 + 2132: 133 Load 135(s2D) + 2133: 52(fvec2) Load 138(c2) + 2134: 52(fvec2) Load 873(dPdxy2) + 2135:1946(ResType) ImageSparseSampleExplicitLod 2132 2133 Grad 2134 2134 + 2136: 7(fvec4) CompositeExtract 2135 1 + Store 2131(texel) 2136 + 2137: 47(int) CompositeExtract 2135 0 + 2138: 144 Load 146(s3D) + 2139: 148(fvec3) Load 150(c3) + 2140: 148(fvec3) Load 880(dPdxy3) + 2141:1946(ResType) ImageSparseSampleExplicitLod 2138 2139 Grad 2140 2140 + 2142: 7(fvec4) CompositeExtract 2141 1 + Store 2131(texel) 2142 + 2143: 47(int) CompositeExtract 2141 0 + 2144: 156 Load 158(sCube) + 2145: 148(fvec3) Load 150(c3) + 2146: 148(fvec3) Load 880(dPdxy3) + 2147:1946(ResType) ImageSparseSampleExplicitLod 2144 2145 Grad 2146 2146 + 2148: 7(fvec4) CompositeExtract 2147 1 + Store 2131(texel) 2148 + 2149: 47(int) CompositeExtract 2147 0 + 2150: 257 Load 259(s2DRect) + 2151: 52(fvec2) Load 138(c2) + 2152: 52(fvec2) Load 873(dPdxy2) + 2153:1946(ResType) ImageSparseSampleExplicitLod 2150 2151 Grad 2152 2152 + 2154: 7(fvec4) CompositeExtract 2153 1 + Store 2131(texel) 2154 + 2155: 47(int) CompositeExtract 2153 0 + 2156: 266 Load 268(s2DRectShadow) + 2157: 148(fvec3) Load 150(c3) + 2158: 52(fvec2) Load 873(dPdxy2) + 2159: 174(ptr) AccessChain 2131(texel) 173 + 2160: 6(float) CompositeExtract 2157 2 + 2161:1964(ResType) ImageSparseSampleDrefExplicitLod 2156 2157 2160 Grad 2158 2158 + 2162: 6(float) CompositeExtract 2161 1 + Store 2159 2162 + 2163: 47(int) CompositeExtract 2161 0 + 2164: 180 Load 182(s2DShadow) + 2165: 148(fvec3) Load 150(c3) + 2166: 52(fvec2) Load 873(dPdxy2) + 2167: 174(ptr) AccessChain 2131(texel) 173 + 2168: 6(float) CompositeExtract 2165 2 + 2169:1964(ResType) ImageSparseSampleDrefExplicitLod 2164 2165 2168 Grad 2166 2166 + 2170: 6(float) CompositeExtract 2169 1 + Store 2167 2170 + 2171: 47(int) CompositeExtract 2169 0 + 2172: 192 Load 194(sCubeShadow) + 2173: 7(fvec4) Load 197(c4) + 2174: 148(fvec3) Load 880(dPdxy3) + 2175: 174(ptr) AccessChain 2131(texel) 173 + 2176: 6(float) CompositeExtract 2173 3 + 2177:1964(ResType) ImageSparseSampleDrefExplicitLod 2172 2173 2176 Grad 2174 2174 + 2178: 6(float) CompositeExtract 2177 1 + Store 2175 2178 + 2179: 47(int) CompositeExtract 2177 0 + 2180: 215 Load 217(s2DArray) + 2181: 148(fvec3) Load 150(c3) + 2182: 52(fvec2) Load 873(dPdxy2) + 2183:1946(ResType) ImageSparseSampleExplicitLod 2180 2181 Grad 2182 2182 + 2184: 7(fvec4) CompositeExtract 2183 1 + Store 2131(texel) 2184 + 2185: 47(int) CompositeExtract 2183 0 + 2186: 245 Load 247(s2DArrayShadow) + 2187: 7(fvec4) Load 197(c4) + 2188: 52(fvec2) Load 873(dPdxy2) + 2189: 174(ptr) AccessChain 2131(texel) 173 + 2190: 6(float) CompositeExtract 2187 3 + 2191:1964(ResType) ImageSparseSampleDrefExplicitLod 2186 2187 2190 Grad 2188 2188 + 2192: 6(float) CompositeExtract 2191 1 + Store 2189 2192 + 2193: 47(int) CompositeExtract 2191 0 + 2194: 224 Load 226(sCubeArray) + 2195: 7(fvec4) Load 197(c4) + 2196: 148(fvec3) Load 880(dPdxy3) + 2197:1946(ResType) ImageSparseSampleExplicitLod 2194 2195 Grad 2196 2196 + 2198: 7(fvec4) CompositeExtract 2197 1 + Store 2131(texel) 2198 + 2199: 47(int) CompositeExtract 2197 0 + 2200: 7(fvec4) Load 2131(texel) + ReturnValue 2200 + FunctionEnd +78(testSparseTextureGradOffset(): 7(fvec4) Function None 8 + 79: Label + 2203(texel): 63(ptr) Variable Function + Store 2203(texel) 120 + 2204: 133 Load 135(s2D) + 2205: 52(fvec2) Load 138(c2) + 2206: 52(fvec2) Load 873(dPdxy2) + 2207:1946(ResType) ImageSparseSampleExplicitLod 2204 2205 Grad ConstOffset 2206 2206 452 + 2208: 7(fvec4) CompositeExtract 2207 1 + Store 2203(texel) 2208 + 2209: 47(int) CompositeExtract 2207 0 + 2210: 144 Load 146(s3D) + 2211: 148(fvec3) Load 150(c3) + 2212: 148(fvec3) Load 880(dPdxy3) + 2213:1946(ResType) ImageSparseSampleExplicitLod 2210 2211 Grad ConstOffset 2212 2212 459 + 2214: 7(fvec4) CompositeExtract 2213 1 + Store 2203(texel) 2214 + 2215: 47(int) CompositeExtract 2213 0 + 2216: 257 Load 259(s2DRect) + 2217: 52(fvec2) Load 138(c2) + 2218: 52(fvec2) Load 873(dPdxy2) + 2219:1946(ResType) ImageSparseSampleExplicitLod 2216 2217 Grad ConstOffset 2218 2218 452 + 2220: 7(fvec4) CompositeExtract 2219 1 + Store 2203(texel) 2220 + 2221: 47(int) CompositeExtract 2219 0 + 2222: 266 Load 268(s2DRectShadow) + 2223: 148(fvec3) Load 150(c3) + 2224: 52(fvec2) Load 873(dPdxy2) + 2225: 174(ptr) AccessChain 2203(texel) 173 + 2226: 6(float) CompositeExtract 2223 2 + 2227:1964(ResType) ImageSparseSampleDrefExplicitLod 2222 2223 2226 Grad ConstOffset 2224 2224 452 + 2228: 6(float) CompositeExtract 2227 1 + Store 2225 2228 + 2229: 47(int) CompositeExtract 2227 0 + 2230: 180 Load 182(s2DShadow) + 2231: 148(fvec3) Load 150(c3) + 2232: 52(fvec2) Load 873(dPdxy2) + 2233: 174(ptr) AccessChain 2203(texel) 173 + 2234: 6(float) CompositeExtract 2231 2 + 2235:1964(ResType) ImageSparseSampleDrefExplicitLod 2230 2231 2234 Grad ConstOffset 2232 2232 452 + 2236: 6(float) CompositeExtract 2235 1 + Store 2233 2236 + 2237: 47(int) CompositeExtract 2235 0 + 2238: 215 Load 217(s2DArray) + 2239: 148(fvec3) Load 150(c3) + 2240: 52(fvec2) Load 873(dPdxy2) + 2241:1946(ResType) ImageSparseSampleExplicitLod 2238 2239 Grad ConstOffset 2240 2240 452 + 2242: 7(fvec4) CompositeExtract 2241 1 + Store 2203(texel) 2242 + 2243: 47(int) CompositeExtract 2241 0 + 2244: 245 Load 247(s2DArrayShadow) + 2245: 7(fvec4) Load 197(c4) + 2246: 52(fvec2) Load 873(dPdxy2) + 2247: 174(ptr) AccessChain 2203(texel) 173 + 2248: 6(float) CompositeExtract 2245 3 + 2249:1964(ResType) ImageSparseSampleDrefExplicitLod 2244 2245 2248 Grad ConstOffset 2246 2246 452 + 2250: 6(float) CompositeExtract 2249 1 + Store 2247 2250 + 2251: 47(int) CompositeExtract 2249 0 + 2252: 7(fvec4) Load 2203(texel) + ReturnValue 2252 + FunctionEnd +80(testSparseTexelFetch(): 7(fvec4) Function None 8 + 81: Label + 2255(texel): 63(ptr) Variable Function + Store 2255(texel) 120 + 2256: 133 Load 135(s2D) + 2257: 52(fvec2) Load 138(c2) + 2258: 451(ivec2) ConvertFToS 2257 + 2259: 6(float) Load 371(lod) + 2260: 47(int) ConvertFToS 2259 + 2261: 132 Image 2256 + 2262:1946(ResType) ImageSparseFetch 2261 2258 Lod 2260 + 2263: 7(fvec4) CompositeExtract 2262 1 + Store 2255(texel) 2263 + 2264: 47(int) CompositeExtract 2262 0 + 2265: 144 Load 146(s3D) + 2266: 148(fvec3) Load 150(c3) + 2267: 458(ivec3) ConvertFToS 2266 + 2268: 6(float) Load 371(lod) + 2269: 47(int) ConvertFToS 2268 + 2270: 143 Image 2265 + 2271:1946(ResType) ImageSparseFetch 2270 2267 Lod 2269 + 2272: 7(fvec4) CompositeExtract 2271 1 + Store 2255(texel) 2272 + 2273: 47(int) CompositeExtract 2271 0 + 2274: 257 Load 259(s2DRect) + 2275: 52(fvec2) Load 138(c2) + 2276: 451(ivec2) ConvertFToS 2275 + 2277: 256 Image 2274 + 2278:1946(ResType) ImageSparseFetch 2277 2276 + 2279: 7(fvec4) CompositeExtract 2278 1 + Store 2255(texel) 2279 + 2280: 47(int) CompositeExtract 2278 0 + 2281: 215 Load 217(s2DArray) + 2282: 148(fvec3) Load 150(c3) + 2283: 458(ivec3) ConvertFToS 2282 + 2284: 6(float) Load 371(lod) + 2285: 47(int) ConvertFToS 2284 + 2286: 214 Image 2281 + 2287:1946(ResType) ImageSparseFetch 2286 2283 Lod 2285 + 2288: 7(fvec4) CompositeExtract 2287 1 + Store 2255(texel) 2288 + 2289: 47(int) CompositeExtract 2287 0 + 2290: 782 Load 784(s2DMS) + 2291: 52(fvec2) Load 138(c2) + 2292: 451(ivec2) ConvertFToS 2291 + 2293: 781 Image 2290 + 2294:1946(ResType) ImageSparseFetch 2293 2292 Sample 445 + 2295: 7(fvec4) CompositeExtract 2294 1 + Store 2255(texel) 2295 + 2296: 47(int) CompositeExtract 2294 0 + 2297: 793 Load 795(s2DMSArray) + 2298: 148(fvec3) Load 150(c3) + 2299: 458(ivec3) ConvertFToS 2298 + 2300: 792 Image 2297 + 2301:1946(ResType) ImageSparseFetch 2300 2299 Sample 799 + 2302: 7(fvec4) CompositeExtract 2301 1 + Store 2255(texel) 2302 + 2303: 47(int) CompositeExtract 2301 0 + 2304: 7(fvec4) Load 2255(texel) + ReturnValue 2304 + FunctionEnd +82(testSparseTexelFetchOffset(): 7(fvec4) Function None 8 + 83: Label + 2307(texel): 63(ptr) Variable Function + Store 2307(texel) 120 + 2308: 133 Load 135(s2D) + 2309: 52(fvec2) Load 138(c2) + 2310: 451(ivec2) ConvertFToS 2309 + 2311: 6(float) Load 371(lod) + 2312: 47(int) ConvertFToS 2311 + 2313: 132 Image 2308 + 2314:1946(ResType) ImageSparseFetch 2313 2310 Lod ConstOffset 2312 452 + 2315: 7(fvec4) CompositeExtract 2314 1 + Store 2307(texel) 2315 + 2316: 47(int) CompositeExtract 2314 0 + 2317: 144 Load 146(s3D) + 2318: 148(fvec3) Load 150(c3) + 2319: 458(ivec3) ConvertFToS 2318 + 2320: 6(float) Load 371(lod) + 2321: 47(int) ConvertFToS 2320 + 2322: 143 Image 2317 + 2323:1946(ResType) ImageSparseFetch 2322 2319 Lod ConstOffset 2321 459 + 2324: 7(fvec4) CompositeExtract 2323 1 + Store 2307(texel) 2324 + 2325: 47(int) CompositeExtract 2323 0 + 2326: 257 Load 259(s2DRect) + 2327: 52(fvec2) Load 138(c2) + 2328: 451(ivec2) ConvertFToS 2327 + 2329: 256 Image 2326 + 2330:1946(ResType) ImageSparseFetch 2329 2328 ConstOffset 452 + 2331: 7(fvec4) CompositeExtract 2330 1 + Store 2307(texel) 2331 + 2332: 47(int) CompositeExtract 2330 0 + 2333: 215 Load 217(s2DArray) + 2334: 148(fvec3) Load 150(c3) + 2335: 458(ivec3) ConvertFToS 2334 + 2336: 6(float) Load 371(lod) + 2337: 47(int) ConvertFToS 2336 + 2338: 214 Image 2333 + 2339:1946(ResType) ImageSparseFetch 2338 2335 Lod ConstOffset 2337 452 + 2340: 7(fvec4) CompositeExtract 2339 1 + Store 2307(texel) 2340 + 2341: 47(int) CompositeExtract 2339 0 + 2342: 7(fvec4) Load 2307(texel) + ReturnValue 2342 + FunctionEnd +84(testSparseTextureGather(): 7(fvec4) Function None 8 + 85: Label + 2345(texel): 63(ptr) Variable Function + Store 2345(texel) 120 + 2346: 133 Load 135(s2D) + 2347: 52(fvec2) Load 138(c2) + 2348:1946(ResType) ImageSparseGather 2346 2347 1230 + 2349: 7(fvec4) CompositeExtract 2348 1 + Store 2345(texel) 2349 + 2350: 47(int) CompositeExtract 2348 0 + 2351: 215 Load 217(s2DArray) + 2352: 148(fvec3) Load 150(c3) + 2353:1946(ResType) ImageSparseGather 2351 2352 1230 + 2354: 7(fvec4) CompositeExtract 2353 1 + Store 2345(texel) 2354 + 2355: 47(int) CompositeExtract 2353 0 + 2356: 156 Load 158(sCube) + 2357: 148(fvec3) Load 150(c3) + 2358:1946(ResType) ImageSparseGather 2356 2357 1230 + 2359: 7(fvec4) CompositeExtract 2358 1 + Store 2345(texel) 2359 + 2360: 47(int) CompositeExtract 2358 0 + 2361: 224 Load 226(sCubeArray) + 2362: 7(fvec4) Load 197(c4) + 2363:1946(ResType) ImageSparseGather 2361 2362 1230 + 2364: 7(fvec4) CompositeExtract 2363 1 + Store 2345(texel) 2364 + 2365: 47(int) CompositeExtract 2363 0 + 2366: 257 Load 259(s2DRect) + 2367: 52(fvec2) Load 138(c2) + 2368:1946(ResType) ImageSparseGather 2366 2367 1230 + 2369: 7(fvec4) CompositeExtract 2368 1 + Store 2345(texel) 2369 + 2370: 47(int) CompositeExtract 2368 0 + 2371: 180 Load 182(s2DShadow) + 2372: 52(fvec2) Load 138(c2) + 2373: 6(float) Load 283(compare) + 2374:1946(ResType) ImageSparseDrefGather 2371 2372 2373 + 2375: 7(fvec4) CompositeExtract 2374 1 + Store 2345(texel) 2375 + 2376: 47(int) CompositeExtract 2374 0 + 2377: 245 Load 247(s2DArrayShadow) + 2378: 148(fvec3) Load 150(c3) + 2379: 6(float) Load 283(compare) + 2380:1946(ResType) ImageSparseDrefGather 2377 2378 2379 + 2381: 7(fvec4) CompositeExtract 2380 1 + Store 2345(texel) 2381 + 2382: 47(int) CompositeExtract 2380 0 + 2383: 192 Load 194(sCubeShadow) + 2384: 148(fvec3) Load 150(c3) + 2385: 6(float) Load 283(compare) + 2386:1946(ResType) ImageSparseDrefGather 2383 2384 2385 + 2387: 7(fvec4) CompositeExtract 2386 1 + Store 2345(texel) 2387 + 2388: 47(int) CompositeExtract 2386 0 + 2389: 278 Load 280(sCubeArrayShadow) + 2390: 7(fvec4) Load 197(c4) + 2391: 6(float) Load 283(compare) + 2392:1946(ResType) ImageSparseDrefGather 2389 2390 2391 + 2393: 7(fvec4) CompositeExtract 2392 1 + Store 2345(texel) 2393 + 2394: 47(int) CompositeExtract 2392 0 + 2395: 266 Load 268(s2DRectShadow) + 2396: 52(fvec2) Load 138(c2) + 2397: 6(float) Load 283(compare) + 2398:1946(ResType) ImageSparseDrefGather 2395 2396 2397 + 2399: 7(fvec4) CompositeExtract 2398 1 + Store 2345(texel) 2399 + 2400: 47(int) CompositeExtract 2398 0 + 2401: 7(fvec4) Load 2345(texel) + ReturnValue 2401 + FunctionEnd +86(testSparseTextureGatherOffset(): 7(fvec4) Function None 8 + 87: Label + 2404(texel): 63(ptr) Variable Function + Store 2404(texel) 120 + 2405: 133 Load 135(s2D) + 2406: 52(fvec2) Load 138(c2) + 2407:1946(ResType) ImageSparseGather 2405 2406 1230 ConstOffset 452 + 2408: 7(fvec4) CompositeExtract 2407 1 + Store 2404(texel) 2408 + 2409: 47(int) CompositeExtract 2407 0 + 2410: 215 Load 217(s2DArray) + 2411: 148(fvec3) Load 150(c3) + 2412:1946(ResType) ImageSparseGather 2410 2411 1230 ConstOffset 452 + 2413: 7(fvec4) CompositeExtract 2412 1 + Store 2404(texel) 2413 + 2414: 47(int) CompositeExtract 2412 0 + 2415: 257 Load 259(s2DRect) + 2416: 52(fvec2) Load 138(c2) + 2417:1946(ResType) ImageSparseGather 2415 2416 1230 ConstOffset 452 + 2418: 7(fvec4) CompositeExtract 2417 1 + Store 2404(texel) 2418 + 2419: 47(int) CompositeExtract 2417 0 + 2420: 180 Load 182(s2DShadow) + 2421: 52(fvec2) Load 138(c2) + 2422: 6(float) Load 283(compare) + 2423:1946(ResType) ImageSparseDrefGather 2420 2421 2422 ConstOffset 452 + 2424: 7(fvec4) CompositeExtract 2423 1 + Store 2404(texel) 2424 + 2425: 47(int) CompositeExtract 2423 0 + 2426: 245 Load 247(s2DArrayShadow) + 2427: 148(fvec3) Load 150(c3) + 2428: 6(float) Load 283(compare) + 2429:1946(ResType) ImageSparseDrefGather 2426 2427 2428 ConstOffset 452 + 2430: 7(fvec4) CompositeExtract 2429 1 + Store 2404(texel) 2430 + 2431: 47(int) CompositeExtract 2429 0 + 2432: 266 Load 268(s2DRectShadow) + 2433: 52(fvec2) Load 138(c2) + 2434: 6(float) Load 283(compare) + 2435:1946(ResType) ImageSparseDrefGather 2432 2433 2434 ConstOffset 452 + 2436: 7(fvec4) CompositeExtract 2435 1 + Store 2404(texel) 2436 + 2437: 47(int) CompositeExtract 2435 0 + 2438: 7(fvec4) Load 2404(texel) + ReturnValue 2438 + FunctionEnd +88(testSparseTextureGatherOffsets(): 7(fvec4) Function None 8 + 89: Label + 2441(texel): 63(ptr) Variable Function + Store 2441(texel) 120 + 2442: 133 Load 135(s2D) + 2443: 52(fvec2) Load 138(c2) + 2454:1946(ResType) ImageSparseGather 2442 2443 1230 ConstOffsets 2453 + 2455: 7(fvec4) CompositeExtract 2454 1 + Store 2441(texel) 2455 + 2456: 47(int) CompositeExtract 2454 0 + 2457: 215 Load 217(s2DArray) + 2458: 148(fvec3) Load 150(c3) + 2459:1946(ResType) ImageSparseGather 2457 2458 1230 ConstOffsets 2453 + 2460: 7(fvec4) CompositeExtract 2459 1 + Store 2441(texel) 2460 + 2461: 47(int) CompositeExtract 2459 0 + 2462: 257 Load 259(s2DRect) + 2463: 52(fvec2) Load 138(c2) + 2464:1946(ResType) ImageSparseGather 2462 2463 1230 ConstOffsets 2453 + 2465: 7(fvec4) CompositeExtract 2464 1 + Store 2441(texel) 2465 + 2466: 47(int) CompositeExtract 2464 0 + 2467: 180 Load 182(s2DShadow) + 2468: 52(fvec2) Load 138(c2) + 2469: 6(float) Load 283(compare) + 2470:1946(ResType) ImageSparseDrefGather 2467 2468 2469 ConstOffsets 2453 + 2471: 7(fvec4) CompositeExtract 2470 1 + Store 2441(texel) 2471 + 2472: 47(int) CompositeExtract 2470 0 + 2473: 245 Load 247(s2DArrayShadow) + 2474: 148(fvec3) Load 150(c3) + 2475: 6(float) Load 283(compare) + 2476:1946(ResType) ImageSparseDrefGather 2473 2474 2475 ConstOffsets 2453 + 2477: 7(fvec4) CompositeExtract 2476 1 + Store 2441(texel) 2477 + 2478: 47(int) CompositeExtract 2476 0 + 2479: 266 Load 268(s2DRectShadow) + 2480: 52(fvec2) Load 138(c2) + 2481: 6(float) Load 283(compare) + 2482:1946(ResType) ImageSparseDrefGather 2479 2480 2481 ConstOffsets 2453 + 2483: 7(fvec4) CompositeExtract 2482 1 + Store 2441(texel) 2483 + 2484: 47(int) CompositeExtract 2482 0 + 2485: 7(fvec4) Load 2441(texel) + ReturnValue 2485 + FunctionEnd +90(testSparseTextureGatherLod(): 7(fvec4) Function None 8 + 91: Label + 2488(texel): 63(ptr) Variable Function + Store 2488(texel) 120 + 2489: 133 Load 135(s2D) + 2490: 52(fvec2) Load 138(c2) + 2491: 6(float) Load 371(lod) + 2492:1946(ResType) ImageSparseGather 2489 2490 1230 Lod 2491 + 2493: 7(fvec4) CompositeExtract 2492 1 + Store 2488(texel) 2493 + 2494: 47(int) CompositeExtract 2492 0 + 2495: 215 Load 217(s2DArray) + 2496: 148(fvec3) Load 150(c3) + 2497: 6(float) Load 371(lod) + 2498:1946(ResType) ImageSparseGather 2495 2496 1230 Lod 2497 + 2499: 7(fvec4) CompositeExtract 2498 1 + Store 2488(texel) 2499 + 2500: 47(int) CompositeExtract 2498 0 + 2501: 156 Load 158(sCube) + 2502: 148(fvec3) Load 150(c3) + 2503: 6(float) Load 371(lod) + 2504:1946(ResType) ImageSparseGather 2501 2502 1230 Lod 2503 + 2505: 7(fvec4) CompositeExtract 2504 1 + Store 2488(texel) 2505 + 2506: 47(int) CompositeExtract 2504 0 + 2507: 224 Load 226(sCubeArray) + 2508: 7(fvec4) Load 197(c4) + 2509: 6(float) Load 371(lod) + 2510:1946(ResType) ImageSparseGather 2507 2508 1230 Lod 2509 + 2511: 7(fvec4) CompositeExtract 2510 1 + Store 2488(texel) 2511 + 2512: 47(int) CompositeExtract 2510 0 + 2513: 7(fvec4) Load 2488(texel) + ReturnValue 2513 + FunctionEnd +92(testSparseTextureGatherLodOffset(): 7(fvec4) Function None 8 + 93: Label + 2516(texel): 63(ptr) Variable Function + Store 2516(texel) 120 + 2517: 133 Load 135(s2D) + 2518: 52(fvec2) Load 138(c2) + 2519: 6(float) Load 371(lod) + 2520:1946(ResType) ImageSparseGather 2517 2518 1230 Lod ConstOffset 2519 452 + 2521: 7(fvec4) CompositeExtract 2520 1 + Store 2516(texel) 2521 + 2522: 47(int) CompositeExtract 2520 0 + 2523: 215 Load 217(s2DArray) + 2524: 148(fvec3) Load 150(c3) + 2525: 6(float) Load 371(lod) + 2526:1946(ResType) ImageSparseGather 2523 2524 1230 Lod ConstOffset 2525 452 + 2527: 7(fvec4) CompositeExtract 2526 1 + Store 2516(texel) 2527 + 2528: 47(int) CompositeExtract 2526 0 + 2529: 7(fvec4) Load 2516(texel) + ReturnValue 2529 + FunctionEnd +94(testSparseTextureGatherLodOffsets(): 7(fvec4) Function None 8 + 95: Label + 2532(texel): 63(ptr) Variable Function + Store 2532(texel) 120 + 2533: 133 Load 135(s2D) + 2534: 52(fvec2) Load 138(c2) + 2535: 6(float) Load 371(lod) + 2536:1946(ResType) ImageSparseGather 2533 2534 1230 Lod ConstOffsets 2535 1329 + 2537: 7(fvec4) CompositeExtract 2536 1 + Store 2532(texel) 2537 + 2538: 47(int) CompositeExtract 2536 0 + 2539: 215 Load 217(s2DArray) + 2540: 148(fvec3) Load 150(c3) + 2541: 6(float) Load 371(lod) + 2542:1946(ResType) ImageSparseGather 2539 2540 1230 Lod ConstOffsets 2541 1329 + 2543: 7(fvec4) CompositeExtract 2542 1 + Store 2532(texel) 2543 + 2544: 47(int) CompositeExtract 2542 0 + 2545: 7(fvec4) Load 2532(texel) + ReturnValue 2545 + FunctionEnd +96(testSparseImageLoad(): 7(fvec4) Function None 8 + 97: Label + 2548(texel): 63(ptr) Variable Function + Store 2548(texel) 120 + 2549: 1806 Load 1808(i2D) + 2550: 52(fvec2) Load 138(c2) + 2551: 451(ivec2) ConvertFToS 2550 + 2552:1946(ResType) ImageSparseRead 2549 2551 + 2553: 7(fvec4) CompositeExtract 2552 1 + Store 2548(texel) 2553 + 2554: 47(int) CompositeExtract 2552 0 + 2555: 1815 Load 1817(i3D) + 2556: 148(fvec3) Load 150(c3) + 2557: 458(ivec3) ConvertFToS 2556 + 2558:1946(ResType) ImageSparseRead 2555 2557 + 2559: 7(fvec4) CompositeExtract 2558 1 + Store 2548(texel) 2559 + 2560: 47(int) CompositeExtract 2558 0 + 2561: 1824 Load 1826(i2DRect) + 2562: 52(fvec2) Load 138(c2) + 2563: 451(ivec2) ConvertFToS 2562 + 2564:1946(ResType) ImageSparseRead 2561 2563 + 2565: 7(fvec4) CompositeExtract 2564 1 + Store 2548(texel) 2565 + 2566: 47(int) CompositeExtract 2564 0 + 2567: 1833 Load 1835(iCube) + 2568: 148(fvec3) Load 150(c3) + 2569: 458(ivec3) ConvertFToS 2568 + 2570:1946(ResType) ImageSparseRead 2567 2569 + 2571: 7(fvec4) CompositeExtract 2570 1 + Store 2548(texel) 2571 + 2572: 47(int) CompositeExtract 2570 0 + 2573: 1860 Load 1862(i2DArray) + 2574: 148(fvec3) Load 150(c3) + 2575: 458(ivec3) ConvertFToS 2574 + 2576:1946(ResType) ImageSparseRead 2573 2575 + 2577: 7(fvec4) CompositeExtract 2576 1 + Store 2548(texel) 2577 + 2578: 47(int) CompositeExtract 2576 0 + 2579: 1869 Load 1871(iCubeArray) + 2580: 148(fvec3) Load 150(c3) + 2581: 458(ivec3) ConvertFToS 2580 + 2582:1946(ResType) ImageSparseRead 2579 2581 + 2583: 7(fvec4) CompositeExtract 2582 1 + Store 2548(texel) 2583 + 2584: 47(int) CompositeExtract 2582 0 + 2585: 1878 Load 1880(i2DMS) + 2586: 52(fvec2) Load 138(c2) + 2587: 451(ivec2) ConvertFToS 2586 + 2588:1946(ResType) ImageSparseRead 2585 2587 Sample 445 + 2589: 7(fvec4) CompositeExtract 2588 1 + Store 2548(texel) 2589 + 2590: 47(int) CompositeExtract 2588 0 + 2591: 1887 Load 1889(i2DMSArray) + 2592: 148(fvec3) Load 150(c3) + 2593: 458(ivec3) ConvertFToS 2592 + 2594:1946(ResType) ImageSparseRead 2591 2593 Sample 799 + 2595: 7(fvec4) CompositeExtract 2594 1 + Store 2548(texel) 2595 + 2596: 47(int) CompositeExtract 2594 0 + 2597: 7(fvec4) Load 2548(texel) + ReturnValue 2597 + FunctionEnd +98(testSparseTextureClamp(): 7(fvec4) Function None 8 + 99: Label + 2600(texel): 63(ptr) Variable Function + Store 2600(texel) 120 + 2601: 133 Load 135(s2D) + 2602: 52(fvec2) Load 138(c2) + 2604: 6(float) Load 2603(lodClamp) + 2605:1946(ResType) ImageSparseSampleImplicitLod 2601 2602 MinLod 2604 + 2606: 7(fvec4) CompositeExtract 2605 1 + Store 2600(texel) 2606 + 2607: 47(int) CompositeExtract 2605 0 + 2608: 144 Load 146(s3D) + 2609: 148(fvec3) Load 150(c3) + 2610: 6(float) Load 2603(lodClamp) + 2611:1946(ResType) ImageSparseSampleImplicitLod 2608 2609 MinLod 2610 + 2612: 7(fvec4) CompositeExtract 2611 1 + Store 2600(texel) 2612 + 2613: 47(int) CompositeExtract 2611 0 + 2614: 156 Load 158(sCube) + 2615: 148(fvec3) Load 150(c3) + 2616: 6(float) Load 2603(lodClamp) + 2617:1946(ResType) ImageSparseSampleImplicitLod 2614 2615 MinLod 2616 + 2618: 7(fvec4) CompositeExtract 2617 1 + Store 2600(texel) 2618 + 2619: 47(int) CompositeExtract 2617 0 + 2620: 180 Load 182(s2DShadow) + 2621: 148(fvec3) Load 150(c3) + 2622: 6(float) Load 2603(lodClamp) + 2623: 174(ptr) AccessChain 2600(texel) 173 + 2624: 6(float) CompositeExtract 2621 2 + 2625:1964(ResType) ImageSparseSampleDrefImplicitLod 2620 2621 2624 MinLod 2622 + 2626: 6(float) CompositeExtract 2625 1 + Store 2623 2626 + 2627: 47(int) CompositeExtract 2625 0 + 2628: 192 Load 194(sCubeShadow) + 2629: 7(fvec4) Load 197(c4) + 2630: 6(float) Load 2603(lodClamp) + 2631: 174(ptr) AccessChain 2600(texel) 173 + 2632: 6(float) CompositeExtract 2629 3 + 2633:1964(ResType) ImageSparseSampleDrefImplicitLod 2628 2629 2632 MinLod 2630 + 2634: 6(float) CompositeExtract 2633 1 + Store 2631 2634 + 2635: 47(int) CompositeExtract 2633 0 + 2636: 215 Load 217(s2DArray) + 2637: 148(fvec3) Load 150(c3) + 2638: 6(float) Load 2603(lodClamp) + 2639:1946(ResType) ImageSparseSampleImplicitLod 2636 2637 MinLod 2638 + 2640: 7(fvec4) CompositeExtract 2639 1 + Store 2600(texel) 2640 + 2641: 47(int) CompositeExtract 2639 0 + 2642: 224 Load 226(sCubeArray) + 2643: 7(fvec4) Load 197(c4) + 2644: 6(float) Load 2603(lodClamp) + 2645:1946(ResType) ImageSparseSampleImplicitLod 2642 2643 MinLod 2644 + 2646: 7(fvec4) CompositeExtract 2645 1 + Store 2600(texel) 2646 + 2647: 47(int) CompositeExtract 2645 0 + 2648: 245 Load 247(s2DArrayShadow) + 2649: 7(fvec4) Load 197(c4) + 2650: 6(float) Load 2603(lodClamp) + 2651: 174(ptr) AccessChain 2600(texel) 173 + 2652: 6(float) CompositeExtract 2649 3 + 2653:1964(ResType) ImageSparseSampleDrefImplicitLod 2648 2649 2652 MinLod 2650 + 2654: 6(float) CompositeExtract 2653 1 + Store 2651 2654 + 2655: 47(int) CompositeExtract 2653 0 + 2656: 278 Load 280(sCubeArrayShadow) + 2657: 7(fvec4) Load 197(c4) + 2658: 6(float) Load 283(compare) + 2659: 6(float) Load 2603(lodClamp) + 2660: 174(ptr) AccessChain 2600(texel) 173 + 2661:1964(ResType) ImageSparseSampleDrefImplicitLod 2656 2657 2658 MinLod 2659 + 2662: 6(float) CompositeExtract 2661 1 + Store 2660 2662 + 2663: 47(int) CompositeExtract 2661 0 + 2664: 7(fvec4) Load 2600(texel) + ReturnValue 2664 + FunctionEnd +100(testTextureClamp(): 7(fvec4) Function None 8 + 101: Label + 2667(texel): 63(ptr) Variable Function + Store 2667(texel) 120 + 2668: 122 Load 124(s1D) + 2669: 6(float) Load 127(c1) + 2670: 6(float) Load 2603(lodClamp) + 2671: 7(fvec4) ImageSampleImplicitLod 2668 2669 MinLod 2670 + 2672: 7(fvec4) Load 2667(texel) + 2673: 7(fvec4) FAdd 2672 2671 + Store 2667(texel) 2673 + 2674: 133 Load 135(s2D) + 2675: 52(fvec2) Load 138(c2) + 2676: 6(float) Load 2603(lodClamp) + 2677: 7(fvec4) ImageSampleImplicitLod 2674 2675 MinLod 2676 + 2678: 7(fvec4) Load 2667(texel) + 2679: 7(fvec4) FAdd 2678 2677 + Store 2667(texel) 2679 + 2680: 144 Load 146(s3D) + 2681: 148(fvec3) Load 150(c3) + 2682: 6(float) Load 2603(lodClamp) + 2683: 7(fvec4) ImageSampleImplicitLod 2680 2681 MinLod 2682 + 2684: 7(fvec4) Load 2667(texel) + 2685: 7(fvec4) FAdd 2684 2683 + Store 2667(texel) 2685 + 2686: 156 Load 158(sCube) + 2687: 148(fvec3) Load 150(c3) + 2688: 6(float) Load 2603(lodClamp) + 2689: 7(fvec4) ImageSampleImplicitLod 2686 2687 MinLod 2688 + 2690: 7(fvec4) Load 2667(texel) + 2691: 7(fvec4) FAdd 2690 2689 + Store 2667(texel) 2691 + 2692: 165 Load 167(s1DShadow) + 2693: 148(fvec3) Load 150(c3) + 2694: 6(float) Load 2603(lodClamp) + 2695: 6(float) CompositeExtract 2693 2 + 2696: 6(float) ImageSampleDrefImplicitLod 2692 2693 2695 MinLod 2694 + 2697: 174(ptr) AccessChain 2667(texel) 173 + 2698: 6(float) Load 2697 + 2699: 6(float) FAdd 2698 2696 + 2700: 174(ptr) AccessChain 2667(texel) 173 + Store 2700 2699 + 2701: 180 Load 182(s2DShadow) + 2702: 148(fvec3) Load 150(c3) + 2703: 6(float) Load 2603(lodClamp) + 2704: 6(float) CompositeExtract 2702 2 + 2705: 6(float) ImageSampleDrefImplicitLod 2701 2702 2704 MinLod 2703 + 2706: 174(ptr) AccessChain 2667(texel) 173 + 2707: 6(float) Load 2706 + 2708: 6(float) FAdd 2707 2705 + 2709: 174(ptr) AccessChain 2667(texel) 173 + Store 2709 2708 + 2710: 192 Load 194(sCubeShadow) + 2711: 7(fvec4) Load 197(c4) + 2712: 6(float) Load 2603(lodClamp) + 2713: 6(float) CompositeExtract 2711 3 + 2714: 6(float) ImageSampleDrefImplicitLod 2710 2711 2713 MinLod 2712 + 2715: 174(ptr) AccessChain 2667(texel) 173 + 2716: 6(float) Load 2715 + 2717: 6(float) FAdd 2716 2714 + 2718: 174(ptr) AccessChain 2667(texel) 173 + Store 2718 2717 + 2719: 206 Load 208(s1DArray) + 2720: 52(fvec2) Load 138(c2) + 2721: 6(float) Load 2603(lodClamp) + 2722: 7(fvec4) ImageSampleImplicitLod 2719 2720 MinLod 2721 + 2723: 7(fvec4) Load 2667(texel) + 2724: 7(fvec4) FAdd 2723 2722 + Store 2667(texel) 2724 + 2725: 215 Load 217(s2DArray) + 2726: 148(fvec3) Load 150(c3) + 2727: 6(float) Load 2603(lodClamp) + 2728: 7(fvec4) ImageSampleImplicitLod 2725 2726 MinLod 2727 + 2729: 7(fvec4) Load 2667(texel) + 2730: 7(fvec4) FAdd 2729 2728 + Store 2667(texel) 2730 + 2731: 224 Load 226(sCubeArray) + 2732: 7(fvec4) Load 197(c4) + 2733: 6(float) Load 2603(lodClamp) + 2734: 7(fvec4) ImageSampleImplicitLod 2731 2732 MinLod 2733 + 2735: 7(fvec4) Load 2667(texel) + 2736: 7(fvec4) FAdd 2735 2734 + Store 2667(texel) 2736 + 2737: 233 Load 235(s1DArrayShadow) + 2738: 148(fvec3) Load 150(c3) + 2739: 6(float) Load 2603(lodClamp) + 2740: 6(float) CompositeExtract 2738 2 + 2741: 6(float) ImageSampleDrefImplicitLod 2737 2738 2740 MinLod 2739 + 2742: 174(ptr) AccessChain 2667(texel) 173 + 2743: 6(float) Load 2742 + 2744: 6(float) FAdd 2743 2741 + 2745: 174(ptr) AccessChain 2667(texel) 173 + Store 2745 2744 + 2746: 245 Load 247(s2DArrayShadow) + 2747: 7(fvec4) Load 197(c4) + 2748: 6(float) Load 2603(lodClamp) + 2749: 6(float) CompositeExtract 2747 3 + 2750: 6(float) ImageSampleDrefImplicitLod 2746 2747 2749 MinLod 2748 + 2751: 174(ptr) AccessChain 2667(texel) 173 + 2752: 6(float) Load 2751 + 2753: 6(float) FAdd 2752 2750 + 2754: 174(ptr) AccessChain 2667(texel) 173 + Store 2754 2753 + 2755: 278 Load 280(sCubeArrayShadow) + 2756: 7(fvec4) Load 197(c4) + 2757: 6(float) Load 283(compare) + 2758: 6(float) Load 2603(lodClamp) + 2759: 6(float) ImageSampleDrefImplicitLod 2755 2756 2757 MinLod 2758 + 2760: 174(ptr) AccessChain 2667(texel) 173 + 2761: 6(float) Load 2760 + 2762: 6(float) FAdd 2761 2759 + 2763: 174(ptr) AccessChain 2667(texel) 173 + Store 2763 2762 + 2764: 7(fvec4) Load 2667(texel) + ReturnValue 2764 + FunctionEnd +102(testSparseTextureOffsetClamp(): 7(fvec4) Function None 8 + 103: Label + 2767(texel): 63(ptr) Variable Function + Store 2767(texel) 120 + 2768: 133 Load 135(s2D) + 2769: 52(fvec2) Load 138(c2) + 2770: 6(float) Load 2603(lodClamp) + 2771:1946(ResType) ImageSparseSampleImplicitLod 2768 2769 ConstOffset MinLod 452 2770 + 2772: 7(fvec4) CompositeExtract 2771 1 + Store 2767(texel) 2772 + 2773: 47(int) CompositeExtract 2771 0 + 2774: 144 Load 146(s3D) + 2775: 148(fvec3) Load 150(c3) + 2776: 6(float) Load 2603(lodClamp) + 2777:1946(ResType) ImageSparseSampleImplicitLod 2774 2775 ConstOffset MinLod 459 2776 + 2778: 7(fvec4) CompositeExtract 2777 1 + Store 2767(texel) 2778 + 2779: 47(int) CompositeExtract 2777 0 + 2780: 180 Load 182(s2DShadow) + 2781: 148(fvec3) Load 150(c3) + 2782: 6(float) Load 2603(lodClamp) + 2783: 174(ptr) AccessChain 2767(texel) 173 + 2784: 6(float) CompositeExtract 2781 2 + 2785:1964(ResType) ImageSparseSampleDrefImplicitLod 2780 2781 2784 ConstOffset MinLod 452 2782 + 2786: 6(float) CompositeExtract 2785 1 + Store 2783 2786 + 2787: 47(int) CompositeExtract 2785 0 + 2788: 215 Load 217(s2DArray) + 2789: 148(fvec3) Load 150(c3) + 2790: 6(float) Load 2603(lodClamp) + 2791:1946(ResType) ImageSparseSampleImplicitLod 2788 2789 ConstOffset MinLod 452 2790 + 2792: 7(fvec4) CompositeExtract 2791 1 + Store 2767(texel) 2792 + 2793: 47(int) CompositeExtract 2791 0 + 2794: 245 Load 247(s2DArrayShadow) + 2795: 7(fvec4) Load 197(c4) + 2796: 6(float) Load 2603(lodClamp) + 2797: 174(ptr) AccessChain 2767(texel) 173 + 2798: 6(float) CompositeExtract 2795 3 + 2799:1964(ResType) ImageSparseSampleDrefImplicitLod 2794 2795 2798 ConstOffset MinLod 452 2796 + 2800: 6(float) CompositeExtract 2799 1 + Store 2797 2800 + 2801: 47(int) CompositeExtract 2799 0 + 2802: 7(fvec4) Load 2767(texel) + ReturnValue 2802 + FunctionEnd +104(testTextureOffsetClamp(): 7(fvec4) Function None 8 + 105: Label + 2805(texel): 63(ptr) Variable Function + Store 2805(texel) 120 + 2806: 122 Load 124(s1D) + 2807: 6(float) Load 127(c1) + 2808: 6(float) Load 2603(lodClamp) + 2809: 7(fvec4) ImageSampleImplicitLod 2806 2807 ConstOffset MinLod 445 2808 + 2810: 7(fvec4) Load 2805(texel) + 2811: 7(fvec4) FAdd 2810 2809 + Store 2805(texel) 2811 + 2812: 133 Load 135(s2D) + 2813: 52(fvec2) Load 138(c2) + 2814: 6(float) Load 2603(lodClamp) + 2815: 7(fvec4) ImageSampleImplicitLod 2812 2813 ConstOffset MinLod 452 2814 + 2816: 7(fvec4) Load 2805(texel) + 2817: 7(fvec4) FAdd 2816 2815 + Store 2805(texel) 2817 + 2818: 144 Load 146(s3D) + 2819: 148(fvec3) Load 150(c3) + 2820: 6(float) Load 2603(lodClamp) + 2821: 7(fvec4) ImageSampleImplicitLod 2818 2819 ConstOffset MinLod 459 2820 + 2822: 7(fvec4) Load 2805(texel) + 2823: 7(fvec4) FAdd 2822 2821 + Store 2805(texel) 2823 + 2824: 165 Load 167(s1DShadow) + 2825: 148(fvec3) Load 150(c3) + 2826: 6(float) Load 2603(lodClamp) + 2827: 6(float) CompositeExtract 2825 2 + 2828: 6(float) ImageSampleDrefImplicitLod 2824 2825 2827 ConstOffset MinLod 445 2826 + 2829: 174(ptr) AccessChain 2805(texel) 173 + 2830: 6(float) Load 2829 + 2831: 6(float) FAdd 2830 2828 + 2832: 174(ptr) AccessChain 2805(texel) 173 + Store 2832 2831 + 2833: 180 Load 182(s2DShadow) + 2834: 148(fvec3) Load 150(c3) + 2835: 6(float) Load 2603(lodClamp) + 2836: 6(float) CompositeExtract 2834 2 + 2837: 6(float) ImageSampleDrefImplicitLod 2833 2834 2836 ConstOffset MinLod 452 2835 + 2838: 174(ptr) AccessChain 2805(texel) 173 + 2839: 6(float) Load 2838 + 2840: 6(float) FAdd 2839 2837 + 2841: 174(ptr) AccessChain 2805(texel) 173 + Store 2841 2840 + 2842: 206 Load 208(s1DArray) + 2843: 52(fvec2) Load 138(c2) + 2844: 6(float) Load 2603(lodClamp) + 2845: 7(fvec4) ImageSampleImplicitLod 2842 2843 ConstOffset MinLod 445 2844 + 2846: 7(fvec4) Load 2805(texel) + 2847: 7(fvec4) FAdd 2846 2845 + Store 2805(texel) 2847 + 2848: 215 Load 217(s2DArray) + 2849: 148(fvec3) Load 150(c3) + 2850: 6(float) Load 2603(lodClamp) + 2851: 7(fvec4) ImageSampleImplicitLod 2848 2849 ConstOffset MinLod 452 2850 + 2852: 7(fvec4) Load 2805(texel) + 2853: 7(fvec4) FAdd 2852 2851 + Store 2805(texel) 2853 + 2854: 233 Load 235(s1DArrayShadow) + 2855: 148(fvec3) Load 150(c3) + 2856: 6(float) Load 2603(lodClamp) + 2857: 6(float) CompositeExtract 2855 2 + 2858: 6(float) ImageSampleDrefImplicitLod 2854 2855 2857 ConstOffset MinLod 445 2856 + 2859: 174(ptr) AccessChain 2805(texel) 173 + 2860: 6(float) Load 2859 + 2861: 6(float) FAdd 2860 2858 + 2862: 174(ptr) AccessChain 2805(texel) 173 + Store 2862 2861 + 2863: 245 Load 247(s2DArrayShadow) + 2864: 7(fvec4) Load 197(c4) + 2865: 6(float) Load 2603(lodClamp) + 2866: 6(float) CompositeExtract 2864 3 + 2867: 6(float) ImageSampleDrefImplicitLod 2863 2864 2866 ConstOffset MinLod 452 2865 + 2868: 174(ptr) AccessChain 2805(texel) 173 + 2869: 6(float) Load 2868 + 2870: 6(float) FAdd 2869 2867 + 2871: 174(ptr) AccessChain 2805(texel) 173 + Store 2871 2870 + 2872: 7(fvec4) Load 2805(texel) + ReturnValue 2872 + FunctionEnd +106(testSparseTextureGradClamp(): 7(fvec4) Function None 8 + 107: Label + 2875(texel): 63(ptr) Variable Function + Store 2875(texel) 120 + 2876: 133 Load 135(s2D) + 2877: 52(fvec2) Load 138(c2) + 2878: 52(fvec2) Load 873(dPdxy2) + 2879: 6(float) Load 2603(lodClamp) + 2880:1946(ResType) ImageSparseSampleExplicitLod 2876 2877 Grad MinLod 2878 2878 2879 + 2881: 7(fvec4) CompositeExtract 2880 1 + Store 2875(texel) 2881 + 2882: 47(int) CompositeExtract 2880 0 + 2883: 144 Load 146(s3D) + 2884: 148(fvec3) Load 150(c3) + 2885: 148(fvec3) Load 880(dPdxy3) + 2886: 6(float) Load 2603(lodClamp) + 2887:1946(ResType) ImageSparseSampleExplicitLod 2883 2884 Grad MinLod 2885 2885 2886 + 2888: 7(fvec4) CompositeExtract 2887 1 + Store 2875(texel) 2888 + 2889: 47(int) CompositeExtract 2887 0 + 2890: 156 Load 158(sCube) + 2891: 148(fvec3) Load 150(c3) + 2892: 148(fvec3) Load 880(dPdxy3) + 2893: 6(float) Load 2603(lodClamp) + 2894:1946(ResType) ImageSparseSampleExplicitLod 2890 2891 Grad MinLod 2892 2892 2893 + 2895: 7(fvec4) CompositeExtract 2894 1 + Store 2875(texel) 2895 + 2896: 47(int) CompositeExtract 2894 0 + 2897: 180 Load 182(s2DShadow) + 2898: 148(fvec3) Load 150(c3) + 2899: 52(fvec2) Load 873(dPdxy2) + 2900: 6(float) Load 2603(lodClamp) + 2901: 174(ptr) AccessChain 2875(texel) 173 + 2902: 6(float) CompositeExtract 2898 2 + 2903:1964(ResType) ImageSparseSampleDrefExplicitLod 2897 2898 2902 Grad MinLod 2899 2899 2900 + 2904: 6(float) CompositeExtract 2903 1 + Store 2901 2904 + 2905: 47(int) CompositeExtract 2903 0 + 2906: 192 Load 194(sCubeShadow) + 2907: 7(fvec4) Load 197(c4) + 2908: 148(fvec3) Load 880(dPdxy3) + 2909: 6(float) Load 2603(lodClamp) + 2910: 174(ptr) AccessChain 2875(texel) 173 + 2911: 6(float) CompositeExtract 2907 3 + 2912:1964(ResType) ImageSparseSampleDrefExplicitLod 2906 2907 2911 Grad MinLod 2908 2908 2909 + 2913: 6(float) CompositeExtract 2912 1 + Store 2910 2913 + 2914: 47(int) CompositeExtract 2912 0 + 2915: 215 Load 217(s2DArray) + 2916: 148(fvec3) Load 150(c3) + 2917: 52(fvec2) Load 873(dPdxy2) + 2918: 6(float) Load 2603(lodClamp) + 2919:1946(ResType) ImageSparseSampleExplicitLod 2915 2916 Grad MinLod 2917 2917 2918 + 2920: 7(fvec4) CompositeExtract 2919 1 + Store 2875(texel) 2920 + 2921: 47(int) CompositeExtract 2919 0 + 2922: 245 Load 247(s2DArrayShadow) + 2923: 7(fvec4) Load 197(c4) + 2924: 52(fvec2) Load 873(dPdxy2) + 2925: 6(float) Load 2603(lodClamp) + 2926: 174(ptr) AccessChain 2875(texel) 173 + 2927: 6(float) CompositeExtract 2923 3 + 2928:1964(ResType) ImageSparseSampleDrefExplicitLod 2922 2923 2927 Grad MinLod 2924 2924 2925 + 2929: 6(float) CompositeExtract 2928 1 + Store 2926 2929 + 2930: 47(int) CompositeExtract 2928 0 + 2931: 224 Load 226(sCubeArray) + 2932: 7(fvec4) Load 197(c4) + 2933: 148(fvec3) Load 880(dPdxy3) + 2934: 6(float) Load 2603(lodClamp) + 2935:1946(ResType) ImageSparseSampleExplicitLod 2931 2932 Grad MinLod 2933 2933 2934 + 2936: 7(fvec4) CompositeExtract 2935 1 + Store 2875(texel) 2936 + 2937: 47(int) CompositeExtract 2935 0 + 2938: 7(fvec4) Load 2875(texel) + ReturnValue 2938 + FunctionEnd +108(testTextureGradClamp(): 7(fvec4) Function None 8 + 109: Label + 2941(texel): 63(ptr) Variable Function + Store 2941(texel) 120 + 2942: 122 Load 124(s1D) + 2943: 6(float) Load 127(c1) + 2944: 6(float) Load 866(dPdxy1) + 2945: 6(float) Load 2603(lodClamp) + 2946: 7(fvec4) ImageSampleExplicitLod 2942 2943 Grad MinLod 2944 2944 2945 + 2947: 7(fvec4) Load 2941(texel) + 2948: 7(fvec4) FAdd 2947 2946 + Store 2941(texel) 2948 + 2949: 133 Load 135(s2D) + 2950: 52(fvec2) Load 138(c2) + 2951: 52(fvec2) Load 873(dPdxy2) + 2952: 6(float) Load 2603(lodClamp) + 2953: 7(fvec4) ImageSampleExplicitLod 2949 2950 Grad MinLod 2951 2951 2952 + 2954: 7(fvec4) Load 2941(texel) + 2955: 7(fvec4) FAdd 2954 2953 + Store 2941(texel) 2955 + 2956: 144 Load 146(s3D) + 2957: 148(fvec3) Load 150(c3) + 2958: 148(fvec3) Load 880(dPdxy3) + 2959: 6(float) Load 2603(lodClamp) + 2960: 7(fvec4) ImageSampleExplicitLod 2956 2957 Grad MinLod 2958 2958 2959 + 2961: 7(fvec4) Load 2941(texel) + 2962: 7(fvec4) FAdd 2961 2960 + Store 2941(texel) 2962 + 2963: 156 Load 158(sCube) + 2964: 148(fvec3) Load 150(c3) + 2965: 148(fvec3) Load 880(dPdxy3) + 2966: 6(float) Load 2603(lodClamp) + 2967: 7(fvec4) ImageSampleExplicitLod 2963 2964 Grad MinLod 2965 2965 2966 + 2968: 7(fvec4) Load 2941(texel) + 2969: 7(fvec4) FAdd 2968 2967 + Store 2941(texel) 2969 + 2970: 165 Load 167(s1DShadow) + 2971: 148(fvec3) Load 150(c3) + 2972: 6(float) Load 866(dPdxy1) + 2973: 6(float) Load 2603(lodClamp) + 2974: 6(float) CompositeExtract 2971 2 + 2975: 6(float) ImageSampleDrefExplicitLod 2970 2971 2974 Grad MinLod 2972 2972 2973 + 2976: 174(ptr) AccessChain 2941(texel) 173 + 2977: 6(float) Load 2976 + 2978: 6(float) FAdd 2977 2975 + 2979: 174(ptr) AccessChain 2941(texel) 173 + Store 2979 2978 + 2980: 180 Load 182(s2DShadow) + 2981: 148(fvec3) Load 150(c3) + 2982: 52(fvec2) Load 873(dPdxy2) + 2983: 6(float) Load 2603(lodClamp) + 2984: 6(float) CompositeExtract 2981 2 + 2985: 6(float) ImageSampleDrefExplicitLod 2980 2981 2984 Grad MinLod 2982 2982 2983 + 2986: 174(ptr) AccessChain 2941(texel) 173 + 2987: 6(float) Load 2986 + 2988: 6(float) FAdd 2987 2985 + 2989: 174(ptr) AccessChain 2941(texel) 173 + Store 2989 2988 + 2990: 192 Load 194(sCubeShadow) + 2991: 7(fvec4) Load 197(c4) + 2992: 148(fvec3) Load 880(dPdxy3) + 2993: 6(float) Load 2603(lodClamp) + 2994: 6(float) CompositeExtract 2991 3 + 2995: 6(float) ImageSampleDrefExplicitLod 2990 2991 2994 Grad MinLod 2992 2992 2993 + 2996: 174(ptr) AccessChain 2941(texel) 173 + 2997: 6(float) Load 2996 + 2998: 6(float) FAdd 2997 2995 + 2999: 174(ptr) AccessChain 2941(texel) 173 + Store 2999 2998 + 3000: 206 Load 208(s1DArray) + 3001: 52(fvec2) Load 138(c2) + 3002: 6(float) Load 866(dPdxy1) + 3003: 6(float) Load 2603(lodClamp) + 3004: 7(fvec4) ImageSampleExplicitLod 3000 3001 Grad MinLod 3002 3002 3003 + 3005: 7(fvec4) Load 2941(texel) + 3006: 7(fvec4) FAdd 3005 3004 + Store 2941(texel) 3006 + 3007: 215 Load 217(s2DArray) + 3008: 148(fvec3) Load 150(c3) + 3009: 52(fvec2) Load 873(dPdxy2) + 3010: 6(float) Load 2603(lodClamp) + 3011: 7(fvec4) ImageSampleExplicitLod 3007 3008 Grad MinLod 3009 3009 3010 + 3012: 7(fvec4) Load 2941(texel) + 3013: 7(fvec4) FAdd 3012 3011 + Store 2941(texel) 3013 + 3014: 233 Load 235(s1DArrayShadow) + 3015: 148(fvec3) Load 150(c3) + 3016: 6(float) Load 866(dPdxy1) + 3017: 6(float) Load 2603(lodClamp) + 3018: 6(float) CompositeExtract 3015 2 + 3019: 6(float) ImageSampleDrefExplicitLod 3014 3015 3018 Grad MinLod 3016 3016 3017 + 3020: 174(ptr) AccessChain 2941(texel) 173 + 3021: 6(float) Load 3020 + 3022: 6(float) FAdd 3021 3019 + 3023: 174(ptr) AccessChain 2941(texel) 173 + Store 3023 3022 + 3024: 245 Load 247(s2DArrayShadow) + 3025: 7(fvec4) Load 197(c4) + 3026: 52(fvec2) Load 873(dPdxy2) + 3027: 6(float) Load 2603(lodClamp) + 3028: 6(float) CompositeExtract 3025 3 + 3029: 6(float) ImageSampleDrefExplicitLod 3024 3025 3028 Grad MinLod 3026 3026 3027 + 3030: 174(ptr) AccessChain 2941(texel) 173 + 3031: 6(float) Load 3030 + 3032: 6(float) FAdd 3031 3029 + 3033: 174(ptr) AccessChain 2941(texel) 173 + Store 3033 3032 + 3034: 224 Load 226(sCubeArray) + 3035: 7(fvec4) Load 197(c4) + 3036: 148(fvec3) Load 880(dPdxy3) + 3037: 6(float) Load 2603(lodClamp) + 3038: 7(fvec4) ImageSampleExplicitLod 3034 3035 Grad MinLod 3036 3036 3037 + 3039: 7(fvec4) Load 2941(texel) + 3040: 7(fvec4) FAdd 3039 3038 + Store 2941(texel) 3040 + 3041: 7(fvec4) Load 2941(texel) + ReturnValue 3041 + FunctionEnd +110(testSparseTextureGradOffsetClamp(): 7(fvec4) Function None 8 + 111: Label + 3044(texel): 63(ptr) Variable Function + Store 3044(texel) 120 + 3045: 133 Load 135(s2D) + 3046: 52(fvec2) Load 138(c2) + 3047: 52(fvec2) Load 873(dPdxy2) + 3048: 6(float) Load 2603(lodClamp) + 3049:1946(ResType) ImageSparseSampleExplicitLod 3045 3046 Grad ConstOffset MinLod 3047 3047 452 3048 + 3050: 7(fvec4) CompositeExtract 3049 1 + Store 3044(texel) 3050 + 3051: 47(int) CompositeExtract 3049 0 + 3052: 144 Load 146(s3D) + 3053: 148(fvec3) Load 150(c3) + 3054: 148(fvec3) Load 880(dPdxy3) + 3055: 6(float) Load 2603(lodClamp) + 3056:1946(ResType) ImageSparseSampleExplicitLod 3052 3053 Grad ConstOffset MinLod 3054 3054 459 3055 + 3057: 7(fvec4) CompositeExtract 3056 1 + Store 3044(texel) 3057 + 3058: 47(int) CompositeExtract 3056 0 + 3059: 180 Load 182(s2DShadow) + 3060: 148(fvec3) Load 150(c3) + 3061: 52(fvec2) Load 873(dPdxy2) + 3062: 6(float) Load 2603(lodClamp) + 3063: 174(ptr) AccessChain 3044(texel) 173 + 3064: 6(float) CompositeExtract 3060 2 + 3065:1964(ResType) ImageSparseSampleDrefExplicitLod 3059 3060 3064 Grad ConstOffset MinLod 3061 3061 452 3062 + 3066: 6(float) CompositeExtract 3065 1 + Store 3063 3066 + 3067: 47(int) CompositeExtract 3065 0 + 3068: 215 Load 217(s2DArray) + 3069: 148(fvec3) Load 150(c3) + 3070: 52(fvec2) Load 873(dPdxy2) + 3071: 6(float) Load 2603(lodClamp) + 3072:1946(ResType) ImageSparseSampleExplicitLod 3068 3069 Grad ConstOffset MinLod 3070 3070 452 3071 + 3073: 7(fvec4) CompositeExtract 3072 1 + Store 3044(texel) 3073 + 3074: 47(int) CompositeExtract 3072 0 + 3075: 245 Load 247(s2DArrayShadow) + 3076: 7(fvec4) Load 197(c4) + 3077: 52(fvec2) Load 873(dPdxy2) + 3078: 6(float) Load 2603(lodClamp) + 3079: 174(ptr) AccessChain 3044(texel) 173 + 3080: 6(float) CompositeExtract 3076 3 + 3081:1964(ResType) ImageSparseSampleDrefExplicitLod 3075 3076 3080 Grad ConstOffset MinLod 3077 3077 452 3078 + 3082: 6(float) CompositeExtract 3081 1 + Store 3079 3082 + 3083: 47(int) CompositeExtract 3081 0 + 3084: 7(fvec4) Load 3044(texel) + ReturnValue 3084 + FunctionEnd +112(testTextureGradOffsetClamp(): 7(fvec4) Function None 8 + 113: Label + 3087(texel): 63(ptr) Variable Function + Store 3087(texel) 120 + 3088: 122 Load 124(s1D) + 3089: 6(float) Load 127(c1) + 3090: 6(float) Load 866(dPdxy1) + 3091: 6(float) Load 2603(lodClamp) + 3092: 7(fvec4) ImageSampleExplicitLod 3088 3089 Grad ConstOffset MinLod 3090 3090 445 3091 + 3093: 7(fvec4) Load 3087(texel) + 3094: 7(fvec4) FAdd 3093 3092 + Store 3087(texel) 3094 + 3095: 133 Load 135(s2D) + 3096: 52(fvec2) Load 138(c2) + 3097: 52(fvec2) Load 873(dPdxy2) + 3098: 6(float) Load 2603(lodClamp) + 3099: 7(fvec4) ImageSampleExplicitLod 3095 3096 Grad ConstOffset MinLod 3097 3097 452 3098 + 3100: 7(fvec4) Load 3087(texel) + 3101: 7(fvec4) FAdd 3100 3099 + Store 3087(texel) 3101 + 3102: 144 Load 146(s3D) + 3103: 148(fvec3) Load 150(c3) + 3104: 148(fvec3) Load 880(dPdxy3) + 3105: 6(float) Load 2603(lodClamp) + 3106: 7(fvec4) ImageSampleExplicitLod 3102 3103 Grad ConstOffset MinLod 3104 3104 459 3105 + 3107: 7(fvec4) Load 3087(texel) + 3108: 7(fvec4) FAdd 3107 3106 + Store 3087(texel) 3108 + 3109: 165 Load 167(s1DShadow) + 3110: 148(fvec3) Load 150(c3) + 3111: 6(float) Load 866(dPdxy1) + 3112: 6(float) Load 2603(lodClamp) + 3113: 6(float) CompositeExtract 3110 2 + 3114: 6(float) ImageSampleDrefExplicitLod 3109 3110 3113 Grad ConstOffset MinLod 3111 3111 445 3112 + 3115: 174(ptr) AccessChain 3087(texel) 173 + 3116: 6(float) Load 3115 + 3117: 6(float) FAdd 3116 3114 + 3118: 174(ptr) AccessChain 3087(texel) 173 + Store 3118 3117 + 3119: 180 Load 182(s2DShadow) + 3120: 148(fvec3) Load 150(c3) + 3121: 52(fvec2) Load 873(dPdxy2) + 3122: 6(float) Load 2603(lodClamp) + 3123: 6(float) CompositeExtract 3120 2 + 3124: 6(float) ImageSampleDrefExplicitLod 3119 3120 3123 Grad ConstOffset MinLod 3121 3121 452 3122 + 3125: 174(ptr) AccessChain 3087(texel) 173 + 3126: 6(float) Load 3125 + 3127: 6(float) FAdd 3126 3124 + 3128: 174(ptr) AccessChain 3087(texel) 173 + Store 3128 3127 + 3129: 206 Load 208(s1DArray) + 3130: 52(fvec2) Load 138(c2) + 3131: 6(float) Load 866(dPdxy1) + 3132: 6(float) Load 2603(lodClamp) + 3133: 7(fvec4) ImageSampleExplicitLod 3129 3130 Grad ConstOffset MinLod 3131 3131 445 3132 + 3134: 7(fvec4) Load 3087(texel) + 3135: 7(fvec4) FAdd 3134 3133 + Store 3087(texel) 3135 + 3136: 215 Load 217(s2DArray) + 3137: 148(fvec3) Load 150(c3) + 3138: 52(fvec2) Load 873(dPdxy2) + 3139: 6(float) Load 2603(lodClamp) + 3140: 7(fvec4) ImageSampleExplicitLod 3136 3137 Grad ConstOffset MinLod 3138 3138 452 3139 + 3141: 7(fvec4) Load 3087(texel) + 3142: 7(fvec4) FAdd 3141 3140 + Store 3087(texel) 3142 + 3143: 233 Load 235(s1DArrayShadow) + 3144: 148(fvec3) Load 150(c3) + 3145: 6(float) Load 866(dPdxy1) + 3146: 6(float) Load 2603(lodClamp) + 3147: 6(float) CompositeExtract 3144 2 + 3148: 6(float) ImageSampleDrefExplicitLod 3143 3144 3147 Grad ConstOffset MinLod 3145 3145 445 3146 + 3149: 174(ptr) AccessChain 3087(texel) 173 + 3150: 6(float) Load 3149 + 3151: 6(float) FAdd 3150 3148 + 3152: 174(ptr) AccessChain 3087(texel) 173 + Store 3152 3151 + 3153: 245 Load 247(s2DArrayShadow) + 3154: 7(fvec4) Load 197(c4) + 3155: 52(fvec2) Load 873(dPdxy2) + 3156: 6(float) Load 2603(lodClamp) + 3157: 6(float) CompositeExtract 3154 3 + 3158: 6(float) ImageSampleDrefExplicitLod 3153 3154 3157 Grad ConstOffset MinLod 3155 3155 452 3156 + 3159: 174(ptr) AccessChain 3087(texel) 173 + 3160: 6(float) Load 3159 + 3161: 6(float) FAdd 3160 3158 + 3162: 174(ptr) AccessChain 3087(texel) 173 + Store 3162 3161 + 3163: 7(fvec4) Load 3087(texel) + ReturnValue 3163 + FunctionEnd +114(testCombinedTextureSampler(): 7(fvec4) Function None 8 + 115: Label + 3166(texel): 63(ptr) Variable Function + Store 3166(texel) 120 + 3169: 121 Load 3168(t1D) + 3173: 3170 Load 3172(s) + 3174: 122 SampledImage 3169 3173 + 3175: 6(float) Load 127(c1) + 3176: 7(fvec4) ImageSampleImplicitLod 3174 3175 + 3177: 7(fvec4) Load 3166(texel) + 3178: 7(fvec4) FAdd 3177 3176 + Store 3166(texel) 3178 + 3181: 132 Load 3180(t2D) + 3182: 3170 Load 3172(s) + 3183: 133 SampledImage 3181 3182 + 3184: 52(fvec2) Load 138(c2) + 3185: 7(fvec4) ImageSampleImplicitLod 3183 3184 + 3186: 7(fvec4) Load 3166(texel) + 3187: 7(fvec4) FAdd 3186 3185 + Store 3166(texel) 3187 + 3190: 143 Load 3189(t3D) + 3191: 3170 Load 3172(s) + 3192: 144 SampledImage 3190 3191 + 3193: 148(fvec3) Load 150(c3) + 3194: 7(fvec4) ImageSampleImplicitLod 3192 3193 + 3195: 7(fvec4) Load 3166(texel) + 3196: 7(fvec4) FAdd 3195 3194 + Store 3166(texel) 3196 + 3199: 155 Load 3198(tCube) + 3200: 3170 Load 3172(s) + 3201: 156 SampledImage 3199 3200 + 3202: 148(fvec3) Load 150(c3) + 3203: 7(fvec4) ImageSampleImplicitLod 3201 3202 + 3204: 7(fvec4) Load 3166(texel) + 3205: 7(fvec4) FAdd 3204 3203 + Store 3166(texel) 3205 + 3206: 121 Load 3168(t1D) + 3208: 3170 Load 3207(sShadow) + 3209: 165 SampledImage 3206 3208 + 3210: 148(fvec3) Load 150(c3) + 3211: 6(float) CompositeExtract 3210 2 + 3212: 6(float) ImageSampleDrefImplicitLod 3209 3210 3211 + 3213: 174(ptr) AccessChain 3166(texel) 173 + 3214: 6(float) Load 3213 + 3215: 6(float) FAdd 3214 3212 + 3216: 174(ptr) AccessChain 3166(texel) 173 + Store 3216 3215 + 3217: 132 Load 3180(t2D) + 3218: 3170 Load 3207(sShadow) + 3219: 180 SampledImage 3217 3218 + 3220: 148(fvec3) Load 150(c3) + 3221: 6(float) CompositeExtract 3220 2 + 3222: 6(float) ImageSampleDrefImplicitLod 3219 3220 3221 + 3223: 174(ptr) AccessChain 3166(texel) 173 + 3224: 6(float) Load 3223 + 3225: 6(float) FAdd 3224 3222 + 3226: 174(ptr) AccessChain 3166(texel) 173 + Store 3226 3225 + 3227: 155 Load 3198(tCube) + 3228: 3170 Load 3207(sShadow) + 3229: 192 SampledImage 3227 3228 + 3230: 7(fvec4) Load 197(c4) + 3231: 6(float) CompositeExtract 3230 3 + 3232: 6(float) ImageSampleDrefImplicitLod 3229 3230 3231 + 3233: 174(ptr) AccessChain 3166(texel) 173 + 3234: 6(float) Load 3233 + 3235: 6(float) FAdd 3234 3232 + 3236: 174(ptr) AccessChain 3166(texel) 173 + Store 3236 3235 + 3239: 205 Load 3238(t1DArray) + 3240: 3170 Load 3172(s) + 3241: 206 SampledImage 3239 3240 + 3242: 52(fvec2) Load 138(c2) + 3243: 7(fvec4) ImageSampleImplicitLod 3241 3242 + 3244: 7(fvec4) Load 3166(texel) + 3245: 7(fvec4) FAdd 3244 3243 + Store 3166(texel) 3245 + 3248: 214 Load 3247(t2DArray) + 3249: 3170 Load 3172(s) + 3250: 215 SampledImage 3248 3249 + 3251: 148(fvec3) Load 150(c3) + 3252: 7(fvec4) ImageSampleImplicitLod 3250 3251 + 3253: 7(fvec4) Load 3166(texel) + 3254: 7(fvec4) FAdd 3253 3252 + Store 3166(texel) 3254 + 3257: 223 Load 3256(tCubeArray) + 3258: 3170 Load 3172(s) + 3259: 224 SampledImage 3257 3258 + 3260: 7(fvec4) Load 197(c4) + 3261: 7(fvec4) ImageSampleImplicitLod 3259 3260 + 3262: 7(fvec4) Load 3166(texel) + 3263: 7(fvec4) FAdd 3262 3261 + Store 3166(texel) 3263 + 3264: 205 Load 3238(t1DArray) + 3265: 3170 Load 3207(sShadow) + 3266: 233 SampledImage 3264 3265 + 3267: 148(fvec3) Load 150(c3) + 3268: 6(float) CompositeExtract 3267 2 + 3269: 6(float) ImageSampleDrefImplicitLod 3266 3267 3268 + 3270: 174(ptr) AccessChain 3166(texel) 173 + 3271: 6(float) Load 3270 + 3272: 6(float) FAdd 3271 3269 + 3273: 174(ptr) AccessChain 3166(texel) 173 + Store 3273 3272 + 3274: 214 Load 3247(t2DArray) + 3275: 3170 Load 3207(sShadow) + 3276: 245 SampledImage 3274 3275 + 3277: 7(fvec4) Load 197(c4) + 3278: 6(float) CompositeExtract 3277 3 + 3279: 6(float) ImageSampleDrefImplicitLod 3276 3277 3278 + 3280: 174(ptr) AccessChain 3166(texel) 173 + 3281: 6(float) Load 3280 + 3282: 6(float) FAdd 3281 3279 + 3283: 174(ptr) AccessChain 3166(texel) 173 + Store 3283 3282 + 3286: 256 Load 3285(t2DRect) + 3287: 3170 Load 3172(s) + 3288: 257 SampledImage 3286 3287 + 3289: 52(fvec2) Load 138(c2) + 3290: 7(fvec4) ImageSampleImplicitLod 3288 3289 + 3291: 7(fvec4) Load 3166(texel) + 3292: 7(fvec4) FAdd 3291 3290 + Store 3166(texel) 3292 + 3293: 256 Load 3285(t2DRect) + 3294: 3170 Load 3207(sShadow) + 3295: 266 SampledImage 3293 3294 + 3296: 148(fvec3) Load 150(c3) + 3297: 6(float) CompositeExtract 3296 2 + 3298: 6(float) ImageSampleDrefImplicitLod 3295 3296 3297 + 3299: 174(ptr) AccessChain 3166(texel) 173 + 3300: 6(float) Load 3299 + 3301: 6(float) FAdd 3300 3298 + 3302: 174(ptr) AccessChain 3166(texel) 173 + Store 3302 3301 + 3303: 223 Load 3256(tCubeArray) + 3304: 3170 Load 3207(sShadow) + 3305: 278 SampledImage 3303 3304 + 3306: 7(fvec4) Load 197(c4) + 3307: 6(float) Load 283(compare) + 3308: 6(float) ImageSampleDrefImplicitLod 3305 3306 3307 + 3309: 174(ptr) AccessChain 3166(texel) 173 + 3310: 6(float) Load 3309 + 3311: 6(float) FAdd 3310 3308 + 3312: 174(ptr) AccessChain 3166(texel) 173 + Store 3312 3311 + 3313: 7(fvec4) Load 3166(texel) + ReturnValue 3313 + FunctionEnd +116(testSubpassLoad(): 7(fvec4) Function None 8 + 117: Label + 3319: 3316 Load 3318(subpass) + 3321: 7(fvec4) ImageRead 3319 3320 + 3325: 3322 Load 3324(subpassMS) + 3326: 7(fvec4) ImageRead 3325 3320 Sample 799 + 3327: 7(fvec4) FAdd 3321 3326 + ReturnValue 3327 + FunctionEnd diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out index efbe63ebb4..62f6ad7008 100644 --- a/Test/baseResults/spv.flowControl.frag.out +++ b/Test/baseResults/spv.flowControl.frag.out @@ -1,6 +1,6 @@ spv.flowControl.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 39 Capability Shader diff --git a/Test/baseResults/spv.for-complex-condition.vert.out b/Test/baseResults/spv.for-complex-condition.vert.out index ca971fd5eb..16b23a0fa7 100644 --- a/Test/baseResults/spv.for-complex-condition.vert.out +++ b/Test/baseResults/spv.for-complex-condition.vert.out @@ -1,6 +1,6 @@ spv.for-complex-condition.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 31 Capability Shader diff --git a/Test/baseResults/spv.for-continue-break.vert.out b/Test/baseResults/spv.for-continue-break.vert.out index 4ba1cb91f2..10ab24e9ea 100644 --- a/Test/baseResults/spv.for-continue-break.vert.out +++ b/Test/baseResults/spv.for-continue-break.vert.out @@ -1,6 +1,6 @@ spv.for-continue-break.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 45 Capability Shader diff --git a/Test/baseResults/spv.for-nobody.vert.out b/Test/baseResults/spv.for-nobody.vert.out index b965a58e4a..7a0b6de226 100644 --- a/Test/baseResults/spv.for-nobody.vert.out +++ b/Test/baseResults/spv.for-nobody.vert.out @@ -1,6 +1,6 @@ spv.for-nobody.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 25 Capability Shader diff --git a/Test/baseResults/spv.for-notest.vert.out b/Test/baseResults/spv.for-notest.vert.out index d3e96032a9..b08c6a153b 100644 --- a/Test/baseResults/spv.for-notest.vert.out +++ b/Test/baseResults/spv.for-notest.vert.out @@ -1,6 +1,6 @@ spv.for-notest.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader diff --git a/Test/baseResults/spv.for-simple.vert.out b/Test/baseResults/spv.for-simple.vert.out index c4de996560..92f3083d1a 100644 --- a/Test/baseResults/spv.for-simple.vert.out +++ b/Test/baseResults/spv.for-simple.vert.out @@ -1,6 +1,6 @@ spv.for-simple.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out index 3a36667776..2a359617b0 100644 --- a/Test/baseResults/spv.forLoop.frag.out +++ b/Test/baseResults/spv.forLoop.frag.out @@ -1,6 +1,6 @@ spv.forLoop.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 143 Capability Shader diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out index f166286586..d410c4d964 100644 --- a/Test/baseResults/spv.forwardFun.frag.out +++ b/Test/baseResults/spv.forwardFun.frag.out @@ -1,6 +1,6 @@ spv.forwardFun.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 60 Capability Shader @@ -22,8 +22,8 @@ spv.forwardFun.frag Name 36 "d" Name 59 "bigColor" Decorate 10(unreachableReturn() RelaxedPrecision - Decorate 16(foo(vf4;) RelaxedPrecision Decorate 15(bar) RelaxedPrecision + Decorate 16(foo(vf4;) RelaxedPrecision Decorate 18(color) RelaxedPrecision Decorate 20(BaseColor) RelaxedPrecision Decorate 20(BaseColor) Location 1 diff --git a/Test/baseResults/spv.fragmentDensity-es.frag.out b/Test/baseResults/spv.fragmentDensity-es.frag.out index 253ce2ee3f..f46a28bb4b 100644 --- a/Test/baseResults/spv.fragmentDensity-es.frag.out +++ b/Test/baseResults/spv.fragmentDensity-es.frag.out @@ -1,6 +1,6 @@ spv.fragmentDensity-es.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader @@ -18,11 +18,11 @@ spv.fragmentDensity-es.frag Name 14 "FragInvocationCount" Name 16 "gl_FragInvocationCountEXT" Decorate 9(FragSize) Location 0 - Decorate 11(gl_FragSizeEXT) Flat Decorate 11(gl_FragSizeEXT) BuiltIn FragSizeEXT + Decorate 11(gl_FragSizeEXT) Flat Decorate 14(FragInvocationCount) Location 2 - Decorate 16(gl_FragInvocationCountEXT) Flat Decorate 16(gl_FragInvocationCountEXT) BuiltIn FragInvocationCountEXT + Decorate 16(gl_FragInvocationCountEXT) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.fragmentDensity.frag.out b/Test/baseResults/spv.fragmentDensity.frag.out index 4c831f29d8..5ce7a9a67b 100644 --- a/Test/baseResults/spv.fragmentDensity.frag.out +++ b/Test/baseResults/spv.fragmentDensity.frag.out @@ -1,6 +1,6 @@ spv.fragmentDensity.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 21 Capability Shader @@ -18,11 +18,11 @@ spv.fragmentDensity.frag Name 17 "FragInvocationCount" Name 19 "gl_FragInvocationCountEXT" Decorate 9(FragSize) Location 0 - Decorate 13(gl_FragSizeEXT) Flat Decorate 13(gl_FragSizeEXT) BuiltIn FragSizeEXT + Decorate 13(gl_FragSizeEXT) Flat Decorate 17(FragInvocationCount) Location 2 - Decorate 19(gl_FragInvocationCountEXT) Flat Decorate 19(gl_FragInvocationCountEXT) BuiltIn FragInvocationCountEXT + Decorate 19(gl_FragInvocationCountEXT) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out index 2ea8f35f87..29b290bbf4 100644 --- a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out +++ b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out @@ -1,10 +1,10 @@ spv.fragmentShaderBarycentric.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 43 Capability Shader - Capability FragmentBarycentricNV + Capability FragmentBarycentricKHR Extension "SPV_NV_fragment_shader_barycentric" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -19,10 +19,10 @@ spv.fragmentShaderBarycentric.frag MemberName 17(vertices) 0 "attrib" Name 21 "v" Decorate 8(value) Location 1 - Decorate 11(gl_BaryCoordNV) BuiltIn BaryCoordNV + Decorate 11(gl_BaryCoordNV) BuiltIn BaryCoordKHR Decorate 17(vertices) Block Decorate 21(v) Location 0 - Decorate 21(v) PerVertexNV + Decorate 21(v) PerVertexKHR 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out index 74a349834e..18f0ca376c 100644 --- a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out +++ b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out @@ -1,14 +1,14 @@ spv.fragmentShaderBarycentric2.frag // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 42 +// Generated by (magic number): 8000b +// Id's are bound by 62 Capability Shader - Capability FragmentBarycentricNV + Capability FragmentBarycentricKHR Extension "SPV_NV_fragment_shader_barycentric" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 8 11 20 + EntryPoint Fragment 4 "main" 8 11 20 44 ExecutionMode 4 OriginUpperLeft Source ESSL 320 SourceExtension "GL_NV_fragment_shader_barycentric" @@ -16,10 +16,13 @@ spv.fragmentShaderBarycentric2.frag Name 8 "value" Name 11 "gl_BaryCoordNoPerspNV" Name 20 "vertexIDs" + Name 44 "vertexIDs2" Decorate 8(value) Location 1 - Decorate 11(gl_BaryCoordNoPerspNV) BuiltIn BaryCoordNoPerspNV + Decorate 11(gl_BaryCoordNoPerspNV) BuiltIn BaryCoordNoPerspKHR Decorate 20(vertexIDs) Location 0 - Decorate 20(vertexIDs) PerVertexNV + Decorate 20(vertexIDs) PerVertexKHR + Decorate 44(vertexIDs2) Location 1 + Decorate 44(vertexIDs2) PerVertexKHR 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -41,6 +44,7 @@ spv.fragmentShaderBarycentric2.frag 29: 21(int) Constant 1 34: 12(int) Constant 2 37: 21(int) Constant 2 + 44(vertexIDs2): 19(ptr) Variable Input 4(main): 2 Function None 3 5: Label 15: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 13 @@ -61,5 +65,25 @@ spv.fragmentShaderBarycentric2.frag 40: 6(float) FMul 36 39 41: 6(float) FAdd 33 40 Store 8(value) 41 + 42: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 13 + 43: 6(float) Load 42 + 45: 14(ptr) AccessChain 44(vertexIDs2) 22 + 46: 6(float) Load 45 + 47: 6(float) FMul 43 46 + 48: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 26 + 49: 6(float) Load 48 + 50: 14(ptr) AccessChain 44(vertexIDs2) 29 + 51: 6(float) Load 50 + 52: 6(float) FMul 49 51 + 53: 6(float) FAdd 47 52 + 54: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 34 + 55: 6(float) Load 54 + 56: 14(ptr) AccessChain 44(vertexIDs2) 37 + 57: 6(float) Load 56 + 58: 6(float) FMul 55 57 + 59: 6(float) FAdd 53 58 + 60: 6(float) Load 8(value) + 61: 6(float) FAdd 60 59 + Store 8(value) 61 Return FunctionEnd diff --git a/Test/baseResults/spv.fragmentShaderBarycentric3.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric3.frag.out new file mode 100644 index 0000000000..60badf612d --- /dev/null +++ b/Test/baseResults/spv.fragmentShaderBarycentric3.frag.out @@ -0,0 +1,69 @@ +spv.fragmentShaderBarycentric3.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 43 + + Capability Shader + Capability FragmentBarycentricKHR + Extension "SPV_KHR_fragment_shader_barycentric" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 11 21 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_EXT_fragment_shader_barycentric" + Name 4 "main" + Name 8 "value" + Name 11 "gl_BaryCoordEXT" + Name 17 "vertices" + MemberName 17(vertices) 0 "attrib" + Name 21 "v" + Decorate 8(value) Location 1 + Decorate 11(gl_BaryCoordEXT) BuiltIn BaryCoordKHR + Decorate 17(vertices) Block + Decorate 21(v) Location 0 + Decorate 21(v) PerVertexKHR + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Output 6(float) + 8(value): 7(ptr) Variable Output + 9: TypeVector 6(float) 3 + 10: TypePointer Input 9(fvec3) +11(gl_BaryCoordEXT): 10(ptr) Variable Input + 12: TypeInt 32 0 + 13: 12(int) Constant 0 + 14: TypePointer Input 6(float) + 17(vertices): TypeStruct 6(float) + 18: 12(int) Constant 3 + 19: TypeArray 17(vertices) 18 + 20: TypePointer Input 19 + 21(v): 20(ptr) Variable Input + 22: TypeInt 32 1 + 23: 22(int) Constant 0 + 27: 12(int) Constant 1 + 30: 22(int) Constant 1 + 35: 12(int) Constant 2 + 38: 22(int) Constant 2 + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 11(gl_BaryCoordEXT) 13 + 16: 6(float) Load 15 + 24: 14(ptr) AccessChain 21(v) 23 23 + 25: 6(float) Load 24 + 26: 6(float) FMul 16 25 + 28: 14(ptr) AccessChain 11(gl_BaryCoordEXT) 27 + 29: 6(float) Load 28 + 31: 14(ptr) AccessChain 21(v) 30 23 + 32: 6(float) Load 31 + 33: 6(float) FMul 29 32 + 34: 6(float) FAdd 26 33 + 36: 14(ptr) AccessChain 11(gl_BaryCoordEXT) 35 + 37: 6(float) Load 36 + 39: 14(ptr) AccessChain 21(v) 38 23 + 40: 6(float) Load 39 + 41: 6(float) FMul 37 40 + 42: 6(float) FAdd 34 41 + Store 8(value) 42 + Return + FunctionEnd diff --git a/Test/baseResults/spv.fragmentShaderBarycentric4.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric4.frag.out new file mode 100644 index 0000000000..fc0e57648a --- /dev/null +++ b/Test/baseResults/spv.fragmentShaderBarycentric4.frag.out @@ -0,0 +1,89 @@ +spv.fragmentShaderBarycentric4.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 62 + + Capability Shader + Capability FragmentBarycentricKHR + Extension "SPV_KHR_fragment_shader_barycentric" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 11 20 44 + ExecutionMode 4 OriginUpperLeft + Source ESSL 320 + SourceExtension "GL_EXT_fragment_shader_barycentric" + Name 4 "main" + Name 8 "value" + Name 11 "gl_BaryCoordNoPerspEXT" + Name 20 "vertexIDs" + Name 44 "vertexIDs2" + Decorate 8(value) Location 1 + Decorate 11(gl_BaryCoordNoPerspEXT) BuiltIn BaryCoordNoPerspKHR + Decorate 20(vertexIDs) Location 0 + Decorate 20(vertexIDs) PerVertexKHR + Decorate 44(vertexIDs2) Location 1 + Decorate 44(vertexIDs2) PerVertexKHR + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Output 6(float) + 8(value): 7(ptr) Variable Output + 9: TypeVector 6(float) 3 + 10: TypePointer Input 9(fvec3) +11(gl_BaryCoordNoPerspEXT): 10(ptr) Variable Input + 12: TypeInt 32 0 + 13: 12(int) Constant 0 + 14: TypePointer Input 6(float) + 17: 12(int) Constant 3 + 18: TypeArray 6(float) 17 + 19: TypePointer Input 18 + 20(vertexIDs): 19(ptr) Variable Input + 21: TypeInt 32 1 + 22: 21(int) Constant 0 + 26: 12(int) Constant 1 + 29: 21(int) Constant 1 + 34: 12(int) Constant 2 + 37: 21(int) Constant 2 + 44(vertexIDs2): 19(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 13 + 16: 6(float) Load 15 + 23: 14(ptr) AccessChain 20(vertexIDs) 22 + 24: 6(float) Load 23 + 25: 6(float) FMul 16 24 + 27: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 26 + 28: 6(float) Load 27 + 30: 14(ptr) AccessChain 20(vertexIDs) 29 + 31: 6(float) Load 30 + 32: 6(float) FMul 28 31 + 33: 6(float) FAdd 25 32 + 35: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 34 + 36: 6(float) Load 35 + 38: 14(ptr) AccessChain 20(vertexIDs) 37 + 39: 6(float) Load 38 + 40: 6(float) FMul 36 39 + 41: 6(float) FAdd 33 40 + Store 8(value) 41 + 42: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 13 + 43: 6(float) Load 42 + 45: 14(ptr) AccessChain 44(vertexIDs2) 22 + 46: 6(float) Load 45 + 47: 6(float) FMul 43 46 + 48: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 26 + 49: 6(float) Load 48 + 50: 14(ptr) AccessChain 44(vertexIDs2) 29 + 51: 6(float) Load 50 + 52: 6(float) FMul 49 51 + 53: 6(float) FAdd 47 52 + 54: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 34 + 55: 6(float) Load 54 + 56: 14(ptr) AccessChain 44(vertexIDs2) 37 + 57: 6(float) Load 56 + 58: 6(float) FMul 55 57 + 59: 6(float) FAdd 53 58 + 60: 6(float) Load 8(value) + 61: 6(float) FAdd 60 59 + Store 8(value) 61 + Return + FunctionEnd diff --git a/Test/baseResults/spv.fsi.frag.out b/Test/baseResults/spv.fsi.frag.out index 3e06aed0d4..df9fc7c6f6 100644 --- a/Test/baseResults/spv.fsi.frag.out +++ b/Test/baseResults/spv.fsi.frag.out @@ -1,6 +1,6 @@ spv.fsi.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader @@ -18,14 +18,15 @@ spv.fsi.frag MemberName 7(B1) 0 "x" Name 9 "b1" Name 17 "im" + Decorate 7(B1) BufferBlock MemberDecorate 7(B1) 0 Coherent MemberDecorate 7(B1) 0 Offset 0 - Decorate 7(B1) BufferBlock - Decorate 9(b1) DescriptorSet 0 + Decorate 9(b1) Coherent Decorate 9(b1) Binding 0 - Decorate 17(im) DescriptorSet 0 - Decorate 17(im) Binding 1 + Decorate 9(b1) DescriptorSet 0 Decorate 17(im) Coherent + Decorate 17(im) Binding 1 + Decorate 17(im) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.fullyCovered.frag.out b/Test/baseResults/spv.fullyCovered.frag.out index ae7b426c94..cd730a4840 100644 --- a/Test/baseResults/spv.fullyCovered.frag.out +++ b/Test/baseResults/spv.fullyCovered.frag.out @@ -1,6 +1,6 @@ spv.fullyCovered.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader diff --git a/Test/baseResults/spv.funcall.array.frag.out b/Test/baseResults/spv.funcall.array.frag.out index 616ba16c02..1a003be620 100644 --- a/Test/baseResults/spv.funcall.array.frag.out +++ b/Test/baseResults/spv.funcall.array.frag.out @@ -1,6 +1,6 @@ spv.funcall.array.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 66 Capability Shader @@ -22,10 +22,10 @@ spv.funcall.array.frag Name 64 "param" Decorate 27(color) Location 0 Decorate 28 ArrayStride 16 - MemberDecorate 29(ub) 0 Offset 0 Decorate 29(ub) Block - Decorate 31 DescriptorSet 0 + MemberDecorate 29(ub) 0 Offset 0 Decorate 31 Binding 0 + Decorate 31 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out index 58b046106d..52d167c357 100644 --- a/Test/baseResults/spv.functionCall.frag.out +++ b/Test/baseResults/spv.functionCall.frag.out @@ -4,7 +4,7 @@ WARNING: 0:4: varying deprecated in version 130; may be removed in future releas WARNING: 0:5: varying deprecated in version 130; may be removed in future release // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 76 Capability Shader diff --git a/Test/baseResults/spv.functionNestedOpaque.vert.out b/Test/baseResults/spv.functionNestedOpaque.vert.out index 96a64aa3e2..0666c091a9 100644 --- a/Test/baseResults/spv.functionNestedOpaque.vert.out +++ b/Test/baseResults/spv.functionNestedOpaque.vert.out @@ -1,7 +1,7 @@ spv.functionNestedOpaque.vert Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 39 Capability Shader @@ -19,8 +19,8 @@ Validation failed Name 21 "bar(struct-S-s211;" Name 20 "p" Name 36 "si" - Decorate 36(si) DescriptorSet 0 Decorate 36(si) Binding 0 + Decorate 36(si) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.functionParameterTypes.frag.out b/Test/baseResults/spv.functionParameterTypes.frag.out index 65a33da28c..19f5429278 100644 --- a/Test/baseResults/spv.functionParameterTypes.frag.out +++ b/Test/baseResults/spv.functionParameterTypes.frag.out @@ -1,6 +1,6 @@ spv.functionParameterTypes.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 34 Capability Shader diff --git a/Test/baseResults/spv.functionSemantics.frag.out b/Test/baseResults/spv.functionSemantics.frag.out index f12aae0976..dc8520d375 100644 --- a/Test/baseResults/spv.functionSemantics.frag.out +++ b/Test/baseResults/spv.functionSemantics.frag.out @@ -1,6 +1,6 @@ spv.functionSemantics.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 156 Capability Shader diff --git a/Test/baseResults/spv.glFragColor.frag.out b/Test/baseResults/spv.glFragColor.frag.out index df39129855..033769ffc5 100644 --- a/Test/baseResults/spv.glFragColor.frag.out +++ b/Test/baseResults/spv.glFragColor.frag.out @@ -1,6 +1,6 @@ spv.glFragColor.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 12 Capability Shader diff --git a/Test/baseResults/spv.glsl.register.autoassign.frag.out b/Test/baseResults/spv.glsl.register.autoassign.frag.out index 01df400f4b..6ee2cdd449 100644 --- a/Test/baseResults/spv.glsl.register.autoassign.frag.out +++ b/Test/baseResults/spv.glsl.register.autoassign.frag.out @@ -1,6 +1,6 @@ spv.glsl.register.autoassign.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 142 Capability Shader @@ -40,47 +40,47 @@ spv.glsl.register.autoassign.frag Name 128 "g_sSamp_unused2" Name 137 "FragColor" Name 141 "g_tTex_unused3" - Decorate 17(g_tTex1) DescriptorSet 0 Decorate 17(g_tTex1) Binding 11 - Decorate 21(g_sSamp1) DescriptorSet 0 + Decorate 17(g_tTex1) DescriptorSet 0 Decorate 21(g_sSamp1) Binding 5 - Decorate 27(g_tTex2) DescriptorSet 0 + Decorate 21(g_sSamp1) DescriptorSet 0 Decorate 27(g_tTex2) Binding 14 - Decorate 29(g_sSamp2) DescriptorSet 0 + Decorate 27(g_tTex2) DescriptorSet 0 Decorate 29(g_sSamp2) Binding 6 - Decorate 39(g_tTex3) DescriptorSet 0 + Decorate 29(g_sSamp2) DescriptorSet 0 Decorate 39(g_tTex3) Binding 13 - Decorate 46(g_sSamp3) DescriptorSet 0 + Decorate 39(g_tTex3) DescriptorSet 0 Decorate 46(g_sSamp3) Binding 7 - Decorate 64(g_tTex4) DescriptorSet 0 + Decorate 46(g_sSamp3) DescriptorSet 0 Decorate 64(g_tTex4) Binding 15 - Decorate 69(g_sSamp4) DescriptorSet 0 + Decorate 64(g_tTex4) DescriptorSet 0 Decorate 69(g_sSamp4) Binding 8 - Decorate 84(g_tTex5) DescriptorSet 0 + Decorate 69(g_sSamp4) DescriptorSet 0 Decorate 84(g_tTex5) Binding 16 - Decorate 86(g_sSamp5) DescriptorSet 0 + Decorate 84(g_tTex5) DescriptorSet 0 Decorate 86(g_sSamp5) Binding 9 + Decorate 86(g_sSamp5) DescriptorSet 0 MemberDecorate 93(MyStruct_t) 0 Offset 0 MemberDecorate 93(MyStruct_t) 1 Offset 4 MemberDecorate 93(MyStruct_t) 2 Offset 16 + Decorate 95(myblock) Block MemberDecorate 95(myblock) 0 Offset 0 MemberDecorate 95(myblock) 1 Offset 32 MemberDecorate 95(myblock) 2 Offset 48 MemberDecorate 95(myblock) 3 Offset 64 - Decorate 95(myblock) Block - Decorate 97 DescriptorSet 0 Decorate 97 Binding 24 - Decorate 119(g_tTex_unused1) DescriptorSet 0 + Decorate 97 DescriptorSet 0 Decorate 119(g_tTex_unused1) Binding 10 - Decorate 121(g_sSamp_unused1) DescriptorSet 0 + Decorate 119(g_tTex_unused1) DescriptorSet 0 Decorate 121(g_sSamp_unused1) Binding 0 - Decorate 126(g_tTex_unused2) DescriptorSet 0 + Decorate 121(g_sSamp_unused1) DescriptorSet 0 Decorate 126(g_tTex_unused2) Binding 12 - Decorate 128(g_sSamp_unused2) DescriptorSet 0 + Decorate 126(g_tTex_unused2) DescriptorSet 0 Decorate 128(g_sSamp_unused2) Binding 0 + Decorate 128(g_sSamp_unused2) DescriptorSet 0 Decorate 137(FragColor) Location 0 - Decorate 141(g_tTex_unused3) DescriptorSet 0 Decorate 141(g_tTex_unused3) Binding 0 + Decorate 141(g_tTex_unused3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.glsl.register.noautoassign.frag.out b/Test/baseResults/spv.glsl.register.noautoassign.frag.out index e475a0086e..b5e6a6e49c 100644 --- a/Test/baseResults/spv.glsl.register.noautoassign.frag.out +++ b/Test/baseResults/spv.glsl.register.noautoassign.frag.out @@ -1,6 +1,6 @@ spv.glsl.register.noautoassign.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 142 Capability Shader @@ -40,47 +40,47 @@ spv.glsl.register.noautoassign.frag Name 128 "g_sSamp_unused2" Name 137 "FragColor" Name 141 "g_tTex_unused3" - Decorate 17(g_tTex1) DescriptorSet 0 Decorate 17(g_tTex1) Binding 17 - Decorate 21(g_sSamp1) DescriptorSet 0 + Decorate 17(g_tTex1) DescriptorSet 0 Decorate 21(g_sSamp1) Binding 5 - Decorate 27(g_tTex2) DescriptorSet 0 + Decorate 21(g_sSamp1) DescriptorSet 0 Decorate 27(g_tTex2) Binding 18 - Decorate 29(g_sSamp2) DescriptorSet 0 + Decorate 27(g_tTex2) DescriptorSet 0 Decorate 29(g_sSamp2) Binding 6 - Decorate 39(g_tTex3) DescriptorSet 0 + Decorate 29(g_sSamp2) DescriptorSet 0 Decorate 39(g_tTex3) Binding 19 - Decorate 46(g_sSamp3) DescriptorSet 0 + Decorate 39(g_tTex3) DescriptorSet 0 Decorate 46(g_sSamp3) Binding 7 - Decorate 64(g_tTex4) DescriptorSet 0 + Decorate 46(g_sSamp3) DescriptorSet 0 Decorate 64(g_tTex4) Binding 20 - Decorate 69(g_sSamp4) DescriptorSet 0 + Decorate 64(g_tTex4) DescriptorSet 0 Decorate 69(g_sSamp4) Binding 8 - Decorate 84(g_tTex5) DescriptorSet 0 + Decorate 69(g_sSamp4) DescriptorSet 0 Decorate 84(g_tTex5) Binding 21 - Decorate 86(g_sSamp5) DescriptorSet 0 + Decorate 84(g_tTex5) DescriptorSet 0 Decorate 86(g_sSamp5) Binding 9 + Decorate 86(g_sSamp5) DescriptorSet 0 MemberDecorate 93(MyStruct_t) 0 Offset 0 MemberDecorate 93(MyStruct_t) 1 Offset 4 MemberDecorate 93(MyStruct_t) 2 Offset 16 + Decorate 95(myblock) Block MemberDecorate 95(myblock) 0 Offset 0 MemberDecorate 95(myblock) 1 Offset 32 MemberDecorate 95(myblock) 2 Offset 48 MemberDecorate 95(myblock) 3 Offset 64 - Decorate 95(myblock) Block - Decorate 97 DescriptorSet 0 Decorate 97 Binding 19 - Decorate 119(g_tTex_unused1) DescriptorSet 0 + Decorate 97 DescriptorSet 0 Decorate 119(g_tTex_unused1) Binding 22 - Decorate 121(g_sSamp_unused1) DescriptorSet 0 + Decorate 119(g_tTex_unused1) DescriptorSet 0 Decorate 121(g_sSamp_unused1) Binding 10 - Decorate 126(g_tTex_unused2) DescriptorSet 0 + Decorate 121(g_sSamp_unused1) DescriptorSet 0 Decorate 126(g_tTex_unused2) Binding 23 - Decorate 128(g_sSamp_unused2) DescriptorSet 0 + Decorate 126(g_tTex_unused2) DescriptorSet 0 Decorate 128(g_sSamp_unused2) Binding 11 + Decorate 128(g_sSamp_unused2) DescriptorSet 0 Decorate 137(FragColor) Location 0 - Decorate 141(g_tTex_unused3) DescriptorSet 0 Decorate 141(g_tTex_unused3) Binding 24 + Decorate 141(g_tTex_unused3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.hlslDebugInfo.frag.out b/Test/baseResults/spv.hlslDebugInfo.frag.out index 40089e7b87..d68c0546af 100644 --- a/Test/baseResults/spv.hlslDebugInfo.frag.out +++ b/Test/baseResults/spv.hlslDebugInfo.frag.out @@ -1,6 +1,6 @@ spv.hlslDebugInfo.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 19 Capability Shader @@ -44,6 +44,7 @@ float4 origMain() : SV_Position 13: 8(fvec4) ConstantComposite 12 12 12 12 16: TypePointer Output 8(fvec4) 17(@entryPointOutput): 16(ptr) Variable Output + Line 1 2 1 5(newMain): 3 Function None 4 6: Label Line 1 2 0 @@ -51,6 +52,7 @@ float4 origMain() : SV_Position Store 17(@entryPointOutput) 18 Return FunctionEnd + Line 1 2 1 10(@newMain(): 8(fvec4) Function None 9 11: Label Line 1 3 0 diff --git a/Test/baseResults/spv.hlslOffsets.vert.out b/Test/baseResults/spv.hlslOffsets.vert.out index cc71283910..72a996d1be 100644 --- a/Test/baseResults/spv.hlslOffsets.vert.out +++ b/Test/baseResults/spv.hlslOffsets.vert.out @@ -18,7 +18,7 @@ Shader version: 450 0:? 'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 14 Capability Shader @@ -44,6 +44,7 @@ Shader version: 450 MemberName 11(block) 12 "m96" MemberName 11(block) 13 "m112" Name 13 "" + Decorate 11(block) BufferBlock MemberDecorate 11(block) 0 Offset 0 MemberDecorate 11(block) 1 Offset 4 MemberDecorate 11(block) 2 Offset 16 @@ -58,9 +59,8 @@ Shader version: 450 MemberDecorate 11(block) 11 Offset 88 MemberDecorate 11(block) 12 Offset 96 MemberDecorate 11(block) 13 Offset 112 - Decorate 11(block) BufferBlock - Decorate 13 DescriptorSet 0 Decorate 13 Binding 0 + Decorate 13 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out index 5fbb922e12..a6141e2459 100644 --- a/Test/baseResults/spv.image.frag.out +++ b/Test/baseResults/spv.image.frag.out @@ -1,7 +1,7 @@ spv.image.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 405 Capability Shader @@ -45,47 +45,47 @@ Validation failed Name 386 "wo2D" Name 391 "fragData" Name 404 "ic4D" - Decorate 15(i1D) DescriptorSet 0 Decorate 15(i1D) Binding 0 - Decorate 27(i2D) DescriptorSet 0 + Decorate 15(i1D) DescriptorSet 0 Decorate 27(i2D) Binding 1 - Decorate 41(i3D) DescriptorSet 0 + Decorate 27(i2D) DescriptorSet 0 Decorate 41(i3D) Binding 2 - Decorate 48(iCube) DescriptorSet 0 + Decorate 41(i3D) DescriptorSet 0 Decorate 48(iCube) Binding 3 - Decorate 60(iCubeArray) DescriptorSet 0 + Decorate 48(iCube) DescriptorSet 0 Decorate 60(iCubeArray) Binding 4 - Decorate 67(i2DRect) DescriptorSet 0 + Decorate 60(iCubeArray) DescriptorSet 0 Decorate 67(i2DRect) Binding 5 - Decorate 79(i1DArray) DescriptorSet 0 + Decorate 67(i2DRect) DescriptorSet 0 Decorate 79(i1DArray) Binding 6 - Decorate 91(i2DArray) DescriptorSet 0 + Decorate 79(i1DArray) DescriptorSet 0 Decorate 91(i2DArray) Binding 7 - Decorate 98(iBuffer) DescriptorSet 0 + Decorate 91(i2DArray) DescriptorSet 0 Decorate 98(iBuffer) Binding 8 - Decorate 107(i2DMS) DescriptorSet 0 + Decorate 98(iBuffer) DescriptorSet 0 Decorate 107(i2DMS) Binding 9 - Decorate 119(i2DMSArray) DescriptorSet 0 + Decorate 107(i2DMS) DescriptorSet 0 Decorate 119(i2DMSArray) Binding 10 + Decorate 119(i2DMSArray) DescriptorSet 0 Decorate 143(ic1D) Flat Decorate 143(ic1D) Location 0 Decorate 153(ic2D) Flat Decorate 153(ic2D) Location 1 Decorate 163(ic3D) Flat Decorate 163(ic3D) Location 2 - Decorate 243(ii1D) DescriptorSet 0 Decorate 243(ii1D) Binding 11 - Decorate 255(ui2D) DescriptorSet 0 + Decorate 243(ii1D) DescriptorSet 0 Decorate 255(ui2D) Binding 12 + Decorate 255(ui2D) DescriptorSet 0 Decorate 258(value) Flat Decorate 258(value) Location 4 - Decorate 367(ii2DMS) DescriptorSet 0 Decorate 367(ii2DMS) Binding 13 - Decorate 377(ui2DMSArray) DescriptorSet 0 + Decorate 367(ii2DMS) DescriptorSet 0 Decorate 377(ui2DMSArray) Binding 14 - Decorate 386(wo2D) DescriptorSet 0 - Decorate 386(wo2D) Binding 1 + Decorate 377(ui2DMSArray) DescriptorSet 0 Decorate 386(wo2D) NonReadable + Decorate 386(wo2D) Binding 1 + Decorate 386(wo2D) DescriptorSet 0 Decorate 391(fragData) Location 0 Decorate 404(ic4D) Flat Decorate 404(ic4D) Location 3 diff --git a/Test/baseResults/spv.imageAtomic64.comp.out b/Test/baseResults/spv.imageAtomic64.comp.out new file mode 100644 index 0000000000..1d0ffd8c08 --- /dev/null +++ b/Test/baseResults/spv.imageAtomic64.comp.out @@ -0,0 +1,58 @@ +spv.imageAtomic64.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 28 + + Capability Shader + Capability Int64 + Capability Int64Atomics + Capability Int64ImageEXT + Extension "SPV_EXT_shader_image_int64" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64" + SourceExtension "GL_EXT_shader_image_int64" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 9 "z" + Name 14 "ssbo" + MemberName 14(ssbo) 0 "y" + Name 16 "" + Decorate 9(z) Binding 1 + Decorate 9(z) DescriptorSet 0 + Decorate 14(ssbo) BufferBlock + MemberDecorate 14(ssbo) 0 Offset 0 + Decorate 16 Binding 0 + Decorate 16 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 64 0 + 7: TypeImage 6(int64_t) 2D nonsampled format:R64ui + 8: TypePointer UniformConstant 7 + 9(z): 8(ptr) Variable UniformConstant + 10: TypeInt 32 1 + 11: TypeVector 10(int) 2 + 12: 10(int) Constant 1 + 13: 11(ivec2) ConstantComposite 12 12 + 14(ssbo): TypeStruct 6(int64_t) + 15: TypePointer Uniform 14(ssbo) + 16: 15(ptr) Variable Uniform + 17: 10(int) Constant 0 + 18: TypePointer Uniform 6(int64_t) + 21: 10(int) Constant 2048 + 22: TypeInt 32 0 + 23: 22(int) Constant 0 + 24: TypePointer Image 6(int64_t) + 26: 22(int) Constant 1 + 27: 22(int) Constant 2048 + 4(main): 2 Function None 3 + 5: Label + 19: 18(ptr) AccessChain 16 17 + 20: 6(int64_t) Load 19 + 25: 24(ptr) ImageTexelPointer 9(z) 13 23 + AtomicStore 25 12 27 20 + Return + FunctionEnd diff --git a/Test/baseResults/spv.imageAtomic64.frag.out b/Test/baseResults/spv.imageAtomic64.frag.out index 30836978d6..35b6c51205 100644 --- a/Test/baseResults/spv.imageAtomic64.frag.out +++ b/Test/baseResults/spv.imageAtomic64.frag.out @@ -1,7 +1,7 @@ spv.imageAtomic64.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 503 Capability Shader @@ -46,36 +46,36 @@ Validation failed Name 240 "u2DMS" Name 458 "ResType" Name 483 "ResType" + Decorate 12(Buf) BufferBlock MemberDecorate 12(Buf) 0 Offset 0 MemberDecorate 12(Buf) 1 Offset 8 MemberDecorate 12(Buf) 2 Offset 32 MemberDecorate 12(Buf) 3 Offset 64 MemberDecorate 12(Buf) 4 Offset 96 - Decorate 12(Buf) BufferBlock - Decorate 14 DescriptorSet 0 Decorate 14 Binding 11 - Decorate 18(i1D) DescriptorSet 0 + Decorate 14 DescriptorSet 0 Decorate 18(i1D) Binding 0 - Decorate 35(i3D) DescriptorSet 0 + Decorate 18(i1D) DescriptorSet 0 Decorate 35(i3D) Binding 2 - Decorate 48(iBuf) DescriptorSet 0 + Decorate 35(i3D) DescriptorSet 0 Decorate 48(iBuf) Binding 4 - Decorate 58(i2DArray) DescriptorSet 0 + Decorate 48(iBuf) DescriptorSet 0 Decorate 58(i2DArray) Binding 6 - Decorate 69(i2DRect) DescriptorSet 0 + Decorate 58(i2DArray) DescriptorSet 0 Decorate 69(i2DRect) Binding 8 - Decorate 81(i2DMSArray) DescriptorSet 0 + Decorate 69(i2DRect) DescriptorSet 0 Decorate 81(i2DMSArray) Binding 10 - Decorate 194(u2D) DescriptorSet 0 + Decorate 81(i2DMSArray) DescriptorSet 0 Decorate 194(u2D) Binding 1 - Decorate 207(uCube) DescriptorSet 0 + Decorate 194(u2D) DescriptorSet 0 Decorate 207(uCube) Binding 3 - Decorate 218(u1DArray) DescriptorSet 0 + Decorate 207(uCube) DescriptorSet 0 Decorate 218(u1DArray) Binding 5 - Decorate 229(uCubeArray) DescriptorSet 0 + Decorate 218(u1DArray) DescriptorSet 0 Decorate 229(uCubeArray) Binding 7 - Decorate 240(u2DMS) DescriptorSet 0 + Decorate 229(uCubeArray) DescriptorSet 0 Decorate 240(u2DMS) Binding 9 + Decorate 240(u2DMS) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 64 1 diff --git a/Test/baseResults/spv.imageLoadStoreLod.frag.out b/Test/baseResults/spv.imageLoadStoreLod.frag.out index b809474276..f38391b1a8 100644 --- a/Test/baseResults/spv.imageLoadStoreLod.frag.out +++ b/Test/baseResults/spv.imageLoadStoreLod.frag.out @@ -1,6 +1,6 @@ spv.imageLoadStoreLod.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 148 Capability Shader @@ -44,40 +44,40 @@ spv.imageLoadStoreLod.frag Name 133 "u64i2DArray" Name 136 "ResType" Name 142 "u64iCubeArray" - Decorate 14(i1D) DescriptorSet 0 Decorate 14(i1D) Binding 0 - Decorate 24(i2D) DescriptorSet 0 + Decorate 14(i1D) DescriptorSet 0 Decorate 24(i2D) Binding 1 - Decorate 34(i3D) DescriptorSet 0 + Decorate 24(i2D) DescriptorSet 0 Decorate 34(i3D) Binding 2 - Decorate 46(iiCube) DescriptorSet 0 + Decorate 34(i3D) DescriptorSet 0 Decorate 46(iiCube) Binding 3 - Decorate 53(ii1DArray) DescriptorSet 0 + Decorate 46(iiCube) DescriptorSet 0 Decorate 53(ii1DArray) Binding 4 - Decorate 60(ui2DArray) DescriptorSet 0 + Decorate 53(ii1DArray) DescriptorSet 0 Decorate 60(ui2DArray) Binding 5 - Decorate 71(uiCubeArray) DescriptorSet 0 + Decorate 60(ui2DArray) DescriptorSet 0 Decorate 71(uiCubeArray) Binding 6 + Decorate 71(uiCubeArray) DescriptorSet 0 Decorate 77(fragColor) Location 0 + Decorate 86(Buf) BufferBlock MemberDecorate 86(Buf) 0 Offset 0 MemberDecorate 86(Buf) 1 Offset 32 - Decorate 86(Buf) BufferBlock - Decorate 88 DescriptorSet 0 Decorate 88 Binding 14 - Decorate 92(i64i1D) DescriptorSet 0 + Decorate 88 DescriptorSet 0 Decorate 92(i64i1D) Binding 7 - Decorate 102(i64i2D) DescriptorSet 0 + Decorate 92(i64i1D) DescriptorSet 0 Decorate 102(i64i2D) Binding 8 - Decorate 111(i64i3D) DescriptorSet 0 + Decorate 102(i64i2D) DescriptorSet 0 Decorate 111(i64i3D) Binding 9 - Decorate 120(u64iCube) DescriptorSet 0 + Decorate 111(i64i3D) DescriptorSet 0 Decorate 120(u64iCube) Binding 10 - Decorate 127(u64i1DArray) DescriptorSet 0 + Decorate 120(u64iCube) DescriptorSet 0 Decorate 127(u64i1DArray) Binding 11 - Decorate 133(u64i2DArray) DescriptorSet 0 + Decorate 127(u64i1DArray) DescriptorSet 0 Decorate 133(u64i2DArray) Binding 12 - Decorate 142(u64iCubeArray) DescriptorSet 0 + Decorate 133(u64i2DArray) DescriptorSet 0 Decorate 142(u64iCubeArray) Binding 13 + Decorate 142(u64iCubeArray) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.int16.amd.frag.out b/Test/baseResults/spv.int16.amd.frag.out index 676d99c1b7..54b09f0044 100644 --- a/Test/baseResults/spv.int16.amd.frag.out +++ b/Test/baseResults/spv.int16.amd.frag.out @@ -1,6 +1,6 @@ spv.int16.amd.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 576 Capability Shader @@ -94,15 +94,15 @@ spv.int16.amd.frag Name 573 "u64_to_u16" Name 574 "i16_to_u16" Name 575 "u16_to_i16" - MemberDecorate 25(Uniforms) 0 Offset 0 Decorate 25(Uniforms) Block - Decorate 27 DescriptorSet 0 + MemberDecorate 25(Uniforms) 0 Offset 0 Decorate 27 Binding 0 + Decorate 27 DescriptorSet 0 + Decorate 531(Block) Block MemberDecorate 531(Block) 0 Offset 0 MemberDecorate 531(Block) 1 Offset 6 - Decorate 531(Block) Block - Decorate 533(block) DescriptorSet 0 Decorate 533(block) Binding 1 + Decorate 533(block) DescriptorSet 0 Decorate 535(iu16v) Flat Decorate 535(iu16v) Location 0 Decorate 537(ii16) Flat diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out index 3e10a7db24..c7944ef1f0 100644 --- a/Test/baseResults/spv.int16.frag.out +++ b/Test/baseResults/spv.int16.frag.out @@ -1,6 +1,6 @@ spv.int16.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 549 Capability Shader @@ -80,10 +80,11 @@ spv.int16.frag Name 546 "block" Name 547 "si16" Name 548 "su16" - MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 24(Uniforms) Block - Decorate 26 DescriptorSet 0 + MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 26 Binding 0 + Decorate 26 DescriptorSet 0 + Decorate 544(Block) Block MemberDecorate 544(Block) 0 Offset 0 MemberDecorate 544(Block) 1 Offset 4 MemberDecorate 544(Block) 2 Offset 8 @@ -92,9 +93,8 @@ spv.int16.frag MemberDecorate 544(Block) 5 Offset 28 MemberDecorate 544(Block) 6 Offset 32 MemberDecorate 544(Block) 7 Offset 40 - Decorate 544(Block) Block - Decorate 546(block) DescriptorSet 0 Decorate 546(block) Binding 1 + Decorate 546(block) DescriptorSet 0 Decorate 547(si16) SpecId 100 Decorate 548(su16) SpecId 101 2: TypeVoid diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out index af232ec3cd..254622d632 100644 --- a/Test/baseResults/spv.int32.frag.out +++ b/Test/baseResults/spv.int32.frag.out @@ -1,7 +1,7 @@ spv.int32.frag // Module Version 10300 -// Generated by (magic number): 8000a -// Id's are bound by 505 +// Generated by (magic number): 8000b +// Id's are bound by 499 Capability Shader Capability Float16 @@ -43,63 +43,63 @@ spv.int32.frag Name 84 "f64v" Name 94 "i8v" Name 105 "i16v" - Name 125 "u8v" - Name 132 "u16v" - Name 152 "f16v" - Name 168 "bv" - Name 186 "u32v" - Name 191 "i32" - Name 210 "i" - Name 214 "uv" - Name 227 "i64" - Name 260 "b" - Name 312 "i32v" - Name 315 "i32" - Name 325 "u32v" - Name 327 "u32" - Name 399 "i8v4" - Name 402 "i16v2" - Name 407 "u8v4" - Name 410 "u16v2" - Name 413 "i64" - Name 416 "u32v2" - Name 418 "u64" - Name 422 "bv" - Name 497 "Block" - MemberName 497(Block) 0 "i32" - MemberName 497(Block) 1 "i32v2" - MemberName 497(Block) 2 "i32v3" - MemberName 497(Block) 3 "i32v4" - MemberName 497(Block) 4 "u32" - MemberName 497(Block) 5 "u32v2" - MemberName 497(Block) 6 "u32v3" - MemberName 497(Block) 7 "u32v4" - Name 499 "block" - Name 500 "si32" - Name 501 "su32" - Name 502 "si" - Name 503 "su" - Name 504 "sb" - MemberDecorate 27(Uniforms) 0 Offset 0 + Name 122 "u8v" + Name 129 "u16v" + Name 146 "f16v" + Name 162 "bv" + Name 180 "u32v" + Name 185 "i32" + Name 204 "i" + Name 208 "uv" + Name 221 "i64" + Name 254 "b" + Name 306 "i32v" + Name 309 "i32" + Name 319 "u32v" + Name 321 "u32" + Name 393 "i8v4" + Name 396 "i16v2" + Name 401 "u8v4" + Name 404 "u16v2" + Name 407 "i64" + Name 410 "u32v2" + Name 412 "u64" + Name 416 "bv" + Name 491 "Block" + MemberName 491(Block) 0 "i32" + MemberName 491(Block) 1 "i32v2" + MemberName 491(Block) 2 "i32v3" + MemberName 491(Block) 3 "i32v4" + MemberName 491(Block) 4 "u32" + MemberName 491(Block) 5 "u32v2" + MemberName 491(Block) 6 "u32v3" + MemberName 491(Block) 7 "u32v4" + Name 493 "block" + Name 494 "si32" + Name 495 "su32" + Name 496 "si" + Name 497 "su" + Name 498 "sb" Decorate 27(Uniforms) Block - Decorate 29 DescriptorSet 0 + MemberDecorate 27(Uniforms) 0 Offset 0 Decorate 29 Binding 0 - MemberDecorate 497(Block) 0 Offset 0 - MemberDecorate 497(Block) 1 Offset 8 - MemberDecorate 497(Block) 2 Offset 16 - MemberDecorate 497(Block) 3 Offset 32 - MemberDecorate 497(Block) 4 Offset 48 - MemberDecorate 497(Block) 5 Offset 56 - MemberDecorate 497(Block) 6 Offset 64 - MemberDecorate 497(Block) 7 Offset 80 - Decorate 497(Block) Block - Decorate 499(block) DescriptorSet 0 - Decorate 499(block) Binding 1 - Decorate 500(si32) SpecId 100 - Decorate 501(su32) SpecId 101 - Decorate 502(si) SpecId 102 - Decorate 503(su) SpecId 103 - Decorate 504(sb) SpecId 104 + Decorate 29 DescriptorSet 0 + Decorate 491(Block) Block + MemberDecorate 491(Block) 0 Offset 0 + MemberDecorate 491(Block) 1 Offset 8 + MemberDecorate 491(Block) 2 Offset 16 + MemberDecorate 491(Block) 3 Offset 32 + MemberDecorate 491(Block) 4 Offset 48 + MemberDecorate 491(Block) 5 Offset 56 + MemberDecorate 491(Block) 6 Offset 64 + MemberDecorate 491(Block) 7 Offset 80 + Decorate 493(block) Binding 1 + Decorate 493(block) DescriptorSet 0 + Decorate 494(si32) SpecId 100 + Decorate 495(su32) SpecId 101 + Decorate 496(si) SpecId 102 + Decorate 497(su) SpecId 103 + Decorate 498(sb) SpecId 104 2: TypeVoid 3: TypeFunction 2 14: TypeInt 32 0 @@ -151,50 +151,50 @@ spv.int32.frag 104: TypePointer Function 103(i16vec2) 109: TypeInt 16 0 110: TypeVector 109(int16_t) 2 - 124: TypePointer Function 99(i8vec2) - 131: TypePointer Function 110(i16vec2) - 149: TypeFloat 16 - 150: TypeVector 149(float16_t) 2 - 151: TypePointer Function 150(f16vec2) - 165: TypeBool - 166: TypeVector 165(bool) 2 - 167: TypePointer Function 166(bvec2) - 170: 18(int) Constant 1 - 171: 52(ivec2) ConstantComposite 30 30 - 172: 52(ivec2) ConstantComposite 170 170 - 175: 14(int) Constant 0 - 176: 14(int) Constant 1 - 177: 49(ivec2) ConstantComposite 175 175 - 178: 49(ivec2) ConstantComposite 176 176 - 184: TypeVector 14(int) 3 - 185: TypePointer Function 184(ivec3) - 188: TypeVector 18(int) 3 - 226: TypePointer Function 57(int64_t) - 251: 14(int) Constant 2 - 259: TypePointer Function 165(bool) - 323: 52(ivec2) ConstantComposite 24 24 - 332: 184(ivec3) ConstantComposite 175 175 175 - 374: 165(bool) ConstantTrue - 381: 165(bool) ConstantFalse - 382: 166(bvec2) ConstantComposite 381 381 - 394: TypeVector 165(bool) 3 - 395: 394(bvec3) ConstantComposite 381 381 381 - 397: TypeVector 91(int8_t) 4 - 398: TypePointer Function 397(i8vec4) - 405: TypeVector 98(int8_t) 4 - 406: TypePointer Function 405(i8vec4) - 417: TypePointer Function 63(int64_t) - 421: TypePointer Function 394(bvec3) - 495: TypeVector 18(int) 4 - 496: TypeVector 14(int) 4 - 497(Block): TypeStruct 18(int) 52(ivec2) 188(ivec3) 495(ivec4) 14(int) 49(ivec2) 184(ivec3) 496(ivec4) - 498: TypePointer Uniform 497(Block) - 499(block): 498(ptr) Variable Uniform - 500(si32): 18(int) SpecConstant 4294967286 - 501(su32): 14(int) SpecConstant 20 - 502(si): 18(int) SpecConstant 4294967291 - 503(su): 14(int) SpecConstant 4 - 504(sb): 165(bool) SpecConstantTrue + 121: TypePointer Function 99(i8vec2) + 128: TypePointer Function 110(i16vec2) + 143: TypeFloat 16 + 144: TypeVector 143(float16_t) 2 + 145: TypePointer Function 144(f16vec2) + 159: TypeBool + 160: TypeVector 159(bool) 2 + 161: TypePointer Function 160(bvec2) + 164: 18(int) Constant 1 + 165: 52(ivec2) ConstantComposite 30 30 + 166: 52(ivec2) ConstantComposite 164 164 + 169: 14(int) Constant 0 + 170: 14(int) Constant 1 + 171: 49(ivec2) ConstantComposite 169 169 + 172: 49(ivec2) ConstantComposite 170 170 + 178: TypeVector 14(int) 3 + 179: TypePointer Function 178(ivec3) + 182: TypeVector 18(int) 3 + 220: TypePointer Function 57(int64_t) + 245: 14(int) Constant 2 + 253: TypePointer Function 159(bool) + 317: 52(ivec2) ConstantComposite 24 24 + 326: 178(ivec3) ConstantComposite 169 169 169 + 368: 159(bool) ConstantTrue + 375: 159(bool) ConstantFalse + 376: 160(bvec2) ConstantComposite 375 375 + 388: TypeVector 159(bool) 3 + 389: 388(bvec3) ConstantComposite 375 375 375 + 391: TypeVector 91(int8_t) 4 + 392: TypePointer Function 391(i8vec4) + 399: TypeVector 98(int8_t) 4 + 400: TypePointer Function 399(i8vec4) + 411: TypePointer Function 63(int64_t) + 415: TypePointer Function 388(bvec3) + 489: TypeVector 18(int) 4 + 490: TypeVector 14(int) 4 + 491(Block): TypeStruct 18(int) 52(ivec2) 182(ivec3) 489(ivec4) 14(int) 49(ivec2) 178(ivec3) 490(ivec4) + 492: TypePointer Uniform 491(Block) + 493(block): 492(ptr) Variable Uniform + 494(si32): 18(int) SpecConstant 4294967286 + 495(su32): 14(int) SpecConstant 20 + 496(si): 18(int) SpecConstant 4294967291 + 497(su): 14(int) SpecConstant 4 + 498(sb): 159(bool) SpecConstantTrue 4(main): 2 Function None 3 5: Label Store 16(u32Max) 17 @@ -230,10 +230,10 @@ spv.int32.frag 84(f64v): 83(ptr) Variable Function 94(i8v): 93(ptr) Variable Function 105(i16v): 104(ptr) Variable Function - 125(u8v): 124(ptr) Variable Function - 132(u16v): 131(ptr) Variable Function - 152(f16v): 151(ptr) Variable Function - 168(bv): 167(ptr) Variable Function + 122(u8v): 121(ptr) Variable Function + 129(u16v): 128(ptr) Variable Function + 146(f16v): 145(ptr) Variable Function + 162(bv): 161(ptr) Variable Function 55: 52(ivec2) Load 54(i32v) 56: 49(ivec2) Bitcast 55 Store 51(u32v) 56 @@ -278,453 +278,447 @@ spv.int32.frag 112:103(i16vec2) Bitcast 111 Store 105(i16v) 112 113: 52(ivec2) Load 54(i32v) - 114: 18(int) CompositeExtract 113 0 - 115: 18(int) CompositeExtract 113 1 - 116: 52(ivec2) CompositeConstruct 114 115 - Store 54(i32v) 116 - 117: 49(ivec2) Load 51(u32v) - 118: 52(ivec2) Bitcast 117 - Store 54(i32v) 118 - 119: 52(ivec2) Load 54(i32v) - 120: 58(i64vec2) SConvert 119 + Store 54(i32v) 113 + 114: 49(ivec2) Load 51(u32v) + 115: 52(ivec2) Bitcast 114 + Store 54(i32v) 115 + 116: 52(ivec2) Load 54(i32v) + 117: 58(i64vec2) SConvert 116 + Store 60(i64v) 117 + 118: 49(ivec2) Load 51(u32v) + 119: 64(i64vec2) UConvert 118 + 120: 58(i64vec2) Bitcast 119 Store 60(i64v) 120 - 121: 49(ivec2) Load 51(u32v) - 122: 64(i64vec2) UConvert 121 - 123: 58(i64vec2) Bitcast 122 - Store 60(i64v) 123 - 126: 52(ivec2) Load 54(i32v) - 127: 92(i8vec2) SConvert 126 - 128: 99(i8vec2) Bitcast 127 - Store 125(u8v) 128 - 129: 49(ivec2) Load 51(u32v) - 130: 99(i8vec2) UConvert 129 - Store 125(u8v) 130 - 133: 52(ivec2) Load 54(i32v) - 134:103(i16vec2) SConvert 133 - 135:110(i16vec2) Bitcast 134 - Store 132(u16v) 135 - 136: 49(ivec2) Load 51(u32v) - 137:110(i16vec2) UConvert 136 - Store 132(u16v) 137 + 123: 52(ivec2) Load 54(i32v) + 124: 92(i8vec2) SConvert 123 + 125: 99(i8vec2) Bitcast 124 + Store 122(u8v) 125 + 126: 49(ivec2) Load 51(u32v) + 127: 99(i8vec2) UConvert 126 + Store 122(u8v) 127 + 130: 52(ivec2) Load 54(i32v) + 131:103(i16vec2) SConvert 130 + 132:110(i16vec2) Bitcast 131 + Store 129(u16v) 132 + 133: 49(ivec2) Load 51(u32v) + 134:110(i16vec2) UConvert 133 + Store 129(u16v) 134 + 135: 52(ivec2) Load 54(i32v) + 136: 49(ivec2) Bitcast 135 + Store 51(u32v) 136 + 137: 49(ivec2) Load 51(u32v) + Store 51(u32v) 137 138: 52(ivec2) Load 54(i32v) - 139: 49(ivec2) Bitcast 138 - Store 51(u32v) 139 - 140: 49(ivec2) Load 51(u32v) - 141: 14(int) CompositeExtract 140 0 - 142: 14(int) CompositeExtract 140 1 - 143: 49(ivec2) CompositeConstruct 141 142 - Store 51(u32v) 143 - 144: 52(ivec2) Load 54(i32v) - 145: 58(i64vec2) SConvert 144 - 146: 64(i64vec2) Bitcast 145 - Store 66(u64v) 146 - 147: 49(ivec2) Load 51(u32v) - 148: 64(i64vec2) UConvert 147 - Store 66(u64v) 148 - 153: 52(ivec2) Load 54(i32v) - 154:150(f16vec2) ConvertSToF 153 - Store 152(f16v) 154 - 155: 52(ivec2) Load 54(i32v) - 156: 76(fvec2) ConvertSToF 155 + 139: 58(i64vec2) SConvert 138 + 140: 64(i64vec2) Bitcast 139 + Store 66(u64v) 140 + 141: 49(ivec2) Load 51(u32v) + 142: 64(i64vec2) UConvert 141 + Store 66(u64v) 142 + 147: 52(ivec2) Load 54(i32v) + 148:144(f16vec2) ConvertSToF 147 + Store 146(f16v) 148 + 149: 52(ivec2) Load 54(i32v) + 150: 76(fvec2) ConvertSToF 149 + Store 78(f32v) 150 + 151: 52(ivec2) Load 54(i32v) + 152: 82(f64vec2) ConvertSToF 151 + Store 84(f64v) 152 + 153: 49(ivec2) Load 51(u32v) + 154:144(f16vec2) ConvertUToF 153 + Store 146(f16v) 154 + 155: 49(ivec2) Load 51(u32v) + 156: 76(fvec2) ConvertUToF 155 Store 78(f32v) 156 - 157: 52(ivec2) Load 54(i32v) - 158: 82(f64vec2) ConvertSToF 157 + 157: 49(ivec2) Load 51(u32v) + 158: 82(f64vec2) ConvertUToF 157 Store 84(f64v) 158 - 159: 49(ivec2) Load 51(u32v) - 160:150(f16vec2) ConvertUToF 159 - Store 152(f16v) 160 - 161: 49(ivec2) Load 51(u32v) - 162: 76(fvec2) ConvertUToF 161 - Store 78(f32v) 162 - 163: 49(ivec2) Load 51(u32v) - 164: 82(f64vec2) ConvertUToF 163 - Store 84(f64v) 164 - 169: 166(bvec2) Load 168(bv) - 173: 52(ivec2) Select 169 172 171 - Store 54(i32v) 173 - 174: 166(bvec2) Load 168(bv) - 179: 49(ivec2) Select 174 178 177 - Store 51(u32v) 179 - 180: 52(ivec2) Load 54(i32v) - 181: 166(bvec2) INotEqual 180 177 - Store 168(bv) 181 - 182: 49(ivec2) Load 51(u32v) - 183: 166(bvec2) INotEqual 182 177 - Store 168(bv) 183 + 163: 160(bvec2) Load 162(bv) + 167: 52(ivec2) Select 163 166 165 + Store 54(i32v) 167 + 168: 160(bvec2) Load 162(bv) + 173: 49(ivec2) Select 168 172 171 + Store 51(u32v) 173 + 174: 52(ivec2) Load 54(i32v) + 175: 160(bvec2) INotEqual 174 171 + Store 162(bv) 175 + 176: 49(ivec2) Load 51(u32v) + 177: 160(bvec2) INotEqual 176 171 + Store 162(bv) 177 Return FunctionEnd 10(operators(): 2 Function None 3 11: Label - 186(u32v): 185(ptr) Variable Function - 191(i32): 19(ptr) Variable Function - 210(i): 19(ptr) Variable Function - 214(uv): 185(ptr) Variable Function - 227(i64): 226(ptr) Variable Function - 260(b): 259(ptr) Variable Function - 187: 184(ivec3) Load 186(u32v) - 189: 188(ivec3) CompositeConstruct 170 170 170 - 190: 184(ivec3) IAdd 187 189 - Store 186(u32v) 190 - 192: 18(int) Load 191(i32) - 193: 18(int) ISub 192 170 - Store 191(i32) 193 - 194: 18(int) Load 191(i32) - 195: 18(int) IAdd 194 170 - Store 191(i32) 195 - 196: 184(ivec3) Load 186(u32v) - 197: 188(ivec3) CompositeConstruct 170 170 170 - 198: 184(ivec3) ISub 196 197 - Store 186(u32v) 198 - 199: 184(ivec3) Load 186(u32v) - 200: 184(ivec3) Not 199 - Store 186(u32v) 200 - 201: 18(int) Load 191(i32) - Store 191(i32) 201 - 202: 184(ivec3) Load 186(u32v) - 203: 184(ivec3) SNegate 202 - Store 186(u32v) 203 - 204: 18(int) Load 191(i32) - 205: 18(int) Load 191(i32) - 206: 18(int) IAdd 205 204 - Store 191(i32) 206 - 207: 184(ivec3) Load 186(u32v) - 208: 184(ivec3) Load 186(u32v) - 209: 184(ivec3) ISub 208 207 - Store 186(u32v) 209 - 211: 18(int) Load 191(i32) - 212: 18(int) Load 210(i) - 213: 18(int) IMul 212 211 - Store 210(i) 213 - 215: 184(ivec3) Load 186(u32v) - 216: 184(ivec3) Load 214(uv) - 217: 184(ivec3) UDiv 216 215 - Store 214(uv) 217 - 218: 18(int) Load 191(i32) - 219: 14(int) Bitcast 218 - 220: 184(ivec3) Load 214(uv) - 221: 184(ivec3) CompositeConstruct 219 219 219 - 222: 184(ivec3) UMod 220 221 - Store 214(uv) 222 - 223: 184(ivec3) Load 186(u32v) - 224: 184(ivec3) Load 214(uv) - 225: 184(ivec3) IAdd 223 224 - Store 214(uv) 225 - 228: 18(int) Load 191(i32) - 229: 57(int64_t) SConvert 228 - 230: 57(int64_t) Load 227(i64) - 231: 57(int64_t) ISub 229 230 - Store 227(i64) 231 - 232: 184(ivec3) Load 186(u32v) - 233: 184(ivec3) Load 214(uv) - 234: 184(ivec3) IMul 232 233 - Store 214(uv) 234 - 235: 18(int) Load 191(i32) - 236: 57(int64_t) SConvert 235 - 237: 57(int64_t) Load 227(i64) - 238: 57(int64_t) IMul 236 237 - Store 227(i64) 238 - 239: 18(int) Load 191(i32) - 240: 18(int) Load 210(i) - 241: 18(int) SMod 239 240 - Store 210(i) 241 - 242: 18(int) Load 191(i32) - 243: 184(ivec3) Load 186(u32v) - 244: 188(ivec3) CompositeConstruct 242 242 242 - 245: 184(ivec3) ShiftLeftLogical 243 244 - Store 186(u32v) 245 - 246: 38(ptr) AccessChain 186(u32v) 176 + 180(u32v): 179(ptr) Variable Function + 185(i32): 19(ptr) Variable Function + 204(i): 19(ptr) Variable Function + 208(uv): 179(ptr) Variable Function + 221(i64): 220(ptr) Variable Function + 254(b): 253(ptr) Variable Function + 181: 178(ivec3) Load 180(u32v) + 183: 182(ivec3) CompositeConstruct 164 164 164 + 184: 178(ivec3) IAdd 181 183 + Store 180(u32v) 184 + 186: 18(int) Load 185(i32) + 187: 18(int) ISub 186 164 + Store 185(i32) 187 + 188: 18(int) Load 185(i32) + 189: 18(int) IAdd 188 164 + Store 185(i32) 189 + 190: 178(ivec3) Load 180(u32v) + 191: 182(ivec3) CompositeConstruct 164 164 164 + 192: 178(ivec3) ISub 190 191 + Store 180(u32v) 192 + 193: 178(ivec3) Load 180(u32v) + 194: 178(ivec3) Not 193 + Store 180(u32v) 194 + 195: 18(int) Load 185(i32) + Store 185(i32) 195 + 196: 178(ivec3) Load 180(u32v) + 197: 178(ivec3) SNegate 196 + Store 180(u32v) 197 + 198: 18(int) Load 185(i32) + 199: 18(int) Load 185(i32) + 200: 18(int) IAdd 199 198 + Store 185(i32) 200 + 201: 178(ivec3) Load 180(u32v) + 202: 178(ivec3) Load 180(u32v) + 203: 178(ivec3) ISub 202 201 + Store 180(u32v) 203 + 205: 18(int) Load 185(i32) + 206: 18(int) Load 204(i) + 207: 18(int) IMul 206 205 + Store 204(i) 207 + 209: 178(ivec3) Load 180(u32v) + 210: 178(ivec3) Load 208(uv) + 211: 178(ivec3) UDiv 210 209 + Store 208(uv) 211 + 212: 18(int) Load 185(i32) + 213: 14(int) Bitcast 212 + 214: 178(ivec3) Load 208(uv) + 215: 178(ivec3) CompositeConstruct 213 213 213 + 216: 178(ivec3) UMod 214 215 + Store 208(uv) 216 + 217: 178(ivec3) Load 180(u32v) + 218: 178(ivec3) Load 208(uv) + 219: 178(ivec3) IAdd 217 218 + Store 208(uv) 219 + 222: 18(int) Load 185(i32) + 223: 57(int64_t) SConvert 222 + 224: 57(int64_t) Load 221(i64) + 225: 57(int64_t) ISub 223 224 + Store 221(i64) 225 + 226: 178(ivec3) Load 180(u32v) + 227: 178(ivec3) Load 208(uv) + 228: 178(ivec3) IMul 226 227 + Store 208(uv) 228 + 229: 18(int) Load 185(i32) + 230: 57(int64_t) SConvert 229 + 231: 57(int64_t) Load 221(i64) + 232: 57(int64_t) IMul 230 231 + Store 221(i64) 232 + 233: 18(int) Load 185(i32) + 234: 18(int) Load 204(i) + 235: 18(int) SMod 233 234 + Store 204(i) 235 + 236: 18(int) Load 185(i32) + 237: 178(ivec3) Load 180(u32v) + 238: 182(ivec3) CompositeConstruct 236 236 236 + 239: 178(ivec3) ShiftLeftLogical 237 238 + Store 180(u32v) 239 + 240: 38(ptr) AccessChain 180(u32v) 170 + 241: 14(int) Load 240 + 242: 18(int) Load 185(i32) + 243: 18(int) ShiftRightArithmetic 242 241 + Store 185(i32) 243 + 244: 57(int64_t) Load 221(i64) + 246: 38(ptr) AccessChain 180(u32v) 245 247: 14(int) Load 246 - 248: 18(int) Load 191(i32) - 249: 18(int) ShiftRightArithmetic 248 247 - Store 191(i32) 249 - 250: 57(int64_t) Load 227(i64) - 252: 38(ptr) AccessChain 186(u32v) 251 - 253: 14(int) Load 252 - 254: 57(int64_t) ShiftLeftLogical 250 253 - Store 227(i64) 254 - 255: 184(ivec3) Load 186(u32v) - 256: 18(int) Load 210(i) - 257: 188(ivec3) CompositeConstruct 256 256 256 - 258: 184(ivec3) ShiftLeftLogical 255 257 - Store 214(uv) 258 - 261: 38(ptr) AccessChain 186(u32v) 175 - 262: 14(int) Load 261 - 263: 18(int) Load 191(i32) - 264: 14(int) Bitcast 263 - 265: 165(bool) INotEqual 262 264 - Store 260(b) 265 - 266: 18(int) Load 191(i32) - 267: 14(int) Bitcast 266 - 268: 38(ptr) AccessChain 186(u32v) 175 - 269: 14(int) Load 268 - 270: 165(bool) IEqual 267 269 - Store 260(b) 270 - 271: 38(ptr) AccessChain 186(u32v) 175 - 272: 14(int) Load 271 - 273: 38(ptr) AccessChain 214(uv) 176 + 248: 57(int64_t) ShiftLeftLogical 244 247 + Store 221(i64) 248 + 249: 178(ivec3) Load 180(u32v) + 250: 18(int) Load 204(i) + 251: 182(ivec3) CompositeConstruct 250 250 250 + 252: 178(ivec3) ShiftLeftLogical 249 251 + Store 208(uv) 252 + 255: 38(ptr) AccessChain 180(u32v) 169 + 256: 14(int) Load 255 + 257: 18(int) Load 185(i32) + 258: 14(int) Bitcast 257 + 259: 159(bool) INotEqual 256 258 + Store 254(b) 259 + 260: 18(int) Load 185(i32) + 261: 14(int) Bitcast 260 + 262: 38(ptr) AccessChain 180(u32v) 169 + 263: 14(int) Load 262 + 264: 159(bool) IEqual 261 263 + Store 254(b) 264 + 265: 38(ptr) AccessChain 180(u32v) 169 + 266: 14(int) Load 265 + 267: 38(ptr) AccessChain 208(uv) 170 + 268: 14(int) Load 267 + 269: 159(bool) UGreaterThan 266 268 + Store 254(b) 269 + 270: 18(int) Load 185(i32) + 271: 18(int) Load 204(i) + 272: 159(bool) SLessThan 270 271 + Store 254(b) 272 + 273: 38(ptr) AccessChain 180(u32v) 170 274: 14(int) Load 273 - 275: 165(bool) UGreaterThan 272 274 - Store 260(b) 275 - 276: 18(int) Load 191(i32) - 277: 18(int) Load 210(i) - 278: 165(bool) SLessThan 276 277 - Store 260(b) 278 - 279: 38(ptr) AccessChain 186(u32v) 176 - 280: 14(int) Load 279 - 281: 38(ptr) AccessChain 214(uv) 175 - 282: 14(int) Load 281 - 283: 165(bool) UGreaterThanEqual 280 282 - Store 260(b) 283 - 284: 18(int) Load 191(i32) - 285: 18(int) Load 210(i) - 286: 165(bool) SLessThanEqual 284 285 - Store 260(b) 286 - 287: 18(int) Load 191(i32) - 288: 14(int) Bitcast 287 - 289: 184(ivec3) Load 214(uv) - 290: 184(ivec3) CompositeConstruct 288 288 288 - 291: 184(ivec3) BitwiseOr 289 290 - Store 214(uv) 291 - 292: 18(int) Load 191(i32) - 293: 18(int) Load 210(i) - 294: 18(int) BitwiseOr 292 293 - Store 210(i) 294 - 295: 18(int) Load 191(i32) - 296: 57(int64_t) SConvert 295 - 297: 57(int64_t) Load 227(i64) - 298: 57(int64_t) BitwiseAnd 297 296 - Store 227(i64) 298 - 299: 184(ivec3) Load 186(u32v) - 300: 184(ivec3) Load 214(uv) - 301: 184(ivec3) BitwiseAnd 299 300 - Store 214(uv) 301 - 302: 18(int) Load 191(i32) + 275: 38(ptr) AccessChain 208(uv) 169 + 276: 14(int) Load 275 + 277: 159(bool) UGreaterThanEqual 274 276 + Store 254(b) 277 + 278: 18(int) Load 185(i32) + 279: 18(int) Load 204(i) + 280: 159(bool) SLessThanEqual 278 279 + Store 254(b) 280 + 281: 18(int) Load 185(i32) + 282: 14(int) Bitcast 281 + 283: 178(ivec3) Load 208(uv) + 284: 178(ivec3) CompositeConstruct 282 282 282 + 285: 178(ivec3) BitwiseOr 283 284 + Store 208(uv) 285 + 286: 18(int) Load 185(i32) + 287: 18(int) Load 204(i) + 288: 18(int) BitwiseOr 286 287 + Store 204(i) 288 + 289: 18(int) Load 185(i32) + 290: 57(int64_t) SConvert 289 + 291: 57(int64_t) Load 221(i64) + 292: 57(int64_t) BitwiseAnd 291 290 + Store 221(i64) 292 + 293: 178(ivec3) Load 180(u32v) + 294: 178(ivec3) Load 208(uv) + 295: 178(ivec3) BitwiseAnd 293 294 + Store 208(uv) 295 + 296: 18(int) Load 185(i32) + 297: 14(int) Bitcast 296 + 298: 178(ivec3) Load 208(uv) + 299: 178(ivec3) CompositeConstruct 297 297 297 + 300: 178(ivec3) BitwiseXor 298 299 + Store 208(uv) 300 + 301: 178(ivec3) Load 180(u32v) + 302: 18(int) Load 185(i32) 303: 14(int) Bitcast 302 - 304: 184(ivec3) Load 214(uv) - 305: 184(ivec3) CompositeConstruct 303 303 303 - 306: 184(ivec3) BitwiseXor 304 305 - Store 214(uv) 306 - 307: 184(ivec3) Load 186(u32v) - 308: 18(int) Load 191(i32) - 309: 14(int) Bitcast 308 - 310: 184(ivec3) CompositeConstruct 309 309 309 - 311: 184(ivec3) BitwiseXor 307 310 - Store 186(u32v) 311 + 304: 178(ivec3) CompositeConstruct 303 303 303 + 305: 178(ivec3) BitwiseXor 301 304 + Store 180(u32v) 305 Return FunctionEnd 12(builtinFuncs(): 2 Function None 3 13: Label - 312(i32v): 53(ptr) Variable Function - 315(i32): 19(ptr) Variable Function - 325(u32v): 185(ptr) Variable Function - 327(u32): 38(ptr) Variable Function - 399(i8v4): 398(ptr) Variable Function - 402(i16v2): 104(ptr) Variable Function - 407(u8v4): 406(ptr) Variable Function - 410(u16v2): 131(ptr) Variable Function - 413(i64): 226(ptr) Variable Function - 416(u32v2): 50(ptr) Variable Function - 418(u64): 417(ptr) Variable Function - 422(bv): 421(ptr) Variable Function - 313: 52(ivec2) Load 312(i32v) - 314: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 313 - Store 312(i32v) 314 - 316: 18(int) Load 315(i32) - 317: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 316 - Store 315(i32) 317 - 318: 52(ivec2) Load 312(i32v) - 319: 18(int) Load 315(i32) - 320: 52(ivec2) CompositeConstruct 319 319 - 321: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 318 320 - Store 312(i32v) 321 - 322: 52(ivec2) Load 312(i32v) - 324: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 322 323 - Store 312(i32v) 324 - 326: 184(ivec3) Load 325(u32v) - 328: 14(int) Load 327(u32) - 329: 184(ivec3) CompositeConstruct 328 328 328 - 330: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 326 329 - Store 325(u32v) 330 - 331: 184(ivec3) Load 325(u32v) - 333: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 331 332 - Store 325(u32v) 333 - 334: 52(ivec2) Load 312(i32v) - 335: 18(int) Load 315(i32) - 336: 52(ivec2) CompositeConstruct 335 335 - 337: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 334 336 - Store 312(i32v) 337 - 338: 52(ivec2) Load 312(i32v) - 339: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 338 323 - Store 312(i32v) 339 - 340: 184(ivec3) Load 325(u32v) - 341: 14(int) Load 327(u32) - 342: 184(ivec3) CompositeConstruct 341 341 341 - 343: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 340 342 - Store 325(u32v) 343 - 344: 184(ivec3) Load 325(u32v) - 345: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 344 332 - Store 325(u32v) 345 - 346: 52(ivec2) Load 312(i32v) - 347: 18(int) Load 315(i32) - 348: 18(int) SNegate 347 - 349: 18(int) Load 315(i32) - 350: 52(ivec2) CompositeConstruct 348 348 - 351: 52(ivec2) CompositeConstruct 349 349 - 352: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 346 350 351 - Store 312(i32v) 352 - 353: 52(ivec2) Load 312(i32v) - 354: 52(ivec2) Load 312(i32v) - 355: 52(ivec2) SNegate 354 - 356: 52(ivec2) Load 312(i32v) - 357: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 353 355 356 - Store 312(i32v) 357 - 358: 184(ivec3) Load 325(u32v) - 359: 14(int) Load 327(u32) - 360: 14(int) SNegate 359 - 361: 14(int) Load 327(u32) - 362: 184(ivec3) CompositeConstruct 360 360 360 - 363: 184(ivec3) CompositeConstruct 361 361 361 - 364: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 358 362 363 - Store 325(u32v) 364 - 365: 184(ivec3) Load 325(u32v) - 366: 184(ivec3) Load 325(u32v) - 367: 184(ivec3) SNegate 366 - 368: 184(ivec3) Load 325(u32v) - 369: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 365 367 368 - Store 325(u32v) 369 - 370: 19(ptr) AccessChain 312(i32v) 175 - 371: 18(int) Load 370 - 372: 19(ptr) AccessChain 312(i32v) 176 - 373: 18(int) Load 372 - 375: 18(int) Select 374 373 371 - Store 315(i32) 375 - 376: 18(int) Load 315(i32) - 377: 52(ivec2) CompositeConstruct 376 376 - 378: 18(int) Load 315(i32) - 379: 18(int) SNegate 378 - 380: 52(ivec2) CompositeConstruct 379 379 - 383: 52(ivec2) Select 382 380 377 - Store 312(i32v) 383 - 384: 38(ptr) AccessChain 325(u32v) 175 - 385: 14(int) Load 384 - 386: 38(ptr) AccessChain 325(u32v) 176 - 387: 14(int) Load 386 - 388: 14(int) Select 374 387 385 - Store 327(u32) 388 - 389: 14(int) Load 327(u32) - 390: 184(ivec3) CompositeConstruct 389 389 389 - 391: 14(int) Load 327(u32) - 392: 14(int) SNegate 391 - 393: 184(ivec3) CompositeConstruct 392 392 392 - 396: 184(ivec3) Select 395 393 390 - Store 325(u32v) 396 - 400: 397(i8vec4) Load 399(i8v4) - 401: 18(int) Bitcast 400 - Store 315(i32) 401 - 403:103(i16vec2) Load 402(i16v2) - 404: 18(int) Bitcast 403 - Store 315(i32) 404 - 408: 405(i8vec4) Load 407(u8v4) - 409: 14(int) Bitcast 408 - Store 327(u32) 409 - 411:110(i16vec2) Load 410(u16v2) - 412: 14(int) Bitcast 411 - Store 327(u32) 412 - 414: 57(int64_t) Load 413(i64) - 415: 52(ivec2) Bitcast 414 - Store 312(i32v) 415 - 419: 63(int64_t) Load 418(u64) - 420: 49(ivec2) Bitcast 419 - Store 416(u32v2) 420 - 423: 184(ivec3) Load 325(u32v) - 424: 14(int) Load 327(u32) - 425: 184(ivec3) CompositeConstruct 424 424 424 - 426: 394(bvec3) ULessThan 423 425 - Store 422(bv) 426 - 427: 52(ivec2) Load 312(i32v) - 428: 18(int) Load 315(i32) - 429: 52(ivec2) CompositeConstruct 428 428 - 430: 166(bvec2) SLessThan 427 429 - 431: 259(ptr) AccessChain 422(bv) 175 - 432: 165(bool) CompositeExtract 430 0 - Store 431 432 - 433: 259(ptr) AccessChain 422(bv) 176 - 434: 165(bool) CompositeExtract 430 1 - Store 433 434 - 435: 184(ivec3) Load 325(u32v) - 436: 14(int) Load 327(u32) - 437: 184(ivec3) CompositeConstruct 436 436 436 - 438: 394(bvec3) ULessThanEqual 435 437 - Store 422(bv) 438 - 439: 52(ivec2) Load 312(i32v) - 440: 18(int) Load 315(i32) - 441: 52(ivec2) CompositeConstruct 440 440 - 442: 166(bvec2) SLessThanEqual 439 441 - 443: 259(ptr) AccessChain 422(bv) 175 - 444: 165(bool) CompositeExtract 442 0 - Store 443 444 - 445: 259(ptr) AccessChain 422(bv) 176 - 446: 165(bool) CompositeExtract 442 1 - Store 445 446 - 447: 184(ivec3) Load 325(u32v) - 448: 14(int) Load 327(u32) - 449: 184(ivec3) CompositeConstruct 448 448 448 - 450: 394(bvec3) UGreaterThan 447 449 - Store 422(bv) 450 - 451: 52(ivec2) Load 312(i32v) - 452: 18(int) Load 315(i32) - 453: 52(ivec2) CompositeConstruct 452 452 - 454: 166(bvec2) SGreaterThan 451 453 - 455: 259(ptr) AccessChain 422(bv) 175 - 456: 165(bool) CompositeExtract 454 0 - Store 455 456 - 457: 259(ptr) AccessChain 422(bv) 176 - 458: 165(bool) CompositeExtract 454 1 - Store 457 458 - 459: 184(ivec3) Load 325(u32v) - 460: 14(int) Load 327(u32) - 461: 184(ivec3) CompositeConstruct 460 460 460 - 462: 394(bvec3) UGreaterThanEqual 459 461 - Store 422(bv) 462 - 463: 52(ivec2) Load 312(i32v) - 464: 18(int) Load 315(i32) - 465: 52(ivec2) CompositeConstruct 464 464 - 466: 166(bvec2) SGreaterThanEqual 463 465 - 467: 259(ptr) AccessChain 422(bv) 175 - 468: 165(bool) CompositeExtract 466 0 - Store 467 468 - 469: 259(ptr) AccessChain 422(bv) 176 - 470: 165(bool) CompositeExtract 466 1 - Store 469 470 - 471: 184(ivec3) Load 325(u32v) - 472: 14(int) Load 327(u32) - 473: 184(ivec3) CompositeConstruct 472 472 472 - 474: 394(bvec3) IEqual 471 473 - Store 422(bv) 474 - 475: 52(ivec2) Load 312(i32v) - 476: 18(int) Load 315(i32) - 477: 52(ivec2) CompositeConstruct 476 476 - 478: 166(bvec2) IEqual 475 477 - 479: 259(ptr) AccessChain 422(bv) 175 - 480: 165(bool) CompositeExtract 478 0 - Store 479 480 - 481: 259(ptr) AccessChain 422(bv) 176 - 482: 165(bool) CompositeExtract 478 1 - Store 481 482 - 483: 184(ivec3) Load 325(u32v) - 484: 14(int) Load 327(u32) - 485: 184(ivec3) CompositeConstruct 484 484 484 - 486: 394(bvec3) INotEqual 483 485 - Store 422(bv) 486 - 487: 52(ivec2) Load 312(i32v) - 488: 18(int) Load 315(i32) - 489: 52(ivec2) CompositeConstruct 488 488 - 490: 166(bvec2) INotEqual 487 489 - 491: 259(ptr) AccessChain 422(bv) 175 - 492: 165(bool) CompositeExtract 490 0 - Store 491 492 - 493: 259(ptr) AccessChain 422(bv) 176 - 494: 165(bool) CompositeExtract 490 1 - Store 493 494 + 306(i32v): 53(ptr) Variable Function + 309(i32): 19(ptr) Variable Function + 319(u32v): 179(ptr) Variable Function + 321(u32): 38(ptr) Variable Function + 393(i8v4): 392(ptr) Variable Function + 396(i16v2): 104(ptr) Variable Function + 401(u8v4): 400(ptr) Variable Function + 404(u16v2): 128(ptr) Variable Function + 407(i64): 220(ptr) Variable Function + 410(u32v2): 50(ptr) Variable Function + 412(u64): 411(ptr) Variable Function + 416(bv): 415(ptr) Variable Function + 307: 52(ivec2) Load 306(i32v) + 308: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 307 + Store 306(i32v) 308 + 310: 18(int) Load 309(i32) + 311: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 310 + Store 309(i32) 311 + 312: 52(ivec2) Load 306(i32v) + 313: 18(int) Load 309(i32) + 314: 52(ivec2) CompositeConstruct 313 313 + 315: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 312 314 + Store 306(i32v) 315 + 316: 52(ivec2) Load 306(i32v) + 318: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 316 317 + Store 306(i32v) 318 + 320: 178(ivec3) Load 319(u32v) + 322: 14(int) Load 321(u32) + 323: 178(ivec3) CompositeConstruct 322 322 322 + 324: 178(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 320 323 + Store 319(u32v) 324 + 325: 178(ivec3) Load 319(u32v) + 327: 178(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 325 326 + Store 319(u32v) 327 + 328: 52(ivec2) Load 306(i32v) + 329: 18(int) Load 309(i32) + 330: 52(ivec2) CompositeConstruct 329 329 + 331: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 328 330 + Store 306(i32v) 331 + 332: 52(ivec2) Load 306(i32v) + 333: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 332 317 + Store 306(i32v) 333 + 334: 178(ivec3) Load 319(u32v) + 335: 14(int) Load 321(u32) + 336: 178(ivec3) CompositeConstruct 335 335 335 + 337: 178(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 334 336 + Store 319(u32v) 337 + 338: 178(ivec3) Load 319(u32v) + 339: 178(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 338 326 + Store 319(u32v) 339 + 340: 52(ivec2) Load 306(i32v) + 341: 18(int) Load 309(i32) + 342: 18(int) SNegate 341 + 343: 18(int) Load 309(i32) + 344: 52(ivec2) CompositeConstruct 342 342 + 345: 52(ivec2) CompositeConstruct 343 343 + 346: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 340 344 345 + Store 306(i32v) 346 + 347: 52(ivec2) Load 306(i32v) + 348: 52(ivec2) Load 306(i32v) + 349: 52(ivec2) SNegate 348 + 350: 52(ivec2) Load 306(i32v) + 351: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 347 349 350 + Store 306(i32v) 351 + 352: 178(ivec3) Load 319(u32v) + 353: 14(int) Load 321(u32) + 354: 14(int) SNegate 353 + 355: 14(int) Load 321(u32) + 356: 178(ivec3) CompositeConstruct 354 354 354 + 357: 178(ivec3) CompositeConstruct 355 355 355 + 358: 178(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 352 356 357 + Store 319(u32v) 358 + 359: 178(ivec3) Load 319(u32v) + 360: 178(ivec3) Load 319(u32v) + 361: 178(ivec3) SNegate 360 + 362: 178(ivec3) Load 319(u32v) + 363: 178(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 359 361 362 + Store 319(u32v) 363 + 364: 19(ptr) AccessChain 306(i32v) 169 + 365: 18(int) Load 364 + 366: 19(ptr) AccessChain 306(i32v) 170 + 367: 18(int) Load 366 + 369: 18(int) Select 368 367 365 + Store 309(i32) 369 + 370: 18(int) Load 309(i32) + 371: 52(ivec2) CompositeConstruct 370 370 + 372: 18(int) Load 309(i32) + 373: 18(int) SNegate 372 + 374: 52(ivec2) CompositeConstruct 373 373 + 377: 52(ivec2) Select 376 374 371 + Store 306(i32v) 377 + 378: 38(ptr) AccessChain 319(u32v) 169 + 379: 14(int) Load 378 + 380: 38(ptr) AccessChain 319(u32v) 170 + 381: 14(int) Load 380 + 382: 14(int) Select 368 381 379 + Store 321(u32) 382 + 383: 14(int) Load 321(u32) + 384: 178(ivec3) CompositeConstruct 383 383 383 + 385: 14(int) Load 321(u32) + 386: 14(int) SNegate 385 + 387: 178(ivec3) CompositeConstruct 386 386 386 + 390: 178(ivec3) Select 389 387 384 + Store 319(u32v) 390 + 394: 391(i8vec4) Load 393(i8v4) + 395: 18(int) Bitcast 394 + Store 309(i32) 395 + 397:103(i16vec2) Load 396(i16v2) + 398: 18(int) Bitcast 397 + Store 309(i32) 398 + 402: 399(i8vec4) Load 401(u8v4) + 403: 14(int) Bitcast 402 + Store 321(u32) 403 + 405:110(i16vec2) Load 404(u16v2) + 406: 14(int) Bitcast 405 + Store 321(u32) 406 + 408: 57(int64_t) Load 407(i64) + 409: 52(ivec2) Bitcast 408 + Store 306(i32v) 409 + 413: 63(int64_t) Load 412(u64) + 414: 49(ivec2) Bitcast 413 + Store 410(u32v2) 414 + 417: 178(ivec3) Load 319(u32v) + 418: 14(int) Load 321(u32) + 419: 178(ivec3) CompositeConstruct 418 418 418 + 420: 388(bvec3) ULessThan 417 419 + Store 416(bv) 420 + 421: 52(ivec2) Load 306(i32v) + 422: 18(int) Load 309(i32) + 423: 52(ivec2) CompositeConstruct 422 422 + 424: 160(bvec2) SLessThan 421 423 + 425: 253(ptr) AccessChain 416(bv) 169 + 426: 159(bool) CompositeExtract 424 0 + Store 425 426 + 427: 253(ptr) AccessChain 416(bv) 170 + 428: 159(bool) CompositeExtract 424 1 + Store 427 428 + 429: 178(ivec3) Load 319(u32v) + 430: 14(int) Load 321(u32) + 431: 178(ivec3) CompositeConstruct 430 430 430 + 432: 388(bvec3) ULessThanEqual 429 431 + Store 416(bv) 432 + 433: 52(ivec2) Load 306(i32v) + 434: 18(int) Load 309(i32) + 435: 52(ivec2) CompositeConstruct 434 434 + 436: 160(bvec2) SLessThanEqual 433 435 + 437: 253(ptr) AccessChain 416(bv) 169 + 438: 159(bool) CompositeExtract 436 0 + Store 437 438 + 439: 253(ptr) AccessChain 416(bv) 170 + 440: 159(bool) CompositeExtract 436 1 + Store 439 440 + 441: 178(ivec3) Load 319(u32v) + 442: 14(int) Load 321(u32) + 443: 178(ivec3) CompositeConstruct 442 442 442 + 444: 388(bvec3) UGreaterThan 441 443 + Store 416(bv) 444 + 445: 52(ivec2) Load 306(i32v) + 446: 18(int) Load 309(i32) + 447: 52(ivec2) CompositeConstruct 446 446 + 448: 160(bvec2) SGreaterThan 445 447 + 449: 253(ptr) AccessChain 416(bv) 169 + 450: 159(bool) CompositeExtract 448 0 + Store 449 450 + 451: 253(ptr) AccessChain 416(bv) 170 + 452: 159(bool) CompositeExtract 448 1 + Store 451 452 + 453: 178(ivec3) Load 319(u32v) + 454: 14(int) Load 321(u32) + 455: 178(ivec3) CompositeConstruct 454 454 454 + 456: 388(bvec3) UGreaterThanEqual 453 455 + Store 416(bv) 456 + 457: 52(ivec2) Load 306(i32v) + 458: 18(int) Load 309(i32) + 459: 52(ivec2) CompositeConstruct 458 458 + 460: 160(bvec2) SGreaterThanEqual 457 459 + 461: 253(ptr) AccessChain 416(bv) 169 + 462: 159(bool) CompositeExtract 460 0 + Store 461 462 + 463: 253(ptr) AccessChain 416(bv) 170 + 464: 159(bool) CompositeExtract 460 1 + Store 463 464 + 465: 178(ivec3) Load 319(u32v) + 466: 14(int) Load 321(u32) + 467: 178(ivec3) CompositeConstruct 466 466 466 + 468: 388(bvec3) IEqual 465 467 + Store 416(bv) 468 + 469: 52(ivec2) Load 306(i32v) + 470: 18(int) Load 309(i32) + 471: 52(ivec2) CompositeConstruct 470 470 + 472: 160(bvec2) IEqual 469 471 + 473: 253(ptr) AccessChain 416(bv) 169 + 474: 159(bool) CompositeExtract 472 0 + Store 473 474 + 475: 253(ptr) AccessChain 416(bv) 170 + 476: 159(bool) CompositeExtract 472 1 + Store 475 476 + 477: 178(ivec3) Load 319(u32v) + 478: 14(int) Load 321(u32) + 479: 178(ivec3) CompositeConstruct 478 478 478 + 480: 388(bvec3) INotEqual 477 479 + Store 416(bv) 480 + 481: 52(ivec2) Load 306(i32v) + 482: 18(int) Load 309(i32) + 483: 52(ivec2) CompositeConstruct 482 482 + 484: 160(bvec2) INotEqual 481 483 + 485: 253(ptr) AccessChain 416(bv) 169 + 486: 159(bool) CompositeExtract 484 0 + Store 485 486 + 487: 253(ptr) AccessChain 416(bv) 170 + 488: 159(bool) CompositeExtract 484 1 + Store 487 488 Return FunctionEnd diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out index f2fd600f45..5fff827fd4 100644 --- a/Test/baseResults/spv.int64.frag.out +++ b/Test/baseResults/spv.int64.frag.out @@ -1,7 +1,7 @@ spv.int64.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 513 Capability Shader @@ -71,15 +71,15 @@ Validation failed Name 508 "i_to_u64" Name 510 "i64_to_u" Name 512 "u_to_i64" - MemberDecorate 28(Uniforms) 0 Offset 0 Decorate 28(Uniforms) Block - Decorate 30 DescriptorSet 0 + MemberDecorate 28(Uniforms) 0 Offset 0 Decorate 30 Binding 0 + Decorate 30 DescriptorSet 0 + Decorate 486(Block) Block MemberDecorate 486(Block) 0 Offset 0 MemberDecorate 486(Block) 1 Offset 24 - Decorate 486(Block) Block - Decorate 488(block) DescriptorSet 0 Decorate 488(block) Binding 1 + Decorate 488(block) DescriptorSet 0 Decorate 489(si64) SpecId 100 Decorate 490(su64) SpecId 101 Decorate 491(si) SpecId 102 diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out index e9cd5f8653..0682281a67 100644 --- a/Test/baseResults/spv.int8.frag.out +++ b/Test/baseResults/spv.int8.frag.out @@ -1,6 +1,6 @@ spv.int8.frag // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 544 Capability Shader @@ -80,10 +80,11 @@ spv.int8.frag Name 541 "block" Name 542 "si8" Name 543 "su8" - MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 24(Uniforms) Block - Decorate 26 DescriptorSet 0 + MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 26 Binding 0 + Decorate 26 DescriptorSet 0 + Decorate 539(Block) Block MemberDecorate 539(Block) 0 Offset 0 MemberDecorate 539(Block) 1 Offset 2 MemberDecorate 539(Block) 2 Offset 4 @@ -92,9 +93,8 @@ spv.int8.frag MemberDecorate 539(Block) 5 Offset 14 MemberDecorate 539(Block) 6 Offset 16 MemberDecorate 539(Block) 7 Offset 20 - Decorate 539(Block) Block - Decorate 541(block) DescriptorSet 0 Decorate 541(block) Binding 1 + Decorate 541(block) DescriptorSet 0 Decorate 542(si8) SpecId 100 Decorate 543(su8) SpecId 101 2: TypeVoid diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out index b57eac2b5c..67b11d2c86 100644 --- a/Test/baseResults/spv.intOps.vert.out +++ b/Test/baseResults/spv.intOps.vert.out @@ -1,6 +1,6 @@ spv.intOps.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 302 Capability Shader diff --git a/Test/baseResults/spv.intcoopmat.comp.out b/Test/baseResults/spv.intcoopmat.comp.out index 6a69743234..593880757c 100644 --- a/Test/baseResults/spv.intcoopmat.comp.out +++ b/Test/baseResults/spv.intcoopmat.comp.out @@ -1,10 +1,11 @@ spv.intcoopmat.comp // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 262 +// Generated by (magic number): 8000b +// Id's are bound by 286 Capability Shader Capability Float16 + Capability Int16 Capability Int8 Capability StorageBuffer8BitAccess Capability VulkanMemoryModelKHR @@ -72,41 +73,45 @@ spv.intcoopmat.comp Name 207 "tempArg" Name 212 "shmatrix" Name 217 "ms" - Name 225 "miC" - Name 226 "muC" - Name 231 "iarr" - Name 236 "iarr2" - Name 241 "uarr" - Name 246 "uarr2" - Name 251 "S" - MemberName 251(S) 0 "a" - MemberName 251(S) 1 "b" - MemberName 251(S) 2 "c" - Name 256 "SC" - Name 261 "scm" + Name 224 "i16" + Name 230 "u16" + Name 233 "tempArg" + Name 239 "tempArg" + Name 249 "miC" + Name 250 "muC" + Name 255 "iarr" + Name 260 "iarr2" + Name 265 "uarr" + Name 270 "uarr2" + Name 275 "S" + MemberName 275(S) 0 "a" + MemberName 275(S) 1 "b" + MemberName 275(S) 2 "c" + Name 280 "SC" + Name 285 "scm" Decorate 83 ArrayStride 4 Decorate 84 ArrayStride 4 + Decorate 85(Block) Block MemberDecorate 85(Block) 0 Offset 0 MemberDecorate 85(Block) 1 Offset 4194304 - Decorate 85(Block) Block - Decorate 87(block) DescriptorSet 0 Decorate 87(block) Binding 0 + Decorate 87(block) DescriptorSet 0 Decorate 99 ArrayStride 1 Decorate 101 ArrayStride 1 + Decorate 103(Block16) Block MemberDecorate 103(Block16) 0 Offset 0 MemberDecorate 103(Block16) 1 Offset 1048576 MemberDecorate 103(Block16) 2 Offset 1048584 - Decorate 103(Block16) Block Decorate 104 ArrayStride 4 Decorate 105 ArrayStride 4 + Decorate 106(Block) Block MemberDecorate 106(Block) 0 Offset 0 MemberDecorate 106(Block) 1 Offset 4194304 - Decorate 106(Block) Block - Decorate 108(block8) DescriptorSet 0 Decorate 108(block8) Binding 0 + Decorate 108(block8) DescriptorSet 0 Decorate 156(Y) SpecId 0 - Decorate 223 BuiltIn WorkgroupSize - Decorate 256(SC) SpecId 2 + Decorate 247 BuiltIn WorkgroupSize + Decorate 280(SC) SpecId 2 2: TypeVoid 3: TypeFunction 2 6: TypeInt 8 1 @@ -196,47 +201,57 @@ spv.intcoopmat.comp 212(shmatrix): 211(ptr) Variable Workgroup 213: 7(int) Constant 2 214: TypePointer Workgroup 208(ivec4) - 221: TypeVector 7(int) 3 - 222: 7(int) Constant 64 - 223: 221(ivec3) ConstantComposite 222 100 100 - 224: TypePointer Private 166 - 225(miC): 224(ptr) Variable Private - 226(muC): 162(ptr) Variable Private - 227: 7(int) SpecConstantOp 5362 166 - 228: 72(int) SpecConstantOp 128 227 76 - 229: TypeArray 72(int) 228 - 230: TypePointer Private 229 - 231(iarr): 230(ptr) Variable Private - 232: 7(int) SpecConstantOp 5362 166 - 233: 72(int) SpecConstantOp 128 232 76 - 234: TypeArray 72(int) 233 - 235: TypePointer Private 234 - 236(iarr2): 235(ptr) Variable Private - 237: 7(int) SpecConstantOp 5362 158 - 238: 72(int) SpecConstantOp 128 237 76 - 239: TypeArray 72(int) 238 - 240: TypePointer Private 239 - 241(uarr): 240(ptr) Variable Private - 242: 7(int) SpecConstantOp 5362 158 - 243: 72(int) SpecConstantOp 128 242 76 - 244: TypeArray 72(int) 243 - 245: TypePointer Private 244 - 246(uarr2): 245(ptr) Variable Private - 247: TypeCooperativeMatrixNV 72(int) 8 157(Z) 9 - 248: 247 ConstantComposite 73 - 249: 16(int8_t) Constant 1 - 250: 17 ConstantComposite 249 - 251(S): TypeStruct 72(int) 72(int) 72(int) - 252: 72(int) Constant 12 - 253: 72(int) Constant 23 - 254: 72(int) Constant 34 - 255: 251(S) ConstantComposite 252 253 254 - 256(SC): 72(int) SpecConstant 1 - 257: TypeCooperativeMatrixNV 7(int) 8 256(SC) 256(SC) - 258: TypeArray 257 256(SC) - 259: TypeArray 258 256(SC) - 260: TypePointer Private 259 - 261(scm): 260(ptr) Variable Private + 221: TypeInt 16 1 + 222: TypeCooperativeMatrixNV 221(int16_t) 8 32 9 + 223: TypePointer Function 222 + 225:221(int16_t) Constant 0 + 226: 222 ConstantComposite 225 + 227: TypeInt 16 0 + 228: TypeCooperativeMatrixNV 227(int16_t) 8 32 9 + 229: TypePointer Function 228 + 231:227(int16_t) Constant 0 + 232: 228 ConstantComposite 231 + 245: TypeVector 7(int) 3 + 246: 7(int) Constant 64 + 247: 245(ivec3) ConstantComposite 246 100 100 + 248: TypePointer Private 166 + 249(miC): 248(ptr) Variable Private + 250(muC): 162(ptr) Variable Private + 251: 7(int) SpecConstantOp 5362 166 + 252: 72(int) SpecConstantOp 128 251 76 + 253: TypeArray 72(int) 252 + 254: TypePointer Private 253 + 255(iarr): 254(ptr) Variable Private + 256: 7(int) SpecConstantOp 5362 166 + 257: 72(int) SpecConstantOp 128 256 76 + 258: TypeArray 72(int) 257 + 259: TypePointer Private 258 + 260(iarr2): 259(ptr) Variable Private + 261: 7(int) SpecConstantOp 5362 158 + 262: 72(int) SpecConstantOp 128 261 76 + 263: TypeArray 72(int) 262 + 264: TypePointer Private 263 + 265(uarr): 264(ptr) Variable Private + 266: 7(int) SpecConstantOp 5362 158 + 267: 72(int) SpecConstantOp 128 266 76 + 268: TypeArray 72(int) 267 + 269: TypePointer Private 268 + 270(uarr2): 269(ptr) Variable Private + 271: TypeCooperativeMatrixNV 72(int) 8 157(Z) 9 + 272: 271 ConstantComposite 73 + 273: 16(int8_t) Constant 1 + 274: 17 ConstantComposite 273 + 275(S): TypeStruct 72(int) 72(int) 72(int) + 276: 72(int) Constant 12 + 277: 72(int) Constant 23 + 278: 72(int) Constant 34 + 279: 275(S) ConstantComposite 276 277 278 + 280(SC): 72(int) SpecConstant 1 + 281: TypeCooperativeMatrixNV 7(int) 8 280(SC) 280(SC) + 282: TypeArray 281 280(SC) + 283: TypeArray 282 280(SC) + 284: TypePointer Private 283 + 285(scm): 284(ptr) Variable Private 4(main): 2 Function None 3 5: Label 35(mu): 34(ptr) Variable Function @@ -264,6 +279,10 @@ spv.intcoopmat.comp 193(param): 18(ptr) Variable Function 207(tempArg): 38(ptr) Variable Function 217(ms): 38(ptr) Variable Function + 224(i16): 223(ptr) Variable Function + 230(u16): 229(ptr) Variable Function + 233(tempArg): 223(ptr) Variable Function + 239(tempArg): 229(ptr) Variable Function Store 35(mu) 36 Store 39(mi) 41 42: 33 Load 35(mu) @@ -400,6 +419,24 @@ spv.intcoopmat.comp 219: 37 Load 217(ms) 220: 214(ptr) AccessChain 212(shmatrix) 100 CooperativeMatrixStoreNV 220 219 213 93 MakePointerAvailableKHR NonPrivatePointerKHR 213 + Store 224(i16) 226 + Store 230(u16) 232 + 234: 214(ptr) AccessChain 212(shmatrix) 100 + 235: 222 CooperativeMatrixLoadNV 234 213 93 MakePointerVisibleKHR NonPrivatePointerKHR 213 + Store 233(tempArg) 235 + 236: 222 Load 233(tempArg) + Store 224(i16) 236 + 237: 222 Load 224(i16) + 238: 214(ptr) AccessChain 212(shmatrix) 100 + CooperativeMatrixStoreNV 238 237 213 93 MakePointerAvailableKHR NonPrivatePointerKHR 213 + 240: 214(ptr) AccessChain 212(shmatrix) 100 + 241: 228 CooperativeMatrixLoadNV 240 213 93 MakePointerVisibleKHR NonPrivatePointerKHR 213 + Store 239(tempArg) 241 + 242: 228 Load 239(tempArg) + Store 230(u16) 242 + 243: 228 Load 230(u16) + 244: 214(ptr) AccessChain 212(shmatrix) 100 + CooperativeMatrixStoreNV 244 243 213 93 MakePointerAvailableKHR NonPrivatePointerKHR 213 Return FunctionEnd 14(ineg(i81;): 10 Function None 12 diff --git a/Test/baseResults/spv.interpOps.frag.out b/Test/baseResults/spv.interpOps.frag.out index 808c1cdb69..62bd2b62c6 100644 --- a/Test/baseResults/spv.interpOps.frag.out +++ b/Test/baseResults/spv.interpOps.frag.out @@ -1,6 +1,6 @@ spv.interpOps.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 120 Capability Shader diff --git a/Test/baseResults/spv.intrinsicsDebugBreak.frag.out b/Test/baseResults/spv.intrinsicsDebugBreak.frag.out new file mode 100644 index 0000000000..d5367618b7 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsDebugBreak.frag.out @@ -0,0 +1,22 @@ +spv.intrinsicsDebugBreak.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 8 + + Capability Shader + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "GLSL.std.450" + 6: ExtInstImport "NonSemantic.DebugBreak" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + 2: TypeVoid + 3: TypeFunction 2 + 4(main): 2 Function None 3 + 5: Label + 7: 2 ExtInst 6(NonSemantic.DebugBreak) 1(DebugBreak) + Return + FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsFakeEnable.vert.out b/Test/baseResults/spv.intrinsicsFakeEnable.vert.out new file mode 100644 index 0000000000..da1cbf7656 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsFakeEnable.vert.out @@ -0,0 +1,6 @@ +spv.intrinsicsFakeEnable.vert +ERROR: 0:7: 'location' : overlapping use of location 0 +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.intrinsicsInteractWithCoopMat.comp.out b/Test/baseResults/spv.intrinsicsInteractWithCoopMat.comp.out new file mode 100644 index 0000000000..4abb6d509b --- /dev/null +++ b/Test/baseResults/spv.intrinsicsInteractWithCoopMat.comp.out @@ -0,0 +1,71 @@ +spv.intrinsicsInteractWithCoopMat.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 36 + + Capability Shader + Capability Float16 + Capability VulkanMemoryModelKHR + Capability CooperativeMatrixKHR + Extension "SPV_KHR_cooperative_matrix" + Extension "SPV_KHR_storage_buffer_storage_class" + Extension "SPV_KHR_vulkan_memory_model" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical VulkanKHR + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 32 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_spirv_intrinsics" + SourceExtension "GL_KHR_cooperative_matrix" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 13 "tempArg" + Name 16 "Buf" + MemberName 16(Buf) 0 "x" + Name 18 "buf" + Name 26 "A" + Decorate 15 ArrayStride 16 + Decorate 16(Buf) Block + MemberDecorate 16(Buf) 0 Offset 0 + Decorate 18(buf) Binding 0 + Decorate 18(buf) DescriptorSet 0 + Decorate 35 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 16 + 7: TypeInt 32 0 + 8: 7(int) Constant 3 + 9: 7(int) Constant 16 + 10: 7(int) Constant 0 + 11: TypeCooperativeMatrixKHR 6(float16_t) 8 9 9 10 + 12: TypePointer Function 11 + 14: TypeVector 7(int) 4 + 15: TypeRuntimeArray 14(ivec4) + 16(Buf): TypeStruct 15 + 17: TypePointer StorageBuffer 16(Buf) + 18(buf): 17(ptr) Variable StorageBuffer + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 21: TypePointer StorageBuffer 14(ivec4) + 23: 7(int) Constant 2 + 25: TypePointer Private 11 + 26(A): 25(ptr) Variable Private + 29: 7(int) Constant 64 + 31: 7(int) Constant 4 + 32: TypeVector 7(int) 3 + 33: 7(int) Constant 32 + 34: 7(int) Constant 1 + 35: 32(ivec3) ConstantComposite 33 34 34 + 4(main): 2 Function None 3 + 5: Label + 13(tempArg): 12(ptr) Variable Function + 22: 21(ptr) AccessChain 18(buf) 20 10 + 24: 11 CooperativeMatrixLoadKHR 22 20 23 None + Store 13(tempArg) 24 + 27: 11 Load 13(tempArg) + Store 26(A) 27 + 28: 11 Load 26(A) + 30: 21(ptr) AccessChain 18(buf) 20 29 + CooperativeMatrixStoreKHR 30 28 20 31 None + Return + FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out b/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out index d46b33f8dd..e15bb576f1 100644 --- a/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out +++ b/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out @@ -1,6 +1,6 @@ spv.intrinsicsSpirvByReference.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader diff --git a/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out b/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out index c41dcc9c99..b926c5195e 100644 --- a/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out +++ b/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out @@ -1,6 +1,6 @@ spv.intrinsicsSpirvDecorate.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 43 Capability Shader diff --git a/Test/baseResults/spv.intrinsicsSpirvDecorateId.comp.out b/Test/baseResults/spv.intrinsicsSpirvDecorateId.comp.out new file mode 100644 index 0000000000..e9ba47bca2 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvDecorateId.comp.out @@ -0,0 +1,46 @@ +spv.intrinsicsSpirvDecorateId.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 16 + + Capability Shader + Extension "SPV_GOOGLE_hlsl_functionality1" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 460 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 10 "CounterBuffer" + MemberName 10(CounterBuffer) 0 "counter" + Name 12 "x" + Name 13 "Uniform" + MemberName 13(Uniform) 0 "y" + Name 15 "" + Decorate 9 BuiltIn WorkgroupSize + Decorate 10(CounterBuffer) Block + MemberDecorate 10(CounterBuffer) 0 Offset 0 + Decorate 12(x) Binding 1 + Decorate 12(x) DescriptorSet 0 + Decorate 13(Uniform) Block + MemberDecorate 13(Uniform) 0 Offset 0 + Decorate 15 Binding 0 + Decorate 15 DescriptorSet 0 + DecorateId 15 DecorationHlslCounterBufferGOOGLE 12(x) + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 3 + 8: 6(int) Constant 1 + 9: 7(ivec3) ConstantComposite 8 8 8 +10(CounterBuffer): TypeStruct 6(int) + 11: TypePointer Uniform 10(CounterBuffer) + 12(x): 11(ptr) Variable Uniform + 13(Uniform): TypeStruct 6(int) + 14: TypePointer Uniform 13(Uniform) + 15: 14(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsSpirvDecorateString.comp.out b/Test/baseResults/spv.intrinsicsSpirvDecorateString.comp.out new file mode 100644 index 0000000000..87225b876d --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvDecorateString.comp.out @@ -0,0 +1,39 @@ +spv.intrinsicsSpirvDecorateString.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 16 + + Capability Shader + Extension "SPV_GOOGLE_hlsl_functionality1" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 460 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 8 "x" + Name 10 "y" + Decorate 8(x) RelaxedPrecision + DecorateStringGOOGLE 8(x) DecorationHlslSemanticGOOGLE "foobar" + Decorate 10(y) RelaxedPrecision + DecorateStringGOOGLE 10(y) DecorationHlslSemanticGOOGLE "foobar" + Decorate 15 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9: 6(float) Constant 1056964608 + 11: 6(float) Constant 1065353216 + 12: TypeInt 32 0 + 13: TypeVector 12(int) 3 + 14: 12(int) Constant 1 + 15: 13(ivec3) ConstantComposite 14 14 14 + 4(main): 2 Function None 3 + 5: Label + 8(x): 7(ptr) Variable Function + 10(y): 7(ptr) Variable Function + Store 8(x) 9 + Store 10(y) 11 + Return + FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out b/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out index cdea3820e9..d5f935b51e 100644 --- a/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out +++ b/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out @@ -1,6 +1,6 @@ spv.intrinsicsSpirvExecutionMode.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 12 Capability Shader diff --git a/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out b/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out index 0e95e42b03..3103505933 100644 --- a/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out +++ b/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out @@ -1,6 +1,6 @@ spv.intrinsicsSpirvInstruction.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 32 Capability Shader diff --git a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out index 096cc61179..48eef5eb89 100644 --- a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out +++ b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out @@ -1,6 +1,6 @@ spv.intrinsicsSpirvLiteral.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 13 Capability Shader diff --git a/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out b/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out index 4be5b91453..3bf1394cf9 100644 --- a/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out +++ b/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out @@ -1,6 +1,6 @@ spv.intrinsicsSpirvStorageClass.rchit // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 13 Capability RayTracingKHR diff --git a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out index f3937b495a..7b20ece6d4 100644 --- a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out +++ b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out @@ -1,6 +1,6 @@ spv.intrinsicsSpirvType.rgen // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 21 Capability RayQueryKHR @@ -16,8 +16,8 @@ spv.intrinsicsSpirvType.rgen Name 4 "main" Name 8 "rq" Name 11 "as" - Decorate 11(as) DescriptorSet 0 Decorate 11(as) Binding 0 + Decorate 11(as) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeRayQueryKHR diff --git a/Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out b/Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out index 75515be080..248af0831f 100644 --- a/Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out +++ b/Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out @@ -1,6 +1,6 @@ spv.intrinsicsSpirvTypeLocalVar.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader diff --git a/Test/baseResults/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert.out b/Test/baseResults/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert.out new file mode 100644 index 0000000000..580c704d21 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert.out @@ -0,0 +1,35 @@ +spv.intrinsicsSpirvTypeWithTypeSpecifier.vert +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 14 + + Capability Shader + Capability Int64 + Capability PhysicalStorageBufferAddressesEXT + Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_variable_pointers" + 1: ExtInstImport "GLSL.std.450" + MemoryModel PhysicalStorageBuffer64EXT GLSL450 + EntryPoint Vertex 4 "main" + Source GLSL 450 + SourceExtension "GL_ARB_gpu_shader_int64" + SourceExtension "GL_EXT_buffer_reference" + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 8 "value" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypeInt 64 0 + 10: 9(int64_t) Constant 1 0 + 11: TypePointer PhysicalStorageBufferEXT 6(int) + 4(main): 2 Function None 3 + 5: Label + 8(value): 7(ptr) Variable Function + 12: 11(ptr) ConvertUToPtr 10 + 13: 6(int) Load 12 Aligned 32 + Store 8(value) 13 + Return + FunctionEnd diff --git a/Test/baseResults/spv.invariantAll.vert.out b/Test/baseResults/spv.invariantAll.vert.out index ec5ad30aca..40d275a102 100644 --- a/Test/baseResults/spv.invariantAll.vert.out +++ b/Test/baseResults/spv.invariantAll.vert.out @@ -1,7 +1,7 @@ spv.invariantAll.vert // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 25 +// Generated by (magic number): 8000b +// Id's are bound by 24 Capability Shader 1: ExtInstImport "GLSL.std.450" @@ -16,17 +16,17 @@ spv.invariantAll.vert MemberName 11(gl_PerVertex) 3 "gl_CullDistance" Name 13 "" Name 17 "v" - MemberDecorate 11(gl_PerVertex) 0 Invariant + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position - MemberDecorate 11(gl_PerVertex) 1 Invariant + MemberDecorate 11(gl_PerVertex) 0 Invariant MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize - MemberDecorate 11(gl_PerVertex) 2 Invariant + MemberDecorate 11(gl_PerVertex) 1 Invariant MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance - MemberDecorate 11(gl_PerVertex) 3 Invariant + MemberDecorate 11(gl_PerVertex) 2 Invariant MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 11(gl_PerVertex) Block - Decorate 17(v) Location 0 + MemberDecorate 11(gl_PerVertex) 3 Invariant Decorate 17(v) Invariant + Decorate 17(v) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -41,15 +41,14 @@ spv.invariantAll.vert 15: 14(int) Constant 0 16: TypePointer Output 6(float) 17(v): 16(ptr) Variable Output - 20: 6(float) Constant 0 - 21: 6(float) Constant 1065353216 - 23: TypePointer Output 7(fvec4) + 19: 6(float) Constant 0 + 20: 6(float) Constant 1065353216 + 22: TypePointer Output 7(fvec4) 4(main): 2 Function None 3 5: Label 18: 6(float) Load 17(v) - 19: 6(float) Load 17(v) - 22: 7(fvec4) CompositeConstruct 18 19 20 21 - 24: 23(ptr) AccessChain 13 15 - Store 24 22 + 21: 7(fvec4) CompositeConstruct 18 18 19 20 + 23: 22(ptr) AccessChain 13 15 + Store 23 21 Return FunctionEnd diff --git a/Test/baseResults/spv.layer.tese.out b/Test/baseResults/spv.layer.tese.out index 906340fe8c..fb78e63cf0 100644 --- a/Test/baseResults/spv.layer.tese.out +++ b/Test/baseResults/spv.layer.tese.out @@ -1,6 +1,6 @@ spv.layer.tese // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 10 Capability Tessellation diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out index 7de04d406a..4b2374d44c 100644 --- a/Test/baseResults/spv.layoutNested.vert.out +++ b/Test/baseResults/spv.layoutNested.vert.out @@ -1,6 +1,6 @@ spv.layoutNested.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 66 Capability Shader @@ -84,88 +84,88 @@ spv.layoutNested.vert Name 65 "soutinv" Decorate 13 ArrayStride 32 MemberDecorate 14(S) 0 Offset 0 - MemberDecorate 14(S) 1 ColMajor MemberDecorate 14(S) 1 RelaxedPrecision - MemberDecorate 14(S) 1 Offset 16 + MemberDecorate 14(S) 1 ColMajor MemberDecorate 14(S) 1 MatrixStride 16 + MemberDecorate 14(S) 1 Offset 16 MemberDecorate 14(S) 2 RelaxedPrecision MemberDecorate 14(S) 2 Offset 144 Decorate 16 ArrayStride 160 Decorate 18 ArrayStride 480 + Decorate 19(Block140) Block MemberDecorate 19(Block140) 0 RelaxedPrecision MemberDecorate 19(Block140) 0 Offset 0 MemberDecorate 19(Block140) 1 Offset 16 MemberDecorate 19(Block140) 2 RelaxedPrecision MemberDecorate 19(Block140) 2 Offset 976 - Decorate 19(Block140) Block - Decorate 21(inst140) DescriptorSet 0 Decorate 21(inst140) Binding 0 + Decorate 21(inst140) DescriptorSet 0 Decorate 22 ArrayStride 16 MemberDecorate 23(S) 0 Offset 0 - MemberDecorate 23(S) 1 ColMajor MemberDecorate 23(S) 1 RelaxedPrecision - MemberDecorate 23(S) 1 Offset 16 + MemberDecorate 23(S) 1 ColMajor MemberDecorate 23(S) 1 MatrixStride 8 + MemberDecorate 23(S) 1 Offset 16 MemberDecorate 23(S) 2 RelaxedPrecision MemberDecorate 23(S) 2 Offset 80 Decorate 24 ArrayStride 96 Decorate 25 ArrayStride 288 + Decorate 26(Block430) BufferBlock MemberDecorate 26(Block430) 0 RelaxedPrecision MemberDecorate 26(Block430) 0 Offset 0 MemberDecorate 26(Block430) 1 Offset 16 MemberDecorate 26(Block430) 2 RelaxedPrecision MemberDecorate 26(Block430) 2 Offset 592 - Decorate 26(Block430) BufferBlock - Decorate 28(inst430) DescriptorSet 0 Decorate 28(inst430) Binding 1 + Decorate 28(inst430) DescriptorSet 0 MemberDecorate 29(S) 1 RelaxedPrecision MemberDecorate 29(S) 2 RelaxedPrecision MemberDecorate 35(T) 0 RowMajor - MemberDecorate 35(T) 0 Offset 0 MemberDecorate 35(T) 0 MatrixStride 16 + MemberDecorate 35(T) 0 Offset 0 MemberDecorate 35(T) 1 Offset 32 MemberDecorate 36(Nestor) 0 Offset 0 - MemberDecorate 37(Bt1) 0 Offset 0 Decorate 37(Bt1) Block - Decorate 39(Btn1) DescriptorSet 1 + MemberDecorate 37(Bt1) 0 Offset 0 Decorate 39(Btn1) Binding 0 + Decorate 39(Btn1) DescriptorSet 1 MemberDecorate 40(T) 0 ColMajor - MemberDecorate 40(T) 0 Offset 0 MemberDecorate 40(T) 0 MatrixStride 16 + MemberDecorate 40(T) 0 Offset 0 MemberDecorate 40(T) 1 Offset 32 MemberDecorate 41(Nestor) 0 Offset 0 - MemberDecorate 42(Bt2) 0 Offset 0 Decorate 42(Bt2) Block - Decorate 44(Btn2) DescriptorSet 1 + MemberDecorate 42(Bt2) 0 Offset 0 Decorate 44(Btn2) Binding 0 + Decorate 44(Btn2) DescriptorSet 1 + Decorate 45(Bt3) Block MemberDecorate 45(Bt3) 0 Offset 0 MemberDecorate 45(Bt3) 1 Offset 48 - Decorate 45(Bt3) Block - Decorate 47(Btn3) DescriptorSet 1 Decorate 47(Btn3) Binding 0 + Decorate 47(Btn3) DescriptorSet 1 MemberDecorate 48(T) 0 RowMajor - MemberDecorate 48(T) 0 Offset 0 MemberDecorate 48(T) 0 MatrixStride 8 + MemberDecorate 48(T) 0 Offset 0 MemberDecorate 48(T) 1 Offset 16 MemberDecorate 49(Nestor) 0 Offset 0 - MemberDecorate 50(bBt1) 0 Offset 0 Decorate 50(bBt1) BufferBlock - Decorate 52(bBtn1) DescriptorSet 1 + MemberDecorate 50(bBt1) 0 Offset 0 Decorate 52(bBtn1) Binding 0 + Decorate 52(bBtn1) DescriptorSet 1 MemberDecorate 53(T) 0 ColMajor - MemberDecorate 53(T) 0 Offset 0 MemberDecorate 53(T) 0 MatrixStride 8 + MemberDecorate 53(T) 0 Offset 0 MemberDecorate 53(T) 1 Offset 16 MemberDecorate 54(Nestor) 0 Offset 0 - MemberDecorate 55(bBt2) 0 Offset 0 Decorate 55(bBt2) BufferBlock - Decorate 57(bBtn2) DescriptorSet 1 + MemberDecorate 55(bBt2) 0 Offset 0 Decorate 57(bBtn2) Binding 0 + Decorate 57(bBtn2) DescriptorSet 1 + Decorate 58(bBt3) BufferBlock MemberDecorate 58(bBt3) 0 Offset 0 MemberDecorate 58(bBt3) 1 Offset 24 - Decorate 58(bBt3) BufferBlock - Decorate 60(bBtn3) DescriptorSet 1 Decorate 60(bBtn3) Binding 0 + Decorate 60(bBtn3) DescriptorSet 1 Decorate 62(sout) Flat Decorate 62(sout) Location 0 MemberDecorate 63(S) 0 Invariant @@ -173,8 +173,8 @@ spv.layoutNested.vert MemberDecorate 63(S) 1 Invariant MemberDecorate 63(S) 2 RelaxedPrecision MemberDecorate 63(S) 2 Invariant - Decorate 65(soutinv) Location 10 Decorate 65(soutinv) Invariant + Decorate 65(soutinv) Location 10 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out index 8957a3cdc4..93199e7d25 100644 --- a/Test/baseResults/spv.length.frag.out +++ b/Test/baseResults/spv.length.frag.out @@ -1,6 +1,6 @@ spv.length.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 33 Capability Shader diff --git a/Test/baseResults/spv.load.bool.array.interface.block.frag.out b/Test/baseResults/spv.load.bool.array.interface.block.frag.out index f45736cbd0..b50c8b7977 100644 --- a/Test/baseResults/spv.load.bool.array.interface.block.frag.out +++ b/Test/baseResults/spv.load.bool.array.interface.block.frag.out @@ -1,6 +1,6 @@ spv.load.bool.array.interface.block.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 80 Capability Shader @@ -19,16 +19,16 @@ spv.load.bool.array.interface.block.frag Name 77 "color" Decorate 8 ArrayStride 4 Decorate 10 ArrayStride 12 - MemberDecorate 11(ssbo) 0 Offset 0 Decorate 11(ssbo) BufferBlock - Decorate 13 DescriptorSet 0 + MemberDecorate 11(ssbo) 0 Offset 0 Decorate 13 Binding 1 + Decorate 13 DescriptorSet 0 Decorate 16 ArrayStride 16 Decorate 17 ArrayStride 48 - MemberDecorate 18(ub) 0 Offset 0 Decorate 18(ub) Block - Decorate 20 DescriptorSet 0 + MemberDecorate 18(ub) 0 Offset 0 Decorate 20 Binding 0 + Decorate 20 DescriptorSet 0 Decorate 77(color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out index 637fb6d77d..616a245b9f 100644 --- a/Test/baseResults/spv.localAggregates.frag.out +++ b/Test/baseResults/spv.localAggregates.frag.out @@ -1,6 +1,6 @@ spv.localAggregates.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 136 Capability Shader @@ -45,8 +45,8 @@ spv.localAggregates.frag Decorate 90(condition) Location 18 Decorate 98(color) Location 1 Decorate 108(gl_FragColor) Location 0 - Decorate 128(samp2D) DescriptorSet 0 Decorate 128(samp2D) Binding 0 + Decorate 128(samp2D) DescriptorSet 0 Decorate 134(foo) Flat Decorate 134(foo) Location 2 Decorate 135(foo2) Flat diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out index 7178f35846..17f4db458f 100644 --- a/Test/baseResults/spv.loops.frag.out +++ b/Test/baseResults/spv.loops.frag.out @@ -1,6 +1,6 @@ spv.loops.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 725 Capability Shader diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out index 4de834dbe1..27a84fdc3c 100644 --- a/Test/baseResults/spv.loopsArtificial.frag.out +++ b/Test/baseResults/spv.loopsArtificial.frag.out @@ -1,6 +1,6 @@ spv.loopsArtificial.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 158 Capability Shader diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out index 932018fa05..b3388c0c4f 100644 --- a/Test/baseResults/spv.matFun.vert.out +++ b/Test/baseResults/spv.matFun.vert.out @@ -1,6 +1,6 @@ spv.matFun.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 103 Capability Shader @@ -32,19 +32,19 @@ spv.matFun.vert Name 86 "param" Name 89 "param" Name 93 "param" + Decorate 74(gl_PerVertex) Block MemberDecorate 74(gl_PerVertex) 0 BuiltIn Position MemberDecorate 74(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 74(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 74(gl_PerVertex) Block + Decorate 77(bl) Block MemberDecorate 77(bl) 0 ColMajor - MemberDecorate 77(bl) 0 Offset 0 MemberDecorate 77(bl) 0 MatrixStride 16 + MemberDecorate 77(bl) 0 Offset 0 MemberDecorate 77(bl) 1 ColMajor - MemberDecorate 77(bl) 1 Offset 64 MemberDecorate 77(bl) 1 MatrixStride 16 - Decorate 77(bl) Block - Decorate 79(bName) DescriptorSet 0 + MemberDecorate 77(bl) 1 Offset 64 Decorate 79(bName) Binding 0 + Decorate 79(bName) DescriptorSet 0 Decorate 81(v3) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.matrix.frag.out b/Test/baseResults/spv.matrix.frag.out index a287cda7b6..deeaf90d05 100644 --- a/Test/baseResults/spv.matrix.frag.out +++ b/Test/baseResults/spv.matrix.frag.out @@ -1,6 +1,6 @@ spv.matrix.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 286 Capability Shader diff --git a/Test/baseResults/spv.matrix2.frag.out b/Test/baseResults/spv.matrix2.frag.out index 13f2708d14..f9cdaebc11 100644 --- a/Test/baseResults/spv.matrix2.frag.out +++ b/Test/baseResults/spv.matrix2.frag.out @@ -1,6 +1,6 @@ spv.matrix2.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 221 Capability Shader diff --git a/Test/baseResults/spv.maximalReconvergence.vert.out b/Test/baseResults/spv.maximalReconvergence.vert.out new file mode 100644 index 0000000000..2d60ca5b71 --- /dev/null +++ b/Test/baseResults/spv.maximalReconvergence.vert.out @@ -0,0 +1,22 @@ +spv.maximalReconvergence.vert +WARNING: 0:5: '' : attribute with arguments not recognized, skipping + +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 6 + + Capability Shader + Extension "SPV_KHR_maximal_reconvergence" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + ExecutionMode 4 MaximallyReconverges + Source GLSL 460 + SourceExtension "GL_EXT_maximal_reconvergence" + Name 4 "main" + 2: TypeVoid + 3: TypeFunction 2 + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out index fce8c9ccd0..57b4c71c16 100644 --- a/Test/baseResults/spv.memoryQualifier.frag.out +++ b/Test/baseResults/spv.memoryQualifier.frag.out @@ -1,7 +1,7 @@ spv.memoryQualifier.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 105 Capability Shader @@ -30,30 +30,30 @@ Validation failed MemberName 50(Buffer) 4 "i1" MemberName 50(Buffer) 5 "data" Name 52 "" - Decorate 12(i1D) DescriptorSet 0 - Decorate 12(i1D) Binding 0 Decorate 12(i1D) Coherent - Decorate 19(i2D) DescriptorSet 0 - Decorate 19(i2D) Binding 1 + Decorate 12(i1D) Binding 0 + Decorate 12(i1D) DescriptorSet 0 Decorate 19(i2D) Volatile Decorate 19(i2D) Coherent - Decorate 28(i2DRect) DescriptorSet 0 - Decorate 28(i2DRect) Binding 2 + Decorate 19(i2D) Binding 1 + Decorate 19(i2D) DescriptorSet 0 Decorate 28(i2DRect) Restrict - Decorate 35(i3D) DescriptorSet 0 - Decorate 35(i3D) Binding 3 + Decorate 28(i2DRect) Binding 2 + Decorate 28(i2DRect) DescriptorSet 0 Decorate 35(i3D) NonWritable - Decorate 44(iCube) DescriptorSet 0 - Decorate 44(iCube) Binding 3 + Decorate 35(i3D) Binding 3 + Decorate 35(i3D) DescriptorSet 0 Decorate 44(iCube) NonReadable + Decorate 44(iCube) Binding 3 + Decorate 44(iCube) DescriptorSet 0 MemberDecorate 49(Data) 0 Offset 0 MemberDecorate 49(Data) 1 Offset 8 - MemberDecorate 50(Buffer) 0 Coherent + Decorate 50(Buffer) BufferBlock MemberDecorate 50(Buffer) 0 Volatile MemberDecorate 50(Buffer) 0 Coherent MemberDecorate 50(Buffer) 0 Offset 0 - MemberDecorate 50(Buffer) 1 Coherent MemberDecorate 50(Buffer) 1 Restrict + MemberDecorate 50(Buffer) 1 Coherent MemberDecorate 50(Buffer) 1 Offset 8 MemberDecorate 50(Buffer) 2 Coherent MemberDecorate 50(Buffer) 2 NonWritable @@ -65,9 +65,9 @@ Validation failed MemberDecorate 50(Buffer) 4 Offset 48 MemberDecorate 50(Buffer) 5 Coherent MemberDecorate 50(Buffer) 5 Offset 56 - Decorate 50(Buffer) BufferBlock - Decorate 52 DescriptorSet 0 + Decorate 52 Coherent Decorate 52 Binding 4 + Decorate 52 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.memoryScopeSemantics.comp.out b/Test/baseResults/spv.memoryScopeSemantics.comp.out index 56c8470ebe..96a7f3ca98 100644 --- a/Test/baseResults/spv.memoryScopeSemantics.comp.out +++ b/Test/baseResults/spv.memoryScopeSemantics.comp.out @@ -1,6 +1,6 @@ spv.memoryScopeSemantics.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 169 Capability Shader @@ -51,42 +51,42 @@ spv.memoryScopeSemantics.comp MemberName 151(BufferM) 0 "x" Name 153 "bufferm" Name 165 "imageMS" - Decorate 36(imagei) DescriptorSet 0 Decorate 36(imagei) Binding 1 - Decorate 46(imageu) DescriptorSet 0 + Decorate 36(imagei) DescriptorSet 0 Decorate 46(imageu) Binding 0 - MemberDecorate 66(BufferU) 0 Offset 0 + Decorate 46(imageu) DescriptorSet 0 Decorate 66(BufferU) Block - Decorate 68(bufferu) DescriptorSet 0 + MemberDecorate 66(BufferU) 0 Offset 0 Decorate 68(bufferu) Binding 2 - MemberDecorate 78(BufferI) 0 Offset 0 + Decorate 68(bufferu) DescriptorSet 0 Decorate 78(BufferI) Block - Decorate 80(bufferi) DescriptorSet 0 + MemberDecorate 78(BufferI) 0 Offset 0 Decorate 80(bufferi) Binding 3 + Decorate 80(bufferi) DescriptorSet 0 Decorate 83 ArrayStride 4 MemberDecorate 84(A) 0 Offset 0 - MemberDecorate 85(BufferJ) 0 Offset 0 Decorate 85(BufferJ) Block - Decorate 88(bufferj) DescriptorSet 0 + MemberDecorate 85(BufferJ) 0 Offset 0 Decorate 88(bufferj) Binding 4 - MemberDecorate 99(BufferK) 0 Offset 0 + Decorate 88(bufferj) DescriptorSet 0 Decorate 99(BufferK) Block - Decorate 101(bufferk) DescriptorSet 0 + MemberDecorate 99(BufferK) 0 Offset 0 Decorate 101(bufferk) Binding 7 - Decorate 111(imagej) DescriptorSet 0 + Decorate 101(bufferk) DescriptorSet 0 Decorate 111(imagej) Binding 5 - Decorate 123(samp) DescriptorSet 0 + Decorate 111(imagej) DescriptorSet 0 Decorate 123(samp) Binding 6 - MemberDecorate 144(BufferL) 0 Offset 0 + Decorate 123(samp) DescriptorSet 0 Decorate 144(BufferL) Block - Decorate 146(bufferl) DescriptorSet 0 + MemberDecorate 144(BufferL) 0 Offset 0 Decorate 146(bufferl) Binding 8 - MemberDecorate 151(BufferM) 0 Offset 0 + Decorate 146(bufferl) DescriptorSet 0 Decorate 151(BufferM) Block - Decorate 153(bufferm) DescriptorSet 0 + MemberDecorate 151(BufferM) 0 Offset 0 Decorate 153(bufferm) Binding 9 - Decorate 165(imageMS) DescriptorSet 0 + Decorate 153(bufferm) DescriptorSet 0 Decorate 165(imageMS) Binding 10 + Decorate 165(imageMS) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.merge-unreachable.frag.out b/Test/baseResults/spv.merge-unreachable.frag.out index dedec9c8b0..2b919dce62 100644 --- a/Test/baseResults/spv.merge-unreachable.frag.out +++ b/Test/baseResults/spv.merge-unreachable.frag.out @@ -1,6 +1,6 @@ spv.merge-unreachable.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 25 Capability Shader diff --git a/Test/baseResults/spv.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.meshShaderBuiltins.mesh.out index b26122ef79..d130e948e0 100644 --- a/Test/baseResults/spv.meshShaderBuiltins.mesh.out +++ b/Test/baseResults/spv.meshShaderBuiltins.mesh.out @@ -1,6 +1,6 @@ spv.meshShaderBuiltins.mesh // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 148 Capability ClipDistance @@ -47,32 +47,32 @@ spv.meshShaderBuiltins.mesh Name 146 "gl_PrimitiveCountNV" Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 30(gl_MeshPerVertexNV) Block MemberDecorate 30(gl_MeshPerVertexNV) 0 BuiltIn Position MemberDecorate 30(gl_MeshPerVertexNV) 1 BuiltIn PointSize MemberDecorate 30(gl_MeshPerVertexNV) 2 BuiltIn ClipDistance MemberDecorate 30(gl_MeshPerVertexNV) 3 BuiltIn CullDistance - MemberDecorate 30(gl_MeshPerVertexNV) 4 PerViewNV MemberDecorate 30(gl_MeshPerVertexNV) 4 BuiltIn PositionPerViewNV - MemberDecorate 30(gl_MeshPerVertexNV) 5 PerViewNV + MemberDecorate 30(gl_MeshPerVertexNV) 4 PerViewNV MemberDecorate 30(gl_MeshPerVertexNV) 5 BuiltIn ClipDistancePerViewNV - MemberDecorate 30(gl_MeshPerVertexNV) 6 PerViewNV + MemberDecorate 30(gl_MeshPerVertexNV) 5 PerViewNV MemberDecorate 30(gl_MeshPerVertexNV) 6 BuiltIn CullDistancePerViewNV - Decorate 30(gl_MeshPerVertexNV) Block - MemberDecorate 84(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV + MemberDecorate 30(gl_MeshPerVertexNV) 6 PerViewNV + Decorate 84(gl_MeshPerPrimitiveNV) Block MemberDecorate 84(gl_MeshPerPrimitiveNV) 0 BuiltIn PrimitiveId - MemberDecorate 84(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV + MemberDecorate 84(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV MemberDecorate 84(gl_MeshPerPrimitiveNV) 1 BuiltIn Layer - MemberDecorate 84(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV + MemberDecorate 84(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV MemberDecorate 84(gl_MeshPerPrimitiveNV) 2 BuiltIn ViewportIndex - MemberDecorate 84(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV + MemberDecorate 84(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV MemberDecorate 84(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV + MemberDecorate 84(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV + MemberDecorate 84(gl_MeshPerPrimitiveNV) 4 BuiltIn LayerPerViewNV MemberDecorate 84(gl_MeshPerPrimitiveNV) 4 PerPrimitiveNV MemberDecorate 84(gl_MeshPerPrimitiveNV) 4 PerViewNV - MemberDecorate 84(gl_MeshPerPrimitiveNV) 4 BuiltIn LayerPerViewNV + MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 PerPrimitiveNV MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 PerViewNV - MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV - Decorate 84(gl_MeshPerPrimitiveNV) Block Decorate 129(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV Decorate 142(gl_DrawID) BuiltIn DrawIndex Decorate 146(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV diff --git a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out index 86a4fd2e24..71950088c4 100644 --- a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out +++ b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out @@ -1,6 +1,6 @@ spv.meshShaderPerViewBuiltins.mesh // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 126 Capability PerViewAttributesNV @@ -42,32 +42,32 @@ spv.meshShaderPerViewBuiltins.mesh Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV + Decorate 36(gl_MeshPerVertexNV) Block MemberDecorate 36(gl_MeshPerVertexNV) 0 BuiltIn Position MemberDecorate 36(gl_MeshPerVertexNV) 1 BuiltIn PointSize MemberDecorate 36(gl_MeshPerVertexNV) 2 BuiltIn ClipDistance MemberDecorate 36(gl_MeshPerVertexNV) 3 BuiltIn CullDistance - MemberDecorate 36(gl_MeshPerVertexNV) 4 PerViewNV MemberDecorate 36(gl_MeshPerVertexNV) 4 BuiltIn PositionPerViewNV - MemberDecorate 36(gl_MeshPerVertexNV) 5 PerViewNV + MemberDecorate 36(gl_MeshPerVertexNV) 4 PerViewNV MemberDecorate 36(gl_MeshPerVertexNV) 5 BuiltIn ClipDistancePerViewNV - MemberDecorate 36(gl_MeshPerVertexNV) 6 PerViewNV + MemberDecorate 36(gl_MeshPerVertexNV) 5 PerViewNV MemberDecorate 36(gl_MeshPerVertexNV) 6 BuiltIn CullDistancePerViewNV - Decorate 36(gl_MeshPerVertexNV) Block - MemberDecorate 68(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV + MemberDecorate 36(gl_MeshPerVertexNV) 6 PerViewNV + Decorate 68(gl_MeshPerPrimitiveNV) Block MemberDecorate 68(gl_MeshPerPrimitiveNV) 0 BuiltIn PrimitiveId - MemberDecorate 68(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV + MemberDecorate 68(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV MemberDecorate 68(gl_MeshPerPrimitiveNV) 1 BuiltIn Layer - MemberDecorate 68(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV + MemberDecorate 68(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV MemberDecorate 68(gl_MeshPerPrimitiveNV) 2 BuiltIn ViewportIndex - MemberDecorate 68(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV + MemberDecorate 68(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV MemberDecorate 68(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV + MemberDecorate 68(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV + MemberDecorate 68(gl_MeshPerPrimitiveNV) 4 BuiltIn LayerPerViewNV MemberDecorate 68(gl_MeshPerPrimitiveNV) 4 PerPrimitiveNV MemberDecorate 68(gl_MeshPerPrimitiveNV) 4 PerViewNV - MemberDecorate 68(gl_MeshPerPrimitiveNV) 4 BuiltIn LayerPerViewNV + MemberDecorate 68(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV MemberDecorate 68(gl_MeshPerPrimitiveNV) 5 PerPrimitiveNV MemberDecorate 68(gl_MeshPerPrimitiveNV) 5 PerViewNV - MemberDecorate 68(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV - Decorate 68(gl_MeshPerPrimitiveNV) Block Decorate 125 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out index e9eaed3fcf..d4ae1501c1 100644 --- a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out +++ b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out @@ -1,6 +1,6 @@ spv.meshShaderPerViewUserDefined.mesh // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 108 Capability MeshShadingNV @@ -43,41 +43,41 @@ spv.meshShaderPerViewUserDefined.mesh Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV + Decorate 31(block) Block MemberDecorate 31(block) 0 PerPrimitiveNV MemberDecorate 31(block) 0 PerViewNV MemberDecorate 31(block) 1 PerPrimitiveNV MemberDecorate 31(block) 2 PerViewNV - Decorate 31(block) Block Decorate 35(b) Location 0 + Decorate 64(perviewBlock) Block MemberDecorate 64(perviewBlock) 0 PerPrimitiveNV MemberDecorate 64(perviewBlock) 0 PerViewNV MemberDecorate 64(perviewBlock) 1 PerPrimitiveNV MemberDecorate 64(perviewBlock) 1 PerViewNV MemberDecorate 64(perviewBlock) 2 PerViewNV MemberDecorate 64(perviewBlock) 3 PerViewNV - Decorate 64(perviewBlock) Block Decorate 67(b2) Location 10 Decorate 89 BuiltIn WorkgroupSize - Decorate 92(nonBlk1) PerViewNV Decorate 92(nonBlk1) Location 18 + Decorate 92(nonBlk1) PerViewNV + Decorate 95(nonBlk2) Location 19 Decorate 95(nonBlk2) PerPrimitiveNV Decorate 95(nonBlk2) PerViewNV - Decorate 95(nonBlk2) Location 19 - Decorate 96(nonBlk3) PerViewNV Decorate 96(nonBlk3) Location 20 + Decorate 96(nonBlk3) PerViewNV + Decorate 97(nonBlk4) Location 21 Decorate 97(nonBlk4) PerPrimitiveNV Decorate 97(nonBlk4) PerViewNV - Decorate 97(nonBlk4) Location 21 - Decorate 102(nonBlkArr1) PerViewNV Decorate 102(nonBlkArr1) Location 22 + Decorate 102(nonBlkArr1) PerViewNV + Decorate 105(nonBlkArr2) Location 24 Decorate 105(nonBlkArr2) PerPrimitiveNV Decorate 105(nonBlkArr2) PerViewNV - Decorate 105(nonBlkArr2) Location 24 - Decorate 106(nonBlkArr3) PerViewNV Decorate 106(nonBlkArr3) Location 26 + Decorate 106(nonBlkArr3) PerViewNV + Decorate 107(nonBlkArr4) Location 28 Decorate 107(nonBlkArr4) PerPrimitiveNV Decorate 107(nonBlkArr4) PerViewNV - Decorate 107(nonBlkArr4) Location 28 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out index bfd2d85b9c..b75cfdd546 100644 --- a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out +++ b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out @@ -1,6 +1,6 @@ spv.meshShaderRedeclBuiltins.mesh // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 129 Capability ClipDistance @@ -39,20 +39,20 @@ spv.meshShaderRedeclBuiltins.mesh Name 127 "gl_PrimitiveCountNV" Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 24(gl_MeshPerVertexNV) Block MemberDecorate 24(gl_MeshPerVertexNV) 0 BuiltIn Position MemberDecorate 24(gl_MeshPerVertexNV) 1 BuiltIn PointSize MemberDecorate 24(gl_MeshPerVertexNV) 2 BuiltIn ClipDistance MemberDecorate 24(gl_MeshPerVertexNV) 3 BuiltIn CullDistance - Decorate 24(gl_MeshPerVertexNV) Block - MemberDecorate 77(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV + Decorate 77(gl_MeshPerPrimitiveNV) Block MemberDecorate 77(gl_MeshPerPrimitiveNV) 0 BuiltIn PrimitiveId - MemberDecorate 77(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV + MemberDecorate 77(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV MemberDecorate 77(gl_MeshPerPrimitiveNV) 1 BuiltIn Layer - MemberDecorate 77(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV + MemberDecorate 77(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV MemberDecorate 77(gl_MeshPerPrimitiveNV) 2 BuiltIn ViewportIndex - MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV + MemberDecorate 77(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV - Decorate 77(gl_MeshPerPrimitiveNV) Block + MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV Decorate 122(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV Decorate 127(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV Decorate 128 BuiltIn WorkgroupSize diff --git a/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out index 9f881e6161..63e7fc67a9 100644 --- a/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out +++ b/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out @@ -1,6 +1,6 @@ spv.meshShaderRedeclPerViewBuiltins.mesh // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 120 Capability PerViewAttributesNV @@ -34,20 +34,20 @@ spv.meshShaderRedeclPerViewBuiltins.mesh Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV - MemberDecorate 31(gl_MeshPerVertexNV) 0 PerViewNV + Decorate 31(gl_MeshPerVertexNV) Block MemberDecorate 31(gl_MeshPerVertexNV) 0 BuiltIn PositionPerViewNV - MemberDecorate 31(gl_MeshPerVertexNV) 1 PerViewNV + MemberDecorate 31(gl_MeshPerVertexNV) 0 PerViewNV MemberDecorate 31(gl_MeshPerVertexNV) 1 BuiltIn ClipDistancePerViewNV - MemberDecorate 31(gl_MeshPerVertexNV) 2 PerViewNV + MemberDecorate 31(gl_MeshPerVertexNV) 1 PerViewNV MemberDecorate 31(gl_MeshPerVertexNV) 2 BuiltIn CullDistancePerViewNV - Decorate 31(gl_MeshPerVertexNV) Block + MemberDecorate 31(gl_MeshPerVertexNV) 2 PerViewNV + Decorate 63(gl_MeshPerPrimitiveNV) Block + MemberDecorate 63(gl_MeshPerPrimitiveNV) 0 BuiltIn LayerPerViewNV MemberDecorate 63(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV MemberDecorate 63(gl_MeshPerPrimitiveNV) 0 PerViewNV - MemberDecorate 63(gl_MeshPerPrimitiveNV) 0 BuiltIn LayerPerViewNV + MemberDecorate 63(gl_MeshPerPrimitiveNV) 1 BuiltIn ViewportMaskPerViewNV MemberDecorate 63(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV MemberDecorate 63(gl_MeshPerPrimitiveNV) 1 PerViewNV - MemberDecorate 63(gl_MeshPerPrimitiveNV) 1 BuiltIn ViewportMaskPerViewNV - Decorate 63(gl_MeshPerPrimitiveNV) Block Decorate 119 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.meshShaderSharedMem.mesh.out b/Test/baseResults/spv.meshShaderSharedMem.mesh.out index 7960ffaaf4..2e15ffb5d8 100644 --- a/Test/baseResults/spv.meshShaderSharedMem.mesh.out +++ b/Test/baseResults/spv.meshShaderSharedMem.mesh.out @@ -1,6 +1,6 @@ spv.meshShaderSharedMem.mesh // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 77 Capability StorageImageWriteWithoutFormat @@ -28,13 +28,13 @@ spv.meshShaderSharedMem.mesh Name 55 "uni_image" Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId - MemberDecorate 37(block0) 0 Offset 0 Decorate 37(block0) Block - Decorate 39 DescriptorSet 0 + MemberDecorate 37(block0) 0 Offset 0 Decorate 39 Binding 1 - Decorate 55(uni_image) DescriptorSet 0 - Decorate 55(uni_image) Binding 0 + Decorate 39 DescriptorSet 0 Decorate 55(uni_image) NonReadable + Decorate 55(uni_image) Binding 0 + Decorate 55(uni_image) DescriptorSet 0 Decorate 76 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.meshShaderTaskMem.mesh.out index be8043929b..adf4cfb97d 100644 --- a/Test/baseResults/spv.meshShaderTaskMem.mesh.out +++ b/Test/baseResults/spv.meshShaderTaskMem.mesh.out @@ -1,6 +1,6 @@ spv.meshShaderTaskMem.mesh // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 58 Capability MeshShadingNV @@ -33,18 +33,18 @@ spv.meshShaderTaskMem.mesh Decorate 18(outBlock) Block Decorate 22(myblk) Location 0 Decorate 27 ArrayStride 4 - MemberDecorate 28(taskBlock) 0 PerTaskNV + Decorate 28(taskBlock) Block MemberDecorate 28(taskBlock) 0 Offset 0 - MemberDecorate 28(taskBlock) 1 PerTaskNV + MemberDecorate 28(taskBlock) 0 PerTaskNV MemberDecorate 28(taskBlock) 1 Offset 16 - Decorate 28(taskBlock) Block + MemberDecorate 28(taskBlock) 1 PerTaskNV Decorate 30(mytask) Location 0 Decorate 35 ArrayStride 4 + Decorate 36(bufferBlock) BufferBlock MemberDecorate 36(bufferBlock) 0 Offset 0 MemberDecorate 36(bufferBlock) 1 Offset 16 - Decorate 36(bufferBlock) BufferBlock - Decorate 38(mybuf) DescriptorSet 0 Decorate 38(mybuf) Binding 0 + Decorate 38(mybuf) DescriptorSet 0 Decorate 57 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.meshShaderUserDefined.mesh.out index 01ee933d0d..d4d87356cf 100644 --- a/Test/baseResults/spv.meshShaderUserDefined.mesh.out +++ b/Test/baseResults/spv.meshShaderUserDefined.mesh.out @@ -1,6 +1,6 @@ spv.meshShaderUserDefined.mesh // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 141 Capability MeshShadingNV @@ -34,13 +34,13 @@ spv.meshShaderUserDefined.mesh Name 104 "blk2" Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 30(myblock) Block MemberDecorate 30(myblock) 0 PerPrimitiveNV MemberDecorate 30(myblock) 1 PerPrimitiveNV MemberDecorate 30(myblock) 2 PerPrimitiveNV MemberDecorate 30(myblock) 3 PerPrimitiveNV MemberDecorate 30(myblock) 4 PerPrimitiveNV MemberDecorate 30(myblock) 5 PerPrimitiveNV - Decorate 30(myblock) Block Decorate 34(blk) Location 0 Decorate 100(myblock2) Block Decorate 104(blk2) Location 20 diff --git a/Test/baseResults/spv.meshTaskShader.task.out b/Test/baseResults/spv.meshTaskShader.task.out index 9fed1915a7..dab6762306 100644 --- a/Test/baseResults/spv.meshTaskShader.task.out +++ b/Test/baseResults/spv.meshTaskShader.task.out @@ -1,6 +1,6 @@ spv.meshTaskShader.task // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 116 Capability StorageImageWriteWithoutFormat @@ -36,21 +36,21 @@ spv.meshTaskShader.task Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId Decorate 24(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV Decorate 25(gl_MeshViewCountNV) BuiltIn MeshViewCountNV - MemberDecorate 47(block0) 0 Offset 0 Decorate 47(block0) Block - Decorate 49 DescriptorSet 0 + MemberDecorate 47(block0) 0 Offset 0 Decorate 49 Binding 1 - Decorate 65(uni_image) DescriptorSet 0 - Decorate 65(uni_image) Binding 0 + Decorate 49 DescriptorSet 0 Decorate 65(uni_image) NonReadable + Decorate 65(uni_image) Binding 0 + Decorate 65(uni_image) DescriptorSet 0 Decorate 87 ArrayStride 8 - MemberDecorate 88(Task) 0 PerTaskNV + Decorate 88(Task) Block MemberDecorate 88(Task) 0 Offset 0 - MemberDecorate 88(Task) 1 PerTaskNV + MemberDecorate 88(Task) 0 PerTaskNV MemberDecorate 88(Task) 1 Offset 8 - MemberDecorate 88(Task) 2 PerTaskNV + MemberDecorate 88(Task) 1 PerTaskNV MemberDecorate 88(Task) 2 Offset 32 - Decorate 88(Task) Block + MemberDecorate 88(Task) 2 PerTaskNV Decorate 90(mytask) Location 0 Decorate 113(gl_TaskCountNV) BuiltIn TaskCountNV Decorate 115 BuiltIn WorkgroupSize diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out index 13a3528f8f..af9db96651 100644 --- a/Test/baseResults/spv.multiStruct.comp.out +++ b/Test/baseResults/spv.multiStruct.comp.out @@ -1,6 +1,6 @@ spv.multiStruct.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 161 Capability Shader @@ -48,35 +48,35 @@ spv.multiStruct.comp Decorate 15 ArrayStride 8 MemberDecorate 16(MyStruct) 0 Offset 0 MemberDecorate 16(MyStruct) 1 Offset 16 - MemberDecorate 17(SSBO0) 0 Offset 0 Decorate 17(SSBO0) BufferBlock - Decorate 19(inBuf) DescriptorSet 0 + MemberDecorate 17(SSBO0) 0 Offset 0 Decorate 19(inBuf) Binding 0 - MemberDecorate 39(SSBO1) 0 Offset 0 + Decorate 19(inBuf) DescriptorSet 0 Decorate 39(SSBO1) BufferBlock - Decorate 41(outBuf) DescriptorSet 0 + MemberDecorate 39(SSBO1) 0 Offset 0 Decorate 41(outBuf) Binding 1 + Decorate 41(outBuf) DescriptorSet 0 Decorate 57 ArrayStride 16 MemberDecorate 58(MyStruct) 0 Offset 0 MemberDecorate 58(MyStruct) 1 Offset 32 - MemberDecorate 59(UBO) 0 Offset 0 Decorate 59(UBO) Block - Decorate 61(uBuf) DescriptorSet 0 + MemberDecorate 59(UBO) 0 Offset 0 Decorate 61(uBuf) Binding 2 + Decorate 61(uBuf) DescriptorSet 0 Decorate 89 ArrayStride 48 MemberDecorate 90(Nested) 0 Offset 0 MemberDecorate 90(Nested) 1 Offset 16 - MemberDecorate 91(UBON) 0 Offset 0 Decorate 91(UBON) Block - Decorate 93(uBufN) DescriptorSet 0 + MemberDecorate 91(UBON) 0 Offset 0 Decorate 93(uBufN) Binding 2 + Decorate 93(uBufN) DescriptorSet 0 Decorate 125 ArrayStride 24 MemberDecorate 126(Nested) 0 Offset 0 MemberDecorate 126(Nested) 1 Offset 8 - MemberDecorate 127(SSBO1N) 0 Offset 0 Decorate 127(SSBO1N) BufferBlock - Decorate 129(outBufN) DescriptorSet 0 + MemberDecorate 127(SSBO1N) 0 Offset 0 Decorate 129(outBufN) Binding 1 + Decorate 129(outBufN) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.multiStructFuncall.frag.out b/Test/baseResults/spv.multiStructFuncall.frag.out index eec734a352..55544dc611 100644 --- a/Test/baseResults/spv.multiStructFuncall.frag.out +++ b/Test/baseResults/spv.multiStructFuncall.frag.out @@ -1,6 +1,6 @@ spv.multiStructFuncall.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 65 Capability Shader @@ -30,12 +30,12 @@ spv.multiStructFuncall.frag Name 50 "param" Name 61 "param" MemberDecorate 22(S) 0 ColMajor - MemberDecorate 22(S) 0 Offset 0 MemberDecorate 22(S) 0 MatrixStride 16 - MemberDecorate 23(blockName) 0 Offset 0 + MemberDecorate 22(S) 0 Offset 0 Decorate 23(blockName) BufferBlock - Decorate 25 DescriptorSet 0 + MemberDecorate 23(blockName) 0 Offset 0 Decorate 25 Binding 0 + Decorate 25 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.multiView.frag.out b/Test/baseResults/spv.multiView.frag.out index a1575d988e..dd433e80d0 100644 --- a/Test/baseResults/spv.multiView.frag.out +++ b/Test/baseResults/spv.multiView.frag.out @@ -1,6 +1,6 @@ spv.multiView.frag // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 17 Capability Shader @@ -15,8 +15,8 @@ spv.multiView.frag Name 9 "color" Name 12 "gl_ViewIndex" Decorate 9(color) Location 0 - Decorate 12(gl_ViewIndex) Flat Decorate 12(gl_ViewIndex) BuiltIn ViewIndex + Decorate 12(gl_ViewIndex) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.multiple.var.same.const.frag.out b/Test/baseResults/spv.multiple.var.same.const.frag.out new file mode 100644 index 0000000000..833c6aced4 --- /dev/null +++ b/Test/baseResults/spv.multiple.var.same.const.frag.out @@ -0,0 +1,21 @@ +spv.multiple.var.same.const.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 8 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source ESSL 320 + Name 4 "main" + Decorate 7 RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: 6(float) Constant 897988541 + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out index b1c29f9bb9..fa71809337 100644 --- a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out +++ b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out @@ -1,6 +1,6 @@ spv.multiviewPerViewAttributes.tesc // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 41 Capability Tessellation @@ -25,16 +25,16 @@ spv.multiviewPerViewAttributes.tesc MemberName 27(gl_PerVertex) 3 "gl_CullDistance" MemberName 27(gl_PerVertex) 4 "gl_PositionPerViewNV" Name 31 "gl_in" + Decorate 13(gl_PerVertex) Block MemberDecorate 13(gl_PerVertex) 0 BuiltIn PositionPerViewNV MemberDecorate 13(gl_PerVertex) 1 BuiltIn ViewportMaskPerViewNV - Decorate 13(gl_PerVertex) Block Decorate 19(gl_InvocationID) BuiltIn InvocationId + Decorate 27(gl_PerVertex) Block MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance MemberDecorate 27(gl_PerVertex) 4 BuiltIn PositionPerViewNV - Decorate 27(gl_PerVertex) Block 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out index 0a4e1f0b62..c456f02233 100644 --- a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out +++ b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out @@ -1,6 +1,6 @@ spv.multiviewPerViewAttributes.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -22,11 +22,11 @@ spv.multiviewPerViewAttributes.vert Name 24 "" Decorate 11(gl_ViewportMaskPerViewNV) BuiltIn ViewportMaskPerViewNV Decorate 20(gl_PositionPerViewNV) BuiltIn PositionPerViewNV + Decorate 22(gl_PerVertex) Block MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 22(gl_PerVertex) Block 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out index 332ca66220..2bffe8af4b 100644 --- a/Test/baseResults/spv.newTexture.frag.out +++ b/Test/baseResults/spv.newTexture.frag.out @@ -1,8 +1,8 @@ spv.newTexture.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 284 +// Generated by (magic number): 8000b +// Id's are bound by 278 Capability Shader Capability SampledRect @@ -10,7 +10,7 @@ Validation failed Capability ImageQuery 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 17 26 29 55 81 84 92 253 283 + EntryPoint Fragment 4 "main" 17 26 29 55 81 84 92 247 277 ExecutionMode 4 OriginUpperLeft Source GLSL 430 Name 4 "main" @@ -29,70 +29,70 @@ Validation failed Name 92 "ic2D" Name 102 "sr" Name 128 "sCube" - Name 139 "s2DArrayShadow" - Name 167 "iv" - Name 171 "is2D" - Name 208 "is3D" - Name 220 "isCube" - Name 232 "is2DArray" - Name 243 "iv2" - Name 247 "sCubeShadow" - Name 253 "FragData" - Name 265 "is2Dms" - Name 269 "us2D" - Name 273 "us3D" - Name 277 "usCube" - Name 281 "us2DArray" - Name 283 "ic4D" - Decorate 13(s2D) DescriptorSet 0 + Name 137 "s2DArrayShadow" + Name 162 "iv" + Name 166 "is2D" + Name 202 "is3D" + Name 214 "isCube" + Name 226 "is2DArray" + Name 237 "iv2" + Name 241 "sCubeShadow" + Name 247 "FragData" + Name 259 "is2Dms" + Name 263 "us2D" + Name 267 "us3D" + Name 271 "usCube" + Name 275 "us2DArray" + Name 277 "ic4D" Decorate 13(s2D) Binding 0 + Decorate 13(s2D) DescriptorSet 0 Decorate 17(c2D) Location 1 - Decorate 23(sCubeArrayShadow) DescriptorSet 0 Decorate 23(sCubeArrayShadow) Binding 5 + Decorate 23(sCubeArrayShadow) DescriptorSet 0 Decorate 26(c4D) Location 3 Decorate 29(c1D) Location 0 - Decorate 42(s3D) DescriptorSet 0 Decorate 42(s3D) Binding 2 - Decorate 51(s2DArray) DescriptorSet 0 + Decorate 42(s3D) DescriptorSet 0 Decorate 51(s2DArray) Binding 7 + Decorate 51(s2DArray) DescriptorSet 0 Decorate 55(c3D) Location 2 - Decorate 64(s2DShadow) DescriptorSet 0 Decorate 64(s2DShadow) Binding 6 + Decorate 64(s2DShadow) DescriptorSet 0 Decorate 81(ic3D) Flat Decorate 81(ic3D) Location 6 Decorate 84(ic1D) Flat Decorate 84(ic1D) Location 4 Decorate 92(ic2D) Flat Decorate 92(ic2D) Location 5 - Decorate 102(sr) DescriptorSet 0 Decorate 102(sr) Binding 1 - Decorate 128(sCube) DescriptorSet 0 + Decorate 102(sr) DescriptorSet 0 Decorate 128(sCube) Binding 3 - Decorate 139(s2DArrayShadow) DescriptorSet 0 - Decorate 139(s2DArrayShadow) Binding 8 - Decorate 171(is2D) DescriptorSet 0 - Decorate 171(is2D) Binding 9 - Decorate 208(is3D) DescriptorSet 0 - Decorate 208(is3D) Binding 10 - Decorate 220(isCube) DescriptorSet 0 - Decorate 220(isCube) Binding 11 - Decorate 232(is2DArray) DescriptorSet 0 - Decorate 232(is2DArray) Binding 12 - Decorate 247(sCubeShadow) DescriptorSet 0 - Decorate 247(sCubeShadow) Binding 4 - Decorate 253(FragData) Location 0 - Decorate 265(is2Dms) DescriptorSet 0 - Decorate 265(is2Dms) Binding 0 - Decorate 269(us2D) DescriptorSet 0 - Decorate 269(us2D) Binding 0 - Decorate 273(us3D) DescriptorSet 0 - Decorate 273(us3D) Binding 0 - Decorate 277(usCube) DescriptorSet 0 - Decorate 277(usCube) Binding 0 - Decorate 281(us2DArray) DescriptorSet 0 - Decorate 281(us2DArray) Binding 0 - Decorate 283(ic4D) Flat - Decorate 283(ic4D) Location 7 + Decorate 128(sCube) DescriptorSet 0 + Decorate 137(s2DArrayShadow) Binding 8 + Decorate 137(s2DArrayShadow) DescriptorSet 0 + Decorate 166(is2D) Binding 9 + Decorate 166(is2D) DescriptorSet 0 + Decorate 202(is3D) Binding 10 + Decorate 202(is3D) DescriptorSet 0 + Decorate 214(isCube) Binding 11 + Decorate 214(isCube) DescriptorSet 0 + Decorate 226(is2DArray) Binding 12 + Decorate 226(is2DArray) DescriptorSet 0 + Decorate 241(sCubeShadow) Binding 4 + Decorate 241(sCubeShadow) DescriptorSet 0 + Decorate 247(FragData) Location 0 + Decorate 259(is2Dms) Binding 0 + Decorate 259(is2Dms) DescriptorSet 0 + Decorate 263(us2D) Binding 0 + Decorate 263(us2D) DescriptorSet 0 + Decorate 267(us3D) Binding 0 + Decorate 267(us3D) DescriptorSet 0 + Decorate 271(usCube) Binding 0 + Decorate 271(usCube) DescriptorSet 0 + Decorate 275(us2DArray) Binding 0 + Decorate 275(us2DArray) DescriptorSet 0 + Decorate 277(ic4D) Flat + Decorate 277(ic4D) Location 7 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -153,66 +153,66 @@ Validation failed 126: TypeSampledImage 125 127: TypePointer UniformConstant 126 128(sCube): 127(ptr) Variable UniformConstant - 136: TypeImage 6(float) 2D depth array sampled format:Unknown - 137: TypeSampledImage 136 - 138: TypePointer UniformConstant 137 -139(s2DArrayShadow): 138(ptr) Variable UniformConstant - 146: 32(int) Constant 0 - 165: TypeVector 67(int) 4 - 166: TypePointer Function 165(ivec4) - 168: TypeImage 67(int) 2D sampled format:Unknown - 169: TypeSampledImage 168 - 170: TypePointer UniformConstant 169 - 171(is2D): 170(ptr) Variable UniformConstant - 205: TypeImage 67(int) 3D sampled format:Unknown - 206: TypeSampledImage 205 - 207: TypePointer UniformConstant 206 - 208(is3D): 207(ptr) Variable UniformConstant - 211: 6(float) Constant 1082549862 - 217: TypeImage 67(int) Cube sampled format:Unknown - 218: TypeSampledImage 217 - 219: TypePointer UniformConstant 218 - 220(isCube): 219(ptr) Variable UniformConstant - 229: TypeImage 67(int) 2D array sampled format:Unknown - 230: TypeSampledImage 229 - 231: TypePointer UniformConstant 230 - 232(is2DArray): 231(ptr) Variable UniformConstant - 242: TypePointer Function 68(ivec2) - 244: TypeImage 6(float) Cube depth sampled format:Unknown - 245: TypeSampledImage 244 - 246: TypePointer UniformConstant 245 -247(sCubeShadow): 246(ptr) Variable UniformConstant - 249: 67(int) Constant 2 - 252: TypePointer Output 7(fvec4) - 253(FragData): 252(ptr) Variable Output - 257: 6(float) Constant 0 - 262: TypeImage 67(int) 2D multi-sampled sampled format:Unknown - 263: TypeSampledImage 262 - 264: TypePointer UniformConstant 263 - 265(is2Dms): 264(ptr) Variable UniformConstant - 266: TypeImage 32(int) 2D sampled format:Unknown - 267: TypeSampledImage 266 - 268: TypePointer UniformConstant 267 - 269(us2D): 268(ptr) Variable UniformConstant - 270: TypeImage 32(int) 3D sampled format:Unknown - 271: TypeSampledImage 270 - 272: TypePointer UniformConstant 271 - 273(us3D): 272(ptr) Variable UniformConstant - 274: TypeImage 32(int) Cube sampled format:Unknown - 275: TypeSampledImage 274 - 276: TypePointer UniformConstant 275 - 277(usCube): 276(ptr) Variable UniformConstant - 278: TypeImage 32(int) 2D array sampled format:Unknown - 279: TypeSampledImage 278 - 280: TypePointer UniformConstant 279 - 281(us2DArray): 280(ptr) Variable UniformConstant - 282: TypePointer Input 165(ivec4) - 283(ic4D): 282(ptr) Variable Input + 134: TypeImage 6(float) 2D depth array sampled format:Unknown + 135: TypeSampledImage 134 + 136: TypePointer UniformConstant 135 +137(s2DArrayShadow): 136(ptr) Variable UniformConstant + 143: 32(int) Constant 0 + 160: TypeVector 67(int) 4 + 161: TypePointer Function 160(ivec4) + 163: TypeImage 67(int) 2D sampled format:Unknown + 164: TypeSampledImage 163 + 165: TypePointer UniformConstant 164 + 166(is2D): 165(ptr) Variable UniformConstant + 199: TypeImage 67(int) 3D sampled format:Unknown + 200: TypeSampledImage 199 + 201: TypePointer UniformConstant 200 + 202(is3D): 201(ptr) Variable UniformConstant + 205: 6(float) Constant 1082549862 + 211: TypeImage 67(int) Cube sampled format:Unknown + 212: TypeSampledImage 211 + 213: TypePointer UniformConstant 212 + 214(isCube): 213(ptr) Variable UniformConstant + 223: TypeImage 67(int) 2D array sampled format:Unknown + 224: TypeSampledImage 223 + 225: TypePointer UniformConstant 224 + 226(is2DArray): 225(ptr) Variable UniformConstant + 236: TypePointer Function 68(ivec2) + 238: TypeImage 6(float) Cube depth sampled format:Unknown + 239: TypeSampledImage 238 + 240: TypePointer UniformConstant 239 +241(sCubeShadow): 240(ptr) Variable UniformConstant + 243: 67(int) Constant 2 + 246: TypePointer Output 7(fvec4) + 247(FragData): 246(ptr) Variable Output + 251: 6(float) Constant 0 + 256: TypeImage 67(int) 2D multi-sampled sampled format:Unknown + 257: TypeSampledImage 256 + 258: TypePointer UniformConstant 257 + 259(is2Dms): 258(ptr) Variable UniformConstant + 260: TypeImage 32(int) 2D sampled format:Unknown + 261: TypeSampledImage 260 + 262: TypePointer UniformConstant 261 + 263(us2D): 262(ptr) Variable UniformConstant + 264: TypeImage 32(int) 3D sampled format:Unknown + 265: TypeSampledImage 264 + 266: TypePointer UniformConstant 265 + 267(us3D): 266(ptr) Variable UniformConstant + 268: TypeImage 32(int) Cube sampled format:Unknown + 269: TypeSampledImage 268 + 270: TypePointer UniformConstant 269 + 271(usCube): 270(ptr) Variable UniformConstant + 272: TypeImage 32(int) 2D array sampled format:Unknown + 273: TypeSampledImage 272 + 274: TypePointer UniformConstant 273 + 275(us2DArray): 274(ptr) Variable UniformConstant + 276: TypePointer Input 160(ivec4) + 277(ic4D): 276(ptr) Variable Input 4(main): 2 Function None 3 5: Label 9(v): 8(ptr) Variable Function - 167(iv): 166(ptr) Variable Function - 243(iv2): 242(ptr) Variable Function + 162(iv): 161(ptr) Variable Function + 237(iv2): 236(ptr) Variable Function 14: 11 Load 13(s2D) 18: 15(fvec2) Load 17(c2D) 19: 7(fvec4) ImageSampleImplicitLod 14 18 @@ -289,121 +289,115 @@ Validation failed Store 9(v) 124 129: 126 Load 128(sCube) 130: 53(fvec3) Load 55(c3D) - 131: 53(fvec3) Load 55(c3D) - 132: 53(fvec3) Load 55(c3D) - 133: 7(fvec4) ImageSampleExplicitLod 129 130 Grad 131 132 - 134: 7(fvec4) Load 9(v) - 135: 7(fvec4) FAdd 134 133 - Store 9(v) 135 - 140: 137 Load 139(s2DArrayShadow) - 141: 7(fvec4) Load 26(c4D) - 142: 15(fvec2) Load 17(c2D) - 143: 15(fvec2) Load 17(c2D) - 144: 6(float) CompositeExtract 141 3 - 145: 6(float) ImageSampleDrefExplicitLod 140 141 144 Grad ConstOffset 142 143 70 - 147: 34(ptr) AccessChain 9(v) 146 - 148: 6(float) Load 147 - 149: 6(float) FAdd 148 145 - 150: 34(ptr) AccessChain 9(v) 146 - Store 150 149 - 151: 40 Load 42(s3D) - 152: 7(fvec4) Load 26(c4D) - 153: 53(fvec3) Load 55(c3D) - 154: 53(fvec3) Load 55(c3D) - 155: 7(fvec4) ImageSampleProjExplicitLod 151 152 Grad 153 154 - 156: 7(fvec4) Load 9(v) - 157: 7(fvec4) FAdd 156 155 - Store 9(v) 157 - 158: 11 Load 13(s2D) - 159: 53(fvec3) Load 55(c3D) - 160: 15(fvec2) Load 17(c2D) - 161: 15(fvec2) Load 17(c2D) - 162: 7(fvec4) ImageSampleProjExplicitLod 158 159 Grad ConstOffset 160 161 70 - 163: 7(fvec4) Load 9(v) - 164: 7(fvec4) FAdd 163 162 - Store 9(v) 164 - 172: 169 Load 171(is2D) - 173: 15(fvec2) Load 17(c2D) - 174: 165(ivec4) ImageSampleImplicitLod 172 173 - Store 167(iv) 174 - 175: 165(ivec4) Load 167(iv) - 176: 7(fvec4) ConvertSToF 175 - 177: 7(fvec4) Load 9(v) - 178: 7(fvec4) FAdd 177 176 - Store 9(v) 178 - 179: 169 Load 171(is2D) - 180: 7(fvec4) Load 26(c4D) - 181: 6(float) CompositeExtract 180 3 - 182: 7(fvec4) CompositeInsert 181 180 2 - 183: 165(ivec4) ImageSampleProjImplicitLod 179 182 ConstOffset 70 - Store 167(iv) 183 - 184: 165(ivec4) Load 167(iv) - 185: 7(fvec4) ConvertSToF 184 - 186: 7(fvec4) Load 9(v) - 187: 7(fvec4) FAdd 186 185 - Store 9(v) 187 - 188: 169 Load 171(is2D) - 189: 53(fvec3) Load 55(c3D) - 190: 6(float) Load 29(c1D) - 191: 165(ivec4) ImageSampleProjExplicitLod 188 189 Lod 190 - Store 167(iv) 191 - 192: 165(ivec4) Load 167(iv) - 193: 7(fvec4) ConvertSToF 192 - 194: 7(fvec4) Load 9(v) - 195: 7(fvec4) FAdd 194 193 - Store 9(v) 195 - 196: 169 Load 171(is2D) - 197: 53(fvec3) Load 55(c3D) - 198: 15(fvec2) Load 17(c2D) - 199: 15(fvec2) Load 17(c2D) - 200: 165(ivec4) ImageSampleProjExplicitLod 196 197 Grad 198 199 - Store 167(iv) 200 - 201: 165(ivec4) Load 167(iv) - 202: 7(fvec4) ConvertSToF 201 - 203: 7(fvec4) Load 9(v) - 204: 7(fvec4) FAdd 203 202 - Store 9(v) 204 - 209: 206 Load 208(is3D) - 210: 53(fvec3) Load 55(c3D) - 212: 165(ivec4) ImageSampleImplicitLod 209 210 Bias 211 - Store 167(iv) 212 - 213: 165(ivec4) Load 167(iv) - 214: 7(fvec4) ConvertSToF 213 - 215: 7(fvec4) Load 9(v) - 216: 7(fvec4) FAdd 215 214 - Store 9(v) 216 - 221: 218 Load 220(isCube) - 222: 53(fvec3) Load 55(c3D) - 223: 6(float) Load 29(c1D) - 224: 165(ivec4) ImageSampleExplicitLod 221 222 Lod 223 - Store 167(iv) 224 - 225: 165(ivec4) Load 167(iv) - 226: 7(fvec4) ConvertSToF 225 - 227: 7(fvec4) Load 9(v) - 228: 7(fvec4) FAdd 227 226 - Store 9(v) 228 - 233: 230 Load 232(is2DArray) - 234: 79(ivec3) Load 81(ic3D) - 235: 67(int) Load 84(ic1D) - 236: 229 Image 233 - 237: 165(ivec4) ImageFetch 236 234 Lod 235 - Store 167(iv) 237 - 238: 165(ivec4) Load 167(iv) - 239: 7(fvec4) ConvertSToF 238 - 240: 7(fvec4) Load 9(v) - 241: 7(fvec4) FAdd 240 239 - Store 9(v) 241 - 248: 245 Load 247(sCubeShadow) - 250: 244 Image 248 - 251: 68(ivec2) ImageQuerySizeLod 250 249 - Store 243(iv2) 251 - 254: 7(fvec4) Load 9(v) - 255: 68(ivec2) Load 243(iv2) - 256: 15(fvec2) ConvertSToF 255 - 258: 6(float) CompositeExtract 256 0 - 259: 6(float) CompositeExtract 256 1 - 260: 7(fvec4) CompositeConstruct 258 259 257 257 - 261: 7(fvec4) FAdd 254 260 - Store 253(FragData) 261 + 131: 7(fvec4) ImageSampleExplicitLod 129 130 Grad 130 130 + 132: 7(fvec4) Load 9(v) + 133: 7(fvec4) FAdd 132 131 + Store 9(v) 133 + 138: 135 Load 137(s2DArrayShadow) + 139: 7(fvec4) Load 26(c4D) + 140: 15(fvec2) Load 17(c2D) + 141: 6(float) CompositeExtract 139 3 + 142: 6(float) ImageSampleDrefExplicitLod 138 139 141 Grad ConstOffset 140 140 70 + 144: 34(ptr) AccessChain 9(v) 143 + 145: 6(float) Load 144 + 146: 6(float) FAdd 145 142 + 147: 34(ptr) AccessChain 9(v) 143 + Store 147 146 + 148: 40 Load 42(s3D) + 149: 7(fvec4) Load 26(c4D) + 150: 53(fvec3) Load 55(c3D) + 151: 7(fvec4) ImageSampleProjExplicitLod 148 149 Grad 150 150 + 152: 7(fvec4) Load 9(v) + 153: 7(fvec4) FAdd 152 151 + Store 9(v) 153 + 154: 11 Load 13(s2D) + 155: 53(fvec3) Load 55(c3D) + 156: 15(fvec2) Load 17(c2D) + 157: 7(fvec4) ImageSampleProjExplicitLod 154 155 Grad ConstOffset 156 156 70 + 158: 7(fvec4) Load 9(v) + 159: 7(fvec4) FAdd 158 157 + Store 9(v) 159 + 167: 164 Load 166(is2D) + 168: 15(fvec2) Load 17(c2D) + 169: 160(ivec4) ImageSampleImplicitLod 167 168 + Store 162(iv) 169 + 170: 160(ivec4) Load 162(iv) + 171: 7(fvec4) ConvertSToF 170 + 172: 7(fvec4) Load 9(v) + 173: 7(fvec4) FAdd 172 171 + Store 9(v) 173 + 174: 164 Load 166(is2D) + 175: 7(fvec4) Load 26(c4D) + 176: 6(float) CompositeExtract 175 3 + 177: 7(fvec4) CompositeInsert 176 175 2 + 178: 160(ivec4) ImageSampleProjImplicitLod 174 177 ConstOffset 70 + Store 162(iv) 178 + 179: 160(ivec4) Load 162(iv) + 180: 7(fvec4) ConvertSToF 179 + 181: 7(fvec4) Load 9(v) + 182: 7(fvec4) FAdd 181 180 + Store 9(v) 182 + 183: 164 Load 166(is2D) + 184: 53(fvec3) Load 55(c3D) + 185: 6(float) Load 29(c1D) + 186: 160(ivec4) ImageSampleProjExplicitLod 183 184 Lod 185 + Store 162(iv) 186 + 187: 160(ivec4) Load 162(iv) + 188: 7(fvec4) ConvertSToF 187 + 189: 7(fvec4) Load 9(v) + 190: 7(fvec4) FAdd 189 188 + Store 9(v) 190 + 191: 164 Load 166(is2D) + 192: 53(fvec3) Load 55(c3D) + 193: 15(fvec2) Load 17(c2D) + 194: 160(ivec4) ImageSampleProjExplicitLod 191 192 Grad 193 193 + Store 162(iv) 194 + 195: 160(ivec4) Load 162(iv) + 196: 7(fvec4) ConvertSToF 195 + 197: 7(fvec4) Load 9(v) + 198: 7(fvec4) FAdd 197 196 + Store 9(v) 198 + 203: 200 Load 202(is3D) + 204: 53(fvec3) Load 55(c3D) + 206: 160(ivec4) ImageSampleImplicitLod 203 204 Bias 205 + Store 162(iv) 206 + 207: 160(ivec4) Load 162(iv) + 208: 7(fvec4) ConvertSToF 207 + 209: 7(fvec4) Load 9(v) + 210: 7(fvec4) FAdd 209 208 + Store 9(v) 210 + 215: 212 Load 214(isCube) + 216: 53(fvec3) Load 55(c3D) + 217: 6(float) Load 29(c1D) + 218: 160(ivec4) ImageSampleExplicitLod 215 216 Lod 217 + Store 162(iv) 218 + 219: 160(ivec4) Load 162(iv) + 220: 7(fvec4) ConvertSToF 219 + 221: 7(fvec4) Load 9(v) + 222: 7(fvec4) FAdd 221 220 + Store 9(v) 222 + 227: 224 Load 226(is2DArray) + 228: 79(ivec3) Load 81(ic3D) + 229: 67(int) Load 84(ic1D) + 230: 223 Image 227 + 231: 160(ivec4) ImageFetch 230 228 Lod 229 + Store 162(iv) 231 + 232: 160(ivec4) Load 162(iv) + 233: 7(fvec4) ConvertSToF 232 + 234: 7(fvec4) Load 9(v) + 235: 7(fvec4) FAdd 234 233 + Store 9(v) 235 + 242: 239 Load 241(sCubeShadow) + 244: 238 Image 242 + 245: 68(ivec2) ImageQuerySizeLod 244 243 + Store 237(iv2) 245 + 248: 7(fvec4) Load 9(v) + 249: 68(ivec2) Load 237(iv2) + 250: 15(fvec2) ConvertSToF 249 + 252: 6(float) CompositeExtract 250 0 + 253: 6(float) CompositeExtract 250 1 + 254: 7(fvec4) CompositeConstruct 252 253 251 251 + 255: 7(fvec4) FAdd 248 254 + Store 247(FragData) 255 Return FunctionEnd diff --git a/Test/baseResults/spv.noBuiltInLoc.vert.out b/Test/baseResults/spv.noBuiltInLoc.vert.out index 6322052092..c7541bf544 100644 --- a/Test/baseResults/spv.noBuiltInLoc.vert.out +++ b/Test/baseResults/spv.noBuiltInLoc.vert.out @@ -1,6 +1,6 @@ spv.noBuiltInLoc.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 35 Capability Shader @@ -26,20 +26,20 @@ spv.noBuiltInLoc.vert Name 34 "gl_InstanceID" Decorate 9(bar) Location 0 Decorate 11(foo) Location 0 + Decorate 16(gl_PerVertex) Block MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position MemberDecorate 16(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 16(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 16(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 16(gl_PerVertex) Block Decorate 24(uv1) Location 0 Decorate 24(uv1) DescriptorSet 0 Decorate 26(uv2) Location 1 Decorate 26(uv2) DescriptorSet 0 Decorate 29(uv3) Location 2 Decorate 29(uv3) DescriptorSet 0 - Decorate 31(a_uint) Offset 0 - Decorate 31(a_uint) DescriptorSet 0 Decorate 31(a_uint) Binding 0 + Decorate 31(a_uint) DescriptorSet 0 + Decorate 31(a_uint) Offset 0 Decorate 33(gl_VertexID) BuiltIn VertexId Decorate 34(gl_InstanceID) BuiltIn InstanceId 2: TypeVoid diff --git a/Test/baseResults/spv.noDeadDecorations.vert.out b/Test/baseResults/spv.noDeadDecorations.vert.out index 4a4d7b38ad..51814d0cb7 100644 --- a/Test/baseResults/spv.noDeadDecorations.vert.out +++ b/Test/baseResults/spv.noDeadDecorations.vert.out @@ -1,6 +1,6 @@ spv.noDeadDecorations.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 32 Capability Shader @@ -16,13 +16,13 @@ spv.noDeadDecorations.vert MemberName 20(gl_PerVertex) 1 "gl_PointSize" Name 22 "" Name 26 "param" - Decorate 10(func(f1;) RelaxedPrecision Decorate 9(a) RelaxedPrecision + Decorate 10(func(f1;) RelaxedPrecision Decorate 12 RelaxedPrecision Decorate 13 RelaxedPrecision + Decorate 20(gl_PerVertex) Block MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize - Decorate 20(gl_PerVertex) Block Decorate 26(param) RelaxedPrecision Decorate 27 RelaxedPrecision 2: TypeVoid diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out index a8969e026f..e92ebcb264 100644 --- a/Test/baseResults/spv.noWorkgroup.comp.out +++ b/Test/baseResults/spv.noWorkgroup.comp.out @@ -1,6 +1,6 @@ spv.noWorkgroup.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 23 Capability Shader diff --git a/Test/baseResults/spv.nonSquare.vert.out b/Test/baseResults/spv.nonSquare.vert.out index 3728dd5dec..94401be875 100644 --- a/Test/baseResults/spv.nonSquare.vert.out +++ b/Test/baseResults/spv.nonSquare.vert.out @@ -1,6 +1,6 @@ spv.nonSquare.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 90 Capability Shader diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out index f6febc9b94..8aa6883806 100644 --- a/Test/baseResults/spv.nonuniform.frag.out +++ b/Test/baseResults/spv.nonuniform.frag.out @@ -1,6 +1,6 @@ spv.nonuniform.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 289 Capability Shader @@ -82,65 +82,65 @@ spv.nonuniform.frag Decorate 46 DecorationNonUniformEXT Decorate 48 DecorationNonUniformEXT Decorate 49 DecorationNonUniformEXT - Decorate 53(inputAttachmentDyn) DescriptorSet 0 Decorate 53(inputAttachmentDyn) Binding 0 + Decorate 53(inputAttachmentDyn) DescriptorSet 0 Decorate 53(inputAttachmentDyn) InputAttachmentIndex 0 - Decorate 70(uniformTexelBufferDyn) DescriptorSet 0 Decorate 70(uniformTexelBufferDyn) Binding 1 - Decorate 84(storageTexelBufferDyn) DescriptorSet 0 + Decorate 70(uniformTexelBufferDyn) DescriptorSet 0 Decorate 84(storageTexelBufferDyn) Binding 2 - MemberDecorate 93(uname) 0 Offset 0 + Decorate 84(storageTexelBufferDyn) DescriptorSet 0 Decorate 93(uname) Block - Decorate 96(uniformBuffer) DescriptorSet 0 + MemberDecorate 93(uname) 0 Offset 0 Decorate 96(uniformBuffer) Binding 3 + Decorate 96(uniformBuffer) DescriptorSet 0 Decorate 98(nu_ii) Flat Decorate 98(nu_ii) Location 1 Decorate 99 DecorationNonUniformEXT Decorate 101 DecorationNonUniformEXT Decorate 102 DecorationNonUniformEXT Decorate 104 DecorationNonUniformEXT - MemberDecorate 105(bname) 0 Offset 0 Decorate 105(bname) BufferBlock - Decorate 108(storageBuffer) DescriptorSet 0 + MemberDecorate 105(bname) 0 Offset 0 Decorate 108(storageBuffer) Binding 4 + Decorate 108(storageBuffer) DescriptorSet 0 Decorate 109 DecorationNonUniformEXT Decorate 110 DecorationNonUniformEXT Decorate 111 DecorationNonUniformEXT Decorate 113 DecorationNonUniformEXT - Decorate 118(sampledImage) DescriptorSet 0 Decorate 118(sampledImage) Binding 5 + Decorate 118(sampledImage) DescriptorSet 0 Decorate 119 DecorationNonUniformEXT Decorate 121 DecorationNonUniformEXT Decorate 122 DecorationNonUniformEXT - Decorate 133(storageImage) DescriptorSet 0 Decorate 133(storageImage) Binding 6 + Decorate 133(storageImage) DescriptorSet 0 Decorate 134 DecorationNonUniformEXT Decorate 136 DecorationNonUniformEXT Decorate 137 DecorationNonUniformEXT - Decorate 145(inputAttachment) DescriptorSet 0 Decorate 145(inputAttachment) Binding 7 + Decorate 145(inputAttachment) DescriptorSet 0 Decorate 145(inputAttachment) InputAttachmentIndex 1 Decorate 146 DecorationNonUniformEXT Decorate 147 DecorationNonUniformEXT Decorate 148 DecorationNonUniformEXT - Decorate 155(uniformTexelBuffer) DescriptorSet 0 Decorate 155(uniformTexelBuffer) Binding 8 + Decorate 155(uniformTexelBuffer) DescriptorSet 0 Decorate 156 DecorationNonUniformEXT Decorate 157 DecorationNonUniformEXT Decorate 158 DecorationNonUniformEXT Decorate 159 DecorationNonUniformEXT - Decorate 166(storageTexelBuffer) DescriptorSet 0 Decorate 166(storageTexelBuffer) Binding 9 + Decorate 166(storageTexelBuffer) DescriptorSet 0 Decorate 167 DecorationNonUniformEXT Decorate 168 DecorationNonUniformEXT Decorate 169 DecorationNonUniformEXT - Decorate 177(uniformTexArr) DescriptorSet 0 Decorate 177(uniformTexArr) Binding 10 + Decorate 177(uniformTexArr) DescriptorSet 0 Decorate 178 DecorationNonUniformEXT Decorate 180 DecorationNonUniformEXT Decorate 181 DecorationNonUniformEXT - Decorate 184(uniformSampler) DescriptorSet 0 Decorate 184(uniformSampler) Binding 11 + Decorate 184(uniformSampler) DescriptorSet 0 Decorate 188(inTexcoord) Location 2 Decorate 194 DecorationNonUniformEXT Decorate 195 DecorationNonUniformEXT diff --git a/Test/baseResults/spv.nonuniform2.frag.out b/Test/baseResults/spv.nonuniform2.frag.out index bb89ba79a2..b5b3dfe295 100644 --- a/Test/baseResults/spv.nonuniform2.frag.out +++ b/Test/baseResults/spv.nonuniform2.frag.out @@ -1,6 +1,6 @@ spv.nonuniform2.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader @@ -20,8 +20,8 @@ spv.nonuniform2.frag Name 13 "data" Name 16 "rIndex" Decorate 9(FragColor) Location 0 - Decorate 13(data) DescriptorSet 0 Decorate 13(data) Binding 4 + Decorate 13(data) DescriptorSet 0 Decorate 16(rIndex) Flat Decorate 16(rIndex) Location 3 Decorate 18 DecorationNonUniformEXT diff --git a/Test/baseResults/spv.nonuniform3.frag.out b/Test/baseResults/spv.nonuniform3.frag.out index b48916c591..331c058ee4 100644 --- a/Test/baseResults/spv.nonuniform3.frag.out +++ b/Test/baseResults/spv.nonuniform3.frag.out @@ -1,6 +1,6 @@ spv.nonuniform3.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 32 Capability Shader @@ -19,12 +19,12 @@ spv.nonuniform3.frag Name 16 "Index" Name 23 "uSamp" Decorate 9(FragColor) Location 0 - Decorate 13(uTex) DescriptorSet 0 Decorate 13(uTex) Binding 0 + Decorate 13(uTex) DescriptorSet 0 Decorate 16(Index) Flat Decorate 16(Index) Location 0 - Decorate 23(uSamp) DescriptorSet 1 Decorate 23(uSamp) Binding 0 + Decorate 23(uSamp) DescriptorSet 1 Decorate 27 DecorationNonUniformEXT 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.nonuniform4.frag.out b/Test/baseResults/spv.nonuniform4.frag.out index 6bfc957532..a20f64b9fe 100644 --- a/Test/baseResults/spv.nonuniform4.frag.out +++ b/Test/baseResults/spv.nonuniform4.frag.out @@ -1,6 +1,6 @@ spv.nonuniform4.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader @@ -18,8 +18,8 @@ spv.nonuniform4.frag Name 4 "main" Name 10 "data" Name 13 "rIndex" - Decorate 10(data) DescriptorSet 0 Decorate 10(data) Binding 4 + Decorate 10(data) DescriptorSet 0 Decorate 13(rIndex) Flat Decorate 13(rIndex) Location 3 Decorate 15 DecorationNonUniformEXT diff --git a/Test/baseResults/spv.nonuniform5.frag.out b/Test/baseResults/spv.nonuniform5.frag.out index ebbb6f41b9..d2f056311d 100644 --- a/Test/baseResults/spv.nonuniform5.frag.out +++ b/Test/baseResults/spv.nonuniform5.frag.out @@ -1,6 +1,6 @@ spv.nonuniform5.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 23 Capability Shader @@ -21,10 +21,10 @@ spv.nonuniform5.frag Name 13 "ubos" Name 16 "Index" Decorate 9(FragColor) Location 0 - MemberDecorate 10(UBO) 0 Offset 0 Decorate 10(UBO) Block - Decorate 13(ubos) DescriptorSet 0 + MemberDecorate 10(UBO) 0 Offset 0 Decorate 13(ubos) Binding 0 + Decorate 13(ubos) DescriptorSet 0 Decorate 16(Index) Flat Decorate 16(Index) Location 0 Decorate 18 DecorationNonUniformEXT diff --git a/Test/baseResults/spv.nullInit.comp.out b/Test/baseResults/spv.nullInit.comp.out old mode 100755 new mode 100644 index b7908b57d2..f43218519b --- a/Test/baseResults/spv.nullInit.comp.out +++ b/Test/baseResults/spv.nullInit.comp.out @@ -1,6 +1,6 @@ spv.nullInit.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 37 Capability Shader diff --git a/Test/baseResults/spv.nv.dmm-allops.comp.out b/Test/baseResults/spv.nv.dmm-allops.comp.out new file mode 100644 index 0000000000..68537d4a9b --- /dev/null +++ b/Test/baseResults/spv.nv.dmm-allops.comp.out @@ -0,0 +1,96 @@ +spv.nv.dmm-allops.comp +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 59 + + Capability Shader + Capability RayQueryKHR + Capability DisplacementMicromapNV + Extension "SPV_KHR_ray_query" + Extension "SPV_NV_displacement_micromap" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 11 16 + ExecutionMode 4 LocalSize 16 1 1 + Source GLSL 460 + SourceExtension "GL_EXT_ray_query" + SourceExtension "GL_NV_displacement_micromap" + Name 4 "main" + Name 9 "block" + MemberName 9(block) 0 "op_pos" + MemberName 9(block) 1 "op_bary" + Name 11 "" + Name 16 "as" + Decorate 9(block) Block + MemberDecorate 9(block) 0 Offset 0 + MemberDecorate 9(block) 1 Offset 16 + Decorate 11 Binding 0 + Decorate 11 DescriptorSet 0 + Decorate 16(as) Binding 1 + Decorate 16(as) DescriptorSet 0 + Decorate 58 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeVector 6(float) 2 + 9(block): TypeStruct 7(fvec3) 8(fvec2) + 10: TypePointer StorageBuffer 9(block) + 11: 10(ptr) Variable StorageBuffer + 12: TypeInt 32 1 + 13: 12(int) Constant 0 + 14: TypeAccelerationStructureKHR + 15: TypePointer UniformConstant 14 + 16(as): 15(ptr) Variable UniformConstant + 18: 12(int) Constant 1 + 19: TypeVector 12(int) 2 + 20: 19(ivec2) ConstantComposite 13 13 + 22: TypePointer StorageBuffer 7(fvec3) + 25: 19(ivec2) ConstantComposite 13 18 + 32: 19(ivec2) ConstantComposite 18 13 + 40: TypePointer StorageBuffer 8(fvec2) + 54: TypeInt 32 0 + 55: TypeVector 54(int) 3 + 56: 54(int) Constant 16 + 57: 54(int) Constant 1 + 58: 55(ivec3) ConstantComposite 56 57 57 + 4(main): 2 Function None 3 + 5: Label + 17: 14 Load 16(as) + 21: 7(fvec3) FetchMicroTriangleVertexPositionNV 17 18 18 18 20 + 23: 22(ptr) AccessChain 11 13 + Store 23 21 + 24: 14 Load 16(as) + 26: 7(fvec3) FetchMicroTriangleVertexPositionNV 24 18 18 18 25 + 27: 22(ptr) AccessChain 11 13 + 28: 7(fvec3) Load 27 + 29: 7(fvec3) FAdd 28 26 + 30: 22(ptr) AccessChain 11 13 + Store 30 29 + 31: 14 Load 16(as) + 33: 7(fvec3) FetchMicroTriangleVertexPositionNV 31 18 18 18 32 + 34: 22(ptr) AccessChain 11 13 + 35: 7(fvec3) Load 34 + 36: 7(fvec3) FAdd 35 33 + 37: 22(ptr) AccessChain 11 13 + Store 37 36 + 38: 14 Load 16(as) + 39: 8(fvec2) FetchMicroTriangleVertexBarycentricNV 38 18 18 18 20 + 41: 40(ptr) AccessChain 11 18 + Store 41 39 + 42: 14 Load 16(as) + 43: 8(fvec2) FetchMicroTriangleVertexBarycentricNV 42 18 18 18 25 + 44: 40(ptr) AccessChain 11 18 + 45: 8(fvec2) Load 44 + 46: 8(fvec2) FAdd 45 43 + 47: 40(ptr) AccessChain 11 18 + Store 47 46 + 48: 14 Load 16(as) + 49: 8(fvec2) FetchMicroTriangleVertexBarycentricNV 48 18 18 18 32 + 50: 40(ptr) AccessChain 11 18 + 51: 8(fvec2) Load 50 + 52: 8(fvec2) FAdd 51 49 + 53: 40(ptr) AccessChain 11 18 + Store 53 52 + Return + FunctionEnd diff --git a/Test/baseResults/spv.nv.dmm-allops.mesh.out b/Test/baseResults/spv.nv.dmm-allops.mesh.out new file mode 100644 index 0000000000..f2edf54805 --- /dev/null +++ b/Test/baseResults/spv.nv.dmm-allops.mesh.out @@ -0,0 +1,95 @@ +spv.nv.dmm-allops.mesh +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 54 + + Capability RayQueryKHR + Capability MeshShadingNV + Capability DisplacementMicromapNV + Extension "SPV_KHR_ray_query" + Extension "SPV_NV_displacement_micromap" + Extension "SPV_NV_mesh_shader" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint MeshNV 4 "main" 11 16 + ExecutionMode 4 LocalSize 1 1 1 + ExecutionMode 4 OutputVertices 8 + ExecutionMode 4 OutputPrimitivesNV 16 + ExecutionMode 4 OutputTrianglesNV + Source GLSL 460 + SourceExtension "GL_EXT_ray_query" + SourceExtension "GL_NV_displacement_micromap" + SourceExtension "GL_NV_mesh_shader" + Name 4 "main" + Name 9 "block" + MemberName 9(block) 0 "op_pos" + MemberName 9(block) 1 "op_bary" + Name 11 "" + Name 16 "as" + Decorate 9(block) Block + MemberDecorate 9(block) 0 Offset 0 + MemberDecorate 9(block) 1 Offset 16 + Decorate 11 Binding 0 + Decorate 11 DescriptorSet 0 + Decorate 16(as) Binding 1 + Decorate 16(as) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeVector 6(float) 2 + 9(block): TypeStruct 7(fvec3) 8(fvec2) + 10: TypePointer StorageBuffer 9(block) + 11: 10(ptr) Variable StorageBuffer + 12: TypeInt 32 1 + 13: 12(int) Constant 0 + 14: TypeAccelerationStructureKHR + 15: TypePointer UniformConstant 14 + 16(as): 15(ptr) Variable UniformConstant + 18: 12(int) Constant 1 + 19: TypeVector 12(int) 2 + 20: 19(ivec2) ConstantComposite 13 13 + 22: TypePointer StorageBuffer 7(fvec3) + 25: 19(ivec2) ConstantComposite 13 18 + 32: 19(ivec2) ConstantComposite 18 13 + 40: TypePointer StorageBuffer 8(fvec2) + 4(main): 2 Function None 3 + 5: Label + 17: 14 Load 16(as) + 21: 7(fvec3) FetchMicroTriangleVertexPositionNV 17 18 18 18 20 + 23: 22(ptr) AccessChain 11 13 + Store 23 21 + 24: 14 Load 16(as) + 26: 7(fvec3) FetchMicroTriangleVertexPositionNV 24 18 18 18 25 + 27: 22(ptr) AccessChain 11 13 + 28: 7(fvec3) Load 27 + 29: 7(fvec3) FAdd 28 26 + 30: 22(ptr) AccessChain 11 13 + Store 30 29 + 31: 14 Load 16(as) + 33: 7(fvec3) FetchMicroTriangleVertexPositionNV 31 18 18 18 32 + 34: 22(ptr) AccessChain 11 13 + 35: 7(fvec3) Load 34 + 36: 7(fvec3) FAdd 35 33 + 37: 22(ptr) AccessChain 11 13 + Store 37 36 + 38: 14 Load 16(as) + 39: 8(fvec2) FetchMicroTriangleVertexBarycentricNV 38 18 18 18 20 + 41: 40(ptr) AccessChain 11 18 + Store 41 39 + 42: 14 Load 16(as) + 43: 8(fvec2) FetchMicroTriangleVertexBarycentricNV 42 18 18 18 25 + 44: 40(ptr) AccessChain 11 18 + 45: 8(fvec2) Load 44 + 46: 8(fvec2) FAdd 45 43 + 47: 40(ptr) AccessChain 11 18 + Store 47 46 + 48: 14 Load 16(as) + 49: 8(fvec2) FetchMicroTriangleVertexBarycentricNV 48 18 18 18 32 + 50: 40(ptr) AccessChain 11 18 + 51: 8(fvec2) Load 50 + 52: 8(fvec2) FAdd 51 49 + 53: 40(ptr) AccessChain 11 18 + Store 53 52 + Return + FunctionEnd diff --git a/Test/baseResults/spv.nv.dmm-allops.rahit.out b/Test/baseResults/spv.nv.dmm-allops.rahit.out new file mode 100644 index 0000000000..565511951c --- /dev/null +++ b/Test/baseResults/spv.nv.dmm-allops.rahit.out @@ -0,0 +1,126 @@ +spv.nv.dmm-allops.rahit +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 77 + + Capability RayTracingKHR + Capability CapabilityRayTracingDisplacementMicromapNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_displacement_micromap" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint AnyHitKHR 4 "main" 12 18 40 59 64 67 76 + Source GLSL 460 + SourceExtension "GL_EXT_ray_query" + SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_NV_displacement_micromap" + Name 4 "main" + Name 10 "block" + MemberName 10(block) 0 "op_pos" + MemberName 10(block) 1 "op_bary" + MemberName 10(block) 2 "op_hit" + Name 12 "" + Name 18 "gl_HitMicroTriangleVertexPositionsNV" + Name 40 "gl_HitMicroTriangleVertexBarycentricsNV" + Name 59 "gl_HitKindEXT" + Name 64 "gl_HitKindFrontFacingMicroTriangleNV" + Name 67 "gl_HitKindBackFacingMicroTriangleNV" + Name 76 "as" + Decorate 10(block) Block + MemberDecorate 10(block) 0 Offset 0 + MemberDecorate 10(block) 1 Offset 16 + MemberDecorate 10(block) 2 Offset 24 + Decorate 12 Binding 0 + Decorate 12 DescriptorSet 0 + Decorate 18(gl_HitMicroTriangleVertexPositionsNV) BuiltIn HitMicroTriangleVertexPositionsNV + Decorate 40(gl_HitMicroTriangleVertexBarycentricsNV) BuiltIn HitMicroTriangleVertexBarycentricsNV + Decorate 59(gl_HitKindEXT) BuiltIn HitKindKHR + Decorate 64(gl_HitKindFrontFacingMicroTriangleNV) BuiltIn HitKindFrontFacingMicroTriangleNV + Decorate 67(gl_HitKindBackFacingMicroTriangleNV) BuiltIn HitKindBackFacingMicroTriangleNV + Decorate 76(as) Binding 1 + Decorate 76(as) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeVector 6(float) 2 + 9: TypeInt 32 0 + 10(block): TypeStruct 7(fvec3) 8(fvec2) 9(int) + 11: TypePointer StorageBuffer 10(block) + 12: 11(ptr) Variable StorageBuffer + 13: TypeInt 32 1 + 14: 13(int) Constant 0 + 15: 9(int) Constant 3 + 16: TypeArray 7(fvec3) 15 + 17: TypePointer Input 16 +18(gl_HitMicroTriangleVertexPositionsNV): 17(ptr) Variable Input + 19: TypePointer Input 7(fvec3) + 22: TypePointer StorageBuffer 7(fvec3) + 24: 13(int) Constant 1 + 31: 13(int) Constant 2 + 38: TypeArray 8(fvec2) 15 + 39: TypePointer Input 38 +40(gl_HitMicroTriangleVertexBarycentricsNV): 39(ptr) Variable Input + 41: TypePointer Input 8(fvec2) + 44: TypePointer StorageBuffer 8(fvec2) + 58: TypePointer Input 9(int) +59(gl_HitKindEXT): 58(ptr) Variable Input + 61: TypePointer StorageBuffer 9(int) + 63: 9(int) Constant 255 +64(gl_HitKindFrontFacingMicroTriangleNV): 58(ptr) Variable Input +67(gl_HitKindBackFacingMicroTriangleNV): 58(ptr) Variable Input + 74: TypeAccelerationStructureKHR + 75: TypePointer UniformConstant 74 + 76(as): 75(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 20: 19(ptr) AccessChain 18(gl_HitMicroTriangleVertexPositionsNV) 14 + 21: 7(fvec3) Load 20 + 23: 22(ptr) AccessChain 12 14 + Store 23 21 + 25: 19(ptr) AccessChain 18(gl_HitMicroTriangleVertexPositionsNV) 24 + 26: 7(fvec3) Load 25 + 27: 22(ptr) AccessChain 12 14 + 28: 7(fvec3) Load 27 + 29: 7(fvec3) FAdd 28 26 + 30: 22(ptr) AccessChain 12 14 + Store 30 29 + 32: 19(ptr) AccessChain 18(gl_HitMicroTriangleVertexPositionsNV) 31 + 33: 7(fvec3) Load 32 + 34: 22(ptr) AccessChain 12 14 + 35: 7(fvec3) Load 34 + 36: 7(fvec3) FAdd 35 33 + 37: 22(ptr) AccessChain 12 14 + Store 37 36 + 42: 41(ptr) AccessChain 40(gl_HitMicroTriangleVertexBarycentricsNV) 14 + 43: 8(fvec2) Load 42 + 45: 44(ptr) AccessChain 12 24 + Store 45 43 + 46: 41(ptr) AccessChain 40(gl_HitMicroTriangleVertexBarycentricsNV) 24 + 47: 8(fvec2) Load 46 + 48: 44(ptr) AccessChain 12 24 + 49: 8(fvec2) Load 48 + 50: 8(fvec2) FAdd 49 47 + 51: 44(ptr) AccessChain 12 24 + Store 51 50 + 52: 41(ptr) AccessChain 40(gl_HitMicroTriangleVertexBarycentricsNV) 31 + 53: 8(fvec2) Load 52 + 54: 44(ptr) AccessChain 12 24 + 55: 8(fvec2) Load 54 + 56: 8(fvec2) FAdd 55 53 + 57: 44(ptr) AccessChain 12 24 + Store 57 56 + 60: 9(int) Load 59(gl_HitKindEXT) + 62: 61(ptr) AccessChain 12 31 + Store 62 60 + 65: 9(int) Load 64(gl_HitKindFrontFacingMicroTriangleNV) + 66: 9(int) BitwiseOr 63 65 + 68: 9(int) Load 67(gl_HitKindBackFacingMicroTriangleNV) + 69: 9(int) BitwiseOr 66 68 + 70: 61(ptr) AccessChain 12 31 + 71: 9(int) Load 70 + 72: 9(int) BitwiseAnd 71 69 + 73: 61(ptr) AccessChain 12 31 + Store 73 72 + Return + FunctionEnd diff --git a/Test/baseResults/spv.nv.dmm-allops.rchit.out b/Test/baseResults/spv.nv.dmm-allops.rchit.out new file mode 100644 index 0000000000..291b51485b --- /dev/null +++ b/Test/baseResults/spv.nv.dmm-allops.rchit.out @@ -0,0 +1,126 @@ +spv.nv.dmm-allops.rchit +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 77 + + Capability RayTracingKHR + Capability CapabilityRayTracingDisplacementMicromapNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_displacement_micromap" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint ClosestHitKHR 4 "main" 12 18 40 59 64 67 76 + Source GLSL 460 + SourceExtension "GL_EXT_ray_query" + SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_NV_displacement_micromap" + Name 4 "main" + Name 10 "block" + MemberName 10(block) 0 "op_pos" + MemberName 10(block) 1 "op_bary" + MemberName 10(block) 2 "op_hit" + Name 12 "" + Name 18 "gl_HitMicroTriangleVertexPositionsNV" + Name 40 "gl_HitMicroTriangleVertexBarycentricsNV" + Name 59 "gl_HitKindEXT" + Name 64 "gl_HitKindFrontFacingMicroTriangleNV" + Name 67 "gl_HitKindBackFacingMicroTriangleNV" + Name 76 "as" + Decorate 10(block) Block + MemberDecorate 10(block) 0 Offset 0 + MemberDecorate 10(block) 1 Offset 16 + MemberDecorate 10(block) 2 Offset 24 + Decorate 12 Binding 0 + Decorate 12 DescriptorSet 0 + Decorate 18(gl_HitMicroTriangleVertexPositionsNV) BuiltIn HitMicroTriangleVertexPositionsNV + Decorate 40(gl_HitMicroTriangleVertexBarycentricsNV) BuiltIn HitMicroTriangleVertexBarycentricsNV + Decorate 59(gl_HitKindEXT) BuiltIn HitKindKHR + Decorate 64(gl_HitKindFrontFacingMicroTriangleNV) BuiltIn HitKindFrontFacingMicroTriangleNV + Decorate 67(gl_HitKindBackFacingMicroTriangleNV) BuiltIn HitKindBackFacingMicroTriangleNV + Decorate 76(as) Binding 1 + Decorate 76(as) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeVector 6(float) 2 + 9: TypeInt 32 0 + 10(block): TypeStruct 7(fvec3) 8(fvec2) 9(int) + 11: TypePointer StorageBuffer 10(block) + 12: 11(ptr) Variable StorageBuffer + 13: TypeInt 32 1 + 14: 13(int) Constant 0 + 15: 9(int) Constant 3 + 16: TypeArray 7(fvec3) 15 + 17: TypePointer Input 16 +18(gl_HitMicroTriangleVertexPositionsNV): 17(ptr) Variable Input + 19: TypePointer Input 7(fvec3) + 22: TypePointer StorageBuffer 7(fvec3) + 24: 13(int) Constant 1 + 31: 13(int) Constant 2 + 38: TypeArray 8(fvec2) 15 + 39: TypePointer Input 38 +40(gl_HitMicroTriangleVertexBarycentricsNV): 39(ptr) Variable Input + 41: TypePointer Input 8(fvec2) + 44: TypePointer StorageBuffer 8(fvec2) + 58: TypePointer Input 9(int) +59(gl_HitKindEXT): 58(ptr) Variable Input + 61: TypePointer StorageBuffer 9(int) + 63: 9(int) Constant 255 +64(gl_HitKindFrontFacingMicroTriangleNV): 58(ptr) Variable Input +67(gl_HitKindBackFacingMicroTriangleNV): 58(ptr) Variable Input + 74: TypeAccelerationStructureKHR + 75: TypePointer UniformConstant 74 + 76(as): 75(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 20: 19(ptr) AccessChain 18(gl_HitMicroTriangleVertexPositionsNV) 14 + 21: 7(fvec3) Load 20 + 23: 22(ptr) AccessChain 12 14 + Store 23 21 + 25: 19(ptr) AccessChain 18(gl_HitMicroTriangleVertexPositionsNV) 24 + 26: 7(fvec3) Load 25 + 27: 22(ptr) AccessChain 12 14 + 28: 7(fvec3) Load 27 + 29: 7(fvec3) FAdd 28 26 + 30: 22(ptr) AccessChain 12 14 + Store 30 29 + 32: 19(ptr) AccessChain 18(gl_HitMicroTriangleVertexPositionsNV) 31 + 33: 7(fvec3) Load 32 + 34: 22(ptr) AccessChain 12 14 + 35: 7(fvec3) Load 34 + 36: 7(fvec3) FAdd 35 33 + 37: 22(ptr) AccessChain 12 14 + Store 37 36 + 42: 41(ptr) AccessChain 40(gl_HitMicroTriangleVertexBarycentricsNV) 14 + 43: 8(fvec2) Load 42 + 45: 44(ptr) AccessChain 12 24 + Store 45 43 + 46: 41(ptr) AccessChain 40(gl_HitMicroTriangleVertexBarycentricsNV) 24 + 47: 8(fvec2) Load 46 + 48: 44(ptr) AccessChain 12 24 + 49: 8(fvec2) Load 48 + 50: 8(fvec2) FAdd 49 47 + 51: 44(ptr) AccessChain 12 24 + Store 51 50 + 52: 41(ptr) AccessChain 40(gl_HitMicroTriangleVertexBarycentricsNV) 31 + 53: 8(fvec2) Load 52 + 54: 44(ptr) AccessChain 12 24 + 55: 8(fvec2) Load 54 + 56: 8(fvec2) FAdd 55 53 + 57: 44(ptr) AccessChain 12 24 + Store 57 56 + 60: 9(int) Load 59(gl_HitKindEXT) + 62: 61(ptr) AccessChain 12 31 + Store 62 60 + 65: 9(int) Load 64(gl_HitKindFrontFacingMicroTriangleNV) + 66: 9(int) BitwiseOr 63 65 + 68: 9(int) Load 67(gl_HitKindBackFacingMicroTriangleNV) + 69: 9(int) BitwiseOr 66 68 + 70: 61(ptr) AccessChain 12 31 + 71: 9(int) Load 70 + 72: 9(int) BitwiseAnd 71 69 + 73: 61(ptr) AccessChain 12 31 + Store 73 72 + Return + FunctionEnd diff --git a/Test/baseResults/spv.nv.dmm-allops.rgen.out b/Test/baseResults/spv.nv.dmm-allops.rgen.out new file mode 100644 index 0000000000..aaff10ff4b --- /dev/null +++ b/Test/baseResults/spv.nv.dmm-allops.rgen.out @@ -0,0 +1,108 @@ +spv.nv.dmm-allops.rgen +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 66 + + Capability RayTracingKHR + Capability DisplacementMicromapNV + Capability CapabilityRayTracingDisplacementMicromapNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_displacement_micromap" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 4 "main" 12 17 58 61 + Source GLSL 460 + SourceExtension "GL_EXT_ray_query" + SourceExtension "GL_NV_displacement_micromap" + Name 4 "main" + Name 10 "block" + MemberName 10(block) 0 "op_pos" + MemberName 10(block) 1 "op_bary" + MemberName 10(block) 2 "op_hitmask" + Name 12 "" + Name 17 "as" + Name 58 "gl_HitKindFrontFacingMicroTriangleNV" + Name 61 "gl_HitKindBackFacingMicroTriangleNV" + Decorate 10(block) Block + MemberDecorate 10(block) 0 Offset 0 + MemberDecorate 10(block) 1 Offset 16 + MemberDecorate 10(block) 2 Offset 24 + Decorate 12 Binding 0 + Decorate 12 DescriptorSet 0 + Decorate 17(as) Binding 1 + Decorate 17(as) DescriptorSet 0 + Decorate 58(gl_HitKindFrontFacingMicroTriangleNV) BuiltIn HitKindFrontFacingMicroTriangleNV + Decorate 61(gl_HitKindBackFacingMicroTriangleNV) BuiltIn HitKindBackFacingMicroTriangleNV + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeVector 6(float) 2 + 9: TypeInt 32 0 + 10(block): TypeStruct 7(fvec3) 8(fvec2) 9(int) + 11: TypePointer StorageBuffer 10(block) + 12: 11(ptr) Variable StorageBuffer + 13: TypeInt 32 1 + 14: 13(int) Constant 0 + 15: TypeAccelerationStructureKHR + 16: TypePointer UniformConstant 15 + 17(as): 16(ptr) Variable UniformConstant + 19: 13(int) Constant 1 + 20: TypeVector 13(int) 2 + 21: 20(ivec2) ConstantComposite 14 14 + 23: TypePointer StorageBuffer 7(fvec3) + 26: 20(ivec2) ConstantComposite 14 19 + 33: 20(ivec2) ConstantComposite 19 14 + 41: TypePointer StorageBuffer 8(fvec2) + 55: 13(int) Constant 2 + 56: 9(int) Constant 255 + 57: TypePointer Input 9(int) +58(gl_HitKindFrontFacingMicroTriangleNV): 57(ptr) Variable Input +61(gl_HitKindBackFacingMicroTriangleNV): 57(ptr) Variable Input + 64: TypePointer StorageBuffer 9(int) + 4(main): 2 Function None 3 + 5: Label + 18: 15 Load 17(as) + 22: 7(fvec3) FetchMicroTriangleVertexPositionNV 18 19 19 19 21 + 24: 23(ptr) AccessChain 12 14 + Store 24 22 + 25: 15 Load 17(as) + 27: 7(fvec3) FetchMicroTriangleVertexPositionNV 25 19 19 19 26 + 28: 23(ptr) AccessChain 12 14 + 29: 7(fvec3) Load 28 + 30: 7(fvec3) FAdd 29 27 + 31: 23(ptr) AccessChain 12 14 + Store 31 30 + 32: 15 Load 17(as) + 34: 7(fvec3) FetchMicroTriangleVertexPositionNV 32 19 19 19 33 + 35: 23(ptr) AccessChain 12 14 + 36: 7(fvec3) Load 35 + 37: 7(fvec3) FAdd 36 34 + 38: 23(ptr) AccessChain 12 14 + Store 38 37 + 39: 15 Load 17(as) + 40: 8(fvec2) FetchMicroTriangleVertexBarycentricNV 39 19 19 19 21 + 42: 41(ptr) AccessChain 12 19 + Store 42 40 + 43: 15 Load 17(as) + 44: 8(fvec2) FetchMicroTriangleVertexBarycentricNV 43 19 19 19 26 + 45: 41(ptr) AccessChain 12 19 + 46: 8(fvec2) Load 45 + 47: 8(fvec2) FAdd 46 44 + 48: 41(ptr) AccessChain 12 19 + Store 48 47 + 49: 15 Load 17(as) + 50: 8(fvec2) FetchMicroTriangleVertexBarycentricNV 49 19 19 19 33 + 51: 41(ptr) AccessChain 12 19 + 52: 8(fvec2) Load 51 + 53: 8(fvec2) FAdd 52 50 + 54: 41(ptr) AccessChain 12 19 + Store 54 53 + 59: 9(int) Load 58(gl_HitKindFrontFacingMicroTriangleNV) + 60: 9(int) BitwiseOr 56 59 + 62: 9(int) Load 61(gl_HitKindBackFacingMicroTriangleNV) + 63: 9(int) BitwiseOr 60 62 + 65: 64(ptr) AccessChain 12 55 + Store 65 63 + Return + FunctionEnd diff --git a/Test/baseResults/spv.nv.hitobject-allops.rchit.out b/Test/baseResults/spv.nv.hitobject-allops.rchit.out new file mode 100644 index 0000000000..0ab305c3b0 --- /dev/null +++ b/Test/baseResults/spv.nv.hitobject-allops.rchit.out @@ -0,0 +1,215 @@ +spv.nv.hitobject-allops.rchit +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 116 + + Capability RayTracingKHR + Capability ShaderInvocationReorderNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_shader_invocation_reorder" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint ClosestHitKHR 4 "main" 9 14 22 25 36 42 48 52 53 64 + Source GLSL 460 + SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_NV_ray_tracing_motion_blur" + SourceExtension "GL_NV_shader_invocation_reorder" + Name 4 "main" + Name 9 "attr" + Name 12 "hBlock" + MemberName 12(hBlock) 0 "attrval" + Name 14 "" + Name 22 "hObj" + Name 25 "as" + Name 36 "payload" + Name 40 "pBlock" + MemberName 40(pBlock) 0 "val1" + MemberName 40(pBlock) 1 "val2" + Name 42 "" + Name 48 "hObjHit" + Name 52 "hObjNop" + Name 53 "hObjMiss" + Name 62 "block" + MemberName 62(block) 0 "op" + Name 64 "" + Name 79 "tmin" + Name 81 "tmax" + Name 84 "orig" + Name 86 "dir" + Name 88 "oorig" + Name 90 "odir" + Name 94 "otw" + Name 96 "wto" + Name 99 "cid" + Name 101 "iid" + Name 103 "pid" + Name 105 "gid" + Name 108 "hkind" + Name 112 "handle" + Name 114 "rid" + Decorate 12(hBlock) Block + Decorate 25(as) Binding 0 + Decorate 25(as) DescriptorSet 0 + Decorate 40(pBlock) Block + Decorate 62(block) Block + MemberDecorate 62(block) 0 Offset 0 + Decorate 64 Binding 1 + Decorate 64 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypePointer HitObjectAttributeNV 7(fvec2) + 9(attr): 8(ptr) Variable HitObjectAttributeNV + 10: 6(float) Constant 1065353216 + 11: 7(fvec2) ConstantComposite 10 10 + 12(hBlock): TypeStruct 6(float) + 13: TypePointer HitObjectAttributeNV 12(hBlock) + 14: 13(ptr) Variable HitObjectAttributeNV + 15: TypeInt 32 1 + 16: 15(int) Constant 0 + 17: 6(float) Constant 1073741824 + 18: TypePointer HitObjectAttributeNV 6(float) + 20: TypeHitObjectNV + 21: TypePointer Private 20 + 22(hObj): 21(ptr) Variable Private + 23: TypeAccelerationStructureKHR + 24: TypePointer UniformConstant 23 + 25(as): 24(ptr) Variable UniformConstant + 27: TypeInt 32 0 + 28: 27(int) Constant 1 + 29: TypeVector 6(float) 3 + 30: 6(float) Constant 1056964608 + 31: 29(fvec3) ConstantComposite 30 30 30 + 32: 29(fvec3) ConstantComposite 10 10 10 + 33: 15(int) Constant 1 + 34: TypeVector 6(float) 4 + 35: TypePointer RayPayloadKHR 34(fvec4) + 36(payload): 35(ptr) Variable RayPayloadKHR + 38: 6(float) Constant 1092616192 + 39: 15(int) Constant 2 + 40(pBlock): TypeStruct 7(fvec2) 7(fvec2) + 41: TypePointer RayPayloadKHR 40(pBlock) + 42: 41(ptr) Variable RayPayloadKHR + 44: 27(int) Constant 2 + 45: 29(fvec3) ConstantComposite 17 17 17 + 47: 6(float) Constant 1082130432 + 48(hObjHit): 21(ptr) Variable Private + 50: 15(int) Constant 3 + 52(hObjNop): 21(ptr) Variable Private + 53(hObjMiss): 21(ptr) Variable Private + 54: 6(float) Constant 1069547520 + 55: 29(fvec3) ConstantComposite 54 54 54 + 56: 6(float) Constant 1084227584 + 57: 6(float) Constant 1090519040 + 58: TypeBool + 62(block): TypeStruct 6(float) + 63: TypePointer StorageBuffer 62(block) + 64: 63(ptr) Variable StorageBuffer + 65: TypePointer StorageBuffer 6(float) + 76: 6(float) Constant 1077936128 + 78: TypePointer Function 6(float) + 83: TypePointer Function 29(fvec3) + 92: TypeMatrix 29(fvec3) 4 + 93: TypePointer Function 92 + 98: TypePointer Function 15(int) + 107: TypePointer Function 27(int) + 110: TypeVector 27(int) 2 + 111: TypePointer Function 110(ivec2) + 4(main): 2 Function None 3 + 5: Label + 79(tmin): 78(ptr) Variable Function + 81(tmax): 78(ptr) Variable Function + 84(orig): 83(ptr) Variable Function + 86(dir): 83(ptr) Variable Function + 88(oorig): 83(ptr) Variable Function + 90(odir): 83(ptr) Variable Function + 94(otw): 93(ptr) Variable Function + 96(wto): 93(ptr) Variable Function + 99(cid): 98(ptr) Variable Function + 101(iid): 98(ptr) Variable Function + 103(pid): 98(ptr) Variable Function + 105(gid): 98(ptr) Variable Function + 108(hkind): 107(ptr) Variable Function + 112(handle): 111(ptr) Variable Function + 114(rid): 107(ptr) Variable Function + Store 9(attr) 11 + 19: 18(ptr) AccessChain 14 16 + Store 19 17 + 26: 23 Load 25(as) + HitObjectTraceRayNV 22(hObj) 26 28 28 28 28 28 31 30 32 10 36(payload) + 37: 23 Load 25(as) + HitObjectTraceRayMotionNV 22(hObj) 37 28 28 28 28 28 31 30 32 10 38 42 + 43: 23 Load 25(as) + HitObjectRecordHitNV 22(hObj) 43 33 33 33 44 44 44 32 10 45 17 9(attr) + 46: 23 Load 25(as) + HitObjectRecordHitMotionNV 22(hObj) 46 33 33 33 44 44 44 32 10 45 17 47 9(attr) + 49: 23 Load 25(as) + HitObjectRecordHitWithIndexNV 48(hObjHit) 49 33 33 33 44 44 32 10 45 17 14 + 51: 23 Load 25(as) + HitObjectRecordHitWithIndexMotionNV 48(hObjHit) 51 33 33 33 44 44 32 10 45 17 47 14 + HitObjectRecordEmptyNV 52(hObjNop) + HitObjectRecordMissNV 53(hObjMiss) 28 31 17 55 56 + HitObjectRecordMissMotionNV 53(hObjMiss) 28 31 17 55 56 57 + HitObjectExecuteShaderNV 48(hObjHit) 42 + 59: 58(bool) HitObjectIsHitNV 22(hObj) + SelectionMerge 61 None + BranchConditional 59 60 67 + 60: Label + 66: 65(ptr) AccessChain 64 16 + Store 66 10 + Branch 61 + 67: Label + 68: 58(bool) HitObjectIsMissNV 22(hObj) + SelectionMerge 70 None + BranchConditional 68 69 72 + 69: Label + 71: 65(ptr) AccessChain 64 16 + Store 71 17 + Branch 70 + 72: Label + 73: 58(bool) HitObjectIsEmptyNV 22(hObj) + SelectionMerge 75 None + BranchConditional 73 74 75 + 74: Label + 77: 65(ptr) AccessChain 64 16 + Store 77 76 + Branch 75 + 75: Label + Branch 70 + 70: Label + Branch 61 + 61: Label + 80: 6(float) HitObjectGetRayTMinNV 48(hObjHit) + Store 79(tmin) 80 + 82: 6(float) HitObjectGetRayTMaxNV 48(hObjHit) + Store 81(tmax) 82 + 85: 29(fvec3) HitObjectGetWorldRayOriginNV 48(hObjHit) + Store 84(orig) 85 + 87: 29(fvec3) HitObjectGetWorldRayDirectionNV 48(hObjHit) + Store 86(dir) 87 + 89: 29(fvec3) HitObjectGetObjectRayOriginNV 48(hObjHit) + Store 88(oorig) 89 + 91: 29(fvec3) HitObjectGetObjectRayDirectionNV 48(hObjHit) + Store 90(odir) 91 + 95: 92 HitObjectGetObjectToWorldNV 48(hObjHit) + Store 94(otw) 95 + 97: 92 HitObjectGetWorldToObjectNV 48(hObjHit) + Store 96(wto) 97 + 100: 15(int) HitObjectGetInstanceCustomIndexNV 53(hObjMiss) + Store 99(cid) 100 + 102: 15(int) HitObjectGetInstanceIdNV 52(hObjNop) + Store 101(iid) 102 + 104: 15(int) HitObjectGetPrimitiveIndexNV 22(hObj) + Store 103(pid) 104 + 106: 15(int) HitObjectGetGeometryIndexNV 22(hObj) + Store 105(gid) 106 + 109: 27(int) HitObjectGetFrontFaceNV 22(hObj) + Store 108(hkind) 109 + HitObjectGetAttributesNV 22(hObj) 9(attr) + 113: 110(ivec2) HitObjectGetShaderRecordBufferHandleNV 22(hObj) + Store 112(handle) 113 + 115: 27(int) HitObjectGetShaderBindingTableRecordIndexNV 22(hObj) + Store 114(rid) 115 + Return + FunctionEnd diff --git a/Test/baseResults/spv.nv.hitobject-allops.rgen.out b/Test/baseResults/spv.nv.hitobject-allops.rgen.out new file mode 100644 index 0000000000..c681111888 --- /dev/null +++ b/Test/baseResults/spv.nv.hitobject-allops.rgen.out @@ -0,0 +1,219 @@ +spv.nv.hitobject-allops.rgen +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 117 + + Capability RayTracingKHR + Capability ShaderInvocationReorderNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_shader_invocation_reorder" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 4 "main" 9 14 22 25 36 42 48 52 53 64 + Source GLSL 460 + SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_NV_ray_tracing_motion_blur" + SourceExtension "GL_NV_shader_invocation_reorder" + Name 4 "main" + Name 9 "attr" + Name 12 "hBlock" + MemberName 12(hBlock) 0 "attrval" + Name 14 "" + Name 22 "hObj" + Name 25 "as" + Name 36 "payload" + Name 40 "pBlock" + MemberName 40(pBlock) 0 "val1" + MemberName 40(pBlock) 1 "val2" + Name 42 "" + Name 48 "hObjHit" + Name 52 "hObjNop" + Name 53 "hObjMiss" + Name 62 "block" + MemberName 62(block) 0 "op" + Name 64 "" + Name 79 "tmin" + Name 81 "tmax" + Name 84 "orig" + Name 86 "dir" + Name 88 "oorig" + Name 90 "odir" + Name 94 "otw" + Name 96 "wto" + Name 99 "cid" + Name 101 "iid" + Name 103 "pid" + Name 105 "gid" + Name 108 "hkind" + Name 112 "handle" + Name 114 "rid" + Decorate 12(hBlock) Block + Decorate 25(as) Binding 0 + Decorate 25(as) DescriptorSet 0 + Decorate 40(pBlock) Block + Decorate 62(block) Block + MemberDecorate 62(block) 0 Offset 0 + Decorate 64 Binding 1 + Decorate 64 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypePointer HitObjectAttributeNV 7(fvec2) + 9(attr): 8(ptr) Variable HitObjectAttributeNV + 10: 6(float) Constant 1065353216 + 11: 7(fvec2) ConstantComposite 10 10 + 12(hBlock): TypeStruct 6(float) + 13: TypePointer HitObjectAttributeNV 12(hBlock) + 14: 13(ptr) Variable HitObjectAttributeNV + 15: TypeInt 32 1 + 16: 15(int) Constant 0 + 17: 6(float) Constant 1073741824 + 18: TypePointer HitObjectAttributeNV 6(float) + 20: TypeHitObjectNV + 21: TypePointer Private 20 + 22(hObj): 21(ptr) Variable Private + 23: TypeAccelerationStructureKHR + 24: TypePointer UniformConstant 23 + 25(as): 24(ptr) Variable UniformConstant + 27: TypeInt 32 0 + 28: 27(int) Constant 1 + 29: TypeVector 6(float) 3 + 30: 6(float) Constant 1056964608 + 31: 29(fvec3) ConstantComposite 30 30 30 + 32: 29(fvec3) ConstantComposite 10 10 10 + 33: 15(int) Constant 1 + 34: TypeVector 6(float) 4 + 35: TypePointer RayPayloadKHR 34(fvec4) + 36(payload): 35(ptr) Variable RayPayloadKHR + 38: 6(float) Constant 1092616192 + 39: 15(int) Constant 2 + 40(pBlock): TypeStruct 7(fvec2) 7(fvec2) + 41: TypePointer RayPayloadKHR 40(pBlock) + 42: 41(ptr) Variable RayPayloadKHR + 44: 27(int) Constant 2 + 45: 29(fvec3) ConstantComposite 17 17 17 + 47: 6(float) Constant 1082130432 + 48(hObjHit): 21(ptr) Variable Private + 50: 15(int) Constant 3 + 52(hObjNop): 21(ptr) Variable Private + 53(hObjMiss): 21(ptr) Variable Private + 54: 6(float) Constant 1069547520 + 55: 29(fvec3) ConstantComposite 54 54 54 + 56: 6(float) Constant 1084227584 + 57: 6(float) Constant 1090519040 + 58: TypeBool + 62(block): TypeStruct 6(float) + 63: TypePointer StorageBuffer 62(block) + 64: 63(ptr) Variable StorageBuffer + 65: TypePointer StorageBuffer 6(float) + 76: 6(float) Constant 1077936128 + 78: TypePointer Function 6(float) + 83: TypePointer Function 29(fvec3) + 92: TypeMatrix 29(fvec3) 4 + 93: TypePointer Function 92 + 98: TypePointer Function 15(int) + 107: TypePointer Function 27(int) + 110: TypeVector 27(int) 2 + 111: TypePointer Function 110(ivec2) + 116: 27(int) Constant 4 + 4(main): 2 Function None 3 + 5: Label + 79(tmin): 78(ptr) Variable Function + 81(tmax): 78(ptr) Variable Function + 84(orig): 83(ptr) Variable Function + 86(dir): 83(ptr) Variable Function + 88(oorig): 83(ptr) Variable Function + 90(odir): 83(ptr) Variable Function + 94(otw): 93(ptr) Variable Function + 96(wto): 93(ptr) Variable Function + 99(cid): 98(ptr) Variable Function + 101(iid): 98(ptr) Variable Function + 103(pid): 98(ptr) Variable Function + 105(gid): 98(ptr) Variable Function + 108(hkind): 107(ptr) Variable Function + 112(handle): 111(ptr) Variable Function + 114(rid): 107(ptr) Variable Function + Store 9(attr) 11 + 19: 18(ptr) AccessChain 14 16 + Store 19 17 + 26: 23 Load 25(as) + HitObjectTraceRayNV 22(hObj) 26 28 28 28 28 28 31 30 32 10 36(payload) + 37: 23 Load 25(as) + HitObjectTraceRayMotionNV 22(hObj) 37 28 28 28 28 28 31 30 32 10 38 42 + 43: 23 Load 25(as) + HitObjectRecordHitNV 22(hObj) 43 33 33 33 44 44 44 32 10 45 17 9(attr) + 46: 23 Load 25(as) + HitObjectRecordHitMotionNV 22(hObj) 46 33 33 33 44 44 44 32 10 45 17 47 9(attr) + 49: 23 Load 25(as) + HitObjectRecordHitWithIndexNV 48(hObjHit) 49 33 33 33 44 44 32 10 45 17 14 + 51: 23 Load 25(as) + HitObjectRecordHitWithIndexMotionNV 48(hObjHit) 51 33 33 33 44 44 32 10 45 17 47 14 + HitObjectRecordEmptyNV 52(hObjNop) + HitObjectRecordMissNV 53(hObjMiss) 28 31 17 55 56 + HitObjectRecordMissMotionNV 53(hObjMiss) 28 31 17 55 56 57 + HitObjectExecuteShaderNV 48(hObjHit) 36(payload) + 59: 58(bool) HitObjectIsHitNV 22(hObj) + SelectionMerge 61 None + BranchConditional 59 60 67 + 60: Label + 66: 65(ptr) AccessChain 64 16 + Store 66 10 + Branch 61 + 67: Label + 68: 58(bool) HitObjectIsMissNV 22(hObj) + SelectionMerge 70 None + BranchConditional 68 69 72 + 69: Label + 71: 65(ptr) AccessChain 64 16 + Store 71 17 + Branch 70 + 72: Label + 73: 58(bool) HitObjectIsEmptyNV 22(hObj) + SelectionMerge 75 None + BranchConditional 73 74 75 + 74: Label + 77: 65(ptr) AccessChain 64 16 + Store 77 76 + Branch 75 + 75: Label + Branch 70 + 70: Label + Branch 61 + 61: Label + 80: 6(float) HitObjectGetRayTMinNV 48(hObjHit) + Store 79(tmin) 80 + 82: 6(float) HitObjectGetRayTMaxNV 48(hObjHit) + Store 81(tmax) 82 + 85: 29(fvec3) HitObjectGetWorldRayOriginNV 48(hObjHit) + Store 84(orig) 85 + 87: 29(fvec3) HitObjectGetWorldRayDirectionNV 48(hObjHit) + Store 86(dir) 87 + 89: 29(fvec3) HitObjectGetObjectRayOriginNV 48(hObjHit) + Store 88(oorig) 89 + 91: 29(fvec3) HitObjectGetObjectRayDirectionNV 48(hObjHit) + Store 90(odir) 91 + 95: 92 HitObjectGetObjectToWorldNV 48(hObjHit) + Store 94(otw) 95 + 97: 92 HitObjectGetWorldToObjectNV 48(hObjHit) + Store 96(wto) 97 + 100: 15(int) HitObjectGetInstanceCustomIndexNV 53(hObjMiss) + Store 99(cid) 100 + 102: 15(int) HitObjectGetInstanceIdNV 52(hObjNop) + Store 101(iid) 102 + 104: 15(int) HitObjectGetPrimitiveIndexNV 22(hObj) + Store 103(pid) 104 + 106: 15(int) HitObjectGetGeometryIndexNV 22(hObj) + Store 105(gid) 106 + 109: 27(int) HitObjectGetFrontFaceNV 22(hObj) + Store 108(hkind) 109 + HitObjectGetAttributesNV 22(hObj) 9(attr) + 113: 110(ivec2) HitObjectGetShaderRecordBufferHandleNV 22(hObj) + Store 112(handle) 113 + 115: 27(int) HitObjectGetShaderBindingTableRecordIndexNV 22(hObj) + Store 114(rid) 115 + ReorderThreadWithHintNV 116 116 + ReorderThreadWithHitObjectNV 48(hObjHit) + ReorderThreadWithHitObjectNV 48(hObjHit) 116 44 + Return + FunctionEnd diff --git a/Test/baseResults/spv.nv.hitobject-allops.rmiss.out b/Test/baseResults/spv.nv.hitobject-allops.rmiss.out new file mode 100644 index 0000000000..4ad23a55a5 --- /dev/null +++ b/Test/baseResults/spv.nv.hitobject-allops.rmiss.out @@ -0,0 +1,215 @@ +spv.nv.hitobject-allops.rmiss +// Module Version 10400 +// Generated by (magic number): 8000b +// Id's are bound by 116 + + Capability RayTracingKHR + Capability ShaderInvocationReorderNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_shader_invocation_reorder" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint MissKHR 4 "main" 9 14 22 25 36 42 48 52 53 64 + Source GLSL 460 + SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_NV_ray_tracing_motion_blur" + SourceExtension "GL_NV_shader_invocation_reorder" + Name 4 "main" + Name 9 "attr" + Name 12 "hBlock" + MemberName 12(hBlock) 0 "attrval" + Name 14 "" + Name 22 "hObj" + Name 25 "as" + Name 36 "payload" + Name 40 "pBlock" + MemberName 40(pBlock) 0 "val1" + MemberName 40(pBlock) 1 "val2" + Name 42 "" + Name 48 "hObjHit" + Name 52 "hObjNop" + Name 53 "hObjMiss" + Name 62 "block" + MemberName 62(block) 0 "op" + Name 64 "" + Name 79 "tmin" + Name 81 "tmax" + Name 84 "orig" + Name 86 "dir" + Name 88 "oorig" + Name 90 "odir" + Name 94 "otw" + Name 96 "wto" + Name 99 "cid" + Name 101 "iid" + Name 103 "pid" + Name 105 "gid" + Name 108 "hkind" + Name 112 "handle" + Name 114 "rid" + Decorate 12(hBlock) Block + Decorate 25(as) Binding 0 + Decorate 25(as) DescriptorSet 0 + Decorate 40(pBlock) Block + Decorate 62(block) Block + MemberDecorate 62(block) 0 Offset 0 + Decorate 64 Binding 1 + Decorate 64 DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypePointer HitObjectAttributeNV 7(fvec2) + 9(attr): 8(ptr) Variable HitObjectAttributeNV + 10: 6(float) Constant 1065353216 + 11: 7(fvec2) ConstantComposite 10 10 + 12(hBlock): TypeStruct 6(float) + 13: TypePointer HitObjectAttributeNV 12(hBlock) + 14: 13(ptr) Variable HitObjectAttributeNV + 15: TypeInt 32 1 + 16: 15(int) Constant 0 + 17: 6(float) Constant 1073741824 + 18: TypePointer HitObjectAttributeNV 6(float) + 20: TypeHitObjectNV + 21: TypePointer Private 20 + 22(hObj): 21(ptr) Variable Private + 23: TypeAccelerationStructureKHR + 24: TypePointer UniformConstant 23 + 25(as): 24(ptr) Variable UniformConstant + 27: TypeInt 32 0 + 28: 27(int) Constant 1 + 29: TypeVector 6(float) 3 + 30: 6(float) Constant 1056964608 + 31: 29(fvec3) ConstantComposite 30 30 30 + 32: 29(fvec3) ConstantComposite 10 10 10 + 33: 15(int) Constant 1 + 34: TypeVector 6(float) 4 + 35: TypePointer RayPayloadKHR 34(fvec4) + 36(payload): 35(ptr) Variable RayPayloadKHR + 38: 6(float) Constant 1092616192 + 39: 15(int) Constant 2 + 40(pBlock): TypeStruct 7(fvec2) 7(fvec2) + 41: TypePointer RayPayloadKHR 40(pBlock) + 42: 41(ptr) Variable RayPayloadKHR + 44: 27(int) Constant 2 + 45: 29(fvec3) ConstantComposite 17 17 17 + 47: 6(float) Constant 1082130432 + 48(hObjHit): 21(ptr) Variable Private + 50: 15(int) Constant 3 + 52(hObjNop): 21(ptr) Variable Private + 53(hObjMiss): 21(ptr) Variable Private + 54: 6(float) Constant 1069547520 + 55: 29(fvec3) ConstantComposite 54 54 54 + 56: 6(float) Constant 1084227584 + 57: 6(float) Constant 1090519040 + 58: TypeBool + 62(block): TypeStruct 6(float) + 63: TypePointer StorageBuffer 62(block) + 64: 63(ptr) Variable StorageBuffer + 65: TypePointer StorageBuffer 6(float) + 76: 6(float) Constant 1077936128 + 78: TypePointer Function 6(float) + 83: TypePointer Function 29(fvec3) + 92: TypeMatrix 29(fvec3) 4 + 93: TypePointer Function 92 + 98: TypePointer Function 15(int) + 107: TypePointer Function 27(int) + 110: TypeVector 27(int) 2 + 111: TypePointer Function 110(ivec2) + 4(main): 2 Function None 3 + 5: Label + 79(tmin): 78(ptr) Variable Function + 81(tmax): 78(ptr) Variable Function + 84(orig): 83(ptr) Variable Function + 86(dir): 83(ptr) Variable Function + 88(oorig): 83(ptr) Variable Function + 90(odir): 83(ptr) Variable Function + 94(otw): 93(ptr) Variable Function + 96(wto): 93(ptr) Variable Function + 99(cid): 98(ptr) Variable Function + 101(iid): 98(ptr) Variable Function + 103(pid): 98(ptr) Variable Function + 105(gid): 98(ptr) Variable Function + 108(hkind): 107(ptr) Variable Function + 112(handle): 111(ptr) Variable Function + 114(rid): 107(ptr) Variable Function + Store 9(attr) 11 + 19: 18(ptr) AccessChain 14 16 + Store 19 17 + 26: 23 Load 25(as) + HitObjectTraceRayNV 22(hObj) 26 28 28 28 28 28 31 30 32 10 36(payload) + 37: 23 Load 25(as) + HitObjectTraceRayMotionNV 22(hObj) 37 28 28 28 28 28 31 30 32 10 38 42 + 43: 23 Load 25(as) + HitObjectRecordHitNV 22(hObj) 43 33 33 33 44 44 44 32 10 45 17 9(attr) + 46: 23 Load 25(as) + HitObjectRecordHitMotionNV 22(hObj) 46 33 33 33 44 44 44 32 10 45 17 47 9(attr) + 49: 23 Load 25(as) + HitObjectRecordHitWithIndexNV 48(hObjHit) 49 33 33 33 44 44 32 10 45 17 14 + 51: 23 Load 25(as) + HitObjectRecordHitWithIndexMotionNV 48(hObjHit) 51 33 33 33 44 44 32 10 45 17 47 14 + HitObjectRecordEmptyNV 52(hObjNop) + HitObjectRecordMissNV 53(hObjMiss) 28 31 17 55 56 + HitObjectRecordMissMotionNV 53(hObjMiss) 28 31 17 55 56 57 + HitObjectExecuteShaderNV 48(hObjHit) 42 + 59: 58(bool) HitObjectIsHitNV 22(hObj) + SelectionMerge 61 None + BranchConditional 59 60 67 + 60: Label + 66: 65(ptr) AccessChain 64 16 + Store 66 10 + Branch 61 + 67: Label + 68: 58(bool) HitObjectIsMissNV 22(hObj) + SelectionMerge 70 None + BranchConditional 68 69 72 + 69: Label + 71: 65(ptr) AccessChain 64 16 + Store 71 17 + Branch 70 + 72: Label + 73: 58(bool) HitObjectIsEmptyNV 22(hObj) + SelectionMerge 75 None + BranchConditional 73 74 75 + 74: Label + 77: 65(ptr) AccessChain 64 16 + Store 77 76 + Branch 75 + 75: Label + Branch 70 + 70: Label + Branch 61 + 61: Label + 80: 6(float) HitObjectGetRayTMinNV 48(hObjHit) + Store 79(tmin) 80 + 82: 6(float) HitObjectGetRayTMaxNV 48(hObjHit) + Store 81(tmax) 82 + 85: 29(fvec3) HitObjectGetWorldRayOriginNV 48(hObjHit) + Store 84(orig) 85 + 87: 29(fvec3) HitObjectGetWorldRayDirectionNV 48(hObjHit) + Store 86(dir) 87 + 89: 29(fvec3) HitObjectGetObjectRayOriginNV 48(hObjHit) + Store 88(oorig) 89 + 91: 29(fvec3) HitObjectGetObjectRayDirectionNV 48(hObjHit) + Store 90(odir) 91 + 95: 92 HitObjectGetObjectToWorldNV 48(hObjHit) + Store 94(otw) 95 + 97: 92 HitObjectGetWorldToObjectNV 48(hObjHit) + Store 96(wto) 97 + 100: 15(int) HitObjectGetInstanceCustomIndexNV 53(hObjMiss) + Store 99(cid) 100 + 102: 15(int) HitObjectGetInstanceIdNV 52(hObjNop) + Store 101(iid) 102 + 104: 15(int) HitObjectGetPrimitiveIndexNV 22(hObj) + Store 103(pid) 104 + 106: 15(int) HitObjectGetGeometryIndexNV 22(hObj) + Store 105(gid) 106 + 109: 27(int) HitObjectGetFrontFaceNV 22(hObj) + Store 108(hkind) 109 + HitObjectGetAttributesNV 22(hObj) 9(attr) + 113: 110(ivec2) HitObjectGetShaderRecordBufferHandleNV 22(hObj) + Store 112(handle) 113 + 115: 27(int) HitObjectGetShaderBindingTableRecordIndexNV 22(hObj) + Store 114(rid) 115 + Return + FunctionEnd diff --git a/Test/baseResults/spv.nv.hitobject-errors.rgen.out b/Test/baseResults/spv.nv.hitobject-errors.rgen.out new file mode 100644 index 0000000000..1394827529 --- /dev/null +++ b/Test/baseResults/spv.nv.hitobject-errors.rgen.out @@ -0,0 +1,9 @@ +spv.nv.hitobject-errors.rgen +ERROR: 0:7: 'hitObjectNV' : hitObjectNV can only be declared in global or function scope with no storage qualifier: uHitObj +ERROR: 0:9: 'hitObjectNV' : hitObjectNV can only be declared in global or function scope with no storage qualifier: hobjIn +ERROR: 0:10: 'hitObjectNV' : hitObjectNV can only be declared in global or function scope with no storage qualifier: hobjOut +ERROR: 0:21: 'hObjWrapper' : struct is not allowed to contain hitObjectNV: wrapper +ERROR: 4 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.nvAtomicFp16Vec.frag.out b/Test/baseResults/spv.nvAtomicFp16Vec.frag.out new file mode 100644 index 0000000000..76d683e436 --- /dev/null +++ b/Test/baseResults/spv.nvAtomicFp16Vec.frag.out @@ -0,0 +1,688 @@ +spv.nvAtomicFp16Vec.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 515 + + Capability Shader + Capability Float16 + Capability ImageCubeArray + Capability Image1D + Capability StorageImageExtendedFormats + Capability StorageUniformBufferBlock16 + Capability AtomicFloat16VectorNV + Extension "SPV_KHR_16bit_storage" + Extension "SPV_NV_shader_atomic_fp16_vector" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 430 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16" + SourceExtension "GL_NV_shader_atomic_fp16_vector" + Name 4 "main" + Name 9 "Buffer" + MemberName 9(Buffer) 0 "dataf16v2" + MemberName 9(Buffer) 1 "dataf16v4" + MemberName 9(Buffer) 2 "resf16v2" + MemberName 9(Buffer) 3 "resf16v4" + Name 11 "buf" + Name 68 "constVec2" + Name 74 "fimage1D" + Name 85 "fimage1DArray" + Name 97 "fimage2D" + Name 107 "fimage2DArray" + Name 119 "fimageCube" + Name 129 "fimageCubeArray" + Name 139 "fimage3D" + Name 295 "constVec4" + Name 299 "fimage1Dv4" + Name 310 "fimage1DArrayv4" + Name 320 "fimage2Dv4" + Name 330 "fimage2DArrayv4" + Name 340 "fimageCubev4" + Name 350 "fimageCubeArrayv4" + Name 360 "fimage3Dv4" + Decorate 9(Buffer) BufferBlock + MemberDecorate 9(Buffer) 0 Offset 0 + MemberDecorate 9(Buffer) 1 Offset 8 + MemberDecorate 9(Buffer) 2 Offset 16 + MemberDecorate 9(Buffer) 3 Offset 24 + Decorate 11(buf) Binding 0 + Decorate 11(buf) DescriptorSet 0 + Decorate 74(fimage1D) Volatile + Decorate 74(fimage1D) Coherent + Decorate 74(fimage1D) Binding 0 + Decorate 74(fimage1D) DescriptorSet 0 + Decorate 85(fimage1DArray) Volatile + Decorate 85(fimage1DArray) Coherent + Decorate 85(fimage1DArray) Binding 1 + Decorate 85(fimage1DArray) DescriptorSet 0 + Decorate 97(fimage2D) Volatile + Decorate 97(fimage2D) Coherent + Decorate 97(fimage2D) Binding 2 + Decorate 97(fimage2D) DescriptorSet 0 + Decorate 107(fimage2DArray) Volatile + Decorate 107(fimage2DArray) Coherent + Decorate 107(fimage2DArray) Binding 3 + Decorate 107(fimage2DArray) DescriptorSet 0 + Decorate 119(fimageCube) Volatile + Decorate 119(fimageCube) Coherent + Decorate 119(fimageCube) Binding 5 + Decorate 119(fimageCube) DescriptorSet 0 + Decorate 129(fimageCubeArray) Volatile + Decorate 129(fimageCubeArray) Coherent + Decorate 129(fimageCubeArray) Binding 6 + Decorate 129(fimageCubeArray) DescriptorSet 0 + Decorate 139(fimage3D) Volatile + Decorate 139(fimage3D) Coherent + Decorate 139(fimage3D) Binding 9 + Decorate 139(fimage3D) DescriptorSet 0 + Decorate 299(fimage1Dv4) Volatile + Decorate 299(fimage1Dv4) Coherent + Decorate 299(fimage1Dv4) Binding 10 + Decorate 299(fimage1Dv4) DescriptorSet 0 + Decorate 310(fimage1DArrayv4) Volatile + Decorate 310(fimage1DArrayv4) Coherent + Decorate 310(fimage1DArrayv4) Binding 11 + Decorate 310(fimage1DArrayv4) DescriptorSet 0 + Decorate 320(fimage2Dv4) Volatile + Decorate 320(fimage2Dv4) Coherent + Decorate 320(fimage2Dv4) Binding 12 + Decorate 320(fimage2Dv4) DescriptorSet 0 + Decorate 330(fimage2DArrayv4) Volatile + Decorate 330(fimage2DArrayv4) Coherent + Decorate 330(fimage2DArrayv4) Binding 13 + Decorate 330(fimage2DArrayv4) DescriptorSet 0 + Decorate 340(fimageCubev4) Volatile + Decorate 340(fimageCubev4) Coherent + Decorate 340(fimageCubev4) Binding 15 + Decorate 340(fimageCubev4) DescriptorSet 0 + Decorate 350(fimageCubeArrayv4) Volatile + Decorate 350(fimageCubeArrayv4) Coherent + Decorate 350(fimageCubeArrayv4) Binding 16 + Decorate 350(fimageCubeArrayv4) DescriptorSet 0 + Decorate 360(fimage3Dv4) Volatile + Decorate 360(fimage3Dv4) Coherent + Decorate 360(fimage3Dv4) Binding 19 + Decorate 360(fimage3Dv4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 16 + 7: TypeVector 6(float16_t) 2 + 8: TypeVector 6(float16_t) 4 + 9(Buffer): TypeStruct 7(f16vec2) 8(f16vec4) 7(f16vec2) 8(f16vec4) + 10: TypePointer Uniform 9(Buffer) + 11(buf): 10(ptr) Variable Uniform + 12: TypeInt 32 1 + 13: 12(int) Constant 2 + 14: 12(int) Constant 0 + 15: TypePointer Uniform 7(f16vec2) + 17:6(float16_t) Constant 16896 + 18: 7(f16vec2) ConstantComposite 17 17 + 19: TypeInt 32 0 + 20: 19(int) Constant 1 + 21: 19(int) Constant 0 + 42: 12(int) Constant 3 + 43: 12(int) Constant 1 + 44: TypePointer Uniform 8(f16vec4) + 46: 8(f16vec4) ConstantComposite 17 17 17 17 + 67: TypePointer Function 7(f16vec2) + 69:6(float16_t) Constant 16384 + 70: 7(f16vec2) ConstantComposite 69 69 + 71: TypeFloat 32 + 72: TypeImage 71(float) 1D nonsampled format:Rg16f + 73: TypePointer UniformConstant 72 + 74(fimage1D): 73(ptr) Variable UniformConstant + 76: TypePointer Image 7(f16vec2) + 83: TypeImage 71(float) 1D array nonsampled format:Rg16f + 84: TypePointer UniformConstant 83 +85(fimage1DArray): 84(ptr) Variable UniformConstant + 86: TypeVector 12(int) 2 + 87: 86(ivec2) ConstantComposite 14 14 + 95: TypeImage 71(float) 2D nonsampled format:Rg16f + 96: TypePointer UniformConstant 95 + 97(fimage2D): 96(ptr) Variable UniformConstant + 105: TypeImage 71(float) 2D array nonsampled format:Rg16f + 106: TypePointer UniformConstant 105 +107(fimage2DArray): 106(ptr) Variable UniformConstant + 108: TypeVector 12(int) 3 + 109: 108(ivec3) ConstantComposite 14 14 14 + 117: TypeImage 71(float) Cube nonsampled format:Rg16f + 118: TypePointer UniformConstant 117 + 119(fimageCube): 118(ptr) Variable UniformConstant + 127: TypeImage 71(float) Cube array nonsampled format:Rg16f + 128: TypePointer UniformConstant 127 +129(fimageCubeArray): 128(ptr) Variable UniformConstant + 137: TypeImage 71(float) 3D nonsampled format:Rg16f + 138: TypePointer UniformConstant 137 + 139(fimage3D): 138(ptr) Variable UniformConstant + 294: TypePointer Function 8(f16vec4) + 296: 8(f16vec4) ConstantComposite 69 69 69 69 + 297: TypeImage 71(float) 1D nonsampled format:Rgba16f + 298: TypePointer UniformConstant 297 + 299(fimage1Dv4): 298(ptr) Variable UniformConstant + 301: TypePointer Image 8(f16vec4) + 308: TypeImage 71(float) 1D array nonsampled format:Rgba16f + 309: TypePointer UniformConstant 308 +310(fimage1DArrayv4): 309(ptr) Variable UniformConstant + 318: TypeImage 71(float) 2D nonsampled format:Rgba16f + 319: TypePointer UniformConstant 318 + 320(fimage2Dv4): 319(ptr) Variable UniformConstant + 328: TypeImage 71(float) 2D array nonsampled format:Rgba16f + 329: TypePointer UniformConstant 328 +330(fimage2DArrayv4): 329(ptr) Variable UniformConstant + 338: TypeImage 71(float) Cube nonsampled format:Rgba16f + 339: TypePointer UniformConstant 338 +340(fimageCubev4): 339(ptr) Variable UniformConstant + 348: TypeImage 71(float) Cube array nonsampled format:Rgba16f + 349: TypePointer UniformConstant 348 +350(fimageCubeArrayv4): 349(ptr) Variable UniformConstant + 358: TypeImage 71(float) 3D nonsampled format:Rgba16f + 359: TypePointer UniformConstant 358 + 360(fimage3Dv4): 359(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 68(constVec2): 67(ptr) Variable Function + 295(constVec4): 294(ptr) Variable Function + 16: 15(ptr) AccessChain 11(buf) 14 + 22: 7(f16vec2) AtomicFAddEXT 16 20 21 18 + 23: 15(ptr) AccessChain 11(buf) 13 + Store 23 22 + 24: 15(ptr) AccessChain 11(buf) 14 + 25: 7(f16vec2) AtomicFMinEXT 24 20 21 18 + 26: 15(ptr) AccessChain 11(buf) 13 + 27: 7(f16vec2) Load 26 + 28: 7(f16vec2) FAdd 27 25 + 29: 15(ptr) AccessChain 11(buf) 13 + Store 29 28 + 30: 15(ptr) AccessChain 11(buf) 14 + 31: 7(f16vec2) AtomicFMaxEXT 30 20 21 18 + 32: 15(ptr) AccessChain 11(buf) 13 + 33: 7(f16vec2) Load 32 + 34: 7(f16vec2) FAdd 33 31 + 35: 15(ptr) AccessChain 11(buf) 13 + Store 35 34 + 36: 15(ptr) AccessChain 11(buf) 14 + 37: 7(f16vec2) AtomicExchange 36 20 21 18 + 38: 15(ptr) AccessChain 11(buf) 13 + 39: 7(f16vec2) Load 38 + 40: 7(f16vec2) FAdd 39 37 + 41: 15(ptr) AccessChain 11(buf) 13 + Store 41 40 + 45: 44(ptr) AccessChain 11(buf) 43 + 47: 8(f16vec4) AtomicFAddEXT 45 20 21 46 + 48: 44(ptr) AccessChain 11(buf) 42 + Store 48 47 + 49: 44(ptr) AccessChain 11(buf) 43 + 50: 8(f16vec4) AtomicFMinEXT 49 20 21 46 + 51: 44(ptr) AccessChain 11(buf) 42 + 52: 8(f16vec4) Load 51 + 53: 8(f16vec4) FAdd 52 50 + 54: 44(ptr) AccessChain 11(buf) 42 + Store 54 53 + 55: 44(ptr) AccessChain 11(buf) 43 + 56: 8(f16vec4) AtomicFMaxEXT 55 20 21 46 + 57: 44(ptr) AccessChain 11(buf) 42 + 58: 8(f16vec4) Load 57 + 59: 8(f16vec4) FAdd 58 56 + 60: 44(ptr) AccessChain 11(buf) 42 + Store 60 59 + 61: 44(ptr) AccessChain 11(buf) 43 + 62: 8(f16vec4) AtomicExchange 61 20 21 46 + 63: 44(ptr) AccessChain 11(buf) 42 + 64: 8(f16vec4) Load 63 + 65: 8(f16vec4) FAdd 64 62 + 66: 44(ptr) AccessChain 11(buf) 42 + Store 66 65 + Store 68(constVec2) 70 + 75: 7(f16vec2) Load 68(constVec2) + 77: 76(ptr) ImageTexelPointer 74(fimage1D) 14 21 + 78: 7(f16vec2) AtomicFAddEXT 77 20 21 75 + 79: 15(ptr) AccessChain 11(buf) 13 + 80: 7(f16vec2) Load 79 + 81: 7(f16vec2) FAdd 80 78 + 82: 15(ptr) AccessChain 11(buf) 13 + Store 82 81 + 88: 7(f16vec2) Load 68(constVec2) + 89: 76(ptr) ImageTexelPointer 85(fimage1DArray) 87 21 + 90: 7(f16vec2) AtomicFAddEXT 89 20 21 88 + 91: 15(ptr) AccessChain 11(buf) 13 + 92: 7(f16vec2) Load 91 + 93: 7(f16vec2) FAdd 92 90 + 94: 15(ptr) AccessChain 11(buf) 13 + Store 94 93 + 98: 7(f16vec2) Load 68(constVec2) + 99: 76(ptr) ImageTexelPointer 97(fimage2D) 87 21 + 100: 7(f16vec2) AtomicFAddEXT 99 20 21 98 + 101: 15(ptr) AccessChain 11(buf) 13 + 102: 7(f16vec2) Load 101 + 103: 7(f16vec2) FAdd 102 100 + 104: 15(ptr) AccessChain 11(buf) 13 + Store 104 103 + 110: 7(f16vec2) Load 68(constVec2) + 111: 76(ptr) ImageTexelPointer 107(fimage2DArray) 109 21 + 112: 7(f16vec2) AtomicFAddEXT 111 20 21 110 + 113: 15(ptr) AccessChain 11(buf) 13 + 114: 7(f16vec2) Load 113 + 115: 7(f16vec2) FAdd 114 112 + 116: 15(ptr) AccessChain 11(buf) 13 + Store 116 115 + 120: 7(f16vec2) Load 68(constVec2) + 121: 76(ptr) ImageTexelPointer 119(fimageCube) 109 21 + 122: 7(f16vec2) AtomicFAddEXT 121 20 21 120 + 123: 15(ptr) AccessChain 11(buf) 13 + 124: 7(f16vec2) Load 123 + 125: 7(f16vec2) FAdd 124 122 + 126: 15(ptr) AccessChain 11(buf) 13 + Store 126 125 + 130: 7(f16vec2) Load 68(constVec2) + 131: 76(ptr) ImageTexelPointer 129(fimageCubeArray) 109 21 + 132: 7(f16vec2) AtomicFAddEXT 131 20 21 130 + 133: 15(ptr) AccessChain 11(buf) 13 + 134: 7(f16vec2) Load 133 + 135: 7(f16vec2) FAdd 134 132 + 136: 15(ptr) AccessChain 11(buf) 13 + Store 136 135 + 140: 7(f16vec2) Load 68(constVec2) + 141: 76(ptr) ImageTexelPointer 139(fimage3D) 109 21 + 142: 7(f16vec2) AtomicFAddEXT 141 20 21 140 + 143: 15(ptr) AccessChain 11(buf) 13 + 144: 7(f16vec2) Load 143 + 145: 7(f16vec2) FAdd 144 142 + 146: 15(ptr) AccessChain 11(buf) 13 + Store 146 145 + 147: 7(f16vec2) Load 68(constVec2) + 148: 76(ptr) ImageTexelPointer 74(fimage1D) 14 21 + 149: 7(f16vec2) AtomicFMinEXT 148 20 21 147 + 150: 15(ptr) AccessChain 11(buf) 13 + 151: 7(f16vec2) Load 150 + 152: 7(f16vec2) FAdd 151 149 + 153: 15(ptr) AccessChain 11(buf) 13 + Store 153 152 + 154: 7(f16vec2) Load 68(constVec2) + 155: 76(ptr) ImageTexelPointer 85(fimage1DArray) 87 21 + 156: 7(f16vec2) AtomicFMinEXT 155 20 21 154 + 157: 15(ptr) AccessChain 11(buf) 13 + 158: 7(f16vec2) Load 157 + 159: 7(f16vec2) FAdd 158 156 + 160: 15(ptr) AccessChain 11(buf) 13 + Store 160 159 + 161: 7(f16vec2) Load 68(constVec2) + 162: 76(ptr) ImageTexelPointer 97(fimage2D) 87 21 + 163: 7(f16vec2) AtomicFMinEXT 162 20 21 161 + 164: 15(ptr) AccessChain 11(buf) 13 + 165: 7(f16vec2) Load 164 + 166: 7(f16vec2) FAdd 165 163 + 167: 15(ptr) AccessChain 11(buf) 13 + Store 167 166 + 168: 7(f16vec2) Load 68(constVec2) + 169: 76(ptr) ImageTexelPointer 107(fimage2DArray) 109 21 + 170: 7(f16vec2) AtomicFMinEXT 169 20 21 168 + 171: 15(ptr) AccessChain 11(buf) 13 + 172: 7(f16vec2) Load 171 + 173: 7(f16vec2) FAdd 172 170 + 174: 15(ptr) AccessChain 11(buf) 13 + Store 174 173 + 175: 7(f16vec2) Load 68(constVec2) + 176: 76(ptr) ImageTexelPointer 119(fimageCube) 109 21 + 177: 7(f16vec2) AtomicFMinEXT 176 20 21 175 + 178: 15(ptr) AccessChain 11(buf) 13 + 179: 7(f16vec2) Load 178 + 180: 7(f16vec2) FAdd 179 177 + 181: 15(ptr) AccessChain 11(buf) 13 + Store 181 180 + 182: 7(f16vec2) Load 68(constVec2) + 183: 76(ptr) ImageTexelPointer 129(fimageCubeArray) 109 21 + 184: 7(f16vec2) AtomicFMinEXT 183 20 21 182 + 185: 15(ptr) AccessChain 11(buf) 13 + 186: 7(f16vec2) Load 185 + 187: 7(f16vec2) FAdd 186 184 + 188: 15(ptr) AccessChain 11(buf) 13 + Store 188 187 + 189: 7(f16vec2) Load 68(constVec2) + 190: 76(ptr) ImageTexelPointer 139(fimage3D) 109 21 + 191: 7(f16vec2) AtomicFMinEXT 190 20 21 189 + 192: 15(ptr) AccessChain 11(buf) 13 + 193: 7(f16vec2) Load 192 + 194: 7(f16vec2) FAdd 193 191 + 195: 15(ptr) AccessChain 11(buf) 13 + Store 195 194 + 196: 7(f16vec2) Load 68(constVec2) + 197: 76(ptr) ImageTexelPointer 74(fimage1D) 14 21 + 198: 7(f16vec2) AtomicFMaxEXT 197 20 21 196 + 199: 15(ptr) AccessChain 11(buf) 13 + 200: 7(f16vec2) Load 199 + 201: 7(f16vec2) FAdd 200 198 + 202: 15(ptr) AccessChain 11(buf) 13 + Store 202 201 + 203: 7(f16vec2) Load 68(constVec2) + 204: 76(ptr) ImageTexelPointer 85(fimage1DArray) 87 21 + 205: 7(f16vec2) AtomicFMaxEXT 204 20 21 203 + 206: 15(ptr) AccessChain 11(buf) 13 + 207: 7(f16vec2) Load 206 + 208: 7(f16vec2) FAdd 207 205 + 209: 15(ptr) AccessChain 11(buf) 13 + Store 209 208 + 210: 7(f16vec2) Load 68(constVec2) + 211: 76(ptr) ImageTexelPointer 97(fimage2D) 87 21 + 212: 7(f16vec2) AtomicFMaxEXT 211 20 21 210 + 213: 15(ptr) AccessChain 11(buf) 13 + 214: 7(f16vec2) Load 213 + 215: 7(f16vec2) FAdd 214 212 + 216: 15(ptr) AccessChain 11(buf) 13 + Store 216 215 + 217: 7(f16vec2) Load 68(constVec2) + 218: 76(ptr) ImageTexelPointer 107(fimage2DArray) 109 21 + 219: 7(f16vec2) AtomicFMaxEXT 218 20 21 217 + 220: 15(ptr) AccessChain 11(buf) 13 + 221: 7(f16vec2) Load 220 + 222: 7(f16vec2) FAdd 221 219 + 223: 15(ptr) AccessChain 11(buf) 13 + Store 223 222 + 224: 7(f16vec2) Load 68(constVec2) + 225: 76(ptr) ImageTexelPointer 119(fimageCube) 109 21 + 226: 7(f16vec2) AtomicFMaxEXT 225 20 21 224 + 227: 15(ptr) AccessChain 11(buf) 13 + 228: 7(f16vec2) Load 227 + 229: 7(f16vec2) FAdd 228 226 + 230: 15(ptr) AccessChain 11(buf) 13 + Store 230 229 + 231: 7(f16vec2) Load 68(constVec2) + 232: 76(ptr) ImageTexelPointer 129(fimageCubeArray) 109 21 + 233: 7(f16vec2) AtomicFMaxEXT 232 20 21 231 + 234: 15(ptr) AccessChain 11(buf) 13 + 235: 7(f16vec2) Load 234 + 236: 7(f16vec2) FAdd 235 233 + 237: 15(ptr) AccessChain 11(buf) 13 + Store 237 236 + 238: 7(f16vec2) Load 68(constVec2) + 239: 76(ptr) ImageTexelPointer 139(fimage3D) 109 21 + 240: 7(f16vec2) AtomicFMaxEXT 239 20 21 238 + 241: 15(ptr) AccessChain 11(buf) 13 + 242: 7(f16vec2) Load 241 + 243: 7(f16vec2) FAdd 242 240 + 244: 15(ptr) AccessChain 11(buf) 13 + Store 244 243 + 245: 7(f16vec2) Load 68(constVec2) + 246: 76(ptr) ImageTexelPointer 74(fimage1D) 14 21 + 247: 7(f16vec2) AtomicExchange 246 20 21 245 + 248: 15(ptr) AccessChain 11(buf) 13 + 249: 7(f16vec2) Load 248 + 250: 7(f16vec2) FAdd 249 247 + 251: 15(ptr) AccessChain 11(buf) 13 + Store 251 250 + 252: 7(f16vec2) Load 68(constVec2) + 253: 76(ptr) ImageTexelPointer 85(fimage1DArray) 87 21 + 254: 7(f16vec2) AtomicExchange 253 20 21 252 + 255: 15(ptr) AccessChain 11(buf) 13 + 256: 7(f16vec2) Load 255 + 257: 7(f16vec2) FAdd 256 254 + 258: 15(ptr) AccessChain 11(buf) 13 + Store 258 257 + 259: 7(f16vec2) Load 68(constVec2) + 260: 76(ptr) ImageTexelPointer 97(fimage2D) 87 21 + 261: 7(f16vec2) AtomicExchange 260 20 21 259 + 262: 15(ptr) AccessChain 11(buf) 13 + 263: 7(f16vec2) Load 262 + 264: 7(f16vec2) FAdd 263 261 + 265: 15(ptr) AccessChain 11(buf) 13 + Store 265 264 + 266: 7(f16vec2) Load 68(constVec2) + 267: 76(ptr) ImageTexelPointer 107(fimage2DArray) 109 21 + 268: 7(f16vec2) AtomicExchange 267 20 21 266 + 269: 15(ptr) AccessChain 11(buf) 13 + 270: 7(f16vec2) Load 269 + 271: 7(f16vec2) FAdd 270 268 + 272: 15(ptr) AccessChain 11(buf) 13 + Store 272 271 + 273: 7(f16vec2) Load 68(constVec2) + 274: 76(ptr) ImageTexelPointer 119(fimageCube) 109 21 + 275: 7(f16vec2) AtomicExchange 274 20 21 273 + 276: 15(ptr) AccessChain 11(buf) 13 + 277: 7(f16vec2) Load 276 + 278: 7(f16vec2) FAdd 277 275 + 279: 15(ptr) AccessChain 11(buf) 13 + Store 279 278 + 280: 7(f16vec2) Load 68(constVec2) + 281: 76(ptr) ImageTexelPointer 129(fimageCubeArray) 109 21 + 282: 7(f16vec2) AtomicExchange 281 20 21 280 + 283: 15(ptr) AccessChain 11(buf) 13 + 284: 7(f16vec2) Load 283 + 285: 7(f16vec2) FAdd 284 282 + 286: 15(ptr) AccessChain 11(buf) 13 + Store 286 285 + 287: 7(f16vec2) Load 68(constVec2) + 288: 76(ptr) ImageTexelPointer 139(fimage3D) 109 21 + 289: 7(f16vec2) AtomicExchange 288 20 21 287 + 290: 15(ptr) AccessChain 11(buf) 13 + 291: 7(f16vec2) Load 290 + 292: 7(f16vec2) FAdd 291 289 + 293: 15(ptr) AccessChain 11(buf) 13 + Store 293 292 + Store 295(constVec4) 296 + 300: 8(f16vec4) Load 295(constVec4) + 302: 301(ptr) ImageTexelPointer 299(fimage1Dv4) 14 21 + 303: 8(f16vec4) AtomicFAddEXT 302 20 21 300 + 304: 44(ptr) AccessChain 11(buf) 42 + 305: 8(f16vec4) Load 304 + 306: 8(f16vec4) FAdd 305 303 + 307: 44(ptr) AccessChain 11(buf) 42 + Store 307 306 + 311: 8(f16vec4) Load 295(constVec4) + 312: 301(ptr) ImageTexelPointer 310(fimage1DArrayv4) 87 21 + 313: 8(f16vec4) AtomicFAddEXT 312 20 21 311 + 314: 44(ptr) AccessChain 11(buf) 42 + 315: 8(f16vec4) Load 314 + 316: 8(f16vec4) FAdd 315 313 + 317: 44(ptr) AccessChain 11(buf) 42 + Store 317 316 + 321: 8(f16vec4) Load 295(constVec4) + 322: 301(ptr) ImageTexelPointer 320(fimage2Dv4) 87 21 + 323: 8(f16vec4) AtomicFAddEXT 322 20 21 321 + 324: 44(ptr) AccessChain 11(buf) 42 + 325: 8(f16vec4) Load 324 + 326: 8(f16vec4) FAdd 325 323 + 327: 44(ptr) AccessChain 11(buf) 42 + Store 327 326 + 331: 8(f16vec4) Load 295(constVec4) + 332: 301(ptr) ImageTexelPointer 330(fimage2DArrayv4) 109 21 + 333: 8(f16vec4) AtomicFAddEXT 332 20 21 331 + 334: 44(ptr) AccessChain 11(buf) 42 + 335: 8(f16vec4) Load 334 + 336: 8(f16vec4) FAdd 335 333 + 337: 44(ptr) AccessChain 11(buf) 42 + Store 337 336 + 341: 8(f16vec4) Load 295(constVec4) + 342: 301(ptr) ImageTexelPointer 340(fimageCubev4) 109 21 + 343: 8(f16vec4) AtomicFAddEXT 342 20 21 341 + 344: 44(ptr) AccessChain 11(buf) 42 + 345: 8(f16vec4) Load 344 + 346: 8(f16vec4) FAdd 345 343 + 347: 44(ptr) AccessChain 11(buf) 42 + Store 347 346 + 351: 8(f16vec4) Load 295(constVec4) + 352: 301(ptr) ImageTexelPointer 350(fimageCubeArrayv4) 109 21 + 353: 8(f16vec4) AtomicFAddEXT 352 20 21 351 + 354: 44(ptr) AccessChain 11(buf) 42 + 355: 8(f16vec4) Load 354 + 356: 8(f16vec4) FAdd 355 353 + 357: 44(ptr) AccessChain 11(buf) 42 + Store 357 356 + 361: 8(f16vec4) Load 295(constVec4) + 362: 301(ptr) ImageTexelPointer 360(fimage3Dv4) 109 21 + 363: 8(f16vec4) AtomicFAddEXT 362 20 21 361 + 364: 44(ptr) AccessChain 11(buf) 42 + 365: 8(f16vec4) Load 364 + 366: 8(f16vec4) FAdd 365 363 + 367: 44(ptr) AccessChain 11(buf) 42 + Store 367 366 + 368: 8(f16vec4) Load 295(constVec4) + 369: 301(ptr) ImageTexelPointer 299(fimage1Dv4) 14 21 + 370: 8(f16vec4) AtomicFMinEXT 369 20 21 368 + 371: 44(ptr) AccessChain 11(buf) 42 + 372: 8(f16vec4) Load 371 + 373: 8(f16vec4) FAdd 372 370 + 374: 44(ptr) AccessChain 11(buf) 42 + Store 374 373 + 375: 8(f16vec4) Load 295(constVec4) + 376: 301(ptr) ImageTexelPointer 310(fimage1DArrayv4) 87 21 + 377: 8(f16vec4) AtomicFMinEXT 376 20 21 375 + 378: 44(ptr) AccessChain 11(buf) 42 + 379: 8(f16vec4) Load 378 + 380: 8(f16vec4) FAdd 379 377 + 381: 44(ptr) AccessChain 11(buf) 42 + Store 381 380 + 382: 8(f16vec4) Load 295(constVec4) + 383: 301(ptr) ImageTexelPointer 320(fimage2Dv4) 87 21 + 384: 8(f16vec4) AtomicFMinEXT 383 20 21 382 + 385: 44(ptr) AccessChain 11(buf) 42 + 386: 8(f16vec4) Load 385 + 387: 8(f16vec4) FAdd 386 384 + 388: 44(ptr) AccessChain 11(buf) 42 + Store 388 387 + 389: 8(f16vec4) Load 295(constVec4) + 390: 301(ptr) ImageTexelPointer 330(fimage2DArrayv4) 109 21 + 391: 8(f16vec4) AtomicFMinEXT 390 20 21 389 + 392: 44(ptr) AccessChain 11(buf) 42 + 393: 8(f16vec4) Load 392 + 394: 8(f16vec4) FAdd 393 391 + 395: 44(ptr) AccessChain 11(buf) 42 + Store 395 394 + 396: 8(f16vec4) Load 295(constVec4) + 397: 301(ptr) ImageTexelPointer 340(fimageCubev4) 109 21 + 398: 8(f16vec4) AtomicFMinEXT 397 20 21 396 + 399: 44(ptr) AccessChain 11(buf) 42 + 400: 8(f16vec4) Load 399 + 401: 8(f16vec4) FAdd 400 398 + 402: 44(ptr) AccessChain 11(buf) 42 + Store 402 401 + 403: 8(f16vec4) Load 295(constVec4) + 404: 301(ptr) ImageTexelPointer 350(fimageCubeArrayv4) 109 21 + 405: 8(f16vec4) AtomicFMinEXT 404 20 21 403 + 406: 44(ptr) AccessChain 11(buf) 42 + 407: 8(f16vec4) Load 406 + 408: 8(f16vec4) FAdd 407 405 + 409: 44(ptr) AccessChain 11(buf) 42 + Store 409 408 + 410: 8(f16vec4) Load 295(constVec4) + 411: 301(ptr) ImageTexelPointer 360(fimage3Dv4) 109 21 + 412: 8(f16vec4) AtomicFMinEXT 411 20 21 410 + 413: 44(ptr) AccessChain 11(buf) 42 + 414: 8(f16vec4) Load 413 + 415: 8(f16vec4) FAdd 414 412 + 416: 44(ptr) AccessChain 11(buf) 42 + Store 416 415 + 417: 8(f16vec4) Load 295(constVec4) + 418: 301(ptr) ImageTexelPointer 299(fimage1Dv4) 14 21 + 419: 8(f16vec4) AtomicFMaxEXT 418 20 21 417 + 420: 44(ptr) AccessChain 11(buf) 42 + 421: 8(f16vec4) Load 420 + 422: 8(f16vec4) FAdd 421 419 + 423: 44(ptr) AccessChain 11(buf) 42 + Store 423 422 + 424: 8(f16vec4) Load 295(constVec4) + 425: 301(ptr) ImageTexelPointer 310(fimage1DArrayv4) 87 21 + 426: 8(f16vec4) AtomicFMaxEXT 425 20 21 424 + 427: 44(ptr) AccessChain 11(buf) 42 + 428: 8(f16vec4) Load 427 + 429: 8(f16vec4) FAdd 428 426 + 430: 44(ptr) AccessChain 11(buf) 42 + Store 430 429 + 431: 8(f16vec4) Load 295(constVec4) + 432: 301(ptr) ImageTexelPointer 320(fimage2Dv4) 87 21 + 433: 8(f16vec4) AtomicFMaxEXT 432 20 21 431 + 434: 44(ptr) AccessChain 11(buf) 42 + 435: 8(f16vec4) Load 434 + 436: 8(f16vec4) FAdd 435 433 + 437: 44(ptr) AccessChain 11(buf) 42 + Store 437 436 + 438: 8(f16vec4) Load 295(constVec4) + 439: 301(ptr) ImageTexelPointer 330(fimage2DArrayv4) 109 21 + 440: 8(f16vec4) AtomicFMaxEXT 439 20 21 438 + 441: 44(ptr) AccessChain 11(buf) 42 + 442: 8(f16vec4) Load 441 + 443: 8(f16vec4) FAdd 442 440 + 444: 44(ptr) AccessChain 11(buf) 42 + Store 444 443 + 445: 8(f16vec4) Load 295(constVec4) + 446: 301(ptr) ImageTexelPointer 340(fimageCubev4) 109 21 + 447: 8(f16vec4) AtomicFMaxEXT 446 20 21 445 + 448: 44(ptr) AccessChain 11(buf) 42 + 449: 8(f16vec4) Load 448 + 450: 8(f16vec4) FAdd 449 447 + 451: 44(ptr) AccessChain 11(buf) 42 + Store 451 450 + 452: 8(f16vec4) Load 295(constVec4) + 453: 301(ptr) ImageTexelPointer 350(fimageCubeArrayv4) 109 21 + 454: 8(f16vec4) AtomicFMaxEXT 453 20 21 452 + 455: 44(ptr) AccessChain 11(buf) 42 + 456: 8(f16vec4) Load 455 + 457: 8(f16vec4) FAdd 456 454 + 458: 44(ptr) AccessChain 11(buf) 42 + Store 458 457 + 459: 8(f16vec4) Load 295(constVec4) + 460: 301(ptr) ImageTexelPointer 360(fimage3Dv4) 109 21 + 461: 8(f16vec4) AtomicFMaxEXT 460 20 21 459 + 462: 44(ptr) AccessChain 11(buf) 42 + 463: 8(f16vec4) Load 462 + 464: 8(f16vec4) FAdd 463 461 + 465: 44(ptr) AccessChain 11(buf) 42 + Store 465 464 + 466: 8(f16vec4) Load 295(constVec4) + 467: 301(ptr) ImageTexelPointer 299(fimage1Dv4) 14 21 + 468: 8(f16vec4) AtomicExchange 467 20 21 466 + 469: 44(ptr) AccessChain 11(buf) 42 + 470: 8(f16vec4) Load 469 + 471: 8(f16vec4) FAdd 470 468 + 472: 44(ptr) AccessChain 11(buf) 42 + Store 472 471 + 473: 8(f16vec4) Load 295(constVec4) + 474: 301(ptr) ImageTexelPointer 310(fimage1DArrayv4) 87 21 + 475: 8(f16vec4) AtomicExchange 474 20 21 473 + 476: 44(ptr) AccessChain 11(buf) 42 + 477: 8(f16vec4) Load 476 + 478: 8(f16vec4) FAdd 477 475 + 479: 44(ptr) AccessChain 11(buf) 42 + Store 479 478 + 480: 8(f16vec4) Load 295(constVec4) + 481: 301(ptr) ImageTexelPointer 320(fimage2Dv4) 87 21 + 482: 8(f16vec4) AtomicExchange 481 20 21 480 + 483: 44(ptr) AccessChain 11(buf) 42 + 484: 8(f16vec4) Load 483 + 485: 8(f16vec4) FAdd 484 482 + 486: 44(ptr) AccessChain 11(buf) 42 + Store 486 485 + 487: 8(f16vec4) Load 295(constVec4) + 488: 301(ptr) ImageTexelPointer 330(fimage2DArrayv4) 109 21 + 489: 8(f16vec4) AtomicExchange 488 20 21 487 + 490: 44(ptr) AccessChain 11(buf) 42 + 491: 8(f16vec4) Load 490 + 492: 8(f16vec4) FAdd 491 489 + 493: 44(ptr) AccessChain 11(buf) 42 + Store 493 492 + 494: 8(f16vec4) Load 295(constVec4) + 495: 301(ptr) ImageTexelPointer 340(fimageCubev4) 109 21 + 496: 8(f16vec4) AtomicExchange 495 20 21 494 + 497: 44(ptr) AccessChain 11(buf) 42 + 498: 8(f16vec4) Load 497 + 499: 8(f16vec4) FAdd 498 496 + 500: 44(ptr) AccessChain 11(buf) 42 + Store 500 499 + 501: 8(f16vec4) Load 295(constVec4) + 502: 301(ptr) ImageTexelPointer 350(fimageCubeArrayv4) 109 21 + 503: 8(f16vec4) AtomicExchange 502 20 21 501 + 504: 44(ptr) AccessChain 11(buf) 42 + 505: 8(f16vec4) Load 504 + 506: 8(f16vec4) FAdd 505 503 + 507: 44(ptr) AccessChain 11(buf) 42 + Store 507 506 + 508: 8(f16vec4) Load 295(constVec4) + 509: 301(ptr) ImageTexelPointer 360(fimage3Dv4) 109 21 + 510: 8(f16vec4) AtomicExchange 509 20 21 508 + 511: 44(ptr) AccessChain 11(buf) 42 + 512: 8(f16vec4) Load 511 + 513: 8(f16vec4) FAdd 512 510 + 514: 44(ptr) AccessChain 11(buf) 42 + Store 514 513 + Return + FunctionEnd diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out index a1a9f311f5..b6f826ef76 100644 --- a/Test/baseResults/spv.offsets.frag.out +++ b/Test/baseResults/spv.offsets.frag.out @@ -1,6 +1,6 @@ spv.offsets.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 15 Capability Shader @@ -22,20 +22,20 @@ spv.offsets.frag MemberName 12(n2) 2 "g" MemberName 12(n2) 3 "h" Name 14 "i2" + Decorate 7(n1) Block MemberDecorate 7(n1) 0 Offset 8 MemberDecorate 7(n1) 1 Offset 4 MemberDecorate 7(n1) 2 Offset 0 MemberDecorate 7(n1) 3 Offset 12 - Decorate 7(n1) Block - Decorate 9(i1) DescriptorSet 0 Decorate 9(i1) Binding 0 + Decorate 9(i1) DescriptorSet 0 + Decorate 12(n2) BufferBlock MemberDecorate 12(n2) 0 Offset 32 MemberDecorate 12(n2) 1 Offset 48 MemberDecorate 12(n2) 2 Offset 16 MemberDecorate 12(n2) 3 Offset 0 - Decorate 12(n2) BufferBlock - Decorate 14(i2) DescriptorSet 0 Decorate 14(i2) Binding 1 + Decorate 14(i2) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.paramMemory.420.frag.out b/Test/baseResults/spv.paramMemory.420.frag.out index 4cdc35f73e..d533ec72c3 100644 --- a/Test/baseResults/spv.paramMemory.420.frag.out +++ b/Test/baseResults/spv.paramMemory.420.frag.out @@ -1,7 +1,7 @@ spv.paramMemory.420.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 69 Capability Shader @@ -41,20 +41,20 @@ Validation failed Decorate 20(image) NonReadable Decorate 27(in_coords) Flat Decorate 27(in_coords) Location 0 - Decorate 36(image1) DescriptorSet 0 - Decorate 36(image1) Binding 0 Decorate 36(image1) Coherent Decorate 36(image1) NonWritable - Decorate 41(image2) DescriptorSet 0 - Decorate 41(image2) Binding 2 + Decorate 36(image1) Binding 0 + Decorate 36(image1) DescriptorSet 0 Decorate 41(image2) NonWritable - Decorate 47(image3) DescriptorSet 0 - Decorate 47(image3) Binding 1 + Decorate 41(image2) Binding 2 + Decorate 41(image2) DescriptorSet 0 Decorate 47(image3) Coherent Decorate 47(image3) NonReadable - Decorate 57(image4) DescriptorSet 0 - Decorate 57(image4) Binding 3 + Decorate 47(image3) Binding 1 + Decorate 47(image3) DescriptorSet 0 Decorate 57(image4) NonReadable + Decorate 57(image4) Binding 3 + Decorate 57(image4) DescriptorSet 0 Decorate 66(out_color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.paramMemory.frag.out b/Test/baseResults/spv.paramMemory.frag.out index a535cd3fbb..ccca40245e 100644 --- a/Test/baseResults/spv.paramMemory.frag.out +++ b/Test/baseResults/spv.paramMemory.frag.out @@ -1,7 +1,7 @@ spv.paramMemory.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 64 Capability Shader @@ -36,13 +36,13 @@ Validation failed Decorate 20(image) NonReadable Decorate 27(in_coords) Flat Decorate 27(in_coords) Location 0 - Decorate 43(image3) DescriptorSet 0 - Decorate 43(image3) Binding 1 Decorate 43(image3) Coherent Decorate 43(image3) NonReadable - Decorate 52(image4) DescriptorSet 0 - Decorate 52(image4) Binding 3 + Decorate 43(image3) Binding 1 + Decorate 43(image3) DescriptorSet 0 Decorate 52(image4) NonReadable + Decorate 52(image4) Binding 3 + Decorate 52(image4) DescriptorSet 0 Decorate 61(out_color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.perprimitiveNV.frag.out b/Test/baseResults/spv.perprimitiveNV.frag.out index 2a37f2b5d2..b319ec05b0 100644 --- a/Test/baseResults/spv.perprimitiveNV.frag.out +++ b/Test/baseResults/spv.perprimitiveNV.frag.out @@ -1,6 +1,6 @@ spv.perprimitiveNV.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 23 Capability Shader @@ -21,12 +21,12 @@ spv.perprimitiveNV.frag MemberName 17(C) 0 "h" Name 19 "" Decorate 8(g) Location 8 - MemberDecorate 9(B) 0 PerPrimitiveNV Decorate 9(B) Block + MemberDecorate 9(B) 0 PerPrimitiveNV Decorate 11 Location 0 + Decorate 17(C) Block MemberDecorate 17(C) 0 Flat MemberDecorate 17(C) 0 Centroid - Decorate 17(C) Block Decorate 19 Location 4 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.pp.line.frag.out b/Test/baseResults/spv.pp.line.frag.out index 549ae912c2..807ecaef08 100644 --- a/Test/baseResults/spv.pp.line.frag.out +++ b/Test/baseResults/spv.pp.line.frag.out @@ -1,18 +1,19 @@ spv.pp.line.frag -WARNING: spv.pp.line.frag:6: varying deprecated in version 130; may be removed in future release WARNING: spv.pp.line.frag:7: varying deprecated in version 130; may be removed in future release +WARNING: spv.pp.line.frag:8: varying deprecated in version 130; may be removed in future release // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 65 +// Generated by (magic number): 8000b +// Id's are bound by 84 Capability Shader Capability Sampled1D 2: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 5 "main" 41 53 56 59 + EntryPoint Fragment 5 "main" 60 72 75 78 ExecutionMode 5 OriginUpperLeft 1: String "spv.pp.line.frag" + 7: String "header.h" Source GLSL 140 1 "// OpModuleProcessed auto-map-locations // OpModuleProcessed auto-map-bindings // OpModuleProcessed client vulkan100 @@ -21,6 +22,7 @@ WARNING: spv.pp.line.frag:7: varying deprecated in version 130; may be removed i // OpModuleProcessed entry-point main #line 1 #version 140 +#extension GL_GOOGLE_cpp_style_line_directive : require uniform sampler1D texSampler1D; uniform sampler2D texSampler2D; @@ -30,9 +32,20 @@ varying vec4 u; in vec2 coords2D; +#line 0 "header.h" +float myAbs(float x) { + if (x > 0) { + return x; + } + else { + return -x; + } +} + +#line 22 "spv.pp.line.frag" void main() { - float blendscale = 1.789; + float blendscale = myAbs(1.789); float bias = 2.0; float coords1D = 1.789; vec4 color = vec4(0.0, 0.0, 0.0, 0.0); @@ -46,104 +59,136 @@ void main() gl_FragColor = mix(color, u, blend * blendscale); } " + SourceExtension "GL_GOOGLE_cpp_style_line_directive" Name 5 "main" - Name 9 "blendscale" - Name 11 "bias" - Name 13 "coords1D" - Name 16 "color" - Name 22 "texSampler1D" - Name 37 "texSampler2D" - Name 41 "coords2D" - Name 53 "gl_FragColor" - Name 56 "u" - Name 59 "blend" - Decorate 22(texSampler1D) DescriptorSet 0 - Decorate 22(texSampler1D) Binding 0 - Decorate 37(texSampler2D) DescriptorSet 0 - Decorate 37(texSampler2D) Binding 1 - Decorate 41(coords2D) Location 2 - Decorate 53(gl_FragColor) Location 0 - Decorate 56(u) Location 1 - Decorate 59(blend) Location 0 + Name 12 "myAbs(f1;" + Name 11 "x" + Name 27 "blendscale" + Name 29 "param" + Name 31 "bias" + Name 33 "coords1D" + Name 36 "color" + Name 41 "texSampler1D" + Name 56 "texSampler2D" + Name 60 "coords2D" + Name 72 "gl_FragColor" + Name 75 "u" + Name 78 "blend" + Decorate 41(texSampler1D) Binding 0 + Decorate 41(texSampler1D) DescriptorSet 0 + Decorate 56(texSampler2D) Binding 1 + Decorate 56(texSampler2D) DescriptorSet 0 + Decorate 60(coords2D) Location 2 + Decorate 72(gl_FragColor) Location 0 + Decorate 75(u) Location 1 + Decorate 78(blend) Location 0 3: TypeVoid 4: TypeFunction 3 - 7: TypeFloat 32 - 8: TypePointer Function 7(float) - 10: 7(float) Constant 1071971828 - 12: 7(float) Constant 1073741824 - 14: TypeVector 7(float) 4 - 15: TypePointer Function 14(fvec4) - 17: 7(float) Constant 0 - 18: 14(fvec4) ConstantComposite 17 17 17 17 - 19: TypeImage 7(float) 1D sampled format:Unknown - 20: TypeSampledImage 19 - 21: TypePointer UniformConstant 20 -22(texSampler1D): 21(ptr) Variable UniformConstant - 34: TypeImage 7(float) 2D sampled format:Unknown - 35: TypeSampledImage 34 - 36: TypePointer UniformConstant 35 -37(texSampler2D): 36(ptr) Variable UniformConstant - 39: TypeVector 7(float) 2 - 40: TypePointer Input 39(fvec2) - 41(coords2D): 40(ptr) Variable Input - 52: TypePointer Output 14(fvec4) -53(gl_FragColor): 52(ptr) Variable Output - 55: TypePointer Input 14(fvec4) - 56(u): 55(ptr) Variable Input - 58: TypePointer Input 7(float) - 59(blend): 58(ptr) Variable Input + 8: TypeFloat 32 + 9: TypePointer Function 8(float) + 10: TypeFunction 8(float) 9(ptr) + 15: 8(float) Constant 0 + 16: TypeBool + 28: 8(float) Constant 1071971828 + 32: 8(float) Constant 1073741824 + 34: TypeVector 8(float) 4 + 35: TypePointer Function 34(fvec4) + 37: 34(fvec4) ConstantComposite 15 15 15 15 + 38: TypeImage 8(float) 1D sampled format:Unknown + 39: TypeSampledImage 38 + 40: TypePointer UniformConstant 39 +41(texSampler1D): 40(ptr) Variable UniformConstant + 53: TypeImage 8(float) 2D sampled format:Unknown + 54: TypeSampledImage 53 + 55: TypePointer UniformConstant 54 +56(texSampler2D): 55(ptr) Variable UniformConstant + 58: TypeVector 8(float) 2 + 59: TypePointer Input 58(fvec2) + 60(coords2D): 59(ptr) Variable Input + 71: TypePointer Output 34(fvec4) +72(gl_FragColor): 71(ptr) Variable Output + 74: TypePointer Input 34(fvec4) + 75(u): 74(ptr) Variable Input + 77: TypePointer Input 8(float) + 78(blend): 77(ptr) Variable Input + Line 1 23 11 5(main): 3 Function None 4 6: Label - 9(blendscale): 8(ptr) Variable Function - 11(bias): 8(ptr) Variable Function - 13(coords1D): 8(ptr) Variable Function - 16(color): 15(ptr) Variable Function - Line 1 13 0 - Store 9(blendscale) 10 - Line 1 14 0 - Store 11(bias) 12 - Line 1 15 0 - Store 13(coords1D) 10 - Line 1 16 0 - Store 16(color) 18 + 27(blendscale): 9(ptr) Variable Function + 29(param): 9(ptr) Variable Function + 31(bias): 9(ptr) Variable Function + 33(coords1D): 9(ptr) Variable Function + 36(color): 35(ptr) Variable Function + Line 1 25 0 + Store 29(param) 28 + 30: 8(float) FunctionCall 12(myAbs(f1;) 29(param) + Store 27(blendscale) 30 + Line 1 26 0 + Store 31(bias) 32 + Line 1 27 0 + Store 33(coords1D) 28 + Line 1 28 0 + Store 36(color) 37 Line 1 54 0 - 23: 20 Load 22(texSampler1D) - 24: 7(float) Load 13(coords1D) - 25: 14(fvec4) ImageSampleImplicitLod 23 24 - 26: 14(fvec4) Load 16(color) - 27: 14(fvec4) FAdd 26 25 - Store 16(color) 27 + 42: 39 Load 41(texSampler1D) + 43: 8(float) Load 33(coords1D) + 44: 34(fvec4) ImageSampleImplicitLod 42 43 + 45: 34(fvec4) Load 36(color) + 46: 34(fvec4) FAdd 45 44 + Store 36(color) 46 Line 1 55 0 - 28: 20 Load 22(texSampler1D) - 29: 7(float) Load 13(coords1D) - 30: 7(float) Load 11(bias) - 31: 14(fvec4) ImageSampleImplicitLod 28 29 Bias 30 - 32: 14(fvec4) Load 16(color) - 33: 14(fvec4) FAdd 32 31 - Store 16(color) 33 + 47: 39 Load 41(texSampler1D) + 48: 8(float) Load 33(coords1D) + 49: 8(float) Load 31(bias) + 50: 34(fvec4) ImageSampleImplicitLod 47 48 Bias 49 + 51: 34(fvec4) Load 36(color) + 52: 34(fvec4) FAdd 51 50 + Store 36(color) 52 Line 1 103 0 - 38: 35 Load 37(texSampler2D) - 42: 39(fvec2) Load 41(coords2D) - 43: 14(fvec4) ImageSampleImplicitLod 38 42 - 44: 14(fvec4) Load 16(color) - 45: 14(fvec4) FAdd 44 43 - Store 16(color) 45 + 57: 54 Load 56(texSampler2D) + 61: 58(fvec2) Load 60(coords2D) + 62: 34(fvec4) ImageSampleImplicitLod 57 61 + 63: 34(fvec4) Load 36(color) + 64: 34(fvec4) FAdd 63 62 + Store 36(color) 64 Line 1 104 0 - 46: 35 Load 37(texSampler2D) - 47: 39(fvec2) Load 41(coords2D) - 48: 7(float) Load 11(bias) - 49: 14(fvec4) ImageSampleImplicitLod 46 47 Bias 48 - 50: 14(fvec4) Load 16(color) - 51: 14(fvec4) FAdd 50 49 - Store 16(color) 51 + 65: 54 Load 56(texSampler2D) + 66: 58(fvec2) Load 60(coords2D) + 67: 8(float) Load 31(bias) + 68: 34(fvec4) ImageSampleImplicitLod 65 66 Bias 67 + 69: 34(fvec4) Load 36(color) + 70: 34(fvec4) FAdd 69 68 + Store 36(color) 70 Line 1 106 0 - 54: 14(fvec4) Load 16(color) - 57: 14(fvec4) Load 56(u) - 60: 7(float) Load 59(blend) - 61: 7(float) Load 9(blendscale) - 62: 7(float) FMul 60 61 - 63: 14(fvec4) CompositeConstruct 62 62 62 62 - 64: 14(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 54 57 63 - Store 53(gl_FragColor) 64 + 73: 34(fvec4) Load 36(color) + 76: 34(fvec4) Load 75(u) + 79: 8(float) Load 78(blend) + 80: 8(float) Load 27(blendscale) + 81: 8(float) FMul 79 80 + 82: 34(fvec4) CompositeConstruct 81 81 81 81 + 83: 34(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 73 76 82 + Store 72(gl_FragColor) 83 + Line 1 107 0 Return FunctionEnd + Line 7 1 20 + 12(myAbs(f1;): 8(float) Function None 10 + 11(x): 9(ptr) FunctionParameter + 13: Label + Line 7 2 0 + 14: 8(float) Load 11(x) + 17: 16(bool) FOrdGreaterThan 14 15 + SelectionMerge 19 None + BranchConditional 17 18 22 + 18: Label + Line 7 3 0 + 20: 8(float) Load 11(x) + ReturnValue 20 + 22: Label + Line 7 6 0 + 23: 8(float) Load 11(x) + 24: 8(float) FNegate 23 + ReturnValue 24 + 19: Label + Unreachable + FunctionEnd diff --git a/Test/baseResults/spv.precise.tesc.out b/Test/baseResults/spv.precise.tesc.out index e13c612101..93d1d982e7 100644 --- a/Test/baseResults/spv.precise.tesc.out +++ b/Test/baseResults/spv.precise.tesc.out @@ -1,6 +1,6 @@ spv.precise.tesc // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 72 Capability Tessellation @@ -22,10 +22,10 @@ spv.precise.tesc Decorate 12(in_te_position) Location 0 Decorate 15(gl_InvocationID) BuiltIn InvocationId Decorate 20(in_tc_position) Location 0 - Decorate 30(gl_TessLevelInner) Patch Decorate 30(gl_TessLevelInner) BuiltIn TessLevelInner - Decorate 40(gl_TessLevelOuter) Patch + Decorate 30(gl_TessLevelInner) Patch Decorate 40(gl_TessLevelOuter) BuiltIn TessLevelOuter + Decorate 40(gl_TessLevelOuter) Patch Decorate 45(in_tc_tessParam) Location 1 Decorate 52 NoContraction Decorate 53 NoContraction diff --git a/Test/baseResults/spv.precise.tese.out b/Test/baseResults/spv.precise.tese.out index 7db4ed0141..d9b7141c17 100644 --- a/Test/baseResults/spv.precise.tese.out +++ b/Test/baseResults/spv.precise.tese.out @@ -1,6 +1,6 @@ spv.precise.tese // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 119 Capability Tessellation @@ -41,9 +41,9 @@ spv.precise.tese Decorate 101 NoContraction Decorate 106 NoContraction Decorate 109 NoContraction + Decorate 110(gl_PerVertex) Block MemberDecorate 110(gl_PerVertex) 0 BuiltIn Position MemberDecorate 110(gl_PerVertex) 1 BuiltIn PointSize - Decorate 110(gl_PerVertex) Block 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out index 1d31230fa5..0cdba71657 100644 --- a/Test/baseResults/spv.precision.frag.out +++ b/Test/baseResults/spv.precision.frag.out @@ -1,6 +1,6 @@ spv.precision.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 165 Capability Shader @@ -35,8 +35,8 @@ spv.precision.frag MemberName 117(S) 1 "b" Name 119 "s" Name 149 "gl_SampleMaskIn" - Decorate 12(foo(vf3;) RelaxedPrecision Decorate 11(mv3) RelaxedPrecision + Decorate 12(foo(vf3;) RelaxedPrecision Decorate 23(highfin) Location 2 Decorate 27 RelaxedPrecision Decorate 28 RelaxedPrecision @@ -99,8 +99,8 @@ spv.precision.frag Decorate 143 RelaxedPrecision Decorate 144 RelaxedPrecision Decorate 145 RelaxedPrecision - Decorate 149(gl_SampleMaskIn) Flat Decorate 149(gl_SampleMaskIn) BuiltIn SampleMask + Decorate 149(gl_SampleMaskIn) Flat Decorate 153 RelaxedPrecision Decorate 156 RelaxedPrecision Decorate 159 RelaxedPrecision diff --git a/Test/baseResults/spv.precisionArgs.frag.out b/Test/baseResults/spv.precisionArgs.frag.out index ae54a58aca..3cc72c36e6 100644 --- a/Test/baseResults/spv.precisionArgs.frag.out +++ b/Test/baseResults/spv.precisionArgs.frag.out @@ -1,6 +1,6 @@ spv.precisionArgs.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 83 Capability Shader @@ -40,8 +40,8 @@ spv.precisionArgs.frag Name 80 "param" Decorate 8(f) RelaxedPrecision Decorate 14(f) RelaxedPrecision - Decorate 20(retM(f1;) RelaxedPrecision Decorate 19(x) RelaxedPrecision + Decorate 20(retM(f1;) RelaxedPrecision Decorate 26(retHM(f1;) RelaxedPrecision Decorate 28(x) RelaxedPrecision Decorate 31 RelaxedPrecision diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out index c4cd1eb7b6..d082bee044 100644 --- a/Test/baseResults/spv.precisionNonESSamp.frag.out +++ b/Test/baseResults/spv.precisionNonESSamp.frag.out @@ -1,6 +1,6 @@ spv.precisionNonESSamp.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 47 Capability Shader @@ -23,22 +23,22 @@ spv.precisionNonESSamp.frag Decorate 9(color) RelaxedPrecision Decorate 9(color) Location 0 Decorate 13(s) RelaxedPrecision - Decorate 13(s) DescriptorSet 0 Decorate 13(s) Binding 0 + Decorate 13(s) DescriptorSet 0 Decorate 14 RelaxedPrecision Decorate 17(v2) RelaxedPrecision Decorate 17(v2) Location 0 Decorate 18 RelaxedPrecision Decorate 19 RelaxedPrecision - Decorate 23(t) DescriptorSet 0 Decorate 23(t) Binding 1 + Decorate 23(t) DescriptorSet 0 Decorate 27(v3) RelaxedPrecision Decorate 27(v3) Location 1 Decorate 28 RelaxedPrecision Decorate 31(vi1) RelaxedPrecision Decorate 34(i1) RelaxedPrecision - Decorate 34(i1) DescriptorSet 0 Decorate 34(i1) Binding 2 + Decorate 34(i1) DescriptorSet 0 Decorate 35 RelaxedPrecision Decorate 39(iv2) RelaxedPrecision Decorate 39(iv2) Flat @@ -46,8 +46,8 @@ spv.precisionNonESSamp.frag Decorate 40 RelaxedPrecision Decorate 41 RelaxedPrecision Decorate 42(vi2) RelaxedPrecision - Decorate 43(i2) DescriptorSet 0 Decorate 43(i2) Binding 3 + Decorate 43(i2) DescriptorSet 0 Decorate 45 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.precisionTexture.frag.out b/Test/baseResults/spv.precisionTexture.frag.out index d5e21b6c91..19aa656444 100644 --- a/Test/baseResults/spv.precisionTexture.frag.out +++ b/Test/baseResults/spv.precisionTexture.frag.out @@ -1,6 +1,6 @@ spv.precisionTexture.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 66 Capability Shader @@ -20,28 +20,28 @@ spv.precisionTexture.frag Name 65 "fragColor" Decorate 9(v) RelaxedPrecision Decorate 13(texM) RelaxedPrecision - Decorate 13(texM) DescriptorSet 0 Decorate 13(texM) Binding 0 + Decorate 13(texM) DescriptorSet 0 Decorate 14 RelaxedPrecision Decorate 16(vertex) Location 0 Decorate 20 RelaxedPrecision - Decorate 21(texH) DescriptorSet 0 Decorate 21(texH) Binding 1 + Decorate 21(texH) DescriptorSet 0 Decorate 26 RelaxedPrecision Decorate 34 RelaxedPrecision Decorate 41 RelaxedPrecision Decorate 45 RelaxedPrecision Decorate 52(imageM) RelaxedPrecision - Decorate 52(imageM) DescriptorSet 0 - Decorate 52(imageM) Binding 0 Decorate 52(imageM) NonWritable + Decorate 52(imageM) Binding 0 + Decorate 52(imageM) DescriptorSet 0 Decorate 53 RelaxedPrecision Decorate 57(coord) Flat Decorate 57(coord) Location 1 Decorate 59 RelaxedPrecision - Decorate 60(imageH) DescriptorSet 0 - Decorate 60(imageH) Binding 1 Decorate 60(imageH) NonWritable + Decorate 60(imageH) Binding 1 + Decorate 60(imageH) DescriptorSet 0 Decorate 65(fragColor) RelaxedPrecision Decorate 65(fragColor) Location 0 2: TypeVoid diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out index 5fd6b3798c..b1f2d5e409 100644 --- a/Test/baseResults/spv.prepost.frag.out +++ b/Test/baseResults/spv.prepost.frag.out @@ -1,6 +1,6 @@ spv.prepost.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 94 Capability Shader diff --git a/Test/baseResults/spv.privateVariableTypes.frag.out b/Test/baseResults/spv.privateVariableTypes.frag.out index d5ad68abb7..b09062a83e 100644 --- a/Test/baseResults/spv.privateVariableTypes.frag.out +++ b/Test/baseResults/spv.privateVariableTypes.frag.out @@ -1,6 +1,6 @@ spv.privateVariableTypes.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader diff --git a/Test/baseResults/spv.pushConstant.vert.out b/Test/baseResults/spv.pushConstant.vert.out index 888d134bea..cd8250028e 100644 --- a/Test/baseResults/spv.pushConstant.vert.out +++ b/Test/baseResults/spv.pushConstant.vert.out @@ -1,6 +1,6 @@ spv.pushConstant.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 35 Capability Shader @@ -15,9 +15,9 @@ spv.pushConstant.vert Name 13 "matInst" Name 24 "color" Decorate 10 ArrayStride 4 + Decorate 11(Material) Block MemberDecorate 11(Material) 0 Offset 0 MemberDecorate 11(Material) 1 Offset 4 - Decorate 11(Material) Block Decorate 24(color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.pushConstantAnon.vert.out b/Test/baseResults/spv.pushConstantAnon.vert.out index 75efdbc1b4..eddb77a9a1 100644 --- a/Test/baseResults/spv.pushConstantAnon.vert.out +++ b/Test/baseResults/spv.pushConstantAnon.vert.out @@ -1,6 +1,6 @@ spv.pushConstantAnon.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 38 Capability Shader @@ -15,9 +15,9 @@ spv.pushConstantAnon.vert Name 13 "" Name 24 "color" Decorate 10 ArrayStride 4 + Decorate 11(Material) Block MemberDecorate 11(Material) 0 Offset 0 MemberDecorate 11(Material) 1 Offset 4 - Decorate 11(Material) Block Decorate 24(color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out index 4180e17653..0f0f347a87 100644 --- a/Test/baseResults/spv.qualifiers.vert.out +++ b/Test/baseResults/spv.qualifiers.vert.out @@ -1,6 +1,6 @@ spv.qualifiers.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 21 Capability Shader diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out index 1e38661656..1b3c63ecd5 100644 --- a/Test/baseResults/spv.queryL.frag.out +++ b/Test/baseResults/spv.queryL.frag.out @@ -1,7 +1,7 @@ spv.queryL.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 224 Capability Shader @@ -41,46 +41,46 @@ Validation failed Name 182 "usampCubeA" Name 219 "sampBuf" Name 223 "sampRect" - Decorate 13(samp1D) DescriptorSet 0 Decorate 13(samp1D) Binding 0 - Decorate 23(isamp2D) DescriptorSet 0 + Decorate 13(samp1D) DescriptorSet 0 Decorate 23(isamp2D) Binding 1 - Decorate 34(usamp3D) DescriptorSet 0 + Decorate 23(isamp2D) DescriptorSet 0 Decorate 34(usamp3D) Binding 4 - Decorate 46(sampCube) DescriptorSet 0 + Decorate 34(usamp3D) DescriptorSet 0 Decorate 46(sampCube) Binding 5 - Decorate 55(isamp1DA) DescriptorSet 0 + Decorate 46(sampCube) DescriptorSet 0 Decorate 55(isamp1DA) Binding 7 - Decorate 64(usamp2DA) DescriptorSet 0 + Decorate 55(isamp1DA) DescriptorSet 0 Decorate 64(usamp2DA) Binding 9 - Decorate 73(isampCubeA) DescriptorSet 0 + Decorate 64(usamp2DA) DescriptorSet 0 Decorate 73(isampCubeA) Binding 10 - Decorate 82(samp1Ds) DescriptorSet 0 + Decorate 73(isampCubeA) DescriptorSet 0 Decorate 82(samp1Ds) Binding 12 - Decorate 91(samp2Ds) DescriptorSet 0 + Decorate 82(samp1Ds) DescriptorSet 0 Decorate 91(samp2Ds) Binding 13 - Decorate 100(sampCubes) DescriptorSet 0 + Decorate 91(samp2Ds) DescriptorSet 0 Decorate 100(sampCubes) Binding 14 - Decorate 109(samp1DAs) DescriptorSet 0 + Decorate 100(sampCubes) DescriptorSet 0 Decorate 109(samp1DAs) Binding 15 - Decorate 118(samp2DAs) DescriptorSet 0 + Decorate 109(samp1DAs) DescriptorSet 0 Decorate 118(samp2DAs) Binding 16 - Decorate 127(sampCubeAs) DescriptorSet 0 + Decorate 118(samp2DAs) DescriptorSet 0 Decorate 127(sampCubeAs) Binding 17 - Decorate 141(usamp2D) DescriptorSet 0 + Decorate 127(sampCubeAs) DescriptorSet 0 Decorate 141(usamp2D) Binding 2 - Decorate 150(isamp3D) DescriptorSet 0 + Decorate 141(usamp2D) DescriptorSet 0 Decorate 150(isamp3D) Binding 3 - Decorate 159(isampCube) DescriptorSet 0 + Decorate 150(isamp3D) DescriptorSet 0 Decorate 159(isampCube) Binding 6 - Decorate 173(samp2DA) DescriptorSet 0 + Decorate 159(isampCube) DescriptorSet 0 Decorate 173(samp2DA) Binding 8 - Decorate 182(usampCubeA) DescriptorSet 0 + Decorate 173(samp2DA) DescriptorSet 0 Decorate 182(usampCubeA) Binding 11 - Decorate 219(sampBuf) DescriptorSet 0 + Decorate 182(usampCubeA) DescriptorSet 0 Decorate 219(sampBuf) Binding 0 - Decorate 223(sampRect) DescriptorSet 0 + Decorate 219(sampBuf) DescriptorSet 0 Decorate 223(sampRect) Binding 0 + Decorate 223(sampRect) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.queueFamilyScope.comp.out b/Test/baseResults/spv.queueFamilyScope.comp.out index 9c239df2d9..565269c45c 100644 --- a/Test/baseResults/spv.queueFamilyScope.comp.out +++ b/Test/baseResults/spv.queueFamilyScope.comp.out @@ -1,6 +1,6 @@ spv.queueFamilyScope.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 21 Capability Shader @@ -16,10 +16,10 @@ spv.queueFamilyScope.comp Name 7 "Buffer" MemberName 7(Buffer) 0 "a" Name 9 "A" - MemberDecorate 7(Buffer) 0 Offset 0 Decorate 7(Buffer) Block - Decorate 9(A) DescriptorSet 0 + MemberDecorate 7(Buffer) 0 Offset 0 Decorate 9(A) Binding 0 + Decorate 9(A) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.rankShift.comp.out b/Test/baseResults/spv.rankShift.comp.out index 1a725c13f3..a091ec1bdc 100644 --- a/Test/baseResults/spv.rankShift.comp.out +++ b/Test/baseResults/spv.rankShift.comp.out @@ -1,6 +1,6 @@ spv.rankShift.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 33 Capability Shader @@ -16,11 +16,11 @@ spv.rankShift.comp Name 11 "arg0" Name 15 "arg1" Decorate 11(arg0) Location 4 - Decorate 11(arg0) DescriptorSet 0 Decorate 11(arg0) Binding 0 + Decorate 11(arg0) DescriptorSet 0 Decorate 15(arg1) Location 5 - Decorate 15(arg1) DescriptorSet 0 Decorate 15(arg1) Binding 1 + Decorate 15(arg1) DescriptorSet 0 Decorate 32 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.register.autoassign-2.frag.out b/Test/baseResults/spv.register.autoassign-2.frag.out index 26b149b802..a921f10dd8 100644 --- a/Test/baseResults/spv.register.autoassign-2.frag.out +++ b/Test/baseResults/spv.register.autoassign-2.frag.out @@ -1,6 +1,6 @@ spv.register.autoassign-2.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 47 Capability Shader @@ -20,12 +20,12 @@ spv.register.autoassign-2.frag Name 39 "psout" Name 40 "param" Name 44 "psout.Color" - Decorate 18(g_tScene[0]) DescriptorSet 0 Decorate 18(g_tScene[0]) Binding 10 - Decorate 22(g_tSamp) DescriptorSet 0 + Decorate 18(g_tScene[0]) DescriptorSet 0 Decorate 22(g_tSamp) Binding 5 - Decorate 31(g_tScene[1]) DescriptorSet 0 + Decorate 22(g_tSamp) DescriptorSet 0 Decorate 31(g_tScene[1]) Binding 11 + Decorate 31(g_tScene[1]) DescriptorSet 0 Decorate 44(psout.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.register.autoassign.frag.out b/Test/baseResults/spv.register.autoassign.frag.out index e347ce21d8..be86a861ea 100644 --- a/Test/baseResults/spv.register.autoassign.frag.out +++ b/Test/baseResults/spv.register.autoassign.frag.out @@ -1,6 +1,6 @@ spv.register.autoassign.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 155 Capability Shader @@ -44,47 +44,47 @@ spv.register.autoassign.frag Name 141 "psout" Name 151 "@entryPointOutput.Color" Name 154 "g_tTex_unused3" - Decorate 21(g_tTex1) DescriptorSet 0 Decorate 21(g_tTex1) Binding 11 - Decorate 25(g_sSamp1) DescriptorSet 0 + Decorate 21(g_tTex1) DescriptorSet 0 Decorate 25(g_sSamp1) Binding 5 - Decorate 31(g_tTex2) DescriptorSet 0 + Decorate 25(g_sSamp1) DescriptorSet 0 Decorate 31(g_tTex2) Binding 14 - Decorate 33(g_sSamp2) DescriptorSet 0 + Decorate 31(g_tTex2) DescriptorSet 0 Decorate 33(g_sSamp2) Binding 6 - Decorate 43(g_tTex3) DescriptorSet 0 + Decorate 33(g_sSamp2) DescriptorSet 0 Decorate 43(g_tTex3) Binding 13 - Decorate 50(g_sSamp3) DescriptorSet 0 + Decorate 43(g_tTex3) DescriptorSet 0 Decorate 50(g_sSamp3) Binding 7 - Decorate 68(g_tTex4) DescriptorSet 0 + Decorate 50(g_sSamp3) DescriptorSet 0 Decorate 68(g_tTex4) Binding 15 - Decorate 73(g_sSamp4) DescriptorSet 0 + Decorate 68(g_tTex4) DescriptorSet 0 Decorate 73(g_sSamp4) Binding 8 - Decorate 88(g_tTex5) DescriptorSet 0 + Decorate 73(g_sSamp4) DescriptorSet 0 Decorate 88(g_tTex5) Binding 16 - Decorate 90(g_sSamp5) DescriptorSet 0 + Decorate 88(g_tTex5) DescriptorSet 0 Decorate 90(g_sSamp5) Binding 9 + Decorate 90(g_sSamp5) DescriptorSet 0 MemberDecorate 97(MyStruct_t) 0 Offset 0 MemberDecorate 97(MyStruct_t) 1 Offset 4 MemberDecorate 97(MyStruct_t) 2 Offset 16 + Decorate 99($Global) Block MemberDecorate 99($Global) 0 Offset 0 MemberDecorate 99($Global) 1 Offset 32 MemberDecorate 99($Global) 2 Offset 48 MemberDecorate 99($Global) 3 Offset 64 - Decorate 99($Global) Block - Decorate 101 DescriptorSet 0 Decorate 101 Binding 20 - Decorate 123(g_tTex_unused1) DescriptorSet 0 + Decorate 101 DescriptorSet 0 Decorate 123(g_tTex_unused1) Binding 10 - Decorate 125(g_sSamp_unused1) DescriptorSet 0 + Decorate 123(g_tTex_unused1) DescriptorSet 0 Decorate 125(g_sSamp_unused1) Binding 0 - Decorate 130(g_tTex_unused2) DescriptorSet 0 + Decorate 125(g_sSamp_unused1) DescriptorSet 0 Decorate 130(g_tTex_unused2) Binding 12 - Decorate 132(g_sSamp_unused2) DescriptorSet 0 + Decorate 130(g_tTex_unused2) DescriptorSet 0 Decorate 132(g_sSamp_unused2) Binding 0 + Decorate 132(g_sSamp_unused2) DescriptorSet 0 Decorate 151(@entryPointOutput.Color) Location 0 - Decorate 154(g_tTex_unused3) DescriptorSet 0 Decorate 154(g_tTex_unused3) Binding 0 + Decorate 154(g_tTex_unused3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.register.autoassign.rangetest.frag.out b/Test/baseResults/spv.register.autoassign.rangetest.frag.out index 4381dababd..b8e257378a 100644 --- a/Test/baseResults/spv.register.autoassign.rangetest.frag.out +++ b/Test/baseResults/spv.register.autoassign.rangetest.frag.out @@ -3,7 +3,7 @@ INTERNAL ERROR: mapped binding out of range: g_tSamp INTERNAL ERROR: mapped binding out of range: g_tScene // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 52 Capability Shader @@ -22,10 +22,10 @@ INTERNAL ERROR: mapped binding out of range: g_tScene Name 44 "psout" Name 45 "param" Name 49 "psout.Color" - Decorate 21(g_tScene) DescriptorSet 0 Decorate 21(g_tScene) Binding 5 - Decorate 27(g_tSamp) DescriptorSet 0 + Decorate 21(g_tScene) DescriptorSet 0 Decorate 27(g_tSamp) Binding 5 + Decorate 27(g_tSamp) DescriptorSet 0 Decorate 49(psout.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.register.noautoassign.frag.out b/Test/baseResults/spv.register.noautoassign.frag.out index ed8d507535..8b2c29cb34 100644 --- a/Test/baseResults/spv.register.noautoassign.frag.out +++ b/Test/baseResults/spv.register.noautoassign.frag.out @@ -1,6 +1,6 @@ spv.register.noautoassign.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 155 Capability Shader @@ -44,47 +44,47 @@ spv.register.noautoassign.frag Name 141 "psout" Name 151 "@entryPointOutput.Color" Name 154 "g_tTex_unused3" - Decorate 21(g_tTex1) DescriptorSet 0 Decorate 21(g_tTex1) Binding 11 - Decorate 25(g_sSamp1) DescriptorSet 0 + Decorate 21(g_tTex1) DescriptorSet 0 Decorate 25(g_sSamp1) Binding 5 - Decorate 31(g_tTex2) DescriptorSet 0 + Decorate 25(g_sSamp1) DescriptorSet 0 Decorate 31(g_tTex2) Binding 0 - Decorate 33(g_sSamp2) DescriptorSet 0 + Decorate 31(g_tTex2) DescriptorSet 0 Decorate 33(g_sSamp2) Binding 0 - Decorate 43(g_tTex3) DescriptorSet 0 + Decorate 33(g_sSamp2) DescriptorSet 0 Decorate 43(g_tTex3) Binding 13 - Decorate 50(g_sSamp3) DescriptorSet 0 + Decorate 43(g_tTex3) DescriptorSet 0 Decorate 50(g_sSamp3) Binding 7 - Decorate 68(g_tTex4) DescriptorSet 0 + Decorate 50(g_sSamp3) DescriptorSet 0 Decorate 68(g_tTex4) Binding 0 - Decorate 73(g_sSamp4) DescriptorSet 0 + Decorate 68(g_tTex4) DescriptorSet 0 Decorate 73(g_sSamp4) Binding 0 - Decorate 88(g_tTex5) DescriptorSet 0 + Decorate 73(g_sSamp4) DescriptorSet 0 Decorate 88(g_tTex5) Binding 0 - Decorate 90(g_sSamp5) DescriptorSet 0 + Decorate 88(g_tTex5) DescriptorSet 0 Decorate 90(g_sSamp5) Binding 0 + Decorate 90(g_sSamp5) DescriptorSet 0 MemberDecorate 97(MyStruct_t) 0 Offset 0 MemberDecorate 97(MyStruct_t) 1 Offset 4 MemberDecorate 97(MyStruct_t) 2 Offset 16 + Decorate 99($Global) Block MemberDecorate 99($Global) 0 Offset 0 MemberDecorate 99($Global) 1 Offset 32 MemberDecorate 99($Global) 2 Offset 48 MemberDecorate 99($Global) 3 Offset 64 - Decorate 99($Global) Block - Decorate 101 DescriptorSet 0 Decorate 101 Binding 0 - Decorate 123(g_tTex_unused1) DescriptorSet 0 + Decorate 101 DescriptorSet 0 Decorate 123(g_tTex_unused1) Binding 10 - Decorate 125(g_sSamp_unused1) DescriptorSet 0 + Decorate 123(g_tTex_unused1) DescriptorSet 0 Decorate 125(g_sSamp_unused1) Binding 0 - Decorate 130(g_tTex_unused2) DescriptorSet 0 + Decorate 125(g_sSamp_unused1) DescriptorSet 0 Decorate 130(g_tTex_unused2) Binding 12 - Decorate 132(g_sSamp_unused2) DescriptorSet 0 + Decorate 130(g_tTex_unused2) DescriptorSet 0 Decorate 132(g_sSamp_unused2) Binding 0 + Decorate 132(g_sSamp_unused2) DescriptorSet 0 Decorate 151(@entryPointOutput.Color) Location 0 - Decorate 154(g_tTex_unused3) DescriptorSet 0 Decorate 154(g_tTex_unused3) Binding 0 + Decorate 154(g_tTex_unused3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.register.subpass.frag.out b/Test/baseResults/spv.register.subpass.frag.out index acd447d6c0..c20f59621f 100644 --- a/Test/baseResults/spv.register.subpass.frag.out +++ b/Test/baseResults/spv.register.subpass.frag.out @@ -1,6 +1,6 @@ spv.register.subpass.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 40 Capability Shader @@ -19,14 +19,14 @@ spv.register.subpass.frag Name 29 "result73" Name 30 "subpass_2" Name 38 "@entryPointOutput" - Decorate 15(subpass_f4) DescriptorSet 0 Decorate 15(subpass_f4) Binding 21 + Decorate 15(subpass_f4) DescriptorSet 0 Decorate 15(subpass_f4) InputAttachmentIndex 1 - Decorate 25(subpass_ms_f4) DescriptorSet 0 Decorate 25(subpass_ms_f4) Binding 20 + Decorate 25(subpass_ms_f4) DescriptorSet 0 Decorate 25(subpass_ms_f4) InputAttachmentIndex 4 - Decorate 30(subpass_2) DescriptorSet 0 Decorate 30(subpass_2) Binding 22 + Decorate 30(subpass_2) DescriptorSet 0 Decorate 30(subpass_2) InputAttachmentIndex 7 Decorate 38(@entryPointOutput) Location 0 2: TypeVoid diff --git a/Test/baseResults/spv.replicate.comp.out b/Test/baseResults/spv.replicate.comp.out new file mode 100644 index 0000000000..965b37b5b7 --- /dev/null +++ b/Test/baseResults/spv.replicate.comp.out @@ -0,0 +1,117 @@ +spv.replicate.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 66 + + Capability Shader + Capability VulkanMemoryModelKHR + Capability CooperativeMatrixKHR + Capability CapabilityReplicatedCompositesEXT + Extension "SPV_EXT_replicated_composites" + Extension "SPV_KHR_cooperative_matrix" + Extension "SPV_KHR_vulkan_memory_model" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical VulkanKHR + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_spec_constant_composites" + SourceExtension "GL_KHR_cooperative_matrix" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 13 "coop" + Name 17 "a" + Name 21 "v" + Name 28 "m" + Name 33 "five" + Name 35 "six" + Name 39 "arr" + Name 44 "arr2" + Name 49 "S" + MemberName 49(S) 0 "a" + MemberName 49(S) 1 "b" + MemberName 49(S) 2 "c" + Name 51 "s2" + Name 54 "SS" + MemberName 54(SS) 0 "s1" + MemberName 54(SS) 1 "s2" + Name 56 "ss" + Decorate 61 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeInt 32 0 + 8: 7(int) Constant 3 + 9: 7(int) Constant 16 + 10: 7(int) Constant 0 + 11: TypeCooperativeMatrixKHR 6(float) 8 9 9 10 + 12: TypePointer Function 11 + 14: 6(float) Constant 1065353216 + 15: 11 ConstantCompositeReplicateEXT 14 + 16: TypePointer Function 6(float) + 18: 6(float) Constant 1073741824 + 19: TypeVector 6(float) 4 + 20: TypePointer Function 19(fvec4) + 24: 6(float) Constant 1077936128 + 25: 19(fvec4) ConstantCompositeReplicateEXT 24 + 26: TypeMatrix 19(fvec4) 4 + 27: TypePointer Function 26 + 31: TypeInt 32 1 + 32: TypePointer Function 31(int) + 34: 31(int) Constant 5 + 36: 31(int) Constant 6 + 37: TypeArray 31(int) 8 + 38: TypePointer Function 37 + 42: TypeArray 37 8 + 43: TypePointer Function 42 + 47: 37 ConstantCompositeReplicateEXT 34 + 48: 42 ConstantCompositeReplicateEXT 47 + 49(S): TypeStruct 31(int) 31(int) 31(int) + 50: TypePointer Function 49(S) + 54(SS): TypeStruct 49(S) 49(S) + 55: TypePointer Function 54(SS) + 59: TypeVector 7(int) 3 + 60: 7(int) Constant 1 + 61: 59(ivec3) ConstantCompositeReplicateEXT 60 + 62: 49(S) ConstantCompositeReplicateEXT 36 + 63: 54(SS) ConstantCompositeReplicateEXT 62 + 64: 26 ConstantCompositeReplicateEXT 25 + 65: 11 ConstantCompositeReplicateEXT 24 + 4(main): 2 Function None 3 + 5: Label + 13(coop): 12(ptr) Variable Function + 17(a): 16(ptr) Variable Function + 21(v): 20(ptr) Variable Function + 28(m): 27(ptr) Variable Function + 33(five): 32(ptr) Variable Function + 35(six): 32(ptr) Variable Function + 39(arr): 38(ptr) Variable Function + 44(arr2): 43(ptr) Variable Function + 51(s2): 50(ptr) Variable Function + 56(ss): 55(ptr) Variable Function + Store 13(coop) 15 + Store 17(a) 18 + 22: 6(float) Load 17(a) + 23: 19(fvec4) CompositeConstructReplicateEXT 22 + Store 21(v) 23 + Store 21(v) 25 + 29: 19(fvec4) Load 21(v) + 30: 26 CompositeConstructReplicateEXT 29 + Store 28(m) 30 + Store 33(five) 34 + Store 35(six) 36 + 40: 31(int) Load 33(five) + 41: 37 CompositeConstructReplicateEXT 40 + Store 39(arr) 41 + 45: 37 Load 39(arr) + 46: 42 CompositeConstructReplicateEXT 45 + Store 44(arr2) 46 + Store 44(arr2) 48 + 52: 31(int) Load 35(six) + 53: 49(S) CompositeConstructReplicateEXT 52 + Store 51(s2) 53 + 57: 49(S) Load 51(s2) + 58: 54(SS) CompositeConstructReplicateEXT 57 + Store 56(ss) 58 + Return + FunctionEnd diff --git a/Test/baseResults/spv.replicatespec.comp.out b/Test/baseResults/spv.replicatespec.comp.out new file mode 100644 index 0000000000..dd7157fedf --- /dev/null +++ b/Test/baseResults/spv.replicatespec.comp.out @@ -0,0 +1,132 @@ +spv.replicatespec.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 68 + + Capability Shader + Capability VulkanMemoryModelKHR + Capability CooperativeMatrixKHR + Capability CapabilityReplicatedCompositesEXT + Extension "SPV_EXT_replicated_composites" + Extension "SPV_KHR_cooperative_matrix" + Extension "SPV_KHR_vulkan_memory_model" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical VulkanKHR + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_spec_constant_composites" + SourceExtension "GL_KHR_cooperative_matrix" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 13 "coop" + Name 17 "a" + Name 21 "v" + Name 24 "spec_float" + Name 25 "cv" + Name 28 "m" + Name 33 "five" + Name 35 "six" + Name 39 "arr" + Name 44 "arr2" + Name 47 "cfive" + Name 48 "carr" + Name 49 "carr2" + Name 50 "S" + MemberName 50(S) 0 "a" + MemberName 50(S) 1 "b" + MemberName 50(S) 2 "c" + Name 52 "s2" + Name 55 "SS" + MemberName 55(SS) 0 "s1" + MemberName 55(SS) 1 "s2" + Name 57 "ss" + Name 63 "csix" + Name 64 "cs" + Name 65 "css" + Name 66 "cm" + Name 67 "ccoop" + Decorate 24(spec_float) SpecId 2 + Decorate 47(cfive) SpecId 0 + Decorate 62 BuiltIn WorkgroupSize + Decorate 63(csix) SpecId 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeInt 32 0 + 8: 7(int) Constant 3 + 9: 7(int) Constant 16 + 10: 7(int) Constant 0 + 11: TypeCooperativeMatrixKHR 6(float) 8 9 9 10 + 12: TypePointer Function 11 + 14: 6(float) Constant 1065353216 + 15: 11 ConstantCompositeReplicateEXT 14 + 16: TypePointer Function 6(float) + 18: 6(float) Constant 1073741824 + 19: TypeVector 6(float) 4 + 20: TypePointer Function 19(fvec4) + 24(spec_float): 6(float) SpecConstant 1077936128 + 25(cv): 19(fvec4) SpecConstantCompositeReplicateEXT 24(spec_float) + 26: TypeMatrix 19(fvec4) 4 + 27: TypePointer Function 26 + 31: TypeInt 32 1 + 32: TypePointer Function 31(int) + 34: 31(int) Constant 5 + 36: 31(int) Constant 6 + 37: TypeArray 31(int) 8 + 38: TypePointer Function 37 + 42: TypeArray 37 8 + 43: TypePointer Function 42 + 47(cfive): 31(int) SpecConstant 5 + 48(carr): 37 SpecConstantCompositeReplicateEXT 47(cfive) + 49(carr2): 42 SpecConstantCompositeReplicateEXT 48(carr) + 50(S): TypeStruct 31(int) 31(int) 31(int) + 51: TypePointer Function 50(S) + 55(SS): TypeStruct 50(S) 50(S) + 56: TypePointer Function 55(SS) + 60: TypeVector 7(int) 3 + 61: 7(int) Constant 1 + 62: 60(ivec3) ConstantCompositeReplicateEXT 61 + 63(csix): 31(int) SpecConstant 6 + 64(cs): 50(S) SpecConstantCompositeReplicateEXT 63(csix) + 65(css): 55(SS) SpecConstantCompositeReplicateEXT 64(cs) + 66(cm): 26 SpecConstantCompositeReplicateEXT 25(cv) + 67(ccoop): 11 SpecConstantCompositeReplicateEXT 24(spec_float) + 4(main): 2 Function None 3 + 5: Label + 13(coop): 12(ptr) Variable Function + 17(a): 16(ptr) Variable Function + 21(v): 20(ptr) Variable Function + 28(m): 27(ptr) Variable Function + 33(five): 32(ptr) Variable Function + 35(six): 32(ptr) Variable Function + 39(arr): 38(ptr) Variable Function + 44(arr2): 43(ptr) Variable Function + 52(s2): 51(ptr) Variable Function + 57(ss): 56(ptr) Variable Function + Store 13(coop) 15 + Store 17(a) 18 + 22: 6(float) Load 17(a) + 23: 19(fvec4) CompositeConstructReplicateEXT 22 + Store 21(v) 23 + Store 21(v) 25(cv) + 29: 19(fvec4) Load 21(v) + 30: 26 CompositeConstructReplicateEXT 29 + Store 28(m) 30 + Store 33(five) 34 + Store 35(six) 36 + 40: 31(int) Load 33(five) + 41: 37 CompositeConstructReplicateEXT 40 + Store 39(arr) 41 + 45: 37 Load 39(arr) + 46: 42 CompositeConstructReplicateEXT 45 + Store 44(arr2) 46 + Store 44(arr2) 49(carr2) + 53: 31(int) Load 35(six) + 54: 50(S) CompositeConstructReplicateEXT 53 + Store 52(s2) 54 + 58: 50(S) Load 52(s2) + 59: 55(SS) CompositeConstructReplicateEXT 58 + Store 57(ss) 59 + Return + FunctionEnd diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out index 27db3368a2..3dd60882d4 100644 --- a/Test/baseResults/spv.rw.autoassign.frag.out +++ b/Test/baseResults/spv.rw.autoassign.frag.out @@ -1,6 +1,6 @@ spv.rw.autoassign.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 45 Capability Shader @@ -21,10 +21,10 @@ spv.rw.autoassign.frag Name 27 "g_tBuf1du1" Name 33 "psout" Name 42 "@entryPointOutput.Color" - Decorate 16(g_tTex1df1) DescriptorSet 0 Decorate 16(g_tTex1df1) Binding 20 - Decorate 27(g_tBuf1du1) DescriptorSet 0 + Decorate 16(g_tTex1df1) DescriptorSet 0 Decorate 27(g_tBuf1du1) Binding 21 + Decorate 27(g_tBuf1du1) DescriptorSet 0 Decorate 42(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.sample.frag.out b/Test/baseResults/spv.sample.frag.out index f43fc98c47..631a55967c 100644 --- a/Test/baseResults/spv.sample.frag.out +++ b/Test/baseResults/spv.sample.frag.out @@ -1,6 +1,6 @@ spv.sample.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 13 Capability Shader diff --git a/Test/baseResults/spv.sampleId.frag.out b/Test/baseResults/spv.sampleId.frag.out index 8f9bc3874c..c4dda4a32d 100644 --- a/Test/baseResults/spv.sampleId.frag.out +++ b/Test/baseResults/spv.sampleId.frag.out @@ -1,6 +1,6 @@ spv.sampleId.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 26 Capability Shader @@ -14,8 +14,8 @@ spv.sampleId.frag Name 8 "gl_SampleID" Name 18 "color" Name 20 "samp" - Decorate 8(gl_SampleID) Flat Decorate 8(gl_SampleID) BuiltIn SampleId + Decorate 8(gl_SampleID) Flat Decorate 18(color) Location 0 Decorate 20(samp) Location 0 2: TypeVoid diff --git a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out index 9b401d880b..6f22c5ab39 100644 --- a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out +++ b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out @@ -1,6 +1,6 @@ spv.sampleMaskOverrideCoverage.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader diff --git a/Test/baseResults/spv.samplePosition.frag.out b/Test/baseResults/spv.samplePosition.frag.out index 80128303b5..6c98adddbc 100644 --- a/Test/baseResults/spv.samplePosition.frag.out +++ b/Test/baseResults/spv.samplePosition.frag.out @@ -1,6 +1,6 @@ spv.samplePosition.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 30 Capability Shader diff --git a/Test/baseResults/spv.sampledImageBlock.frag.out b/Test/baseResults/spv.sampledImageBlock.frag.out new file mode 100644 index 0000000000..a6625f7f0a --- /dev/null +++ b/Test/baseResults/spv.sampledImageBlock.frag.out @@ -0,0 +1,94 @@ +spv.sampledImageBlock.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 55 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 36 45 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "texel" + Name 12 "tex0" + Name 16 "samp0" + Name 21 "ParamBuffer" + MemberName 21(ParamBuffer) 0 "cond" + Name 23 "paramBuffer" + Name 36 "texCoord" + Name 45 "fragColor" + Decorate 12(tex0) Binding 0 + Decorate 12(tex0) DescriptorSet 0 + Decorate 16(samp0) Binding 1 + Decorate 16(samp0) DescriptorSet 0 + Decorate 21(ParamBuffer) Block + MemberDecorate 21(ParamBuffer) 0 Offset 0 + Decorate 23(paramBuffer) Binding 2 + Decorate 23(paramBuffer) DescriptorSet 0 + Decorate 36(texCoord) Flat + Decorate 36(texCoord) Location 0 + Decorate 45(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: TypePointer UniformConstant 10 + 12(tex0): 11(ptr) Variable UniformConstant + 14: TypeSampler + 15: TypePointer UniformConstant 14 + 16(samp0): 15(ptr) Variable UniformConstant + 18: TypeSampledImage 10 + 20: TypeInt 32 1 + 21(ParamBuffer): TypeStruct 20(int) + 22: TypePointer Uniform 21(ParamBuffer) + 23(paramBuffer): 22(ptr) Variable Uniform + 24: 20(int) Constant 0 + 25: TypePointer Uniform 20(int) + 28: TypeBool + 30: TypeVector 20(int) 2 + 31: TypePointer Function 30(ivec2) + 35: TypePointer Input 30(ivec2) + 36(texCoord): 35(ptr) Variable Input + 44: TypePointer Output 7(fvec4) + 45(fragColor): 44(ptr) Variable Output + 46: TypeVector 6(float) 3 + 49: 6(float) Constant 1065353216 + 4(main): 2 Function None 3 + 5: Label + 9(texel): 8(ptr) Variable Function + 32: 31(ptr) Variable Function + 13: 10 Load 12(tex0) + 17: 14 Load 16(samp0) + 19: 18 SampledImage 13 17 + 26: 25(ptr) AccessChain 23(paramBuffer) 24 + 27: 20(int) Load 26 + 29: 28(bool) IEqual 27 24 + SelectionMerge 34 None + BranchConditional 29 33 38 + 33: Label + 37: 30(ivec2) Load 36(texCoord) + Store 32 37 + Branch 34 + 38: Label + 39: 30(ivec2) Load 36(texCoord) + 40: 30(ivec2) VectorShuffle 39 39 1 0 + Store 32 40 + Branch 34 + 34: Label + 41: 30(ivec2) Load 32 + 54: 18 SampledImage 13 17 + 42: 10 Image 54 + 43: 7(fvec4) ImageFetch 42 41 Lod 24 + Store 9(texel) 43 + 47: 7(fvec4) Load 9(texel) + 48: 46(fvec3) VectorShuffle 47 47 0 1 2 + 50: 6(float) CompositeExtract 48 0 + 51: 6(float) CompositeExtract 48 1 + 52: 6(float) CompositeExtract 48 2 + 53: 7(fvec4) CompositeConstruct 50 51 52 49 + Store 45(fragColor) 53 + Return + FunctionEnd diff --git a/Test/baseResults/spv.samplerlessTextureFunctions.frag.out b/Test/baseResults/spv.samplerlessTextureFunctions.frag.out index c2c431df22..ef7b436264 100644 --- a/Test/baseResults/spv.samplerlessTextureFunctions.frag.out +++ b/Test/baseResults/spv.samplerlessTextureFunctions.frag.out @@ -1,6 +1,6 @@ spv.samplerlessTextureFunctions.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 51 Capability Shader @@ -25,12 +25,12 @@ spv.samplerlessTextureFunctions.frag Name 42 "bufSize" Name 45 "tex2DLevels" Name 48 "texMSSamples" - Decorate 12(tex2D) DescriptorSet 0 Decorate 12(tex2D) Binding 1 - Decorate 22(texMS) DescriptorSet 0 + Decorate 12(tex2D) DescriptorSet 0 Decorate 22(texMS) Binding 1 - Decorate 28(buf) DescriptorSet 0 + Decorate 22(texMS) DescriptorSet 0 Decorate 28(buf) Binding 0 + Decorate 28(buf) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.scalarlayout.frag.out b/Test/baseResults/spv.scalarlayout.frag.out index e08721f8b0..a99709d398 100644 --- a/Test/baseResults/spv.scalarlayout.frag.out +++ b/Test/baseResults/spv.scalarlayout.frag.out @@ -1,6 +1,6 @@ spv.scalarlayout.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader @@ -39,22 +39,22 @@ spv.scalarlayout.frag MemberDecorate 15(S) 4 Offset 28 MemberDecorate 15(S) 5 Offset 40 Decorate 16 ArrayStride 48 + Decorate 17(B1) Block MemberDecorate 17(B1) 0 Offset 0 MemberDecorate 17(B1) 1 Offset 4 MemberDecorate 17(B1) 2 Offset 12 MemberDecorate 17(B1) 3 Offset 24 MemberDecorate 17(B1) 4 ColMajor - MemberDecorate 17(B1) 4 Offset 32 MemberDecorate 17(B1) 4 MatrixStride 12 + MemberDecorate 17(B1) 4 Offset 32 MemberDecorate 17(B1) 5 ColMajor - MemberDecorate 17(B1) 5 Offset 56 MemberDecorate 17(B1) 5 MatrixStride 12 + MemberDecorate 17(B1) 5 Offset 56 MemberDecorate 17(B1) 6 Offset 104 MemberDecorate 17(B1) 7 Offset 112 MemberDecorate 17(B1) 8 Offset 160 - Decorate 17(B1) Block - Decorate 19 DescriptorSet 0 Decorate 19 Binding 0 + Decorate 19 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.scalarlayoutfloat16.frag.out b/Test/baseResults/spv.scalarlayoutfloat16.frag.out index 4f22730e3e..880786f306 100644 --- a/Test/baseResults/spv.scalarlayoutfloat16.frag.out +++ b/Test/baseResults/spv.scalarlayoutfloat16.frag.out @@ -1,6 +1,6 @@ spv.scalarlayoutfloat16.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader @@ -39,6 +39,7 @@ spv.scalarlayoutfloat16.frag MemberDecorate 13(S) 4 Offset 18 MemberDecorate 13(S) 5 Offset 24 Decorate 14 ArrayStride 32 + Decorate 15(B1) Block MemberDecorate 15(B1) 0 Offset 0 MemberDecorate 15(B1) 1 Offset 2 MemberDecorate 15(B1) 2 Offset 6 @@ -46,9 +47,8 @@ spv.scalarlayoutfloat16.frag MemberDecorate 15(B1) 4 Offset 16 MemberDecorate 15(B1) 5 Offset 24 MemberDecorate 15(B1) 6 Offset 56 - Decorate 15(B1) Block - Decorate 17 DescriptorSet 0 Decorate 17 Binding 0 + Decorate 17 DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 16 diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out index d31f8973ed..00d3282a35 100644 --- a/Test/baseResults/spv.separate.frag.out +++ b/Test/baseResults/spv.separate.frag.out @@ -1,7 +1,7 @@ spv.separate.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 319 Capability Shader @@ -57,84 +57,84 @@ Validation failed Name 293 "tex3D" Name 304 "tex2DRect" Decorate 11(color) Location 0 - Decorate 14(t2d) DescriptorSet 0 Decorate 14(t2d) Binding 2 - Decorate 18(s) DescriptorSet 0 + Decorate 14(t2d) DescriptorSet 0 Decorate 18(s) Binding 0 - Decorate 31(t3d) DescriptorSet 0 + Decorate 18(s) DescriptorSet 0 Decorate 31(t3d) Binding 3 + Decorate 31(t3d) DescriptorSet 0 Decorate 34(i) Flat Decorate 34(i) Location 0 - Decorate 41(sA) DescriptorSet 0 Decorate 41(sA) Binding 1 - Decorate 58(tex2D) DescriptorSet 0 + Decorate 41(sA) DescriptorSet 0 Decorate 58(tex2D) Binding 0 - Decorate 64(texCube) DescriptorSet 0 + Decorate 58(tex2D) DescriptorSet 0 Decorate 64(texCube) Binding 0 - Decorate 71(texCubeArray) DescriptorSet 0 + Decorate 64(texCube) DescriptorSet 0 Decorate 71(texCubeArray) Binding 0 - Decorate 77(sShadow) DescriptorSet 0 + Decorate 71(texCubeArray) DescriptorSet 0 Decorate 77(sShadow) Binding 0 - Decorate 84(itexCubeArray) DescriptorSet 0 + Decorate 77(sShadow) DescriptorSet 0 Decorate 84(itexCubeArray) Binding 0 - Decorate 91(utexCubeArray) DescriptorSet 0 + Decorate 84(itexCubeArray) DescriptorSet 0 Decorate 91(utexCubeArray) Binding 0 - Decorate 98(tex1DArray) DescriptorSet 0 + Decorate 91(utexCubeArray) DescriptorSet 0 Decorate 98(tex1DArray) Binding 0 - Decorate 105(itex1DArray) DescriptorSet 0 + Decorate 98(tex1DArray) DescriptorSet 0 Decorate 105(itex1DArray) Binding 0 - Decorate 112(utex1D) DescriptorSet 0 + Decorate 105(itex1DArray) DescriptorSet 0 Decorate 112(utex1D) Binding 0 - Decorate 119(itex1D) DescriptorSet 0 + Decorate 112(utex1D) DescriptorSet 0 Decorate 119(itex1D) Binding 0 - Decorate 126(utex1DArray) DescriptorSet 0 + Decorate 119(itex1D) DescriptorSet 0 Decorate 126(utex1DArray) Binding 0 - Decorate 133(texBuffer) DescriptorSet 0 + Decorate 126(utex1DArray) DescriptorSet 0 Decorate 133(texBuffer) Binding 0 - Decorate 145(tex2DArray) DescriptorSet 0 + Decorate 133(texBuffer) DescriptorSet 0 Decorate 145(tex2DArray) Binding 0 - Decorate 157(itex2D) DescriptorSet 0 + Decorate 145(tex2DArray) DescriptorSet 0 Decorate 157(itex2D) Binding 0 - Decorate 164(itex3D) DescriptorSet 0 + Decorate 157(itex2D) DescriptorSet 0 Decorate 164(itex3D) Binding 0 - Decorate 171(itexCube) DescriptorSet 0 + Decorate 164(itex3D) DescriptorSet 0 Decorate 171(itexCube) Binding 0 - Decorate 178(itex2DArray) DescriptorSet 0 + Decorate 171(itexCube) DescriptorSet 0 Decorate 178(itex2DArray) Binding 0 - Decorate 185(utex2D) DescriptorSet 0 + Decorate 178(itex2DArray) DescriptorSet 0 Decorate 185(utex2D) Binding 0 - Decorate 192(utex3D) DescriptorSet 0 + Decorate 185(utex2D) DescriptorSet 0 Decorate 192(utex3D) Binding 0 - Decorate 199(utexCube) DescriptorSet 0 + Decorate 192(utex3D) DescriptorSet 0 Decorate 199(utexCube) Binding 0 - Decorate 206(utex2DArray) DescriptorSet 0 + Decorate 199(utexCube) DescriptorSet 0 Decorate 206(utex2DArray) Binding 0 - Decorate 213(itex2DRect) DescriptorSet 0 + Decorate 206(utex2DArray) DescriptorSet 0 Decorate 213(itex2DRect) Binding 0 - Decorate 220(utex2DRect) DescriptorSet 0 + Decorate 213(itex2DRect) DescriptorSet 0 Decorate 220(utex2DRect) Binding 0 - Decorate 227(itexBuffer) DescriptorSet 0 + Decorate 220(utex2DRect) DescriptorSet 0 Decorate 227(itexBuffer) Binding 0 - Decorate 234(utexBuffer) DescriptorSet 0 + Decorate 227(itexBuffer) DescriptorSet 0 Decorate 234(utexBuffer) Binding 0 - Decorate 241(tex2DMS) DescriptorSet 0 + Decorate 234(utexBuffer) DescriptorSet 0 Decorate 241(tex2DMS) Binding 0 - Decorate 248(itex2DMS) DescriptorSet 0 + Decorate 241(tex2DMS) DescriptorSet 0 Decorate 248(itex2DMS) Binding 0 - Decorate 255(utex2DMS) DescriptorSet 0 + Decorate 248(itex2DMS) DescriptorSet 0 Decorate 255(utex2DMS) Binding 0 - Decorate 262(tex2DMSArray) DescriptorSet 0 + Decorate 255(utex2DMS) DescriptorSet 0 Decorate 262(tex2DMSArray) Binding 0 - Decorate 269(itex2DMSArray) DescriptorSet 0 + Decorate 262(tex2DMSArray) DescriptorSet 0 Decorate 269(itex2DMSArray) Binding 0 - Decorate 276(utex2DMSArray) DescriptorSet 0 + Decorate 269(itex2DMSArray) DescriptorSet 0 Decorate 276(utex2DMSArray) Binding 0 - Decorate 283(tex1D) DescriptorSet 0 + Decorate 276(utex2DMSArray) DescriptorSet 0 Decorate 283(tex1D) Binding 0 - Decorate 293(tex3D) DescriptorSet 0 + Decorate 283(tex1D) DescriptorSet 0 Decorate 293(tex3D) Binding 0 - Decorate 304(tex2DRect) DescriptorSet 0 + Decorate 293(tex3D) DescriptorSet 0 Decorate 304(tex2DRect) Binding 0 + Decorate 304(tex2DRect) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 8: TypeFloat 32 diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out index 245b4bd8d1..95c7cbdbf8 100644 --- a/Test/baseResults/spv.set.vert.out +++ b/Test/baseResults/spv.set.vert.out @@ -1,6 +1,6 @@ spv.set.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader @@ -15,12 +15,12 @@ spv.set.vert Name 12 "setBufInst" Name 21 "samp2D" Decorate 9(color) Location 0 - MemberDecorate 10(setBuf) 0 Offset 0 Decorate 10(setBuf) BufferBlock - Decorate 12(setBufInst) DescriptorSet 0 + MemberDecorate 10(setBuf) 0 Offset 0 Decorate 12(setBufInst) Binding 8 - Decorate 21(samp2D) DescriptorSet 4 + Decorate 12(setBufInst) DescriptorSet 0 Decorate 21(samp2D) Binding 7 + Decorate 21(samp2D) DescriptorSet 4 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out index 2a0106e661..da363e9c61 100644 --- a/Test/baseResults/spv.shaderBallot.comp.out +++ b/Test/baseResults/spv.shaderBallot.comp.out @@ -1,6 +1,6 @@ spv.shaderBallot.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 397 Capability Shader @@ -36,12 +36,12 @@ spv.shaderBallot.comp Decorate 36(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR Decorate 43(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR Decorate 50(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR + Decorate 72(Buffers) BufferBlock MemberDecorate 72(Buffers) 0 Offset 0 MemberDecorate 72(Buffers) 1 Offset 16 MemberDecorate 72(Buffers) 2 Offset 32 - Decorate 72(Buffers) BufferBlock - Decorate 75(data) DescriptorSet 0 Decorate 75(data) Binding 0 + Decorate 75(data) DescriptorSet 0 Decorate 396 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.shaderBallotAMD.comp.out b/Test/baseResults/spv.shaderBallotAMD.comp.out index 9ea5ba0046..a52f5b919b 100644 --- a/Test/baseResults/spv.shaderBallotAMD.comp.out +++ b/Test/baseResults/spv.shaderBallotAMD.comp.out @@ -1,6 +1,6 @@ spv.shaderBallotAMD.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 1343 Capability Shader @@ -33,6 +33,7 @@ spv.shaderBallotAMD.comp MemberName 21(Buffers) 7 "i16v" MemberName 21(Buffers) 8 "u16" Name 23 "" + Decorate 21(Buffers) BufferBlock MemberDecorate 21(Buffers) 0 Offset 0 MemberDecorate 21(Buffers) 1 Offset 8 MemberDecorate 21(Buffers) 2 Offset 16 @@ -42,9 +43,8 @@ spv.shaderBallotAMD.comp MemberDecorate 21(Buffers) 6 Offset 96 MemberDecorate 21(Buffers) 7 Offset 104 MemberDecorate 21(Buffers) 8 Offset 112 - Decorate 21(Buffers) BufferBlock - Decorate 23 DescriptorSet 0 Decorate 23 Binding 0 + Decorate 23 DescriptorSet 0 Decorate 1342 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.shaderDrawParams.vert.out b/Test/baseResults/spv.shaderDrawParams.vert.out index 5baabbf5ea..58b26cb4b7 100644 --- a/Test/baseResults/spv.shaderDrawParams.vert.out +++ b/Test/baseResults/spv.shaderDrawParams.vert.out @@ -1,6 +1,6 @@ spv.shaderDrawParams.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 53 Capability Shader @@ -26,17 +26,17 @@ spv.shaderDrawParams.vert Name 37 "gl_DrawIDARB" Decorate 9(gl_BaseVertexARB) BuiltIn BaseVertex Decorate 16(gl_BaseInstanceARB) BuiltIn BaseInstance + Decorate 27(gl_PerVertex) Block MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 27(gl_PerVertex) Block Decorate 31 ArrayStride 16 Decorate 33 ArrayStride 64 - MemberDecorate 34(Block) 0 Offset 0 Decorate 34(Block) Block - Decorate 36(block) DescriptorSet 0 + MemberDecorate 34(Block) 0 Offset 0 Decorate 36(block) Binding 0 + Decorate 36(block) DescriptorSet 0 Decorate 37(gl_DrawIDARB) BuiltIn DrawIndex 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.shaderFragMaskAMD.frag.out b/Test/baseResults/spv.shaderFragMaskAMD.frag.out index ab48e04e70..17f98d4585 100644 --- a/Test/baseResults/spv.shaderFragMaskAMD.frag.out +++ b/Test/baseResults/spv.shaderFragMaskAMD.frag.out @@ -1,6 +1,6 @@ spv.shaderFragMaskAMD.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 80 Capability Shader @@ -21,12 +21,12 @@ spv.shaderFragMaskAMD.frag Name 42 "is2DMSArray" Name 62 "usubpassMS" Name 78 "fragColor" - Decorate 18(s2DMS) DescriptorSet 0 Decorate 18(s2DMS) Binding 0 - Decorate 42(is2DMSArray) DescriptorSet 0 + Decorate 18(s2DMS) DescriptorSet 0 Decorate 42(is2DMSArray) Binding 1 - Decorate 62(usubpassMS) DescriptorSet 0 + Decorate 42(is2DMSArray) DescriptorSet 0 Decorate 62(usubpassMS) Binding 2 + Decorate 62(usubpassMS) DescriptorSet 0 Decorate 62(usubpassMS) InputAttachmentIndex 0 Decorate 78(fragColor) Location 0 2: TypeVoid diff --git a/Test/baseResults/spv.shaderGroupVote.comp.out b/Test/baseResults/spv.shaderGroupVote.comp.out index 4c45e33cf7..0a8c5a24ca 100644 --- a/Test/baseResults/spv.shaderGroupVote.comp.out +++ b/Test/baseResults/spv.shaderGroupVote.comp.out @@ -1,6 +1,6 @@ spv.shaderGroupVote.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 33 Capability Shader @@ -17,10 +17,10 @@ spv.shaderGroupVote.comp Name 10 "Buffers" MemberName 10(Buffers) 0 "b" Name 12 "" - MemberDecorate 10(Buffers) 0 Offset 0 Decorate 10(Buffers) BufferBlock - Decorate 12 DescriptorSet 0 + MemberDecorate 10(Buffers) 0 Offset 0 Decorate 12 Binding 0 + Decorate 12 DescriptorSet 0 Decorate 32 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.shaderImageFootprint.frag.out b/Test/baseResults/spv.shaderImageFootprint.frag.out index ea8873c421..0f87bcbb67 100644 --- a/Test/baseResults/spv.shaderImageFootprint.frag.out +++ b/Test/baseResults/spv.shaderImageFootprint.frag.out @@ -1,6 +1,6 @@ spv.shaderImageFootprint.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 622 Capability Shader @@ -66,17 +66,17 @@ spv.shaderImageFootprint.frag Name 478 "ResType" Name 528 "ResType" Name 577 "ResType" + Decorate 8(result2D) BufferBlock MemberDecorate 8(result2D) 0 Offset 0 MemberDecorate 8(result2D) 1 Offset 8 MemberDecorate 8(result2D) 2 Offset 16 MemberDecorate 8(result2D) 3 Offset 24 MemberDecorate 8(result2D) 4 Offset 32 MemberDecorate 8(result2D) 5 Offset 36 - Decorate 8(result2D) BufferBlock - Decorate 10 DescriptorSet 0 Decorate 10 Binding 2 - Decorate 17(sample2D) DescriptorSet 0 + Decorate 10 DescriptorSet 0 Decorate 17(sample2D) Binding 0 + Decorate 17(sample2D) DescriptorSet 0 Decorate 21(P2) Location 0 Decorate 24(granularity) Flat Decorate 24(granularity) Location 3 @@ -85,17 +85,17 @@ spv.shaderImageFootprint.frag Decorate 225(lod) Location 5 Decorate 275(dx) Location 6 Decorate 277(dy) Location 8 + Decorate 377(result3D) BufferBlock MemberDecorate 377(result3D) 0 Offset 0 MemberDecorate 377(result3D) 1 Offset 16 MemberDecorate 377(result3D) 2 Offset 32 MemberDecorate 377(result3D) 3 Offset 48 MemberDecorate 377(result3D) 4 Offset 56 MemberDecorate 377(result3D) 5 Offset 60 - Decorate 377(result3D) BufferBlock - Decorate 379 DescriptorSet 0 Decorate 379 Binding 3 - Decorate 383(sample3D) DescriptorSet 0 + Decorate 379 DescriptorSet 0 Decorate 383(sample3D) Binding 1 + Decorate 383(sample3D) DescriptorSet 0 Decorate 387(P3) Location 2 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.shaderStencilExport.frag.out b/Test/baseResults/spv.shaderStencilExport.frag.out index f73349c920..ca85473acc 100644 --- a/Test/baseResults/spv.shaderStencilExport.frag.out +++ b/Test/baseResults/spv.shaderStencilExport.frag.out @@ -1,6 +1,6 @@ spv.shaderStencilExport.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 10 Capability Shader @@ -10,6 +10,7 @@ spv.shaderStencilExport.frag MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 8 ExecutionMode 4 OriginUpperLeft + ExecutionMode 4 StencilRefReplacingEXT Source GLSL 450 SourceExtension "GL_ARB_shader_stencil_export" Name 4 "main" diff --git a/Test/baseResults/spv.shadingRate.frag.out b/Test/baseResults/spv.shadingRate.frag.out index 866ae60946..a05cbed15f 100644 --- a/Test/baseResults/spv.shadingRate.frag.out +++ b/Test/baseResults/spv.shadingRate.frag.out @@ -1,6 +1,6 @@ spv.shadingRate.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 21 Capability Shader @@ -18,11 +18,11 @@ spv.shadingRate.frag Name 17 "InvocationsPerPixel" Name 19 "gl_InvocationsPerPixelNV" Decorate 9(FragmentSize) Location 0 - Decorate 13(gl_FragmentSizeNV) Flat Decorate 13(gl_FragmentSizeNV) BuiltIn FragSizeEXT + Decorate 13(gl_FragmentSizeNV) Flat Decorate 17(InvocationsPerPixel) Location 2 - Decorate 19(gl_InvocationsPerPixelNV) Flat Decorate 19(gl_InvocationsPerPixelNV) BuiltIn FragInvocationCountEXT + Decorate 19(gl_InvocationsPerPixelNV) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.shiftOps.frag.out b/Test/baseResults/spv.shiftOps.frag.out index 03f7546727..6f232a0864 100644 --- a/Test/baseResults/spv.shiftOps.frag.out +++ b/Test/baseResults/spv.shiftOps.frag.out @@ -1,6 +1,6 @@ spv.shiftOps.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 38 Capability Shader diff --git a/Test/baseResults/spv.shortCircuit.frag.out b/Test/baseResults/spv.shortCircuit.frag.out index 3c706f7715..017c88d86d 100644 --- a/Test/baseResults/spv.shortCircuit.frag.out +++ b/Test/baseResults/spv.shortCircuit.frag.out @@ -1,6 +1,6 @@ spv.shortCircuit.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 147 Capability Shader diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out index bda91b7f23..8e879bbd5d 100644 --- a/Test/baseResults/spv.simpleFunctionCall.frag.out +++ b/Test/baseResults/spv.simpleFunctionCall.frag.out @@ -1,6 +1,6 @@ spv.simpleFunctionCall.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 19 Capability Shader diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out index cc9b2b2182..e1accbf6c1 100644 --- a/Test/baseResults/spv.simpleMat.vert.out +++ b/Test/baseResults/spv.simpleMat.vert.out @@ -2,7 +2,7 @@ spv.simpleMat.vert WARNING: 0:3: varying deprecated in version 130; may be removed in future release // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 39 Capability Shader diff --git a/Test/baseResults/spv.smBuiltins.frag.out b/Test/baseResults/spv.smBuiltins.frag.out index 3fafa04c75..dc6ce4eb3a 100644 --- a/Test/baseResults/spv.smBuiltins.frag.out +++ b/Test/baseResults/spv.smBuiltins.frag.out @@ -1,6 +1,6 @@ spv.smBuiltins.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader @@ -19,14 +19,14 @@ spv.smBuiltins.frag Name 15 "gl_WarpIDNV" Name 17 "gl_SMIDNV" Decorate 9(data) Location 0 - Decorate 11(gl_WarpsPerSMNV) Flat Decorate 11(gl_WarpsPerSMNV) BuiltIn WarpsPerSMNV - Decorate 13(gl_SMCountNV) Flat + Decorate 11(gl_WarpsPerSMNV) Flat Decorate 13(gl_SMCountNV) BuiltIn SMCountNV - Decorate 15(gl_WarpIDNV) Flat + Decorate 13(gl_SMCountNV) Flat Decorate 15(gl_WarpIDNV) BuiltIn WarpIDNV - Decorate 17(gl_SMIDNV) Flat + Decorate 15(gl_WarpIDNV) Flat Decorate 17(gl_SMIDNV) BuiltIn SMIDNV + Decorate 17(gl_SMIDNV) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.smBuiltins.vert.out b/Test/baseResults/spv.smBuiltins.vert.out index 91ad637e99..9d5d664f09 100644 --- a/Test/baseResults/spv.smBuiltins.vert.out +++ b/Test/baseResults/spv.smBuiltins.vert.out @@ -1,6 +1,6 @@ spv.smBuiltins.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 29 Capability Shader @@ -21,10 +21,10 @@ spv.smBuiltins.vert Name 22 "gl_WarpIDNV" Name 24 "gl_SMIDNV" Decorate 8 ArrayStride 16 - MemberDecorate 9(Output) 0 Offset 0 Decorate 9(Output) BufferBlock - Decorate 11 DescriptorSet 0 + MemberDecorate 9(Output) 0 Offset 0 Decorate 11 Binding 0 + Decorate 11 DescriptorSet 0 Decorate 15(gl_VertexIndex) BuiltIn VertexIndex Decorate 18(gl_WarpsPerSMNV) BuiltIn WarpsPerSMNV Decorate 20(gl_SMCountNV) BuiltIn SMCountNV diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out index bf44b81e00..0d7195332a 100644 --- a/Test/baseResults/spv.sparseTexture.frag.out +++ b/Test/baseResults/spv.sparseTexture.frag.out @@ -1,8 +1,8 @@ spv.sparseTexture.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 442 +// Generated by (magic number): 8000b +// Id's are bound by 434 Capability Shader Capability ImageGatherExtended @@ -12,7 +12,7 @@ Validation failed Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 33 48 89 397 409 427 + EntryPoint Fragment 4 "main" 33 48 89 389 401 419 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_ARB_sparse_texture2" @@ -38,52 +38,52 @@ Validation failed Name 154 "s2DArrayShadow" Name 188 "s2DMS" Name 228 "is2DArray" - Name 261 "sCubeShadow" - Name 294 "s2DRectShadow" - Name 394 "i2D" - Name 397 "ic2" - Name 406 "ii3D" - Name 409 "ic3" - Name 418 "i2DMS" - Name 427 "outColor" - Decorate 29(s2D) DescriptorSet 0 + Name 259 "sCubeShadow" + Name 288 "s2DRectShadow" + Name 386 "i2D" + Name 389 "ic2" + Name 398 "ii3D" + Name 401 "ic3" + Name 410 "i2DMS" + Name 419 "outColor" Decorate 29(s2D) Binding 0 + Decorate 29(s2D) DescriptorSet 0 Decorate 33(c2) Location 0 - Decorate 44(s3D) DescriptorSet 0 Decorate 44(s3D) Binding 1 + Decorate 44(s3D) DescriptorSet 0 Decorate 48(c3) Location 1 - Decorate 59(isCube) DescriptorSet 0 Decorate 59(isCube) Binding 8 - Decorate 71(s2DShadow) DescriptorSet 0 + Decorate 59(isCube) DescriptorSet 0 Decorate 71(s2DShadow) Binding 2 - Decorate 86(sCubeArrayShadow) DescriptorSet 0 + Decorate 71(s2DShadow) DescriptorSet 0 Decorate 86(sCubeArrayShadow) Binding 6 + Decorate 86(sCubeArrayShadow) DescriptorSet 0 Decorate 89(c4) Location 2 - Decorate 108(usCubeArray) DescriptorSet 0 Decorate 108(usCubeArray) Binding 10 - Decorate 140(us2DRect) DescriptorSet 0 + Decorate 108(usCubeArray) DescriptorSet 0 Decorate 140(us2DRect) Binding 11 - Decorate 154(s2DArrayShadow) DescriptorSet 0 + Decorate 140(us2DRect) DescriptorSet 0 Decorate 154(s2DArrayShadow) Binding 4 - Decorate 188(s2DMS) DescriptorSet 0 + Decorate 154(s2DArrayShadow) DescriptorSet 0 Decorate 188(s2DMS) Binding 7 - Decorate 228(is2DArray) DescriptorSet 0 + Decorate 188(s2DMS) DescriptorSet 0 Decorate 228(is2DArray) Binding 9 - Decorate 261(sCubeShadow) DescriptorSet 0 - Decorate 261(sCubeShadow) Binding 3 - Decorate 294(s2DRectShadow) DescriptorSet 0 - Decorate 294(s2DRectShadow) Binding 5 - Decorate 394(i2D) DescriptorSet 0 - Decorate 394(i2D) Binding 12 - Decorate 397(ic2) Flat - Decorate 397(ic2) Location 3 - Decorate 406(ii3D) DescriptorSet 0 - Decorate 406(ii3D) Binding 13 - Decorate 409(ic3) Flat - Decorate 409(ic3) Location 4 - Decorate 418(i2DMS) DescriptorSet 0 - Decorate 418(i2DMS) Binding 14 - Decorate 427(outColor) Location 0 + Decorate 228(is2DArray) DescriptorSet 0 + Decorate 259(sCubeShadow) Binding 3 + Decorate 259(sCubeShadow) DescriptorSet 0 + Decorate 288(s2DRectShadow) Binding 5 + Decorate 288(s2DRectShadow) DescriptorSet 0 + Decorate 386(i2D) Binding 12 + Decorate 386(i2D) DescriptorSet 0 + Decorate 389(ic2) Flat + Decorate 389(ic2) Location 3 + Decorate 398(ii3D) Binding 13 + Decorate 398(ii3D) DescriptorSet 0 + Decorate 401(ic3) Flat + Decorate 401(ic3) Location 4 + Decorate 410(i2DMS) Binding 14 + Decorate 410(i2DMS) DescriptorSet 0 + Decorate 419(outColor) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -173,51 +173,51 @@ Validation failed 232: 143(ivec2) ConstantComposite 231 231 240: 6(int) Constant 7 241: 143(ivec2) ConstantComposite 240 240 - 258: TypeImage 10(float) Cube depth sampled format:Unknown - 259: TypeSampledImage 258 - 260: TypePointer UniformConstant 259 -261(sCubeShadow): 260(ptr) Variable UniformConstant - 291: TypeImage 10(float) Rect depth sampled format:Unknown - 292: TypeSampledImage 291 - 293: TypePointer UniformConstant 292 -294(s2DRectShadow): 293(ptr) Variable UniformConstant - 299: 20(int) Constant 3 - 311: 143(ivec2) ConstantComposite 130 130 - 340: 143(ivec2) ConstantComposite 192 192 - 362: 20(int) Constant 4 - 363: TypeArray 143(ivec2) 362 - 364: 6(int) Constant 1 - 365: 143(ivec2) ConstantComposite 364 130 - 366: 143(ivec2) ConstantComposite 144 192 - 367: 6(int) Constant 15 - 368: 6(int) Constant 16 - 369: 143(ivec2) ConstantComposite 367 368 - 370: 6(int) Constant 4294967294 - 371: 143(ivec2) ConstantComposite 370 9 - 372: 363 ConstantComposite 365 366 369 371 - 392: TypeImage 10(float) 2D nonsampled format:Rgba32f - 393: TypePointer UniformConstant 392 - 394(i2D): 393(ptr) Variable UniformConstant - 396: TypePointer Input 143(ivec2) - 397(ic2): 396(ptr) Variable Input - 404: TypeImage 6(int) 3D nonsampled format:Rgba32i - 405: TypePointer UniformConstant 404 - 406(ii3D): 405(ptr) Variable UniformConstant - 408: TypePointer Input 129(ivec3) - 409(ic3): 408(ptr) Variable Input - 416: TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f - 417: TypePointer UniformConstant 416 - 418(i2DMS): 417(ptr) Variable UniformConstant - 426: TypePointer Output 11(fvec4) - 427(outColor): 426(ptr) Variable Output - 429: TypeBool + 256: TypeImage 10(float) Cube depth sampled format:Unknown + 257: TypeSampledImage 256 + 258: TypePointer UniformConstant 257 +259(sCubeShadow): 258(ptr) Variable UniformConstant + 285: TypeImage 10(float) Rect depth sampled format:Unknown + 286: TypeSampledImage 285 + 287: TypePointer UniformConstant 286 +288(s2DRectShadow): 287(ptr) Variable UniformConstant + 292: 20(int) Constant 3 + 303: 143(ivec2) ConstantComposite 130 130 + 332: 143(ivec2) ConstantComposite 192 192 + 354: 20(int) Constant 4 + 355: TypeArray 143(ivec2) 354 + 356: 6(int) Constant 1 + 357: 143(ivec2) ConstantComposite 356 130 + 358: 143(ivec2) ConstantComposite 144 192 + 359: 6(int) Constant 15 + 360: 6(int) Constant 16 + 361: 143(ivec2) ConstantComposite 359 360 + 362: 6(int) Constant 4294967294 + 363: 143(ivec2) ConstantComposite 362 9 + 364: 355 ConstantComposite 357 358 361 363 + 384: TypeImage 10(float) 2D nonsampled format:Rgba32f + 385: TypePointer UniformConstant 384 + 386(i2D): 385(ptr) Variable UniformConstant + 388: TypePointer Input 143(ivec2) + 389(ic2): 388(ptr) Variable Input + 396: TypeImage 6(int) 3D nonsampled format:Rgba32i + 397: TypePointer UniformConstant 396 + 398(ii3D): 397(ptr) Variable UniformConstant + 400: TypePointer Input 129(ivec3) + 401(ic3): 400(ptr) Variable Input + 408: TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f + 409: TypePointer UniformConstant 408 + 410(i2DMS): 409(ptr) Variable UniformConstant + 418: TypePointer Output 11(fvec4) + 419(outColor): 418(ptr) Variable Output + 421: TypeBool 4(main): 2 Function None 3 5: Label 8(resident): 7(ptr) Variable Function 13(texel): 12(ptr) Variable Function 18(itexel): 17(ptr) Variable Function 23(utexel): 22(ptr) Variable Function - 431: 12(ptr) Variable Function + 423: 12(ptr) Variable Function Store 8(resident) 9 Store 13(texel) 15 Store 18(itexel) 19 @@ -414,200 +414,192 @@ Validation failed Store 8(resident) 248 249: 42 Load 44(s3D) 250: 46(fvec3) Load 48(c3) - 251: 46(fvec3) Load 48(c3) - 252: 46(fvec3) Load 48(c3) - 253: 35(ResType) ImageSparseSampleExplicitLod 249 250 Grad 251 252 - 254: 11(fvec4) CompositeExtract 253 1 - Store 13(texel) 254 - 255: 6(int) CompositeExtract 253 0 - 256: 6(int) Load 8(resident) - 257: 6(int) BitwiseOr 256 255 - Store 8(resident) 257 - 262: 259 Load 261(sCubeShadow) - 263: 11(fvec4) Load 89(c4) - 264: 46(fvec3) Load 48(c3) - 265: 46(fvec3) Load 48(c3) - 266: 74(ptr) AccessChain 13(texel) 119 - 267: 10(float) CompositeExtract 263 3 - 268: 77(ResType) ImageSparseSampleDrefExplicitLod 262 263 267 Grad 264 265 - 269: 10(float) CompositeExtract 268 1 - Store 266 269 - 270: 6(int) CompositeExtract 268 0 - 271: 6(int) Load 8(resident) - 272: 6(int) BitwiseOr 271 270 - Store 8(resident) 272 - 273: 106 Load 108(usCubeArray) - 274: 11(fvec4) Load 89(c4) - 275: 46(fvec3) Load 48(c3) - 276: 46(fvec3) Load 48(c3) - 277:111(ResType) ImageSparseSampleExplicitLod 273 274 Grad 275 276 - 278: 21(ivec4) CompositeExtract 277 1 - Store 23(utexel) 278 - 279: 6(int) CompositeExtract 277 0 - 280: 6(int) Load 8(resident) - 281: 6(int) BitwiseOr 280 279 - Store 8(resident) 281 - 282: 27 Load 29(s2D) - 283: 31(fvec2) Load 33(c2) - 284: 31(fvec2) Load 33(c2) - 285: 31(fvec2) Load 33(c2) - 286: 35(ResType) ImageSparseSampleExplicitLod 282 283 Grad ConstOffset 284 285 158 - 287: 11(fvec4) CompositeExtract 286 1 - Store 13(texel) 287 - 288: 6(int) CompositeExtract 286 0 - 289: 6(int) Load 8(resident) - 290: 6(int) BitwiseOr 289 288 - Store 8(resident) 290 - 295: 292 Load 294(s2DRectShadow) - 296: 46(fvec3) Load 48(c3) - 297: 31(fvec2) Load 33(c2) - 298: 31(fvec2) Load 33(c2) - 300: 74(ptr) AccessChain 13(texel) 299 - 301: 10(float) CompositeExtract 296 2 - 302: 77(ResType) ImageSparseSampleDrefExplicitLod 295 296 301 Grad ConstOffset 297 298 232 - 303: 10(float) CompositeExtract 302 1 - Store 300 303 - 304: 6(int) CompositeExtract 302 0 - 305: 6(int) Load 8(resident) - 306: 6(int) BitwiseOr 305 304 - Store 8(resident) 306 - 307: 226 Load 228(is2DArray) - 308: 46(fvec3) Load 48(c3) - 309: 31(fvec2) Load 33(c2) + 251: 35(ResType) ImageSparseSampleExplicitLod 249 250 Grad 250 250 + 252: 11(fvec4) CompositeExtract 251 1 + Store 13(texel) 252 + 253: 6(int) CompositeExtract 251 0 + 254: 6(int) Load 8(resident) + 255: 6(int) BitwiseOr 254 253 + Store 8(resident) 255 + 260: 257 Load 259(sCubeShadow) + 261: 11(fvec4) Load 89(c4) + 262: 46(fvec3) Load 48(c3) + 263: 74(ptr) AccessChain 13(texel) 119 + 264: 10(float) CompositeExtract 261 3 + 265: 77(ResType) ImageSparseSampleDrefExplicitLod 260 261 264 Grad 262 262 + 266: 10(float) CompositeExtract 265 1 + Store 263 266 + 267: 6(int) CompositeExtract 265 0 + 268: 6(int) Load 8(resident) + 269: 6(int) BitwiseOr 268 267 + Store 8(resident) 269 + 270: 106 Load 108(usCubeArray) + 271: 11(fvec4) Load 89(c4) + 272: 46(fvec3) Load 48(c3) + 273:111(ResType) ImageSparseSampleExplicitLod 270 271 Grad 272 272 + 274: 21(ivec4) CompositeExtract 273 1 + Store 23(utexel) 274 + 275: 6(int) CompositeExtract 273 0 + 276: 6(int) Load 8(resident) + 277: 6(int) BitwiseOr 276 275 + Store 8(resident) 277 + 278: 27 Load 29(s2D) + 279: 31(fvec2) Load 33(c2) + 280: 35(ResType) ImageSparseSampleExplicitLod 278 279 Grad ConstOffset 279 279 158 + 281: 11(fvec4) CompositeExtract 280 1 + Store 13(texel) 281 + 282: 6(int) CompositeExtract 280 0 + 283: 6(int) Load 8(resident) + 284: 6(int) BitwiseOr 283 282 + Store 8(resident) 284 + 289: 286 Load 288(s2DRectShadow) + 290: 46(fvec3) Load 48(c3) + 291: 31(fvec2) Load 33(c2) + 293: 74(ptr) AccessChain 13(texel) 292 + 294: 10(float) CompositeExtract 290 2 + 295: 77(ResType) ImageSparseSampleDrefExplicitLod 289 290 294 Grad ConstOffset 291 291 232 + 296: 10(float) CompositeExtract 295 1 + Store 293 296 + 297: 6(int) CompositeExtract 295 0 + 298: 6(int) Load 8(resident) + 299: 6(int) BitwiseOr 298 297 + Store 8(resident) 299 + 300: 226 Load 228(is2DArray) + 301: 46(fvec3) Load 48(c3) + 302: 31(fvec2) Load 33(c2) + 304: 62(ResType) ImageSparseSampleExplicitLod 300 301 Grad ConstOffset 302 302 303 + 305: 16(ivec4) CompositeExtract 304 1 + Store 18(itexel) 305 + 306: 6(int) CompositeExtract 304 0 + 307: 6(int) Load 8(resident) + 308: 6(int) BitwiseOr 307 306 + Store 8(resident) 308 + 309: 27 Load 29(s2D) 310: 31(fvec2) Load 33(c2) - 312: 62(ResType) ImageSparseSampleExplicitLod 307 308 Grad ConstOffset 309 310 311 - 313: 16(ivec4) CompositeExtract 312 1 - Store 18(itexel) 313 - 314: 6(int) CompositeExtract 312 0 - 315: 6(int) Load 8(resident) - 316: 6(int) BitwiseOr 315 314 - Store 8(resident) 316 - 317: 27 Load 29(s2D) - 318: 31(fvec2) Load 33(c2) - 319: 35(ResType) ImageSparseGather 317 318 9 - 320: 11(fvec4) CompositeExtract 319 1 - Store 13(texel) 320 - 321: 6(int) CompositeExtract 319 0 - 322: 6(int) Load 8(resident) - 323: 6(int) BitwiseOr 322 321 - Store 8(resident) 323 - 324: 226 Load 228(is2DArray) - 325: 46(fvec3) Load 48(c3) - 326: 62(ResType) ImageSparseGather 324 325 130 - 327: 16(ivec4) CompositeExtract 326 1 - Store 18(itexel) 327 - 328: 6(int) CompositeExtract 326 0 - 329: 6(int) Load 8(resident) - 330: 6(int) BitwiseOr 329 328 - Store 8(resident) 330 - 331: 152 Load 154(s2DArrayShadow) - 332: 46(fvec3) Load 48(c3) - 333: 35(ResType) ImageSparseDrefGather 331 332 50 + 311: 35(ResType) ImageSparseGather 309 310 9 + 312: 11(fvec4) CompositeExtract 311 1 + Store 13(texel) 312 + 313: 6(int) CompositeExtract 311 0 + 314: 6(int) Load 8(resident) + 315: 6(int) BitwiseOr 314 313 + Store 8(resident) 315 + 316: 226 Load 228(is2DArray) + 317: 46(fvec3) Load 48(c3) + 318: 62(ResType) ImageSparseGather 316 317 130 + 319: 16(ivec4) CompositeExtract 318 1 + Store 18(itexel) 319 + 320: 6(int) CompositeExtract 318 0 + 321: 6(int) Load 8(resident) + 322: 6(int) BitwiseOr 321 320 + Store 8(resident) 322 + 323: 152 Load 154(s2DArrayShadow) + 324: 46(fvec3) Load 48(c3) + 325: 35(ResType) ImageSparseDrefGather 323 324 50 + 326: 11(fvec4) CompositeExtract 325 1 + Store 13(texel) 326 + 327: 6(int) CompositeExtract 325 0 + 328: 6(int) Load 8(resident) + 329: 6(int) BitwiseOr 328 327 + Store 8(resident) 329 + 330: 27 Load 29(s2D) + 331: 31(fvec2) Load 33(c2) + 333: 35(ResType) ImageSparseGather 330 331 9 ConstOffset 332 334: 11(fvec4) CompositeExtract 333 1 Store 13(texel) 334 335: 6(int) CompositeExtract 333 0 336: 6(int) Load 8(resident) 337: 6(int) BitwiseOr 336 335 Store 8(resident) 337 - 338: 27 Load 29(s2D) - 339: 31(fvec2) Load 33(c2) - 341: 35(ResType) ImageSparseGather 338 339 9 ConstOffset 340 - 342: 11(fvec4) CompositeExtract 341 1 - Store 13(texel) 342 - 343: 6(int) CompositeExtract 341 0 - 344: 6(int) Load 8(resident) - 345: 6(int) BitwiseOr 344 343 - Store 8(resident) 345 - 346: 226 Load 228(is2DArray) - 347: 46(fvec3) Load 48(c3) - 348: 62(ResType) ImageSparseGather 346 347 130 ConstOffset 158 - 349: 16(ivec4) CompositeExtract 348 1 - Store 18(itexel) 349 - 350: 6(int) CompositeExtract 348 0 - 351: 6(int) Load 8(resident) - 352: 6(int) BitwiseOr 351 350 - Store 8(resident) 352 - 353: 292 Load 294(s2DRectShadow) - 354: 31(fvec2) Load 33(c2) - 355: 35(ResType) ImageSparseDrefGather 353 354 50 ConstOffset 241 - 356: 11(fvec4) CompositeExtract 355 1 - Store 13(texel) 356 - 357: 6(int) CompositeExtract 355 0 - 358: 6(int) Load 8(resident) - 359: 6(int) BitwiseOr 358 357 - Store 8(resident) 359 - 360: 27 Load 29(s2D) - 361: 31(fvec2) Load 33(c2) - 373: 35(ResType) ImageSparseGather 360 361 9 ConstOffsets 372 - 374: 11(fvec4) CompositeExtract 373 1 - Store 13(texel) 374 - 375: 6(int) CompositeExtract 373 0 - 376: 6(int) Load 8(resident) - 377: 6(int) BitwiseOr 376 375 - Store 8(resident) 377 - 378: 226 Load 228(is2DArray) - 379: 46(fvec3) Load 48(c3) - 380: 62(ResType) ImageSparseGather 378 379 130 ConstOffsets 372 - 381: 16(ivec4) CompositeExtract 380 1 - Store 18(itexel) 381 - 382: 6(int) CompositeExtract 380 0 - 383: 6(int) Load 8(resident) - 384: 6(int) BitwiseOr 383 382 - Store 8(resident) 384 - 385: 292 Load 294(s2DRectShadow) - 386: 31(fvec2) Load 33(c2) - 387: 35(ResType) ImageSparseDrefGather 385 386 50 ConstOffsets 372 - 388: 11(fvec4) CompositeExtract 387 1 - Store 13(texel) 388 - 389: 6(int) CompositeExtract 387 0 - 390: 6(int) Load 8(resident) - 391: 6(int) BitwiseOr 390 389 - Store 8(resident) 391 - 395: 392 Load 394(i2D) - 398: 143(ivec2) Load 397(ic2) - 399: 35(ResType) ImageSparseRead 395 398 - 400: 11(fvec4) CompositeExtract 399 1 - Store 13(texel) 400 - 401: 6(int) CompositeExtract 399 0 - 402: 6(int) Load 8(resident) - 403: 6(int) BitwiseOr 402 401 - Store 8(resident) 403 - 407: 404 Load 406(ii3D) - 410: 129(ivec3) Load 409(ic3) - 411: 62(ResType) ImageSparseRead 407 410 - 412: 16(ivec4) CompositeExtract 411 1 - Store 18(itexel) 412 - 413: 6(int) CompositeExtract 411 0 - 414: 6(int) Load 8(resident) - 415: 6(int) BitwiseOr 414 413 - Store 8(resident) 415 - 419: 416 Load 418(i2DMS) - 420: 143(ivec2) Load 397(ic2) - 421: 35(ResType) ImageSparseRead 419 420 Sample 144 - 422: 11(fvec4) CompositeExtract 421 1 - Store 13(texel) 422 - 423: 6(int) CompositeExtract 421 0 - 424: 6(int) Load 8(resident) - 425: 6(int) BitwiseOr 424 423 - Store 8(resident) 425 - 428: 6(int) Load 8(resident) - 430: 429(bool) ImageSparseTexelsResident 428 - SelectionMerge 433 None - BranchConditional 430 432 435 - 432: Label - 434: 11(fvec4) Load 13(texel) - Store 431 434 - Branch 433 - 435: Label - 436: 16(ivec4) Load 18(itexel) - 437: 11(fvec4) ConvertSToF 436 - 438: 21(ivec4) Load 23(utexel) - 439: 11(fvec4) ConvertUToF 438 - 440: 11(fvec4) FAdd 437 439 - Store 431 440 - Branch 433 - 433: Label - 441: 11(fvec4) Load 431 - Store 427(outColor) 441 + 338: 226 Load 228(is2DArray) + 339: 46(fvec3) Load 48(c3) + 340: 62(ResType) ImageSparseGather 338 339 130 ConstOffset 158 + 341: 16(ivec4) CompositeExtract 340 1 + Store 18(itexel) 341 + 342: 6(int) CompositeExtract 340 0 + 343: 6(int) Load 8(resident) + 344: 6(int) BitwiseOr 343 342 + Store 8(resident) 344 + 345: 286 Load 288(s2DRectShadow) + 346: 31(fvec2) Load 33(c2) + 347: 35(ResType) ImageSparseDrefGather 345 346 50 ConstOffset 241 + 348: 11(fvec4) CompositeExtract 347 1 + Store 13(texel) 348 + 349: 6(int) CompositeExtract 347 0 + 350: 6(int) Load 8(resident) + 351: 6(int) BitwiseOr 350 349 + Store 8(resident) 351 + 352: 27 Load 29(s2D) + 353: 31(fvec2) Load 33(c2) + 365: 35(ResType) ImageSparseGather 352 353 9 ConstOffsets 364 + 366: 11(fvec4) CompositeExtract 365 1 + Store 13(texel) 366 + 367: 6(int) CompositeExtract 365 0 + 368: 6(int) Load 8(resident) + 369: 6(int) BitwiseOr 368 367 + Store 8(resident) 369 + 370: 226 Load 228(is2DArray) + 371: 46(fvec3) Load 48(c3) + 372: 62(ResType) ImageSparseGather 370 371 130 ConstOffsets 364 + 373: 16(ivec4) CompositeExtract 372 1 + Store 18(itexel) 373 + 374: 6(int) CompositeExtract 372 0 + 375: 6(int) Load 8(resident) + 376: 6(int) BitwiseOr 375 374 + Store 8(resident) 376 + 377: 286 Load 288(s2DRectShadow) + 378: 31(fvec2) Load 33(c2) + 379: 35(ResType) ImageSparseDrefGather 377 378 50 ConstOffsets 364 + 380: 11(fvec4) CompositeExtract 379 1 + Store 13(texel) 380 + 381: 6(int) CompositeExtract 379 0 + 382: 6(int) Load 8(resident) + 383: 6(int) BitwiseOr 382 381 + Store 8(resident) 383 + 387: 384 Load 386(i2D) + 390: 143(ivec2) Load 389(ic2) + 391: 35(ResType) ImageSparseRead 387 390 + 392: 11(fvec4) CompositeExtract 391 1 + Store 13(texel) 392 + 393: 6(int) CompositeExtract 391 0 + 394: 6(int) Load 8(resident) + 395: 6(int) BitwiseOr 394 393 + Store 8(resident) 395 + 399: 396 Load 398(ii3D) + 402: 129(ivec3) Load 401(ic3) + 403: 62(ResType) ImageSparseRead 399 402 + 404: 16(ivec4) CompositeExtract 403 1 + Store 18(itexel) 404 + 405: 6(int) CompositeExtract 403 0 + 406: 6(int) Load 8(resident) + 407: 6(int) BitwiseOr 406 405 + Store 8(resident) 407 + 411: 408 Load 410(i2DMS) + 412: 143(ivec2) Load 389(ic2) + 413: 35(ResType) ImageSparseRead 411 412 Sample 144 + 414: 11(fvec4) CompositeExtract 413 1 + Store 13(texel) 414 + 415: 6(int) CompositeExtract 413 0 + 416: 6(int) Load 8(resident) + 417: 6(int) BitwiseOr 416 415 + Store 8(resident) 417 + 420: 6(int) Load 8(resident) + 422: 421(bool) ImageSparseTexelsResident 420 + SelectionMerge 425 None + BranchConditional 422 424 427 + 424: Label + 426: 11(fvec4) Load 13(texel) + Store 423 426 + Branch 425 + 427: Label + 428: 16(ivec4) Load 18(itexel) + 429: 11(fvec4) ConvertSToF 428 + 430: 21(ivec4) Load 23(utexel) + 431: 11(fvec4) ConvertUToF 430 + 432: 11(fvec4) FAdd 429 431 + Store 423 432 + Branch 425 + 425: Label + 433: 11(fvec4) Load 423 + Store 419(outColor) 433 Return FunctionEnd diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out index f42326d465..5ea7dc4c1e 100644 --- a/Test/baseResults/spv.sparseTextureClamp.frag.out +++ b/Test/baseResults/spv.sparseTextureClamp.frag.out @@ -1,8 +1,8 @@ spv.sparseTextureClamp.frag Validation failed // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 360 +// Generated by (magic number): 8000b +// Id's are bound by 344 Capability Shader Capability SampledRect @@ -11,7 +11,7 @@ Validation failed Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 33 36 51 95 345 + EntryPoint Fragment 4 "main" 33 36 51 95 329 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_ARB_sparse_texture_clamp" @@ -35,38 +35,38 @@ Validation failed Name 154 "us2DRect" Name 161 "ResType" Name 170 "s2DArrayShadow" - Name 218 "sCubeShadow" - Name 235 "usCubeArray" - Name 286 "s2DRectShadow" - Name 305 "is2DArray" - Name 345 "outColor" - Decorate 29(s2D) DescriptorSet 0 + Name 216 "sCubeShadow" + Name 232 "usCubeArray" + Name 276 "s2DRectShadow" + Name 294 "is2DArray" + Name 329 "outColor" Decorate 29(s2D) Binding 0 + Decorate 29(s2D) DescriptorSet 0 Decorate 33(c2) Location 0 Decorate 36(lodClamp) Location 3 - Decorate 47(s3D) DescriptorSet 0 Decorate 47(s3D) Binding 1 + Decorate 47(s3D) DescriptorSet 0 Decorate 51(c3) Location 1 - Decorate 63(isCube) DescriptorSet 0 Decorate 63(isCube) Binding 7 - Decorate 76(s2DShadow) DescriptorSet 0 + Decorate 63(isCube) DescriptorSet 0 Decorate 76(s2DShadow) Binding 2 - Decorate 92(sCubeArrayShadow) DescriptorSet 0 + Decorate 76(s2DShadow) DescriptorSet 0 Decorate 92(sCubeArrayShadow) Binding 6 + Decorate 92(sCubeArrayShadow) DescriptorSet 0 Decorate 95(c4) Location 2 - Decorate 154(us2DRect) DescriptorSet 0 Decorate 154(us2DRect) Binding 10 - Decorate 170(s2DArrayShadow) DescriptorSet 0 + Decorate 154(us2DRect) DescriptorSet 0 Decorate 170(s2DArrayShadow) Binding 4 - Decorate 218(sCubeShadow) DescriptorSet 0 - Decorate 218(sCubeShadow) Binding 3 - Decorate 235(usCubeArray) DescriptorSet 0 - Decorate 235(usCubeArray) Binding 9 - Decorate 286(s2DRectShadow) DescriptorSet 0 - Decorate 286(s2DRectShadow) Binding 5 - Decorate 305(is2DArray) DescriptorSet 0 - Decorate 305(is2DArray) Binding 8 - Decorate 345(outColor) Location 0 + Decorate 170(s2DArrayShadow) DescriptorSet 0 + Decorate 216(sCubeShadow) Binding 3 + Decorate 216(sCubeShadow) DescriptorSet 0 + Decorate 232(usCubeArray) Binding 9 + Decorate 232(usCubeArray) DescriptorSet 0 + Decorate 276(s2DRectShadow) Binding 5 + Decorate 276(s2DRectShadow) DescriptorSet 0 + Decorate 294(is2DArray) Binding 8 + Decorate 294(is2DArray) DescriptorSet 0 + Decorate 329(outColor) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -139,37 +139,37 @@ Validation failed 173: 6(int) Constant 5 174: 157(ivec2) ConstantComposite 173 173 176: 20(int) Constant 2 - 215: TypeImage 10(float) Cube depth sampled format:Unknown - 216: TypeSampledImage 215 - 217: TypePointer UniformConstant 216 -218(sCubeShadow): 217(ptr) Variable UniformConstant - 224: 20(int) Constant 1 - 232: TypeImage 20(int) Cube array sampled format:Unknown - 233: TypeSampledImage 232 - 234: TypePointer UniformConstant 233 -235(usCubeArray): 234(ptr) Variable UniformConstant - 283: TypeImage 10(float) Rect depth sampled format:Unknown - 284: TypeSampledImage 283 - 285: TypePointer UniformConstant 284 -286(s2DRectShadow): 285(ptr) Variable UniformConstant - 291: 6(int) Constant 6 - 292: 157(ivec2) ConstantComposite 291 291 - 294: 20(int) Constant 3 - 302: TypeImage 6(int) 2D array sampled format:Unknown - 303: TypeSampledImage 302 - 304: TypePointer UniformConstant 303 - 305(is2DArray): 304(ptr) Variable UniformConstant - 310: 157(ivec2) ConstantComposite 143 143 - 344: TypePointer Output 11(fvec4) - 345(outColor): 344(ptr) Variable Output - 347: TypeBool + 213: TypeImage 10(float) Cube depth sampled format:Unknown + 214: TypeSampledImage 213 + 215: TypePointer UniformConstant 214 +216(sCubeShadow): 215(ptr) Variable UniformConstant + 221: 20(int) Constant 1 + 229: TypeImage 20(int) Cube array sampled format:Unknown + 230: TypeSampledImage 229 + 231: TypePointer UniformConstant 230 +232(usCubeArray): 231(ptr) Variable UniformConstant + 273: TypeImage 10(float) Rect depth sampled format:Unknown + 274: TypeSampledImage 273 + 275: TypePointer UniformConstant 274 +276(s2DRectShadow): 275(ptr) Variable UniformConstant + 280: 6(int) Constant 6 + 281: 157(ivec2) ConstantComposite 280 280 + 283: 20(int) Constant 3 + 291: TypeImage 6(int) 2D array sampled format:Unknown + 292: TypeSampledImage 291 + 293: TypePointer UniformConstant 292 + 294(is2DArray): 293(ptr) Variable UniformConstant + 298: 157(ivec2) ConstantComposite 143 143 + 328: TypePointer Output 11(fvec4) + 329(outColor): 328(ptr) Variable Output + 331: TypeBool 4(main): 2 Function None 3 5: Label 8(resident): 7(ptr) Variable Function 13(texel): 12(ptr) Variable Function 18(itexel): 17(ptr) Variable Function 23(utexel): 22(ptr) Variable Function - 349: 12(ptr) Variable Function + 333: 12(ptr) Variable Function Store 8(resident) 9 Store 13(texel) 15 Store 18(itexel) 19 @@ -325,158 +325,142 @@ Validation failed Store 204 203 205: 45 Load 47(s3D) 206: 49(fvec3) Load 51(c3) - 207: 49(fvec3) Load 51(c3) - 208: 49(fvec3) Load 51(c3) - 209: 10(float) Load 36(lodClamp) - 210: 38(ResType) ImageSparseSampleExplicitLod 205 206 Grad MinLod 207 208 209 - 211: 11(fvec4) CompositeExtract 210 1 - Store 13(texel) 211 - 212: 6(int) CompositeExtract 210 0 - 213: 6(int) Load 8(resident) - 214: 6(int) BitwiseOr 213 212 - Store 8(resident) 214 - 219: 216 Load 218(sCubeShadow) - 220: 11(fvec4) Load 95(c4) - 221: 49(fvec3) Load 51(c3) - 222: 49(fvec3) Load 51(c3) - 223: 10(float) Load 36(lodClamp) - 225: 80(ptr) AccessChain 13(texel) 224 - 226: 10(float) CompositeExtract 220 3 - 227: 83(ResType) ImageSparseSampleDrefExplicitLod 219 220 226 Grad MinLod 221 222 223 - 228: 10(float) CompositeExtract 227 1 - Store 225 228 - 229: 6(int) CompositeExtract 227 0 - 230: 6(int) Load 8(resident) - 231: 6(int) BitwiseOr 230 229 - Store 8(resident) 231 - 236: 233 Load 235(usCubeArray) - 237: 11(fvec4) Load 95(c4) - 238: 49(fvec3) Load 51(c3) - 239: 49(fvec3) Load 51(c3) - 240: 10(float) Load 36(lodClamp) - 241:161(ResType) ImageSparseSampleExplicitLod 236 237 Grad MinLod 238 239 240 - 242: 21(ivec4) CompositeExtract 241 1 - Store 23(utexel) 242 - 243: 6(int) CompositeExtract 241 0 - 244: 6(int) Load 8(resident) - 245: 6(int) BitwiseOr 244 243 - Store 8(resident) 245 - 246: 45 Load 47(s3D) - 247: 49(fvec3) Load 51(c3) - 248: 49(fvec3) Load 51(c3) - 249: 49(fvec3) Load 51(c3) - 250: 10(float) Load 36(lodClamp) - 251: 11(fvec4) ImageSampleExplicitLod 246 247 Grad MinLod 248 249 250 - 252: 11(fvec4) Load 13(texel) - 253: 11(fvec4) FAdd 252 251 - Store 13(texel) 253 - 254: 216 Load 218(sCubeShadow) - 255: 11(fvec4) Load 95(c4) - 256: 49(fvec3) Load 51(c3) - 257: 49(fvec3) Load 51(c3) - 258: 10(float) Load 36(lodClamp) - 259: 10(float) CompositeExtract 255 3 - 260: 10(float) ImageSampleDrefExplicitLod 254 255 259 Grad MinLod 256 257 258 - 261: 80(ptr) AccessChain 13(texel) 224 - 262: 10(float) Load 261 - 263: 10(float) FAdd 262 260 - 264: 80(ptr) AccessChain 13(texel) 224 - Store 264 263 - 265: 233 Load 235(usCubeArray) - 266: 11(fvec4) Load 95(c4) - 267: 49(fvec3) Load 51(c3) - 268: 49(fvec3) Load 51(c3) - 269: 10(float) Load 36(lodClamp) - 270: 21(ivec4) ImageSampleExplicitLod 265 266 Grad MinLod 267 268 269 - 271: 21(ivec4) Load 23(utexel) - 272: 21(ivec4) IAdd 271 270 - Store 23(utexel) 272 - 273: 27 Load 29(s2D) - 274: 31(fvec2) Load 33(c2) - 275: 31(fvec2) Load 33(c2) - 276: 31(fvec2) Load 33(c2) - 277: 10(float) Load 36(lodClamp) - 278: 38(ResType) ImageSparseSampleExplicitLod 273 274 Grad ConstOffset MinLod 275 276 174 277 - 279: 11(fvec4) CompositeExtract 278 1 - Store 13(texel) 279 - 280: 6(int) CompositeExtract 278 0 - 281: 6(int) Load 8(resident) - 282: 6(int) BitwiseOr 281 280 - Store 8(resident) 282 - 287: 284 Load 286(s2DRectShadow) - 288: 49(fvec3) Load 51(c3) - 289: 31(fvec2) Load 33(c2) - 290: 31(fvec2) Load 33(c2) - 293: 10(float) Load 36(lodClamp) - 295: 80(ptr) AccessChain 13(texel) 294 - 296: 10(float) CompositeExtract 288 2 - 297: 83(ResType) ImageSparseSampleDrefExplicitLod 287 288 296 Grad ConstOffset MinLod 289 290 292 293 - 298: 10(float) CompositeExtract 297 1 - Store 295 298 - 299: 6(int) CompositeExtract 297 0 - 300: 6(int) Load 8(resident) - 301: 6(int) BitwiseOr 300 299 - Store 8(resident) 301 - 306: 303 Load 305(is2DArray) - 307: 49(fvec3) Load 51(c3) - 308: 31(fvec2) Load 33(c2) - 309: 31(fvec2) Load 33(c2) - 311: 10(float) Load 36(lodClamp) - 312: 67(ResType) ImageSparseSampleExplicitLod 306 307 Grad ConstOffset MinLod 308 309 310 311 - 313: 16(ivec4) CompositeExtract 312 1 - Store 18(itexel) 313 - 314: 6(int) CompositeExtract 312 0 - 315: 6(int) Load 8(resident) - 316: 6(int) BitwiseOr 315 314 - Store 8(resident) 316 - 317: 27 Load 29(s2D) - 318: 31(fvec2) Load 33(c2) - 319: 31(fvec2) Load 33(c2) - 320: 31(fvec2) Load 33(c2) - 321: 10(float) Load 36(lodClamp) - 322: 11(fvec4) ImageSampleExplicitLod 317 318 Grad ConstOffset MinLod 319 320 174 321 - 323: 11(fvec4) Load 13(texel) - 324: 11(fvec4) FAdd 323 322 - Store 13(texel) 324 - 325: 284 Load 286(s2DRectShadow) - 326: 49(fvec3) Load 51(c3) - 327: 31(fvec2) Load 33(c2) - 328: 31(fvec2) Load 33(c2) - 329: 10(float) Load 36(lodClamp) - 330: 10(float) CompositeExtract 326 2 - 331: 10(float) ImageSampleDrefExplicitLod 325 326 330 Grad ConstOffset MinLod 327 328 292 329 - 332: 80(ptr) AccessChain 13(texel) 294 - 333: 10(float) Load 332 - 334: 10(float) FAdd 333 331 - 335: 80(ptr) AccessChain 13(texel) 294 - Store 335 334 - 336: 303 Load 305(is2DArray) - 337: 49(fvec3) Load 51(c3) - 338: 31(fvec2) Load 33(c2) - 339: 31(fvec2) Load 33(c2) - 340: 10(float) Load 36(lodClamp) - 341: 16(ivec4) ImageSampleExplicitLod 336 337 Grad ConstOffset MinLod 338 339 310 340 - 342: 16(ivec4) Load 18(itexel) - 343: 16(ivec4) IAdd 342 341 - Store 18(itexel) 343 - 346: 6(int) Load 8(resident) - 348: 347(bool) ImageSparseTexelsResident 346 - SelectionMerge 351 None - BranchConditional 348 350 353 - 350: Label - 352: 11(fvec4) Load 13(texel) - Store 349 352 - Branch 351 - 353: Label - 354: 16(ivec4) Load 18(itexel) - 355: 11(fvec4) ConvertSToF 354 - 356: 21(ivec4) Load 23(utexel) - 357: 11(fvec4) ConvertUToF 356 - 358: 11(fvec4) FAdd 355 357 - Store 349 358 - Branch 351 - 351: Label - 359: 11(fvec4) Load 349 - Store 345(outColor) 359 + 207: 10(float) Load 36(lodClamp) + 208: 38(ResType) ImageSparseSampleExplicitLod 205 206 Grad MinLod 206 206 207 + 209: 11(fvec4) CompositeExtract 208 1 + Store 13(texel) 209 + 210: 6(int) CompositeExtract 208 0 + 211: 6(int) Load 8(resident) + 212: 6(int) BitwiseOr 211 210 + Store 8(resident) 212 + 217: 214 Load 216(sCubeShadow) + 218: 11(fvec4) Load 95(c4) + 219: 49(fvec3) Load 51(c3) + 220: 10(float) Load 36(lodClamp) + 222: 80(ptr) AccessChain 13(texel) 221 + 223: 10(float) CompositeExtract 218 3 + 224: 83(ResType) ImageSparseSampleDrefExplicitLod 217 218 223 Grad MinLod 219 219 220 + 225: 10(float) CompositeExtract 224 1 + Store 222 225 + 226: 6(int) CompositeExtract 224 0 + 227: 6(int) Load 8(resident) + 228: 6(int) BitwiseOr 227 226 + Store 8(resident) 228 + 233: 230 Load 232(usCubeArray) + 234: 11(fvec4) Load 95(c4) + 235: 49(fvec3) Load 51(c3) + 236: 10(float) Load 36(lodClamp) + 237:161(ResType) ImageSparseSampleExplicitLod 233 234 Grad MinLod 235 235 236 + 238: 21(ivec4) CompositeExtract 237 1 + Store 23(utexel) 238 + 239: 6(int) CompositeExtract 237 0 + 240: 6(int) Load 8(resident) + 241: 6(int) BitwiseOr 240 239 + Store 8(resident) 241 + 242: 45 Load 47(s3D) + 243: 49(fvec3) Load 51(c3) + 244: 10(float) Load 36(lodClamp) + 245: 11(fvec4) ImageSampleExplicitLod 242 243 Grad MinLod 243 243 244 + 246: 11(fvec4) Load 13(texel) + 247: 11(fvec4) FAdd 246 245 + Store 13(texel) 247 + 248: 214 Load 216(sCubeShadow) + 249: 11(fvec4) Load 95(c4) + 250: 49(fvec3) Load 51(c3) + 251: 10(float) Load 36(lodClamp) + 252: 10(float) CompositeExtract 249 3 + 253: 10(float) ImageSampleDrefExplicitLod 248 249 252 Grad MinLod 250 250 251 + 254: 80(ptr) AccessChain 13(texel) 221 + 255: 10(float) Load 254 + 256: 10(float) FAdd 255 253 + 257: 80(ptr) AccessChain 13(texel) 221 + Store 257 256 + 258: 230 Load 232(usCubeArray) + 259: 11(fvec4) Load 95(c4) + 260: 49(fvec3) Load 51(c3) + 261: 10(float) Load 36(lodClamp) + 262: 21(ivec4) ImageSampleExplicitLod 258 259 Grad MinLod 260 260 261 + 263: 21(ivec4) Load 23(utexel) + 264: 21(ivec4) IAdd 263 262 + Store 23(utexel) 264 + 265: 27 Load 29(s2D) + 266: 31(fvec2) Load 33(c2) + 267: 10(float) Load 36(lodClamp) + 268: 38(ResType) ImageSparseSampleExplicitLod 265 266 Grad ConstOffset MinLod 266 266 174 267 + 269: 11(fvec4) CompositeExtract 268 1 + Store 13(texel) 269 + 270: 6(int) CompositeExtract 268 0 + 271: 6(int) Load 8(resident) + 272: 6(int) BitwiseOr 271 270 + Store 8(resident) 272 + 277: 274 Load 276(s2DRectShadow) + 278: 49(fvec3) Load 51(c3) + 279: 31(fvec2) Load 33(c2) + 282: 10(float) Load 36(lodClamp) + 284: 80(ptr) AccessChain 13(texel) 283 + 285: 10(float) CompositeExtract 278 2 + 286: 83(ResType) ImageSparseSampleDrefExplicitLod 277 278 285 Grad ConstOffset MinLod 279 279 281 282 + 287: 10(float) CompositeExtract 286 1 + Store 284 287 + 288: 6(int) CompositeExtract 286 0 + 289: 6(int) Load 8(resident) + 290: 6(int) BitwiseOr 289 288 + Store 8(resident) 290 + 295: 292 Load 294(is2DArray) + 296: 49(fvec3) Load 51(c3) + 297: 31(fvec2) Load 33(c2) + 299: 10(float) Load 36(lodClamp) + 300: 67(ResType) ImageSparseSampleExplicitLod 295 296 Grad ConstOffset MinLod 297 297 298 299 + 301: 16(ivec4) CompositeExtract 300 1 + Store 18(itexel) 301 + 302: 6(int) CompositeExtract 300 0 + 303: 6(int) Load 8(resident) + 304: 6(int) BitwiseOr 303 302 + Store 8(resident) 304 + 305: 27 Load 29(s2D) + 306: 31(fvec2) Load 33(c2) + 307: 10(float) Load 36(lodClamp) + 308: 11(fvec4) ImageSampleExplicitLod 305 306 Grad ConstOffset MinLod 306 306 174 307 + 309: 11(fvec4) Load 13(texel) + 310: 11(fvec4) FAdd 309 308 + Store 13(texel) 310 + 311: 274 Load 276(s2DRectShadow) + 312: 49(fvec3) Load 51(c3) + 313: 31(fvec2) Load 33(c2) + 314: 10(float) Load 36(lodClamp) + 315: 10(float) CompositeExtract 312 2 + 316: 10(float) ImageSampleDrefExplicitLod 311 312 315 Grad ConstOffset MinLod 313 313 281 314 + 317: 80(ptr) AccessChain 13(texel) 283 + 318: 10(float) Load 317 + 319: 10(float) FAdd 318 316 + 320: 80(ptr) AccessChain 13(texel) 283 + Store 320 319 + 321: 292 Load 294(is2DArray) + 322: 49(fvec3) Load 51(c3) + 323: 31(fvec2) Load 33(c2) + 324: 10(float) Load 36(lodClamp) + 325: 16(ivec4) ImageSampleExplicitLod 321 322 Grad ConstOffset MinLod 323 323 298 324 + 326: 16(ivec4) Load 18(itexel) + 327: 16(ivec4) IAdd 326 325 + Store 18(itexel) 327 + 330: 6(int) Load 8(resident) + 332: 331(bool) ImageSparseTexelsResident 330 + SelectionMerge 335 None + BranchConditional 332 334 337 + 334: Label + 336: 11(fvec4) Load 13(texel) + Store 333 336 + Branch 335 + 337: Label + 338: 16(ivec4) Load 18(itexel) + 339: 11(fvec4) ConvertSToF 338 + 340: 21(ivec4) Load 23(utexel) + 341: 11(fvec4) ConvertUToF 340 + 342: 11(fvec4) FAdd 339 341 + Store 333 342 + Branch 335 + 335: Label + 343: 11(fvec4) Load 333 + Store 329(outColor) 343 Return FunctionEnd diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out index a510dc9af8..404d308576 100644 --- a/Test/baseResults/spv.specConst.vert.out +++ b/Test/baseResults/spv.specConst.vert.out @@ -1,6 +1,6 @@ spv.specConst.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader @@ -18,11 +18,11 @@ spv.specConst.vert Name 18 "a" Name 25 "gl_VertexID" Name 26 "gl_InstanceID" + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 11(gl_PerVertex) Block Decorate 18(a) SpecId 11 Decorate 25(gl_VertexID) BuiltIn VertexId Decorate 26(gl_InstanceID) BuiltIn InstanceId diff --git a/Test/baseResults/spv.specConstant.comp.out b/Test/baseResults/spv.specConstant.comp.out index a4e769fdcb..6a7dd1db52 100644 --- a/Test/baseResults/spv.specConstant.comp.out +++ b/Test/baseResults/spv.specConstant.comp.out @@ -1,6 +1,6 @@ spv.specConstant.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader @@ -13,10 +13,10 @@ spv.specConstant.comp Name 7 "bn" MemberName 7(bn) 0 "a" Name 9 "bi" - MemberDecorate 7(bn) 0 Offset 0 Decorate 7(bn) BufferBlock - Decorate 9(bi) DescriptorSet 0 + MemberDecorate 7(bn) 0 Offset 0 Decorate 9(bi) Binding 0 + Decorate 9(bi) DescriptorSet 0 Decorate 12 SpecId 18 Decorate 14 SpecId 19 Decorate 16 BuiltIn WorkgroupSize diff --git a/Test/baseResults/spv.specConstant.float16.comp.out b/Test/baseResults/spv.specConstant.float16.comp.out index be02057c1d..ba4169e369 100644 --- a/Test/baseResults/spv.specConstant.float16.comp.out +++ b/Test/baseResults/spv.specConstant.float16.comp.out @@ -1,6 +1,6 @@ spv.specConstant.float16.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader @@ -20,13 +20,14 @@ spv.specConstant.float16.comp Name 9 "sb_out" Name 12 "sc0" Name 16 "sc1" + Decorate 7(Output) BufferBlock MemberDecorate 7(Output) 0 NonReadable MemberDecorate 7(Output) 0 Offset 0 MemberDecorate 7(Output) 1 NonReadable MemberDecorate 7(Output) 1 Offset 2 - Decorate 7(Output) BufferBlock - Decorate 9(sb_out) DescriptorSet 0 + Decorate 9(sb_out) NonReadable Decorate 9(sb_out) Binding 0 + Decorate 9(sb_out) DescriptorSet 0 Decorate 12(sc0) SpecId 1 Decorate 16(sc1) SpecId 2 2: TypeVoid diff --git a/Test/baseResults/spv.specConstant.int16.comp.out b/Test/baseResults/spv.specConstant.int16.comp.out index 7bb4c8f333..dfb2317980 100644 --- a/Test/baseResults/spv.specConstant.int16.comp.out +++ b/Test/baseResults/spv.specConstant.int16.comp.out @@ -1,6 +1,6 @@ spv.specConstant.int16.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader @@ -20,13 +20,14 @@ spv.specConstant.int16.comp Name 9 "sb_out" Name 12 "sc0" Name 16 "sc1" + Decorate 7(Output) BufferBlock MemberDecorate 7(Output) 0 NonReadable MemberDecorate 7(Output) 0 Offset 0 MemberDecorate 7(Output) 1 NonReadable MemberDecorate 7(Output) 1 Offset 2 - Decorate 7(Output) BufferBlock - Decorate 9(sb_out) DescriptorSet 0 + Decorate 9(sb_out) NonReadable Decorate 9(sb_out) Binding 0 + Decorate 9(sb_out) DescriptorSet 0 Decorate 12(sc0) SpecId 1 Decorate 16(sc1) SpecId 2 2: TypeVoid diff --git a/Test/baseResults/spv.specConstant.int8.comp.out b/Test/baseResults/spv.specConstant.int8.comp.out index 0ab3bdc281..7f1175aa56 100644 --- a/Test/baseResults/spv.specConstant.int8.comp.out +++ b/Test/baseResults/spv.specConstant.int8.comp.out @@ -1,6 +1,6 @@ spv.specConstant.int8.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader @@ -20,13 +20,14 @@ spv.specConstant.int8.comp Name 9 "sb_out" Name 12 "sc0" Name 16 "sc1" + Decorate 7(Output) BufferBlock MemberDecorate 7(Output) 0 NonReadable MemberDecorate 7(Output) 0 Offset 0 MemberDecorate 7(Output) 1 NonReadable MemberDecorate 7(Output) 1 Offset 1 - Decorate 7(Output) BufferBlock - Decorate 9(sb_out) DescriptorSet 0 + Decorate 9(sb_out) NonReadable Decorate 9(sb_out) Binding 0 + Decorate 9(sb_out) DescriptorSet 0 Decorate 12(sc0) SpecId 1 Decorate 16(sc1) SpecId 2 2: TypeVoid diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out index f7d4381105..cc126ab5c0 100644 --- a/Test/baseResults/spv.specConstant.vert.out +++ b/Test/baseResults/spv.specConstant.vert.out @@ -1,6 +1,6 @@ spv.specConstant.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 81 Capability Shader diff --git a/Test/baseResults/spv.specConstantComposite.vert.out b/Test/baseResults/spv.specConstantComposite.vert.out index 15777d8f38..ce9ce066a9 100644 --- a/Test/baseResults/spv.specConstantComposite.vert.out +++ b/Test/baseResults/spv.specConstantComposite.vert.out @@ -1,6 +1,6 @@ spv.specConstantComposite.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 43 Capability Shader diff --git a/Test/baseResults/spv.specConstantComposite2.vert.out b/Test/baseResults/spv.specConstantComposite2.vert.out new file mode 100644 index 0000000000..191f35062d --- /dev/null +++ b/Test/baseResults/spv.specConstantComposite2.vert.out @@ -0,0 +1,89 @@ +spv.specConstantComposite2.vert +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 43 + + Capability Shader + Capability Float64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 27 42 + Source GLSL 450 + Name 4 "main" + Name 6 "refer_primary_spec_const(" + Name 8 "refer_composite_spec_const(" + Name 10 "refer_copmosite_dot_dereference(" + Name 12 "refer_composite_bracket_dereference(" + Name 16 "refer_spec_const_array_length(" + Name 18 "declare_spec_const_in_func(" + Name 21 "spec_bool" + Name 27 "color" + Name 28 "spec_int" + Name 33 "len" + Name 37 "spec_float" + Name 39 "spec_double" + Name 42 "global_vec4_array_with_spec_length" + Decorate 21(spec_bool) SpecId 203 + Decorate 27(color) Location 0 + Decorate 28(spec_int) SpecId 200 + Decorate 37(spec_float) SpecId 201 + Decorate 39(spec_double) SpecId 202 + Decorate 42(global_vec4_array_with_spec_length) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 14: TypeInt 32 1 + 15: TypeFunction 14(int) + 20: TypeBool + 21(spec_bool): 20(bool) SpecConstantTrue + 24: TypeFloat 32 + 25: TypeVector 24(float) 4 + 26: TypePointer Output 25(fvec4) + 27(color): 26(ptr) Variable Output + 28(spec_int): 14(int) SpecConstant 3 + 32: TypePointer Function 14(int) + 37(spec_float): 24(float) SpecConstant 1078523331 + 38: TypeFloat 64 + 39(spec_double):38(float64_t) SpecConstant 1413754136 1074340347 + 40: TypeArray 25(fvec4) 28(spec_int) + 41: TypePointer Input 40 +42(global_vec4_array_with_spec_length): 41(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd +6(refer_primary_spec_const(): 2 Function None 3 + 7: Label + SelectionMerge 23 None + BranchConditional 21(spec_bool) 22 23 + 22: Label + 29: 24(float) ConvertSToF 28(spec_int) + 30: 25(fvec4) Load 27(color) + 31: 25(fvec4) VectorTimesScalar 30 29 + Store 27(color) 31 + Branch 23 + 23: Label + Return + FunctionEnd +8(refer_composite_spec_const(): 2 Function None 3 + 9: Label + Return + FunctionEnd +10(refer_copmosite_dot_dereference(): 2 Function None 3 + 11: Label + Return + FunctionEnd +12(refer_composite_bracket_dereference(): 2 Function None 3 + 13: Label + Return + FunctionEnd +16(refer_spec_const_array_length(): 14(int) Function None 15 + 17: Label + 33(len): 32(ptr) Variable Function + Store 33(len) 28(spec_int) + 34: 14(int) Load 33(len) + ReturnValue 34 + FunctionEnd +18(declare_spec_const_in_func(): 2 Function None 3 + 19: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.specConstantOp.float16.comp.out b/Test/baseResults/spv.specConstantOp.float16.comp.out new file mode 100644 index 0000000000..f4f1ae1b27 --- /dev/null +++ b/Test/baseResults/spv.specConstantOp.float16.comp.out @@ -0,0 +1,49 @@ +spv.specConstantOp.float16.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 18 + + Capability Shader + Capability Float16 + Capability StorageUniformBufferBlock16 + Extension "SPV_KHR_16bit_storage" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16" + Name 4 "main" + Name 8 "S" + MemberName 8(S) 0 "p_out" + Name 10 "" + Name 14 "c" + Decorate 7 ArrayStride 2 + Decorate 8(S) BufferBlock + MemberDecorate 8(S) 0 Restrict + MemberDecorate 8(S) 0 NonReadable + MemberDecorate 8(S) 0 Offset 0 + Decorate 10 Restrict + Decorate 10 NonReadable + Decorate 10 Binding 0 + Decorate 10 DescriptorSet 0 + Decorate 14(c) SpecId 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 16 + 7: TypeRuntimeArray 6(float16_t) + 8(S): TypeStruct 7 + 9: TypePointer Uniform 8(S) + 10: 9(ptr) Variable Uniform + 11: TypeInt 32 1 + 12: 11(int) Constant 0 + 13: TypeFloat 32 + 14(c): 13(float) SpecConstant 1090519040 + 15:6(float16_t) SpecConstantOp 115 14(c) + 16: TypePointer Uniform 6(float16_t) + 4(main): 2 Function None 3 + 5: Label + 17: 16(ptr) AccessChain 10 12 12 + Store 17 15 + Return + FunctionEnd diff --git a/Test/baseResults/spv.specConstantOp.int16.comp.out b/Test/baseResults/spv.specConstantOp.int16.comp.out new file mode 100644 index 0000000000..8d39f09ee2 --- /dev/null +++ b/Test/baseResults/spv.specConstantOp.int16.comp.out @@ -0,0 +1,51 @@ +spv.specConstantOp.int16.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 20 + + Capability Shader + Capability Int16 + Capability StorageUniformBufferBlock16 + Extension "SPV_KHR_16bit_storage" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16" + Name 4 "main" + Name 8 "S" + MemberName 8(S) 0 "p_out" + Name 10 "" + Name 13 "c" + Decorate 7 ArrayStride 2 + Decorate 8(S) BufferBlock + MemberDecorate 8(S) 0 Restrict + MemberDecorate 8(S) 0 NonReadable + MemberDecorate 8(S) 0 Offset 0 + Decorate 10 Restrict + Decorate 10 NonReadable + Decorate 10 Binding 0 + Decorate 10 DescriptorSet 0 + Decorate 13(c) SpecId 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 16 0 + 7: TypeRuntimeArray 6(int16_t) + 8(S): TypeStruct 7 + 9: TypePointer Uniform 8(S) + 10: 9(ptr) Variable Uniform + 11: TypeInt 32 1 + 12: 11(int) Constant 0 + 13(c): 11(int) SpecConstant 8 + 14: TypeInt 16 1 + 15: 14(int16_t) SpecConstantOp 114 13(c) + 16: 6(int16_t) Constant 0 + 17: 6(int16_t) SpecConstantOp 128 15 16 + 18: TypePointer Uniform 6(int16_t) + 4(main): 2 Function None 3 + 5: Label + 19: 18(ptr) AccessChain 10 12 12 + Store 19 17 + Return + FunctionEnd diff --git a/Test/baseResults/spv.specConstantOp.int8.comp.out b/Test/baseResults/spv.specConstantOp.int8.comp.out new file mode 100644 index 0000000000..d88fce9b3b --- /dev/null +++ b/Test/baseResults/spv.specConstantOp.int8.comp.out @@ -0,0 +1,51 @@ +spv.specConstantOp.int8.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 20 + + Capability Shader + Capability Int8 + Capability UniformAndStorageBuffer8BitAccess + Extension "SPV_KHR_8bit_storage" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8" + Name 4 "main" + Name 8 "S" + MemberName 8(S) 0 "p_out" + Name 10 "" + Name 13 "c" + Decorate 7 ArrayStride 1 + Decorate 8(S) BufferBlock + MemberDecorate 8(S) 0 Restrict + MemberDecorate 8(S) 0 NonReadable + MemberDecorate 8(S) 0 Offset 0 + Decorate 10 Restrict + Decorate 10 NonReadable + Decorate 10 Binding 0 + Decorate 10 DescriptorSet 0 + Decorate 13(c) SpecId 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 8 0 + 7: TypeRuntimeArray 6(int8_t) + 8(S): TypeStruct 7 + 9: TypePointer Uniform 8(S) + 10: 9(ptr) Variable Uniform + 11: TypeInt 32 1 + 12: 11(int) Constant 0 + 13(c): 11(int) SpecConstant 8 + 14: TypeInt 8 1 + 15: 14(int8_t) SpecConstantOp 114 13(c) + 16: 6(int8_t) Constant 0 + 17: 6(int8_t) SpecConstantOp 128 15 16 + 18: TypePointer Uniform 6(int8_t) + 4(main): 2 Function None 3 + 5: Label + 19: 18(ptr) AccessChain 10 12 12 + Store 19 17 + Return + FunctionEnd diff --git a/Test/baseResults/spv.specConstantOperations.vert.out b/Test/baseResults/spv.specConstantOperations.vert.out index 53664601b8..cb1f73926d 100644 --- a/Test/baseResults/spv.specConstantOperations.vert.out +++ b/Test/baseResults/spv.specConstantOperations.vert.out @@ -1,6 +1,6 @@ spv.specConstantOperations.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 162 Capability Shader diff --git a/Test/baseResults/spv.specTexture.frag.out b/Test/baseResults/spv.specTexture.frag.out index 4ca488eb69..a5875d0799 100644 --- a/Test/baseResults/spv.specTexture.frag.out +++ b/Test/baseResults/spv.specTexture.frag.out @@ -1,6 +1,6 @@ spv.specTexture.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 23 Capability Shader @@ -15,8 +15,8 @@ spv.specTexture.frag Name 19 "offs" Decorate 9(color_out) Location 0 Decorate 13(tex) Location 0 - Decorate 13(tex) DescriptorSet 0 Decorate 13(tex) Binding 0 + Decorate 13(tex) DescriptorSet 0 Decorate 19(offs) SpecId 1 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.ssbo.autoassign.frag.out b/Test/baseResults/spv.ssbo.autoassign.frag.out index e2db863c65..2d8c283130 100644 --- a/Test/baseResults/spv.ssbo.autoassign.frag.out +++ b/Test/baseResults/spv.ssbo.autoassign.frag.out @@ -1,6 +1,6 @@ spv.ssbo.autoassign.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 99 Capability Shader @@ -33,21 +33,22 @@ spv.ssbo.autoassign.frag MemberDecorate 14(BufType) 0 Offset 0 MemberDecorate 14(BufType) 1 Offset 16 Decorate 15 ArrayStride 32 + Decorate 16(SB0) BufferBlock MemberDecorate 16(SB0) 0 NonWritable MemberDecorate 16(SB0) 0 Offset 0 - Decorate 16(SB0) BufferBlock - Decorate 18(SB0) DescriptorSet 0 + Decorate 18(SB0) NonWritable Decorate 18(SB0) Binding 30 + Decorate 18(SB0) DescriptorSet 0 + Decorate 26(TestCB) Block MemberDecorate 26(TestCB) 0 Offset 0 MemberDecorate 26(TestCB) 1 Offset 4 - Decorate 26(TestCB) Block - Decorate 28 DescriptorSet 0 Decorate 28 Binding 15 + Decorate 28 DescriptorSet 0 Decorate 56 ArrayStride 32 - MemberDecorate 57(SB1) 0 Offset 0 Decorate 57(SB1) BufferBlock - Decorate 59(SB1) DescriptorSet 0 + MemberDecorate 57(SB1) 0 Offset 0 Decorate 59(SB1) Binding 31 + Decorate 59(SB1) DescriptorSet 0 Decorate 92(pos) Location 0 Decorate 95(@entryPointOutput) Location 0 2: TypeVoid diff --git a/Test/baseResults/spv.ssboAlias.frag.out b/Test/baseResults/spv.ssboAlias.frag.out index cdcd222cd1..73842e8fdb 100644 --- a/Test/baseResults/spv.ssboAlias.frag.out +++ b/Test/baseResults/spv.ssboAlias.frag.out @@ -1,6 +1,6 @@ spv.ssboAlias.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 44 Capability Shader @@ -22,21 +22,21 @@ spv.ssboAlias.frag Name 41 "@entryPointOutput" Name 43 "Buf3" Decorate 12 ArrayStride 4 - MemberDecorate 13(Buf1) 0 Offset 0 Decorate 13(Buf1) BufferBlock - Decorate 15(Buf1) DescriptorSet 0 + MemberDecorate 13(Buf1) 0 Offset 0 Decorate 15(Buf1) Binding 84 - MemberDecorate 18(Buf1@count) 0 Offset 0 + Decorate 15(Buf1) DescriptorSet 0 Decorate 18(Buf1@count) BufferBlock - Decorate 20(Buf1@count) DescriptorSet 0 + MemberDecorate 18(Buf1@count) 0 Offset 0 Decorate 20(Buf1@count) Binding 83 - Decorate 28(Buf2) DescriptorSet 0 + Decorate 20(Buf1@count) DescriptorSet 0 Decorate 28(Buf2) Binding 85 - Decorate 29(Buf2@count) DescriptorSet 0 + Decorate 28(Buf2) DescriptorSet 0 Decorate 29(Buf2@count) Binding 86 + Decorate 29(Buf2@count) DescriptorSet 0 Decorate 41(@entryPointOutput) Location 0 - Decorate 43(Buf3) DescriptorSet 0 Decorate 43(Buf3) Binding 84 + Decorate 43(Buf3) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out index f01e53bf8a..a0a9cb1b84 100644 --- a/Test/baseResults/spv.stereoViewRendering.tesc.out +++ b/Test/baseResults/spv.stereoViewRendering.tesc.out @@ -1,6 +1,6 @@ spv.stereoViewRendering.tesc // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 42 Capability Tessellation @@ -31,16 +31,16 @@ spv.stereoViewRendering.tesc MemberName 27(gl_PerVertex) 4 "gl_SecondaryPositionNV" Name 31 "gl_in" Name 41 "gl_Layer" + Decorate 12(gl_PerVertex) Block MemberDecorate 12(gl_PerVertex) 0 BuiltIn SecondaryPositionNV MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryViewportMaskNV - Decorate 12(gl_PerVertex) Block Decorate 18(gl_InvocationID) BuiltIn InvocationId + Decorate 27(gl_PerVertex) Block MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance MemberDecorate 27(gl_PerVertex) 4 BuiltIn SecondaryPositionNV - Decorate 27(gl_PerVertex) Block Decorate 41(gl_Layer) BuiltIn Layer Decorate 41(gl_Layer) ViewportRelativeNV Decorate 41(gl_Layer) SecondaryViewportRelativeNV 1 diff --git a/Test/baseResults/spv.stereoViewRendering.vert.out b/Test/baseResults/spv.stereoViewRendering.vert.out index e74921af9e..491c377d13 100644 --- a/Test/baseResults/spv.stereoViewRendering.vert.out +++ b/Test/baseResults/spv.stereoViewRendering.vert.out @@ -1,6 +1,6 @@ spv.stereoViewRendering.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader @@ -28,11 +28,11 @@ spv.stereoViewRendering.vert Name 26 "gl_Layer" Decorate 11(gl_SecondaryViewportMaskNV) BuiltIn SecondaryViewportMaskNV Decorate 19(gl_SecondaryPositionNV) BuiltIn SecondaryPositionNV + Decorate 21(gl_PerVertex) Block MemberDecorate 21(gl_PerVertex) 0 BuiltIn Position MemberDecorate 21(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 21(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 21(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 21(gl_PerVertex) Block Decorate 26(gl_Layer) BuiltIn Layer Decorate 26(gl_Layer) ViewportRelativeNV Decorate 26(gl_Layer) SecondaryViewportRelativeNV 2 diff --git a/Test/baseResults/spv.storageBuffer.vert.out b/Test/baseResults/spv.storageBuffer.vert.out index 2411d2f7f0..5081998d2d 100644 --- a/Test/baseResults/spv.storageBuffer.vert.out +++ b/Test/baseResults/spv.storageBuffer.vert.out @@ -1,6 +1,6 @@ spv.storageBuffer.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 31 Capability Shader @@ -22,19 +22,19 @@ spv.storageBuffer.vert Name 22 "bb" MemberName 22(bb) 0 "b" Name 24 "bbi" + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 11(gl_PerVertex) Block - MemberDecorate 16(ub) 0 Offset 0 Decorate 16(ub) Block - Decorate 18(ubi) DescriptorSet 0 + MemberDecorate 16(ub) 0 Offset 0 Decorate 18(ubi) Binding 0 - MemberDecorate 22(bb) 0 Offset 0 + Decorate 18(ubi) DescriptorSet 0 Decorate 22(bb) Block - Decorate 24(bbi) DescriptorSet 0 + MemberDecorate 22(bb) 0 Offset 0 Decorate 24(bbi) Binding 1 + Decorate 24(bbi) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out index 8e82cac324..e04b5582bb 100644 --- a/Test/baseResults/spv.structAssignment.frag.out +++ b/Test/baseResults/spv.structAssignment.frag.out @@ -3,7 +3,7 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to "precision mediump int; precision highp float;" // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader @@ -37,8 +37,8 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to MemberDecorate 10(lunarStruct3) 1 RelaxedPrecision Decorate 16 RelaxedPrecision Decorate 31(gl_FragColor) Location 0 - Decorate 40(samp2D) DescriptorSet 0 Decorate 40(samp2D) Binding 0 + Decorate 40(samp2D) DescriptorSet 0 Decorate 44(coord) RelaxedPrecision Decorate 44(coord) Location 0 Decorate 45 RelaxedPrecision diff --git a/Test/baseResults/spv.structCopy.comp.out b/Test/baseResults/spv.structCopy.comp.out new file mode 100644 index 0000000000..f94e567145 --- /dev/null +++ b/Test/baseResults/spv.structCopy.comp.out @@ -0,0 +1,142 @@ +spv.structCopy.comp +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 81 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 24 + ExecutionMode 4 LocalSize 512 1 1 + Source GLSL 460 + Name 4 "main" + Name 7 "MyStruct" + MemberName 7(MyStruct) 0 "a" + MemberName 7(MyStruct) 1 "b" + MemberName 7(MyStruct) 2 "c" + Name 11 "s" + Name 21 "id" + Name 24 "gl_GlobalInvocationID" + Name 30 "ms" + Name 32 "MyStruct" + MemberName 32(MyStruct) 0 "a" + MemberName 32(MyStruct) 1 "b" + MemberName 32(MyStruct) 2 "c" + Name 34 "MyStructs" + MemberName 34(MyStructs) 0 "count" + MemberName 34(MyStructs) 1 "data" + Name 36 "my_structs" + Name 65 "Output" + MemberName 65(Output) 0 "a" + MemberName 65(Output) 1 "b" + MemberName 65(Output) 2 "c" + Name 67 "o" + Decorate 24(gl_GlobalInvocationID) BuiltIn GlobalInvocationId + MemberDecorate 32(MyStruct) 0 Offset 0 + MemberDecorate 32(MyStruct) 1 Offset 4 + MemberDecorate 32(MyStruct) 2 Offset 8 + Decorate 33 ArrayStride 12 + Decorate 34(MyStructs) BufferBlock + MemberDecorate 34(MyStructs) 0 Offset 0 + MemberDecorate 34(MyStructs) 1 Offset 4 + Decorate 36(my_structs) Binding 0 + Decorate 36(my_structs) DescriptorSet 0 + Decorate 65(Output) BufferBlock + MemberDecorate 65(Output) 0 Offset 0 + MemberDecorate 65(Output) 1 Offset 4 + MemberDecorate 65(Output) 2 Offset 8 + Decorate 67(o) Binding 1 + Decorate 67(o) DescriptorSet 0 + Decorate 80 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7(MyStruct): TypeStruct 6(int) 6(int) 6(int) + 8: 6(int) Constant 512 + 9: TypeArray 7(MyStruct) 8 + 10: TypePointer Workgroup 9 + 11(s): 10(ptr) Variable Workgroup + 12: TypeInt 32 1 + 13: 12(int) Constant 0 + 14: 6(int) Constant 1 + 15: 6(int) Constant 2 + 16: 6(int) Constant 3 + 17: 7(MyStruct) ConstantComposite 14 15 16 + 18: TypePointer Workgroup 7(MyStruct) + 20: TypePointer Function 6(int) + 22: TypeVector 6(int) 3 + 23: TypePointer Input 22(ivec3) +24(gl_GlobalInvocationID): 23(ptr) Variable Input + 25: 6(int) Constant 0 + 26: TypePointer Input 6(int) + 29: TypePointer Function 7(MyStruct) + 32(MyStruct): TypeStruct 6(int) 6(int) 6(int) + 33: TypeRuntimeArray 32(MyStruct) + 34(MyStructs): TypeStruct 6(int) 33 + 35: TypePointer Uniform 34(MyStructs) + 36(my_structs): 35(ptr) Variable Uniform + 37: TypePointer Uniform 6(int) + 40: TypeBool + 52: 12(int) Constant 1 + 54: TypePointer Uniform 32(MyStruct) + 62: 12(int) Constant 2 + 65(Output): TypeStruct 6(int) 6(int) 6(int) + 66: TypePointer Uniform 65(Output) + 67(o): 66(ptr) Variable Uniform + 80: 22(ivec3) ConstantComposite 8 14 14 + 4(main): 2 Function None 3 + 5: Label + 21(id): 20(ptr) Variable Function + 30(ms): 29(ptr) Variable Function + 42: 29(ptr) Variable Function + 19: 18(ptr) AccessChain 11(s) 13 + Store 19 17 + 27: 26(ptr) AccessChain 24(gl_GlobalInvocationID) 25 + 28: 6(int) Load 27 + Store 21(id) 28 + 31: 6(int) Load 21(id) + 38: 37(ptr) AccessChain 36(my_structs) 13 + 39: 6(int) Load 38 + 41: 40(bool) UGreaterThan 31 39 + SelectionMerge 44 None + BranchConditional 41 43 51 + 43: Label + 45: 6(int) Load 21(id) + 46: 37(ptr) AccessChain 36(my_structs) 13 + 47: 6(int) Load 46 + 48: 6(int) ISub 45 47 + 49: 18(ptr) AccessChain 11(s) 48 + 50: 7(MyStruct) Load 49 + Store 42 50 + Branch 44 + 51: Label + 53: 6(int) Load 21(id) + 55: 54(ptr) AccessChain 36(my_structs) 52 53 + 56:32(MyStruct) Load 55 + 57: 6(int) CompositeExtract 56 0 + 58: 20(ptr) AccessChain 42 13 + Store 58 57 + 59: 6(int) CompositeExtract 56 1 + 60: 20(ptr) AccessChain 42 52 + Store 60 59 + 61: 6(int) CompositeExtract 56 2 + 63: 20(ptr) AccessChain 42 62 + Store 63 61 + Branch 44 + 44: Label + 64: 7(MyStruct) Load 42 + Store 30(ms) 64 + 68: 37(ptr) AccessChain 67(o) 13 + 69: 20(ptr) AccessChain 30(ms) 13 + 70: 6(int) Load 69 + 71: 6(int) AtomicIAdd 68 14 25 70 + 72: 37(ptr) AccessChain 67(o) 52 + 73: 20(ptr) AccessChain 30(ms) 52 + 74: 6(int) Load 73 + 75: 6(int) AtomicIAdd 72 14 25 74 + 76: 37(ptr) AccessChain 67(o) 62 + 77: 20(ptr) AccessChain 30(ms) 62 + 78: 6(int) Load 77 + 79: 6(int) AtomicIAdd 76 14 25 78 + Return + FunctionEnd diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out index 94fc4e24c5..b7884308b4 100644 --- a/Test/baseResults/spv.structDeref.frag.out +++ b/Test/baseResults/spv.structDeref.frag.out @@ -1,6 +1,6 @@ spv.structDeref.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 123 Capability Shader @@ -42,8 +42,8 @@ spv.structDeref.frag Name 122 "foo2" Decorate 61(coord) Location 0 Decorate 99(gl_FragColor) Location 0 - Decorate 116(samp2D) DescriptorSet 0 Decorate 116(samp2D) Binding 0 + Decorate 116(samp2D) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out index 00fed0e015..3b43ba57f5 100644 --- a/Test/baseResults/spv.structure.frag.out +++ b/Test/baseResults/spv.structure.frag.out @@ -1,6 +1,6 @@ spv.structure.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 60 Capability Shader @@ -25,8 +25,8 @@ spv.structure.frag Name 54 "coord" Name 59 "foo" Decorate 45(gl_FragColor) Location 0 - Decorate 50(samp2D) DescriptorSet 0 Decorate 50(samp2D) Binding 0 + Decorate 50(samp2D) DescriptorSet 0 Decorate 54(coord) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroup.frag.out b/Test/baseResults/spv.subgroup.frag.out index a3e427f0cf..9c6bfbfc32 100644 --- a/Test/baseResults/spv.subgroup.frag.out +++ b/Test/baseResults/spv.subgroup.frag.out @@ -1,6 +1,6 @@ spv.subgroup.frag // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 17 Capability Shader @@ -17,12 +17,12 @@ spv.subgroup.frag Name 13 "gl_SubgroupInvocationID" Decorate 9(data) Location 0 Decorate 11(gl_SubgroupSize) RelaxedPrecision - Decorate 11(gl_SubgroupSize) Flat Decorate 11(gl_SubgroupSize) BuiltIn SubgroupSize + Decorate 11(gl_SubgroupSize) Flat Decorate 12 RelaxedPrecision Decorate 13(gl_SubgroupInvocationID) RelaxedPrecision - Decorate 13(gl_SubgroupInvocationID) Flat Decorate 13(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId + Decorate 13(gl_SubgroupInvocationID) Flat Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision 2: TypeVoid diff --git a/Test/baseResults/spv.subgroup.geom.out b/Test/baseResults/spv.subgroup.geom.out index 27f05b2f9e..905e874de8 100644 --- a/Test/baseResults/spv.subgroup.geom.out +++ b/Test/baseResults/spv.subgroup.geom.out @@ -1,6 +1,6 @@ spv.subgroup.geom // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 26 Capability Geometry @@ -22,10 +22,10 @@ spv.subgroup.geom Name 18 "gl_SubgroupSize" Name 20 "gl_SubgroupInvocationID" Decorate 8 ArrayStride 16 - MemberDecorate 9(Output) 0 Offset 0 Decorate 9(Output) Block - Decorate 11 DescriptorSet 0 + MemberDecorate 9(Output) 0 Offset 0 Decorate 11 Binding 0 + Decorate 11 DescriptorSet 0 Decorate 15(gl_PrimitiveIDIn) BuiltIn PrimitiveId Decorate 18(gl_SubgroupSize) RelaxedPrecision Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize diff --git a/Test/baseResults/spv.subgroup.tesc.out b/Test/baseResults/spv.subgroup.tesc.out index 8322a4a165..23e0e3e177 100644 --- a/Test/baseResults/spv.subgroup.tesc.out +++ b/Test/baseResults/spv.subgroup.tesc.out @@ -1,6 +1,6 @@ spv.subgroup.tesc // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 26 Capability Tessellation @@ -19,10 +19,10 @@ spv.subgroup.tesc Name 18 "gl_SubgroupSize" Name 20 "gl_SubgroupInvocationID" Decorate 8 ArrayStride 16 - MemberDecorate 9(Output) 0 Offset 0 Decorate 9(Output) Block - Decorate 11 DescriptorSet 0 + MemberDecorate 9(Output) 0 Offset 0 Decorate 11 Binding 0 + Decorate 11 DescriptorSet 0 Decorate 15(gl_PrimitiveID) BuiltIn PrimitiveId Decorate 18(gl_SubgroupSize) RelaxedPrecision Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize diff --git a/Test/baseResults/spv.subgroup.tese.out b/Test/baseResults/spv.subgroup.tese.out index 360f98bef7..c0ef120e76 100644 --- a/Test/baseResults/spv.subgroup.tese.out +++ b/Test/baseResults/spv.subgroup.tese.out @@ -1,6 +1,6 @@ spv.subgroup.tese // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 26 Capability Tessellation @@ -21,10 +21,10 @@ spv.subgroup.tese Name 18 "gl_SubgroupSize" Name 20 "gl_SubgroupInvocationID" Decorate 8 ArrayStride 16 - MemberDecorate 9(Output) 0 Offset 0 Decorate 9(Output) Block - Decorate 11 DescriptorSet 0 + MemberDecorate 9(Output) 0 Offset 0 Decorate 11 Binding 0 + Decorate 11 DescriptorSet 0 Decorate 15(gl_PrimitiveID) BuiltIn PrimitiveId Decorate 18(gl_SubgroupSize) RelaxedPrecision Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize diff --git a/Test/baseResults/spv.subgroup.vert.out b/Test/baseResults/spv.subgroup.vert.out index 6de8a0ae01..3537f58f44 100644 --- a/Test/baseResults/spv.subgroup.vert.out +++ b/Test/baseResults/spv.subgroup.vert.out @@ -1,6 +1,6 @@ spv.subgroup.vert // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 26 Capability Shader @@ -18,10 +18,10 @@ spv.subgroup.vert Name 18 "gl_SubgroupSize" Name 20 "gl_SubgroupInvocationID" Decorate 8 ArrayStride 16 - MemberDecorate 9(Output) 0 Offset 0 Decorate 9(Output) Block - Decorate 11 DescriptorSet 0 + MemberDecorate 9(Output) 0 Offset 0 Decorate 11 Binding 0 + Decorate 11 DescriptorSet 0 Decorate 15(gl_VertexIndex) BuiltIn VertexIndex Decorate 18(gl_SubgroupSize) RelaxedPrecision Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize diff --git a/Test/baseResults/spv.subgroupArithmetic.comp.out b/Test/baseResults/spv.subgroupArithmetic.comp.out index 87bfa3115d..c3b467b007 100644 --- a/Test/baseResults/spv.subgroupArithmetic.comp.out +++ b/Test/baseResults/spv.subgroupArithmetic.comp.out @@ -1,6 +1,6 @@ spv.subgroupArithmetic.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 2386 Capability Shader @@ -32,13 +32,13 @@ spv.subgroupArithmetic.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 24(Buffers) Block MemberDecorate 24(Buffers) 0 Offset 0 MemberDecorate 24(Buffers) 1 Offset 16 MemberDecorate 24(Buffers) 2 Offset 32 MemberDecorate 24(Buffers) 3 Offset 64 - Decorate 24(Buffers) Block - Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 + Decorate 27(data) DescriptorSet 0 Decorate 2385 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupBallot.comp.out b/Test/baseResults/spv.subgroupBallot.comp.out index 65cfa7a464..834331d55f 100644 --- a/Test/baseResults/spv.subgroupBallot.comp.out +++ b/Test/baseResults/spv.subgroupBallot.comp.out @@ -1,6 +1,6 @@ spv.subgroupBallot.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 437 Capability Shader @@ -44,13 +44,13 @@ spv.subgroupBallot.comp Decorate 26(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR Decorate 29(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR Decorate 32(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR + Decorate 46(Buffers) Block MemberDecorate 46(Buffers) 0 Offset 0 MemberDecorate 46(Buffers) 1 Offset 16 MemberDecorate 46(Buffers) 2 Offset 32 MemberDecorate 46(Buffers) 3 Offset 64 - Decorate 46(Buffers) Block - Decorate 49(data) DescriptorSet 0 Decorate 49(data) Binding 0 + Decorate 49(data) DescriptorSet 0 Decorate 436 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupBasic.comp.out b/Test/baseResults/spv.subgroupBasic.comp.out index fb9fa0cb50..7135012725 100644 --- a/Test/baseResults/spv.subgroupBasic.comp.out +++ b/Test/baseResults/spv.subgroupBasic.comp.out @@ -1,6 +1,6 @@ spv.subgroupBasic.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 40 Capability Shader @@ -20,10 +20,10 @@ spv.subgroupBasic.comp Name 22 "gl_NumSubgroups" Name 25 "gl_SubgroupID" Decorate 7 ArrayStride 4 - MemberDecorate 8(Buffer) 0 Offset 0 Decorate 8(Buffer) Block - Decorate 10(data) DescriptorSet 0 + MemberDecorate 8(Buffer) 0 Offset 0 Decorate 10(data) Binding 0 + Decorate 10(data) DescriptorSet 0 Decorate 14(gl_SubgroupSize) RelaxedPrecision Decorate 14(gl_SubgroupSize) BuiltIn SubgroupSize Decorate 15 RelaxedPrecision diff --git a/Test/baseResults/spv.subgroupClustered.comp.out b/Test/baseResults/spv.subgroupClustered.comp.out index a2e486dd68..b86570a2e5 100644 --- a/Test/baseResults/spv.subgroupClustered.comp.out +++ b/Test/baseResults/spv.subgroupClustered.comp.out @@ -1,6 +1,6 @@ spv.subgroupClustered.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 838 Capability Shader @@ -32,13 +32,13 @@ spv.subgroupClustered.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 24(Buffers) Block MemberDecorate 24(Buffers) 0 Offset 0 MemberDecorate 24(Buffers) 1 Offset 16 MemberDecorate 24(Buffers) 2 Offset 32 MemberDecorate 24(Buffers) 3 Offset 64 - Decorate 24(Buffers) Block - Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 + Decorate 27(data) DescriptorSet 0 Decorate 837 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out index 828ce61636..92c0029c9a 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out @@ -1,6 +1,6 @@ spv.subgroupExtendedTypesArithmetic.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 4218 Capability Shader @@ -49,6 +49,7 @@ spv.subgroupExtendedTypesArithmetic.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 31(Buffers) Block MemberDecorate 31(Buffers) 0 Offset 0 MemberDecorate 31(Buffers) 1 Offset 4 MemberDecorate 31(Buffers) 2 Offset 8 @@ -56,9 +57,8 @@ spv.subgroupExtendedTypesArithmetic.comp MemberDecorate 31(Buffers) 4 Offset 32 MemberDecorate 31(Buffers) 5 Offset 64 MemberDecorate 31(Buffers) 6 Offset 96 - Decorate 31(Buffers) Block - Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 + Decorate 34(data) DescriptorSet 0 Decorate 4217 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out index 60f01bccf1..880df85cba 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out @@ -1,6 +1,6 @@ spv.subgroupExtendedTypesBallot.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 498 Capability Shader @@ -49,6 +49,7 @@ spv.subgroupExtendedTypesBallot.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 31(Buffers) Block MemberDecorate 31(Buffers) 0 Offset 0 MemberDecorate 31(Buffers) 1 Offset 4 MemberDecorate 31(Buffers) 2 Offset 8 @@ -56,9 +57,8 @@ spv.subgroupExtendedTypesBallot.comp MemberDecorate 31(Buffers) 4 Offset 32 MemberDecorate 31(Buffers) 5 Offset 64 MemberDecorate 31(Buffers) 6 Offset 96 - Decorate 31(Buffers) Block - Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 + Decorate 34(data) DescriptorSet 0 Decorate 497 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out index 98a7a89011..849cd6765d 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out @@ -1,6 +1,6 @@ spv.subgroupExtendedTypesClustered.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 1458 Capability Shader @@ -49,6 +49,7 @@ spv.subgroupExtendedTypesClustered.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 31(Buffers) Block MemberDecorate 31(Buffers) 0 Offset 0 MemberDecorate 31(Buffers) 1 Offset 4 MemberDecorate 31(Buffers) 2 Offset 8 @@ -56,9 +57,8 @@ spv.subgroupExtendedTypesClustered.comp MemberDecorate 31(Buffers) 4 Offset 32 MemberDecorate 31(Buffers) 5 Offset 64 MemberDecorate 31(Buffers) 6 Offset 96 - Decorate 31(Buffers) Block - Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 + Decorate 34(data) DescriptorSet 0 Decorate 1457 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out index 47576d9f7f..8381c49d18 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out @@ -1,6 +1,6 @@ spv.subgroupExtendedTypesPartitioned.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 1743 Capability Shader @@ -51,6 +51,7 @@ spv.subgroupExtendedTypesPartitioned.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 34(Buffers) Block MemberDecorate 34(Buffers) 0 Offset 0 MemberDecorate 34(Buffers) 1 Offset 4 MemberDecorate 34(Buffers) 2 Offset 8 @@ -58,9 +59,8 @@ spv.subgroupExtendedTypesPartitioned.comp MemberDecorate 34(Buffers) 4 Offset 32 MemberDecorate 34(Buffers) 5 Offset 64 MemberDecorate 34(Buffers) 6 Offset 96 - Decorate 34(Buffers) Block - Decorate 37(data) DescriptorSet 0 Decorate 37(data) Binding 0 + Decorate 37(data) DescriptorSet 0 Decorate 1742 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out index f385545e63..a0f8564da9 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out @@ -1,6 +1,6 @@ spv.subgroupExtendedTypesQuad.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 918 Capability Shader @@ -49,6 +49,7 @@ spv.subgroupExtendedTypesQuad.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 31(Buffers) Block MemberDecorate 31(Buffers) 0 Offset 0 MemberDecorate 31(Buffers) 1 Offset 4 MemberDecorate 31(Buffers) 2 Offset 8 @@ -56,9 +57,8 @@ spv.subgroupExtendedTypesQuad.comp MemberDecorate 31(Buffers) 4 Offset 32 MemberDecorate 31(Buffers) 5 Offset 64 MemberDecorate 31(Buffers) 6 Offset 96 - Decorate 31(Buffers) Block - Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 + Decorate 34(data) DescriptorSet 0 Decorate 917 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupExtendedTypesRotate.comp.out b/Test/baseResults/spv.subgroupExtendedTypesRotate.comp.out new file mode 100644 index 0000000000..cb13289c5c --- /dev/null +++ b/Test/baseResults/spv.subgroupExtendedTypesRotate.comp.out @@ -0,0 +1,712 @@ +spv.subgroupExtendedTypesRotate.comp +// Module Version 10300 +// Generated by (magic number): 8000b +// Id's are bound by 553 + + Capability Shader + Capability Float16 + Capability Int64 + Capability Int16 + Capability Int8 + Capability StorageUniformBufferBlock16 + Capability StorageBuffer8BitAccess + Capability CapabilityGroupNonUniformRotateKHR + Extension "SPV_KHR_8bit_storage" + Extension "SPV_KHR_subgroup_rotate" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 8 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8" + SourceExtension "GL_EXT_shader_subgroup_extended_types_float16" + SourceExtension "GL_EXT_shader_subgroup_extended_types_int16" + SourceExtension "GL_EXT_shader_subgroup_extended_types_int64" + SourceExtension "GL_EXT_shader_subgroup_extended_types_int8" + SourceExtension "GL_KHR_shader_subgroup_rotate" + Name 4 "main" + Name 8 "delta" + Name 9 "roblock" + MemberName 9(roblock) 0 "delta" + Name 11 "ro" + Name 31 "Buffers" + MemberName 31(Buffers) 0 "i8" + MemberName 31(Buffers) 1 "u8" + MemberName 31(Buffers) 2 "i16" + MemberName 31(Buffers) 3 "u16" + MemberName 31(Buffers) 4 "i64" + MemberName 31(Buffers) 5 "u64" + MemberName 31(Buffers) 6 "f16" + Name 35 "data" + Decorate 9(roblock) Block + MemberDecorate 9(roblock) 0 NonWritable + MemberDecorate 9(roblock) 0 Offset 0 + Decorate 11(ro) NonWritable + Decorate 11(ro) Binding 1 + Decorate 11(ro) DescriptorSet 0 + Decorate 31(Buffers) Block + MemberDecorate 31(Buffers) 0 Offset 0 + MemberDecorate 31(Buffers) 1 Offset 4 + MemberDecorate 31(Buffers) 2 Offset 8 + MemberDecorate 31(Buffers) 3 Offset 16 + MemberDecorate 31(Buffers) 4 Offset 32 + MemberDecorate 31(Buffers) 5 Offset 64 + MemberDecorate 31(Buffers) 6 Offset 96 + Decorate 35(data) Binding 0 + Decorate 35(data) DescriptorSet 0 + Decorate 552 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9(roblock): TypeStruct 6(int) + 10: TypePointer StorageBuffer 9(roblock) + 11(ro): 10(ptr) Variable StorageBuffer + 12: TypeInt 32 1 + 13: 12(int) Constant 0 + 14: TypePointer StorageBuffer 6(int) + 17: TypeInt 8 1 + 18: TypeVector 17(int8_t) 4 + 19: TypeInt 8 0 + 20: TypeVector 19(int8_t) 4 + 21: TypeInt 16 1 + 22: TypeVector 21(int16_t) 4 + 23: TypeInt 16 0 + 24: TypeVector 23(int16_t) 4 + 25: TypeInt 64 1 + 26: TypeVector 25(int64_t) 4 + 27: TypeInt 64 0 + 28: TypeVector 27(int64_t) 4 + 29: TypeFloat 16 + 30: TypeVector 29(float16_t) 4 + 31(Buffers): TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4) + 32: 6(int) Constant 4 + 33: TypeArray 31(Buffers) 32 + 34: TypePointer StorageBuffer 33 + 35(data): 34(ptr) Variable StorageBuffer + 37: 6(int) Constant 0 + 38: TypePointer StorageBuffer 17(int8_t) + 42: 6(int) Constant 3 + 46: 12(int) Constant 1 + 47: TypeVector 17(int8_t) 2 + 48: TypePointer StorageBuffer 18(i8vec4) + 56: 6(int) Constant 1 + 60: 12(int) Constant 2 + 61: TypeVector 17(int8_t) 3 + 71: 6(int) Constant 2 + 75: 12(int) Constant 3 + 116: TypePointer StorageBuffer 19(int8_t) + 123: TypeVector 19(int8_t) 2 + 124: TypePointer StorageBuffer 20(i8vec4) + 135: TypeVector 19(int8_t) 3 + 188: TypePointer StorageBuffer 21(int16_t) + 195: TypeVector 21(int16_t) 2 + 196: TypePointer StorageBuffer 22(i16vec4) + 207: TypeVector 21(int16_t) 3 + 260: TypePointer StorageBuffer 23(int16_t) + 267: TypeVector 23(int16_t) 2 + 268: TypePointer StorageBuffer 24(i16vec4) + 279: TypeVector 23(int16_t) 3 + 332: 12(int) Constant 4 + 333: TypePointer StorageBuffer 25(int64_t) + 340: TypeVector 25(int64_t) 2 + 341: TypePointer StorageBuffer 26(i64vec4) + 352: TypeVector 25(int64_t) 3 + 405: 12(int) Constant 5 + 406: TypePointer StorageBuffer 27(int64_t) + 413: TypeVector 27(int64_t) 2 + 414: TypePointer StorageBuffer 28(i64vec4) + 425: TypeVector 27(int64_t) 3 + 478: 12(int) Constant 6 + 479: TypePointer StorageBuffer 29(float16_t) + 486: TypeVector 29(float16_t) 2 + 487: TypePointer StorageBuffer 30(f16vec4) + 498: TypeVector 29(float16_t) 3 + 550: TypeVector 6(int) 3 + 551: 6(int) Constant 8 + 552: 550(ivec3) ConstantComposite 551 56 56 + 4(main): 2 Function None 3 + 5: Label + 8(delta): 7(ptr) Variable Function + 15: 14(ptr) AccessChain 11(ro) 13 + 16: 6(int) Load 15 + Store 8(delta) 16 + 36: 6(int) Load 8(delta) + 39: 38(ptr) AccessChain 35(data) 13 13 37 + 40: 17(int8_t) Load 39 + 41: 6(int) Load 8(delta) + 43: 17(int8_t) GroupNonUniformRotateKHR 42 40 41 + 44: 38(ptr) AccessChain 35(data) 36 13 37 + Store 44 43 + 45: 6(int) Load 8(delta) + 49: 48(ptr) AccessChain 35(data) 46 13 + 50: 18(i8vec4) Load 49 + 51: 47(i8vec2) VectorShuffle 50 50 0 1 + 52: 6(int) Load 8(delta) + 53: 47(i8vec2) GroupNonUniformRotateKHR 42 51 52 + 54: 38(ptr) AccessChain 35(data) 45 13 37 + 55: 17(int8_t) CompositeExtract 53 0 + Store 54 55 + 57: 38(ptr) AccessChain 35(data) 45 13 56 + 58: 17(int8_t) CompositeExtract 53 1 + Store 57 58 + 59: 6(int) Load 8(delta) + 62: 48(ptr) AccessChain 35(data) 60 13 + 63: 18(i8vec4) Load 62 + 64: 61(i8vec3) VectorShuffle 63 63 0 1 2 + 65: 6(int) Load 8(delta) + 66: 61(i8vec3) GroupNonUniformRotateKHR 42 64 65 + 67: 38(ptr) AccessChain 35(data) 59 13 37 + 68: 17(int8_t) CompositeExtract 66 0 + Store 67 68 + 69: 38(ptr) AccessChain 35(data) 59 13 56 + 70: 17(int8_t) CompositeExtract 66 1 + Store 69 70 + 72: 38(ptr) AccessChain 35(data) 59 13 71 + 73: 17(int8_t) CompositeExtract 66 2 + Store 72 73 + 74: 6(int) Load 8(delta) + 76: 48(ptr) AccessChain 35(data) 75 13 + 77: 18(i8vec4) Load 76 + 78: 6(int) Load 8(delta) + 79: 18(i8vec4) GroupNonUniformRotateKHR 42 77 78 + 80: 48(ptr) AccessChain 35(data) 74 13 + Store 80 79 + 81: 6(int) Load 8(delta) + 82: 38(ptr) AccessChain 35(data) 13 13 37 + 83: 17(int8_t) Load 82 + 84: 6(int) Load 8(delta) + 85: 17(int8_t) GroupNonUniformRotateKHR 42 83 84 56 + 86: 38(ptr) AccessChain 35(data) 81 13 37 + Store 86 85 + 87: 6(int) Load 8(delta) + 88: 48(ptr) AccessChain 35(data) 46 13 + 89: 18(i8vec4) Load 88 + 90: 47(i8vec2) VectorShuffle 89 89 0 1 + 91: 6(int) Load 8(delta) + 92: 47(i8vec2) GroupNonUniformRotateKHR 42 90 91 56 + 93: 38(ptr) AccessChain 35(data) 87 13 37 + 94: 17(int8_t) CompositeExtract 92 0 + Store 93 94 + 95: 38(ptr) AccessChain 35(data) 87 13 56 + 96: 17(int8_t) CompositeExtract 92 1 + Store 95 96 + 97: 6(int) Load 8(delta) + 98: 48(ptr) AccessChain 35(data) 60 13 + 99: 18(i8vec4) Load 98 + 100: 61(i8vec3) VectorShuffle 99 99 0 1 2 + 101: 6(int) Load 8(delta) + 102: 61(i8vec3) GroupNonUniformRotateKHR 42 100 101 56 + 103: 38(ptr) AccessChain 35(data) 97 13 37 + 104: 17(int8_t) CompositeExtract 102 0 + Store 103 104 + 105: 38(ptr) AccessChain 35(data) 97 13 56 + 106: 17(int8_t) CompositeExtract 102 1 + Store 105 106 + 107: 38(ptr) AccessChain 35(data) 97 13 71 + 108: 17(int8_t) CompositeExtract 102 2 + Store 107 108 + 109: 6(int) Load 8(delta) + 110: 48(ptr) AccessChain 35(data) 75 13 + 111: 18(i8vec4) Load 110 + 112: 6(int) Load 8(delta) + 113: 18(i8vec4) GroupNonUniformRotateKHR 42 111 112 56 + 114: 48(ptr) AccessChain 35(data) 109 13 + Store 114 113 + 115: 6(int) Load 8(delta) + 117: 116(ptr) AccessChain 35(data) 13 46 37 + 118: 19(int8_t) Load 117 + 119: 6(int) Load 8(delta) + 120: 19(int8_t) GroupNonUniformRotateKHR 42 118 119 + 121: 116(ptr) AccessChain 35(data) 115 46 37 + Store 121 120 + 122: 6(int) Load 8(delta) + 125: 124(ptr) AccessChain 35(data) 46 46 + 126: 20(i8vec4) Load 125 + 127: 123(i8vec2) VectorShuffle 126 126 0 1 + 128: 6(int) Load 8(delta) + 129: 123(i8vec2) GroupNonUniformRotateKHR 42 127 128 + 130: 116(ptr) AccessChain 35(data) 122 46 37 + 131: 19(int8_t) CompositeExtract 129 0 + Store 130 131 + 132: 116(ptr) AccessChain 35(data) 122 46 56 + 133: 19(int8_t) CompositeExtract 129 1 + Store 132 133 + 134: 6(int) Load 8(delta) + 136: 124(ptr) AccessChain 35(data) 60 46 + 137: 20(i8vec4) Load 136 + 138: 135(i8vec3) VectorShuffle 137 137 0 1 2 + 139: 6(int) Load 8(delta) + 140: 135(i8vec3) GroupNonUniformRotateKHR 42 138 139 + 141: 116(ptr) AccessChain 35(data) 134 46 37 + 142: 19(int8_t) CompositeExtract 140 0 + Store 141 142 + 143: 116(ptr) AccessChain 35(data) 134 46 56 + 144: 19(int8_t) CompositeExtract 140 1 + Store 143 144 + 145: 116(ptr) AccessChain 35(data) 134 46 71 + 146: 19(int8_t) CompositeExtract 140 2 + Store 145 146 + 147: 6(int) Load 8(delta) + 148: 124(ptr) AccessChain 35(data) 75 46 + 149: 20(i8vec4) Load 148 + 150: 6(int) Load 8(delta) + 151: 20(i8vec4) GroupNonUniformRotateKHR 42 149 150 + 152: 124(ptr) AccessChain 35(data) 147 46 + Store 152 151 + 153: 6(int) Load 8(delta) + 154: 116(ptr) AccessChain 35(data) 13 46 37 + 155: 19(int8_t) Load 154 + 156: 6(int) Load 8(delta) + 157: 19(int8_t) GroupNonUniformRotateKHR 42 155 156 56 + 158: 116(ptr) AccessChain 35(data) 153 46 37 + Store 158 157 + 159: 6(int) Load 8(delta) + 160: 124(ptr) AccessChain 35(data) 46 46 + 161: 20(i8vec4) Load 160 + 162: 123(i8vec2) VectorShuffle 161 161 0 1 + 163: 6(int) Load 8(delta) + 164: 123(i8vec2) GroupNonUniformRotateKHR 42 162 163 56 + 165: 116(ptr) AccessChain 35(data) 159 46 37 + 166: 19(int8_t) CompositeExtract 164 0 + Store 165 166 + 167: 116(ptr) AccessChain 35(data) 159 46 56 + 168: 19(int8_t) CompositeExtract 164 1 + Store 167 168 + 169: 6(int) Load 8(delta) + 170: 124(ptr) AccessChain 35(data) 60 46 + 171: 20(i8vec4) Load 170 + 172: 135(i8vec3) VectorShuffle 171 171 0 1 2 + 173: 6(int) Load 8(delta) + 174: 135(i8vec3) GroupNonUniformRotateKHR 42 172 173 56 + 175: 116(ptr) AccessChain 35(data) 169 46 37 + 176: 19(int8_t) CompositeExtract 174 0 + Store 175 176 + 177: 116(ptr) AccessChain 35(data) 169 46 56 + 178: 19(int8_t) CompositeExtract 174 1 + Store 177 178 + 179: 116(ptr) AccessChain 35(data) 169 46 71 + 180: 19(int8_t) CompositeExtract 174 2 + Store 179 180 + 181: 6(int) Load 8(delta) + 182: 124(ptr) AccessChain 35(data) 75 46 + 183: 20(i8vec4) Load 182 + 184: 6(int) Load 8(delta) + 185: 20(i8vec4) GroupNonUniformRotateKHR 42 183 184 56 + 186: 124(ptr) AccessChain 35(data) 181 46 + Store 186 185 + 187: 6(int) Load 8(delta) + 189: 188(ptr) AccessChain 35(data) 13 60 37 + 190: 21(int16_t) Load 189 + 191: 6(int) Load 8(delta) + 192: 21(int16_t) GroupNonUniformRotateKHR 42 190 191 + 193: 188(ptr) AccessChain 35(data) 187 60 37 + Store 193 192 + 194: 6(int) Load 8(delta) + 197: 196(ptr) AccessChain 35(data) 46 60 + 198: 22(i16vec4) Load 197 + 199:195(i16vec2) VectorShuffle 198 198 0 1 + 200: 6(int) Load 8(delta) + 201:195(i16vec2) GroupNonUniformRotateKHR 42 199 200 + 202: 188(ptr) AccessChain 35(data) 194 60 37 + 203: 21(int16_t) CompositeExtract 201 0 + Store 202 203 + 204: 188(ptr) AccessChain 35(data) 194 60 56 + 205: 21(int16_t) CompositeExtract 201 1 + Store 204 205 + 206: 6(int) Load 8(delta) + 208: 196(ptr) AccessChain 35(data) 60 60 + 209: 22(i16vec4) Load 208 + 210:207(i16vec3) VectorShuffle 209 209 0 1 2 + 211: 6(int) Load 8(delta) + 212:207(i16vec3) GroupNonUniformRotateKHR 42 210 211 + 213: 188(ptr) AccessChain 35(data) 206 60 37 + 214: 21(int16_t) CompositeExtract 212 0 + Store 213 214 + 215: 188(ptr) AccessChain 35(data) 206 60 56 + 216: 21(int16_t) CompositeExtract 212 1 + Store 215 216 + 217: 188(ptr) AccessChain 35(data) 206 60 71 + 218: 21(int16_t) CompositeExtract 212 2 + Store 217 218 + 219: 6(int) Load 8(delta) + 220: 196(ptr) AccessChain 35(data) 75 60 + 221: 22(i16vec4) Load 220 + 222: 6(int) Load 8(delta) + 223: 22(i16vec4) GroupNonUniformRotateKHR 42 221 222 + 224: 196(ptr) AccessChain 35(data) 219 60 + Store 224 223 + 225: 6(int) Load 8(delta) + 226: 188(ptr) AccessChain 35(data) 13 60 37 + 227: 21(int16_t) Load 226 + 228: 6(int) Load 8(delta) + 229: 21(int16_t) GroupNonUniformRotateKHR 42 227 228 56 + 230: 188(ptr) AccessChain 35(data) 225 60 37 + Store 230 229 + 231: 6(int) Load 8(delta) + 232: 196(ptr) AccessChain 35(data) 46 60 + 233: 22(i16vec4) Load 232 + 234:195(i16vec2) VectorShuffle 233 233 0 1 + 235: 6(int) Load 8(delta) + 236:195(i16vec2) GroupNonUniformRotateKHR 42 234 235 56 + 237: 188(ptr) AccessChain 35(data) 231 60 37 + 238: 21(int16_t) CompositeExtract 236 0 + Store 237 238 + 239: 188(ptr) AccessChain 35(data) 231 60 56 + 240: 21(int16_t) CompositeExtract 236 1 + Store 239 240 + 241: 6(int) Load 8(delta) + 242: 196(ptr) AccessChain 35(data) 60 60 + 243: 22(i16vec4) Load 242 + 244:207(i16vec3) VectorShuffle 243 243 0 1 2 + 245: 6(int) Load 8(delta) + 246:207(i16vec3) GroupNonUniformRotateKHR 42 244 245 56 + 247: 188(ptr) AccessChain 35(data) 241 60 37 + 248: 21(int16_t) CompositeExtract 246 0 + Store 247 248 + 249: 188(ptr) AccessChain 35(data) 241 60 56 + 250: 21(int16_t) CompositeExtract 246 1 + Store 249 250 + 251: 188(ptr) AccessChain 35(data) 241 60 71 + 252: 21(int16_t) CompositeExtract 246 2 + Store 251 252 + 253: 6(int) Load 8(delta) + 254: 196(ptr) AccessChain 35(data) 75 60 + 255: 22(i16vec4) Load 254 + 256: 6(int) Load 8(delta) + 257: 22(i16vec4) GroupNonUniformRotateKHR 42 255 256 56 + 258: 196(ptr) AccessChain 35(data) 253 60 + Store 258 257 + 259: 6(int) Load 8(delta) + 261: 260(ptr) AccessChain 35(data) 13 75 37 + 262: 23(int16_t) Load 261 + 263: 6(int) Load 8(delta) + 264: 23(int16_t) GroupNonUniformRotateKHR 42 262 263 + 265: 260(ptr) AccessChain 35(data) 259 75 37 + Store 265 264 + 266: 6(int) Load 8(delta) + 269: 268(ptr) AccessChain 35(data) 46 75 + 270: 24(i16vec4) Load 269 + 271:267(i16vec2) VectorShuffle 270 270 0 1 + 272: 6(int) Load 8(delta) + 273:267(i16vec2) GroupNonUniformRotateKHR 42 271 272 + 274: 260(ptr) AccessChain 35(data) 266 75 37 + 275: 23(int16_t) CompositeExtract 273 0 + Store 274 275 + 276: 260(ptr) AccessChain 35(data) 266 75 56 + 277: 23(int16_t) CompositeExtract 273 1 + Store 276 277 + 278: 6(int) Load 8(delta) + 280: 268(ptr) AccessChain 35(data) 60 75 + 281: 24(i16vec4) Load 280 + 282:279(i16vec3) VectorShuffle 281 281 0 1 2 + 283: 6(int) Load 8(delta) + 284:279(i16vec3) GroupNonUniformRotateKHR 42 282 283 + 285: 260(ptr) AccessChain 35(data) 278 75 37 + 286: 23(int16_t) CompositeExtract 284 0 + Store 285 286 + 287: 260(ptr) AccessChain 35(data) 278 75 56 + 288: 23(int16_t) CompositeExtract 284 1 + Store 287 288 + 289: 260(ptr) AccessChain 35(data) 278 75 71 + 290: 23(int16_t) CompositeExtract 284 2 + Store 289 290 + 291: 6(int) Load 8(delta) + 292: 268(ptr) AccessChain 35(data) 75 75 + 293: 24(i16vec4) Load 292 + 294: 6(int) Load 8(delta) + 295: 24(i16vec4) GroupNonUniformRotateKHR 42 293 294 + 296: 268(ptr) AccessChain 35(data) 291 75 + Store 296 295 + 297: 6(int) Load 8(delta) + 298: 260(ptr) AccessChain 35(data) 13 75 37 + 299: 23(int16_t) Load 298 + 300: 6(int) Load 8(delta) + 301: 23(int16_t) GroupNonUniformRotateKHR 42 299 300 56 + 302: 260(ptr) AccessChain 35(data) 297 75 37 + Store 302 301 + 303: 6(int) Load 8(delta) + 304: 268(ptr) AccessChain 35(data) 46 75 + 305: 24(i16vec4) Load 304 + 306:267(i16vec2) VectorShuffle 305 305 0 1 + 307: 6(int) Load 8(delta) + 308:267(i16vec2) GroupNonUniformRotateKHR 42 306 307 56 + 309: 260(ptr) AccessChain 35(data) 303 75 37 + 310: 23(int16_t) CompositeExtract 308 0 + Store 309 310 + 311: 260(ptr) AccessChain 35(data) 303 75 56 + 312: 23(int16_t) CompositeExtract 308 1 + Store 311 312 + 313: 6(int) Load 8(delta) + 314: 268(ptr) AccessChain 35(data) 60 75 + 315: 24(i16vec4) Load 314 + 316:279(i16vec3) VectorShuffle 315 315 0 1 2 + 317: 6(int) Load 8(delta) + 318:279(i16vec3) GroupNonUniformRotateKHR 42 316 317 56 + 319: 260(ptr) AccessChain 35(data) 313 75 37 + 320: 23(int16_t) CompositeExtract 318 0 + Store 319 320 + 321: 260(ptr) AccessChain 35(data) 313 75 56 + 322: 23(int16_t) CompositeExtract 318 1 + Store 321 322 + 323: 260(ptr) AccessChain 35(data) 313 75 71 + 324: 23(int16_t) CompositeExtract 318 2 + Store 323 324 + 325: 6(int) Load 8(delta) + 326: 268(ptr) AccessChain 35(data) 75 75 + 327: 24(i16vec4) Load 326 + 328: 6(int) Load 8(delta) + 329: 24(i16vec4) GroupNonUniformRotateKHR 42 327 328 56 + 330: 268(ptr) AccessChain 35(data) 325 75 + Store 330 329 + 331: 6(int) Load 8(delta) + 334: 333(ptr) AccessChain 35(data) 13 332 37 + 335: 25(int64_t) Load 334 + 336: 6(int) Load 8(delta) + 337: 25(int64_t) GroupNonUniformRotateKHR 42 335 336 + 338: 333(ptr) AccessChain 35(data) 331 332 37 + Store 338 337 + 339: 6(int) Load 8(delta) + 342: 341(ptr) AccessChain 35(data) 46 332 + 343: 26(i64vec4) Load 342 + 344:340(i64vec2) VectorShuffle 343 343 0 1 + 345: 6(int) Load 8(delta) + 346:340(i64vec2) GroupNonUniformRotateKHR 42 344 345 + 347: 333(ptr) AccessChain 35(data) 339 332 37 + 348: 25(int64_t) CompositeExtract 346 0 + Store 347 348 + 349: 333(ptr) AccessChain 35(data) 339 332 56 + 350: 25(int64_t) CompositeExtract 346 1 + Store 349 350 + 351: 6(int) Load 8(delta) + 353: 341(ptr) AccessChain 35(data) 60 332 + 354: 26(i64vec4) Load 353 + 355:352(i64vec3) VectorShuffle 354 354 0 1 2 + 356: 6(int) Load 8(delta) + 357:352(i64vec3) GroupNonUniformRotateKHR 42 355 356 + 358: 333(ptr) AccessChain 35(data) 351 332 37 + 359: 25(int64_t) CompositeExtract 357 0 + Store 358 359 + 360: 333(ptr) AccessChain 35(data) 351 332 56 + 361: 25(int64_t) CompositeExtract 357 1 + Store 360 361 + 362: 333(ptr) AccessChain 35(data) 351 332 71 + 363: 25(int64_t) CompositeExtract 357 2 + Store 362 363 + 364: 6(int) Load 8(delta) + 365: 341(ptr) AccessChain 35(data) 75 332 + 366: 26(i64vec4) Load 365 + 367: 6(int) Load 8(delta) + 368: 26(i64vec4) GroupNonUniformRotateKHR 42 366 367 + 369: 341(ptr) AccessChain 35(data) 364 332 + Store 369 368 + 370: 6(int) Load 8(delta) + 371: 333(ptr) AccessChain 35(data) 13 332 37 + 372: 25(int64_t) Load 371 + 373: 6(int) Load 8(delta) + 374: 25(int64_t) GroupNonUniformRotateKHR 42 372 373 56 + 375: 333(ptr) AccessChain 35(data) 370 332 37 + Store 375 374 + 376: 6(int) Load 8(delta) + 377: 341(ptr) AccessChain 35(data) 46 332 + 378: 26(i64vec4) Load 377 + 379:340(i64vec2) VectorShuffle 378 378 0 1 + 380: 6(int) Load 8(delta) + 381:340(i64vec2) GroupNonUniformRotateKHR 42 379 380 56 + 382: 333(ptr) AccessChain 35(data) 376 332 37 + 383: 25(int64_t) CompositeExtract 381 0 + Store 382 383 + 384: 333(ptr) AccessChain 35(data) 376 332 56 + 385: 25(int64_t) CompositeExtract 381 1 + Store 384 385 + 386: 6(int) Load 8(delta) + 387: 341(ptr) AccessChain 35(data) 60 332 + 388: 26(i64vec4) Load 387 + 389:352(i64vec3) VectorShuffle 388 388 0 1 2 + 390: 6(int) Load 8(delta) + 391:352(i64vec3) GroupNonUniformRotateKHR 42 389 390 56 + 392: 333(ptr) AccessChain 35(data) 386 332 37 + 393: 25(int64_t) CompositeExtract 391 0 + Store 392 393 + 394: 333(ptr) AccessChain 35(data) 386 332 56 + 395: 25(int64_t) CompositeExtract 391 1 + Store 394 395 + 396: 333(ptr) AccessChain 35(data) 386 332 71 + 397: 25(int64_t) CompositeExtract 391 2 + Store 396 397 + 398: 6(int) Load 8(delta) + 399: 341(ptr) AccessChain 35(data) 75 332 + 400: 26(i64vec4) Load 399 + 401: 6(int) Load 8(delta) + 402: 26(i64vec4) GroupNonUniformRotateKHR 42 400 401 56 + 403: 341(ptr) AccessChain 35(data) 398 332 + Store 403 402 + 404: 6(int) Load 8(delta) + 407: 406(ptr) AccessChain 35(data) 13 405 37 + 408: 27(int64_t) Load 407 + 409: 6(int) Load 8(delta) + 410: 27(int64_t) GroupNonUniformRotateKHR 42 408 409 + 411: 406(ptr) AccessChain 35(data) 404 405 37 + Store 411 410 + 412: 6(int) Load 8(delta) + 415: 414(ptr) AccessChain 35(data) 46 405 + 416: 28(i64vec4) Load 415 + 417:413(i64vec2) VectorShuffle 416 416 0 1 + 418: 6(int) Load 8(delta) + 419:413(i64vec2) GroupNonUniformRotateKHR 42 417 418 + 420: 406(ptr) AccessChain 35(data) 412 405 37 + 421: 27(int64_t) CompositeExtract 419 0 + Store 420 421 + 422: 406(ptr) AccessChain 35(data) 412 405 56 + 423: 27(int64_t) CompositeExtract 419 1 + Store 422 423 + 424: 6(int) Load 8(delta) + 426: 414(ptr) AccessChain 35(data) 60 405 + 427: 28(i64vec4) Load 426 + 428:425(i64vec3) VectorShuffle 427 427 0 1 2 + 429: 6(int) Load 8(delta) + 430:425(i64vec3) GroupNonUniformRotateKHR 42 428 429 + 431: 406(ptr) AccessChain 35(data) 424 405 37 + 432: 27(int64_t) CompositeExtract 430 0 + Store 431 432 + 433: 406(ptr) AccessChain 35(data) 424 405 56 + 434: 27(int64_t) CompositeExtract 430 1 + Store 433 434 + 435: 406(ptr) AccessChain 35(data) 424 405 71 + 436: 27(int64_t) CompositeExtract 430 2 + Store 435 436 + 437: 6(int) Load 8(delta) + 438: 414(ptr) AccessChain 35(data) 75 405 + 439: 28(i64vec4) Load 438 + 440: 6(int) Load 8(delta) + 441: 28(i64vec4) GroupNonUniformRotateKHR 42 439 440 + 442: 414(ptr) AccessChain 35(data) 437 405 + Store 442 441 + 443: 6(int) Load 8(delta) + 444: 406(ptr) AccessChain 35(data) 13 405 37 + 445: 27(int64_t) Load 444 + 446: 6(int) Load 8(delta) + 447: 27(int64_t) GroupNonUniformRotateKHR 42 445 446 56 + 448: 406(ptr) AccessChain 35(data) 443 405 37 + Store 448 447 + 449: 6(int) Load 8(delta) + 450: 414(ptr) AccessChain 35(data) 46 405 + 451: 28(i64vec4) Load 450 + 452:413(i64vec2) VectorShuffle 451 451 0 1 + 453: 6(int) Load 8(delta) + 454:413(i64vec2) GroupNonUniformRotateKHR 42 452 453 56 + 455: 406(ptr) AccessChain 35(data) 449 405 37 + 456: 27(int64_t) CompositeExtract 454 0 + Store 455 456 + 457: 406(ptr) AccessChain 35(data) 449 405 56 + 458: 27(int64_t) CompositeExtract 454 1 + Store 457 458 + 459: 6(int) Load 8(delta) + 460: 414(ptr) AccessChain 35(data) 60 405 + 461: 28(i64vec4) Load 460 + 462:425(i64vec3) VectorShuffle 461 461 0 1 2 + 463: 6(int) Load 8(delta) + 464:425(i64vec3) GroupNonUniformRotateKHR 42 462 463 56 + 465: 406(ptr) AccessChain 35(data) 459 405 37 + 466: 27(int64_t) CompositeExtract 464 0 + Store 465 466 + 467: 406(ptr) AccessChain 35(data) 459 405 56 + 468: 27(int64_t) CompositeExtract 464 1 + Store 467 468 + 469: 406(ptr) AccessChain 35(data) 459 405 71 + 470: 27(int64_t) CompositeExtract 464 2 + Store 469 470 + 471: 6(int) Load 8(delta) + 472: 414(ptr) AccessChain 35(data) 75 405 + 473: 28(i64vec4) Load 472 + 474: 6(int) Load 8(delta) + 475: 28(i64vec4) GroupNonUniformRotateKHR 42 473 474 56 + 476: 414(ptr) AccessChain 35(data) 471 405 + Store 476 475 + 477: 6(int) Load 8(delta) + 480: 479(ptr) AccessChain 35(data) 13 478 37 + 481:29(float16_t) Load 480 + 482: 6(int) Load 8(delta) + 483:29(float16_t) GroupNonUniformRotateKHR 42 481 482 + 484: 479(ptr) AccessChain 35(data) 477 478 37 + Store 484 483 + 485: 6(int) Load 8(delta) + 488: 487(ptr) AccessChain 35(data) 46 478 + 489: 30(f16vec4) Load 488 + 490:486(f16vec2) VectorShuffle 489 489 0 1 + 491: 6(int) Load 8(delta) + 492:486(f16vec2) GroupNonUniformRotateKHR 42 490 491 + 493: 479(ptr) AccessChain 35(data) 485 478 37 + 494:29(float16_t) CompositeExtract 492 0 + Store 493 494 + 495: 479(ptr) AccessChain 35(data) 485 478 56 + 496:29(float16_t) CompositeExtract 492 1 + Store 495 496 + 497: 6(int) Load 8(delta) + 499: 487(ptr) AccessChain 35(data) 60 478 + 500: 30(f16vec4) Load 499 + 501:498(f16vec3) VectorShuffle 500 500 0 1 2 + 502: 6(int) Load 8(delta) + 503:498(f16vec3) GroupNonUniformRotateKHR 42 501 502 + 504: 479(ptr) AccessChain 35(data) 497 478 37 + 505:29(float16_t) CompositeExtract 503 0 + Store 504 505 + 506: 479(ptr) AccessChain 35(data) 497 478 56 + 507:29(float16_t) CompositeExtract 503 1 + Store 506 507 + 508: 479(ptr) AccessChain 35(data) 497 478 71 + 509:29(float16_t) CompositeExtract 503 2 + Store 508 509 + 510: 6(int) Load 8(delta) + 511: 487(ptr) AccessChain 35(data) 75 478 + 512: 30(f16vec4) Load 511 + 513: 6(int) Load 8(delta) + 514: 30(f16vec4) GroupNonUniformRotateKHR 42 512 513 + 515: 487(ptr) AccessChain 35(data) 510 478 + Store 515 514 + 516: 6(int) Load 8(delta) + 517: 479(ptr) AccessChain 35(data) 13 478 37 + 518:29(float16_t) Load 517 + 519: 6(int) Load 8(delta) + 520:29(float16_t) GroupNonUniformRotateKHR 42 518 519 56 + 521: 479(ptr) AccessChain 35(data) 516 478 37 + Store 521 520 + 522: 6(int) Load 8(delta) + 523: 487(ptr) AccessChain 35(data) 46 478 + 524: 30(f16vec4) Load 523 + 525:486(f16vec2) VectorShuffle 524 524 0 1 + 526: 6(int) Load 8(delta) + 527:486(f16vec2) GroupNonUniformRotateKHR 42 525 526 56 + 528: 479(ptr) AccessChain 35(data) 522 478 37 + 529:29(float16_t) CompositeExtract 527 0 + Store 528 529 + 530: 479(ptr) AccessChain 35(data) 522 478 56 + 531:29(float16_t) CompositeExtract 527 1 + Store 530 531 + 532: 6(int) Load 8(delta) + 533: 487(ptr) AccessChain 35(data) 60 478 + 534: 30(f16vec4) Load 533 + 535:498(f16vec3) VectorShuffle 534 534 0 1 2 + 536: 6(int) Load 8(delta) + 537:498(f16vec3) GroupNonUniformRotateKHR 42 535 536 56 + 538: 479(ptr) AccessChain 35(data) 532 478 37 + 539:29(float16_t) CompositeExtract 537 0 + Store 538 539 + 540: 479(ptr) AccessChain 35(data) 532 478 56 + 541:29(float16_t) CompositeExtract 537 1 + Store 540 541 + 542: 479(ptr) AccessChain 35(data) 532 478 71 + 543:29(float16_t) CompositeExtract 537 2 + Store 542 543 + 544: 6(int) Load 8(delta) + 545: 487(ptr) AccessChain 35(data) 75 478 + 546: 30(f16vec4) Load 545 + 547: 6(int) Load 8(delta) + 548: 30(f16vec4) GroupNonUniformRotateKHR 42 546 547 56 + 549: 487(ptr) AccessChain 35(data) 544 478 + Store 549 548 + Return + FunctionEnd diff --git a/Test/baseResults/spv.subgroupExtendedTypesRotateNeg.comp.out b/Test/baseResults/spv.subgroupExtendedTypesRotateNeg.comp.out new file mode 100644 index 0000000000..b38650671f --- /dev/null +++ b/Test/baseResults/spv.subgroupExtendedTypesRotateNeg.comp.out @@ -0,0 +1,61 @@ +spv.subgroupExtendedTypesRotateNeg.comp +ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:36: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:37: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:38: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:41: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:42: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:43: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:46: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:47: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:48: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8 +ERROR: 0:51: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:52: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:53: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:56: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:57: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:58: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:61: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:62: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:63: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:66: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:67: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:68: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16 +ERROR: 0:71: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:72: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:73: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:76: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:77: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:78: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:81: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:82: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:83: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:86: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:87: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:88: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:89: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64 +ERROR: 0:91: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16 +ERROR: 0:92: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16 +ERROR: 0:93: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16 +ERROR: 0:94: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16 +ERROR: 0:96: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16 +ERROR: 0:97: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16 +ERROR: 0:98: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16 +ERROR: 0:99: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16 +ERROR: 56 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out index eaea708bcd..354e344c68 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out @@ -1,6 +1,6 @@ spv.subgroupExtendedTypesShuffle.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 554 Capability Shader @@ -49,6 +49,7 @@ spv.subgroupExtendedTypesShuffle.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 31(Buffers) Block MemberDecorate 31(Buffers) 0 Offset 0 MemberDecorate 31(Buffers) 1 Offset 4 MemberDecorate 31(Buffers) 2 Offset 8 @@ -56,9 +57,8 @@ spv.subgroupExtendedTypesShuffle.comp MemberDecorate 31(Buffers) 4 Offset 32 MemberDecorate 31(Buffers) 5 Offset 64 MemberDecorate 31(Buffers) 6 Offset 96 - Decorate 31(Buffers) Block - Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 + Decorate 34(data) DescriptorSet 0 Decorate 553 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out index 8665c46c26..2ce9481238 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out @@ -1,6 +1,6 @@ spv.subgroupExtendedTypesShuffleRelative.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 554 Capability Shader @@ -49,6 +49,7 @@ spv.subgroupExtendedTypesShuffleRelative.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 31(Buffers) Block MemberDecorate 31(Buffers) 0 Offset 0 MemberDecorate 31(Buffers) 1 Offset 4 MemberDecorate 31(Buffers) 2 Offset 8 @@ -56,9 +57,8 @@ spv.subgroupExtendedTypesShuffleRelative.comp MemberDecorate 31(Buffers) 4 Offset 32 MemberDecorate 31(Buffers) 5 Offset 64 MemberDecorate 31(Buffers) 6 Offset 96 - Decorate 31(Buffers) Block - Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 + Decorate 34(data) DescriptorSet 0 Decorate 553 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out index 6fde1f938b..f4b35addd1 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out @@ -1,6 +1,6 @@ spv.subgroupExtendedTypesVote.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 277 Capability Shader @@ -50,6 +50,7 @@ spv.subgroupExtendedTypesVote.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 32(Buffers) Block MemberDecorate 32(Buffers) 0 Offset 0 MemberDecorate 32(Buffers) 1 Offset 4 MemberDecorate 32(Buffers) 2 Offset 8 @@ -58,9 +59,8 @@ spv.subgroupExtendedTypesVote.comp MemberDecorate 32(Buffers) 5 Offset 64 MemberDecorate 32(Buffers) 6 Offset 96 MemberDecorate 32(Buffers) 7 Offset 104 - Decorate 32(Buffers) Block - Decorate 35(data) DescriptorSet 0 Decorate 35(data) Binding 0 + Decorate 35(data) DescriptorSet 0 Decorate 276 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupPartitioned.comp.out b/Test/baseResults/spv.subgroupPartitioned.comp.out index 0e7b7ef294..4c129dbbd4 100644 --- a/Test/baseResults/spv.subgroupPartitioned.comp.out +++ b/Test/baseResults/spv.subgroupPartitioned.comp.out @@ -1,6 +1,6 @@ spv.subgroupPartitioned.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 2807 Capability Shader @@ -34,13 +34,13 @@ spv.subgroupPartitioned.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 28(Buffers) Block MemberDecorate 28(Buffers) 0 Offset 0 MemberDecorate 28(Buffers) 1 Offset 16 MemberDecorate 28(Buffers) 2 Offset 32 MemberDecorate 28(Buffers) 3 Offset 64 - Decorate 28(Buffers) Block - Decorate 31(data) DescriptorSet 0 Decorate 31(data) Binding 0 + Decorate 31(data) DescriptorSet 0 Decorate 2806 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupQuad.comp.out b/Test/baseResults/spv.subgroupQuad.comp.out index 143d01d779..cc5a1e386c 100644 --- a/Test/baseResults/spv.subgroupQuad.comp.out +++ b/Test/baseResults/spv.subgroupQuad.comp.out @@ -1,6 +1,6 @@ spv.subgroupQuad.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 696 Capability Shader @@ -32,13 +32,13 @@ spv.subgroupQuad.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 24(Buffers) Block MemberDecorate 24(Buffers) 0 Offset 0 MemberDecorate 24(Buffers) 1 Offset 16 MemberDecorate 24(Buffers) 2 Offset 32 MemberDecorate 24(Buffers) 3 Offset 64 - Decorate 24(Buffers) Block - Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 + Decorate 27(data) DescriptorSet 0 Decorate 695 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupRotate.comp.out b/Test/baseResults/spv.subgroupRotate.comp.out new file mode 100644 index 0000000000..147b37fbae --- /dev/null +++ b/Test/baseResults/spv.subgroupRotate.comp.out @@ -0,0 +1,529 @@ +spv.subgroupRotate.comp +// Module Version 10300 +// Generated by (magic number): 8000b +// Id's are bound by 418 + + Capability Shader + Capability Float64 + Capability CapabilityGroupNonUniformRotateKHR + Extension "SPV_KHR_subgroup_rotate" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 8 8 1 + Source GLSL 450 + SourceExtension "GL_KHR_shader_subgroup_rotate" + Name 4 "main" + Name 8 "delta" + Name 9 "roblock" + MemberName 9(roblock) 0 "delta" + Name 11 "ro" + Name 23 "Buffers" + MemberName 23(Buffers) 0 "f4" + MemberName 23(Buffers) 1 "i4" + MemberName 23(Buffers) 2 "u4" + MemberName 23(Buffers) 3 "d4" + Name 27 "data" + Decorate 9(roblock) Block + MemberDecorate 9(roblock) 0 NonWritable + MemberDecorate 9(roblock) 0 Offset 0 + Decorate 11(ro) NonWritable + Decorate 11(ro) Binding 1 + Decorate 11(ro) DescriptorSet 0 + Decorate 23(Buffers) Block + MemberDecorate 23(Buffers) 0 Offset 0 + MemberDecorate 23(Buffers) 1 Offset 16 + MemberDecorate 23(Buffers) 2 Offset 32 + MemberDecorate 23(Buffers) 3 Offset 64 + Decorate 27(data) Binding 0 + Decorate 27(data) DescriptorSet 0 + Decorate 417 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9(roblock): TypeStruct 6(int) + 10: TypePointer StorageBuffer 9(roblock) + 11(ro): 10(ptr) Variable StorageBuffer + 12: TypeInt 32 1 + 13: 12(int) Constant 0 + 14: TypePointer StorageBuffer 6(int) + 17: TypeFloat 32 + 18: TypeVector 17(float) 4 + 19: TypeVector 12(int) 4 + 20: TypeVector 6(int) 4 + 21: TypeFloat 64 + 22: TypeVector 21(float64_t) 4 + 23(Buffers): TypeStruct 18(fvec4) 19(ivec4) 20(ivec4) 22(f64vec4) + 24: 6(int) Constant 4 + 25: TypeArray 23(Buffers) 24 + 26: TypePointer StorageBuffer 25 + 27(data): 26(ptr) Variable StorageBuffer + 29: 6(int) Constant 0 + 30: TypePointer StorageBuffer 17(float) + 34: 6(int) Constant 3 + 38: 12(int) Constant 1 + 39: TypeVector 17(float) 2 + 40: TypePointer StorageBuffer 18(fvec4) + 48: 6(int) Constant 1 + 52: 12(int) Constant 2 + 53: TypeVector 17(float) 3 + 63: 6(int) Constant 2 + 67: 12(int) Constant 3 + 74: TypePointer StorageBuffer 12(int) + 81: TypeVector 12(int) 2 + 82: TypePointer StorageBuffer 19(ivec4) + 93: TypeVector 12(int) 3 + 118: TypeVector 6(int) 2 + 119: TypePointer StorageBuffer 20(ivec4) + 130: TypeVector 6(int) 3 + 149: TypePointer StorageBuffer 21(float64_t) + 156: TypeVector 21(float64_t) 2 + 157: TypePointer StorageBuffer 22(f64vec4) + 168: TypeVector 21(float64_t) 3 + 189: TypeBool + 199: 81(ivec2) ConstantComposite 13 13 + 200: TypeVector 189(bool) 2 + 204: 81(ivec2) ConstantComposite 38 38 + 214: 93(ivec3) ConstantComposite 13 13 13 + 215: TypeVector 189(bool) 3 + 219: 93(ivec3) ConstantComposite 38 38 38 + 230: 19(ivec4) ConstantComposite 13 13 13 13 + 231: TypeVector 189(bool) 4 + 235: 19(ivec4) ConstantComposite 38 38 38 38 + 416: 6(int) Constant 8 + 417: 130(ivec3) ConstantComposite 416 416 48 + 4(main): 2 Function None 3 + 5: Label + 8(delta): 7(ptr) Variable Function + 15: 14(ptr) AccessChain 11(ro) 13 + 16: 6(int) Load 15 + Store 8(delta) 16 + 28: 6(int) Load 8(delta) + 31: 30(ptr) AccessChain 27(data) 13 13 29 + 32: 17(float) Load 31 + 33: 6(int) Load 8(delta) + 35: 17(float) GroupNonUniformRotateKHR 34 32 33 + 36: 30(ptr) AccessChain 27(data) 28 13 29 + Store 36 35 + 37: 6(int) Load 8(delta) + 41: 40(ptr) AccessChain 27(data) 38 13 + 42: 18(fvec4) Load 41 + 43: 39(fvec2) VectorShuffle 42 42 0 1 + 44: 6(int) Load 8(delta) + 45: 39(fvec2) GroupNonUniformRotateKHR 34 43 44 + 46: 30(ptr) AccessChain 27(data) 37 13 29 + 47: 17(float) CompositeExtract 45 0 + Store 46 47 + 49: 30(ptr) AccessChain 27(data) 37 13 48 + 50: 17(float) CompositeExtract 45 1 + Store 49 50 + 51: 6(int) Load 8(delta) + 54: 40(ptr) AccessChain 27(data) 52 13 + 55: 18(fvec4) Load 54 + 56: 53(fvec3) VectorShuffle 55 55 0 1 2 + 57: 6(int) Load 8(delta) + 58: 53(fvec3) GroupNonUniformRotateKHR 34 56 57 + 59: 30(ptr) AccessChain 27(data) 51 13 29 + 60: 17(float) CompositeExtract 58 0 + Store 59 60 + 61: 30(ptr) AccessChain 27(data) 51 13 48 + 62: 17(float) CompositeExtract 58 1 + Store 61 62 + 64: 30(ptr) AccessChain 27(data) 51 13 63 + 65: 17(float) CompositeExtract 58 2 + Store 64 65 + 66: 6(int) Load 8(delta) + 68: 40(ptr) AccessChain 27(data) 67 13 + 69: 18(fvec4) Load 68 + 70: 6(int) Load 8(delta) + 71: 18(fvec4) GroupNonUniformRotateKHR 34 69 70 + 72: 40(ptr) AccessChain 27(data) 66 13 + Store 72 71 + 73: 6(int) Load 8(delta) + 75: 74(ptr) AccessChain 27(data) 13 38 29 + 76: 12(int) Load 75 + 77: 6(int) Load 8(delta) + 78: 12(int) GroupNonUniformRotateKHR 34 76 77 + 79: 74(ptr) AccessChain 27(data) 73 38 29 + Store 79 78 + 80: 6(int) Load 8(delta) + 83: 82(ptr) AccessChain 27(data) 38 38 + 84: 19(ivec4) Load 83 + 85: 81(ivec2) VectorShuffle 84 84 0 1 + 86: 6(int) Load 8(delta) + 87: 81(ivec2) GroupNonUniformRotateKHR 34 85 86 + 88: 74(ptr) AccessChain 27(data) 80 38 29 + 89: 12(int) CompositeExtract 87 0 + Store 88 89 + 90: 74(ptr) AccessChain 27(data) 80 38 48 + 91: 12(int) CompositeExtract 87 1 + Store 90 91 + 92: 6(int) Load 8(delta) + 94: 82(ptr) AccessChain 27(data) 52 38 + 95: 19(ivec4) Load 94 + 96: 93(ivec3) VectorShuffle 95 95 0 1 2 + 97: 6(int) Load 8(delta) + 98: 93(ivec3) GroupNonUniformRotateKHR 34 96 97 + 99: 74(ptr) AccessChain 27(data) 92 38 29 + 100: 12(int) CompositeExtract 98 0 + Store 99 100 + 101: 74(ptr) AccessChain 27(data) 92 38 48 + 102: 12(int) CompositeExtract 98 1 + Store 101 102 + 103: 74(ptr) AccessChain 27(data) 92 38 63 + 104: 12(int) CompositeExtract 98 2 + Store 103 104 + 105: 6(int) Load 8(delta) + 106: 82(ptr) AccessChain 27(data) 67 38 + 107: 19(ivec4) Load 106 + 108: 6(int) Load 8(delta) + 109: 19(ivec4) GroupNonUniformRotateKHR 34 107 108 + 110: 82(ptr) AccessChain 27(data) 105 38 + Store 110 109 + 111: 6(int) Load 8(delta) + 112: 14(ptr) AccessChain 27(data) 13 52 29 + 113: 6(int) Load 112 + 114: 6(int) Load 8(delta) + 115: 6(int) GroupNonUniformRotateKHR 34 113 114 + 116: 14(ptr) AccessChain 27(data) 111 52 29 + Store 116 115 + 117: 6(int) Load 8(delta) + 120: 119(ptr) AccessChain 27(data) 38 52 + 121: 20(ivec4) Load 120 + 122: 118(ivec2) VectorShuffle 121 121 0 1 + 123: 6(int) Load 8(delta) + 124: 118(ivec2) GroupNonUniformRotateKHR 34 122 123 + 125: 14(ptr) AccessChain 27(data) 117 52 29 + 126: 6(int) CompositeExtract 124 0 + Store 125 126 + 127: 14(ptr) AccessChain 27(data) 117 52 48 + 128: 6(int) CompositeExtract 124 1 + Store 127 128 + 129: 6(int) Load 8(delta) + 131: 119(ptr) AccessChain 27(data) 52 52 + 132: 20(ivec4) Load 131 + 133: 130(ivec3) VectorShuffle 132 132 0 1 2 + 134: 6(int) Load 8(delta) + 135: 130(ivec3) GroupNonUniformRotateKHR 34 133 134 + 136: 14(ptr) AccessChain 27(data) 129 52 29 + 137: 6(int) CompositeExtract 135 0 + Store 136 137 + 138: 14(ptr) AccessChain 27(data) 129 52 48 + 139: 6(int) CompositeExtract 135 1 + Store 138 139 + 140: 14(ptr) AccessChain 27(data) 129 52 63 + 141: 6(int) CompositeExtract 135 2 + Store 140 141 + 142: 6(int) Load 8(delta) + 143: 119(ptr) AccessChain 27(data) 67 52 + 144: 20(ivec4) Load 143 + 145: 6(int) Load 8(delta) + 146: 20(ivec4) GroupNonUniformRotateKHR 34 144 145 + 147: 119(ptr) AccessChain 27(data) 142 52 + Store 147 146 + 148: 6(int) Load 8(delta) + 150: 149(ptr) AccessChain 27(data) 13 67 29 + 151:21(float64_t) Load 150 + 152: 6(int) Load 8(delta) + 153:21(float64_t) GroupNonUniformRotateKHR 34 151 152 + 154: 149(ptr) AccessChain 27(data) 148 67 29 + Store 154 153 + 155: 6(int) Load 8(delta) + 158: 157(ptr) AccessChain 27(data) 38 67 + 159: 22(f64vec4) Load 158 + 160:156(f64vec2) VectorShuffle 159 159 0 1 + 161: 6(int) Load 8(delta) + 162:156(f64vec2) GroupNonUniformRotateKHR 34 160 161 + 163: 149(ptr) AccessChain 27(data) 155 67 29 + 164:21(float64_t) CompositeExtract 162 0 + Store 163 164 + 165: 149(ptr) AccessChain 27(data) 155 67 48 + 166:21(float64_t) CompositeExtract 162 1 + Store 165 166 + 167: 6(int) Load 8(delta) + 169: 157(ptr) AccessChain 27(data) 52 67 + 170: 22(f64vec4) Load 169 + 171:168(f64vec3) VectorShuffle 170 170 0 1 2 + 172: 6(int) Load 8(delta) + 173:168(f64vec3) GroupNonUniformRotateKHR 34 171 172 + 174: 149(ptr) AccessChain 27(data) 167 67 29 + 175:21(float64_t) CompositeExtract 173 0 + Store 174 175 + 176: 149(ptr) AccessChain 27(data) 167 67 48 + 177:21(float64_t) CompositeExtract 173 1 + Store 176 177 + 178: 149(ptr) AccessChain 27(data) 167 67 63 + 179:21(float64_t) CompositeExtract 173 2 + Store 178 179 + 180: 6(int) Load 8(delta) + 181: 157(ptr) AccessChain 27(data) 67 67 + 182: 22(f64vec4) Load 181 + 183: 6(int) Load 8(delta) + 184: 22(f64vec4) GroupNonUniformRotateKHR 34 182 183 + 185: 157(ptr) AccessChain 27(data) 180 67 + Store 185 184 + 186: 6(int) Load 8(delta) + 187: 74(ptr) AccessChain 27(data) 13 38 29 + 188: 12(int) Load 187 + 190: 189(bool) SLessThan 188 13 + 191: 6(int) Load 8(delta) + 192: 189(bool) GroupNonUniformRotateKHR 34 190 191 + 193: 12(int) Select 192 38 13 + 194: 74(ptr) AccessChain 27(data) 186 38 29 + Store 194 193 + 195: 6(int) Load 8(delta) + 196: 82(ptr) AccessChain 27(data) 38 38 + 197: 19(ivec4) Load 196 + 198: 81(ivec2) VectorShuffle 197 197 0 1 + 201: 200(bvec2) SLessThan 198 199 + 202: 6(int) Load 8(delta) + 203: 200(bvec2) GroupNonUniformRotateKHR 34 201 202 + 205: 81(ivec2) Select 203 204 199 + 206: 74(ptr) AccessChain 27(data) 195 38 29 + 207: 12(int) CompositeExtract 205 0 + Store 206 207 + 208: 74(ptr) AccessChain 27(data) 195 38 48 + 209: 12(int) CompositeExtract 205 1 + Store 208 209 + 210: 6(int) Load 8(delta) + 211: 82(ptr) AccessChain 27(data) 38 38 + 212: 19(ivec4) Load 211 + 213: 93(ivec3) VectorShuffle 212 212 0 1 2 + 216: 215(bvec3) SLessThan 213 214 + 217: 6(int) Load 8(delta) + 218: 215(bvec3) GroupNonUniformRotateKHR 34 216 217 + 220: 93(ivec3) Select 218 219 214 + 221: 74(ptr) AccessChain 27(data) 210 38 29 + 222: 12(int) CompositeExtract 220 0 + Store 221 222 + 223: 74(ptr) AccessChain 27(data) 210 38 48 + 224: 12(int) CompositeExtract 220 1 + Store 223 224 + 225: 74(ptr) AccessChain 27(data) 210 38 63 + 226: 12(int) CompositeExtract 220 2 + Store 225 226 + 227: 6(int) Load 8(delta) + 228: 82(ptr) AccessChain 27(data) 38 38 + 229: 19(ivec4) Load 228 + 232: 231(bvec4) SLessThan 229 230 + 233: 6(int) Load 8(delta) + 234: 231(bvec4) GroupNonUniformRotateKHR 34 232 233 + 236: 19(ivec4) Select 234 235 230 + 237: 82(ptr) AccessChain 27(data) 227 38 + Store 237 236 + 238: 6(int) Load 8(delta) + 239: 30(ptr) AccessChain 27(data) 13 13 29 + 240: 17(float) Load 239 + 241: 6(int) Load 8(delta) + 242: 17(float) GroupNonUniformRotateKHR 34 240 241 48 + 243: 30(ptr) AccessChain 27(data) 238 13 29 + Store 243 242 + 244: 6(int) Load 8(delta) + 245: 40(ptr) AccessChain 27(data) 38 13 + 246: 18(fvec4) Load 245 + 247: 39(fvec2) VectorShuffle 246 246 0 1 + 248: 6(int) Load 8(delta) + 249: 39(fvec2) GroupNonUniformRotateKHR 34 247 248 48 + 250: 30(ptr) AccessChain 27(data) 244 13 29 + 251: 17(float) CompositeExtract 249 0 + Store 250 251 + 252: 30(ptr) AccessChain 27(data) 244 13 48 + 253: 17(float) CompositeExtract 249 1 + Store 252 253 + 254: 6(int) Load 8(delta) + 255: 40(ptr) AccessChain 27(data) 52 13 + 256: 18(fvec4) Load 255 + 257: 53(fvec3) VectorShuffle 256 256 0 1 2 + 258: 6(int) Load 8(delta) + 259: 53(fvec3) GroupNonUniformRotateKHR 34 257 258 48 + 260: 30(ptr) AccessChain 27(data) 254 13 29 + 261: 17(float) CompositeExtract 259 0 + Store 260 261 + 262: 30(ptr) AccessChain 27(data) 254 13 48 + 263: 17(float) CompositeExtract 259 1 + Store 262 263 + 264: 30(ptr) AccessChain 27(data) 254 13 63 + 265: 17(float) CompositeExtract 259 2 + Store 264 265 + 266: 6(int) Load 8(delta) + 267: 40(ptr) AccessChain 27(data) 67 13 + 268: 18(fvec4) Load 267 + 269: 6(int) Load 8(delta) + 270: 18(fvec4) GroupNonUniformRotateKHR 34 268 269 48 + 271: 40(ptr) AccessChain 27(data) 266 13 + Store 271 270 + 272: 6(int) Load 8(delta) + 273: 74(ptr) AccessChain 27(data) 13 38 29 + 274: 12(int) Load 273 + 275: 6(int) Load 8(delta) + 276: 12(int) GroupNonUniformRotateKHR 34 274 275 48 + 277: 74(ptr) AccessChain 27(data) 272 38 29 + Store 277 276 + 278: 6(int) Load 8(delta) + 279: 82(ptr) AccessChain 27(data) 38 38 + 280: 19(ivec4) Load 279 + 281: 81(ivec2) VectorShuffle 280 280 0 1 + 282: 6(int) Load 8(delta) + 283: 81(ivec2) GroupNonUniformRotateKHR 34 281 282 48 + 284: 74(ptr) AccessChain 27(data) 278 38 29 + 285: 12(int) CompositeExtract 283 0 + Store 284 285 + 286: 74(ptr) AccessChain 27(data) 278 38 48 + 287: 12(int) CompositeExtract 283 1 + Store 286 287 + 288: 6(int) Load 8(delta) + 289: 82(ptr) AccessChain 27(data) 52 38 + 290: 19(ivec4) Load 289 + 291: 93(ivec3) VectorShuffle 290 290 0 1 2 + 292: 6(int) Load 8(delta) + 293: 93(ivec3) GroupNonUniformRotateKHR 34 291 292 48 + 294: 74(ptr) AccessChain 27(data) 288 38 29 + 295: 12(int) CompositeExtract 293 0 + Store 294 295 + 296: 74(ptr) AccessChain 27(data) 288 38 48 + 297: 12(int) CompositeExtract 293 1 + Store 296 297 + 298: 74(ptr) AccessChain 27(data) 288 38 63 + 299: 12(int) CompositeExtract 293 2 + Store 298 299 + 300: 6(int) Load 8(delta) + 301: 82(ptr) AccessChain 27(data) 67 38 + 302: 19(ivec4) Load 301 + 303: 6(int) Load 8(delta) + 304: 19(ivec4) GroupNonUniformRotateKHR 34 302 303 48 + 305: 82(ptr) AccessChain 27(data) 300 38 + Store 305 304 + 306: 6(int) Load 8(delta) + 307: 14(ptr) AccessChain 27(data) 13 52 29 + 308: 6(int) Load 307 + 309: 6(int) Load 8(delta) + 310: 6(int) GroupNonUniformRotateKHR 34 308 309 48 + 311: 14(ptr) AccessChain 27(data) 306 52 29 + Store 311 310 + 312: 6(int) Load 8(delta) + 313: 119(ptr) AccessChain 27(data) 38 52 + 314: 20(ivec4) Load 313 + 315: 118(ivec2) VectorShuffle 314 314 0 1 + 316: 6(int) Load 8(delta) + 317: 118(ivec2) GroupNonUniformRotateKHR 34 315 316 48 + 318: 14(ptr) AccessChain 27(data) 312 52 29 + 319: 6(int) CompositeExtract 317 0 + Store 318 319 + 320: 14(ptr) AccessChain 27(data) 312 52 48 + 321: 6(int) CompositeExtract 317 1 + Store 320 321 + 322: 6(int) Load 8(delta) + 323: 119(ptr) AccessChain 27(data) 52 52 + 324: 20(ivec4) Load 323 + 325: 130(ivec3) VectorShuffle 324 324 0 1 2 + 326: 6(int) Load 8(delta) + 327: 130(ivec3) GroupNonUniformRotateKHR 34 325 326 48 + 328: 14(ptr) AccessChain 27(data) 322 52 29 + 329: 6(int) CompositeExtract 327 0 + Store 328 329 + 330: 14(ptr) AccessChain 27(data) 322 52 48 + 331: 6(int) CompositeExtract 327 1 + Store 330 331 + 332: 14(ptr) AccessChain 27(data) 322 52 63 + 333: 6(int) CompositeExtract 327 2 + Store 332 333 + 334: 6(int) Load 8(delta) + 335: 119(ptr) AccessChain 27(data) 67 52 + 336: 20(ivec4) Load 335 + 337: 6(int) Load 8(delta) + 338: 20(ivec4) GroupNonUniformRotateKHR 34 336 337 48 + 339: 119(ptr) AccessChain 27(data) 334 52 + Store 339 338 + 340: 6(int) Load 8(delta) + 341: 149(ptr) AccessChain 27(data) 13 67 29 + 342:21(float64_t) Load 341 + 343: 6(int) Load 8(delta) + 344:21(float64_t) GroupNonUniformRotateKHR 34 342 343 48 + 345: 149(ptr) AccessChain 27(data) 340 67 29 + Store 345 344 + 346: 6(int) Load 8(delta) + 347: 157(ptr) AccessChain 27(data) 38 67 + 348: 22(f64vec4) Load 347 + 349:156(f64vec2) VectorShuffle 348 348 0 1 + 350: 6(int) Load 8(delta) + 351:156(f64vec2) GroupNonUniformRotateKHR 34 349 350 48 + 352: 149(ptr) AccessChain 27(data) 346 67 29 + 353:21(float64_t) CompositeExtract 351 0 + Store 352 353 + 354: 149(ptr) AccessChain 27(data) 346 67 48 + 355:21(float64_t) CompositeExtract 351 1 + Store 354 355 + 356: 6(int) Load 8(delta) + 357: 157(ptr) AccessChain 27(data) 52 67 + 358: 22(f64vec4) Load 357 + 359:168(f64vec3) VectorShuffle 358 358 0 1 2 + 360: 6(int) Load 8(delta) + 361:168(f64vec3) GroupNonUniformRotateKHR 34 359 360 48 + 362: 149(ptr) AccessChain 27(data) 356 67 29 + 363:21(float64_t) CompositeExtract 361 0 + Store 362 363 + 364: 149(ptr) AccessChain 27(data) 356 67 48 + 365:21(float64_t) CompositeExtract 361 1 + Store 364 365 + 366: 149(ptr) AccessChain 27(data) 356 67 63 + 367:21(float64_t) CompositeExtract 361 2 + Store 366 367 + 368: 6(int) Load 8(delta) + 369: 157(ptr) AccessChain 27(data) 67 67 + 370: 22(f64vec4) Load 369 + 371: 6(int) Load 8(delta) + 372: 22(f64vec4) GroupNonUniformRotateKHR 34 370 371 48 + 373: 157(ptr) AccessChain 27(data) 368 67 + Store 373 372 + 374: 6(int) Load 8(delta) + 375: 74(ptr) AccessChain 27(data) 13 38 29 + 376: 12(int) Load 375 + 377: 189(bool) SLessThan 376 13 + 378: 6(int) Load 8(delta) + 379: 189(bool) GroupNonUniformRotateKHR 34 377 378 48 + 380: 12(int) Select 379 38 13 + 381: 74(ptr) AccessChain 27(data) 374 38 29 + Store 381 380 + 382: 6(int) Load 8(delta) + 383: 82(ptr) AccessChain 27(data) 38 38 + 384: 19(ivec4) Load 383 + 385: 81(ivec2) VectorShuffle 384 384 0 1 + 386: 200(bvec2) SLessThan 385 199 + 387: 6(int) Load 8(delta) + 388: 200(bvec2) GroupNonUniformRotateKHR 34 386 387 48 + 389: 81(ivec2) Select 388 204 199 + 390: 74(ptr) AccessChain 27(data) 382 38 29 + 391: 12(int) CompositeExtract 389 0 + Store 390 391 + 392: 74(ptr) AccessChain 27(data) 382 38 48 + 393: 12(int) CompositeExtract 389 1 + Store 392 393 + 394: 6(int) Load 8(delta) + 395: 82(ptr) AccessChain 27(data) 38 38 + 396: 19(ivec4) Load 395 + 397: 93(ivec3) VectorShuffle 396 396 0 1 2 + 398: 215(bvec3) SLessThan 397 214 + 399: 6(int) Load 8(delta) + 400: 215(bvec3) GroupNonUniformRotateKHR 34 398 399 48 + 401: 93(ivec3) Select 400 219 214 + 402: 74(ptr) AccessChain 27(data) 394 38 29 + 403: 12(int) CompositeExtract 401 0 + Store 402 403 + 404: 74(ptr) AccessChain 27(data) 394 38 48 + 405: 12(int) CompositeExtract 401 1 + Store 404 405 + 406: 74(ptr) AccessChain 27(data) 394 38 63 + 407: 12(int) CompositeExtract 401 2 + Store 406 407 + 408: 6(int) Load 8(delta) + 409: 82(ptr) AccessChain 27(data) 38 38 + 410: 19(ivec4) Load 409 + 411: 231(bvec4) SLessThan 410 230 + 412: 6(int) Load 8(delta) + 413: 231(bvec4) GroupNonUniformRotateKHR 34 411 412 48 + 414: 19(ivec4) Select 413 235 230 + 415: 82(ptr) AccessChain 27(data) 408 38 + Store 415 414 + Return + FunctionEnd diff --git a/Test/baseResults/spv.subgroupShuffle.comp.out b/Test/baseResults/spv.subgroupShuffle.comp.out index 02cf89f8bf..d87039b28c 100644 --- a/Test/baseResults/spv.subgroupShuffle.comp.out +++ b/Test/baseResults/spv.subgroupShuffle.comp.out @@ -1,6 +1,6 @@ spv.subgroupShuffle.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 420 Capability Shader @@ -32,13 +32,13 @@ spv.subgroupShuffle.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 24(Buffers) Block MemberDecorate 24(Buffers) 0 Offset 0 MemberDecorate 24(Buffers) 1 Offset 16 MemberDecorate 24(Buffers) 2 Offset 32 MemberDecorate 24(Buffers) 3 Offset 64 - Decorate 24(Buffers) Block - Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 + Decorate 27(data) DescriptorSet 0 Decorate 419 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupShuffleRelative.comp.out b/Test/baseResults/spv.subgroupShuffleRelative.comp.out index e8486b660e..b0e8a0d469 100644 --- a/Test/baseResults/spv.subgroupShuffleRelative.comp.out +++ b/Test/baseResults/spv.subgroupShuffleRelative.comp.out @@ -1,6 +1,6 @@ spv.subgroupShuffleRelative.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 420 Capability Shader @@ -32,13 +32,13 @@ spv.subgroupShuffleRelative.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 24(Buffers) Block MemberDecorate 24(Buffers) 0 Offset 0 MemberDecorate 24(Buffers) 1 Offset 16 MemberDecorate 24(Buffers) 2 Offset 32 MemberDecorate 24(Buffers) 3 Offset 64 - Decorate 24(Buffers) Block - Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 + Decorate 27(data) DescriptorSet 0 Decorate 419 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subgroupSizeARB.frag.out b/Test/baseResults/spv.subgroupSizeARB.frag.out new file mode 100644 index 0000000000..f1befa4d93 --- /dev/null +++ b/Test/baseResults/spv.subgroupSizeARB.frag.out @@ -0,0 +1,34 @@ +spv.subgroupSizeARB.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 12 + + Capability Shader + Capability SubgroupBallotKHR + Extension "SPV_KHR_shader_ballot" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 10 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_ARB_shader_ballot" + SourceExtension "GL_KHR_shader_subgroup_basic" + Name 4 "main" + Name 8 "result" + Name 10 "gl_SubGroupSizeARB" + Decorate 8(result) Location 0 + Decorate 10(gl_SubGroupSizeARB) BuiltIn SubgroupSize + Decorate 10(gl_SubGroupSizeARB) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Output 6(int) + 8(result): 7(ptr) Variable Output + 9: TypePointer Input 6(int) +10(gl_SubGroupSizeARB): 9(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 11: 6(int) Load 10(gl_SubGroupSizeARB) + Store 8(result) 11 + Return + FunctionEnd diff --git a/Test/baseResults/spv.subgroupUniformControlFlow.vert.out b/Test/baseResults/spv.subgroupUniformControlFlow.vert.out index b7fce5a3ca..a18918632c 100644 --- a/Test/baseResults/spv.subgroupUniformControlFlow.vert.out +++ b/Test/baseResults/spv.subgroupUniformControlFlow.vert.out @@ -2,7 +2,7 @@ spv.subgroupUniformControlFlow.vert WARNING: 0:7: '' : attribute with arguments not recognized, skipping // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 6 Capability Shader diff --git a/Test/baseResults/spv.subgroupVote.comp.out b/Test/baseResults/spv.subgroupVote.comp.out index ad8ffaaa35..f49dcbe81e 100644 --- a/Test/baseResults/spv.subgroupVote.comp.out +++ b/Test/baseResults/spv.subgroupVote.comp.out @@ -1,6 +1,6 @@ spv.subgroupVote.comp // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 216 Capability Shader @@ -33,14 +33,14 @@ spv.subgroupVote.comp Decorate 13 RelaxedPrecision Decorate 14 RelaxedPrecision Decorate 16 RelaxedPrecision + Decorate 24(Buffers) Block MemberDecorate 24(Buffers) 0 Offset 0 MemberDecorate 24(Buffers) 1 Offset 16 MemberDecorate 24(Buffers) 2 Offset 32 MemberDecorate 24(Buffers) 3 Offset 64 MemberDecorate 24(Buffers) 4 Offset 96 - Decorate 24(Buffers) Block - Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 + Decorate 27(data) DescriptorSet 0 Decorate 215 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out index 6b534a6ab2..27b4d6b5a7 100644 --- a/Test/baseResults/spv.subpass.frag.out +++ b/Test/baseResults/spv.subpass.frag.out @@ -1,6 +1,6 @@ spv.subpass.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 67 Capability Shader @@ -24,24 +24,24 @@ spv.subpass.frag Name 61 "usubMS" Decorate 15(icolor) Location 1 Decorate 27(color) Location 0 - Decorate 30(sub) DescriptorSet 0 Decorate 30(sub) Binding 0 + Decorate 30(sub) DescriptorSet 0 Decorate 30(sub) InputAttachmentIndex 1 - Decorate 35(subMS) DescriptorSet 0 Decorate 35(subMS) Binding 1 + Decorate 35(subMS) DescriptorSet 0 Decorate 35(subMS) InputAttachmentIndex 2 - Decorate 42(isub) DescriptorSet 0 Decorate 42(isub) Binding 2 + Decorate 42(isub) DescriptorSet 0 Decorate 42(isub) InputAttachmentIndex 3 - Decorate 45(isubMS) DescriptorSet 0 Decorate 45(isubMS) Binding 3 + Decorate 45(isubMS) DescriptorSet 0 Decorate 45(isubMS) InputAttachmentIndex 4 Decorate 53(ucolor) Location 2 - Decorate 56(usub) DescriptorSet 0 Decorate 56(usub) Binding 4 + Decorate 56(usub) DescriptorSet 0 Decorate 56(usub) InputAttachmentIndex 5 - Decorate 61(usubMS) DescriptorSet 0 Decorate 61(usubMS) Binding 5 + Decorate 61(usubMS) DescriptorSet 0 Decorate 61(usubMS) InputAttachmentIndex 6 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out index 9c68657f2c..bacf87eceb 100644 --- a/Test/baseResults/spv.switch.frag.out +++ b/Test/baseResults/spv.switch.frag.out @@ -4,7 +4,7 @@ WARNING: 0:134: 'switch' : last case/default label not followed by statements WARNING: 0:139: 'switch' : last case/default label not followed by statements // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 269 Capability Shader @@ -37,14 +37,14 @@ WARNING: 0:139: 'switch' : last case/default label not followed by statements Name 246 "param" Name 248 "param" Name 250 "param" - Decorate 15(foo1(vf4;vf4;i1;) RelaxedPrecision Decorate 12(v1) RelaxedPrecision Decorate 13(v2) RelaxedPrecision Decorate 14(i1) RelaxedPrecision - Decorate 20(foo2(vf4;vf4;i1;) RelaxedPrecision + Decorate 15(foo1(vf4;vf4;i1;) RelaxedPrecision Decorate 17(v1) RelaxedPrecision Decorate 18(v2) RelaxedPrecision Decorate 19(i1) RelaxedPrecision + Decorate 20(foo2(vf4;vf4;i1;) RelaxedPrecision Decorate 22 RelaxedPrecision Decorate 27 RelaxedPrecision Decorate 29 RelaxedPrecision diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out index 2aa31e8c7b..f42a34be90 100644 --- a/Test/baseResults/spv.swizzle.frag.out +++ b/Test/baseResults/spv.swizzle.frag.out @@ -1,6 +1,6 @@ spv.swizzle.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 117 Capability Shader diff --git a/Test/baseResults/spv.swizzleInversion.frag.out b/Test/baseResults/spv.swizzleInversion.frag.out index 8d09934608..32a0132644 100644 --- a/Test/baseResults/spv.swizzleInversion.frag.out +++ b/Test/baseResults/spv.swizzleInversion.frag.out @@ -1,6 +1,6 @@ spv.swizzleInversion.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 46 Capability Shader diff --git a/Test/baseResults/spv.terminate.frag.out b/Test/baseResults/spv.terminate.frag.out old mode 100755 new mode 100644 index 39cb151f0b..d76a48784d --- a/Test/baseResults/spv.terminate.frag.out +++ b/Test/baseResults/spv.terminate.frag.out @@ -1,6 +1,6 @@ spv.terminate.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 7 Capability Shader diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out index fddcdb84cc..e883c032c6 100644 --- a/Test/baseResults/spv.test.frag.out +++ b/Test/baseResults/spv.test.frag.out @@ -1,6 +1,6 @@ spv.test.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 55 Capability Shader @@ -21,12 +21,12 @@ spv.test.frag Name 43 "gl_FragColor" Name 46 "u" Name 49 "blend" - Decorate 16(texSampler2D) DescriptorSet 0 Decorate 16(texSampler2D) Binding 0 + Decorate 16(texSampler2D) DescriptorSet 0 Decorate 20(t) Location 3 Decorate 22(scale) Location 1 - Decorate 33(texSampler3D) DescriptorSet 0 Decorate 33(texSampler3D) Binding 1 + Decorate 33(texSampler3D) DescriptorSet 0 Decorate 37(coords) Location 4 Decorate 43(gl_FragColor) Location 0 Decorate 46(u) Location 2 diff --git a/Test/baseResults/spv.test.vert.out b/Test/baseResults/spv.test.vert.out index 3eb6435816..350ee7884b 100644 --- a/Test/baseResults/spv.test.vert.out +++ b/Test/baseResults/spv.test.vert.out @@ -2,7 +2,7 @@ spv.test.vert WARNING: 0:5: attribute deprecated in version 130; may be removed in future release // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 24 Capability Shader diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out index 841bbd3a8f..4c0f5f9456 100644 --- a/Test/baseResults/spv.texture.frag.out +++ b/Test/baseResults/spv.texture.frag.out @@ -4,7 +4,7 @@ WARNING: 0:11: varying deprecated in version 130; may be removed in future relea WARNING: 0:12: varying deprecated in version 130; may be removed in future release // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 305 Capability Shader @@ -39,19 +39,19 @@ WARNING: 0:12: varying deprecated in version 130; may be removed in future relea Name 297 "blend" Name 303 "scale" Name 304 "t" - Decorate 32(texSampler1D) DescriptorSet 0 Decorate 32(texSampler1D) Binding 0 + Decorate 32(texSampler1D) DescriptorSet 0 Decorate 47(coords2D) Location 4 - Decorate 76(texSampler2D) DescriptorSet 0 Decorate 76(texSampler2D) Binding 1 - Decorate 104(texSampler3D) DescriptorSet 0 + Decorate 76(texSampler2D) DescriptorSet 0 Decorate 104(texSampler3D) Binding 2 - Decorate 130(texSamplerCube) DescriptorSet 0 + Decorate 104(texSampler3D) DescriptorSet 0 Decorate 130(texSamplerCube) Binding 3 - Decorate 145(shadowSampler1D) DescriptorSet 0 + Decorate 130(texSamplerCube) DescriptorSet 0 Decorate 145(shadowSampler1D) Binding 4 - Decorate 164(shadowSampler2D) DescriptorSet 0 + Decorate 145(shadowSampler1D) DescriptorSet 0 Decorate 164(shadowSampler2D) Binding 5 + Decorate 164(shadowSampler2D) DescriptorSet 0 Decorate 291(gl_FragColor) Location 0 Decorate 294(u) Location 2 Decorate 297(blend) Location 0 diff --git a/Test/baseResults/spv.texture.sampler.transform.frag.out b/Test/baseResults/spv.texture.sampler.transform.frag.out index a297ea7895..b2fe823057 100644 --- a/Test/baseResults/spv.texture.sampler.transform.frag.out +++ b/Test/baseResults/spv.texture.sampler.transform.frag.out @@ -1,6 +1,6 @@ spv.texture.sampler.transform.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 20 Capability Shader @@ -14,8 +14,8 @@ spv.texture.sampler.transform.frag Name 13 "tex" Name 17 "coord" Decorate 9(color) Location 0 - Decorate 13(tex) DescriptorSet 0 Decorate 13(tex) Binding 0 + Decorate 13(tex) DescriptorSet 0 Decorate 17(coord) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out index 544a0f31ab..701cacda13 100644 --- a/Test/baseResults/spv.texture.vert.out +++ b/Test/baseResults/spv.texture.vert.out @@ -1,6 +1,6 @@ spv.texture.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 150 Capability Shader @@ -23,19 +23,19 @@ spv.texture.vert Name 106 "shadowSampler1D" Name 118 "shadowSampler2D" Name 148 "gl_Position" - Decorate 29(texSampler1D) DescriptorSet 0 Decorate 29(texSampler1D) Binding 0 + Decorate 29(texSampler1D) DescriptorSet 0 Decorate 39(coords2D) Location 0 - Decorate 56(texSampler2D) DescriptorSet 0 Decorate 56(texSampler2D) Binding 1 - Decorate 80(texSampler3D) DescriptorSet 0 + Decorate 56(texSampler2D) DescriptorSet 0 Decorate 80(texSampler3D) Binding 2 - Decorate 96(texSamplerCube) DescriptorSet 0 + Decorate 80(texSampler3D) DescriptorSet 0 Decorate 96(texSamplerCube) Binding 3 - Decorate 106(shadowSampler1D) DescriptorSet 0 + Decorate 96(texSamplerCube) DescriptorSet 0 Decorate 106(shadowSampler1D) Binding 4 - Decorate 118(shadowSampler2D) DescriptorSet 0 + Decorate 106(shadowSampler1D) DescriptorSet 0 Decorate 118(shadowSampler2D) Binding 5 + Decorate 118(shadowSampler2D) DescriptorSet 0 Decorate 148(gl_Position) BuiltIn Position 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.textureBuffer.vert.out b/Test/baseResults/spv.textureBuffer.vert.out index d18c656104..6cd40d2a43 100644 --- a/Test/baseResults/spv.textureBuffer.vert.out +++ b/Test/baseResults/spv.textureBuffer.vert.out @@ -1,6 +1,6 @@ spv.textureBuffer.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 42 Capability Shader @@ -15,16 +15,16 @@ spv.textureBuffer.vert Name 23 "sBuf" Name 32 "utBuf" Name 38 "itBuf" - Decorate 9(tBuf) DescriptorSet 0 Decorate 9(tBuf) Binding 0 - Decorate 13(s) DescriptorSet 0 + Decorate 9(tBuf) DescriptorSet 0 Decorate 13(s) Binding 1 - Decorate 23(sBuf) DescriptorSet 0 + Decorate 13(s) DescriptorSet 0 Decorate 23(sBuf) Binding 2 - Decorate 32(utBuf) DescriptorSet 0 + Decorate 23(sBuf) DescriptorSet 0 Decorate 32(utBuf) Binding 3 - Decorate 38(itBuf) DescriptorSet 0 + Decorate 32(utBuf) DescriptorSet 0 Decorate 38(itBuf) Binding 4 + Decorate 38(itBuf) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.textureError.frag.out b/Test/baseResults/spv.textureError.frag.out new file mode 100644 index 0000000000..d5ef59ce91 --- /dev/null +++ b/Test/baseResults/spv.textureError.frag.out @@ -0,0 +1,6 @@ +spv.textureError.frag +ERROR: spv.textureError.frag:8: 'texture*D*' : function not supported in this version; use texture() instead +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.textureGatherBiasLod.frag.out b/Test/baseResults/spv.textureGatherBiasLod.frag.out index 3a9bb80275..9fd195f5d1 100644 --- a/Test/baseResults/spv.textureGatherBiasLod.frag.out +++ b/Test/baseResults/spv.textureGatherBiasLod.frag.out @@ -1,6 +1,6 @@ spv.textureGatherBiasLod.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 298 Capability Shader @@ -30,17 +30,17 @@ spv.textureGatherBiasLod.frag Name 104 "ResType" Name 176 "lod" Name 296 "fragColor" - Decorate 16(s2D) DescriptorSet 0 Decorate 16(s2D) Binding 0 + Decorate 16(s2D) DescriptorSet 0 Decorate 20(c2) Location 0 Decorate 25(bias) Location 4 - Decorate 33(s2DArray) DescriptorSet 0 Decorate 33(s2DArray) Binding 1 + Decorate 33(s2DArray) DescriptorSet 0 Decorate 37(c3) Location 1 - Decorate 47(sCube) DescriptorSet 0 Decorate 47(sCube) Binding 2 - Decorate 58(sCubeArray) DescriptorSet 0 + Decorate 47(sCube) DescriptorSet 0 Decorate 58(sCubeArray) Binding 3 + Decorate 58(sCubeArray) DescriptorSet 0 Decorate 61(c4) Location 2 Decorate 176(lod) Location 3 Decorate 296(fragColor) Location 0 diff --git a/Test/baseResults/spv.tpipBlockMatchGatherSAD.frag.out b/Test/baseResults/spv.tpipBlockMatchGatherSAD.frag.out new file mode 100644 index 0000000000..63e4e15c04 --- /dev/null +++ b/Test/baseResults/spv.tpipBlockMatchGatherSAD.frag.out @@ -0,0 +1,126 @@ +spv.tpipBlockMatchGatherSAD.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 72 + + Capability Shader + Capability TextureBlockMatchQCOM + Capability TextureBlockMatch2QCOM + Extension "SPV_QCOM_image_processing" + Extension "SPV_QCOM_image_processing2" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 41 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_QCOM_image_processing" + SourceExtension "GL_QCOM_image_processing2" + Name 4 "main" + Name 9 "tgt_coords" + Name 13 "v_texcoord" + Name 26 "ref_coords" + Name 37 "blockSize" + Name 41 "fragColor" + Name 44 "tex2D_src1" + Name 48 "samp" + Name 53 "tex2D_src2" + Name 61 "target_samp" + Name 64 "ref_samp" + Name 71 "tex2DArray_weights" + Decorate 13(v_texcoord) Location 0 + Decorate 41(fragColor) Location 0 + Decorate 44(tex2D_src1) Binding 1 + Decorate 44(tex2D_src1) DescriptorSet 0 + Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM + Decorate 48(samp) Binding 3 + Decorate 48(samp) DescriptorSet 0 + Decorate 53(tex2D_src2) Binding 2 + Decorate 53(tex2D_src2) DescriptorSet 0 + Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM + Decorate 61(target_samp) Binding 4 + Decorate 61(target_samp) DescriptorSet 0 + Decorate 61(target_samp) DecorationBlockMatchTextureQCOM + Decorate 64(ref_samp) Binding 5 + Decorate 64(ref_samp) DescriptorSet 0 + Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM + Decorate 71(tex2DArray_weights) Binding 0 + Decorate 71(tex2DArray_weights) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 2 + 8: TypePointer Function 7(ivec2) + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Input 11(fvec4) + 13(v_texcoord): 12(ptr) Variable Input + 14: 6(int) Constant 0 + 15: TypePointer Input 10(float) + 19: TypePointer Function 6(int) + 21: 6(int) Constant 1 + 27: 6(int) Constant 2 + 32: 6(int) Constant 3 + 38: 6(int) Constant 4 + 39: 7(ivec2) ConstantComposite 38 38 + 40: TypePointer Output 11(fvec4) + 41(fragColor): 40(ptr) Variable Output + 42: TypeImage 10(float) 2D sampled format:Unknown + 43: TypePointer UniformConstant 42 + 44(tex2D_src1): 43(ptr) Variable UniformConstant + 46: TypeSampler + 47: TypePointer UniformConstant 46 + 48(samp): 47(ptr) Variable UniformConstant + 50: TypeSampledImage 42 + 53(tex2D_src2): 43(ptr) Variable UniformConstant + 60: TypePointer UniformConstant 50 + 61(target_samp): 60(ptr) Variable UniformConstant + 64(ref_samp): 60(ptr) Variable UniformConstant + 69: TypeImage 10(float) 2D array sampled format:Unknown + 70: TypePointer UniformConstant 69 +71(tex2DArray_weights): 70(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(tgt_coords): 8(ptr) Variable Function + 26(ref_coords): 8(ptr) Variable Function + 37(blockSize): 8(ptr) Variable Function + 16: 15(ptr) AccessChain 13(v_texcoord) 14 + 17: 10(float) Load 16 + 18: 6(int) ConvertFToU 17 + 20: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 20 18 + 22: 15(ptr) AccessChain 13(v_texcoord) 21 + 23: 10(float) Load 22 + 24: 6(int) ConvertFToU 23 + 25: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 25 24 + 28: 15(ptr) AccessChain 13(v_texcoord) 27 + 29: 10(float) Load 28 + 30: 6(int) ConvertFToU 29 + 31: 19(ptr) AccessChain 26(ref_coords) 14 + Store 31 30 + 33: 15(ptr) AccessChain 13(v_texcoord) 32 + 34: 10(float) Load 33 + 35: 6(int) ConvertFToU 34 + 36: 19(ptr) AccessChain 26(ref_coords) 21 + Store 36 35 + Store 37(blockSize) 39 + 45: 42 Load 44(tex2D_src1) + 49: 46 Load 48(samp) + 51: 50 SampledImage 45 49 + 52: 7(ivec2) Load 9(tgt_coords) + 54: 42 Load 53(tex2D_src2) + 55: 46 Load 48(samp) + 56: 50 SampledImage 54 55 + 57: 7(ivec2) Load 26(ref_coords) + 58: 7(ivec2) Load 37(blockSize) + 59: 11(fvec4) ImageBlockMatchGatherSADQCOM 51 52 56 57 58 + Store 41(fragColor) 59 + 62: 50 Load 61(target_samp) + 63: 7(ivec2) Load 9(tgt_coords) + 65: 50 Load 64(ref_samp) + 66: 7(ivec2) Load 26(ref_coords) + 67: 7(ivec2) Load 37(blockSize) + 68: 11(fvec4) ImageBlockMatchGatherSADQCOM 62 63 65 66 67 + Store 41(fragColor) 68 + Return + FunctionEnd diff --git a/Test/baseResults/spv.tpipBlockMatchGatherSSD.frag.out b/Test/baseResults/spv.tpipBlockMatchGatherSSD.frag.out new file mode 100644 index 0000000000..f5aa4cb830 --- /dev/null +++ b/Test/baseResults/spv.tpipBlockMatchGatherSSD.frag.out @@ -0,0 +1,126 @@ +spv.tpipBlockMatchGatherSSD.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 72 + + Capability Shader + Capability TextureBlockMatchQCOM + Capability TextureBlockMatch2QCOM + Extension "SPV_QCOM_image_processing" + Extension "SPV_QCOM_image_processing2" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 41 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_QCOM_image_processing" + SourceExtension "GL_QCOM_image_processing2" + Name 4 "main" + Name 9 "tgt_coords" + Name 13 "v_texcoord" + Name 26 "ref_coords" + Name 37 "blockSize" + Name 41 "fragColor" + Name 44 "tex2D_src1" + Name 48 "samp" + Name 53 "tex2D_src2" + Name 61 "target_samp" + Name 64 "ref_samp" + Name 71 "tex2DArray_weights" + Decorate 13(v_texcoord) Location 0 + Decorate 41(fragColor) Location 0 + Decorate 44(tex2D_src1) Binding 1 + Decorate 44(tex2D_src1) DescriptorSet 0 + Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM + Decorate 48(samp) Binding 3 + Decorate 48(samp) DescriptorSet 0 + Decorate 53(tex2D_src2) Binding 2 + Decorate 53(tex2D_src2) DescriptorSet 0 + Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM + Decorate 61(target_samp) Binding 4 + Decorate 61(target_samp) DescriptorSet 0 + Decorate 61(target_samp) DecorationBlockMatchTextureQCOM + Decorate 64(ref_samp) Binding 5 + Decorate 64(ref_samp) DescriptorSet 0 + Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM + Decorate 71(tex2DArray_weights) Binding 0 + Decorate 71(tex2DArray_weights) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 2 + 8: TypePointer Function 7(ivec2) + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Input 11(fvec4) + 13(v_texcoord): 12(ptr) Variable Input + 14: 6(int) Constant 0 + 15: TypePointer Input 10(float) + 19: TypePointer Function 6(int) + 21: 6(int) Constant 1 + 27: 6(int) Constant 2 + 32: 6(int) Constant 3 + 38: 6(int) Constant 4 + 39: 7(ivec2) ConstantComposite 38 38 + 40: TypePointer Output 11(fvec4) + 41(fragColor): 40(ptr) Variable Output + 42: TypeImage 10(float) 2D sampled format:Unknown + 43: TypePointer UniformConstant 42 + 44(tex2D_src1): 43(ptr) Variable UniformConstant + 46: TypeSampler + 47: TypePointer UniformConstant 46 + 48(samp): 47(ptr) Variable UniformConstant + 50: TypeSampledImage 42 + 53(tex2D_src2): 43(ptr) Variable UniformConstant + 60: TypePointer UniformConstant 50 + 61(target_samp): 60(ptr) Variable UniformConstant + 64(ref_samp): 60(ptr) Variable UniformConstant + 69: TypeImage 10(float) 2D array sampled format:Unknown + 70: TypePointer UniformConstant 69 +71(tex2DArray_weights): 70(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(tgt_coords): 8(ptr) Variable Function + 26(ref_coords): 8(ptr) Variable Function + 37(blockSize): 8(ptr) Variable Function + 16: 15(ptr) AccessChain 13(v_texcoord) 14 + 17: 10(float) Load 16 + 18: 6(int) ConvertFToU 17 + 20: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 20 18 + 22: 15(ptr) AccessChain 13(v_texcoord) 21 + 23: 10(float) Load 22 + 24: 6(int) ConvertFToU 23 + 25: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 25 24 + 28: 15(ptr) AccessChain 13(v_texcoord) 27 + 29: 10(float) Load 28 + 30: 6(int) ConvertFToU 29 + 31: 19(ptr) AccessChain 26(ref_coords) 14 + Store 31 30 + 33: 15(ptr) AccessChain 13(v_texcoord) 32 + 34: 10(float) Load 33 + 35: 6(int) ConvertFToU 34 + 36: 19(ptr) AccessChain 26(ref_coords) 21 + Store 36 35 + Store 37(blockSize) 39 + 45: 42 Load 44(tex2D_src1) + 49: 46 Load 48(samp) + 51: 50 SampledImage 45 49 + 52: 7(ivec2) Load 9(tgt_coords) + 54: 42 Load 53(tex2D_src2) + 55: 46 Load 48(samp) + 56: 50 SampledImage 54 55 + 57: 7(ivec2) Load 26(ref_coords) + 58: 7(ivec2) Load 37(blockSize) + 59: 11(fvec4) ImageBlockMatchGatherSSDQCOM 51 52 56 57 58 + Store 41(fragColor) 59 + 62: 50 Load 61(target_samp) + 63: 7(ivec2) Load 9(tgt_coords) + 65: 50 Load 64(ref_samp) + 66: 7(ivec2) Load 26(ref_coords) + 67: 7(ivec2) Load 37(blockSize) + 68: 11(fvec4) ImageBlockMatchGatherSSDQCOM 62 63 65 66 67 + Store 41(fragColor) 68 + Return + FunctionEnd diff --git a/Test/baseResults/spv.tpipBlockMatchSAD.frag.out b/Test/baseResults/spv.tpipBlockMatchSAD.frag.out new file mode 100644 index 0000000000..eb5f474470 --- /dev/null +++ b/Test/baseResults/spv.tpipBlockMatchSAD.frag.out @@ -0,0 +1,123 @@ +spv.tpipBlockMatchSAD.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 72 + + Capability Shader + Capability TextureBlockMatchQCOM + Extension "SPV_QCOM_image_processing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 41 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_QCOM_image_processing" + Name 4 "main" + Name 9 "tgt_coords" + Name 13 "v_texcoord" + Name 26 "ref_coords" + Name 37 "blockSize" + Name 41 "fragColor" + Name 44 "tex2D_src1" + Name 48 "samp" + Name 53 "tex2D_src2" + Name 61 "target_samp" + Name 64 "ref_samp" + Name 71 "tex2DArray_weights" + Decorate 13(v_texcoord) Location 0 + Decorate 41(fragColor) Location 0 + Decorate 44(tex2D_src1) Binding 1 + Decorate 44(tex2D_src1) DescriptorSet 0 + Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM + Decorate 48(samp) Binding 3 + Decorate 48(samp) DescriptorSet 0 + Decorate 53(tex2D_src2) Binding 2 + Decorate 53(tex2D_src2) DescriptorSet 0 + Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM + Decorate 61(target_samp) Binding 4 + Decorate 61(target_samp) DescriptorSet 0 + Decorate 61(target_samp) DecorationBlockMatchTextureQCOM + Decorate 64(ref_samp) Binding 5 + Decorate 64(ref_samp) DescriptorSet 0 + Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM + Decorate 71(tex2DArray_weights) Binding 0 + Decorate 71(tex2DArray_weights) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 2 + 8: TypePointer Function 7(ivec2) + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Input 11(fvec4) + 13(v_texcoord): 12(ptr) Variable Input + 14: 6(int) Constant 0 + 15: TypePointer Input 10(float) + 19: TypePointer Function 6(int) + 21: 6(int) Constant 1 + 27: 6(int) Constant 2 + 32: 6(int) Constant 3 + 38: 6(int) Constant 4 + 39: 7(ivec2) ConstantComposite 38 38 + 40: TypePointer Output 11(fvec4) + 41(fragColor): 40(ptr) Variable Output + 42: TypeImage 10(float) 2D sampled format:Unknown + 43: TypePointer UniformConstant 42 + 44(tex2D_src1): 43(ptr) Variable UniformConstant + 46: TypeSampler + 47: TypePointer UniformConstant 46 + 48(samp): 47(ptr) Variable UniformConstant + 50: TypeSampledImage 42 + 53(tex2D_src2): 43(ptr) Variable UniformConstant + 60: TypePointer UniformConstant 50 + 61(target_samp): 60(ptr) Variable UniformConstant + 64(ref_samp): 60(ptr) Variable UniformConstant + 69: TypeImage 10(float) 2D array sampled format:Unknown + 70: TypePointer UniformConstant 69 +71(tex2DArray_weights): 70(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(tgt_coords): 8(ptr) Variable Function + 26(ref_coords): 8(ptr) Variable Function + 37(blockSize): 8(ptr) Variable Function + 16: 15(ptr) AccessChain 13(v_texcoord) 14 + 17: 10(float) Load 16 + 18: 6(int) ConvertFToU 17 + 20: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 20 18 + 22: 15(ptr) AccessChain 13(v_texcoord) 21 + 23: 10(float) Load 22 + 24: 6(int) ConvertFToU 23 + 25: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 25 24 + 28: 15(ptr) AccessChain 13(v_texcoord) 27 + 29: 10(float) Load 28 + 30: 6(int) ConvertFToU 29 + 31: 19(ptr) AccessChain 26(ref_coords) 14 + Store 31 30 + 33: 15(ptr) AccessChain 13(v_texcoord) 32 + 34: 10(float) Load 33 + 35: 6(int) ConvertFToU 34 + 36: 19(ptr) AccessChain 26(ref_coords) 21 + Store 36 35 + Store 37(blockSize) 39 + 45: 42 Load 44(tex2D_src1) + 49: 46 Load 48(samp) + 51: 50 SampledImage 45 49 + 52: 7(ivec2) Load 9(tgt_coords) + 54: 42 Load 53(tex2D_src2) + 55: 46 Load 48(samp) + 56: 50 SampledImage 54 55 + 57: 7(ivec2) Load 26(ref_coords) + 58: 7(ivec2) Load 37(blockSize) + 59: 11(fvec4) ImageBlockMatchSADQCOM 51 52 56 57 58 + Store 41(fragColor) 59 + 62: 50 Load 61(target_samp) + 63: 7(ivec2) Load 9(tgt_coords) + 65: 50 Load 64(ref_samp) + 66: 7(ivec2) Load 26(ref_coords) + 67: 7(ivec2) Load 37(blockSize) + 68: 11(fvec4) ImageBlockMatchSADQCOM 62 63 65 66 67 + Store 41(fragColor) 68 + Return + FunctionEnd diff --git a/Test/baseResults/spv.tpipBlockMatchSSD.frag.out b/Test/baseResults/spv.tpipBlockMatchSSD.frag.out new file mode 100644 index 0000000000..d758c0b127 --- /dev/null +++ b/Test/baseResults/spv.tpipBlockMatchSSD.frag.out @@ -0,0 +1,123 @@ +spv.tpipBlockMatchSSD.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 72 + + Capability Shader + Capability TextureBlockMatchQCOM + Extension "SPV_QCOM_image_processing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 41 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_QCOM_image_processing" + Name 4 "main" + Name 9 "tgt_coords" + Name 13 "v_texcoord" + Name 26 "ref_coords" + Name 37 "blockSize" + Name 41 "fragColor" + Name 44 "tex2D_src1" + Name 48 "samp" + Name 53 "tex2D_src2" + Name 61 "target_samp" + Name 64 "ref_samp" + Name 71 "tex2DArray_weights" + Decorate 13(v_texcoord) Location 0 + Decorate 41(fragColor) Location 0 + Decorate 44(tex2D_src1) Binding 1 + Decorate 44(tex2D_src1) DescriptorSet 0 + Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM + Decorate 48(samp) Binding 3 + Decorate 48(samp) DescriptorSet 0 + Decorate 53(tex2D_src2) Binding 2 + Decorate 53(tex2D_src2) DescriptorSet 0 + Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM + Decorate 61(target_samp) Binding 4 + Decorate 61(target_samp) DescriptorSet 0 + Decorate 61(target_samp) DecorationBlockMatchTextureQCOM + Decorate 64(ref_samp) Binding 5 + Decorate 64(ref_samp) DescriptorSet 0 + Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM + Decorate 71(tex2DArray_weights) Binding 0 + Decorate 71(tex2DArray_weights) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 2 + 8: TypePointer Function 7(ivec2) + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Input 11(fvec4) + 13(v_texcoord): 12(ptr) Variable Input + 14: 6(int) Constant 0 + 15: TypePointer Input 10(float) + 19: TypePointer Function 6(int) + 21: 6(int) Constant 1 + 27: 6(int) Constant 2 + 32: 6(int) Constant 3 + 38: 6(int) Constant 4 + 39: 7(ivec2) ConstantComposite 38 38 + 40: TypePointer Output 11(fvec4) + 41(fragColor): 40(ptr) Variable Output + 42: TypeImage 10(float) 2D sampled format:Unknown + 43: TypePointer UniformConstant 42 + 44(tex2D_src1): 43(ptr) Variable UniformConstant + 46: TypeSampler + 47: TypePointer UniformConstant 46 + 48(samp): 47(ptr) Variable UniformConstant + 50: TypeSampledImage 42 + 53(tex2D_src2): 43(ptr) Variable UniformConstant + 60: TypePointer UniformConstant 50 + 61(target_samp): 60(ptr) Variable UniformConstant + 64(ref_samp): 60(ptr) Variable UniformConstant + 69: TypeImage 10(float) 2D array sampled format:Unknown + 70: TypePointer UniformConstant 69 +71(tex2DArray_weights): 70(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(tgt_coords): 8(ptr) Variable Function + 26(ref_coords): 8(ptr) Variable Function + 37(blockSize): 8(ptr) Variable Function + 16: 15(ptr) AccessChain 13(v_texcoord) 14 + 17: 10(float) Load 16 + 18: 6(int) ConvertFToU 17 + 20: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 20 18 + 22: 15(ptr) AccessChain 13(v_texcoord) 21 + 23: 10(float) Load 22 + 24: 6(int) ConvertFToU 23 + 25: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 25 24 + 28: 15(ptr) AccessChain 13(v_texcoord) 27 + 29: 10(float) Load 28 + 30: 6(int) ConvertFToU 29 + 31: 19(ptr) AccessChain 26(ref_coords) 14 + Store 31 30 + 33: 15(ptr) AccessChain 13(v_texcoord) 32 + 34: 10(float) Load 33 + 35: 6(int) ConvertFToU 34 + 36: 19(ptr) AccessChain 26(ref_coords) 21 + Store 36 35 + Store 37(blockSize) 39 + 45: 42 Load 44(tex2D_src1) + 49: 46 Load 48(samp) + 51: 50 SampledImage 45 49 + 52: 7(ivec2) Load 9(tgt_coords) + 54: 42 Load 53(tex2D_src2) + 55: 46 Load 48(samp) + 56: 50 SampledImage 54 55 + 57: 7(ivec2) Load 26(ref_coords) + 58: 7(ivec2) Load 37(blockSize) + 59: 11(fvec4) ImageBlockMatchSSDQCOM 51 52 56 57 58 + Store 41(fragColor) 59 + 62: 50 Load 61(target_samp) + 63: 7(ivec2) Load 9(tgt_coords) + 65: 50 Load 64(ref_samp) + 66: 7(ivec2) Load 26(ref_coords) + 67: 7(ivec2) Load 37(blockSize) + 68: 11(fvec4) ImageBlockMatchSSDQCOM 62 63 65 66 67 + Store 41(fragColor) 68 + Return + FunctionEnd diff --git a/Test/baseResults/spv.tpipBlockMatchWindowSAD.frag.out b/Test/baseResults/spv.tpipBlockMatchWindowSAD.frag.out new file mode 100644 index 0000000000..a27c016f77 --- /dev/null +++ b/Test/baseResults/spv.tpipBlockMatchWindowSAD.frag.out @@ -0,0 +1,129 @@ +spv.tpipBlockMatchWindowSAD.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 72 + + Capability Shader + Capability TextureBlockMatchQCOM + Capability TextureBlockMatch2QCOM + Extension "SPV_QCOM_image_processing" + Extension "SPV_QCOM_image_processing2" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 41 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_QCOM_image_processing" + SourceExtension "GL_QCOM_image_processing2" + Name 4 "main" + Name 9 "tgt_coords" + Name 13 "v_texcoord" + Name 26 "ref_coords" + Name 37 "blockSize" + Name 41 "fragColor" + Name 44 "tex2D_src1" + Name 48 "samp" + Name 53 "tex2D_src2" + Name 61 "target_samp" + Name 64 "ref_samp" + Name 71 "tex2DArray_weights" + Decorate 13(v_texcoord) Location 0 + Decorate 41(fragColor) Location 0 + Decorate 44(tex2D_src1) Binding 1 + Decorate 44(tex2D_src1) DescriptorSet 0 + Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM + Decorate 48(samp) Binding 3 + Decorate 48(samp) DescriptorSet 0 + Decorate 48(samp) DecorationBlockMatchSamplerQCOM + Decorate 53(tex2D_src2) Binding 2 + Decorate 53(tex2D_src2) DescriptorSet 0 + Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM + Decorate 61(target_samp) Binding 4 + Decorate 61(target_samp) DescriptorSet 0 + Decorate 61(target_samp) DecorationBlockMatchTextureQCOM + Decorate 61(target_samp) DecorationBlockMatchSamplerQCOM + Decorate 64(ref_samp) Binding 5 + Decorate 64(ref_samp) DescriptorSet 0 + Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM + Decorate 64(ref_samp) DecorationBlockMatchSamplerQCOM + Decorate 71(tex2DArray_weights) Binding 0 + Decorate 71(tex2DArray_weights) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 2 + 8: TypePointer Function 7(ivec2) + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Input 11(fvec4) + 13(v_texcoord): 12(ptr) Variable Input + 14: 6(int) Constant 0 + 15: TypePointer Input 10(float) + 19: TypePointer Function 6(int) + 21: 6(int) Constant 1 + 27: 6(int) Constant 2 + 32: 6(int) Constant 3 + 38: 6(int) Constant 4 + 39: 7(ivec2) ConstantComposite 38 38 + 40: TypePointer Output 11(fvec4) + 41(fragColor): 40(ptr) Variable Output + 42: TypeImage 10(float) 2D sampled format:Unknown + 43: TypePointer UniformConstant 42 + 44(tex2D_src1): 43(ptr) Variable UniformConstant + 46: TypeSampler + 47: TypePointer UniformConstant 46 + 48(samp): 47(ptr) Variable UniformConstant + 50: TypeSampledImage 42 + 53(tex2D_src2): 43(ptr) Variable UniformConstant + 60: TypePointer UniformConstant 50 + 61(target_samp): 60(ptr) Variable UniformConstant + 64(ref_samp): 60(ptr) Variable UniformConstant + 69: TypeImage 10(float) 2D array sampled format:Unknown + 70: TypePointer UniformConstant 69 +71(tex2DArray_weights): 70(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(tgt_coords): 8(ptr) Variable Function + 26(ref_coords): 8(ptr) Variable Function + 37(blockSize): 8(ptr) Variable Function + 16: 15(ptr) AccessChain 13(v_texcoord) 14 + 17: 10(float) Load 16 + 18: 6(int) ConvertFToU 17 + 20: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 20 18 + 22: 15(ptr) AccessChain 13(v_texcoord) 21 + 23: 10(float) Load 22 + 24: 6(int) ConvertFToU 23 + 25: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 25 24 + 28: 15(ptr) AccessChain 13(v_texcoord) 27 + 29: 10(float) Load 28 + 30: 6(int) ConvertFToU 29 + 31: 19(ptr) AccessChain 26(ref_coords) 14 + Store 31 30 + 33: 15(ptr) AccessChain 13(v_texcoord) 32 + 34: 10(float) Load 33 + 35: 6(int) ConvertFToU 34 + 36: 19(ptr) AccessChain 26(ref_coords) 21 + Store 36 35 + Store 37(blockSize) 39 + 45: 42 Load 44(tex2D_src1) + 49: 46 Load 48(samp) + 51: 50 SampledImage 45 49 + 52: 7(ivec2) Load 9(tgt_coords) + 54: 42 Load 53(tex2D_src2) + 55: 46 Load 48(samp) + 56: 50 SampledImage 54 55 + 57: 7(ivec2) Load 26(ref_coords) + 58: 7(ivec2) Load 37(blockSize) + 59: 11(fvec4) ImageBlockMatchWindowSADQCOM 51 52 56 57 58 + Store 41(fragColor) 59 + 62: 50 Load 61(target_samp) + 63: 7(ivec2) Load 9(tgt_coords) + 65: 50 Load 64(ref_samp) + 66: 7(ivec2) Load 26(ref_coords) + 67: 7(ivec2) Load 37(blockSize) + 68: 11(fvec4) ImageBlockMatchWindowSADQCOM 62 63 65 66 67 + Store 41(fragColor) 68 + Return + FunctionEnd diff --git a/Test/baseResults/spv.tpipBlockMatchWindowSSD.frag.out b/Test/baseResults/spv.tpipBlockMatchWindowSSD.frag.out new file mode 100644 index 0000000000..e22097ffe5 --- /dev/null +++ b/Test/baseResults/spv.tpipBlockMatchWindowSSD.frag.out @@ -0,0 +1,129 @@ +spv.tpipBlockMatchWindowSSD.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 72 + + Capability Shader + Capability TextureBlockMatchQCOM + Capability TextureBlockMatch2QCOM + Extension "SPV_QCOM_image_processing" + Extension "SPV_QCOM_image_processing2" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 41 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_QCOM_image_processing" + SourceExtension "GL_QCOM_image_processing2" + Name 4 "main" + Name 9 "tgt_coords" + Name 13 "v_texcoord" + Name 26 "ref_coords" + Name 37 "blockSize" + Name 41 "fragColor" + Name 44 "tex2D_src1" + Name 48 "samp" + Name 53 "tex2D_src2" + Name 61 "target_samp" + Name 64 "ref_samp" + Name 71 "tex2DArray_weights" + Decorate 13(v_texcoord) Location 0 + Decorate 41(fragColor) Location 0 + Decorate 44(tex2D_src1) Binding 1 + Decorate 44(tex2D_src1) DescriptorSet 0 + Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM + Decorate 48(samp) Binding 3 + Decorate 48(samp) DescriptorSet 0 + Decorate 48(samp) DecorationBlockMatchSamplerQCOM + Decorate 53(tex2D_src2) Binding 2 + Decorate 53(tex2D_src2) DescriptorSet 0 + Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM + Decorate 61(target_samp) Binding 4 + Decorate 61(target_samp) DescriptorSet 0 + Decorate 61(target_samp) DecorationBlockMatchTextureQCOM + Decorate 61(target_samp) DecorationBlockMatchSamplerQCOM + Decorate 64(ref_samp) Binding 5 + Decorate 64(ref_samp) DescriptorSet 0 + Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM + Decorate 64(ref_samp) DecorationBlockMatchSamplerQCOM + Decorate 71(tex2DArray_weights) Binding 0 + Decorate 71(tex2DArray_weights) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 2 + 8: TypePointer Function 7(ivec2) + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Input 11(fvec4) + 13(v_texcoord): 12(ptr) Variable Input + 14: 6(int) Constant 0 + 15: TypePointer Input 10(float) + 19: TypePointer Function 6(int) + 21: 6(int) Constant 1 + 27: 6(int) Constant 2 + 32: 6(int) Constant 3 + 38: 6(int) Constant 4 + 39: 7(ivec2) ConstantComposite 38 38 + 40: TypePointer Output 11(fvec4) + 41(fragColor): 40(ptr) Variable Output + 42: TypeImage 10(float) 2D sampled format:Unknown + 43: TypePointer UniformConstant 42 + 44(tex2D_src1): 43(ptr) Variable UniformConstant + 46: TypeSampler + 47: TypePointer UniformConstant 46 + 48(samp): 47(ptr) Variable UniformConstant + 50: TypeSampledImage 42 + 53(tex2D_src2): 43(ptr) Variable UniformConstant + 60: TypePointer UniformConstant 50 + 61(target_samp): 60(ptr) Variable UniformConstant + 64(ref_samp): 60(ptr) Variable UniformConstant + 69: TypeImage 10(float) 2D array sampled format:Unknown + 70: TypePointer UniformConstant 69 +71(tex2DArray_weights): 70(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(tgt_coords): 8(ptr) Variable Function + 26(ref_coords): 8(ptr) Variable Function + 37(blockSize): 8(ptr) Variable Function + 16: 15(ptr) AccessChain 13(v_texcoord) 14 + 17: 10(float) Load 16 + 18: 6(int) ConvertFToU 17 + 20: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 20 18 + 22: 15(ptr) AccessChain 13(v_texcoord) 21 + 23: 10(float) Load 22 + 24: 6(int) ConvertFToU 23 + 25: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 25 24 + 28: 15(ptr) AccessChain 13(v_texcoord) 27 + 29: 10(float) Load 28 + 30: 6(int) ConvertFToU 29 + 31: 19(ptr) AccessChain 26(ref_coords) 14 + Store 31 30 + 33: 15(ptr) AccessChain 13(v_texcoord) 32 + 34: 10(float) Load 33 + 35: 6(int) ConvertFToU 34 + 36: 19(ptr) AccessChain 26(ref_coords) 21 + Store 36 35 + Store 37(blockSize) 39 + 45: 42 Load 44(tex2D_src1) + 49: 46 Load 48(samp) + 51: 50 SampledImage 45 49 + 52: 7(ivec2) Load 9(tgt_coords) + 54: 42 Load 53(tex2D_src2) + 55: 46 Load 48(samp) + 56: 50 SampledImage 54 55 + 57: 7(ivec2) Load 26(ref_coords) + 58: 7(ivec2) Load 37(blockSize) + 59: 11(fvec4) ImageBlockMatchWindowSSDQCOM 51 52 56 57 58 + Store 41(fragColor) 59 + 62: 50 Load 61(target_samp) + 63: 7(ivec2) Load 9(tgt_coords) + 65: 50 Load 64(ref_samp) + 66: 7(ivec2) Load 26(ref_coords) + 67: 7(ivec2) Load 37(blockSize) + 68: 11(fvec4) ImageBlockMatchWindowSSDQCOM 62 63 65 66 67 + Store 41(fragColor) 68 + Return + FunctionEnd diff --git a/Test/baseResults/spv.tpipBoxFilter.frag.out b/Test/baseResults/spv.tpipBoxFilter.frag.out new file mode 100644 index 0000000000..46d802c42f --- /dev/null +++ b/Test/baseResults/spv.tpipBoxFilter.frag.out @@ -0,0 +1,81 @@ +spv.tpipBoxFilter.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 43 + + Capability Shader + Capability TextureBoxFilterQCOM + Extension "SPV_QCOM_image_processing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 15 27 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_QCOM_image_processing" + Name 4 "main" + Name 9 "boxSize" + Name 15 "fragColor" + Name 18 "tex2D_src1" + Name 22 "samp" + Name 27 "v_texcoord" + Name 33 "tex_samp" + Name 41 "tex2DArray_weights" + Name 42 "tex2D_src2" + Decorate 15(fragColor) Location 0 + Decorate 18(tex2D_src1) Binding 1 + Decorate 18(tex2D_src1) DescriptorSet 0 + Decorate 22(samp) Binding 3 + Decorate 22(samp) DescriptorSet 0 + Decorate 27(v_texcoord) Location 0 + Decorate 33(tex_samp) Binding 4 + Decorate 33(tex_samp) DescriptorSet 0 + Decorate 41(tex2DArray_weights) Binding 0 + Decorate 41(tex2DArray_weights) DescriptorSet 0 + Decorate 42(tex2D_src2) Binding 2 + Decorate 42(tex2D_src2) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypePointer Function 7(fvec2) + 10: 6(float) Constant 1075838976 + 11: 6(float) Constant 1083179008 + 12: 7(fvec2) ConstantComposite 10 11 + 13: TypeVector 6(float) 4 + 14: TypePointer Output 13(fvec4) + 15(fragColor): 14(ptr) Variable Output + 16: TypeImage 6(float) 2D sampled format:Unknown + 17: TypePointer UniformConstant 16 + 18(tex2D_src1): 17(ptr) Variable UniformConstant + 20: TypeSampler + 21: TypePointer UniformConstant 20 + 22(samp): 21(ptr) Variable UniformConstant + 24: TypeSampledImage 16 + 26: TypePointer Input 13(fvec4) + 27(v_texcoord): 26(ptr) Variable Input + 32: TypePointer UniformConstant 24 + 33(tex_samp): 32(ptr) Variable UniformConstant + 39: TypeImage 6(float) 2D array sampled format:Unknown + 40: TypePointer UniformConstant 39 +41(tex2DArray_weights): 40(ptr) Variable UniformConstant + 42(tex2D_src2): 17(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(boxSize): 8(ptr) Variable Function + Store 9(boxSize) 12 + 19: 16 Load 18(tex2D_src1) + 23: 20 Load 22(samp) + 25: 24 SampledImage 19 23 + 28: 13(fvec4) Load 27(v_texcoord) + 29: 7(fvec2) VectorShuffle 28 28 0 1 + 30: 7(fvec2) Load 9(boxSize) + 31: 13(fvec4) ImageBoxFilterQCOM 25 29 30 + Store 15(fragColor) 31 + 34: 24 Load 33(tex_samp) + 35: 13(fvec4) Load 27(v_texcoord) + 36: 7(fvec2) VectorShuffle 35 35 0 1 + 37: 7(fvec2) Load 9(boxSize) + 38: 13(fvec4) ImageBoxFilterQCOM 34 36 37 + Store 15(fragColor) 38 + Return + FunctionEnd diff --git a/Test/baseResults/spv.tpipSampleWeighted.frag.out b/Test/baseResults/spv.tpipSampleWeighted.frag.out new file mode 100644 index 0000000000..652143c7f8 --- /dev/null +++ b/Test/baseResults/spv.tpipSampleWeighted.frag.out @@ -0,0 +1,84 @@ +spv.tpipSampleWeighted.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 43 + + Capability Shader + Capability TextureSampleWeightedQCOM + Extension "SPV_QCOM_image_processing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 21 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_QCOM_image_processing" + Name 4 "main" + Name 9 "fragColor" + Name 12 "tex2D_src1" + Name 16 "samp" + Name 21 "v_texcoord" + Name 27 "tex2DArray_weights" + Name 34 "tex_samp" + Name 39 "tex_samp_array" + Name 42 "tex2D_src2" + Decorate 9(fragColor) Location 0 + Decorate 12(tex2D_src1) Binding 1 + Decorate 12(tex2D_src1) DescriptorSet 0 + Decorate 16(samp) Binding 3 + Decorate 16(samp) DescriptorSet 0 + Decorate 21(v_texcoord) Location 0 + Decorate 27(tex2DArray_weights) Binding 0 + Decorate 27(tex2DArray_weights) DescriptorSet 0 + Decorate 27(tex2DArray_weights) DecorationWeightTextureQCOM + Decorate 34(tex_samp) Binding 4 + Decorate 34(tex_samp) DescriptorSet 0 + Decorate 39(tex_samp_array) Binding 5 + Decorate 39(tex_samp_array) DescriptorSet 0 + Decorate 39(tex_samp_array) DecorationWeightTextureQCOM + Decorate 42(tex2D_src2) Binding 2 + Decorate 42(tex2D_src2) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(fragColor): 8(ptr) Variable Output + 10: TypeImage 6(float) 2D sampled format:Unknown + 11: TypePointer UniformConstant 10 + 12(tex2D_src1): 11(ptr) Variable UniformConstant + 14: TypeSampler + 15: TypePointer UniformConstant 14 + 16(samp): 15(ptr) Variable UniformConstant + 18: TypeSampledImage 10 + 20: TypePointer Input 7(fvec4) + 21(v_texcoord): 20(ptr) Variable Input + 22: TypeVector 6(float) 2 + 25: TypeImage 6(float) 2D array sampled format:Unknown + 26: TypePointer UniformConstant 25 +27(tex2DArray_weights): 26(ptr) Variable UniformConstant + 30: TypeSampledImage 25 + 33: TypePointer UniformConstant 18 + 34(tex_samp): 33(ptr) Variable UniformConstant + 38: TypePointer UniformConstant 30 +39(tex_samp_array): 38(ptr) Variable UniformConstant + 42(tex2D_src2): 11(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 13: 10 Load 12(tex2D_src1) + 17: 14 Load 16(samp) + 19: 18 SampledImage 13 17 + 23: 7(fvec4) Load 21(v_texcoord) + 24: 22(fvec2) VectorShuffle 23 23 0 1 + 28: 25 Load 27(tex2DArray_weights) + 29: 14 Load 16(samp) + 31: 30 SampledImage 28 29 + 32: 7(fvec4) ImageSampleWeightedQCOM 19 24 31 + Store 9(fragColor) 32 + 35: 18 Load 34(tex_samp) + 36: 7(fvec4) Load 21(v_texcoord) + 37: 22(fvec2) VectorShuffle 36 36 0 1 + 40: 30 Load 39(tex_samp_array) + 41: 7(fvec4) ImageSampleWeightedQCOM 35 37 40 + Store 9(fragColor) 41 + Return + FunctionEnd diff --git a/Test/baseResults/spv.tpipTextureArrays.frag.out b/Test/baseResults/spv.tpipTextureArrays.frag.out new file mode 100644 index 0000000000..cb5a62adbe --- /dev/null +++ b/Test/baseResults/spv.tpipTextureArrays.frag.out @@ -0,0 +1,128 @@ +spv.tpipTextureArrays.frag +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 84 + + Capability Shader + Capability TextureBlockMatchQCOM + Extension "SPV_QCOM_image_processing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 46 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_QCOM_image_processing" + Name 4 "main" + Name 9 "tgt_coords" + Name 13 "v_texcoord" + Name 26 "ref_coords" + Name 37 "blockSize" + Name 40 "ii" + Name 46 "fragColor" + Name 51 "samplers" + Name 60 "tex2D_srcs" + Name 67 "samp" + Decorate 13(v_texcoord) Location 0 + Decorate 46(fragColor) Location 0 + Decorate 51(samplers) Binding 5 + Decorate 51(samplers) DescriptorSet 0 + Decorate 55 DecorationBlockMatchTextureQCOM + Decorate 60(tex2D_srcs) Binding 4 + Decorate 60(tex2D_srcs) DescriptorSet 0 + Decorate 63 DecorationBlockMatchTextureQCOM + Decorate 67(samp) Binding 3 + Decorate 67(samp) DescriptorSet 0 + Decorate 74 DecorationBlockMatchTextureQCOM + Decorate 79 DecorationBlockMatchTextureQCOM + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 2 + 8: TypePointer Function 7(ivec2) + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Input 11(fvec4) + 13(v_texcoord): 12(ptr) Variable Input + 14: 6(int) Constant 0 + 15: TypePointer Input 10(float) + 19: TypePointer Function 6(int) + 21: 6(int) Constant 1 + 27: 6(int) Constant 2 + 32: 6(int) Constant 3 + 38: 6(int) Constant 4 + 39: 7(ivec2) ConstantComposite 38 38 + 43: 6(int) Constant 8 + 45: TypePointer Output 11(fvec4) + 46(fragColor): 45(ptr) Variable Output + 47: TypeImage 10(float) 2D sampled format:Unknown + 48: TypeSampledImage 47 + 49: TypeArray 48 32 + 50: TypePointer UniformConstant 49 + 51(samplers): 50(ptr) Variable UniformConstant + 52: TypeInt 32 1 + 53: 52(int) Constant 0 + 54: TypePointer UniformConstant 48 + 58: TypeArray 47 43 + 59: TypePointer UniformConstant 58 + 60(tex2D_srcs): 59(ptr) Variable UniformConstant + 62: TypePointer UniformConstant 47 + 65: TypeSampler + 66: TypePointer UniformConstant 65 + 67(samp): 66(ptr) Variable UniformConstant + 73: 52(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + 9(tgt_coords): 8(ptr) Variable Function + 26(ref_coords): 8(ptr) Variable Function + 37(blockSize): 8(ptr) Variable Function + 40(ii): 19(ptr) Variable Function + 16: 15(ptr) AccessChain 13(v_texcoord) 14 + 17: 10(float) Load 16 + 18: 6(int) ConvertFToU 17 + 20: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 20 18 + 22: 15(ptr) AccessChain 13(v_texcoord) 21 + 23: 10(float) Load 22 + 24: 6(int) ConvertFToU 23 + 25: 19(ptr) AccessChain 9(tgt_coords) 14 + Store 25 24 + 28: 15(ptr) AccessChain 13(v_texcoord) 27 + 29: 10(float) Load 28 + 30: 6(int) ConvertFToU 29 + 31: 19(ptr) AccessChain 26(ref_coords) 14 + Store 31 30 + 33: 15(ptr) AccessChain 13(v_texcoord) 32 + 34: 10(float) Load 33 + 35: 6(int) ConvertFToU 34 + 36: 19(ptr) AccessChain 26(ref_coords) 21 + Store 36 35 + Store 37(blockSize) 39 + 41: 19(ptr) AccessChain 9(tgt_coords) 14 + 42: 6(int) Load 41 + 44: 6(int) UMod 42 43 + Store 40(ii) 44 + 55: 54(ptr) AccessChain 51(samplers) 53 + 56: 48 Load 55 + 57: 7(ivec2) Load 9(tgt_coords) + 61: 6(int) Load 40(ii) + 63: 62(ptr) AccessChain 60(tex2D_srcs) 61 + 64: 47 Load 63 + 68: 65 Load 67(samp) + 69: 48 SampledImage 64 68 + 70: 7(ivec2) Load 26(ref_coords) + 71: 7(ivec2) Load 37(blockSize) + 72: 11(fvec4) ImageBlockMatchSSDQCOM 56 57 69 70 71 + Store 46(fragColor) 72 + 74: 62(ptr) AccessChain 60(tex2D_srcs) 73 + 75: 47 Load 74 + 76: 65 Load 67(samp) + 77: 48 SampledImage 75 76 + 78: 7(ivec2) Load 9(tgt_coords) + 79: 54(ptr) AccessChain 51(samplers) 73 + 80: 48 Load 79 + 81: 7(ivec2) Load 26(ref_coords) + 82: 7(ivec2) Load 37(blockSize) + 83: 11(fvec4) ImageBlockMatchSADQCOM 77 78 80 81 82 + Store 46(fragColor) 83 + Return + FunctionEnd diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out index 3e35da2794..6a0e0f01dd 100644 --- a/Test/baseResults/spv.types.frag.out +++ b/Test/baseResults/spv.types.frag.out @@ -1,6 +1,6 @@ spv.types.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 260 Capability Shader diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out index 7dbc3b3774..8a8f99807b 100644 --- a/Test/baseResults/spv.uint.frag.out +++ b/Test/baseResults/spv.uint.frag.out @@ -1,6 +1,6 @@ spv.uint.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 213 Capability Shader @@ -59,8 +59,8 @@ spv.uint.frag Decorate 68(c) RelaxedPrecision Decorate 68(c) Location 0 Decorate 72(usampler) RelaxedPrecision - Decorate 72(usampler) DescriptorSet 0 Decorate 72(usampler) Binding 0 + Decorate 72(usampler) DescriptorSet 0 Decorate 73 RelaxedPrecision Decorate 77(tc) RelaxedPrecision Decorate 77(tc) Location 2 diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out index fa66f2bbb4..26e066a6e6 100644 --- a/Test/baseResults/spv.uniformArray.frag.out +++ b/Test/baseResults/spv.uniformArray.frag.out @@ -1,6 +1,6 @@ spv.uniformArray.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 60 Capability Shader @@ -20,8 +20,8 @@ spv.uniformArray.frag Decorate 25(inColor) Location 0 Decorate 43(alpha) Location 7 Decorate 54(gl_FragColor) Location 0 - Decorate 59(texSampler2D) DescriptorSet 0 Decorate 59(texSampler2D) Binding 0 + Decorate 59(texSampler2D) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.uniformInitializer.frag.out b/Test/baseResults/spv.uniformInitializer.frag.out index 63595aeee9..da32af5582 100644 --- a/Test/baseResults/spv.uniformInitializer.frag.out +++ b/Test/baseResults/spv.uniformInitializer.frag.out @@ -1,6 +1,6 @@ spv.uniformInitializer.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 16 Capability Shader @@ -14,8 +14,8 @@ spv.uniformInitializer.frag Name 14 "in_color" Decorate 9(color) Location 0 Decorate 14(in_color) Location 0 - Decorate 14(in_color) DescriptorSet 0 Decorate 14(in_color) Binding 0 + Decorate 14(in_color) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.uniformInitializerStruct.frag.out b/Test/baseResults/spv.uniformInitializerStruct.frag.out index 5ce854dc2e..7b0f7334a3 100644 --- a/Test/baseResults/spv.uniformInitializerStruct.frag.out +++ b/Test/baseResults/spv.uniformInitializerStruct.frag.out @@ -1,6 +1,6 @@ spv.uniformInitializerStruct.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 63 Capability Shader @@ -19,8 +19,8 @@ spv.uniformInitializerStruct.frag Name 34 "parts" Decorate 9(color) Location 0 Decorate 34(parts) Location 0 - Decorate 34(parts) DescriptorSet 0 Decorate 34(parts) Binding 0 + Decorate 34(parts) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.unit1.frag.out b/Test/baseResults/spv.unit1.frag.out index 02ddfecee2..b4de7bd82a 100644 --- a/Test/baseResults/spv.unit1.frag.out +++ b/Test/baseResults/spv.unit1.frag.out @@ -193,7 +193,7 @@ gl_FragCoord origin is upper left 0:? 'h3' ( global highp float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 69 Capability Shader diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out index ee57d43d45..ee2c1c6bf4 100644 --- a/Test/baseResults/spv.variableArrayIndex.frag.out +++ b/Test/baseResults/spv.variableArrayIndex.frag.out @@ -1,6 +1,6 @@ spv.variableArrayIndex.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 93 Capability Shader @@ -41,8 +41,8 @@ spv.variableArrayIndex.frag Decorate 36(foo) Flat Decorate 36(foo) Location 1 Decorate 54(gl_FragColor) Location 0 - Decorate 59(samp2D) DescriptorSet 0 Decorate 59(samp2D) Binding 0 + Decorate 59(samp2D) DescriptorSet 0 Decorate 63(coord) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out index 1e6334ada5..d97b7f728e 100644 --- a/Test/baseResults/spv.varyingArray.frag.out +++ b/Test/baseResults/spv.varyingArray.frag.out @@ -1,6 +1,6 @@ spv.varyingArray.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 61 Capability Shader @@ -17,8 +17,8 @@ spv.varyingArray.frag Name 39 "alpha" Name 45 "gl_FragColor" Name 48 "foo" - Decorate 13(texSampler2D) DescriptorSet 0 Decorate 13(texSampler2D) Binding 0 + Decorate 13(texSampler2D) DescriptorSet 0 Decorate 19(TexCoord) Location 2 Decorate 34(color) Location 0 Decorate 39(alpha) Location 1 diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out index ac9d192b81..7a44c8f9cf 100644 --- a/Test/baseResults/spv.varyingArrayIndirect.frag.out +++ b/Test/baseResults/spv.varyingArrayIndirect.frag.out @@ -1,6 +1,6 @@ spv.varyingArrayIndirect.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 70 Capability Shader @@ -19,8 +19,8 @@ spv.varyingArrayIndirect.frag Name 45 "color" Name 50 "alpha" Name 56 "gl_FragColor" - Decorate 13(texSampler2D) DescriptorSet 0 Decorate 13(texSampler2D) Binding 0 + Decorate 13(texSampler2D) DescriptorSet 0 Decorate 19(userIn) Location 8 Decorate 22(b) Flat Decorate 22(b) Location 11 diff --git a/Test/baseResults/spv.vecMatConstruct.frag.out b/Test/baseResults/spv.vecMatConstruct.frag.out index bfe5ae76ef..5f3a233fde 100644 --- a/Test/baseResults/spv.vecMatConstruct.frag.out +++ b/Test/baseResults/spv.vecMatConstruct.frag.out @@ -1,6 +1,6 @@ spv.vecMatConstruct.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 62 Capability Shader diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out index e95ada4988..16e1686a7e 100644 --- a/Test/baseResults/spv.viewportArray2.tesc.out +++ b/Test/baseResults/spv.viewportArray2.tesc.out @@ -1,6 +1,6 @@ spv.viewportArray2.tesc // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 23 Capability Tessellation @@ -20,8 +20,8 @@ spv.viewportArray2.tesc Name 14 "gl_out" Name 16 "gl_InvocationID" Name 22 "gl_Layer" - MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportMaskNV Decorate 10(gl_PerVertex) Block + MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportMaskNV Decorate 16(gl_InvocationID) BuiltIn InvocationId Decorate 22(gl_Layer) BuiltIn Layer Decorate 22(gl_Layer) ViewportRelativeNV diff --git a/Test/baseResults/spv.viewportArray2.vert.out b/Test/baseResults/spv.viewportArray2.vert.out index cf29cd79df..d916b4d61e 100644 --- a/Test/baseResults/spv.viewportArray2.vert.out +++ b/Test/baseResults/spv.viewportArray2.vert.out @@ -1,6 +1,6 @@ spv.viewportArray2.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 19 Capability Shader diff --git a/Test/baseResults/spv.viewportindex.tese.out b/Test/baseResults/spv.viewportindex.tese.out index 12a30cf4c3..46b1faa6cc 100644 --- a/Test/baseResults/spv.viewportindex.tese.out +++ b/Test/baseResults/spv.viewportindex.tese.out @@ -1,6 +1,6 @@ spv.viewportindex.tese // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 10 Capability Tessellation diff --git a/Test/baseResults/spv.voidFunction.frag.out b/Test/baseResults/spv.voidFunction.frag.out index c77285b191..4a0cc26011 100644 --- a/Test/baseResults/spv.voidFunction.frag.out +++ b/Test/baseResults/spv.voidFunction.frag.out @@ -1,6 +1,6 @@ spv.voidFunction.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 43 Capability Shader diff --git a/Test/baseResults/spv.volatileAtomic.comp.out b/Test/baseResults/spv.volatileAtomic.comp.out index 0364d90770..29462a1342 100644 --- a/Test/baseResults/spv.volatileAtomic.comp.out +++ b/Test/baseResults/spv.volatileAtomic.comp.out @@ -1,6 +1,6 @@ spv.volatileAtomic.comp // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 18 Capability Shader @@ -14,12 +14,14 @@ spv.volatileAtomic.comp MemberName 8(D) 0 "d" Name 10 "d" Decorate 7 ArrayStride 4 + Decorate 8(D) BufferBlock MemberDecorate 8(D) 0 Volatile MemberDecorate 8(D) 0 Coherent MemberDecorate 8(D) 0 Offset 0 - Decorate 8(D) BufferBlock - Decorate 10(d) DescriptorSet 0 + Decorate 10(d) Volatile + Decorate 10(d) Coherent Decorate 10(d) Binding 3 + Decorate 10(d) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out index 47388a2bc0..4e435dfd58 100644 --- a/Test/baseResults/spv.vulkan110.int16.frag.out +++ b/Test/baseResults/spv.vulkan110.int16.frag.out @@ -1,6 +1,6 @@ spv.vulkan110.int16.frag // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 535 Capability Shader @@ -77,10 +77,11 @@ spv.vulkan110.int16.frag Name 532 "block" Name 533 "si16" Name 534 "su16" - MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 24(Uniforms) Block - Decorate 26 DescriptorSet 0 + MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 26 Binding 0 + Decorate 26 DescriptorSet 0 + Decorate 530(Block) Block MemberDecorate 530(Block) 0 Offset 0 MemberDecorate 530(Block) 1 Offset 4 MemberDecorate 530(Block) 2 Offset 8 @@ -89,9 +90,8 @@ spv.vulkan110.int16.frag MemberDecorate 530(Block) 5 Offset 28 MemberDecorate 530(Block) 6 Offset 32 MemberDecorate 530(Block) 7 Offset 40 - Decorate 530(Block) Block - Decorate 532(block) DescriptorSet 0 Decorate 532(block) Binding 1 + Decorate 532(block) DescriptorSet 0 Decorate 533(si16) SpecId 100 Decorate 534(su16) SpecId 101 2: TypeVoid diff --git a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out index 0774960a65..c9231ea08f 100644 --- a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out +++ b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out @@ -1,6 +1,6 @@ spv.vulkan110.storageBuffer.vert // Module Version 10300 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 31 Capability Shader @@ -21,19 +21,19 @@ spv.vulkan110.storageBuffer.vert Name 22 "bb" MemberName 22(bb) 0 "b" Name 24 "bbi" + Decorate 11(gl_PerVertex) Block MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 11(gl_PerVertex) Block - MemberDecorate 16(ub) 0 Offset 0 Decorate 16(ub) Block - Decorate 18(ubi) DescriptorSet 0 + MemberDecorate 16(ub) 0 Offset 0 Decorate 18(ubi) Binding 0 - MemberDecorate 22(bb) 0 Offset 0 + Decorate 18(ubi) DescriptorSet 0 Decorate 22(bb) Block - Decorate 24(bbi) DescriptorSet 0 + MemberDecorate 22(bb) 0 Offset 0 Decorate 24(bbi) Binding 1 + Decorate 24(bbi) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.while-continue-break.vert.out b/Test/baseResults/spv.while-continue-break.vert.out index 246e5fd43b..7a0bfb0c75 100644 --- a/Test/baseResults/spv.while-continue-break.vert.out +++ b/Test/baseResults/spv.while-continue-break.vert.out @@ -1,6 +1,6 @@ spv.while-continue-break.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 41 Capability Shader diff --git a/Test/baseResults/spv.while-simple.vert.out b/Test/baseResults/spv.while-simple.vert.out index 894dea1daf..922860fec1 100644 --- a/Test/baseResults/spv.while-simple.vert.out +++ b/Test/baseResults/spv.while-simple.vert.out @@ -1,6 +1,6 @@ spv.while-simple.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 22 Capability Shader diff --git a/Test/baseResults/spv.whileLoop.frag.out b/Test/baseResults/spv.whileLoop.frag.out index 6155f7bd80..b796b2924f 100644 --- a/Test/baseResults/spv.whileLoop.frag.out +++ b/Test/baseResults/spv.whileLoop.frag.out @@ -1,6 +1,6 @@ spv.whileLoop.frag // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 35 Capability Shader diff --git a/Test/baseResults/spv.xfb.vert.out b/Test/baseResults/spv.xfb.vert.out index 3fdc60b2d1..e76e6b35bd 100644 --- a/Test/baseResults/spv.xfb.vert.out +++ b/Test/baseResults/spv.xfb.vert.out @@ -1,6 +1,6 @@ spv.xfb.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 16 Capability Shader @@ -20,23 +20,23 @@ spv.xfb.vert Name 14 "" Name 15 "out4" Decorate 8(out1) Location 0 + Decorate 8(out1) Offset 12 Decorate 8(out1) XfbBuffer 3 Decorate 8(out1) XfbStride 48 - Decorate 8(out1) Offset 12 - MemberDecorate 9(outXfb) 0 Offset 8 Decorate 9(outXfb) Block + MemberDecorate 9(outXfb) 0 Offset 8 Decorate 11 Location 1 Decorate 11 XfbBuffer 2 Decorate 11 XfbStride 32 - MemberDecorate 12(outXfb2) 0 Offset 60 Decorate 12(outXfb2) Block + MemberDecorate 12(outXfb2) 0 Offset 60 Decorate 14 Location 3 Decorate 14 XfbBuffer 1 Decorate 14 XfbStride 64 Decorate 15(out4) Location 4 + Decorate 15(out4) Offset 4 Decorate 15(out4) XfbBuffer 0 Decorate 15(out4) XfbStride 8 - Decorate 15(out4) Offset 4 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.xfb2.vert.out b/Test/baseResults/spv.xfb2.vert.out index cbb8fc638d..a681fd3e30 100644 --- a/Test/baseResults/spv.xfb2.vert.out +++ b/Test/baseResults/spv.xfb2.vert.out @@ -1,6 +1,6 @@ spv.xfb2.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 35 Capability Shader @@ -19,17 +19,17 @@ spv.xfb2.vert MemberName 17(ComponentsBlock) 0 "c1" MemberName 17(ComponentsBlock) 1 "c2" Name 19 "components" - MemberDecorate 8(gl_PerVertex) 0 Offset 16 - MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position Decorate 8(gl_PerVertex) Block + MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 8(gl_PerVertex) 0 Offset 16 Decorate 10 XfbBuffer 3 Decorate 10 XfbStride 32 Decorate 14(position) Location 0 + Decorate 17(ComponentsBlock) Block MemberDecorate 17(ComponentsBlock) 0 Offset 0 MemberDecorate 17(ComponentsBlock) 1 Offset 16 - Decorate 17(ComponentsBlock) Block - Decorate 19(components) DescriptorSet 0 Decorate 19(components) Binding 5 + Decorate 19(components) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.xfb3.vert.out b/Test/baseResults/spv.xfb3.vert.out index ef53b9aaec..25e031a32d 100644 --- a/Test/baseResults/spv.xfb3.vert.out +++ b/Test/baseResults/spv.xfb3.vert.out @@ -1,6 +1,6 @@ spv.xfb3.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 35 Capability Shader @@ -19,17 +19,17 @@ spv.xfb3.vert MemberName 17(ComponentsBlock) 0 "c1" MemberName 17(ComponentsBlock) 1 "c2" Name 19 "components" - MemberDecorate 8(gl_PerVertex) 0 Offset 16 - MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position Decorate 8(gl_PerVertex) Block + MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 8(gl_PerVertex) 0 Offset 16 Decorate 10 XfbBuffer 3 Decorate 10 XfbStride 80 Decorate 14(position) Location 0 + Decorate 17(ComponentsBlock) Block MemberDecorate 17(ComponentsBlock) 0 Offset 0 MemberDecorate 17(ComponentsBlock) 1 Offset 16 - Decorate 17(ComponentsBlock) Block - Decorate 19(components) DescriptorSet 0 Decorate 19(components) Binding 5 + Decorate 19(components) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out b/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out index e2c6093b45..23110016f9 100644 --- a/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out +++ b/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out @@ -1,6 +1,6 @@ spv.xfbOffsetOnBlockMembersAssignment.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 33 Capability Shader @@ -23,17 +23,17 @@ spv.xfbOffsetOnBlockMembersAssignment.vert Name 27 "" Name 31 "gl_VertexID" Name 32 "gl_InstanceID" + Decorate 8(block2) Block MemberDecorate 8(block2) 0 Offset 0 MemberDecorate 8(block2) 1 Offset 4 - Decorate 8(block2) Block Decorate 10 Location 5 Decorate 10 XfbBuffer 2 Decorate 10 XfbStride 20 + Decorate 25(gl_PerVertex) Block MemberDecorate 25(gl_PerVertex) 0 BuiltIn Position MemberDecorate 25(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 25(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 25(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 25(gl_PerVertex) Block Decorate 27 XfbBuffer 0 Decorate 27 XfbStride 0 Decorate 31(gl_VertexID) BuiltIn VertexId diff --git a/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out b/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out index 499ac8c191..c073ebec70 100644 --- a/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out +++ b/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out @@ -1,6 +1,6 @@ spv.xfbOffsetOnStructMembersAssignment.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 40 Capability Shader @@ -28,18 +28,18 @@ spv.xfbOffsetOnStructMembersAssignment.vert Name 38 "gl_VertexID" Name 39 "gl_InstanceID" Decorate 9(s1) Location 0 + Decorate 9(s1) Offset 16 Decorate 9(s1) XfbBuffer 2 Decorate 9(s1) XfbStride 24 - Decorate 9(s1) Offset 16 Decorate 21(s2) Location 5 + Decorate 21(s2) Offset 8 Decorate 21(s2) XfbBuffer 1 Decorate 21(s2) XfbStride 28 - Decorate 21(s2) Offset 8 + Decorate 32(gl_PerVertex) Block MemberDecorate 32(gl_PerVertex) 0 BuiltIn Position MemberDecorate 32(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 32(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 32(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 32(gl_PerVertex) Block Decorate 34 XfbBuffer 0 Decorate 34 XfbStride 0 Decorate 38(gl_VertexID) BuiltIn VertexId diff --git a/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out b/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out index f7476c7b98..b63226e3f1 100644 --- a/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out +++ b/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out @@ -1,6 +1,6 @@ spv.xfbOverlapOffsetCheckWithBlockAndMember.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 39 Capability Shader @@ -25,19 +25,19 @@ spv.xfbOverlapOffsetCheckWithBlockAndMember.vert Name 33 "" Name 37 "gl_VertexID" Name 38 "gl_InstanceID" + Decorate 8(block2) Block MemberDecorate 8(block2) 0 Offset 12 MemberDecorate 8(block2) 1 Offset 28 MemberDecorate 8(block2) 2 Offset 40 MemberDecorate 8(block2) 3 Offset 56 - Decorate 8(block2) Block Decorate 10 Location 5 Decorate 10 XfbBuffer 3 Decorate 10 XfbStride 72 + Decorate 31(gl_PerVertex) Block MemberDecorate 31(gl_PerVertex) 0 BuiltIn Position MemberDecorate 31(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 31(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 31(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 31(gl_PerVertex) Block Decorate 33 XfbBuffer 0 Decorate 33 XfbStride 0 Decorate 37(gl_VertexID) BuiltIn VertexId diff --git a/Test/baseResults/spv.xfbStrideJustOnce.vert.out b/Test/baseResults/spv.xfbStrideJustOnce.vert.out index bbd7768d35..0548aee6ea 100644 --- a/Test/baseResults/spv.xfbStrideJustOnce.vert.out +++ b/Test/baseResults/spv.xfbStrideJustOnce.vert.out @@ -1,6 +1,6 @@ spv.xfbStrideJustOnce.vert // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 33 Capability Shader @@ -27,11 +27,11 @@ spv.xfbStrideJustOnce.vert Decorate 10 Location 5 Decorate 10 XfbBuffer 2 Decorate 10 XfbStride 20 + Decorate 25(gl_PerVertex) Block MemberDecorate 25(gl_PerVertex) 0 BuiltIn Position MemberDecorate 25(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 25(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 25(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 25(gl_PerVertex) Block Decorate 27 XfbBuffer 0 Decorate 27 XfbStride 0 Decorate 31(gl_VertexID) BuiltIn VertexId diff --git a/Test/baseResults/struct.error.frag.out b/Test/baseResults/struct.error.frag.out new file mode 100644 index 0000000000..5b0993a1d9 --- /dev/null +++ b/Test/baseResults/struct.error.frag.out @@ -0,0 +1,37 @@ +struct.error.frag +ERROR: 0:12: 'z' : no such field in structure +ERROR: 1 compilation errors. No code generated. + + +Shader version: 460 +ERROR: node is still EOpNull! +0:7 Function Definition: test( ( global structure{ global float x}) +0:7 Function Parameters: +0:8 Sequence +0:8 Branch: Return with expression +0:8 Constant: +0:8 1.000000 +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:12 Sequence +0:12 Function Call: test( ( global structure{ global float x}) +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 460 +ERROR: node is still EOpNull! +0:7 Function Definition: test( ( global structure{ global float x}) +0:7 Function Parameters: +0:8 Sequence +0:8 Branch: Return with expression +0:8 Constant: +0:8 1.000000 +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:12 Sequence +0:12 Function Call: test( ( global structure{ global float x}) +0:? Linker Objects + diff --git a/Test/baseResults/terminate.frag.out b/Test/baseResults/terminate.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/terminate.vert.out b/Test/baseResults/terminate.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/tes_patch.tese.out b/Test/baseResults/tes_patch.tese.out new file mode 100644 index 0000000000..e53d3392de --- /dev/null +++ b/Test/baseResults/tes_patch.tese.out @@ -0,0 +1,61 @@ +tes_patch.tese +ERROR: 0:7: 'location' : the aliases sharing the location 1 must be the same basic type and interpolation qualification +ERROR: 1 compilation errors. No code generated. + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +input primitive = isolines +vertex spacing = none +triangle order = none +using point mode +ERROR: node is still EOpNull! +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'result' ( temp 4-component vector of float) +0:14 direct index ( temp 4-component vector of float) +0:14 'tcs_tes' ( in 32-element array of 4-component vector of float) +0:14 Constant: +0:14 0 (const int) +0:18 add second child into first child ( temp 4-component vector of float) +0:18 'tes_gs' ( out 4-component vector of float) +0:18 'result' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'gohan' (layout( location=1 component=0) in 32-element array of 2-component vector of float) +0:? 'goten' (layout( location=1 component=2) patch in 2-component vector of float) +0:? 'tcs_tes' ( in 32-element array of 4-component vector of float) +0:? 'tes_gs' ( out 4-component vector of float) + + +Linked tessellation evaluation stage: + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +input primitive = isolines +vertex spacing = equal_spacing +triangle order = ccw +using point mode +ERROR: node is still EOpNull! +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'result' ( temp 4-component vector of float) +0:14 direct index ( temp 4-component vector of float) +0:14 'tcs_tes' ( in 32-element array of 4-component vector of float) +0:14 Constant: +0:14 0 (const int) +0:18 add second child into first child ( temp 4-component vector of float) +0:18 'tes_gs' ( out 4-component vector of float) +0:18 'result' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'gohan' (layout( location=1 component=0) in 32-element array of 2-component vector of float) +0:? 'goten' (layout( location=1 component=2) patch in 2-component vector of float) +0:? 'tcs_tes' ( in 32-element array of 4-component vector of float) +0:? 'tes_gs' ( out 4-component vector of float) + diff --git a/Test/baseResults/test.conf b/Test/baseResults/test.conf index 98b2a84165..e4cf409ad4 100644 --- a/Test/baseResults/test.conf +++ b/Test/baseResults/test.conf @@ -90,6 +90,15 @@ MaxTaskWorkGroupSizeX_NV 32 MaxTaskWorkGroupSizeY_NV 1 MaxTaskWorkGroupSizeZ_NV 1 MaxMeshViewCountNV 4 +MaxMeshOutputVerticesEXT 256 +MaxMeshOutputPrimitivesEXT 256 +MaxMeshWorkGroupSizeX_EXT 128 +MaxMeshWorkGroupSizeY_EXT 128 +MaxMeshWorkGroupSizeZ_EXT 128 +MaxTaskWorkGroupSizeX_EXT 128 +MaxTaskWorkGroupSizeY_EXT 128 +MaxTaskWorkGroupSizeZ_EXT 128 +MaxMeshViewCountEXT 4 MaxDualSourceDrawBuffersEXT 1 nonInductiveForLoops 1 whileLoops 1 diff --git a/Test/baseResults/tokenLength.vert.out b/Test/baseResults/tokenLength.vert.out index 8c31da9212..43f3534c8f 100644 --- a/Test/baseResults/tokenLength.vert.out +++ b/Test/baseResults/tokenLength.vert.out @@ -16,10 +16,10 @@ ERROR: 0:40: '' : name too long WARNING: 0:40: '#extension' : extension not supported: a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhooooooooooooooooooooooooooooooohhhhhhhhhhhhhhhhh01234 ERROR: 0:43: '' : name too long ERROR: 0:44: '#extension' : ':' missing after extension name -ERROR: 0:47: '#error' : in long non - zero # if -ERROR: 0:50: '#error' : in long zero # if +ERROR: 0:47: '#error' : in long non - zero if +ERROR: 0:50: '#error' : in long zero if ERROR: 0:52: '' : numeric literal too long -ERROR: 0:53: '#error' : in too long # if +ERROR: 0:53: '#error' : in too long if ERROR: 0:56: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ERROR: 0:59: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ERROR: 0:62: '' : name too long @@ -27,7 +27,8 @@ ERROR: 0:62: 'preprocessor evaluation' : undefined macro in expression not allow ERROR: 0:67: '' : numeric literal too long ERROR: 0:70: '' : name too long ERROR: 0:70: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -ERROR: 26 compilation errors. No code generated. +ERROR: 0:74: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON +ERROR: 27 compilation errors. No code generated. Shader version: 300 @@ -56,7 +57,7 @@ ERROR: node is still EOpNull! 0:14 move second child to first child ( temp highp int) 0:14 'HE' ( global highp int) 0:14 Constant: -0:14 -1 (const int) +0:14 180150000 (const int) 0:17 Sequence 0:17 move second child to first child ( temp highp float) 0:17 'F' ( global highp float) @@ -119,6 +120,7 @@ ERROR: node is still EOpNull! 0:? 'superO' ( global highp int) 0:? 'superI' ( global highp int) 0:? 'superF' ( global highp float) +0:? 'BE' ( global highp int) 0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) @@ -152,7 +154,7 @@ ERROR: node is still EOpNull! 0:14 move second child to first child ( temp highp int) 0:14 'HE' ( global highp int) 0:14 Constant: -0:14 -1 (const int) +0:14 180150000 (const int) 0:17 Sequence 0:17 move second child to first child ( temp highp float) 0:17 'F' ( global highp float) @@ -215,6 +217,7 @@ ERROR: node is still EOpNull! 0:? 'superO' ( global highp int) 0:? 'superI' ( global highp int) 0:? 'superF' ( global highp float) +0:? 'BE' ( global highp int) 0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) diff --git a/Test/baseResults/validation_fails.txt b/Test/baseResults/validation_fails.txt new file mode 100644 index 0000000000..1a3ca863f4 --- /dev/null +++ b/Test/baseResults/validation_fails.txt @@ -0,0 +1,71 @@ +Test/baseResults/hlsl.attributeC11.frag.out +Test/baseResults/hlsl.buffer.frag.out +Test/baseResults/hlsl.cbuffer-offsets.comp.out +Test/baseResults/hlsl.constantbuffer.frag.out +Test/baseResults/hlsl.constructimat.frag.out +Test/baseResults/hlsl.coverage.frag.out +Test/baseResults/hlsl.emptystructreturn.frag.out +Test/baseResults/hlsl.emptystructreturn.tesc.out +Test/baseResults/hlsl.emptystructreturn.vert.out +Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out +Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out +Test/baseResults/hlsl.intrinsics.comp.out +Test/baseResults/hlsl.intrinsics.frag.out +Test/baseResults/hlsl.intrinsics.vert.out +Test/baseResults/hlsl.layout.frag.out +Test/baseResults/hlsl.matNx1.frag.out +Test/baseResults/hlsl.matrixSwizzle.vert.out +Test/baseResults/hlsl.matType.bool.frag.out +Test/baseResults/hlsl.matType.frag.out +Test/baseResults/hlsl.matType.int.frag.out +Test/baseResults/hlsl.partialInit.frag.out +Test/baseResults/hlsl.PointSize.geom.out +Test/baseResults/hlsl.samplecmp.array.dx10.frag.out +Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out +Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out +Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out +Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out +Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out +Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out +Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out +Test/baseResults/hlsl.semantic.geom.out +Test/baseResults/hlsl.semantic.vert.out +Test/baseResults/hlsl.structarray.flatten.frag.out +Test/baseResults/hlsl.structbuffer.append.fn.frag.out +Test/baseResults/hlsl.structbuffer.atomics.frag.out +Test/baseResults/hlsl.structbuffer.fn.frag.out +Test/baseResults/hlsl.struct.frag.out +Test/baseResults/hlsl.struct.split.assign.frag.out +Test/baseResults/hlsl.texture.struct.frag.out +Test/baseResults/hlsl.tristream-append.geom.out +Test/baseResults/iomap.crossStage.vk.2.vert.out +Test/baseResults/link.vk.differentPC.0.0.frag.out +Test/baseResults/link.vk.differentPC.1.0.frag.out +Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out +Test/baseResults/spv.130.frag.out +Test/baseResults/spv.140.frag.out +Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out +Test/baseResults/spv.400.frag.out +Test/baseResults/spv.430.vert.out +Test/baseResults/spv.450.tesc.out +Test/baseResults/spv.8bit-16bit-construction.frag.out +Test/baseResults/spv.AofA.frag.out +Test/baseResults/spv.controlFlowAttributes.frag.out +Test/baseResults/spv.dataOut.frag.out +Test/baseResults/spv.float16Fetch.frag.out +Test/baseResults/spv.float16.frag.out +Test/baseResults/spv.float64.frag.out +Test/baseResults/spv.floatFetch.frag.out +Test/baseResults/spv.functionNestedOpaque.vert.out +Test/baseResults/spv.imageAtomic64.frag.out +Test/baseResults/spv.image.frag.out +Test/baseResults/spv.int64.frag.out +Test/baseResults/spv.memoryQualifier.frag.out +Test/baseResults/spv.newTexture.frag.out +Test/baseResults/spv.paramMemory.420.frag.out +Test/baseResults/spv.paramMemory.frag.out +Test/baseResults/spv.queryL.frag.out +Test/baseResults/spv.separate.frag.out +Test/baseResults/spv.sparseTextureClamp.frag.out +Test/baseResults/spv.sparseTexture.frag.out +Test/baseResults/vk.relaxed.errorcheck.vert.out diff --git a/Test/baseResults/vk.relaxed.changeSet.vert.out b/Test/baseResults/vk.relaxed.changeSet.vert.out old mode 100755 new mode 100644 index d2beff93d9..339112d304 --- a/Test/baseResults/vk.relaxed.changeSet.vert.out +++ b/Test/baseResults/vk.relaxed.changeSet.vert.out @@ -139,7 +139,7 @@ gl_FragCoord origin is upper left 0:? 'UV' ( smooth in highp 2-component vector of float) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 46 Capability Shader @@ -168,17 +168,17 @@ gl_FragCoord origin is upper left Decorate 11(aColor) Location 2 Decorate 15(UV) Location 1 Decorate 17(aUV) Location 1 + Decorate 22(gl_PerVertex) Block MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 22(gl_PerVertex) Block + Decorate 28(gl_DefaultUniformBlock) Block MemberDecorate 28(gl_DefaultUniformBlock) 0 ColMajor - MemberDecorate 28(gl_DefaultUniformBlock) 0 Offset 0 MemberDecorate 28(gl_DefaultUniformBlock) 0 MatrixStride 16 - Decorate 28(gl_DefaultUniformBlock) Block - Decorate 30 DescriptorSet 0 + MemberDecorate 28(gl_DefaultUniformBlock) 0 Offset 0 Decorate 30 Binding 0 + Decorate 30 DescriptorSet 0 Decorate 34(aPos) Location 0 Decorate 44(gl_VertexIndex) BuiltIn VertexIndex Decorate 45(gl_InstanceIndex) BuiltIn InstanceIndex @@ -232,7 +232,7 @@ gl_FragCoord origin is upper left Return FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 27 Capability Shader @@ -248,8 +248,8 @@ gl_FragCoord origin is upper left Name 20 "UV" Decorate 9(fragColor) Location 0 Decorate 11(Color) Location 0 - Decorate 16(sTexture) DescriptorSet 1 Decorate 16(sTexture) Binding 0 + Decorate 16(sTexture) DescriptorSet 1 Decorate 20(UV) Location 1 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/vk.relaxed.errorcheck.vert.out b/Test/baseResults/vk.relaxed.errorcheck.vert.out index 5c6ecf92c1..24cf3efec4 100644 --- a/Test/baseResults/vk.relaxed.errorcheck.vert.out +++ b/Test/baseResults/vk.relaxed.errorcheck.vert.out @@ -32,29 +32,39 @@ Shader version: 460 0:? 'gl_InstanceIndex' ( in int InstanceIndex) vk.relaxed.errorcheck.frag +ERROR: 0:11: 'test' : Redeclaration: already declared as " uniform highp float" +ERROR: 1 compilation errors. No code generated. + + Shader version: 460 gl_FragCoord origin is upper left -0:? Sequence -0:10 Function Definition: foo( ( global highp 4-component vector of float) -0:10 Function Parameters: -0:11 Sequence -0:11 Branch: Return with expression -0:11 a: direct index for structure ( uniform highp 4-component vector of float) -0:11 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) -0:11 Constant: -0:11 0 (const uint) -0:14 Function Definition: main( ( global void) -0:14 Function Parameters: -0:15 Sequence -0:15 move second child to first child ( temp highp 4-component vector of float) -0:15 'o' ( out highp 4-component vector of float) -0:15 add ( temp highp 4-component vector of float) -0:15 'io' (layout( location=0) smooth in highp 4-component vector of float) -0:15 Function Call: foo( ( global highp 4-component vector of float) +ERROR: node is still EOpNull! +0:13 Function Definition: foo( ( global highp 4-component vector of float) +0:13 Function Parameters: +0:14 Sequence +0:14 Branch: Return with expression +0:14 add ( temp highp 4-component vector of float) +0:14 a: direct index for structure ( uniform highp 4-component vector of float) +0:14 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp float test}) +0:14 Constant: +0:14 0 (const uint) +0:14 Construct vec4 ( temp highp 4-component vector of float) +0:14 test: direct index for structure ( uniform highp float) +0:14 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp float test}) +0:14 Constant: +0:14 1 (const uint) +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:18 Sequence +0:18 move second child to first child ( temp highp 4-component vector of float) +0:18 'o' ( out highp 4-component vector of float) +0:18 add ( temp highp 4-component vector of float) +0:18 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:18 Function Call: foo( ( global highp 4-component vector of float) 0:? Linker Objects 0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) 0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp float test}) Linked vertex stage: @@ -98,27 +108,33 @@ Shader version: 460 0:? 'gl_InstanceIndex' ( in int InstanceIndex) Shader version: 460 gl_FragCoord origin is upper left -0:? Sequence -0:10 Function Definition: foo( ( global highp 4-component vector of float) -0:10 Function Parameters: -0:11 Sequence -0:11 Branch: Return with expression -0:11 a: direct index for structure ( uniform highp 4-component vector of float) -0:11 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) -0:11 Constant: -0:11 0 (const uint) -0:14 Function Definition: main( ( global void) -0:14 Function Parameters: -0:15 Sequence -0:15 move second child to first child ( temp highp 4-component vector of float) -0:15 'o' ( out highp 4-component vector of float) -0:15 add ( temp highp 4-component vector of float) -0:15 'io' (layout( location=0) smooth in highp 4-component vector of float) -0:15 Function Call: foo( ( global highp 4-component vector of float) +ERROR: node is still EOpNull! +0:13 Function Definition: foo( ( global highp 4-component vector of float) +0:13 Function Parameters: +0:14 Sequence +0:14 Branch: Return with expression +0:14 add ( temp highp 4-component vector of float) +0:14 a: direct index for structure ( uniform highp 4-component vector of float) +0:14 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp float test}) +0:14 Constant: +0:14 0 (const uint) +0:14 Construct vec4 ( temp highp 4-component vector of float) +0:14 test: direct index for structure ( uniform highp float) +0:14 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp float test}) +0:14 Constant: +0:14 1 (const uint) +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:18 Sequence +0:18 move second child to first child ( temp highp 4-component vector of float) +0:18 'o' ( out highp 4-component vector of float) +0:18 add ( temp highp 4-component vector of float) +0:18 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:18 Function Call: foo( ( global highp 4-component vector of float) 0:? Linker Objects 0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) 0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp float test}) Validation failed SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/vk.relaxed.frag.out b/Test/baseResults/vk.relaxed.frag.out index d98910e6f8..105eced6a9 100644 --- a/Test/baseResults/vk.relaxed.frag.out +++ b/Test/baseResults/vk.relaxed.frag.out @@ -5,111 +5,71 @@ WARNING: 0:8: 'c' : ignoring layout qualifier for uniform location Shader version: 460 gl_FragCoord origin is upper left 0:? Sequence -0:36 Function Definition: bar( ( global highp uint) -0:36 Function Parameters: -0:37 Sequence -0:37 Sequence -0:37 move second child to first child ( temp highp uint) -0:37 'j' ( temp highp uint) -0:37 Constant: -0:37 0 (const uint) -0:38 move second child to first child ( temp highp uint) -0:38 'j' ( temp highp uint) -0:38 AtomicAdd ( global highp uint) -0:38 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:38 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:38 Constant: -0:38 0 (const uint) -0:38 Constant: -0:38 1 (const uint) -0:39 move second child to first child ( temp highp uint) -0:39 'j' ( temp highp uint) -0:39 subtract ( temp highp uint) -0:39 AtomicAdd ( global highp uint) -0:39 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:39 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:39 Constant: -0:39 0 (const uint) -0:39 Constant: -0:39 4294967295 (const uint) -0:39 Constant: -0:39 1 (const uint) -0:40 move second child to first child ( temp highp uint) -0:40 'j' ( temp highp uint) -0:40 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:40 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:40 Constant: -0:40 0 (const uint) -0:42 move second child to first child ( temp highp uint) -0:42 'j' ( temp highp uint) -0:42 AtomicAdd ( global highp uint) -0:42 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:42 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:42 Constant: -0:42 0 (const uint) -0:42 Constant: -0:42 1 (const uint) -0:43 move second child to first child ( temp highp uint) -0:43 'j' ( temp highp uint) -0:43 AtomicAdd ( global highp uint) -0:43 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:43 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:43 Constant: -0:43 0 (const uint) -0:43 Constant: -0:43 4294967295 (const uint) -0:44 move second child to first child ( temp highp uint) -0:44 'j' ( temp highp uint) -0:44 AtomicSubtract ( global highp uint) -0:44 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:44 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:44 Constant: -0:44 0 (const uint) +0:43 Function Definition: bar( ( global highp uint) +0:43 Function Parameters: +0:44 Sequence +0:44 Sequence +0:44 move second child to first child ( temp highp uint) +0:44 'j' ( temp highp uint) 0:44 Constant: -0:44 1 (const uint) +0:44 0 (const uint) +0:45 move second child to first child ( temp highp uint) +0:45 'j' ( temp highp uint) +0:45 AtomicAdd ( global highp uint) +0:45 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:45 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:45 Constant: +0:45 0 (const uint) +0:45 Constant: +0:45 1 (const uint) 0:46 move second child to first child ( temp highp uint) 0:46 'j' ( temp highp uint) -0:46 AtomicMin ( global highp uint) -0:46 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:46 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:46 subtract ( temp highp uint) +0:46 AtomicAdd ( global highp uint) +0:46 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:46 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:46 Constant: +0:46 0 (const uint) 0:46 Constant: -0:46 0 (const uint) -0:46 'j' ( temp highp uint) +0:46 4294967295 (const uint) +0:46 Constant: +0:46 1 (const uint) 0:47 move second child to first child ( temp highp uint) 0:47 'j' ( temp highp uint) -0:47 AtomicMax ( global highp uint) -0:47 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:47 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:47 Constant: -0:47 0 (const uint) -0:47 'j' ( temp highp uint) -0:48 move second child to first child ( temp highp uint) -0:48 'j' ( temp highp uint) -0:48 AtomicAnd ( global highp uint) -0:48 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:48 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:48 Constant: -0:48 0 (const uint) -0:48 'j' ( temp highp uint) +0:47 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:47 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:47 Constant: +0:47 0 (const uint) +0:49 move second child to first child ( temp highp uint) +0:49 'j' ( temp highp uint) +0:49 AtomicAdd ( global highp uint) +0:49 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:49 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:49 Constant: +0:49 0 (const uint) +0:49 Constant: +0:49 1 (const uint) 0:50 move second child to first child ( temp highp uint) 0:50 'j' ( temp highp uint) -0:50 AtomicOr ( global highp uint) +0:50 AtomicAdd ( global highp uint) 0:50 counter1: direct index for structure ( coherent volatile buffer highp uint) 0:50 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) 0:50 Constant: 0:50 0 (const uint) -0:50 'j' ( temp highp uint) +0:50 Constant: +0:50 4294967295 (const uint) 0:51 move second child to first child ( temp highp uint) 0:51 'j' ( temp highp uint) -0:51 AtomicXor ( global highp uint) +0:51 AtomicSubtract ( global highp uint) 0:51 counter1: direct index for structure ( coherent volatile buffer highp uint) 0:51 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) 0:51 Constant: 0:51 0 (const uint) -0:51 'j' ( temp highp uint) +0:51 Constant: +0:51 1 (const uint) 0:53 move second child to first child ( temp highp uint) 0:53 'j' ( temp highp uint) -0:53 AtomicExchange ( global highp uint) +0:53 AtomicMin ( global highp uint) 0:53 counter1: direct index for structure ( coherent volatile buffer highp uint) 0:53 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) 0:53 Constant: @@ -117,158 +77,254 @@ gl_FragCoord origin is upper left 0:53 'j' ( temp highp uint) 0:54 move second child to first child ( temp highp uint) 0:54 'j' ( temp highp uint) -0:54 AtomicCompSwap ( global highp uint) +0:54 AtomicMax ( global highp uint) 0:54 counter1: direct index for structure ( coherent volatile buffer highp uint) 0:54 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) 0:54 Constant: 0:54 0 (const uint) -0:54 Constant: -0:54 0 (const uint) 0:54 'j' ( temp highp uint) -0:56 AtomicAdd ( global highp uint) -0:56 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:56 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:56 Constant: -0:56 1 (const uint) -0:56 Constant: -0:56 1 (const uint) -0:57 AtomicAdd ( global highp uint) -0:57 counter3: direct index for structure ( coherent volatile buffer highp uint) -0:57 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) -0:57 Constant: -0:57 0 (const uint) -0:57 Constant: -0:57 1 (const uint) -0:59 MemoryBarrierBuffer ( global void) -0:61 Branch: Return with expression +0:55 move second child to first child ( temp highp uint) +0:55 'j' ( temp highp uint) +0:55 AtomicAnd ( global highp uint) +0:55 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:55 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:55 Constant: +0:55 0 (const uint) +0:55 'j' ( temp highp uint) +0:57 move second child to first child ( temp highp uint) +0:57 'j' ( temp highp uint) +0:57 AtomicOr ( global highp uint) +0:57 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:57 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:57 Constant: +0:57 0 (const uint) +0:57 'j' ( temp highp uint) +0:58 move second child to first child ( temp highp uint) +0:58 'j' ( temp highp uint) +0:58 AtomicXor ( global highp uint) +0:58 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:58 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:58 Constant: +0:58 0 (const uint) +0:58 'j' ( temp highp uint) +0:60 move second child to first child ( temp highp uint) +0:60 'j' ( temp highp uint) +0:60 AtomicExchange ( global highp uint) +0:60 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:60 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:60 Constant: +0:60 0 (const uint) +0:60 'j' ( temp highp uint) +0:61 move second child to first child ( temp highp uint) 0:61 'j' ( temp highp uint) -0:64 Function Definition: foo( ( global highp 4-component vector of float) -0:64 Function Parameters: -0:65 Sequence -0:65 Sequence -0:65 move second child to first child ( temp highp float) -0:65 'f' ( temp highp float) -0:65 add ( temp highp float) -0:65 add ( temp highp float) -0:65 add ( temp highp float) -0:65 j: direct index for structure (layout( column_major std140) uniform highp float) -0:65 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) -0:65 Constant: -0:65 0 (const uint) -0:65 j: direct index for structure (layout( column_major std430) buffer highp float) -0:65 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) -0:65 Constant: -0:65 0 (const int) -0:65 y: direct index for structure ( global highp float) -0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:65 Constant: -0:65 4 (const uint) -0:65 Constant: -0:65 1 (const int) -0:65 Convert uint to float ( temp highp float) -0:65 z: direct index for structure ( global highp uint) -0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:65 Constant: -0:65 4 (const uint) -0:65 Constant: -0:65 2 (const int) -0:66 Sequence -0:66 move second child to first child ( temp highp 2-component vector of float) -0:66 'v2' ( temp highp 2-component vector of float) -0:66 add ( temp highp 2-component vector of float) -0:66 add ( temp highp 2-component vector of float) -0:66 b: direct index for structure ( uniform highp 2-component vector of float) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 1 (const uint) -0:66 c: direct index for structure ( uniform highp 2-component vector of float) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 2 (const uint) -0:66 x: direct index for structure ( global highp 2-component vector of float) -0:66 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 4 (const uint) -0:66 Constant: -0:66 0 (const int) -0:67 Sequence -0:67 move second child to first child ( temp highp 4-component vector of float) -0:67 'v4' ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 a: direct index for structure ( uniform highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 0 (const uint) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 0 (const int) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 1 (const int) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 2 (const int) -0:67 k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:67 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) -0:67 Constant: -0:67 1 (const uint) -0:67 k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float) -0:67 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) -0:67 Constant: -0:67 1 (const int) -0:67 texture ( global highp 4-component vector of float) -0:67 't1' ( uniform highp sampler2D) -0:67 Constant: -0:67 0.000000 -0:67 0.000000 +0:61 AtomicCompSwap ( global highp uint) +0:61 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:61 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:61 Constant: +0:61 0 (const uint) +0:61 Constant: +0:61 0 (const uint) +0:61 'j' ( temp highp uint) +0:63 AtomicAdd ( global highp uint) +0:63 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:63 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:63 Constant: +0:63 1 (const uint) +0:63 Constant: +0:63 1 (const uint) +0:64 AtomicAdd ( global highp uint) +0:64 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:64 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) +0:64 Constant: +0:64 0 (const uint) +0:64 Constant: +0:64 1 (const uint) +0:66 MemoryBarrierBuffer ( global void) 0:68 Branch: Return with expression -0:68 component-wise multiply ( temp highp 4-component vector of float) -0:68 component-wise multiply ( temp highp 4-component vector of float) -0:68 Construct vec4 ( temp highp 4-component vector of float) -0:68 'f' ( temp highp float) -0:68 Construct vec4 ( temp highp 4-component vector of float) -0:68 'v2' ( temp highp 2-component vector of float) -0:68 Constant: -0:68 1.000000 -0:68 Constant: -0:68 1.000000 -0:68 'v4' ( temp highp 4-component vector of float) -0:71 Function Definition: main( ( global void) +0:68 'j' ( temp highp uint) +0:71 Function Definition: foo( ( global highp 4-component vector of float) 0:71 Function Parameters: 0:72 Sequence 0:72 Sequence 0:72 move second child to first child ( temp highp float) -0:72 'j' ( temp highp float) -0:72 Convert uint to float ( temp highp float) -0:72 Function Call: bar( ( global highp uint) -0:73 move second child to first child ( temp highp 4-component vector of float) -0:73 'o' ( out highp 4-component vector of float) -0:73 vector-scale ( temp highp 4-component vector of float) -0:73 'j' ( temp highp float) -0:73 Function Call: foo( ( global highp 4-component vector of float) +0:72 'f' ( temp highp float) +0:72 add ( temp highp float) +0:72 add ( temp highp float) +0:72 add ( temp highp float) +0:72 j: direct index for structure (layout( column_major std140) uniform highp float) +0:72 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:72 Constant: +0:72 0 (const uint) +0:72 j: direct index for structure (layout( column_major std430) buffer highp float) +0:72 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:72 Constant: +0:72 0 (const int) +0:72 y: direct index for structure ( global highp float) +0:72 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers}) +0:72 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:72 Constant: +0:72 4 (const uint) +0:72 Constant: +0:72 1 (const int) +0:72 Convert uint to float ( temp highp float) +0:72 z: direct index for structure ( global highp uint) +0:72 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers}) +0:72 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:72 Constant: +0:72 4 (const uint) +0:72 Constant: +0:72 2 (const int) +0:73 Sequence +0:73 move second child to first child ( temp highp 2-component vector of float) +0:73 'v2' ( temp highp 2-component vector of float) +0:73 add ( temp highp 2-component vector of float) +0:73 add ( temp highp 2-component vector of float) +0:73 b: direct index for structure ( uniform highp 2-component vector of float) +0:73 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:73 Constant: +0:73 1 (const uint) +0:73 c: direct index for structure ( uniform highp 2-component vector of float) +0:73 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:73 Constant: +0:73 2 (const uint) +0:73 x: direct index for structure ( global highp 2-component vector of float) +0:73 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers}) +0:73 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:73 Constant: +0:73 4 (const uint) +0:73 Constant: +0:73 0 (const int) +0:74 Sequence +0:74 move second child to first child ( temp highp 4-component vector of float) +0:74 'v4' ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 a: direct index for structure ( uniform highp 4-component vector of float) +0:74 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:74 Constant: +0:74 0 (const uint) +0:74 direct index ( temp highp 4-component vector of float) +0:74 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:74 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:74 Constant: +0:74 3 (const uint) +0:74 Constant: +0:74 0 (const int) +0:74 direct index ( temp highp 4-component vector of float) +0:74 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:74 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:74 Constant: +0:74 3 (const uint) +0:74 Constant: +0:74 1 (const int) +0:74 direct index ( temp highp 4-component vector of float) +0:74 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:74 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:74 Constant: +0:74 3 (const uint) +0:74 Constant: +0:74 2 (const int) +0:74 k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:74 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:74 Constant: +0:74 1 (const uint) +0:74 k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float) +0:74 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:74 Constant: +0:74 1 (const int) +0:74 texture ( global highp 4-component vector of float) +0:74 't1' ( uniform highp sampler2D) +0:74 Constant: +0:74 0.000000 +0:74 0.000000 +0:74 texture ( global highp 4-component vector of float) +0:? 'structUniform.t0' ( uniform highp sampler2D) +0:74 Constant: +0:74 0.000000 +0:74 0.000000 +0:75 Branch: Return with expression +0:75 component-wise multiply ( temp highp 4-component vector of float) +0:75 component-wise multiply ( temp highp 4-component vector of float) +0:75 Construct vec4 ( temp highp 4-component vector of float) +0:75 'f' ( temp highp float) +0:75 Construct vec4 ( temp highp 4-component vector of float) +0:75 'v2' ( temp highp 2-component vector of float) +0:75 Constant: +0:75 1.000000 +0:75 Constant: +0:75 1.000000 +0:75 'v4' ( temp highp 4-component vector of float) +0:78 Function Definition: baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21; ( global highp 4-component vector of float) +0:78 Function Parameters: +0:78 'samplers' ( in structure{ global 4-element array of highp int /*tn*/}) +0:78 'samplers.tn[0]' ( in highp sampler2D) +0:78 'samplers.tn[1]' ( in highp sampler2D) +0:78 'samplers.tn[2]' ( in highp sampler2D) +0:78 'samplers.tn[3]' ( in highp sampler2D) +0:79 Sequence +0:79 Branch: Return with expression +0:79 add ( temp highp 4-component vector of float) +0:79 add ( temp highp 4-component vector of float) +0:79 add ( temp highp 4-component vector of float) +0:79 texture ( global highp 4-component vector of float) +0:79 'samplers.tn[0]' ( in highp sampler2D) +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:79 texture ( global highp 4-component vector of float) +0:79 'samplers.tn[1]' ( in highp sampler2D) +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:79 texture ( global highp 4-component vector of float) +0:79 'samplers.tn[2]' ( in highp sampler2D) +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:79 texture ( global highp 4-component vector of float) +0:79 'samplers.tn[3]' ( in highp sampler2D) +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:82 Function Definition: main( ( global void) +0:82 Function Parameters: +0:83 Sequence +0:83 Sequence +0:83 move second child to first child ( temp highp float) +0:83 'j' ( temp highp float) +0:83 Convert uint to float ( temp highp float) +0:83 Function Call: bar( ( global highp uint) +0:84 move second child to first child ( temp highp 4-component vector of float) +0:84 'o' ( out highp 4-component vector of float) +0:84 add ( temp highp 4-component vector of float) +0:84 vector-scale ( temp highp 4-component vector of float) +0:84 'j' ( temp highp float) +0:84 Function Call: foo( ( global highp 4-component vector of float) +0:84 Function Call: baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21; ( global highp 4-component vector of float) +0:84 samplers: direct index for structure ( global structure{ global 4-element array of highp int /*tn*/}) +0:84 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers}) +0:84 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:84 Constant: +0:84 4 (const uint) +0:84 Constant: +0:84 4 (const int) +0:84 'structUniform.samplers.tn[0]' ( uniform highp sampler2D) +0:84 'structUniform.samplers.tn[1]' ( uniform highp sampler2D) +0:84 'structUniform.samplers.tn[2]' ( uniform highp sampler2D) +0:84 'structUniform.samplers.tn[3]' ( uniform highp sampler2D) 0:? Linker Objects 0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:? 'structUniform.t0' ( uniform highp sampler2D) +0:? 'structUniform.samplers.tn[0]' ( uniform highp sampler2D) +0:? 'structUniform.samplers.tn[1]' ( uniform highp sampler2D) +0:? 'structUniform.samplers.tn[2]' ( uniform highp sampler2D) +0:? 'structUniform.samplers.tn[3]' ( uniform highp sampler2D) 0:? 't1' ( uniform highp sampler2D) 0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) 0:? 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) @@ -282,111 +338,71 @@ Linked fragment stage: Shader version: 460 gl_FragCoord origin is upper left 0:? Sequence -0:36 Function Definition: bar( ( global highp uint) -0:36 Function Parameters: -0:37 Sequence -0:37 Sequence -0:37 move second child to first child ( temp highp uint) -0:37 'j' ( temp highp uint) -0:37 Constant: -0:37 0 (const uint) -0:38 move second child to first child ( temp highp uint) -0:38 'j' ( temp highp uint) -0:38 AtomicAdd ( global highp uint) -0:38 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:38 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:38 Constant: -0:38 0 (const uint) -0:38 Constant: -0:38 1 (const uint) -0:39 move second child to first child ( temp highp uint) -0:39 'j' ( temp highp uint) -0:39 subtract ( temp highp uint) -0:39 AtomicAdd ( global highp uint) -0:39 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:39 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:39 Constant: -0:39 0 (const uint) -0:39 Constant: -0:39 4294967295 (const uint) -0:39 Constant: -0:39 1 (const uint) -0:40 move second child to first child ( temp highp uint) -0:40 'j' ( temp highp uint) -0:40 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:40 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:40 Constant: -0:40 0 (const uint) -0:42 move second child to first child ( temp highp uint) -0:42 'j' ( temp highp uint) -0:42 AtomicAdd ( global highp uint) -0:42 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:42 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:42 Constant: -0:42 0 (const uint) -0:42 Constant: -0:42 1 (const uint) -0:43 move second child to first child ( temp highp uint) -0:43 'j' ( temp highp uint) -0:43 AtomicAdd ( global highp uint) -0:43 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:43 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:43 Constant: -0:43 0 (const uint) -0:43 Constant: -0:43 4294967295 (const uint) -0:44 move second child to first child ( temp highp uint) -0:44 'j' ( temp highp uint) -0:44 AtomicSubtract ( global highp uint) -0:44 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:44 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:44 Constant: -0:44 0 (const uint) +0:43 Function Definition: bar( ( global highp uint) +0:43 Function Parameters: +0:44 Sequence +0:44 Sequence +0:44 move second child to first child ( temp highp uint) +0:44 'j' ( temp highp uint) 0:44 Constant: -0:44 1 (const uint) +0:44 0 (const uint) +0:45 move second child to first child ( temp highp uint) +0:45 'j' ( temp highp uint) +0:45 AtomicAdd ( global highp uint) +0:45 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:45 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:45 Constant: +0:45 0 (const uint) +0:45 Constant: +0:45 1 (const uint) 0:46 move second child to first child ( temp highp uint) 0:46 'j' ( temp highp uint) -0:46 AtomicMin ( global highp uint) -0:46 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:46 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:46 subtract ( temp highp uint) +0:46 AtomicAdd ( global highp uint) +0:46 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:46 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:46 Constant: +0:46 0 (const uint) 0:46 Constant: -0:46 0 (const uint) -0:46 'j' ( temp highp uint) +0:46 4294967295 (const uint) +0:46 Constant: +0:46 1 (const uint) 0:47 move second child to first child ( temp highp uint) 0:47 'j' ( temp highp uint) -0:47 AtomicMax ( global highp uint) -0:47 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:47 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:47 Constant: -0:47 0 (const uint) -0:47 'j' ( temp highp uint) -0:48 move second child to first child ( temp highp uint) -0:48 'j' ( temp highp uint) -0:48 AtomicAnd ( global highp uint) -0:48 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:48 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:48 Constant: -0:48 0 (const uint) -0:48 'j' ( temp highp uint) +0:47 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:47 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:47 Constant: +0:47 0 (const uint) +0:49 move second child to first child ( temp highp uint) +0:49 'j' ( temp highp uint) +0:49 AtomicAdd ( global highp uint) +0:49 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:49 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:49 Constant: +0:49 0 (const uint) +0:49 Constant: +0:49 1 (const uint) 0:50 move second child to first child ( temp highp uint) 0:50 'j' ( temp highp uint) -0:50 AtomicOr ( global highp uint) +0:50 AtomicAdd ( global highp uint) 0:50 counter1: direct index for structure ( coherent volatile buffer highp uint) 0:50 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) 0:50 Constant: 0:50 0 (const uint) -0:50 'j' ( temp highp uint) +0:50 Constant: +0:50 4294967295 (const uint) 0:51 move second child to first child ( temp highp uint) 0:51 'j' ( temp highp uint) -0:51 AtomicXor ( global highp uint) +0:51 AtomicSubtract ( global highp uint) 0:51 counter1: direct index for structure ( coherent volatile buffer highp uint) 0:51 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) 0:51 Constant: 0:51 0 (const uint) -0:51 'j' ( temp highp uint) +0:51 Constant: +0:51 1 (const uint) 0:53 move second child to first child ( temp highp uint) 0:53 'j' ( temp highp uint) -0:53 AtomicExchange ( global highp uint) +0:53 AtomicMin ( global highp uint) 0:53 counter1: direct index for structure ( coherent volatile buffer highp uint) 0:53 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) 0:53 Constant: @@ -394,158 +410,254 @@ gl_FragCoord origin is upper left 0:53 'j' ( temp highp uint) 0:54 move second child to first child ( temp highp uint) 0:54 'j' ( temp highp uint) -0:54 AtomicCompSwap ( global highp uint) +0:54 AtomicMax ( global highp uint) 0:54 counter1: direct index for structure ( coherent volatile buffer highp uint) 0:54 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) 0:54 Constant: 0:54 0 (const uint) -0:54 Constant: -0:54 0 (const uint) 0:54 'j' ( temp highp uint) -0:56 AtomicAdd ( global highp uint) -0:56 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:56 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:56 Constant: -0:56 1 (const uint) -0:56 Constant: -0:56 1 (const uint) -0:57 AtomicAdd ( global highp uint) -0:57 counter3: direct index for structure ( coherent volatile buffer highp uint) -0:57 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) -0:57 Constant: -0:57 0 (const uint) -0:57 Constant: -0:57 1 (const uint) -0:59 MemoryBarrierBuffer ( global void) -0:61 Branch: Return with expression +0:55 move second child to first child ( temp highp uint) +0:55 'j' ( temp highp uint) +0:55 AtomicAnd ( global highp uint) +0:55 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:55 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:55 Constant: +0:55 0 (const uint) +0:55 'j' ( temp highp uint) +0:57 move second child to first child ( temp highp uint) +0:57 'j' ( temp highp uint) +0:57 AtomicOr ( global highp uint) +0:57 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:57 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:57 Constant: +0:57 0 (const uint) +0:57 'j' ( temp highp uint) +0:58 move second child to first child ( temp highp uint) +0:58 'j' ( temp highp uint) +0:58 AtomicXor ( global highp uint) +0:58 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:58 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:58 Constant: +0:58 0 (const uint) +0:58 'j' ( temp highp uint) +0:60 move second child to first child ( temp highp uint) +0:60 'j' ( temp highp uint) +0:60 AtomicExchange ( global highp uint) +0:60 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:60 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:60 Constant: +0:60 0 (const uint) +0:60 'j' ( temp highp uint) +0:61 move second child to first child ( temp highp uint) 0:61 'j' ( temp highp uint) -0:64 Function Definition: foo( ( global highp 4-component vector of float) -0:64 Function Parameters: -0:65 Sequence -0:65 Sequence -0:65 move second child to first child ( temp highp float) -0:65 'f' ( temp highp float) -0:65 add ( temp highp float) -0:65 add ( temp highp float) -0:65 add ( temp highp float) -0:65 j: direct index for structure (layout( column_major std140) uniform highp float) -0:65 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) -0:65 Constant: -0:65 0 (const uint) -0:65 j: direct index for structure (layout( column_major std430) buffer highp float) -0:65 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) -0:65 Constant: -0:65 0 (const int) -0:65 y: direct index for structure ( global highp float) -0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:65 Constant: -0:65 4 (const uint) -0:65 Constant: -0:65 1 (const int) -0:65 Convert uint to float ( temp highp float) -0:65 z: direct index for structure ( global highp uint) -0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:65 Constant: -0:65 4 (const uint) -0:65 Constant: -0:65 2 (const int) -0:66 Sequence -0:66 move second child to first child ( temp highp 2-component vector of float) -0:66 'v2' ( temp highp 2-component vector of float) -0:66 add ( temp highp 2-component vector of float) -0:66 add ( temp highp 2-component vector of float) -0:66 b: direct index for structure ( uniform highp 2-component vector of float) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 1 (const uint) -0:66 c: direct index for structure ( uniform highp 2-component vector of float) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 2 (const uint) -0:66 x: direct index for structure ( global highp 2-component vector of float) -0:66 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 4 (const uint) -0:66 Constant: -0:66 0 (const int) -0:67 Sequence -0:67 move second child to first child ( temp highp 4-component vector of float) -0:67 'v4' ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 a: direct index for structure ( uniform highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 0 (const uint) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 0 (const int) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 1 (const int) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 2 (const int) -0:67 k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:67 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) -0:67 Constant: -0:67 1 (const uint) -0:67 k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float) -0:67 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) -0:67 Constant: -0:67 1 (const int) -0:67 texture ( global highp 4-component vector of float) -0:67 't1' ( uniform highp sampler2D) -0:67 Constant: -0:67 0.000000 -0:67 0.000000 +0:61 AtomicCompSwap ( global highp uint) +0:61 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:61 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:61 Constant: +0:61 0 (const uint) +0:61 Constant: +0:61 0 (const uint) +0:61 'j' ( temp highp uint) +0:63 AtomicAdd ( global highp uint) +0:63 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:63 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:63 Constant: +0:63 1 (const uint) +0:63 Constant: +0:63 1 (const uint) +0:64 AtomicAdd ( global highp uint) +0:64 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:64 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) +0:64 Constant: +0:64 0 (const uint) +0:64 Constant: +0:64 1 (const uint) +0:66 MemoryBarrierBuffer ( global void) 0:68 Branch: Return with expression -0:68 component-wise multiply ( temp highp 4-component vector of float) -0:68 component-wise multiply ( temp highp 4-component vector of float) -0:68 Construct vec4 ( temp highp 4-component vector of float) -0:68 'f' ( temp highp float) -0:68 Construct vec4 ( temp highp 4-component vector of float) -0:68 'v2' ( temp highp 2-component vector of float) -0:68 Constant: -0:68 1.000000 -0:68 Constant: -0:68 1.000000 -0:68 'v4' ( temp highp 4-component vector of float) -0:71 Function Definition: main( ( global void) +0:68 'j' ( temp highp uint) +0:71 Function Definition: foo( ( global highp 4-component vector of float) 0:71 Function Parameters: 0:72 Sequence 0:72 Sequence 0:72 move second child to first child ( temp highp float) -0:72 'j' ( temp highp float) -0:72 Convert uint to float ( temp highp float) -0:72 Function Call: bar( ( global highp uint) -0:73 move second child to first child ( temp highp 4-component vector of float) -0:73 'o' ( out highp 4-component vector of float) -0:73 vector-scale ( temp highp 4-component vector of float) -0:73 'j' ( temp highp float) -0:73 Function Call: foo( ( global highp 4-component vector of float) +0:72 'f' ( temp highp float) +0:72 add ( temp highp float) +0:72 add ( temp highp float) +0:72 add ( temp highp float) +0:72 j: direct index for structure (layout( column_major std140) uniform highp float) +0:72 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:72 Constant: +0:72 0 (const uint) +0:72 j: direct index for structure (layout( column_major std430) buffer highp float) +0:72 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:72 Constant: +0:72 0 (const int) +0:72 y: direct index for structure ( global highp float) +0:72 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers}) +0:72 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:72 Constant: +0:72 4 (const uint) +0:72 Constant: +0:72 1 (const int) +0:72 Convert uint to float ( temp highp float) +0:72 z: direct index for structure ( global highp uint) +0:72 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers}) +0:72 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:72 Constant: +0:72 4 (const uint) +0:72 Constant: +0:72 2 (const int) +0:73 Sequence +0:73 move second child to first child ( temp highp 2-component vector of float) +0:73 'v2' ( temp highp 2-component vector of float) +0:73 add ( temp highp 2-component vector of float) +0:73 add ( temp highp 2-component vector of float) +0:73 b: direct index for structure ( uniform highp 2-component vector of float) +0:73 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:73 Constant: +0:73 1 (const uint) +0:73 c: direct index for structure ( uniform highp 2-component vector of float) +0:73 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:73 Constant: +0:73 2 (const uint) +0:73 x: direct index for structure ( global highp 2-component vector of float) +0:73 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers}) +0:73 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:73 Constant: +0:73 4 (const uint) +0:73 Constant: +0:73 0 (const int) +0:74 Sequence +0:74 move second child to first child ( temp highp 4-component vector of float) +0:74 'v4' ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 add ( temp highp 4-component vector of float) +0:74 a: direct index for structure ( uniform highp 4-component vector of float) +0:74 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:74 Constant: +0:74 0 (const uint) +0:74 direct index ( temp highp 4-component vector of float) +0:74 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:74 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:74 Constant: +0:74 3 (const uint) +0:74 Constant: +0:74 0 (const int) +0:74 direct index ( temp highp 4-component vector of float) +0:74 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:74 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:74 Constant: +0:74 3 (const uint) +0:74 Constant: +0:74 1 (const int) +0:74 direct index ( temp highp 4-component vector of float) +0:74 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:74 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:74 Constant: +0:74 3 (const uint) +0:74 Constant: +0:74 2 (const int) +0:74 k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:74 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:74 Constant: +0:74 1 (const uint) +0:74 k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float) +0:74 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:74 Constant: +0:74 1 (const int) +0:74 texture ( global highp 4-component vector of float) +0:74 't1' ( uniform highp sampler2D) +0:74 Constant: +0:74 0.000000 +0:74 0.000000 +0:74 texture ( global highp 4-component vector of float) +0:? 'structUniform.t0' ( uniform highp sampler2D) +0:74 Constant: +0:74 0.000000 +0:74 0.000000 +0:75 Branch: Return with expression +0:75 component-wise multiply ( temp highp 4-component vector of float) +0:75 component-wise multiply ( temp highp 4-component vector of float) +0:75 Construct vec4 ( temp highp 4-component vector of float) +0:75 'f' ( temp highp float) +0:75 Construct vec4 ( temp highp 4-component vector of float) +0:75 'v2' ( temp highp 2-component vector of float) +0:75 Constant: +0:75 1.000000 +0:75 Constant: +0:75 1.000000 +0:75 'v4' ( temp highp 4-component vector of float) +0:78 Function Definition: baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21; ( global highp 4-component vector of float) +0:78 Function Parameters: +0:78 'samplers' ( in structure{ global 4-element array of highp int /*tn*/}) +0:78 'samplers.tn[0]' ( in highp sampler2D) +0:78 'samplers.tn[1]' ( in highp sampler2D) +0:78 'samplers.tn[2]' ( in highp sampler2D) +0:78 'samplers.tn[3]' ( in highp sampler2D) +0:79 Sequence +0:79 Branch: Return with expression +0:79 add ( temp highp 4-component vector of float) +0:79 add ( temp highp 4-component vector of float) +0:79 add ( temp highp 4-component vector of float) +0:79 texture ( global highp 4-component vector of float) +0:79 'samplers.tn[0]' ( in highp sampler2D) +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:79 texture ( global highp 4-component vector of float) +0:79 'samplers.tn[1]' ( in highp sampler2D) +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:79 texture ( global highp 4-component vector of float) +0:79 'samplers.tn[2]' ( in highp sampler2D) +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:79 texture ( global highp 4-component vector of float) +0:79 'samplers.tn[3]' ( in highp sampler2D) +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:82 Function Definition: main( ( global void) +0:82 Function Parameters: +0:83 Sequence +0:83 Sequence +0:83 move second child to first child ( temp highp float) +0:83 'j' ( temp highp float) +0:83 Convert uint to float ( temp highp float) +0:83 Function Call: bar( ( global highp uint) +0:84 move second child to first child ( temp highp 4-component vector of float) +0:84 'o' ( out highp 4-component vector of float) +0:84 add ( temp highp 4-component vector of float) +0:84 vector-scale ( temp highp 4-component vector of float) +0:84 'j' ( temp highp float) +0:84 Function Call: foo( ( global highp 4-component vector of float) +0:84 Function Call: baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21; ( global highp 4-component vector of float) +0:84 samplers: direct index for structure ( global structure{ global 4-element array of highp int /*tn*/}) +0:84 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers}) +0:84 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:84 Constant: +0:84 4 (const uint) +0:84 Constant: +0:84 4 (const int) +0:84 'structUniform.samplers.tn[0]' ( uniform highp sampler2D) +0:84 'structUniform.samplers.tn[1]' ( uniform highp sampler2D) +0:84 'structUniform.samplers.tn[2]' ( uniform highp sampler2D) +0:84 'structUniform.samplers.tn[3]' ( uniform highp sampler2D) 0:? Linker Objects 0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z, global highp int /*t0*/, global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform}) +0:? 'structUniform.t0' ( uniform highp sampler2D) +0:? 'structUniform.samplers.tn[0]' ( uniform highp sampler2D) +0:? 'structUniform.samplers.tn[1]' ( uniform highp sampler2D) +0:? 'structUniform.samplers.tn[2]' ( uniform highp sampler2D) +0:? 'structUniform.samplers.tn[3]' ( uniform highp sampler2D) 0:? 't1' ( uniform highp sampler2D) 0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) 0:? 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) @@ -553,94 +665,123 @@ gl_FragCoord origin is upper left 0:? 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) // Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 163 +// Generated by (magic number): 8000b +// Id's are bound by 216 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 159 + EntryPoint Fragment 4 "main" 190 ExecutionMode 4 OriginUpperLeft Source GLSL 460 Name 4 "main" Name 8 "bar(" Name 13 "foo(" - Name 16 "j" - Name 18 "gl_AtomicCounterBlock_0" - MemberName 18(gl_AtomicCounterBlock_0) 0 "counter1" - MemberName 18(gl_AtomicCounterBlock_0) 1 "counter2" - Name 20 "" - Name 63 "gl_AtomicCounterBlock_1" - MemberName 63(gl_AtomicCounterBlock_1) 0 "counter3" - Name 65 "" - Name 73 "f" - Name 74 "UniformBlock" - MemberName 74(UniformBlock) 0 "j" - MemberName 74(UniformBlock) 1 "k" - Name 76 "" - Name 80 "BufferBlock" - MemberName 80(BufferBlock) 0 "j" - MemberName 80(BufferBlock) 1 "k" - Name 82 "bufferInstance" - Name 89 "e" - MemberName 89(e) 0 "x" - MemberName 89(e) 1 "y" - MemberName 89(e) 2 "z" - Name 90 "gl_DefaultUniformBlock" - MemberName 90(gl_DefaultUniformBlock) 0 "a" - MemberName 90(gl_DefaultUniformBlock) 1 "b" - MemberName 90(gl_DefaultUniformBlock) 2 "c" - MemberName 90(gl_DefaultUniformBlock) 3 "d" - MemberName 90(gl_DefaultUniformBlock) 4 "structUniform" - Name 92 "" - Name 103 "v2" - Name 114 "v4" - Name 137 "t1" - Name 155 "j" - Name 159 "o" - MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Coherent - MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Volatile - MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Coherent - MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Offset 0 - MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Coherent - MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Volatile - MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Coherent - MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Offset 4 - Decorate 18(gl_AtomicCounterBlock_0) BufferBlock - Decorate 20 DescriptorSet 0 - Decorate 20 Binding 4 - MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Coherent - MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Volatile - MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Coherent - MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Offset 0 - Decorate 63(gl_AtomicCounterBlock_1) BufferBlock - Decorate 65 DescriptorSet 0 - Decorate 65 Binding 5 - MemberDecorate 74(UniformBlock) 0 Offset 0 - MemberDecorate 74(UniformBlock) 1 Offset 16 - Decorate 74(UniformBlock) Block - Decorate 76 DescriptorSet 0 - Decorate 76 Binding 2 - MemberDecorate 80(BufferBlock) 0 Offset 0 - MemberDecorate 80(BufferBlock) 1 Offset 16 - Decorate 80(BufferBlock) BufferBlock - Decorate 82(bufferInstance) DescriptorSet 0 - Decorate 82(bufferInstance) Binding 3 - Decorate 88 ArrayStride 16 - MemberDecorate 89(e) 0 Offset 0 - MemberDecorate 89(e) 1 Offset 8 - MemberDecorate 89(e) 2 Offset 12 - MemberDecorate 90(gl_DefaultUniformBlock) 0 Offset 0 - MemberDecorate 90(gl_DefaultUniformBlock) 1 Offset 16 - MemberDecorate 90(gl_DefaultUniformBlock) 2 Offset 24 - MemberDecorate 90(gl_DefaultUniformBlock) 3 Offset 32 - MemberDecorate 90(gl_DefaultUniformBlock) 4 Offset 192 - Decorate 90(gl_DefaultUniformBlock) Block - Decorate 92 DescriptorSet 0 - Decorate 92 Binding 0 - Decorate 137(t1) DescriptorSet 0 - Decorate 137(t1) Binding 1 - Decorate 159(o) Location 0 + Name 18 "SamplerArray" + MemberName 18(SamplerArray) 0 "/*tn*/" + Name 29 "baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21;" + Name 24 "samplers" + Name 25 "samplers.tn[0]" + Name 26 "samplers.tn[1]" + Name 27 "samplers.tn[2]" + Name 28 "samplers.tn[3]" + Name 32 "j" + Name 34 "gl_AtomicCounterBlock_0" + MemberName 34(gl_AtomicCounterBlock_0) 0 "counter1" + MemberName 34(gl_AtomicCounterBlock_0) 1 "counter2" + Name 36 "" + Name 78 "gl_AtomicCounterBlock_1" + MemberName 78(gl_AtomicCounterBlock_1) 0 "counter3" + Name 80 "" + Name 88 "f" + Name 89 "UniformBlock" + MemberName 89(UniformBlock) 0 "j" + MemberName 89(UniformBlock) 1 "k" + Name 91 "" + Name 95 "BufferBlock" + MemberName 95(BufferBlock) 0 "j" + MemberName 95(BufferBlock) 1 "k" + Name 97 "bufferInstance" + Name 105 "SamplerArray" + MemberName 105(SamplerArray) 0 "/*tn*/" + Name 106 "e" + MemberName 106(e) 0 "x" + MemberName 106(e) 1 "y" + MemberName 106(e) 2 "z" + MemberName 106(e) 3 "/*t0*/" + MemberName 106(e) 4 "samplers" + Name 107 "gl_DefaultUniformBlock" + MemberName 107(gl_DefaultUniformBlock) 0 "a" + MemberName 107(gl_DefaultUniformBlock) 1 "b" + MemberName 107(gl_DefaultUniformBlock) 2 "c" + MemberName 107(gl_DefaultUniformBlock) 3 "d" + MemberName 107(gl_DefaultUniformBlock) 4 "structUniform" + Name 109 "" + Name 120 "v2" + Name 131 "v4" + Name 151 "t1" + Name 157 "structUniform.t0" + Name 186 "j" + Name 190 "o" + Name 194 "structUniform.samplers.tn[0]" + Name 195 "structUniform.samplers.tn[1]" + Name 196 "structUniform.samplers.tn[2]" + Name 197 "structUniform.samplers.tn[3]" + Name 198 "param" + Decorate 34(gl_AtomicCounterBlock_0) BufferBlock + MemberDecorate 34(gl_AtomicCounterBlock_0) 0 Volatile + MemberDecorate 34(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 34(gl_AtomicCounterBlock_0) 0 Offset 0 + MemberDecorate 34(gl_AtomicCounterBlock_0) 1 Volatile + MemberDecorate 34(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 34(gl_AtomicCounterBlock_0) 1 Offset 4 + Decorate 36 Binding 9 + Decorate 36 DescriptorSet 0 + Decorate 78(gl_AtomicCounterBlock_1) BufferBlock + MemberDecorate 78(gl_AtomicCounterBlock_1) 0 Volatile + MemberDecorate 78(gl_AtomicCounterBlock_1) 0 Coherent + MemberDecorate 78(gl_AtomicCounterBlock_1) 0 Offset 0 + Decorate 80 Binding 10 + Decorate 80 DescriptorSet 0 + Decorate 89(UniformBlock) Block + MemberDecorate 89(UniformBlock) 0 Offset 0 + MemberDecorate 89(UniformBlock) 1 Offset 16 + Decorate 91 Binding 7 + Decorate 91 DescriptorSet 0 + Decorate 95(BufferBlock) BufferBlock + MemberDecorate 95(BufferBlock) 0 Offset 0 + MemberDecorate 95(BufferBlock) 1 Offset 16 + Decorate 97(bufferInstance) Binding 8 + Decorate 97(bufferInstance) DescriptorSet 0 + Decorate 103 ArrayStride 16 + Decorate 104 ArrayStride 16 + MemberDecorate 105(SamplerArray) 0 Offset 0 + MemberDecorate 106(e) 0 Offset 0 + MemberDecorate 106(e) 1 Offset 8 + MemberDecorate 106(e) 2 Offset 12 + MemberDecorate 106(e) 3 Offset 16 + MemberDecorate 106(e) 4 Offset 32 + Decorate 107(gl_DefaultUniformBlock) Block + MemberDecorate 107(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 107(gl_DefaultUniformBlock) 1 Offset 16 + MemberDecorate 107(gl_DefaultUniformBlock) 2 Offset 24 + MemberDecorate 107(gl_DefaultUniformBlock) 3 Offset 32 + MemberDecorate 107(gl_DefaultUniformBlock) 4 Offset 192 + Decorate 109 Binding 0 + Decorate 109 DescriptorSet 0 + Decorate 151(t1) Binding 6 + Decorate 151(t1) DescriptorSet 0 + Decorate 157(structUniform.t0) Binding 1 + Decorate 157(structUniform.t0) DescriptorSet 0 + Decorate 190(o) Location 0 + Decorate 194(structUniform.samplers.tn[0]) Binding 2 + Decorate 194(structUniform.samplers.tn[0]) DescriptorSet 0 + Decorate 195(structUniform.samplers.tn[1]) Binding 3 + Decorate 195(structUniform.samplers.tn[1]) DescriptorSet 0 + Decorate 196(structUniform.samplers.tn[2]) Binding 4 + Decorate 196(structUniform.samplers.tn[2]) DescriptorSet 0 + Decorate 197(structUniform.samplers.tn[3]) Binding 5 + Decorate 197(structUniform.samplers.tn[3]) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -648,179 +789,236 @@ gl_FragCoord origin is upper left 10: TypeFloat 32 11: TypeVector 10(float) 4 12: TypeFunction 11(fvec4) - 15: TypePointer Function 6(int) - 17: 6(int) Constant 0 -18(gl_AtomicCounterBlock_0): TypeStruct 6(int) 6(int) - 19: TypePointer Uniform 18(gl_AtomicCounterBlock_0) - 20: 19(ptr) Variable Uniform - 21: TypeInt 32 1 - 22: 21(int) Constant 0 - 23: TypePointer Uniform 6(int) - 25: 6(int) Constant 1 - 28: 6(int) Constant 4294967295 - 60: 21(int) Constant 1 -63(gl_AtomicCounterBlock_1): TypeStruct 6(int) - 64: TypePointer Uniform 63(gl_AtomicCounterBlock_1) - 65: 64(ptr) Variable Uniform - 68: 6(int) Constant 72 - 72: TypePointer Function 10(float) -74(UniformBlock): TypeStruct 10(float) 11(fvec4) - 75: TypePointer Uniform 74(UniformBlock) - 76: 75(ptr) Variable Uniform - 77: TypePointer Uniform 10(float) - 80(BufferBlock): TypeStruct 10(float) 11(fvec4) - 81: TypePointer Uniform 80(BufferBlock) -82(bufferInstance): 81(ptr) Variable Uniform - 86: TypeVector 10(float) 2 - 87: 6(int) Constant 10 - 88: TypeArray 11(fvec4) 87 - 89(e): TypeStruct 86(fvec2) 10(float) 6(int) -90(gl_DefaultUniformBlock): TypeStruct 11(fvec4) 86(fvec2) 86(fvec2) 88 89(e) - 91: TypePointer Uniform 90(gl_DefaultUniformBlock) - 92: 91(ptr) Variable Uniform - 93: 21(int) Constant 4 - 97: 21(int) Constant 2 - 102: TypePointer Function 86(fvec2) - 104: TypePointer Uniform 86(fvec2) - 113: TypePointer Function 11(fvec4) - 115: TypePointer Uniform 11(fvec4) - 118: 21(int) Constant 3 - 134: TypeImage 10(float) 2D sampled format:Unknown - 135: TypeSampledImage 134 - 136: TypePointer UniformConstant 135 - 137(t1): 136(ptr) Variable UniformConstant - 139: 10(float) Constant 0 - 140: 86(fvec2) ConstantComposite 139 139 - 146: 10(float) Constant 1065353216 - 158: TypePointer Output 11(fvec4) - 159(o): 158(ptr) Variable Output + 15: TypeInt 32 1 + 16: 6(int) Constant 4 + 17: TypeArray 15(int) 16 +18(SamplerArray): TypeStruct 17 + 19: TypePointer Function 18(SamplerArray) + 20: TypeImage 10(float) 2D sampled format:Unknown + 21: TypeSampledImage 20 + 22: TypePointer UniformConstant 21 + 23: TypeFunction 11(fvec4) 19(ptr) 22(ptr) 22(ptr) 22(ptr) 22(ptr) + 31: TypePointer Function 6(int) + 33: 6(int) Constant 0 +34(gl_AtomicCounterBlock_0): TypeStruct 6(int) 6(int) + 35: TypePointer Uniform 34(gl_AtomicCounterBlock_0) + 36: 35(ptr) Variable Uniform + 37: 15(int) Constant 0 + 38: TypePointer Uniform 6(int) + 40: 6(int) Constant 1 + 43: 6(int) Constant 4294967295 + 75: 15(int) Constant 1 +78(gl_AtomicCounterBlock_1): TypeStruct 6(int) + 79: TypePointer Uniform 78(gl_AtomicCounterBlock_1) + 80: 79(ptr) Variable Uniform + 83: 6(int) Constant 72 + 87: TypePointer Function 10(float) +89(UniformBlock): TypeStruct 10(float) 11(fvec4) + 90: TypePointer Uniform 89(UniformBlock) + 91: 90(ptr) Variable Uniform + 92: TypePointer Uniform 10(float) + 95(BufferBlock): TypeStruct 10(float) 11(fvec4) + 96: TypePointer Uniform 95(BufferBlock) +97(bufferInstance): 96(ptr) Variable Uniform + 101: TypeVector 10(float) 2 + 102: 6(int) Constant 10 + 103: TypeArray 11(fvec4) 102 + 104: TypeArray 15(int) 16 +105(SamplerArray): TypeStruct 104 + 106(e): TypeStruct 101(fvec2) 10(float) 6(int) 15(int) 105(SamplerArray) +107(gl_DefaultUniformBlock): TypeStruct 11(fvec4) 101(fvec2) 101(fvec2) 103 106(e) + 108: TypePointer Uniform 107(gl_DefaultUniformBlock) + 109: 108(ptr) Variable Uniform + 110: 15(int) Constant 4 + 114: 15(int) Constant 2 + 119: TypePointer Function 101(fvec2) + 121: TypePointer Uniform 101(fvec2) + 130: TypePointer Function 11(fvec4) + 132: TypePointer Uniform 11(fvec4) + 135: 15(int) Constant 3 + 151(t1): 22(ptr) Variable UniformConstant + 153: 10(float) Constant 0 + 154: 101(fvec2) ConstantComposite 153 153 +157(structUniform.t0): 22(ptr) Variable UniformConstant + 164: 10(float) Constant 1065353216 + 189: TypePointer Output 11(fvec4) + 190(o): 189(ptr) Variable Output +194(structUniform.samplers.tn[0]): 22(ptr) Variable UniformConstant +195(structUniform.samplers.tn[1]): 22(ptr) Variable UniformConstant +196(structUniform.samplers.tn[2]): 22(ptr) Variable UniformConstant +197(structUniform.samplers.tn[3]): 22(ptr) Variable UniformConstant + 199: TypePointer Uniform 105(SamplerArray) + 203: TypePointer Function 17 + 206: TypePointer Function 15(int) 4(main): 2 Function None 3 5: Label - 155(j): 72(ptr) Variable Function - 156: 6(int) FunctionCall 8(bar() - 157: 10(float) ConvertUToF 156 - Store 155(j) 157 - 160: 10(float) Load 155(j) - 161: 11(fvec4) FunctionCall 13(foo() - 162: 11(fvec4) VectorTimesScalar 161 160 - Store 159(o) 162 + 186(j): 87(ptr) Variable Function + 198(param): 19(ptr) Variable Function + 187: 6(int) FunctionCall 8(bar() + 188: 10(float) ConvertUToF 187 + Store 186(j) 188 + 191: 10(float) Load 186(j) + 192: 11(fvec4) FunctionCall 13(foo() + 193: 11(fvec4) VectorTimesScalar 192 191 + 200: 199(ptr) AccessChain 109 110 110 + 201:105(SamplerArray) Load 200 + 202: 104 CompositeExtract 201 0 + 204: 203(ptr) AccessChain 198(param) 37 + 205: 15(int) CompositeExtract 202 0 + 207: 206(ptr) AccessChain 204 37 + Store 207 205 + 208: 15(int) CompositeExtract 202 1 + 209: 206(ptr) AccessChain 204 75 + Store 209 208 + 210: 15(int) CompositeExtract 202 2 + 211: 206(ptr) AccessChain 204 114 + Store 211 210 + 212: 15(int) CompositeExtract 202 3 + 213: 206(ptr) AccessChain 204 135 + Store 213 212 + 214: 11(fvec4) FunctionCall 29(baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21;) 198(param) 194(structUniform.samplers.tn[0]) 195(structUniform.samplers.tn[1]) 196(structUniform.samplers.tn[2]) 197(structUniform.samplers.tn[3]) + 215: 11(fvec4) FAdd 193 214 + Store 190(o) 215 Return FunctionEnd 8(bar(): 6(int) Function None 7 9: Label - 16(j): 15(ptr) Variable Function - Store 16(j) 17 - 24: 23(ptr) AccessChain 20 22 - 26: 6(int) AtomicIAdd 24 25 17 25 - Store 16(j) 26 - 27: 23(ptr) AccessChain 20 22 - 29: 6(int) AtomicIAdd 27 25 17 28 - 30: 6(int) ISub 29 25 - Store 16(j) 30 - 31: 23(ptr) AccessChain 20 22 - 32: 6(int) Load 31 - Store 16(j) 32 - 33: 23(ptr) AccessChain 20 22 - 34: 6(int) AtomicIAdd 33 25 17 25 - Store 16(j) 34 - 35: 23(ptr) AccessChain 20 22 - 36: 6(int) AtomicIAdd 35 25 17 28 - Store 16(j) 36 - 37: 23(ptr) AccessChain 20 22 - 38: 6(int) AtomicISub 37 25 17 25 - Store 16(j) 38 - 39: 23(ptr) AccessChain 20 22 - 40: 6(int) Load 16(j) - 41: 6(int) AtomicUMin 39 25 17 40 - Store 16(j) 41 - 42: 23(ptr) AccessChain 20 22 - 43: 6(int) Load 16(j) - 44: 6(int) AtomicUMax 42 25 17 43 - Store 16(j) 44 - 45: 23(ptr) AccessChain 20 22 - 46: 6(int) Load 16(j) - 47: 6(int) AtomicAnd 45 25 17 46 - Store 16(j) 47 - 48: 23(ptr) AccessChain 20 22 - 49: 6(int) Load 16(j) - 50: 6(int) AtomicOr 48 25 17 49 - Store 16(j) 50 - 51: 23(ptr) AccessChain 20 22 - 52: 6(int) Load 16(j) - 53: 6(int) AtomicXor 51 25 17 52 - Store 16(j) 53 - 54: 23(ptr) AccessChain 20 22 - 55: 6(int) Load 16(j) - 56: 6(int) AtomicExchange 54 25 17 55 - Store 16(j) 56 - 57: 23(ptr) AccessChain 20 22 - 58: 6(int) Load 16(j) - 59: 6(int) AtomicCompareExchange 57 25 17 17 58 17 - Store 16(j) 59 - 61: 23(ptr) AccessChain 20 60 - 62: 6(int) AtomicIAdd 61 25 17 25 - 66: 23(ptr) AccessChain 65 22 - 67: 6(int) AtomicIAdd 66 25 17 25 - MemoryBarrier 25 68 - 69: 6(int) Load 16(j) - ReturnValue 69 + 32(j): 31(ptr) Variable Function + Store 32(j) 33 + 39: 38(ptr) AccessChain 36 37 + 41: 6(int) AtomicIAdd 39 40 33 40 + Store 32(j) 41 + 42: 38(ptr) AccessChain 36 37 + 44: 6(int) AtomicIAdd 42 40 33 43 + 45: 6(int) ISub 44 40 + Store 32(j) 45 + 46: 38(ptr) AccessChain 36 37 + 47: 6(int) Load 46 + Store 32(j) 47 + 48: 38(ptr) AccessChain 36 37 + 49: 6(int) AtomicIAdd 48 40 33 40 + Store 32(j) 49 + 50: 38(ptr) AccessChain 36 37 + 51: 6(int) AtomicIAdd 50 40 33 43 + Store 32(j) 51 + 52: 38(ptr) AccessChain 36 37 + 53: 6(int) AtomicISub 52 40 33 40 + Store 32(j) 53 + 54: 38(ptr) AccessChain 36 37 + 55: 6(int) Load 32(j) + 56: 6(int) AtomicUMin 54 40 33 55 + Store 32(j) 56 + 57: 38(ptr) AccessChain 36 37 + 58: 6(int) Load 32(j) + 59: 6(int) AtomicUMax 57 40 33 58 + Store 32(j) 59 + 60: 38(ptr) AccessChain 36 37 + 61: 6(int) Load 32(j) + 62: 6(int) AtomicAnd 60 40 33 61 + Store 32(j) 62 + 63: 38(ptr) AccessChain 36 37 + 64: 6(int) Load 32(j) + 65: 6(int) AtomicOr 63 40 33 64 + Store 32(j) 65 + 66: 38(ptr) AccessChain 36 37 + 67: 6(int) Load 32(j) + 68: 6(int) AtomicXor 66 40 33 67 + Store 32(j) 68 + 69: 38(ptr) AccessChain 36 37 + 70: 6(int) Load 32(j) + 71: 6(int) AtomicExchange 69 40 33 70 + Store 32(j) 71 + 72: 38(ptr) AccessChain 36 37 + 73: 6(int) Load 32(j) + 74: 6(int) AtomicCompareExchange 72 40 33 33 73 33 + Store 32(j) 74 + 76: 38(ptr) AccessChain 36 75 + 77: 6(int) AtomicIAdd 76 40 33 40 + 81: 38(ptr) AccessChain 80 37 + 82: 6(int) AtomicIAdd 81 40 33 40 + MemoryBarrier 40 83 + 84: 6(int) Load 32(j) + ReturnValue 84 FunctionEnd 13(foo(): 11(fvec4) Function None 12 14: Label - 73(f): 72(ptr) Variable Function - 103(v2): 102(ptr) Variable Function - 114(v4): 113(ptr) Variable Function - 78: 77(ptr) AccessChain 76 22 - 79: 10(float) Load 78 - 83: 77(ptr) AccessChain 82(bufferInstance) 22 - 84: 10(float) Load 83 - 85: 10(float) FAdd 79 84 - 94: 77(ptr) AccessChain 92 93 60 - 95: 10(float) Load 94 - 96: 10(float) FAdd 85 95 - 98: 23(ptr) AccessChain 92 93 97 - 99: 6(int) Load 98 - 100: 10(float) ConvertUToF 99 - 101: 10(float) FAdd 96 100 - Store 73(f) 101 - 105: 104(ptr) AccessChain 92 60 - 106: 86(fvec2) Load 105 - 107: 104(ptr) AccessChain 92 97 - 108: 86(fvec2) Load 107 - 109: 86(fvec2) FAdd 106 108 - 110: 104(ptr) AccessChain 92 93 22 - 111: 86(fvec2) Load 110 - 112: 86(fvec2) FAdd 109 111 - Store 103(v2) 112 - 116: 115(ptr) AccessChain 92 22 - 117: 11(fvec4) Load 116 - 119: 115(ptr) AccessChain 92 118 22 - 120: 11(fvec4) Load 119 - 121: 11(fvec4) FAdd 117 120 - 122: 115(ptr) AccessChain 92 118 60 - 123: 11(fvec4) Load 122 - 124: 11(fvec4) FAdd 121 123 - 125: 115(ptr) AccessChain 92 118 97 - 126: 11(fvec4) Load 125 - 127: 11(fvec4) FAdd 124 126 - 128: 115(ptr) AccessChain 76 60 - 129: 11(fvec4) Load 128 - 130: 11(fvec4) FAdd 127 129 - 131: 115(ptr) AccessChain 82(bufferInstance) 60 - 132: 11(fvec4) Load 131 - 133: 11(fvec4) FAdd 130 132 - 138: 135 Load 137(t1) - 141: 11(fvec4) ImageSampleImplicitLod 138 140 - 142: 11(fvec4) FAdd 133 141 - Store 114(v4) 142 - 143: 10(float) Load 73(f) - 144: 11(fvec4) CompositeConstruct 143 143 143 143 - 145: 86(fvec2) Load 103(v2) - 147: 10(float) CompositeExtract 145 0 - 148: 10(float) CompositeExtract 145 1 - 149: 11(fvec4) CompositeConstruct 147 148 146 146 - 150: 11(fvec4) FMul 144 149 - 151: 11(fvec4) Load 114(v4) - 152: 11(fvec4) FMul 150 151 - ReturnValue 152 + 88(f): 87(ptr) Variable Function + 120(v2): 119(ptr) Variable Function + 131(v4): 130(ptr) Variable Function + 93: 92(ptr) AccessChain 91 37 + 94: 10(float) Load 93 + 98: 92(ptr) AccessChain 97(bufferInstance) 37 + 99: 10(float) Load 98 + 100: 10(float) FAdd 94 99 + 111: 92(ptr) AccessChain 109 110 75 + 112: 10(float) Load 111 + 113: 10(float) FAdd 100 112 + 115: 38(ptr) AccessChain 109 110 114 + 116: 6(int) Load 115 + 117: 10(float) ConvertUToF 116 + 118: 10(float) FAdd 113 117 + Store 88(f) 118 + 122: 121(ptr) AccessChain 109 75 + 123: 101(fvec2) Load 122 + 124: 121(ptr) AccessChain 109 114 + 125: 101(fvec2) Load 124 + 126: 101(fvec2) FAdd 123 125 + 127: 121(ptr) AccessChain 109 110 37 + 128: 101(fvec2) Load 127 + 129: 101(fvec2) FAdd 126 128 + Store 120(v2) 129 + 133: 132(ptr) AccessChain 109 37 + 134: 11(fvec4) Load 133 + 136: 132(ptr) AccessChain 109 135 37 + 137: 11(fvec4) Load 136 + 138: 11(fvec4) FAdd 134 137 + 139: 132(ptr) AccessChain 109 135 75 + 140: 11(fvec4) Load 139 + 141: 11(fvec4) FAdd 138 140 + 142: 132(ptr) AccessChain 109 135 114 + 143: 11(fvec4) Load 142 + 144: 11(fvec4) FAdd 141 143 + 145: 132(ptr) AccessChain 91 75 + 146: 11(fvec4) Load 145 + 147: 11(fvec4) FAdd 144 146 + 148: 132(ptr) AccessChain 97(bufferInstance) 75 + 149: 11(fvec4) Load 148 + 150: 11(fvec4) FAdd 147 149 + 152: 21 Load 151(t1) + 155: 11(fvec4) ImageSampleImplicitLod 152 154 + 156: 11(fvec4) FAdd 150 155 + 158: 21 Load 157(structUniform.t0) + 159: 11(fvec4) ImageSampleImplicitLod 158 154 + 160: 11(fvec4) FAdd 156 159 + Store 131(v4) 160 + 161: 10(float) Load 88(f) + 162: 11(fvec4) CompositeConstruct 161 161 161 161 + 163: 101(fvec2) Load 120(v2) + 165: 10(float) CompositeExtract 163 0 + 166: 10(float) CompositeExtract 163 1 + 167: 11(fvec4) CompositeConstruct 165 166 164 164 + 168: 11(fvec4) FMul 162 167 + 169: 11(fvec4) Load 131(v4) + 170: 11(fvec4) FMul 168 169 + ReturnValue 170 + FunctionEnd +29(baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21;): 11(fvec4) Function None 23 + 24(samplers): 19(ptr) FunctionParameter +25(samplers.tn[0]): 22(ptr) FunctionParameter +26(samplers.tn[1]): 22(ptr) FunctionParameter +27(samplers.tn[2]): 22(ptr) FunctionParameter +28(samplers.tn[3]): 22(ptr) FunctionParameter + 30: Label + 173: 21 Load 25(samplers.tn[0]) + 174: 11(fvec4) ImageSampleImplicitLod 173 154 + 175: 21 Load 26(samplers.tn[1]) + 176: 11(fvec4) ImageSampleImplicitLod 175 154 + 177: 11(fvec4) FAdd 174 176 + 178: 21 Load 27(samplers.tn[2]) + 179: 11(fvec4) ImageSampleImplicitLod 178 154 + 180: 11(fvec4) FAdd 177 179 + 181: 21 Load 28(samplers.tn[3]) + 182: 11(fvec4) ImageSampleImplicitLod 181 154 + 183: 11(fvec4) FAdd 180 182 + ReturnValue 183 FunctionEnd diff --git a/Test/baseResults/vk.relaxed.link1.frag.out b/Test/baseResults/vk.relaxed.link1.frag.out index 9dac4c64e2..7b114a784b 100644 --- a/Test/baseResults/vk.relaxed.link1.frag.out +++ b/Test/baseResults/vk.relaxed.link1.frag.out @@ -348,7 +348,7 @@ gl_FragCoord origin is upper left 0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 105 Capability Shader @@ -378,30 +378,27 @@ gl_FragCoord origin is upper left Name 68 "o" Name 72 "j" Name 79 "v" - MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Coherent + Decorate 16(gl_AtomicCounterBlock_0) BufferBlock MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Volatile MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Coherent MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Offset 0 - MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Coherent MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Volatile MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Coherent MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Offset 4 - MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Coherent MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Volatile MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Coherent MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Offset 8 - Decorate 16(gl_AtomicCounterBlock_0) BufferBlock - Decorate 18 DescriptorSet 0 Decorate 18 Binding 1 + Decorate 18 DescriptorSet 0 + Decorate 35(gl_DefaultUniformBlock) Block MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32 MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 - Decorate 35(gl_DefaultUniformBlock) Block - Decorate 37 DescriptorSet 0 Decorate 37 Binding 0 + Decorate 37 DescriptorSet 0 Decorate 68(o) Location 0 2: TypeVoid 3: TypeFunction 2 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 100644 index 0000000000..5ab08aed5c --- /dev/null +++ b/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out @@ -0,0 +1,10701 @@ +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): 8000b +// 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 + Decorate 214(Vertex) Block + MemberDecorate 214(Vertex) 3 Flat + MemberDecorate 214(Vertex) 4 Flat + Decorate 216(oVert) Location 0 + Decorate 226(P) Location 0 + Decorate 236(gl_PerVertex) Block + 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 256(Cd) Location 2 + MemberDecorate 269(TDMatrix) 0 ColMajor + MemberDecorate 269(TDMatrix) 0 MatrixStride 16 + MemberDecorate 269(TDMatrix) 0 Offset 0 + MemberDecorate 269(TDMatrix) 1 ColMajor + MemberDecorate 269(TDMatrix) 1 MatrixStride 16 + MemberDecorate 269(TDMatrix) 1 Offset 64 + MemberDecorate 269(TDMatrix) 2 ColMajor + MemberDecorate 269(TDMatrix) 2 MatrixStride 16 + MemberDecorate 269(TDMatrix) 2 Offset 128 + MemberDecorate 269(TDMatrix) 3 ColMajor + MemberDecorate 269(TDMatrix) 3 MatrixStride 16 + MemberDecorate 269(TDMatrix) 3 Offset 192 + MemberDecorate 269(TDMatrix) 4 ColMajor + MemberDecorate 269(TDMatrix) 4 MatrixStride 16 + MemberDecorate 269(TDMatrix) 4 Offset 256 + MemberDecorate 269(TDMatrix) 5 ColMajor + MemberDecorate 269(TDMatrix) 5 MatrixStride 16 + MemberDecorate 269(TDMatrix) 5 Offset 320 + MemberDecorate 269(TDMatrix) 6 ColMajor + MemberDecorate 269(TDMatrix) 6 MatrixStride 16 + MemberDecorate 269(TDMatrix) 6 Offset 384 + MemberDecorate 269(TDMatrix) 7 ColMajor + MemberDecorate 269(TDMatrix) 7 MatrixStride 16 + MemberDecorate 269(TDMatrix) 7 Offset 448 + MemberDecorate 269(TDMatrix) 8 ColMajor + MemberDecorate 269(TDMatrix) 8 MatrixStride 16 + MemberDecorate 269(TDMatrix) 8 Offset 512 + MemberDecorate 269(TDMatrix) 9 ColMajor + MemberDecorate 269(TDMatrix) 9 MatrixStride 16 + MemberDecorate 269(TDMatrix) 9 Offset 576 + MemberDecorate 269(TDMatrix) 10 ColMajor + MemberDecorate 269(TDMatrix) 10 MatrixStride 16 + MemberDecorate 269(TDMatrix) 10 Offset 640 + MemberDecorate 269(TDMatrix) 11 ColMajor + MemberDecorate 269(TDMatrix) 11 MatrixStride 16 + MemberDecorate 269(TDMatrix) 11 Offset 704 + MemberDecorate 269(TDMatrix) 12 ColMajor + MemberDecorate 269(TDMatrix) 12 MatrixStride 16 + MemberDecorate 269(TDMatrix) 12 Offset 768 + MemberDecorate 269(TDMatrix) 13 ColMajor + MemberDecorate 269(TDMatrix) 13 MatrixStride 16 + MemberDecorate 269(TDMatrix) 13 Offset 832 + MemberDecorate 269(TDMatrix) 14 ColMajor + MemberDecorate 269(TDMatrix) 14 MatrixStride 16 + MemberDecorate 269(TDMatrix) 14 Offset 880 + MemberDecorate 269(TDMatrix) 15 ColMajor + MemberDecorate 269(TDMatrix) 15 MatrixStride 16 + MemberDecorate 269(TDMatrix) 15 Offset 928 + Decorate 270 ArrayStride 976 + Decorate 271(TDMatricesBlock) Block + MemberDecorate 271(TDMatricesBlock) 0 Offset 0 + Decorate 273 Binding 1 + Decorate 273 DescriptorSet 0 + Decorate 297(gl_InstanceIndex) BuiltIn InstanceIndex + Decorate 299(gl_DefaultUniformBlock) Block + 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 301 Binding 0 + Decorate 301 DescriptorSet 0 + Decorate 371(sTDInstanceTexCoord) Binding 16 + Decorate 371(sTDInstanceTexCoord) DescriptorSet 0 + Decorate 400(sTDInstanceT) Binding 15 + Decorate 400(sTDInstanceT) DescriptorSet 0 + Decorate 665(sTDInstanceColor) Binding 17 + Decorate 665(sTDInstanceColor) DescriptorSet 0 + 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 + Decorate 898(TDCameraInfoBlock) Block + MemberDecorate 898(TDCameraInfoBlock) 0 Offset 0 + Decorate 900 Binding 0 + Decorate 900 DescriptorSet 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 + Decorate 902(TDGeneralBlock) Block + MemberDecorate 902(TDGeneralBlock) 0 Offset 0 + Decorate 904 Binding 0 + Decorate 904 DescriptorSet 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 MatrixStride 16 + MemberDecorate 907(TDLight) 8 Offset 128 + MemberDecorate 907(TDLight) 9 ColMajor + MemberDecorate 907(TDLight) 9 MatrixStride 16 + MemberDecorate 907(TDLight) 9 Offset 192 + MemberDecorate 907(TDLight) 10 Offset 256 + MemberDecorate 907(TDLight) 11 ColMajor + MemberDecorate 907(TDLight) 11 MatrixStride 16 + MemberDecorate 907(TDLight) 11 Offset 272 + Decorate 908 ArrayStride 336 + Decorate 909(TDLightBlock) Block + MemberDecorate 909(TDLightBlock) 0 Offset 0 + Decorate 911 Binding 0 + Decorate 911 DescriptorSet 0 + MemberDecorate 912(TDEnvLight) 0 Offset 0 + MemberDecorate 912(TDEnvLight) 1 ColMajor + MemberDecorate 912(TDEnvLight) 1 MatrixStride 16 + MemberDecorate 912(TDEnvLight) 1 Offset 16 + Decorate 913 ArrayStride 64 + Decorate 914(TDEnvLightBlock) Block + MemberDecorate 914(TDEnvLightBlock) 0 Offset 0 + Decorate 916 Binding 0 + Decorate 916 DescriptorSet 0 + Decorate 918 ArrayStride 16 + Decorate 919(TDEnvLightBuffer) BufferBlock + MemberDecorate 919(TDEnvLightBuffer) 0 Restrict + MemberDecorate 919(TDEnvLightBuffer) 0 NonWritable + MemberDecorate 919(TDEnvLightBuffer) 0 Offset 0 + Decorate 922(uTDEnvLightBuffers) Restrict + Decorate 922(uTDEnvLightBuffers) NonWritable + Decorate 922(uTDEnvLightBuffers) Binding 0 + Decorate 922(uTDEnvLightBuffers) DescriptorSet 0 + Decorate 926(mTD2DImageOutputs) Binding 0 + Decorate 926(mTD2DImageOutputs) DescriptorSet 0 + Decorate 930(mTD2DArrayImageOutputs) Binding 0 + Decorate 930(mTD2DArrayImageOutputs) DescriptorSet 0 + Decorate 934(mTD3DImageOutputs) Binding 0 + Decorate 934(mTD3DImageOutputs) DescriptorSet 0 + Decorate 938(mTDCubeImageOutputs) Binding 0 + Decorate 938(mTDCubeImageOutputs) DescriptorSet 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): 8000b +// 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" + Decorate 334(Vertex) Block + MemberDecorate 334(Vertex) 3 Flat + MemberDecorate 334(Vertex) 4 Flat + Decorate 336(iVert) Location 0 + Decorate 363(sColorMap) Binding 2 + Decorate 363(sColorMap) DescriptorSet 0 + Decorate 374(gl_DefaultUniformBlock) Block + 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 376 Binding 0 + Decorate 376 DescriptorSet 0 + Decorate 429(oFragColor) Location 0 + Decorate 456(sTDNoiseMap) Binding 3 + Decorate 456(sTDNoiseMap) DescriptorSet 0 + Decorate 458(gl_FragCoord) BuiltIn FragCoord + Decorate 485(gl_FrontFacing) BuiltIn FrontFacing + Decorate 931(sTDInstanceTexCoord) Binding 16 + Decorate 931(sTDInstanceTexCoord) DescriptorSet 0 + Decorate 958(sTDInstanceT) Binding 15 + Decorate 958(sTDInstanceT) DescriptorSet 0 + Decorate 1219(sTDInstanceColor) Binding 17 + Decorate 1219(sTDInstanceColor) DescriptorSet 0 + MemberDecorate 1253(TDMatrix) 0 ColMajor + MemberDecorate 1253(TDMatrix) 0 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 0 Offset 0 + MemberDecorate 1253(TDMatrix) 1 ColMajor + MemberDecorate 1253(TDMatrix) 1 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 1 Offset 64 + MemberDecorate 1253(TDMatrix) 2 ColMajor + MemberDecorate 1253(TDMatrix) 2 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 2 Offset 128 + MemberDecorate 1253(TDMatrix) 3 ColMajor + MemberDecorate 1253(TDMatrix) 3 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 3 Offset 192 + MemberDecorate 1253(TDMatrix) 4 ColMajor + MemberDecorate 1253(TDMatrix) 4 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 4 Offset 256 + MemberDecorate 1253(TDMatrix) 5 ColMajor + MemberDecorate 1253(TDMatrix) 5 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 5 Offset 320 + MemberDecorate 1253(TDMatrix) 6 ColMajor + MemberDecorate 1253(TDMatrix) 6 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 6 Offset 384 + MemberDecorate 1253(TDMatrix) 7 ColMajor + MemberDecorate 1253(TDMatrix) 7 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 7 Offset 448 + MemberDecorate 1253(TDMatrix) 8 ColMajor + MemberDecorate 1253(TDMatrix) 8 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 8 Offset 512 + MemberDecorate 1253(TDMatrix) 9 ColMajor + MemberDecorate 1253(TDMatrix) 9 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 9 Offset 576 + MemberDecorate 1253(TDMatrix) 10 ColMajor + MemberDecorate 1253(TDMatrix) 10 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 10 Offset 640 + MemberDecorate 1253(TDMatrix) 11 ColMajor + MemberDecorate 1253(TDMatrix) 11 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 11 Offset 704 + MemberDecorate 1253(TDMatrix) 12 ColMajor + MemberDecorate 1253(TDMatrix) 12 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 12 Offset 768 + MemberDecorate 1253(TDMatrix) 13 ColMajor + MemberDecorate 1253(TDMatrix) 13 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 13 Offset 832 + MemberDecorate 1253(TDMatrix) 14 ColMajor + MemberDecorate 1253(TDMatrix) 14 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 14 Offset 880 + MemberDecorate 1253(TDMatrix) 15 ColMajor + MemberDecorate 1253(TDMatrix) 15 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 15 Offset 928 + Decorate 1254 ArrayStride 976 + Decorate 1255(TDMatricesBlock) Block + MemberDecorate 1255(TDMatricesBlock) 0 Offset 0 + Decorate 1257 Binding 1 + Decorate 1257 DescriptorSet 0 + 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 + Decorate 1260(TDCameraInfoBlock) Block + MemberDecorate 1260(TDCameraInfoBlock) 0 Offset 0 + Decorate 1262 Binding 0 + Decorate 1262 DescriptorSet 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 + Decorate 1264(TDGeneralBlock) Block + MemberDecorate 1264(TDGeneralBlock) 0 Offset 0 + Decorate 1266 Binding 0 + Decorate 1266 DescriptorSet 0 + Decorate 1270(sTDSineLookup) Binding 0 + Decorate 1270(sTDSineLookup) DescriptorSet 0 + Decorate 1271(sTDWhite2D) Binding 0 + Decorate 1271(sTDWhite2D) DescriptorSet 0 + Decorate 1275(sTDWhite3D) Binding 0 + Decorate 1275(sTDWhite3D) DescriptorSet 0 + Decorate 1276(sTDWhite2DArray) Binding 0 + Decorate 1276(sTDWhite2DArray) DescriptorSet 0 + Decorate 1280(sTDWhiteCube) Binding 0 + Decorate 1280(sTDWhiteCube) DescriptorSet 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 MatrixStride 16 + MemberDecorate 1281(TDLight) 8 Offset 128 + MemberDecorate 1281(TDLight) 9 ColMajor + MemberDecorate 1281(TDLight) 9 MatrixStride 16 + MemberDecorate 1281(TDLight) 9 Offset 192 + MemberDecorate 1281(TDLight) 10 Offset 256 + MemberDecorate 1281(TDLight) 11 ColMajor + MemberDecorate 1281(TDLight) 11 MatrixStride 16 + MemberDecorate 1281(TDLight) 11 Offset 272 + Decorate 1282 ArrayStride 336 + Decorate 1283(TDLightBlock) Block + MemberDecorate 1283(TDLightBlock) 0 Offset 0 + Decorate 1285 Binding 0 + Decorate 1285 DescriptorSet 0 + MemberDecorate 1286(TDEnvLight) 0 Offset 0 + MemberDecorate 1286(TDEnvLight) 1 ColMajor + MemberDecorate 1286(TDEnvLight) 1 MatrixStride 16 + MemberDecorate 1286(TDEnvLight) 1 Offset 16 + Decorate 1287 ArrayStride 64 + Decorate 1288(TDEnvLightBlock) Block + MemberDecorate 1288(TDEnvLightBlock) 0 Offset 0 + Decorate 1290 Binding 0 + Decorate 1290 DescriptorSet 0 + Decorate 1292 ArrayStride 16 + Decorate 1293(TDEnvLightBuffer) BufferBlock + MemberDecorate 1293(TDEnvLightBuffer) 0 Restrict + MemberDecorate 1293(TDEnvLightBuffer) 0 NonWritable + MemberDecorate 1293(TDEnvLightBuffer) 0 Offset 0 + Decorate 1296(uTDEnvLightBuffers) Restrict + Decorate 1296(uTDEnvLightBuffers) NonWritable + Decorate 1296(uTDEnvLightBuffers) Binding 0 + Decorate 1296(uTDEnvLightBuffers) DescriptorSet 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/vk.relaxed.stagelink.vert.out b/Test/baseResults/vk.relaxed.stagelink.vert.out index b9173f249c..99da5419ca 100644 --- a/Test/baseResults/vk.relaxed.stagelink.vert.out +++ b/Test/baseResults/vk.relaxed.stagelink.vert.out @@ -435,7 +435,7 @@ gl_FragCoord origin is upper left 0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 92 Capability Shader @@ -465,22 +465,20 @@ gl_FragCoord origin is upper left Name 72 "gl_VertexIndex" Name 82 "gl_InstanceIndex" Name 90 "io" - MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent + Decorate 14(gl_AtomicCounterBlock_0) BufferBlock MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Offset 0 - MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Volatile MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Offset 4 - MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Volatile MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Offset 8 - Decorate 14(gl_AtomicCounterBlock_0) BufferBlock - Decorate 16 DescriptorSet 0 Decorate 16 Binding 1 + Decorate 16 DescriptorSet 0 Decorate 34 ArrayStride 16 + Decorate 35(gl_DefaultUniformBlock) Block MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 @@ -488,9 +486,8 @@ gl_FragCoord origin is upper left MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 MemberDecorate 35(gl_DefaultUniformBlock) 6 Offset 128 - Decorate 35(gl_DefaultUniformBlock) Block - Decorate 37 DescriptorSet 0 Decorate 37 Binding 0 + Decorate 37 DescriptorSet 0 Decorate 72(gl_VertexIndex) BuiltIn VertexIndex Decorate 82(gl_InstanceIndex) BuiltIn InstanceIndex Decorate 90(io) Location 0 @@ -593,7 +590,7 @@ gl_FragCoord origin is upper left ReturnValue 64 FunctionEnd // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 74 Capability Shader @@ -622,22 +619,20 @@ gl_FragCoord origin is upper left Name 37 "" Name 68 "o" Name 70 "io" - MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent + Decorate 14(gl_AtomicCounterBlock_0) BufferBlock MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Offset 0 - MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Volatile MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Offset 4 - MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Volatile MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Offset 8 - Decorate 14(gl_AtomicCounterBlock_0) BufferBlock - Decorate 16 DescriptorSet 0 Decorate 16 Binding 1 + Decorate 16 DescriptorSet 0 Decorate 34 ArrayStride 16 + Decorate 35(gl_DefaultUniformBlock) Block MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 @@ -645,9 +640,8 @@ gl_FragCoord origin is upper left MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 MemberDecorate 35(gl_DefaultUniformBlock) 6 Offset 128 - Decorate 35(gl_DefaultUniformBlock) Block - Decorate 37 DescriptorSet 0 Decorate 37 Binding 0 + Decorate 37 DescriptorSet 0 Decorate 68(o) Location 0 Decorate 70(io) Location 0 2: TypeVoid diff --git a/Test/baseResults/vulkan.ast.vert.out b/Test/baseResults/vulkan.ast.vert.out index 68e892b4ac..c893103c4b 100644 --- a/Test/baseResults/vulkan.ast.vert.out +++ b/Test/baseResults/vulkan.ast.vert.out @@ -258,7 +258,7 @@ Shader version: 450 0:? 2 (const int) // Module Version 10000 -// Generated by (magic number): 8000a +// Generated by (magic number): 8000b // Id's are bound by 50 Capability Shader diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out index 28134aedb7..8e6bfcc945 100644 --- a/Test/baseResults/vulkan.frag.out +++ b/Test/baseResults/vulkan.frag.out @@ -6,7 +6,7 @@ ERROR: 0:6: 'binding' : sampler/texture/image requires layout(binding=X) ERROR: 0:8: 'binding' : sampler/texture/image requires layout(binding=X) ERROR: 0:9: 'binding' : sampler/texture/image requires layout(binding=X) ERROR: 0:10: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:14: 'sampler2D' : sampler-constructor requires two arguments +ERROR: 0:14: 'sampler2D' : sampler-constructor requires the extension GL_ARB_bindless_texture enabled ERROR: 0:15: 'sampler2D' : sampler-constructor first argument must be a scalar *texture* type ERROR: 0:16: 'sampler2D' : sampler-constructor first argument must be a scalar *texture* type ERROR: 0:17: 'sampler2D' : sampler-constructor second argument must be a scalar sampler or samplerShadow @@ -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/coord_conventions.frag b/Test/coord_conventions.frag new file mode 100644 index 0000000000..4ae6060e8e --- /dev/null +++ b/Test/coord_conventions.frag @@ -0,0 +1,36 @@ +#version 140 + +#extension GL_ARB_fragment_coord_conventions: require +#extension GL_ARB_explicit_attrib_location : enable + +#ifdef GL_ES +precision mediump float; +#endif + +in vec4 i; + +layout (origin_upper_left,pixel_center_integer) in vec4 gl_FragCoord; +layout (location = 0) out vec4 myColor; + +const float eps=0.001; + +void main() +{ + myColor = vec4(0.2); + if (gl_FragCoord.y >= 10) { + myColor.b = 0.8; + } + if (gl_FragCoord.y == trunc(gl_FragCoord.y)) { + myColor.g = 0.8; + } + if (gl_FragCoord.x == trunc(gl_FragCoord.x)) { + myColor.r = 0.8; + } + + vec4 diff = gl_FragCoord - i; + if (abs(diff.z)>eps) + myColor.b = 0.5; + if (abs(diff.w)>eps) + myColor.a = 0.5; + +} \ No newline at end of file diff --git a/Test/enhanced.0.frag b/Test/enhanced.0.frag new file mode 100644 index 0000000000..7a42c05372 --- /dev/null +++ b/Test/enhanced.0.frag @@ -0,0 +1,9 @@ +#version 450 + +in vec3 v; + +void main() +{ + vec4 color = vec4(v); +} + diff --git a/Test/enhanced.1.frag b/Test/enhanced.1.frag new file mode 100644 index 0000000000..9aab34d7c6 --- /dev/null +++ b/Test/enhanced.1.frag @@ -0,0 +1,11 @@ +#version 450 + +in Vertex { + vec4 v; +} vVert; + +void main() +{ + vec4 color = vec4(vVert.v2.rgb, 1.0); +} + diff --git a/Test/enhanced.2.frag b/Test/enhanced.2.frag new file mode 100644 index 0000000000..c3c194cea3 --- /dev/null +++ b/Test/enhanced.2.frag @@ -0,0 +1,7 @@ +#version 450 + +void main() +{ + vec3 color = vec3(0.0,0.0,0.0,1.0); +} + diff --git a/Test/enhanced.3.frag b/Test/enhanced.3.frag new file mode 100644 index 0000000000..1de9f4b2b8 --- /dev/null +++ b/Test/enhanced.3.frag @@ -0,0 +1,16 @@ +#version 450 core + +layout (location = 0) out vec4 FragColor; + +layout (location = 0) in VS_OUT +{ + vec2 foobar; +} fs_in; + +layout (binding = 1) uniform sampler2D t0; + +void main() +{ + FragColor = texture(t0, fs_in.foobar); +} + diff --git a/Test/enhanced.3.vert b/Test/enhanced.3.vert new file mode 100644 index 0000000000..043ee24612 --- /dev/null +++ b/Test/enhanced.3.vert @@ -0,0 +1,22 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform anonblock { + mat4 model; + mat4 view; + mat4 projection; +} ; + +layout (location = 0) out VS_OUT +{ + vec2 TexCoords; +} vs_out; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0); + vs_out.TexCoords = aTexCoords; +} + diff --git a/Test/enhanced.4.frag b/Test/enhanced.4.frag new file mode 100644 index 0000000000..9c16606dae --- /dev/null +++ b/Test/enhanced.4.frag @@ -0,0 +1,16 @@ +#version 450 core + +layout (location = 0) out vec4 FragColor; + +layout (location = 1) in VS_OUT +{ + vec2 TexCoords; +} fs_in; + +layout (binding = 1) uniform sampler2D t0; + +void main() +{ + FragColor = texture(t0, fs_in.TexCoords); +} + diff --git a/Test/enhanced.4.vert b/Test/enhanced.4.vert new file mode 100644 index 0000000000..043ee24612 --- /dev/null +++ b/Test/enhanced.4.vert @@ -0,0 +1,22 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform anonblock { + mat4 model; + mat4 view; + mat4 projection; +} ; + +layout (location = 0) out VS_OUT +{ + vec2 TexCoords; +} vs_out; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0); + vs_out.TexCoords = aTexCoords; +} + diff --git a/Test/enhanced.5.frag b/Test/enhanced.5.frag new file mode 100644 index 0000000000..b2a51e26a5 --- /dev/null +++ b/Test/enhanced.5.frag @@ -0,0 +1,16 @@ +#version 450 core + +layout (location = 0) out vec4 FragColor; + +layout (location = 0) in VS_OUT +{ + vec3 TexCoords; +} fs_in; + +layout (binding = 1) uniform sampler2D t0; + +void main() +{ + FragColor = texture(t0, fs_in.TexCoords.xy); +} + diff --git a/Test/enhanced.5.vert b/Test/enhanced.5.vert new file mode 100644 index 0000000000..043ee24612 --- /dev/null +++ b/Test/enhanced.5.vert @@ -0,0 +1,22 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform anonblock { + mat4 model; + mat4 view; + mat4 projection; +} ; + +layout (location = 0) out VS_OUT +{ + vec2 TexCoords; +} vs_out; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0); + vs_out.TexCoords = aTexCoords; +} + diff --git a/Test/enhanced.6.frag b/Test/enhanced.6.frag new file mode 100644 index 0000000000..e1cf68571d --- /dev/null +++ b/Test/enhanced.6.frag @@ -0,0 +1,16 @@ +#version 450 core + +layout (location = 0) out vec4 FragColor; + +layout (location = 0) in VS_OUT +{ + vec2 TexCoords; +} fs_in[1]; + +layout (binding = 1) uniform sampler2D t0; + +void main() +{ + FragColor = texture(t0, fs_in[0].TexCoords); +} + diff --git a/Test/enhanced.6.vert b/Test/enhanced.6.vert new file mode 100644 index 0000000000..876a903e82 --- /dev/null +++ b/Test/enhanced.6.vert @@ -0,0 +1,22 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform anonblock { + mat4 model; + mat4 view; + mat4 projection; +} ; + +layout (location = 0) out VS_OUT +{ + vec2 TexCoords; +} vs_out[2]; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0); + vs_out[0].TexCoords = aTexCoords; +} + diff --git a/Test/enhanced.7.frag b/Test/enhanced.7.frag new file mode 100644 index 0000000000..f6e5279d27 --- /dev/null +++ b/Test/enhanced.7.frag @@ -0,0 +1,20 @@ +#version 450 core + +layout (location = 0) out vec4 FragColor; + +layout (location = 0) in Vertex +{ + vec4 color; + vec3 worldSpacePos; + vec3 worldSpaceNorm; + vec2 texCoord1; + flat int cameraIndex; +} fs_in; + +layout (binding = 1) uniform sampler2D t0; + +void main() +{ + FragColor = texture(t0, fs_in.texCoord1); +} + diff --git a/Test/enhanced.7.vert b/Test/enhanced.7.vert new file mode 100644 index 0000000000..4e70a617bd --- /dev/null +++ b/Test/enhanced.7.vert @@ -0,0 +1,27 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform anonblock { + mat4 model; + mat4 view; + mat4 projection; +} ; + +layout (location = 0) out Vertex +{ + vec4 color; + vec3 worldSpacePos; + vec3 worldSpaceNorm; + vec2 texCoord1; + flat int cameraIndex; + float ii; +} vs_out; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0); + vs_out.texCoord1 = aTexCoords; +} + diff --git a/Test/error-column.vert b/Test/error-column.vert new file mode 100644 index 0000000000..2ed97e7e0b --- /dev/null +++ b/Test/error-column.vert @@ -0,0 +1,27 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform block { + const mat4 model; + const mat4 view; + const mat4 projection; +}; + +layout (location = 0) out Vertex +{ + vec3 color; + vec3 worldSpacePos; + vec3 worldSpaceNorm; + const vec2 texCoord1; + flat int cameraIndex; + float ii; +} vs_out; + +void main() +{ + gl_Position = projection * view * model * vec4(Pos, 1.0); + vs_out.texCoord1 = aTexCoords; +} + diff --git a/Test/gl_FragCoord.frag b/Test/gl_FragCoord.frag new file mode 100644 index 0000000000..7bb17920ea --- /dev/null +++ b/Test/gl_FragCoord.frag @@ -0,0 +1,31 @@ +#version 150 core +#extension GL_ARB_explicit_attrib_location : enable + +#ifdef GL_ES +precision mediump float; +#endif + +layout (origin_upper_left,pixel_center_integer) in vec4 gl_FragCoord; +float myGlobalVar = gl_FragCoord.x; +layout (origin_upper_left,pixel_center_integer) in vec4 gl_FragCoord; + +in vec4 i; +layout (location = 0) out vec4 myColor; +const float eps=0.001; + +void main() { + myColor = vec4(0.2); + if (gl_FragCoord.y >= 10) { + myColor.b = 0.8; + } + if (gl_FragCoord.y == trunc(gl_FragCoord.y)) { + myColor.g = 0.8; + } + if (gl_FragCoord.x == trunc(gl_FragCoord.x)) { + myColor.r = 0.8; + } + + vec4 diff = gl_FragCoord - i; + if (abs(diff.z)>eps) myColor.b = 0.5; + if (abs(diff.w)>eps) myColor.a = 0.5; +} diff --git a/Test/gl_MaxSamples_32.conf b/Test/gl_MaxSamples_32.conf new file mode 100644 index 0000000000..a1baaf5846 --- /dev/null +++ b/Test/gl_MaxSamples_32.conf @@ -0,0 +1,111 @@ +MaxLights 32 +MaxClipPlanes 6 +MaxTextureUnits 32 +MaxTextureCoords 32 +MaxVertexAttribs 64 +MaxVertexUniformComponents 4096 +MaxVaryingFloats 64 +MaxVertexTextureImageUnits 32 +MaxCombinedTextureImageUnits 80 +MaxTextureImageUnits 32 +MaxFragmentUniformComponents 4096 +MaxDrawBuffers 32 +MaxVertexUniformVectors 128 +MaxVaryingVectors 8 +MaxFragmentUniformVectors 16 +MaxVertexOutputVectors 16 +MaxFragmentInputVectors 15 +MinProgramTexelOffset -8 +MaxProgramTexelOffset 7 +MaxClipDistances 8 +MaxComputeWorkGroupCountX 65535 +MaxComputeWorkGroupCountY 65535 +MaxComputeWorkGroupCountZ 65535 +MaxComputeWorkGroupSizeX 1024 +MaxComputeWorkGroupSizeY 1024 +MaxComputeWorkGroupSizeZ 64 +MaxComputeUniformComponents 1024 +MaxComputeTextureImageUnits 16 +MaxComputeImageUniforms 8 +MaxComputeAtomicCounters 8 +MaxComputeAtomicCounterBuffers 1 +MaxVaryingComponents 60 +MaxVertexOutputComponents 64 +MaxGeometryInputComponents 64 +MaxGeometryOutputComponents 128 +MaxFragmentInputComponents 128 +MaxImageUnits 8 +MaxCombinedImageUnitsAndFragmentOutputs 8 +MaxCombinedShaderOutputResources 8 +MaxImageSamples 0 +MaxVertexImageUniforms 0 +MaxTessControlImageUniforms 0 +MaxTessEvaluationImageUniforms 0 +MaxGeometryImageUniforms 0 +MaxFragmentImageUniforms 8 +MaxCombinedImageUniforms 8 +MaxGeometryTextureImageUnits 16 +MaxGeometryOutputVertices 256 +MaxGeometryTotalOutputComponents 1024 +MaxGeometryUniformComponents 1024 +MaxGeometryVaryingComponents 64 +MaxTessControlInputComponents 128 +MaxTessControlOutputComponents 128 +MaxTessControlTextureImageUnits 16 +MaxTessControlUniformComponents 1024 +MaxTessControlTotalOutputComponents 4096 +MaxTessEvaluationInputComponents 128 +MaxTessEvaluationOutputComponents 128 +MaxTessEvaluationTextureImageUnits 16 +MaxTessEvaluationUniformComponents 1024 +MaxTessPatchComponents 120 +MaxPatchVertices 32 +MaxTessGenLevel 64 +MaxViewports 16 +MaxVertexAtomicCounters 0 +MaxTessControlAtomicCounters 0 +MaxTessEvaluationAtomicCounters 0 +MaxGeometryAtomicCounters 0 +MaxFragmentAtomicCounters 8 +MaxCombinedAtomicCounters 8 +MaxAtomicCounterBindings 1 +MaxVertexAtomicCounterBuffers 0 +MaxTessControlAtomicCounterBuffers 0 +MaxTessEvaluationAtomicCounterBuffers 0 +MaxGeometryAtomicCounterBuffers 0 +MaxFragmentAtomicCounterBuffers 1 +MaxCombinedAtomicCounterBuffers 1 +MaxAtomicCounterBufferSize 16384 +MaxTransformFeedbackBuffers 4 +MaxTransformFeedbackInterleavedComponents 64 +MaxCullDistances 8 +MaxCombinedClipAndCullDistances 8 +MaxSamples 32 +MaxMeshOutputVerticesNV 256 +MaxMeshOutputPrimitivesNV 512 +MaxMeshWorkGroupSizeX_NV 32 +MaxMeshWorkGroupSizeY_NV 1 +MaxMeshWorkGroupSizeZ_NV 1 +MaxTaskWorkGroupSizeX_NV 32 +MaxTaskWorkGroupSizeY_NV 1 +MaxTaskWorkGroupSizeZ_NV 1 +MaxMeshViewCountNV 4 +MaxMeshOutputVerticesEXT 256 +MaxMeshOutputPrimitivesEXT 256 +MaxMeshWorkGroupSizeX_EXT 128 +MaxMeshWorkGroupSizeY_EXT 128 +MaxMeshWorkGroupSizeZ_EXT 128 +MaxTaskWorkGroupSizeX_EXT 128 +MaxTaskWorkGroupSizeY_EXT 128 +MaxTaskWorkGroupSizeZ_EXT 128 +MaxMeshViewCountEXT 4 +MaxDualSourceDrawBuffersEXT 1 +nonInductiveForLoops 1 +whileLoops 1 +doWhileLoops 1 +generalUniformIndexing 1 +generalAttributeMatrixVectorIndexing 1 +generalVaryingIndexing 1 +generalSamplerIndexing 1 +generalVariableIndexing 1 +generalConstantMatrixVectorIndexing 1 \ No newline at end of file diff --git a/Test/gl_MaxSamples_64.conf b/Test/gl_MaxSamples_64.conf new file mode 100644 index 0000000000..dcab31977f --- /dev/null +++ b/Test/gl_MaxSamples_64.conf @@ -0,0 +1,111 @@ +MaxLights 32 +MaxClipPlanes 6 +MaxTextureUnits 32 +MaxTextureCoords 32 +MaxVertexAttribs 64 +MaxVertexUniformComponents 4096 +MaxVaryingFloats 64 +MaxVertexTextureImageUnits 32 +MaxCombinedTextureImageUnits 80 +MaxTextureImageUnits 32 +MaxFragmentUniformComponents 4096 +MaxDrawBuffers 32 +MaxVertexUniformVectors 128 +MaxVaryingVectors 8 +MaxFragmentUniformVectors 16 +MaxVertexOutputVectors 16 +MaxFragmentInputVectors 15 +MinProgramTexelOffset -8 +MaxProgramTexelOffset 7 +MaxClipDistances 8 +MaxComputeWorkGroupCountX 65535 +MaxComputeWorkGroupCountY 65535 +MaxComputeWorkGroupCountZ 65535 +MaxComputeWorkGroupSizeX 1024 +MaxComputeWorkGroupSizeY 1024 +MaxComputeWorkGroupSizeZ 64 +MaxComputeUniformComponents 1024 +MaxComputeTextureImageUnits 16 +MaxComputeImageUniforms 8 +MaxComputeAtomicCounters 8 +MaxComputeAtomicCounterBuffers 1 +MaxVaryingComponents 60 +MaxVertexOutputComponents 64 +MaxGeometryInputComponents 64 +MaxGeometryOutputComponents 128 +MaxFragmentInputComponents 128 +MaxImageUnits 8 +MaxCombinedImageUnitsAndFragmentOutputs 8 +MaxCombinedShaderOutputResources 8 +MaxImageSamples 0 +MaxVertexImageUniforms 0 +MaxTessControlImageUniforms 0 +MaxTessEvaluationImageUniforms 0 +MaxGeometryImageUniforms 0 +MaxFragmentImageUniforms 8 +MaxCombinedImageUniforms 8 +MaxGeometryTextureImageUnits 16 +MaxGeometryOutputVertices 256 +MaxGeometryTotalOutputComponents 1024 +MaxGeometryUniformComponents 1024 +MaxGeometryVaryingComponents 64 +MaxTessControlInputComponents 128 +MaxTessControlOutputComponents 128 +MaxTessControlTextureImageUnits 16 +MaxTessControlUniformComponents 1024 +MaxTessControlTotalOutputComponents 4096 +MaxTessEvaluationInputComponents 128 +MaxTessEvaluationOutputComponents 128 +MaxTessEvaluationTextureImageUnits 16 +MaxTessEvaluationUniformComponents 1024 +MaxTessPatchComponents 120 +MaxPatchVertices 32 +MaxTessGenLevel 64 +MaxViewports 16 +MaxVertexAtomicCounters 0 +MaxTessControlAtomicCounters 0 +MaxTessEvaluationAtomicCounters 0 +MaxGeometryAtomicCounters 0 +MaxFragmentAtomicCounters 8 +MaxCombinedAtomicCounters 8 +MaxAtomicCounterBindings 1 +MaxVertexAtomicCounterBuffers 0 +MaxTessControlAtomicCounterBuffers 0 +MaxTessEvaluationAtomicCounterBuffers 0 +MaxGeometryAtomicCounterBuffers 0 +MaxFragmentAtomicCounterBuffers 1 +MaxCombinedAtomicCounterBuffers 1 +MaxAtomicCounterBufferSize 16384 +MaxTransformFeedbackBuffers 4 +MaxTransformFeedbackInterleavedComponents 64 +MaxCullDistances 8 +MaxCombinedClipAndCullDistances 8 +MaxSamples 64 +MaxMeshOutputVerticesNV 256 +MaxMeshOutputPrimitivesNV 512 +MaxMeshWorkGroupSizeX_NV 32 +MaxMeshWorkGroupSizeY_NV 1 +MaxMeshWorkGroupSizeZ_NV 1 +MaxTaskWorkGroupSizeX_NV 32 +MaxTaskWorkGroupSizeY_NV 1 +MaxTaskWorkGroupSizeZ_NV 1 +MaxMeshViewCountNV 4 +MaxMeshOutputVerticesEXT 256 +MaxMeshOutputPrimitivesEXT 256 +MaxMeshWorkGroupSizeX_EXT 128 +MaxMeshWorkGroupSizeY_EXT 128 +MaxMeshWorkGroupSizeZ_EXT 128 +MaxTaskWorkGroupSizeX_EXT 128 +MaxTaskWorkGroupSizeY_EXT 128 +MaxTaskWorkGroupSizeZ_EXT 128 +MaxMeshViewCountEXT 4 +MaxDualSourceDrawBuffersEXT 1 +nonInductiveForLoops 1 +whileLoops 1 +doWhileLoops 1 +generalUniformIndexing 1 +generalAttributeMatrixVectorIndexing 1 +generalVaryingIndexing 1 +generalSamplerIndexing 1 +generalVariableIndexing 1 +generalConstantMatrixVectorIndexing 1 \ No newline at end of file diff --git a/Test/gl_samplemask_array_size.frag b/Test/gl_samplemask_array_size.frag new file mode 100644 index 0000000000..52ef849686 --- /dev/null +++ b/Test/gl_samplemask_array_size.frag @@ -0,0 +1,10 @@ +#version 320 es + +layout(location = 0) out mediump vec4 fragColor; +void main (void) +{ + for (int i = 0; i < gl_SampleMask.length(); ++i) + gl_SampleMask[i] = int(0xAAAAAAAA); + + fragColor = vec4(0.0, 1.0, 0.0, 1.0); +} \ No newline at end of file diff --git a/Test/glsl.-P.frag b/Test/glsl.-P.frag new file mode 100644 index 0000000000..72df8dedd1 --- /dev/null +++ b/Test/glsl.-P.frag @@ -0,0 +1,20 @@ +#version 450 + +layout(location=0) out vec4 color; + +void main() +{ + #ifndef TEST1 + #error TEST1 is not defined + #endif + + #ifndef TEST2 + #error TEST2 is not defined + #endif + + #ifndef TEST3 + #error TEST3 is not defined + #endif + + color = vec4(1.0); +} diff --git a/Test/glsl.-P.function.frag b/Test/glsl.-P.function.frag new file mode 100644 index 0000000000..086bb4dc7c --- /dev/null +++ b/Test/glsl.-P.function.frag @@ -0,0 +1,8 @@ +#version 450 + +layout(location=0) out vec4 color; + +void main() +{ + color = getColor(); +} diff --git a/Test/glsl.-P.include.frag b/Test/glsl.-P.include.frag new file mode 100644 index 0000000000..fdadc7178b --- /dev/null +++ b/Test/glsl.-P.include.frag @@ -0,0 +1,10 @@ +#version 450 + +#include "glsl.-P.included.glsl" + +layout(location=0) out vec4 color; + +void main() +{ + color = getColor(); +} diff --git a/Test/glsl.-P.included.glsl b/Test/glsl.-P.included.glsl new file mode 100644 index 0000000000..d870f9f940 --- /dev/null +++ b/Test/glsl.-P.included.glsl @@ -0,0 +1,4 @@ +vec4 getColor() +{ + return vec4(1.0); +} diff --git a/Test/glsl.450.subgroupRotate.comp b/Test/glsl.450.subgroupRotate.comp new file mode 100644 index 0000000000..7f8c007e7b --- /dev/null +++ b/Test/glsl.450.subgroupRotate.comp @@ -0,0 +1,73 @@ +#version 450 + +#extension GL_KHR_shader_subgroup_rotate: enable + +layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in; + +readonly buffer roblock +{ + uint delta; +} ro; + +layout(binding = 0) buffer Buffers +{ + vec4 f4; + ivec4 i4; + uvec4 u4; + dvec4 d4; +} data[4]; + +void main() +{ + uint delta = ro.delta; + + data[delta].f4.x = subgroupRotate(data[0].f4.x, delta); + data[delta].f4.xy = subgroupRotate(data[1].f4.xy, delta); + data[delta].f4.xyz = subgroupRotate(data[2].f4.xyz, delta); + data[delta].f4 = subgroupRotate(data[3].f4, delta); + + data[delta].i4.x = subgroupRotate(data[0].i4.x, delta); + data[delta].i4.xy = subgroupRotate(data[1].i4.xy, delta); + data[delta].i4.xyz = subgroupRotate(data[2].i4.xyz, delta); + data[delta].i4 = subgroupRotate(data[3].i4, delta); + + data[delta].u4.x = subgroupRotate(data[0].u4.x, delta); + data[delta].u4.xy = subgroupRotate(data[1].u4.xy, delta); + data[delta].u4.xyz = subgroupRotate(data[2].u4.xyz, delta); + data[delta].u4 = subgroupRotate(data[3].u4, delta); + + data[delta].d4.x = subgroupRotate(data[0].d4.x, delta); + data[delta].d4.xy = subgroupRotate(data[1].d4.xy, delta); + data[delta].d4.xyz = subgroupRotate(data[2].d4.xyz, delta); + data[delta].d4 = subgroupRotate(data[3].d4, delta); + + data[delta].i4.x = int(subgroupRotate(data[0].i4.x < 0, delta)); + data[delta].i4.xy = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)), delta)); + data[delta].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta)); + data[delta].i4 = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)), delta)); + + data[delta].f4.x = subgroupClusteredRotate(data[0].f4.x, delta, 1); + data[delta].f4.xy = subgroupClusteredRotate(data[1].f4.xy, delta, 1); + data[delta].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz, delta, 1); + data[delta].f4 = subgroupClusteredRotate(data[3].f4, delta, 1); + + data[delta].i4.x = subgroupClusteredRotate(data[0].i4.x, delta, 1); + data[delta].i4.xy = subgroupClusteredRotate(data[1].i4.xy, delta, 1); + data[delta].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz, delta, 1); + data[delta].i4 = subgroupClusteredRotate(data[3].i4, delta, 1); + + data[delta].u4.x = subgroupClusteredRotate(data[0].u4.x, delta, 1); + data[delta].u4.xy = subgroupClusteredRotate(data[1].u4.xy, delta, 1); + data[delta].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz, delta, 1); + data[delta].u4 = subgroupClusteredRotate(data[3].u4, delta, 1); + + data[delta].d4.x = subgroupClusteredRotate(data[0].d4.x, delta, 1); + data[delta].d4.xy = subgroupClusteredRotate(data[1].d4.xy, delta, 1); + data[delta].d4.xyz = subgroupClusteredRotate(data[2].d4.xyz, delta, 1); + data[delta].d4 = subgroupClusteredRotate(data[3].d4, delta, 1); + + data[delta].i4.x = int(subgroupClusteredRotate(data[0].i4.x < 0, delta, 1)); + data[delta].i4.xy = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)), delta, 1)); + data[delta].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1)); + data[delta].i4 = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)), delta, 1)); +} diff --git a/Test/glsl.es320.extTextureShadowLod.frag b/Test/glsl.es320.extTextureShadowLod.frag new file mode 100644 index 0000000000..49125633c8 --- /dev/null +++ b/Test/glsl.es320.extTextureShadowLod.frag @@ -0,0 +1,22 @@ +#version 320 es + +#extension GL_EXT_texture_shadow_lod : enable + + +uniform lowp sampler2DArrayShadow s2da; +uniform lowp samplerCubeArrayShadow sca; +uniform lowp samplerCubeShadow sc; + +in lowp vec4 tc; +out lowp float c; +void main() +{ + c = texture(s2da, tc, 0.0); + c = texture(sca, tc, 0.0, 0.0); + c = textureOffset(s2da, tc, ivec2(0.0), 0.0); + c = textureLod(s2da, tc, 0.0); + c = textureLod(sc, tc, 0.0); + c = textureLod(sca, tc, 0.0, 0.0); + c = textureLodOffset(s2da, tc, 0.0, ivec2(0.0)); + +} diff --git a/Test/glsl.es320.subgroupRotate.comp b/Test/glsl.es320.subgroupRotate.comp new file mode 100644 index 0000000000..c59a84bbfe --- /dev/null +++ b/Test/glsl.es320.subgroupRotate.comp @@ -0,0 +1,62 @@ +#version 320 es + +#extension GL_KHR_shader_subgroup_rotate: enable + +layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in; + +readonly buffer roblock +{ + uint delta; +} ro; + +layout(binding = 0) buffer Buffers +{ + vec4 f4; + ivec4 i4; + uvec4 u4; +} data[4]; + +void main() +{ + uint delta = ro.delta; + + data[0].f4.x = subgroupRotate(data[0].f4.x, delta); + data[0].f4.xy = subgroupRotate(data[1].f4.xy, delta); + data[0].f4.xyz = subgroupRotate(data[2].f4.xyz, delta); + data[0].f4 = subgroupRotate(data[3].f4, delta); + + data[0].i4.x = subgroupRotate(data[0].i4.x, delta); + data[0].i4.xy = subgroupRotate(data[1].i4.xy, delta); + data[0].i4.xyz = subgroupRotate(data[2].i4.xyz, delta); + data[0].i4 = subgroupRotate(data[3].i4, delta); + + data[1].u4.x = subgroupRotate(data[0].u4.x, delta); + data[1].u4.xy = subgroupRotate(data[1].u4.xy, delta); + data[1].u4.xyz = subgroupRotate(data[2].u4.xyz, delta); + data[1].u4 = subgroupRotate(data[3].u4, delta); + + data[1].i4.x = int(subgroupRotate(data[0].i4.x < 0, delta)); + data[1].i4.xy = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)), delta)); + data[1].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta)); + data[1].i4 = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)), delta)); + + data[2].f4.x = subgroupClusteredRotate(data[0].f4.x, delta, 1u); + data[2].f4.xy = subgroupClusteredRotate(data[1].f4.xy, delta, 1u); + data[2].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz, delta, 1u); + data[2].f4 = subgroupClusteredRotate(data[3].f4, delta, 1u); + + data[2].i4.x = subgroupClusteredRotate(data[0].i4.x, delta, 1u); + data[2].i4.xy = subgroupClusteredRotate(data[1].i4.xy, delta, 1u); + data[2].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz, delta, 1u); + data[2].i4 = subgroupClusteredRotate(data[3].i4, delta, 1u); + + data[3].u4.x = subgroupClusteredRotate(data[0].u4.x, delta, 1u); + data[3].u4.xy = subgroupClusteredRotate(data[1].u4.xy, delta, 1u); + data[3].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz, delta, 1u); + data[3].u4 = subgroupClusteredRotate(data[3].u4, delta, 1u); + + data[3].i4.x = int(subgroupClusteredRotate(data[0].i4.x < 0, delta, 1u)); + data[3].i4.xy = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)), delta, 1u)); + data[3].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1u)); + data[3].i4 = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)), delta, 1u)); +} diff --git a/Test/glsl.ext.textureShadowLod.frag b/Test/glsl.ext.textureShadowLod.frag new file mode 100644 index 0000000000..79c22ff041 --- /dev/null +++ b/Test/glsl.ext.textureShadowLod.frag @@ -0,0 +1,32 @@ +#version 450 +#extension GL_EXT_texture_shadow_lod : enable + +uniform sampler2DArrayShadow s2da; +uniform samplerCubeArrayShadow sca; +uniform samplerCubeShadow sc; + +out float c; +in vec4 tc; + +void pass() { + c = texture(s2da, tc, 0.0); + c = texture(sca, tc, 0.0, 0.0); + c = textureOffset(s2da, tc, ivec2(0.0), 0.0); + c = textureLod(s2da, tc, 0.0); + c = textureLod(sc, tc, 0.0); + c = textureLod(sca, tc, 0.0, 0.0); + c = textureLodOffset(s2da, tc, 0.0, ivec2(0.0)); +} + +#extension GL_EXT_texture_shadow_lod : disable +void fail() { + // All these builtins should fail to compile + c = texture(s2da, tc, 0.0); + c = texture(sca, tc, 0.0, 0.0); + c = textureOffset(s2da, tc, ivec2(0.0), 0.0); + c = textureLod(s2da, tc, 0.0); + c = textureLod(sc, tc, 0.0); + c = textureLod(sca, tc, 0.0, 0.0); + c = textureLodOffset(s2da, tc, 0.0, ivec2(0.0)); +} + diff --git a/Test/glsl.interpOp.error.frag b/Test/glsl.interpOp.error.frag new file mode 100644 index 0000000000..7d46f2e632 --- /dev/null +++ b/Test/glsl.interpOp.error.frag @@ -0,0 +1,73 @@ +#version 320 es + +struct S +{ + highp float a; + highp float b; +}; +layout(location = 0) in S v_var; + +layout(location = 2) in highp float v; + +struct S0 { + highp vec4 s_v; +}; + +layout(location = 3) in FIn { + highp float x; + highp vec4 xyz[1]; + S0 s0; +}; + +layout(location = 7) in highp float z[1]; + +layout(location = 8) in highp vec4 w; + +layout(location = 0) out mediump vec4 fragColor; +void main (void) +{ + // Centroid + { + // valid + fragColor = vec4(interpolateAtCentroid(v)); + fragColor = vec4(interpolateAtCentroid(x)); + fragColor = vec4(interpolateAtCentroid(z[0])); + fragColor = interpolateAtCentroid(w); + fragColor = interpolateAtCentroid(xyz[0]); + + //// invalid + fragColor = vec4(interpolateAtCentroid(v_var.a)); + fragColor = vec4(interpolateAtCentroid(w.x)); + fragColor = vec4(interpolateAtCentroid(s0.s_v)); + } + + // Sample + { + // valid + fragColor = vec4(interpolateAtSample(v, 0)); + fragColor = vec4(interpolateAtSample(x, 0)); + fragColor = vec4(interpolateAtSample(z[0], 0)); + fragColor = interpolateAtSample(w, 0); + fragColor = interpolateAtSample(xyz[0], 0); + + // invalid + fragColor = vec4(interpolateAtSample(v_var.a, 0)); + fragColor = vec4(interpolateAtSample(w.x, 0)); + fragColor = vec4(interpolateAtSample(s0.s_v, 0)); + } + + // Offset + { + // valid + fragColor = vec4(interpolateAtOffset(v, vec2(0))); + fragColor = vec4(interpolateAtOffset(x, vec2(0))); + fragColor = vec4(interpolateAtOffset(z[0], vec2(0))); + fragColor = interpolateAtOffset(w, vec2(0)); + fragColor = interpolateAtOffset(xyz[0], vec2(0)); + + // invalid + fragColor = vec4(interpolateAtOffset(v_var.a, vec2(0))); + fragColor = vec4(interpolateAtOffset(w.x, vec2(0))); + fragColor = vec4(interpolateAtOffset(s0.s_v, vec2(0))); + } +} diff --git a/Test/glsl.versionOverride.comp b/Test/glsl.versionOverride.comp new file mode 100644 index 0000000000..f72663e353 --- /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 0000000000..126799405b --- /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 0000000000..691c99124d --- /dev/null +++ b/Test/glsl.versionOverride.geom @@ -0,0 +1,16 @@ +/* + +glslang.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 0000000000..a3bd7ed60b --- /dev/null +++ b/Test/glsl.versionOverride.tesc @@ -0,0 +1,13 @@ +/* + +glslang.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 0000000000..bbb42d2fc9 --- /dev/null +++ b/Test/glsl.versionOverride.tese @@ -0,0 +1,13 @@ +/* + +glslang.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 0000000000..2d5effcd89 --- /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/glslangValidator b/Test/glslangValidator index 856aa1a995..f6b26b437a 100755 --- a/Test/glslangValidator +++ b/Test/glslangValidator @@ -1,2 +1,2 @@ #!/usr/bin/env bash -../build/install/bin/glslangValidator $* +../build/install/bin/glslang $* diff --git a/Test/hlsl.buffer-offsets.comp b/Test/hlsl.buffer-offsets.comp new file mode 100644 index 0000000000..13e4052d37 --- /dev/null +++ b/Test/hlsl.buffer-offsets.comp @@ -0,0 +1,13 @@ +// See https://github.com/KhronosGroup/glslang/issues/3668 + +struct GfxIterationData { + float mIntegrationTrafo[24]; + float mWind[3]; + uint mIsTurning; +}; + +StructuredBuffer bIterData : register(t2); + +void main() +{ +} diff --git a/Test/hlsl.buffer_ref_parameter.comp b/Test/hlsl.buffer_ref_parameter.comp new file mode 100644 index 0000000000..acd08b3781 --- /dev/null +++ b/Test/hlsl.buffer_ref_parameter.comp @@ -0,0 +1,13 @@ +[[vk::binding(0, 0)]] ByteAddressBuffer buffer_position_ms; +[[vk::binding(1, 0)]] RWByteAddressBuffer r; + +float3 pull_position(ByteAddressBuffer buffer_position, uint vertex_id) { + return asfloat(buffer_position.Load3(vertex_id * 3 * 4)); +} + +[numthreads(64, 1, 1)] +void main(uint gi : SV_GroupIndex) { + float3 position_ms = pull_position(buffer_position_ms, gi); + + r.Store3(0, asuint(position_ms)); +} \ No newline at end of file diff --git a/Test/hlsl.cbuffer-offsets.comp b/Test/hlsl.cbuffer-offsets.comp new file mode 100644 index 0000000000..de88d81f3a --- /dev/null +++ b/Test/hlsl.cbuffer-offsets.comp @@ -0,0 +1,44 @@ +// Correct offsets obtained from "HLSL Constant Buffer Visualizer" +// https://maraneshi.github.io/HLSL-ConstantBufferLayoutVisualizer/ + +cbuffer CB { + float f1; + float3 f3a3[3]; + float f2; + float f3; + + float1x1 m11; + float1x2 m12; + float2x1 m21; + float2x2 m22; + + float3x3 m33; + float f4; + + float3x4 m34; + float f5; + + float4x3 m43; + float f6; + + row_major float1x1 rm11; + row_major float1x2 rm12; + row_major float2x1 rm21; + row_major float2x2 rm22; + + row_major float3x3 rm33; + float f7; + + row_major float3x4 rm34; + float f8; + + row_major float4x3 rm43; + float f9; + + float f1a3[3]; + float f10; +}; + +void main() +{ +} diff --git a/Test/hlsl.conditional.frag b/Test/hlsl.conditional.frag index 91f75eec7f..7b6eb7bda4 100644 --- a/Test/hlsl.conditional.frag +++ b/Test/hlsl.conditional.frag @@ -37,6 +37,10 @@ float4 PixelShaderFunction(float4 input) : COLOR0 e = a = b ? c = d : 10, b = a ? d = c : 11; float4 f; f = ret.x < input.y ? c * input : d * input; + uint g = d > 0.0 ? 0b010101u : 0u; + uint h = g > 0.0 ? 0B111111u : 0u; + uint i = h > 0.0 ? 0b0101u : 0B01; + uint j = i > 0.0 ? 0xabcd : 0xbcda; return e * ret + f + vectorCond() + scalarCond() + float4(fbSelect(bool2(true, false), float2(1.0, 2.0), float2(3.0, 4.0)), 10.0, 10.0); } diff --git a/Test/hlsl.emptystructreturn.tesc b/Test/hlsl.emptystructreturn.tesc new file mode 100644 index 0000000000..bc84893025 --- /dev/null +++ b/Test/hlsl.emptystructreturn.tesc @@ -0,0 +1,48 @@ +struct HullInputType +{ + float4 position : SV_Position; +}; + +struct ConstantOutputType +{ + float edges[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; +}; +struct EmptyStruct {}; + +struct HullOutputType {}; + +void blob(InputPatch patch) +{ +} + +ConstantOutputType ColorPatchConstantFunction(InputPatch inputPatch, uint patchId : SV_PrimitiveID) +{ + ConstantOutputType output; + + // Set the tessellation factors for the three edges of the triangle. + output.edges[0] = 2; + output.edges[1] = 2; + output.edges[2] = 2; + + // Set the tessellation factor for tessallating inside the triangle. + output.inside = 2; + + return output; +} + + +// Hull Shader +[domain("tri")] +[partitioning("integer")] +[outputtopology("triangle_cw")] +[outputcontrolpoints(3)] +[patchconstantfunc("ColorPatchConstantFunction")] +HullOutputType main(EmptyStruct stage_input, InputPatch patch, uint pointId : SV_OutputControlPointID, uint patchId : SV_PrimitiveID) +{ + HullOutputType output; + blob(patch); + + return output; +} + diff --git a/Test/hlsl.entry-inout.vert b/Test/hlsl.entry-inout.vert new file mode 100644 index 0000000000..859b0307ab --- /dev/null +++ b/Test/hlsl.entry-inout.vert @@ -0,0 +1 @@ +void main(inout float4 pos : SV_Position, inout float2 uv : TEXCOORD0) {} diff --git a/Test/hlsl.function.frag b/Test/hlsl.function.frag index 5834b31964..6fb44a9ab1 100644 --- a/Test/hlsl.function.frag +++ b/Test/hlsl.function.frag @@ -3,9 +3,14 @@ float4 fun0() return 1.0f; } -uint fun2(float4 col) +float4 fun2(float4 const col) { - return 7; + return (1.0f, 2.0f, 3.0f, 4.0f); +} + +uint fun3(const float4 col) +{ + return 7; } float4 fun4(uint id1, uniform uint id2) @@ -15,7 +20,7 @@ float4 fun4(uint id1, uniform uint id2) float4 fun1(int index) { - uint entityId = fun2(fun0()); + uint entityId = fun3(fun2(fun0())); return fun4(entityId, entityId); } diff --git a/Test/hlsl.inf.vert b/Test/hlsl.inf.vert index d57b83793b..b73f24e102 100644 --- a/Test/hlsl.inf.vert +++ b/Test/hlsl.inf.vert @@ -5,7 +5,12 @@ float4 main() : SV_Position float f3 = +1.#INF; float f4 = f2 * 1.#INF + 1.#INF; const float f5 = -1.#INF; - const float f6 = f5 * 0.0f; + // An infinity times zero is a NaN. + // In IEEE 754, the sign of a NaN is significant only for + // abs, copy, negate, or copySign. Use abs(.) here to + // set the sign bit to zero. Otherwise, some platforms will + // have a 1 sign bit and others will have a 0 sign bit. + const float f6 = abs(f5 * 0.0f); return (float4)(f1 + f2 + f3 + f4 + f5 + f6); -} \ No newline at end of file +} diff --git a/Test/hlsl.init2.frag b/Test/hlsl.init2.frag index 2b9b7e688c..6dcb6cb7a2 100644 --- a/Test/hlsl.init2.frag +++ b/Test/hlsl.init2.frag @@ -21,16 +21,17 @@ void Test1() const mystruct2 constTest5 = { {8,}, {9,}, {10}, }; constTest5.c; - const float step = 1.f; - float n = 0; - const float3 a[8] = { - normalize(float3(1, 1, 1)) * (n += step), - normalize(float3(-1, -1, -1)) * (n += step), - normalize(float3(-1, -1, 1)) * (n += step), - normalize(float3(-1, 1, -1)) * (n += step), - normalize(float3(-1, 1, 1)) * (n += step), - normalize(float3(1, -1, -1)) * (n += step), - normalize(float3(1, -1, 1)) * (n += step), + float const origStep = 1.0f; + const float step = origStep; + float n = 0; + const float3 a[8] = { + normalize(float3(1, 1, 1)) * (n += step), + normalize(float3(-1, -1, -1)) * (n += step), + normalize(float3(-1, -1, 1)) * (n += step), + normalize(float3(-1, 1, -1)) * (n += step), + normalize(float3(-1, 1, 1)) * (n += step), + normalize(float3(1, -1, -1)) * (n += step), + normalize(float3(1, -1, 1)) * (n += step), normalize(float3(1, 1, -1)) * (n += step) }; const struct one { float3 a; } oneNonConst = { normalize(float3(-1, 1, 1)) * (n += step) }; diff --git a/Test/hlsl.instance.geom b/Test/hlsl.instance.geom new file mode 100644 index 0000000000..5295f3893a --- /dev/null +++ b/Test/hlsl.instance.geom @@ -0,0 +1,17 @@ +struct VertexShaderOutput +{ + float4 m_position : SV_POSITION; + float4 m_color : COLOR0; +}; + +[maxvertexcount(3)] +[instance(5)] +void GeometryShader(triangle VertexShaderOutput input[3], inout TriangleStream output, uint id : SV_GSInstanceID) +{ + [loop] + for (int i = 0; i < 3; ++i) + { + output.Append(input[i]); + } + output.RestartStrip(); +} \ No newline at end of file diff --git a/Test/hlsl.intrinsics.comp b/Test/hlsl.intrinsics.comp index bce2d27d81..78f424710f 100644 --- a/Test/hlsl.intrinsics.comp +++ b/Test/hlsl.intrinsics.comp @@ -12,6 +12,8 @@ groupshared uint3 gs_uc3; groupshared uint4 gs_ua4; groupshared uint4 gs_ub4; groupshared uint4 gs_uc4; +groupshared float gs_fa; +groupshared float gs_fb; float ComputeShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1) { @@ -36,6 +38,8 @@ float ComputeShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint InterlockedXor(gs_ua, gs_ub); InterlockedXor(gs_ua, gs_ub, out_u1); + InterlockedAdd(gs_fa, gs_fb); + // CheckAccessFullyMapped(3); // TODO: ... return 0.0; diff --git a/Test/hlsl.mintypes.frag b/Test/hlsl.mintypes.frag index ad47e68e3b..a887562b43 100644 --- a/Test/hlsl.mintypes.frag +++ b/Test/hlsl.mintypes.frag @@ -12,30 +12,75 @@ PS_OUTPUT main() min16float2 mf16_2; min16float3 mf16_3; min16float4 mf16_4; + min16float2x2 mf16_2x2; + min16float2x3 mf16_2x3; + min16float2x4 mf16_2x4; + min16float3x2 mf16_3x2; + min16float3x3 mf16_3x3; + min16float3x4 mf16_3x4; + min16float4x2 mf16_4x2; + min16float4x3 mf16_4x3; + min16float4x4 mf16_4x4; min10float mf10; min10float1 mf10_1; min10float2 mf10_2; min10float3 mf10_3; - min10float4 mf12_4; + min10float4 mf10_4; + min10float2x2 mf10_2x2; + min10float2x3 mf10_2x3; + min10float2x4 mf10_2x4; + min10float3x2 mf10_3x2; + min10float3x3 mf10_3x3; + min10float3x4 mf10_3x4; + min10float4x2 mf10_4x2; + min10float4x3 mf10_4x3; + min10float4x4 mf10_4x4; min16int mi16; min16int1 mi16_1; min16int2 mi16_2; min16int3 mi16_3; min16int4 mi16_4; + min16int2x2 mi16_2x2; + min16int2x3 mi16_2x3; + min16int2x4 mi16_2x4; + min16int3x2 mi16_3x2; + min16int3x3 mi16_3x3; + min16int3x4 mi16_3x4; + min16int4x2 mi16_4x2; + min16int4x3 mi16_4x3; + min16int4x4 mi16_4x4; min12int mi12; min12int1 mi12_1; min12int2 mi12_2; min12int3 mi12_3; min12int4 mi12_4; + min12int2x2 mi12_2x2; + min12int2x3 mi12_2x3; + min12int2x4 mi12_2x4; + min12int3x2 mi12_3x2; + min12int3x3 mi12_3x3; + min12int3x4 mi12_3x4; + min12int4x2 mi12_4x2; + min12int4x3 mi12_4x3; + min12int4x4 mi12_4x4; min16uint mu16; min16uint1 mu16_1; min16uint2 mu16_2; min16uint3 mu16_3; min16uint4 mu16_4; + min16uint2x2 mu16_2x2; + min16uint2x3 mu16_2x3; + min16uint2x4 mu16_2x4; + min16uint3x2 mu16_3x2; + min16uint3x3 mu16_3x3; + min16uint3x4 mu16_3x4; + min16uint4x2 mu16_4x2; + min16uint4x3 mu16_4x3; + min16uint4x4 mu16_4x4; mf16_2 + mf16; mf10_2 + mf10; @@ -43,6 +88,20 @@ PS_OUTPUT main() mi12_2 + mi12; mu16_2 + mu16; + mul(mf16_2, mf16_2x4); + mul(mf16_3, mf16_3x4); + mul(mf16_4, mf16_4x4); + mul(mf16_4x2, mf16_2); + mul(mf16_4x3, mf16_3); + mul(mf16_4x4, mf16_4); + + mul(mf10_2, mf10_2x4); + mul(mf10_3, mf10_3x4); + mul(mf10_4, mf10_4x4); + mul(mf10_4x2, mf10_2); + mul(mf10_4x3, mf10_3); + mul(mf10_4x4, mf10_4); + PS_OUTPUT psout; psout.Color = 0; return psout; diff --git a/Test/hlsl.multiView.frag b/Test/hlsl.multiView.frag new file mode 100644 index 0000000000..79e388d6f7 --- /dev/null +++ b/Test/hlsl.multiView.frag @@ -0,0 +1,5 @@ + +float4 main(uint ViewIndex : SV_ViewID) +{ + return float4(ViewIndex, 0.0f, 0.0f, 0.0f); +} diff --git a/Test/hlsl.namespace.frag b/Test/hlsl.namespace.frag index 76c3062d6a..d2b044586b 100644 --- a/Test/hlsl.namespace.frag +++ b/Test/hlsl.namespace.frag @@ -12,7 +12,7 @@ namespace N2 { float4 getVec() { return v2; } class C1 { - float4 getVec() { return v2; } + static float4 getVec() { return v2; } }; } } diff --git a/Test/hlsl.nested-runtimeArray.frag b/Test/hlsl.nested-runtimeArray.frag new file mode 100644 index 0000000000..3606adac38 --- /dev/null +++ b/Test/hlsl.nested-runtimeArray.frag @@ -0,0 +1,9 @@ +struct A { + float a[]; +}; + +RWStructuredBuffer B; + +float main() { + return B[0].a[0]; +} diff --git a/Test/hlsl.numericsuffixes.frag b/Test/hlsl.numericsuffixes.frag index bccb786da0..e16d374de5 100644 --- a/Test/hlsl.numericsuffixes.frag +++ b/Test/hlsl.numericsuffixes.frag @@ -1,6 +1,9 @@ struct PS_OUTPUT { float4 color : SV_Target0; }; +#define BIN_UINT 0b00001u +#define BIN_INT 0b00011 + PS_OUTPUT main() { // Test numeric suffixes @@ -8,7 +11,7 @@ PS_OUTPUT main() uint r01 = 1u; // lower uint uint r02 = 2U; // upper uint uint r03 = 0xabcu; // lower hex uint - uint r04 = 0xABCU; // upper hex uint (upper 0X is not accepted) + uint r04 = 0XABCU; // upper hex uint int r05 = 5l; // lower long int int r06 = 6L; // upper long int int r07 = 071; // octal @@ -17,6 +20,12 @@ PS_OUTPUT main() float r10 = 1.H; // half float r11 = 1.1h; // half float r12 = 1.1H; // half + uint r13 = 0b00001u;// lower binary uint + uint r14 = 0B00010U;// upper binary uint + int r15 = 0b00011; // lower binary int + int r16 = 0B00100; // upper binary int + uint r17 = BIN_UINT;// lower binart define uint + int r18 = BIN_INT; // lower binart define int PS_OUTPUT ps_output; ps_output.color = r07; // gets 71 octal = 57 decimal diff --git a/Test/hlsl.numericsuffixes.negative.frag b/Test/hlsl.numericsuffixes.negative.frag new file mode 100644 index 0000000000..ce512fd059 --- /dev/null +++ b/Test/hlsl.numericsuffixes.negative.frag @@ -0,0 +1,15 @@ + +struct PS_OUTPUT { float4 color : SV_Target0; }; + +PS_OUTPUT main() +{ + // Test numeric suffixes + uint r01 = 0bERROR321u; // Bad digit + uint r02 = 0b11111111111111111111111111111111111111111111111111111111111111111u; // To big + uint r03 = 0xTESTu // Bad digit + uint r04 = 0xFFFFFFFFFFFFFFFFFFu; // To big + + PS_OUTPUT ps_output; + ps_output.color = r01; + return ps_output; +} diff --git a/Test/hlsl.structcopy.comp b/Test/hlsl.structcopy.comp new file mode 100644 index 0000000000..378988479d --- /dev/null +++ b/Test/hlsl.structcopy.comp @@ -0,0 +1,28 @@ +struct MyStruct { + uint a; + uint b; + uint c; +}; + +struct MyStructs { + uint count; + MyStruct data[]; +}; + +StructuredBuffer sb; +StructuredBuffer o; + +groupshared MyStruct s[128]; +static const MyStruct deflt = { 1u, 2u, 3u }; + +[numthreads(128, 1, 1)] +void main(uint id : SV_GroupIndex) +{ + s[0] = deflt; + uint count = sb.Load(0).count; + MyStruct ms = id > count ? s[id - count] : sb.Load(0).data[id]; + + InterlockedAdd(o[0].a, ms.a); + InterlockedAdd(o[0].b, ms.b); + InterlockedAdd(o[0].c, ms.c); +} diff --git a/Test/hlsl.structcopylogical.comp b/Test/hlsl.structcopylogical.comp new file mode 100644 index 0000000000..378988479d --- /dev/null +++ b/Test/hlsl.structcopylogical.comp @@ -0,0 +1,28 @@ +struct MyStruct { + uint a; + uint b; + uint c; +}; + +struct MyStructs { + uint count; + MyStruct data[]; +}; + +StructuredBuffer sb; +StructuredBuffer o; + +groupshared MyStruct s[128]; +static const MyStruct deflt = { 1u, 2u, 3u }; + +[numthreads(128, 1, 1)] +void main(uint id : SV_GroupIndex) +{ + s[0] = deflt; + uint count = sb.Load(0).count; + MyStruct ms = id > count ? s[id - count] : sb.Load(0).data[id]; + + InterlockedAdd(o[0].a, ms.a); + InterlockedAdd(o[0].b, ms.b); + InterlockedAdd(o[0].c, ms.c); +} diff --git a/Test/hlsl.swizzle.vec1.comp b/Test/hlsl.swizzle.vec1.comp new file mode 100644 index 0000000000..1ee454cc73 --- /dev/null +++ b/Test/hlsl.swizzle.vec1.comp @@ -0,0 +1,8 @@ +void main() +{ + float1 f1; + f1.x = 0.5; + + // This is not implemented + // f1.xx = float2(0.6, 0.7); +} diff --git a/Test/implicitArraySize.frag b/Test/implicitArraySize.frag new file mode 100644 index 0000000000..ca3eeb3ffe --- /dev/null +++ b/Test/implicitArraySize.frag @@ -0,0 +1,9 @@ +#version 460 core +in float a[]; +in float c[3]; +out float b[5]; + +void main(){ + b[0] = a[1]; + b[1] = c[1]; +} \ No newline at end of file diff --git a/Test/implicitArraySize.vert b/Test/implicitArraySize.vert new file mode 100644 index 0000000000..93e7495bfb --- /dev/null +++ b/Test/implicitArraySize.vert @@ -0,0 +1,8 @@ +#version 460 core +out float a[]; +out float c[]; + +void main(){ + a[0] = 0.1; + c[5] = 0.1; +} \ No newline at end of file diff --git a/Test/implicitArraySize1.geom b/Test/implicitArraySize1.geom new file mode 100644 index 0000000000..b3b52ead55 --- /dev/null +++ b/Test/implicitArraySize1.geom @@ -0,0 +1,14 @@ +#version 460 core + +layout(triangles) in; +layout(line_strip, max_vertices = 204) out; + +void f(); + +in float g[][3]; +out float o[3]; + +void main(){ + f(); + o[1] = g[2][1]; +} \ No newline at end of file diff --git a/Test/implicitArraySize2.geom b/Test/implicitArraySize2.geom new file mode 100644 index 0000000000..0bb65cd47b --- /dev/null +++ b/Test/implicitArraySize2.geom @@ -0,0 +1,8 @@ +#version 460 core + +in float g[][3]; +out float o[]; + +void f(){ + o[1] = g[1][1]; +} \ No newline at end of file diff --git a/Test/implicitArraySizeBuiltin.geom b/Test/implicitArraySizeBuiltin.geom new file mode 100644 index 0000000000..419b63314a --- /dev/null +++ b/Test/implicitArraySizeBuiltin.geom @@ -0,0 +1,20 @@ +#version 460 core + +layout(triangles) in; +layout(line_strip, max_vertices = 204) out; + +void f2(float x) +{ + gl_ClipDistance[6] = gl_in[0].gl_ClipDistance[6]; +} +void f3(float x) +{ + gl_CullDistance[1] = gl_in[0].gl_CullDistance[1]; +} + +void main(){ + #if defined(CLIP) + f2(0.1); + #endif + f3(0.1); +} \ No newline at end of file diff --git a/Test/implicitArraySizeBuiltin.vert b/Test/implicitArraySizeBuiltin.vert new file mode 100644 index 0000000000..251e975626 --- /dev/null +++ b/Test/implicitArraySizeBuiltin.vert @@ -0,0 +1,11 @@ +#version 460 core + +void f1(float x) +{ + gl_ClipDistance[6] = x; + gl_CullDistance[1] = x; +} + +void main(){ + f1(0.1); +} \ No newline at end of file diff --git a/Test/index_outside_sample_mask_range.frag b/Test/index_outside_sample_mask_range.frag new file mode 100644 index 0000000000..7a59e1b3d7 --- /dev/null +++ b/Test/index_outside_sample_mask_range.frag @@ -0,0 +1,8 @@ +#version 320 es +layout (location = 0) out mediump vec4 fs_color; +void main() +{ + const highp int invalidIndex = (gl_MaxSamples + 31) / 32; + highp int invalidValue = gl_SampleMask[invalidIndex]; + fs_color = vec4(1.0f, 0.0f, 0.0f, 1.0f); +} diff --git a/Test/iomap.crossStage.vk.2.frag b/Test/iomap.crossStage.vk.2.frag new file mode 100644 index 0000000000..e34a9a9b2f --- /dev/null +++ b/Test/iomap.crossStage.vk.2.frag @@ -0,0 +1,24 @@ +#version 460 + +in vec4 unsetColor; +in vec4 colorOut; +out vec4 fragColor; + +in Vertex +{ + vec2 val; +} iVert; + +in Vertex2 +{ + vec2 val2; +}; + +in vec4 vv2Val; + +void main() +{ + fragColor = colorOut + unsetColor * vec4(iVert.val.xxyy) * vec4(val2.xxyy) * + vv2Val; +} + diff --git a/Test/iomap.crossStage.vk.2.geom b/Test/iomap.crossStage.vk.2.geom new file mode 100644 index 0000000000..11e7b9ab09 --- /dev/null +++ b/Test/iomap.crossStage.vk.2.geom @@ -0,0 +1,32 @@ +#version 460 + +layout(points) in; +layout(triangle_strip, max_vertices=3) out; + +// Not written by vertex shader +in vec4 vgo1[]; + +in vec4 color[]; + +out vec4 colorOut; + +in VV +{ + vec4 val; +} vv[]; + +out VV2 +{ + vec4 vv2Val; +}; + +void main() +{ + for (int i = 0; i < 3; i++) { + colorOut = color[i] * vv[i].val; + vv2Val = vec4(1.0); + EmitVertex(); + } + EndPrimitive(); +} + diff --git a/Test/iomap.crossStage.vk.2.vert b/Test/iomap.crossStage.vk.2.vert new file mode 100644 index 0000000000..8788ec2c2a --- /dev/null +++ b/Test/iomap.crossStage.vk.2.vert @@ -0,0 +1,14 @@ +#version 460 + +out VV +{ + vec4 val; +}; +out vec4 color; +void main() +{ + val = vec4(0.5); + color = vec4(1.0); + gl_Position = vec4(1.0); +} + diff --git a/Test/link.vk.inconsistentGLPerVertex.0.geom b/Test/link.vk.inconsistentGLPerVertex.0.geom old mode 100755 new mode 100644 diff --git a/Test/link.vk.inconsistentGLPerVertex.0.vert b/Test/link.vk.inconsistentGLPerVertex.0.vert old mode 100755 new mode 100644 diff --git a/Test/location_aliasing.tesc b/Test/location_aliasing.tesc new file mode 100644 index 0000000000..624396519c --- /dev/null +++ b/Test/location_aliasing.tesc @@ -0,0 +1,15 @@ +#version 430 core +#extension GL_ARB_enhanced_layouts : require + +layout(vertices = 1) out; + +layout (location = 1, component = 0) in double gohan[]; +layout (location = 1, component = 2) in float goten[]; + + +in vec4 vs_tcs[]; +out vec4 tcs_tes[]; + +void main() +{ +} \ No newline at end of file diff --git a/Test/location_aliasing1.frag b/Test/location_aliasing1.frag new file mode 100644 index 0000000000..c8c7d264da --- /dev/null +++ b/Test/location_aliasing1.frag @@ -0,0 +1,10 @@ +#version 430 core +#extension GL_ARB_enhanced_layouts : require + + +layout (location = 1, component = 0) in smooth float in1; +layout (location = 1, component = 2) in flat float in2; + +void main() +{ +} \ No newline at end of file diff --git a/Test/makeDoc b/Test/makeDoc deleted file mode 100644 index c9d598ec41..0000000000 --- a/Test/makeDoc +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -./glslangValidator -p > instDesc -asciidoc --backend=html5 instDesc diff --git a/Test/matrixCompMult.vert b/Test/matrixCompMult.vert new file mode 100644 index 0000000000..cccdbbc921 --- /dev/null +++ b/Test/matrixCompMult.vert @@ -0,0 +1,32 @@ +#version 460 +precision highp float; +precision highp int; +out float o1; +void main() +{ + const mat2 cval = matrixCompMult(mat2(1.0), mat2(1.0)); + const mat3 cval1 = matrixCompMult(mat3(1.0), mat3(1.0)); + const mat4 cval2 = matrixCompMult(mat4(1.0), mat4(1.0)); + const mat2x3 cval3 = matrixCompMult(mat2x3(1.0), mat2x3(1.0)); + const mat2x4 cval4 = matrixCompMult(mat2x4(1.0), mat2x4(1.0)); + const mat3x2 cval5 = matrixCompMult(mat3x2(1.0), mat3x2(1.0)); + const mat3x4 cval6 = matrixCompMult(mat3x4(1.0), mat3x4(1.0)); + const mat4x2 cval7 = matrixCompMult(mat4x2(1.0), mat4x2(1.0)); + const mat4x3 cval8 = matrixCompMult(mat4x3(1.0), mat4x3(1.0)); + const dmat2 cval9 = matrixCompMult(dmat2(1.0), dmat2(1.0)); + const dmat3 cval10 = matrixCompMult(dmat3(1.0), dmat3(1.0)); + const dmat4 cval11 = matrixCompMult(dmat4(1.0), dmat4(1.0)); + const dmat2x3 cval12 = matrixCompMult(dmat2x3(1.0), dmat2x3(1.0)); + const dmat2x4 cval13 = matrixCompMult(dmat2x4(1.0), dmat2x4(1.0)); + const dmat3x2 cval14 = matrixCompMult(dmat3x2(1.0), dmat3x2(1.0)); + const dmat3x4 cval15 = matrixCompMult(dmat3x4(1.0), dmat3x4(1.0)); + const dmat4x2 cval16 = matrixCompMult(dmat4x2(1.0), dmat4x2(1.0)); + const dmat4x3 cval17 = matrixCompMult(dmat4x3(1.0), dmat4x3(1.0)); + + o1 = float(cval[0][0] + cval1[0][0] + cval2[0][0] + cval3[0][0] + + cval4[0][0] + cval5[0][0] + cval6[0][0] + cval7[0][0] + + cval8[0][0] + cval9[0][0] + cval10[0][0] + cval11[0][0] + + cval12[0][0] + cval13[0][0] + cval14[0][0] + cval15[0][0] + + cval16[0][0] + cval17[0][0]); +} + diff --git a/Test/overflow_underflow_toinf_0.frag b/Test/overflow_underflow_toinf_0.frag new file mode 100644 index 0000000000..0b1d1b9934 --- /dev/null +++ b/Test/overflow_underflow_toinf_0.frag @@ -0,0 +1,13 @@ +#version 320 es +precision highp float; +out vec4 my_FragColor; +void main() +{ + // GLSL ES 3.00.6 section 4.1.4 Floats: + // "A value with a magnitude too small to be represented as a mantissa and exponent is converted to zero." + // 1.0e-50 is small enough that it can't even be stored as subnormal. + float correct = (1.0e-50 == 0.0) ? 1.0 : 0.0; + float correct1 = isinf(1.0e40) ? 1.0 : 0.0; + vec4 foo = vec4(1.0e-50, -1.0e-50, 1.0e50, -1.0e50); + my_FragColor = vec4(0.0, correct, correct1, 1.0); +} diff --git a/Test/positive_infinity.frag b/Test/positive_infinity.frag new file mode 100644 index 0000000000..9c00e38af8 --- /dev/null +++ b/Test/positive_infinity.frag @@ -0,0 +1,11 @@ +#version 300 es +precision highp float; +out vec4 my_FragColor; +void main() +{ + // Out-of-range floats should overflow to infinity + // GLSL ES 3.00.6 section 4.1.4 Floats: + // "If the value of the floating point number is too large (small) to be stored as a single precision value, it is converted to positive (negative) infinity" + float correct = isinf(1.0e2147483649) ? 1.0 : 0.0; + my_FragColor = vec4(0.0, correct, 0.0, 1.0); +} diff --git a/Test/preprocess.arb_shading_language_include.vert b/Test/preprocess.arb_shading_language_include.vert new file mode 100644 index 0000000000..9920951e55 --- /dev/null +++ b/Test/preprocess.arb_shading_language_include.vert @@ -0,0 +1,14 @@ +#version 150 + +#extension GL_ARB_shading_language_include : enable + +#define float4 vec4 + +#include "bar.h" + +out vec4 color; + +void main() +{ + color = i1 + vec4(1.0); +} diff --git a/Test/preprocess.inactive_stringify.vert b/Test/preprocess.inactive_stringify.vert new file mode 100755 index 0000000000..8f3a942552 --- /dev/null +++ b/Test/preprocess.inactive_stringify.vert @@ -0,0 +1,28 @@ +#version 460 + +// This tests that the preprocessor error +// "error: '#' : (#) can be preceded in its line only by spaces or horizontal tab" +// isn't enforced when inactive (e.g. inside #if 0) + +#if 0 +#define STRINGIFY(X) #X +#endif + +#define C 0 + +#if 1 +#ifdef A +#elif defined B +#elif C +// OK, since preprocessor evaluates to inactive +#define STRINGIFY(X) #X +#endif +#endif + +// OK in comments +// #define STRINGIFY(X) #X + +void main() +{ + gl_Position = vec4(1.0); +} \ No newline at end of file diff --git a/Test/preprocess.include_directive_missing_extension.vert b/Test/preprocess.include_directive_missing_extension.vert new file mode 100644 index 0000000000..dbe5b9420c --- /dev/null +++ b/Test/preprocess.include_directive_missing_extension.vert @@ -0,0 +1,6 @@ +#version 150 + +#include "bar.h" + +void main() {} + diff --git a/Test/preprocessor.function_macro.vert b/Test/preprocessor.function_macro.vert index 577ea7e358..9f437867b9 100644 --- a/Test/preprocessor.function_macro.vert +++ b/Test/preprocessor.function_macro.vert @@ -13,8 +13,11 @@ )\ 4 + 3 + Y +#define F F.a + int main() { gl_Position = vec4(X(3), Y(3, 4), Z(3)); gl_Position = vec4(REALLY_LONG_MACRO_NAME_WITH_MANY_PARAMETERS(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)); gl_Position = vec4(A(3)); + gl_Position = A(F); } diff --git a/Test/preprocessor.simple.vert b/Test/preprocessor.simple.vert index 788df76ce5..6c44850086 100644 --- a/Test/preprocessor.simple.vert +++ b/Test/preprocessor.simple.vert @@ -46,6 +46,8 @@ struct S { vec3 b = a.yzy; \ vec3 b = a.z; +void bar(int x) {} + void foo() { S s; @@ -55,6 +57,9 @@ void foo() s.member2.yzy(); s.member2.xyz(); s.member2.yzy; + for(int i = 0;i < 100; i = i + 1) { + bar (i) + } FUN_MAC() yzy diff --git a/Test/ps_sample.frag b/Test/ps_sample.frag new file mode 100644 index 0000000000..040eb35b2b --- /dev/null +++ b/Test/ps_sample.frag @@ -0,0 +1,17 @@ +#version 430 core +#extension GL_ARB_enhanced_layouts : require + +layout (location = 1, component = 0) flat in uint gohan; +layout (location = 1, component = 2) sample flat in uvec2 goten; + +in vec4 gs_fs; +out vec4 fs_out; + +void main() +{ + vec4 result = gs_fs; + + + + fs_out = result; +} diff --git a/Test/ps_uint_int.frag b/Test/ps_uint_int.frag new file mode 100644 index 0000000000..7ffaf5702d --- /dev/null +++ b/Test/ps_uint_int.frag @@ -0,0 +1,7 @@ +#version 450 + +layout(location=0, component=0) flat in uint u; +layout(location=0, component=1) flat in int i; + +void main() { +} diff --git a/Test/rayQuery-OpConvertUToAccelerationStructureKHR.comp b/Test/rayQuery-OpConvertUToAccelerationStructureKHR.comp new file mode 100644 index 0000000000..673f9b0b7e --- /dev/null +++ b/Test/rayQuery-OpConvertUToAccelerationStructureKHR.comp @@ -0,0 +1,15 @@ +#version 460 + +#extension GL_EXT_ray_query : enable + +layout(push_constant, std140) uniform params +{ + uvec2 tlas; +}; + +void main() +{ + rayQueryEXT rayQuery; + rayQueryInitializeEXT(rayQuery, accelerationStructureEXT(tlas), 0, 0, vec3(0.0), 0.0, vec3(1.0), 1.0); + rayQueryTerminateEXT(rayQuery); +} \ No newline at end of file diff --git a/Test/rayQuery-allOps.comp b/Test/rayQuery-allOps.comp index 3a2a8d0d2d..6f04175840 100644 --- a/Test/rayQuery-allOps.comp +++ b/Test/rayQuery-allOps.comp @@ -1,6 +1,7 @@ #version 460 #extension GL_EXT_ray_query : enable #extension GL_EXT_ray_flags_primitive_culling : enable +#extension GL_EXT_ray_tracing_position_fetch : enable layout(primitive_culling); struct Ray @@ -147,6 +148,14 @@ void main() { doSomething(); } + { + vec3 positions[3]; + rayQueryGetIntersectionTriangleVertexPositionsEXT(rayQuery, true, positions); + if (positions[0].x < 0 && positions[2].y > 0) + { + doSomething(); + } + } break; case gl_RayQueryCommittedIntersectionGeneratedEXT : diff --git a/Test/runtests b/Test/runtests index 63c3a03bb9..6b23cd441a 100755 --- a/Test/runtests +++ b/Test/runtests @@ -2,23 +2,23 @@ # Arguments: # 1- TargetDirectory, where to write test results and intermediary files -# 2- Path to glslangValidator +# 2- Path to glslang # 3- Path to spirv-remap TARGETDIR=${1:-localResults} BASEDIR=baseResults -EXE=${2:-../build/install/bin/glslangValidator} +EXE=${2:-../build/install/bin/glslang} REMAPEXE=${3:-../build/install/bin/spirv-remap} HASERROR=0 -mkdir -p $TARGETDIR +mkdir -p "$TARGETDIR" -LIBPATH="$(cd "$(dirname "$(dirname $EXE)")" && pwd)/lib" +LIBPATH="$(cd "$(dirname "$(dirname "$EXE")")" && pwd)/lib" if [ -d "${LIBPATH}" ]; then export LD_LIBRARY_PATH="${LIBPATH}:${LD_LIBRARY_PATH}" fi function run { - $EXE $@ + "$EXE" "$@" result=$? case "$result" in [0-6]) # Valid success and error codes @@ -35,8 +35,8 @@ if [ -a localtestlist ] while read t; do echo Running $t... b=`basename $t` - run -i -l $t > $TARGETDIR/$b.out - diff -b $BASEDIR/$b.out $TARGETDIR/$b.out || HASERROR=1 + run -i -l $t > "$TARGETDIR/$b.out" + diff -b $BASEDIR/$b.out "$TARGETDIR/$b.out" || HASERROR=1 done < localtestlist fi @@ -46,60 +46,64 @@ rm -f comp.spv frag.spv geom.spv tesc.spv tese.spv vert.spv # special tests # -run badMacroArgs.frag > $TARGETDIR/badMacroArgs.frag.out -diff -b $BASEDIR/badMacroArgs.frag.out $TARGETDIR/badMacroArgs.frag.out || HASERROR=1 +run badMacroArgs.frag > "$TARGETDIR/badMacroArgs.frag.out" +diff -b $BASEDIR/badMacroArgs.frag.out "$TARGETDIR/badMacroArgs.frag.out" || HASERROR=1 +run gl_samplemask_array_size.frag gl_MaxSamples_32.conf -i > "$TARGETDIR/gl_samplemask_array_size_32.frag.out" +diff -b $BASEDIR/gl_samplemask_array_size_32.frag.out "$TARGETDIR/gl_samplemask_array_size_32.frag.out" || HASERROR=1 +run gl_samplemask_array_size.frag gl_MaxSamples_64.conf -i > "$TARGETDIR/gl_samplemask_array_size_64.frag.out" +diff -b $BASEDIR/gl_samplemask_array_size_64.frag.out "$TARGETDIR/gl_samplemask_array_size_64.frag.out" || HASERROR=1 # # reflection tests # echo Running reflection... -run -l -q -C reflection.vert > $TARGETDIR/reflection.vert.out -diff -b $BASEDIR/reflection.vert.out $TARGETDIR/reflection.vert.out || HASERROR=1 -run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.options.vert > $TARGETDIR/reflection.options.vert.out -diff -b $BASEDIR/reflection.options.vert.out $TARGETDIR/reflection.options.vert.out || HASERROR=1 -run -l -q -C reflection.frag > $TARGETDIR/reflection.frag.out -diff -b $BASEDIR/reflection.frag.out $TARGETDIR/reflection.frag.out || HASERROR=1 -run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.frag > $TARGETDIR/reflection.options.frag.out -diff -b $BASEDIR/reflection.options.frag.out $TARGETDIR/reflection.options.frag.out || HASERROR=1 -run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.options.geom > $TARGETDIR/reflection.options.geom.out -diff -b $BASEDIR/reflection.options.geom.out $TARGETDIR/reflection.options.geom.out || HASERROR=1 -run -l -q -C reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.out -diff -b $BASEDIR/reflection.linked.out $TARGETDIR/reflection.linked.out || HASERROR=1 -run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.options.out -diff -b $BASEDIR/reflection.linked.options.out $TARGETDIR/reflection.linked.options.out || HASERROR=1 -run -D -Od -e flizv -l -q -C -V -Od hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out -diff -b $BASEDIR/hlsl.reflection.vert.out $TARGETDIR/hlsl.reflection.vert.out || HASERROR=1 -run -D -Od -e main -l -q -C -V -Od hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out -diff -b $BASEDIR/hlsl.reflection.binding.frag.out $TARGETDIR/hlsl.reflection.binding.frag.out || HASERROR=1 -run -D -Od -e main -l -q --hlsl-iomap --auto-map-bindings --stb 10 --sbb 20 --ssb 30 --suavb 40 --scb 50 -D -V -e main -Od hlsl.automap.frag > $TARGETDIR/hlsl.automap.frag.out -diff -b $BASEDIR/hlsl.automap.frag.out $TARGETDIR/hlsl.automap.frag.out || HASERROR=1 +run -l -q -C reflection.vert > "$TARGETDIR/reflection.vert.out" +diff -b $BASEDIR/reflection.vert.out "$TARGETDIR/reflection.vert.out" || HASERROR=1 +run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.options.vert > "$TARGETDIR/reflection.options.vert.out" +diff -b $BASEDIR/reflection.options.vert.out "$TARGETDIR/reflection.options.vert.out" || HASERROR=1 +run -l -q -C reflection.frag > "$TARGETDIR/reflection.frag.out" +diff -b $BASEDIR/reflection.frag.out "$TARGETDIR/reflection.frag.out" || HASERROR=1 +run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.frag > "$TARGETDIR/reflection.options.frag.out" +diff -b $BASEDIR/reflection.options.frag.out "$TARGETDIR/reflection.options.frag.out" || HASERROR=1 +run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.options.geom > "$TARGETDIR/reflection.options.geom.out" +diff -b $BASEDIR/reflection.options.geom.out "$TARGETDIR/reflection.options.geom.out" || HASERROR=1 +run -l -q -C reflection.linked.vert reflection.linked.frag > "$TARGETDIR/reflection.linked.out" +diff -b $BASEDIR/reflection.linked.out "$TARGETDIR/reflection.linked.out" || HASERROR=1 +run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.linked.vert reflection.linked.frag > "$TARGETDIR/reflection.linked.options.out" +diff -b $BASEDIR/reflection.linked.options.out "$TARGETDIR/reflection.linked.options.out" || HASERROR=1 +run -D -Od -e flizv -l -q -C -V -Od hlsl.reflection.vert > "$TARGETDIR/hlsl.reflection.vert.out" +diff -b $BASEDIR/hlsl.reflection.vert.out "$TARGETDIR/hlsl.reflection.vert.out" || HASERROR=1 +run -D -Od -e main -l -q -C -V -Od hlsl.reflection.binding.frag > "$TARGETDIR/hlsl.reflection.binding.frag.out" +diff -b $BASEDIR/hlsl.reflection.binding.frag.out "$TARGETDIR/hlsl.reflection.binding.frag.out" || HASERROR=1 +run -D -Od -e main -l -q --hlsl-iomap --auto-map-bindings --stb 10 --sbb 20 --ssb 30 --suavb 40 --scb 50 -D -V -e main -Od hlsl.automap.frag > "$TARGETDIR/hlsl.automap.frag.out" +diff -b $BASEDIR/hlsl.automap.frag.out "$TARGETDIR/hlsl.automap.frag.out" || HASERROR=1 # # multi-threaded test # echo Comparing single thread to multithread for all tests in current directory... -run -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > $TARGETDIR/singleThread.out -run -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > $TARGETDIR/multiThread.out -diff $TARGETDIR/singleThread.out $TARGETDIR/multiThread.out || HASERROR=1 +run -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > "$TARGETDIR/singleThread.out" +run -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > "$TARGETDIR/multiThread.out" +diff "$TARGETDIR/singleThread.out" "$TARGETDIR/multiThread.out" || HASERROR=1 if [ $HASERROR -eq 0 ] then - rm $TARGETDIR/singleThread.out - rm $TARGETDIR/multiThread.out + rm "$TARGETDIR/singleThread.out" + rm "$TARGETDIR/multiThread.out" fi # # entry point renaming tests # echo Running entry-point renaming tests -run -i -H -V -D -Od --entry-point main_in_spv --ku --source-entrypoint main -Od hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out -diff -b $BASEDIR/hlsl.entry.rename.frag.out $TARGETDIR/hlsl.entry.rename.frag.out || HASERROR=1 +run -i -H -V -D -Od --entry-point main_in_spv --ku --source-entrypoint main -Od hlsl.entry.rename.frag > "$TARGETDIR/hlsl.entry.rename.frag.out" +diff -b $BASEDIR/hlsl.entry.rename.frag.out "$TARGETDIR/hlsl.entry.rename.frag.out" || HASERROR=1 # # Testing ill-defined uncalled function # echo Running ill-defined uncalled function -run -D -Od -e main -H -Od hlsl.deadFunctionMissingBody.vert > $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out -diff -b $BASEDIR/hlsl.deadFunctionMissingBody.vert.out $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out || HASERROR=1 +run -D -Od -e main -H -Od hlsl.deadFunctionMissingBody.vert > "$TARGETDIR/hlsl.deadFunctionMissingBody.vert.out" +diff -b $BASEDIR/hlsl.deadFunctionMissingBody.vert.out "$TARGETDIR/hlsl.deadFunctionMissingBody.vert.out" || HASERROR=1 if [ $HASERROR -eq 0 ] then @@ -112,102 +116,108 @@ fi # Testing -S and compound suffixes # echo Running explicit stage test and compound suffix tests -run -Od -i -S vert nosuffix > $TARGETDIR/nosuffix.out -diff -b $BASEDIR/nosuffix.out $TARGETDIR/nosuffix.out || HASERROR=1 -run -Od -i compoundsuffix.vert.glsl > $TARGETDIR/compoundsuffix.vert.glsl -diff -b $BASEDIR/compoundsuffix.vert.glsl $TARGETDIR/compoundsuffix.vert.glsl || HASERROR=1 -run -Od -e main -H compoundsuffix.frag.hlsl > $TARGETDIR/compoundsuffix.frag.hlsl -diff -b $BASEDIR/compoundsuffix.frag.hlsl $TARGETDIR/compoundsuffix.frag.hlsl || HASERROR=1 +run -Od -i -S vert nosuffix > "$TARGETDIR/nosuffix.out" +diff -b $BASEDIR/nosuffix.out "$TARGETDIR/nosuffix.out" || HASERROR=1 +run -Od -i compoundsuffix.vert.glsl > "$TARGETDIR/compoundsuffix.vert.glsl" +diff -b $BASEDIR/compoundsuffix.vert.glsl "$TARGETDIR/compoundsuffix.vert.glsl" || HASERROR=1 +run -Od -e main -H compoundsuffix.frag.hlsl > "$TARGETDIR/compoundsuffix.frag.hlsl" +diff -b $BASEDIR/compoundsuffix.frag.hlsl "$TARGETDIR/compoundsuffix.frag.hlsl" || HASERROR=1 # # Testing --hlsl-offsets # echo Running hlsl offsets -run -i --hlsl-offsets -H spv.hlslOffsets.vert > $TARGETDIR/spv.hlslOffsets.vert.out -diff -b $BASEDIR/spv.hlslOffsets.vert.out $TARGETDIR/spv.hlslOffsets.vert.out || HASERROR=1 +run -i --hlsl-offsets -H spv.hlslOffsets.vert > "$TARGETDIR/spv.hlslOffsets.vert.out" +diff -b $BASEDIR/spv.hlslOffsets.vert.out "$TARGETDIR/spv.hlslOffsets.vert.out" || HASERROR=1 echo Running hlsl offsets -run -i --hlsl-offsets -D -Od -e main -H -Od hlsl.hlslOffset.vert > $TARGETDIR/hlsl.hlslOffset.vert.out -diff -b $BASEDIR/hlsl.hlslOffset.vert.out $TARGETDIR/hlsl.hlslOffset.vert.out || HASERROR=1 +run -i --hlsl-offsets -D -Od -e main -H -Od hlsl.hlslOffset.vert > "$TARGETDIR/hlsl.hlslOffset.vert.out" +diff -b $BASEDIR/hlsl.hlslOffset.vert.out "$TARGETDIR/hlsl.hlslOffset.vert.out" || HASERROR=1 # # Testing --resource-set-binding # echo Configuring HLSL descriptor set and binding number manually -run -V -D -Od -e main -H -Od hlsl.multiDescriptorSet.frag --rsb frag t0 0 0 t1 1 0 s0 0 1 s1 1 1 b0 2 0 b1 2 1 b2 2 2 > $TARGETDIR/hlsl.multiDescriptorSet.frag.out -diff -b $BASEDIR/hlsl.multiDescriptorSet.frag.out $TARGETDIR/hlsl.multiDescriptorSet.frag.out || HASERROR=1 +run -V -D -Od -e main -H -Od hlsl.multiDescriptorSet.frag --rsb frag t0 0 0 t1 1 0 s0 0 1 s1 1 1 b0 2 0 b1 2 1 b2 2 2 > "$TARGETDIR/hlsl.multiDescriptorSet.frag.out" +diff -b $BASEDIR/hlsl.multiDescriptorSet.frag.out "$TARGETDIR/hlsl.multiDescriptorSet.frag.out" || HASERROR=1 -run -V -D -Od -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb 4 > $TARGETDIR/hlsl.explicitDescriptorSet.frag.out -diff -b $BASEDIR/hlsl.explicitDescriptorSet.frag.out $TARGETDIR/hlsl.explicitDescriptorSet.frag.out || HASERROR=1 +run -V -D -Od -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb 4 > "$TARGETDIR/hlsl.explicitDescriptorSet.frag.out" +diff -b $BASEDIR/hlsl.explicitDescriptorSet.frag.out "$TARGETDIR/hlsl.explicitDescriptorSet.frag.out" || HASERROR=1 -run -V -D -Od -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb frag 3 > $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out -diff -b $BASEDIR/hlsl.explicitDescriptorSet-2.frag.out $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out || HASERROR=1 +run -V -D -Od -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb frag 3 > "$TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out" +diff -b $BASEDIR/hlsl.explicitDescriptorSet-2.frag.out "$TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out" || HASERROR=1 # # Testing per-descriptor-set IO map shift # echo 'Testing per-descriptor-set IO map shift' -run -e main --hlsl-iomap --ssb 10 1 15 2 --stb 20 --stb 25 2 --stb 70 6 --suavb 30 --suavb 40 2 --sub 50 6 -i -q -D -Od -V hlsl.shift.per-set.frag > $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1 -diff -b $BASEDIR/hlsl.shift.per-set.frag.out $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1 +run -e main --hlsl-iomap --ssb 10 1 15 2 --stb 20 --stb 25 2 --stb 70 6 --suavb 30 --suavb 40 2 --sub 50 6 -i -q -D -Od -V hlsl.shift.per-set.frag > "$TARGETDIR/hlsl.shift.per-set.frag.out" || HASERROR=1 +diff -b $BASEDIR/hlsl.shift.per-set.frag.out "$TARGETDIR/hlsl.shift.per-set.frag.out" || HASERROR=1 # # Testing location error # echo Testing SPV no location -run -V -C spv.noLocation.vert > $TARGETDIR/spv.noLocation.vert.out -diff -b $BASEDIR/spv.noLocation.vert.out $TARGETDIR/spv.noLocation.vert.out || HASERROR=1 -run -G -H --aml spv.noBuiltInLoc.vert > $TARGETDIR/spv.noBuiltInLoc.vert.out -diff -b $BASEDIR/spv.noBuiltInLoc.vert.out $TARGETDIR/spv.noBuiltInLoc.vert.out || HASERROR=1 -run -G spv.looseUniformNoLoc.vert > $TARGETDIR/spv.looseUniformNoLoc.vert.out -diff -b $BASEDIR/spv.looseUniformNoLoc.vert.out $TARGETDIR/spv.looseUniformNoLoc.vert.out || HASERROR=1 +run -V -C spv.noLocation.vert > "$TARGETDIR/spv.noLocation.vert.out" +diff -b $BASEDIR/spv.noLocation.vert.out "$TARGETDIR/spv.noLocation.vert.out" || HASERROR=1 +run -G -H --aml spv.noBuiltInLoc.vert > "$TARGETDIR/spv.noBuiltInLoc.vert.out" +diff -b $BASEDIR/spv.noBuiltInLoc.vert.out "$TARGETDIR/spv.noBuiltInLoc.vert.out" || HASERROR=1 +run -G spv.looseUniformNoLoc.vert > "$TARGETDIR/spv.looseUniformNoLoc.vert.out" +diff -b $BASEDIR/spv.looseUniformNoLoc.vert.out "$TARGETDIR/spv.looseUniformNoLoc.vert.out" || HASERROR=1 # # Testing debug information # echo Testing SPV Debug Information run -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \ - -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out -diff -b $BASEDIR/spv.debugInfo.frag.out $TARGETDIR/spv.debugInfo.frag.out || HASERROR=1 + -G -H spv.debugInfo.frag --rsb frag 3 > "$TARGETDIR/spv.debugInfo.frag.out" +diff -b $BASEDIR/spv.debugInfo.frag.out "$TARGETDIR/spv.debugInfo.frag.out" || HASERROR=1 run -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \ - -V -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.1.1.frag.out -diff -b $BASEDIR/spv.debugInfo.1.1.frag.out $TARGETDIR/spv.debugInfo.1.1.frag.out || HASERROR=1 + -V -H spv.debugInfo.frag --rsb frag 3 > "$TARGETDIR/spv.debugInfo.1.1.frag.out" +diff -b $BASEDIR/spv.debugInfo.1.1.frag.out "$TARGETDIR/spv.debugInfo.1.1.frag.out" || HASERROR=1 run -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --spirv-val --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \ - --sep origMain -H -Od spv.hlslDebugInfo.vert --rsb vert t0 0 0 > $TARGETDIR/spv.hlslDebugInfo.frag.out -diff -b $BASEDIR/spv.hlslDebugInfo.frag.out $TARGETDIR/spv.hlslDebugInfo.frag.out || HASERROR=1 + --sep origMain -H -Od spv.hlslDebugInfo.vert --rsb vert t0 0 0 > "$TARGETDIR/spv.hlslDebugInfo.frag.out" +diff -b $BASEDIR/spv.hlslDebugInfo.frag.out "$TARGETDIR/spv.hlslDebugInfo.frag.out" || HASERROR=1 # # Testing Includer # echo Testing Includer -run -D -Od -e main -H -Od ../Test/hlsl.include.vert > $TARGETDIR/hlsl.include.vert.out -diff -b $BASEDIR/hlsl.include.vert.out $TARGETDIR/hlsl.include.vert.out || HASERROR=1 -run -D -Od -e main -H -Od hlsl.includeNegative.vert > $TARGETDIR/hlsl.includeNegative.vert.out -diff -b $BASEDIR/hlsl.includeNegative.vert.out $TARGETDIR/hlsl.includeNegative.vert.out || HASERROR=1 -run -l -i include.vert > $TARGETDIR/include.vert.out -diff -b $BASEDIR/include.vert.out $TARGETDIR/include.vert.out || HASERROR=1 -run -D -Od -e main -H -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out -diff -b $BASEDIR/hlsl.dashI.vert.out $TARGETDIR/hlsl.dashI.vert.out || HASERROR=1 -run -D -Od -e MainPs -H -Od -g hlsl.pp.line3.frag > $TARGETDIR/hlsl.pp.line3.frag.out -diff -b $BASEDIR/hlsl.pp.line3.frag.out $TARGETDIR/hlsl.pp.line3.frag.out || HASERROR=1 +run -D -Od -e main -H -Od ../Test/hlsl.include.vert > "$TARGETDIR/hlsl.include.vert.out" +diff -b $BASEDIR/hlsl.include.vert.out "$TARGETDIR/hlsl.include.vert.out" || HASERROR=1 +run -D -Od -e main -H -Od hlsl.includeNegative.vert > "$TARGETDIR/hlsl.includeNegative.vert.out" +diff -b $BASEDIR/hlsl.includeNegative.vert.out "$TARGETDIR/hlsl.includeNegative.vert.out" || HASERROR=1 +run -l -i include.vert > "$TARGETDIR/include.vert.out" +diff -b $BASEDIR/include.vert.out "$TARGETDIR/include.vert.out" || HASERROR=1 +run -D -Od -e main -H -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > "$TARGETDIR/hlsl.dashI.vert.out" +diff -b $BASEDIR/hlsl.dashI.vert.out "$TARGETDIR/hlsl.dashI.vert.out" || HASERROR=1 +run -D -Od -e MainPs -H -Od -g hlsl.pp.line3.frag > "$TARGETDIR/hlsl.pp.line3.frag.out" +diff -b $BASEDIR/hlsl.pp.line3.frag.out "$TARGETDIR/hlsl.pp.line3.frag.out" || HASERROR=1 # # Testing --depfile # echo "Testing --depfile" -run -D -Od -e main -H --depfile $TARGETDIR/hlsl.include.vert.d.out -Od ../Test/hlsl.include.vert > $TARGETDIR/hlsl.include.vert.out -diff -b $BASEDIR/hlsl.include.vert.d.out $TARGETDIR/hlsl.include.vert.d.out || HASERROR=1 -run -D -Od -e main -H --depfile $TARGETDIR/hlsl.dashI.vert.d.out -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out -diff -b $BASEDIR/hlsl.dashI.vert.d.out $TARGETDIR/hlsl.dashI.vert.d.out || HASERROR=1 +run -D -Od -e main -H --depfile "$TARGETDIR/hlsl.include.vert.d.out" -Od ../Test/hlsl.include.vert > "$TARGETDIR/hlsl.include.vert.out" +diff -b $BASEDIR/hlsl.include.vert.d.out "$TARGETDIR/hlsl.include.vert.d.out" || HASERROR=1 +run -D -Od -e main -H --depfile "$TARGETDIR/hlsl.dashI.vert.d.out" -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > "$TARGETDIR/hlsl.dashI.vert.out" +diff -b $BASEDIR/hlsl.dashI.vert.d.out "$TARGETDIR/hlsl.dashI.vert.d.out" || HASERROR=1 # -# Testing -D and -U +# Testing -D, -U and -P # -echo "Testing -D and -U" -run -DUNDEFED -UIN_SHADER -DFOO=200 -i -l --U UNDEFED --define-macro MUL=FOO*2 glsl.-D-U.frag > $TARGETDIR/glsl.-D-U.frag.out -diff -b $BASEDIR/glsl.-D-U.frag.out $TARGETDIR/glsl.-D-U.frag.out || HASERROR=1 -run -D -Od -e main -V -i -DUNDEFED -UIN_SHADER --D FOO=200 --undef-macro UNDEFED -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out -diff -b $BASEDIR/hlsl.-D-U.frag.out $TARGETDIR/hlsl.-D-U.frag.out || HASERROR=1 +echo "Testing -D, -U and -P" +run -DUNDEFED -UIN_SHADER -DFOO=200 -i -l --U UNDEFED --define-macro MUL=FOO*2 glsl.-D-U.frag > "$TARGETDIR/glsl.-D-U.frag.out" +diff -b $BASEDIR/glsl.-D-U.frag.out "$TARGETDIR/glsl.-D-U.frag.out" || HASERROR=1 +run -D -Od -e main -V -i -DUNDEFED -UIN_SHADER --D FOO=200 --undef-macro UNDEFED -Od hlsl.-D-U.frag > "$TARGETDIR/hlsl.-D-U.frag.out" +diff -b $BASEDIR/hlsl.-D-U.frag.out "$TARGETDIR/hlsl.-D-U.frag.out" || HASERROR=1 +run -P"#define TEST1" -i -l --preamble-text "#define TEST2" --p "#define TEST3" glsl.-P.frag > "$TARGETDIR/glsl.-P.frag.out" +diff -b $BASEDIR/glsl.-P.frag.out "$TARGETDIR/glsl.-P.frag.out" || HASERROR=1 +run -i -l --preamble-text "vec4 getColor() { return vec4(1.0); }" glsl.-P.function.frag > "$TARGETDIR/glsl.-P.function.frag.out" +diff -b $BASEDIR/glsl.-P.function.frag.out "$TARGETDIR/glsl.-P.function.frag.out" || HASERROR=1 +run -i -l --preamble-text "#extension GL_GOOGLE_include_directive : require" -I. glsl.-P.include.frag > "$TARGETDIR/glsl.-P.include.frag.out" +diff -b $BASEDIR/glsl.-P.include.frag.out "$TARGETDIR/glsl.-P.include.frag.out" || HASERROR=1 # # Test --client and --target-env @@ -227,76 +237,130 @@ run --target-env spirv1.2 -V spv.targetVulkan.vert || HASERROR=1 # Testing GLSL entry point rename # echo "Testing GLSL entry point rename" -run -H -e foo --source-entrypoint main glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.out -diff -b $BASEDIR/glsl.entryPointRename.vert.out $TARGETDIR/glsl.entryPointRename.vert.out || HASERROR=1 -run -H -e foo --source-entrypoint bar glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.bad.out -diff -b $BASEDIR/glsl.entryPointRename.vert.bad.out $TARGETDIR/glsl.entryPointRename.vert.bad.out || HASERROR=1 -run -H -e foo --source-entrypoint main glsl.entryPointRename2.vert > $TARGETDIR/glsl.entryPointRename2.vert.out -diff -b $BASEDIR/glsl.entryPointRename2.vert.out $TARGETDIR/glsl.entryPointRename2.vert.out || HASERROR=1 +run -H -e foo --source-entrypoint main glsl.entryPointRename.vert > "$TARGETDIR/glsl.entryPointRename.vert.out" +diff -b $BASEDIR/glsl.entryPointRename.vert.out "$TARGETDIR/glsl.entryPointRename.vert.out" || HASERROR=1 +run -H -e foo --source-entrypoint bar glsl.entryPointRename.vert > "$TARGETDIR/glsl.entryPointRename.vert.bad.out" +diff -b $BASEDIR/glsl.entryPointRename.vert.bad.out "$TARGETDIR/glsl.entryPointRename.vert.bad.out" || HASERROR=1 +run -H -e foo --source-entrypoint main glsl.entryPointRename2.vert > "$TARGETDIR/glsl.entryPointRename2.vert.out" +diff -b $BASEDIR/glsl.entryPointRename2.vert.out "$TARGETDIR/glsl.entryPointRename2.vert.out" || HASERROR=1 # # Testing remapper error handling # echo "Testing remapper error handling" -$REMAPEXE --do-everything -i remap.invalid-spirv-1.spv -o $TARGETDIR > $TARGETDIR/remap.invalid-spirv-1.out && HASERROR=1 -diff -b $BASEDIR/remap.invalid-spirv-1.out $TARGETDIR/remap.invalid-spirv-1.out || HASERROR=1 -$REMAPEXE --do-everything -i remap.invalid-spirv-2.spv -o $TARGETDIR > $TARGETDIR/remap.invalid-spirv-2.out && HASERROR=1 -diff -b $BASEDIR/remap.invalid-spirv-2.out $TARGETDIR/remap.invalid-spirv-2.out || HASERROR=1 +"$REMAPEXE" --do-everything -i remap.invalid-spirv-1.spv -o "$TARGETDIR" > "$TARGETDIR/remap.invalid-spirv-1.out" && HASERROR=1 +diff -b $BASEDIR/remap.invalid-spirv-1.out "$TARGETDIR/remap.invalid-spirv-1.out" || HASERROR=1 +"$REMAPEXE" --do-everything -i remap.invalid-spirv-2.spv -o "$TARGETDIR" > "$TARGETDIR/remap.invalid-spirv-2.out" && HASERROR=1 +diff -b $BASEDIR/remap.invalid-spirv-2.out "$TARGETDIR/remap.invalid-spirv-2.out" || HASERROR=1 # # Testing position Y inversion # echo "Testing position Y inversion" -run -H -e main -V -D -Od -H -i --iy hlsl.y-negate-1.vert > $TARGETDIR/hlsl.y-negate-1.vert.out -diff -b $BASEDIR/hlsl.y-negate-1.vert.out $TARGETDIR/hlsl.y-negate-1.vert.out || HASERROR=1 -run -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-2.vert > $TARGETDIR/hlsl.y-negate-2.vert.out -diff -b $BASEDIR/hlsl.y-negate-2.vert.out $TARGETDIR/hlsl.y-negate-2.vert.out || HASERROR=1 -run -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-3.vert > $TARGETDIR/hlsl.y-negate-3.vert.out -diff -b $BASEDIR/hlsl.y-negate-3.vert.out $TARGETDIR/hlsl.y-negate-3.vert.out || HASERROR=1 +run -H -e main -V -D -Od -H -i --iy hlsl.y-negate-1.vert > "$TARGETDIR/hlsl.y-negate-1.vert.out" +diff -b $BASEDIR/hlsl.y-negate-1.vert.out "$TARGETDIR/hlsl.y-negate-1.vert.out" || HASERROR=1 +run -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-2.vert > "$TARGETDIR/hlsl.y-negate-2.vert.out" +diff -b $BASEDIR/hlsl.y-negate-2.vert.out "$TARGETDIR/hlsl.y-negate-2.vert.out" || HASERROR=1 +run -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-3.vert > "$TARGETDIR/hlsl.y-negate-3.vert.out" +diff -b $BASEDIR/hlsl.y-negate-3.vert.out "$TARGETDIR/hlsl.y-negate-3.vert.out" || HASERROR=1 # # Testing position W reciprocal # echo "Testing position W reciprocal" -run -H -e main -V -D -Od -H -i --hlsl-dx-position-w hlsl.w-recip.frag > $TARGETDIR/hlsl.w-recip.frag.out -diff -b $BASEDIR/hlsl.w-recip.frag.out $TARGETDIR/hlsl.w-recip.frag.out || HASERROR=1 -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 +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" run -H -e main -D -Od -fhlsl_functionality1 hlsl.structbuffer.incdec.frag > \ - $TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out -diff -b $BASEDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out $TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out || HASERROR=1 + "$TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out" +diff -b $BASEDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out "$TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out" || HASERROR=1 run -H -e main -D -Od -fhlsl_functionality1 hlsl.noSemantic.functionality1.comp > \ - $TARGETDIR/hlsl.noSemantic.functionality1.comp.out -diff -b $BASEDIR/hlsl.noSemantic.functionality1.comp.out $TARGETDIR/hlsl.noSemantic.functionality1.comp.out || HASERROR=1 + "$TARGETDIR/hlsl.noSemantic.functionality1.comp.out" +diff -b $BASEDIR/hlsl.noSemantic.functionality1.comp.out "$TARGETDIR/hlsl.noSemantic.functionality1.comp.out" || HASERROR=1 # # Testing HLSL-specific PP feature expansion # echo "Testing HLSL-specific PP feature expansion" -run -D -E hlsl.pp.expand.frag > $TARGETDIR/hlsl.pp.expand.frag.out 2> $TARGETDIR/hlsl.pp.expand.frag.err -diff -b $BASEDIR/hlsl.pp.expand.frag.out $TARGETDIR/hlsl.pp.expand.frag.out || HASERROR=1 -diff -b $BASEDIR/hlsl.pp.expand.frag.err $TARGETDIR/hlsl.pp.expand.frag.err || HASERROR=1 +run -D -E hlsl.pp.expand.frag > "$TARGETDIR/hlsl.pp.expand.frag.out" 2> "$TARGETDIR/hlsl.pp.expand.frag.err" +diff -b $BASEDIR/hlsl.pp.expand.frag.out "$TARGETDIR/hlsl.pp.expand.frag.out" || HASERROR=1 +diff -b $BASEDIR/hlsl.pp.expand.frag.err "$TARGETDIR/hlsl.pp.expand.frag.err" || HASERROR=1 # # Test --nan-clamp # echo "Testing nan-clamp" -run --nan-clamp -H --aml --amb spv.400.frag > $TARGETDIR/spv.400.frag.nanclamp.out -diff -b $BASEDIR/spv.400.frag.nanclamp.out $TARGETDIR/spv.400.frag.nanclamp.out || HASERROR=1 +run --nan-clamp -H --aml --amb spv.400.frag > "$TARGETDIR/spv.400.frag.nanclamp.out" +diff -b $BASEDIR/spv.400.frag.nanclamp.out "$TARGETDIR/spv.400.frag.nanclamp.out" || HASERROR=1 # # Test --auto-sampled-textures # echo "Testing auto-sampled-textures" -run --auto-sampled-textures -H -Od -e MainPs -D -S frag hlsl.autosampledtextures.frag > $TARGETDIR/hlsl.autosampledtextures.frag.out -diff -b $BASEDIR/hlsl.autosampledtextures.frag.out $TARGETDIR/hlsl.autosampledtextures.frag.out || HASERROR=1 -run --auto-sampled-textures -H -Od -S frag glsl.autosampledtextures.frag > $TARGETDIR/glsl.autosampledtextures.frag.out -diff -b $BASEDIR/glsl.autosampledtextures.frag.out $TARGETDIR/glsl.autosampledtextures.frag.out || HASERROR=1 +run --auto-sampled-textures -H -Od -e MainPs -D -S frag hlsl.autosampledtextures.frag > "$TARGETDIR/hlsl.autosampledtextures.frag.out" +diff -b $BASEDIR/hlsl.autosampledtextures.frag.out "$TARGETDIR/hlsl.autosampledtextures.frag.out" || HASERROR=1 +run --auto-sampled-textures -H -Od -S frag glsl.autosampledtextures.frag > "$TARGETDIR/glsl.autosampledtextures.frag.out" +diff -b $BASEDIR/glsl.autosampledtextures.frag.out "$TARGETDIR/glsl.autosampledtextures.frag.out" || HASERROR=1 + +# 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 + +# +# Test error column +# +echo "Testing error-column" +run --error-column -C -V error-column.vert > "$TARGETDIR/error-column.vert.out" +diff -b $BASEDIR/error-column.vert.out $TARGETDIR/error-column.vert.out || HASERROR=1 + +# +# Test UTF8BOM +# +echo "Testing UTF8BOM" +run --glsl-version 410 -V -S vert UTF8BOM.vert > $TARGETDIR/UTF8BOM.vert.out +diff -b $BASEDIR/UTF8BOM.vert.out $TARGETDIR/UTF8BOM.vert.out || HASERROR=1 # # Final checking diff --git a/Test/spv.1.6.helperInvocation.memmodel.frag b/Test/spv.1.6.helperInvocation.memmodel.frag new file mode 100644 index 0000000000..b727f8e0ea --- /dev/null +++ b/Test/spv.1.6.helperInvocation.memmodel.frag @@ -0,0 +1,16 @@ +#version 310 es + +#pragma use_vulkan_memory_model + +#extension GL_EXT_demote_to_helper_invocation : require + +precision highp float; + +layout (set=0, binding=0) buffer B { + float o; +}; + +void main() { + demote; + o = gl_HelperInvocation ? 1.0 : 0.0; +} diff --git a/Test/spv.1.6.quad.frag b/Test/spv.1.6.quad.frag new file mode 100644 index 0000000000..24f72de9f2 --- /dev/null +++ b/Test/spv.1.6.quad.frag @@ -0,0 +1,21 @@ +#version 460 core +#extension GL_KHR_shader_subgroup_basic: require +#extension GL_EXT_shader_quad_control: require +#extension GL_KHR_shader_subgroup_vote: require + +layout (full_quads) in; +layout (quad_derivatives) in; + +flat in int iInput; + +out int bOut; + + +void main(){ + bool bTemp = false; + + // EXT_shader_quad_control required begin + bTemp = bTemp || subgroupQuadAll(iInput > 0); // GL_KHR_shader_subgroup_vote + bTemp = bTemp || subgroupQuadAny(iInput > 0); // GL_KHR_shader_subgroup_vote + bOut = bTemp == true ? 1 : 0; +} \ No newline at end of file diff --git a/Test/spv.1.6.samplerBuffer.frag b/Test/spv.1.6.samplerBuffer.frag new file mode 100644 index 0000000000..d12ff3df84 --- /dev/null +++ b/Test/spv.1.6.samplerBuffer.frag @@ -0,0 +1,11 @@ +#version 140 + +out vec4 o; + +uniform isamplerBuffer sampB; + +void main() +{ + o.w = float(textureSize(sampB)) / 100.0; +} + diff --git a/Test/spv.1.6.separate.frag b/Test/spv.1.6.separate.frag new file mode 100644 index 0000000000..3e51be4820 --- /dev/null +++ b/Test/spv.1.6.separate.frag @@ -0,0 +1,14 @@ +#version 400 + +uniform sampler s; + +uniform textureBuffer texBuffer; +uniform itextureBuffer itexBuffer; +uniform utextureBuffer utexBuffer; + +void main() +{ + samplerBuffer (texBuffer, s); + isamplerBuffer (itexBuffer, s); + usamplerBuffer (utexBuffer, s); +} diff --git a/Test/spv.16bitstorage-int.frag b/Test/spv.16bitstorage-int.frag index 57be67ee95..7252bfebe7 100644 --- a/Test/spv.16bitstorage-int.frag +++ b/Test/spv.16bitstorage-int.frag @@ -86,5 +86,8 @@ void main() b2.o = b2.p.x; b2.p = i16vec2(ivec2(1, 2)); b2.o = int16_t(3); + b2.o = int16_t(b1.a); + b2.p = i16vec2(b1.b); + b2.q = i16vec3(b1.c); } diff --git a/Test/spv.16bitstorage-uint.frag b/Test/spv.16bitstorage-uint.frag index aeecd0419c..104aaf5ffe 100644 --- a/Test/spv.16bitstorage-uint.frag +++ b/Test/spv.16bitstorage-uint.frag @@ -86,5 +86,8 @@ void main() b2.o = b2.p.x; b2.p = u16vec2(uvec2(1, 2)); b2.o = uint16_t(3u); + b2.o = uint16_t(b1.a); + b2.p = u16vec2(b1.b); + b2.q = u16vec3(b1.c); } diff --git a/Test/spv.16bitstorage.frag b/Test/spv.16bitstorage.frag index b821be1e1a..032629b000 100644 --- a/Test/spv.16bitstorage.frag +++ b/Test/spv.16bitstorage.frag @@ -86,5 +86,8 @@ void main() b2.o = b2.p.x; b2.p = f16vec2(vec2(1.0, 2.0)); b2.o = float16_t(3.0); + b2.o = float16_t(b1.a); + b2.p = f16vec2(b1.b); + b2.q = f16vec3(b1.c); } diff --git a/Test/spv.460.subgroupEXT.mesh b/Test/spv.460.subgroupEXT.mesh new file mode 100644 index 0000000000..8ccc14e2ee --- /dev/null +++ b/Test/spv.460.subgroupEXT.mesh @@ -0,0 +1,164 @@ +#version 460 + +#define MAX_VER 81 +#define MAX_PRIM 32 + +#define BARRIER() \ + memoryBarrierShared(); \ + barrier(); + +#extension GL_EXT_mesh_shader : enable + +layout(local_size_x = 32, local_size_y=1, local_size_z=1) in; + +layout(max_vertices=MAX_VER) out; +layout(max_primitives=MAX_PRIM) out; +layout(triangles) out; + +// test use of builtins in mesh shaders: + +void main() +{ + uint iid = gl_LocalInvocationID.x; + uint gid = gl_WorkGroupID.x; + uint vertexCount = MAX_VER; // vertexCount <= max_vertices + uint primitiveCount = MAX_PRIM; // primitiveCount <= max_primtives + SetMeshOutputsEXT(vertexCount, primitiveCount); + + gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0); + gl_MeshVerticesEXT[iid].gl_PointSize = 2.0; + gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0; + gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0; + + BARRIER(); + + gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position; + gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize; + gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3]; + gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2]; + + BARRIER(); + + gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6; + gl_MeshPrimitivesEXT[iid].gl_Layer = 7; + gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8; + gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false; + + BARRIER(); + + gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID; + gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer; + gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex; + gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = false; + + BARRIER(); + + // check bound limits + gl_PrimitiveTriangleIndicesEXT[0] = uvec3(1, 1, 1); // range is between [0, vertexCount-1] + gl_PrimitiveTriangleIndicesEXT[primitiveCount - 1] = uvec3(2, 2, 2); // array size is primitiveCount*3 for triangle + gl_PrimitiveTriangleIndicesEXT[gid] = gl_PrimitiveTriangleIndicesEXT[gid-1]; + + + BARRIER(); +} + +#extension GL_KHR_shader_subgroup_basic: enable +void basic_works (void) +{ + gl_SubgroupSize; + gl_SubgroupInvocationID; + subgroupBarrier(); + subgroupMemoryBarrier(); + subgroupMemoryBarrierBuffer(); + subgroupMemoryBarrierImage(); + subgroupElect(); + gl_NumSubgroups; // allowed in mesh + gl_SubgroupID; // allowed in mesh + subgroupMemoryBarrierShared(); // allowed in mesh +} + +#extension GL_KHR_shader_subgroup_ballot: enable +void ballot_works(vec4 f4) { + gl_SubgroupEqMask; + gl_SubgroupGeMask; + gl_SubgroupGtMask; + gl_SubgroupLeMask; + gl_SubgroupLtMask; + subgroupBroadcast(f4, 0); + subgroupBroadcastFirst(f4); + uvec4 ballot = subgroupBallot(false); + subgroupInverseBallot(uvec4(0x1)); + subgroupBallotBitExtract(ballot, 0); + subgroupBallotBitCount(ballot); + subgroupBallotInclusiveBitCount(ballot); + subgroupBallotExclusiveBitCount(ballot); + subgroupBallotFindLSB(ballot); + subgroupBallotFindMSB(ballot); +} + +#extension GL_KHR_shader_subgroup_vote: enable +void vote_works(vec4 f4) +{ + subgroupAll(true); + subgroupAny(false); + subgroupAllEqual(f4); +} + +#extension GL_KHR_shader_subgroup_shuffle: enable +#extension GL_KHR_shader_subgroup_shuffle_relative: enable +void shuffle_works(vec4 f4) +{ + subgroupShuffle(f4, 0); + subgroupShuffleXor(f4, 0x1); + subgroupShuffleUp(f4, 1); + subgroupShuffleDown(f4, 1); +} + +#extension GL_KHR_shader_subgroup_arithmetic: enable +void arith_works(vec4 f4) +{ + uvec4 ballot; + subgroupAdd(f4); + subgroupMul(f4); + subgroupMin(f4); + subgroupMax(f4); + subgroupAnd(ballot); + subgroupOr(ballot); + subgroupXor(ballot); + subgroupInclusiveAdd(f4); + subgroupInclusiveMul(f4); + subgroupInclusiveMin(f4); + subgroupInclusiveMax(f4); + subgroupInclusiveAnd(ballot); + subgroupInclusiveOr(ballot); + subgroupInclusiveXor(ballot); + subgroupExclusiveAdd(f4); + subgroupExclusiveMul(f4); + subgroupExclusiveMin(f4); + subgroupExclusiveMax(f4); + subgroupExclusiveAnd(ballot); + subgroupExclusiveOr(ballot); + subgroupExclusiveXor(ballot); +} + +#extension GL_KHR_shader_subgroup_clustered: enable +void clustered_works(vec4 f4) +{ + uvec4 ballot = uvec4(0x55,0,0,0); + subgroupClusteredAdd(f4, 2); + subgroupClusteredMul(f4, 2); + subgroupClusteredMin(f4, 2); + subgroupClusteredMax(f4, 2); + subgroupClusteredAnd(ballot, 2); + subgroupClusteredOr(ballot, 2); + subgroupClusteredXor(ballot, 2); +} + +#extension GL_KHR_shader_subgroup_quad: enable +void quad_works(vec4 f4) +{ + subgroupQuadBroadcast(f4, 0); + subgroupQuadSwapHorizontal(f4); + subgroupQuadSwapVertical(f4); + subgroupQuadSwapDiagonal(f4); +} diff --git a/Test/spv.460.subgroupEXT.task b/Test/spv.460.subgroupEXT.task new file mode 100644 index 0000000000..cffe98e3bd --- /dev/null +++ b/Test/spv.460.subgroupEXT.task @@ -0,0 +1,153 @@ +#version 460 + + +#define BARRIER() \ + memoryBarrierShared(); \ + barrier(); + +#extension GL_EXT_mesh_shader : enable + +layout(local_size_x = 32, local_size_y=1, local_size_z=1) in; + +// test use of shared memory in task shaders: +layout(binding=0) writeonly uniform image2D uni_image; +uniform block0 { + uint uni_value; +}; +shared vec4 mem[10]; + +// test use of task memory in task shaders: +struct Task { + vec2 dummy; + vec2 submesh[3]; +}; + +taskPayloadSharedEXT Task mytask; +void main() +{ + uint iid = gl_LocalInvocationID.x; + uint gid = gl_WorkGroupID.x; + + // 1. shared memory load and stores + for (uint i = 0; i < 10; ++i) { + mem[i] = vec4(i + uni_value); + } + imageStore(uni_image, ivec2(iid), mem[gid]); + imageStore(uni_image, ivec2(iid), mem[gid+1]); + + BARRIER(); + + // 2. task memory stores + + mytask.dummy = vec2(30.0, 31.0); + mytask.submesh[0] = vec2(32.0, 33.0); + mytask.submesh[1] = vec2(34.0, 35.0); + mytask.submesh[2] = mytask.submesh[gid%2]; + + BARRIER(); + + // 3. emit task count under uniform control flow + EmitMeshTasksEXT(3U, 1U, 1U); +} + +#extension GL_KHR_shader_subgroup_basic: enable +void basic_works (void) +{ + gl_SubgroupSize; + gl_SubgroupInvocationID; + subgroupBarrier(); + subgroupMemoryBarrier(); + subgroupMemoryBarrierBuffer(); + subgroupMemoryBarrierImage(); + subgroupElect(); + gl_NumSubgroups; // allowed in task + gl_SubgroupID; // allowed in task + subgroupMemoryBarrierShared(); // allowed in task +} + +#extension GL_KHR_shader_subgroup_ballot: enable +void ballot_works(vec4 f4) { + gl_SubgroupEqMask; + gl_SubgroupGeMask; + gl_SubgroupGtMask; + gl_SubgroupLeMask; + gl_SubgroupLtMask; + subgroupBroadcast(f4, 0); + subgroupBroadcastFirst(f4); + uvec4 ballot = subgroupBallot(false); + subgroupInverseBallot(uvec4(0x1)); + subgroupBallotBitExtract(ballot, 0); + subgroupBallotBitCount(ballot); + subgroupBallotInclusiveBitCount(ballot); + subgroupBallotExclusiveBitCount(ballot); + subgroupBallotFindLSB(ballot); + subgroupBallotFindMSB(ballot); +} + +#extension GL_KHR_shader_subgroup_vote: enable +void vote_works(vec4 f4) +{ + subgroupAll(true); + subgroupAny(false); + subgroupAllEqual(f4); +} + +#extension GL_KHR_shader_subgroup_shuffle: enable +#extension GL_KHR_shader_subgroup_shuffle_relative: enable +void shuffle_works(vec4 f4) +{ + subgroupShuffle(f4, 0); + subgroupShuffleXor(f4, 0x1); + subgroupShuffleUp(f4, 1); + subgroupShuffleDown(f4, 1); +} + +#extension GL_KHR_shader_subgroup_arithmetic: enable +void arith_works(vec4 f4) +{ + uvec4 ballot; + subgroupAdd(f4); + subgroupMul(f4); + subgroupMin(f4); + subgroupMax(f4); + subgroupAnd(ballot); + subgroupOr(ballot); + subgroupXor(ballot); + subgroupInclusiveAdd(f4); + subgroupInclusiveMul(f4); + subgroupInclusiveMin(f4); + subgroupInclusiveMax(f4); + subgroupInclusiveAnd(ballot); + subgroupInclusiveOr(ballot); + subgroupInclusiveXor(ballot); + subgroupExclusiveAdd(f4); + subgroupExclusiveMul(f4); + subgroupExclusiveMin(f4); + subgroupExclusiveMax(f4); + subgroupExclusiveAnd(ballot); + subgroupExclusiveOr(ballot); + subgroupExclusiveXor(ballot); +} + +#extension GL_KHR_shader_subgroup_clustered: enable +void clustered_works(vec4 f4) +{ + uvec4 ballot = uvec4(0x55,0,0,0); + subgroupClusteredAdd(f4, 2); + subgroupClusteredMul(f4, 2); + subgroupClusteredMin(f4, 2); + subgroupClusteredMax(f4, 2); + subgroupClusteredAnd(ballot, 2); + subgroupClusteredOr(ballot, 2); + subgroupClusteredXor(ballot, 2); +} + +#extension GL_KHR_shader_subgroup_quad: enable +void quad_works(vec4 f4) +{ + subgroupQuadBroadcast(f4, 0); + subgroupQuadSwapHorizontal(f4); + subgroupQuadSwapVertical(f4); + subgroupQuadSwapDiagonal(f4); +} + diff --git a/Test/spv.8bitstorage-int.frag b/Test/spv.8bitstorage-int.frag index 93203c36cd..09d95b99c1 100644 --- a/Test/spv.8bitstorage-int.frag +++ b/Test/spv.8bitstorage-int.frag @@ -86,5 +86,8 @@ void main() b2.o = b2.p.x; b2.p = i8vec2(ivec2(1, 2)); b2.o = int8_t(3); + b2.o = int8_t(b1.a); + b2.p = i8vec2(b1.b); + b2.q = i8vec3(b1.c); } diff --git a/Test/spv.8bitstorage-uint.frag b/Test/spv.8bitstorage-uint.frag index 574d088edc..3a3b181686 100644 --- a/Test/spv.8bitstorage-uint.frag +++ b/Test/spv.8bitstorage-uint.frag @@ -86,5 +86,8 @@ void main() b2.o = b2.p.x; b2.p = u8vec2(uvec2(1, 2)); b2.o = uint8_t(3u); + b2.o = uint8_t(b1.a); + b2.p = u8vec2(b1.b); + b2.q = u8vec3(b1.c); } diff --git a/Test/spv.ARMCoreBuiltIns.frag b/Test/spv.ARMCoreBuiltIns.frag new file mode 100644 index 0000000000..deb3e55395 --- /dev/null +++ b/Test/spv.ARMCoreBuiltIns.frag @@ -0,0 +1,8 @@ +#version 450 +#extension GL_ARM_shader_core_builtins: enable +layout(location = 0) out uvec4 data; +void main (void) +{ + uint temp = gl_WarpMaxIDARM; + data = uvec4(gl_CoreIDARM, gl_CoreCountARM, gl_CoreMaxIDARM, gl_WarpIDARM + temp); +} diff --git a/Test/spv.ARMCoreBuiltIns.vert b/Test/spv.ARMCoreBuiltIns.vert new file mode 100644 index 0000000000..2bed18e893 --- /dev/null +++ b/Test/spv.ARMCoreBuiltIns.vert @@ -0,0 +1,12 @@ +#version 450 +#extension GL_ARM_shader_core_builtins: enable +layout(set = 0, binding = 0, std430) buffer Output +{ + uvec4 result; +}; + +void main (void) +{ + uint temp = gl_WarpMaxIDARM; + result = uvec4(gl_CoreIDARM, gl_CoreCountARM, gl_CoreMaxIDARM, gl_WarpIDARM + temp); +} diff --git a/Test/spv.atomiAddEXT.error.mesh b/Test/spv.atomiAddEXT.error.mesh new file mode 100644 index 0000000000..5d4247db28 --- /dev/null +++ b/Test/spv.atomiAddEXT.error.mesh @@ -0,0 +1,22 @@ +#version 460 +#extension GL_EXT_mesh_shader : enable + +#define MAX_VER 81 +#define MAX_PRIM 32 + +layout(local_size_x = 1) in; + +layout(max_vertices=MAX_VER) out; +layout(max_primitives=MAX_PRIM) out; +layout(triangles) out; + +// use of storage qualifier "taskPayloadSharedEXT" in mesh shaders: +struct taskBlock { + int atom1; +}; +taskPayloadSharedEXT taskBlock mytask; + + +void main() { + atomicAdd(mytask.atom1, 1); +} \ No newline at end of file diff --git a/Test/spv.atomiAddEXT.task b/Test/spv.atomiAddEXT.task new file mode 100644 index 0000000000..703117dd9a --- /dev/null +++ b/Test/spv.atomiAddEXT.task @@ -0,0 +1,27 @@ +#version 460 +#extension GL_EXT_mesh_shader : enable + +layout(local_size_x = 1) in; + +struct structType{ + int y[3]; +}; + +layout(std430) buffer t2 { + structType f; +} t; + +buffer coherent Buffer { int x; }; + +// use of storage qualifier "taskPayloadSharedEXT" in mesh shaders: +struct taskBlock { + int atom1; +}; +taskPayloadSharedEXT taskBlock mytask; + + +void main() { + atomicAdd(x, 1); + atomicAdd(t.f.y[1], 1); + atomicAdd(mytask.atom1, 1); +} \ No newline at end of file diff --git a/Test/spv.atomicRvalue.error.vert b/Test/spv.atomicRvalue.error.vert new file mode 100644 index 0000000000..74b7c3bdbe --- /dev/null +++ b/Test/spv.atomicRvalue.error.vert @@ -0,0 +1,7 @@ +#version 440 + +void main() { + uint a = 5; + atomicAdd(a * 2, 0); + atomicAdd(a, 0); +} diff --git a/Test/spv.bufferhandle8.frag b/Test/spv.bufferhandle8.frag index 1bc13c3cfa..92651355c4 100644 --- a/Test/spv.bufferhandle8.frag +++ b/Test/spv.bufferhandle8.frag @@ -27,6 +27,8 @@ layout(set=0, binding=0) buffer T3 { Blah Bindings[]; } t3; + void main() { + Blah x = t3.Bindings[2]; t3.Bindings[0] = t3.Bindings[1]; } diff --git a/Test/spv.computeShaderDerivativesSpec.comp b/Test/spv.computeShaderDerivativesSpec.comp new file mode 100644 index 0000000000..dd452d371a --- /dev/null +++ b/Test/spv.computeShaderDerivativesSpec.comp @@ -0,0 +1,8 @@ +#version 450 +#extension GL_NV_compute_shader_derivatives : require + +layout (local_size_x_id = 0, local_size_y_id = 1) in; +layout(derivative_group_quadsNV) in; + +void main(){ +} diff --git a/Test/spv.computeShaderDerivativesSpec2.comp b/Test/spv.computeShaderDerivativesSpec2.comp new file mode 100644 index 0000000000..48310ef56c --- /dev/null +++ b/Test/spv.computeShaderDerivativesSpec2.comp @@ -0,0 +1,8 @@ +#version 320 es +#extension GL_NV_compute_shader_derivatives : require + +layout (local_size_x_id = 0, local_size_y_id = 1) in; +layout(derivative_group_linearNV) in; + +void main(){ +} diff --git a/Test/spv.coopmatKHR.comp b/Test/spv.coopmatKHR.comp new file mode 100644 index 0000000000..3bcee7f58e --- /dev/null +++ b/Test/spv.coopmatKHR.comp @@ -0,0 +1,121 @@ +#version 450 core +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_KHR_cooperative_matrix : enable +#extension GL_EXT_shader_explicit_arithmetic_types : enable +#extension GL_EXT_buffer_reference : enable + +layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; + +const int X = 8; +layout(constant_id = 0) const int Y = 2; +const int Z = X*Y; + +coopmat mC; +coopmat mC2[3]; + +layout(constant_id = 1) const float F = 3.0; + +const coopmat mD = coopmat(0.0); +const coopmat mD2 = coopmat(1); + +struct S { int a; int b; int c; }; + +const S s = S(12, 23, 34); + +layout(set = 0, binding = 0, buffer_reference) coherent buffer Block { + float y[1024*1024]; + float x[]; +} block; + +layout(set = 0, binding = 0) coherent buffer Block16 { + float16_t y[1024*1024]; + float16_t x[]; + + Block b; +} block16; + +coopmat f16(coopmat m) { return -m; } +coopmat f32(coopmat m) { return -m; } + +layout(constant_id = 2) const int SC = 1; +coopmat scm[SC][SC]; + +// sized for coopmat +shared uvec4 shmatrix[16*16*2/16]; + +void main() +{ + coopmat1?8:4), gl_MatrixUseAccumulator> m = coopmat1?8:4), gl_MatrixUseAccumulator>(0.0); + + m = m + m; + m = m - m; + m = -m; + m = 2.0*m; + m = m*2.0; + + coopmat m2 = coopmat(m); + + float x = m[1]; + m[0] = x; + + coopMatLoad(m, block.x, 16, 128, gl_CooperativeMatrixLayoutRowMajor); + coopMatStore(m, block.x, 16, 128, gl_CooperativeMatrixLayoutRowMajor); + coopMatLoad(m2, block16.x, 16, 128, gl_CooperativeMatrixLayoutRowMajor); + coopMatStore(m2, block16.x, 16, 128, gl_CooperativeMatrixLayoutRowMajor); + coopMatLoad(m, block16.b.x, 16, 128, gl_CooperativeMatrixLayoutRowMajor); + coopMatStore(m, block16.b.x, 16, 128, gl_CooperativeMatrixLayoutRowMajor); + + coopmat A; + coopmat B; + coopmat C; + coopmat D; + D = coopMatMulAdd(A, B, C); + + int l = D.length(); + + coopmat E; + + coopmat F = coopmat(0.0); + + coopmat1?8:4), gl_MatrixUseAccumulator> a[5]; + a[3][0] = 1.0; + + float md1 = mD[1]; + + md1 += (m += m)[1234]; + + mC2[1] = mC2[2]; + + coopMatLoad(m, block.y, 16, 128, gl_CooperativeMatrixLayoutRowMajor); + coopMatStore(m, block.y, 16, 128, gl_CooperativeMatrixLayoutRowMajor); + coopMatLoad(m2, block16.y, 16, 128, gl_CooperativeMatrixLayoutRowMajor); + coopMatStore(m2, block16.y, 16, 128, gl_CooperativeMatrixLayoutRowMajor); + + coopmat p1; + coopmat p2; + + p1 = f16(p1); + p2 = f32(p2); + + p1 = coopmat(0.0); + p2 = coopmat(0.0); + + p1 /= p1; + + p1 *= float16_t(2.0); + p2 *= 4.0; + + coopmat ms; + coopMatLoad(ms, shmatrix, 1, 2, gl_CooperativeMatrixLayoutRowMajor); + coopMatStore(ms, shmatrix, 1, 2, gl_CooperativeMatrixLayoutRowMajor); + + coopmat ms8A; + coopmat ms8B; + coopmat ms8C; + coopMatMulAdd(ms8A, ms8B, ms8C); + coopMatMulAdd(ms8A, ms8B, ms8C, 0); + coopMatMulAdd(ms8A, ms8B, ms8C, gl_MatrixOperandsSaturatingAccumulation); + + coopmat m16; + coopMatStore(m16, shmatrix, 1, 2, gl_CooperativeMatrixLayoutRowMajor); +} diff --git a/Test/spv.coopmatKHR_Error.comp b/Test/spv.coopmatKHR_Error.comp new file mode 100644 index 0000000000..f2e5a52626 --- /dev/null +++ b/Test/spv.coopmatKHR_Error.comp @@ -0,0 +1,69 @@ +#version 450 core +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_KHR_cooperative_matrix : enable +#extension GL_EXT_shader_explicit_arithmetic_types : enable + +layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; + +float<16> ftemplate16; + +coopmat fnoparams; + +struct S +{ + int s; +}; + +coopmat fbadtype; +coopmat fbadtype2; +coopmat<16, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> fbadtype3; + +coopmat fbadnumparams; + +int X = 8; + +coopmat fbadparam; + +layout(constant_id = 0) const int Y = 1; + +shared coopmat sharedmat; + +layout(set = 0, binding = 0) buffer InvBlock { + coopmat bufmat; +} invblock; + +void main() +{ + coopmat f32_16_8; + coopmat f16_16_8; + + // invalid implicit conversions + f32_16_8 = f16_16_8; + f32_16_8 = f16_16_8 + f16_16_8; + + coopmat f16_8_8; + + // mismatching dimensions + f16_16_8 = f16_8_8; + + coopmat f16_8_Y; + coopmat f16_8_Y1; + + // mismatching dimensions with specialization constants + f16_8_Y = f16_8_Y1; + + // wrong arguments for constructor + f16_8_8 = coopmat(1, 1); + + // can't construct from a builtin type + mat4 m4; + coopmat f32_4_4 = coopmat(m4); + + // only support a single array subscript + f16_16_8[0][0]; + + // don't support scalar component selection + f16_16_8.x; + + transpose(f16_8_8); +} diff --git a/Test/spv.coopmatKHR_arithmetic.comp b/Test/spv.coopmatKHR_arithmetic.comp new file mode 100644 index 0000000000..611de24d89 --- /dev/null +++ b/Test/spv.coopmatKHR_arithmetic.comp @@ -0,0 +1,85 @@ +#version 450 core +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_KHR_cooperative_matrix : enable +#extension GL_EXT_shader_explicit_arithmetic_types : enable + +layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; + + +void main() +{ + coopmat f; + coopmat f2; + coopmat f3; + + coopmat f16; + + coopmat u8; + coopmat i8; + coopmat u32; + + f+f; + f-f; + f*f; + f/f; + f+=f; + f-=f; + f*=f; + f/=f; + f*2.0; + 2.0*f; + f*=2.0; + + f16+f16; + f16-f16; + f16*f16; + f16/f16; + f16+=f16; + f16-=f16; + f16*=f16; + f16/=f16; + f16*float16_t(2.0); + float16_t(2.0)*f16; + f16*=float16_t(2.0); + + u32+u32; + u32-u32; + u32*u32; + u32/u32; + u32+=u32; + u32-=u32; + u32*=u32; + u32/=u32; + u32*uint32_t(2); + uint32_t(2)*u32; + u32*=uint32_t(2); + + u8+u8; + u8-u8; + u8*u8; + u8/u8; + u8+=u8; + u8-=u8; + u8*=u8; + u8/=u8; + u8*uint8_t(2); + uint8_t(2)*u8; + u8*=uint8_t(2); + + i8+i8; + i8-i8; + i8*i8; + i8/i8; + i8+=i8; + i8-=i8; + i8*=i8; + i8/=i8; + i8*int8_t(2); + int8_t(2)*i8; + i8*=int8_t(2); + + -f; + -f16; + -i8; + -u8; +} diff --git a/Test/spv.coopmatKHR_arithmeticError.comp b/Test/spv.coopmatKHR_arithmeticError.comp new file mode 100644 index 0000000000..57381cd8e7 --- /dev/null +++ b/Test/spv.coopmatKHR_arithmeticError.comp @@ -0,0 +1,87 @@ +#version 450 core +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_KHR_cooperative_matrix : enable +#extension GL_EXT_shader_explicit_arithmetic_types : enable + +layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; + + +void main() +{ + coopmat f; + coopmat f2; + coopmat f3; + + coopmat f16; + + coopmat u8; + coopmat i8; + coopmat i32; + + f+1.0; + f-1.0; + f/1.0; + 1.0+f; + 1.0-f; + 1.0/f; + f+=1.0; + f-=1.0; + f/=1.0; + + f+f16; + f-f16; + f*f16; + f/f16; + f+=f16; + f-=f16; + f*=f16; + f/=f16; + + f+f2; + f-f2; + f*f2; + f/f2; + f+=f2; + f-=f2; + f*=f2; + f/=f2; + + f+f3; + f-f3; + f*f3; + f/f3; + f+=f3; + f-=f3; + f*=f3; + f/=f3; + + u8+i8; + u8-i8; + u8*i8; + u8/i8; + u8+=i8; + u8-=i8; + u8*=i8; + u8/=i8; + + u8+uint8_t(1); + u8-uint8_t(1); + u8/uint8_t(1); + u8+=uint8_t(1); + u8-=uint8_t(1); + u8/=uint8_t(1); + + i8+int8_t(1); + i8-int8_t(1); + i8/int8_t(1); + i8+=int8_t(1); + i8-=int8_t(1); + i8/=int8_t(1); + + i32+1; + i32-1; + i32/1; + i32+=1; + i32-=1; + i32/=1; +} diff --git a/Test/spv.coopmatKHR_constructor.comp b/Test/spv.coopmatKHR_constructor.comp new file mode 100644 index 0000000000..b0f19bea65 --- /dev/null +++ b/Test/spv.coopmatKHR_constructor.comp @@ -0,0 +1,49 @@ +#version 450 core +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_KHR_cooperative_matrix : enable +#extension GL_EXT_shader_explicit_arithmetic_types : enable + +layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; + + +void main() +{ + +#define TESTCONST(T, BASE) \ + coopmat(coopmat(BASE+1.0)); \ + coopmat(coopmat(BASE+2.0)); \ + coopmat(coopmat(BASE+3)); \ + coopmat(coopmat(BASE+4)); \ + coopmat(coopmat(BASE+5)); \ + coopmat(coopmat(BASE+6)); \ + coopmat(coopmat(BASE+7)); \ + coopmat(coopmat(BASE+8)); + + TESTCONST(float, 0) + TESTCONST(float16_t, 10) + TESTCONST(uint32_t, 20) + TESTCONST(uint16_t, 30) + TESTCONST(uint8_t, 40) + TESTCONST(int32_t, 50) + TESTCONST(int16_t, 60) + TESTCONST(int8_t, 70) + +#define TESTVAR(T, BASE) \ + { coopmat v = coopmat(BASE+1.0); coopmat(v); } \ + { coopmat v = coopmat(BASE+2.0); coopmat(v); } \ + { coopmat v = coopmat(BASE+3); coopmat(v); } \ + { coopmat v = coopmat(BASE+4); coopmat(v); } \ + { coopmat v = coopmat(BASE+5); coopmat(v); } \ + { coopmat v = coopmat(BASE+6); coopmat(v); } \ + { coopmat v = coopmat(BASE+7); coopmat(v); } \ + { coopmat v = coopmat(BASE+8); coopmat(v); } + + TESTVAR(float, 100) + TESTVAR(float16_t, 110) + TESTVAR(uint32_t, 120) + TESTVAR(uint16_t, 130) + TESTVAR(uint8_t, 140) + TESTVAR(int32_t, 150) + TESTVAR(int16_t, 160) + TESTVAR(int8_t, 170) +} diff --git a/Test/spv.coopmatKHR_constructorError.comp b/Test/spv.coopmatKHR_constructorError.comp new file mode 100644 index 0000000000..7f00eb16a9 --- /dev/null +++ b/Test/spv.coopmatKHR_constructorError.comp @@ -0,0 +1,16 @@ +#version 450 core +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_KHR_cooperative_matrix : enable +#extension GL_EXT_shader_explicit_arithmetic_types : enable + +layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; + + +void main() +{ + // Test each kind of shape mismatch + coopmat(coopmat(0.0)); + coopmat(coopmat(0.0)); + coopmat(coopmat(0.0)); + coopmat(coopmat(0.0)); +} diff --git a/Test/spv.coopmat_armlayout.comp b/Test/spv.coopmat_armlayout.comp new file mode 100644 index 0000000000..b63ea5e7cb --- /dev/null +++ b/Test/spv.coopmat_armlayout.comp @@ -0,0 +1,121 @@ +#version 450 core +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_KHR_cooperative_matrix : enable +#extension GL_EXT_shader_explicit_arithmetic_types : enable +#extension GL_EXT_buffer_reference : enable + +layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; + +const int X = 8; +layout(constant_id = 0) const int Y = 2; +const int Z = X*Y; + +coopmat mC; +coopmat mC2[3]; + +layout(constant_id = 1) const float F = 3.0; + +const coopmat mD = coopmat(0.0); +const coopmat mD2 = coopmat(1); + +struct S { int a; int b; int c; }; + +const S s = S(12, 23, 34); + +layout(set = 0, binding = 0, buffer_reference) coherent buffer Block { + float y[1024*1024]; + float x[]; +} block; + +layout(set = 0, binding = 0) coherent buffer Block16 { + float16_t y[1024*1024]; + float16_t x[]; + + Block b; +} block16; + +coopmat f16(coopmat m) { return -m; } +coopmat f32(coopmat m) { return -m; } + +layout(constant_id = 2) const int SC = 1; +coopmat scm[SC][SC]; + +// sized for coopmat +shared uvec4 shmatrix[16*16*2/16]; + +void main() +{ + coopmat1?8:4), gl_MatrixUseAccumulator> m = coopmat1?8:4), gl_MatrixUseAccumulator>(0.0); + + m = m + m; + m = m - m; + m = -m; + m = 2.0*m; + m = m*2.0; + + coopmat m2 = coopmat(m); + + float x = m[1]; + m[0] = x; + + coopMatLoad(m, block.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + coopMatStore(m, block.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + coopMatLoad(m2, block16.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + coopMatStore(m2, block16.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + coopMatLoad(m, block16.b.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + coopMatStore(m, block16.b.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + + coopmat A; + coopmat B; + coopmat C; + coopmat D; + D = coopMatMulAdd(A, B, C); + + int l = D.length(); + + coopmat E; + + coopmat F = coopmat(0.0); + + coopmat1?8:4), gl_MatrixUseAccumulator> a[5]; + a[3][0] = 1.0; + + float md1 = mD[1]; + + md1 += (m += m)[1234]; + + mC2[1] = mC2[2]; + + coopMatLoad(m, block.y, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + coopMatStore(m, block.y, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + coopMatLoad(m2, block16.y, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + coopMatStore(m2, block16.y, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + + coopmat p1; + coopmat p2; + + p1 = f16(p1); + p2 = f32(p2); + + p1 = coopmat(0.0); + p2 = coopmat(0.0); + + p1 /= p1; + + p1 *= float16_t(2.0); + p2 *= 4.0; + + coopmat ms; + coopMatLoad(ms, shmatrix, 1, 2, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + coopMatStore(ms, shmatrix, 1, 2, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); + + coopmat ms8A; + coopmat ms8B; + coopmat ms8C; + coopMatMulAdd(ms8A, ms8B, ms8C); + coopMatMulAdd(ms8A, ms8B, ms8C, 0); + coopMatMulAdd(ms8A, ms8B, ms8C, gl_MatrixOperandsSaturatingAccumulation); + + coopmat m16; + coopMatStore(m16, shmatrix, 1, 2, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM); +} diff --git a/Test/spv.debugInfo.frag b/Test/spv.debugInfo.frag index 3b6cd27fea..5bcf87fa8c 100644 --- a/Test/spv.debugInfo.frag +++ b/Test/spv.debugInfo.frag @@ -1,52 +1,83 @@ -#version 450 - -struct S { - int a; -}; - -uniform ubuf { - S s; -}; - -uniform sampler2D s2d; - -layout(location = 0) in vec4 inv; -layout(location = 0) out vec4 outv; - -vec4 foo(S s) -{ - vec4 r = s.a * inv; - ++r; - if (r.x > 3.0) - --r; - else - r *= 2; - - return r; -} - -void main() -{ - outv = foo(s); - outv += texture(s2d, vec2(0.5)); - - switch (s.a) { - case 10: - ++outv; - break; - case 20: - outv = 2 * outv; - ++outv; - break; - default: - --outv; - break; - } - - for (int i = 0; i < 10; ++i) - outv *= 3.0; - - outv.x < 10.0 ? - outv = sin(outv) : - outv = cos(outv); +#version 450 + +struct S { + int a; +}; + +uniform ubuf { + S s; +}; + +uniform sampler2D s2d; + +layout(location = 0) in vec4 inv; +layout(location = 0) out vec4 outv; + +vec4 foo(S s) +{ + vec4 r = s.a * inv; + ++r; + if (r.x > 3.0) + --r; + else + r *= 2; + + return r; +} + +float testBranch(float x, float y) +{ + float result = 0; + bool b = x > 0; + + // branch with load + if (b) { + result += 1; + } + else { + result -= 1; + } + + // branch with expression + if (x > y) { + result += x - y; + } + + // selection with load + result += b ? + 1 : -1; + + // selection with expression + result += x < y ? + y : + float(b); + + return result; +} + +void main() +{ + outv = foo(s); + outv += testBranch(inv.x, inv.y); + outv += texture(s2d, vec2(0.5)); + + switch (s.a) { + case 10: + ++outv; + break; + case 20: + outv = 2 * outv; + ++outv; + break; + default: + --outv; + break; + } + + for (int i = 0; i < 10; ++i) + outv *= 3.0; + + outv.x < 10.0 ? + outv = sin(outv) : + outv = cos(outv); } \ No newline at end of file diff --git a/Test/spv.debuginfo.bufferref.glsl.frag b/Test/spv.debuginfo.bufferref.glsl.frag new file mode 100644 index 0000000000..c2002fa2ce --- /dev/null +++ b/Test/spv.debuginfo.bufferref.glsl.frag @@ -0,0 +1,28 @@ +#version 450 core +#extension GL_EXT_buffer_reference : enable + +layout(buffer_reference, std430) buffer MeshVertexPositions { + float data[]; +}; + +struct Mesh { + MeshVertexPositions positions; +}; + +layout(set = 0, binding = 0) readonly buffer PerPass_meshes { + Mesh data[]; +} perPass_meshes; + +layout(location = 0) out vec4 out_fragColor; + +layout(location = 0) in flat uint tri_idx0; + +void main() { + Mesh meshData = perPass_meshes.data[tri_idx0]; + + vec3 vertex_pos0 = vec3(meshData.positions.data[3 * tri_idx0], + meshData.positions.data[3 * tri_idx0 + 1], + meshData.positions.data[3 * tri_idx0 + 2]); + + out_fragColor = vec4(vertex_pos0, 1.0); +} diff --git a/Test/spv.debuginfo.const_params.glsl.comp b/Test/spv.debuginfo.const_params.glsl.comp new file mode 100644 index 0000000000..112628fe5e --- /dev/null +++ b/Test/spv.debuginfo.const_params.glsl.comp @@ -0,0 +1,14 @@ +#version 450 + +void function( + const float f, + const vec2 f2, + const vec3 f3, + const vec4 f4) +{ +} + +void main() +{ + function(0, vec2(0), vec3(0), vec4(0)); +} diff --git a/Test/spv.debuginfo.glsl.comp b/Test/spv.debuginfo.glsl.comp new file mode 100644 index 0000000000..c37d05d723 --- /dev/null +++ b/Test/spv.debuginfo.glsl.comp @@ -0,0 +1,177 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +struct Particle { + vec4 pos; + vec4 vel; + vec4 uv; + vec4 normal; + float pinned; +}; + +layout(std430, binding = 0) buffer ParticleIn { + Particle particleIn[ ]; +}; + +layout(std430, binding = 1) buffer ParticleOut { + Particle particleOut[ ]; +}; + +// todo: use shared memory to speed up calculation + +layout (local_size_x = 10, local_size_y = 10) in; + +layout (binding = 2) uniform UBO +{ + float deltaT; + float particleMass; + float springStiffness; + float damping; + float restDistH; + float restDistV; + float restDistD; + float sphereRadius; + vec4 spherePos; + vec4 gravity; + ivec2 particleCount; +} params; + +layout (push_constant) uniform PushConsts { + uint calculateNormals; +} pushConsts; + +vec3 springForce(vec3 p0, vec3 p1, float restDist) +{ + vec3 dist = p0 - p1; + return normalize(dist) * params.springStiffness * (length(dist) - restDist); +} + +void main() +{ + uvec3 id = gl_GlobalInvocationID; + + uint index = id.y * params.particleCount.x + id.x; + if (index > params.particleCount.x * params.particleCount.y) + return; + + // Pinned? + if (particleIn[index].pinned == 1.0) { + particleOut[index].pos = particleOut[index].pos; + particleOut[index].vel = vec4(0.0); + return; + } + + // Initial force from gravity + vec3 force = params.gravity.xyz * params.particleMass; + + vec3 pos = particleIn[index].pos.xyz; + vec3 vel = particleIn[index].vel.xyz; + + // Spring forces from neighboring particles + // left + if (id.x > 0) { + force += springForce(particleIn[index-1].pos.xyz, pos, params.restDistH); + } + // right + if (id.x < params.particleCount.x - 1) { + force += springForce(particleIn[index + 1].pos.xyz, pos, params.restDistH); + } + // upper + if (id.y < params.particleCount.y - 1) { + force += springForce(particleIn[index + params.particleCount.x].pos.xyz, pos, params.restDistV); + } + // lower + if (id.y > 0) { + force += springForce(particleIn[index - params.particleCount.x].pos.xyz, pos, params.restDistV); + } + // upper-left + if ((id.x > 0) && (id.y < params.particleCount.y - 1)) { + force += springForce(particleIn[index + params.particleCount.x - 1].pos.xyz, pos, params.restDistD); + } + // lower-left + if ((id.x > 0) && (id.y > 0)) { + force += springForce(particleIn[index - params.particleCount.x - 1].pos.xyz, pos, params.restDistD); + } + // upper-right + if ((id.x < params.particleCount.x - 1) && (id.y < params.particleCount.y - 1)) { + force += springForce(particleIn[index + params.particleCount.x + 1].pos.xyz, pos, params.restDistD); + } + // lower-right + if ((id.x < params.particleCount.x - 1) && (id.y > 0)) { + force += springForce(particleIn[index - params.particleCount.x + 1].pos.xyz, pos, params.restDistD); + } + + force += (-params.damping * vel); + + // Integrate + vec3 f = force * (1.0 / params.particleMass); + particleOut[index].pos = vec4(pos + vel * params.deltaT + 0.5 * f * params.deltaT * params.deltaT, 1.0); + particleOut[index].vel = vec4(vel + f * params.deltaT, 0.0); + + // Sphere collision + vec3 sphereDist = particleOut[index].pos.xyz - params.spherePos.xyz; + if (length(sphereDist) < params.sphereRadius + 0.01) { + // If the particle is inside the sphere, push it to the outer radius + particleOut[index].pos.xyz = params.spherePos.xyz + normalize(sphereDist) * (params.sphereRadius + 0.01); + // Cancel out velocity + particleOut[index].vel = vec4(0.0); + } + + // Normals + if (pushConsts.calculateNormals == 1) { + vec3 normal = vec3(0.0); + vec3 a, b, c; + if (id.y > 0) { + if (id.x > 0) { + a = particleIn[index - 1].pos.xyz - pos; + b = particleIn[index - params.particleCount.x - 1].pos.xyz - pos; + c = particleIn[index - params.particleCount.x].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + if (id.x < params.particleCount.x - 1) { + a = particleIn[index - params.particleCount.x].pos.xyz - pos; + b = particleIn[index - params.particleCount.x + 1].pos.xyz - pos; + c = particleIn[index + 1].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + } + if (id.y < params.particleCount.y - 1) { + if (id.x > 0) { + a = particleIn[index + params.particleCount.x].pos.xyz - pos; + b = particleIn[index + params.particleCount.x - 1].pos.xyz - pos; + c = particleIn[index - 1].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + if (id.x < params.particleCount.x - 1) { + a = particleIn[index + 1].pos.xyz - pos; + b = particleIn[index + params.particleCount.x + 1].pos.xyz - pos; + c = particleIn[index + params.particleCount.x].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + } + particleOut[index].normal = vec4(normalize(normal), 0.0f); + } +} diff --git a/Test/spv.debuginfo.glsl.frag b/Test/spv.debuginfo.glsl.frag new file mode 100644 index 0000000000..86316af2ae --- /dev/null +++ b/Test/spv.debuginfo.glsl.frag @@ -0,0 +1,194 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +layout (binding = 1) uniform sampler2D samplerposition; +layout (binding = 2) uniform sampler2D samplerNormal; +layout (binding = 3) uniform sampler2D samplerAlbedo; +layout (binding = 5) uniform sampler2DArray samplerShadowMap; + +layout (location = 0) in vec2 inUV; + +layout (location = 0) out vec4 outFragColor; + +#define LIGHT_COUNT 3 +#define SHADOW_FACTOR 0.25 +#define AMBIENT_LIGHT 0.1 +#define USE_PCF + +int global_var = 0; + +struct Light +{ + vec4 position; + vec4 target; + vec4 color; + mat4 viewMatrix; +}; + +layout (binding = 4) uniform UBO +{ + vec4 viewPos; + Light lights[LIGHT_COUNT]; + int useShadows; + int debugDisplayTarget; +} ubo; + +float textureProj(vec4 P, float layer, vec2 offset) +{ + float shadow = 1.0; + vec4 shadowCoord = P / P.w; + shadowCoord.st = shadowCoord.st * 0.5 + 0.5; + + if (shadowCoord.z > -1.0 && shadowCoord.z < 1.0) + { + float dist = texture(samplerShadowMap, vec3(shadowCoord.st + offset, layer)).r; + if (shadowCoord.w > 0.0 && dist < shadowCoord.z) + { + shadow = SHADOW_FACTOR; + } + } + return shadow; +} + +float filterPCF(vec4 sc, float layer) +{ + ivec2 texDim = textureSize(samplerShadowMap, 0).xy; + float scale = 1.5; + float dx = scale * 1.0 / float(texDim.x); + float dy = scale * 1.0 / float(texDim.y); + + float shadowFactor = 0.0; + int count = 0; + int range = 1; + + for (int x = -range; x <= range; x++) + { + for (int y = -range; y <= range; y++) + { + shadowFactor += textureProj(sc, layer, vec2(dx*x, dy*y)); + count++; + } + + } + return shadowFactor / count; +} + +vec3 shadow(vec3 fragcolor, vec3 fragpos) { + for(int i = 0; i < LIGHT_COUNT; ++i) + { + vec4 shadowClip = ubo.lights[i].viewMatrix * vec4(fragpos, 1.0); + + float shadowFactor; + #ifdef USE_PCF + shadowFactor= filterPCF(shadowClip, i); + #else + shadowFactor = textureProj(shadowClip, i, vec2(0.0)); + #endif + + fragcolor *= shadowFactor; + } + return fragcolor; +} + +void main() +{ + // Get G-Buffer values + vec3 fragPos = texture(samplerposition, inUV).rgb; + vec3 normal = texture(samplerNormal, inUV).rgb; + vec4 albedo = texture(samplerAlbedo, inUV); + + // Debug display + if (ubo.debugDisplayTarget > 0) { + switch (ubo.debugDisplayTarget) { + case 1: + outFragColor.rgb = shadow(vec3(1.0), fragPos).rgb; + break; + case 2: + outFragColor.rgb = fragPos; + break; + case 3: + outFragColor.rgb = normal; + break; + case 4: + outFragColor.rgb = albedo.rgb; + break; + case 5: + outFragColor.rgb = albedo.aaa; + break; + } + outFragColor.a = 1.0; + return; + } + + // Ambient part + vec3 fragcolor = albedo.rgb * AMBIENT_LIGHT; + + vec3 N = normalize(normal); + + for(int i = 0; i < LIGHT_COUNT; ++i) + { + // Vector to light + vec3 L = ubo.lights[i].position.xyz - fragPos; + // Distance from light to fragment position + float dist = length(L); + L = normalize(L); + + // Viewer to fragment + vec3 V = ubo.viewPos.xyz - fragPos; + V = normalize(V); + + float lightCosInnerAngle = cos(radians(15.0)); + float lightCosOuterAngle = cos(radians(25.0)); + float lightRange = 100.0; + + // Direction vector from source to target + vec3 dir = normalize(ubo.lights[i].position.xyz - ubo.lights[i].target.xyz); + + // Dual cone spot light with smooth transition between inner and outer angle + float cosDir = dot(L, dir); + float spotEffect = smoothstep(lightCosOuterAngle, lightCosInnerAngle, cosDir); + float heightAttenuation = smoothstep(lightRange, 0.0f, dist); + + // Diffuse lighting + float NdotL = max(0.0, dot(N, L)); + vec3 diff = vec3(NdotL); + + // Specular lighting + vec3 R = reflect(-L, N); + float NdotR = max(0.0, dot(R, V)); + vec3 spec = vec3(pow(NdotR, 16.0) * albedo.a * 2.5); + + fragcolor += vec3((diff + spec) * spotEffect * heightAttenuation) * ubo.lights[i].color.rgb * albedo.rgb; + } + + // Shadow calculations in a separate pass + if (ubo.useShadows > 0) + { + fragcolor = shadow(fragcolor, fragPos); + } + + outFragColor = vec4(fragcolor, 1.0); +} diff --git a/Test/spv.debuginfo.glsl.geom b/Test/spv.debuginfo.glsl.geom new file mode 100644 index 0000000000..756885f676 --- /dev/null +++ b/Test/spv.debuginfo.glsl.geom @@ -0,0 +1,69 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +#extension GL_ARB_viewport_array : enable + +layout (triangles, invocations = 2) in; +layout (triangle_strip, max_vertices = 3) out; + +layout (binding = 0) uniform UBO +{ + mat4 projection[2]; + mat4 modelview[2]; + vec4 lightPos; +} ubo; + +layout (location = 0) in vec3 inNormal[]; +layout (location = 1) in vec3 inColor[]; + +layout (location = 0) out vec3 outNormal; +layout (location = 1) out vec3 outColor; +layout (location = 2) out vec3 outViewVec; +layout (location = 3) out vec3 outLightVec; + +void main(void) +{ + for(int i = 0; i < gl_in.length(); i++) + { + outNormal = mat3(ubo.modelview[gl_InvocationID]) * inNormal[i]; + outColor = inColor[i]; + + vec4 pos = gl_in[i].gl_Position; + vec4 worldPos = (ubo.modelview[gl_InvocationID] * pos); + + vec3 lPos = vec3(ubo.modelview[gl_InvocationID] * ubo.lightPos); + outLightVec = lPos - worldPos.xyz; + outViewVec = -worldPos.xyz; + + gl_Position = ubo.projection[gl_InvocationID] * worldPos; + + // Set the viewport index that the vertex will be emitted to + gl_ViewportIndex = gl_InvocationID; + gl_PrimitiveID = gl_PrimitiveIDIn; + EmitVertex(); + } + EndPrimitive(); +} diff --git a/Test/spv.debuginfo.glsl.tesc b/Test/spv.debuginfo.glsl.tesc new file mode 100644 index 0000000000..41c8fe3adc --- /dev/null +++ b/Test/spv.debuginfo.glsl.tesc @@ -0,0 +1,140 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +layout(set = 0, binding = 0) uniform UBO +{ + mat4 projection; + mat4 modelview; + vec4 lightPos; + vec4 frustumPlanes[6]; + float displacementFactor; + float tessellationFactor; + vec2 viewportDim; + float tessellatedEdgeSize; +} ubo; + +layout(set = 0, binding = 1) uniform sampler2D samplerHeight; + +layout (vertices = 4) out; + +layout (location = 0) in vec3 inNormal[]; +layout (location = 1) in vec2 inUV[]; + +layout (location = 0) out vec3 outNormal[4]; +layout (location = 1) out vec2 outUV[4]; + +// Calculate the tessellation factor based on screen space +// dimensions of the edge +float screenSpaceTessFactor(vec4 p0, vec4 p1) +{ + // Calculate edge mid point + vec4 midPoint = 0.5 * (p0 + p1); + // Sphere radius as distance between the control points + float radius = distance(p0, p1) / 2.0; + + // View space + vec4 v0 = ubo.modelview * midPoint; + + // Project into clip space + vec4 clip0 = (ubo.projection * (v0 - vec4(radius, vec3(0.0)))); + vec4 clip1 = (ubo.projection * (v0 + vec4(radius, vec3(0.0)))); + + // Get normalized device coordinates + clip0 /= clip0.w; + clip1 /= clip1.w; + + // Convert to viewport coordinates + clip0.xy *= ubo.viewportDim; + clip1.xy *= ubo.viewportDim; + + // Return the tessellation factor based on the screen size + // given by the distance of the two edge control points in screen space + // and a reference (min.) tessellation size for the edge set by the application + return clamp(distance(clip0, clip1) / ubo.tessellatedEdgeSize * ubo.tessellationFactor, 1.0, 64.0); +} + +// Checks the current's patch visibility against the frustum using a sphere check +// Sphere radius is given by the patch size +bool frustumCheck() +{ + // Fixed radius (increase if patch size is increased in example) + const float radius = 8.0f; + vec4 pos = gl_in[gl_InvocationID].gl_Position; + pos.y -= textureLod(samplerHeight, inUV[0], 0.0).r * ubo.displacementFactor; + + // Check sphere against frustum planes + for (int i = 0; i < 6; i++) { + if (dot(pos, ubo.frustumPlanes[i]) + radius < 0.0) + { + return false; + } + } + return true; +} + +void main() +{ + if (gl_InvocationID == 0) + { + if (!frustumCheck()) + { + gl_TessLevelInner[0] = 0.0; + gl_TessLevelInner[1] = 0.0; + gl_TessLevelOuter[0] = 0.0; + gl_TessLevelOuter[1] = 0.0; + gl_TessLevelOuter[2] = 0.0; + gl_TessLevelOuter[3] = 0.0; + } + else + { + if (ubo.tessellationFactor > 0.0) + { + gl_TessLevelOuter[0] = screenSpaceTessFactor(gl_in[3].gl_Position, gl_in[0].gl_Position); + gl_TessLevelOuter[1] = screenSpaceTessFactor(gl_in[0].gl_Position, gl_in[1].gl_Position); + gl_TessLevelOuter[2] = screenSpaceTessFactor(gl_in[1].gl_Position, gl_in[2].gl_Position); + gl_TessLevelOuter[3] = screenSpaceTessFactor(gl_in[2].gl_Position, gl_in[3].gl_Position); + gl_TessLevelInner[0] = mix(gl_TessLevelOuter[0], gl_TessLevelOuter[3], 0.5); + gl_TessLevelInner[1] = mix(gl_TessLevelOuter[2], gl_TessLevelOuter[1], 0.5); + } + else + { + // Tessellation factor can be set to zero by example + // to demonstrate a simple passthrough + gl_TessLevelInner[0] = 1.0; + gl_TessLevelInner[1] = 1.0; + gl_TessLevelOuter[0] = 1.0; + gl_TessLevelOuter[1] = 1.0; + gl_TessLevelOuter[2] = 1.0; + gl_TessLevelOuter[3] = 1.0; + } + } + + } + + gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position; + outNormal[gl_InvocationID] = inNormal[gl_InvocationID]; + outUV[gl_InvocationID] = inUV[gl_InvocationID]; +} diff --git a/Test/spv.debuginfo.glsl.tese b/Test/spv.debuginfo.glsl.tese new file mode 100644 index 0000000000..f24ed949c4 --- /dev/null +++ b/Test/spv.debuginfo.glsl.tese @@ -0,0 +1,78 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +layout (set = 0, binding = 0) uniform UBO +{ + mat4 projection; + mat4 modelview; + vec4 lightPos; + vec4 frustumPlanes[6]; + float displacementFactor; + float tessellationFactor; + vec2 viewportDim; + float tessellatedEdgeSize; +} ubo; + +layout (set = 0, binding = 1) uniform sampler2D displacementMap; + +layout(quads, equal_spacing, cw) in; + +layout (location = 0) in vec3 inNormal[]; +layout (location = 1) in vec2 inUV[]; + +layout (location = 0) out vec3 outNormal; +layout (location = 1) out vec2 outUV; +layout (location = 2) out vec3 outViewVec; +layout (location = 3) out vec3 outLightVec; +layout (location = 4) out vec3 outEyePos; +layout (location = 5) out vec3 outWorldPos; + +void main() +{ + // Interpolate UV coordinates + vec2 uv1 = mix(inUV[0], inUV[1], gl_TessCoord.x); + vec2 uv2 = mix(inUV[3], inUV[2], gl_TessCoord.x); + outUV = mix(uv1, uv2, gl_TessCoord.y); + + vec3 n1 = mix(inNormal[0], inNormal[1], gl_TessCoord.x); + vec3 n2 = mix(inNormal[3], inNormal[2], gl_TessCoord.x); + outNormal = mix(n1, n2, gl_TessCoord.y); + + // Interpolate positions + vec4 pos1 = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x); + vec4 pos2 = mix(gl_in[3].gl_Position, gl_in[2].gl_Position, gl_TessCoord.x); + vec4 pos = mix(pos1, pos2, gl_TessCoord.y); + // Displace + pos.y -= textureLod(displacementMap, outUV, 0.0).r * ubo.displacementFactor; + // Perspective projection + gl_Position = ubo.projection * ubo.modelview * pos; + + // Calculate vectors for lighting based on tessellated position + outViewVec = -pos.xyz; + outLightVec = normalize(ubo.lightPos.xyz + outViewVec); + outWorldPos = pos.xyz; + outEyePos = vec3(ubo.modelview * pos); +} diff --git a/Test/spv.debuginfo.glsl.vert b/Test/spv.debuginfo.glsl.vert new file mode 100644 index 0000000000..d922d95799 --- /dev/null +++ b/Test/spv.debuginfo.glsl.vert @@ -0,0 +1,105 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 450 + +// Vertex attributes +layout (location = 0) in vec3 inPos; +layout (location = 1) in vec3 inNormal; +layout (location = 2) in vec2 inUV; +layout (location = 3) in vec3 inColor; + +// Instanced attributes +layout (location = 4) in vec3 instancePos; +layout (location = 5) in vec3 instanceRot; +layout (location = 6) in float instanceScale; +layout (location = 7) in int instanceTexIndex; + +layout (binding = 0) uniform UBO +{ + mat4 projection; + mat4 modelview; + vec4 lightPos; + float locSpeed; + float globSpeed; +} ubo; + +layout (location = 0) out vec3 outNormal; +layout (location = 1) out vec3 outColor; +layout (location = 2) out vec3 outUV; +layout (location = 3) out vec3 outViewVec; +layout (location = 4) out vec3 outLightVec; + +void main() +{ + outColor = inColor; + outUV = vec3(inUV, instanceTexIndex); + + mat3 mx, my, mz; + + // rotate around x + float s = sin(instanceRot.x + ubo.locSpeed); + float c = cos(instanceRot.x + ubo.locSpeed); + + mx[0] = vec3(c, s, 0.0); + mx[1] = vec3(-s, c, 0.0); + mx[2] = vec3(0.0, 0.0, 1.0); + + // rotate around y + s = sin(instanceRot.y + ubo.locSpeed); + c = cos(instanceRot.y + ubo.locSpeed); + + my[0] = vec3(c, 0.0, s); + my[1] = vec3(0.0, 1.0, 0.0); + my[2] = vec3(-s, 0.0, c); + + // rot around z + s = sin(instanceRot.z + ubo.locSpeed); + c = cos(instanceRot.z + ubo.locSpeed); + + mz[0] = vec3(1.0, 0.0, 0.0); + mz[1] = vec3(0.0, c, s); + mz[2] = vec3(0.0, -s, c); + + mat3 rotMat = mz * my * mx; + + mat4 gRotMat; + s = sin(instanceRot.y + ubo.globSpeed); + c = cos(instanceRot.y + ubo.globSpeed); + gRotMat[0] = vec4(c, 0.0, s, 0.0); + gRotMat[1] = vec4(0.0, 1.0, 0.0, 0.0); + gRotMat[2] = vec4(-s, 0.0, c, 0.0); + gRotMat[3] = vec4(0.0, 0.0, 0.0, 1.0); + + vec4 locPos = vec4(inPos.xyz * rotMat, 1.0); + vec4 pos = vec4((locPos.xyz * instanceScale) + instancePos, 1.0); + + gl_Position = ubo.projection * ubo.modelview * gRotMat * pos; + outNormal = mat3(ubo.modelview * gRotMat) * inverse(rotMat) * inNormal; + + pos = ubo.modelview * vec4(inPos.xyz + instancePos, 1.0); + vec3 lPos = mat3(ubo.modelview) * ubo.lightPos.xyz; + outLightVec = lPos - pos.xyz; + outViewVec = -pos.xyz; +} diff --git a/Test/spv.debuginfo.hlsl.comp b/Test/spv.debuginfo.hlsl.comp new file mode 100644 index 0000000000..b700534e04 --- /dev/null +++ b/Test/spv.debuginfo.hlsl.comp @@ -0,0 +1,184 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Google LLC +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +struct Particle { + float4 pos; + float4 vel; + float4 uv; + float4 normal; + float pinned; +}; + +[[vk::binding(0)]] +StructuredBuffer particleIn; +[[vk::binding(1)]] +RWStructuredBuffer particleOut; + +struct UBO +{ + float deltaT; + float particleMass; + float springStiffness; + float damping; + float restDistH; + float restDistV; + float restDistD; + float sphereRadius; + float4 spherePos; + float4 gravity; + int2 particleCount; +}; + +cbuffer ubo : register(b2) +{ + UBO params; +}; + +#ifdef GLSLANG +layout ( push_constant ) cbuffer PushConstants +{ + uint calculateNormals; +} pushConstants; +#else +struct PushConstants +{ + uint calculateNormals; +}; + +[[vk::push_constant]] +PushConstants pushConstants; +#endif + +float3 springForce(float3 p0, float3 p1, float restDist) +{ + float3 dist = p0 - p1; + return normalize(dist) * params.springStiffness * (length(dist) - restDist); +} + +[numthreads(10, 10, 1)] +void main(uint3 id : SV_DispatchThreadID) +{ + uint index = id.y * params.particleCount.x + id.x; + if (index > params.particleCount.x * params.particleCount.y) + return; + + // Pinned? + if (particleIn[index].pinned == 1.0) { + particleOut[index].pos = particleOut[index].pos; + particleOut[index].vel = float4(0, 0, 0, 0); + return; + } + + // Initial force from gravity + float3 force = params.gravity.xyz * params.particleMass; + + float3 pos = particleIn[index].pos.xyz; + float3 vel = particleIn[index].vel.xyz; + + // Spring forces from neighboring particles + // left + if (id.x > 0) { + force += springForce(particleIn[index-1].pos.xyz, pos, params.restDistH); + } + // right + if (id.x < params.particleCount.x - 1) { + force += springForce(particleIn[index + 1].pos.xyz, pos, params.restDistH); + } + // upper + if (id.y < params.particleCount.y - 1) { + force += springForce(particleIn[index + params.particleCount.x].pos.xyz, pos, params.restDistV); + } + // lower + if (id.y > 0) { + force += springForce(particleIn[index - params.particleCount.x].pos.xyz, pos, params.restDistV); + } + // upper-left + if ((id.x > 0) && (id.y < params.particleCount.y - 1)) { + force += springForce(particleIn[index + params.particleCount.x - 1].pos.xyz, pos, params.restDistD); + } + // lower-left + if ((id.x > 0) && (id.y > 0)) { + force += springForce(particleIn[index - params.particleCount.x - 1].pos.xyz, pos, params.restDistD); + } + // upper-right + if ((id.x < params.particleCount.x - 1) && (id.y < params.particleCount.y - 1)) { + force += springForce(particleIn[index + params.particleCount.x + 1].pos.xyz, pos, params.restDistD); + } + // lower-right + if ((id.x < params.particleCount.x - 1) && (id.y > 0)) { + force += springForce(particleIn[index - params.particleCount.x + 1].pos.xyz, pos, params.restDistD); + } + + force += (-params.damping * vel); + + // Integrate + float3 f = force * (1.0 / params.particleMass); + particleOut[index].pos = float4(pos + vel * params.deltaT + 0.5 * f * params.deltaT * params.deltaT, 1.0); + particleOut[index].vel = float4(vel + f * params.deltaT, 0.0); + + // Sphere collision + float3 sphereDist = particleOut[index].pos.xyz - params.spherePos.xyz; + if (length(sphereDist) < params.sphereRadius + 0.01) { + // If the particle is inside the sphere, push it to the outer radius + particleOut[index].pos.xyz = params.spherePos.xyz + normalize(sphereDist) * (params.sphereRadius + 0.01); + // Cancel out velocity + particleOut[index].vel = float4(0, 0, 0, 0); + } + + // Normals + if (pushConstants.calculateNormals == 1) { + float3 normal = float3(0, 0, 0); + float3 a, b, c; + if (id.y > 0) { + if (id.x > 0) { + a = particleIn[index - 1].pos.xyz - pos; + b = particleIn[index - params.particleCount.x - 1].pos.xyz - pos; + c = particleIn[index - params.particleCount.x].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + if (id.x < params.particleCount.x - 1) { + a = particleIn[index - params.particleCount.x].pos.xyz - pos; + b = particleIn[index - params.particleCount.x + 1].pos.xyz - pos; + c = particleIn[index + 1].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + } + if (id.y < params.particleCount.y - 1) { + if (id.x > 0) { + a = particleIn[index + params.particleCount.x].pos.xyz - pos; + b = particleIn[index + params.particleCount.x - 1].pos.xyz - pos; + c = particleIn[index - 1].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + if (id.x < params.particleCount.x - 1) { + a = particleIn[index + 1].pos.xyz - pos; + b = particleIn[index + params.particleCount.x + 1].pos.xyz - pos; + c = particleIn[index + params.particleCount.x].pos.xyz - pos; + normal += cross(a,b) + cross(b,c); + } + } + particleOut[index].normal = float4(normalize(normal), 0.0f); + } +} diff --git a/Test/spv.debuginfo.hlsl.frag b/Test/spv.debuginfo.hlsl.frag new file mode 100644 index 0000000000..93072d4b19 --- /dev/null +++ b/Test/spv.debuginfo.hlsl.frag @@ -0,0 +1,197 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Google LLC +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +Texture2D textureposition : register(t1); +SamplerState samplerposition : register(s1); +Texture2D textureNormal : register(t2); +SamplerState samplerNormal : register(s2); +Texture2D textureAlbedo : register(t3); +SamplerState samplerAlbedo : register(s3); +// Depth from the light's point of view +//layout (binding = 5) uniform sampler2DShadow samplerShadowMap; +Texture2DArray textureShadowMap : register(t5); +SamplerState samplerShadowMap : register(s5); + +#define LIGHT_COUNT 3 +#define SHADOW_FACTOR 0.25 +#define AMBIENT_LIGHT 0.1 +#define USE_PCF + +struct Light +{ + float4 position; + float4 target; + float4 color; + float4x4 viewMatrix; +}; + +struct UBO +{ + float4 viewPos; + Light lights[LIGHT_COUNT]; + int useShadows; + int displayDebugTarget; +}; + +cbuffer ubo : register(b4) { UBO ubo; } + +float textureProj(float4 P, float layer, float2 offset) +{ + float shadow = 1.0; + float4 shadowCoord = P / P.w; + shadowCoord.xy = shadowCoord.xy * 0.5 + 0.5; + + if (shadowCoord.z > -1.0 && shadowCoord.z < 1.0) + { + float dist = textureShadowMap.Sample(samplerShadowMap, float3(shadowCoord.xy + offset, layer)).r; + if (shadowCoord.w > 0.0 && dist < shadowCoord.z) + { + shadow = SHADOW_FACTOR; + } + } + return shadow; +} + +float filterPCF(float4 sc, float layer) +{ + int2 texDim; int elements; int levels; + textureShadowMap.GetDimensions(0, texDim.x, texDim.y, elements, levels); + float scale = 1.5; + float dx = scale * 1.0 / float(texDim.x); + float dy = scale * 1.0 / float(texDim.y); + + float shadowFactor = 0.0; + int count = 0; + int range = 1; + + for (int x = -range; x <= range; x++) + { + for (int y = -range; y <= range; y++) + { + shadowFactor += textureProj(sc, layer, float2(dx*x, dy*y)); + count++; + } + + } + return shadowFactor / count; +} + +float3 shadow(float3 fragcolor, float3 fragPos) { + for (int i = 0; i < LIGHT_COUNT; ++i) + { + float4 shadowClip = mul(ubo.lights[i].viewMatrix, float4(fragPos.xyz, 1.0)); + + float shadowFactor; + #ifdef USE_PCF + shadowFactor= filterPCF(shadowClip, i); + #else + shadowFactor = textureProj(shadowClip, i, float2(0.0, 0.0)); + #endif + + fragcolor *= shadowFactor; + } + return fragcolor; +} + +float4 main([[vk::location(0)]] float2 inUV : TEXCOORD0) : SV_TARGET +{ + // Get G-Buffer values + float3 fragPos = textureposition.Sample(samplerposition, inUV).rgb; + float3 normal = textureNormal.Sample(samplerNormal, inUV).rgb; + float4 albedo = textureAlbedo.Sample(samplerAlbedo, inUV); + + float3 fragcolor; + + // Debug display + if (ubo.displayDebugTarget > 0) { + switch (ubo.displayDebugTarget) { + case 1: + fragcolor.rgb = shadow(float3(1.0, 1.0, 1.0), fragPos); + break; + case 2: + fragcolor.rgb = fragPos; + break; + case 3: + fragcolor.rgb = normal; + break; + case 4: + fragcolor.rgb = albedo.rgb; + break; + case 5: + fragcolor.rgb = albedo.aaa; + break; + } + return float4(fragcolor, 1.0); + } + + // Ambient part + fragcolor = albedo.rgb * AMBIENT_LIGHT; + + float3 N = normalize(normal); + + for(int i = 0; i < LIGHT_COUNT; ++i) + { + // Vector to light + float3 L = ubo.lights[i].position.xyz - fragPos; + // Distance from light to fragment position + float dist = length(L); + L = normalize(L); + + // Viewer to fragment + float3 V = ubo.viewPos.xyz - fragPos; + V = normalize(V); + + float lightCosInnerAngle = cos(radians(15.0)); + float lightCosOuterAngle = cos(radians(25.0)); + float lightRange = 100.0; + + // Direction vector from source to target + float3 dir = normalize(ubo.lights[i].position.xyz - ubo.lights[i].target.xyz); + + // Dual cone spot light with smooth transition between inner and outer angle + float cosDir = dot(L, dir); + float spotEffect = smoothstep(lightCosOuterAngle, lightCosInnerAngle, cosDir); + float heightAttenuation = smoothstep(lightRange, 0.0f, dist); + + // Diffuse lighting + float NdotL = max(0.0, dot(N, L)); + float3 diff = NdotL.xxx; + + // Specular lighting + float3 R = reflect(-L, N); + float NdotR = max(0.0, dot(R, V)); + float3 spec = (pow(NdotR, 16.0) * albedo.a * 2.5).xxx; + + fragcolor += float3((diff + spec) * spotEffect * heightAttenuation) * ubo.lights[i].color.rgb * albedo.rgb; + } + + // Shadow calculations in a separate pass + if (ubo.useShadows > 0) + { + fragcolor = shadow(fragcolor, fragPos); + } + + return float4(fragcolor, 1); +} diff --git a/Test/spv.debuginfo.hlsl.geom b/Test/spv.debuginfo.hlsl.geom new file mode 100644 index 0000000000..71f9b7c116 --- /dev/null +++ b/Test/spv.debuginfo.hlsl.geom @@ -0,0 +1,79 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Google LLC +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +struct UBO +{ + float4x4 projection[2]; + float4x4 modelview[2]; + float4 lightPos; +}; + +cbuffer ubo : register(b0) { UBO ubo; } + +struct VSOutput +{ + float4 Pos : SV_POSITION; +[[vk::location(0)]] float3 Normal : NORMAL0; +[[vk::location(1)]] float3 Color : COLOR0; +}; + +struct GSOutput +{ + float4 Pos : SV_POSITION; + uint ViewportIndex : SV_ViewportArrayIndex; + uint PrimitiveID : SV_PrimitiveID; +[[vk::location(0)]] float3 Normal : NORMAL0; +[[vk::location(1)]] float3 Color : COLOR0; +[[vk::location(2)]] float3 ViewVec : TEXCOOR1; +[[vk::location(3)]] float3 LightVec : TEXCOOR2; +}; + +[maxvertexcount(3)] +[instance(2)] +void main(triangle VSOutput input[3], inout TriangleStream outStream, uint InvocationID : SV_GSInstanceID, uint PrimitiveID : SV_PrimitiveID) +{ + for(int i = 0; i < 3; i++) + { + GSOutput output = (GSOutput)0; + output.Normal = mul((float3x3)ubo.modelview[InvocationID], input[i].Normal); + output.Color = input[i].Color; + + float4 pos = input[i].Pos; + float4 worldPos = mul(ubo.modelview[InvocationID], pos); + + float3 lPos = mul(ubo.modelview[InvocationID], ubo.lightPos).xyz; + output.LightVec = lPos - worldPos.xyz; + output.ViewVec = -worldPos.xyz; + + output.Pos = mul(ubo.projection[InvocationID], worldPos); + + // Set the viewport index that the vertex will be emitted to + output.ViewportIndex = InvocationID; + output.PrimitiveID = PrimitiveID; + outStream.Append( output ); + } + + outStream.RestartStrip(); +} diff --git a/Test/spv.debuginfo.hlsl.tesc b/Test/spv.debuginfo.hlsl.tesc new file mode 100644 index 0000000000..ba52701584 --- /dev/null +++ b/Test/spv.debuginfo.hlsl.tesc @@ -0,0 +1,164 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Google LLC +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +struct UBO +{ + float4x4 projection; + float4x4 modelview; + float4 lightPos; + float4 frustumPlanes[6]; + float displacementFactor; + float tessellationFactor; + float2 viewportDim; + float tessellatedEdgeSize; +}; +cbuffer ubo : register(b0) { UBO ubo; }; + +Texture2D textureHeight : register(t1); +SamplerState samplerHeight : register(s1); + +struct VSOutput +{ + float4 Pos : SV_POSITION; +[[vk::location(0)]] float3 Normal : NORMAL0; +[[vk::location(1)]] float2 UV : TEXCOORD0; +}; + +struct HSOutput +{ +[[vk::location(2)]] float4 Pos : SV_POSITION; +[[vk::location(0)]] float3 Normal : NORMAL0; +[[vk::location(1)]] float2 UV : TEXCOORD0; +}; + +struct ConstantsHSOutput +{ + float TessLevelOuter[4] : SV_TessFactor; + float TessLevelInner[2] : SV_InsideTessFactor; +}; + +// Calculate the tessellation factor based on screen space +// dimensions of the edge +float screenSpaceTessFactor(float4 p0, float4 p1) +{ + // Calculate edge mid point + float4 midPoint = 0.5 * (p0 + p1); + // Sphere radius as distance between the control points + float radius = distance(p0, p1) / 2.0; + + // View space + float4 v0 = mul(ubo.modelview, midPoint); + + // Project into clip space + float4 clip0 = mul(ubo.projection, (v0 - float4(radius, float3(0.0, 0.0, 0.0)))); + float4 clip1 = mul(ubo.projection, (v0 + float4(radius, float3(0.0, 0.0, 0.0)))); + + // Get normalized device coordinates + clip0 /= clip0.w; + clip1 /= clip1.w; + + // Convert to viewport coordinates + clip0.xy *= ubo.viewportDim; + clip1.xy *= ubo.viewportDim; + + // Return the tessellation factor based on the screen size + // given by the distance of the two edge control points in screen space + // and a reference (min.) tessellation size for the edge set by the application + return clamp(distance(clip0, clip1) / ubo.tessellatedEdgeSize * ubo.tessellationFactor, 1.0, 64.0); +} + +// Checks the current's patch visibility against the frustum using a sphere check +// Sphere radius is given by the patch size +bool frustumCheck(float4 Pos, float2 inUV) +{ + // Fixed radius (increase if patch size is increased in example) + const float radius = 8.0f; + float4 pos = Pos; + pos.y -= textureHeight.SampleLevel(samplerHeight, inUV, 0.0).r * ubo.displacementFactor; + + // Check sphere against frustum planes + for (int i = 0; i < 6; i++) { + if (dot(pos, ubo.frustumPlanes[i]) + radius < 0.0) + { + return false; + } + } + return true; +} + +ConstantsHSOutput ConstantsHS(InputPatch patch) +{ + ConstantsHSOutput output = (ConstantsHSOutput)0; + + if (!frustumCheck(patch[0].Pos, patch[0].UV)) + { + output.TessLevelInner[0] = 0.0; + output.TessLevelInner[1] = 0.0; + output.TessLevelOuter[0] = 0.0; + output.TessLevelOuter[1] = 0.0; + output.TessLevelOuter[2] = 0.0; + output.TessLevelOuter[3] = 0.0; + } + else + { + if (ubo.tessellationFactor > 0.0) + { + output.TessLevelOuter[0] = screenSpaceTessFactor(patch[3].Pos, patch[0].Pos); + output.TessLevelOuter[1] = screenSpaceTessFactor(patch[0].Pos, patch[1].Pos); + output.TessLevelOuter[2] = screenSpaceTessFactor(patch[1].Pos, patch[2].Pos); + output.TessLevelOuter[3] = screenSpaceTessFactor(patch[2].Pos, patch[3].Pos); + output.TessLevelInner[0] = lerp(output.TessLevelOuter[0], output.TessLevelOuter[3], 0.5); + output.TessLevelInner[1] = lerp(output.TessLevelOuter[2], output.TessLevelOuter[1], 0.5); + } + else + { + // Tessellation factor can be set to zero by example + // to demonstrate a simple passthrough + output.TessLevelInner[0] = 1.0; + output.TessLevelInner[1] = 1.0; + output.TessLevelOuter[0] = 1.0; + output.TessLevelOuter[1] = 1.0; + output.TessLevelOuter[2] = 1.0; + output.TessLevelOuter[3] = 1.0; + } + } + + return output; +} + +[domain("quad")] +[partitioning("integer")] +[outputtopology("triangle_cw")] +[outputcontrolpoints(4)] +[patchconstantfunc("ConstantsHS")] +[maxtessfactor(20.0f)] +HSOutput main(InputPatch patch, uint InvocationID : SV_OutputControlPointID) +{ + HSOutput output = (HSOutput)0; + output.Pos = patch[InvocationID].Pos; + output.Normal = patch[InvocationID].Normal; + output.UV = patch[InvocationID].UV; + return output; +} diff --git a/Test/spv.debuginfo.hlsl.tese b/Test/spv.debuginfo.hlsl.tese new file mode 100644 index 0000000000..e7add05bf3 --- /dev/null +++ b/Test/spv.debuginfo.hlsl.tese @@ -0,0 +1,94 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Google LLC +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +struct UBO +{ + float4x4 projection; + float4x4 modelview; + float4 lightPos; + float4 frustumPlanes[6]; + float displacementFactor; + float tessellationFactor; + float2 viewportDim; + float tessellatedEdgeSize; +}; +cbuffer ubo : register(b0) { UBO ubo; }; + +Texture2D displacementMapTexture : register(t1); +SamplerState displacementMapSampler : register(s1); + +struct HSOutput +{ +[[vk::location(2)]] float4 Pos : SV_POSITION; +[[vk::location(0)]] float3 Normal : NORMAL0; +[[vk::location(1)]] float2 UV : TEXCOORD0; +}; + +struct ConstantsHSOutput +{ + float TessLevelOuter[4] : SV_TessFactor; + float TessLevelInner[2] : SV_InsideTessFactor; +}; + +struct DSOutput +{ + float4 Pos : SV_POSITION; +[[vk::location(0)]] float3 Normal : NORMAL0; +[[vk::location(1)]] float2 UV : TEXCOORD0; +[[vk::location(2)]] float3 ViewVec : TEXCOORD1; +[[vk::location(3)]] float3 LightVec : TEXCOORD2; +[[vk::location(4)]] float3 EyePos : POSITION1; +[[vk::location(5)]] float3 WorldPos : POSITION0; +}; + +[domain("quad")] +DSOutput main(ConstantsHSOutput input, float2 TessCoord : SV_DomainLocation, const OutputPatch patch) +{ + // Interpolate UV coordinates + DSOutput output = (DSOutput)0; + float2 uv1 = lerp(patch[0].UV, patch[1].UV, TessCoord.x); + float2 uv2 = lerp(patch[3].UV, patch[2].UV, TessCoord.x); + output.UV = lerp(uv1, uv2, TessCoord.y); + + float3 n1 = lerp(patch[0].Normal, patch[1].Normal, TessCoord.x); + float3 n2 = lerp(patch[3].Normal, patch[2].Normal, TessCoord.x); + output.Normal = lerp(n1, n2, TessCoord.y); + + // Interpolate positions + float4 pos1 = lerp(patch[0].Pos, patch[1].Pos, TessCoord.x); + float4 pos2 = lerp(patch[3].Pos, patch[2].Pos, TessCoord.x); + float4 pos = lerp(pos1, pos2, TessCoord.y); + // Displace + pos.y -= displacementMapTexture.SampleLevel(displacementMapSampler, output.UV, 0.0).r * ubo.displacementFactor; + // Perspective projection + output.Pos = mul(ubo.projection, mul(ubo.modelview, pos)); + + // Calculate vectors for lighting based on tessellated position + output.ViewVec = -pos.xyz; + output.LightVec = normalize(ubo.lightPos.xyz + output.ViewVec); + output.WorldPos = pos.xyz; + output.EyePos = mul(ubo.modelview, pos).xyz; + return output; +} diff --git a/Test/spv.debuginfo.hlsl.vert b/Test/spv.debuginfo.hlsl.vert new file mode 100644 index 0000000000..7d34ef430a --- /dev/null +++ b/Test/spv.debuginfo.hlsl.vert @@ -0,0 +1,112 @@ +/* +The MIT License (MIT) + +Copyright (c) 2022 Google LLC +Copyright (c) 2022 Sascha Willems + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +struct VSInput +{ +[[vk::location(0)]] float3 Pos : POSITION0; +[[vk::location(1)]] float3 Normal : NORMAL0; +[[vk::location(2)]] float2 UV : TEXCOORD0; +[[vk::location(3)]] float3 Color : COLOR0; + +// Instanced attributes +[[vk::location(4)]] float3 instancePos : POSITION1; +[[vk::location(5)]] float3 instanceRot : TEXCOORD1; +[[vk::location(6)]] float instanceScale : TEXCOORD2; +[[vk::location(7)]] int instanceTexIndex : TEXCOORD3; +}; + +struct UBO +{ + float4x4 projection; + float4x4 modelview; + float4 lightPos; + float locSpeed; + float globSpeed; +}; + +cbuffer ubo : register(b0) { UBO ubo; } + +struct VSOutput +{ + float4 Pos : SV_POSITION; +[[vk::location(0)]] float3 Normal : NORMAL0; +[[vk::location(1)]] float3 Color : COLOR0; +[[vk::location(2)]] float3 UV : TEXCOORD0; +[[vk::location(3)]] float3 ViewVec : TEXCOORD1; +[[vk::location(4)]] float3 LightVec : TEXCOORD2; +}; + +VSOutput main(VSInput input) +{ + VSOutput output = (VSOutput)0; + output.Color = input.Color; + output.UV = float3(input.UV, input.instanceTexIndex); + + // rotate around x + float s = sin(input.instanceRot.x + ubo.locSpeed); + float c = cos(input.instanceRot.x + ubo.locSpeed); + + float3x3 mx = { c, -s, 0.0, + s, c, 0.0, + 0.0, 0.0, 1.0 }; + + // rotate around y + s = sin(input.instanceRot.y + ubo.locSpeed); + c = cos(input.instanceRot.y + ubo.locSpeed); + + float3x3 my = { c, 0.0, -s, + 0.0, 1.0, 0.0, + s, 0.0, c }; + + // rot around z + s = sin(input.instanceRot.z + ubo.locSpeed); + c = cos(input.instanceRot.z + ubo.locSpeed); + + float3x3 mz = { 1.0, 0.0, 0.0, + 0.0, c, -s, + 0.0, s, c }; + + float3x3 rotMat = mul(mz, mul(my, mx)); + + float4x4 gRotMat; + s = sin(input.instanceRot.y + ubo.globSpeed); + c = cos(input.instanceRot.y + ubo.globSpeed); + gRotMat[0] = float4(c, 0.0, -s, 0.0); + gRotMat[1] = float4(0.0, 1.0, 0.0, 0.0); + gRotMat[2] = float4(s, 0.0, c, 0.0); + gRotMat[3] = float4(0.0, 0.0, 0.0, 1.0); + + float4 locPos = float4(mul(rotMat, input.Pos.xyz), 1.0); + float4 pos = float4((locPos.xyz * input.instanceScale) + input.instancePos, 1.0); + + output.Pos = mul(ubo.projection, mul(ubo.modelview, mul(gRotMat, pos))); + output.Normal = mul((float3x3)mul(ubo.modelview, gRotMat), mul(rotMat, input.Normal)); + + pos = mul(ubo.modelview, float4(input.Pos.xyz + input.instancePos, 1.0)); + float3 lPos = mul((float3x3)ubo.modelview, ubo.lightPos.xyz); + output.LightVec = lPos - pos.xyz; + output.ViewVec = -pos.xyz; + return output; +} diff --git a/Test/spv.debuginfo.implicit_br.glsl.frag b/Test/spv.debuginfo.implicit_br.glsl.frag new file mode 100644 index 0000000000..2451b77150 --- /dev/null +++ b/Test/spv.debuginfo.implicit_br.glsl.frag @@ -0,0 +1,60 @@ +#version 460 + +out int outx; +int counter = 0; + +void test_if() { + if (false) { + counter += 1; + } +} + +void test_ifelse() { + if (false) { + counter += 1; + } + else { + counter += 2; + } +} + +void test_if_compound() { + if (false) { + if (false) { + counter += 1; + } + } +} + +void test_if_compound2() { + if (false) { + if (false) { + counter += 1; + } + + counter += 2; + } +} + +void test_switch() { + switch (0) { + case 0: + counter += 1; + // implict fallthrough + case 1: + counter += 2; + break; + default: + counter += 3; + // implicit break + } +} + +void main() { + test_if(); + test_ifelse(); + test_if_compound(); + test_if_compound2(); + test_switch(); + outx = counter; +} \ No newline at end of file diff --git a/Test/spv.debuginfo.include.glsl.frag b/Test/spv.debuginfo.include.glsl.frag new file mode 100644 index 0000000000..f2c95a3e07 --- /dev/null +++ b/Test/spv.debuginfo.include.glsl.frag @@ -0,0 +1,12 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "spv.debuginfo.include.glsl.h" + +vec4 mainFileFunction(vec4 v) { + return -v; +} + +void main() { + headerOut = headerFunction(mainFileFunction(headerUboItem)); +} \ No newline at end of file diff --git a/Test/spv.debuginfo.include.glsl.h b/Test/spv.debuginfo.include.glsl.h new file mode 100644 index 0000000000..51df8469f9 --- /dev/null +++ b/Test/spv.debuginfo.include.glsl.h @@ -0,0 +1,10 @@ + +out vec4 headerOut; + +uniform UBO { + vec4 headerUboItem; +}; + +vec4 headerFunction(vec4 a) { + return -a; +} \ No newline at end of file diff --git a/Test/spv.debuginfo.multiline.glsl.frag b/Test/spv.debuginfo.multiline.glsl.frag new file mode 100644 index 0000000000..8ed0700c30 --- /dev/null +++ b/Test/spv.debuginfo.multiline.glsl.frag @@ -0,0 +1,25 @@ +#version 460 + +in float inx; +out float outx; + +float add(float x, float y, float z) { + return + x + + + y + + + z + ; +} + +void main() { + outx + = + add( + inx+1, + inx+2, + inx+3 + ) + ; +} \ No newline at end of file diff --git a/Test/spv.debuginfo.rt_types.glsl.rgen b/Test/spv.debuginfo.rt_types.glsl.rgen new file mode 100644 index 0000000000..8d5638fd8c --- /dev/null +++ b/Test/spv.debuginfo.rt_types.glsl.rgen @@ -0,0 +1,23 @@ +#version 460 +#extension GL_NV_ray_tracing : enable +#extension GL_EXT_ray_query : enable +layout(binding = 0, set = 0) uniform accelerationStructureEXT acc0; + +layout(shaderRecordNV) buffer block +{ + vec3 dir; + vec3 origin; +}; + +void main() +{ + rayQueryEXT localRayQuery; + uint rayFlags = gl_RayFlagsOpaqueEXT | gl_RayFlagsSkipClosestHitShaderEXT; + float tMin = 0.f; + float tMax = 1000.f; + rayQueryInitializeEXT(localRayQuery, acc0, rayFlags, 0xFF , origin, tMin, dir, tMax); + if (!rayQueryProceedEXT(localRayQuery)) + { + rayQueryTerminateEXT(localRayQuery); + } +} diff --git a/Test/spv.debuginfo.scalar_types.glsl.frag b/Test/spv.debuginfo.scalar_types.glsl.frag new file mode 100644 index 0000000000..f385f0227a --- /dev/null +++ b/Test/spv.debuginfo.scalar_types.glsl.frag @@ -0,0 +1,55 @@ +/* +The MIT License (MIT) + +Copyright (c) 2023 NVIDIA CORPORATION. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +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 Software. + +THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#version 460 + +#extension GL_EXT_shader_explicit_arithmetic_types : require + +bool VAR_bool; +int VAR_int; +uint VAR_uint; +float VAR_float; +double VAR_double; +int8_t VAR_int8_t; +uint8_t VAR_uint8_t; +int16_t VAR_int16_t; +uint16_t VAR_uint16_t; +int64_t VAR_int64_t; +uint64_t VAR_uint64_t; +float16_t VAR_float16_t; + +void main() { + VAR_bool = bool(0); + VAR_int = int(0); + VAR_uint = uint(0); + VAR_float = float(0); + VAR_double = double(0); + VAR_int8_t = int8_t(0); + VAR_uint8_t = uint8_t(0); + VAR_int16_t = int16_t(0); + VAR_uint16_t = uint16_t(0); + VAR_int64_t = int64_t(0); + VAR_uint64_t = uint64_t(0); + VAR_float16_t = float16_t(0); +} \ No newline at end of file diff --git a/Test/spv.earlyAndlateFragmentTests.frag b/Test/spv.earlyAndlateFragmentTests.frag new file mode 100644 index 0000000000..ef3b4af60a --- /dev/null +++ b/Test/spv.earlyAndlateFragmentTests.frag @@ -0,0 +1,12 @@ +#version 450 core +#extension GL_EXT_fragment_shading_rate : enable +#extension GL_ARB_shader_stencil_export : enable +#extension GL_ARB_fragment_shader_interlock : enable +#extension GL_AMD_shader_early_and_late_fragment_tests : enable +layout(location = 0) flat in int instanceIndex; +layout(early_and_late_fragment_tests_amd) in; +layout(depth_less) out float gl_FragDepth; +void main() +{ + gl_FragDepth = float(instanceIndex) / float(81); +} diff --git a/Test/spv.expect_assume.assumeEXT.comp b/Test/spv.expect_assume.assumeEXT.comp new file mode 100644 index 0000000000..165debcf92 --- /dev/null +++ b/Test/spv.expect_assume.assumeEXT.comp @@ -0,0 +1,13 @@ +#version 450 + +#extension GL_EXT_expect_assume: enable + +layout (local_size_x = 8) in; + +readonly buffer roblock { + int i; +} ro; + +void main() { + assumeEXT(ro.i > 42); +} diff --git a/Test/spv.expect_assume.expectEXT.comp b/Test/spv.expect_assume.expectEXT.comp new file mode 100644 index 0000000000..a157a5fe29 --- /dev/null +++ b/Test/spv.expect_assume.expectEXT.comp @@ -0,0 +1,43 @@ +#version 450 + +#extension GL_EXT_expect_assume: enable + +layout (local_size_x = 8) in; + +readonly buffer roblock { + bool b; + bvec2 bv2; + bvec3 bv3; + bvec4 bv4; + int i; + ivec2 iv2; + ivec3 iv3; + ivec4 iv4; + uint ui; + uvec2 uv2; + uvec3 uv3; + uvec4 uv4; +} ro; + +void main() { + int x = 0; + + if (expectEXT(ro.b, true) == true || + expectEXT(ro.bv2, bvec2(true, false)) == bvec2(true, false) || + expectEXT(ro.bv3, bvec3(true, false, true)) == bvec3(true, false, true) || + expectEXT(ro.bv4, bvec4(false, true, false, true)) == bvec4(false, true, false, true)) { + x++; + } + if (expectEXT(ro.i, 10) == 10 || + expectEXT(ro.iv2, ivec2(11, -22)) == ivec2(11, -22) || + expectEXT(ro.iv3, ivec3(11, -22, 33)) == ivec3(11, -22, 33) || + expectEXT(ro.iv4, ivec4(11, -22, 33, 44)) == ivec4(11, -22, 33, 44)) { + x++; + } + if (expectEXT(ro.ui, 10) == 10 || + expectEXT(ro.uv2, uvec2(11, 22)) == uvec2(11, 22) || + expectEXT(ro.uv3, uvec3(11, 22, 33)) == uvec3(11, 22, 33) || + expectEXT(ro.uv4, uvec4(11, 22, 33, 44)) == uvec4(11, 22, 33, 44)) { + x++; + } +} diff --git a/Test/spv.expect_assume.expectEXT.exttypes.comp b/Test/spv.expect_assume.expectEXT.exttypes.comp new file mode 100644 index 0000000000..d637fb739a --- /dev/null +++ b/Test/spv.expect_assume.expectEXT.exttypes.comp @@ -0,0 +1,101 @@ +#version 450 + +#extension GL_EXT_expect_assume: enable +#extension GL_EXT_shader_explicit_arithmetic_types: enable + +layout (local_size_x = 8) in; + +readonly buffer roblock { + int8_t i8; + i8vec2 i8v2; + i8vec3 i8v3; + i8vec4 i8v4; + uint8_t u8; + u8vec2 u8v2; + u8vec3 u8v3; + u8vec4 u8v4; + int16_t i16; + i16vec2 i16v2; + i16vec3 i16v3; + i16vec4 i16v4; + uint16_t u16; + u16vec2 u16v2; + u16vec3 u16v3; + u16vec4 u16v4; + int32_t i32; + i32vec2 i32v2; + i32vec3 i32v3; + i32vec4 i32v4; + uint32_t u32; + u32vec2 u32v2; + u32vec3 u32v3; + u32vec4 u32v4; + int64_t i64; + i64vec2 i64v2; + i64vec3 i64v3; + i64vec4 i64v4; + uint64_t u64; + u64vec2 u64v2; + u64vec3 u64v3; + u64vec4 u64v4; +} ro; + +void main() { + int x = 0; + + // 8-bit + if (expectEXT(ro.i8, 10) == 10 || + expectEXT(ro.i8v2, i8vec2(11, -22)) == i8vec2(11, -22) || + expectEXT(ro.i8v3, i8vec3(11, -22, 33)) == i8vec3(11, -22, 33) || + expectEXT(ro.i8v4, i8vec4(11, -22, 33, 44)) == i8vec4(11, -22, 33, 44)) { + x++; + } + if (expectEXT(ro.u8, 10) == 10 || + expectEXT(ro.u8v2, u8vec2(11, 22)) == u8vec2(11, 22) || + expectEXT(ro.u8v3, u8vec3(11, 22, 33)) == u8vec3(11, 22, 33) || + expectEXT(ro.u8v4, u8vec4(11, 22, 33, 44)) == u8vec4(11, 22, 33, 44)) { + x++; + } + + // 16-bit + if (expectEXT(ro.i16, 10) == 10 || + expectEXT(ro.i16v2, i16vec2(11, -22)) == i16vec2(11, -22) || + expectEXT(ro.i16v3, i16vec3(11, -22, 33)) == i16vec3(11, -22, 33) || + expectEXT(ro.i16v4, i16vec4(11, -22, 33, 44)) == i16vec4(11, -22, 33, 44)) { + x++; + } + if (expectEXT(ro.u16, 10) == 10 || + expectEXT(ro.u16v2, u16vec2(11, 22)) == u16vec2(11, 22) || + expectEXT(ro.u16v3, u16vec3(11, 22, 33)) == u16vec3(11, 22, 33) || + expectEXT(ro.u16v4, u16vec4(11, 22, 33, 44)) == u16vec4(11, 22, 33, 44)) { + x++; + } + + // 32-bit + if (expectEXT(ro.i32, 10) == 10 || + expectEXT(ro.i32v2, i32vec2(11, -22)) == i32vec2(11, -22) || + expectEXT(ro.i32v3, i32vec3(11, -22, 33)) == i32vec3(11, -22, 33) || + expectEXT(ro.i32v4, i32vec4(11, -22, 33, 44)) == i32vec4(11, -22, 33, 44)) { + x++; + } + if (expectEXT(ro.u32, 10) == 10 || + expectEXT(ro.u32v2, u32vec2(11, 22)) == u32vec2(11, 22) || + expectEXT(ro.u32v3, u32vec3(11, 22, 33)) == u32vec3(11, 22, 33) || + expectEXT(ro.u32v4, u32vec4(11, 22, 33, 44)) == u32vec4(11, 22, 33, 44)) { + x++; + } + + // 64-bit + if (expectEXT(ro.i64, 10) == 10 || + expectEXT(ro.i64v2, i64vec2(11, -22)) == i64vec2(11, -22) || + expectEXT(ro.i64v3, i64vec3(11, -22, 33)) == i64vec3(11, -22, 33) || + expectEXT(ro.i64v4, i64vec4(11, -22, 33, 44)) == i64vec4(11, -22, 33, 44)) { + x++; + } + if (expectEXT(ro.u64, 10) == 10 || + expectEXT(ro.u64v2, u64vec2(11, 22)) == u64vec2(11, 22) || + expectEXT(ro.u64v3, u64vec3(11, 22, 33)) == u64vec3(11, 22, 33) || + expectEXT(ro.u64v4, u64vec4(11, 22, 33, 44)) == u64vec4(11, 22, 33, 44)) { + x++; + } +} diff --git a/Test/spv.exportFunctions.comp b/Test/spv.exportFunctions.comp new file mode 100644 index 0000000000..9332c65b61 --- /dev/null +++ b/Test/spv.exportFunctions.comp @@ -0,0 +1,9 @@ +#version 450 + +float add(float a, float b) { + return a + b; +} + +int foo() { + return 0; +} diff --git a/Test/spv.ext.AnyHitShader.rahit b/Test/spv.ext.AnyHitShader.rahit index 871f8fea80..2d33a00095 100644 --- a/Test/spv.ext.AnyHitShader.rahit +++ b/Test/spv.ext.AnyHitShader.rahit @@ -1,6 +1,9 @@ #version 460 #extension GL_EXT_ray_tracing : enable #extension GL_KHR_shader_subgroup_basic : enable +#extension GL_EXT_ray_cull_mask : enable +#extension GL_EXT_ray_tracing_position_fetch : enable + layout(location = 1) rayPayloadInEXT vec4 incomingPayload; void main() { @@ -22,6 +25,8 @@ void main() int v15 = gl_GeometryIndexEXT; mat3x4 v16 = gl_ObjectToWorld3x4EXT; mat3x4 v17 = gl_WorldToObject3x4EXT; + uint v18 = gl_CullMaskEXT; + vec3 v19 = gl_HitTriangleVertexPositionsEXT[0]; incomingPayload = vec4(0.5f); if (v2 == 1) { ignoreIntersectionEXT; diff --git a/Test/spv.ext.ClosestHitShader.rchit b/Test/spv.ext.ClosestHitShader.rchit index 3f9bbaa0b3..09496295a6 100644 --- a/Test/spv.ext.ClosestHitShader.rchit +++ b/Test/spv.ext.ClosestHitShader.rchit @@ -1,5 +1,8 @@ #version 460 #extension GL_EXT_ray_tracing : enable +#extension GL_EXT_ray_cull_mask : enable +#extension GL_EXT_ray_tracing_position_fetch : enable + layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; layout(location = 0) rayPayloadEXT vec4 localPayload; layout(location = 1) rayPayloadInEXT vec4 incomingPayload; @@ -23,5 +26,7 @@ void main() int v15 = gl_GeometryIndexEXT; mat3x4 v16 = gl_ObjectToWorld3x4EXT; mat3x4 v17 = gl_WorldToObject3x4EXT; + uint v18 = gl_CullMaskEXT; + vec3 v19 = gl_HitTriangleVertexPositionsEXT[0]; traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1); } diff --git a/Test/spv.ext.IntersectShader.rint b/Test/spv.ext.IntersectShader.rint index 4933ff5eff..2138ea1a0c 100644 --- a/Test/spv.ext.IntersectShader.rint +++ b/Test/spv.ext.IntersectShader.rint @@ -1,5 +1,6 @@ #version 460 #extension GL_EXT_ray_tracing : enable +#extension GL_EXT_ray_cull_mask : enable hitAttributeEXT vec4 iAttr; void main() { @@ -18,6 +19,7 @@ void main() mat4x3 v12 = gl_WorldToObjectEXT; mat3x4 v13 = gl_ObjectToWorld3x4EXT; mat3x4 v14 = gl_WorldToObject3x4EXT; + uint v15 = gl_CullMaskEXT; iAttr = vec4(0.5f,0.5f,0.0f,1.0f); reportIntersectionEXT(0.5, 1U); } diff --git a/Test/spv.ext.MissShader.rmiss b/Test/spv.ext.MissShader.rmiss index 05311c9eef..6ab1d1abd5 100644 --- a/Test/spv.ext.MissShader.rmiss +++ b/Test/spv.ext.MissShader.rmiss @@ -5,6 +5,7 @@ #extension GL_ARB_shader_ballot : enable #extension GL_NV_shader_sm_builtins : enable #extension GL_ARB_sparse_texture_clamp: enable +#extension GL_EXT_ray_cull_mask : enable layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; layout(location = 0) rayPayloadEXT vec4 localPayload; @@ -22,6 +23,7 @@ void main() vec3 v3 = gl_WorldRayDirectionEXT; float v4 = gl_RayTminEXT; float v5 = gl_RayTmaxEXT; + uint v6 = gl_CullMaskEXT; traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1); incomingPayload.x = float(gl_SubGroupSizeARB) + float(gl_SubgroupEqMask) + float(gl_WarpIDNV); vec4 texel = textureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp); diff --git a/Test/spv.ext.RayGenShader.rgen b/Test/spv.ext.RayGenShader.rgen index e9eb2cbb90..d342d863b5 100644 --- a/Test/spv.ext.RayGenShader.rgen +++ b/Test/spv.ext.RayGenShader.rgen @@ -1,6 +1,7 @@ #version 460 #extension GL_EXT_ray_tracing : enable #extension GL_EXT_ray_flags_primitive_culling : enable +#extension GL_EXT_opacity_micromap : enable layout(binding = 0) uniform accelerationStructureEXT accEXT0; layout(binding = 1, set = 0) uniform accelerationStructureEXT accEXT1; // Unused layout(binding = 2, r32ui) shadercallcoherent uniform uimage2D imageu; @@ -18,5 +19,5 @@ void main() uint ly = gl_LaunchIDEXT.y; uint sx = gl_LaunchSizeEXT.x; uint sy = gl_LaunchSizeEXT.y; - traceRayEXT(accEXT0, lx, ly, sx, sy, gl_RayFlagsSkipTrianglesEXT | gl_RayFlagsSkipAABBEXT, origin, 0.5f, dir, 0.75f, 1); + traceRayEXT(accEXT0, lx, ly, sx, sy, gl_RayFlagsSkipTrianglesEXT | gl_RayFlagsSkipAABBEXT | gl_RayFlagsForceOpacityMicromap2StateEXT, origin, 0.5f, dir, 0.75f, 1); } diff --git a/Test/spv.ext.ShaderTileImage.color.frag b/Test/spv.ext.ShaderTileImage.color.frag new file mode 100644 index 0000000000..f3b5530851 --- /dev/null +++ b/Test/spv.ext.ShaderTileImage.color.frag @@ -0,0 +1,12 @@ +#version 460 +#extension GL_EXT_shader_tile_image : require + +precision highp float; + +layout(location=1) tileImageEXT highp attachmentEXT in_color; +layout(location=0) out highp vec4 out_color; + +void main(void) +{ + out_color = colorAttachmentReadEXT(in_color); +} diff --git a/Test/spv.ext.ShaderTileImage.depth_stencil.frag b/Test/spv.ext.ShaderTileImage.depth_stencil.frag new file mode 100644 index 0000000000..faf9d932f8 --- /dev/null +++ b/Test/spv.ext.ShaderTileImage.depth_stencil.frag @@ -0,0 +1,16 @@ +#version 460 +#extension GL_EXT_shader_tile_image : require + +precision highp float; + +layout(location=0) out highp uvec4 stencil_out; +layout(location=1) out highp vec4 depth_out; + + +void main(void) +{ + float depth = depthAttachmentReadEXT(); + uint stencil_value = stencilAttachmentReadEXT(); + stencil_out = uvec4(stencil_value,0,0,0); + depth_out = vec4(depth,0.0,0.0,0.0); +} diff --git a/Test/spv.ext.ShaderTileImage.overlap.frag b/Test/spv.ext.ShaderTileImage.overlap.frag new file mode 100644 index 0000000000..98a44e4f8b --- /dev/null +++ b/Test/spv.ext.ShaderTileImage.overlap.frag @@ -0,0 +1,15 @@ +#version 460 +#extension GL_EXT_shader_tile_image : require + +precision mediump int; +precision highp float; + +layout(location=0) tileImageEXT highp attachmentEXT in_color[2]; +layout(location=1) tileImageEXT highp attachmentEXT in_color_1; +layout(location=1) out highp vec4 out_color; + +void main(void) +{ + out_color = colorAttachmentReadEXT(in_color[0]); + out_color += colorAttachmentReadEXT(in_color_1); +} diff --git a/Test/spv.ext.ShaderTileImage.subpassinput.frag b/Test/spv.ext.ShaderTileImage.subpassinput.frag new file mode 100644 index 0000000000..ec0e85ea43 --- /dev/null +++ b/Test/spv.ext.ShaderTileImage.subpassinput.frag @@ -0,0 +1,13 @@ +#version 450 +#extension GL_EXT_shader_tile_image : require + +precision highp float; + +layout(set = 0, binding = 0, input_attachment_index = 0) uniform subpassInput i; + +layout(location = 0) out vec4 fragColor; + +void main() +{ + fragColor = subpassLoad(i); +} diff --git a/Test/spv.ext.ShaderTileImage.typemismatch.frag b/Test/spv.ext.ShaderTileImage.typemismatch.frag new file mode 100644 index 0000000000..170bfaba0c --- /dev/null +++ b/Test/spv.ext.ShaderTileImage.typemismatch.frag @@ -0,0 +1,13 @@ +#version 320 es +#extension GL_EXT_shader_tile_image : require + +layout(non_coherent_color_attachment_readEXT) in; + +layout(location=0) tileImageEXT highp iattachmentEXT in_color_i; +layout(location=0) out highp vec4 out_color_f; + +void main(void) +{ + highp ivec4 read = colorAttachmentReadEXT(in_color_i); + out_color_f = vec4(read); +} diff --git a/Test/spv.ext.ShaderTileImage.wronglayout.frag b/Test/spv.ext.ShaderTileImage.wronglayout.frag new file mode 100644 index 0000000000..7cc06edfe2 --- /dev/null +++ b/Test/spv.ext.ShaderTileImage.wronglayout.frag @@ -0,0 +1,13 @@ +#version 460 +#extension GL_EXT_shader_tile_image : require + +precision highp float; +precision mediump int; + +layout(binding=0, set=0, input_attachment_index=0) tileImageEXT highp attachmentEXT in_color; +layout(location=0) out highp vec4 out_color; + +void main(void) +{ + out_color = colorAttachmentReadEXT(in_color); +} diff --git a/Test/spv.ext.meshShaderBuiltins.mesh b/Test/spv.ext.meshShaderBuiltins.mesh new file mode 100644 index 0000000000..70a97360d7 --- /dev/null +++ b/Test/spv.ext.meshShaderBuiltins.mesh @@ -0,0 +1,74 @@ +#version 460 + +#define MAX_VER 81 +#define MAX_PRIM 32 + +#define BARRIER() \ + memoryBarrierShared(); \ + barrier(); + +#extension GL_EXT_mesh_shader : enable + +layout(local_size_x = 32, local_size_y=1, local_size_z=1) in; + +layout(max_vertices=MAX_VER) out; +layout(max_primitives=MAX_PRIM) out; +layout(triangles) out; + +// test use of builtins in mesh shaders: + +void main() +{ + uint iid = gl_LocalInvocationID.x; + uint gid = gl_WorkGroupID.x; + uvec3 numWorkGrous = gl_NumWorkGroups; + uint vertexCount = MAX_VER; // vertexCount <= max_vertices + uint primitiveCount = MAX_PRIM; // primitiveCount <= max_primtives + SetMeshOutputsEXT(vertexCount, primitiveCount); + + gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0); + gl_MeshVerticesEXT[iid].gl_PointSize = 2.0; + gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0; + gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0; + + BARRIER(); + + gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position; + gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize; + gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3]; + gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2]; + + BARRIER(); + + gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6; + gl_MeshPrimitivesEXT[iid].gl_Layer = 7; + gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8; + gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false; + + BARRIER(); + + gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID; + gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer; + gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex; + gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT; + + BARRIER(); + + // check bound limits + gl_PrimitiveTriangleIndicesEXT[0] = uvec3(257); // should truncate 257 -> 1, range is between [0, vertexCount-1] + gl_PrimitiveTriangleIndicesEXT[primitiveCount - 1] = uvec3(2); // array size is primitiveCount*3 for triangle + gl_PrimitiveTriangleIndicesEXT[gid] = gl_PrimitiveTriangleIndicesEXT[gid-1]; + + BARRIER(); +} + +// test use of builtins enabled by other extensions +#extension GL_ARB_shader_draw_parameters : enable +#extension GL_EXT_multiview : enable + +void testAdditionalBuiltins() +{ + int id = gl_DrawIDARB; // GL_ARB_shader_draw_parameters + int viewIdx = gl_ViewIndex; // GL_EXT_multiview + +} \ No newline at end of file diff --git a/Test/spv.ext.meshShaderBuiltinsShadingRate.mesh b/Test/spv.ext.meshShaderBuiltinsShadingRate.mesh new file mode 100644 index 0000000000..b99125dc22 --- /dev/null +++ b/Test/spv.ext.meshShaderBuiltinsShadingRate.mesh @@ -0,0 +1,77 @@ +#version 460 + +#define MAX_VER 81 +#define MAX_PRIM 32 + +#define BARRIER() \ + memoryBarrierShared(); \ + barrier(); + +#extension GL_EXT_mesh_shader : enable +#extension GL_EXT_fragment_shading_rate : enable + +layout(local_size_x = 32, local_size_y=1, local_size_z=1) in; + +layout(max_vertices=MAX_VER) out; +layout(max_primitives=MAX_PRIM) out; +layout(triangles) out; + +// test use of builtins in mesh shaders: + +void main() +{ + uint iid = gl_LocalInvocationID.x; + uint gid = gl_WorkGroupID.x; + uvec3 numWorkGrous = gl_NumWorkGroups; + uint vertexCount = MAX_VER; // vertexCount <= max_vertices + uint primitiveCount = MAX_PRIM; // primitiveCount <= max_primtives + SetMeshOutputsEXT(vertexCount, primitiveCount); + + gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0); + gl_MeshVerticesEXT[iid].gl_PointSize = 2.0; + gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0; + gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0; + + BARRIER(); + + gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position; + gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize; + gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3]; + gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2]; + + BARRIER(); + + gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6; + gl_MeshPrimitivesEXT[iid].gl_Layer = 7; + gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8; + gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false; + gl_MeshPrimitivesEXT[iid].gl_PrimitiveShadingRateEXT = 0; + + BARRIER(); + + gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID; + gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer; + gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex; + gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT; + gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveShadingRateEXT = 0; + + BARRIER(); + + // check bound limits + gl_PrimitiveTriangleIndicesEXT[0] = uvec3(257); // should truncate 257 -> 1, range is between [0, vertexCount-1] + gl_PrimitiveTriangleIndicesEXT[primitiveCount - 1] = uvec3(2); // array size is primitiveCount*3 for triangle + gl_PrimitiveTriangleIndicesEXT[gid] = gl_PrimitiveTriangleIndicesEXT[gid-1]; + + BARRIER(); +} + +// test use of builtins enabled by other extensions +#extension GL_ARB_shader_draw_parameters : enable +#extension GL_EXT_multiview : enable + +void testAdditionalBuiltins() +{ + int id = gl_DrawIDARB; // GL_ARB_shader_draw_parameters + int viewIdx = gl_ViewIndex; // GL_EXT_multiview + +} \ No newline at end of file diff --git a/Test/spv.ext.meshShaderRedeclBuiltins.mesh b/Test/spv.ext.meshShaderRedeclBuiltins.mesh new file mode 100644 index 0000000000..8b6703450c --- /dev/null +++ b/Test/spv.ext.meshShaderRedeclBuiltins.mesh @@ -0,0 +1,75 @@ +#version 460 + +#define MAX_VER 81 +#define MAX_PRIM 32 + +#define BARRIER() \ + memoryBarrierShared(); \ + barrier(); + +#extension GL_EXT_mesh_shader : enable + +layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; + +layout(max_vertices=MAX_VER) out; +layout(max_primitives=MAX_PRIM) out; +layout(points) out; + +// test use of redeclared single-view builtins in mesh shaders: + +out gl_MeshPerVertexEXT { + vec4 gl_Position; + float gl_PointSize; + float gl_ClipDistance[4]; + float gl_CullDistance[4]; +} gl_MeshVerticesEXT[MAX_VER]; // explicitly sized to MAX_VER + +perprimitiveEXT out gl_MeshPerPrimitiveEXT { + int gl_PrimitiveID; + int gl_Layer; + int gl_ViewportIndex; + bool gl_CullPrimitiveEXT; + int gl_PrimitiveShadingRateEXT; +} gl_MeshPrimitivesEXT[]; // implicitly sized to MAX_PRIM + +out uint gl_PrimitivePointIndicesEXT[MAX_PRIM]; // explicitly sized to MAX_PRIM + +void main() +{ + uint iid = gl_LocalInvocationID.x; + uint gid = gl_WorkGroupID.x; + + SetMeshOutputsEXT(MAX_VER, MAX_PRIM); + + gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0); + gl_MeshVerticesEXT[iid].gl_PointSize = 2.0; + gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0; + gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0; + + BARRIER(); + + gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position; + gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize; + gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3]; + gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2]; + + BARRIER(); + + gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6; + gl_MeshPrimitivesEXT[iid].gl_Layer = 7; + gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8; + gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false; + + BARRIER(); + + gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID; + gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer; + gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex; + gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT; + + BARRIER(); + + // check bound limits + gl_PrimitivePointIndicesEXT[0] = 1; + gl_PrimitivePointIndicesEXT[MAX_PRIM - 1] = 2; +} diff --git a/Test/spv.ext.meshShaderTaskMem.mesh b/Test/spv.ext.meshShaderTaskMem.mesh new file mode 100644 index 0000000000..c22f7670d9 --- /dev/null +++ b/Test/spv.ext.meshShaderTaskMem.mesh @@ -0,0 +1,41 @@ +#version 450 + +#define MAX_VER 81 +#define MAX_PRIM 32 + +#define BARRIER() \ + memoryBarrierShared(); \ + barrier(); + +#extension GL_EXT_mesh_shader : enable + +layout(local_size_x = 32) in; + +layout(max_vertices=MAX_VER) out; +layout(max_primitives=MAX_PRIM) out; +layout(triangles) out; + +// use of storage qualifier "taskPayloadSharedEXT" in mesh shaders: +struct taskBlock { + float gid1[2]; + vec4 gid2; +}; +taskPayloadSharedEXT taskBlock mytask; + +buffer bufferBlock { + float gid3[2]; + vec4 gid4; +} mybuf; + +layout(location=0) out outBlock { + float gid5; + vec4 gid6; +} myblk[]; + +void main() +{ + uint iid = gl_LocalInvocationID.x; + + myblk[iid].gid5 = mytask.gid1[1] + mybuf.gid3[1]; + myblk[iid].gid6 = mytask.gid2 + mybuf.gid4; +} diff --git a/Test/spv.ext.meshShaderUserDefined.mesh b/Test/spv.ext.meshShaderUserDefined.mesh new file mode 100644 index 0000000000..c8035e2b35 --- /dev/null +++ b/Test/spv.ext.meshShaderUserDefined.mesh @@ -0,0 +1,59 @@ +#version 450 + +#define MAX_VER 81 +#define MAX_PRIM 32 + +#define BARRIER() \ + memoryBarrierShared(); \ + barrier(); + +#extension GL_EXT_mesh_shader : enable + +layout(local_size_x = 32) in; + +layout(max_vertices=MAX_VER) out; +layout(max_primitives=MAX_PRIM) out; +layout(triangles) out; + +// test use of user defined interface out blocks: + +// per-primitive block +perprimitiveEXT layout(location=0) out myblock { + float f; + float fArr[4]; + vec3 pos; + vec4 posArr[4]; + mat4 m; + mat3 mArr[2]; +} blk[]; + +// per-vertex block +layout(location=20) out myblock2 { + float f; + vec4 pos; + mat4 m; +} blk2[]; + +void main() +{ + uint iid = gl_LocalInvocationID.x; + uint gid = gl_WorkGroupID.x; + + blk[iid].f = 11.0; + blk[iid+1].fArr[gid] = blk[iid].f; + blk[iid/2].pos.yzx = vec3(14.0, 15.0, 13.0); + blk[iid*2].posArr[1].yzw = blk[iid/2].pos; + blk[iid/4].m[2].wzyx = vec4(13.0, 14.0, 15.0, 16.0); + blk[iid].mArr[0][1][1] = blk[iid/4].m[2].w; + blk[iid*4].mArr[1][gid] = vec3(17.0, 18.0, 19.0); + + BARRIER(); + + blk2[iid].f = blk2[iid-1].f + 20.0; + blk2[iid].pos = vec4(21.0, 22.0, 23.0, 24.0); + blk2[iid+1].m[gid] = blk2[iid].pos; + blk2[iid+1].m[gid][2] = 29.0; + blk2[iid+2].m[3] = blk2[iid+1].m[gid]; + + BARRIER(); +} diff --git a/Test/spv.ext.meshTaskShader.task b/Test/spv.ext.meshTaskShader.task new file mode 100644 index 0000000000..074fb23f95 --- /dev/null +++ b/Test/spv.ext.meshTaskShader.task @@ -0,0 +1,51 @@ +#version 450 + +#define BARRIER() \ + memoryBarrierShared(); \ + barrier(); + +#extension GL_EXT_mesh_shader : enable + +layout(local_size_x = 32) in; + +// test use of shared memory in task shaders: +layout(binding=0) writeonly uniform image2D uni_image; +uniform block0 { + uint uni_value; +}; +shared vec4 mem[10]; + +// use of storage qualifier "taskPayloadSharedEXT" in task shaders +struct Task { + vec2 dummy; + vec2 submesh[3]; +}; +taskPayloadSharedEXT Task mytask; + +void main() +{ + uint iid = gl_LocalInvocationID.x; + uint gid = gl_WorkGroupID.x; + + // 1. shared memory load and stores + for (uint i = 0; i < 10; ++i) { + mem[i] = vec4(i + uni_value); + } + imageStore(uni_image, ivec2(iid), mem[gid]); + imageStore(uni_image, ivec2(iid), mem[gid+1]); + + BARRIER(); + + // 2. task memory stores + + mytask.dummy = vec2(30.0, 31.0); + mytask.submesh[0] = vec2(32.0, 33.0); + mytask.submesh[1] = vec2(34.0, 35.0); + mytask.submesh[2] = mytask.submesh[gid%2]; + + BARRIER(); + + // 3. emit task count under uniform control flow + EmitMeshTasksEXT(3U, 1U, 1U); + +} diff --git a/Test/spv.ext.textureShadowLod.error.frag b/Test/spv.ext.textureShadowLod.error.frag new file mode 100644 index 0000000000..ef6ec21d44 --- /dev/null +++ b/Test/spv.ext.textureShadowLod.error.frag @@ -0,0 +1,13 @@ +#version 450 + +layout(binding = 0) uniform sampler2DArrayShadow s2da; + +layout(location = 0) out vec4 c_out; + +layout(location = 0) in vec4 tc; + +void main() +{ + float c = textureLod(s2da, tc, 0); + c_out = vec4(c); +} diff --git a/Test/spv.ext.textureShadowLod.frag b/Test/spv.ext.textureShadowLod.frag new file mode 100644 index 0000000000..8c879d9b12 --- /dev/null +++ b/Test/spv.ext.textureShadowLod.frag @@ -0,0 +1,20 @@ +#version 450 +#extension GL_EXT_texture_shadow_lod : enable + +layout(binding = 0) uniform sampler2DArrayShadow s2da; +layout(binding = 1) uniform samplerCubeArrayShadow sca; +layout(binding = 2) uniform samplerCubeShadow sc; + +layout(location = 0) out float c; + +layout(location = 0) in vec4 tc; + +void main() { + c = texture(s2da, tc, 0.0); + c = texture(sca, tc, 0.0, 0.0); + c = textureOffset(s2da, tc, ivec2(0.0), 0.0); + c = textureLod(s2da, tc, 0.0); + c = textureLod(sc, tc, 0.0); + c = textureLod(sca, tc, 0.0, 0.0); + c = textureLodOffset(s2da, tc, 0.0, ivec2(0.0)); +} diff --git a/Test/spv.float16NoRelaxed.vert b/Test/spv.float16NoRelaxed.vert new file mode 100644 index 0000000000..d594a1d4a5 --- /dev/null +++ b/Test/spv.float16NoRelaxed.vert @@ -0,0 +1,16 @@ +#version 450 +#extension GL_KHR_shader_subgroup_vote: enable +#extension GL_EXT_shader_subgroup_extended_types_float16 : enable +layout(set = 0, binding = 0, std430) buffer Buffer1 +{ + uint result[]; +}; + +void main (void) +{ + uint tempRes; + float16_t valueNoEqual = float16_t(gl_SubgroupInvocationID); + tempRes = subgroupAllEqual(valueNoEqual) ? 0x0 : 0x10; + result[gl_VertexIndex] = tempRes; +} + diff --git a/Test/spv.floatFetch.frag b/Test/spv.floatFetch.frag new file mode 100644 index 0000000000..c02ddf35fa --- /dev/null +++ b/Test/spv.floatFetch.frag @@ -0,0 +1,941 @@ +#version 450 core + +#extension GL_ARB_sparse_texture2: enable +#extension GL_ARB_sparse_texture_clamp: enable +#extension GL_AMD_texture_gather_bias_lod: enable + +layout(set = 0, binding = 0) uniform sampler1D s1D; +layout(set = 0, binding = 1) uniform sampler2D s2D; +layout(set = 0, binding = 2) uniform sampler3D s3D; +layout(set = 0, binding = 3) uniform sampler2DRect s2DRect; +layout(set = 0, binding = 4) uniform samplerCube sCube; +layout(set = 0, binding = 5) uniform samplerBuffer sBuffer; +layout(set = 0, binding = 6) uniform sampler2DMS s2DMS; +layout(set = 0, binding = 7) uniform sampler1DArray s1DArray; +layout(set = 0, binding = 8) uniform sampler2DArray s2DArray; +layout(set = 0, binding = 9) uniform samplerCubeArray sCubeArray; +layout(set = 0, binding = 10) uniform sampler2DMSArray s2DMSArray; + +layout(set = 0, binding = 11) uniform sampler1DShadow s1DShadow; +layout(set = 0, binding = 12) uniform sampler2DShadow s2DShadow; +layout(set = 0, binding = 13) uniform sampler2DRectShadow s2DRectShadow; +layout(set = 0, binding = 14) uniform samplerCubeShadow sCubeShadow; +layout(set = 0, binding = 15) uniform sampler1DArrayShadow s1DArrayShadow; +layout(set = 0, binding = 16) uniform sampler2DArrayShadow s2DArrayShadow; +layout(set = 0, binding = 17) uniform samplerCubeArrayShadow sCubeArrayShadow; + +layout(set = 1, binding = 0) layout(rgba16f) uniform image1D i1D; +layout(set = 1, binding = 1) layout(rgba16f) uniform image2D i2D; +layout(set = 1, binding = 2) layout(rgba16f) uniform image3D i3D; +layout(set = 1, binding = 3) layout(rgba16f) uniform image2DRect i2DRect; +layout(set = 1, binding = 4) layout(rgba16f) uniform imageCube iCube; +layout(set = 1, binding = 5) layout(rgba16f) uniform image1DArray i1DArray; +layout(set = 1, binding = 6) layout(rgba16f) uniform image2DArray i2DArray; +layout(set = 1, binding = 7) layout(rgba16f) uniform imageCubeArray iCubeArray; +layout(set = 1, binding = 8) layout(rgba16f) uniform imageBuffer iBuffer; +layout(set = 1, binding = 9) layout(rgba16f) uniform image2DMS i2DMS; +layout(set = 1, binding = 10) layout(rgba16f) uniform image2DMSArray i2DMSArray; + +layout(set = 2, binding = 0) uniform texture1D t1D; +layout(set = 2, binding = 1) uniform texture2D t2D; +layout(set = 2, binding = 2) uniform texture3D t3D; +layout(set = 2, binding = 3) uniform texture2DRect t2DRect; +layout(set = 2, binding = 4) uniform textureCube tCube; +layout(set = 2, binding = 5) uniform texture1DArray t1DArray; +layout(set = 2, binding = 6) uniform texture2DArray t2DArray; +layout(set = 2, binding = 7) uniform textureCubeArray tCubeArray; +layout(set = 2, binding = 8) uniform textureBuffer tBuffer; +layout(set = 2, binding = 9) uniform texture2DMS t2DMS; +layout(set = 2, binding = 10) uniform texture2DMSArray t2DMSArray; + +layout(set = 2, binding = 11) uniform sampler s; +layout(set = 2, binding = 12) uniform samplerShadow sShadow; + +layout(set = 3, binding = 0, input_attachment_index = 0) uniform subpassInput subpass; +layout(set = 3, binding = 1, input_attachment_index = 0) uniform subpassInputMS subpassMS; + +layout(location = 0) in float c1; +layout(location = 1) in vec2 c2; +layout(location = 2) in vec3 c3; +layout(location = 3) in vec4 c4; + +layout(location = 4) in float compare; +layout(location = 5) in float lod; +layout(location = 6) in float bias; +layout(location = 7) in float lodClamp; + +layout(location = 8) in float dPdxy1; +layout(location = 9) in vec2 dPdxy2; +layout(location = 10) in vec3 dPdxy3; + +const int offset1 = 1; +const ivec2 offset2 = ivec2(1); +const ivec3 offset3 = ivec3(1); +const ivec2 offsets[4] = { offset2, offset2, offset2, offset2 }; + +layout(location = 0) out vec4 fragColor; + +vec4 testTexture() +{ + vec4 texel = vec4(0.0); + + texel += texture(s1D, c1); + texel += texture(s2D, c2); + texel += texture(s3D, c3); + texel += texture(sCube, c3); + texel.x += texture(s1DShadow, c3); + texel.x += texture(s2DShadow, c3); + texel.x += texture(sCubeShadow, c4); + texel += texture(s1DArray, c2); + texel += texture(s2DArray, c3); + texel += texture(sCubeArray, c4); + texel.x += texture(s1DArrayShadow, c3); + texel.x += texture(s2DArrayShadow, c4); + texel += texture(s2DRect, c2); + texel.x += texture(s2DRectShadow, c3); + texel.x += texture(sCubeArrayShadow, c4, compare); + + return texel; +} + +vec4 testTextureProj() +{ + vec4 texel = vec4(0.0); + + texel += textureProj(s1D, c2); + texel += textureProj(s1D, c4); + texel += textureProj(s2D, c3); + texel += textureProj(s2D, c4); + texel += textureProj(s3D, c4); + texel.x += textureProj(s1DShadow, c4); + texel.x += textureProj(s2DShadow, c4); + texel += textureProj(s2DRect, c3); + texel += textureProj(s2DRect, c4); + texel.x += textureProj(s2DRectShadow, c4); + + return texel; +} + +vec4 testTextureLod() +{ + vec4 texel = vec4(0.0); + + texel += textureLod(s1D, c1, lod); + texel += textureLod(s2D, c2, lod); + texel += textureLod(s3D, c3, lod); + texel += textureLod(sCube, c3, lod); + texel.x += textureLod(s1DShadow, c3, lod); + texel.x += textureLod(s2DShadow, c3, lod); + texel += textureLod(s1DArray, c2, lod); + texel += textureLod(s2DArray, c3, lod); + texel.x += textureLod(s1DArrayShadow, c3, lod); + texel += textureLod(sCubeArray, c4, lod); + + return texel; +} + +vec4 testTextureOffset() +{ + vec4 texel = vec4(0.0); + + texel += textureOffset(s1D, c1, offset1); + texel += textureOffset(s2D, c2, offset2); + texel += textureOffset(s3D, c3, offset3); + texel += textureOffset(s2DRect, c2, offset2); + texel.x += textureOffset(s2DRectShadow, c3, offset2); + texel.x += textureOffset(s1DShadow, c3, offset1); + texel.x += textureOffset(s2DShadow, c3, offset2); + texel += textureOffset(s1DArray, c2, offset1); + texel += textureOffset(s2DArray, c3, offset2); + texel.x += textureOffset(s1DArrayShadow, c3, offset1); + texel.x += textureOffset(s2DArrayShadow, c4, offset2); + + return texel; +} + +vec4 testTextureProjOffset() +{ + vec4 texel = vec4(0.0); + + texel += textureProjOffset(s1D, c2, offset1); + texel += textureProjOffset(s1D, c4, offset1); + texel += textureProjOffset(s2D, c3, offset2); + texel += textureProjOffset(s2D, c4, offset2); + texel += textureProjOffset(s3D, c4, offset3); + texel += textureProjOffset(s2DRect, c3, offset2); + texel += textureProjOffset(s2DRect, c4, offset2); + texel.x += textureProjOffset(s2DRectShadow, c4, offset2); + texel.x += textureProjOffset(s1DShadow, c4, offset1); + texel.x += textureProjOffset(s2DShadow, c4, offset2); + + return texel; +} + +vec4 testTextureLodOffset() +{ + vec4 texel = vec4(0.0); + + texel += textureLodOffset(s1D, c1, lod, offset1); + texel += textureLodOffset(s2D, c2, lod, offset2); + texel += textureLodOffset(s3D, c3, lod, offset3); + texel.x += textureLodOffset(s1DShadow, c3, lod, offset1); + texel.x += textureLodOffset(s2DShadow, c3, lod, offset2); + texel += textureLodOffset(s1DArray, c2, lod, offset1); + texel += textureLodOffset(s2DArray, c3, lod, offset2); + texel.x += textureLodOffset(s1DArrayShadow, c3, lod, offset1); + + return texel; +} + +vec4 testTextureProjLodOffset() +{ + vec4 texel = vec4(0.0); + + texel += textureProjLodOffset(s1D, c2, lod, offset1); + texel += textureProjLodOffset(s1D, c4, lod, offset1); + texel += textureProjLodOffset(s2D, c3, lod, offset2); + texel += textureProjLodOffset(s2D, c4, lod, offset2); + texel += textureProjLodOffset(s3D, c4, lod, offset3); + texel.x += textureProjLodOffset(s1DShadow, c4, lod, offset1); + texel.x += textureProjLodOffset(s2DShadow, c4, lod, offset2); + + return texel; +} + +vec4 testTexelFetch() +{ + vec4 texel = vec4(0.0); + + texel += texelFetch(s1D, int(c1), int(lod)); + texel += texelFetch(s2D, ivec2(c2), int(lod)); + texel += texelFetch(s3D, ivec3(c3), int(lod)); + texel += texelFetch(s2DRect, ivec2(c2)); + texel += texelFetch(s1DArray, ivec2(c2), int(lod)); + texel += texelFetch(s2DArray, ivec3(c3), int(lod)); + texel += texelFetch(sBuffer, int(c1)); + texel += texelFetch(s2DMS, ivec2(c2), 1); + texel += texelFetch(s2DMSArray, ivec3(c3), 2); + + return texel; +} + +vec4 testTexelFetchOffset() +{ + vec4 texel = vec4(0.0); + + texel += texelFetchOffset(s1D, int(c1), int(lod), offset1); + texel += texelFetchOffset(s2D, ivec2(c2), int(lod), offset2); + texel += texelFetchOffset(s3D, ivec3(c3), int(lod), offset3); + texel += texelFetchOffset(s2DRect, ivec2(c2), offset2); + texel += texelFetchOffset(s1DArray, ivec2(c2), int(lod), offset1); + texel += texelFetchOffset(s2DArray, ivec3(c3), int(lod), offset2); + + return texel; +} + +vec4 testTextureGrad() +{ + vec4 texel = vec4(0.0); + + texel += textureGrad(s1D, c1, dPdxy1, dPdxy1); + texel += textureGrad(s2D, c2, dPdxy2, dPdxy2); + texel += textureGrad(s3D, c3, dPdxy3, dPdxy3); + texel += textureGrad(sCube, c3, dPdxy3, dPdxy3); + texel += textureGrad(s2DRect, c2, dPdxy2, dPdxy2); + texel.x += textureGrad(s2DRectShadow, c3, dPdxy2, dPdxy2); + texel.x += textureGrad(s1DShadow, c3, dPdxy1, dPdxy1); + texel.x += textureGrad(s2DShadow, c3, dPdxy2, dPdxy2); + texel.x += textureGrad(sCubeShadow, c4, dPdxy3, dPdxy3); + texel += textureGrad(s1DArray, c2, dPdxy1, dPdxy1); + texel += textureGrad(s2DArray, c3, dPdxy2, dPdxy2); + texel.x += textureGrad(s1DArrayShadow, c3, dPdxy1, dPdxy1); + texel.x += textureGrad(s2DArrayShadow, c4, dPdxy2, dPdxy2); + texel += textureGrad(sCubeArray, c4, dPdxy3, dPdxy3); + + return texel; +} + +vec4 testTextureGradOffset() +{ + vec4 texel = vec4(0.0); + + texel += textureGradOffset(s1D, c1, dPdxy1, dPdxy1, offset1); + texel += textureGradOffset(s2D, c2, dPdxy2, dPdxy2, offset2); + texel += textureGradOffset(s3D, c3, dPdxy3, dPdxy3, offset3); + texel += textureGradOffset(s2DRect, c2, dPdxy2, dPdxy2, offset2); + texel.x += textureGradOffset(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2); + texel.x += textureGradOffset(s1DShadow, c3, dPdxy1, dPdxy1, offset1); + texel.x += textureGradOffset(s2DShadow, c3, dPdxy2, dPdxy2, offset2); + texel += textureGradOffset(s1DArray, c2, dPdxy1, dPdxy1, offset1); + texel += textureGradOffset(s2DArray, c3, dPdxy2, dPdxy2, offset2); + texel.x += textureGradOffset(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1); + texel.x += textureGradOffset(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2); + + return texel; +} + +vec4 testTextureProjGrad() +{ + vec4 texel = vec4(0.0); + + texel += textureProjGrad(s1D, c2, dPdxy1, dPdxy1); + texel += textureProjGrad(s1D, c4, dPdxy1, dPdxy1); + texel += textureProjGrad(s2D, c3, dPdxy2, dPdxy2); + texel += textureProjGrad(s2D, c4, dPdxy2, dPdxy2); + texel += textureProjGrad(s3D, c4, dPdxy3, dPdxy3); + texel += textureProjGrad(s2DRect, c3, dPdxy2, dPdxy2); + texel += textureProjGrad(s2DRect, c4, dPdxy2, dPdxy2); + texel.x += textureProjGrad(s2DRectShadow, c4, dPdxy2, dPdxy2); + texel.x += textureProjGrad(s1DShadow, c4, dPdxy1, dPdxy1); + texel.x += textureProjGrad(s2DShadow, c4, dPdxy2, dPdxy2); + + return texel; +} + +vec4 testTextureProjGradoffset() +{ + vec4 texel = vec4(0.0); + + texel += textureProjGradOffset(s1D, c2, dPdxy1, dPdxy1, offset1); + texel += textureProjGradOffset(s1D, c4, dPdxy1, dPdxy1, offset1); + texel += textureProjGradOffset(s2D, c3, dPdxy2, dPdxy2, offset2); + texel += textureProjGradOffset(s2D, c4, dPdxy2, dPdxy2, offset2); + texel += textureProjGradOffset(s2DRect, c3, dPdxy2, dPdxy2, offset2); + texel += textureProjGradOffset(s2DRect, c4, dPdxy2, dPdxy2, offset2); + texel.x += textureProjGradOffset(s2DRectShadow, c4, dPdxy2, dPdxy2, offset2); + texel += textureProjGradOffset(s3D, c4, dPdxy3, dPdxy3, offset3); + texel.x += textureProjGradOffset(s1DShadow, c4, dPdxy1, dPdxy1, offset1); + texel.x += textureProjGradOffset(s2DShadow, c4, dPdxy2, dPdxy2, offset2); + + return texel; +} + +vec4 testTextureGather() +{ + vec4 texel = vec4(0.0); + + texel += textureGather(s2D, c2, 0); + texel += textureGather(s2DArray, c3, 0); + texel += textureGather(sCube, c3, 0); + texel += textureGather(sCubeArray, c4, 0); + texel += textureGather(s2DRect, c2, 0); + texel += textureGather(s2DShadow, c2, compare); + texel += textureGather(s2DArrayShadow, c3, compare); + texel += textureGather(sCubeShadow, c3, compare); + texel += textureGather(sCubeArrayShadow, c4, compare); + texel += textureGather(s2DRectShadow, c2, compare); + + return texel; +} + +vec4 testTextureGatherOffset() +{ + vec4 texel = vec4(0.0); + + texel += textureGatherOffset(s2D, c2, offset2, 0); + texel += textureGatherOffset(s2DArray, c3, offset2, 0); + texel += textureGatherOffset(s2DRect, c2, offset2, 0); + texel += textureGatherOffset(s2DShadow, c2, compare, offset2); + texel += textureGatherOffset(s2DArrayShadow, c3, compare, offset2); + texel += textureGatherOffset(s2DRectShadow, c2, compare, offset2); + + return texel; +} + +vec4 testTextureGatherOffsets() +{ + vec4 texel = vec4(0.0); + + texel += textureGatherOffsets(s2D, c2, offsets, 0); + texel += textureGatherOffsets(s2DArray, c3, offsets, 0); + texel += textureGatherOffsets(s2DRect, c2, offsets, 0); + texel += textureGatherOffsets(s2DShadow, c2, compare, offsets); + texel += textureGatherOffsets(s2DArrayShadow, c3, compare, offsets); + texel += textureGatherOffsets(s2DRectShadow, c2, compare, offsets); + + return texel; +} + +vec4 testTextureGatherLod() +{ + vec4 texel = vec4(0.0); + + texel += textureGatherLodAMD(s2D, c2, lod, 0); + texel += textureGatherLodAMD(s2DArray, c3, lod, 0); + texel += textureGatherLodAMD(sCube, c3, lod, 0); + texel += textureGatherLodAMD(sCubeArray, c4, lod, 0); + + return texel; +} + +vec4 testTextureGatherLodOffset() +{ + vec4 texel = vec4(0.0); + + texel += textureGatherLodOffsetAMD(s2D, c2, lod, offset2, 0); + texel += textureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, 0); + + return texel; +} + +vec4 testTextureGatherLodOffsets() +{ + vec4 texel = vec4(0.0); + + texel += textureGatherLodOffsetsAMD(s2D, c2, lod, offsets, 0); + texel += textureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, 0); + + return texel; +} + +ivec4 testTextureSize() +{ + ivec4 size = ivec4(0); + + size.x += textureSize(s1D, int(lod)); + size.xy += textureSize(s2D, int(lod)); + size.xyz += textureSize(s3D, int(lod)); + size.xy += textureSize(sCube, int(lod)); + size.x += textureSize(s1DShadow, int(lod)); + size.xy += textureSize(s2DShadow, int(lod)); + size.xy += textureSize(sCubeShadow, int(lod)); + size.xyz += textureSize(sCubeArray, int(lod)); + size.xyz += textureSize(sCubeArrayShadow, int(lod)); + size.xy += textureSize(s2DRect); + size.xy += textureSize(s2DRectShadow); + size.xy += textureSize(s1DArray, int(lod)); + size.xyz += textureSize(s2DArray, int(lod)); + size.xy += textureSize(s1DArrayShadow, int(lod)); + size.xyz += textureSize(s2DArrayShadow, int(lod)); + size.x += textureSize(sBuffer); + size.xy += textureSize(s2DMS); + size.xyz += textureSize(s2DMSArray); + + return size; +} + +vec2 testTextureQueryLod() +{ + vec2 lod = vec2(0.0); + + lod += textureQueryLod(s1D, c1); + lod += textureQueryLod(s2D, c2); + lod += textureQueryLod(s3D, c3); + lod += textureQueryLod(sCube, c3); + lod += textureQueryLod(s1DArray, c1); + lod += textureQueryLod(s2DArray, c2); + lod += textureQueryLod(sCubeArray, c3); + lod += textureQueryLod(s1DShadow, c1); + lod += textureQueryLod(s2DShadow, c2); + lod += textureQueryLod(sCubeArrayShadow, c3); + lod += textureQueryLod(s1DArrayShadow, c1); + lod += textureQueryLod(s2DArrayShadow, c2); + lod += textureQueryLod(sCubeArrayShadow, c3); + + return lod; +} + +int testTextureQueryLevels() +{ + int levels = 0; + + levels += textureQueryLevels(s1D); + levels += textureQueryLevels(s2D); + levels += textureQueryLevels(s3D); + levels += textureQueryLevels(sCube); + levels += textureQueryLevels(s1DShadow); + levels += textureQueryLevels(s2DShadow); + levels += textureQueryLevels(sCubeShadow); + levels += textureQueryLevels(sCubeArray); + levels += textureQueryLevels(sCubeArrayShadow); + levels += textureQueryLevels(s1DArray); + levels += textureQueryLevels(s2DArray); + levels += textureQueryLevels(s1DArrayShadow); + levels += textureQueryLevels(s2DArrayShadow); + + return levels; +} + +int testTextureSamples() +{ + int samples = 0; + + samples += textureSamples(s2DMS); + samples += textureSamples(s2DMSArray); + + return samples; +} + +vec4 testImageLoad() +{ + vec4 texel = vec4(0.0); + + texel += imageLoad(i1D, int(c1)); + texel += imageLoad(i2D, ivec2(c2)); + texel += imageLoad(i3D, ivec3(c3)); + texel += imageLoad(i2DRect, ivec2(c2)); + texel += imageLoad(iCube, ivec3(c3)); + texel += imageLoad(iBuffer, int(c1)); + texel += imageLoad(i1DArray, ivec2(c2)); + texel += imageLoad(i2DArray, ivec3(c3)); + texel += imageLoad(iCubeArray, ivec3(c3)); + texel += imageLoad(i2DMS, ivec2(c2), 1); + texel += imageLoad(i2DMSArray, ivec3(c3), 1); + + return texel; +} + +void testImageStore(vec4 data) +{ + imageStore(i1D, int(c1), data); + imageStore(i2D, ivec2(c2), data); + imageStore(i3D, ivec3(c3), data); + imageStore(i2DRect, ivec2(c2), data); + imageStore(iCube, ivec3(c3), data); + imageStore(iBuffer, int(c1), data); + imageStore(i1DArray, ivec2(c2), data); + imageStore(i2DArray, ivec3(c3), data); + imageStore(iCubeArray, ivec3(c3), data); + imageStore(i2DMS, ivec2(c2), 1, data); + imageStore(i2DMSArray, ivec3(c3), 1, data); +} + +vec4 testSparseTexture() +{ + vec4 texel = vec4(0.0); + + sparseTextureARB(s2D, c2, texel); + sparseTextureARB(s3D, c3, texel); + sparseTextureARB(sCube, c3, texel); + sparseTextureARB(s2DShadow, c3, texel.x); + sparseTextureARB(sCubeShadow, c4, texel.x); + sparseTextureARB(s2DArray, c3, texel); + sparseTextureARB(sCubeArray, c4, texel); + sparseTextureARB(s2DArrayShadow, c4, texel.x); + sparseTextureARB(s2DRect, c2, texel); + sparseTextureARB(s2DRectShadow, c3, texel.x); + sparseTextureARB(sCubeArrayShadow, c4, compare, texel.x); + + return texel; +} + +vec4 testSparseTextureLod() +{ + vec4 texel = vec4(0.0); + + sparseTextureLodARB(s2D, c2, lod, texel); + sparseTextureLodARB(s3D, c3, lod, texel); + sparseTextureLodARB(sCube, c3, lod, texel); + sparseTextureLodARB(s2DShadow, c3, lod, texel.x); + sparseTextureLodARB(s2DArray, c3, lod, texel); + sparseTextureLodARB(sCubeArray, c4, lod, texel); + + return texel; +} + +vec4 testSparseTextureOffset() +{ + vec4 texel = vec4(0.0); + + sparseTextureOffsetARB(s2D, c2, offset2, texel); + sparseTextureOffsetARB(s3D, c3, offset3, texel); + sparseTextureOffsetARB(s2DRect, c2, offset2, texel); + sparseTextureOffsetARB(s2DRectShadow, c3, offset2, texel.x); + sparseTextureOffsetARB(s2DShadow, c3, offset2, texel.x); + sparseTextureOffsetARB(s2DArray, c3, offset2, texel); + sparseTextureOffsetARB(s2DArrayShadow, c4, offset2, texel.x); + + return texel; +} + +vec4 testSparseTextureLodOffset() +{ + vec4 texel = vec4(0.0); + + sparseTextureLodOffsetARB(s2D, c2, lod, offset2, texel); + sparseTextureLodOffsetARB(s3D, c3, lod, offset3, texel); + sparseTextureLodOffsetARB(s2DShadow, c3, lod, offset2, texel.x); + sparseTextureLodOffsetARB(s2DArray, c3, lod, offset2, texel); + + return texel; +} + +vec4 testSparseTextureGrad() +{ + vec4 texel = vec4(0.0); + + sparseTextureGradARB(s2D, c2, dPdxy2, dPdxy2, texel); + sparseTextureGradARB(s3D, c3, dPdxy3, dPdxy3, texel); + sparseTextureGradARB(sCube, c3, dPdxy3, dPdxy3, texel); + sparseTextureGradARB(s2DRect, c2, dPdxy2, dPdxy2, texel); + sparseTextureGradARB(s2DRectShadow, c3, dPdxy2, dPdxy2, texel.x); + sparseTextureGradARB(s2DShadow, c3, dPdxy2, dPdxy2, texel.x); + sparseTextureGradARB(sCubeShadow, c4, dPdxy3, dPdxy3, texel.x); + sparseTextureGradARB(s2DArray, c3, dPdxy2, dPdxy2, texel); + sparseTextureGradARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, texel.x); + sparseTextureGradARB(sCubeArray, c4, dPdxy3, dPdxy3, texel); + + return texel; +} + +vec4 testSparseTextureGradOffset() +{ + vec4 texel = vec4(0.0); + + sparseTextureGradOffsetARB(s2D, c2, dPdxy2, dPdxy2, offset2, texel); + sparseTextureGradOffsetARB(s3D, c3, dPdxy3, dPdxy3, offset3, texel); + sparseTextureGradOffsetARB(s2DRect, c2, dPdxy2, dPdxy2, offset2, texel); + sparseTextureGradOffsetARB(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2, texel.x); + sparseTextureGradOffsetARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, texel.x); + sparseTextureGradOffsetARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, texel); + sparseTextureGradOffsetARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, texel.x); + + return texel; +} + +vec4 testSparseTexelFetch() +{ + vec4 texel = vec4(0.0); + + sparseTexelFetchARB(s2D, ivec2(c2), int(lod), texel); + sparseTexelFetchARB(s3D, ivec3(c3), int(lod), texel); + sparseTexelFetchARB(s2DRect, ivec2(c2), texel); + sparseTexelFetchARB(s2DArray, ivec3(c3), int(lod), texel); + sparseTexelFetchARB(s2DMS, ivec2(c2), 1, texel); + sparseTexelFetchARB(s2DMSArray, ivec3(c3), 2, texel); + + return texel; +} + +vec4 testSparseTexelFetchOffset() +{ + vec4 texel = vec4(0.0); + + sparseTexelFetchOffsetARB(s2D, ivec2(c2), int(lod), offset2, texel); + sparseTexelFetchOffsetARB(s3D, ivec3(c3), int(lod), offset3, texel); + sparseTexelFetchOffsetARB(s2DRect, ivec2(c2), offset2, texel); + sparseTexelFetchOffsetARB(s2DArray, ivec3(c3), int(lod), offset2, texel); + + return texel; +} + +vec4 testSparseTextureGather() +{ + vec4 texel = vec4(0.0); + + sparseTextureGatherARB(s2D, c2, texel, 0); + sparseTextureGatherARB(s2DArray, c3, texel, 0); + sparseTextureGatherARB(sCube, c3, texel, 0); + sparseTextureGatherARB(sCubeArray, c4, texel, 0); + sparseTextureGatherARB(s2DRect, c2, texel, 0); + sparseTextureGatherARB(s2DShadow, c2, compare, texel); + sparseTextureGatherARB(s2DArrayShadow, c3, compare, texel); + sparseTextureGatherARB(sCubeShadow, c3, compare, texel); + sparseTextureGatherARB(sCubeArrayShadow, c4, compare, texel); + sparseTextureGatherARB(s2DRectShadow, c2, compare, texel); + + return texel; +} + +vec4 testSparseTextureGatherOffset() +{ + vec4 texel = vec4(0.0); + + sparseTextureGatherOffsetARB(s2D, c2, offset2, texel, 0); + sparseTextureGatherOffsetARB(s2DArray, c3, offset2, texel, 0); + sparseTextureGatherOffsetARB(s2DRect, c2, offset2, texel, 0); + sparseTextureGatherOffsetARB(s2DShadow, c2, compare, offset2, texel); + sparseTextureGatherOffsetARB(s2DArrayShadow, c3, compare, offset2, texel); + sparseTextureGatherOffsetARB(s2DRectShadow, c2, compare, offset2, texel); + + return texel; +} + +vec4 testSparseTextureGatherOffsets() +{ + vec4 texel = vec4(0.0); + const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0)); + + sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel, 0); + sparseTextureGatherOffsetsARB(s2DArray, c3, constOffsets, texel, 0); + sparseTextureGatherOffsetsARB(s2DRect, c2, constOffsets, texel, 0); + sparseTextureGatherOffsetsARB(s2DShadow, c2, compare, constOffsets, texel); + sparseTextureGatherOffsetsARB(s2DArrayShadow, c3, compare, constOffsets, texel); + sparseTextureGatherOffsetsARB(s2DRectShadow, c2, compare, constOffsets, texel); + + return texel; +} + +vec4 testSparseTextureGatherLod() +{ + vec4 texel = vec4(0.0); + + sparseTextureGatherLodAMD(s2D, c2, lod, texel, 0); + sparseTextureGatherLodAMD(s2DArray, c3, lod, texel, 0); + sparseTextureGatherLodAMD(sCube, c3, lod, texel, 0); + sparseTextureGatherLodAMD(sCubeArray, c4, lod, texel, 0); + + return texel; +} + +vec4 testSparseTextureGatherLodOffset() +{ + vec4 texel = vec4(0.0); + + sparseTextureGatherLodOffsetAMD(s2D, c2, lod, offset2, texel, 0); + sparseTextureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, texel, 0); + + return texel; +} + +vec4 testSparseTextureGatherLodOffsets() +{ + vec4 texel = vec4(0.0); + + sparseTextureGatherLodOffsetsAMD(s2D, c2, lod, offsets, texel, 0); + sparseTextureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, texel, 0); + + return texel; +} + +vec4 testSparseImageLoad() +{ + vec4 texel = vec4(0.0); + + sparseImageLoadARB(i2D, ivec2(c2), texel); + sparseImageLoadARB(i3D, ivec3(c3), texel); + sparseImageLoadARB(i2DRect, ivec2(c2), texel); + sparseImageLoadARB(iCube, ivec3(c3), texel); + sparseImageLoadARB(i2DArray, ivec3(c3), texel); + sparseImageLoadARB(iCubeArray, ivec3(c3), texel); + sparseImageLoadARB(i2DMS, ivec2(c2), 1, texel); + sparseImageLoadARB(i2DMSArray, ivec3(c3), 2, texel); + + return texel; +} + +vec4 testSparseTextureClamp() +{ + vec4 texel = vec4(0.0); + + sparseTextureClampARB(s2D, c2, lodClamp, texel); + sparseTextureClampARB(s3D, c3, lodClamp, texel); + sparseTextureClampARB(sCube, c3, lodClamp, texel); + sparseTextureClampARB(s2DShadow, c3, lodClamp, texel.x); + sparseTextureClampARB(sCubeShadow, c4, lodClamp, texel.x); + sparseTextureClampARB(s2DArray, c3, lodClamp, texel); + sparseTextureClampARB(sCubeArray, c4, lodClamp, texel); + sparseTextureClampARB(s2DArrayShadow, c4, lodClamp, texel.x); + sparseTextureClampARB(sCubeArrayShadow, c4, compare, lodClamp, texel.x); + + return texel; +} + +vec4 testTextureClamp() +{ + vec4 texel = vec4(0.0); + + texel += textureClampARB(s1D, c1, lodClamp); + texel += textureClampARB(s2D, c2, lodClamp); + texel += textureClampARB(s3D, c3, lodClamp); + texel += textureClampARB(sCube, c3, lodClamp); + texel.x += textureClampARB(s1DShadow, c3, lodClamp); + texel.x += textureClampARB(s2DShadow, c3, lodClamp); + texel.x += textureClampARB(sCubeShadow, c4, lodClamp); + texel += textureClampARB(s1DArray, c2, lodClamp); + texel += textureClampARB(s2DArray, c3, lodClamp); + texel += textureClampARB(sCubeArray, c4, lodClamp); + texel.x += textureClampARB(s1DArrayShadow, c3, lodClamp); + texel.x += textureClampARB(s2DArrayShadow, c4, lodClamp); + texel.x += textureClampARB(sCubeArrayShadow, c4, compare, lodClamp); + + return texel; +} + +vec4 testSparseTextureOffsetClamp() +{ + vec4 texel = vec4(0.0); + + sparseTextureOffsetClampARB(s2D, c2, offset2, lodClamp, texel); + sparseTextureOffsetClampARB(s3D, c3, offset3, lodClamp, texel); + sparseTextureOffsetClampARB(s2DShadow, c3, offset2, lodClamp, texel.x); + sparseTextureOffsetClampARB(s2DArray, c3, offset2, lodClamp, texel); + sparseTextureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp, texel.x); + + return texel; +} + +vec4 testTextureOffsetClamp() +{ + vec4 texel = vec4(0.0); + + texel += textureOffsetClampARB(s1D, c1, offset1, lodClamp); + texel += textureOffsetClampARB(s2D, c2, offset2, lodClamp); + texel += textureOffsetClampARB(s3D, c3, offset3, lodClamp); + texel.x += textureOffsetClampARB(s1DShadow, c3, offset1, lodClamp); + texel.x += textureOffsetClampARB(s2DShadow, c3, offset2, lodClamp); + texel += textureOffsetClampARB(s1DArray, c2, offset1, lodClamp); + texel += textureOffsetClampARB(s2DArray, c3, offset2, lodClamp); + texel.x += textureOffsetClampARB(s1DArrayShadow, c3, offset1, lodClamp); + texel.x += textureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp); + + return texel; +} + +vec4 testSparseTextureGradClamp() +{ + vec4 texel = vec4(0.0); + + sparseTextureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp, texel); + sparseTextureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp, texel); + sparseTextureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp, texel); + sparseTextureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp, texel.x); + sparseTextureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp, texel.x); + sparseTextureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp, texel); + sparseTextureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp, texel.x); + sparseTextureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp, texel); + + return texel; +} + +vec4 testTextureGradClamp() +{ + vec4 texel = vec4(0.0); + + texel += textureGradClampARB(s1D, c1, dPdxy1, dPdxy1, lodClamp); + texel += textureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp); + texel += textureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp); + texel += textureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp); + texel.x += textureGradClampARB(s1DShadow, c3, dPdxy1, dPdxy1, lodClamp); + texel.x += textureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp); + texel.x += textureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp); + texel += textureGradClampARB(s1DArray, c2, dPdxy1, dPdxy1, lodClamp); + texel += textureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp); + texel.x += textureGradClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, lodClamp); + texel.x += textureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp); + texel += textureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp); + + return texel; +} + +vec4 testSparseTextureGradOffsetClamp() +{ + vec4 texel = vec4(0.0); + + sparseTextureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp, texel); + sparseTextureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp, texel); + sparseTextureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel.x); + sparseTextureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel); + sparseTextureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp, texel.x); + + return texel; +} + +vec4 testTextureGradOffsetClamp() +{ + vec4 texel = vec4(0.0); + + texel += textureGradOffsetClampARB(s1D, c1, dPdxy1, dPdxy1, offset1, lodClamp); + texel += textureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp); + texel += textureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp); + texel.x += textureGradOffsetClampARB(s1DShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp); + texel.x += textureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp); + texel += textureGradOffsetClampARB(s1DArray, c2, dPdxy1, dPdxy1, offset1, lodClamp); + texel += textureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp); + texel.x += textureGradOffsetClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp); + texel.x += textureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp); + + return texel; +} + +vec4 testCombinedTextureSampler() +{ + vec4 texel = vec4(0.0); + + texel += texture(sampler1D(t1D, s), c1); + texel += texture(sampler2D(t2D, s), c2); + texel += texture(sampler3D(t3D, s), c3); + texel += texture(samplerCube(tCube, s), c3); + texel.x += texture(sampler1DShadow(t1D, sShadow), c3); + texel.x += texture(sampler2DShadow(t2D, sShadow), c3); + texel.x += texture(samplerCubeShadow(tCube, sShadow), c4); + texel += texture(sampler1DArray(t1DArray, s), c2); + texel += texture(sampler2DArray(t2DArray, s), c3); + texel += texture(samplerCubeArray(tCubeArray, s), c4); + texel.x += texture(sampler1DArrayShadow(t1DArray, sShadow), c3); + texel.x += texture(sampler2DArrayShadow(t2DArray, sShadow), c4); + texel += texture(sampler2DRect(t2DRect, s), c2); + texel.x += texture(sampler2DRectShadow(t2DRect, sShadow), c3); + texel.x += texture(samplerCubeArrayShadow(tCubeArray, sShadow), c4, compare); + + return texel; +} + +vec4 testSubpassLoad() +{ + return subpassLoad(subpass) + subpassLoad(subpassMS, 2); +} + +void main() +{ + vec4 result = vec4(0.0); + + result += testTexture(); + result += testTextureProj(); + result += testTextureLod(); + result += testTextureOffset(); + result += testTextureLodOffset(); + result += testTextureProjLodOffset(); + result += testTexelFetch(); + result += testTexelFetchOffset(); + result += testTextureGrad(); + result += testTextureGradOffset(); + result += testTextureProjGrad(); + result += testTextureProjGradoffset(); + result += testTextureGather(); + result += testTextureGatherOffset(); + result += testTextureGatherOffsets(); + result += testTextureGatherLod(); + result += testTextureGatherLodOffset(); + result += testTextureGatherLodOffsets(); + + result += vec4(testTextureSize()); + result.xy += vec2(testTextureQueryLod()); + result.x += testTextureQueryLevels(); + result.x += testTextureSamples(); + + result += testImageLoad(); + testImageStore(result); + + result += testSparseTexture(); + result += testSparseTextureLod(); + result += testSparseTextureOffset(); + result += testSparseTextureLodOffset(); + result += testSparseTextureGrad(); + result += testSparseTextureGradOffset(); + result += testSparseTexelFetch(); + result += testSparseTexelFetchOffset(); + result += testSparseTextureGather(); + result += testSparseTextureGatherOffset(); + result += testSparseTextureGatherOffsets(); + result += testSparseTextureGatherLod(); + result += testSparseTextureGatherLodOffset(); + result += testSparseTextureGatherLodOffsets(); + + result += testSparseImageLoad(); + + result += testSparseTextureClamp(); + result += testTextureClamp(); + result += testSparseTextureOffsetClamp(); + result += testTextureOffsetClamp(); + result += testSparseTextureGrad(); + result += testTextureGrad(); + result += testSparseTextureGradOffsetClamp(); + result += testTextureGradOffsetClamp(); + + result += testCombinedTextureSampler(); + result += testSubpassLoad(); + + fragColor = result; +} + diff --git a/Test/spv.fragmentShaderBarycentric2.frag b/Test/spv.fragmentShaderBarycentric2.frag index 4682e4ef43..2db44af367 100644 --- a/Test/spv.fragmentShaderBarycentric2.frag +++ b/Test/spv.fragmentShaderBarycentric2.frag @@ -4,6 +4,8 @@ precision highp float; layout(location = 0) pervertexNV in float vertexIDs[3]; +layout(location = 1) pervertexNV in float vertexIDs2[3]; + layout(location = 1) out float value; @@ -12,4 +14,8 @@ void main () { gl_BaryCoordNoPerspNV.y * vertexIDs[1] + gl_BaryCoordNoPerspNV.z * vertexIDs[2]); + value += (gl_BaryCoordNoPerspNV.x * vertexIDs2[0] + + gl_BaryCoordNoPerspNV.y * vertexIDs2[1] + + gl_BaryCoordNoPerspNV.z * vertexIDs2[2]); + } diff --git a/Test/spv.fragmentShaderBarycentric3.frag b/Test/spv.fragmentShaderBarycentric3.frag new file mode 100644 index 0000000000..93e977eb79 --- /dev/null +++ b/Test/spv.fragmentShaderBarycentric3.frag @@ -0,0 +1,15 @@ +#version 450 +#extension GL_EXT_fragment_shader_barycentric : require + +layout(location = 0) pervertexEXT in vertices { + float attrib; + } v[]; + +layout(location = 1) out float value; + +void main () { + value = (gl_BaryCoordEXT.x * v[0].attrib + + gl_BaryCoordEXT.y * v[1].attrib + + gl_BaryCoordEXT.z * v[2].attrib); + +} diff --git a/Test/spv.fragmentShaderBarycentric4.frag b/Test/spv.fragmentShaderBarycentric4.frag new file mode 100644 index 0000000000..fd4902f873 --- /dev/null +++ b/Test/spv.fragmentShaderBarycentric4.frag @@ -0,0 +1,20 @@ +#version 320 es +#extension GL_EXT_fragment_shader_barycentric : require + +precision highp float; + +layout(location = 0) pervertexEXT in float vertexIDs[3]; +layout(location = 1) pervertexEXT in float vertexIDs2[3]; + +layout(location = 1) out float value; + +void main () { + value = (gl_BaryCoordNoPerspEXT.x * vertexIDs[0] + + gl_BaryCoordNoPerspEXT.y * vertexIDs[1] + + gl_BaryCoordNoPerspEXT.z * vertexIDs[2]); + + value += (gl_BaryCoordNoPerspEXT.x * vertexIDs2[0] + + gl_BaryCoordNoPerspEXT.y * vertexIDs2[1] + + gl_BaryCoordNoPerspEXT.z * vertexIDs2[2]); + +} diff --git a/Test/spv.imageAtomic64.comp b/Test/spv.imageAtomic64.comp new file mode 100644 index 0000000000..f09abf777e --- /dev/null +++ b/Test/spv.imageAtomic64.comp @@ -0,0 +1,12 @@ +#version 450 +#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable +#extension GL_EXT_shader_image_int64 : enable +#extension GL_KHR_memory_scope_semantics : enable + +layout(set = 0, binding = 0) buffer ssbo { uint64_t y; }; +layout(set = 0, binding = 1, r64ui) uniform u64image2D z; + +void main() { + // Test imageAtomicStore exclusively. Do NOT add other atomic operations to this test. + imageAtomicStore(z, ivec2(1, 1), y, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); +} diff --git a/Test/spv.intcoopmat.comp b/Test/spv.intcoopmat.comp index 235aa16be2..65aa27a802 100644 --- a/Test/spv.intcoopmat.comp +++ b/Test/spv.intcoopmat.comp @@ -1,117 +1,123 @@ #version 450 core -#extension GL_KHR_memory_scope_semantics : enable -#extension GL_NV_cooperative_matrix : enable -#extension GL_NV_integer_cooperative_matrix : enable -#extension GL_EXT_shader_explicit_arithmetic_types : enable -#extension GL_EXT_buffer_reference : enable - +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_NV_cooperative_matrix : enable +#extension GL_NV_integer_cooperative_matrix : enable +#extension GL_EXT_shader_explicit_arithmetic_types : enable +#extension GL_EXT_buffer_reference : enable + layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; - -const int X = 8; -layout(constant_id = 0) const int Y = 2; -const int Z = X*Y; - -icoopmatNV<8, gl_ScopeSubgroup, Z, 8> miC; -icoopmatNV<8, gl_ScopeSubgroup, Z, 8> miC2[3]; -ucoopmatNV<8, gl_ScopeSubgroup, Z, 8> muC; -ucoopmatNV<8, gl_ScopeSubgroup, Z, 8> muC2[3]; - -int iarr[miC.length()]; -int iarr2[miC2[1].length()]; -int uarr[muC.length()]; -int uarr2[muC2[1].length()]; - -const icoopmatNV<32, gl_ScopeSubgroup, Z, 8> mD = icoopmatNV<32, gl_ScopeSubgroup, Z, 8>(1); -const ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> mD2 = ucoopmatNV<8, gl_ScopeSubgroup, 8, 8>(1); - -struct S { int a; int b; int c; }; - -const S s = S(12, 23, 34); - -layout(set = 0, binding = 0, buffer_reference) coherent buffer Block { - uint y[1024*1024]; - uint x[]; -} block; - -layout(set = 0, binding = 0) coherent buffer Block16 { - int8_t y[1024*1024]; - int8_t x[]; - - Block b; -} block8; - -icoopmatNV<8, gl_ScopeSubgroup, 8, 8> ineg(icoopmatNV<8, gl_ScopeSubgroup, 8, 8> m) { return -m; } -ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> umul(ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> m) { return m * uint8_t(2); } - -layout(constant_id = 2) const int SC = 1; -ucoopmatNV<32, gl_ScopeSubgroup, SC, SC> scm[SC][SC]; - -// sized for icoopmatNV<8, gl_ScopeSubgroup, 16, 16> -shared uvec4 shmatrix[16*16*2/16]; - + +const int X = 8; +layout(constant_id = 0) const int Y = 2; +const int Z = X*Y; + +icoopmatNV<8, gl_ScopeSubgroup, Z, 8> miC; +icoopmatNV<8, gl_ScopeSubgroup, Z, 8> miC2[3]; +ucoopmatNV<8, gl_ScopeSubgroup, Z, 8> muC; +ucoopmatNV<8, gl_ScopeSubgroup, Z, 8> muC2[3]; + +int iarr[miC.length()]; +int iarr2[miC2[1].length()]; +int uarr[muC.length()]; +int uarr2[muC2[1].length()]; + +const icoopmatNV<32, gl_ScopeSubgroup, Z, 8> mD = icoopmatNV<32, gl_ScopeSubgroup, Z, 8>(1); +const ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> mD2 = ucoopmatNV<8, gl_ScopeSubgroup, 8, 8>(1); + +struct S { int a; int b; int c; }; + +const S s = S(12, 23, 34); + +layout(set = 0, binding = 0, buffer_reference) coherent buffer Block { + uint y[1024*1024]; + uint x[]; +} block; + +layout(set = 0, binding = 0) coherent buffer Block16 { + int8_t y[1024*1024]; + int8_t x[]; + + Block b; +} block8; + +icoopmatNV<8, gl_ScopeSubgroup, 8, 8> ineg(icoopmatNV<8, gl_ScopeSubgroup, 8, 8> m) { return -m; } +ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> umul(ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> m) { return m * uint8_t(2); } + +layout(constant_id = 2) const int SC = 1; +ucoopmatNV<32, gl_ScopeSubgroup, SC, SC> scm[SC][SC]; + +// sized for icoopmatNV<8, gl_ScopeSubgroup, 16, 16> +shared uvec4 shmatrix[16*16*2/16]; + void main() { - ucoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> mu = ucoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)>(2); - icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> mi = icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)>(2); - - mu = mu + mu; - mu = mu - mu; - mi = -mi; - mi = mi * int8_t(2); - - fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> mf16_0 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(mu); - fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> mf32_0 = fcoopmatNV<32, gl_ScopeSubgroup, 16, 8>(mu); - fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> mf16_1 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(mi); - fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> mf32_1 = fcoopmatNV<32, gl_ScopeSubgroup, 16, 8>(mi); - - uint8_t x = mu[1]; - mi[0] = int8_t(x); - - coopMatLoadNV(mi, block.x, 16, 128, false); - coopMatStoreNV(mi, block.x, 16, 128, false); - coopMatLoadNV(mu, block8.x, 16, 128, false); - coopMatStoreNV(mu, block8.x, 16, 128, false); - coopMatLoadNV(mi, block8.b.x, 16, 128, false); - coopMatStoreNV(mi, block8.b.x, 16, 128, false); - - ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> A; - ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> B; - ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> C; - ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> D; - D = coopMatMulAddNV(A, B, C); - - int l = D.length(); - - - icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> a[5]; - a[3][0] = int8_t(1); - - int md1 = mD[1]; - - md1 += (mi += mi)[1234]; - + ucoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> mu = ucoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)>(2); + icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> mi = icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)>(2); + + mu = mu + mu; + mu = mu - mu; + mi = -mi; + mi = mi * int8_t(2); + + fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> mf16_0 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(mu); + fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> mf32_0 = fcoopmatNV<32, gl_ScopeSubgroup, 16, 8>(mu); + fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> mf16_1 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(mi); + fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> mf32_1 = fcoopmatNV<32, gl_ScopeSubgroup, 16, 8>(mi); + + uint8_t x = mu[1]; + mi[0] = int8_t(x); + + coopMatLoadNV(mi, block.x, 16, 128, false); + coopMatStoreNV(mi, block.x, 16, 128, false); + coopMatLoadNV(mu, block8.x, 16, 128, false); + coopMatStoreNV(mu, block8.x, 16, 128, false); + coopMatLoadNV(mi, block8.b.x, 16, 128, false); + coopMatStoreNV(mi, block8.b.x, 16, 128, false); + + ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> A; + ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> B; + ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> C; + ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> D; + D = coopMatMulAddNV(A, B, C); + + int l = D.length(); + + + icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> a[5]; + a[3][0] = int8_t(1); + + int md1 = mD[1]; + + md1 += (mi += mi)[1234]; + muC2[0] = muC2[1]; - muC2[1][0] = (miC2[2][0]); - - coopMatLoadNV(mi, block.y, 16, 128, false); - coopMatStoreNV(mi, block.y, 16, 128, false); - coopMatLoadNV(mu, block8.y, 16, 128, false); - coopMatStoreNV(mu, block8.y, 16, 128, false); - - icoopmatNV<8, gl_ScopeSubgroup, 8, 8> p1; - ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> p2; - - p1 = ineg(p1); - p2 = umul(p2); - - p1 /= p1; + muC2[1][0] = (miC2[2][0]); + + coopMatLoadNV(mi, block.y, 16, 128, false); + coopMatStoreNV(mi, block.y, 16, 128, false); + coopMatLoadNV(mu, block8.y, 16, 128, false); + coopMatStoreNV(mu, block8.y, 16, 128, false); + + icoopmatNV<8, gl_ScopeSubgroup, 8, 8> p1; + ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> p2; + + p1 = ineg(p1); + p2 = umul(p2); + + p1 /= p1; p2 /= p2; - - p1 *= int8_t(2); - p2 *= uint8_t(4); - - icoopmatNV<8, gl_ScopeSubgroup, 16, 8> ms; - coopMatLoadNV(ms, shmatrix, 1, 2, false); - coopMatStoreNV(ms, shmatrix, 1, 2, false); - + + p1 *= int8_t(2); + p2 *= uint8_t(4); + + icoopmatNV<8, gl_ScopeSubgroup, 16, 8> ms; + coopMatLoadNV(ms, shmatrix, 1, 2, false); + coopMatStoreNV(ms, shmatrix, 1, 2, false); + + icoopmatNV<16, gl_ScopeSubgroup, 16, 8> i16 = icoopmatNV<16, gl_ScopeSubgroup, 16, 8>(0); + ucoopmatNV<16, gl_ScopeSubgroup, 16, 8> u16 = ucoopmatNV<16, gl_ScopeSubgroup, 16, 8>(0); + coopMatLoadNV(i16, shmatrix, 1, 2, false); + coopMatStoreNV(i16, shmatrix, 1, 2, false); + coopMatLoadNV(u16, shmatrix, 1, 2, false); + coopMatStoreNV(u16, shmatrix, 1, 2, false); } diff --git a/Test/spv.intrinsicsDebugBreak.frag b/Test/spv.intrinsicsDebugBreak.frag new file mode 100644 index 0000000000..861f20ed38 --- /dev/null +++ b/Test/spv.intrinsicsDebugBreak.frag @@ -0,0 +1,9 @@ +#version 460 +#extension GL_EXT_spirv_intrinsics : enable + +spirv_instruction (extensions = ["SPV_KHR_non_semantic_info"], set = "NonSemantic.DebugBreak", id = 1) +void debugBreak(); + +void main() { + debugBreak(); +} diff --git a/Test/spv.intrinsicsFakeEnable.vert b/Test/spv.intrinsicsFakeEnable.vert new file mode 100644 index 0000000000..a6d6a312f5 --- /dev/null +++ b/Test/spv.intrinsicsFakeEnable.vert @@ -0,0 +1,10 @@ +#version 460 core +#extension GL_EXT_spirv_intrinsics : enable + +// ERROR: Overlapped input location. Make sure it could be detected even +// if GL_EXT_spirv_intrinsics is enabled. +layout(location = 0) in vec4 v4; +layout(location = 0) in vec3 v3; + +void main() { +} diff --git a/Test/spv.intrinsicsInteractWithCoopMat.comp b/Test/spv.intrinsicsInteractWithCoopMat.comp new file mode 100644 index 0000000000..90ff0fb289 --- /dev/null +++ b/Test/spv.intrinsicsInteractWithCoopMat.comp @@ -0,0 +1,20 @@ +#version 450 core +#pragma use_vulkan_memory_model + +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_KHR_cooperative_matrix : enable +#extension GL_EXT_spirv_intrinsics : enable + +layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; + +layout(set=0, binding=0, std430) buffer Buf { uvec4 x[]; } buf; + +#define ELT_SIZE 16 +#define half spirv_type(capabilities=[9], id = 22, 16) + +coopmat A; + +void main() { + coopMatLoad(A, buf.x, 0, ELT_SIZE / 8, 0); + coopMatStore(A, buf.x, 64, 4, 0); +} diff --git a/Test/spv.intrinsicsSpirvDecorateId.comp b/Test/spv.intrinsicsSpirvDecorateId.comp new file mode 100644 index 0000000000..58a35d613a --- /dev/null +++ b/Test/spv.intrinsicsSpirvDecorateId.comp @@ -0,0 +1,16 @@ +#version 460 core +#extension GL_EXT_spirv_intrinsics: enable + +layout(local_size_x = 1) in; + +layout(binding = 1) uniform CounterBuffer { + uint counter; +} x; + +layout(binding = 0) spirv_decorate_id(extensions = ["SPV_GOOGLE_hlsl_functionality1"], 5634, x) uniform Uniform { + uint y; +}; + +void main() +{ +} diff --git a/Test/spv.intrinsicsSpirvDecorateString.comp b/Test/spv.intrinsicsSpirvDecorateString.comp new file mode 100644 index 0000000000..7de65fce0f --- /dev/null +++ b/Test/spv.intrinsicsSpirvDecorateString.comp @@ -0,0 +1,15 @@ +#version 460 core +#extension GL_EXT_spirv_intrinsics : require + +spirv_decorate_string(extensions = ["SPV_GOOGLE_hlsl_functionality1"], 5635, "foobar") // UserSemantic +spirv_decorate(0) // RelaxedPrecision +float x = 0.5; + +spirv_decorate(0) // RelaxedPrecision +spirv_decorate_string(extensions = ["SPV_GOOGLE_hlsl_functionality1"], 5635, "foobar") // UserSemantic +float y = 1.0; + +layout(local_size_x = 1) in; +void main() +{ +} diff --git a/Test/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert b/Test/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert new file mode 100644 index 0000000000..f17da98eb0 --- /dev/null +++ b/Test/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert @@ -0,0 +1,25 @@ +#version 450 core + +#extension GL_ARB_gpu_shader_int64: enable +#extension GL_EXT_buffer_reference: enable +#extension GL_EXT_spirv_intrinsics: enable + +#define CapabilityPhysicalStorageBufferAddresses 5347 +#define StorageClassPhysicalStorageBuffer 5349 +#define OpTypePointer 32 +#define OpLoad 61 +#define OpConvertUToPtr 120 + +#define uintStoragePtr spirv_type(extensions = ["SPV_EXT_physical_storage_buffer", "SPV_KHR_variable_pointers"], capabilities = [CapabilityPhysicalStorageBufferAddresses], id = OpTypePointer, StorageClassPhysicalStorageBuffer, uint) + +// Just to enable the memory model of physical storage buffer +layout(buffer_reference, std430) buffer Dummy { + uint dummy; +}; + +spirv_instruction(id = OpLoad) uint loadUint(uintStoragePtr pointer, spirv_literal uint memoryOperands, spirv_literal uint alignment); +spirv_instruction(id = OpConvertUToPtr) uintStoragePtr convertToPtr(uint64_t value); + +void main() { + uint value = loadUint(convertToPtr(1), 0x2, 32); +} diff --git a/Test/spv.maximalReconvergence.vert b/Test/spv.maximalReconvergence.vert new file mode 100644 index 0000000000..e152f4e977 --- /dev/null +++ b/Test/spv.maximalReconvergence.vert @@ -0,0 +1,7 @@ +#version 460 + +#extension GL_EXT_maximal_reconvergence : enable + +[[random(4)]] void main() [[maximally_reconverges]] +{ +} diff --git a/Test/spv.multiple.var.same.const.frag b/Test/spv.multiple.var.same.const.frag new file mode 100644 index 0000000000..ead9a3cf2b --- /dev/null +++ b/Test/spv.multiple.var.same.const.frag @@ -0,0 +1,6 @@ +#version 320 es +precision mediump float; +const float var0 = 1e-6; +const float var1 = 1e-6; +void main(){} + diff --git a/Test/spv.nv.dmm-allops.comp b/Test/spv.nv.dmm-allops.comp new file mode 100644 index 0000000000..5c6ed360fa --- /dev/null +++ b/Test/spv.nv.dmm-allops.comp @@ -0,0 +1,19 @@ +#version 460 +#extension GL_NV_displacement_micromap : enable +#extension GL_EXT_ray_query : enable +layout(local_size_x = 16) in; +layout(binding = 1) uniform accelerationStructureEXT as; +layout(binding = 0) buffer block { + vec3 op_pos; + vec2 op_bary; +}; +void main() +{ + op_pos = fetchMicroTriangleVertexPositionNV(as, 1, 1, 1, ivec2(0,0)); + op_pos += fetchMicroTriangleVertexPositionNV(as, 1, 1, 1, ivec2(0,1)); + op_pos += fetchMicroTriangleVertexPositionNV(as, 1, 1, 1, ivec2(1,0)); + + op_bary = fetchMicroTriangleVertexBarycentricNV(as, 1, 1, 1, ivec2(0,0)); + op_bary += fetchMicroTriangleVertexBarycentricNV(as, 1, 1, 1, ivec2(0,1)); + op_bary += fetchMicroTriangleVertexBarycentricNV(as, 1, 1, 1, ivec2(1,0)); +} diff --git a/Test/spv.nv.dmm-allops.mesh b/Test/spv.nv.dmm-allops.mesh new file mode 100644 index 0000000000..6cb945b89b --- /dev/null +++ b/Test/spv.nv.dmm-allops.mesh @@ -0,0 +1,20 @@ +#version 460 +#extension GL_NV_displacement_micromap : enable +#extension GL_NV_mesh_shader : enable +#extension GL_EXT_ray_query : enable +layout(max_vertices = 8, max_primitives = 16, triangles) out; +layout(binding = 1) uniform accelerationStructureEXT as; +layout(binding = 0) buffer block { + vec3 op_pos; + vec2 op_bary; +}; +void main() +{ + op_pos = fetchMicroTriangleVertexPositionNV(as, 1, 1, 1, ivec2(0,0)); + op_pos += fetchMicroTriangleVertexPositionNV(as, 1, 1, 1, ivec2(0,1)); + op_pos += fetchMicroTriangleVertexPositionNV(as, 1, 1, 1, ivec2(1,0)); + + op_bary = fetchMicroTriangleVertexBarycentricNV(as, 1, 1, 1, ivec2(0,0)); + op_bary += fetchMicroTriangleVertexBarycentricNV(as, 1, 1, 1, ivec2(0,1)); + op_bary += fetchMicroTriangleVertexBarycentricNV(as, 1, 1, 1, ivec2(1,0)); +} diff --git a/Test/spv.nv.dmm-allops.rahit b/Test/spv.nv.dmm-allops.rahit new file mode 100644 index 0000000000..3edb676f6b --- /dev/null +++ b/Test/spv.nv.dmm-allops.rahit @@ -0,0 +1,26 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_EXT_ray_query : enable +#extension GL_NV_displacement_micromap : enable +layout(binding = 1) uniform accelerationStructureEXT as; +layout(binding = 0) buffer block { + vec3 op_pos; + vec2 op_bary; + uint op_hit; +}; +void main() +{ + op_pos = gl_HitMicroTriangleVertexPositionsNV[0]; + op_pos += gl_HitMicroTriangleVertexPositionsNV[1]; + op_pos += gl_HitMicroTriangleVertexPositionsNV[2]; + + op_bary = gl_HitMicroTriangleVertexBarycentricsNV[0]; + op_bary += gl_HitMicroTriangleVertexBarycentricsNV[1]; + op_bary += gl_HitMicroTriangleVertexBarycentricsNV[2]; + + op_hit = gl_HitKindEXT; + op_hit &= gl_HitKindFrontFacingTriangleEXT | + gl_HitKindBackFacingTriangleEXT | + gl_HitKindFrontFacingMicroTriangleNV | + gl_HitKindBackFacingMicroTriangleNV; +} diff --git a/Test/spv.nv.dmm-allops.rchit b/Test/spv.nv.dmm-allops.rchit new file mode 100644 index 0000000000..3edb676f6b --- /dev/null +++ b/Test/spv.nv.dmm-allops.rchit @@ -0,0 +1,26 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_EXT_ray_query : enable +#extension GL_NV_displacement_micromap : enable +layout(binding = 1) uniform accelerationStructureEXT as; +layout(binding = 0) buffer block { + vec3 op_pos; + vec2 op_bary; + uint op_hit; +}; +void main() +{ + op_pos = gl_HitMicroTriangleVertexPositionsNV[0]; + op_pos += gl_HitMicroTriangleVertexPositionsNV[1]; + op_pos += gl_HitMicroTriangleVertexPositionsNV[2]; + + op_bary = gl_HitMicroTriangleVertexBarycentricsNV[0]; + op_bary += gl_HitMicroTriangleVertexBarycentricsNV[1]; + op_bary += gl_HitMicroTriangleVertexBarycentricsNV[2]; + + op_hit = gl_HitKindEXT; + op_hit &= gl_HitKindFrontFacingTriangleEXT | + gl_HitKindBackFacingTriangleEXT | + gl_HitKindFrontFacingMicroTriangleNV | + gl_HitKindBackFacingMicroTriangleNV; +} diff --git a/Test/spv.nv.dmm-allops.rgen b/Test/spv.nv.dmm-allops.rgen new file mode 100644 index 0000000000..447df68aaf --- /dev/null +++ b/Test/spv.nv.dmm-allops.rgen @@ -0,0 +1,24 @@ +#version 460 +#extension GL_NV_displacement_micromap : enable +#extension GL_EXT_ray_query : enable +layout(binding = 1) uniform accelerationStructureEXT as; +layout(binding = 0) buffer block { + vec3 op_pos; + vec2 op_bary; + uint op_hitmask; +}; +void main() +{ + op_pos = fetchMicroTriangleVertexPositionNV(as, 1, 1, 1, ivec2(0,0)); + op_pos += fetchMicroTriangleVertexPositionNV(as, 1, 1, 1, ivec2(0,1)); + op_pos += fetchMicroTriangleVertexPositionNV(as, 1, 1, 1, ivec2(1,0)); + + op_bary = fetchMicroTriangleVertexBarycentricNV(as, 1, 1, 1, ivec2(0,0)); + op_bary += fetchMicroTriangleVertexBarycentricNV(as, 1, 1, 1, ivec2(0,1)); + op_bary += fetchMicroTriangleVertexBarycentricNV(as, 1, 1, 1, ivec2(1,0)); + + op_hitmask = gl_HitKindFrontFacingTriangleEXT | + gl_HitKindBackFacingTriangleEXT | + gl_HitKindFrontFacingMicroTriangleNV | + gl_HitKindBackFacingMicroTriangleNV; +} diff --git a/Test/spv.nv.hitobject-allops.rchit b/Test/spv.nv.hitobject-allops.rchit new file mode 100644 index 0000000000..e7db35931a --- /dev/null +++ b/Test/spv.nv.hitobject-allops.rchit @@ -0,0 +1,55 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_NV_shader_invocation_reorder : enable +#extension GL_NV_ray_tracing_motion_blur : enable +layout(location = 1) rayPayloadEXT vec4 payload; +layout(location = 2) rayPayloadEXT pBlock { vec2 val1; vec2 val2; }; +layout(location = 2) hitObjectAttributeNV vec2 attr; +layout(location = 3) hitObjectAttributeNV hBlock { float attrval;}; +layout(binding = 0) uniform accelerationStructureEXT as; +layout(binding = 1) buffer block { + float op; +}; +void main() +{ + hitObjectNV hObj; + hitObjectNV hObjHit, hObjMiss, hObjNop; + attr = vec2(1.0); + attrval = 2.0; + hitObjectTraceRayNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 1); + hitObjectTraceRayMotionNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 10.0, 2); + hitObjectRecordHitNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 2); + hitObjectRecordHitMotionNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 2); + hitObjectRecordHitWithIndexNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 3); + hitObjectRecordHitWithIndexMotionNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 3); + hitObjectRecordEmptyNV(hObjNop); + hitObjectRecordMissNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0); + hitObjectRecordMissMotionNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0, 8.0f); + hitObjectExecuteShaderNV(hObjHit, 2); + if (hitObjectIsHitNV(hObj)) { + op = 1.0f; + } else if (hitObjectIsMissNV(hObj)) { + op = 2.0f; + } else if (hitObjectIsEmptyNV(hObj)) { + op = 3.0f; + } + + + float tmin = hitObjectGetRayTMinNV(hObjHit); + float tmax = hitObjectGetRayTMaxNV(hObjHit); + vec3 orig = hitObjectGetWorldRayOriginNV(hObjHit); + vec3 dir = hitObjectGetWorldRayDirectionNV(hObjHit); + vec3 oorig = hitObjectGetObjectRayOriginNV(hObjHit); + vec3 odir = hitObjectGetObjectRayDirectionNV(hObjHit); + mat4x3 otw = hitObjectGetObjectToWorldNV(hObjHit); + mat4x3 wto = hitObjectGetWorldToObjectNV(hObjHit); + int cid = hitObjectGetInstanceCustomIndexNV(hObjMiss); + int iid = hitObjectGetInstanceIdNV(hObjNop); + int pid = hitObjectGetPrimitiveIndexNV(hObj); + int gid = hitObjectGetGeometryIndexNV(hObj); + uint hkind = hitObjectGetHitKindNV(hObj); + hitObjectGetAttributesNV(hObj, 2); + uvec2 handle = hitObjectGetShaderRecordBufferHandleNV(hObj); + uint rid = hitObjectGetShaderBindingTableRecordIndexNV(hObj); + +} diff --git a/Test/spv.nv.hitobject-allops.rgen b/Test/spv.nv.hitobject-allops.rgen new file mode 100644 index 0000000000..f2f37f748c --- /dev/null +++ b/Test/spv.nv.hitobject-allops.rgen @@ -0,0 +1,61 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_NV_shader_invocation_reorder : enable +#extension GL_NV_ray_tracing_motion_blur : enable +layout(location = 1) rayPayloadEXT vec4 payload; +layout(location = 2) rayPayloadEXT pBlock { vec2 val1; vec2 val2; }; +layout(location = 2) hitObjectAttributeNV vec2 attr; +layout(location = 3) hitObjectAttributeNV hBlock { float attrval;}; +layout(binding = 0) uniform accelerationStructureEXT as; +layout(binding = 1) buffer block { + float op; +}; +void main() +{ + hitObjectNV hObj; + hitObjectNV hObjHit, hObjMiss, hObjNop; + attr = vec2(1.0); + attrval = 2.0; + hitObjectTraceRayNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 1); + hitObjectTraceRayMotionNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 10.0, 2); + hitObjectRecordHitNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 2); + hitObjectRecordHitMotionNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 2); + hitObjectRecordHitWithIndexNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 3); + hitObjectRecordHitWithIndexMotionNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 3); + hitObjectRecordEmptyNV(hObjNop); + hitObjectRecordMissNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0); + hitObjectRecordMissMotionNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0, 8.0f); + hitObjectExecuteShaderNV(hObjHit, 1); + if (hitObjectIsHitNV(hObj)) { + op = 1.0f; + } else if (hitObjectIsMissNV(hObj)) { + op = 2.0f; + } else if (hitObjectIsEmptyNV(hObj)) { + op = 3.0f; + } + + + float tmin = hitObjectGetRayTMinNV(hObjHit); + float tmax = hitObjectGetRayTMaxNV(hObjHit); + vec3 orig = hitObjectGetWorldRayOriginNV(hObjHit); + vec3 dir = hitObjectGetWorldRayDirectionNV(hObjHit); + vec3 oorig = hitObjectGetObjectRayOriginNV(hObjHit); + vec3 odir = hitObjectGetObjectRayDirectionNV(hObjHit); + mat4x3 otw = hitObjectGetObjectToWorldNV(hObjHit); + mat4x3 wto = hitObjectGetWorldToObjectNV(hObjHit); + int cid = hitObjectGetInstanceCustomIndexNV(hObjMiss); + int iid = hitObjectGetInstanceIdNV(hObjNop); + int pid = hitObjectGetPrimitiveIndexNV(hObj); + int gid = hitObjectGetGeometryIndexNV(hObj); + uint hkind = hitObjectGetHitKindNV(hObj); + hitObjectGetAttributesNV(hObj, 2); + uvec2 handle = hitObjectGetShaderRecordBufferHandleNV(hObj); + uint rid = hitObjectGetShaderBindingTableRecordIndexNV(hObj); + reorderThreadNV(4,4); + reorderThreadNV(hObjHit); + reorderThreadNV(hObjHit, 4, 2); + + + + +} diff --git a/Test/spv.nv.hitobject-allops.rmiss b/Test/spv.nv.hitobject-allops.rmiss new file mode 100644 index 0000000000..045e4a5a94 --- /dev/null +++ b/Test/spv.nv.hitobject-allops.rmiss @@ -0,0 +1,58 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_NV_shader_invocation_reorder : enable +#extension GL_NV_ray_tracing_motion_blur : enable +layout(location = 1) rayPayloadEXT vec4 payload; +layout(location = 2) rayPayloadEXT pBlock { vec2 val1; vec2 val2; }; +layout(location = 2) hitObjectAttributeNV vec2 attr; +layout(location = 3) hitObjectAttributeNV hBlock { float attrval;}; +layout(binding = 0) uniform accelerationStructureEXT as; +layout(binding = 1) buffer block { + float op; +}; +void main() +{ + hitObjectNV hObj; + hitObjectNV hObjHit, hObjMiss, hObjNop; + attr = vec2(1.0); + attrval = 2.0; + hitObjectTraceRayNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 1); + hitObjectTraceRayMotionNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 10.0, 2); + hitObjectRecordHitNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 2); + hitObjectRecordHitMotionNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 2); + hitObjectRecordHitWithIndexNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 3); + hitObjectRecordHitWithIndexMotionNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 3); + hitObjectRecordEmptyNV(hObjNop); + hitObjectRecordMissNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0); + hitObjectRecordMissMotionNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0, 8.0f); + hitObjectExecuteShaderNV(hObjHit, 2); + if (hitObjectIsHitNV(hObj)) { + op = 1.0f; + } else if (hitObjectIsMissNV(hObj)) { + op = 2.0f; + } else if (hitObjectIsEmptyNV(hObj)) { + op = 3.0f; + } + + + float tmin = hitObjectGetRayTMinNV(hObjHit); + float tmax = hitObjectGetRayTMaxNV(hObjHit); + vec3 orig = hitObjectGetWorldRayOriginNV(hObjHit); + vec3 dir = hitObjectGetWorldRayDirectionNV(hObjHit); + vec3 oorig = hitObjectGetObjectRayOriginNV(hObjHit); + vec3 odir = hitObjectGetObjectRayDirectionNV(hObjHit); + mat4x3 otw = hitObjectGetObjectToWorldNV(hObjHit); + mat4x3 wto = hitObjectGetWorldToObjectNV(hObjHit); + int cid = hitObjectGetInstanceCustomIndexNV(hObjMiss); + int iid = hitObjectGetInstanceIdNV(hObjNop); + int pid = hitObjectGetPrimitiveIndexNV(hObj); + int gid = hitObjectGetGeometryIndexNV(hObj); + uint hkind = hitObjectGetHitKindNV(hObj); + hitObjectGetAttributesNV(hObj, 2); + uvec2 handle = hitObjectGetShaderRecordBufferHandleNV(hObj); + uint rid = hitObjectGetShaderBindingTableRecordIndexNV(hObj); + + + + +} diff --git a/Test/spv.nv.hitobject-errors.rgen b/Test/spv.nv.hitobject-errors.rgen new file mode 100644 index 0000000000..9744ccf4c7 --- /dev/null +++ b/Test/spv.nv.hitobject-errors.rgen @@ -0,0 +1,24 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_NV_shader_invocation_reorder : enable + + +hitObjectNV hObjGlob; // OK +uniform hitObjectNV uHitObj; // ERROR + +layout(location=0) in hitObjectNV hobjIn; // ERROR +out hitObjectNV hobjOut; // ERROR + +struct hObjWrapper{ + hitObjectNV objField; + vec3 v; +}; + +void foo(hitObjectNV hObjArg) {} // OK + +void main() +{ + hObjWrapper wrapper; // ERROR + hitObjectNV localHitObj; // OK + foo(localHitObj); // OK +} diff --git a/Test/spv.nvAtomicFp16Vec.frag b/Test/spv.nvAtomicFp16Vec.frag new file mode 100644 index 0000000000..de18b1b8f0 --- /dev/null +++ b/Test/spv.nvAtomicFp16Vec.frag @@ -0,0 +1,113 @@ +#version 430 + +#extension GL_NV_shader_atomic_fp16_vector : enable +#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable + +layout(binding = 0) buffer Buffer +{ + f16vec2 dataf16v2; + f16vec4 dataf16v4; + + f16vec2 resf16v2; + f16vec4 resf16v4; + +}buf; + +layout(binding = 0, rg16f) volatile coherent uniform image1D fimage1D; +layout(binding = 1, rg16f) volatile coherent uniform image1DArray fimage1DArray; +layout(binding = 2, rg16f) volatile coherent uniform image2D fimage2D; +layout(binding = 3, rg16f) volatile coherent uniform image2DArray fimage2DArray; +layout(binding = 5, rg16f) volatile coherent uniform imageCube fimageCube; +layout(binding = 6, rg16f) volatile coherent uniform imageCubeArray fimageCubeArray; +layout(binding = 9, rg16f) volatile coherent uniform image3D fimage3D; + +layout(binding = 10, rgba16f) volatile coherent uniform image1D fimage1Dv4; +layout(binding = 11, rgba16f) volatile coherent uniform image1DArray fimage1DArrayv4; +layout(binding = 12, rgba16f) volatile coherent uniform image2D fimage2Dv4; +layout(binding = 13, rgba16f) volatile coherent uniform image2DArray fimage2DArrayv4; +layout(binding = 15, rgba16f) volatile coherent uniform imageCube fimageCubev4; +layout(binding = 16, rgba16f) volatile coherent uniform imageCubeArray fimageCubeArrayv4; +layout(binding = 19, rgba16f) volatile coherent uniform image3D fimage3Dv4; + +void main() +{ + // atomic* functions supported with f16vec2 + buf.resf16v2 = atomicAdd(buf.dataf16v2, f16vec2(3)); + buf.resf16v2 += atomicMin(buf.dataf16v2, f16vec2(3)); + buf.resf16v2 += atomicMax(buf.dataf16v2, f16vec2(3)); + buf.resf16v2 += atomicExchange(buf.dataf16v2, f16vec2(3)); + + // atomic* functions supported with f16vec4 + buf.resf16v4 = atomicAdd(buf.dataf16v4, f16vec4(3)); + buf.resf16v4 += atomicMin(buf.dataf16v4, f16vec4(3)); + buf.resf16v4 += atomicMax(buf.dataf16v4, f16vec4(3)); + buf.resf16v4 += atomicExchange(buf.dataf16v4, f16vec4(3)); + + // imageAtomic* functions supported with f16vec2 and only format supported is rg16f + f16vec2 constVec2 = f16vec2(2.0); + buf.resf16v2 += imageAtomicAdd(fimage1D, int(0), constVec2); + buf.resf16v2 += imageAtomicAdd(fimage1DArray, ivec2(0,0), constVec2); + buf.resf16v2 += imageAtomicAdd(fimage2D, ivec2(0,0), constVec2); + buf.resf16v2 += imageAtomicAdd(fimage2DArray, ivec3(0,0, 0), constVec2); + buf.resf16v2 += imageAtomicAdd(fimageCube, ivec3(0,0,0), constVec2); + buf.resf16v2 += imageAtomicAdd(fimageCubeArray, ivec3(0,0,0), constVec2); + buf.resf16v2 += imageAtomicAdd(fimage3D, ivec3(0,0,0), constVec2); + + buf.resf16v2 += imageAtomicMin(fimage1D, int(0), constVec2); + buf.resf16v2 += imageAtomicMin(fimage1DArray, ivec2(0,0), constVec2); + buf.resf16v2 += imageAtomicMin(fimage2D, ivec2(0,0), constVec2); + buf.resf16v2 += imageAtomicMin(fimage2DArray, ivec3(0,0, 0), constVec2); + buf.resf16v2 += imageAtomicMin(fimageCube, ivec3(0,0,0), constVec2); + buf.resf16v2 += imageAtomicMin(fimageCubeArray, ivec3(0,0,0), constVec2); + buf.resf16v2 += imageAtomicMin(fimage3D, ivec3(0,0,0), constVec2); + + buf.resf16v2 += imageAtomicMax(fimage1D, int(0), constVec2); + buf.resf16v2 += imageAtomicMax(fimage1DArray, ivec2(0,0), constVec2); + buf.resf16v2 += imageAtomicMax(fimage2D, ivec2(0,0), constVec2); + buf.resf16v2 += imageAtomicMax(fimage2DArray, ivec3(0,0, 0), constVec2); + buf.resf16v2 += imageAtomicMax(fimageCube, ivec3(0,0,0), constVec2); + buf.resf16v2 += imageAtomicMax(fimageCubeArray, ivec3(0,0,0), constVec2); + buf.resf16v2 += imageAtomicMax(fimage3D, ivec3(0,0,0), constVec2); + + buf.resf16v2 += imageAtomicExchange(fimage1D, int(0), constVec2); + buf.resf16v2 += imageAtomicExchange(fimage1DArray, ivec2(0,0), constVec2); + buf.resf16v2 += imageAtomicExchange(fimage2D, ivec2(0,0), constVec2); + buf.resf16v2 += imageAtomicExchange(fimage2DArray, ivec3(0,0, 0), constVec2); + buf.resf16v2 += imageAtomicExchange(fimageCube, ivec3(0,0,0), constVec2); + buf.resf16v2 += imageAtomicExchange(fimageCubeArray, ivec3(0,0,0), constVec2); + buf.resf16v2 += imageAtomicExchange(fimage3D, ivec3(0,0,0), constVec2); + + // imageAtomic* functions supported with f16vec4 and only format supported is rgba16f + f16vec4 constVec4 = f16vec4(2.0); + buf.resf16v4 += imageAtomicAdd(fimage1Dv4, int(0), constVec4); + buf.resf16v4 += imageAtomicAdd(fimage1DArrayv4, ivec2(0,0), constVec4); + buf.resf16v4 += imageAtomicAdd(fimage2Dv4, ivec2(0,0), constVec4); + buf.resf16v4 += imageAtomicAdd(fimage2DArrayv4, ivec3(0,0, 0), constVec4); + buf.resf16v4 += imageAtomicAdd(fimageCubev4, ivec3(0,0,0), constVec4); + buf.resf16v4 += imageAtomicAdd(fimageCubeArrayv4, ivec3(0,0,0), constVec4); + buf.resf16v4 += imageAtomicAdd(fimage3Dv4, ivec3(0,0,0), constVec4); + + buf.resf16v4 += imageAtomicMin(fimage1Dv4, int(0), constVec4); + buf.resf16v4 += imageAtomicMin(fimage1DArrayv4, ivec2(0,0), constVec4); + buf.resf16v4 += imageAtomicMin(fimage2Dv4, ivec2(0,0), constVec4); + buf.resf16v4 += imageAtomicMin(fimage2DArrayv4, ivec3(0,0, 0), constVec4); + buf.resf16v4 += imageAtomicMin(fimageCubev4, ivec3(0,0,0), constVec4); + buf.resf16v4 += imageAtomicMin(fimageCubeArrayv4, ivec3(0,0,0), constVec4); + buf.resf16v4 += imageAtomicMin(fimage3Dv4, ivec3(0,0,0), constVec4); + + buf.resf16v4 += imageAtomicMax(fimage1Dv4, int(0), constVec4); + buf.resf16v4 += imageAtomicMax(fimage1DArrayv4, ivec2(0,0), constVec4); + buf.resf16v4 += imageAtomicMax(fimage2Dv4, ivec2(0,0), constVec4); + buf.resf16v4 += imageAtomicMax(fimage2DArrayv4, ivec3(0,0, 0), constVec4); + buf.resf16v4 += imageAtomicMax(fimageCubev4, ivec3(0,0,0), constVec4); + buf.resf16v4 += imageAtomicMax(fimageCubeArrayv4, ivec3(0,0,0), constVec4); + buf.resf16v4 += imageAtomicMax(fimage3Dv4, ivec3(0,0,0), constVec4); + + buf.resf16v4 += imageAtomicExchange(fimage1Dv4, int(0), constVec4); + buf.resf16v4 += imageAtomicExchange(fimage1DArrayv4, ivec2(0,0), constVec4); + buf.resf16v4 += imageAtomicExchange(fimage2Dv4, ivec2(0,0), constVec4); + buf.resf16v4 += imageAtomicExchange(fimage2DArrayv4, ivec3(0,0, 0), constVec4); + buf.resf16v4 += imageAtomicExchange(fimageCubev4, ivec3(0,0,0), constVec4); + buf.resf16v4 += imageAtomicExchange(fimageCubeArrayv4, ivec3(0,0,0), constVec4); + buf.resf16v4 += imageAtomicExchange(fimage3Dv4, ivec3(0,0,0), constVec4); +} diff --git a/Test/spv.pp.line.frag b/Test/spv.pp.line.frag index 464463c343..6f4702f059 100644 --- a/Test/spv.pp.line.frag +++ b/Test/spv.pp.line.frag @@ -1,4 +1,5 @@ #version 140 +#extension GL_GOOGLE_cpp_style_line_directive : require uniform sampler1D texSampler1D; uniform sampler2D texSampler2D; @@ -8,9 +9,20 @@ varying vec4 u; in vec2 coords2D; +#line 0 "header.h" +float myAbs(float x) { + if (x > 0) { + return x; + } + else { + return -x; + } +} + +#line 22 "spv.pp.line.frag" void main() { - float blendscale = 1.789; + float blendscale = myAbs(1.789); float bias = 2.0; float coords1D = 1.789; vec4 color = vec4(0.0, 0.0, 0.0, 0.0); diff --git a/Test/spv.replicate.comp b/Test/spv.replicate.comp new file mode 100644 index 0000000000..ac2018f5c6 --- /dev/null +++ b/Test/spv.replicate.comp @@ -0,0 +1,43 @@ +#version 450 core +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_KHR_cooperative_matrix : enable +#extension GL_EXT_spec_constant_composites : enable + +#pragma use_replicated_composites + +layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in; + +const int csix = 6; +struct S { int a; int b; int c; }; +struct SS { S s1; S s2; }; +const S cs = S(csix, csix, csix); +const SS css = SS(cs, cs); + +const float spec_float = 3; +const vec4 cv = vec4(spec_float); +const mat4 cm = mat4(cv,cv,cv,cv); + +const int cfive = 5; +const int carr[3] = {cfive, cfive, cfive}; +const int carr2[3][3] = {carr, carr, carr}; + +const coopmat ccoop = coopmat(spec_float); + +void main() +{ + coopmat coop = coopmat(1.0); + + float a = 2.0; + vec4 v = vec4(a); + v = cv; + mat4 m = mat4(v,v,v,v); + + int five = 5; + int six = 6; + int arr[3] = {five, five, five}; + int arr2[3][3] = {arr, arr, arr}; + arr2 = carr2; + + S s2 = S(six, six, six); + SS ss = SS(s2, s2); +} diff --git a/Test/spv.replicatespec.comp b/Test/spv.replicatespec.comp new file mode 100644 index 0000000000..e4bc8c059d --- /dev/null +++ b/Test/spv.replicatespec.comp @@ -0,0 +1,43 @@ +#version 450 core +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_KHR_cooperative_matrix : enable +#extension GL_EXT_spec_constant_composites : enable + +#pragma use_replicated_composites + +layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in; + +layout(constant_id = 1) const int csix = 6; +struct S { int a; int b; int c; }; +struct SS { S s1; S s2; }; +const S cs = S(csix, csix, csix); +const SS css = SS(cs, cs); + +layout(constant_id = 2) const float spec_float = 3; +const vec4 cv = vec4(spec_float); +const mat4 cm = mat4(cv,cv,cv,cv); + +layout(constant_id = 0) const int cfive = 5; +const int carr[3] = {cfive, cfive, cfive}; +const int carr2[3][3] = {carr, carr, carr}; + +const coopmat ccoop = coopmat(spec_float); + +void main() +{ + coopmat coop = coopmat(1.0); + + float a = 2.0; + vec4 v = vec4(a); + v = cv; + mat4 m = mat4(v,v,v,v); + + int five = 5; + int six = 6; + int arr[3] = {five, five, five}; + int arr2[3][3] = {arr, arr, arr}; + arr2 = carr2; + + S s2 = S(six, six, six); + SS ss = SS(s2, s2); +} diff --git a/Test/spv.sampledImageBlock.frag b/Test/spv.sampledImageBlock.frag new file mode 100644 index 0000000000..19b1133f8a --- /dev/null +++ b/Test/spv.sampledImageBlock.frag @@ -0,0 +1,21 @@ +#version 450 + +layout(set = 0, binding = 0) uniform texture2D tex0; +layout(set = 0, binding = 1) uniform sampler samp0; +layout(set = 0, binding = 2) uniform ParamBuffer { + int cond; +} paramBuffer; + +layout(location = 0) out vec4 fragColor; +layout(location = 0) in flat ivec2 texCoord; + +void main() { + // get input + + const vec4 texel = texelFetch(sampler2D(tex0, samp0), + paramBuffer.cond == 0 ? texCoord.xy : texCoord.yx, + 0); + + fragColor = vec4(texel.xyz, 1.0); + +} diff --git a/Test/spv.specConstantComposite2.vert b/Test/spv.specConstantComposite2.vert new file mode 100644 index 0000000000..d9d07a3ed5 --- /dev/null +++ b/Test/spv.specConstantComposite2.vert @@ -0,0 +1,98 @@ +#version 450 + +// constant_id specified scalar spec constants +layout(constant_id = 200) const int spec_int = 3; +layout(constant_id = 201) const float spec_float = 3.14; +layout(constant_id = 202) const + double spec_double = 3.1415926535897932384626433832795; +layout(constant_id = 203) const bool spec_bool = true; + +// const float cast_spec_float = float(spec_float); + +// Flat struct +struct flat_struct { + int i; + float f; + double d; + bool b; +}; + +// Nesting struct +struct nesting_struct { + flat_struct nested; + vec4 v; + int i; +}; + +// Expect OpSpecConstantComposite +// Flat struct initializer +//const flat_struct spec_flat_struct_all_spec = {spec_int, spec_float, +// spec_double, spec_bool}; +//const flat_struct spec_flat_struct_partial_spec = {30, 30.14, spec_double, +// spec_bool}; + +// Nesting struct initializer +//const nesting_struct nesting_struct_ctor = { +// {spec_int, spec_float, spec_double, false}, +// vec4(0.1, 0.1, 0.1, 0.1), +// spec_int}; + +// Vector constructor +//const vec4 spec_vec4_all_spec = +// vec4(spec_float, spec_float, spec_float, spec_float); +//const vec4 spec_vec4_partial_spec = +// vec4(spec_float, spec_float, 300.14, 300.14); +//const vec4 spec_vec4_from_one_scalar = vec4(spec_float); + +// Matrix constructor +//const mat2x3 spec_mat2x3 = mat2x3(spec_float, spec_float, spec_float, 1.1, 2.2, 3.3); +//const mat2x3 spec_mat2x3_from_one_scalar = mat2x3(spec_float); + +// Struct nesting constructor +//const nesting_struct spec_nesting_struct_all_spec = { +// spec_flat_struct_all_spec, spec_vec4_all_spec, spec_int}; +//const nesting_struct spec_nesting_struct_partial_spec = { +// spec_flat_struct_partial_spec, spec_vec4_partial_spec, 3000}; + +//const float spec_float_array[5] = {spec_float, spec_float, 1.0, 2.0, 3.0}; +//const int spec_int_array[5] = {spec_int, spec_int, 1, 2, 30}; + +// global_vec4_array_with_spec_length is not a spec constant, but its array +// size is. When calling global_vec4_array_with_spec_length.length(), A +// TIntermSymbol Node should be returned, instead of a TIntermConstantUnion +// node which represents a known constant value. +in vec4 global_vec4_array_with_spec_length[spec_int]; + +out vec4 color; + +void refer_primary_spec_const() { + if (spec_bool) color *= spec_int; +} + +void refer_composite_spec_const() { + //color += spec_vec4_all_spec; + //color -= spec_vec4_partial_spec; +} + +void refer_copmosite_dot_dereference() { + //color *= spec_nesting_struct_all_spec.i; + //color += spec_vec4_all_spec.x; +} + +void refer_composite_bracket_dereference() { + //color -= spec_float_array[1]; + //color /= spec_int_array[spec_int_array[spec_int]]; +} + +int refer_spec_const_array_length() { + int len = global_vec4_array_with_spec_length.length(); + return len; +} + +void declare_spec_const_in_func() { + //const nesting_struct spec_const_declared_in_func = { + // spec_flat_struct_partial_spec, spec_vec4_partial_spec, 10}; + //color /= spec_const_declared_in_func.i; +} + +void main() {} diff --git a/Test/spv.specConstantOp.float16.comp b/Test/spv.specConstantOp.float16.comp new file mode 100644 index 0000000000..c3db60c232 --- /dev/null +++ b/Test/spv.specConstantOp.float16.comp @@ -0,0 +1,18 @@ +#version 450 +#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require + +// Produce an OpSpecConstantOp with 8 bit integer type + +layout(constant_id = 0) const float c = 8; + +layout(binding=0) writeonly restrict buffer S { + float16_t p_out[]; +}; + +void main() +{ + p_out[0] = float16_t(c); +} + + + diff --git a/Test/spv.specConstantOp.int16.comp b/Test/spv.specConstantOp.int16.comp new file mode 100644 index 0000000000..c5078436c7 --- /dev/null +++ b/Test/spv.specConstantOp.int16.comp @@ -0,0 +1,16 @@ +#version 450 +#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require + +// Produce an OpSpecConstantOp with 16 bit integer type + +layout(constant_id = 0) const int c = 8; + +layout(binding=0) writeonly restrict buffer S { + uint16_t p_out[]; +}; + +void main() +{ + p_out[0] = uint16_t(c); +} + diff --git a/Test/spv.specConstantOp.int8.comp b/Test/spv.specConstantOp.int8.comp new file mode 100644 index 0000000000..598821077b --- /dev/null +++ b/Test/spv.specConstantOp.int8.comp @@ -0,0 +1,17 @@ +#version 450 +#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require + +// Produce an OpSpecConstantOp with 8 bit integer type + +layout(constant_id = 0) const int c = 8; + +layout(binding=0) writeonly restrict buffer S { + uint8_t p_out[]; +}; + +void main() +{ + p_out[0] = uint8_t(c); +} + + diff --git a/Test/spv.structCopy.comp b/Test/spv.structCopy.comp new file mode 100644 index 0000000000..f915f54434 --- /dev/null +++ b/Test/spv.structCopy.comp @@ -0,0 +1,37 @@ +#version 460 +layout(local_size_x = 512, local_size_y = 1) in; +layout(std430) buffer; + +struct MyStruct { + uint a; + uint b; + uint c; +}; + +layout(binding = 0) buffer MyStructs { + uint count; + MyStruct data[]; +} +my_structs; + +layout(binding = 1) buffer Output { + uint a; + uint b; + uint c; +} +o; + +shared MyStruct s[512]; + +void main() { + s[0] = MyStruct(1, 2, 3); + + uint id = gl_GlobalInvocationID.x; + MyStruct ms = + id > my_structs.count ? s[id - my_structs.count] : my_structs.data[id]; + + atomicAdd(o.a, ms.a); + atomicAdd(o.b, ms.b); + atomicAdd(o.c, ms.c); +} + diff --git a/Test/spv.subgroupExtendedTypesRotate.comp b/Test/spv.subgroupExtendedTypesRotate.comp new file mode 100644 index 0000000000..a83335faca --- /dev/null +++ b/Test/spv.subgroupExtendedTypesRotate.comp @@ -0,0 +1,100 @@ +#version 450 + +#extension GL_KHR_shader_subgroup_rotate: enable +#extension GL_EXT_shader_subgroup_extended_types_int8: enable +#extension GL_EXT_shader_subgroup_extended_types_int16: enable +#extension GL_EXT_shader_subgroup_extended_types_int64: enable +#extension GL_EXT_shader_subgroup_extended_types_float16: enable + +layout (local_size_x = 8) in; + +readonly buffer roblock +{ + uint delta; +} ro; + +layout(binding = 0) buffer Buffers +{ + i8vec4 i8; + u8vec4 u8; + i16vec4 i16; + u16vec4 u16; + i64vec4 i64; + u64vec4 u64; + f16vec4 f16; +} data[4]; + +void main() +{ + uint delta = ro.delta; + + data[delta].i8.x = subgroupRotate(data[0].i8.x, delta); + data[delta].i8.xy = subgroupRotate(data[1].i8.xy, delta); + data[delta].i8.xyz = subgroupRotate(data[2].i8.xyz, delta); + data[delta].i8 = subgroupRotate(data[3].i8, delta); + + data[delta].i8.x = subgroupClusteredRotate(data[0].i8.x, delta, 1); + data[delta].i8.xy = subgroupClusteredRotate(data[1].i8.xy, delta, 1); + data[delta].i8.xyz = subgroupClusteredRotate(data[2].i8.xyz, delta, 1); + data[delta].i8 = subgroupClusteredRotate(data[3].i8, delta, 1); + + data[delta].u8.x = subgroupRotate(data[0].u8.x, delta); + data[delta].u8.xy = subgroupRotate(data[1].u8.xy, delta); + data[delta].u8.xyz = subgroupRotate(data[2].u8.xyz, delta); + data[delta].u8 = subgroupRotate(data[3].u8, delta); + + data[delta].u8.x = subgroupClusteredRotate(data[0].u8.x, delta, 1); + data[delta].u8.xy = subgroupClusteredRotate(data[1].u8.xy, delta, 1); + data[delta].u8.xyz = subgroupClusteredRotate(data[2].u8.xyz, delta, 1); + data[delta].u8 = subgroupClusteredRotate(data[3].u8, delta, 1); + + data[delta].i16.x = subgroupRotate(data[0].i16.x, delta); + data[delta].i16.xy = subgroupRotate(data[1].i16.xy, delta); + data[delta].i16.xyz = subgroupRotate(data[2].i16.xyz, delta); + data[delta].i16 = subgroupRotate(data[3].i16, delta); + + data[delta].i16.x = subgroupClusteredRotate(data[0].i16.x, delta, 1); + data[delta].i16.xy = subgroupClusteredRotate(data[1].i16.xy, delta, 1); + data[delta].i16.xyz = subgroupClusteredRotate(data[2].i16.xyz, delta, 1); + data[delta].i16 = subgroupClusteredRotate(data[3].i16, delta, 1); + + data[delta].u16.x = subgroupRotate(data[0].u16.x, delta); + data[delta].u16.xy = subgroupRotate(data[1].u16.xy, delta); + data[delta].u16.xyz = subgroupRotate(data[2].u16.xyz, delta); + data[delta].u16 = subgroupRotate(data[3].u16, delta); + + data[delta].u16.x = subgroupClusteredRotate(data[0].u16.x, delta, 1); + data[delta].u16.xy = subgroupClusteredRotate(data[1].u16.xy, delta, 1); + data[delta].u16.xyz = subgroupClusteredRotate(data[2].u16.xyz, delta, 1); + data[delta].u16 = subgroupClusteredRotate(data[3].u16, delta, 1); + + data[delta].i64.x = subgroupRotate(data[0].i64.x, delta); + data[delta].i64.xy = subgroupRotate(data[1].i64.xy, delta); + data[delta].i64.xyz = subgroupRotate(data[2].i64.xyz, delta); + data[delta].i64 = subgroupRotate(data[3].i64, delta); + + data[delta].i64.x = subgroupClusteredRotate(data[0].i64.x, delta, 1); + data[delta].i64.xy = subgroupClusteredRotate(data[1].i64.xy, delta, 1); + data[delta].i64.xyz = subgroupClusteredRotate(data[2].i64.xyz, delta, 1); + data[delta].i64 = subgroupClusteredRotate(data[3].i64, delta, 1); + + data[delta].u64.x = subgroupRotate(data[0].u64.x, delta); + data[delta].u64.xy = subgroupRotate(data[1].u64.xy, delta); + data[delta].u64.xyz = subgroupRotate(data[2].u64.xyz, delta); + data[delta].u64 = subgroupRotate(data[3].u64, delta); + + data[delta].u64.x = subgroupClusteredRotate(data[0].u64.x, delta, 1); + data[delta].u64.xy = subgroupClusteredRotate(data[1].u64.xy, delta, 1); + data[delta].u64.xyz = subgroupClusteredRotate(data[2].u64.xyz, delta, 1); + data[delta].u64 = subgroupClusteredRotate(data[3].u64, delta, 1); + + data[delta].f16.x = subgroupRotate(data[0].f16.x, delta); + data[delta].f16.xy = subgroupRotate(data[1].f16.xy, delta); + data[delta].f16.xyz = subgroupRotate(data[2].f16.xyz, delta); + data[delta].f16 = subgroupRotate(data[3].f16, delta); + + data[delta].f16.x = subgroupClusteredRotate(data[0].f16.x, delta, 1); + data[delta].f16.xy = subgroupClusteredRotate(data[1].f16.xy, delta, 1); + data[delta].f16.xyz = subgroupClusteredRotate(data[2].f16.xyz, delta, 1); + data[delta].f16 = subgroupClusteredRotate(data[3].f16, delta, 1); +} diff --git a/Test/spv.subgroupExtendedTypesRotateNeg.comp b/Test/spv.subgroupExtendedTypesRotateNeg.comp new file mode 100644 index 0000000000..01ea7e9b88 --- /dev/null +++ b/Test/spv.subgroupExtendedTypesRotateNeg.comp @@ -0,0 +1,100 @@ +#version 450 + +#extension GL_KHR_shader_subgroup_rotate: enable +#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable +#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable +#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable +#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable + +layout (local_size_x = 8) in; + +readonly buffer roblock +{ + uint delta; +} ro; + +layout(binding = 0) buffer Buffers +{ + i8vec4 i8; + u8vec4 u8; + i16vec4 i16; + u16vec4 u16; + i64vec4 i64; + u64vec4 u64; + f16vec4 f16; +} data[4]; + +void main() +{ + uint delta = ro.delta; + + data[delta].i8.x = subgroupRotate(data[0].i8.x, delta); + data[delta].i8.xy = subgroupRotate(data[1].i8.xy, delta); + data[delta].i8.xyz = subgroupRotate(data[2].i8.xyz, delta); + data[delta].i8 = subgroupRotate(data[3].i8, delta); + + data[delta].i8.x = subgroupClusteredRotate(data[0].i8.x, delta, 1); + data[delta].i8.xy = subgroupClusteredRotate(data[1].i8.xy, delta, 1); + data[delta].i8.xyz = subgroupClusteredRotate(data[2].i8.xyz, delta, 1); + data[delta].i8 = subgroupClusteredRotate(data[3].i8, delta, 1); + + data[delta].u8.x = subgroupRotate(data[0].u8.x, delta); + data[delta].u8.xy = subgroupRotate(data[1].u8.xy, delta); + data[delta].u8.xyz = subgroupRotate(data[2].u8.xyz, delta); + data[delta].u8 = subgroupRotate(data[3].u8, delta); + + data[delta].u8.x = subgroupClusteredRotate(data[0].u8.x, delta, 1); + data[delta].u8.xy = subgroupClusteredRotate(data[1].u8.xy, delta, 1); + data[delta].u8.xyz = subgroupClusteredRotate(data[2].u8.xyz, delta, 1); + data[delta].u8 = subgroupClusteredRotate(data[3].u8, delta, 1); + + data[delta].i16.x = subgroupRotate(data[0].i16.x, delta); + data[delta].i16.xy = subgroupRotate(data[1].i16.xy, delta); + data[delta].i16.xyz = subgroupRotate(data[2].i16.xyz, delta); + data[delta].i16 = subgroupRotate(data[3].i16, delta); + + data[delta].i16.x = subgroupClusteredRotate(data[0].i16.x, delta, 1); + data[delta].i16.xy = subgroupClusteredRotate(data[1].i16.xy, delta, 1); + data[delta].i16.xyz = subgroupClusteredRotate(data[2].i16.xyz, delta, 1); + data[delta].i16 = subgroupClusteredRotate(data[3].i16, delta, 1); + + data[delta].u16.x = subgroupRotate(data[0].u16.x, delta); + data[delta].u16.xy = subgroupRotate(data[1].u16.xy, delta); + data[delta].u16.xyz = subgroupRotate(data[2].u16.xyz, delta); + data[delta].u16 = subgroupRotate(data[3].u16, delta); + + data[delta].u16.x = subgroupClusteredRotate(data[0].u16.x, delta, 1); + data[delta].u16.xy = subgroupClusteredRotate(data[1].u16.xy, delta, 1); + data[delta].u16.xyz = subgroupClusteredRotate(data[2].u16.xyz, delta, 1); + data[delta].u16 = subgroupClusteredRotate(data[3].u16, delta, 1); + + data[delta].i64.x = subgroupRotate(data[0].i64.x, delta); + data[delta].i64.xy = subgroupRotate(data[1].i64.xy, delta); + data[delta].i64.xyz = subgroupRotate(data[2].i64.xyz, delta); + data[delta].i64 = subgroupRotate(data[3].i64, delta); + + data[delta].i64.x = subgroupClusteredRotate(data[0].i64.x, delta, 1); + data[delta].i64.xy = subgroupClusteredRotate(data[1].i64.xy, delta, 1); + data[delta].i64.xyz = subgroupClusteredRotate(data[2].i64.xyz, delta, 1); + data[delta].i64 = subgroupClusteredRotate(data[3].i64, delta, 1); + + data[delta].u64.x = subgroupRotate(data[0].u64.x, delta); + data[delta].u64.xy = subgroupRotate(data[1].u64.xy, delta); + data[delta].u64.xyz = subgroupRotate(data[2].u64.xyz, delta); + data[delta].u64 = subgroupRotate(data[3].u64, delta); + + data[delta].u64.x = subgroupClusteredRotate(data[0].u64.x, delta, 1); + data[delta].u64.xy = subgroupClusteredRotate(data[1].u64.xy, delta, 1); + data[delta].u64.xyz = subgroupClusteredRotate(data[2].u64.xyz, delta, 1); + data[delta].u64 = subgroupClusteredRotate(data[3].u64, delta, 1); + + data[delta].f16.x = subgroupRotate(data[0].f16.x, delta); + data[delta].f16.xy = subgroupRotate(data[1].f16.xy, delta); + data[delta].f16.xyz = subgroupRotate(data[2].f16.xyz, delta); + data[delta].f16 = subgroupRotate(data[3].f16, delta); + + data[delta].f16.x = subgroupClusteredRotate(data[0].f16.x, delta, 1); + data[delta].f16.xy = subgroupClusteredRotate(data[1].f16.xy, delta, 1); + data[delta].f16.xyz = subgroupClusteredRotate(data[2].f16.xyz, delta, 1); + data[delta].f16 = subgroupClusteredRotate(data[3].f16, delta, 1); +} diff --git a/Test/spv.subgroupRotate.comp b/Test/spv.subgroupRotate.comp new file mode 100644 index 0000000000..7f8c007e7b --- /dev/null +++ b/Test/spv.subgroupRotate.comp @@ -0,0 +1,73 @@ +#version 450 + +#extension GL_KHR_shader_subgroup_rotate: enable + +layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in; + +readonly buffer roblock +{ + uint delta; +} ro; + +layout(binding = 0) buffer Buffers +{ + vec4 f4; + ivec4 i4; + uvec4 u4; + dvec4 d4; +} data[4]; + +void main() +{ + uint delta = ro.delta; + + data[delta].f4.x = subgroupRotate(data[0].f4.x, delta); + data[delta].f4.xy = subgroupRotate(data[1].f4.xy, delta); + data[delta].f4.xyz = subgroupRotate(data[2].f4.xyz, delta); + data[delta].f4 = subgroupRotate(data[3].f4, delta); + + data[delta].i4.x = subgroupRotate(data[0].i4.x, delta); + data[delta].i4.xy = subgroupRotate(data[1].i4.xy, delta); + data[delta].i4.xyz = subgroupRotate(data[2].i4.xyz, delta); + data[delta].i4 = subgroupRotate(data[3].i4, delta); + + data[delta].u4.x = subgroupRotate(data[0].u4.x, delta); + data[delta].u4.xy = subgroupRotate(data[1].u4.xy, delta); + data[delta].u4.xyz = subgroupRotate(data[2].u4.xyz, delta); + data[delta].u4 = subgroupRotate(data[3].u4, delta); + + data[delta].d4.x = subgroupRotate(data[0].d4.x, delta); + data[delta].d4.xy = subgroupRotate(data[1].d4.xy, delta); + data[delta].d4.xyz = subgroupRotate(data[2].d4.xyz, delta); + data[delta].d4 = subgroupRotate(data[3].d4, delta); + + data[delta].i4.x = int(subgroupRotate(data[0].i4.x < 0, delta)); + data[delta].i4.xy = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)), delta)); + data[delta].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta)); + data[delta].i4 = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)), delta)); + + data[delta].f4.x = subgroupClusteredRotate(data[0].f4.x, delta, 1); + data[delta].f4.xy = subgroupClusteredRotate(data[1].f4.xy, delta, 1); + data[delta].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz, delta, 1); + data[delta].f4 = subgroupClusteredRotate(data[3].f4, delta, 1); + + data[delta].i4.x = subgroupClusteredRotate(data[0].i4.x, delta, 1); + data[delta].i4.xy = subgroupClusteredRotate(data[1].i4.xy, delta, 1); + data[delta].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz, delta, 1); + data[delta].i4 = subgroupClusteredRotate(data[3].i4, delta, 1); + + data[delta].u4.x = subgroupClusteredRotate(data[0].u4.x, delta, 1); + data[delta].u4.xy = subgroupClusteredRotate(data[1].u4.xy, delta, 1); + data[delta].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz, delta, 1); + data[delta].u4 = subgroupClusteredRotate(data[3].u4, delta, 1); + + data[delta].d4.x = subgroupClusteredRotate(data[0].d4.x, delta, 1); + data[delta].d4.xy = subgroupClusteredRotate(data[1].d4.xy, delta, 1); + data[delta].d4.xyz = subgroupClusteredRotate(data[2].d4.xyz, delta, 1); + data[delta].d4 = subgroupClusteredRotate(data[3].d4, delta, 1); + + data[delta].i4.x = int(subgroupClusteredRotate(data[0].i4.x < 0, delta, 1)); + data[delta].i4.xy = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)), delta, 1)); + data[delta].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1)); + data[delta].i4 = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)), delta, 1)); +} diff --git a/Test/spv.subgroupSizeARB.frag b/Test/spv.subgroupSizeARB.frag new file mode 100644 index 0000000000..45a1701db1 --- /dev/null +++ b/Test/spv.subgroupSizeARB.frag @@ -0,0 +1,10 @@ +#version 450 +#extension GL_ARB_shader_ballot : enable +#extension GL_KHR_shader_subgroup_basic : enable + +layout(location = 0) out uint result; + +void main (void) +{ + result = gl_SubGroupSizeARB; +} diff --git a/Test/spv.textureError.frag b/Test/spv.textureError.frag new file mode 100644 index 0000000000..a40ea36397 --- /dev/null +++ b/Test/spv.textureError.frag @@ -0,0 +1,10 @@ +#version 140 + +uniform sampler2D s2D; +centroid vec2 centTexCoord; + +void main() +{ + gl_FragColor = texture2D(s2D, centTexCoord); +} + diff --git a/Test/spv.tpipBlockMatchGatherSAD.frag b/Test/spv.tpipBlockMatchGatherSAD.frag new file mode 100644 index 0000000000..7ac8fd0daf --- /dev/null +++ b/Test/spv.tpipBlockMatchGatherSAD.frag @@ -0,0 +1,39 @@ +#version 450 +#extension GL_QCOM_image_processing : require +#extension GL_QCOM_image_processing2 : require + +precision highp float; + +// fragment shader inputs and outputs +layout (location = 0) in vec4 v_texcoord; + +layout (location = 0) out vec4 fragColor; + +// fragment shader resources +layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights; +layout(set = 0, binding = 1) uniform texture2D tex2D_src1; +layout(set = 0, binding = 2) uniform texture2D tex2D_src2; +layout(set = 0, binding = 3) uniform sampler samp; +layout(set = 0, binding = 4) uniform sampler2D target_samp; +layout(set = 0, binding = 5) uniform sampler2D ref_samp; + +void main() +{ + + uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y); + uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w); + uvec2 blockSize = uvec2(4, 4); + fragColor = textureBlockMatchGatherSADQCOM( + sampler2D(tex2D_src1, samp), // target texture + tgt_coords, // target coords + sampler2D(tex2D_src2, samp), // reference texture + ref_coords, // reference coords + blockSize); // block size + fragColor = textureBlockMatchGatherSADQCOM( + target_samp, // target texture + tgt_coords, // target coords + ref_samp, // reference texture + ref_coords, // reference coords + blockSize); // block size +} + diff --git a/Test/spv.tpipBlockMatchGatherSSD.frag b/Test/spv.tpipBlockMatchGatherSSD.frag new file mode 100644 index 0000000000..7890e35fb9 --- /dev/null +++ b/Test/spv.tpipBlockMatchGatherSSD.frag @@ -0,0 +1,39 @@ +#version 450 +#extension GL_QCOM_image_processing : require +#extension GL_QCOM_image_processing2 : require + +precision highp float; + +// fragment shader inputs and outputs +layout (location = 0) in vec4 v_texcoord; + +layout (location = 0) out vec4 fragColor; + +// fragment shader resources +layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights; +layout(set = 0, binding = 1) uniform texture2D tex2D_src1; +layout(set = 0, binding = 2) uniform texture2D tex2D_src2; +layout(set = 0, binding = 3) uniform sampler samp; +layout(set = 0, binding = 4) uniform sampler2D target_samp; +layout(set = 0, binding = 5) uniform sampler2D ref_samp; + +void main() +{ + + uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y); + uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w); + uvec2 blockSize = uvec2(4, 4); + fragColor = textureBlockMatchGatherSSDQCOM( + sampler2D(tex2D_src1, samp), // target texture + tgt_coords, // target coords + sampler2D(tex2D_src2, samp), // reference texture + ref_coords, // reference coords + blockSize); // block size + fragColor = textureBlockMatchGatherSSDQCOM( + target_samp, // target texture + tgt_coords, // target coords + ref_samp, // reference texture + ref_coords, // reference coords + blockSize); // block size +} + diff --git a/Test/spv.tpipBlockMatchSAD.frag b/Test/spv.tpipBlockMatchSAD.frag new file mode 100644 index 0000000000..832f59d491 --- /dev/null +++ b/Test/spv.tpipBlockMatchSAD.frag @@ -0,0 +1,38 @@ +#version 450 +#extension GL_QCOM_image_processing : require + +precision highp float; + +// fragment shader inputs and outputs +layout (location = 0) in vec4 v_texcoord; + +layout (location = 0) out vec4 fragColor; + +// fragment shader resources +layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights; +layout(set = 0, binding = 1) uniform texture2D tex2D_src1; +layout(set = 0, binding = 2) uniform texture2D tex2D_src2; +layout(set = 0, binding = 3) uniform sampler samp; +layout(set = 0, binding = 4) uniform sampler2D target_samp; +layout(set = 0, binding = 5) uniform sampler2D ref_samp; + +void main() +{ + + uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y); + uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w); + uvec2 blockSize = uvec2(4, 4); + fragColor = textureBlockMatchSADQCOM( + sampler2D(tex2D_src1, samp), // target texture + tgt_coords, // target coords + sampler2D(tex2D_src2, samp), // reference texture + ref_coords, // reference coords + blockSize); // block size + fragColor = textureBlockMatchSADQCOM( + target_samp, // target texture + tgt_coords, // target coords + ref_samp, // reference texture + ref_coords, // reference coords + blockSize); // block size +} + diff --git a/Test/spv.tpipBlockMatchSSD.frag b/Test/spv.tpipBlockMatchSSD.frag new file mode 100644 index 0000000000..aa3ff2a951 --- /dev/null +++ b/Test/spv.tpipBlockMatchSSD.frag @@ -0,0 +1,38 @@ +#version 450 +#extension GL_QCOM_image_processing : require + +precision highp float; + +// fragment shader inputs and outputs +layout (location = 0) in vec4 v_texcoord; + +layout (location = 0) out vec4 fragColor; + +// fragment shader resources +layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights; +layout(set = 0, binding = 1) uniform texture2D tex2D_src1; +layout(set = 0, binding = 2) uniform texture2D tex2D_src2; +layout(set = 0, binding = 3) uniform sampler samp; +layout(set = 0, binding = 4) uniform sampler2D target_samp; +layout(set = 0, binding = 5) uniform sampler2D ref_samp; + +void main() +{ + + uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y); + uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w); + uvec2 blockSize = uvec2(4, 4); + fragColor = textureBlockMatchSSDQCOM( + sampler2D(tex2D_src1, samp), // target texture + tgt_coords, // target coords + sampler2D(tex2D_src2, samp), // reference texture + ref_coords, // reference coords + blockSize); // block size + fragColor = textureBlockMatchSSDQCOM( + target_samp, // target texture + tgt_coords, // target coords + ref_samp, // reference texture + ref_coords, // reference coords + blockSize); // block size +} + diff --git a/Test/spv.tpipBlockMatchWindowSAD.frag b/Test/spv.tpipBlockMatchWindowSAD.frag new file mode 100644 index 0000000000..468b8d85f5 --- /dev/null +++ b/Test/spv.tpipBlockMatchWindowSAD.frag @@ -0,0 +1,39 @@ +#version 450 +#extension GL_QCOM_image_processing : require +#extension GL_QCOM_image_processing2 : require + +precision highp float; + +// fragment shader inputs and outputs +layout (location = 0) in vec4 v_texcoord; + +layout (location = 0) out vec4 fragColor; + +// fragment shader resources +layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights; +layout(set = 0, binding = 1) uniform texture2D tex2D_src1; +layout(set = 0, binding = 2) uniform texture2D tex2D_src2; +layout(set = 0, binding = 3) uniform sampler samp; +layout(set = 0, binding = 4) uniform sampler2D target_samp; +layout(set = 0, binding = 5) uniform sampler2D ref_samp; + +void main() +{ + + uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y); + uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w); + uvec2 blockSize = uvec2(4, 4); + fragColor = textureBlockMatchWindowSADQCOM( + sampler2D(tex2D_src1, samp), // target texture + tgt_coords, // target coords + sampler2D(tex2D_src2, samp), // reference texture + ref_coords, // reference coords + blockSize); // block size + fragColor = textureBlockMatchWindowSADQCOM( + target_samp, // target texture + tgt_coords, // target coords + ref_samp, // reference texture + ref_coords, // reference coords + blockSize); // block size +} + diff --git a/Test/spv.tpipBlockMatchWindowSSD.frag b/Test/spv.tpipBlockMatchWindowSSD.frag new file mode 100644 index 0000000000..fee1bb4ab1 --- /dev/null +++ b/Test/spv.tpipBlockMatchWindowSSD.frag @@ -0,0 +1,40 @@ +#version 450 +#extension GL_QCOM_image_processing : require +#extension GL_QCOM_image_processing2 : require + +precision highp float; + +// fragment shader inputs and outputs +layout (location = 0) in vec4 v_texcoord; + +layout (location = 0) out vec4 fragColor; + +// fragment shader resources +layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights; +layout(set = 0, binding = 1) uniform texture2D tex2D_src1; +layout(set = 0, binding = 2) uniform texture2D tex2D_src2; +layout(set = 0, binding = 3) uniform sampler samp; +layout(set = 0, binding = 4) uniform sampler2D target_samp; +layout(set = 0, binding = 5) uniform sampler2D ref_samp; + +void main() +{ + + uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y); + uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w); + uvec2 blockSize = uvec2(4, 4); + fragColor = textureBlockMatchWindowSSDQCOM( + sampler2D(tex2D_src1, samp), // target texture + tgt_coords, // target coords + sampler2D(tex2D_src2, samp), // reference texture + ref_coords, // reference coords + blockSize); // block size + fragColor = textureBlockMatchWindowSSDQCOM( + target_samp, // target texture + tgt_coords, // target coords + ref_samp, // reference texture + ref_coords, // reference coords + blockSize); // block size +} + + diff --git a/Test/spv.tpipBoxFilter.frag b/Test/spv.tpipBoxFilter.frag new file mode 100644 index 0000000000..d86d531e25 --- /dev/null +++ b/Test/spv.tpipBoxFilter.frag @@ -0,0 +1,32 @@ +#version 450 +#extension GL_QCOM_image_processing : require + +precision highp float; + +// fragment shader inputs and outputs +layout (location = 0) in vec4 v_texcoord; + +layout (location = 0) out vec4 fragColor; + +// fragment shader resources +layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights; +layout(set = 0, binding = 1) uniform texture2D tex2D_src1; +layout(set = 0, binding = 2) uniform texture2D tex2D_src2; +layout(set = 0, binding = 3) uniform sampler samp; +layout(set = 0, binding = 4) uniform sampler2D tex_samp; + +void main() +{ + + vec2 boxSize = vec2(2.5, 4.5); + fragColor = textureBoxFilterQCOM( + sampler2D(tex2D_src1, samp), // source texture + v_texcoord.xy, // tex coords + boxSize); // box size + fragColor = textureBoxFilterQCOM( + tex_samp, // combined source texture + v_texcoord.xy, // tex coords + boxSize); // box size + +} + diff --git a/Test/spv.tpipSampleWeighted.frag b/Test/spv.tpipSampleWeighted.frag new file mode 100644 index 0000000000..0d10028936 --- /dev/null +++ b/Test/spv.tpipSampleWeighted.frag @@ -0,0 +1,32 @@ +#version 450 +#extension GL_QCOM_image_processing : require + +precision highp float; + +// fragment shader inputs and outputs +layout (location = 0) in vec4 v_texcoord; + +layout (location = 0) out vec4 fragColor; + +// fragment shader resources +layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights; +layout(set = 0, binding = 1) uniform texture2D tex2D_src1; +layout(set = 0, binding = 2) uniform texture2D tex2D_src2; +layout(set = 0, binding = 3) uniform sampler samp; +layout(set = 0, binding = 4) uniform sampler2D tex_samp; +layout(set = 0, binding = 5) uniform sampler2DArray tex_samp_array; + +void main() +{ + + fragColor = textureWeightedQCOM( + sampler2D(tex2D_src1, samp), // source texture + v_texcoord.xy, // tex coords + sampler2DArray(tex2DArray_weights, samp)); // weight texture + fragColor = textureWeightedQCOM( + tex_samp, // combined source texture + v_texcoord.xy, // tex coords + tex_samp_array); // combined weight texture + +} + diff --git a/Test/spv.tpipTextureArrays.frag b/Test/spv.tpipTextureArrays.frag new file mode 100644 index 0000000000..332acb318c --- /dev/null +++ b/Test/spv.tpipTextureArrays.frag @@ -0,0 +1,40 @@ +#version 450 +#extension GL_QCOM_image_processing : require + +precision highp float; + +// fragment shader inputs and outputs +layout (location = 0) in vec4 v_texcoord; + +layout (location = 0) out vec4 fragColor; + +// fragment shader resources +layout(set = 0, binding = 3) uniform sampler samp; + + +layout(set = 0, binding = 4) uniform texture2D tex2D_srcs[8]; +layout(set = 0, binding = 5) uniform sampler2D samplers[3]; + +void main() +{ + + uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y); + uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w); + uvec2 blockSize = uvec2(4, 4); + uint ii = tgt_coords.x % 8; + fragColor = textureBlockMatchSSDQCOM( + samplers[0], // target texture + tgt_coords, // target coords + sampler2D(tex2D_srcs[ii], samp), // reference texture + ref_coords, // reference coords + blockSize); // block size + + fragColor = textureBlockMatchSADQCOM( + sampler2D(tex2D_srcs[1], samp), // target texture + tgt_coords, // target coords + samplers[1], // reference texture + ref_coords, // reference coords + blockSize); // block size + +} + diff --git a/Test/struct.error.frag b/Test/struct.error.frag new file mode 100644 index 0000000000..29aba00b64 --- /dev/null +++ b/Test/struct.error.frag @@ -0,0 +1,14 @@ +#version 460 + +struct A { + float x; +}; + +A test() { + return A(1.0); +} + +void main() { + test().z; // A.z does not exist, causes a crash +} + diff --git a/Test/tes_patch.tese b/Test/tes_patch.tese new file mode 100644 index 0000000000..d41b5be574 --- /dev/null +++ b/Test/tes_patch.tese @@ -0,0 +1,19 @@ +#version 430 core +#extension GL_ARB_enhanced_layouts : require + +layout(isolines, point_mode) in; + +layout (location = 1, component = 0) in vec2 gohan[]; +layout (location = 1, component = 2) patch in vec2 goten; + +in vec4 tcs_tes[]; +out vec4 tes_gs; + +void main() +{ + vec4 result = tcs_tes[0]; + + + + tes_gs += result; +} diff --git a/Test/tokenLength.vert b/Test/tokenLength.vert index 21d446fae4..2907b327cd 100644 --- a/Test/tokenLength.vert +++ b/Test/tokenLength.vert @@ -44,29 +44,31 @@ float superF = 1.012345678901234567890123456789012345678901234567890123456789012 // Boundary cases #if 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 -#error in long non-zero #if +#error in long non-zero "if" #endif #if 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 == 0 -#error in long zero #if +#error in long zero "if" #endif #if 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 == 0 -#error in too long #if +#error in too long "if" #endif #if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 -#error in long macro #if +#error in long macro "if" #endif #if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -#error in long macro #if +#error in long macro "if" #endif #if A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -#error in too long macro #if +#error in too long macro "if" #endif // Super long #if 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -#error in super long #if +#error in super long "if" #endif #if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -#error in super long macro #if +#error in super long macro "if" #endif + +int BE = 0b01u; // ERROR (not supported by GLSL) diff --git a/Test/validate-shaders.sh b/Test/validate-shaders.sh index 89dc95566b..c841969c51 100755 --- a/Test/validate-shaders.sh +++ b/Test/validate-shaders.sh @@ -4,7 +4,7 @@ # It is not meant to preclude the possible addition of the validator to # glslang. -declare -r EXE='../build/install/bin/glslangValidator' +declare -r EXE='../build/install/bin/glslang' # search common locations for spirv-tools: keep first one for toolsdir in '../External/spirv-tools/build/tools' '../../SPIRV-Tools/build/tools/bin' '/usr/local/bin'; do diff --git a/Test/vk.relaxed.changeSet.frag b/Test/vk.relaxed.changeSet.frag old mode 100755 new mode 100644 diff --git a/Test/vk.relaxed.changeSet.vert b/Test/vk.relaxed.changeSet.vert old mode 100755 new mode 100644 diff --git a/Test/vk.relaxed.errorcheck.frag b/Test/vk.relaxed.errorcheck.frag index b75b50b77f..086c1d079f 100644 --- a/Test/vk.relaxed.errorcheck.frag +++ b/Test/vk.relaxed.errorcheck.frag @@ -7,10 +7,13 @@ out vec4 o; // default uniforms will be gathered into a uniform block uniform vec4 a; // declared in both stages with different types +uniform float test; // declared twice in this compilation unit +uniform vec2 test; + vec4 foo() { - return a; + return a + vec4(test); } void main() { o = io + foo(); -} \ No newline at end of file +} diff --git a/Test/vk.relaxed.frag b/Test/vk.relaxed.frag index d43416e0c0..3dd3c172de 100644 --- a/Test/vk.relaxed.frag +++ b/Test/vk.relaxed.frag @@ -7,10 +7,17 @@ uniform vec4 a; uniform vec2 b = vec2(0, 0); // initializer will be ignored layout(location = 0) uniform vec2 c; // location qualifier will be ignored uniform vec4 d[10]; + +struct SamplerArray{ + sampler2D tn[4]; +}; + uniform struct e { vec2 x; float y; uint z; + sampler2D t0; + SamplerArray samplers; } structUniform; // opaque types will not be grouped into uniform block @@ -64,11 +71,15 @@ uint bar() { vec4 foo() { float f = j + bufferInstance.j + structUniform.y + structUniform.z; vec2 v2 = b + c + structUniform.x; - vec4 v4 = a + d[0] + d[1] + d[2] + k + bufferInstance.k + texture(t1, vec2(0, 0)); + vec4 v4 = a + d[0] + d[1] + d[2] + k + bufferInstance.k + texture(t1, vec2(0, 0)) + texture(structUniform.t0, vec2(0, 0)); return vec4(f) * vec4(v2, 1, 1) * v4; } +vec4 baz(SamplerArray samplers) { + return texture(samplers.tn[0], vec2(0, 0)) + texture(samplers.tn[1], vec2(0, 0)) + texture(samplers.tn[2], vec2(0, 0)) + texture(samplers.tn[3], vec2(0, 0)); +} + void main() { float j = float(bar()); - o = j * foo(); -} \ No newline at end of file + o = j * foo() + baz(structUniform.samplers); +} diff --git a/Test/vk.relaxed.stagelink.0.0.frag b/Test/vk.relaxed.stagelink.0.0.frag new file mode 100644 index 0000000000..1f9f1025ec --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.0.frag @@ -0,0 +1,139 @@ +#version 460 +uniform int uTDInstanceIDOffset; +uniform int uTDNumInstances; +uniform float uTDAlphaTestVal; +#define TD_NUM_COLOR_BUFFERS 1 +#define TD_NUM_LIGHTS 0 +#define TD_NUM_SHADOWED_LIGHTS 0 +#define TD_NUM_ENV_LIGHTS 0 +#define TD_LIGHTS_ARRAY_SIZE 1 +#define TD_ENV_LIGHTS_ARRAY_SIZE 1 +#define TD_NUM_CAMERAS 1 +struct TDPhongResult +{ + vec3 diffuse; + vec3 specular; + vec3 specular2; + float shadowStrength; +}; +struct TDPBRResult +{ + vec3 diffuse; + vec3 specular; + float shadowStrength; +}; +struct TDMatrix +{ + mat4 world; + mat4 worldInverse; + mat4 worldCam; + mat4 worldCamInverse; + mat4 cam; + mat4 camInverse; + mat4 camProj; + mat4 camProjInverse; + mat4 proj; + mat4 projInverse; + mat4 worldCamProj; + mat4 worldCamProjInverse; + mat4 quadReproject; + mat3 worldForNormals; + mat3 camForNormals; + mat3 worldCamForNormals; +}; +layout(std140) uniform TDMatricesBlock { + TDMatrix uTDMats[TD_NUM_CAMERAS]; +}; +struct TDCameraInfo +{ + vec4 nearFar; + vec4 fog; + vec4 fogColor; + int renderTOPCameraIndex; +}; +layout(std140) uniform TDCameraInfoBlock { + TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; +}; +struct TDGeneral +{ + vec4 ambientColor; + vec4 nearFar; + vec4 viewport; + vec4 viewportRes; + vec4 fog; + vec4 fogColor; +}; +layout(std140) uniform TDGeneralBlock { + TDGeneral uTDGeneral; +}; + +void TDAlphaTest(float alpha); +vec4 TDDither(vec4 color); +vec4 TDOutputSwizzle(vec4 v); +uvec4 TDOutputSwizzle(uvec4 v); +void TDCheckOrderIndTrans(); +void TDCheckDiscard(); +uniform vec3 uConstant; +uniform float uShadowStrength; +uniform vec3 uShadowColor; +uniform vec4 uDiffuseColor; +uniform vec4 uAmbientColor; + +uniform sampler2DArray sColorMap; + +in Vertex +{ + vec4 color; + vec3 worldSpacePos; + vec3 texCoord0; + flat int cameraIndex; + flat int instance; +} iVert; + +// Output variable for the color +layout(location = 0) out vec4 oFragColor[TD_NUM_COLOR_BUFFERS]; +void main() +{ + // This allows things such as order independent transparency + // and Dual-Paraboloid rendering to work properly + TDCheckDiscard(); + + vec4 outcol = vec4(0.0, 0.0, 0.0, 0.0); + + vec3 texCoord0 = iVert.texCoord0.stp; + float actualTexZ = mod(int(texCoord0.z),2048); + float instanceLoop = floor(int(texCoord0.z)/2048); + texCoord0.z = actualTexZ; + vec4 colorMapColor = texture(sColorMap, texCoord0.stp); + + float red = colorMapColor[int(instanceLoop)]; + colorMapColor = vec4(red); + // Constant Light Contribution + outcol.rgb += uConstant * iVert.color.rgb; + + outcol *= colorMapColor; + + // Alpha Calculation + float alpha = iVert.color.a * colorMapColor.a ; + + // Dithering, does nothing if dithering is disabled + outcol = TDDither(outcol); + + outcol.rgb *= alpha; + + // Modern GL removed the implicit alpha test, so we need to apply + // it manually here. This function does nothing if alpha test is disabled. + TDAlphaTest(alpha); + + outcol.a = alpha; + oFragColor[0] = TDOutputSwizzle(outcol); + + + // TD_NUM_COLOR_BUFFERS will be set to the number of color buffers + // active in the render. By default we want to output zero to every + // buffer except the first one. + for (int i = 1; i < TD_NUM_COLOR_BUFFERS; i++) + { + oFragColor[i] = vec4(0.0); + } +} diff --git a/Test/vk.relaxed.stagelink.0.0.vert b/Test/vk.relaxed.stagelink.0.0.vert new file mode 100644 index 0000000000..7f31c377dc --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.0.vert @@ -0,0 +1,126 @@ +#version 460 +uniform int uTDInstanceIDOffset; +uniform int uTDNumInstances; +uniform float uTDAlphaTestVal; +#define TD_NUM_COLOR_BUFFERS 1 +#define TD_NUM_LIGHTS 0 +#define TD_NUM_SHADOWED_LIGHTS 0 +#define TD_NUM_ENV_LIGHTS 0 +#define TD_LIGHTS_ARRAY_SIZE 1 +#define TD_ENV_LIGHTS_ARRAY_SIZE 1 +#define TD_NUM_CAMERAS 1 +struct TDPhongResult +{ + vec3 diffuse; + vec3 specular; + vec3 specular2; + float shadowStrength; +}; +struct TDPBRResult +{ + vec3 diffuse; + vec3 specular; + float shadowStrength; +}; +struct TDMatrix +{ + mat4 world; + mat4 worldInverse; + mat4 worldCam; + mat4 worldCamInverse; + mat4 cam; + mat4 camInverse; + mat4 camProj; + mat4 camProjInverse; + mat4 proj; + mat4 projInverse; + mat4 worldCamProj; + mat4 worldCamProjInverse; + mat4 quadReproject; + mat3 worldForNormals; + mat3 camForNormals; + mat3 worldCamForNormals; +}; +layout(std140) uniform TDMatricesBlock { + TDMatrix uTDMats[TD_NUM_CAMERAS]; +}; +struct TDCameraInfo +{ + vec4 nearFar; + vec4 fog; + vec4 fogColor; + int renderTOPCameraIndex; +}; +layout(std140) uniform TDCameraInfoBlock { + TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; +}; +struct TDGeneral +{ + vec4 ambientColor; + vec4 nearFar; + vec4 viewport; + vec4 viewportRes; + vec4 fog; + vec4 fogColor; +}; +layout(std140) uniform TDGeneralBlock { + TDGeneral uTDGeneral; +}; +layout(location = 0) in vec3 P; +layout(location = 1) in vec3 N; +layout(location = 2) in vec4 Cd; +layout(location = 3) in vec3 uv[8]; +vec4 TDWorldToProj(vec4 v); +vec4 TDWorldToProj(vec3 v); +vec4 TDWorldToProj(vec4 v, vec3 uv); +vec4 TDWorldToProj(vec3 v, vec3 uv); +int TDInstanceID(); +int TDCameraIndex(); +vec3 TDUVUnwrapCoord(); +/*********TOUCHDEFORMPREFIX**********/ +#define TD_NUM_BONES 0 + +vec3 TDInstanceTexCoord(int instanceID, vec3 t); +vec4 TDInstanceColor(int instanceID, vec4 curColor); + +vec4 TDDeform(vec4 pos); +vec4 TDDeform(vec3 pos); +vec3 TDInstanceTexCoord(vec3 t); +vec4 TDInstanceColor(vec4 curColor); +#line 1 + +out Vertex +{ + vec4 color; + vec3 worldSpacePos; + vec3 texCoord0; + flat int cameraIndex; + flat int instance; +} oVert; + +void main() +{ + + { // Avoid duplicate variable defs + vec3 texcoord = TDInstanceTexCoord(uv[0]); + oVert.texCoord0.stp = texcoord.stp; + } + // First deform the vertex and normal + // TDDeform always returns values in world space + oVert.instance = TDInstanceID(); + vec4 worldSpacePos = TDDeform(P); + vec3 uvUnwrapCoord = TDInstanceTexCoord(TDUVUnwrapCoord()); + gl_Position = TDWorldToProj(worldSpacePos, uvUnwrapCoord); + + + // This is here to ensure we only execute lighting etc. code + // when we need it. If picking is active we don't need lighting, so + // this entire block of code will be ommited from the compile. + // The TD_PICKING_ACTIVE define will be set automatically when + // picking is active. + + int cameraIndex = TDCameraIndex(); + oVert.cameraIndex = cameraIndex; + oVert.worldSpacePos.xyz = worldSpacePos.xyz; + oVert.color = TDInstanceColor(Cd); +} diff --git a/Test/vk.relaxed.stagelink.0.1.frag b/Test/vk.relaxed.stagelink.0.1.frag new file mode 100644 index 0000000000..2a82b65d80 --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.1.frag @@ -0,0 +1,504 @@ +#version 460 +uniform sampler2D sTDNoiseMap; +uniform sampler1D sTDSineLookup; +uniform sampler2D sTDWhite2D; +uniform sampler3D sTDWhite3D; +uniform sampler2DArray sTDWhite2DArray; +uniform samplerCube sTDWhiteCube; +uniform int uTDInstanceIDOffset; +uniform int uTDNumInstances; +uniform float uTDAlphaTestVal; +#define TD_NUM_COLOR_BUFFERS 1 +#define TD_NUM_LIGHTS 0 +#define TD_NUM_SHADOWED_LIGHTS 0 +#define TD_NUM_ENV_LIGHTS 0 +#define TD_LIGHTS_ARRAY_SIZE 1 +#define TD_ENV_LIGHTS_ARRAY_SIZE 1 +#define TD_NUM_CAMERAS 1 +struct TDLight +{ + vec4 position; + vec3 direction; + vec3 diffuse; + vec4 nearFar; + vec4 lightSize; + vec4 misc; + vec4 coneLookupScaleBias; + vec4 attenScaleBiasRoll; + mat4 shadowMapMatrix; + mat4 shadowMapCamMatrix; + vec4 shadowMapRes; + mat4 projMapMatrix; +}; +struct TDEnvLight +{ + vec3 color; + mat3 rotate; +}; +layout(std140) uniform TDLightBlock +{ + TDLight uTDLights[TD_LIGHTS_ARRAY_SIZE]; +}; +layout(std140) uniform TDEnvLightBlock +{ + TDEnvLight uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE]; +}; +layout(std430) readonly restrict buffer TDEnvLightBuffer +{ + vec3 shCoeffs[9]; +} uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE]; +struct TDPhongResult +{ + vec3 diffuse; + vec3 specular; + vec3 specular2; + float shadowStrength; +}; +struct TDPBRResult +{ + vec3 diffuse; + vec3 specular; + float shadowStrength; +}; +struct TDMatrix +{ + mat4 world; + mat4 worldInverse; + mat4 worldCam; + mat4 worldCamInverse; + mat4 cam; + mat4 camInverse; + mat4 camProj; + mat4 camProjInverse; + mat4 proj; + mat4 projInverse; + mat4 worldCamProj; + mat4 worldCamProjInverse; + mat4 quadReproject; + mat3 worldForNormals; + mat3 camForNormals; + mat3 worldCamForNormals; +}; +layout(std140) uniform TDMatricesBlock { + TDMatrix uTDMats[TD_NUM_CAMERAS]; +}; +struct TDCameraInfo +{ + vec4 nearFar; + vec4 fog; + vec4 fogColor; + int renderTOPCameraIndex; +}; +layout(std140) uniform TDCameraInfoBlock { + TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; +}; +struct TDGeneral +{ + vec4 ambientColor; + vec4 nearFar; + vec4 viewport; + vec4 viewportRes; + vec4 fog; + vec4 fogColor; +}; +layout(std140) uniform TDGeneralBlock { + TDGeneral uTDGeneral; +}; + +layout(binding = 15) uniform samplerBuffer sTDInstanceT; +layout(binding = 16) uniform samplerBuffer sTDInstanceTexCoord; +layout(binding = 17) uniform samplerBuffer sTDInstanceColor; +vec4 TDDither(vec4 color); +vec3 TDHSVToRGB(vec3 c); +vec3 TDRGBToHSV(vec3 c); +#define PI 3.14159265 + +vec4 TDColor(vec4 color) { return color; } +void TDCheckOrderIndTrans() { +} +void TDCheckDiscard() { + TDCheckOrderIndTrans(); +} +vec4 TDDither(vec4 color) +{ + float d = texture(sTDNoiseMap, + gl_FragCoord.xy / 256.0).r; + d -= 0.5; + d /= 256.0; + return vec4(color.rgb + d, color.a); +} +bool TDFrontFacing(vec3 pos, vec3 normal) +{ + return gl_FrontFacing; +} +float TDAttenuateLight(int index, float lightDist) +{ + return 1.0; +} +void TDAlphaTest(float alpha) { +} +float TDHardShadow(int lightIndex, vec3 worldSpacePos) +{ return 0.0; } +float TDSoftShadow(int lightIndex, vec3 worldSpacePos, int samples, int steps) +{ return 0.0; } +float TDSoftShadow(int lightIndex, vec3 worldSpacePos) +{ return 0.0; } +float TDShadow(int lightIndex, vec3 worldSpacePos) +{ return 0.0; } +vec3 TDEquirectangularToCubeMap(vec2 mapCoord); +vec2 TDCubeMapToEquirectangular(vec3 envMapCoord); +vec2 TDCubeMapToEquirectangular(vec3 envMapCoord, out float mipMapBias); +vec2 TDTexGenSphere(vec3 envMapCoord); +float iTDRadicalInverse_VdC(uint bits) +{ + bits = (bits << 16u) | (bits >> 16u); + bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u); + bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u); + bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u); + bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u); + return float(bits) * 2.3283064365386963e-10; // / 0x100000000 +} +vec2 iTDHammersley(uint i, uint N) +{ + return vec2(float(i) / float(N), iTDRadicalInverse_VdC(i)); +} +vec3 iTDImportanceSampleGGX(vec2 Xi, float roughness2, vec3 N) +{ + float a = roughness2; + float phi = 2 * 3.14159265 * Xi.x; + float cosTheta = sqrt( (1 - Xi.y) / (1 + (a*a - 1) * Xi.y) ); + float sinTheta = sqrt( 1 - cosTheta * cosTheta ); + + vec3 H; + H.x = sinTheta * cos(phi); + H.y = sinTheta * sin(phi); + H.z = cosTheta; + + vec3 upVector = abs(N.z) < 0.999 ? vec3(0, 0, 1) : vec3(1, 0, 0); + vec3 tangentX = normalize(cross(upVector, N)); + vec3 tangentY = cross(N, tangentX); + + // Tangent to world space + vec3 worldResult = tangentX * H.x + tangentY * H.y + N * H.z; + return worldResult; +} +float iTDDistributionGGX(vec3 normal, vec3 half_vector, float roughness2) +{ + const float Epsilon = 0.000001; + + float NdotH = clamp(dot(normal, half_vector), Epsilon, 1.0); + + float alpha2 = roughness2 * roughness2; + + float denom = NdotH * NdotH * (alpha2 - 1.0) + 1.0; + denom = max(1e-8, denom); + return alpha2 / (PI * denom * denom); +} +vec3 iTDCalcF(vec3 F0, float VdotH) { + return F0 + (vec3(1.0) - F0) * pow(2.0, (-5.55473*VdotH - 6.98316) * VdotH); +} + +float iTDCalcG(float NdotL, float NdotV, float k) { + float Gl = 1.0 / (NdotL * (1.0 - k) + k); + float Gv = 1.0 / (NdotV * (1.0 - k) + k); + return Gl * Gv; +} +// 0 - All options +TDPBRResult TDLightingPBR(int index,vec3 diffuseColor,vec3 specularColor,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float roughness) +{ + TDPBRResult res; + return res; +} +// 0 - All options +void TDLightingPBR(inout vec3 diffuseContrib,inout vec3 specularContrib,inout float shadowStrengthOut,int index,vec3 diffuseColor,vec3 specularColor,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float roughness) +{ + TDPBRResult res = TDLightingPBR(index,diffuseColor,specularColor,worldSpacePos,normal,shadowStrength,shadowColor,camVector,roughness); diffuseContrib = res.diffuse; + specularContrib = res.specular; + shadowStrengthOut = res.shadowStrength; +} +// 0 - All options +void TDLightingPBR(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 diffuseColor,vec3 specularColor,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float roughness) +{ + TDPBRResult res = TDLightingPBR(index,diffuseColor,specularColor,worldSpacePos,normal,shadowStrength,shadowColor,camVector,roughness); diffuseContrib = res.diffuse; + specularContrib = res.specular; +} +// 0 - All options +TDPBRResult TDEnvLightingPBR(int index,vec3 diffuseColor,vec3 specularColor,vec3 normal,vec3 camVector,float roughness,float ambientOcclusion) +{ + TDPBRResult res; + return res; +} +// 0 - All options +void TDEnvLightingPBR(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 diffuseColor,vec3 specularColor,vec3 normal,vec3 camVector,float roughness,float ambientOcclusion) +{ + TDPBRResult res = TDEnvLightingPBR(index, diffuseColor, specularColor, normal, camVector, roughness, ambientOcclusion); + diffuseContrib = res.diffuse; + specularContrib = res.specular; +} +// 0 - All options +TDPhongResult TDLighting(int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess,float shininess2) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + return res; +} +// 0 - Legacy +void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,inout vec3 specularContrib2,inout float shadowStrengthOut,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess,float shininess2) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; + specularContrib = res.specular; + specularContrib2 = res.specular2; + shadowStrengthOut = res.shadowStrength; +} +// 0 - Legacy +void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,inout vec3 specularContrib2,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess,float shininess2) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; + specularContrib = res.specular; + specularContrib2 = res.specular2; +} +// 1 - Without specular2 +void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; + specularContrib = res.specular; +} +// 2 - Without shadows +void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,inout vec3 specularContrib2,int index,vec3 worldSpacePos,vec3 normal,vec3 camVector,float shininess,float shininess2) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; + specularContrib = res.specular; + specularContrib2 = res.specular2; +} +// 3 - diffuse and specular only +void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 worldSpacePos,vec3 normal,vec3 camVector,float shininess) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; + specularContrib = res.specular; +} +// 4 - Diffuse only +void TDLighting(inout vec3 diffuseContrib,int index, vec3 worldSpacePos, vec3 normal) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; +} +// 5 - diffuse only with shadows +void TDLighting(inout vec3 diffuseContrib,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; +} +vec4 TDProjMap(int index, vec3 worldSpacePos, vec4 defaultColor) { + switch (index) + { + default: return defaultColor; + } +} +vec4 TDFog(vec4 color, vec3 lightingSpacePosition, int cameraIndex) { + switch (cameraIndex) { + default: + case 0: + { + return color; + } + } +} +vec4 TDFog(vec4 color, vec3 lightingSpacePosition) +{ + return TDFog(color, lightingSpacePosition, 0); +} +vec3 TDInstanceTexCoord(int index, vec3 t) { + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceTexCoord, coord); + v[0] = t.s; + v[1] = t.t; + v[2] = samp[0]; + t.stp = v.stp; + return t; +} +bool TDInstanceActive(int index) { + index -= uTDInstanceIDOffset; + float v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v = samp[0]; + return v != 0.0; +} +vec3 iTDInstanceTranslate(int index, out bool instanceActive) { + int origIndex = index; + index -= uTDInstanceIDOffset; + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v[0] = samp[1]; + v[1] = samp[2]; + v[2] = samp[3]; + instanceActive = samp[0] != 0.0; + return v; +} +vec3 TDInstanceTranslate(int index) { + index -= uTDInstanceIDOffset; + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v[0] = samp[1]; + v[1] = samp[2]; + v[2] = samp[3]; + return v; +} +mat3 TDInstanceRotateMat(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 0.0); + mat3 m = mat3(1.0); +{ + mat3 r; +} + return m; +} +vec3 TDInstanceScale(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(1.0, 1.0, 1.0); + return v; +} +vec3 TDInstancePivot(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 0.0); + return v; +} +vec3 TDInstanceRotTo(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 1.0); + return v; +} +vec3 TDInstanceRotUp(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 1.0, 0.0); + return v; +} +mat4 TDInstanceMat(int id) { + bool instanceActive = true; + vec3 t = iTDInstanceTranslate(id, instanceActive); + if (!instanceActive) + { + return mat4(0.0); + } + mat4 m = mat4(1.0); + { + vec3 tt = t; + m[3][0] += m[0][0]*tt.x; + m[3][1] += m[0][1]*tt.x; + m[3][2] += m[0][2]*tt.x; + m[3][3] += m[0][3]*tt.x; + m[3][0] += m[1][0]*tt.y; + m[3][1] += m[1][1]*tt.y; + m[3][2] += m[1][2]*tt.y; + m[3][3] += m[1][3]*tt.y; + m[3][0] += m[2][0]*tt.z; + m[3][1] += m[2][1]*tt.z; + m[3][2] += m[2][2]*tt.z; + m[3][3] += m[2][3]*tt.z; + } + return m; +} +mat3 TDInstanceMat3(int id) { + mat3 m = mat3(1.0); + return m; +} +mat3 TDInstanceMat3ForNorm(int id) { + mat3 m = TDInstanceMat3(id); + return m; +} +vec4 TDInstanceColor(int index, vec4 curColor) { + index -= uTDInstanceIDOffset; + vec4 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceColor, coord); + v[0] = samp[0]; + v[1] = samp[1]; + v[2] = samp[2]; + v[3] = 1.0; + curColor[0] = v[0]; +; + curColor[1] = v[1]; +; + curColor[2] = v[2]; +; + return curColor; +} diff --git a/Test/vk.relaxed.stagelink.0.1.vert b/Test/vk.relaxed.stagelink.0.1.vert new file mode 100644 index 0000000000..3c5de986eb --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.1.vert @@ -0,0 +1,242 @@ +#version 460 +layout(location = 0) in vec3 P; +layout(location = 1) in vec3 N; +layout(location = 2) in vec4 Cd; +layout(location = 3) in vec3 uv[8]; +uniform int uTDInstanceIDOffset; +uniform int uTDNumInstances; +uniform float uTDAlphaTestVal; +#define TD_NUM_COLOR_BUFFERS 1 +#define TD_NUM_LIGHTS 0 +#define TD_NUM_SHADOWED_LIGHTS 0 +#define TD_NUM_ENV_LIGHTS 0 +#define TD_LIGHTS_ARRAY_SIZE 1 +#define TD_ENV_LIGHTS_ARRAY_SIZE 1 +#define TD_NUM_CAMERAS 1 +struct TDLight +{ + vec4 position; + vec3 direction; + vec3 diffuse; + vec4 nearFar; + vec4 lightSize; + vec4 misc; + vec4 coneLookupScaleBias; + vec4 attenScaleBiasRoll; + mat4 shadowMapMatrix; + mat4 shadowMapCamMatrix; + vec4 shadowMapRes; + mat4 projMapMatrix; +}; +struct TDEnvLight +{ + vec3 color; + mat3 rotate; +}; +layout(std140) uniform TDLightBlock +{ + TDLight uTDLights[TD_LIGHTS_ARRAY_SIZE]; +}; +layout(std140) uniform TDEnvLightBlock +{ + TDEnvLight uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE]; +}; +layout(std430) readonly restrict buffer TDEnvLightBuffer +{ + vec3 shCoeffs[9]; +} uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE]; +struct TDPhongResult +{ + vec3 diffuse; + vec3 specular; + vec3 specular2; + float shadowStrength; +}; +struct TDPBRResult +{ + vec3 diffuse; + vec3 specular; + float shadowStrength; +}; +struct TDMatrix +{ + mat4 world; + mat4 worldInverse; + mat4 worldCam; + mat4 worldCamInverse; + mat4 cam; + mat4 camInverse; + mat4 camProj; + mat4 camProjInverse; + mat4 proj; + mat4 projInverse; + mat4 worldCamProj; + mat4 worldCamProjInverse; + mat4 quadReproject; + mat3 worldForNormals; + mat3 camForNormals; + mat3 worldCamForNormals; +}; +layout(std140) uniform TDMatricesBlock { + TDMatrix uTDMats[TD_NUM_CAMERAS]; +}; +struct TDCameraInfo +{ + vec4 nearFar; + vec4 fog; + vec4 fogColor; + int renderTOPCameraIndex; +}; +layout(std140) uniform TDCameraInfoBlock { + TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; +}; +struct TDGeneral +{ + vec4 ambientColor; + vec4 nearFar; + vec4 viewport; + vec4 viewportRes; + vec4 fog; + vec4 fogColor; +}; +layout(std140) uniform TDGeneralBlock { + TDGeneral uTDGeneral; +}; +layout (rgba8) uniform image2D mTD2DImageOutputs[1]; +layout (rgba8) uniform image2DArray mTD2DArrayImageOutputs[1]; +layout (rgba8) uniform image3D mTD3DImageOutputs[1]; +layout (rgba8) uniform imageCube mTDCubeImageOutputs[1]; + +mat4 TDInstanceMat(int instanceID); +mat3 TDInstanceMat3(int instanceID); +vec3 TDInstanceTranslate(int instanceID); +bool TDInstanceActive(int instanceID); +mat3 TDInstanceRotateMat(int instanceID); +vec3 TDInstanceScale(int instanceID); +vec3 TDInstanceTexCoord(int instanceID, vec3 t); +vec4 TDInstanceColor(int instanceID, vec4 curColor); +vec4 TDInstanceCustomAttrib0(int instanceID); +vec4 TDInstanceCustomAttrib1(int instanceID); +vec4 TDInstanceCustomAttrib2(int instanceID); +vec4 TDInstanceCustomAttrib3(int instanceID); +vec4 TDInstanceCustomAttrib4(int instanceID); +vec4 TDInstanceCustomAttrib5(int instanceID); +vec4 TDInstanceCustomAttrib6(int instanceID); +vec4 TDInstanceCustomAttrib7(int instanceID); +vec4 TDInstanceCustomAttrib8(int instanceID); +vec4 TDInstanceCustomAttrib9(int instanceID); +vec4 TDInstanceCustomAttrib10(int instanceID); +vec4 TDInstanceCustomAttrib11(int instanceID); +uint TDInstanceTextureIndex(int instanceIndex); +vec4 TDInstanceTexture(uint texIndex, vec3 uv); +vec4 TDInstanceTexture(uint texIndex, vec2 uv); + +vec4 TDDeform(vec4 pos); +vec4 TDDeform(vec3 pos); +vec4 TDDeform(int instanceID, vec3 pos); +vec3 TDDeformVec(vec3 v); +vec3 TDDeformVec(int instanceID, vec3 v); +vec3 TDDeformNorm(vec3 v); +vec3 TDDeformNorm(int instanceID, vec3 v); +vec4 TDSkinnedDeform(vec4 pos); +vec3 TDSkinnedDeformVec(vec3 vec); +vec3 TDSkinnedDeformNorm(vec3 vec); +vec4 TDInstanceDeform(vec4 pos); +vec3 TDInstanceDeformVec(vec3 vec); +vec3 TDInstanceDeformNorm(vec3 vec); +vec4 TDInstanceDeform(int instanceID, vec4 pos); +vec3 TDInstanceDeformVec(int instanceID, vec3 vec); +vec3 TDInstanceDeformNorm(int instanceID, vec3 vec); +vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm); +mat4 TDBoneMat(int boneIndex); +mat4 TDInstanceMat(); +mat3 TDInstanceMat3(); +vec3 TDInstanceTranslate(); +bool TDInstanceActive(); +mat3 TDInstanceRotateMat(); +vec3 TDInstanceScale(); +vec3 TDInstanceTexCoord(vec3 t); +vec4 TDInstanceColor(vec4 curColor); +vec4 TDPointColor(); +#ifdef TD_PICKING_ACTIVE +out TDPickVertex { + vec3 sopSpacePosition; + vec3 camSpacePosition; + vec3 worldSpacePosition; + vec3 sopSpaceNormal; + vec3 camSpaceNormal; + vec3 worldSpaceNormal; + vec3 uv[1]; + flat int pickId; + flat int instanceId; + vec4 color; +} oTDPickVert; +#define vTDPickVert oTDPickVert +#endif +vec4 iTDCamToProj(vec4 v, vec3 uv, int cameraIndex, bool applyPickMod) +{ + if (!TDInstanceActive()) + return vec4(2, 2, 2, 0); + v = uTDMats[0].proj * v; + return v; +} +vec4 iTDWorldToProj(vec4 v, vec3 uv, int cameraIndex, bool applyPickMod) { + if (!TDInstanceActive()) + return vec4(2, 2, 2, 0); + v = uTDMats[0].camProj * v; + return v; +} +vec4 TDDeform(vec4 pos); +vec4 TDDeform(vec3 pos); +vec4 TDInstanceColor(vec4 curColor); +vec3 TDInstanceTexCoord(vec3 t); +int TDInstanceID() { + return gl_InstanceID + uTDInstanceIDOffset; +} +int TDCameraIndex() { + return 0; +} +vec3 TDUVUnwrapCoord() { + return uv[0]; +} +#ifdef TD_PICKING_ACTIVE +uniform int uTDPickId; +#endif +int TDPickID() { +#ifdef TD_PICKING_ACTIVE + return uTDPickId; +#else + return 0; +#endif +} +float iTDConvertPickId(int id) { + id |= 1073741824; + return intBitsToFloat(id); +} + + void TDWritePickingValues() { +#ifdef TD_PICKING_ACTIVE + vec4 worldPos = TDDeform(P); + vec4 camPos = uTDMats[TDCameraIndex()].cam * worldPos; + oTDPickVert.pickId = TDPickID(); +#endif +} +vec4 TDWorldToProj(vec4 v, vec3 uv) +{ + return iTDWorldToProj(v, uv, TDCameraIndex(), true); +} +vec4 TDWorldToProj(vec3 v, vec3 uv) +{ + return TDWorldToProj(vec4(v, 1.0), uv); +} +vec4 TDWorldToProj(vec4 v) +{ + return TDWorldToProj(v, vec3(0.0)); +} +vec4 TDWorldToProj(vec3 v) +{ + return TDWorldToProj(vec4(v, 1.0)); +} +vec4 TDPointColor() { + return Cd; +} diff --git a/Test/vk.relaxed.stagelink.0.2.frag b/Test/vk.relaxed.stagelink.0.2.frag new file mode 100644 index 0000000000..27bd540db8 --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.2.frag @@ -0,0 +1,9 @@ +#version 460 +vec4 TDOutputSwizzle(vec4 c) +{ + return c.rgba; +} +uvec4 TDOutputSwizzle(uvec4 c) +{ + return c.rgba; +} diff --git a/Test/vk.relaxed.stagelink.0.2.vert b/Test/vk.relaxed.stagelink.0.2.vert new file mode 100644 index 0000000000..69c0b21b1a --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.2.vert @@ -0,0 +1,320 @@ +#version 460 +uniform int uTDInstanceIDOffset; +uniform int uTDNumInstances; +uniform float uTDAlphaTestVal; +#define TD_NUM_COLOR_BUFFERS 1 +#define TD_NUM_LIGHTS 0 +#define TD_NUM_SHADOWED_LIGHTS 0 +#define TD_NUM_ENV_LIGHTS 0 +#define TD_LIGHTS_ARRAY_SIZE 1 +#define TD_ENV_LIGHTS_ARRAY_SIZE 1 +#define TD_NUM_CAMERAS 1 +struct TDLight +{ + vec4 position; + vec3 direction; + vec3 diffuse; + vec4 nearFar; + vec4 lightSize; + vec4 misc; + vec4 coneLookupScaleBias; + vec4 attenScaleBiasRoll; + mat4 shadowMapMatrix; + mat4 shadowMapCamMatrix; + vec4 shadowMapRes; + mat4 projMapMatrix; +}; +struct TDEnvLight +{ + vec3 color; + mat3 rotate; +}; +layout(std140) uniform TDLightBlock +{ + TDLight uTDLights[TD_LIGHTS_ARRAY_SIZE]; +}; +layout(std140) uniform TDEnvLightBlock +{ + TDEnvLight uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE]; +}; +layout(std430) readonly restrict buffer TDEnvLightBuffer +{ + vec3 shCoeffs[9]; +} uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE]; +struct TDPhongResult +{ + vec3 diffuse; + vec3 specular; + vec3 specular2; + float shadowStrength; +}; +struct TDPBRResult +{ + vec3 diffuse; + vec3 specular; + float shadowStrength; +}; +struct TDMatrix +{ + mat4 world; + mat4 worldInverse; + mat4 worldCam; + mat4 worldCamInverse; + mat4 cam; + mat4 camInverse; + mat4 camProj; + mat4 camProjInverse; + mat4 proj; + mat4 projInverse; + mat4 worldCamProj; + mat4 worldCamProjInverse; + mat4 quadReproject; + mat3 worldForNormals; + mat3 camForNormals; + mat3 worldCamForNormals; +}; +layout(std140) uniform TDMatricesBlock { + TDMatrix uTDMats[TD_NUM_CAMERAS]; +}; +struct TDCameraInfo +{ + vec4 nearFar; + vec4 fog; + vec4 fogColor; + int renderTOPCameraIndex; +}; +layout(std140) uniform TDCameraInfoBlock { + TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; +}; +struct TDGeneral +{ + vec4 ambientColor; + vec4 nearFar; + vec4 viewport; + vec4 viewportRes; + vec4 fog; + vec4 fogColor; +}; +layout(std140) uniform TDGeneralBlock { + TDGeneral uTDGeneral; +}; + +layout(binding = 15) uniform samplerBuffer sTDInstanceT; +layout(binding = 16) uniform samplerBuffer sTDInstanceTexCoord; +layout(binding = 17) uniform samplerBuffer sTDInstanceColor; +#define TD_NUM_BONES 0 +vec4 TDWorldToProj(vec4 v); +vec4 TDWorldToProj(vec3 v); +vec4 TDWorldToProj(vec4 v, vec3 uv); +vec4 TDWorldToProj(vec3 v, vec3 uv); +int TDPickID(); +int TDInstanceID(); +int TDCameraIndex(); +vec3 TDUVUnwrapCoord(); +vec3 TDInstanceTexCoord(int index, vec3 t) { + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceTexCoord, coord); + v[0] = t.s; + v[1] = t.t; + v[2] = samp[0]; + t.stp = v.stp; + return t; +} +bool TDInstanceActive(int index) { + index -= uTDInstanceIDOffset; + float v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v = samp[0]; + return v != 0.0; +} +vec3 iTDInstanceTranslate(int index, out bool instanceActive) { + int origIndex = index; + index -= uTDInstanceIDOffset; + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v[0] = samp[1]; + v[1] = samp[2]; + v[2] = samp[3]; + instanceActive = samp[0] != 0.0; + return v; +} +vec3 TDInstanceTranslate(int index) { + index -= uTDInstanceIDOffset; + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v[0] = samp[1]; + v[1] = samp[2]; + v[2] = samp[3]; + return v; +} +mat3 TDInstanceRotateMat(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 0.0); + mat3 m = mat3(1.0); +{ + mat3 r; +} + return m; +} +vec3 TDInstanceScale(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(1.0, 1.0, 1.0); + return v; +} +vec3 TDInstancePivot(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 0.0); + return v; +} +vec3 TDInstanceRotTo(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 1.0); + return v; +} +vec3 TDInstanceRotUp(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 1.0, 0.0); + return v; +} +mat4 TDInstanceMat(int id) { + bool instanceActive = true; + vec3 t = iTDInstanceTranslate(id, instanceActive); + if (!instanceActive) + { + return mat4(0.0); + } + mat4 m = mat4(1.0); + { + vec3 tt = t; + m[3][0] += m[0][0]*tt.x; + m[3][1] += m[0][1]*tt.x; + m[3][2] += m[0][2]*tt.x; + m[3][3] += m[0][3]*tt.x; + m[3][0] += m[1][0]*tt.y; + m[3][1] += m[1][1]*tt.y; + m[3][2] += m[1][2]*tt.y; + m[3][3] += m[1][3]*tt.y; + m[3][0] += m[2][0]*tt.z; + m[3][1] += m[2][1]*tt.z; + m[3][2] += m[2][2]*tt.z; + m[3][3] += m[2][3]*tt.z; + } + return m; +} +mat3 TDInstanceMat3(int id) { + mat3 m = mat3(1.0); + return m; +} +mat3 TDInstanceMat3ForNorm(int id) { + mat3 m = TDInstanceMat3(id); + return m; +} +vec4 TDInstanceColor(int index, vec4 curColor) { + index -= uTDInstanceIDOffset; + vec4 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceColor, coord); + v[0] = samp[0]; + v[1] = samp[1]; + v[2] = samp[2]; + v[3] = 1.0; + curColor[0] = v[0]; +; + curColor[1] = v[1]; +; + curColor[2] = v[2]; +; + return curColor; +} +vec4 TDInstanceDeform(int id, vec4 pos) { + pos = TDInstanceMat(id) * pos; + return uTDMats[TDCameraIndex()].world * pos; +} + +vec3 TDInstanceDeformVec(int id, vec3 vec) +{ + mat3 m = TDInstanceMat3(id); + return mat3(uTDMats[TDCameraIndex()].world) * (m * vec); +} +vec3 TDInstanceDeformNorm(int id, vec3 vec) +{ + mat3 m = TDInstanceMat3ForNorm(id); + return mat3(uTDMats[TDCameraIndex()].worldForNormals) * (m * vec); +} +vec4 TDInstanceDeform(vec4 pos) { + return TDInstanceDeform(TDInstanceID(), pos); +} +vec3 TDInstanceDeformVec(vec3 vec) { + return TDInstanceDeformVec(TDInstanceID(), vec); +} +vec3 TDInstanceDeformNorm(vec3 vec) { + return TDInstanceDeformNorm(TDInstanceID(), vec); +} +bool TDInstanceActive() { return TDInstanceActive(TDInstanceID()); } +vec3 TDInstanceTranslate() { return TDInstanceTranslate(TDInstanceID()); } +mat3 TDInstanceRotateMat() { return TDInstanceRotateMat(TDInstanceID()); } +vec3 TDInstanceScale() { return TDInstanceScale(TDInstanceID()); } +mat4 TDInstanceMat() { return TDInstanceMat(TDInstanceID()); + } +mat3 TDInstanceMat3() { return TDInstanceMat3(TDInstanceID()); +} +vec3 TDInstanceTexCoord(vec3 t) { + return TDInstanceTexCoord(TDInstanceID(), t); +} +vec4 TDInstanceColor(vec4 curColor) { + return TDInstanceColor(TDInstanceID(), curColor); +} +vec4 TDSkinnedDeform(vec4 pos) { return pos; } + +vec3 TDSkinnedDeformVec(vec3 vec) { return vec; } + +vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm) +{ return oldTangent.xyz; } +mat4 TDBoneMat(int index) { + return mat4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1); +} +vec4 TDDeform(vec4 pos) { + pos = TDSkinnedDeform(pos); + pos = TDInstanceDeform(pos); + return pos; +} + +vec4 TDDeform(int instanceID, vec3 p) { + vec4 pos = vec4(p, 1.0); + pos = TDSkinnedDeform(pos); + pos = TDInstanceDeform(instanceID, pos); + return pos; +} + +vec4 TDDeform(vec3 pos) { + return TDDeform(TDInstanceID(), pos); +} + +vec3 TDDeformVec(int instanceID, vec3 vec) { + vec = TDSkinnedDeformVec(vec); + vec = TDInstanceDeformVec(instanceID, vec); + return vec; +} + +vec3 TDDeformVec(vec3 vec) { + return TDDeformVec(TDInstanceID(), vec); +} + +vec3 TDDeformNorm(int instanceID, vec3 vec) { + vec = TDSkinnedDeformVec(vec); + vec = TDInstanceDeformNorm(instanceID, vec); + return vec; +} + +vec3 TDDeformNorm(vec3 vec) { + return TDDeformNorm(TDInstanceID(), vec); +} + +vec3 TDSkinnedDeformNorm(vec3 vec) { + vec = TDSkinnedDeformVec(vec); + return vec; +} diff --git a/Test/vulkan.ast.vert b/Test/vulkan.ast.vert index b9e3e28b88..5817a23684 100644 --- a/Test/vulkan.ast.vert +++ b/Test/vulkan.ast.vert @@ -38,5 +38,5 @@ void main() ivec2[2](ivec2(sci2, sci2), ivec2(sci2, sci2)); // not a spec-const vec2(scf1, scf1); // spec-const - vec2[2](vec2(scf1, scf1), vec2(scf1, scf1)); // not a spec-const + vec2[2](vec2(scf1, scf1), vec2(scf1, scf1)); // spec-const } diff --git a/Test/vulkan.frag b/Test/vulkan.frag index 25bfefeccb..6cf7ccfad3 100644 --- a/Test/vulkan.frag +++ b/Test/vulkan.frag @@ -46,6 +46,9 @@ layout(push_constant) uniform; // ERROR, needs an object layout(binding=2, push_constant) uniform pcbnd1 { // ERROR, can't have binding int a; } pcbnd1inst; +layout(push_constant) uniform pcbnd2 { // ERROR, can't be array + float a; +} pcbnd2inst[2]; layout(std430, push_constant) uniform pcb1 { int a; } pcb1inst; layout(push_constant) uniform pcb2 { int a; diff --git a/Test/web.runtests b/Test/web.runtests index 3283dd8331..584b6c5116 100755 --- a/Test/web.runtests +++ b/Test/web.runtests @@ -3,7 +3,7 @@ TESTLIST=web.testlist TARGETDIR=localResults BASEDIR=baseResults -EXE=../build/install/bin/glslangValidator.exe +EXE=../build/install/bin/glslang.exe HASERROR=0 mkdir -p $TARGETDIR diff --git a/WORKSPACE b/WORKSPACE deleted file mode 100644 index 488546c7cd..0000000000 --- a/WORKSPACE +++ /dev/null @@ -1,27 +0,0 @@ -workspace(name = "org_khronos_glslang") -load( - "@bazel_tools//tools/build_defs/repo:http.bzl", - "http_archive", -) - -http_archive( - name = "com_google_googletest", - sha256 = "94c634d499558a76fa649edb13721dce6e98fb1e7018dfaeba3cd7a083945e91", - strip_prefix = "googletest-release-1.10.0", - urls = ["https://github.com/google/googletest/archive/release-1.10.0.zip"], # 3-Oct-2019 -) - -http_archive( - name = "com_googlesource_code_re2", - sha256 = "b885bb965ab4b6cf8718bbb8154d8f6474cd00331481b6d3e390babb3532263e", - strip_prefix = "re2-e860767c86e577b87deadf24cc4567ea83c4f162/", - urls = ["https://github.com/google/re2/archive/e860767c86e577b87deadf24cc4567ea83c4f162.zip"], -) - -http_archive( - name = "com_google_effcee", - build_file = "BUILD.effcee.bazel", - sha256 = "b0c21a01995fdf9792510566d78d5e7fe6f83cb4ba986eba691f4926f127cb34", - strip_prefix = "effcee-8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b/", - urls = ["https://github.com/google/effcee/archive/8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b.zip"], -) diff --git a/build_info.h.tmpl b/build_info.h.tmpl index 5b5e9e62c7..60cb5bbeae 100644 --- a/build_info.h.tmpl +++ b/build_info.h.tmpl @@ -40,23 +40,23 @@ #define GLSLANG_VERSION_FLAVOR "@flavor@" #define GLSLANG_VERSION_GREATER_THAN(major, minor, patch) \ - (((major) > GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \ - (((minor) > GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \ - ((patch) > GLSLANG_VERSION_PATCH))))) + ((GLSLANG_VERSION_MAJOR) > (major) || ((major) == GLSLANG_VERSION_MAJOR && \ + ((GLSLANG_VERSION_MINOR) > (minor) || ((minor) == GLSLANG_VERSION_MINOR && \ + (GLSLANG_VERSION_PATCH) > (patch))))) #define GLSLANG_VERSION_GREATER_OR_EQUAL_TO(major, minor, patch) \ - (((major) > GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \ - (((minor) > GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \ - ((patch) >= GLSLANG_VERSION_PATCH))))) + ((GLSLANG_VERSION_MAJOR) > (major) || ((major) == GLSLANG_VERSION_MAJOR && \ + ((GLSLANG_VERSION_MINOR) > (minor) || ((minor) == GLSLANG_VERSION_MINOR && \ + (GLSLANG_VERSION_PATCH >= (patch)))))) #define GLSLANG_VERSION_LESS_THAN(major, minor, patch) \ - (((major) < GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \ - (((minor) < GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \ - ((patch) < GLSLANG_VERSION_PATCH))))) + ((GLSLANG_VERSION_MAJOR) < (major) || ((major) == GLSLANG_VERSION_MAJOR && \ + ((GLSLANG_VERSION_MINOR) < (minor) || ((minor) == GLSLANG_VERSION_MINOR && \ + (GLSLANG_VERSION_PATCH) < (patch))))) #define GLSLANG_VERSION_LESS_OR_EQUAL_TO(major, minor, patch) \ - (((major) < GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \ - (((minor) < GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \ - ((patch) <= GLSLANG_VERSION_PATCH))))) + ((GLSLANG_VERSION_MAJOR) < (major) || ((major) == GLSLANG_VERSION_MAJOR && \ + ((GLSLANG_VERSION_MINOR) < (minor) || ((minor) == GLSLANG_VERSION_MINOR && \ + (GLSLANG_VERSION_PATCH <= (patch)))))) #endif // GLSLANG_BUILD_INFO diff --git a/build_info.py b/build_info.py index 7c1998f6e0..06d613b0d9 100755 --- a/build_info.py +++ b/build_info.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright (c) 2020 Google Inc. # diff --git a/gen_extension_headers.py b/gen_extension_headers.py old mode 100644 new mode 100755 index a787f9a9cb..0638720a07 --- 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. # @@ -57,7 +57,7 @@ def generate_main(glsl_files, output_header_file): contents += '\tfor (int i = 0; i < n; i++) {\n' for symbol_name in symbol_name_list: - contents += '\t\tif (strstr(shaders[i], "%s") != NULL) {\n' % (symbol_name) + contents += '\t\tif (strstr(shaders[i], "%s") != nullptr) {\n' % (symbol_name) contents += '\t\t shaderString.append(%s_GLSL);\n' % (symbol_name) contents += '\t\t}\n' @@ -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 da1cd145d1..465b3ee1da 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -33,11 +33,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "glslang/Include/glslang_c_interface.h" #include "StandAlone/DirStackFileIncluder.h" -#include "StandAlone/ResourceLimits.h" +#include "glslang/Public/ResourceLimits.h" +#include "glslang/Public/ShaderLang.h" #include "glslang/Include/ShHandle.h" +#include "glslang/Include/BaseTypes.h" #include "glslang/Include/ResourceLimits.h" +#include "glslang/Include/Types.h" +#include "glslang/MachineIndependent/iomapper.h" #include "glslang/MachineIndependent/Versions.h" +#include "glslang/MachineIndependent/localintermediate.h" static_assert(int(GLSLANG_STAGE_COUNT) == EShLangCount, ""); static_assert(int(GLSLANG_STAGE_MASK_COUNT) == EShLanguageMaskCount, ""); @@ -53,10 +58,12 @@ static_assert(int(GLSLANG_REFLECTION_COUNT) == EShReflectionCount, ""); static_assert(int(GLSLANG_PROFILE_COUNT) == EProfileCount, ""); static_assert(sizeof(glslang_limits_t) == sizeof(TLimits), ""); static_assert(sizeof(glslang_resource_t) == sizeof(TBuiltInResource), ""); +static_assert(sizeof(glslang_version_t) == sizeof(glslang::Version), ""); typedef struct glslang_shader_s { glslang::TShader* shader; std::string preprocessedGLSL; + std::vector baseResourceSetBinding; } glslang_shader_t; typedef struct glslang_program_s { @@ -79,25 +86,6 @@ typedef struct glslang_program_s { (CallbackIncluder::callbacks::free_include_result) */ class CallbackIncluder : public glslang::TShader::Includer { -public: - /* Wrapper of IncludeResult which stores a glsl_include_result object internally */ - class CallbackIncludeResult : public glslang::TShader::Includer::IncludeResult { - public: - CallbackIncludeResult(const std::string& headerName, const char* const headerData, const size_t headerLength, - void* userData, glsl_include_result_t* includeResult) - : glslang::TShader::Includer::IncludeResult(headerName, headerData, headerLength, userData), - includeResult(includeResult) - { - } - - virtual ~CallbackIncludeResult() {} - - protected: - friend class CallbackIncluder; - - glsl_include_result_t* includeResult; - }; - public: CallbackIncluder(glsl_include_callbacks_t _callbacks, void* _context) : callbacks(_callbacks), context(_context) {} @@ -109,9 +97,7 @@ class CallbackIncluder : public glslang::TShader::Includer { if (this->callbacks.include_system) { glsl_include_result_t* result = this->callbacks.include_system(this->context, headerName, includerName, inclusionDepth); - - return new CallbackIncludeResult(std::string(headerName), result->header_data, result->header_length, - nullptr, result); + return makeIncludeResult(result); } return glslang::TShader::Includer::includeSystem(headerName, includerName, inclusionDepth); @@ -123,9 +109,7 @@ class CallbackIncluder : public glslang::TShader::Includer { if (this->callbacks.include_local) { glsl_include_result_t* result = this->callbacks.include_local(this->context, headerName, includerName, inclusionDepth); - - return new CallbackIncludeResult(std::string(headerName), result->header_data, result->header_length, - nullptr, result); + return makeIncludeResult(result); } return glslang::TShader::Includer::includeLocal(headerName, includerName, inclusionDepth); @@ -138,28 +122,36 @@ class CallbackIncluder : public glslang::TShader::Includer { if (result == nullptr) return; - if (this->callbacks.free_include_result && (result->userData == nullptr)) { - CallbackIncludeResult* innerResult = static_cast(result); - /* use internal free() function */ - this->callbacks.free_include_result(this->context, innerResult->includeResult); - /* ignore internal fields of TShader::Includer::IncludeResult */ - delete result; - return; + if (this->callbacks.free_include_result) { + this->callbacks.free_include_result(this->context, static_cast(result->userData)); } - delete[] static_cast(result->userData); delete result; } private: CallbackIncluder() {} + IncludeResult* makeIncludeResult(glsl_include_result_t* result) { + if (!result) { + return nullptr; + } + + return new glslang::TShader::Includer::IncludeResult( + std::string(result->header_name), result->header_data, result->header_length, result); + } + /* C callback pointers */ glsl_include_callbacks_t callbacks; /* User-defined context */ void* context; }; +GLSLANG_EXPORT void glslang_get_version(glslang_version_t* version) +{ + *reinterpret_cast(version) = glslang::GetVersion(); +} + GLSLANG_EXPORT int glslang_initialize_process() { return static_cast(glslang::InitializeProcess()); } GLSLANG_EXPORT void glslang_finalize_process() { glslang::FinalizeProcess(); } @@ -191,10 +183,10 @@ static EShLanguage c_shader_stage(glslang_stage_t stage) return EShLangMiss; case GLSLANG_STAGE_CALLABLE_NV: return EShLangCallable; - case GLSLANG_STAGE_TASK_NV: - return EShLangTaskNV; - case GLSLANG_STAGE_MESH_NV: - return EShLangMeshNV; + case GLSLANG_STAGE_TASK: + return EShLangTask; + case GLSLANG_STAGE_MESH: + return EShLangMesh; default: break; } @@ -224,6 +216,9 @@ static int c_shader_messages(glslang_messages_t messages) CONVERT_MSG(GLSLANG_MSG_HLSL_LEGALIZATION_BIT, EShMsgHlslLegalization); CONVERT_MSG(GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT, EShMsgHlslDX9Compatible); CONVERT_MSG(GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT, EShMsgBuiltinSymbolTable); + CONVERT_MSG(GLSLANG_MSG_ENHANCED, EShMsgEnhanced); + CONVERT_MSG(GLSLANG_MSG_ABSOLUTE_PATH, EShMsgAbsolutePath); + CONVERT_MSG(GLSLANG_MSG_DISPLAY_ERROR_COLUMN, EShMsgDisplayErrorColumn); return res; #undef CONVERT_MSG } @@ -273,6 +268,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: @@ -348,6 +345,10 @@ GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* in return shader; } +GLSLANG_EXPORT void glslang_shader_set_preamble(glslang_shader_t* shader, const char* s) { + shader->shader->setPreamble(s); +} + 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); @@ -373,7 +374,30 @@ GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int opt if (options & GLSLANG_SHADER_VULKAN_RULES_RELAXED) { shader->shader->setEnvInputVulkanRulesRelaxed(); } +} + +GLSLANG_EXPORT void glslang_shader_set_glsl_version(glslang_shader_t* shader, int version) +{ + shader->shader->setOverrideVersion(version); +} + +GLSLANG_EXPORT void glslang_shader_set_default_uniform_block_set_and_binding(glslang_shader_t* shader, unsigned int set, unsigned int binding) { + shader->shader->setGlobalUniformSet(set); + shader->shader->setGlobalUniformBinding(binding); +} +GLSLANG_EXPORT void glslang_shader_set_default_uniform_block_name(glslang_shader_t* shader, const char *name) { + shader->shader->setGlobalUniformBlockName(name); +} + +GLSLANG_EXPORT void glslang_shader_set_resource_set_binding(glslang_shader_t* shader, const char *const *bindings, unsigned int num_bindings) { + shader->baseResourceSetBinding.clear(); + + for (unsigned int i = 0; i < num_bindings; ++i) { + shader->baseResourceSetBinding.push_back(std::string(bindings[i])); + } + + shader->shader->setResourceSetBinding(shader->baseResourceSetBinding); } GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader) @@ -381,10 +405,18 @@ GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t return shader->preprocessedGLSL.c_str(); } +GLSLANG_EXPORT void glslang_shader_set_preprocessed_code(glslang_shader_t* shader, const char* code) +{ + shader->preprocessedGLSL.assign(code); +} + GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input) { - DirStackFileIncluder Includer; - /* TODO: use custom callbacks if they are available in 'i->callbacks' */ + DirStackFileIncluder dirStackFileIncluder; + CallbackIncluder callbackIncluder(input->callbacks, input->callbacks_ctx); + glslang::TShader::Includer& Includer = (input->callbacks.include_local||input->callbacks.include_system) + ? static_cast(callbackIncluder) + : static_cast(dirStackFileIncluder); return shader->shader->preprocess( reinterpret_cast(input->resource), input->default_version, @@ -449,11 +481,26 @@ GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages return (int)program->program->link((EShMessages)messages); } +GLSLANG_EXPORT void glslang_program_add_source_text(glslang_program_t* program, glslang_stage_t stage, const char* text, size_t len) { + glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); + intermediate->addSourceText(text, len); +} + +GLSLANG_EXPORT void glslang_program_set_source_file(glslang_program_t* program, glslang_stage_t stage, const char* file) { + glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); + intermediate->setSourceFile(file); +} + GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program) { return (int)program->program->mapIO(); } +GLSLANG_EXPORT int glslang_program_map_io_with_resolver_and_mapper(glslang_program_t* program, glslang_resolver_t* resolver, glslang_mapper_t* mapper) +{ + return (int)program->program->mapIO(reinterpret_cast(resolver), reinterpret_cast(mapper)); +} + GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program) { return program->program->getInfoLog(); @@ -463,3 +510,30 @@ GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* { return program->program->getInfoDebugLog(); } + +GLSLANG_EXPORT glslang_mapper_t* glslang_glsl_mapper_create() +{ + return reinterpret_cast(new glslang::TGlslIoMapper()); +} + +GLSLANG_EXPORT void glslang_glsl_mapper_delete(glslang_mapper_t* mapper) +{ + if (!mapper) + return; + + delete reinterpret_cast(mapper); +} + +GLSLANG_EXPORT glslang_resolver_t* glslang_glsl_resolver_create(glslang_program_t* program, glslang_stage_t stage) +{ + glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); + return reinterpret_cast(new glslang::TDefaultGlslIoResolver(reinterpret_cast(*intermediate))); +} + +GLSLANG_EXPORT void glslang_glsl_resolver_delete(glslang_resolver_t* resolver) +{ + if (!resolver) + return; + + delete reinterpret_cast(resolver); +} diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt index d0394c865e..47925d8d58 100644 --- a/glslang/CMakeLists.txt +++ b/glslang/CMakeLists.txt @@ -33,7 +33,7 @@ if(WIN32) add_subdirectory(OSDependent/Windows) -elseif(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia") +elseif(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia" OR ANDROID) add_subdirectory(OSDependent/Unix) else() message("unknown platform") @@ -47,9 +47,12 @@ endif() ################################################################################ # GenericCodeGen ################################################################################ -add_library(GenericCodeGen STATIC +set(GENERICCODEGEN_SOURCES GenericCodeGen/CodeGen.cpp GenericCodeGen/Link.cpp) + +add_library(GenericCodeGen STATIC + stub.cpp) set_property(TARGET GenericCodeGen PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET GenericCodeGen PROPERTY FOLDER glslang) @@ -57,7 +60,6 @@ set_property(TARGET GenericCodeGen PROPERTY FOLDER glslang) # MachineIndependent ################################################################################ set(MACHINEINDEPENDENT_SOURCES - MachineIndependent/glslang.m4 MachineIndependent/glslang.y MachineIndependent/glslang_tab.cpp MachineIndependent/attribute.cpp @@ -131,15 +133,15 @@ if(ENABLE_HLSL) HLSL/hlslParseables.h) endif() -add_library(MachineIndependent STATIC ${MACHINEINDEPENDENT_SOURCES} ${MACHINEINDEPENDENT_HEADERS}) +add_library(MachineIndependent STATIC stub.cpp) set_property(TARGET MachineIndependent PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET MachineIndependent PROPERTY FOLDER glslang) +target_link_libraries(MachineIndependent PRIVATE glslang) -glslang_add_build_info_dependency(MachineIndependent) - -glslang_pch(MachineIndependent MachineIndependent/pch.h) - -target_link_libraries(MachineIndependent PRIVATE OGLCompiler OSDependent GenericCodeGen) +if (NOT MSVC) + # -Wunused-but-set-variable is triggered in code generated by bison that we do not control. Turn this warning off, but only for the generated. + set_source_files_properties(MachineIndependent/glslang_tab.cpp PROPERTIES COMPILE_FLAGS -Wno-unused-but-set-variable) +endif() ################################################################################ # glslang @@ -162,31 +164,77 @@ set(GLSLANG_HEADERS Include/ResourceLimits.h Include/ShHandle.h Include/SpirvIntrinsics.h - Include/Types.h) + Include/Types.h + Include/visibility.h) -add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${GLSLANG_SOURCES} ${GLSLANG_HEADERS}) +add_library(glslang ${LIB_TYPE} ${GLSLANG_SOURCES} ${GLSLANG_HEADERS} ${GENERICCODEGEN_SOURCES} ${GENERICCODEGEN_HEADERS} ${OSDEPENDENT_SOURCES} ${OSDEPENDENT_HEADERS} ${MACHINEINDEPENDENT_SOURCES} ${MACHINEINDEPENDENT_HEADERS} ${SPIRV_SOURCES} ${SPIRV_HEADERS}) +add_library(glslang::glslang ALIAS glslang) set_target_properties(glslang PROPERTIES FOLDER glslang POSITION_INDEPENDENT_CODE ON VERSION "${GLSLANG_VERSION}" SOVERSION "${GLSLANG_VERSION_MAJOR}") -target_link_libraries(glslang PRIVATE OGLCompiler OSDependent MachineIndependent) target_include_directories(glslang PUBLIC $ $) glslang_add_build_info_dependency(glslang) +glslang_pch(glslang MachineIndependent/pch.h) + glslang_only_export_explicit_symbols(glslang) if(WIN32 AND BUILD_SHARED_LIBS) set_target_properties(glslang PROPERTIES PREFIX "") endif() +if(ENABLE_SPIRV) + if(ENABLE_OPT) + target_include_directories(glslang PUBLIC + $) + target_link_libraries(glslang SPIRV-Tools-opt) + endif() +endif() + +# Link pthread +if(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia" OR ANDROID) + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads REQUIRED) + target_link_libraries(glslang Threads::Threads) +endif() + +################################################################################ +# ResourceLimits +################################################################################ +set(RESOURCELIMITS_SOURCES + ResourceLimits/ResourceLimits.cpp + ResourceLimits/resource_limits_c.cpp +) + +set(RESOURCELIMITS_HEADERS + Public/ResourceLimits.h + Public/resource_limits_c.h +) + +add_library(glslang-default-resource-limits ${RESOURCELIMITS_SOURCES} ${RESOURCELIMITS_HEADERS}) +add_library(glslang::glslang-default-resource-limits ALIAS glslang-default-resource-limits) +set_target_properties(glslang-default-resource-limits PROPERTIES + VERSION "${GLSLANG_VERSION}" + SOVERSION "${GLSLANG_VERSION_MAJOR}" + FOLDER glslang + POSITION_INDEPENDENT_CODE ON) + +target_include_directories(glslang-default-resource-limits PUBLIC + $ + $) +glslang_only_export_explicit_symbols(glslang-default-resource-limits) + ################################################################################ # source_groups ################################################################################ if(WIN32) + source_group("OSDependent" REGULAR_EXPRESSION "OSDependent/[^/]*") + source_group("OSDependent\\Windows" REGULAR_EXPRESSION "OSDependent/Windows/*") source_group("Public" REGULAR_EXPRESSION "Public/*") source_group("MachineIndependent" REGULAR_EXPRESSION "MachineIndependent/[^/]*") source_group("Include" REGULAR_EXPRESSION "Include/[^/]*") @@ -194,35 +242,36 @@ if(WIN32) source_group("MachineIndependent\\Preprocessor" REGULAR_EXPRESSION "MachineIndependent/preprocessor/*") source_group("HLSL" REGULAR_EXPRESSION "HLSL/*") source_group("CInterface" REGULAR_EXPRESSION "CInterface/*") + source_group("SPIRV" REGULAR_EXPRESSION "SPIRV/[^/]*") + source_group("SPIRV\\CInterface" REGULAR_EXPRESSION "SPIRV/CInterface/*") endif() ################################################################################ # install ################################################################################ -if(ENABLE_GLSLANG_INSTALL) - if(BUILD_SHARED_LIBS) - install(TARGETS glslang - EXPORT glslangTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - else() - install(TARGETS glslang MachineIndependent GenericCodeGen - EXPORT glslangTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +if(GLSLANG_ENABLE_INSTALL) + install(TARGETS glslang EXPORT glslang-targets) + if(NOT BUILD_SHARED_LIBS) + install(TARGETS MachineIndependent EXPORT glslang-targets) + install(TARGETS GenericCodeGen EXPORT glslang-targets) endif() - install(EXPORT glslangTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) - - set(ALL_HEADERS - ${GLSLANG_HEADERS} - ${MACHINEINDEPENDENT_HEADERS}) + set(PUBLIC_HEADERS + Public/ResourceLimits.h + Public/ShaderLang.h + Public/resource_limits_c.h + Include/glslang_c_interface.h + Include/glslang_c_shader_types.h + Include/ResourceLimits.h + Include/visibility.h + MachineIndependent/Versions.h) - foreach(file ${ALL_HEADERS}) + foreach(file ${PUBLIC_HEADERS}) get_filename_component(dir ${file} DIRECTORY) install(FILES ${file} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/${dir}) endforeach() install(FILES ${GLSLANG_BUILD_INFO_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang) + install(TARGETS glslang-default-resource-limits EXPORT glslang-targets) endif() diff --git a/glslang/GenericCodeGen/CodeGen.cpp b/glslang/GenericCodeGen/CodeGen.cpp index b3c7226dfa..1ef2449625 100644 --- a/glslang/GenericCodeGen/CodeGen.cpp +++ b/glslang/GenericCodeGen/CodeGen.cpp @@ -41,10 +41,9 @@ // class TGenericCompiler : public TCompiler { public: - TGenericCompiler(EShLanguage l, int dOptions) : TCompiler(l, infoSink), debugOptions(dOptions) { } + TGenericCompiler(EShLanguage l) : TCompiler(l, infoSink) {} virtual bool compile(TIntermNode* root, int version = 0, EProfile profile = ENoProfile); TInfoSink infoSink; - int debugOptions; }; // @@ -52,10 +51,7 @@ class TGenericCompiler : public TCompiler { // compile object used by higher level code. It returns // a subclass of TCompiler. // -TCompiler* ConstructCompiler(EShLanguage language, int debugOptions) -{ - return new TGenericCompiler(language, debugOptions); -} +TCompiler* ConstructCompiler(EShLanguage language, int) { return new TGenericCompiler(language); } // // Delete the compiler made by ConstructCompiler diff --git a/glslang/GenericCodeGen/Link.cpp b/glslang/GenericCodeGen/Link.cpp index c38db0f69f..5df39b814a 100644 --- a/glslang/GenericCodeGen/Link.cpp +++ b/glslang/GenericCodeGen/Link.cpp @@ -44,11 +44,10 @@ // class TGenericLinker : public TLinker { public: - TGenericLinker(EShExecutable e, int dOptions) : TLinker(e, infoSink), debugOptions(dOptions) { } + TGenericLinker(EShExecutable e) : TLinker(e, infoSink) {} bool link(TCompilerList&, TUniformMap*) { return true; } void getAttributeBindings(ShBindingTable const **) const { } TInfoSink infoSink; - int debugOptions; }; // @@ -60,10 +59,7 @@ class TUniformLinkedMap : public TUniformMap { virtual int getLocation(const char*) { return 0; } }; -TShHandleBase* ConstructLinker(EShExecutable executable, int debugOptions) -{ - return new TGenericLinker(executable, debugOptions); -} +TShHandleBase* ConstructLinker(EShExecutable executable, int) { return new TGenericLinker(executable); } void DeleteLinker(TShHandleBase* linker) { @@ -82,7 +78,7 @@ void DeleteUniformMap(TUniformMap* map) TShHandleBase* ConstructBindings() { - return 0; + return nullptr; } void DeleteBindingList(TShHandleBase* bindingList) diff --git a/glslang/HLSL/hlslAttributes.cpp b/glslang/HLSL/hlslAttributes.cpp index 0cc0d3f4fc..973054931c 100644 --- a/glslang/HLSL/hlslAttributes.cpp +++ b/glslang/HLSL/hlslAttributes.cpp @@ -101,6 +101,8 @@ namespace glslang { if (name == "nonwritable") return EatNonWritable; if (name == "nonreadable") return EatNonReadable; + + if (name == "export") return EatExport; } else if (nameSpace.size() > 0) return EatNone; diff --git a/glslang/HLSL/hlslGrammar.cpp b/glslang/HLSL/hlslGrammar.cpp index bd4af922a0..ed32ff0caa 100644 --- a/glslang/HLSL/hlslGrammar.cpp +++ b/glslang/HLSL/hlslGrammar.cpp @@ -1,6 +1,7 @@ // // Copyright (C) 2016-2018 Google, Inc. // Copyright (C) 2016 LunarG, Inc. +// Copyright (C) 2023 Mobica Limited. // // All rights reserved. // @@ -390,6 +391,7 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList) case EvqOut: case EvqInOut: parseContext.error(token.loc, "in/out qualifiers are only valid on parameters", token.string->c_str(), ""); + break; default: break; } @@ -594,6 +596,7 @@ bool HlslGrammar::acceptControlDeclaration(TIntermNode*& node) // fully_specified_type // : type_specifier // | type_qualifier type_specifier +// | type_specifier type_qualifier // bool HlslGrammar::acceptFullySpecifiedType(TType& type, const TAttributes& attributes) { @@ -605,7 +608,7 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList, // type_qualifier TQualifier qualifier; qualifier.clear(); - if (! acceptQualifier(qualifier)) + if (! acceptPreQualifier(qualifier)) return false; TSourceLoc loc = token.loc; @@ -620,6 +623,10 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList, return false; } + // type_qualifier + if (! acceptPostQualifier(qualifier)) + return false; + if (type.getBasicType() == EbtBlock) { // the type was a block, which set some parts of the qualifier parseContext.mergeQualifiers(type.getQualifier(), qualifier); @@ -634,7 +641,7 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList, parseContext.declareBlock(loc, type); } else { // Some qualifiers are set when parsing the type. Merge those with - // whatever comes from acceptQualifier. + // whatever comes from acceptPreQualifier and acceptPostQualifier. assert(qualifier.layoutFormat == ElfNone); qualifier.layoutFormat = type.getQualifier().layoutFormat; @@ -660,7 +667,7 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList, // // Zero or more of these, so this can't return false. // -bool HlslGrammar::acceptQualifier(TQualifier& qualifier) +bool HlslGrammar::acceptPreQualifier(TQualifier& qualifier) { do { switch (peek()) { @@ -766,6 +773,25 @@ bool HlslGrammar::acceptQualifier(TQualifier& qualifier) } while (true); } +// type_qualifier +// : qualifier qualifier ... +// +// Zero or more of these, so this can't return false. +// +bool HlslGrammar::acceptPostQualifier(TQualifier& qualifier) +{ + do { + switch (peek()) { + case EHTokConst: + qualifier.storage = EvqConst; + break; + default: + return true; + } + advanceToken(); + } while (true); +} + // layout_qualifier_list // : LAYOUT LEFT_PAREN layout_qualifier COMMA layout_qualifier ... RIGHT_PAREN // @@ -823,8 +849,10 @@ bool HlslGrammar::acceptLayoutQualifierList(TQualifier& qualifier) // | UINT // | BOOL // -bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType) +bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType, + TPrecisionQualifier& precision) { + precision = EpqNone; switch (peek()) { case EHTokFloat: basicType = EbtFloat; @@ -842,6 +870,23 @@ bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType) case EHTokBool: basicType = EbtBool; break; + case EHTokHalf: + basicType = parseContext.hlslEnable16BitTypes() ? EbtFloat16 : EbtFloat; + break; + case EHTokMin16float: + case EHTokMin10float: + basicType = parseContext.hlslEnable16BitTypes() ? EbtFloat16 : EbtFloat; + precision = EpqMedium; + break; + case EHTokMin16int: + case EHTokMin12int: + basicType = parseContext.hlslEnable16BitTypes() ? EbtInt16 : EbtInt; + precision = EpqMedium; + break; + case EHTokMin16uint: + basicType = parseContext.hlslEnable16BitTypes() ? EbtUint16 : EbtUint; + precision = EpqMedium; + break; default: return false; } @@ -867,7 +912,8 @@ bool HlslGrammar::acceptVectorTemplateType(TType& type) } TBasicType basicType; - if (! acceptTemplateVecMatBasicType(basicType)) { + TPrecisionQualifier precision; + if (! acceptTemplateVecMatBasicType(basicType, precision)) { expected("scalar type"); return false; } @@ -890,7 +936,7 @@ bool HlslGrammar::acceptVectorTemplateType(TType& type) const int vecSizeI = vecSize->getAsConstantUnion()->getConstArray()[0].getIConst(); - new(&type) TType(basicType, EvqTemporary, vecSizeI); + new(&type) TType(basicType, EvqTemporary, precision, vecSizeI); if (vecSizeI == 1) type.makeVector(); @@ -919,7 +965,8 @@ bool HlslGrammar::acceptMatrixTemplateType(TType& type) } TBasicType basicType; - if (! acceptTemplateVecMatBasicType(basicType)) { + TPrecisionQualifier precision; + if (! acceptTemplateVecMatBasicType(basicType, precision)) { expected("scalar type"); return false; } @@ -956,7 +1003,7 @@ bool HlslGrammar::acceptMatrixTemplateType(TType& type) if (! acceptLiteral(cols)) return false; - new(&type) TType(basicType, EvqTemporary, 0, + new(&type) TType(basicType, EvqTemporary, precision, 0, rows->getAsConstantUnion()->getConstArray()[0].getIConst(), cols->getAsConstantUnion()->getConstArray()[0].getIConst()); @@ -2064,6 +2111,251 @@ bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList) new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 4); break; + case EHTokMin16float1x1: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 1); + break; + case EHTokMin16float1x2: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 2); + break; + case EHTokMin16float1x3: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 3); + break; + case EHTokMin16float1x4: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 4); + break; + case EHTokMin16float2x1: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 1); + break; + case EHTokMin16float2x2: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 2); + break; + case EHTokMin16float2x3: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 3); + break; + case EHTokMin16float2x4: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 4); + break; + case EHTokMin16float3x1: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 1); + break; + case EHTokMin16float3x2: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 2); + break; + case EHTokMin16float3x3: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 3); + break; + case EHTokMin16float3x4: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 4); + break; + case EHTokMin16float4x1: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 1); + break; + case EHTokMin16float4x2: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 2); + break; + case EHTokMin16float4x3: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 3); + break; + case EHTokMin16float4x4: + new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 4); + break; + + case EHTokMin10float1x1: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 1); + break; + case EHTokMin10float1x2: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 2); + break; + case EHTokMin10float1x3: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 3); + break; + case EHTokMin10float1x4: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 4); + break; + case EHTokMin10float2x1: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 1); + break; + case EHTokMin10float2x2: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 2); + break; + case EHTokMin10float2x3: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 3); + break; + case EHTokMin10float2x4: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 4); + break; + case EHTokMin10float3x1: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 1); + break; + case EHTokMin10float3x2: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 2); + break; + case EHTokMin10float3x3: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 3); + break; + case EHTokMin10float3x4: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 4); + break; + case EHTokMin10float4x1: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 1); + break; + case EHTokMin10float4x2: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 2); + break; + case EHTokMin10float4x3: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 3); + break; + case EHTokMin10float4x4: + new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 4); + break; + + case EHTokMin16int1x1: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 1); + break; + case EHTokMin16int1x2: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 2); + break; + case EHTokMin16int1x3: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 3); + break; + case EHTokMin16int1x4: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 4); + break; + case EHTokMin16int2x1: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 1); + break; + case EHTokMin16int2x2: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 2); + break; + case EHTokMin16int2x3: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 3); + break; + case EHTokMin16int2x4: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 4); + break; + case EHTokMin16int3x1: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 1); + break; + case EHTokMin16int3x2: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 2); + break; + case EHTokMin16int3x3: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 3); + break; + case EHTokMin16int3x4: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 4); + break; + case EHTokMin16int4x1: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 1); + break; + case EHTokMin16int4x2: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 2); + break; + case EHTokMin16int4x3: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 3); + break; + case EHTokMin16int4x4: + new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 4); + break; + + case EHTokMin12int1x1: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 1); + break; + case EHTokMin12int1x2: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 2); + break; + case EHTokMin12int1x3: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 3); + break; + case EHTokMin12int1x4: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 4); + break; + case EHTokMin12int2x1: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 1); + break; + case EHTokMin12int2x2: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 2); + break; + case EHTokMin12int2x3: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 3); + break; + case EHTokMin12int2x4: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 4); + break; + case EHTokMin12int3x1: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 1); + break; + case EHTokMin12int3x2: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 2); + break; + case EHTokMin12int3x3: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 3); + break; + case EHTokMin12int3x4: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 4); + break; + case EHTokMin12int4x1: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 1); + break; + case EHTokMin12int4x2: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 2); + break; + case EHTokMin12int4x3: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 3); + break; + case EHTokMin12int4x4: + new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 4); + break; + + case EHTokMin16uint1x1: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 1); + break; + case EHTokMin16uint1x2: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 2); + break; + case EHTokMin16uint1x3: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 3); + break; + case EHTokMin16uint1x4: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 4); + break; + case EHTokMin16uint2x1: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 1); + break; + case EHTokMin16uint2x2: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 2); + break; + case EHTokMin16uint2x3: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 3); + break; + case EHTokMin16uint2x4: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 4); + break; + case EHTokMin16uint3x1: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 1); + break; + case EHTokMin16uint3x2: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 2); + break; + case EHTokMin16uint3x3: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 3); + break; + case EHTokMin16uint3x4: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 4); + break; + case EHTokMin16uint4x1: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 1); + break; + case EHTokMin16uint4x2: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 2); + break; + case EHTokMin16uint4x3: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 3); + break; + case EHTokMin16uint4x4: + new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 4); + break; + default: return false; } @@ -3428,7 +3720,7 @@ bool HlslGrammar::acceptCompoundStatement(TIntermNode*& retStatement) } } if (compoundStatement) - compoundStatement->setOperator(EOpSequence); + compoundStatement->setOperator(intermediate.getDebugInfo() ? EOpScope : EOpSequence); retStatement = compoundStatement; @@ -3794,7 +4086,7 @@ bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement, const TAttri parseContext.unnestLooping(); --parseContext.controlFlowNestingLevel; - loopNode = intermediate.addLoop(statement, condition, 0, false, loc); + loopNode = intermediate.addLoop(statement, condition, nullptr, false, loc); statement = loopNode; break; diff --git a/glslang/HLSL/hlslGrammar.h b/glslang/HLSL/hlslGrammar.h index 27706b2b9b..cfe294bc0d 100644 --- a/glslang/HLSL/hlslGrammar.h +++ b/glslang/HLSL/hlslGrammar.h @@ -1,6 +1,7 @@ // // Copyright (C) 2016-2018 Google, Inc. // Copyright (C) 2016 LunarG, Inc. +// Copyright (C) 2023 Mobica Limited. // // All rights reserved. // @@ -72,11 +73,12 @@ namespace glslang { bool acceptSamplerState(); bool acceptFullySpecifiedType(TType&, const TAttributes&); bool acceptFullySpecifiedType(TType&, TIntermNode*& nodeList, const TAttributes&, bool forbidDeclarators = false); - bool acceptQualifier(TQualifier&); + bool acceptPreQualifier(TQualifier&); + bool acceptPostQualifier(TQualifier&); bool acceptLayoutQualifierList(TQualifier&); bool acceptType(TType&); bool acceptType(TType&, TIntermNode*& nodeList); - bool acceptTemplateVecMatBasicType(TBasicType&); + bool acceptTemplateVecMatBasicType(TBasicType&, TPrecisionQualifier&); bool acceptVectorTemplateType(TType&); bool acceptMatrixTemplateType(TType&); bool acceptTessellationDeclType(TBuiltInVariable&); diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index 2d0a8e926d..35eb222ce5 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -43,8 +43,6 @@ #include "../MachineIndependent/Scan.h" #include "../MachineIndependent/preprocessor/PpContext.h" -#include "../OSDependent/osinclude.h" - #include #include #include @@ -402,7 +400,7 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* case EOpLeftShiftAssign: case EOpRightShiftAssign: isModifyOp = true; - // fall through... + [[fallthrough]]; case EOpAssign: { // Since this is an lvalue, we'll convert an image load to a sequence like this @@ -962,14 +960,11 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt return addConstructor(loc, base, type); } } - if (base->getVectorSize() == 1) { + // Use EOpIndexDirect (below) with vec1.x so that it remains l-value (Test/hlsl.swizzle.vec1.comp) + if (base->getVectorSize() == 1 && selectors.size() > 1) { TType scalarType(base->getBasicType(), EvqTemporary, 1); - if (selectors.size() == 1) - return addConstructor(loc, base, scalarType); - else { - TType vectorType(base->getBasicType(), EvqTemporary, selectors.size()); - return addConstructor(loc, addConstructor(loc, base, scalarType), vectorType); - } + TType vectorType(base->getBasicType(), EvqTemporary, selectors.size()); + return addConstructor(loc, addConstructor(loc, base, scalarType), vectorType); } if (base->getType().getQualifier().isFrontEndConstant()) @@ -1177,10 +1172,13 @@ void HlslParseContext::flatten(const TVariable& variable, bool linkage, bool arr if (type.isBuiltIn() && !type.isStruct()) return; + auto entry = flattenMap.insert(std::make_pair(variable.getUniqueId(), TFlattenData(type.getQualifier().layoutBinding, type.getQualifier().layoutLocation))); + if (type.isStruct() && type.getStruct()->size()==0) + return; // if flattening arrayed io struct, array each member of dereferenced type if (arrayed) { const TType dereferencedType(type, 0); @@ -1596,7 +1594,7 @@ void HlslParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFunction // bool builtIn; TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn); - const TFunction* prevDec = symbol ? symbol->getAsFunction() : 0; + const TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr; if (prototype) { // All built-in functions are defined, even though they don't have a body. @@ -1754,6 +1752,18 @@ void HlslParseContext::handleEntryPointAttributes(const TSourceLoc& loc, const T intermediate.setLocalSize(lid, sequence[lid]->getAsConstantUnion()->getConstArray()[0].getIConst()); break; } + case EatInstance: + { + int invocations; + + if (!it->getInt(invocations)) { + error(loc, "invalid instance", "", ""); + } else { + if (!intermediate.setInvocations(invocations)) + error(loc, "cannot change previously set instance attribute", "", ""); + } + break; + } case EatMaxVertexCount: { int maxVertexCount; @@ -2430,6 +2440,11 @@ void HlslParseContext::remapNonEntryPointIO(TFunction& function) clearUniformInputOutput(function[i].type->getQualifier()); } +TIntermNode* HlslParseContext::handleDeclare(const TSourceLoc& loc, TIntermTyped* var) +{ + return intermediate.addUnaryNode(EOpDeclare, var, loc, TType(EbtVoid)); +} + // Handle function returns, including type conversions to the function return type // if necessary. TIntermNode* HlslParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value) @@ -2455,7 +2470,7 @@ TIntermNode* HlslParseContext::handleReturnValue(const TSourceLoc& loc, TIntermT void HlslParseContext::handleFunctionArgument(TFunction* function, TIntermTyped*& arguments, TIntermTyped* newArg) { - TParameter param = { 0, new TType, nullptr }; + TParameter param = { nullptr, new TType, nullptr }; param.type->shallowCopy(newArg->getType()); function->addParameter(param); @@ -4487,13 +4502,13 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType int cmpValues = 0; // 1 if there is a compare value (handier than a bool below) switch (op) { - case EOpMethodGatherCmpRed: cmpValues = 1; // fall through + case EOpMethodGatherCmpRed: cmpValues = 1; [[fallthrough]]; case EOpMethodGatherRed: channel = 0; break; - case EOpMethodGatherCmpGreen: cmpValues = 1; // fall through + case EOpMethodGatherCmpGreen: cmpValues = 1; [[fallthrough]]; case EOpMethodGatherGreen: channel = 1; break; - case EOpMethodGatherCmpBlue: cmpValues = 1; // fall through + case EOpMethodGatherCmpBlue: cmpValues = 1; [[fallthrough]]; case EOpMethodGatherBlue: channel = 2; break; - case EOpMethodGatherCmpAlpha: cmpValues = 1; // fall through + case EOpMethodGatherCmpAlpha: cmpValues = 1; [[fallthrough]]; case EOpMethodGatherAlpha: channel = 3; break; default: assert(0); break; } @@ -5430,7 +5445,7 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*& } case EOpWavePrefixCountBits: { - // Mapped to subgroupBallotInclusiveBitCount(subgroupBallot()) + // Mapped to subgroupBallotExclusiveBitCount(subgroupBallot()) // builtin // uvec4 type. @@ -5444,7 +5459,7 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*& TType uintType(EbtUint, EvqTemporary); node = intermediate.addBuiltInFunctionCall(loc, - EOpSubgroupBallotInclusiveBitCount, true, res, uintType); + EOpSubgroupBallotExclusiveBitCount, true, res, uintType); break; } @@ -6042,7 +6057,7 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn unaryArg = callNode.getAsUnaryNode()->getOperand(); arg0 = unaryArg; } - const TIntermSequence& aggArgs = *argp; // only valid when unaryArg is nullptr + const TIntermSequence& aggArgs = argp ? *argp : TIntermSequence(); // only valid when unaryArg is nullptr switch (callNode.getOp()) { case EOpTextureGather: @@ -7548,7 +7563,6 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, TFunction candidateList[0]->getBuiltInOp() == EOpMethodRestartStrip || candidateList[0]->getBuiltInOp() == EOpMethodIncrementCounter || candidateList[0]->getBuiltInOp() == EOpMethodDecrementCounter || - candidateList[0]->getBuiltInOp() == EOpMethodAppend || candidateList[0]->getBuiltInOp() == EOpMethodConsume)) { return candidateList[0]; } @@ -7773,18 +7787,18 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, TFunction // Handle aggregates: put all args into the new function call for (int arg = 0; arg < int(args->getAsAggregate()->getSequence().size()); ++arg) { // TODO: But for constness, we could avoid the new & shallowCopy, and use the pointer directly. - TParameter param = { 0, new TType, nullptr }; + TParameter param = { nullptr, new TType, nullptr }; param.type->shallowCopy(args->getAsAggregate()->getSequence()[arg]->getAsTyped()->getType()); convertedCall.addParameter(param); } } else if (args->getAsUnaryNode()) { // Handle unaries: put all args into the new function call - TParameter param = { 0, new TType, nullptr }; + TParameter param = { nullptr, new TType, nullptr }; param.type->shallowCopy(args->getAsUnaryNode()->getOperand()->getAsTyped()->getType()); convertedCall.addParameter(param); } else if (args->getAsTyped()) { // Handle bare e.g, floats, not in an aggregate. - TParameter param = { 0, new TType, nullptr }; + TParameter param = { nullptr, new TType, nullptr }; param.type->shallowCopy(args->getAsTyped()->getType()); convertedCall.addParameter(param); } else { @@ -8023,11 +8037,16 @@ TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, const TStr if (flattenVar) flatten(*symbol->getAsVariable(), symbolTable.atGlobalLevel()); - if (initializer == nullptr) - return nullptr; + TVariable* variable = symbol->getAsVariable(); + + if (initializer == nullptr) { + if (intermediate.getDebugInfo()) + return executeDeclaration(loc, variable); + else + return nullptr; + } // Deal with initializer - TVariable* variable = symbol->getAsVariable(); if (variable == nullptr) { error(loc, "initializer requires a variable, not a member", identifier.c_str(), ""); return nullptr; @@ -8094,6 +8113,24 @@ TVariable* HlslParseContext::declareNonArray(const TSourceLoc& loc, const TStrin return nullptr; } +// Return a declaration of a temporary variable +// +// This is used to force a variable to be declared in the correct scope +// when debug information is being generated. + +TIntermNode* HlslParseContext::executeDeclaration(const TSourceLoc& loc, TVariable* variable) +{ + // + // Identifier must be of type temporary. + // + TStorageQualifier qualifier = variable->getType().getQualifier().storage; + if (qualifier != EvqTemporary) + return nullptr; + + TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc); + return handleDeclare(loc, intermSymbol); +} + // // Handle all types of initializers from the grammar. // @@ -9006,7 +9043,8 @@ void HlslParseContext::fixBlockUniformOffsets(const TQualifier& qualifier, TType // "The specified offset must be a multiple // of the base alignment of the type of the block member it qualifies, or a compile-time error results." if (! IsMultipleOfPow2(memberQualifier.layoutOffset, memberAlignment)) - error(memberLoc, "must be a multiple of the member's alignment", "offset", ""); + error(memberLoc, "must be a multiple of the member's alignment", "offset", + "(layout offset = %d | member alignment = %d)", memberQualifier.layoutOffset, memberAlignment); // "The offset qualifier forces the qualified member to start at or after the specified // integral-constant expression, which will be its byte offset from the beginning of the buffer. @@ -9508,6 +9546,8 @@ bool HlslParseContext::isInputBuiltIn(const TQualifier& qualifier) const return language == EShLangTessEvaluation; case EbvTessCoord: return language == EShLangTessEvaluation; + case EbvViewIndex: + return language != EShLangCompute; default: return false; } @@ -9613,6 +9653,10 @@ void HlslParseContext::correctOutput(TQualifier& qualifier) if (language != EShLangTessControl) qualifier.patch = false; + // Fixes Test/hlsl.entry-inout.vert (SV_Position will not become a varying). + if (qualifier.builtIn == EbvNone) + qualifier.builtIn = qualifier.declaredBuiltIn; + switch (qualifier.builtIn) { case EbvFragDepth: intermediate.setDepthReplacing(); diff --git a/glslang/HLSL/hlslParseHelper.h b/glslang/HLSL/hlslParseHelper.h index 8bebb0e2b2..97c52d453a 100644 --- a/glslang/HLSL/hlslParseHelper.h +++ b/glslang/HLSL/hlslParseHelper.h @@ -87,6 +87,7 @@ class HlslParseContext : public TParseContextBase { void handleFunctionBody(const TSourceLoc&, TFunction&, TIntermNode* functionBody, TIntermNode*& node); void remapEntryPointIO(TFunction& function, TVariable*& returnValue, TVector& inputs, TVector& outputs); void remapNonEntryPointIO(TFunction& function); + TIntermNode* handleDeclare(const TSourceLoc&, TIntermTyped*); TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*); void handleFunctionArgument(TFunction*, TIntermTyped*& arguments, TIntermTyped* newArg); TIntermTyped* handleAssign(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right); @@ -146,14 +147,14 @@ class HlslParseContext : public TParseContextBase { void declareTypedef(const TSourceLoc&, const TString& identifier, const TType&); void declareStruct(const TSourceLoc&, TString& structName, TType&); TSymbol* lookupUserType(const TString&, TType&); - TIntermNode* declareVariable(const TSourceLoc&, const TString& identifier, TType&, TIntermTyped* initializer = 0); + TIntermNode* declareVariable(const TSourceLoc&, const TString& identifier, TType&, TIntermTyped* initializer = nullptr); void lengthenList(const TSourceLoc&, TIntermSequence& list, int size, TIntermTyped* scalarInit); TIntermTyped* handleConstructor(const TSourceLoc&, TIntermTyped*, const TType&); TIntermTyped* addConstructor(const TSourceLoc&, TIntermTyped*, const TType&); TIntermTyped* convertArray(TIntermTyped*, const TType&); TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&); TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset); - void declareBlock(const TSourceLoc&, TType&, const TString* instanceName = 0); + void declareBlock(const TSourceLoc&, TType&, const TString* instanceName = nullptr); void declareStructBufferCounter(const TSourceLoc& loc, const TType& bufferType, const TString& name); void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation); void fixXfbOffsets(TQualifier&, TTypeList&); @@ -170,10 +171,10 @@ class HlslParseContext : public TParseContextBase { void unnestAnnotations() { --annotationNestingLevel; } int getAnnotationNestingLevel() { return annotationNestingLevel; } void pushScope() { symbolTable.push(); } - void popScope() { symbolTable.pop(0); } + void popScope() { symbolTable.pop(nullptr); } void pushThisScope(const TType&, const TVector&); - void popThisScope() { symbolTable.pop(0); } + void popThisScope() { symbolTable.pop(nullptr); } void pushImplicitThis(TVariable* thisParameter) { implicitThisStack.push_back(thisParameter); } void popImplicitThis() { implicitThisStack.pop_back(); } @@ -243,6 +244,7 @@ class HlslParseContext : public TParseContextBase { TIntermSymbol* makeInternalVariableNode(const TSourceLoc&, const char* name, const TType&) const; TVariable* declareNonArray(const TSourceLoc&, const TString& identifier, const TType&, bool track); void declareArray(const TSourceLoc&, const TString& identifier, const TType&, TSymbol*&, bool track); + TIntermNode* executeDeclaration(const TSourceLoc&, TVariable* variable); TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable); TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer, TIntermTyped* scalarInit); bool isScalarConstructor(const TIntermNode*); diff --git a/glslang/HLSL/hlslParseables.cpp b/glslang/HLSL/hlslParseables.cpp index 15918dc376..8fb1d2909c 100644 --- a/glslang/HLSL/hlslParseables.cpp +++ b/glslang/HLSL/hlslParseables.cpp @@ -564,8 +564,8 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c { "GetRenderTargetSamplePosition", "V2", "F", "V1", "I", EShLangAll, false }, { "GroupMemoryBarrier", nullptr, nullptr, "-", "-", EShLangCS, false }, { "GroupMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangCS, false }, - { "InterlockedAdd", "-", "-", "SVM,,>", "UI,,", EShLangPSCS, false }, - { "InterlockedAdd", "-", "-", "SVM,", "UI,", EShLangPSCS, false }, + { "InterlockedAdd", "-", "-", "SVM,,>", "FUI,,", EShLangPSCS, false }, + { "InterlockedAdd", "-", "-", "SVM,", "FUI,", EShLangPSCS, false }, { "InterlockedAnd", "-", "-", "SVM,,>", "UI,,", EShLangPSCS, false }, { "InterlockedAnd", "-", "-", "SVM,", "UI,", EShLangPSCS, false }, { "InterlockedCompareExchange", "-", "-", "SVM,,,>", "UI,,,", EShLangPSCS, false }, diff --git a/glslang/HLSL/hlslScanContext.cpp b/glslang/HLSL/hlslScanContext.cpp index fc62672f4e..e45643e913 100644 --- a/glslang/HLSL/hlslScanContext.cpp +++ b/glslang/HLSL/hlslScanContext.cpp @@ -78,334 +78,396 @@ struct str_hash }; // A single global usable by all threads, by all versions, by all languages. -// After a single process-level initialization, this is read only and thread safe -std::unordered_map* KeywordMap = nullptr; -std::unordered_set* ReservedSet = nullptr; -std::unordered_map* SemanticMap = nullptr; - +const std::unordered_map KeywordMap { + {"static",glslang::EHTokStatic}, + {"const",glslang::EHTokConst}, + {"unorm",glslang::EHTokUnorm}, + {"snorm",glslang::EHTokSNorm}, + {"extern",glslang::EHTokExtern}, + {"uniform",glslang::EHTokUniform}, + {"volatile",glslang::EHTokVolatile}, + {"precise",glslang::EHTokPrecise}, + {"shared",glslang::EHTokShared}, + {"groupshared",glslang::EHTokGroupShared}, + {"linear",glslang::EHTokLinear}, + {"centroid",glslang::EHTokCentroid}, + {"nointerpolation",glslang::EHTokNointerpolation}, + {"noperspective",glslang::EHTokNoperspective}, + {"sample",glslang::EHTokSample}, + {"row_major",glslang::EHTokRowMajor}, + {"column_major",glslang::EHTokColumnMajor}, + {"packoffset",glslang::EHTokPackOffset}, + {"in",glslang::EHTokIn}, + {"out",glslang::EHTokOut}, + {"inout",glslang::EHTokInOut}, + {"layout",glslang::EHTokLayout}, + {"globallycoherent",glslang::EHTokGloballyCoherent}, + {"inline",glslang::EHTokInline}, + + {"point",glslang::EHTokPoint}, + {"line",glslang::EHTokLine}, + {"triangle",glslang::EHTokTriangle}, + {"lineadj",glslang::EHTokLineAdj}, + {"triangleadj",glslang::EHTokTriangleAdj}, + + {"PointStream",glslang::EHTokPointStream}, + {"LineStream",glslang::EHTokLineStream}, + {"TriangleStream",glslang::EHTokTriangleStream}, + + {"InputPatch",glslang::EHTokInputPatch}, + {"OutputPatch",glslang::EHTokOutputPatch}, + + {"Buffer",glslang::EHTokBuffer}, + {"vector",glslang::EHTokVector}, + {"matrix",glslang::EHTokMatrix}, + + {"void",glslang::EHTokVoid}, + {"string",glslang::EHTokString}, + {"bool",glslang::EHTokBool}, + {"int",glslang::EHTokInt}, + {"uint",glslang::EHTokUint}, + {"uint64_t",glslang::EHTokUint64}, + {"dword",glslang::EHTokDword}, + {"half",glslang::EHTokHalf}, + {"float",glslang::EHTokFloat}, + {"double",glslang::EHTokDouble}, + {"min16float",glslang::EHTokMin16float}, + {"min10float",glslang::EHTokMin10float}, + {"min16int",glslang::EHTokMin16int}, + {"min12int",glslang::EHTokMin12int}, + {"min16uint",glslang::EHTokMin16uint}, + + {"bool1",glslang::EHTokBool1}, + {"bool2",glslang::EHTokBool2}, + {"bool3",glslang::EHTokBool3}, + {"bool4",glslang::EHTokBool4}, + {"float1",glslang::EHTokFloat1}, + {"float2",glslang::EHTokFloat2}, + {"float3",glslang::EHTokFloat3}, + {"float4",glslang::EHTokFloat4}, + {"int1",glslang::EHTokInt1}, + {"int2",glslang::EHTokInt2}, + {"int3",glslang::EHTokInt3}, + {"int4",glslang::EHTokInt4}, + {"double1",glslang::EHTokDouble1}, + {"double2",glslang::EHTokDouble2}, + {"double3",glslang::EHTokDouble3}, + {"double4",glslang::EHTokDouble4}, + {"uint1",glslang::EHTokUint1}, + {"uint2",glslang::EHTokUint2}, + {"uint3",glslang::EHTokUint3}, + {"uint4",glslang::EHTokUint4}, + + {"half1",glslang::EHTokHalf1}, + {"half2",glslang::EHTokHalf2}, + {"half3",glslang::EHTokHalf3}, + {"half4",glslang::EHTokHalf4}, + {"min16float1",glslang::EHTokMin16float1}, + {"min16float2",glslang::EHTokMin16float2}, + {"min16float3",glslang::EHTokMin16float3}, + {"min16float4",glslang::EHTokMin16float4}, + {"min10float1",glslang::EHTokMin10float1}, + {"min10float2",glslang::EHTokMin10float2}, + {"min10float3",glslang::EHTokMin10float3}, + {"min10float4",glslang::EHTokMin10float4}, + {"min16int1",glslang::EHTokMin16int1}, + {"min16int2",glslang::EHTokMin16int2}, + {"min16int3",glslang::EHTokMin16int3}, + {"min16int4",glslang::EHTokMin16int4}, + {"min12int1",glslang::EHTokMin12int1}, + {"min12int2",glslang::EHTokMin12int2}, + {"min12int3",glslang::EHTokMin12int3}, + {"min12int4",glslang::EHTokMin12int4}, + {"min16uint1",glslang::EHTokMin16uint1}, + {"min16uint2",glslang::EHTokMin16uint2}, + {"min16uint3",glslang::EHTokMin16uint3}, + {"min16uint4",glslang::EHTokMin16uint4}, + + {"bool1x1",glslang::EHTokBool1x1}, + {"bool1x2",glslang::EHTokBool1x2}, + {"bool1x3",glslang::EHTokBool1x3}, + {"bool1x4",glslang::EHTokBool1x4}, + {"bool2x1",glslang::EHTokBool2x1}, + {"bool2x2",glslang::EHTokBool2x2}, + {"bool2x3",glslang::EHTokBool2x3}, + {"bool2x4",glslang::EHTokBool2x4}, + {"bool3x1",glslang::EHTokBool3x1}, + {"bool3x2",glslang::EHTokBool3x2}, + {"bool3x3",glslang::EHTokBool3x3}, + {"bool3x4",glslang::EHTokBool3x4}, + {"bool4x1",glslang::EHTokBool4x1}, + {"bool4x2",glslang::EHTokBool4x2}, + {"bool4x3",glslang::EHTokBool4x3}, + {"bool4x4",glslang::EHTokBool4x4}, + {"int1x1",glslang::EHTokInt1x1}, + {"int1x2",glslang::EHTokInt1x2}, + {"int1x3",glslang::EHTokInt1x3}, + {"int1x4",glslang::EHTokInt1x4}, + {"int2x1",glslang::EHTokInt2x1}, + {"int2x2",glslang::EHTokInt2x2}, + {"int2x3",glslang::EHTokInt2x3}, + {"int2x4",glslang::EHTokInt2x4}, + {"int3x1",glslang::EHTokInt3x1}, + {"int3x2",glslang::EHTokInt3x2}, + {"int3x3",glslang::EHTokInt3x3}, + {"int3x4",glslang::EHTokInt3x4}, + {"int4x1",glslang::EHTokInt4x1}, + {"int4x2",glslang::EHTokInt4x2}, + {"int4x3",glslang::EHTokInt4x3}, + {"int4x4",glslang::EHTokInt4x4}, + {"uint1x1",glslang::EHTokUint1x1}, + {"uint1x2",glslang::EHTokUint1x2}, + {"uint1x3",glslang::EHTokUint1x3}, + {"uint1x4",glslang::EHTokUint1x4}, + {"uint2x1",glslang::EHTokUint2x1}, + {"uint2x2",glslang::EHTokUint2x2}, + {"uint2x3",glslang::EHTokUint2x3}, + {"uint2x4",glslang::EHTokUint2x4}, + {"uint3x1",glslang::EHTokUint3x1}, + {"uint3x2",glslang::EHTokUint3x2}, + {"uint3x3",glslang::EHTokUint3x3}, + {"uint3x4",glslang::EHTokUint3x4}, + {"uint4x1",glslang::EHTokUint4x1}, + {"uint4x2",glslang::EHTokUint4x2}, + {"uint4x3",glslang::EHTokUint4x3}, + {"uint4x4",glslang::EHTokUint4x4}, + {"bool1x1",glslang::EHTokBool1x1}, + {"bool1x2",glslang::EHTokBool1x2}, + {"bool1x3",glslang::EHTokBool1x3}, + {"bool1x4",glslang::EHTokBool1x4}, + {"bool2x1",glslang::EHTokBool2x1}, + {"bool2x2",glslang::EHTokBool2x2}, + {"bool2x3",glslang::EHTokBool2x3}, + {"bool2x4",glslang::EHTokBool2x4}, + {"bool3x1",glslang::EHTokBool3x1}, + {"bool3x2",glslang::EHTokBool3x2}, + {"bool3x3",glslang::EHTokBool3x3}, + {"bool3x4",glslang::EHTokBool3x4}, + {"bool4x1",glslang::EHTokBool4x1}, + {"bool4x2",glslang::EHTokBool4x2}, + {"bool4x3",glslang::EHTokBool4x3}, + {"bool4x4",glslang::EHTokBool4x4}, + {"float1x1",glslang::EHTokFloat1x1}, + {"float1x2",glslang::EHTokFloat1x2}, + {"float1x3",glslang::EHTokFloat1x3}, + {"float1x4",glslang::EHTokFloat1x4}, + {"float2x1",glslang::EHTokFloat2x1}, + {"float2x2",glslang::EHTokFloat2x2}, + {"float2x3",glslang::EHTokFloat2x3}, + {"float2x4",glslang::EHTokFloat2x4}, + {"float3x1",glslang::EHTokFloat3x1}, + {"float3x2",glslang::EHTokFloat3x2}, + {"float3x3",glslang::EHTokFloat3x3}, + {"float3x4",glslang::EHTokFloat3x4}, + {"float4x1",glslang::EHTokFloat4x1}, + {"float4x2",glslang::EHTokFloat4x2}, + {"float4x3",glslang::EHTokFloat4x3}, + {"float4x4",glslang::EHTokFloat4x4}, + {"half1x1",glslang::EHTokHalf1x1}, + {"half1x2",glslang::EHTokHalf1x2}, + {"half1x3",glslang::EHTokHalf1x3}, + {"half1x4",glslang::EHTokHalf1x4}, + {"half2x1",glslang::EHTokHalf2x1}, + {"half2x2",glslang::EHTokHalf2x2}, + {"half2x3",glslang::EHTokHalf2x3}, + {"half2x4",glslang::EHTokHalf2x4}, + {"half3x1",glslang::EHTokHalf3x1}, + {"half3x2",glslang::EHTokHalf3x2}, + {"half3x3",glslang::EHTokHalf3x3}, + {"half3x4",glslang::EHTokHalf3x4}, + {"half4x1",glslang::EHTokHalf4x1}, + {"half4x2",glslang::EHTokHalf4x2}, + {"half4x3",glslang::EHTokHalf4x3}, + {"half4x4",glslang::EHTokHalf4x4}, + {"double1x1",glslang::EHTokDouble1x1}, + {"double1x2",glslang::EHTokDouble1x2}, + {"double1x3",glslang::EHTokDouble1x3}, + {"double1x4",glslang::EHTokDouble1x4}, + {"double2x1",glslang::EHTokDouble2x1}, + {"double2x2",glslang::EHTokDouble2x2}, + {"double2x3",glslang::EHTokDouble2x3}, + {"double2x4",glslang::EHTokDouble2x4}, + {"double3x1",glslang::EHTokDouble3x1}, + {"double3x2",glslang::EHTokDouble3x2}, + {"double3x3",glslang::EHTokDouble3x3}, + {"double3x4",glslang::EHTokDouble3x4}, + {"double4x1",glslang::EHTokDouble4x1}, + {"double4x2",glslang::EHTokDouble4x2}, + {"double4x3",glslang::EHTokDouble4x3}, + {"double4x4",glslang::EHTokDouble4x4}, + {"min16float1x1",glslang::EHTokMin16float1x1}, + {"min16float1x2",glslang::EHTokMin16float1x2}, + {"min16float1x3",glslang::EHTokMin16float1x3}, + {"min16float1x4",glslang::EHTokMin16float1x4}, + {"min16float2x1",glslang::EHTokMin16float2x1}, + {"min16float2x2",glslang::EHTokMin16float2x2}, + {"min16float2x3",glslang::EHTokMin16float2x3}, + {"min16float2x4",glslang::EHTokMin16float2x4}, + {"min16float3x1",glslang::EHTokMin16float3x1}, + {"min16float3x2",glslang::EHTokMin16float3x2}, + {"min16float3x3",glslang::EHTokMin16float3x3}, + {"min16float3x4",glslang::EHTokMin16float3x4}, + {"min16float4x1",glslang::EHTokMin16float4x1}, + {"min16float4x2",glslang::EHTokMin16float4x2}, + {"min16float4x3",glslang::EHTokMin16float4x3}, + {"min16float4x4",glslang::EHTokMin16float4x4}, + {"min10float1x1",glslang::EHTokMin10float1x1}, + {"min10float1x2",glslang::EHTokMin10float1x2}, + {"min10float1x3",glslang::EHTokMin10float1x3}, + {"min10float1x4",glslang::EHTokMin10float1x4}, + {"min10float2x1",glslang::EHTokMin10float2x1}, + {"min10float2x2",glslang::EHTokMin10float2x2}, + {"min10float2x3",glslang::EHTokMin10float2x3}, + {"min10float2x4",glslang::EHTokMin10float2x4}, + {"min10float3x1",glslang::EHTokMin10float3x1}, + {"min10float3x2",glslang::EHTokMin10float3x2}, + {"min10float3x3",glslang::EHTokMin10float3x3}, + {"min10float3x4",glslang::EHTokMin10float3x4}, + {"min10float4x1",glslang::EHTokMin10float4x1}, + {"min10float4x2",glslang::EHTokMin10float4x2}, + {"min10float4x3",glslang::EHTokMin10float4x3}, + {"min10float4x4",glslang::EHTokMin10float4x4}, + {"min16int1x1",glslang::EHTokMin16int1x1}, + {"min16int1x2",glslang::EHTokMin16int1x2}, + {"min16int1x3",glslang::EHTokMin16int1x3}, + {"min16int1x4",glslang::EHTokMin16int1x4}, + {"min16int2x1",glslang::EHTokMin16int2x1}, + {"min16int2x2",glslang::EHTokMin16int2x2}, + {"min16int2x3",glslang::EHTokMin16int2x3}, + {"min16int2x4",glslang::EHTokMin16int2x4}, + {"min16int3x1",glslang::EHTokMin16int3x1}, + {"min16int3x2",glslang::EHTokMin16int3x2}, + {"min16int3x3",glslang::EHTokMin16int3x3}, + {"min16int3x4",glslang::EHTokMin16int3x4}, + {"min16int4x1",glslang::EHTokMin16int4x1}, + {"min16int4x2",glslang::EHTokMin16int4x2}, + {"min16int4x3",glslang::EHTokMin16int4x3}, + {"min16int4x4",glslang::EHTokMin16int4x4}, + {"min12int1x1",glslang::EHTokMin12int1x1}, + {"min12int1x2",glslang::EHTokMin12int1x2}, + {"min12int1x3",glslang::EHTokMin12int1x3}, + {"min12int1x4",glslang::EHTokMin12int1x4}, + {"min12int2x1",glslang::EHTokMin12int2x1}, + {"min12int2x2",glslang::EHTokMin12int2x2}, + {"min12int2x3",glslang::EHTokMin12int2x3}, + {"min12int2x4",glslang::EHTokMin12int2x4}, + {"min12int3x1",glslang::EHTokMin12int3x1}, + {"min12int3x2",glslang::EHTokMin12int3x2}, + {"min12int3x3",glslang::EHTokMin12int3x3}, + {"min12int3x4",glslang::EHTokMin12int3x4}, + {"min12int4x1",glslang::EHTokMin12int4x1}, + {"min12int4x2",glslang::EHTokMin12int4x2}, + {"min12int4x3",glslang::EHTokMin12int4x3}, + {"min12int4x4",glslang::EHTokMin12int4x4}, + {"min16uint1x1",glslang::EHTokMin16uint1x1}, + {"min16uint1x2",glslang::EHTokMin16uint1x2}, + {"min16uint1x3",glslang::EHTokMin16uint1x3}, + {"min16uint1x4",glslang::EHTokMin16uint1x4}, + {"min16uint2x1",glslang::EHTokMin16uint2x1}, + {"min16uint2x2",glslang::EHTokMin16uint2x2}, + {"min16uint2x3",glslang::EHTokMin16uint2x3}, + {"min16uint2x4",glslang::EHTokMin16uint2x4}, + {"min16uint3x1",glslang::EHTokMin16uint3x1}, + {"min16uint3x2",glslang::EHTokMin16uint3x2}, + {"min16uint3x3",glslang::EHTokMin16uint3x3}, + {"min16uint3x4",glslang::EHTokMin16uint3x4}, + {"min16uint4x1",glslang::EHTokMin16uint4x1}, + {"min16uint4x2",glslang::EHTokMin16uint4x2}, + {"min16uint4x3",glslang::EHTokMin16uint4x3}, + {"min16uint4x4",glslang::EHTokMin16uint4x4}, + + {"sampler",glslang::EHTokSampler}, + {"sampler1D",glslang::EHTokSampler1d}, + {"sampler2D",glslang::EHTokSampler2d}, + {"sampler3D",glslang::EHTokSampler3d}, + {"samplerCUBE",glslang::EHTokSamplerCube}, + {"sampler_state",glslang::EHTokSamplerState}, + {"SamplerState",glslang::EHTokSamplerState}, + {"SamplerComparisonState",glslang::EHTokSamplerComparisonState}, + {"texture",glslang::EHTokTexture}, + {"Texture1D",glslang::EHTokTexture1d}, + {"Texture1DArray",glslang::EHTokTexture1darray}, + {"Texture2D",glslang::EHTokTexture2d}, + {"Texture2DArray",glslang::EHTokTexture2darray}, + {"Texture3D",glslang::EHTokTexture3d}, + {"TextureCube",glslang::EHTokTextureCube}, + {"TextureCubeArray",glslang::EHTokTextureCubearray}, + {"Texture2DMS",glslang::EHTokTexture2DMS}, + {"Texture2DMSArray",glslang::EHTokTexture2DMSarray}, + {"RWTexture1D",glslang::EHTokRWTexture1d}, + {"RWTexture1DArray",glslang::EHTokRWTexture1darray}, + {"RWTexture2D",glslang::EHTokRWTexture2d}, + {"RWTexture2DArray",glslang::EHTokRWTexture2darray}, + {"RWTexture3D",glslang::EHTokRWTexture3d}, + {"RWBuffer",glslang::EHTokRWBuffer}, + {"SubpassInput",glslang::EHTokSubpassInput}, + {"SubpassInputMS",glslang::EHTokSubpassInputMS}, + + {"AppendStructuredBuffer",glslang::EHTokAppendStructuredBuffer}, + {"ByteAddressBuffer",glslang::EHTokByteAddressBuffer}, + {"ConsumeStructuredBuffer",glslang::EHTokConsumeStructuredBuffer}, + {"RWByteAddressBuffer",glslang::EHTokRWByteAddressBuffer}, + {"RWStructuredBuffer",glslang::EHTokRWStructuredBuffer}, + {"StructuredBuffer",glslang::EHTokStructuredBuffer}, + {"TextureBuffer",glslang::EHTokTextureBuffer}, + + {"class",glslang::EHTokClass}, + {"struct",glslang::EHTokStruct}, + {"cbuffer",glslang::EHTokCBuffer}, + {"ConstantBuffer",glslang::EHTokConstantBuffer}, + {"tbuffer",glslang::EHTokTBuffer}, + {"typedef",glslang::EHTokTypedef}, + {"this",glslang::EHTokThis}, + {"namespace",glslang::EHTokNamespace}, + + {"true",glslang::EHTokBoolConstant}, + {"false",glslang::EHTokBoolConstant}, + + {"for",glslang::EHTokFor}, + {"do",glslang::EHTokDo}, + {"while",glslang::EHTokWhile}, + {"break",glslang::EHTokBreak}, + {"continue",glslang::EHTokContinue}, + {"if",glslang::EHTokIf}, + {"else",glslang::EHTokElse}, + {"discard",glslang::EHTokDiscard}, + {"return",glslang::EHTokReturn}, + {"switch",glslang::EHTokSwitch}, + {"case",glslang::EHTokCase}, + {"default",glslang::EHTokDefault}, }; -namespace glslang { - -void HlslScanContext::fillInKeywordMap() -{ - if (KeywordMap != nullptr) { - // this is really an error, as this should called only once per process - // but, the only risk is if two threads called simultaneously - return; - } - KeywordMap = new std::unordered_map; - - (*KeywordMap)["static"] = EHTokStatic; - (*KeywordMap)["const"] = EHTokConst; - (*KeywordMap)["unorm"] = EHTokUnorm; - (*KeywordMap)["snorm"] = EHTokSNorm; - (*KeywordMap)["extern"] = EHTokExtern; - (*KeywordMap)["uniform"] = EHTokUniform; - (*KeywordMap)["volatile"] = EHTokVolatile; - (*KeywordMap)["precise"] = EHTokPrecise; - (*KeywordMap)["shared"] = EHTokShared; - (*KeywordMap)["groupshared"] = EHTokGroupShared; - (*KeywordMap)["linear"] = EHTokLinear; - (*KeywordMap)["centroid"] = EHTokCentroid; - (*KeywordMap)["nointerpolation"] = EHTokNointerpolation; - (*KeywordMap)["noperspective"] = EHTokNoperspective; - (*KeywordMap)["sample"] = EHTokSample; - (*KeywordMap)["row_major"] = EHTokRowMajor; - (*KeywordMap)["column_major"] = EHTokColumnMajor; - (*KeywordMap)["packoffset"] = EHTokPackOffset; - (*KeywordMap)["in"] = EHTokIn; - (*KeywordMap)["out"] = EHTokOut; - (*KeywordMap)["inout"] = EHTokInOut; - (*KeywordMap)["layout"] = EHTokLayout; - (*KeywordMap)["globallycoherent"] = EHTokGloballyCoherent; - (*KeywordMap)["inline"] = EHTokInline; - - (*KeywordMap)["point"] = EHTokPoint; - (*KeywordMap)["line"] = EHTokLine; - (*KeywordMap)["triangle"] = EHTokTriangle; - (*KeywordMap)["lineadj"] = EHTokLineAdj; - (*KeywordMap)["triangleadj"] = EHTokTriangleAdj; - - (*KeywordMap)["PointStream"] = EHTokPointStream; - (*KeywordMap)["LineStream"] = EHTokLineStream; - (*KeywordMap)["TriangleStream"] = EHTokTriangleStream; - - (*KeywordMap)["InputPatch"] = EHTokInputPatch; - (*KeywordMap)["OutputPatch"] = EHTokOutputPatch; - - (*KeywordMap)["Buffer"] = EHTokBuffer; - (*KeywordMap)["vector"] = EHTokVector; - (*KeywordMap)["matrix"] = EHTokMatrix; - - (*KeywordMap)["void"] = EHTokVoid; - (*KeywordMap)["string"] = EHTokString; - (*KeywordMap)["bool"] = EHTokBool; - (*KeywordMap)["int"] = EHTokInt; - (*KeywordMap)["uint"] = EHTokUint; - (*KeywordMap)["uint64_t"] = EHTokUint64; - (*KeywordMap)["dword"] = EHTokDword; - (*KeywordMap)["half"] = EHTokHalf; - (*KeywordMap)["float"] = EHTokFloat; - (*KeywordMap)["double"] = EHTokDouble; - (*KeywordMap)["min16float"] = EHTokMin16float; - (*KeywordMap)["min10float"] = EHTokMin10float; - (*KeywordMap)["min16int"] = EHTokMin16int; - (*KeywordMap)["min12int"] = EHTokMin12int; - (*KeywordMap)["min16uint"] = EHTokMin16uint; - - (*KeywordMap)["bool1"] = EHTokBool1; - (*KeywordMap)["bool2"] = EHTokBool2; - (*KeywordMap)["bool3"] = EHTokBool3; - (*KeywordMap)["bool4"] = EHTokBool4; - (*KeywordMap)["float1"] = EHTokFloat1; - (*KeywordMap)["float2"] = EHTokFloat2; - (*KeywordMap)["float3"] = EHTokFloat3; - (*KeywordMap)["float4"] = EHTokFloat4; - (*KeywordMap)["int1"] = EHTokInt1; - (*KeywordMap)["int2"] = EHTokInt2; - (*KeywordMap)["int3"] = EHTokInt3; - (*KeywordMap)["int4"] = EHTokInt4; - (*KeywordMap)["double1"] = EHTokDouble1; - (*KeywordMap)["double2"] = EHTokDouble2; - (*KeywordMap)["double3"] = EHTokDouble3; - (*KeywordMap)["double4"] = EHTokDouble4; - (*KeywordMap)["uint1"] = EHTokUint1; - (*KeywordMap)["uint2"] = EHTokUint2; - (*KeywordMap)["uint3"] = EHTokUint3; - (*KeywordMap)["uint4"] = EHTokUint4; - - (*KeywordMap)["half1"] = EHTokHalf1; - (*KeywordMap)["half2"] = EHTokHalf2; - (*KeywordMap)["half3"] = EHTokHalf3; - (*KeywordMap)["half4"] = EHTokHalf4; - (*KeywordMap)["min16float1"] = EHTokMin16float1; - (*KeywordMap)["min16float2"] = EHTokMin16float2; - (*KeywordMap)["min16float3"] = EHTokMin16float3; - (*KeywordMap)["min16float4"] = EHTokMin16float4; - (*KeywordMap)["min10float1"] = EHTokMin10float1; - (*KeywordMap)["min10float2"] = EHTokMin10float2; - (*KeywordMap)["min10float3"] = EHTokMin10float3; - (*KeywordMap)["min10float4"] = EHTokMin10float4; - (*KeywordMap)["min16int1"] = EHTokMin16int1; - (*KeywordMap)["min16int2"] = EHTokMin16int2; - (*KeywordMap)["min16int3"] = EHTokMin16int3; - (*KeywordMap)["min16int4"] = EHTokMin16int4; - (*KeywordMap)["min12int1"] = EHTokMin12int1; - (*KeywordMap)["min12int2"] = EHTokMin12int2; - (*KeywordMap)["min12int3"] = EHTokMin12int3; - (*KeywordMap)["min12int4"] = EHTokMin12int4; - (*KeywordMap)["min16uint1"] = EHTokMin16uint1; - (*KeywordMap)["min16uint2"] = EHTokMin16uint2; - (*KeywordMap)["min16uint3"] = EHTokMin16uint3; - (*KeywordMap)["min16uint4"] = EHTokMin16uint4; - - (*KeywordMap)["bool1x1"] = EHTokBool1x1; - (*KeywordMap)["bool1x2"] = EHTokBool1x2; - (*KeywordMap)["bool1x3"] = EHTokBool1x3; - (*KeywordMap)["bool1x4"] = EHTokBool1x4; - (*KeywordMap)["bool2x1"] = EHTokBool2x1; - (*KeywordMap)["bool2x2"] = EHTokBool2x2; - (*KeywordMap)["bool2x3"] = EHTokBool2x3; - (*KeywordMap)["bool2x4"] = EHTokBool2x4; - (*KeywordMap)["bool3x1"] = EHTokBool3x1; - (*KeywordMap)["bool3x2"] = EHTokBool3x2; - (*KeywordMap)["bool3x3"] = EHTokBool3x3; - (*KeywordMap)["bool3x4"] = EHTokBool3x4; - (*KeywordMap)["bool4x1"] = EHTokBool4x1; - (*KeywordMap)["bool4x2"] = EHTokBool4x2; - (*KeywordMap)["bool4x3"] = EHTokBool4x3; - (*KeywordMap)["bool4x4"] = EHTokBool4x4; - (*KeywordMap)["int1x1"] = EHTokInt1x1; - (*KeywordMap)["int1x2"] = EHTokInt1x2; - (*KeywordMap)["int1x3"] = EHTokInt1x3; - (*KeywordMap)["int1x4"] = EHTokInt1x4; - (*KeywordMap)["int2x1"] = EHTokInt2x1; - (*KeywordMap)["int2x2"] = EHTokInt2x2; - (*KeywordMap)["int2x3"] = EHTokInt2x3; - (*KeywordMap)["int2x4"] = EHTokInt2x4; - (*KeywordMap)["int3x1"] = EHTokInt3x1; - (*KeywordMap)["int3x2"] = EHTokInt3x2; - (*KeywordMap)["int3x3"] = EHTokInt3x3; - (*KeywordMap)["int3x4"] = EHTokInt3x4; - (*KeywordMap)["int4x1"] = EHTokInt4x1; - (*KeywordMap)["int4x2"] = EHTokInt4x2; - (*KeywordMap)["int4x3"] = EHTokInt4x3; - (*KeywordMap)["int4x4"] = EHTokInt4x4; - (*KeywordMap)["uint1x1"] = EHTokUint1x1; - (*KeywordMap)["uint1x2"] = EHTokUint1x2; - (*KeywordMap)["uint1x3"] = EHTokUint1x3; - (*KeywordMap)["uint1x4"] = EHTokUint1x4; - (*KeywordMap)["uint2x1"] = EHTokUint2x1; - (*KeywordMap)["uint2x2"] = EHTokUint2x2; - (*KeywordMap)["uint2x3"] = EHTokUint2x3; - (*KeywordMap)["uint2x4"] = EHTokUint2x4; - (*KeywordMap)["uint3x1"] = EHTokUint3x1; - (*KeywordMap)["uint3x2"] = EHTokUint3x2; - (*KeywordMap)["uint3x3"] = EHTokUint3x3; - (*KeywordMap)["uint3x4"] = EHTokUint3x4; - (*KeywordMap)["uint4x1"] = EHTokUint4x1; - (*KeywordMap)["uint4x2"] = EHTokUint4x2; - (*KeywordMap)["uint4x3"] = EHTokUint4x3; - (*KeywordMap)["uint4x4"] = EHTokUint4x4; - (*KeywordMap)["bool1x1"] = EHTokBool1x1; - (*KeywordMap)["bool1x2"] = EHTokBool1x2; - (*KeywordMap)["bool1x3"] = EHTokBool1x3; - (*KeywordMap)["bool1x4"] = EHTokBool1x4; - (*KeywordMap)["bool2x1"] = EHTokBool2x1; - (*KeywordMap)["bool2x2"] = EHTokBool2x2; - (*KeywordMap)["bool2x3"] = EHTokBool2x3; - (*KeywordMap)["bool2x4"] = EHTokBool2x4; - (*KeywordMap)["bool3x1"] = EHTokBool3x1; - (*KeywordMap)["bool3x2"] = EHTokBool3x2; - (*KeywordMap)["bool3x3"] = EHTokBool3x3; - (*KeywordMap)["bool3x4"] = EHTokBool3x4; - (*KeywordMap)["bool4x1"] = EHTokBool4x1; - (*KeywordMap)["bool4x2"] = EHTokBool4x2; - (*KeywordMap)["bool4x3"] = EHTokBool4x3; - (*KeywordMap)["bool4x4"] = EHTokBool4x4; - (*KeywordMap)["float1x1"] = EHTokFloat1x1; - (*KeywordMap)["float1x2"] = EHTokFloat1x2; - (*KeywordMap)["float1x3"] = EHTokFloat1x3; - (*KeywordMap)["float1x4"] = EHTokFloat1x4; - (*KeywordMap)["float2x1"] = EHTokFloat2x1; - (*KeywordMap)["float2x2"] = EHTokFloat2x2; - (*KeywordMap)["float2x3"] = EHTokFloat2x3; - (*KeywordMap)["float2x4"] = EHTokFloat2x4; - (*KeywordMap)["float3x1"] = EHTokFloat3x1; - (*KeywordMap)["float3x2"] = EHTokFloat3x2; - (*KeywordMap)["float3x3"] = EHTokFloat3x3; - (*KeywordMap)["float3x4"] = EHTokFloat3x4; - (*KeywordMap)["float4x1"] = EHTokFloat4x1; - (*KeywordMap)["float4x2"] = EHTokFloat4x2; - (*KeywordMap)["float4x3"] = EHTokFloat4x3; - (*KeywordMap)["float4x4"] = EHTokFloat4x4; - (*KeywordMap)["half1x1"] = EHTokHalf1x1; - (*KeywordMap)["half1x2"] = EHTokHalf1x2; - (*KeywordMap)["half1x3"] = EHTokHalf1x3; - (*KeywordMap)["half1x4"] = EHTokHalf1x4; - (*KeywordMap)["half2x1"] = EHTokHalf2x1; - (*KeywordMap)["half2x2"] = EHTokHalf2x2; - (*KeywordMap)["half2x3"] = EHTokHalf2x3; - (*KeywordMap)["half2x4"] = EHTokHalf2x4; - (*KeywordMap)["half3x1"] = EHTokHalf3x1; - (*KeywordMap)["half3x2"] = EHTokHalf3x2; - (*KeywordMap)["half3x3"] = EHTokHalf3x3; - (*KeywordMap)["half3x4"] = EHTokHalf3x4; - (*KeywordMap)["half4x1"] = EHTokHalf4x1; - (*KeywordMap)["half4x2"] = EHTokHalf4x2; - (*KeywordMap)["half4x3"] = EHTokHalf4x3; - (*KeywordMap)["half4x4"] = EHTokHalf4x4; - (*KeywordMap)["double1x1"] = EHTokDouble1x1; - (*KeywordMap)["double1x2"] = EHTokDouble1x2; - (*KeywordMap)["double1x3"] = EHTokDouble1x3; - (*KeywordMap)["double1x4"] = EHTokDouble1x4; - (*KeywordMap)["double2x1"] = EHTokDouble2x1; - (*KeywordMap)["double2x2"] = EHTokDouble2x2; - (*KeywordMap)["double2x3"] = EHTokDouble2x3; - (*KeywordMap)["double2x4"] = EHTokDouble2x4; - (*KeywordMap)["double3x1"] = EHTokDouble3x1; - (*KeywordMap)["double3x2"] = EHTokDouble3x2; - (*KeywordMap)["double3x3"] = EHTokDouble3x3; - (*KeywordMap)["double3x4"] = EHTokDouble3x4; - (*KeywordMap)["double4x1"] = EHTokDouble4x1; - (*KeywordMap)["double4x2"] = EHTokDouble4x2; - (*KeywordMap)["double4x3"] = EHTokDouble4x3; - (*KeywordMap)["double4x4"] = EHTokDouble4x4; - - (*KeywordMap)["sampler"] = EHTokSampler; - (*KeywordMap)["sampler1D"] = EHTokSampler1d; - (*KeywordMap)["sampler2D"] = EHTokSampler2d; - (*KeywordMap)["sampler3D"] = EHTokSampler3d; - (*KeywordMap)["samplerCUBE"] = EHTokSamplerCube; - (*KeywordMap)["sampler_state"] = EHTokSamplerState; - (*KeywordMap)["SamplerState"] = EHTokSamplerState; - (*KeywordMap)["SamplerComparisonState"] = EHTokSamplerComparisonState; - (*KeywordMap)["texture"] = EHTokTexture; - (*KeywordMap)["Texture1D"] = EHTokTexture1d; - (*KeywordMap)["Texture1DArray"] = EHTokTexture1darray; - (*KeywordMap)["Texture2D"] = EHTokTexture2d; - (*KeywordMap)["Texture2DArray"] = EHTokTexture2darray; - (*KeywordMap)["Texture3D"] = EHTokTexture3d; - (*KeywordMap)["TextureCube"] = EHTokTextureCube; - (*KeywordMap)["TextureCubeArray"] = EHTokTextureCubearray; - (*KeywordMap)["Texture2DMS"] = EHTokTexture2DMS; - (*KeywordMap)["Texture2DMSArray"] = EHTokTexture2DMSarray; - (*KeywordMap)["RWTexture1D"] = EHTokRWTexture1d; - (*KeywordMap)["RWTexture1DArray"] = EHTokRWTexture1darray; - (*KeywordMap)["RWTexture2D"] = EHTokRWTexture2d; - (*KeywordMap)["RWTexture2DArray"] = EHTokRWTexture2darray; - (*KeywordMap)["RWTexture3D"] = EHTokRWTexture3d; - (*KeywordMap)["RWBuffer"] = EHTokRWBuffer; - (*KeywordMap)["SubpassInput"] = EHTokSubpassInput; - (*KeywordMap)["SubpassInputMS"] = EHTokSubpassInputMS; - - (*KeywordMap)["AppendStructuredBuffer"] = EHTokAppendStructuredBuffer; - (*KeywordMap)["ByteAddressBuffer"] = EHTokByteAddressBuffer; - (*KeywordMap)["ConsumeStructuredBuffer"] = EHTokConsumeStructuredBuffer; - (*KeywordMap)["RWByteAddressBuffer"] = EHTokRWByteAddressBuffer; - (*KeywordMap)["RWStructuredBuffer"] = EHTokRWStructuredBuffer; - (*KeywordMap)["StructuredBuffer"] = EHTokStructuredBuffer; - (*KeywordMap)["TextureBuffer"] = EHTokTextureBuffer; - - (*KeywordMap)["class"] = EHTokClass; - (*KeywordMap)["struct"] = EHTokStruct; - (*KeywordMap)["cbuffer"] = EHTokCBuffer; - (*KeywordMap)["ConstantBuffer"] = EHTokConstantBuffer; - (*KeywordMap)["tbuffer"] = EHTokTBuffer; - (*KeywordMap)["typedef"] = EHTokTypedef; - (*KeywordMap)["this"] = EHTokThis; - (*KeywordMap)["namespace"] = EHTokNamespace; - - (*KeywordMap)["true"] = EHTokBoolConstant; - (*KeywordMap)["false"] = EHTokBoolConstant; - - (*KeywordMap)["for"] = EHTokFor; - (*KeywordMap)["do"] = EHTokDo; - (*KeywordMap)["while"] = EHTokWhile; - (*KeywordMap)["break"] = EHTokBreak; - (*KeywordMap)["continue"] = EHTokContinue; - (*KeywordMap)["if"] = EHTokIf; - (*KeywordMap)["else"] = EHTokElse; - (*KeywordMap)["discard"] = EHTokDiscard; - (*KeywordMap)["return"] = EHTokReturn; - (*KeywordMap)["switch"] = EHTokSwitch; - (*KeywordMap)["case"] = EHTokCase; - (*KeywordMap)["default"] = EHTokDefault; - - // TODO: get correct set here - ReservedSet = new std::unordered_set; - - ReservedSet->insert("auto"); - ReservedSet->insert("catch"); - ReservedSet->insert("char"); - ReservedSet->insert("const_cast"); - ReservedSet->insert("enum"); - ReservedSet->insert("explicit"); - ReservedSet->insert("friend"); - ReservedSet->insert("goto"); - ReservedSet->insert("long"); - ReservedSet->insert("mutable"); - ReservedSet->insert("new"); - ReservedSet->insert("operator"); - ReservedSet->insert("private"); - ReservedSet->insert("protected"); - ReservedSet->insert("public"); - ReservedSet->insert("reinterpret_cast"); - ReservedSet->insert("short"); - ReservedSet->insert("signed"); - ReservedSet->insert("sizeof"); - ReservedSet->insert("static_cast"); - ReservedSet->insert("template"); - ReservedSet->insert("throw"); - ReservedSet->insert("try"); - ReservedSet->insert("typename"); - ReservedSet->insert("union"); - ReservedSet->insert("unsigned"); - ReservedSet->insert("using"); - ReservedSet->insert("virtual"); - - SemanticMap = new std::unordered_map; +const std::unordered_set ReservedSet { + "auto", + "catch", + "char", + "const_cast", + "enum", + "explicit", + "friend", + "goto", + "long", + "mutable", + "new", + "operator", + "private", + "protected", + "public", + "reinterpret_cast", + "short", + "signed", + "sizeof", + "static_cast", + "template", + "throw", + "try", + "typename", + "union", + "unsigned", + "using", + "virtual", +}; +std::unordered_map SemanticMap { // in DX9, all outputs had to have a semantic associated with them, that was either consumed // by the system or was a specific register assignment @@ -414,48 +476,41 @@ void HlslScanContext::fillInKeywordMap() // Also, in DX10 if a SV value is present as the input of a stage, but isn't appropriate for that // stage, it would just be ignored as it is likely there as part of an output struct from one stage // to the next - bool bParseDX9 = false; - if (bParseDX9) { - (*SemanticMap)["PSIZE"] = EbvPointSize; - (*SemanticMap)["FOG"] = EbvFogFragCoord; - (*SemanticMap)["DEPTH"] = EbvFragDepth; - (*SemanticMap)["VFACE"] = EbvFace; - (*SemanticMap)["VPOS"] = EbvFragCoord; - } - - (*SemanticMap)["SV_POSITION"] = EbvPosition; - (*SemanticMap)["SV_VERTEXID"] = EbvVertexIndex; - (*SemanticMap)["SV_VIEWPORTARRAYINDEX"] = EbvViewportIndex; - (*SemanticMap)["SV_TESSFACTOR"] = EbvTessLevelOuter; - (*SemanticMap)["SV_SAMPLEINDEX"] = EbvSampleId; - (*SemanticMap)["SV_RENDERTARGETARRAYINDEX"] = EbvLayer; - (*SemanticMap)["SV_PRIMITIVEID"] = EbvPrimitiveId; - (*SemanticMap)["SV_OUTPUTCONTROLPOINTID"] = EbvInvocationId; - (*SemanticMap)["SV_ISFRONTFACE"] = EbvFace; - (*SemanticMap)["SV_INSTANCEID"] = EbvInstanceIndex; - (*SemanticMap)["SV_INSIDETESSFACTOR"] = EbvTessLevelInner; - (*SemanticMap)["SV_GSINSTANCEID"] = EbvInvocationId; - (*SemanticMap)["SV_DISPATCHTHREADID"] = EbvGlobalInvocationId; - (*SemanticMap)["SV_GROUPTHREADID"] = EbvLocalInvocationId; - (*SemanticMap)["SV_GROUPINDEX"] = EbvLocalInvocationIndex; - (*SemanticMap)["SV_GROUPID"] = EbvWorkGroupId; - (*SemanticMap)["SV_DOMAINLOCATION"] = EbvTessCoord; - (*SemanticMap)["SV_DEPTH"] = EbvFragDepth; - (*SemanticMap)["SV_COVERAGE"] = EbvSampleMask; - (*SemanticMap)["SV_DEPTHGREATEREQUAL"] = EbvFragDepthGreater; - (*SemanticMap)["SV_DEPTHLESSEQUAL"] = EbvFragDepthLesser; - (*SemanticMap)["SV_STENCILREF"] = EbvFragStencilRef; +#if 0 + (*SemanticMap)["PSIZE"] = EbvPointSize; + (*SemanticMap)["FOG"] = EbvFogFragCoord; + (*SemanticMap)["DEPTH"] = EbvFragDepth; + (*SemanticMap)["VFACE"] = EbvFace; + (*SemanticMap)["VPOS"] = EbvFragCoord; +#endif + + {"SV_POSITION",glslang::EbvPosition}, + {"SV_VERTEXID",glslang::EbvVertexIndex}, + {"SV_VIEWPORTARRAYINDEX",glslang::EbvViewportIndex}, + {"SV_TESSFACTOR",glslang::EbvTessLevelOuter}, + {"SV_SAMPLEINDEX",glslang::EbvSampleId}, + {"SV_RENDERTARGETARRAYINDEX",glslang::EbvLayer}, + {"SV_PRIMITIVEID",glslang::EbvPrimitiveId}, + {"SV_OUTPUTCONTROLPOINTID",glslang::EbvInvocationId}, + {"SV_ISFRONTFACE",glslang::EbvFace}, + {"SV_VIEWID",glslang::EbvViewIndex}, + {"SV_INSTANCEID",glslang::EbvInstanceIndex}, + {"SV_INSIDETESSFACTOR",glslang::EbvTessLevelInner}, + {"SV_GSINSTANCEID",glslang::EbvInvocationId}, + {"SV_DISPATCHTHREADID",glslang::EbvGlobalInvocationId}, + {"SV_GROUPTHREADID",glslang::EbvLocalInvocationId}, + {"SV_GROUPINDEX",glslang::EbvLocalInvocationIndex}, + {"SV_GROUPID",glslang::EbvWorkGroupId}, + {"SV_DOMAINLOCATION",glslang::EbvTessCoord}, + {"SV_DEPTH",glslang::EbvFragDepth}, + {"SV_COVERAGE",glslang::EbvSampleMask}, + {"SV_DEPTHGREATEREQUAL",glslang::EbvFragDepthGreater}, + {"SV_DEPTHLESSEQUAL",glslang::EbvFragDepthLesser}, + {"SV_STENCILREF", glslang::EbvFragStencilRef}, +}; } -void HlslScanContext::deleteKeywordMap() -{ - delete KeywordMap; - KeywordMap = nullptr; - delete ReservedSet; - ReservedSet = nullptr; - delete SemanticMap; - SemanticMap = nullptr; -} +namespace glslang { // Wrapper for tokenizeClass() to get everything inside the token. void HlslScanContext::tokenize(HlslToken& token) @@ -466,8 +521,8 @@ void HlslScanContext::tokenize(HlslToken& token) glslang::TBuiltInVariable HlslScanContext::mapSemantic(const char* upperCase) { - auto it = SemanticMap->find(upperCase); - if (it != SemanticMap->end()) + auto it = SemanticMap.find(upperCase); + if (it != SemanticMap.end()) return it->second; else return glslang::EbvNone; @@ -583,11 +638,11 @@ EHlslTokenClass HlslScanContext::tokenizeClass(HlslToken& token) EHlslTokenClass HlslScanContext::tokenizeIdentifier() { - if (ReservedSet->find(tokenText) != ReservedSet->end()) + if (ReservedSet.find(tokenText) != ReservedSet.end()) return reservedWord(); - auto it = KeywordMap->find(tokenText); - if (it == KeywordMap->end()) { + auto it = KeywordMap.find(tokenText); + if (it == KeywordMap.end()) { // Should have an identifier of some sort return identifierOrType(); } @@ -806,6 +861,86 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier() case EHTokDouble4x2: case EHTokDouble4x3: case EHTokDouble4x4: + case EHTokMin16float1x1: + case EHTokMin16float1x2: + case EHTokMin16float1x3: + case EHTokMin16float1x4: + case EHTokMin16float2x1: + case EHTokMin16float2x2: + case EHTokMin16float2x3: + case EHTokMin16float2x4: + case EHTokMin16float3x1: + case EHTokMin16float3x2: + case EHTokMin16float3x3: + case EHTokMin16float3x4: + case EHTokMin16float4x1: + case EHTokMin16float4x2: + case EHTokMin16float4x3: + case EHTokMin16float4x4: + case EHTokMin10float1x1: + case EHTokMin10float1x2: + case EHTokMin10float1x3: + case EHTokMin10float1x4: + case EHTokMin10float2x1: + case EHTokMin10float2x2: + case EHTokMin10float2x3: + case EHTokMin10float2x4: + case EHTokMin10float3x1: + case EHTokMin10float3x2: + case EHTokMin10float3x3: + case EHTokMin10float3x4: + case EHTokMin10float4x1: + case EHTokMin10float4x2: + case EHTokMin10float4x3: + case EHTokMin10float4x4: + case EHTokMin16int1x1: + case EHTokMin16int1x2: + case EHTokMin16int1x3: + case EHTokMin16int1x4: + case EHTokMin16int2x1: + case EHTokMin16int2x2: + case EHTokMin16int2x3: + case EHTokMin16int2x4: + case EHTokMin16int3x1: + case EHTokMin16int3x2: + case EHTokMin16int3x3: + case EHTokMin16int3x4: + case EHTokMin16int4x1: + case EHTokMin16int4x2: + case EHTokMin16int4x3: + case EHTokMin16int4x4: + case EHTokMin12int1x1: + case EHTokMin12int1x2: + case EHTokMin12int1x3: + case EHTokMin12int1x4: + case EHTokMin12int2x1: + case EHTokMin12int2x2: + case EHTokMin12int2x3: + case EHTokMin12int2x4: + case EHTokMin12int3x1: + case EHTokMin12int3x2: + case EHTokMin12int3x3: + case EHTokMin12int3x4: + case EHTokMin12int4x1: + case EHTokMin12int4x2: + case EHTokMin12int4x3: + case EHTokMin12int4x4: + case EHTokMin16uint1x1: + case EHTokMin16uint1x2: + case EHTokMin16uint1x3: + case EHTokMin16uint1x4: + case EHTokMin16uint2x1: + case EHTokMin16uint2x2: + case EHTokMin16uint2x3: + case EHTokMin16uint2x4: + case EHTokMin16uint3x1: + case EHTokMin16uint3x2: + case EHTokMin16uint3x3: + case EHTokMin16uint3x4: + case EHTokMin16uint4x1: + case EHTokMin16uint4x2: + case EHTokMin16uint4x3: + case EHTokMin16uint4x4: return keyword; // texturing types diff --git a/glslang/HLSL/hlslTokens.h b/glslang/HLSL/hlslTokens.h index 4426bccecb..a7c129907f 100644 --- a/glslang/HLSL/hlslTokens.h +++ b/glslang/HLSL/hlslTokens.h @@ -249,6 +249,86 @@ enum EHlslTokenClass { EHTokDouble4x2, EHTokDouble4x3, EHTokDouble4x4, + EHTokMin16float1x1, + EHTokMin16float1x2, + EHTokMin16float1x3, + EHTokMin16float1x4, + EHTokMin16float2x1, + EHTokMin16float2x2, + EHTokMin16float2x3, + EHTokMin16float2x4, + EHTokMin16float3x1, + EHTokMin16float3x2, + EHTokMin16float3x3, + EHTokMin16float3x4, + EHTokMin16float4x1, + EHTokMin16float4x2, + EHTokMin16float4x3, + EHTokMin16float4x4, + EHTokMin10float1x1, + EHTokMin10float1x2, + EHTokMin10float1x3, + EHTokMin10float1x4, + EHTokMin10float2x1, + EHTokMin10float2x2, + EHTokMin10float2x3, + EHTokMin10float2x4, + EHTokMin10float3x1, + EHTokMin10float3x2, + EHTokMin10float3x3, + EHTokMin10float3x4, + EHTokMin10float4x1, + EHTokMin10float4x2, + EHTokMin10float4x3, + EHTokMin10float4x4, + EHTokMin16int1x1, + EHTokMin16int1x2, + EHTokMin16int1x3, + EHTokMin16int1x4, + EHTokMin16int2x1, + EHTokMin16int2x2, + EHTokMin16int2x3, + EHTokMin16int2x4, + EHTokMin16int3x1, + EHTokMin16int3x2, + EHTokMin16int3x3, + EHTokMin16int3x4, + EHTokMin16int4x1, + EHTokMin16int4x2, + EHTokMin16int4x3, + EHTokMin16int4x4, + EHTokMin12int1x1, + EHTokMin12int1x2, + EHTokMin12int1x3, + EHTokMin12int1x4, + EHTokMin12int2x1, + EHTokMin12int2x2, + EHTokMin12int2x3, + EHTokMin12int2x4, + EHTokMin12int3x1, + EHTokMin12int3x2, + EHTokMin12int3x3, + EHTokMin12int3x4, + EHTokMin12int4x1, + EHTokMin12int4x2, + EHTokMin12int4x3, + EHTokMin12int4x4, + EHTokMin16uint1x1, + EHTokMin16uint1x2, + EHTokMin16uint1x3, + EHTokMin16uint1x4, + EHTokMin16uint2x1, + EHTokMin16uint2x2, + EHTokMin16uint2x3, + EHTokMin16uint2x4, + EHTokMin16uint3x1, + EHTokMin16uint3x2, + EHTokMin16uint3x3, + EHTokMin16uint3x4, + EHTokMin16uint4x1, + EHTokMin16uint4x2, + EHTokMin16uint4x3, + EHTokMin16uint4x4, // texturing types EHTokSampler, diff --git a/glslang/HLSL/pch.h b/glslang/HLSL/pch.h index 465e7c14f8..f51efacc6d 100644 --- a/glslang/HLSL/pch.h +++ b/glslang/HLSL/pch.h @@ -42,8 +42,6 @@ #include "../MachineIndependent/Scan.h" #include "../MachineIndependent/preprocessor/PpContext.h" -#include "../OSDependent/osinclude.h" - #include #include #include diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h index c8203c2232..0ac526bfb0 100644 --- a/glslang/Include/BaseTypes.h +++ b/glslang/Include/BaseTypes.h @@ -65,10 +65,10 @@ enum TBasicType { EbtAccStruct, EbtReference, EbtRayQuery, -#ifndef GLSLANG_WEB + EbtHitObjectNV, + EbtCoopmat, // SPIR-V type defined by spirv_type EbtSpirvType, -#endif // HLSL types that live only temporarily. EbtString, @@ -95,15 +95,16 @@ enum TStorageQualifier { EvqUniform, // read only, shared with app EvqBuffer, // read/write, shared with app EvqShared, // compute shader's read/write 'shared' qualifier -#ifndef GLSLANG_WEB EvqSpirvStorageClass, // spirv_storage_class -#endif EvqPayload, EvqPayloadIn, EvqHitAttr, EvqCallableData, EvqCallableDataIn, + EvqHitObjectAttrNV, + + EvqtaskPayloadSharedEXT, // parameters EvqIn, // also, for 'in' in the grammar before we know if it's a pipeline input or an 'in' parameter @@ -128,6 +129,9 @@ enum TStorageQualifier { // built-ins written by fragment shader EvqFragColor, EvqFragDepth, + EvqFragStencil, + + EvqTileImageEXT, // end of list EvqLast @@ -263,7 +267,7 @@ enum TBuiltInVariable { EbvObjectRayDirection, EbvRayTmin, EbvRayTmax, - EbvHitT, + EbvCullMask, EbvHitKind, EbvObjectToWorld, EbvObjectToWorld3x4, @@ -274,6 +278,8 @@ enum TBuiltInVariable { // barycentrics EbvBaryCoordNV, EbvBaryCoordNoPerspNV, + EbvBaryCoordEXT, + EbvBaryCoordNoPerspEXT, // mesh shaders EbvTaskCountNV, EbvPrimitiveCountNV, @@ -284,6 +290,17 @@ enum TBuiltInVariable { EbvMeshViewCountNV, EbvMeshViewIndicesNV, + EbvMicroTrianglePositionNV, + EbvMicroTriangleBaryNV, + EbvHitKindFrontFacingMicroTriangleNV, + EbvHitKindBackFacingMicroTriangleNV, + + //GL_EXT_mesh_shader + EbvPrimitivePointIndicesEXT, + EbvPrimitiveLineIndicesEXT, + EbvPrimitiveTriangleIndicesEXT, + EbvCullPrimitiveEXT, + // sm builtins EbvWarpsPerSM, EbvSMCount, @@ -305,6 +322,15 @@ enum TBuiltInVariable { EbvByteAddressBuffer, EbvRWByteAddressBuffer, + // ARM specific core builtins + EbvCoreCountARM, + EbvCoreIDARM, + EbvCoreMaxIDARM, + EbvWarpIDARM, + EbvWarpMaxIDARM, + + EbvPositionFetch, + EbvLast }; @@ -317,10 +343,6 @@ enum TPrecisionQualifier { EpqHigh }; -#ifdef GLSLANG_WEB -__inline const char* GetStorageQualifierString(TStorageQualifier q) { return ""; } -__inline const char* GetPrecisionQualifierString(TPrecisionQualifier p) { return ""; } -#else // These will show up in error messages __inline const char* GetStorageQualifierString(TStorageQualifier q) { @@ -329,9 +351,7 @@ __inline const char* GetStorageQualifierString(TStorageQualifier q) case EvqGlobal: return "global"; break; case EvqConst: return "const"; break; case EvqConstReadOnly: return "const (read only)"; break; -#ifndef GLSLANG_WEB case EvqSpirvStorageClass: return "spirv_storage_class"; break; -#endif case EvqVaryingIn: return "in"; break; case EvqVaryingOut: return "out"; break; case EvqUniform: return "uniform"; break; @@ -350,11 +370,14 @@ __inline const char* GetStorageQualifierString(TStorageQualifier q) case EvqPointCoord: return "gl_PointCoord"; break; case EvqFragColor: return "fragColor"; break; case EvqFragDepth: return "gl_FragDepth"; break; + case EvqFragStencil: return "gl_FragStencilRefARB"; break; case EvqPayload: return "rayPayloadNV"; break; case EvqPayloadIn: return "rayPayloadInNV"; break; case EvqHitAttr: return "hitAttributeNV"; break; case EvqCallableData: return "callableDataNV"; break; case EvqCallableDataIn: return "callableDataInNV"; break; + case EvqtaskPayloadSharedEXT: return "taskPayloadSharedEXT"; break; + case EvqHitObjectAttrNV:return "hitObjectAttributeNV"; break; default: return "unknown qualifier"; } } @@ -471,15 +494,16 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvObjectRayDirection: return "ObjectRayDirectionNV"; case EbvRayTmin: return "ObjectRayTminNV"; case EbvRayTmax: return "ObjectRayTmaxNV"; - case EbvHitT: return "HitTNV"; case EbvHitKind: return "HitKindNV"; case EbvIncomingRayFlags: return "IncomingRayFlagsNV"; case EbvObjectToWorld: return "ObjectToWorldNV"; case EbvWorldToObject: return "WorldToObjectNV"; case EbvCurrentRayTimeNV: return "CurrentRayTimeNV"; - case EbvBaryCoordNV: return "BaryCoordNV"; - case EbvBaryCoordNoPerspNV: return "BaryCoordNoPerspNV"; + case EbvBaryCoordEXT: + case EbvBaryCoordNV: return "BaryCoordKHR"; + case EbvBaryCoordNoPerspEXT: + case EbvBaryCoordNoPerspNV: return "BaryCoordNoPerspKHR"; case EbvTaskCountNV: return "TaskCountNV"; case EbvPrimitiveCountNV: return "PrimitiveCountNV"; @@ -489,6 +513,11 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvLayerPerViewNV: return "LayerPerViewNV"; case EbvMeshViewCountNV: return "MeshViewCountNV"; case EbvMeshViewIndicesNV: return "MeshViewIndicesNV"; + // GL_EXT_mesh_shader + case EbvPrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT"; + case EbvPrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT"; + case EbvPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT"; + case EbvCullPrimitiveEXT: return "CullPrimitiveEXT"; case EbvWarpsPerSM: return "WarpsPerSMNV"; case EbvSMCount: return "SMCountNV"; @@ -498,6 +527,9 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvShadingRateKHR: return "ShadingRateKHR"; case EbvPrimitiveShadingRateKHR: return "PrimitiveShadingRateKHR"; + case EbvHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV"; + case EbvHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV"; + default: return "unknown built-in variable"; } } @@ -512,7 +544,6 @@ __inline const char* GetPrecisionQualifierString(TPrecisionQualifier p) default: return "unknown precision qualifier"; } } -#endif __inline bool isTypeSignedInt(TBasicType type) { diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index 9042a1aa27..0c14260533 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -44,6 +44,7 @@ #else #include #endif +#include #include #include #include @@ -54,7 +55,7 @@ #include #include -#if defined(__ANDROID__) || (defined(_MSC_VER) && _MSC_VER < 1700) +#if defined(__ANDROID__) #include namespace std { template @@ -66,7 +67,7 @@ std::string to_string(const T& val) { } #endif -#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || MINGW_HAS_SECURE_API +#if defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API #include #ifndef snprintf #define snprintf sprintf_s @@ -82,22 +83,6 @@ std::string to_string(const T& val) { #define UINT_PTR uintptr_t #endif -#if defined(_MSC_VER) && _MSC_VER < 1800 - #include - inline long long int strtoll (const char* str, char** endptr, int base) - { - return _strtoi64(str, endptr, base); - } - inline unsigned long long int strtoull (const char* str, char** endptr, int base) - { - return _strtoui64(str, endptr, base); - } - inline long long int atoll (const char* str) - { - return strtoll(str, NULL, 10); - } -#endif - #if defined(_MSC_VER) #define strdup _strdup #endif @@ -109,6 +94,11 @@ std::string to_string(const T& val) { #pragma warning(disable : 4201) // nameless union #endif +// Allow compilation to WASI which does not support threads yet. +#ifdef __wasi__ +#define DISABLE_THREAD_SUPPORT +#endif + #include "PoolAlloc.h" // @@ -174,6 +164,11 @@ template inline T* NewPoolObject(T, int instances) return new(GetThreadPoolAllocator().allocate(instances * sizeof(T))) T[instances]; } +inline bool StartsWith(TString const &str, const char *prefix) +{ + return str.compare(0, strlen(prefix), prefix) == 0; +} + // // Pool allocator versions of vectors, lists, and maps // @@ -218,7 +213,7 @@ template T Max(const T a, const T b) { return a > b ? a : b; } // // Create a TString object from an integer. // -#if defined _MSC_VER || MINGW_HAS_SECURE_API +#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) inline const TString String(const int i, const int base = 10) { char text[16]; // 32 bit ints are at most 10 digits in base 10 @@ -307,34 +302,6 @@ template int IntLog2(T n) return result; } -inline bool IsInfinity(double x) { -#ifdef _MSC_VER - switch (_fpclass(x)) { - case _FPCLASS_NINF: - case _FPCLASS_PINF: - return true; - default: - return false; - } -#else - return std::isinf(x); -#endif -} - -inline bool IsNan(double x) { -#ifdef _MSC_VER - switch (_fpclass(x)) { - case _FPCLASS_SNAN: - case _FPCLASS_QNAN: - return true; - default: - return false; - } -#else - return std::isnan(x); -#endif -} - } // end namespace glslang #endif // _COMMON_INCLUDED_ diff --git a/glslang/Include/ConstantUnion.h b/glslang/Include/ConstantUnion.h index c4ffb85771..da4737b65a 100644 --- a/glslang/Include/ConstantUnion.h +++ b/glslang/Include/ConstantUnion.h @@ -234,7 +234,6 @@ class TConstUnion { break; -#ifndef GLSLANG_WEB case EbtInt16: if (constant.i16Const == i16Const) return true; @@ -265,7 +264,6 @@ class TConstUnion { return true; break; -#endif default: assert(false && "Default missing"); } @@ -347,7 +345,6 @@ class TConstUnion { return true; return false; -#ifndef GLSLANG_WEB case EbtInt8: if (i8Const > constant.i8Const) return true; @@ -378,7 +375,6 @@ class TConstUnion { return true; return false; -#endif default: assert(false && "Default missing"); return false; @@ -389,7 +385,6 @@ class TConstUnion { { assert(type == constant.type); switch (type) { -#ifndef GLSLANG_WEB case EbtInt8: if (i8Const < constant.i8Const) return true; @@ -419,7 +414,6 @@ class TConstUnion { return true; return false; -#endif case EbtDouble: if (dConst < constant.dConst) return true; @@ -449,14 +443,12 @@ class TConstUnion { case EbtInt: returnValue.setIConst(iConst + constant.iConst); break; case EbtUint: returnValue.setUConst(uConst + constant.uConst); break; case EbtDouble: returnValue.setDConst(dConst + constant.dConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setI8Const(i8Const + constant.i8Const); break; case EbtInt16: returnValue.setI16Const(i16Const + constant.i16Const); break; case EbtInt64: returnValue.setI64Const(i64Const + constant.i64Const); break; case EbtUint8: returnValue.setU8Const(u8Const + constant.u8Const); break; case EbtUint16: returnValue.setU16Const(u16Const + constant.u16Const); break; case EbtUint64: returnValue.setU64Const(u64Const + constant.u64Const); break; -#endif default: assert(false && "Default missing"); } @@ -471,14 +463,12 @@ class TConstUnion { case EbtInt: returnValue.setIConst(iConst - constant.iConst); break; case EbtUint: returnValue.setUConst(uConst - constant.uConst); break; case EbtDouble: returnValue.setDConst(dConst - constant.dConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setI8Const(i8Const - constant.i8Const); break; case EbtInt16: returnValue.setI16Const(i16Const - constant.i16Const); break; case EbtInt64: returnValue.setI64Const(i64Const - constant.i64Const); break; case EbtUint8: returnValue.setU8Const(u8Const - constant.u8Const); break; case EbtUint16: returnValue.setU16Const(u16Const - constant.u16Const); break; case EbtUint64: returnValue.setU64Const(u64Const - constant.u64Const); break; -#endif default: assert(false && "Default missing"); } @@ -493,14 +483,12 @@ class TConstUnion { case EbtInt: returnValue.setIConst(iConst * constant.iConst); break; case EbtUint: returnValue.setUConst(uConst * constant.uConst); break; case EbtDouble: returnValue.setDConst(dConst * constant.dConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setI8Const(i8Const * constant.i8Const); break; case EbtInt16: returnValue.setI16Const(i16Const * constant.i16Const); break; case EbtInt64: returnValue.setI64Const(i64Const * constant.i64Const); break; case EbtUint8: returnValue.setU8Const(u8Const * constant.u8Const); break; case EbtUint16: returnValue.setU16Const(u16Const * constant.u16Const); break; case EbtUint64: returnValue.setU64Const(u64Const * constant.u64Const); break; -#endif default: assert(false && "Default missing"); } @@ -514,14 +502,12 @@ class TConstUnion { switch (type) { case EbtInt: returnValue.setIConst(iConst % constant.iConst); break; case EbtUint: returnValue.setUConst(uConst % constant.uConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setI8Const(i8Const % constant.i8Const); break; - case EbtInt16: returnValue.setI8Const(i8Const % constant.i16Const); break; + case EbtInt16: returnValue.setI16Const(i16Const % constant.i16Const); break; case EbtInt64: returnValue.setI64Const(i64Const % constant.i64Const); break; case EbtUint8: returnValue.setU8Const(u8Const % constant.u8Const); break; case EbtUint16: returnValue.setU16Const(u16Const % constant.u16Const); break; case EbtUint64: returnValue.setU64Const(u64Const % constant.u64Const); break; -#endif default: assert(false && "Default missing"); } @@ -532,7 +518,6 @@ class TConstUnion { { TConstUnion returnValue; switch (type) { -#ifndef GLSLANG_WEB case EbtInt8: switch (constant.type) { case EbtInt8: returnValue.setI8Const(i8Const >> constant.i8Const); break; @@ -585,19 +570,16 @@ class TConstUnion { default: assert(false && "Default missing"); } break; -#endif case EbtInt: switch (constant.type) { case EbtInt: returnValue.setIConst(iConst >> constant.iConst); break; case EbtUint: returnValue.setIConst(iConst >> constant.uConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setIConst(iConst >> constant.i8Const); break; case EbtUint8: returnValue.setIConst(iConst >> constant.u8Const); break; case EbtInt16: returnValue.setIConst(iConst >> constant.i16Const); break; case EbtUint16: returnValue.setIConst(iConst >> constant.u16Const); break; case EbtInt64: returnValue.setIConst(iConst >> constant.i64Const); break; case EbtUint64: returnValue.setIConst(iConst >> constant.u64Const); break; -#endif default: assert(false && "Default missing"); } break; @@ -605,18 +587,15 @@ class TConstUnion { switch (constant.type) { case EbtInt: returnValue.setUConst(uConst >> constant.iConst); break; case EbtUint: returnValue.setUConst(uConst >> constant.uConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setUConst(uConst >> constant.i8Const); break; case EbtUint8: returnValue.setUConst(uConst >> constant.u8Const); break; case EbtInt16: returnValue.setUConst(uConst >> constant.i16Const); break; case EbtUint16: returnValue.setUConst(uConst >> constant.u16Const); break; case EbtInt64: returnValue.setUConst(uConst >> constant.i64Const); break; case EbtUint64: returnValue.setUConst(uConst >> constant.u64Const); break; -#endif default: assert(false && "Default missing"); } break; -#ifndef GLSLANG_WEB case EbtInt64: switch (constant.type) { case EbtInt8: returnValue.setI64Const(i64Const >> constant.i8Const); break; @@ -643,7 +622,6 @@ class TConstUnion { default: assert(false && "Default missing"); } break; -#endif default: assert(false && "Default missing"); } @@ -654,7 +632,6 @@ class TConstUnion { { TConstUnion returnValue; switch (type) { -#ifndef GLSLANG_WEB case EbtInt8: switch (constant.type) { case EbtInt8: returnValue.setI8Const(i8Const << constant.i8Const); break; @@ -733,19 +710,16 @@ class TConstUnion { default: assert(false && "Default missing"); } break; -#endif case EbtInt: switch (constant.type) { case EbtInt: returnValue.setIConst(iConst << constant.iConst); break; case EbtUint: returnValue.setIConst(iConst << constant.uConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setIConst(iConst << constant.i8Const); break; case EbtUint8: returnValue.setIConst(iConst << constant.u8Const); break; case EbtInt16: returnValue.setIConst(iConst << constant.i16Const); break; case EbtUint16: returnValue.setIConst(iConst << constant.u16Const); break; case EbtInt64: returnValue.setIConst(iConst << constant.i64Const); break; case EbtUint64: returnValue.setIConst(iConst << constant.u64Const); break; -#endif default: assert(false && "Default missing"); } break; @@ -753,14 +727,12 @@ class TConstUnion { switch (constant.type) { case EbtInt: returnValue.setUConst(uConst << constant.iConst); break; case EbtUint: returnValue.setUConst(uConst << constant.uConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setUConst(uConst << constant.i8Const); break; case EbtUint8: returnValue.setUConst(uConst << constant.u8Const); break; case EbtInt16: returnValue.setUConst(uConst << constant.i16Const); break; case EbtUint16: returnValue.setUConst(uConst << constant.u16Const); break; case EbtInt64: returnValue.setUConst(uConst << constant.i64Const); break; case EbtUint64: returnValue.setUConst(uConst << constant.u64Const); break; -#endif default: assert(false && "Default missing"); } break; @@ -777,14 +749,12 @@ class TConstUnion { switch (type) { case EbtInt: returnValue.setIConst(iConst & constant.iConst); break; case EbtUint: returnValue.setUConst(uConst & constant.uConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setI8Const(i8Const & constant.i8Const); break; case EbtUint8: returnValue.setU8Const(u8Const & constant.u8Const); break; case EbtInt16: returnValue.setI16Const(i16Const & constant.i16Const); break; case EbtUint16: returnValue.setU16Const(u16Const & constant.u16Const); break; case EbtInt64: returnValue.setI64Const(i64Const & constant.i64Const); break; case EbtUint64: returnValue.setU64Const(u64Const & constant.u64Const); break; -#endif default: assert(false && "Default missing"); } @@ -798,14 +768,12 @@ class TConstUnion { switch (type) { case EbtInt: returnValue.setIConst(iConst | constant.iConst); break; case EbtUint: returnValue.setUConst(uConst | constant.uConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setI8Const(i8Const | constant.i8Const); break; case EbtUint8: returnValue.setU8Const(u8Const | constant.u8Const); break; case EbtInt16: returnValue.setI16Const(i16Const | constant.i16Const); break; case EbtUint16: returnValue.setU16Const(u16Const | constant.u16Const); break; case EbtInt64: returnValue.setI64Const(i64Const | constant.i64Const); break; case EbtUint64: returnValue.setU64Const(u64Const | constant.u64Const); break; -#endif default: assert(false && "Default missing"); } @@ -819,14 +787,12 @@ class TConstUnion { switch (type) { case EbtInt: returnValue.setIConst(iConst ^ constant.iConst); break; case EbtUint: returnValue.setUConst(uConst ^ constant.uConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setI8Const(i8Const ^ constant.i8Const); break; case EbtUint8: returnValue.setU8Const(u8Const ^ constant.u8Const); break; case EbtInt16: returnValue.setI16Const(i16Const ^ constant.i16Const); break; case EbtUint16: returnValue.setU16Const(u16Const ^ constant.u16Const); break; case EbtInt64: returnValue.setI64Const(i64Const ^ constant.i64Const); break; case EbtUint64: returnValue.setU64Const(u64Const ^ constant.u64Const); break; -#endif default: assert(false && "Default missing"); } @@ -839,14 +805,12 @@ class TConstUnion { switch (type) { case EbtInt: returnValue.setIConst(~iConst); break; case EbtUint: returnValue.setUConst(~uConst); break; -#ifndef GLSLANG_WEB case EbtInt8: returnValue.setI8Const(~i8Const); break; case EbtUint8: returnValue.setU8Const(~u8Const); break; case EbtInt16: returnValue.setI16Const(~i16Const); break; case EbtUint16: returnValue.setU16Const(~u16Const); break; case EbtInt64: returnValue.setI64Const(~i64Const); break; case EbtUint64: returnValue.setU64Const(~u64Const); break; -#endif default: assert(false && "Default missing"); } diff --git a/glslang/Include/InfoSink.h b/glslang/Include/InfoSink.h index dceb603cff..262933941d 100644 --- a/glslang/Include/InfoSink.h +++ b/glslang/Include/InfoSink.h @@ -36,6 +36,7 @@ #define _INFOSINK_INCLUDED_ #include "../Include/Common.h" +#include #include namespace glslang { @@ -67,7 +68,7 @@ enum TOutputStream { // class TInfoSinkBase { public: - TInfoSinkBase() : outputStream(4) {} + TInfoSinkBase() : outputStream(4), shaderFileName(nullptr) {} void erase() { sink.erase(); } TInfoSinkBase& operator<<(const TPersistString& t) { append(t); return *this; } TInfoSinkBase& operator<<(char c) { append(1, c); return *this; } @@ -94,11 +95,26 @@ class TInfoSinkBase { default: append("UNKNOWN ERROR: "); break; } } - void location(const TSourceLoc& loc) { + void location(const TSourceLoc& loc, bool absolute = false, bool displayColumn = false) { const int maxSize = 24; char locText[maxSize]; - snprintf(locText, maxSize, ":%d", loc.line); - append(loc.getStringNameOrNum(false).c_str()); + if (displayColumn) { + snprintf(locText, maxSize, ":%d:%d", loc.line, loc.column); + } else { + snprintf(locText, maxSize, ":%d", loc.line); + } + + if(loc.getFilename() == nullptr && shaderFileName != nullptr && absolute) { + append(std::filesystem::absolute(shaderFileName).string()); + } else { + std::string location = loc.getStringNameOrNum(false); + if (absolute) { + append(std::filesystem::absolute(location).string()); + } else { + append(location); + } + } + append(locText); append(": "); } @@ -107,9 +123,11 @@ class TInfoSinkBase { append(s); append("\n"); } - void message(TPrefixType message, const char* s, const TSourceLoc& loc) { + void message(TPrefixType message, const char* s, const TSourceLoc& loc, bool absolute = false, + bool displayColumn = false) + { prefix(message); - location(loc); + location(loc, absolute, displayColumn); append(s); append("\n"); } @@ -119,6 +137,11 @@ class TInfoSinkBase { outputStream = output; } + void setShaderFileName(const char* file = nullptr) + { + shaderFileName = file; + } + protected: void append(const char* s); @@ -131,6 +154,7 @@ class TInfoSinkBase { void appendToStream(const char* s); TPersistString sink; int outputStream; + const char* shaderFileName; }; } // end namespace glslang diff --git a/glslang/Include/InitializeGlobals.h b/glslang/Include/InitializeGlobals.h index 95d0a40e99..b7fdd7aabc 100644 --- a/glslang/Include/InitializeGlobals.h +++ b/glslang/Include/InitializeGlobals.h @@ -37,7 +37,7 @@ namespace glslang { -bool InitializePoolIndex(); +inline bool InitializePoolIndex() { return true; } // DEPRECATED: No need to call } // end namespace glslang diff --git a/glslang/Include/PoolAlloc.h b/glslang/Include/PoolAlloc.h index 1f5cac76de..e84ac52cd2 100644 --- a/glslang/Include/PoolAlloc.h +++ b/glslang/Include/PoolAlloc.h @@ -37,7 +37,7 @@ #ifndef _POOLALLOC_INCLUDED_ #define _POOLALLOC_INCLUDED_ -#ifdef _DEBUG +#ifndef NDEBUG # define GUARD_BLOCKS // define to enable guard block sanity checking #endif @@ -74,7 +74,7 @@ namespace glslang { class TAllocation { public: - TAllocation(size_t size, unsigned char* mem, TAllocation* prev = 0) : + TAllocation(size_t size, unsigned char* mem, TAllocation* prev = nullptr) : size(size), mem(mem), prevAlloc(prev) { // Allocations are bracketed: // [allocationHeader][initialGuardBlock][userData][finalGuardBlock] @@ -118,11 +118,16 @@ class TAllocation { unsigned char* mem; // beginning of our allocation (pts to header) TAllocation* prevAlloc; // prior allocation in the chain - const static unsigned char guardBlockBeginVal; - const static unsigned char guardBlockEndVal; - const static unsigned char userDataFill; + static inline constexpr unsigned char guardBlockBeginVal = 0xfb; + static inline constexpr unsigned char guardBlockEndVal = 0xfe; + static inline constexpr unsigned char userDataFill = 0xcd; + +# ifdef GUARD_BLOCKS + static inline constexpr size_t guardBlockSize = 16; +# else + static inline constexpr size_t guardBlockSize = 0; +# endif - const static size_t guardBlockSize; # ifdef GUARD_BLOCKS inline static size_t headerSize() { return sizeof(TAllocation); } # else @@ -171,7 +176,7 @@ class TPoolAllocator { void popAll(); // - // Call allocate() to actually acquire memory. Returns 0 if no memory + // Call allocate() to actually acquire memory. Returns nullptr if no memory // available, otherwise a properly aligned pointer to 'numBytes' of memory. // void* allocate(size_t numBytes); @@ -189,7 +194,7 @@ class TPoolAllocator { struct tHeader { tHeader(tHeader* nextPage, size_t pageCount) : #ifdef GUARD_BLOCKS - lastAllocation(0), + lastAllocation(nullptr), #endif nextPage(nextPage), pageCount(pageCount) { } diff --git a/glslang/Include/ResourceLimits.h b/glslang/Include/ResourceLimits.h index b670cf163f..b36c8d6273 100644 --- a/glslang/Include/ResourceLimits.h +++ b/glslang/Include/ResourceLimits.h @@ -142,6 +142,15 @@ struct TBuiltInResource { int maxTaskWorkGroupSizeY_NV; int maxTaskWorkGroupSizeZ_NV; int maxMeshViewCountNV; + int maxMeshOutputVerticesEXT; + int maxMeshOutputPrimitivesEXT; + int maxMeshWorkGroupSizeX_EXT; + int maxMeshWorkGroupSizeY_EXT; + int maxMeshWorkGroupSizeZ_EXT; + int maxTaskWorkGroupSizeX_EXT; + int maxTaskWorkGroupSizeY_EXT; + int maxTaskWorkGroupSizeZ_EXT; + int maxMeshViewCountEXT; int maxDualSourceDrawBuffersEXT; TLimits limits; diff --git a/glslang/Include/ShHandle.h b/glslang/Include/ShHandle.h index df07bd8eda..dee47c0dfd 100644 --- a/glslang/Include/ShHandle.h +++ b/glslang/Include/ShHandle.h @@ -58,9 +58,9 @@ class TShHandleBase { public: TShHandleBase() { pool = new glslang::TPoolAllocator; } virtual ~TShHandleBase() { delete pool; } - virtual TCompiler* getAsCompiler() { return 0; } - virtual TLinker* getAsLinker() { return 0; } - virtual TUniformMap* getAsUniformMap() { return 0; } + virtual TCompiler* getAsCompiler() { return nullptr; } + virtual TLinker* getAsLinker() { return nullptr; } + virtual TUniformMap* getAsUniformMap() { return nullptr; } virtual glslang::TPoolAllocator* getPool() const { return pool; } private: glslang::TPoolAllocator* pool; @@ -123,11 +123,11 @@ class TLinker : public TShHandleBase { infoSink(iSink), executable(e), haveReturnableObjectCode(false), - appAttributeBindings(0), - fixedAttributeBindings(0), - excludedAttributes(0), + appAttributeBindings(nullptr), + fixedAttributeBindings(nullptr), + excludedAttributes(nullptr), excludedCount(0), - uniformBindings(0) { } + uniformBindings(nullptr) { } virtual TLinker* getAsLinker() { return this; } virtual ~TLinker() { } virtual bool link(TCompilerList&, TUniformMap*) = 0; @@ -137,7 +137,7 @@ class TLinker : public TShHandleBase { virtual void getAttributeBindings(ShBindingTable const **t) const = 0; virtual void setExcludedAttributes(const int* attributes, int count) { excludedAttributes = attributes; excludedCount = count; } virtual ShBindingTable* getUniformBindings() const { return uniformBindings; } - virtual const void* getObjectCode() const { return 0; } // a real compiler would be returning object code here + virtual const void* getObjectCode() const { return nullptr; } // a real compiler would be returning object code here virtual TInfoSink& getInfoSink() { return infoSink; } TInfoSink& infoSink; protected: diff --git a/glslang/Include/SpirvIntrinsics.h b/glslang/Include/SpirvIntrinsics.h index 3c7d72ce97..0082a4d4eb 100644 --- a/glslang/Include/SpirvIntrinsics.h +++ b/glslang/Include/SpirvIntrinsics.h @@ -35,12 +35,11 @@ #pragma once -#ifndef GLSLANG_WEB - // // GL_EXT_spirv_intrinsics // #include "Common.h" +#include namespace glslang { @@ -98,12 +97,27 @@ struct TSpirvInstruction { struct TSpirvTypeParameter { POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - TSpirvTypeParameter(const TIntermConstantUnion* arg) { constant = arg; } + TSpirvTypeParameter(const TIntermConstantUnion* arg) { value = arg; } + TSpirvTypeParameter(const TType* arg) { value = arg; } - bool operator==(const TSpirvTypeParameter& rhs) const { return constant == rhs.constant; } + const TIntermConstantUnion* getAsConstant() const + { + if (value.index() == 0) + return std::get(value); + return nullptr; + } + const TType* getAsType() const + { + if (value.index() == 1) + return std::get(value); + return nullptr; + } + + bool operator==(const TSpirvTypeParameter& rhs) const; bool operator!=(const TSpirvTypeParameter& rhs) const { return !operator==(rhs); } - const TIntermConstantUnion* constant; + // Parameter value: constant expression or type specifier + std::variant value; }; typedef TVector TSpirvTypeParameters; @@ -124,5 +138,3 @@ struct TSpirvType { }; } // end namespace glslang - -#endif // GLSLANG_WEB diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 6a7e61df3a..ec6b1db8bd 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -72,6 +72,7 @@ enum TSamplerDim { EsdRect, EsdBuffer, EsdSubpass, // goes only with non-sampled image (image is true) + EsdAttachmentEXT, EsdNumDims }; @@ -85,19 +86,6 @@ struct TSampler { // misnomer now; includes images, textures without sampler, bool combined : 1; // true means texture is combined with a sampler, false means texture with no sampler bool sampler : 1; // true means a pure sampler, other fields should be clear() -#ifdef GLSLANG_WEB - bool is1D() const { return false; } - bool isBuffer() const { return false; } - bool isRect() const { return false; } - bool isSubpass() const { return false; } - bool isCombined() const { return true; } - bool isImage() const { return false; } - bool isImageClass() const { return false; } - bool isMultiSample() const { return false; } - bool isExternal() const { return false; } - void setExternal(bool e) { } - bool isYuv() const { return false; } -#else unsigned int vectorSize : 3; // vector return type size. // Some languages support structures as sample results. Storing the whole structure in the // TSampler is too large, so there is an index to a separate table. @@ -122,14 +110,14 @@ struct TSampler { // misnomer now; includes images, textures without sampler, bool isBuffer() const { return dim == EsdBuffer; } bool isRect() const { return dim == EsdRect; } bool isSubpass() const { return dim == EsdSubpass; } + bool isAttachmentEXT() const { return dim == EsdAttachmentEXT; } bool isCombined() const { return combined; } - bool isImage() const { return image && !isSubpass(); } + bool isImage() const { return image && !isSubpass() && !isAttachmentEXT();} bool isImageClass() const { return image; } bool isMultiSample() const { return ms; } bool isExternal() const { return external; } void setExternal(bool e) { external = e; } bool isYuv() const { return yuv; } -#endif bool isTexture() const { return !sampler && !image; } bool isPureSampler() const { return sampler; } @@ -149,10 +137,8 @@ struct TSampler { // misnomer now; includes images, textures without sampler, image = false; combined = false; sampler = false; -#ifndef GLSLANG_WEB external = false; yuv = false; -#endif #ifdef ENABLE_HLSL clearReturnStruct(); @@ -204,7 +190,6 @@ struct TSampler { // misnomer now; includes images, textures without sampler, shadow = s; } -#ifndef GLSLANG_WEB // make a subpass input attachment void setSubpass(TBasicType t, bool m = false) { @@ -214,7 +199,15 @@ struct TSampler { // misnomer now; includes images, textures without sampler, dim = EsdSubpass; ms = m; } -#endif + + // make an AttachmentEXT + void setAttachmentEXT(TBasicType t) + { + clear(); + type = t; + image = true; + dim = EsdAttachmentEXT; + } bool operator==(const TSampler& right) const { @@ -252,7 +245,6 @@ struct TSampler { // misnomer now; includes images, textures without sampler, switch (type) { case EbtInt: s.append("i"); break; case EbtUint: s.append("u"); break; -#ifndef GLSLANG_WEB case EbtFloat16: s.append("f16"); break; case EbtInt8: s.append("i8"); break; case EbtUint16: s.append("u8"); break; @@ -260,11 +252,12 @@ struct TSampler { // misnomer now; includes images, textures without sampler, case EbtUint8: s.append("u16"); break; case EbtInt64: s.append("i64"); break; case EbtUint64: s.append("u64"); break; -#endif default: break; } if (isImageClass()) { - if (isSubpass()) + if (isAttachmentEXT()) + s.append("attachmentEXT"); + else if (isSubpass()) s.append("subpass"); else s.append("image"); @@ -284,12 +277,11 @@ struct TSampler { // misnomer now; includes images, textures without sampler, case Esd2D: s.append("2D"); break; case Esd3D: s.append("3D"); break; case EsdCube: s.append("Cube"); break; -#ifndef GLSLANG_WEB - case Esd1D: s.append("1D"); break; - case EsdRect: s.append("2DRect"); break; - case EsdBuffer: s.append("Buffer"); break; - case EsdSubpass: s.append("Input"); break; -#endif + case Esd1D: s.append("1D"); break; + case EsdRect: s.append("2DRect"); break; + case EsdBuffer: s.append("Buffer"); break; + case EsdSubpass: s.append("Input"); break; + case EsdAttachmentEXT: s.append(""); break; default: break; // some compilers want this } if (isMultiSample()) @@ -315,21 +307,6 @@ typedef TVector TTypeList; typedef TVector TIdentifierList; -// -// Following are a series of helper enums for managing layouts and qualifiers, -// used for TPublicType, TType, others. -// - -enum TLayoutPacking { - ElpNone, - ElpShared, // default, but different than saying nothing - ElpStd140, - ElpStd430, - ElpPacked, - ElpScalar, - ElpCount // If expanding, see bitfield width below -}; - enum TLayoutMatrix { ElmNone, ElmRowMajor, @@ -429,6 +406,12 @@ enum TLayoutFormat { ElfR16ui, ElfR8ui, ElfR64ui, + ElfExtSizeGuard, // to help with comparisons + ElfSize1x8, + ElfSize1x16, + ElfSize1x32, + ElfSize2x32, + ElfSize4x32, ElfCount }; @@ -443,6 +426,18 @@ enum TLayoutDepth { EldCount }; +enum TLayoutStencil { + ElsNone, + ElsRefUnchangedFrontAMD, + ElsRefGreaterFrontAMD, + ElsRefLessFrontAMD, + ElsRefUnchangedBackAMD, + ElsRefGreaterBackAMD, + ElsRefLessBackAMD, + + ElsCount +}; + enum TBlendEquationShift { // No 'EBlendNone': // These are used as bit-shift amounts. A mask of such shifts will have type 'int', @@ -500,12 +495,10 @@ class TQualifier { invariant = false; makeTemporary(); declaredBuiltIn = EbvNone; -#ifndef GLSLANG_WEB noContraction = false; nullInit = false; spirvByReference = false; spirvLiteral = false; -#endif defaultBlock = false; } @@ -522,21 +515,17 @@ class TQualifier { nullInit = false; defaultBlock = false; clearLayout(); -#ifndef GLSLANG_WEB spirvStorageClass = -1; spirvDecorate = nullptr; spirvByReference = false; spirvLiteral = false; -#endif } void clearInterstage() { clearInterpolation(); -#ifndef GLSLANG_WEB patch = false; sample = false; -#endif } void clearInterpolation() @@ -544,19 +533,17 @@ class TQualifier { centroid = false; smooth = false; flat = false; -#ifndef GLSLANG_WEB nopersp = false; explicitInterp = false; pervertexNV = false; perPrimitiveNV = false; perViewNV = false; perTaskNV = false; -#endif + pervertexEXT = false; } void clearMemory() { -#ifndef GLSLANG_WEB coherent = false; devicecoherent = false; queuefamilycoherent = false; @@ -568,11 +555,11 @@ class TQualifier { restrict = false; readonly = false; writeonly = false; -#endif } const char* semanticName; - TStorageQualifier storage : 6; + TStorageQualifier storage : 7; + static_assert(EvqLast < 64, "need to increase size of TStorageQualifier bitfields!"); TBuiltInVariable builtIn : 9; TBuiltInVariable declaredBuiltIn : 9; static_assert(EbvLast < 256, "need to increase size of TBuiltInVariable bitfields!"); @@ -587,34 +574,11 @@ class TQualifier { bool explicitOffset : 1; bool defaultBlock : 1; // default blocks with matching names have structures merged when linking -#ifdef GLSLANG_WEB - bool isWriteOnly() const { return false; } - bool isReadOnly() const { return false; } - bool isRestrict() const { return false; } - bool isCoherent() const { return false; } - bool isVolatile() const { return false; } - bool isSample() const { return false; } - bool isMemory() const { return false; } - bool isMemoryQualifierImageAndSSBOOnly() const { return false; } - bool bufferReferenceNeedsVulkanMemoryModel() const { return false; } - bool isInterpolation() const { return flat || smooth; } - bool isExplicitInterpolation() const { return false; } - bool isAuxiliary() const { return centroid; } - bool isPatch() const { return false; } - bool isNoContraction() const { return false; } - void setNoContraction() { } - bool isPervertexNV() const { return false; } - void setNullInit() { } - bool isNullInit() const { return false; } - void setSpirvByReference() { } - bool isSpirvByReference() { return false; } - void setSpirvLiteral() { } - bool isSpirvLiteral() { return false; } -#else bool noContraction: 1; // prevent contraction and reassociation, e.g., for 'precise' keyword, and expressions it affects bool nopersp : 1; bool explicitInterp : 1; bool pervertexNV : 1; + bool pervertexEXT : 1; bool perPrimitiveNV : 1; bool perViewNV : 1; bool perTaskNV : 1; @@ -663,19 +627,19 @@ class TQualifier { } bool isAuxiliary() const { - return centroid || patch || sample || pervertexNV; + return centroid || patch || sample || pervertexNV || pervertexEXT; } bool isPatch() const { return patch; } bool isNoContraction() const { return noContraction; } void setNoContraction() { noContraction = true; } bool isPervertexNV() const { return pervertexNV; } + bool isPervertexEXT() const { return pervertexEXT; } void setNullInit() { nullInit = true; } bool isNullInit() const { return nullInit; } void setSpirvByReference() { spirvByReference = true; } bool isSpirvByReference() const { return spirvByReference; } void setSpirvLiteral() { spirvLiteral = true; } bool isSpirvLiteral() const { return spirvLiteral; } -#endif bool isPipeInput() const { @@ -701,6 +665,7 @@ class TQualifier { case EvqVaryingOut: case EvqFragColor: case EvqFragDepth: + case EvqFragStencil: return true; default: return false; @@ -768,6 +733,7 @@ class TQualifier { case EvqVaryingOut: case EvqFragColor: case EvqFragDepth: + case EvqFragStencil: return true; default: return false; @@ -804,9 +770,7 @@ class TQualifier { } void setBlockStorage(TBlockStorageClass newBacking) { -#ifndef GLSLANG_WEB layoutPushConstant = (newBacking == EbsPushConstant); -#endif switch (newBacking) { case EbsUniform : if (layoutPacking == ElpStd430) { @@ -815,35 +779,32 @@ class TQualifier { } storage = EvqUniform; break; - case EbsStorageBuffer : + case EbsStorageBuffer : storage = EvqBuffer; break; -#ifndef GLSLANG_WEB case EbsPushConstant : storage = EvqUniform; layoutSet = TQualifier::layoutSetEnd; layoutBinding = TQualifier::layoutBindingEnd; break; -#endif default: break; } } -#ifdef GLSLANG_WEB - bool isPerView() const { return false; } - bool isTaskMemory() const { return false; } - bool isArrayedIo(EShLanguage language) const { return false; } -#else bool isPerPrimitive() const { return perPrimitiveNV; } bool isPerView() const { return perViewNV; } bool isTaskMemory() const { return perTaskNV; } + bool isTaskPayload() const { return storage == EvqtaskPayloadSharedEXT; } bool isAnyPayload() const { return storage == EvqPayload || storage == EvqPayloadIn; } bool isAnyCallable() const { return storage == EvqCallableData || storage == EvqCallableDataIn; } + bool isHitObjectAttrNV() const { + return storage == EvqHitObjectAttrNV; + } // True if this type of IO is supposed to be arrayed with extra level for per-vertex data bool isArrayedIo(EShLanguage language) const @@ -856,22 +817,20 @@ class TQualifier { case EShLangTessEvaluation: return ! patch && isPipeInput(); case EShLangFragment: - return pervertexNV && isPipeInput(); - case EShLangMeshNV: + return (pervertexNV || pervertexEXT) && isPipeInput(); + case EShLangMesh: return ! perTaskNV && isPipeOutput(); default: return false; } } -#endif // Implementing an embedded layout-qualifier class here, since C++ can't have a real class bitfield void clearLayout() // all layout { clearUniformLayout(); -#ifndef GLSLANG_WEB layoutPushConstant = false; layoutBufferReference = false; layoutPassthrough = false; @@ -879,9 +838,13 @@ class TQualifier { // -2048 as the default value indicating layoutSecondaryViewportRelative is not set layoutSecondaryViewportRelativeOffset = -2048; layoutShaderRecord = false; + layoutFullQuads = false; + layoutQuadDeriv = false; + layoutHitObjectShaderRecordNV = false; + layoutBindlessSampler = false; + layoutBindlessImage = false; layoutBufferReferenceAlign = layoutBufferReferenceAlignEnd; layoutFormat = ElfNone; -#endif clearInterstageLayout(); @@ -891,14 +854,11 @@ class TQualifier { { layoutLocation = layoutLocationEnd; layoutComponent = layoutComponentEnd; -#ifndef GLSLANG_WEB layoutIndex = layoutIndexEnd; clearStreamLayout(); clearXfbLayout(); -#endif } -#ifndef GLSLANG_WEB void clearStreamLayout() { layoutStream = layoutStreamEnd; @@ -909,7 +869,6 @@ class TQualifier { layoutXfbStride = layoutXfbStrideEnd; layoutXfbOffset = layoutXfbOffsetEnd; } -#endif bool hasNonXfbLayout() const { @@ -965,7 +924,6 @@ class TQualifier { unsigned int layoutSpecConstantId : 11; static const unsigned int layoutSpecConstantIdEnd = 0x7FF; -#ifndef GLSLANG_WEB // stored as log2 of the actual alignment value unsigned int layoutBufferReferenceAlign : 6; static const unsigned int layoutBufferReferenceAlignEnd = 0x3F; @@ -978,11 +936,16 @@ class TQualifier { bool layoutViewportRelative; int layoutSecondaryViewportRelativeOffset; bool layoutShaderRecord; + bool layoutFullQuads; + bool layoutQuadDeriv; + bool layoutHitObjectShaderRecordNV; // GL_EXT_spirv_intrinsics int spirvStorageClass; TSpirvDecorate* spirvDecorate; -#endif + + bool layoutBindlessSampler; + bool layoutBindlessImage; bool hasUniformLayout() const { @@ -1002,9 +965,7 @@ class TQualifier { layoutSet = layoutSetEnd; layoutBinding = layoutBindingEnd; -#ifndef GLSLANG_WEB layoutAttachment = layoutAttachmentEnd; -#endif } bool hasMatrix() const @@ -1037,26 +998,6 @@ class TQualifier { { return layoutBinding != layoutBindingEnd; } -#ifdef GLSLANG_WEB - bool hasOffset() const { return false; } - bool isNonPerspective() const { return false; } - bool hasIndex() const { return false; } - unsigned getIndex() const { return 0; } - bool hasComponent() const { return false; } - bool hasStream() const { return false; } - bool hasFormat() const { return false; } - bool hasXfb() const { return false; } - bool hasXfbBuffer() const { return false; } - bool hasXfbStride() const { return false; } - bool hasXfbOffset() const { return false; } - bool hasAttachment() const { return false; } - TLayoutFormat getFormat() const { return ElfNone; } - bool isPushConstant() const { return false; } - bool isShaderRecord() const { return false; } - bool hasBufferReference() const { return false; } - bool hasBufferReferenceAlign() const { return false; } - bool isNonUniform() const { return false; } -#else bool hasOffset() const { return layoutOffset != layoutNotSet; @@ -1104,6 +1045,9 @@ class TQualifier { TLayoutFormat getFormat() const { return layoutFormat; } bool isPushConstant() const { return layoutPushConstant; } bool isShaderRecord() const { return layoutShaderRecord; } + bool isFullQuads() const { return layoutFullQuads; } + bool isQuadDeriv() const { return layoutQuadDeriv; } + bool hasHitObjectShaderRecordNV() const { return layoutHitObjectShaderRecordNV; } bool hasBufferReference() const { return layoutBufferReference; } bool hasBufferReferenceAlign() const { @@ -1113,16 +1057,24 @@ class TQualifier { { return nonUniform; } + bool isBindlessSampler() const + { + return layoutBindlessSampler; + } + bool isBindlessImage() const + { + return layoutBindlessImage; + } // GL_EXT_spirv_intrinsics - bool hasSprivDecorate() const { return spirvDecorate != nullptr; } + bool hasSpirvDecorate() const { return spirvDecorate != nullptr; } void setSpirvDecorate(int decoration, const TIntermAggregate* args = nullptr); void setSpirvDecorateId(int decoration, const TIntermAggregate* args); void setSpirvDecorateString(int decoration, const TIntermAggregate* args); const TSpirvDecorate& getSpirvDecorate() const { assert(spirvDecorate); return *spirvDecorate; } TSpirvDecorate& getSpirvDecorate() { assert(spirvDecorate); return *spirvDecorate; } TString getSpirvDecorateQualifierString() const; -#endif + bool hasSpecConstantId() const { // Not the same thing as being a specialization constant, this @@ -1156,12 +1108,10 @@ class TQualifier { { switch (packing) { case ElpStd140: return "std140"; -#ifndef GLSLANG_WEB case ElpPacked: return "packed"; case ElpShared: return "shared"; case ElpStd430: return "std430"; case ElpScalar: return "scalar"; -#endif default: return "none"; } } @@ -1173,9 +1123,6 @@ class TQualifier { default: return "none"; } } -#ifdef GLSLANG_WEB - static const char* getLayoutFormatString(TLayoutFormat f) { return "none"; } -#else static const char* getLayoutFormatString(TLayoutFormat f) { switch (f) { @@ -1222,6 +1169,11 @@ class TQualifier { case ElfR8ui: return "r8ui"; case ElfR64ui: return "r64ui"; case ElfR64i: return "r64i"; + case ElfSize1x8: return "size1x8"; + case ElfSize1x16: return "size1x16"; + case ElfSize1x32: return "size1x32"; + case ElfSize2x32: return "size2x32"; + case ElfSize4x32: return "size4x32"; default: return "none"; } } @@ -1235,6 +1187,18 @@ class TQualifier { default: return "none"; } } + static const char* getLayoutStencilString(TLayoutStencil s) + { + switch (s) { + case ElsRefUnchangedFrontAMD: return "stencil_ref_unchanged_front_amd"; + case ElsRefGreaterFrontAMD: return "stencil_ref_greater_front_amd"; + case ElsRefLessFrontAMD: return "stencil_ref_less_front_amd"; + case ElsRefUnchangedBackAMD: return "stencil_ref_unchanged_back_amd"; + case ElsRefGreaterBackAMD: return "stencil_ref_greater_back_amd"; + case ElsRefLessBackAMD: return "stencil_ref_less_back_amd"; + default: return "none"; + } + } static const char* getBlendEquationString(TBlendEquationShift e) { switch (e) { @@ -1312,7 +1276,6 @@ class TQualifier { default: return "none"; } } -#endif }; // Qualifiers that don't need to be keep per object. They have shader scope, not object scope. @@ -1329,10 +1292,14 @@ struct TShaderQualifiers { int localSize[3]; // compute shader bool localSizeNotDefault[3]; // compute shader int localSizeSpecId[3]; // compute shader specialization id for gl_WorkGroupSize -#ifndef GLSLANG_WEB bool earlyFragmentTests; // fragment input bool postDepthCoverage; // fragment input + bool earlyAndLateFragmentTestsAMD; //fragment input + bool nonCoherentColorAttachmentReadEXT; // fragment input + bool nonCoherentDepthAttachmentReadEXT; // fragment input + bool nonCoherentStencilAttachmentReadEXT; // fragment input TLayoutDepth layoutDepth; + TLayoutStencil layoutStencil; bool blendEquation; // true if any blend equation was specified int numViews; // multiview extenstions TInterlockOrdering interlockOrdering; @@ -1342,9 +1309,7 @@ struct TShaderQualifiers { int primitives; // mesh shader "max_primitives"DerivativeGroupLinear; // true if layout derivative_group_linearNV set bool layoutPrimitiveCulling; // true if layout primitive_culling set TLayoutDepth getDepth() const { return layoutDepth; } -#else - TLayoutDepth getDepth() const { return EldNone; } -#endif + TLayoutStencil getStencil() const { return layoutStencil; } void init() { @@ -1365,10 +1330,14 @@ struct TShaderQualifiers { localSizeSpecId[0] = TQualifier::layoutNotSet; localSizeSpecId[1] = TQualifier::layoutNotSet; localSizeSpecId[2] = TQualifier::layoutNotSet; -#ifndef GLSLANG_WEB earlyFragmentTests = false; + earlyAndLateFragmentTestsAMD = false; postDepthCoverage = false; + nonCoherentColorAttachmentReadEXT = false; + nonCoherentDepthAttachmentReadEXT = false; + nonCoherentStencilAttachmentReadEXT = false; layoutDepth = EldNone; + layoutStencil = ElsNone; blendEquation = false; numViews = TQualifier::layoutNotSet; layoutOverrideCoverage = false; @@ -1377,14 +1346,9 @@ struct TShaderQualifiers { layoutPrimitiveCulling = false; primitives = TQualifier::layoutNotSet; interlockOrdering = EioNone; -#endif } -#ifdef GLSLANG_WEB - bool hasBlendEquation() const { return false; } -#else bool hasBlendEquation() const { return blendEquation; } -#endif // Merge in characteristics from the 'src' qualifier. They can override when // set, but never erase when not set. @@ -1417,13 +1381,22 @@ struct TShaderQualifiers { if (src.localSizeSpecId[i] != TQualifier::layoutNotSet) localSizeSpecId[i] = src.localSizeSpecId[i]; } -#ifndef GLSLANG_WEB if (src.earlyFragmentTests) earlyFragmentTests = true; + if (src.earlyAndLateFragmentTestsAMD) + earlyAndLateFragmentTestsAMD = true; if (src.postDepthCoverage) postDepthCoverage = true; + if (src.nonCoherentColorAttachmentReadEXT) + nonCoherentColorAttachmentReadEXT = true; + if (src.nonCoherentDepthAttachmentReadEXT) + nonCoherentDepthAttachmentReadEXT = true; + if (src.nonCoherentStencilAttachmentReadEXT) + nonCoherentStencilAttachmentReadEXT = true; if (src.layoutDepth) layoutDepth = src.layoutDepth; + if (src.layoutStencil) + layoutStencil = src.layoutStencil; if (src.blendEquation) blendEquation = src.blendEquation; if (src.numViews != TQualifier::layoutNotSet) @@ -1440,7 +1413,31 @@ struct TShaderQualifiers { interlockOrdering = src.interlockOrdering; if (src.layoutPrimitiveCulling) layoutPrimitiveCulling = src.layoutPrimitiveCulling; -#endif + } +}; + +class TTypeParameters { +public: + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + TTypeParameters() : basicType(EbtVoid), arraySizes(nullptr), spirvType(nullptr) {} + + TBasicType basicType; + TArraySizes *arraySizes; + TSpirvType *spirvType; + + bool operator==(const TTypeParameters& rhs) const + { + bool same = basicType == rhs.basicType && *arraySizes == *rhs.arraySizes; + if (same && basicType == EbtSpirvType) { + assert(spirvType && rhs.spirvType); + return *spirvType == *rhs.spirvType; + } + return same; + } + bool operator!=(const TTypeParameters& rhs) const + { + return !(*this == rhs); } }; @@ -1458,39 +1455,35 @@ class TPublicType { TSampler sampler; TQualifier qualifier; TShaderQualifiers shaderQualifiers; - int vectorSize : 4; - int matrixCols : 4; - int matrixRows : 4; - bool coopmat : 1; + uint32_t vectorSize : 4; + uint32_t matrixCols : 4; + uint32_t matrixRows : 4; + bool coopmatNV : 1; + bool coopmatKHR : 1; TArraySizes* arraySizes; const TType* userDef; TSourceLoc loc; - TArraySizes* typeParameters; -#ifndef GLSLANG_WEB + TTypeParameters* typeParameters; // SPIR-V type defined by spirv_type directive TSpirvType* spirvType; -#endif -#ifdef GLSLANG_WEB - bool isCoopmat() const { return false; } -#else - bool isCoopmat() const { return coopmat; } -#endif + bool isCoopmat() const { return coopmatNV || coopmatKHR; } + bool isCoopmatNV() const { return coopmatNV; } + bool isCoopmatKHR() const { return coopmatKHR; } void initType(const TSourceLoc& l) { basicType = EbtVoid; - vectorSize = 1; + vectorSize = 1u; matrixRows = 0; matrixCols = 0; arraySizes = nullptr; userDef = nullptr; loc = l; typeParameters = nullptr; - coopmat = false; -#ifndef GLSLANG_WEB + coopmatNV = false; + coopmatKHR = false; spirvType = nullptr; -#endif } void initQualifiers(bool global = false) @@ -1512,29 +1505,31 @@ class TPublicType { { matrixRows = 0; matrixCols = 0; - vectorSize = s; + assert(s >= 0); + vectorSize = static_cast(s) & 0b1111; } void setMatrix(int c, int r) { - matrixRows = r; - matrixCols = c; + assert(r >= 0); + matrixRows = static_cast(r) & 0b1111; + assert(c >= 0); + matrixCols = static_cast(c) & 0b1111; vectorSize = 0; } bool isScalar() const { - return matrixCols == 0 && vectorSize == 1 && arraySizes == nullptr && userDef == nullptr; + return matrixCols == 0u && vectorSize == 1u && arraySizes == nullptr && userDef == nullptr; } -#ifndef GLSLANG_WEB // GL_EXT_spirv_intrinsics void setSpirvType(const TSpirvInstruction& spirvInst, const TSpirvTypeParameters* typeParams = nullptr); -#endif // "Image" is a superset of "Subpass" - bool isImage() const { return basicType == EbtSampler && sampler.isImage(); } - bool isSubpass() const { return basicType == EbtSampler && sampler.isSubpass(); } + bool isImage() const { return basicType == EbtSampler && sampler.isImage(); } + bool isSubpass() const { return basicType == EbtSampler && sampler.isSubpass(); } + bool isAttachmentEXT() const { return basicType == EbtSampler && sampler.isAttachmentEXT(); } }; // @@ -1547,12 +1542,14 @@ class TType { // for "empty" type (no args) or simple scalar/vector/matrix explicit TType(TBasicType t = EbtVoid, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0, bool isVector = false) : - basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmat(false), - arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif + basicType(t), vectorSize(static_cast(vs) & 0b1111), matrixCols(static_cast(mc) & 0b1111), matrixRows(static_cast(mr) & 0b1111), vector1(isVector && vs == 1), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), + arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr), + spirvType(nullptr) { + assert(vs >= 0); + assert(mc >= 0); + assert(mr >= 0); + sampler.clear(); qualifier.clear(); qualifier.storage = q; @@ -1561,12 +1558,14 @@ class TType { // for explicit precision qualifier TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0, bool isVector = false) : - basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmat(false), - arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif + basicType(t), vectorSize(static_cast(vs) & 0b1111), matrixCols(static_cast(mc) & 0b1111), matrixRows(static_cast(mr) & 0b1111), vector1(isVector && vs == 1), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), + arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr), + spirvType(nullptr) { + assert(vs >= 0); + assert(mc >= 0); + assert(mr >= 0); + sampler.clear(); qualifier.clear(); qualifier.storage = q; @@ -1577,11 +1576,9 @@ class TType { // for turning a TPublicType into a TType, using a shallow copy explicit TType(const TPublicType& p) : basicType(p.basicType), - vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), coopmat(p.coopmat), - arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(p.typeParameters) -#ifndef GLSLANG_WEB - , spirvType(p.spirvType) -#endif + vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), coopmatNV(p.coopmatNV), coopmatKHR(p.coopmatKHR), coopmatKHRuse(0), coopmatKHRUseValid(false), + arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(p.typeParameters), + spirvType(p.spirvType) { if (basicType == EbtSampler) sampler = p.sampler; @@ -1597,28 +1594,46 @@ class TType { } typeName = NewPoolTString(p.userDef->getTypeName().c_str()); } - if (p.isCoopmat() && p.typeParameters && p.typeParameters->getNumDims() > 0) { - int numBits = p.typeParameters->getDimSize(0); + if (p.isCoopmatNV() && p.typeParameters && p.typeParameters->arraySizes->getNumDims() > 0) { + int numBits = p.typeParameters->arraySizes->getDimSize(0); if (p.basicType == EbtFloat && numBits == 16) { basicType = EbtFloat16; qualifier.precision = EpqNone; } else if (p.basicType == EbtUint && numBits == 8) { basicType = EbtUint8; qualifier.precision = EpqNone; + } else if (p.basicType == EbtUint && numBits == 16) { + basicType = EbtUint16; + qualifier.precision = EpqNone; } else if (p.basicType == EbtInt && numBits == 8) { basicType = EbtInt8; qualifier.precision = EpqNone; + } else if (p.basicType == EbtInt && numBits == 16) { + basicType = EbtInt16; + qualifier.precision = EpqNone; + } + } + if (p.isCoopmatKHR() && p.typeParameters && p.typeParameters->arraySizes->getNumDims() > 0) { + basicType = p.typeParameters->basicType; + if (isSpirvType()) { + assert(p.typeParameters->spirvType); + spirvType = p.typeParameters->spirvType; + } + + if (p.typeParameters->arraySizes->getNumDims() == 4) { + const int dimSize = p.typeParameters->arraySizes->getDimSize(3); + assert(dimSize >= 0); + coopmatKHRuse = static_cast(dimSize) & 0b111; + coopmatKHRUseValid = true; + p.typeParameters->arraySizes->removeLastSize(); } } } // for construction of sampler types TType(const TSampler& sampler, TStorageQualifier q = EvqUniform, TArraySizes* as = nullptr) : - basicType(EbtSampler), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false), + basicType(EbtSampler), vectorSize(1u), matrixCols(0u), matrixRows(0u), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), arraySizes(as), structure(nullptr), fieldName(nullptr), typeName(nullptr), - sampler(sampler), typeParameters(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif + sampler(sampler), typeParameters(nullptr), spirvType(nullptr) { qualifier.clear(); qualifier.storage = q; @@ -1660,18 +1675,19 @@ class TType { vectorSize = 1; vector1 = false; } else if (isCoopMat()) { - coopmat = false; + coopmatNV = false; + coopmatKHR = false; + coopmatKHRuse = 0; + coopmatKHRUseValid = false; typeParameters = nullptr; } } } // for making structures, ... TType(TTypeList* userDef, const TString& n) : - basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false), - arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif + basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), + arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr), + spirvType(nullptr) { sampler.clear(); qualifier.clear(); @@ -1679,25 +1695,22 @@ class TType { } // For interface blocks TType(TTypeList* userDef, const TString& n, const TQualifier& q) : - basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false), - qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif + basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), + qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr), + spirvType(nullptr) { sampler.clear(); typeName = NewPoolTString(n.c_str()); } // for block reference (first parameter must be EbtReference) explicit TType(TBasicType t, const TType &p, const TString& n) : - basicType(t), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), - arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif + basicType(t), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), + arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr), + spirvType(nullptr) { assert(t == EbtReference); typeName = NewPoolTString(n.c_str()); + sampler.clear(); qualifier.clear(); qualifier.storage = p.qualifier.storage; referentType = p.clone(); @@ -1725,10 +1738,11 @@ class TType { referentType = copyOf.referentType; } typeParameters = copyOf.typeParameters; -#ifndef GLSLANG_WEB spirvType = copyOf.spirvType; -#endif - coopmat = copyOf.isCoopMat(); + coopmatNV = copyOf.isCoopMatNV(); + coopmatKHR = copyOf.isCoopMatKHR(); + coopmatKHRuse = copyOf.coopmatKHRuse; + coopmatKHRUseValid = copyOf.coopmatKHRUseValid; } // Make complete copy of the whole type graph rooted at 'copyOf'. @@ -1758,7 +1772,7 @@ class TType { void makeVector() { vector1 = true; } - virtual void hideMember() { basicType = EbtVoid; vectorSize = 1; } + virtual void hideMember() { basicType = EbtVoid; vectorSize = 1u; } virtual bool hiddenMember() const { return basicType == EbtVoid; } virtual void setFieldName(const TString& n) { fieldName = NewPoolTString(n.c_str()); } @@ -1798,35 +1812,33 @@ class TType { virtual TQualifier& getQualifier() { return qualifier; } virtual const TQualifier& getQualifier() const { return qualifier; } - virtual int getVectorSize() const { return vectorSize; } // returns 1 for either scalar or vector of size 1, valid for both - virtual int getMatrixCols() const { return matrixCols; } - virtual int getMatrixRows() const { return matrixRows; } + virtual int getVectorSize() const { return static_cast(vectorSize); } // returns 1 for either scalar or vector of size 1, valid for both + virtual int getMatrixCols() const { return static_cast(matrixCols); } + virtual int getMatrixRows() const { return static_cast(matrixRows); } virtual int getOuterArraySize() const { return arraySizes->getOuterSize(); } virtual TIntermTyped* getOuterArrayNode() const { return arraySizes->getOuterNode(); } virtual int getCumulativeArraySize() const { return arraySizes->getCumulativeSize(); } -#ifdef GLSLANG_WEB - bool isArrayOfArrays() const { return false; } -#else bool isArrayOfArrays() const { return arraySizes != nullptr && arraySizes->getNumDims() > 1; } -#endif virtual int getImplicitArraySize() const { return arraySizes->getImplicitSize(); } virtual const TArraySizes* getArraySizes() const { return arraySizes; } virtual TArraySizes* getArraySizes() { return arraySizes; } virtual TType* getReferentType() const { return referentType; } - virtual const TArraySizes* getTypeParameters() const { return typeParameters; } - virtual TArraySizes* getTypeParameters() { return typeParameters; } + virtual const TTypeParameters* getTypeParameters() const { return typeParameters; } + virtual TTypeParameters* getTypeParameters() { return typeParameters; } virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); } virtual bool isScalarOrVec1() const { return isScalar() || vector1; } virtual bool isScalarOrVector() const { return !isMatrix() && !isStruct() && !isArray(); } - virtual bool isVector() const { return vectorSize > 1 || vector1; } + virtual bool isVector() const { return vectorSize > 1u || vector1; } virtual bool isMatrix() const { return matrixCols ? true : false; } virtual bool isArray() const { return arraySizes != nullptr; } virtual bool isSizedArray() const { return isArray() && arraySizes->isSized(); } virtual bool isUnsizedArray() const { return isArray() && !arraySizes->isSized(); } + virtual bool isImplicitlySizedArray() const { return isArray() && arraySizes->isImplicitlySized(); } virtual bool isArrayVariablyIndexed() const { assert(isArray()); return arraySizes->isVariablyIndexed(); } virtual void setArrayVariablyIndexed() { assert(isArray()); arraySizes->setVariablyIndexed(); } virtual void updateImplicitArraySize(int size) { assert(isArray()); arraySizes->updateImplicitSize(size); } + virtual void setImplicitlySized(bool isImplicitSized) { arraySizes->setImplicitlySized(isImplicitSized); } virtual bool isStruct() const { return basicType == EbtStruct || basicType == EbtBlock; } virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; } virtual bool isIntegerDomain() const @@ -1848,30 +1860,26 @@ class TType { return false; } virtual bool isOpaque() const { return basicType == EbtSampler -#ifndef GLSLANG_WEB || basicType == EbtAtomicUint || basicType == EbtAccStruct || basicType == EbtRayQuery -#endif - ; } + || basicType == EbtHitObjectNV; } virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; } - // "Image" is a superset of "Subpass" - virtual bool isImage() const { return basicType == EbtSampler && getSampler().isImage(); } + virtual bool isAttachmentEXT() const { return basicType == EbtSampler && getSampler().isAttachmentEXT(); } + virtual bool isImage() const { return basicType == EbtSampler && getSampler().isImage(); } virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); } virtual bool isTexture() const { return basicType == EbtSampler && getSampler().isTexture(); } + virtual bool isBindlessImage() const { return isImage() && qualifier.layoutBindlessImage; } + virtual bool isBindlessTexture() const { return isTexture() && qualifier.layoutBindlessSampler; } // Check the block-name convention of creating a block without populating it's members: virtual bool isUnusableName() const { return isStruct() && structure == nullptr; } virtual bool isParameterized() const { return typeParameters != nullptr; } -#ifdef GLSLANG_WEB - 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 isCoopMat() const { return coopmatNV || coopmatKHR; } + bool isCoopMatNV() const { return coopmatNV; } + bool isCoopMatKHR() const { return coopmatKHR; } bool isReference() const { return getBasicType() == EbtReference; } bool isSpirvType() const { return getBasicType() == EbtSpirvType; } -#endif + int getCoopMatKHRuse() const { return static_cast(coopmatKHRuse); } // return true if this type contains any subtype which satisfies the given predicate. template @@ -1914,6 +1922,11 @@ class TType { return contains([](const TType* t) { return t->isOpaque(); } ); } + virtual bool containsSampler() const + { + return contains([](const TType* t) { return t->isTexture() || t->isImage(); }); + } + // Recursively checks if the type contains a built-in variable virtual bool containsBuiltIn() const { @@ -1952,15 +1965,6 @@ class TType { return contains([](const TType* t) { return t->isArray() && t->arraySizes->isOuterSpecialization(); } ); } -#ifdef GLSLANG_WEB - bool containsDouble() const { return false; } - bool contains16BitFloat() const { return false; } - bool contains64BitInt() const { return false; } - bool contains16BitInt() const { return false; } - bool contains8BitInt() const { return false; } - bool containsCoopMat() const { return false; } - bool containsReference() const { return false; } -#else bool containsDouble() const { return containsBasicType(EbtDouble); @@ -1983,13 +1987,12 @@ class TType { } bool containsCoopMat() const { - return contains([](const TType* t) { return t->coopmat; } ); + return contains([](const TType* t) { return t->coopmatNV || t->coopmatKHR; } ); } bool containsReference() const { return containsBasicType(EbtReference); } -#endif // Array editing methods. Array descriptors can be shared across // type instances. This allows all uses of the same array @@ -2047,8 +2050,12 @@ class TType { // an explicit array. void adoptImplicitArraySizes(bool skipNonvariablyIndexed) { - if (isUnsizedArray() && !(skipNonvariablyIndexed || isArrayVariablyIndexed())) + if (isUnsizedArray() && + (qualifier.builtIn == EbvSampleMask || + !(skipNonvariablyIndexed || isArrayVariablyIndexed()))) { changeOuterArraySize(getImplicitArraySize()); + setImplicitlySized(true); + } // For multi-dim per-view arrays, set unsized inner dimension size to 1 if (qualifier.isPerView() && arraySizes && arraySizes->isInnerUnsized()) arraySizes->clearInnerUnsized(); @@ -2061,43 +2068,12 @@ class TType { } } - - void updateTypeParameters(const TType& type) - { - // For when we may already be sharing existing array descriptors, - // keeping the pointers the same, just updating the contents. - assert(typeParameters != nullptr); - assert(type.typeParameters != nullptr); - *typeParameters = *type.typeParameters; - } - void copyTypeParameters(const TArraySizes& s) + void copyTypeParameters(const TTypeParameters& s) { // For setting a fresh new set of type parameters, not yet worrying about sharing. - typeParameters = new TArraySizes; + typeParameters = new TTypeParameters; *typeParameters = s; } - void transferTypeParameters(TArraySizes* s) - { - // For setting an already allocated set of sizes that this type can use - // (no copy made). - typeParameters = s; - } - void clearTypeParameters() - { - typeParameters = nullptr; - } - - // Add inner array sizes, to any existing sizes, via copy; the - // sizes passed in can still be reused for other purposes. - void copyTypeParametersInnerSizes(const TArraySizes* s) - { - if (s != nullptr) { - if (typeParameters == nullptr) - copyTypeParameters(*s); - else - typeParameters->addInnerSizes(*s); - } - } const char* getBasicString() const { @@ -2111,7 +2087,6 @@ class TType { case EbtInt: return "int"; case EbtUint: return "uint"; case EbtSampler: return "sampler/image"; -#ifndef GLSLANG_WEB case EbtVoid: return "void"; case EbtDouble: return "double"; case EbtFloat16: return "float16_t"; @@ -2130,19 +2105,13 @@ class TType { case EbtReference: return "reference"; case EbtString: return "string"; case EbtSpirvType: return "spirv_type"; -#endif + case EbtCoopmat: return "coopmat"; default: return "unknown type"; } } -#ifdef GLSLANG_WEB - TString getCompleteString() const { return ""; } - const char* getStorageQualifierString() const { return ""; } - const char* getBuiltInVariableString() const { return ""; } - const char* getPrecisionQualifierString() const { return ""; } - TString getBasicTypeString() const { return ""; } -#else - TString getCompleteString() const + TString getCompleteString(bool syntactic = false, bool getQualifiers = true, bool getPrecision = true, + bool getType = true, TString name = "", TString structName = "") const { TString typeString; @@ -2150,232 +2119,358 @@ class TType { const auto appendUint = [&](unsigned int u) { typeString.append(std::to_string(u).c_str()); }; const auto appendInt = [&](int i) { typeString.append(std::to_string(i).c_str()); }; - if (qualifier.hasSprivDecorate()) + if (getQualifiers) { + if (qualifier.hasSpirvDecorate()) 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"); + if (qualifier.layoutFullQuads) + appendStr(" full_quads"); + if (qualifier.layoutQuadDeriv) + appendStr(" quad_derivatives"); + if (qualifier.layoutHitObjectShaderRecordNV) + appendStr(" hitobjectshaderrecordnv"); + + if (qualifier.layoutBindlessSampler) + appendStr(" layoutBindlessSampler"); + if (qualifier.layoutBindlessImage) + appendStr(" layoutBindlessImage"); + + 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.pervertexEXT) + appendStr(" pervertexEXT"); + 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) { - appendInt(typeParameters->getDimSize(i)); - if (i != (int)typeParameters->getNumDims() - 1) - appendStr(", "); + if (isParameterized()) { + if (isCoopMatKHR()) { + appendStr(" "); + appendStr("coopmat"); + } + + appendStr("<"); + for (int i = 0; i < (int)typeParameters->arraySizes->getNumDims(); ++i) { + appendInt(typeParameters->arraySizes->getDimSize(i)); + if (i != (int)typeParameters->arraySizes->getNumDims() - 1) + appendStr(", "); + } + if (coopmatKHRUseValid) { + appendStr(", "); + appendInt(coopmatKHRuse); + } + 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; @@ -2392,16 +2487,19 @@ class TType { const char* getStorageQualifierString() const { return GetStorageQualifierString(qualifier.storage); } const char* getBuiltInVariableString() const { return GetBuiltInVariableString(qualifier.builtIn); } const char* getPrecisionQualifierString() const { return GetPrecisionQualifierString(qualifier.precision); } -#endif const TTypeList* getStruct() const { assert(isStruct()); return structure; } void setStruct(TTypeList* s) { assert(isStruct()); structure = s; } TTypeList* getWritableStruct() const { assert(isStruct()); return structure; } // This should only be used when known to not be sharing with other threads void setBasicType(const TBasicType& t) { basicType = t; } - + void setVectorSize(int s) { + assert(s >= 0); + vectorSize = static_cast(s) & 0b1111; + } + int computeNumComponents() const { - int components = 0; + uint32_t components = 0; if (getBasicType() == EbtStruct || getBasicType() == EbtBlock) { for (TTypeList::const_iterator tl = getStruct()->begin(); tl != getStruct()->end(); tl++) @@ -2415,7 +2513,7 @@ class TType { components *= arraySizes->getCumulativeSize(); } - return components; + return static_cast(components); } // append this type's mangled name to the passed in 'name' @@ -2444,10 +2542,20 @@ class TType { // type definitions, and member names to be considered the same type. // This rule applies recursively for nested or embedded types." // - bool sameStructType(const TType& right) const + // If type mismatch in structure, return member indices through lpidx and rpidx. + // If matching members for either block are exhausted, return -1 for exhausted + // block and the index of the unmatched member. Otherwise return {-1,-1}. + // + bool sameStructType(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const { - // TODO: Why return true when neither types are structures? + // Initialize error to general type mismatch. + if (lpidx != nullptr) { + *lpidx = -1; + *rpidx = -1; + } + // Most commonly, they are both nullptr, or the same pointer to the same actual structure + // TODO: Why return true when neither types are structures? if ((!isStruct() && !right.isStruct()) || (isStruct() && right.isStruct() && structure == right.structure)) return true; @@ -2464,11 +2572,17 @@ class TType { bool isGLPerVertex = *typeName == "gl_PerVertex"; // Both being nullptr was caught above, now they both have to be structures of the same number of elements - if (structure->size() != right.structure->size() && !isGLPerVertex) + if (lpidx == nullptr && + (structure->size() != right.structure->size() && !isGLPerVertex)) { return false; + } // Compare the names and types of all the members, which have to match for (size_t li = 0, ri = 0; li < structure->size() || ri < right.structure->size(); ++li, ++ri) { + if (lpidx != nullptr) { + *lpidx = static_cast(li); + *rpidx = static_cast(ri); + } if (li < structure->size() && ri < right.structure->size()) { if ((*structure)[li].type->getFieldName() == (*right.structure)[ri].type->getFieldName()) { if (*(*structure)[li].type != *(*right.structure)[ri].type) @@ -2498,11 +2612,19 @@ class TType { } // If we get here, then there should only be inconsistently declared members left } else if (li < structure->size()) { - if (!(*structure)[li].type->hiddenMember() && !isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) + if (!(*structure)[li].type->hiddenMember() && !isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) { + if (lpidx != nullptr) { + *rpidx = -1; + } return false; + } } else { - if (!(*right.structure)[ri].type->hiddenMember() && !isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) + if (!(*right.structure)[ri].type->hiddenMember() && !isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) { + if (lpidx != nullptr) { + *lpidx = -1; + } return false; + } } } @@ -2526,17 +2648,25 @@ class TType { return *referentType == *right.referentType; } - // See if two types match, in all aspects except arrayness - bool sameElementType(const TType& right) const + // See if two types match, in all aspects except arrayness + // If mismatch in structure members, return member indices in lpidx and rpidx. + bool sameElementType(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const { - return basicType == right.basicType && sameElementShape(right); + if (lpidx != nullptr) { + *lpidx = -1; + *rpidx = -1; + } + return basicType == right.basicType && sameElementShape(right, lpidx, rpidx); } // See if two type's arrayness match bool sameArrayness(const TType& right) const { return ((arraySizes == nullptr && right.arraySizes == nullptr) || - (arraySizes != nullptr && right.arraySizes != nullptr && *arraySizes == *right.arraySizes)); + (arraySizes != nullptr && right.arraySizes != nullptr && + (*arraySizes == *right.arraySizes || + (arraySizes->isImplicitlySized() && right.arraySizes->isDefaultImplicitlySized()) || + (right.arraySizes->isImplicitlySized() && arraySizes->isDefaultImplicitlySized())))); } // See if two type's arrayness match in everything except their outer dimension @@ -2553,25 +2683,29 @@ class TType { (typeParameters != nullptr && right.typeParameters != nullptr && *typeParameters == *right.typeParameters)); } -#ifndef GLSLANG_WEB // See if two type's SPIR-V type contents match bool sameSpirvType(const TType& right) const { return ((spirvType == nullptr && right.spirvType == nullptr) || (spirvType != nullptr && right.spirvType != nullptr && *spirvType == *right.spirvType)); } -#endif // See if two type's elements match in all ways except basic type - bool sameElementShape(const TType& right) const + // 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) && + isCoopMatNV() == right.isCoopMatNV() && + isCoopMatKHR() == right.isCoopMatKHR() && + sameStructType(right, lpidx, rpidx) && sameReferenceType(right); } @@ -2579,32 +2713,70 @@ class TType { // an OK function parameter bool coopMatParameterOK(const TType& right) const { - return isCoopMat() && right.isCoopMat() && (getBasicType() == right.getBasicType()) && - typeParameters == nullptr && right.typeParameters != nullptr; + if (isCoopMatNV()) { + return right.isCoopMatNV() && (getBasicType() == right.getBasicType()) && typeParameters == nullptr && + right.typeParameters != nullptr; + } + if (isCoopMatKHR() && right.isCoopMatKHR()) { + return ((getBasicType() == right.getBasicType()) || (getBasicType() == EbtCoopmat) || + (right.getBasicType() == EbtCoopmat)) && + ((typeParameters == nullptr && right.typeParameters != nullptr) || + (typeParameters != nullptr && right.typeParameters == nullptr)); + } + return false; } bool sameCoopMatBaseType(const TType &right) const { - bool rv = coopmat && right.coopmat; - if (getBasicType() == EbtFloat || getBasicType() == EbtFloat16) - rv = right.getBasicType() == EbtFloat || right.getBasicType() == EbtFloat16; - else if (getBasicType() == EbtUint || getBasicType() == EbtUint8) - rv = right.getBasicType() == EbtUint || right.getBasicType() == EbtUint8; - else if (getBasicType() == EbtInt || getBasicType() == EbtInt8) - rv = right.getBasicType() == EbtInt || right.getBasicType() == EbtInt8; - else - rv = false; + bool rv = false; + + if (isCoopMatNV()) { + rv = isCoopMatNV() && right.isCoopMatNV(); + if (getBasicType() == EbtFloat || getBasicType() == EbtFloat16) + rv = right.getBasicType() == EbtFloat || right.getBasicType() == EbtFloat16; + else if (getBasicType() == EbtUint || getBasicType() == EbtUint8 || getBasicType() == EbtUint16) + rv = right.getBasicType() == EbtUint || right.getBasicType() == EbtUint8 || right.getBasicType() == EbtUint16; + else if (getBasicType() == EbtInt || getBasicType() == EbtInt8 || getBasicType() == EbtInt16) + rv = right.getBasicType() == EbtInt || right.getBasicType() == EbtInt8 || right.getBasicType() == EbtInt16; + else + rv = false; + } else if (isCoopMatKHR() && right.isCoopMatKHR()) { + if (getBasicType() == EbtFloat || getBasicType() == EbtFloat16) + rv = right.getBasicType() == EbtFloat || right.getBasicType() == EbtFloat16 || right.getBasicType() == EbtCoopmat; + else if (getBasicType() == EbtUint || getBasicType() == EbtUint8 || getBasicType() == EbtUint16) + rv = right.getBasicType() == EbtUint || right.getBasicType() == EbtUint8 || right.getBasicType() == EbtUint16 || right.getBasicType() == EbtCoopmat; + else if (getBasicType() == EbtInt || getBasicType() == EbtInt8 || getBasicType() == EbtInt16) + rv = right.getBasicType() == EbtInt || right.getBasicType() == EbtInt8 || right.getBasicType() == EbtInt16 || right.getBasicType() == EbtCoopmat; + else + rv = false; + } return rv; } + bool sameCoopMatUse(const TType &right) const { + return coopmatKHRuse == right.coopmatKHRuse; + } + + bool sameCoopMatShapeAndUse(const TType &right) const + { + if (!isCoopMat() || !right.isCoopMat() || isCoopMatKHR() != right.isCoopMatKHR()) + return false; + + if (coopmatKHRuse != right.coopmatKHRuse) + return false; + + // Skip bit width type parameter (first array size) for coopmatNV + int firstArrayDimToCompare = isCoopMatNV() ? 1 : 0; + for (int i = firstArrayDimToCompare; i < typeParameters->arraySizes->getNumDims(); ++i) { + if (typeParameters->arraySizes->getDimSize(i) != right.typeParameters->arraySizes->getDimSize(i)) + return false; + } + return true; + } // See if two types match in all ways (just the actual type, not qualification) bool operator==(const TType& right) const { -#ifndef GLSLANG_WEB - return sameElementType(right) && sameArrayness(right) && sameTypeParameters(right) && sameSpirvType(right); -#else - return sameElementType(right) && sameArrayness(right) && sameTypeParameters(right); -#endif + return sameElementType(right) && sameArrayness(right) && sameTypeParameters(right) && sameCoopMatUse(right) && sameSpirvType(right); } bool operator!=(const TType& right) const @@ -2614,18 +2786,14 @@ class TType { unsigned int getBufferReferenceAlignment() const { -#ifndef GLSLANG_WEB if (getBasicType() == glslang::EbtReference) { return getReferentType()->getQualifier().hasBufferReferenceAlign() ? (1u << getReferentType()->getQualifier().layoutBufferReferenceAlign) : 16u; } -#endif return 0; } -#ifndef GLSLANG_WEB const TSpirvType& getSpirvType() const { assert(spirvType); return *spirvType; } -#endif protected: // Require consumer to pick between deep copy and shallow copy. @@ -2639,7 +2807,6 @@ class TType { { shallowCopy(copyOf); -#ifndef GLSLANG_WEB // GL_EXT_spirv_intrinsics if (copyOf.qualifier.spirvDecorate) { qualifier.spirvDecorate = new TSpirvDecorate; @@ -2650,7 +2817,6 @@ class TType { spirvType = new TSpirvType; *spirvType = *copyOf.spirvType; } -#endif if (copyOf.arraySizes) { arraySizes = new TArraySizes; @@ -2658,8 +2824,11 @@ class TType { } if (copyOf.typeParameters) { - typeParameters = new TArraySizes; - *typeParameters = *copyOf.typeParameters; + typeParameters = new TTypeParameters; + typeParameters->arraySizes = new TArraySizes; + *typeParameters->arraySizes = *copyOf.typeParameters->arraySizes; + *typeParameters->spirvType = *copyOf.typeParameters->spirvType; + typeParameters->basicType = copyOf.basicType; } if (copyOf.isStruct() && copyOf.structure) { @@ -2689,15 +2858,18 @@ class TType { void buildMangledName(TString&) const; TBasicType basicType : 8; - int vectorSize : 4; // 1 means either scalar or 1-component vector; see vector1 to disambiguate. - int matrixCols : 4; - int matrixRows : 4; + uint32_t vectorSize : 4; // 1 means either scalar or 1-component vector; see vector1 to disambiguate. + uint32_t matrixCols : 4; + uint32_t matrixRows : 4; bool vector1 : 1; // Backward-compatible tracking of a 1-component vector distinguished from a scalar. // GLSL 4.5 never has a 1-component vector; so this will always be false until such // functionality is added. // HLSL does have a 1-component vectors, so this will be true to disambiguate // from a scalar. - bool coopmat : 1; + bool coopmatNV : 1; + bool coopmatKHR : 1; + uint32_t coopmatKHRuse : 3; // Accepts one of three values: 0, 1, 2 (gl_MatrixUseA, gl_MatrixUseB, gl_MatrixUseAccumulator) + bool coopmatKHRUseValid : 1; // True if coopmatKHRuse has been set TQualifier qualifier; TArraySizes* arraySizes; // nullptr unless an array; can be shared across types @@ -2710,10 +2882,8 @@ class TType { TString *fieldName; // for structure field names TString *typeName; // for structure type name TSampler sampler; - TArraySizes* typeParameters;// nullptr unless a parameterized type; can be shared across types -#ifndef GLSLANG_WEB + TTypeParameters *typeParameters;// nullptr unless a parameterized type; can be shared across types TSpirvType* spirvType; // SPIR-V type defined by spirv_type directive -#endif }; } // end namespace glslang diff --git a/glslang/Include/arrays.h b/glslang/Include/arrays.h index 7f047d9fb1..91e1908355 100644 --- a/glslang/Include/arrays.h +++ b/glslang/Include/arrays.h @@ -147,6 +147,15 @@ struct TSmallArrayVector { sizes->erase(sizes->begin()); } + void pop_back() + { + assert(sizes != nullptr && sizes->size() > 0); + if (sizes->size() == 1) + dealloc(); + else + sizes->resize(sizes->size() - 1); + } + // 'this' should currently not be holding anything, and copyNonFront // will make it hold a copy of all but the first element of rhs. // (This would be useful for making a type that is dereferenced by @@ -222,7 +231,7 @@ struct TSmallArrayVector { struct TArraySizes { POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - TArraySizes() : implicitArraySize(1), variablyIndexed(false) { } + TArraySizes() : implicitArraySize(0), implicitlySized(true), variablyIndexed(false){ } // For breaking into two non-shared copies, independently modifiable. TArraySizes& operator=(const TArraySizes& from) @@ -230,6 +239,7 @@ struct TArraySizes { implicitArraySize = from.implicitArraySize; variablyIndexed = from.variablyIndexed; sizes = from.sizes; + implicitlySized = from.implicitlySized; return *this; } @@ -256,11 +266,17 @@ struct TArraySizes { void addInnerSize(int s, TIntermTyped* n) { sizes.push_back((unsigned)s, n); } void addInnerSize(TArraySize pair) { sizes.push_back(pair.size, pair.node); + implicitlySized = false; } void addInnerSizes(const TArraySizes& s) { sizes.push_back(s.sizes); } - void changeOuterSize(int s) { sizes.changeFront((unsigned)s); } - int getImplicitSize() const { return implicitArraySize; } - void updateImplicitSize(int s) { implicitArraySize = std::max(implicitArraySize, s); } + void changeOuterSize(int s) { + sizes.changeFront((unsigned)s); + implicitlySized = false; + } + int getImplicitSize() const { return implicitArraySize > 0 ? implicitArraySize : 1; } + void updateImplicitSize(int s) { + implicitArraySize = (std::max)(implicitArraySize, s); + } bool isInnerUnsized() const { for (int d = 1; d < sizes.size(); ++d) { @@ -295,7 +311,11 @@ struct TArraySizes { bool hasUnsized() const { return getOuterSize() == UnsizedArraySize || isInnerUnsized(); } bool isSized() const { return getOuterSize() != UnsizedArraySize; } + bool isImplicitlySized() const { return implicitlySized; } + bool isDefaultImplicitlySized() const { return implicitlySized && implicitArraySize == 0; } + void setImplicitlySized(bool isImplicitSizing) { implicitlySized = isImplicitSizing; } void dereference() { sizes.pop_front(); } + void removeLastSize() { sizes.pop_back(); } void copyDereferenced(const TArraySizes& rhs) { assert(sizes.size() == 0); @@ -333,6 +353,7 @@ struct TArraySizes { // the implicit size of the array, if not variably indexed and // otherwise legal. int implicitArraySize; + bool implicitlySized; bool variablyIndexed; // true if array is indexed with a non compile-time constant }; diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h index 14ab6acbc2..bfe0652257 100644 --- a/glslang/Include/glslang_c_interface.h +++ b/glslang/Include/glslang_c_interface.h @@ -37,9 +37,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include "glslang_c_shader_types.h" +#include "visibility.h" typedef struct glslang_shader_s glslang_shader_t; typedef struct glslang_program_s glslang_program_t; +typedef struct glslang_mapper_s glslang_mapper_t; +typedef struct glslang_resolver_s glslang_resolver_t; + +/* Version counterpart */ +typedef struct glslang_version_s { + int major; + int minor; + int patch; + const char* flavor; +} glslang_version_t; /* TLimits counterpart */ typedef struct glslang_limits_s { @@ -148,28 +159,26 @@ typedef struct glslang_resource_s { int max_task_work_group_size_y_nv; int max_task_work_group_size_z_nv; int max_mesh_view_count_nv; - int maxDualSourceDrawBuffersEXT; + int max_mesh_output_vertices_ext; + int max_mesh_output_primitives_ext; + int max_mesh_work_group_size_x_ext; + int max_mesh_work_group_size_y_ext; + int max_mesh_work_group_size_z_ext; + int max_task_work_group_size_x_ext; + int max_task_work_group_size_y_ext; + int max_task_work_group_size_z_ext; + int max_mesh_view_count_ext; + union + { + int max_dual_source_draw_buffers_ext; + + /* Incorrectly capitalized name retained for backward compatibility */ + int maxDualSourceDrawBuffersEXT; + }; glslang_limits_t limits; } glslang_resource_t; -typedef struct glslang_input_s { - glslang_source_t language; - glslang_stage_t stage; - glslang_client_t client; - glslang_target_client_version_t client_version; - glslang_target_language_t target_language; - glslang_target_language_version_t target_language_version; - /** Shader source code */ - const char* code; - int default_version; - glslang_profile_t default_profile; - int force_default_version_and_profile; - int forward_compatible; - glslang_messages_t messages; - const glslang_resource_t* resource; -} glslang_input_t; - /* Inclusion result structure allocated by C include_local/include_system callbacks */ typedef struct glsl_include_result_s { /* Header file name or NULL if inclusion failed */ @@ -199,46 +208,75 @@ typedef struct glsl_include_callbacks_s { glsl_free_include_result_func free_include_result; } glsl_include_callbacks_t; +typedef struct glslang_input_s { + glslang_source_t language; + glslang_stage_t stage; + glslang_client_t client; + glslang_target_client_version_t client_version; + glslang_target_language_t target_language; + glslang_target_language_version_t target_language_version; + /** Shader source code */ + const char* code; + int default_version; + glslang_profile_t default_profile; + int force_default_version_and_profile; + int forward_compatible; + glslang_messages_t messages; + const glslang_resource_t* resource; + glsl_include_callbacks_t callbacks; + void* callbacks_ctx; +} glslang_input_t; + +/* SpvOptions counterpart */ +typedef struct glslang_spv_options_s { + bool generate_debug_info; + bool strip_debug_info; + bool disable_optimizer; + bool optimize_size; + bool disassemble; + bool validate; + bool emit_nonsemantic_shader_debug_info; + bool emit_nonsemantic_shader_debug_source; + bool compile_only; + bool optimize_allow_expanded_id_bound; +} glslang_spv_options_t; + #ifdef __cplusplus extern "C" { #endif -#ifdef GLSLANG_IS_SHARED_LIBRARY - #ifdef _WIN32 - #ifdef GLSLANG_EXPORTING - #define GLSLANG_EXPORT __declspec(dllexport) - #else - #define GLSLANG_EXPORT __declspec(dllimport) - #endif - #elif __GNUC__ >= 4 - #define GLSLANG_EXPORT __attribute__((visibility("default"))) - #endif -#endif // GLSLANG_IS_SHARED_LIBRARY - -#ifndef GLSLANG_EXPORT -#define GLSLANG_EXPORT -#endif +GLSLANG_EXPORT void glslang_get_version(glslang_version_t* version); -GLSLANG_EXPORT int glslang_initialize_process(); -GLSLANG_EXPORT void glslang_finalize_process(); +GLSLANG_EXPORT int glslang_initialize_process(void); +GLSLANG_EXPORT void glslang_finalize_process(void); 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_set_preamble(glslang_shader_t* shader, const char* s); 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 void glslang_shader_set_default_uniform_block_set_and_binding(glslang_shader_t* shader, unsigned int set, unsigned int binding); +GLSLANG_EXPORT void glslang_shader_set_default_uniform_block_name(glslang_shader_t* shader, const char *name); +GLSLANG_EXPORT void glslang_shader_set_resource_set_binding(glslang_shader_t* shader, const char *const *bindings, unsigned int num_bindings); GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input); GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input); GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader); +GLSLANG_EXPORT void glslang_shader_set_preprocessed_code(glslang_shader_t* shader, const char* code); GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader); GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader); -GLSLANG_EXPORT glslang_program_t* glslang_program_create(); +GLSLANG_EXPORT glslang_program_t* glslang_program_create(void); GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program); GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader); GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t +GLSLANG_EXPORT void glslang_program_add_source_text(glslang_program_t* program, glslang_stage_t stage, const char* text, size_t len); +GLSLANG_EXPORT void glslang_program_set_source_file(glslang_program_t* program, glslang_stage_t stage, const char* file); GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program); +GLSLANG_EXPORT int glslang_program_map_io_with_resolver_and_mapper(glslang_program_t* program, glslang_resolver_t* resolver, glslang_mapper_t* mapper); GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage); +GLSLANG_EXPORT void glslang_program_SPIRV_generate_with_options(glslang_program_t* program, glslang_stage_t stage, glslang_spv_options_t* spv_options); GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program); GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*); GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program); @@ -246,6 +284,12 @@ GLSLANG_EXPORT const char* glslang_program_SPIRV_get_messages(glslang_program_t* GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program); GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program); +GLSLANG_EXPORT glslang_mapper_t* glslang_glsl_mapper_create(); +GLSLANG_EXPORT void glslang_glsl_mapper_delete(glslang_mapper_t* mapper); + +GLSLANG_EXPORT glslang_resolver_t* glslang_glsl_resolver_create(glslang_program_t* program, glslang_stage_t stage); +GLSLANG_EXPORT void glslang_glsl_resolver_delete(glslang_resolver_t* resolver); + #ifdef __cplusplus } #endif diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h index fc80280652..7bb0ccda20 100644 --- a/glslang/Include/glslang_c_shader_types.h +++ b/glslang/Include/glslang_c_shader_types.h @@ -43,14 +43,22 @@ typedef enum { GLSLANG_STAGE_GEOMETRY, GLSLANG_STAGE_FRAGMENT, GLSLANG_STAGE_COMPUTE, - GLSLANG_STAGE_RAYGEN_NV, - GLSLANG_STAGE_INTERSECT_NV, - GLSLANG_STAGE_ANYHIT_NV, - GLSLANG_STAGE_CLOSESTHIT_NV, - GLSLANG_STAGE_MISS_NV, - GLSLANG_STAGE_CALLABLE_NV, - GLSLANG_STAGE_TASK_NV, - GLSLANG_STAGE_MESH_NV, + GLSLANG_STAGE_RAYGEN, + GLSLANG_STAGE_RAYGEN_NV = GLSLANG_STAGE_RAYGEN, + GLSLANG_STAGE_INTERSECT, + GLSLANG_STAGE_INTERSECT_NV = GLSLANG_STAGE_INTERSECT, + GLSLANG_STAGE_ANYHIT, + GLSLANG_STAGE_ANYHIT_NV = GLSLANG_STAGE_ANYHIT, + GLSLANG_STAGE_CLOSESTHIT, + GLSLANG_STAGE_CLOSESTHIT_NV = GLSLANG_STAGE_CLOSESTHIT, + GLSLANG_STAGE_MISS, + GLSLANG_STAGE_MISS_NV = GLSLANG_STAGE_MISS, + GLSLANG_STAGE_CALLABLE, + GLSLANG_STAGE_CALLABLE_NV = GLSLANG_STAGE_CALLABLE, + GLSLANG_STAGE_TASK, + GLSLANG_STAGE_TASK_NV = GLSLANG_STAGE_TASK, + GLSLANG_STAGE_MESH, + GLSLANG_STAGE_MESH_NV = GLSLANG_STAGE_MESH, LAST_ELEMENT_MARKER(GLSLANG_STAGE_COUNT), } glslang_stage_t; // would be better as stage, but this is ancient now @@ -62,14 +70,22 @@ typedef enum { GLSLANG_STAGE_GEOMETRY_MASK = (1 << GLSLANG_STAGE_GEOMETRY), GLSLANG_STAGE_FRAGMENT_MASK = (1 << GLSLANG_STAGE_FRAGMENT), GLSLANG_STAGE_COMPUTE_MASK = (1 << GLSLANG_STAGE_COMPUTE), - GLSLANG_STAGE_RAYGEN_NV_MASK = (1 << GLSLANG_STAGE_RAYGEN_NV), - GLSLANG_STAGE_INTERSECT_NV_MASK = (1 << GLSLANG_STAGE_INTERSECT_NV), - GLSLANG_STAGE_ANYHIT_NV_MASK = (1 << GLSLANG_STAGE_ANYHIT_NV), - GLSLANG_STAGE_CLOSESTHIT_NV_MASK = (1 << GLSLANG_STAGE_CLOSESTHIT_NV), - GLSLANG_STAGE_MISS_NV_MASK = (1 << GLSLANG_STAGE_MISS_NV), - GLSLANG_STAGE_CALLABLE_NV_MASK = (1 << GLSLANG_STAGE_CALLABLE_NV), - GLSLANG_STAGE_TASK_NV_MASK = (1 << GLSLANG_STAGE_TASK_NV), - GLSLANG_STAGE_MESH_NV_MASK = (1 << GLSLANG_STAGE_MESH_NV), + GLSLANG_STAGE_RAYGEN_MASK = (1 << GLSLANG_STAGE_RAYGEN), + GLSLANG_STAGE_RAYGEN_NV_MASK = GLSLANG_STAGE_RAYGEN_MASK, + GLSLANG_STAGE_INTERSECT_MASK = (1 << GLSLANG_STAGE_INTERSECT), + GLSLANG_STAGE_INTERSECT_NV_MASK = GLSLANG_STAGE_INTERSECT_MASK, + GLSLANG_STAGE_ANYHIT_MASK = (1 << GLSLANG_STAGE_ANYHIT), + GLSLANG_STAGE_ANYHIT_NV_MASK = GLSLANG_STAGE_ANYHIT_MASK, + GLSLANG_STAGE_CLOSESTHIT_MASK = (1 << GLSLANG_STAGE_CLOSESTHIT), + GLSLANG_STAGE_CLOSESTHIT_NV_MASK = GLSLANG_STAGE_CLOSESTHIT_MASK, + GLSLANG_STAGE_MISS_MASK = (1 << GLSLANG_STAGE_MISS), + GLSLANG_STAGE_MISS_NV_MASK = GLSLANG_STAGE_MISS_MASK, + GLSLANG_STAGE_CALLABLE_MASK = (1 << GLSLANG_STAGE_CALLABLE), + GLSLANG_STAGE_CALLABLE_NV_MASK = GLSLANG_STAGE_CALLABLE_MASK, + GLSLANG_STAGE_TASK_MASK = (1 << GLSLANG_STAGE_TASK), + GLSLANG_STAGE_TASK_NV_MASK = GLSLANG_STAGE_TASK_MASK, + GLSLANG_STAGE_MESH_MASK = (1 << GLSLANG_STAGE_MESH), + GLSLANG_STAGE_MESH_NV_MASK = GLSLANG_STAGE_MESH_MASK, LAST_ELEMENT_MARKER(GLSLANG_STAGE_MASK_COUNT), } glslang_stage_mask_t; @@ -101,8 +117,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 */ @@ -120,7 +137,9 @@ typedef enum { /* EShExecutable counterpart */ typedef enum { GLSLANG_EX_VERTEX_FRAGMENT, GLSLANG_EX_FRAGMENT } glslang_executable_t; -/* EShOptimizationLevel counterpart */ +// EShOptimizationLevel counterpart +// This enum is not used in the current C interface, but could be added at a later date. +// GLSLANG_OPT_NONE is the current default. typedef enum { GLSLANG_OPT_NO_GENERATION, GLSLANG_OPT_NONE, @@ -138,22 +157,25 @@ typedef enum { /* EShMessages counterpart */ typedef enum { - GLSLANG_MSG_DEFAULT_BIT = 0, - GLSLANG_MSG_RELAXED_ERRORS_BIT = (1 << 0), - GLSLANG_MSG_SUPPRESS_WARNINGS_BIT = (1 << 1), - GLSLANG_MSG_AST_BIT = (1 << 2), - GLSLANG_MSG_SPV_RULES_BIT = (1 << 3), - GLSLANG_MSG_VULKAN_RULES_BIT = (1 << 4), - GLSLANG_MSG_ONLY_PREPROCESSOR_BIT = (1 << 5), - GLSLANG_MSG_READ_HLSL_BIT = (1 << 6), - GLSLANG_MSG_CASCADING_ERRORS_BIT = (1 << 7), - GLSLANG_MSG_KEEP_UNCALLED_BIT = (1 << 8), - GLSLANG_MSG_HLSL_OFFSETS_BIT = (1 << 9), - GLSLANG_MSG_DEBUG_INFO_BIT = (1 << 10), + GLSLANG_MSG_DEFAULT_BIT = 0, + GLSLANG_MSG_RELAXED_ERRORS_BIT = (1 << 0), + GLSLANG_MSG_SUPPRESS_WARNINGS_BIT = (1 << 1), + GLSLANG_MSG_AST_BIT = (1 << 2), + GLSLANG_MSG_SPV_RULES_BIT = (1 << 3), + GLSLANG_MSG_VULKAN_RULES_BIT = (1 << 4), + GLSLANG_MSG_ONLY_PREPROCESSOR_BIT = (1 << 5), + GLSLANG_MSG_READ_HLSL_BIT = (1 << 6), + GLSLANG_MSG_CASCADING_ERRORS_BIT = (1 << 7), + GLSLANG_MSG_KEEP_UNCALLED_BIT = (1 << 8), + GLSLANG_MSG_HLSL_OFFSETS_BIT = (1 << 9), + GLSLANG_MSG_DEBUG_INFO_BIT = (1 << 10), GLSLANG_MSG_HLSL_ENABLE_16BIT_TYPES_BIT = (1 << 11), - 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_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), + GLSLANG_MSG_ABSOLUTE_PATH = (1 << 16), + GLSLANG_MSG_DISPLAY_ERROR_COLUMN = (1 << 17), LAST_ELEMENT_MARKER(GLSLANG_MSG_COUNT), } glslang_messages_t; diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 595bd623db..82de2b4def 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -1,7 +1,7 @@ // // Copyright (C) 2002-2005 3Dlabs Inc. Ltd. // Copyright (C) 2012-2016 LunarG, Inc. -// Copyright (C) 2017 ARM Limited. +// Copyright (C) 2017, 2022-2024 Arm Limited. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // // All rights reserved. @@ -48,14 +48,9 @@ #ifndef __INTERMEDIATE_H #define __INTERMEDIATE_H -#if defined(_MSC_VER) && _MSC_VER >= 1900 - #pragma warning(disable : 4464) // relative include path contains '..' - #pragma warning(disable : 5026) // 'glslang::TIntermUnary': move constructor was implicitly defined as deleted -#endif - -#include "../Include/Common.h" -#include "../Include/Types.h" -#include "../Include/ConstantUnion.h" +#include "Common.h" +#include "Types.h" +#include "ConstantUnion.h" namespace glslang { @@ -67,13 +62,12 @@ class TIntermediate; enum TOperator { EOpNull, // if in a node, should only mean a node is still being built EOpSequence, // denotes a list of statements, or parameters, etc. + EOpScope, // Used by debugging to denote a scoped list of statements EOpLinkerObjects, // for aggregate node of objects the linker may need, if not reference by the rest of the AST EOpFunctionCall, EOpFunction, // For function definition EOpParameters, // an aggregate listing the parameters to a function -#ifndef GLSLANG_WEB EOpSpirvInst, -#endif // // Unary operators @@ -91,6 +85,8 @@ enum TOperator { EOpCopyObject, + EOpDeclare, // Used by debugging to force declaration of variable in correct scope + // (u)int* -> bool EOpConvInt8ToBool, EOpConvUint8ToBool, @@ -510,6 +506,8 @@ enum TOperator { EOpSubgroupShuffleXor, EOpSubgroupShuffleUp, EOpSubgroupShuffleDown, + EOpSubgroupRotate, + EOpSubgroupClusteredRotate, EOpSubgroupAdd, EOpSubgroupMul, EOpSubgroupMin, @@ -542,6 +540,8 @@ enum TOperator { EOpSubgroupQuadSwapHorizontal, EOpSubgroupQuadSwapVertical, EOpSubgroupQuadSwapDiagonal, + EOpSubgroupQuadAll, + EOpSubgroupQuadAny, EOpSubgroupPartition, EOpSubgroupPartitionedAdd, @@ -626,6 +626,9 @@ enum TOperator { EOpCooperativeMatrixLoad, EOpCooperativeMatrixStore, EOpCooperativeMatrixMulAdd, + EOpCooperativeMatrixLoadNV, + EOpCooperativeMatrixStoreNV, + EOpCooperativeMatrixMulAddNV, EOpBeginInvocationInterlock, // Fragment only EOpEndInvocationInterlock, // Fragment only @@ -763,7 +766,8 @@ enum TOperator { EOpConstructTextureSampler, EOpConstructNonuniform, // expected to be transformed away, not present in final AST EOpConstructReference, - EOpConstructCooperativeMatrix, + EOpConstructCooperativeMatrixNV, + EOpConstructCooperativeMatrixKHR, EOpConstructAccStruct, EOpConstructGuardEnd, @@ -824,6 +828,7 @@ enum TOperator { EOpSubpassLoadMS, EOpSparseImageLoad, EOpSparseImageLoadLod, + EOpColorAttachmentReadEXT, // Fragment only EOpImageGuardEnd, @@ -934,6 +939,8 @@ enum TOperator { EOpExecuteCallableNV, EOpExecuteCallableKHR, EOpWritePackedPrimitiveIndices4x8NV, + EOpEmitMeshTasksEXT, + EOpSetMeshOutputsEXT, // // GL_EXT_ray_query operations @@ -963,7 +970,44 @@ enum TOperator { EOpRayQueryGetIntersectionObjectToWorld, EOpRayQueryGetIntersectionWorldToObject, + // + // GL_NV_shader_invocation_reorder // + + EOpHitObjectTraceRayNV, + EOpHitObjectTraceRayMotionNV, + EOpHitObjectRecordHitNV, + EOpHitObjectRecordHitMotionNV, + EOpHitObjectRecordHitWithIndexNV, + EOpHitObjectRecordHitWithIndexMotionNV, + EOpHitObjectRecordMissNV, + EOpHitObjectRecordMissMotionNV, + EOpHitObjectRecordEmptyNV, + EOpHitObjectExecuteShaderNV, + EOpHitObjectIsEmptyNV, + EOpHitObjectIsMissNV, + EOpHitObjectIsHitNV, + EOpHitObjectGetRayTMinNV, + EOpHitObjectGetRayTMaxNV, + EOpHitObjectGetObjectRayOriginNV, + EOpHitObjectGetObjectRayDirectionNV, + EOpHitObjectGetWorldRayOriginNV, + EOpHitObjectGetWorldRayDirectionNV, + EOpHitObjectGetWorldToObjectNV, + EOpHitObjectGetObjectToWorldNV, + EOpHitObjectGetInstanceCustomIndexNV, + EOpHitObjectGetInstanceIdNV, + EOpHitObjectGetGeometryIndexNV, + EOpHitObjectGetPrimitiveIndexNV, + EOpHitObjectGetHitKindNV, + EOpHitObjectGetShaderBindingTableRecordIndexNV, + EOpHitObjectGetShaderRecordBufferHandleNV, + EOpHitObjectGetAttributesNV, + EOpHitObjectGetCurrentTimeNV, + EOpReorderThreadNV, + EOpFetchMicroTriangleVertexPositionNV, + EOpFetchMicroTriangleVertexBarycentricNV, + // HLSL operations // @@ -1047,9 +1091,37 @@ enum TOperator { EOpWaveActiveCountBits, // Will decompose to subgroupBallotBitCount(subgroupBallot()). EOpWavePrefixCountBits, // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()). + // GL_EXT_expect_assume + EOpAssumeEXT, + EOpExpectEXT, + // Shader Clock Ops EOpReadClockSubgroupKHR, EOpReadClockDeviceKHR, + + // GL_EXT_ray_tracing_position_fetch + EOpRayQueryGetIntersectionTriangleVertexPositionsEXT, + + // Shader tile image ops + EOpStencilAttachmentReadEXT, // Fragment only + EOpDepthAttachmentReadEXT, // Fragment only + + // Image processing + EOpImageSampleWeightedQCOM, + EOpImageBoxFilterQCOM, + EOpImageBlockMatchSADQCOM, + EOpImageBlockMatchSSDQCOM, + + // Image processing2 + EOpImageBlockMatchWindowSSDQCOM, + EOpImageBlockMatchWindowSADQCOM, + EOpImageBlockMatchGatherSSDQCOM, + EOpImageBlockMatchGatherSADQCOM, +}; + +enum TLinkType { + ELinkNone, + ELinkExport, }; class TIntermTraverser; @@ -1081,31 +1153,31 @@ class TIntermNode { virtual const glslang::TSourceLoc& getLoc() const { return loc; } virtual void setLoc(const glslang::TSourceLoc& l) { loc = l; } virtual void traverse(glslang::TIntermTraverser*) = 0; - virtual glslang::TIntermTyped* getAsTyped() { return 0; } - virtual glslang::TIntermOperator* getAsOperator() { return 0; } - virtual glslang::TIntermConstantUnion* getAsConstantUnion() { return 0; } - virtual glslang::TIntermAggregate* getAsAggregate() { return 0; } - virtual glslang::TIntermUnary* getAsUnaryNode() { return 0; } - virtual glslang::TIntermBinary* getAsBinaryNode() { return 0; } - virtual glslang::TIntermSelection* getAsSelectionNode() { return 0; } - virtual glslang::TIntermSwitch* getAsSwitchNode() { return 0; } - virtual glslang::TIntermMethod* getAsMethodNode() { return 0; } - virtual glslang::TIntermSymbol* getAsSymbolNode() { return 0; } - virtual glslang::TIntermBranch* getAsBranchNode() { return 0; } - virtual glslang::TIntermLoop* getAsLoopNode() { return 0; } - - virtual const glslang::TIntermTyped* getAsTyped() const { return 0; } - virtual const glslang::TIntermOperator* getAsOperator() const { return 0; } - virtual const glslang::TIntermConstantUnion* getAsConstantUnion() const { return 0; } - virtual const glslang::TIntermAggregate* getAsAggregate() const { return 0; } - virtual const glslang::TIntermUnary* getAsUnaryNode() const { return 0; } - virtual const glslang::TIntermBinary* getAsBinaryNode() const { return 0; } - virtual const glslang::TIntermSelection* getAsSelectionNode() const { return 0; } - virtual const glslang::TIntermSwitch* getAsSwitchNode() const { return 0; } - virtual const glslang::TIntermMethod* getAsMethodNode() const { return 0; } - virtual const glslang::TIntermSymbol* getAsSymbolNode() const { return 0; } - virtual const glslang::TIntermBranch* getAsBranchNode() const { return 0; } - virtual const glslang::TIntermLoop* getAsLoopNode() const { return 0; } + virtual glslang::TIntermTyped* getAsTyped() { return nullptr; } + virtual glslang::TIntermOperator* getAsOperator() { return nullptr; } + virtual glslang::TIntermConstantUnion* getAsConstantUnion() { return nullptr; } + virtual glslang::TIntermAggregate* getAsAggregate() { return nullptr; } + virtual glslang::TIntermUnary* getAsUnaryNode() { return nullptr; } + virtual glslang::TIntermBinary* getAsBinaryNode() { return nullptr; } + virtual glslang::TIntermSelection* getAsSelectionNode() { return nullptr; } + virtual glslang::TIntermSwitch* getAsSwitchNode() { return nullptr; } + virtual glslang::TIntermMethod* getAsMethodNode() { return nullptr; } + virtual glslang::TIntermSymbol* getAsSymbolNode() { return nullptr; } + virtual glslang::TIntermBranch* getAsBranchNode() { return nullptr; } + virtual glslang::TIntermLoop* getAsLoopNode() { return nullptr; } + + virtual const glslang::TIntermTyped* getAsTyped() const { return nullptr; } + virtual const glslang::TIntermOperator* getAsOperator() const { return nullptr; } + virtual const glslang::TIntermConstantUnion* getAsConstantUnion() const { return nullptr; } + virtual const glslang::TIntermAggregate* getAsAggregate() const { return nullptr; } + virtual const glslang::TIntermUnary* getAsUnaryNode() const { return nullptr; } + virtual const glslang::TIntermBinary* getAsBinaryNode() const { return nullptr; } + virtual const glslang::TIntermSelection* getAsSelectionNode() const { return nullptr; } + virtual const glslang::TIntermSwitch* getAsSwitchNode() const { return nullptr; } + virtual const glslang::TIntermMethod* getAsMethodNode() const { return nullptr; } + virtual const glslang::TIntermSymbol* getAsSymbolNode() const { return nullptr; } + virtual const glslang::TIntermBranch* getAsBranchNode() const { return nullptr; } + virtual const glslang::TIntermLoop* getAsLoopNode() const { return nullptr; } virtual ~TIntermNode() { } protected: @@ -1155,7 +1227,7 @@ class TIntermTyped : public TIntermNode { virtual bool isIntegerDomain() const { return type.isIntegerDomain(); } bool isAtomic() const { return type.isAtomic(); } bool isReference() const { return type.isReference(); } - TString getCompleteString() const { return type.getCompleteString(); } + TString getCompleteString(bool enhanced = false) const { return type.getCompleteString(enhanced); } protected: TIntermTyped& operator=(const TIntermTyped&); @@ -1269,9 +1341,11 @@ class TIntermMethod : public TIntermTyped { virtual const TString& getMethodName() const { return method; } virtual TIntermTyped* getObject() const { return object; } virtual void traverse(TIntermTraverser*); + void setExport() { linkType = ELinkExport; } protected: TIntermTyped* object; TString method; + TLinkType linkType; }; // @@ -1283,12 +1357,7 @@ class TIntermSymbol : public TIntermTyped { // per process threadPoolAllocator, then it causes increased memory usage per compile // it is essential to use "symbol = sym" to assign to symbol TIntermSymbol(long long i, const TString& n, const TType& t) - : TIntermTyped(t), id(i), -#ifndef GLSLANG_WEB - flattenSubset(-1), -#endif - constSubtree(nullptr) - { name = n; } + : TIntermTyped(t), id(i), flattenSubset(-1), constSubtree(nullptr) { name = n; } virtual long long getId() const { return id; } virtual void changeId(long long i) { id = i; } virtual const TString& getName() const { return name; } @@ -1299,12 +1368,10 @@ class TIntermSymbol : public TIntermTyped { const TConstUnionArray& getConstArray() const { return constArray; } void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; } TIntermTyped* getConstSubtree() const { return constSubtree; } -#ifndef GLSLANG_WEB void setFlattenSubset(int subset) { flattenSubset = subset; } virtual const TString& getAccessName() const; int getFlattenSubset() const { return flattenSubset; } // -1 means full object -#endif // This is meant for cases where a node has already been constructed, and // later on, it becomes necessary to switch to a different symbol. @@ -1312,9 +1379,7 @@ class TIntermSymbol : public TIntermTyped { protected: long long id; // the unique id of the symbol this node represents -#ifndef GLSLANG_WEB int flattenSubset; // how deeply the flattened object rooted at id has been dereferenced -#endif TString name; // the name of the symbol this node represents TConstUnionArray constArray; // if the symbol is a front-end compile-time constant, this is its value TIntermTyped* constSubtree; @@ -1353,6 +1418,7 @@ struct TCrackedTextureOp { bool subpass; bool lodClamp; bool fragMask; + bool attachmentEXT; }; // @@ -1368,19 +1434,11 @@ class TIntermOperator : public TIntermTyped { bool isConstructor() const; bool isTexture() const { return op > EOpTextureGuardBegin && op < EOpTextureGuardEnd; } bool isSampling() const { return op > EOpSamplingGuardBegin && op < EOpSamplingGuardEnd; } -#ifdef GLSLANG_WEB - bool isImage() const { return false; } - bool isSparseTexture() const { return false; } - bool isImageFootprint() const { return false; } - bool isSparseImage() const { return false; } - bool isSubgroup() const { return false; } -#else bool isImage() const { return op > EOpImageGuardBegin && op < EOpImageGuardEnd; } bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; } bool isImageFootprint() const { return op > EOpImageFootprintGuardBegin && op < EOpImageFootprintGuardEnd; } bool isSparseImage() const { return op == EOpSparseImageLoad; } bool isSubgroup() const { return op > EOpSubgroupGuardStart && op < EOpSubgroupGuardStop; } -#endif void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; } TPrecisionQualifier getOperationPrecision() const { return operationPrecision != EpqNone ? @@ -1409,6 +1467,7 @@ class TIntermOperator : public TIntermTyped { cracked.gather = false; cracked.grad = false; cracked.subpass = false; + cracked.attachmentEXT = false; cracked.lodClamp = false; cracked.fragMask = false; @@ -1485,7 +1544,6 @@ class TIntermOperator : public TIntermTyped { cracked.offset = true; cracked.proj = true; break; -#ifndef GLSLANG_WEB case EOpTextureClamp: case EOpSparseTextureClamp: cracked.lodClamp = true; @@ -1569,7 +1627,9 @@ class TIntermOperator : public TIntermTyped { case EOpSubpassLoadMS: cracked.subpass = true; break; -#endif + case EOpColorAttachmentReadEXT: + cracked.attachmentEXT = true; + break; default: break; } @@ -1611,8 +1671,8 @@ class TIntermBinary : public TIntermOperator { // class TIntermUnary : public TIntermOperator { public: - TIntermUnary(TOperator o, TType& t) : TIntermOperator(o, t), operand(0) {} - TIntermUnary(TOperator o) : TIntermOperator(o), operand(0) {} + TIntermUnary(TOperator o, TType& t) : TIntermOperator(o, t), operand(nullptr) {} + TIntermUnary(TOperator o) : TIntermOperator(o), operand(nullptr) {} virtual void traverse(TIntermTraverser*); virtual void setOperand(TIntermTyped* o) { operand = o; } virtual TIntermTyped* getOperand() { return operand; } @@ -1620,15 +1680,11 @@ class TIntermUnary : public TIntermOperator { virtual TIntermUnary* getAsUnaryNode() { return this; } virtual const TIntermUnary* getAsUnaryNode() const { return this; } virtual void updatePrecision(); -#ifndef GLSLANG_WEB void setSpirvInstruction(const TSpirvInstruction& inst) { spirvInst = inst; } const TSpirvInstruction& getSpirvInstruction() const { return spirvInst; } -#endif protected: TIntermTyped* operand; -#ifndef GLSLANG_WEB TSpirvInstruction spirvInst; -#endif }; typedef TVector TIntermSequence; @@ -1638,8 +1694,12 @@ typedef TVector TQualifierList; // class TIntermAggregate : public TIntermOperator { public: - TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(nullptr) { } - TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(nullptr) { } + TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(nullptr) { + endLoc.init(); + } + TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(nullptr) { + endLoc.init(); + } ~TIntermAggregate() { delete pragmaTable; } virtual TIntermAggregate* getAsAggregate() { return this; } virtual const TIntermAggregate* getAsAggregate() const { return this; } @@ -1660,10 +1720,14 @@ class TIntermAggregate : public TIntermOperator { bool getDebug() const { return debug; } void setPragmaTable(const TPragmaTable& pTable); const TPragmaTable& getPragmaTable() const { return *pragmaTable; } -#ifndef GLSLANG_WEB void setSpirvInstruction(const TSpirvInstruction& inst) { spirvInst = inst; } const TSpirvInstruction& getSpirvInstruction() const { return spirvInst; } -#endif + + void setEndLoc(TSourceLoc loc) { endLoc = loc; } + TSourceLoc getEndLoc() const { return endLoc; } + + void setLinkType(TLinkType l) { linkType = l; } + TLinkType getLinkType() const { return linkType; } protected: TIntermAggregate(const TIntermAggregate&); // disallow copy constructor TIntermAggregate& operator=(const TIntermAggregate&); // disallow assignment operator @@ -1674,9 +1738,12 @@ class TIntermAggregate : public TIntermOperator { bool optimize; bool debug; TPragmaTable* pragmaTable; -#ifndef GLSLANG_WEB TSpirvInstruction spirvInst; -#endif + TLinkType linkType = ELinkNone; + + // Marking the end source location of the aggregate. + // This is currently only set for a compound statement or a function body, pointing to '}'. + TSourceLoc endLoc; }; // @@ -1814,7 +1881,7 @@ class TIntermTraverser { TIntermNode *getParentNode() { - return path.size() == 0 ? NULL : path.back(); + return path.size() == 0 ? nullptr : path.back(); } const bool preVisit; diff --git a/OGLCompilersDLL/InitializeDll.h b/glslang/Include/visibility.h similarity index 68% rename from OGLCompilersDLL/InitializeDll.h rename to glslang/Include/visibility.h index 661cee4d24..9bb8f3faaa 100644 --- a/OGLCompilersDLL/InitializeDll.h +++ b/glslang/Include/visibility.h @@ -1,5 +1,6 @@ // -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2023 LunarG, Inc. +// // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -31,19 +32,23 @@ // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. // -#ifndef __INITIALIZEDLL_H -#define __INITIALIZEDLL_H - -#include "../glslang/OSDependent/osinclude.h" - -namespace glslang { - -bool InitProcess(); -bool InitThread(); -bool DetachThread(); // not called from standalone, perhaps other tools rely on parts of it -bool DetachProcess(); // not called from standalone, perhaps other tools rely on parts of it - -} // end namespace glslang +#ifdef GLSLANG_IS_SHARED_LIBRARY + #ifdef _WIN32 + #ifdef GLSLANG_EXPORTING + #define GLSLANG_EXPORT __declspec(dllexport) + #else + #define GLSLANG_EXPORT __declspec(dllimport) + #endif + #elif __GNUC__ >= 4 + #define GLSLANG_EXPORT __attribute__((visibility("default"))) + #endif +#endif // GLSLANG_IS_SHARED_LIBRARY -#endif // __INITIALIZEDLL_H +#ifndef GLSLANG_EXPORT +#define GLSLANG_EXPORT +#endif +// Symbols marked with this macro are only meant for public use by the test suite +// and do not appear in publicly installed headers. They are not considered to be +// part of the glslang library ABI. +#define GLSLANG_EXPORT_FOR_TESTS GLSLANG_EXPORT diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index 5fc61dbb79..7a9fb2ed67 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -177,7 +177,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst()); break; -#ifndef GLSLANG_WEB case EbtInt8: if (rightUnionArray[i] == (signed char)0) newConstArray[i].setI8Const((signed char)0x7F); @@ -212,9 +211,9 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right case EbtInt64: if (rightUnionArray[i] == 0ll) - newConstArray[i].setI64Const(0x7FFFFFFFFFFFFFFFll); - else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == (long long)-0x8000000000000000ll) - newConstArray[i].setI64Const((long long)-0x8000000000000000ll); + newConstArray[i].setI64Const(LLONG_MAX); + else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == LLONG_MIN) + newConstArray[i].setI64Const(LLONG_MIN); else newConstArray[i].setI64Const(leftUnionArray[i].getI64Const() / rightUnionArray[i].getI64Const()); break; @@ -226,8 +225,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right newConstArray[i].setU64Const(leftUnionArray[i].getU64Const() / rightUnionArray[i].getU64Const()); break; default: - return 0; -#endif + return nullptr; } } break; @@ -266,7 +264,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right newConstArray[i].setIConst(0); break; } else goto modulo_default; -#ifndef GLSLANG_WEB case EbtInt64: if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == LLONG_MIN) { newConstArray[i].setI64Const(0); @@ -277,7 +274,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right newConstArray[i].setIConst(0); break; } else goto modulo_default; -#endif default: modulo_default: newConstArray[i] = leftUnionArray[i] % rightUnionArray[i]; @@ -354,7 +350,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right break; default: - return 0; + return nullptr; } TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, returnType); @@ -507,14 +503,16 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) : -unionArray[i].getIConst()); break; case EbtUint: newConstArray[i].setUConst(static_cast(-static_cast(unionArray[i].getUConst()))); break; -#ifndef GLSLANG_WEB case EbtInt8: newConstArray[i].setI8Const(-unionArray[i].getI8Const()); break; case EbtUint8: newConstArray[i].setU8Const(static_cast(-static_cast(unionArray[i].getU8Const()))); break; case EbtInt16: newConstArray[i].setI16Const(-unionArray[i].getI16Const()); break; case EbtUint16:newConstArray[i].setU16Const(static_cast(-static_cast(unionArray[i].getU16Const()))); break; - case EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break; + case EbtInt64: { + int64_t i64val = unionArray[i].getI64Const(); + newConstArray[i].setI64Const(i64val == INT64_MIN ? INT64_MIN : -i64val); + break; + } case EbtUint64: newConstArray[i].setU64Const(static_cast(-static_cast(unionArray[i].getU64Const()))); break; -#endif default: return nullptr; } @@ -634,12 +632,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpIsNan: { - newConstArray[i].setBConst(IsNan(unionArray[i].getDConst())); + newConstArray[i].setBConst(std::isnan(unionArray[i].getDConst())); break; } case EOpIsInf: { - newConstArray[i].setBConst(IsInfinity(unionArray[i].getDConst())); + newConstArray[i].setBConst(std::isinf(unionArray[i].getDConst())); break; } @@ -684,7 +682,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpConvDoubleToInt: newConstArray[i].setIConst(static_cast(unionArray[i].getDConst())); break; -#ifndef GLSLANG_WEB case EOpConvInt8ToBool: newConstArray[i].setBConst(unionArray[i].getI8Const() != 0); break; case EOpConvUint8ToBool: @@ -696,7 +693,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpConvInt64ToBool: newConstArray[i].setBConst(unionArray[i].getI64Const() != 0); break; case EOpConvUint64ToBool: - newConstArray[i].setBConst(unionArray[i].getI64Const() != 0); break; + newConstArray[i].setBConst(unionArray[i].getU64Const() != 0); break; case EOpConvFloat16ToBool: newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break; @@ -919,7 +916,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpConvUint64ToPtr: case EOpConstructReference: newConstArray[i].setU64Const(unionArray[i].getU64Const()); break; -#endif // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out @@ -1017,6 +1013,12 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) objectSize = std::max(children[0]->getAsTyped()->getType().getVectorSize(), children[2]->getAsTyped()->getType().getVectorSize()); break; + case EOpMul: + { + TIntermConstantUnion* left = children[0]->getAsConstantUnion(); + TIntermConstantUnion* right = children[1]->getAsConstantUnion(); + return left->fold(EOpMul, right); + } default: return aggrNode; } @@ -1066,7 +1068,6 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) case EbtUint: newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst())); break; -#ifndef GLSLANG_WEB case EbtInt8: newConstArray[comp].setI8Const(std::min(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const())); break; @@ -1085,7 +1086,6 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) case EbtUint64: newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const())); break; -#endif default: assert(false && "Default missing"); } break; @@ -1102,7 +1102,6 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) case EbtUint: newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst())); break; -#ifndef GLSLANG_WEB case EbtInt8: newConstArray[comp].setI8Const(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const())); break; @@ -1121,7 +1120,6 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) case EbtUint64: newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const())); break; -#endif default: assert(false && "Default missing"); } break; @@ -1137,7 +1135,6 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()), childConstUnions[2][arg2comp].getUConst())); break; -#ifndef GLSLANG_WEB case EbtInt8: newConstArray[comp].setI8Const(std::min(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()), childConstUnions[2][arg2comp].getI8Const())); @@ -1166,7 +1163,6 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()), childConstUnions[2][arg2comp].getU64Const())); break; -#endif default: assert(false && "Default missing"); } break; @@ -1345,7 +1341,7 @@ TIntermTyped* TIntermediate::foldDereference(TIntermTyped* node, int index, cons { TType dereferencedType(node->getType(), index); dereferencedType.getQualifier().storage = EvqConst; - TIntermTyped* result = 0; + TIntermTyped* result = nullptr; int size = dereferencedType.computeNumComponents(); // arrays, vectors, matrices, all use simple multiplicative math @@ -1365,7 +1361,7 @@ TIntermTyped* TIntermediate::foldDereference(TIntermTyped* node, int index, cons result = addConstantUnion(TConstUnionArray(node->getAsConstantUnion()->getConstArray(), start, size), node->getType(), loc); - if (result == 0) + if (result == nullptr) result = node; else result->setType(dereferencedType); @@ -1387,7 +1383,7 @@ TIntermTyped* TIntermediate::foldSwizzle(TIntermTyped* node, TSwizzleSelectorsgetType(), loc); - if (result == 0) + if (result == nullptr) result = node; else result->setType(TType(node->getBasicType(), EvqConst, selectors.size())); diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 03fdce9f6b..d8a969d77b 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -2,7 +2,7 @@ // Copyright (C) 2002-2005 3Dlabs Inc. Ltd. // Copyright (C) 2012-2016 LunarG, Inc. // Copyright (C) 2015-2020 Google, Inc. -// Copyright (C) 2017 ARM Limited. +// Copyright (C) 2017, 2022-2024 Arm Limited. // Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved. // // All rights reserved. @@ -51,8 +51,9 @@ // including identifying what extensions are needed if a version does not allow a symbol // -#include "../Include/intermediate.h" +#include #include "Initialize.h" +#include "span.h" namespace glslang { @@ -61,10 +62,6 @@ const bool ARBCompatibility = true; const bool ForwardCompatibility = false; -// change this back to false if depending on textual spellings of texturing calls when consuming the AST -// Using PureOperatorBuiltins=false is deprecated. -bool PureOperatorBuiltins = true; - namespace { // @@ -144,29 +141,17 @@ struct Versioning { EProfile EDesktopProfile = static_cast(ENoProfile | ECoreProfile | ECompatibilityProfile); // Declare pointers to put into the table for versioning. -#ifdef GLSLANG_WEB - const Versioning* Es300Desktop130 = nullptr; - const Versioning* Es310Desktop420 = nullptr; -#elif defined(GLSLANG_ANGLE) - const Versioning* Es300Desktop130 = nullptr; - const Versioning* Es310Desktop420 = nullptr; - const Versioning* Es310Desktop450 = nullptr; -#else - const Versioning Es300Desktop130Version[] = { { EEsProfile, 0, 300, 0, nullptr }, - { EDesktopProfile, 0, 130, 0, nullptr }, - { EBadProfile } }; - const Versioning* Es300Desktop130 = &Es300Desktop130Version[0]; - - const Versioning Es310Desktop420Version[] = { { EEsProfile, 0, 310, 0, nullptr }, - { EDesktopProfile, 0, 420, 0, nullptr }, - { EBadProfile } }; - const Versioning* Es310Desktop420 = &Es310Desktop420Version[0]; - - const Versioning Es310Desktop450Version[] = { { EEsProfile, 0, 310, 0, nullptr }, - { EDesktopProfile, 0, 450, 0, nullptr }, - { EBadProfile } }; - const Versioning* Es310Desktop450 = &Es310Desktop450Version[0]; -#endif + const std::array Es300Desktop130Version = { Versioning{ EEsProfile, 0, 300, 0, nullptr }, + Versioning{ EDesktopProfile, 0, 130, 0, nullptr }, + }; + + const std::array Es310Desktop400Version = { Versioning{ EEsProfile, 0, 310, 0, nullptr }, + Versioning{ EDesktopProfile, 0, 400, 0, nullptr }, + }; + + const std::array Es310Desktop450Version = { Versioning{ EEsProfile, 0, 310, 0, nullptr }, + Versioning{ EDesktopProfile, 0, 450, 0, nullptr }, + }; // The main descriptor of what a set of function prototypes can look like, and // a pointer to extra versioning information, when needed. @@ -176,7 +161,7 @@ struct BuiltInFunction { int numArguments; // number of arguments (overloads with varying arguments need different entries) ArgType types; // ArgType mask ArgClass classes; // the ways this particular function entry manifests - const Versioning* versioning; // nullptr means always a valid version + const span versioning; // An empty span means always a valid version }; // The tables can have the same built-in function name more than one time, @@ -188,153 +173,146 @@ struct BuiltInFunction { // // Table is terminated by an OpNull TOperator. -const BuiltInFunction BaseFunctions[] = { +const std::array BaseFunctions = { // TOperator, name, arg-count, ArgType, ArgClass, versioning // --------- ---- --------- ------- -------- ---------- - { EOpRadians, "radians", 1, TypeF, ClassRegular, nullptr }, - { EOpDegrees, "degrees", 1, TypeF, ClassRegular, nullptr }, - { EOpSin, "sin", 1, TypeF, ClassRegular, nullptr }, - { EOpCos, "cos", 1, TypeF, ClassRegular, nullptr }, - { EOpTan, "tan", 1, TypeF, ClassRegular, nullptr }, - { EOpAsin, "asin", 1, TypeF, ClassRegular, nullptr }, - { EOpAcos, "acos", 1, TypeF, ClassRegular, nullptr }, - { EOpAtan, "atan", 2, TypeF, ClassRegular, nullptr }, - { EOpAtan, "atan", 1, TypeF, ClassRegular, nullptr }, - { EOpPow, "pow", 2, TypeF, ClassRegular, nullptr }, - { EOpExp, "exp", 1, TypeF, ClassRegular, nullptr }, - { EOpLog, "log", 1, TypeF, ClassRegular, nullptr }, - { EOpExp2, "exp2", 1, TypeF, ClassRegular, nullptr }, - { EOpLog2, "log2", 1, TypeF, ClassRegular, nullptr }, - { EOpSqrt, "sqrt", 1, TypeF, ClassRegular, nullptr }, - { EOpInverseSqrt, "inversesqrt", 1, TypeF, ClassRegular, nullptr }, - { EOpAbs, "abs", 1, TypeF, ClassRegular, nullptr }, - { EOpSign, "sign", 1, TypeF, ClassRegular, nullptr }, - { EOpFloor, "floor", 1, TypeF, ClassRegular, nullptr }, - { EOpCeil, "ceil", 1, TypeF, ClassRegular, nullptr }, - { EOpFract, "fract", 1, TypeF, ClassRegular, nullptr }, - { EOpMod, "mod", 2, TypeF, ClassLS, nullptr }, - { EOpMin, "min", 2, TypeF, ClassLS, nullptr }, - { EOpMax, "max", 2, TypeF, ClassLS, nullptr }, - { EOpClamp, "clamp", 3, TypeF, ClassLS2, nullptr }, - { EOpMix, "mix", 3, TypeF, ClassLS, nullptr }, - { EOpStep, "step", 2, TypeF, ClassFS, nullptr }, - { EOpSmoothStep, "smoothstep", 3, TypeF, ClassFS2, nullptr }, - { EOpNormalize, "normalize", 1, TypeF, ClassRegular, nullptr }, - { EOpFaceForward, "faceforward", 3, TypeF, ClassRegular, nullptr }, - { EOpReflect, "reflect", 2, TypeF, ClassRegular, nullptr }, - { EOpRefract, "refract", 3, TypeF, ClassXLS, nullptr }, - { EOpLength, "length", 1, TypeF, ClassRS, nullptr }, - { EOpDistance, "distance", 2, TypeF, ClassRS, nullptr }, - { EOpDot, "dot", 2, TypeF, ClassRS, nullptr }, - { EOpCross, "cross", 2, TypeF, ClassV3, nullptr }, - { EOpLessThan, "lessThan", 2, TypeFI, ClassBNS, nullptr }, - { EOpLessThanEqual, "lessThanEqual", 2, TypeFI, ClassBNS, nullptr }, - { EOpGreaterThan, "greaterThan", 2, TypeFI, ClassBNS, nullptr }, - { EOpGreaterThanEqual, "greaterThanEqual", 2, TypeFI, ClassBNS, nullptr }, - { EOpVectorEqual, "equal", 2, TypeFIB, ClassBNS, nullptr }, - { EOpVectorNotEqual, "notEqual", 2, TypeFIB, ClassBNS, nullptr }, - { EOpAny, "any", 1, TypeB, ClassRSNS, nullptr }, - { EOpAll, "all", 1, TypeB, ClassRSNS, nullptr }, - { EOpVectorLogicalNot, "not", 1, TypeB, ClassNS, nullptr }, - { EOpSinh, "sinh", 1, TypeF, ClassRegular, Es300Desktop130 }, - { EOpCosh, "cosh", 1, TypeF, ClassRegular, Es300Desktop130 }, - { EOpTanh, "tanh", 1, TypeF, ClassRegular, Es300Desktop130 }, - { EOpAsinh, "asinh", 1, TypeF, ClassRegular, Es300Desktop130 }, - { EOpAcosh, "acosh", 1, TypeF, ClassRegular, Es300Desktop130 }, - { EOpAtanh, "atanh", 1, TypeF, ClassRegular, Es300Desktop130 }, - { EOpAbs, "abs", 1, TypeI, ClassRegular, Es300Desktop130 }, - { EOpSign, "sign", 1, TypeI, ClassRegular, Es300Desktop130 }, - { EOpTrunc, "trunc", 1, TypeF, ClassRegular, Es300Desktop130 }, - { EOpRound, "round", 1, TypeF, ClassRegular, Es300Desktop130 }, - { EOpRoundEven, "roundEven", 1, TypeF, ClassRegular, Es300Desktop130 }, - { EOpModf, "modf", 2, TypeF, ClassLO, Es300Desktop130 }, - { EOpMin, "min", 2, TypeIU, ClassLS, Es300Desktop130 }, - { EOpMax, "max", 2, TypeIU, ClassLS, Es300Desktop130 }, - { EOpClamp, "clamp", 3, TypeIU, ClassLS2, Es300Desktop130 }, - { EOpMix, "mix", 3, TypeF, ClassLB, Es300Desktop130 }, - { EOpIsInf, "isinf", 1, TypeF, ClassB, Es300Desktop130 }, - { EOpIsNan, "isnan", 1, TypeF, ClassB, Es300Desktop130 }, - { EOpLessThan, "lessThan", 2, TypeU, ClassBNS, Es300Desktop130 }, - { EOpLessThanEqual, "lessThanEqual", 2, TypeU, ClassBNS, Es300Desktop130 }, - { EOpGreaterThan, "greaterThan", 2, TypeU, ClassBNS, Es300Desktop130 }, - { EOpGreaterThanEqual, "greaterThanEqual", 2, TypeU, ClassBNS, Es300Desktop130 }, - { EOpVectorEqual, "equal", 2, TypeU, ClassBNS, Es300Desktop130 }, - { EOpVectorNotEqual, "notEqual", 2, TypeU, ClassBNS, Es300Desktop130 }, - { EOpAtomicAdd, "atomicAdd", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 }, - { EOpAtomicMin, "atomicMin", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 }, - { EOpAtomicMax, "atomicMax", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 }, - { EOpAtomicAnd, "atomicAnd", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 }, - { EOpAtomicOr, "atomicOr", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 }, - { EOpAtomicXor, "atomicXor", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 }, - { EOpAtomicExchange, "atomicExchange", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 }, - { EOpAtomicCompSwap, "atomicCompSwap", 3, TypeIU, ClassV1FIOCV, Es310Desktop420 }, -#ifndef GLSLANG_WEB - { EOpMix, "mix", 3, TypeB, ClassRegular, Es310Desktop450 }, - { EOpMix, "mix", 3, TypeIU, ClassLB, Es310Desktop450 }, -#endif - - { EOpNull } + BuiltInFunction{ EOpRadians, "radians", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpDegrees, "degrees", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpSin, "sin", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpCos, "cos", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpTan, "tan", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpAsin, "asin", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpAcos, "acos", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpAtan, "atan", 2, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpAtan, "atan", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpPow, "pow", 2, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpExp, "exp", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpLog, "log", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpExp2, "exp2", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpLog2, "log2", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpSqrt, "sqrt", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpInverseSqrt, "inversesqrt", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpAbs, "abs", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpSign, "sign", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpFloor, "floor", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpCeil, "ceil", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpFract, "fract", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpMod, "mod", 2, TypeF, ClassLS, {} }, + BuiltInFunction{ EOpMin, "min", 2, TypeF, ClassLS, {} }, + BuiltInFunction{ EOpMax, "max", 2, TypeF, ClassLS, {} }, + BuiltInFunction{ EOpClamp, "clamp", 3, TypeF, ClassLS2, {} }, + BuiltInFunction{ EOpMix, "mix", 3, TypeF, ClassLS, {} }, + BuiltInFunction{ EOpStep, "step", 2, TypeF, ClassFS, {} }, + BuiltInFunction{ EOpSmoothStep, "smoothstep", 3, TypeF, ClassFS2, {} }, + BuiltInFunction{ EOpNormalize, "normalize", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpFaceForward, "faceforward", 3, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpReflect, "reflect", 2, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpRefract, "refract", 3, TypeF, ClassXLS, {} }, + BuiltInFunction{ EOpLength, "length", 1, TypeF, ClassRS, {} }, + BuiltInFunction{ EOpDistance, "distance", 2, TypeF, ClassRS, {} }, + BuiltInFunction{ EOpDot, "dot", 2, TypeF, ClassRS, {} }, + BuiltInFunction{ EOpCross, "cross", 2, TypeF, ClassV3, {} }, + BuiltInFunction{ EOpLessThan, "lessThan", 2, TypeFI, ClassBNS, {} }, + BuiltInFunction{ EOpLessThanEqual, "lessThanEqual", 2, TypeFI, ClassBNS, {} }, + BuiltInFunction{ EOpGreaterThan, "greaterThan", 2, TypeFI, ClassBNS, {} }, + BuiltInFunction{ EOpGreaterThanEqual, "greaterThanEqual", 2, TypeFI, ClassBNS, {} }, + BuiltInFunction{ EOpVectorEqual, "equal", 2, TypeFIB, ClassBNS, {} }, + BuiltInFunction{ EOpVectorNotEqual, "notEqual", 2, TypeFIB, ClassBNS, {} }, + BuiltInFunction{ EOpAny, "any", 1, TypeB, ClassRSNS, {} }, + BuiltInFunction{ EOpAll, "all", 1, TypeB, ClassRSNS, {} }, + BuiltInFunction{ EOpVectorLogicalNot, "not", 1, TypeB, ClassNS, {} }, + BuiltInFunction{ EOpSinh, "sinh", 1, TypeF, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpCosh, "cosh", 1, TypeF, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpTanh, "tanh", 1, TypeF, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpAsinh, "asinh", 1, TypeF, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpAcosh, "acosh", 1, TypeF, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpAtanh, "atanh", 1, TypeF, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpAbs, "abs", 1, TypeI, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpSign, "sign", 1, TypeI, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpTrunc, "trunc", 1, TypeF, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpRound, "round", 1, TypeF, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpRoundEven, "roundEven", 1, TypeF, ClassRegular, {Es300Desktop130Version} }, + BuiltInFunction{ EOpModf, "modf", 2, TypeF, ClassLO, {Es300Desktop130Version} }, + BuiltInFunction{ EOpMin, "min", 2, TypeIU, ClassLS, {Es300Desktop130Version} }, + BuiltInFunction{ EOpMax, "max", 2, TypeIU, ClassLS, {Es300Desktop130Version} }, + BuiltInFunction{ EOpClamp, "clamp", 3, TypeIU, ClassLS2, {Es300Desktop130Version} }, + BuiltInFunction{ EOpMix, "mix", 3, TypeF, ClassLB, {Es300Desktop130Version} }, + BuiltInFunction{ EOpIsInf, "isinf", 1, TypeF, ClassB, {Es300Desktop130Version} }, + BuiltInFunction{ EOpIsNan, "isnan", 1, TypeF, ClassB, {Es300Desktop130Version} }, + BuiltInFunction{ EOpLessThan, "lessThan", 2, TypeU, ClassBNS, {Es300Desktop130Version} }, + BuiltInFunction{ EOpLessThanEqual, "lessThanEqual", 2, TypeU, ClassBNS, {Es300Desktop130Version} }, + BuiltInFunction{ EOpGreaterThan, "greaterThan", 2, TypeU, ClassBNS, {Es300Desktop130Version} }, + BuiltInFunction{ EOpGreaterThanEqual, "greaterThanEqual", 2, TypeU, ClassBNS, {Es300Desktop130Version} }, + BuiltInFunction{ EOpVectorEqual, "equal", 2, TypeU, ClassBNS, {Es300Desktop130Version} }, + BuiltInFunction{ EOpVectorNotEqual, "notEqual", 2, TypeU, ClassBNS, {Es300Desktop130Version} }, + BuiltInFunction{ EOpAtomicAdd, "atomicAdd", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicMin, "atomicMin", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicMax, "atomicMax", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicAnd, "atomicAnd", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicOr, "atomicOr", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicXor, "atomicXor", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicExchange, "atomicExchange", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicCompSwap, "atomicCompSwap", 3, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, + BuiltInFunction{ EOpMix, "mix", 3, TypeB, ClassRegular, {Es310Desktop450Version} }, + BuiltInFunction{ EOpMix, "mix", 3, TypeIU, ClassLB, {Es310Desktop450Version} }, }; -const BuiltInFunction DerivativeFunctions[] = { - { EOpDPdx, "dFdx", 1, TypeF, ClassRegular, nullptr }, - { EOpDPdy, "dFdy", 1, TypeF, ClassRegular, nullptr }, - { EOpFwidth, "fwidth", 1, TypeF, ClassRegular, nullptr }, - { EOpNull } +const std::array DerivativeFunctions = { + BuiltInFunction{ EOpDPdx, "dFdx", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpDPdy, "dFdy", 1, TypeF, ClassRegular, {} }, + BuiltInFunction{ EOpFwidth, "fwidth", 1, TypeF, ClassRegular, {} }, }; // For functions declared some other way, but still use the table to relate to operator. struct CustomFunction { TOperator op; // operator to map the name to const char* name; // function name - const Versioning* versioning; // nullptr means always a valid version + const span versioning; // An empty span means always a valid version }; const CustomFunction CustomFunctions[] = { - { EOpBarrier, "barrier", nullptr }, - { EOpMemoryBarrierShared, "memoryBarrierShared", nullptr }, - { EOpGroupMemoryBarrier, "groupMemoryBarrier", nullptr }, - { EOpMemoryBarrier, "memoryBarrier", nullptr }, - { EOpMemoryBarrierBuffer, "memoryBarrierBuffer", nullptr }, - - { EOpPackSnorm2x16, "packSnorm2x16", nullptr }, - { EOpUnpackSnorm2x16, "unpackSnorm2x16", nullptr }, - { EOpPackUnorm2x16, "packUnorm2x16", nullptr }, - { EOpUnpackUnorm2x16, "unpackUnorm2x16", nullptr }, - { EOpPackHalf2x16, "packHalf2x16", nullptr }, - { EOpUnpackHalf2x16, "unpackHalf2x16", nullptr }, - - { EOpMul, "matrixCompMult", nullptr }, - { EOpOuterProduct, "outerProduct", nullptr }, - { EOpTranspose, "transpose", nullptr }, - { EOpDeterminant, "determinant", nullptr }, - { EOpMatrixInverse, "inverse", nullptr }, - { EOpFloatBitsToInt, "floatBitsToInt", nullptr }, - { EOpFloatBitsToUint, "floatBitsToUint", nullptr }, - { EOpIntBitsToFloat, "intBitsToFloat", nullptr }, - { EOpUintBitsToFloat, "uintBitsToFloat", nullptr }, - - { EOpTextureQuerySize, "textureSize", nullptr }, - { EOpTextureQueryLod, "textureQueryLod", nullptr }, - { EOpTextureQueryLod, "textureQueryLOD", nullptr }, // extension GL_ARB_texture_query_lod - { EOpTextureQueryLevels, "textureQueryLevels", nullptr }, - { EOpTextureQuerySamples, "textureSamples", nullptr }, - { EOpTexture, "texture", nullptr }, - { EOpTextureProj, "textureProj", nullptr }, - { EOpTextureLod, "textureLod", nullptr }, - { EOpTextureOffset, "textureOffset", nullptr }, - { EOpTextureFetch, "texelFetch", nullptr }, - { EOpTextureFetchOffset, "texelFetchOffset", nullptr }, - { EOpTextureProjOffset, "textureProjOffset", nullptr }, - { EOpTextureLodOffset, "textureLodOffset", nullptr }, - { EOpTextureProjLod, "textureProjLod", nullptr }, - { EOpTextureProjLodOffset, "textureProjLodOffset", nullptr }, - { EOpTextureGrad, "textureGrad", nullptr }, - { EOpTextureGradOffset, "textureGradOffset", nullptr }, - { EOpTextureProjGrad, "textureProjGrad", nullptr }, - { EOpTextureProjGradOffset, "textureProjGradOffset", nullptr }, - - { EOpNull } + { EOpBarrier, "barrier", {} }, + { EOpMemoryBarrierShared, "memoryBarrierShared", {} }, + { EOpGroupMemoryBarrier, "groupMemoryBarrier", {} }, + { EOpMemoryBarrier, "memoryBarrier", {} }, + { EOpMemoryBarrierBuffer, "memoryBarrierBuffer", {} }, + + { EOpPackSnorm2x16, "packSnorm2x16", {} }, + { EOpUnpackSnorm2x16, "unpackSnorm2x16", {} }, + { EOpPackUnorm2x16, "packUnorm2x16", {} }, + { EOpUnpackUnorm2x16, "unpackUnorm2x16", {} }, + { EOpPackHalf2x16, "packHalf2x16", {} }, + { EOpUnpackHalf2x16, "unpackHalf2x16", {} }, + + { EOpMul, "matrixCompMult", {} }, + { EOpOuterProduct, "outerProduct", {} }, + { EOpTranspose, "transpose", {} }, + { EOpDeterminant, "determinant", {} }, + { EOpMatrixInverse, "inverse", {} }, + { EOpFloatBitsToInt, "floatBitsToInt", {} }, + { EOpFloatBitsToUint, "floatBitsToUint", {} }, + { EOpIntBitsToFloat, "intBitsToFloat", {} }, + { EOpUintBitsToFloat, "uintBitsToFloat", {} }, + + { EOpTextureQuerySize, "textureSize", {} }, + { EOpTextureQueryLod, "textureQueryLod", {} }, + { EOpTextureQueryLod, "textureQueryLOD", {} }, // extension GL_ARB_texture_query_lod + { EOpTextureQueryLevels, "textureQueryLevels", {} }, + { EOpTextureQuerySamples, "textureSamples", {} }, + { EOpTexture, "texture", {} }, + { EOpTextureProj, "textureProj", {} }, + { EOpTextureLod, "textureLod", {} }, + { EOpTextureOffset, "textureOffset", {} }, + { EOpTextureFetch, "texelFetch", {} }, + { EOpTextureFetchOffset, "texelFetchOffset", {} }, + { EOpTextureProjOffset, "textureProjOffset", {} }, + { EOpTextureLodOffset, "textureLodOffset", {} }, + { EOpTextureProjLod, "textureProjLod", {} }, + { EOpTextureProjLodOffset, "textureProjLodOffset", {} }, + { EOpTextureGrad, "textureGrad", {} }, + { EOpTextureGradOffset, "textureGradOffset", {} }, + { EOpTextureProjGrad, "textureProjGrad", {} }, + { EOpTextureProjGradOffset, "textureProjGradOffset", {} }, }; // For the given table of functions, add all the indicated prototypes for each @@ -390,10 +368,8 @@ void AddTabledBuiltin(TString& decls, const BuiltInFunction& function) if (arg == function.numArguments - 1 && (function.classes & ClassLO)) decls.append("out "); if (arg == 0) { -#ifndef GLSLANG_WEB if (function.classes & ClassCV) decls.append("coherent volatile "); -#endif if (function.classes & ClassFIO) decls.append("inout "); if (function.classes & ClassFO) @@ -420,19 +396,14 @@ void AddTabledBuiltin(TString& decls, const BuiltInFunction& function) // See if the tabled versioning information allows the current version. bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */) { -#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE) - // all entries in table are valid - return true; -#endif - // nullptr means always valid - if (function.versioning == nullptr) + if (function.versioning.empty()) return true; // check for what is said about our current profile - for (const Versioning* v = function.versioning; v->profiles != EBadProfile; ++v) { - if ((v->profiles & profile) != 0) { - if (v->minCoreVersion <= version || (v->numExtensions > 0 && v->minExtendedVersion <= version)) + for (const auto& v : function.versioning) { + if ((v.profiles & profile) != 0) { + if (v.minCoreVersion <= version || (v.numExtensions > 0 && v.minExtendedVersion <= version)) return true; } } @@ -445,12 +416,11 @@ bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile // called once per stage). This is a performance issue only, not a correctness // concern. It is done for quality arising from simplicity, as there are subtleties // to get correct if instead trying to do it surgically. -template -void RelateTabledBuiltins(const FunctionT* functions, TSymbolTable& symbolTable) +template +void RelateTabledBuiltins(const FunctionContainer& functions, TSymbolTable& symbolTable) { - while (functions->op != EOpNull) { - symbolTable.relateToOperator(functions->name, functions->op); - ++functions; + for (const auto& fn : functions) { + symbolTable.relateToOperator(fn.name, fn.op); } } @@ -459,11 +429,10 @@ void RelateTabledBuiltins(const FunctionT* functions, TSymbolTable& symbolTable) // Add declarations for all tables of built-in functions. void TBuiltIns::addTabledBuiltins(int version, EProfile profile, const SpvVersion& spvVersion) { - const auto forEachFunction = [&](TString& decls, const BuiltInFunction* function) { - while (function->op != EOpNull) { - if (ValidVersion(*function, version, profile, spvVersion)) - AddTabledBuiltin(decls, *function); - ++function; + const auto forEachFunction = [&](TString& decls, const span& functions) { + for (const auto& fn : functions) { + if (ValidVersion(fn, version, profile, spvVersion)) + AddTabledBuiltin(decls, fn); } }; @@ -505,7 +474,6 @@ TBuiltIns::TBuiltIns() prefixes[EbtFloat] = ""; prefixes[EbtInt] = "i"; prefixes[EbtUint] = "u"; -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) prefixes[EbtFloat16] = "f16"; prefixes[EbtInt8] = "i8"; prefixes[EbtUint8] = "u8"; @@ -513,7 +481,6 @@ TBuiltIns::TBuiltIns() prefixes[EbtUint16] = "u16"; prefixes[EbtInt64] = "i64"; prefixes[EbtUint64] = "u64"; -#endif postfixes[2] = "2"; postfixes[3] = "3"; @@ -523,14 +490,11 @@ TBuiltIns::TBuiltIns() dimMap[Esd2D] = 2; dimMap[Esd3D] = 3; dimMap[EsdCube] = 3; -#ifndef GLSLANG_WEB -#ifndef GLSLANG_ANGLE dimMap[Esd1D] = 1; -#endif dimMap[EsdRect] = 2; dimMap[EsdBuffer] = 1; dimMap[EsdSubpass] = 2; // potentially unused for now -#endif + dimMap[EsdAttachmentEXT] = 2; // potentially unused for now } TBuiltIns::~TBuiltIns() @@ -548,13 +512,6 @@ TBuiltIns::~TBuiltIns() // void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvVersion) { -#ifdef GLSLANG_WEB - version = 310; - profile = EEsProfile; -#elif defined(GLSLANG_ANGLE) - version = 450; - profile = ECoreProfile; -#endif addTabledBuiltins(version, profile, spvVersion); //============================================================================ @@ -563,7 +520,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV // //============================================================================ -#ifndef GLSLANG_WEB // // Derivatives Functions. // @@ -599,7 +555,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "vec4 fwidthCoarse(vec4 p);" ); -#ifndef GLSLANG_ANGLE TString derivativesAndControl16bits ( "float16_t dFdx(float16_t);" "f16vec2 dFdx(f16vec2);" @@ -1393,7 +1348,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n" ); } -#endif // !GLSLANG_ANGLE if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 430)) { @@ -1431,7 +1385,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#ifndef GLSLANG_ANGLE if (profile != EEsProfile && version >= 440) { commonBuiltins.append( "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);" @@ -1511,8 +1464,20 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void atomicStore(coherent volatile out double, double, int, int, int);" "\n"); } -#endif // !GLSLANG_ANGLE -#endif // !GLSLANG_WEB + + // NV_shader_atomic_fp16_vector + if (profile != EEsProfile && version >= 430) { + commonBuiltins.append( + "f16vec2 atomicAdd(coherent volatile inout f16vec2, f16vec2);" + "f16vec4 atomicAdd(coherent volatile inout f16vec4, f16vec4);" + "f16vec2 atomicMin(coherent volatile inout f16vec2, f16vec2);" + "f16vec4 atomicMin(coherent volatile inout f16vec4, f16vec4);" + "f16vec2 atomicMax(coherent volatile inout f16vec2, f16vec2);" + "f16vec4 atomicMax(coherent volatile inout f16vec4, f16vec4);" + "f16vec2 atomicExchange(coherent volatile inout f16vec2, f16vec2);" + "f16vec4 atomicExchange(coherent volatile inout f16vec4, f16vec4);" + "\n"); + } if ((profile == EEsProfile && version >= 300) || (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding @@ -1540,7 +1505,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#ifndef GLSLANG_WEB if ((profile != EEsProfile && version >= 400) || (profile == EEsProfile && version >= 310)) { // GL_OES_gpu_shader5 @@ -1552,7 +1516,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#ifndef GLSLANG_ANGLE if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64 commonBuiltins.append( "double fma(double, double, double);" @@ -1570,7 +1533,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "f64vec4 fma(f64vec4, f64vec4, f64vec4 );" "\n"); } -#endif if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 400)) { @@ -1588,7 +1550,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#ifndef GLSLANG_ANGLE if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64 commonBuiltins.append( "double frexp(double, out int);" @@ -1621,8 +1582,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#endif -#endif if ((profile == EEsProfile && version >= 300) || (profile != EEsProfile && version >= 150)) { @@ -1651,7 +1610,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#ifndef GLSLANG_WEB if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 150)) { commonBuiltins.append( @@ -1671,7 +1629,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "vec4 unpackUnorm4x8(highp uint);" "\n"); } -#endif // // Matrix Functions. @@ -1730,8 +1687,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } } -#ifndef GLSLANG_WEB -#ifndef GLSLANG_ANGLE // // Original-style texture functions existing in all stages. // (Per-stage functions below.) @@ -1777,6 +1732,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "vec4 shadow2DRect(sampler2DRectShadow, vec3);" // GL_ARB_texture_rectangle, caught by keyword check "vec4 shadow2DRectProj(sampler2DRectShadow, vec4);" // GL_ARB_texture_rectangle, caught by keyword check + "vec4 texture1DArray(sampler1DArray, vec2);" // GL_EXT_texture_array + "vec4 texture2DArray(sampler2DArray, vec3);" // GL_EXT_texture_array + "vec4 shadow1DArray(sampler1DArrayShadow, vec3);" // GL_EXT_texture_array + "vec4 shadow2DArray(sampler2DArrayShadow, vec4);" // GL_EXT_texture_array + "vec4 texture1DArray(sampler1DArray, vec2, float);" // GL_EXT_texture_array + "vec4 texture2DArray(sampler2DArray, vec3, float);" // GL_EXT_texture_array + "vec4 shadow1DArray(sampler1DArrayShadow, vec3, float);" // GL_EXT_texture_array + "vec4 texture1DArrayLod(sampler1DArray, vec2, float);" // GL_EXT_texture_array + "vec4 texture2DArrayLod(sampler2DArray, vec3, float);" // GL_EXT_texture_array + "vec4 shadow1DArrayLod(sampler1DArrayShadow, vec3, float);" // GL_EXT_texture_array "\n"); } } @@ -1926,7 +1891,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } } -#endif // !GLSLANG_ANGLE // Bitfield if ((profile == EEsProfile && version >= 310) || @@ -2069,7 +2033,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#ifndef GLSLANG_ANGLE // GL_ARB_shader_ballot if (profile != EEsProfile && version >= 450) { commonBuiltins.append( @@ -2150,6 +2113,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "%s subgroupShuffleXor(%s, uint);\n", "%s subgroupShuffleUp(%s, uint delta);\n", "%s subgroupShuffleDown(%s, uint delta);\n", + "%s subgroupRotate(%s, uint);\n", + "%s subgroupClusteredRotate(%s, uint, uint);\n", "%s subgroupAdd(%s);\n", "%s subgroupMul(%s);\n", "%s subgroupMin(%s);\n", @@ -2268,16 +2233,25 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n" ); - stageBuiltins[EShLangMeshNV].append( + stageBuiltins[EShLangMesh].append( "void subgroupMemoryBarrierShared();" "\n" ); - stageBuiltins[EShLangTaskNV].append( + stageBuiltins[EShLangTask].append( "void subgroupMemoryBarrierShared();" "\n" ); } + // GL_EXT_shader_quad_control + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 140)) { + commonBuiltins.append( + "bool subgroupQuadAll(bool);\n" + "bool subgroupQuadAny(bool);\n" + ); + } + if (profile != EEsProfile && version >= 460) { commonBuiltins.append( "bool anyInvocation(bool);" @@ -3390,7 +3364,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);" "\n"); } -#endif // !GLSLANG_ANGLE if ((profile == EEsProfile && version >= 300 && version < 310) || (profile != EEsProfile && version >= 150 && version < 450)) { // GL_EXT_shader_integer_mix @@ -3410,7 +3383,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#ifndef GLSLANG_ANGLE // GL_AMD_gpu_shader_half_float/Explicit types if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) { commonBuiltins.append( @@ -4160,6 +4132,50 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "u16vec4 unpack16(uint64_t);" "i32vec2 unpack32(int64_t);" "u32vec2 unpack32(uint64_t);" + + // GL_EXT_expect_assume + "int8_t expectEXT(int8_t, int8_t);" + "i8vec2 expectEXT(i8vec2, i8vec2);" + "i8vec3 expectEXT(i8vec3, i8vec3);" + "i8vec4 expectEXT(i8vec4, i8vec4);" + + "uint8_t expectEXT(uint8_t, uint8_t);" + "u8vec2 expectEXT(u8vec2, u8vec2);" + "u8vec3 expectEXT(u8vec3, u8vec3);" + "u8vec4 expectEXT(u8vec4, u8vec4);" + + "int16_t expectEXT(int16_t, int16_t);" + "i16vec2 expectEXT(i16vec2, i16vec2);" + "i16vec3 expectEXT(i16vec3, i16vec3);" + "i16vec4 expectEXT(i16vec4, i16vec4);" + + "uint16_t expectEXT(uint16_t, uint16_t);" + "u16vec2 expectEXT(u16vec2, u16vec2);" + "u16vec3 expectEXT(u16vec3, u16vec3);" + "u16vec4 expectEXT(u16vec4, u16vec4);" + + "int64_t expectEXT(int64_t, int64_t);" + "i64vec2 expectEXT(i64vec2, i64vec2);" + "i64vec3 expectEXT(i64vec3, i64vec3);" + "i64vec4 expectEXT(i64vec4, i64vec4);" + + "uint64_t expectEXT(uint64_t, uint64_t);" + "u64vec2 expectEXT(u64vec2, u64vec2);" + "u64vec3 expectEXT(u64vec3, u64vec3);" + "u64vec4 expectEXT(u64vec4, u64vec4);" + "\n"); + } + + // Builtins for GL_EXT_texture_shadow_lod + if ((profile == EEsProfile && version >= 300) || ((profile != EEsProfile && version >= 130))) { + commonBuiltins.append( + "float texture(sampler2DArrayShadow, vec4, float);" + "float texture(samplerCubeArrayShadow, vec4, float, float);" + "float textureLod(sampler2DArrayShadow, vec4, float);" + "float textureLod(samplerCubeShadow, vec4, float);" + "float textureLod(samplerCubeArrayShadow, vec4, float, float);" + "float textureLodOffset(sampler2DArrayShadow, vec4, float, ivec2);" + "float textureOffset(sampler2DArrayShadow, vec4 , ivec2, float);" "\n"); } @@ -4184,7 +4200,46 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#endif // !GLSLANG_ANGLE + + // GL_EXT_expect_assume + if ((profile == EEsProfile && version >= 310) || + ((profile != EEsProfile && version >= 140))) { + commonBuiltins.append( + "void assumeEXT(bool);" + + "bool expectEXT(bool, bool);" + "bvec2 expectEXT(bvec2, bvec2);" + "bvec3 expectEXT(bvec3, bvec3);" + "bvec4 expectEXT(bvec4, bvec4);" + + "int expectEXT(int, int);" + "ivec2 expectEXT(ivec2, ivec2);" + "ivec3 expectEXT(ivec3, ivec3);" + "ivec4 expectEXT(ivec4, ivec4);" + + "uint expectEXT(uint, uint);" + "uvec2 expectEXT(uvec2, uvec2);" + "uvec3 expectEXT(uvec3, uvec3);" + "uvec4 expectEXT(uvec4, uvec4);" + "\n"); + } + + // QCOM_image_processing + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 140)) { + commonBuiltins.append( + "vec4 textureWeightedQCOM(sampler2D, vec2, sampler2DArray);" + "vec4 textureWeightedQCOM(sampler2D, vec2, sampler1DArray);" + "vec4 textureBoxFilterQCOM(sampler2D, vec2, vec2);" + "vec4 textureBlockMatchSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);" + "vec4 textureBlockMatchSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);" + + "vec4 textureBlockMatchWindowSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);" + "vec4 textureBlockMatchWindowSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);" + "vec4 textureBlockMatchGatherSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);" + "vec4 textureBlockMatchGatherSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);" + "\n"); + } //============================================================================ // @@ -4200,7 +4255,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion)) stageBuiltins[EShLangVertex].append("vec4 ftransform();"); -#ifndef GLSLANG_ANGLE // // Original-style texture Functions with lod. // @@ -4260,7 +4314,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } } -#endif // !GLSLANG_ANGLE if ((profile != EEsProfile && version >= 150) || (profile == EEsProfile && version >= 310)) { @@ -4281,7 +4334,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void EndPrimitive();" "\n"); } -#endif // !GLSLANG_WEB //============================================================================ // @@ -4298,10 +4350,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void barrier();" ); if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { - stageBuiltins[EShLangMeshNV].append( + stageBuiltins[EShLangMesh].append( "void barrier();" ); - stageBuiltins[EShLangTaskNV].append( + stageBuiltins[EShLangTask].append( "void barrier();" ); } @@ -4318,7 +4370,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void groupMemoryBarrier();" ); } -#ifndef GLSLANG_WEB if ((profile != EEsProfile && version >= 420) || esBarrier) { if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed) { commonBuiltins.append("void memoryBarrierAtomicCounter();"); @@ -4326,11 +4377,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV commonBuiltins.append("void memoryBarrierImage();"); } if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { - stageBuiltins[EShLangMeshNV].append( + stageBuiltins[EShLangMesh].append( "void memoryBarrierShared();" "void groupMemoryBarrier();" ); - stageBuiltins[EShLangTaskNV].append( + stageBuiltins[EShLangTask].append( "void memoryBarrierShared();" "void groupMemoryBarrier();" ); @@ -4341,7 +4392,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV commonBuiltins.append("void debugPrintfEXT();\n"); -#ifndef GLSLANG_ANGLE if (profile != EEsProfile && version >= 450) { // coopMatStoreNV perhaps ought to have "out" on the buf parameter, but // adding it introduces undesirable tempArgs on the stack. What we want @@ -4422,6 +4472,96 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "icoopmatNV coopMatMulAddNV(icoopmatNV A, icoopmatNV B, icoopmatNV C);\n" "ucoopmatNV coopMatMulAddNV(ucoopmatNV A, ucoopmatNV B, ucoopmatNV C);\n" ); + + std::string cooperativeMatrixFuncs = + "void coopMatLoad(out coopmat m, volatile coherent int8_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent int16_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent int32_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent int64_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent uint8_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent uint16_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent uint32_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent uint64_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent float16_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent float[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent float64_t[] buf, uint element, uint stride, int matrixLayout);\n" + + "void coopMatLoad(out coopmat m, volatile coherent i8vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent i16vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent i32vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent i64vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent u8vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent u16vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent u32vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent u64vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent f16vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent f32vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent f64vec2[] buf, uint element, uint stride, int matrixLayout);\n" + + "void coopMatLoad(out coopmat m, volatile coherent i8vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent i16vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent i32vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent i64vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent u8vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent u16vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent u32vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent u64vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent f16vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent f32vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatLoad(out coopmat m, volatile coherent f64vec4[] buf, uint element, uint stride, int matrixLayout);\n" + + "void coopMatStore(coopmat m, volatile coherent int8_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent int16_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent int32_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent int64_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent uint8_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent uint16_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent uint32_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent uint64_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent float16_t[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent float[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent float64_t[] buf, uint element, uint stride, int matrixLayout);\n" + + "void coopMatStore(coopmat m, volatile coherent i8vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent i16vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent i32vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent i64vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent u8vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent u16vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent u32vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent u64vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent f16vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent f32vec2[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent f64vec2[] buf, uint element, uint stride, int matrixLayout);\n" + + "void coopMatStore(coopmat m, volatile coherent i8vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent i16vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent i32vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent i64vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent u8vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent u16vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent u32vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent u64vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent f16vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent f32vec4[] buf, uint element, uint stride, int matrixLayout);\n" + "void coopMatStore(coopmat m, volatile coherent f64vec4[] buf, uint element, uint stride, int matrixLayout);\n" + + "coopmat coopMatMulAdd(coopmat A, coopmat B, coopmat C);\n" + "coopmat coopMatMulAdd(coopmat A, coopmat B, coopmat C, int matrixOperands);\n"; + + commonBuiltins.append(cooperativeMatrixFuncs.c_str()); + + commonBuiltins.append( + "const int gl_MatrixUseA = 0;\n" + "const int gl_MatrixUseB = 1;\n" + "const int gl_MatrixUseAccumulator = 2;\n" + "const int gl_MatrixOperandsSaturatingAccumulation = 0x10;\n" + "const int gl_CooperativeMatrixLayoutRowMajor = 0;\n" + "const int gl_CooperativeMatrixLayoutColumnMajor = 1;\n" + "const int gl_CooperativeMatrixLayoutRowBlockedInterleavedARM = 4202;\n" + "const int gl_CooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203;\n" + "\n" + ); } //============================================================================ @@ -4465,7 +4605,24 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#endif // !GLSLANG_ANGLE + + // GL_EXT_shader_tile_image + if (spvVersion.vulkan > 0) { + stageBuiltins[EShLangFragment].append( + "lowp uint stencilAttachmentReadEXT();" + "lowp uint stencilAttachmentReadEXT(int);" + "highp float depthAttachmentReadEXT();" + "highp float depthAttachmentReadEXT(int);" + "\n"); + stageBuiltins[EShLangFragment].append( + "vec4 colorAttachmentReadEXT(attachmentEXT);" + "vec4 colorAttachmentReadEXT(attachmentEXT, int);" + "ivec4 colorAttachmentReadEXT(iattachmentEXT);" + "ivec4 colorAttachmentReadEXT(iattachmentEXT, int);" + "uvec4 colorAttachmentReadEXT(uattachmentEXT);" + "uvec4 colorAttachmentReadEXT(uattachmentEXT, int);" + "\n"); + } // GL_ARB_derivative_control if (profile != EEsProfile && version >= 400) { @@ -4503,7 +4660,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "bool helperInvocationEXT();" "\n"); -#ifndef GLSLANG_ANGLE // GL_AMD_shader_explicit_vertex_parameter if (profile != EEsProfile && version >= 450) { stageBuiltins[EShLangFragment].append( @@ -4576,9 +4732,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "uvec4 fragmentFetchAMD(usubpassInputMS, uint);" "\n"); - } + } - // Builtins for GL_NV_ray_tracing/GL_NV_ray_tracing_motion_blur/GL_EXT_ray_tracing/GL_EXT_ray_query + // Builtins for GL_NV_ray_tracing/GL_NV_ray_tracing_motion_blur/GL_EXT_ray_tracing/GL_EXT_ray_query/ + // GL_NV_shader_invocation_reorder/GL_KHR_ray_tracing_position_Fetch if (profile != EEsProfile && version >= 460) { commonBuiltins.append("void rayQueryInitializeEXT(rayQueryEXT, accelerationStructureEXT, uint, uint, vec3, float, vec3, float);" "void rayQueryTerminateEXT(rayQueryEXT);" @@ -4603,6 +4760,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "vec3 rayQueryGetIntersectionObjectRayOriginEXT(rayQueryEXT, bool);" "mat4x3 rayQueryGetIntersectionObjectToWorldEXT(rayQueryEXT, bool);" "mat4x3 rayQueryGetIntersectionWorldToObjectEXT(rayQueryEXT, bool);" + "void rayQueryGetIntersectionTriangleVertexPositionsEXT(rayQueryEXT, bool, out vec3[3]);" "\n"); stageBuiltins[EShLangRayGen].append( @@ -4611,6 +4769,41 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" "void executeCallableNV(uint, int);" "void executeCallableEXT(uint, int);" + "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" + "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);" + "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);" + "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);" + "void hitObjectRecordHitWithIndexNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);" + "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);" + "void hitObjectRecordMissNV(hitObjectNV,uint,vec3,float,vec3,float);" + "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);" + "void hitObjectRecordEmptyNV(hitObjectNV);" + "void hitObjectExecuteShaderNV(hitObjectNV,int);" + "bool hitObjectIsEmptyNV(hitObjectNV);" + "bool hitObjectIsMissNV(hitObjectNV);" + "bool hitObjectIsHitNV(hitObjectNV);" + "float hitObjectGetRayTMinNV(hitObjectNV);" + "float hitObjectGetRayTMaxNV(hitObjectNV);" + "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);" + "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);" + "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);" + "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);" + "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);" + "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);" + "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);" + "int hitObjectGetInstanceIdNV(hitObjectNV);" + "int hitObjectGetGeometryIndexNV(hitObjectNV);" + "int hitObjectGetPrimitiveIndexNV(hitObjectNV);" + "uint hitObjectGetHitKindNV(hitObjectNV);" + "void hitObjectGetAttributesNV(hitObjectNV,int);" + "float hitObjectGetCurrentTimeNV(hitObjectNV);" + "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);" + "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);" + "void reorderThreadNV(uint, uint);" + "void reorderThreadNV(hitObjectNV);" + "void reorderThreadNV(hitObjectNV, uint, uint);" + "vec3 fetchMicroTriangleVertexPositionNV(accelerationStructureEXT, int, int, int, ivec2);" + "vec2 fetchMicroTriangleVertexBarycentricNV(accelerationStructureEXT, int, int, int, ivec2);" "\n"); stageBuiltins[EShLangIntersect].append( "bool reportIntersectionNV(float, uint);" @@ -4626,6 +4819,36 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" "void executeCallableNV(uint, int);" "void executeCallableEXT(uint, int);" + "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" + "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);" + "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);" + "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);" + "void hitObjectRecordHitWithIndexNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);" + "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);" + "void hitObjectRecordMissNV(hitObjectNV, uint, vec3, float, vec3, float);" + "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);" + "void hitObjectRecordEmptyNV(hitObjectNV);" + "void hitObjectExecuteShaderNV(hitObjectNV, int);" + "bool hitObjectIsEmptyNV(hitObjectNV);" + "bool hitObjectIsMissNV(hitObjectNV);" + "bool hitObjectIsHitNV(hitObjectNV);" + "float hitObjectGetRayTMinNV(hitObjectNV);" + "float hitObjectGetRayTMaxNV(hitObjectNV);" + "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);" + "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);" + "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);" + "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);" + "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);" + "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);" + "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);" + "int hitObjectGetInstanceIdNV(hitObjectNV);" + "int hitObjectGetGeometryIndexNV(hitObjectNV);" + "int hitObjectGetPrimitiveIndexNV(hitObjectNV);" + "uint hitObjectGetHitKindNV(hitObjectNV);" + "void hitObjectGetAttributesNV(hitObjectNV,int);" + "float hitObjectGetCurrentTimeNV(hitObjectNV);" + "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);" + "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);" "\n"); stageBuiltins[EShLangMiss].append( "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" @@ -4633,20 +4856,48 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" "void executeCallableNV(uint, int);" "void executeCallableEXT(uint, int);" + "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" + "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);" + "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);" + "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);" + "void hitObjectRecordHitWithIndexNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);" + "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);" + "void hitObjectRecordMissNV(hitObjectNV, uint, vec3, float, vec3, float);" + "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);" + "void hitObjectRecordEmptyNV(hitObjectNV);" + "void hitObjectExecuteShaderNV(hitObjectNV, int);" + "bool hitObjectIsEmptyNV(hitObjectNV);" + "bool hitObjectIsMissNV(hitObjectNV);" + "bool hitObjectIsHitNV(hitObjectNV);" + "float hitObjectGetRayTMinNV(hitObjectNV);" + "float hitObjectGetRayTMaxNV(hitObjectNV);" + "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);" + "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);" + "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);" + "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);" + "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);" + "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);" + "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);" + "int hitObjectGetInstanceIdNV(hitObjectNV);" + "int hitObjectGetGeometryIndexNV(hitObjectNV);" + "int hitObjectGetPrimitiveIndexNV(hitObjectNV);" + "uint hitObjectGetHitKindNV(hitObjectNV);" + "void hitObjectGetAttributesNV(hitObjectNV,int);" + "float hitObjectGetCurrentTimeNV(hitObjectNV);" + "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);" + "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);" "\n"); stageBuiltins[EShLangCallable].append( "void executeCallableNV(uint, int);" "void executeCallableEXT(uint, int);" "\n"); } -#endif // !GLSLANG_ANGLE //E_SPV_NV_compute_shader_derivatives if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) { stageBuiltins[EShLangCompute].append(derivativeControls); stageBuiltins[EShLangCompute].append("\n"); } -#ifndef GLSLANG_ANGLE if (profile != EEsProfile && version >= 450) { stageBuiltins[EShLangCompute].append(derivativesAndControl16bits); stageBuiltins[EShLangCompute].append(derivativesAndControl64bits); @@ -4655,12 +4906,35 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV // Builtins for GL_NV_mesh_shader if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { - stageBuiltins[EShLangMeshNV].append( + stageBuiltins[EShLangMesh].append( "void writePackedPrimitiveIndices4x8NV(uint, uint);" "\n"); } -#endif // !GLSLANG_ANGLE -#endif // !GLSLANG_WEB + // Builtins for GL_EXT_mesh_shader + if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { + // Builtins for GL_EXT_mesh_shader + stageBuiltins[EShLangTask].append( + "void EmitMeshTasksEXT(uint, uint, uint);" + "\n"); + + stageBuiltins[EShLangMesh].append( + "void SetMeshOutputsEXT(uint, uint);" + "\n"); + } + // Builtins for GL_NV_displacement_micromap + if ((profile != EEsProfile && version >= 460) || (profile == EEsProfile && version >= 320)) { + stageBuiltins[EShLangMesh].append( + "vec3 fetchMicroTriangleVertexPositionNV(accelerationStructureEXT, int, int, int, ivec2);" + "vec2 fetchMicroTriangleVertexBarycentricNV(accelerationStructureEXT, int, int, int, ivec2);" + "\n"); + + stageBuiltins[EShLangCompute].append( + "vec3 fetchMicroTriangleVertexPositionNV(accelerationStructureEXT, int, int, int, ivec2);" + "vec2 fetchMicroTriangleVertexBarycentricNV(accelerationStructureEXT, int, int, int, ivec2);" + "\n"); + + } + //============================================================================ // @@ -4682,13 +4956,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "highp float diff;" // f - n ); } else { -#ifndef GLSLANG_WEB commonBuiltins.append( "float near;" // n "float far;" // f "float diff;" // f - n ); -#endif } commonBuiltins.append( @@ -4697,7 +4969,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) { // // Matrix state. p. 31, 32, 37, 39, 40. @@ -4815,7 +5086,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE //============================================================================ // @@ -4845,8 +5115,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#ifndef GLSLANG_WEB -#ifndef GLSLANG_ANGLE //============================================================================ // // Define the interface to the mesh/task shader. @@ -4855,7 +5123,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { // per-vertex attributes - stageBuiltins[EShLangMeshNV].append( + stageBuiltins[EShLangMesh].append( "out gl_MeshPerVertexNV {" "vec4 gl_Position;" "float gl_PointSize;" @@ -4868,7 +5136,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV ); // per-primitive attributes - stageBuiltins[EShLangMeshNV].append( + stageBuiltins[EShLangMesh].append( "perprimitiveNV out gl_MeshPerPrimitiveNV {" "int gl_PrimitiveID;" "int gl_Layer;" @@ -4879,7 +5147,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "} gl_MeshPrimitivesNV[];" ); - stageBuiltins[EShLangMeshNV].append( + stageBuiltins[EShLangMesh].append( "out uint gl_PrimitiveCountNV;" "out uint gl_PrimitiveIndicesNV[];" @@ -4893,10 +5161,38 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in highp uvec3 gl_GlobalInvocationID;" "in highp uint gl_LocalInvocationIndex;" + "\n"); + // GL_EXT_mesh_shader + stageBuiltins[EShLangMesh].append( + "out uint gl_PrimitivePointIndicesEXT[];" + "out uvec2 gl_PrimitiveLineIndicesEXT[];" + "out uvec3 gl_PrimitiveTriangleIndicesEXT[];" + "in highp uvec3 gl_NumWorkGroups;" "\n"); - stageBuiltins[EShLangTaskNV].append( + // per-vertex attributes + stageBuiltins[EShLangMesh].append( + "out gl_MeshPerVertexEXT {" + "vec4 gl_Position;" + "float gl_PointSize;" + "float gl_ClipDistance[];" + "float gl_CullDistance[];" + "} gl_MeshVerticesEXT[];" + ); + + // per-primitive attributes + stageBuiltins[EShLangMesh].append( + "perprimitiveEXT out gl_MeshPerPrimitiveEXT {" + "int gl_PrimitiveID;" + "int gl_Layer;" + "int gl_ViewportIndex;" + "bool gl_CullPrimitiveEXT;" + "int gl_PrimitiveShadingRateEXT;" + "} gl_MeshPrimitivesEXT[];" + ); + + stageBuiltins[EShLangTask].append( "out uint gl_TaskCountNV;" "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);" @@ -4909,32 +5205,32 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint gl_MeshViewCountNV;" "in uint gl_MeshViewIndicesNV[4];" - + "in highp uvec3 gl_NumWorkGroups;" "\n"); } if (profile != EEsProfile && version >= 450) { - stageBuiltins[EShLangMeshNV].append( + stageBuiltins[EShLangMesh].append( "in highp int gl_DeviceIndex;" // GL_EXT_device_group "in int gl_DrawIDARB;" // GL_ARB_shader_draw_parameters + "in int gl_ViewIndex;" // GL_EXT_multiview "\n"); - stageBuiltins[EShLangTaskNV].append( + stageBuiltins[EShLangTask].append( "in highp int gl_DeviceIndex;" // GL_EXT_device_group "in int gl_DrawIDARB;" // GL_ARB_shader_draw_parameters "\n"); if (version >= 460) { - stageBuiltins[EShLangMeshNV].append( + stageBuiltins[EShLangMesh].append( "in int gl_DrawID;" "\n"); - stageBuiltins[EShLangTaskNV].append( + stageBuiltins[EShLangTask].append( "in int gl_DrawID;" "\n"); } } -#endif // !GLSLANG_ANGLE //============================================================================ // @@ -5038,7 +5334,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangVertex].append( "int gl_VertexID;" // needs qualifier fixed later ); - if (version >= 140 && spvVersion.vulkan == 0) + if (spvVersion.vulkan == 0) stageBuiltins[EShLangVertex].append( "int gl_InstanceID;" // needs qualifier fixed later ); @@ -5093,6 +5389,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangVertex].append( "highp vec4 gl_Position;" // needs qualifier fixed later "mediump float gl_PointSize;" // needs qualifier fixed later + "highp int gl_InstanceID;" // needs qualifier fixed later ); } else { if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed) @@ -5101,19 +5398,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in highp int gl_InstanceID;" // needs qualifier fixed later ); if (spvVersion.vulkan > 0) -#endif stageBuiltins[EShLangVertex].append( "in highp int gl_VertexIndex;" "in highp int gl_InstanceIndex;" ); -#ifndef GLSLANG_WEB if (version < 310) -#endif stageBuiltins[EShLangVertex].append( "highp vec4 gl_Position;" // needs qualifier fixed later "highp float gl_PointSize;" // needs qualifier fixed later ); -#ifndef GLSLANG_WEB else stageBuiltins[EShLangVertex].append( "out gl_PerVertex {" @@ -5571,6 +5864,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "flat in int gl_InvocationsPerPixelNV;" "in vec3 gl_BaryCoordNV;" // GL_NV_fragment_shader_barycentric "in vec3 gl_BaryCoordNoPerspNV;" + "in vec3 gl_BaryCoordEXT;" // GL_EXT_fragment_shader_barycentric + "in vec3 gl_BaryCoordNoPerspEXT;" ); if (version >= 450) @@ -5589,7 +5884,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "mediump vec2 gl_PointCoord;" // needs qualifier fixed later ); } -#endif if (version >= 300) { stageBuiltins[EShLangFragment].append( "highp vec4 gl_FragCoord;" // needs qualifier fixed later @@ -5598,7 +5892,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "highp float gl_FragDepth;" // needs qualifier fixed later ); } -#ifndef GLSLANG_WEB if (version >= 310) { stageBuiltins[EShLangFragment].append( "bool gl_HelperInvocation;" // needs qualifier fixed later @@ -5635,21 +5928,20 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangFragment].append( "in vec3 gl_BaryCoordNV;" "in vec3 gl_BaryCoordNoPerspNV;" - ); + "in vec3 gl_BaryCoordEXT;" + "in vec3 gl_BaryCoordNoPerspEXT;" + ); if (version >= 310) stageBuiltins[EShLangFragment].append( "flat in highp int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate ); } -#endif stageBuiltins[EShLangFragment].append("\n"); if (version >= 130) add2ndGenerationSamplingImaging(version, profile, spvVersion); -#ifndef GLSLANG_WEB - if ((profile != EEsProfile && version >= 140) || (profile == EEsProfile && version >= 310)) { stageBuiltins[EShLangFragment].append( @@ -5664,7 +5956,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#ifndef GLSLANG_ANGLE // GL_ARB_shader_ballot if (profile != EEsProfile && version >= 450) { const char* ballotDecls = @@ -5700,8 +5991,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangGeometry] .append(ballotDecls); stageBuiltins[EShLangCompute] .append(ballotDecls); stageBuiltins[EShLangFragment] .append(fragmentBallotDecls); - stageBuiltins[EShLangMeshNV] .append(ballotDecls); - stageBuiltins[EShLangTaskNV] .append(ballotDecls); + stageBuiltins[EShLangMesh] .append(ballotDecls); + stageBuiltins[EShLangTask] .append(ballotDecls); stageBuiltins[EShLangRayGen] .append(rtBallotDecls); stageBuiltins[EShLangIntersect] .append(rtBallotDecls); // No volatile qualifier on these builtins in any-hit @@ -5727,6 +6018,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in highp uint gl_SMCountNV;" "in highp uint gl_WarpIDNV;" "in highp uint gl_SMIDNV;" + // GL_ARM_shader_core_builtins + "in highp uint gl_CoreIDARM;" + "in highp uint gl_CoreCountARM;" + "in highp uint gl_CoreMaxIDARM;" + "in highp uint gl_WarpIDARM;" + "in highp uint gl_WarpMaxIDARM;" "\n"; const char* fragmentSubgroupDecls = "flat in mediump uint gl_SubgroupSize;" @@ -5741,6 +6038,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "flat in highp uint gl_SMCountNV;" "flat in highp uint gl_WarpIDNV;" "flat in highp uint gl_SMIDNV;" + // GL_ARM_shader_core_builtins + "flat in highp uint gl_CoreIDARM;" + "flat in highp uint gl_CoreCountARM;" + "flat in highp uint gl_CoreMaxIDARM;" + "flat in highp uint gl_WarpIDARM;" + "flat in highp uint gl_WarpMaxIDARM;" "\n"; const char* computeSubgroupDecls = "in highp uint gl_NumSubgroups;" @@ -5760,6 +6063,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in highp uint gl_SMCountNV;" "in highp volatile uint gl_WarpIDNV;" "in highp volatile uint gl_SMIDNV;" + // GL_ARM_shader_core_builtins + "in highp uint gl_CoreIDARM;" + "in highp uint gl_CoreCountARM;" + "in highp uint gl_CoreMaxIDARM;" + "in highp uint gl_WarpIDARM;" + "in highp uint gl_WarpMaxIDARM;" "\n"; stageBuiltins[EShLangVertex] .append(subgroupDecls); @@ -5769,10 +6078,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangCompute] .append(subgroupDecls); stageBuiltins[EShLangCompute] .append(computeSubgroupDecls); stageBuiltins[EShLangFragment] .append(fragmentSubgroupDecls); - stageBuiltins[EShLangMeshNV] .append(subgroupDecls); - stageBuiltins[EShLangMeshNV] .append(computeSubgroupDecls); - stageBuiltins[EShLangTaskNV] .append(subgroupDecls); - stageBuiltins[EShLangTaskNV] .append(computeSubgroupDecls); + stageBuiltins[EShLangMesh] .append(subgroupDecls); + stageBuiltins[EShLangMesh] .append(computeSubgroupDecls); + stageBuiltins[EShLangTask] .append(subgroupDecls); + stageBuiltins[EShLangTask] .append(computeSubgroupDecls); stageBuiltins[EShLangRayGen] .append(rtSubgroupDecls); stageBuiltins[EShLangIntersect] .append(rtSubgroupDecls); // No volatile qualifier on these builtins in any-hit @@ -5806,8 +6115,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "const uint gl_RayFlagsCullNoOpaqueEXT = 128U;" "const uint gl_RayFlagsSkipTrianglesEXT = 256U;" "const uint gl_RayFlagsSkipAABBEXT = 512U;" + "const uint gl_RayFlagsForceOpacityMicromap2StateEXT = 1024U;" "const uint gl_HitKindFrontFacingTriangleEXT = 254U;" "const uint gl_HitKindBackFacingTriangleEXT = 255U;" + "in uint gl_HitKindFrontFacingMicroTriangleNV;" + "in uint gl_HitKindBackFacingMicroTriangleNV;" "\n"; const char *constRayQueryIntersection = @@ -5857,6 +6169,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" "in float gl_CurrentRayTimeNV;" + "in uint gl_CullMaskEXT;" "\n"; const char *hitDecls = "in uvec3 gl_LaunchIDNV;" @@ -5893,7 +6206,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" "in float gl_CurrentRayTimeNV;" + "in uint gl_CullMaskEXT;" + "in vec3 gl_HitTriangleVertexPositionsEXT[3];" + "in vec3 gl_HitMicroTriangleVertexPositionsNV[3];" + "in vec2 gl_HitMicroTriangleVertexBarycentricsNV[3];" "\n"; + const char *missDecls = "in uvec3 gl_LaunchIDNV;" "in uvec3 gl_LaunchIDEXT;" @@ -5912,6 +6230,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" "in float gl_CurrentRayTimeNV;" + "in uint gl_CullMaskEXT;" "\n"; const char *callableDecls = @@ -6019,9 +6338,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } } } -#endif // !GLSLANG_ANGLE - -#endif // !GLSLANG_WEB // printf("%s\n", commonBuiltins.c_str()); // printf("%s\n", stageBuiltins[EShLangFragment].c_str()); @@ -6040,30 +6356,18 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c // enumerate all the types const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint, -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - EbtFloat16 -#endif + EbtFloat16 }; -#ifdef GLSLANG_WEB - bool skipBuffer = true; - bool skipCubeArrayed = true; - const int image = 0; -#else bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140); bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130); for (int image = 0; image <= 1; ++image) // loop over "bool" image vs sampler -#endif { for (int shadow = 0; shadow <= 1; ++shadow) { // loop over "bool" shadow or not -#ifdef GLSLANG_WEB - const int ms = 0; -#else for (int ms = 0; ms <= 1; ++ms) // loop over "bool" multisample or not -#endif { if ((ms || image) && shadow) continue; - if (ms && profile != EEsProfile && version < 150) + if (ms && profile != EEsProfile && version < 140) continue; if (ms && image && profile == EEsProfile) continue; @@ -6071,14 +6375,9 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c continue; for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not -#ifdef GLSLANG_WEB - for (int dim = Esd2D; dim <= EsdCube; ++dim) { // 2D, 3D, and Cube -#else -#if defined(GLSLANG_ANGLE) - for (int dim = Esd2D; dim < EsdNumDims; ++dim) { // 2D, ..., buffer, subpass -#else for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass -#endif + if (dim == EsdAttachmentEXT) + continue; if (dim == EsdSubpass && spvVersion.vulkan == 0) continue; if (dim == EsdSubpass && (image || shadow || arrayed)) @@ -6099,7 +6398,6 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c continue; if (ms && arrayed && profile == EEsProfile && version < 310) continue; -#endif if (dim == Esd3D && shadow) continue; if (dim == EsdCube && arrayed && skipCubeArrayed) @@ -6109,23 +6407,21 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c // Loop over the bTypes for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) { -#ifndef GLSLANG_WEB if (bTypes[bType] == EbtFloat16 && (profile == EEsProfile || version < 450)) continue; if (dim == EsdRect && version < 140 && bType > 0) continue; -#endif if (shadow && (bTypes[bType] == EbtInt || bTypes[bType] == EbtUint)) continue; // // Now, make all the function prototypes for the type we just built... // TSampler sampler; -#ifndef GLSLANG_WEB if (dim == EsdSubpass) { sampler.setSubpass(bTypes[bType], ms ? true : false); + } else if (dim == EsdAttachmentEXT) { + sampler.setAttachmentEXT(bTypes[bType]); } else -#endif if (image) { sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false, shadow ? true : false, @@ -6138,12 +6434,10 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c TString typeName = sampler.getString(); -#ifndef GLSLANG_WEB if (dim == EsdSubpass) { addSubpassSampling(sampler, typeName, version, profile); continue; } -#endif addQueryFunctions(sampler, typeName, version, profile); @@ -6151,7 +6445,6 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c addImageFunctions(sampler, typeName, version, profile); else { addSamplingFunctions(sampler, typeName, version, profile); -#ifndef GLSLANG_WEB addGatherFunctions(sampler, typeName, version, profile); if (spvVersion.vulkan > 0 && sampler.isCombined() && !sampler.shadow) { // Base Vulkan allows texelFetch() for @@ -6167,7 +6460,6 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c addSamplingFunctions(sampler, textureTypeName, version, profile); addQueryFunctions(sampler, textureTypeName, version, profile); } -#endif } } } @@ -6198,16 +6490,6 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int int sizeDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0) - (sampler.dim == EsdCube ? 1 : 0); -#ifdef GLSLANG_WEB - commonBuiltins.append("highp "); - commonBuiltins.append("ivec"); - commonBuiltins.append(postfixes[sizeDims]); - commonBuiltins.append(" textureSize("); - commonBuiltins.append(typeName); - commonBuiltins.append(",int);\n"); - return; -#endif - if (sampler.isImage() && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 420))) return; @@ -6417,6 +6699,34 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int commonBuiltins.append(imageParams); commonBuiltins.append(", float);\n"); } + + // GL_NV_shader_atomic_fp16_vector + if (profile != EEsProfile && version >= 430) { + const int numFp16Builtins = 4; + const char* atomicFp16Func[numFp16Builtins] = { + " imageAtomicAdd(volatile coherent ", + " imageAtomicMin(volatile coherent ", + " imageAtomicMax(volatile coherent ", + " imageAtomicExchange(volatile coherent " + }; + const int numFp16DataTypes = 2; + const char* atomicFp16DataTypes[numFp16DataTypes] = { + "f16vec2", + "f16vec4" + }; + // Loop twice to add prototypes with/without scope/semantics + for (int j = 0; j < numFp16DataTypes; ++j) { + for (int i = 0; i < numFp16Builtins; ++i) { + commonBuiltins.append(atomicFp16DataTypes[j]); + commonBuiltins.append(atomicFp16Func[i]); + commonBuiltins.append(imageParams); + commonBuiltins.append(", "); + commonBuiltins.append(atomicFp16DataTypes[j]); + commonBuiltins.append(");\n"); + } + } + } + if (profile != EEsProfile && version >= 450) { commonBuiltins.append("float imageAtomicAdd(volatile coherent "); commonBuiltins.append(imageParams); @@ -6527,14 +6837,6 @@ void TBuiltIns::addSubpassSampling(TSampler sampler, const TString& typeName, in // void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile) { -#ifdef GLSLANG_WEB - profile = EEsProfile; - version = 310; -#elif defined(GLSLANG_ANGLE) - profile = ECoreProfile; - version = 450; -#endif - // // texturing // @@ -6609,11 +6911,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, continue; // loop over 16-bit floating-point texel addressing -#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE) - const int f16TexAddr = 0; -#else for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) -#endif { if (f16TexAddr && sampler.type != EbtFloat16) continue; @@ -6622,11 +6920,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, totalDims--; } // loop over "bool" lod clamp -#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE) - const int lodClamp = 0; -#else for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp) -#endif { if (lodClamp && (profile == EEsProfile || version < 450)) continue; @@ -6634,11 +6928,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, continue; // loop over "bool" sparse or not -#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE) - const int sparse = 0; -#else for (int sparse = 0; sparse <= 1; ++sparse) -#endif { if (sparse && (profile == EEsProfile || version < 450)) continue; @@ -6815,14 +7105,6 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, // void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile) { -#ifdef GLSLANG_WEB - profile = EEsProfile; - version = 310; -#elif defined(GLSLANG_ANGLE) - profile = ECoreProfile; - version = 450; -#endif - switch (sampler.dim) { case Esd2D: case EsdRect: @@ -7061,14 +7343,6 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, in // void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language) { -#ifdef GLSLANG_WEB - version = 310; - profile = EEsProfile; -#elif defined(GLSLANG_ANGLE) - version = 450; - profile = ECoreProfile; -#endif - // // Initialize the context-dependent (resource-dependent) built-in strings for parsing. // @@ -7126,7 +7400,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append(builtInConstant); } -#ifndef GLSLANG_WEB if (version >= 310) { // geometry @@ -7449,7 +7722,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf snprintf(builtInConstant, maxSize, "const int gl_MaxTransformFeedbackInterleavedComponents = %d;", resources.maxTransformFeedbackInterleavedComponents); s.append(builtInConstant); } -#endif } // compute @@ -7471,7 +7743,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append("\n"); } -#ifndef GLSLANG_WEB // images (some in compute below) if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 130)) { @@ -7499,7 +7770,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append("\n"); } -#ifndef GLSLANG_ANGLE // atomic counters (some in compute below) if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) { @@ -7536,7 +7806,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append("\n"); } -#endif // !GLSLANG_ANGLE // GL_ARB_cull_distance if (profile != EEsProfile && version >= 450) { @@ -7553,7 +7822,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append(builtInConstant); } -#ifndef GLSLANG_ANGLE // SPV_NV_mesh_shader if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV); @@ -7576,8 +7844,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append("\n"); } -#endif -#endif s.append("\n"); } @@ -7606,6 +7872,23 @@ static void SpecialQualifier(const char* name, TStorageQualifier qualifier, TBui symQualifier.builtIn = builtIn; } +// +// Modify the symbol's flat decoration. +// +// Safe to call even if name is not present. +// +// Originally written to transform gl_SubGroupSizeARB from uniform to fragment input in Vulkan. +// +static void ModifyFlatDecoration(const char* name, bool flat, TSymbolTable& symbolTable) +{ + TSymbol* symbol = symbolTable.find(name); + if (symbol == nullptr) + return; + + TQualifier& symQualifier = symbol->getWritableType().getQualifier(); + symQualifier.flat = flat; +} + // // To tag built-in variables with their TBuiltInVariable enum. Use this when the // normal declaration text already gets the qualifier right, and all that's needed @@ -7663,14 +7946,6 @@ static void BuiltInVariable(const char* blockName, const char* name, TBuiltInVar // void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable) { -#ifdef GLSLANG_WEB - version = 310; - profile = EEsProfile; -#elif defined(GLSLANG_ANGLE) - version = 450; - profile = ECoreProfile; -#endif - // // Tag built-in variables and functions with additional qualifier and extension information // that cannot be declared with the text strings. @@ -7690,10 +7965,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable); } -#ifndef GLSLANG_WEB if (spvVersion.vulkan == 0) { SpecialQualifier("gl_VertexID", EvqVertexId, EbvVertexId, symbolTable); SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable); + if (version < 140) + symbolTable.setVariableExtensions("gl_InstanceID", 1, &E_GL_EXT_draw_instanced); } if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { @@ -7845,7 +8121,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("shadow2DEXT", 1, &E_GL_EXT_shadow_samplers); symbolTable.setFunctionExtensions("shadow2DProjEXT", 1, &E_GL_EXT_shadow_samplers); } - // Fall through + + // E_GL_EXT_texture_array + if (profile != EEsProfile && spvVersion.spv == 0) { + symbolTable.setFunctionExtensions("texture1DArray", 1, &E_GL_EXT_texture_array); + symbolTable.setFunctionExtensions("texture2DArray", 1, &E_GL_EXT_texture_array); + symbolTable.setFunctionExtensions("shadow1DArray", 1, &E_GL_EXT_texture_array); + symbolTable.setFunctionExtensions("shadow2DArray", 1, &E_GL_EXT_texture_array); + + symbolTable.setFunctionExtensions("texture1DArrayLod", 1, &E_GL_EXT_texture_array); + symbolTable.setFunctionExtensions("texture2DArrayLod", 1, &E_GL_EXT_texture_array); + symbolTable.setFunctionExtensions("shadow1DArrayLod", 1, &E_GL_EXT_texture_array); + } + [[fallthrough]]; case EShLangTessControl: if (profile == EEsProfile && version >= 310) { @@ -7860,11 +8148,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_BoundingBox", EbvBoundingBox, symbolTable); } } - // Fall through + [[fallthrough]]; case EShLangTessEvaluation: case EShLangGeometry: -#endif // !GLSLANG_WEB SpecialQualifier("gl_Position", EvqPosition, EbvPosition, symbolTable); SpecialQualifier("gl_PointSize", EvqPointSize, EbvPointSize, symbolTable); @@ -7874,7 +8161,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_out", "gl_Position", EbvPosition, symbolTable); BuiltInVariable("gl_out", "gl_PointSize", EbvPointSize, symbolTable); -#ifndef GLSLANG_WEB SpecialQualifier("gl_ClipVertex", EvqClipVertex, EbvClipVertex, symbolTable); BuiltInVariable("gl_in", "gl_ClipDistance", EbvClipDistance, symbolTable); @@ -7981,7 +8267,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable); } - if (profile != EEsProfile) { + if (profile != EEsProfile) { BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable); BuiltInVariable("gl_SubGroupEqMaskARB", EbvSubGroupEqMask, symbolTable); BuiltInVariable("gl_SubGroupGeMaskARB", EbvSubGroupGeMask, symbolTable); @@ -7989,9 +8275,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable); BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable); - if (spvVersion.vulkan > 0) + if (spvVersion.vulkan > 0) { // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable); + if (language == EShLangFragment) + ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable); + } else BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); } @@ -8024,6 +8313,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); + + // GL_ARM_shader_core_builtins + symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + + BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable); + BuiltInVariable("gl_CoreIDARM", EbvCoreIDARM, symbolTable); + BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable); + BuiltInVariable("gl_WarpIDARM", EbvWarpIDARM, symbolTable); + BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable); } if (language == EShLangGeometry || language == EShLangVertex) { @@ -8038,8 +8340,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); } } - -#endif // !GLSLANG_WEB break; case EShLangFragment: @@ -8056,8 +8356,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion } } SpecialQualifier("gl_FragDepth", EvqFragDepth, EbvFragDepth, symbolTable); -#ifndef GLSLANG_WEB SpecialQualifier("gl_FragDepthEXT", EvqFragDepth, EbvFragDepth, symbolTable); + SpecialQualifier("gl_FragStencilRefARB", EvqFragStencil, EbvFragStencilRef, symbolTable); SpecialQualifier("gl_HelperInvocation", EvqVaryingIn, EbvHelperInvocation, symbolTable); BuiltInVariable("gl_ClipDistance", EbvClipDistance, symbolTable); @@ -8097,8 +8397,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("rayQueryGetIntersectionWorldToObjectEXT", 1, &E_GL_EXT_ray_query); symbolTable.setFunctionExtensions("rayQueryGetWorldRayOriginEXT", 1, &E_GL_EXT_ray_query); symbolTable.setFunctionExtensions("rayQueryGetWorldRayDirectionEXT", 1, &E_GL_EXT_ray_query); + symbolTable.setFunctionExtensions("rayQueryGetIntersectionTriangleVertexPositionsEXT", 1, &E_GL_EXT_ray_tracing_position_fetch); symbolTable.setVariableExtensions("gl_RayFlagsSkipAABBEXT", 1, &E_GL_EXT_ray_flags_primitive_culling); symbolTable.setVariableExtensions("gl_RayFlagsSkipTrianglesEXT", 1, &E_GL_EXT_ray_flags_primitive_culling); + symbolTable.setVariableExtensions("gl_RayFlagsForceOpacityMicromap2StateEXT", 1, &E_GL_EXT_opacity_micromap); } if ((profile != EEsProfile && version >= 130) || @@ -8318,6 +8620,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_BaryCoordNoPerspNV", 1, &E_GL_NV_fragment_shader_barycentric); BuiltInVariable("gl_BaryCoordNV", EbvBaryCoordNV, symbolTable); BuiltInVariable("gl_BaryCoordNoPerspNV", EbvBaryCoordNoPerspNV, symbolTable); + symbolTable.setVariableExtensions("gl_BaryCoordEXT", 1, &E_GL_EXT_fragment_shader_barycentric); + symbolTable.setVariableExtensions("gl_BaryCoordNoPerspEXT", 1, &E_GL_EXT_fragment_shader_barycentric); + BuiltInVariable("gl_BaryCoordEXT", EbvBaryCoordEXT, symbolTable); + BuiltInVariable("gl_BaryCoordNoPerspEXT", EbvBaryCoordNoPerspEXT, symbolTable); } if ((profile != EEsProfile && version >= 450) || @@ -8418,13 +8724,23 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable); BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable); - if (spvVersion.vulkan > 0) + if (spvVersion.vulkan > 0) { // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable); + if (language == EShLangFragment) + ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable); + } else BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); } + // GL_EXT_expect_assume + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 140)) { + symbolTable.setFunctionExtensions("assumeEXT", 1, &E_GL_EXT_expect_assume); + symbolTable.setFunctionExtensions("expectEXT", 1, &E_GL_EXT_expect_assume); + } + // GL_KHR_shader_subgroup if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 140)) { @@ -8466,6 +8782,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("subgroupShuffleXor", 1, &E_GL_KHR_shader_subgroup_shuffle); symbolTable.setFunctionExtensions("subgroupShuffleUp", 1, &E_GL_KHR_shader_subgroup_shuffle_relative); symbolTable.setFunctionExtensions("subgroupShuffleDown", 1, &E_GL_KHR_shader_subgroup_shuffle_relative); + symbolTable.setFunctionExtensions("subgroupRotate", 1, &E_GL_KHR_shader_subgroup_rotate); + symbolTable.setFunctionExtensions("subgroupClusteredRotate", 1, &E_GL_KHR_shader_subgroup_rotate); symbolTable.setFunctionExtensions("subgroupAdd", 1, &E_GL_KHR_shader_subgroup_arithmetic); symbolTable.setFunctionExtensions("subgroupMul", 1, &E_GL_KHR_shader_subgroup_arithmetic); symbolTable.setFunctionExtensions("subgroupMin", 1, &E_GL_KHR_shader_subgroup_arithmetic); @@ -8530,6 +8848,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); + + // GL_ARM_shader_core_builtins + symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + + BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable); + BuiltInVariable("gl_CoreIDARM", EbvCoreIDARM, symbolTable); + BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable); + BuiltInVariable("gl_WarpIDARM", EbvWarpIDARM, symbolTable); + BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable); } if (profile == EEsProfile) { @@ -8570,7 +8901,32 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); } -#endif // !GLSLANG_WEB + + // GL_EXT_shader_quad_control + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + symbolTable.setFunctionExtensions("subgroupQuadAll", 1, &E_GL_KHR_shader_subgroup_vote); + symbolTable.setFunctionExtensions("subgroupQuadAny", 1, &E_GL_KHR_shader_subgroup_vote); + } + + // GL_EXT_shader_tile_image + symbolTable.setFunctionExtensions("stencilAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image); + symbolTable.setFunctionExtensions("depthAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image); + symbolTable.setFunctionExtensions("colorAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image); + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 140)) { + + symbolTable.setFunctionExtensions("textureWeightedQCOM", 1, &E_GL_QCOM_image_processing); + symbolTable.setFunctionExtensions("textureBoxFilterQCOM", 1, &E_GL_QCOM_image_processing); + symbolTable.setFunctionExtensions("textureBlockMatchSADQCOM", 1, &E_GL_QCOM_image_processing); + symbolTable.setFunctionExtensions("textureBlockMatchSSDQCOM", 1, &E_GL_QCOM_image_processing); + + symbolTable.setFunctionExtensions("textureBlockMatchWindowSSDQCOM", 1, &E_GL_QCOM_image_processing2); + symbolTable.setFunctionExtensions("textureBlockMatchWindowSADQCOM", 1, &E_GL_QCOM_image_processing2); + symbolTable.setFunctionExtensions("textureBlockMatchGatherSSDQCOM", 1, &E_GL_QCOM_image_processing2); + symbolTable.setFunctionExtensions("textureBlockMatchGatherSADQCOM", 1, &E_GL_QCOM_image_processing2); + } break; case EShLangCompute: @@ -8583,7 +8939,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable); BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable); -#ifndef GLSLANG_WEB if ((profile != EEsProfile && version >= 140) || (profile == EEsProfile && version >= 310)) { symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group); @@ -8635,9 +8990,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable); BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable); - if (spvVersion.vulkan > 0) + if (spvVersion.vulkan > 0) { // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable); + if (language == EShLangFragment) + ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable); + } else BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); } @@ -8670,6 +9028,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); + + // GL_ARM_shader_core_builtins + symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + + BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable); + BuiltInVariable("gl_CoreIDARM", EbvCoreIDARM, symbolTable); + BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable); + BuiltInVariable("gl_WarpIDARM", EbvWarpIDARM, symbolTable); + BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable); } // GL_KHR_shader_subgroup @@ -8691,6 +9062,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("coopMatMulAddNV", 2, coopExt); } + { + symbolTable.setFunctionExtensions("coopMatLoad", 1, &E_GL_KHR_cooperative_matrix); + symbolTable.setFunctionExtensions("coopMatStore", 1, &E_GL_KHR_cooperative_matrix); + symbolTable.setFunctionExtensions("coopMatMulAdd", 1, &E_GL_KHR_cooperative_matrix); + } + if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { symbolTable.setFunctionExtensions("dFdx", 1, &E_GL_NV_compute_shader_derivatives); symbolTable.setFunctionExtensions("dFdy", 1, &E_GL_NV_compute_shader_derivatives); @@ -8710,10 +9087,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); } -#endif // !GLSLANG_WEB + + if ((profile != EEsProfile && version >= 460)) { + symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap); + symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap); + } break; -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) case EShLangRayGen: case EShLangIntersect: case EShLangAnyHit: @@ -8743,6 +9123,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_RayTminEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setVariableExtensions("gl_RayTmaxNV", 1, &E_GL_NV_ray_tracing); symbolTable.setVariableExtensions("gl_RayTmaxEXT", 1, &E_GL_EXT_ray_tracing); + symbolTable.setVariableExtensions("gl_CullMaskEXT", 1, &E_GL_EXT_ray_cull_mask); symbolTable.setVariableExtensions("gl_HitTNV", 1, &E_GL_NV_ray_tracing); symbolTable.setVariableExtensions("gl_HitTEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setVariableExtensions("gl_HitKindNV", 1, &E_GL_NV_ray_tracing); @@ -8756,6 +9137,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_IncomingRayFlagsNV", 1, &E_GL_NV_ray_tracing); symbolTable.setVariableExtensions("gl_IncomingRayFlagsEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setVariableExtensions("gl_CurrentRayTimeNV", 1, &E_GL_NV_ray_tracing_motion_blur); + symbolTable.setVariableExtensions("gl_HitTriangleVertexPositionsEXT", 1, &E_GL_EXT_ray_tracing_position_fetch); + symbolTable.setVariableExtensions("gl_HitMicroTriangleVertexPositionsNV", 1, &E_GL_NV_displacement_micromap); + symbolTable.setVariableExtensions("gl_HitMicroTriangleVertexBarycentricsNV", 1, &E_GL_NV_displacement_micromap); symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group); @@ -8770,6 +9154,40 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("executeCallableNV", 1, &E_GL_NV_ray_tracing); symbolTable.setFunctionExtensions("executeCallableEXT", 1, &E_GL_EXT_ray_tracing); + symbolTable.setFunctionExtensions("hitObjectTraceRayNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectTraceRayMotionNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectRecordHitNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectRecordHitMotionNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectRecordHitWithIndexNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectRecordHitWithIndexMotionNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectRecordMissNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectRecordMissMotionNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectRecordEmptyNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectExecuteShaderNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectIsEmptyNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectIsMissNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectIsHitNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetRayTMinNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetRayTMaxNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetObjectRayOriginNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetObjectRayDirectionNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetWorldRayOriginNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetWorldRayDirectionNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetWorldToObjectNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetbjectToWorldNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetInstanceCustomIndexNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetInstanceIdNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetGeometryIndexNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetPrimitiveIndexNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetHitKindNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetAttributesNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetCurrentTimeNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetShaderBindingTableRecordIndexNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetShaderRecordBufferHandleNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("reorderThreadNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap); + symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap); + BuiltInVariable("gl_LaunchIDNV", EbvLaunchId, symbolTable); BuiltInVariable("gl_LaunchIDEXT", EbvLaunchId, symbolTable); @@ -8792,8 +9210,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_RayTminEXT", EbvRayTmin, symbolTable); BuiltInVariable("gl_RayTmaxNV", EbvRayTmax, symbolTable); BuiltInVariable("gl_RayTmaxEXT", EbvRayTmax, symbolTable); - BuiltInVariable("gl_HitTNV", EbvHitT, symbolTable); - BuiltInVariable("gl_HitTEXT", EbvHitT, symbolTable); + BuiltInVariable("gl_CullMaskEXT", EbvCullMask, symbolTable); BuiltInVariable("gl_HitKindNV", EbvHitKind, symbolTable); BuiltInVariable("gl_HitKindEXT", EbvHitKind, symbolTable); BuiltInVariable("gl_ObjectToWorldNV", EbvObjectToWorld, symbolTable); @@ -8806,6 +9223,15 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_IncomingRayFlagsEXT", EbvIncomingRayFlags, symbolTable); BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable); BuiltInVariable("gl_CurrentRayTimeNV", EbvCurrentRayTimeNV, symbolTable); + BuiltInVariable("gl_HitTriangleVertexPositionsEXT", EbvPositionFetch, symbolTable); + BuiltInVariable("gl_HitMicroTriangleVertexPositionsNV", EbvMicroTrianglePositionNV, symbolTable); + BuiltInVariable("gl_HitMicroTriangleVertexBarycentricsNV", EbvMicroTriangleBaryNV, symbolTable); + BuiltInVariable("gl_HitKindFrontFacingMicroTriangleNV", EbvHitKindFrontFacingMicroTriangleNV, symbolTable); + BuiltInVariable("gl_HitKindBackFacingMicroTriangleNV", EbvHitKindBackFacingMicroTriangleNV, symbolTable); + + // gl_HitT variables are aliases of their gl_RayTmax counterparts. + RetargetVariable("gl_HitTNV", "gl_RayTmaxNV", symbolTable); + RetargetVariable("gl_HitTEXT", "gl_RayTmaxEXT", symbolTable); // GL_ARB_shader_ballot symbolTable.setVariableExtensions("gl_SubGroupSizeARB", 1, &E_GL_ARB_shader_ballot); @@ -8823,9 +9249,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable); BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable); - if (spvVersion.vulkan > 0) + if (spvVersion.vulkan > 0) { // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable); + if (language == EShLangFragment) + ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable); + } else BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); @@ -8859,6 +9288,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); + + // GL_ARM_shader_core_builtins + symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + + BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable); + BuiltInVariable("gl_CoreIDARM", EbvCoreIDARM, symbolTable); + BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable); + BuiltInVariable("gl_WarpIDARM", EbvWarpIDARM, symbolTable); + BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable); } if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 450)) { @@ -8869,7 +9311,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion } break; - case EShLangMeshNV: + case EShLangMesh: if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { // per-vertex builtins symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_Position", 1, &E_GL_NV_mesh_shader); @@ -8913,12 +9355,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_PrimitiveIndicesNV", 1, &E_GL_NV_mesh_shader); symbolTable.setVariableExtensions("gl_MeshViewCountNV", 1, &E_GL_NV_mesh_shader); symbolTable.setVariableExtensions("gl_MeshViewIndicesNV", 1, &E_GL_NV_mesh_shader); - symbolTable.setVariableExtensions("gl_WorkGroupSize", 1, &E_GL_NV_mesh_shader); - symbolTable.setVariableExtensions("gl_WorkGroupID", 1, &E_GL_NV_mesh_shader); - symbolTable.setVariableExtensions("gl_LocalInvocationID", 1, &E_GL_NV_mesh_shader); - symbolTable.setVariableExtensions("gl_GlobalInvocationID", 1, &E_GL_NV_mesh_shader); - symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader); - + if (profile != EEsProfile) { + symbolTable.setVariableExtensions("gl_WorkGroupSize", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setVariableExtensions("gl_WorkGroupID", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationID", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setVariableExtensions("gl_GlobalInvocationID", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationIndex", Num_AEP_mesh_shader, AEP_mesh_shader); + } else { + symbolTable.setVariableExtensions("gl_WorkGroupSize", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_WorkGroupID", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationID", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_GlobalInvocationID", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader); + } BuiltInVariable("gl_PrimitiveCountNV", EbvPrimitiveCountNV, symbolTable); BuiltInVariable("gl_PrimitiveIndicesNV", EbvPrimitiveIndicesNV, symbolTable); BuiltInVariable("gl_MeshViewCountNV", EbvMeshViewCountNV, symbolTable); @@ -8936,12 +9385,58 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV", 1, &E_GL_NV_mesh_shader); // builtin functions - symbolTable.setFunctionExtensions("barrier", 1, &E_GL_NV_mesh_shader); - symbolTable.setFunctionExtensions("memoryBarrierShared", 1, &E_GL_NV_mesh_shader); - symbolTable.setFunctionExtensions("groupMemoryBarrier", 1, &E_GL_NV_mesh_shader); + if (profile != EEsProfile) { + symbolTable.setFunctionExtensions("barrier", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setFunctionExtensions("memoryBarrierShared", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setFunctionExtensions("groupMemoryBarrier", Num_AEP_mesh_shader, AEP_mesh_shader); + } else { + symbolTable.setFunctionExtensions("barrier", 1, &E_GL_NV_mesh_shader); + symbolTable.setFunctionExtensions("memoryBarrierShared", 1, &E_GL_NV_mesh_shader); + symbolTable.setFunctionExtensions("groupMemoryBarrier", 1, &E_GL_NV_mesh_shader); + } + symbolTable.setFunctionExtensions("writePackedPrimitiveIndices4x8NV", 1, &E_GL_NV_mesh_shader); } if (profile != EEsProfile && version >= 450) { + // GL_EXT_Mesh_shader + symbolTable.setVariableExtensions("gl_PrimitivePointIndicesEXT", 1, &E_GL_EXT_mesh_shader); + symbolTable.setVariableExtensions("gl_PrimitiveLineIndicesEXT", 1, &E_GL_EXT_mesh_shader); + symbolTable.setVariableExtensions("gl_PrimitiveTriangleIndicesEXT", 1, &E_GL_EXT_mesh_shader); + symbolTable.setVariableExtensions("gl_NumWorkGroups", 1, &E_GL_EXT_mesh_shader); + + BuiltInVariable("gl_PrimitivePointIndicesEXT", EbvPrimitivePointIndicesEXT, symbolTable); + BuiltInVariable("gl_PrimitiveLineIndicesEXT", EbvPrimitiveLineIndicesEXT, symbolTable); + BuiltInVariable("gl_PrimitiveTriangleIndicesEXT", EbvPrimitiveTriangleIndicesEXT, symbolTable); + BuiltInVariable("gl_NumWorkGroups", EbvNumWorkGroups, symbolTable); + + symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_Position", 1, &E_GL_EXT_mesh_shader); + symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_PointSize", 1, &E_GL_EXT_mesh_shader); + symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_ClipDistance", 1, &E_GL_EXT_mesh_shader); + symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_CullDistance", 1, &E_GL_EXT_mesh_shader); + + BuiltInVariable("gl_MeshVerticesEXT", "gl_Position", EbvPosition, symbolTable); + BuiltInVariable("gl_MeshVerticesEXT", "gl_PointSize", EbvPointSize, symbolTable); + BuiltInVariable("gl_MeshVerticesEXT", "gl_ClipDistance", EbvClipDistance, symbolTable); + BuiltInVariable("gl_MeshVerticesEXT", "gl_CullDistance", EbvCullDistance, symbolTable); + + symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_PrimitiveID", 1, &E_GL_EXT_mesh_shader); + symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_Layer", 1, &E_GL_EXT_mesh_shader); + symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_ViewportIndex", 1, &E_GL_EXT_mesh_shader); + symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_CullPrimitiveEXT", 1, &E_GL_EXT_mesh_shader); + + // note: technically this member requires both GL_EXT_mesh_shader and GL_EXT_fragment_shading_rate + // since setVariableExtensions only needs *one of* the extensions to validate, it's more useful to specify EXT_fragment_shading_rate + // GL_EXT_mesh_shader will be required in practice by use of other fields of gl_MeshPrimitivesEXT + symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate); + + BuiltInVariable("gl_MeshPrimitivesEXT", "gl_PrimitiveID", EbvPrimitiveId, symbolTable); + BuiltInVariable("gl_MeshPrimitivesEXT", "gl_Layer", EbvLayer, symbolTable); + BuiltInVariable("gl_MeshPrimitivesEXT", "gl_ViewportIndex", EbvViewportIndex, symbolTable); + BuiltInVariable("gl_MeshPrimitivesEXT", "gl_CullPrimitiveEXT", EbvCullPrimitiveEXT, symbolTable); + BuiltInVariable("gl_MeshPrimitivesEXT", "gl_PrimitiveShadingRateEXT", EbvPrimitiveShadingRateKHR, symbolTable); + + symbolTable.setFunctionExtensions("SetMeshOutputsEXT", 1, &E_GL_EXT_mesh_shader); + // GL_EXT_device_group symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group); BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable); @@ -8952,6 +9447,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion if (version >= 460) { BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable); } + // GL_EXT_multiview + BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable); + symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview); // GL_ARB_shader_ballot symbolTable.setVariableExtensions("gl_SubGroupSizeARB", 1, &E_GL_ARB_shader_ballot); @@ -8969,9 +9467,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable); BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable); - if (spvVersion.vulkan > 0) + if (spvVersion.vulkan > 0) { // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable); + if (language == EShLangFragment) + ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable); + } else BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); } @@ -9010,6 +9511,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); + + // GL_ARM_shader_core_builtins + symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + + BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable); + BuiltInVariable("gl_CoreIDARM", EbvCoreIDARM, symbolTable); + BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable); + BuiltInVariable("gl_WarpIDARM", EbvWarpIDARM, symbolTable); + BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable); } if ((profile == EEsProfile && version >= 310) || @@ -9019,18 +9533,33 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); } + + // Builtins for GL_NV_displacment_micromap + if ((profile != EEsProfile && version >= 460)) { + symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap); + symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap); + } + break; - case EShLangTaskNV: + case EShLangTask: if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { symbolTable.setVariableExtensions("gl_TaskCountNV", 1, &E_GL_NV_mesh_shader); - symbolTable.setVariableExtensions("gl_WorkGroupSize", 1, &E_GL_NV_mesh_shader); - symbolTable.setVariableExtensions("gl_WorkGroupID", 1, &E_GL_NV_mesh_shader); - symbolTable.setVariableExtensions("gl_LocalInvocationID", 1, &E_GL_NV_mesh_shader); - symbolTable.setVariableExtensions("gl_GlobalInvocationID", 1, &E_GL_NV_mesh_shader); - symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader); symbolTable.setVariableExtensions("gl_MeshViewCountNV", 1, &E_GL_NV_mesh_shader); symbolTable.setVariableExtensions("gl_MeshViewIndicesNV", 1, &E_GL_NV_mesh_shader); + if (profile != EEsProfile) { + symbolTable.setVariableExtensions("gl_WorkGroupSize", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setVariableExtensions("gl_WorkGroupID", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationID", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setVariableExtensions("gl_GlobalInvocationID", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationIndex", Num_AEP_mesh_shader, AEP_mesh_shader); + } else { + symbolTable.setVariableExtensions("gl_WorkGroupSize", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_WorkGroupID", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationID", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_GlobalInvocationID", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader); + } BuiltInVariable("gl_TaskCountNV", EbvTaskCountNV, symbolTable); BuiltInVariable("gl_WorkGroupSize", EbvWorkGroupSize, symbolTable); @@ -9044,12 +9573,23 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_MaxTaskWorkGroupSizeNV", 1, &E_GL_NV_mesh_shader); symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV", 1, &E_GL_NV_mesh_shader); - symbolTable.setFunctionExtensions("barrier", 1, &E_GL_NV_mesh_shader); - symbolTable.setFunctionExtensions("memoryBarrierShared", 1, &E_GL_NV_mesh_shader); - symbolTable.setFunctionExtensions("groupMemoryBarrier", 1, &E_GL_NV_mesh_shader); + if (profile != EEsProfile) { + symbolTable.setFunctionExtensions("barrier", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setFunctionExtensions("memoryBarrierShared", Num_AEP_mesh_shader, AEP_mesh_shader); + symbolTable.setFunctionExtensions("groupMemoryBarrier", Num_AEP_mesh_shader, AEP_mesh_shader); + } else { + symbolTable.setFunctionExtensions("barrier", 1, &E_GL_NV_mesh_shader); + symbolTable.setFunctionExtensions("memoryBarrierShared", 1, &E_GL_NV_mesh_shader); + symbolTable.setFunctionExtensions("groupMemoryBarrier", 1, &E_GL_NV_mesh_shader); + } } if (profile != EEsProfile && version >= 450) { + // GL_EXT_mesh_shader + symbolTable.setFunctionExtensions("EmitMeshTasksEXT", 1, &E_GL_EXT_mesh_shader); + symbolTable.setVariableExtensions("gl_NumWorkGroups", 1, &E_GL_EXT_mesh_shader); + BuiltInVariable("gl_NumWorkGroups", EbvNumWorkGroups, symbolTable); + // GL_EXT_device_group symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group); BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable); @@ -9077,9 +9617,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable); BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable); - if (spvVersion.vulkan > 0) + if (spvVersion.vulkan > 0) { // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable); + if (language == EShLangFragment) + ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable); + } else BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); } @@ -9118,6 +9661,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); + + // GL_ARM_shader_core_builtins + symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpIDARM", 1, &E_GL_ARM_shader_core_builtins); + symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins); + + BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable); + BuiltInVariable("gl_CoreIDARM", EbvCoreIDARM, symbolTable); + BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable); + BuiltInVariable("gl_WarpIDARM", EbvWarpIDARM, symbolTable); + BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable); } if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 450)) { @@ -9127,7 +9683,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); } break; -#endif default: assert(false && "Language not supported"); @@ -9143,7 +9698,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion relateTabledBuiltins(version, profile, spvVersion, language, symbolTable); -#ifndef GLSLANG_WEB symbolTable.relateToOperator("doubleBitsToInt64", EOpDoubleBitsToInt64); symbolTable.relateToOperator("doubleBitsToUint64", EOpDoubleBitsToUint64); symbolTable.relateToOperator("int64BitsToDouble", EOpInt64BitsToDouble); @@ -9296,6 +9850,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("averageRounded", EOpAverageRounded); symbolTable.relateToOperator("multiply32x16", EOpMul32x16); symbolTable.relateToOperator("debugPrintfEXT", EOpDebugPrintf); + symbolTable.relateToOperator("assumeEXT", EOpAssumeEXT); + symbolTable.relateToOperator("expectEXT", EOpExpectEXT); if (PureOperatorBuiltins) { @@ -9499,6 +10055,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("subgroupShuffleXor", EOpSubgroupShuffleXor); symbolTable.relateToOperator("subgroupShuffleUp", EOpSubgroupShuffleUp); symbolTable.relateToOperator("subgroupShuffleDown", EOpSubgroupShuffleDown); + symbolTable.relateToOperator("subgroupRotate", EOpSubgroupRotate); + symbolTable.relateToOperator("subgroupClusteredRotate", EOpSubgroupClusteredRotate); symbolTable.relateToOperator("subgroupAdd", EOpSubgroupAdd); symbolTable.relateToOperator("subgroupMul", EOpSubgroupMul); symbolTable.relateToOperator("subgroupMin", EOpSubgroupMin); @@ -9560,6 +10118,37 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("shadow2DEXT", EOpTexture); symbolTable.relateToOperator("shadow2DProjEXT", EOpTextureProj); } + + // GL_EXT_shader_quad_control + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 140)) { + symbolTable.relateToOperator("subgroupQuadAll", EOpSubgroupQuadAll); + symbolTable.relateToOperator("subgroupQuadAny", EOpSubgroupQuadAny); + } + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 140)) { + symbolTable.relateToOperator("textureWeightedQCOM", EOpImageSampleWeightedQCOM); + symbolTable.relateToOperator("textureBoxFilterQCOM", EOpImageBoxFilterQCOM); + symbolTable.relateToOperator("textureBlockMatchSADQCOM", EOpImageBlockMatchSADQCOM); + symbolTable.relateToOperator("textureBlockMatchSSDQCOM", EOpImageBlockMatchSSDQCOM); + + symbolTable.relateToOperator("textureBlockMatchWindowSSDQCOM", EOpImageBlockMatchWindowSSDQCOM); + symbolTable.relateToOperator("textureBlockMatchWindowSADQCOM", EOpImageBlockMatchWindowSADQCOM); + symbolTable.relateToOperator("textureBlockMatchGatherSSDQCOM", EOpImageBlockMatchGatherSSDQCOM); + symbolTable.relateToOperator("textureBlockMatchGatherSADQCOM", EOpImageBlockMatchGatherSADQCOM); + } + + if (profile != EEsProfile && spvVersion.spv == 0) { + symbolTable.relateToOperator("texture1DArray", EOpTexture); + symbolTable.relateToOperator("texture2DArray", EOpTexture); + symbolTable.relateToOperator("shadow1DArray", EOpTexture); + symbolTable.relateToOperator("shadow2DArray", EOpTexture); + + symbolTable.relateToOperator("texture1DArrayLod", EOpTextureLod); + symbolTable.relateToOperator("texture2DArrayLod", EOpTextureLod); + symbolTable.relateToOperator("shadow1DArrayLod", EOpTextureLod); + } } switch(language) { @@ -9611,6 +10200,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("rayQueryGetWorldRayOriginEXT", EOpRayQueryGetWorldRayOrigin); symbolTable.relateToOperator("rayQueryGetIntersectionObjectToWorldEXT", EOpRayQueryGetIntersectionObjectToWorld); symbolTable.relateToOperator("rayQueryGetIntersectionWorldToObjectEXT", EOpRayQueryGetIntersectionWorldToObject); + symbolTable.relateToOperator("rayQueryGetIntersectionTriangleVertexPositionsEXT", EOpRayQueryGetIntersectionTriangleVertexPositionsEXT); } symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid); @@ -9623,6 +10213,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("beginInvocationInterlockARB", EOpBeginInvocationInterlock); symbolTable.relateToOperator("endInvocationInterlockARB", EOpEndInvocationInterlock); + symbolTable.relateToOperator("stencilAttachmentReadEXT", EOpStencilAttachmentReadEXT); + symbolTable.relateToOperator("depthAttachmentReadEXT", EOpDepthAttachmentReadEXT); + symbolTable.relateToOperator("colorAttachmentReadEXT", EOpColorAttachmentReadEXT); + break; case EShLangCompute: @@ -9639,12 +10233,26 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("dFdyCoarse", EOpDPdyCoarse); symbolTable.relateToOperator("fwidthCoarse",EOpFwidthCoarse); } - symbolTable.relateToOperator("coopMatLoadNV", EOpCooperativeMatrixLoad); - symbolTable.relateToOperator("coopMatStoreNV", EOpCooperativeMatrixStore); - symbolTable.relateToOperator("coopMatMulAddNV", EOpCooperativeMatrixMulAdd); + symbolTable.relateToOperator("coopMatLoadNV", EOpCooperativeMatrixLoadNV); + symbolTable.relateToOperator("coopMatStoreNV", EOpCooperativeMatrixStoreNV); + symbolTable.relateToOperator("coopMatMulAddNV", EOpCooperativeMatrixMulAddNV); + + symbolTable.relateToOperator("coopMatLoad", EOpCooperativeMatrixLoad); + symbolTable.relateToOperator("coopMatStore", EOpCooperativeMatrixStore); + symbolTable.relateToOperator("coopMatMulAdd", EOpCooperativeMatrixMulAdd); + + if (profile != EEsProfile && version >= 460) { + symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV); + symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV); + } break; case EShLangRayGen: + if (profile != EEsProfile && version >= 460) { + symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV); + symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV); + } + [[fallthrough]]; case EShLangClosestHit: case EShLangMiss: if (profile != EEsProfile && version >= 460) { @@ -9653,13 +10261,45 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("traceRayEXT", EOpTraceKHR); symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV); symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR); + + symbolTable.relateToOperator("hitObjectTraceRayNV", EOpHitObjectTraceRayNV); + symbolTable.relateToOperator("hitObjectTraceRayMotionNV", EOpHitObjectTraceRayMotionNV); + symbolTable.relateToOperator("hitObjectRecordHitNV", EOpHitObjectRecordHitNV); + symbolTable.relateToOperator("hitObjectRecordHitMotionNV", EOpHitObjectRecordHitMotionNV); + symbolTable.relateToOperator("hitObjectRecordHitWithIndexNV", EOpHitObjectRecordHitWithIndexNV); + symbolTable.relateToOperator("hitObjectRecordHitWithIndexMotionNV", EOpHitObjectRecordHitWithIndexMotionNV); + symbolTable.relateToOperator("hitObjectRecordMissNV", EOpHitObjectRecordMissNV); + symbolTable.relateToOperator("hitObjectRecordMissMotionNV", EOpHitObjectRecordMissMotionNV); + symbolTable.relateToOperator("hitObjectRecordEmptyNV", EOpHitObjectRecordEmptyNV); + symbolTable.relateToOperator("hitObjectExecuteShaderNV", EOpHitObjectExecuteShaderNV); + symbolTable.relateToOperator("hitObjectIsEmptyNV", EOpHitObjectIsEmptyNV); + symbolTable.relateToOperator("hitObjectIsMissNV", EOpHitObjectIsMissNV); + symbolTable.relateToOperator("hitObjectIsHitNV", EOpHitObjectIsHitNV); + symbolTable.relateToOperator("hitObjectGetRayTMinNV", EOpHitObjectGetRayTMinNV); + symbolTable.relateToOperator("hitObjectGetRayTMaxNV", EOpHitObjectGetRayTMaxNV); + symbolTable.relateToOperator("hitObjectGetObjectRayOriginNV", EOpHitObjectGetObjectRayOriginNV); + symbolTable.relateToOperator("hitObjectGetObjectRayDirectionNV", EOpHitObjectGetObjectRayDirectionNV); + symbolTable.relateToOperator("hitObjectGetWorldRayOriginNV", EOpHitObjectGetWorldRayOriginNV); + symbolTable.relateToOperator("hitObjectGetWorldRayDirectionNV", EOpHitObjectGetWorldRayDirectionNV); + symbolTable.relateToOperator("hitObjectGetWorldToObjectNV", EOpHitObjectGetWorldToObjectNV); + symbolTable.relateToOperator("hitObjectGetObjectToWorldNV", EOpHitObjectGetObjectToWorldNV); + symbolTable.relateToOperator("hitObjectGetInstanceCustomIndexNV", EOpHitObjectGetInstanceCustomIndexNV); + symbolTable.relateToOperator("hitObjectGetInstanceIdNV", EOpHitObjectGetInstanceIdNV); + symbolTable.relateToOperator("hitObjectGetGeometryIndexNV", EOpHitObjectGetGeometryIndexNV); + symbolTable.relateToOperator("hitObjectGetPrimitiveIndexNV", EOpHitObjectGetPrimitiveIndexNV); + symbolTable.relateToOperator("hitObjectGetHitKindNV", EOpHitObjectGetHitKindNV); + symbolTable.relateToOperator("hitObjectGetAttributesNV", EOpHitObjectGetAttributesNV); + symbolTable.relateToOperator("hitObjectGetCurrentTimeNV", EOpHitObjectGetCurrentTimeNV); + symbolTable.relateToOperator("hitObjectGetShaderBindingTableRecordIndexNV", EOpHitObjectGetShaderBindingTableRecordIndexNV); + symbolTable.relateToOperator("hitObjectGetShaderRecordBufferHandleNV", EOpHitObjectGetShaderRecordBufferHandleNV); + symbolTable.relateToOperator("reorderThreadNV", EOpReorderThreadNV); } break; case EShLangIntersect: if (profile != EEsProfile && version >= 460) { symbolTable.relateToOperator("reportIntersectionNV", EOpReportIntersection); symbolTable.relateToOperator("reportIntersectionEXT", EOpReportIntersection); - } + } break; case EShLangAnyHit: if (profile != EEsProfile && version >= 460) { @@ -9673,23 +10313,38 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR); } break; - case EShLangMeshNV: + case EShLangMesh: if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { symbolTable.relateToOperator("writePackedPrimitiveIndices4x8NV", EOpWritePackedPrimitiveIndices4x8NV); + symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared); + symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier); + symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared); + } + + if (profile != EEsProfile && version >= 450) { + symbolTable.relateToOperator("SetMeshOutputsEXT", EOpSetMeshOutputsEXT); } - // fall through - case EShLangTaskNV: + + if (profile != EEsProfile && version >= 460) { + // Builtins for GL_NV_displacement_micromap. + symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV); + symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV); + } + break; + case EShLangTask: if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared); symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier); symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared); } + if (profile != EEsProfile && version >= 450) { + symbolTable.relateToOperator("EmitMeshTasksEXT", EOpEmitMeshTasksEXT); + } break; default: assert(false && "Language not supported"); } -#endif // !GLSLANG_WEB } // @@ -9703,11 +10358,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion // void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) { -#ifndef GLSLANG_WEB -#if defined(GLSLANG_ANGLE) - profile = ECoreProfile; - version = 450; -#endif if (profile != EEsProfile && version >= 430 && version < 440) { symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts); symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts); @@ -9779,7 +10429,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion default: break; } -#endif } } // end namespace glslang diff --git a/glslang/MachineIndependent/Initialize.h b/glslang/MachineIndependent/Initialize.h index ac8ec33e99..42c32ddbb7 100644 --- a/glslang/MachineIndependent/Initialize.h +++ b/glslang/MachineIndependent/Initialize.h @@ -107,6 +107,9 @@ class TBuiltIns : public TBuiltInParseables { int dimMap[EsdNumDims]; }; +// change this back to false if depending on textual spellings of texturing calls when consuming the AST +// Using PureOperatorBuiltins=false is deprecated. +constexpr bool PureOperatorBuiltins = true; } // end namespace glslang #endif // _INITIALIZE_INCLUDED_ diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 6aea5b3d7c..63e176e3ae 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -352,7 +352,7 @@ TIntermTyped* TIntermediate::addIndex(TOperator op, TIntermTyped* base, TIntermT TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, const TSourceLoc& loc) { - if (child == 0) + if (child == nullptr) return nullptr; if (child->getType().getBasicType() == EbtBlock) @@ -376,6 +376,7 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, case EOpNegative: if (child->getType().getBasicType() == EbtStruct || child->getType().isArray()) return nullptr; + break; default: break; // some compilers want this } @@ -388,7 +389,6 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, case EOpConstructFloat: newType = EbtFloat; break; case EOpConstructInt: newType = EbtInt; break; case EOpConstructUint: newType = EbtUint; break; -#ifndef GLSLANG_WEB case EOpConstructInt8: newType = EbtInt8; break; case EOpConstructUint8: newType = EbtUint8; break; case EOpConstructInt16: newType = EbtInt16; break; @@ -397,7 +397,6 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, case EOpConstructUint64: newType = EbtUint64; break; case EOpConstructDouble: newType = EbtDouble; break; case EOpConstructFloat16: newType = EbtFloat16; break; -#endif default: break; // some compilers want this } @@ -569,7 +568,6 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& newOp) const { switch (dst) { -#ifndef GLSLANG_WEB case EbtDouble: switch (src) { case EbtUint: newOp = EOpConvUintToDouble; break; @@ -587,13 +585,11 @@ bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& ne return false; } break; -#endif case EbtFloat: switch (src) { case EbtInt: newOp = EOpConvIntToFloat; break; case EbtUint: newOp = EOpConvUintToFloat; break; case EbtBool: newOp = EOpConvBoolToFloat; break; -#ifndef GLSLANG_WEB case EbtDouble: newOp = EOpConvDoubleToFloat; break; case EbtInt8: newOp = EOpConvInt8ToFloat; break; case EbtUint8: newOp = EOpConvUint8ToFloat; break; @@ -602,12 +598,10 @@ bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& ne case EbtFloat16: newOp = EOpConvFloat16ToFloat; break; case EbtInt64: newOp = EOpConvInt64ToFloat; break; case EbtUint64: newOp = EOpConvUint64ToFloat; break; -#endif default: return false; } break; -#ifndef GLSLANG_WEB case EbtFloat16: switch (src) { case EbtInt8: newOp = EOpConvInt8ToFloat16; break; @@ -625,13 +619,11 @@ bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& ne return false; } break; -#endif case EbtBool: switch (src) { case EbtInt: newOp = EOpConvIntToBool; break; case EbtUint: newOp = EOpConvUintToBool; break; case EbtFloat: newOp = EOpConvFloatToBool; break; -#ifndef GLSLANG_WEB case EbtDouble: newOp = EOpConvDoubleToBool; break; case EbtInt8: newOp = EOpConvInt8ToBool; break; case EbtUint8: newOp = EOpConvUint8ToBool; break; @@ -640,12 +632,10 @@ bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& ne case EbtFloat16: newOp = EOpConvFloat16ToBool; break; case EbtInt64: newOp = EOpConvInt64ToBool; break; case EbtUint64: newOp = EOpConvUint64ToBool; break; -#endif default: return false; } break; -#ifndef GLSLANG_WEB case EbtInt8: switch (src) { case EbtUint8: newOp = EOpConvUint8ToInt8; break; @@ -715,14 +705,12 @@ bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& ne return false; } break; -#endif case EbtInt: switch (src) { case EbtUint: newOp = EOpConvUintToInt; break; case EbtBool: newOp = EOpConvBoolToInt; break; case EbtFloat: newOp = EOpConvFloatToInt; break; -#ifndef GLSLANG_WEB case EbtInt8: newOp = EOpConvInt8ToInt; break; case EbtUint8: newOp = EOpConvUint8ToInt; break; case EbtInt16: newOp = EOpConvInt16ToInt; break; @@ -731,7 +719,6 @@ bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& ne case EbtFloat16: newOp = EOpConvFloat16ToInt; break; case EbtInt64: newOp = EOpConvInt64ToInt; break; case EbtUint64: newOp = EOpConvUint64ToInt; break; -#endif default: return false; } @@ -741,7 +728,6 @@ bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& ne case EbtInt: newOp = EOpConvIntToUint; break; case EbtBool: newOp = EOpConvBoolToUint; break; case EbtFloat: newOp = EOpConvFloatToUint; break; -#ifndef GLSLANG_WEB case EbtInt8: newOp = EOpConvInt8ToUint; break; case EbtUint8: newOp = EOpConvUint8ToUint; break; case EbtInt16: newOp = EOpConvInt16ToUint; break; @@ -750,12 +736,15 @@ bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& ne case EbtFloat16: newOp = EOpConvFloat16ToUint; break; case EbtInt64: newOp = EOpConvInt64ToUint; break; case EbtUint64: newOp = EOpConvUint64ToUint; break; -#endif + // For bindless texture type conversion, add a dummy convert op, just + // to generate a new TIntermTyped + // uvec2(any sampler type) + // uvec2(any image type) + case EbtSampler: newOp = EOpConvIntToUint; break; default: return false; } break; -#ifndef GLSLANG_WEB case EbtInt64: switch (src) { case EbtInt8: newOp = EOpConvInt8ToInt64; break; @@ -790,7 +779,6 @@ bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& ne return false; } break; -#endif default: return false; } @@ -806,7 +794,6 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped // Add a new newNode for the conversion. // -#ifndef GLSLANG_WEB bool convertToIntTypes = (convertTo == EbtInt8 || convertTo == EbtUint8 || convertTo == EbtInt16 || convertTo == EbtUint16 || convertTo == EbtInt || convertTo == EbtUint || @@ -843,7 +830,6 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped return nullptr; } } -#endif TIntermUnary* newNode = nullptr; TOperator newOp = EOpNull; @@ -855,13 +841,11 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped newNode = addUnaryNode(newOp, node, node->getLoc(), newType); if (node->getAsConstantUnion()) { -#ifndef GLSLANG_WEB // 8/16-bit storage extensions don't support 8/16-bit constants, so don't fold conversions // to those types if ((getArithemeticInt8Enabled() || !(convertTo == EbtInt8 || convertTo == EbtUint8)) && (getArithemeticInt16Enabled() || !(convertTo == EbtInt16 || convertTo == EbtUint16)) && (getArithemeticFloat16Enabled() || !(convertTo == EbtFloat16))) -#endif { TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType); if (folded) @@ -1044,6 +1028,12 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt if (type.isArray() || node->getType().isArray()) return nullptr; + // Reject implicit conversions to cooperative matrix types + if (node->getType().isCoopMat() && + op != EOpConstructCooperativeMatrixNV && + op != EOpConstructCooperativeMatrixKHR) + return nullptr; + // Note: callers are responsible for other aspects of shape, // like vector and matrix sizes. @@ -1055,7 +1045,6 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt case EOpConstructFloat: case EOpConstructInt: case EOpConstructUint: -#ifndef GLSLANG_WEB case EOpConstructDouble: case EOpConstructFloat16: case EOpConstructInt8: @@ -1066,8 +1055,6 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt case EOpConstructUint64: break; -#endif - // // Implicit conversions // @@ -1112,7 +1099,8 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt case EOpSequence: case EOpConstructStruct: - case EOpConstructCooperativeMatrix: + case EOpConstructCooperativeMatrixNV: + case EOpConstructCooperativeMatrixKHR: if (type.isReference() || node->getType().isReference()) { // types must match to assign a reference @@ -1154,7 +1142,6 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt } bool canPromoteConstant = true; -#ifndef GLSLANG_WEB // GL_EXT_shader_16bit_storage can't do OpConstantComposite with // 16-bit types, so disable promotion for those types. // Many issues with this, from JohnK: @@ -1182,7 +1169,6 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt default: break; } -#endif if (canPromoteConstant && node->getAsConstantUnion()) return promoteConstantUnion(type.getBasicType(), node->getAsConstantUnion()); @@ -1292,6 +1278,7 @@ void TIntermediate::addBiShapeConversion(TOperator op, TIntermTyped*& lhsNode, T // matrix multiply does not change shapes if (lhsNode->isMatrix() && rhsNode->isMatrix()) return; + [[fallthrough]]; case EOpAdd: case EOpSub: case EOpDiv: @@ -1479,10 +1466,6 @@ bool TIntermediate::isFPPromotion(TBasicType from, TBasicType to) const bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const { -#ifdef GLSLANG_WEB - return false; -#endif - switch (from) { case EbtInt: switch(to) { @@ -1563,10 +1546,6 @@ bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const bool TIntermediate::isFPConversion(TBasicType from, TBasicType to) const { -#ifdef GLSLANG_WEB - return false; -#endif - if (to == EbtFloat && from == EbtFloat16) { return true; } else { @@ -1587,7 +1566,6 @@ bool TIntermediate::isFPIntegralConversion(TBasicType from, TBasicType to) const break; } break; -#ifndef GLSLANG_WEB case EbtInt8: case EbtUint8: case EbtInt16: @@ -1607,7 +1585,6 @@ bool TIntermediate::isFPIntegralConversion(TBasicType from, TBasicType to) const return true; } break; -#endif default: break; } @@ -1809,10 +1786,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat static bool canSignedIntTypeRepresentAllUnsignedValues(TBasicType sintType, TBasicType uintType) { -#ifdef GLSLANG_WEB - return false; -#endif - switch(sintType) { case EbtInt8: switch(uintType) { @@ -1873,11 +1846,6 @@ static bool canSignedIntTypeRepresentAllUnsignedValues(TBasicType sintType, TBas static TBasicType getCorrespondingUnsignedType(TBasicType type) { -#ifdef GLSLANG_WEB - assert(type == EbtInt); - return EbtUint; -#endif - switch(type) { case EbtInt8: return EbtUint8; @@ -2003,8 +1971,11 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const if (type.getQualifier().isNonUniform()) return EOpConstructNonuniform; - if (type.isCoopMat()) - return EOpConstructCooperativeMatrix; + if (type.isCoopMatNV()) + return EOpConstructCooperativeMatrixNV; + + if (type.isCoopMatKHR()) + return EOpConstructCooperativeMatrixKHR; switch (type.getBasicType()) { case EbtStruct: @@ -2167,7 +2138,6 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const } } break; -#ifndef GLSLANG_WEB case EbtDouble: if (type.getMatrixCols()) { switch (type.getMatrixCols()) { @@ -2306,7 +2276,6 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const case EbtAccStruct: op = EOpConstructAccStruct; break; -#endif default: break; } @@ -2350,6 +2319,40 @@ TIntermAggregate* TIntermediate::growAggregate(TIntermNode* left, TIntermNode* r return aggNode; } +TIntermAggregate* TIntermediate::mergeAggregate(TIntermNode* left, TIntermNode* right) +{ + if (left == nullptr && right == nullptr) + return nullptr; + + TIntermAggregate* aggNode = nullptr; + if (left != nullptr) + aggNode = left->getAsAggregate(); + if (aggNode == nullptr || aggNode->getOp() != EOpNull) { + aggNode = new TIntermAggregate; + if (left != nullptr) + aggNode->getSequence().push_back(left); + } + + TIntermAggregate* rhsagg = right->getAsAggregate(); + if (rhsagg == nullptr || rhsagg->getOp() != EOpNull) + aggNode->getSequence().push_back(right); + else + aggNode->getSequence().insert(aggNode->getSequence().end(), + rhsagg->getSequence().begin(), + rhsagg->getSequence().end()); + + return aggNode; +} + +TIntermAggregate* TIntermediate::mergeAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc& loc) +{ + TIntermAggregate* aggNode = mergeAggregate(left, right); + if (aggNode) + aggNode->setLoc(loc); + + return aggNode; +} + // // Turn an existing node into an aggregate. // @@ -2623,6 +2626,18 @@ TIntermConstantUnion* TIntermediate::addConstantUnion(double d, TBasicType baseT { assert(baseType == EbtFloat || baseType == EbtDouble || baseType == EbtFloat16); + if (isEsProfile() && (baseType == EbtFloat || baseType == EbtFloat16)) { + int exponent = 0; + frexp(d, &exponent); + int minExp = baseType == EbtFloat ? -126 : -14; + int maxExp = baseType == EbtFloat ? 127 : 15; + if (exponent > maxExp) { //overflow, d = inf + d = std::numeric_limits::infinity(); + } else if (exponent < minExp) { //underflow, d = 0.0; + d = 0.0; + } + } + TConstUnionArray unionArray(1); unionArray[0].setDConst(d); @@ -2680,28 +2695,42 @@ TIntermTyped* TIntermediate::addSwizzle(TSwizzleSelectors& selecto // 'swizzleOkay' says whether or not it is okay to consider a swizzle // a valid part of the dereference chain. // -// 'BufferReferenceOk' says if type is buffer_reference, the routine stop to find the most left node. +// 'bufferReferenceOk' says if type is buffer_reference, the routine will stop to find the most left node. // +// 'proc' is an optional function to run on each node that is processed during the traversal. 'proc' must +// return true to continue the traversal, or false to end the traversal early. // -const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool swizzleOkay , bool bufferReferenceOk) +const TIntermTyped* TIntermediate::traverseLValueBase(const TIntermTyped* node, bool swizzleOkay, + bool bufferReferenceOk, + std::function proc) { do { const TIntermBinary* binary = node->getAsBinaryNode(); - if (binary == nullptr) + if (binary == nullptr) { + if (proc) { + proc(*node); + } return node; + } TOperator op = binary->getOp(); - if (op != EOpIndexDirect && op != EOpIndexIndirect && op != EOpIndexDirectStruct && op != EOpVectorSwizzle && op != EOpMatrixSwizzle) + if (op != EOpIndexDirect && op != EOpIndexIndirect && op != EOpIndexDirectStruct && op != EOpVectorSwizzle && + op != EOpMatrixSwizzle) return nullptr; - if (! swizzleOkay) { + if (!swizzleOkay) { if (op == EOpVectorSwizzle || op == EOpMatrixSwizzle) return nullptr; if ((op == EOpIndexDirect || op == EOpIndexIndirect) && (binary->getLeft()->getType().isVector() || binary->getLeft()->getType().isScalar()) && - ! binary->getLeft()->getType().isArray()) + !binary->getLeft()->getType().isArray()) return nullptr; } - node = node->getAsBinaryNode()->getLeft(); + if (proc) { + if (!proc(*node)) { + return node; + } + } + node = binary->getLeft(); if (bufferReferenceOk && node->isReference()) return node; } while (true); @@ -2733,10 +2762,10 @@ TIntermAggregate* TIntermediate::addForLoop(TIntermNode* body, TIntermNode* init TIntermAggregate* loopSequence = (initializer == nullptr || initializer->getAsAggregate() == nullptr) ? makeAggregate(initializer, loc) : initializer->getAsAggregate(); - if (loopSequence != nullptr && loopSequence->getOp() == EOpSequence) + if (loopSequence != nullptr && (loopSequence->getOp() == EOpSequence || loopSequence->getOp() == EOpScope)) loopSequence->setOp(EOpNull); loopSequence = growAggregate(loopSequence, node); - loopSequence->setOperator(EOpSequence); + loopSequence->setOperator(getDebugInfo() ? EOpScope : EOpSequence); return loopSequence; } @@ -2766,7 +2795,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); } @@ -2787,7 +2816,6 @@ bool TIntermediate::postProcess(TIntermNode* root, EShLanguage /*language*/) if (aggRoot && aggRoot->getOp() == EOpNull) aggRoot->setOperator(EOpSequence); -#ifndef GLSLANG_WEB // Propagate 'noContraction' label in backward from 'precise' variables. glslang::PropagateNoContraction(*this); @@ -2801,7 +2829,6 @@ bool TIntermediate::postProcess(TIntermNode* root, EShLanguage /*language*/) assert(0); break; } -#endif return true; } @@ -2830,10 +2857,9 @@ void TIntermediate::addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguag //} if (language == EShLangVertex) { - // the names won't be found in the symbol table unless the versions are right, - // so version logic does not need to be repeated here addSymbolLinkageNode(linkage, symbolTable, "gl_VertexID"); - addSymbolLinkageNode(linkage, symbolTable, "gl_InstanceID"); + if ((version < 140 && requestedExtensions.find(E_GL_EXT_draw_instanced) != requestedExtensions.end()) || version >= 140) + addSymbolLinkageNode(linkage, symbolTable, "gl_InstanceID"); } // Add a child to the root node for the linker objects @@ -3284,7 +3310,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; } @@ -3465,6 +3491,7 @@ bool TIntermediate::promoteBinary(TIntermBinary& node) // check for non-Boolean operands if (left->getBasicType() == EbtBool || right->getBasicType() == EbtBool) return false; + break; default: break; @@ -3508,33 +3535,42 @@ bool TIntermediate::promoteBinary(TIntermBinary& node) if (left->getType() == right->getType()) return true; - // Fall through + [[fallthrough]]; case EOpMul: case EOpMulAssign: // At least the basic type has to match if (left->getBasicType() != right->getBasicType()) return false; + break; default: break; } if (left->getType().isCoopMat() || right->getType().isCoopMat()) { + // Operations on two cooperative matrices must have identical types if (left->getType().isCoopMat() && right->getType().isCoopMat() && - *left->getType().getTypeParameters() != *right->getType().getTypeParameters()) { + left->getType() != right->getType()) { return false; } switch (op) { case EOpMul: case EOpMulAssign: - if (left->getType().isCoopMat() && right->getType().isCoopMat()) { + // Mul not supported in NV_cooperative_matrix + if (left->getType().isCoopMatNV() && right->getType().isCoopMatNV()) { return false; } - if (op == EOpMulAssign && right->getType().isCoopMat()) { + // NV_cooperative_matrix supports MulAssign is for mat*=scalar only. + // KHR_cooperative_matrix supports it for mat*=mat as well. + if (op == EOpMulAssign && right->getType().isCoopMatNV()) { return false; } - node.setOp(op == EOpMulAssign ? EOpMatrixTimesScalarAssign : EOpMatrixTimesScalar); + // Use MatrixTimesScalar if either operand is not a matrix. Otherwise use Mul. + if (!left->getType().isCoopMat() || !right->getType().isCoopMat()) { + node.setOp(op == EOpMulAssign ? EOpMatrixTimesScalarAssign : EOpMatrixTimesScalar); + } + // In case of scalar*matrix, take the result type from the matrix. if (right->getType().isCoopMat()) { node.setType(right->getType()); } @@ -3649,7 +3685,7 @@ bool TIntermediate::promoteBinary(TIntermBinary& node) case EOpAssign: if (left->getVectorSize() != right->getVectorSize() || left->getMatrixCols() != right->getMatrixCols() || left->getMatrixRows() != right->getMatrixRows()) return false; - // fall through + [[fallthrough]]; case EOpAdd: case EOpSub: @@ -3785,7 +3821,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 +3843,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; @@ -3887,16 +3923,6 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC #define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast(rightUnionArray[i].Get())) #define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0) -#ifdef GLSLANG_WEB -#define TO_ALL(Get) \ - switch (promoteTo) { \ - case EbtFloat: PROMOTE(setDConst, double, Get); break; \ - case EbtInt: PROMOTE(setIConst, int, Get); break; \ - case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \ - case EbtBool: PROMOTE_TO_BOOL(Get); break; \ - default: return node; \ - } -#else #define TO_ALL(Get) \ switch (promoteTo) { \ case EbtFloat16: PROMOTE(setDConst, double, Get); break; \ @@ -3913,14 +3939,12 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC case EbtBool: PROMOTE_TO_BOOL(Get); break; \ default: return node; \ } -#endif switch (node->getType().getBasicType()) { case EbtFloat: TO_ALL(getDConst); break; case EbtInt: TO_ALL(getIConst); break; case EbtUint: TO_ALL(getUConst); break; case EbtBool: TO_ALL(getBConst); break; -#ifndef GLSLANG_WEB case EbtFloat16: TO_ALL(getDConst); break; case EbtDouble: TO_ALL(getDConst); break; case EbtInt8: TO_ALL(getI8Const); break; @@ -3929,7 +3953,6 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC case EbtUint8: TO_ALL(getU8Const); break; case EbtUint16: TO_ALL(getU16Const); break; case EbtUint64: TO_ALL(getU64Const); break; -#endif default: return node; } } diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp index 1da50d62f9..f7895d9799 100644 --- a/glslang/MachineIndependent/ParseContextBase.cpp +++ b/glslang/MachineIndependent/ParseContextBase.cpp @@ -59,7 +59,7 @@ void TParseContextBase::outputMessage(const TSourceLoc& loc, const char* szReaso safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args); infoSink.info.prefix(prefix); - infoSink.info.location(loc); + infoSink.info.location(loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn); infoSink.info << "'" << szToken << "' : " << szReason << " " << szExtraInfo << "\n"; if (prefix == EPrefixError) { @@ -67,13 +67,14 @@ void TParseContextBase::outputMessage(const TSourceLoc& loc, const char* szReaso } } -#if !defined(GLSLANG_WEB) || defined(GLSLANG_WEB_DEVEL) - void C_DECL TParseContextBase::error(const TSourceLoc& loc, const char* szReason, const char* szToken, const char* szExtraInfoFormat, ...) { 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); @@ -115,8 +116,6 @@ void C_DECL TParseContextBase::ppWarn(const TSourceLoc& loc, const char* szReaso va_end(args); } -#endif - // // Both test and if necessary, spit out an error, to see if the node is really // an l-value that can be operated on this way. @@ -137,7 +136,6 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, case EvqConst: message = "can't modify a const"; break; case EvqConstReadOnly: message = "can't modify a const"; break; case EvqUniform: message = "can't modify a uniform"; break; -#ifndef GLSLANG_WEB case EvqBuffer: if (node->getQualifier().isReadOnly()) message = "can't modify a readonly buffer"; @@ -148,7 +146,6 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, if (language != EShLangIntersect) message = "cannot modify hitAttributeNV in this stage"; break; -#endif default: // @@ -156,12 +153,12 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, // switch (node->getBasicType()) { case EbtSampler: - message = "can't modify a sampler"; + if (extensionTurnedOn(E_GL_ARB_bindless_texture) == false) + message = "can't modify a sampler"; break; case EbtVoid: message = "can't modify void"; break; -#ifndef GLSLANG_WEB case EbtAtomicUint: message = "can't modify an atomic_uint"; break; @@ -171,7 +168,9 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, case EbtRayQuery: message = "can't modify rayQueryEXT"; break; -#endif + case EbtHitObjectNV: + message = "can't modify hitObjectNV"; + break; default: break; } @@ -209,7 +208,7 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, // // If we get here, we have an error and a message. // - const TIntermTyped* leftMostTypeNode = TIntermediate::findLValueBase(node, true); + const TIntermTyped* leftMostTypeNode = TIntermediate::traverseLValueBase(node, true); if (symNode) error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message); @@ -228,14 +227,14 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, // Test for and give an error if the node can't be read from. void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) { - TIntermBinary* binaryNode = node->getAsBinaryNode(); - const TIntermSymbol* symNode = node->getAsSymbolNode(); - if (! node) return; + TIntermBinary* binaryNode = node->getAsBinaryNode(); + const TIntermSymbol* symNode = node->getAsSymbolNode(); + if (node->getQualifier().isWriteOnly()) { - const TIntermTyped* leftMostTypeNode = TIntermediate::findLValueBase(node, true); + const TIntermTyped* leftMostTypeNode = TIntermediate::traverseLValueBase(node, true); if (symNode != nullptr) error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str()); @@ -258,6 +257,7 @@ void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op, case EOpVectorSwizzle: case EOpMatrixSwizzle: rValueErrorCheck(loc, op, binaryNode->getLeft()); + break; default: break; } @@ -627,10 +627,8 @@ void TParseContextBase::growGlobalUniformBlock(const TSourceLoc& loc, TType& mem if (symbol) { if (memberType != symbol->getType()) { TString err; - err += "\"" + memberType.getCompleteString() + "\""; - err += " versus "; - err += "\"" + symbol->getType().getCompleteString() + "\""; - error(loc, "Types must match:", memberType.getFieldName().c_str(), err.c_str()); + err += "Redeclaration: already declared as \"" + symbol->getType().getCompleteString() + "\""; + error(loc, "", memberName.c_str(), err.c_str()); } return; } @@ -725,6 +723,24 @@ void TParseContextBase::finish() if (parsingBuiltins) return; + for (const TString& relaxedSymbol : relaxedSymbols) + { + TSymbol* symbol = symbolTable.find(relaxedSymbol); + TType& type = symbol->getWritableType(); + for (const TTypeLoc& typeLoc : *type.getStruct()) + { + if (typeLoc.type->isOpaque()) + { + typeLoc.type->getSampler() = TSampler{}; + typeLoc.type->setBasicType(EbtInt); + TString fieldName("/*"); + fieldName.append(typeLoc.type->getFieldName()); + fieldName.append("*/"); + typeLoc.type->setFieldName(fieldName); + } + } + } + // Transfer the linkage symbols to AST nodes, preserving order. TIntermAggregate* linkage = new TIntermAggregate; for (auto i = linkageSymbols.begin(); i != linkageSymbols.end(); ++i) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index fa291160cb..215ccd9918 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -4,6 +4,7 @@ // Copyright (C) 2015-2018 Google, Inc. // Copyright (C) 2017, 2019 ARM Limited. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. +// Modifications Copyright (C) 2024 Ravi Prakash Singh. // // All rights reserved. // @@ -38,9 +39,9 @@ // #include "ParseHelper.h" +#include "Initialize.h" #include "Scan.h" -#include "../OSDependent/osinclude.h" #include #include "preprocessor/PpContext.h" @@ -57,11 +58,8 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b infoSink, forwardCompatible, messages, entryPoint), inMain(false), blockName(nullptr), - limits(resources.limits) -#ifndef GLSLANG_WEB - , + limits(resources.limits), atomicUintOffsets(nullptr), anyIndexLimits(false) -#endif { // decide whether precision qualifiers should be ignored or respected if (isEsProfile() || spvVersion.vulkan > 0) { @@ -80,10 +78,6 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b globalBufferDefaults.layoutMatrix = ElmColumnMajor; globalBufferDefaults.layoutPacking = spvVersion.spv != 0 ? ElpStd430 : ElpShared; - // use storage buffer on SPIR-V 1.3 and up - if (spvVersion.spv >= EShTargetSpv_1_3) - intermediate.setUseStorageBuffer(); - globalInputDefaults.clear(); globalOutputDefaults.clear(); @@ -91,7 +85,6 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b globalSharedDefaults.layoutMatrix = ElmColumnMajor; globalSharedDefaults.layoutPacking = ElpStd430; -#ifndef GLSLANG_WEB // "Shaders in the transform // feedback capturing mode have an initial global default of // layout(xfb_buffer = 0) out;" @@ -103,7 +96,6 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b if (language == EShLangGeometry) globalOutputDefaults.layoutStream = 0; -#endif if (entryPoint != nullptr && entryPoint->size() > 0 && *entryPoint != "main") infoSink.info.message(EPrefixError, "Source entry point must be \"main\""); @@ -111,9 +103,7 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b TParseContext::~TParseContext() { -#ifndef GLSLANG_WEB delete [] atomicUintOffsets; -#endif } // Set up all default precisions as needed by the current environment. @@ -177,7 +167,6 @@ void TParseContext::setLimits(const TBuiltInResource& r) resources = r; intermediate.setLimits(r); -#ifndef GLSLANG_WEB anyIndexLimits = ! limits.generalAttributeMatrixVectorIndexing || ! limits.generalConstantMatrixVectorIndexing || ! limits.generalSamplerIndexing || @@ -192,7 +181,6 @@ void TParseContext::setLimits(const TBuiltInResource& r) atomicUintOffsets = new int[resources.maxAtomicCounterBindings]; for (int b = 0; b < resources.maxAtomicCounterBindings; ++b) atomicUintOffsets[b] = 0; -#endif } // @@ -339,7 +327,6 @@ void TParseContext::setInvariant(const TSourceLoc& loc, const char* builtin) { void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& tokens) { -#ifndef GLSLANG_WEB if (pragmaCallback) pragmaCallback(loc.line, tokens); @@ -412,6 +399,10 @@ void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& if (spvVersion.spv < glslang::EShTargetSpv_1_3) error(loc, "requires SPIR-V 1.3", "#pragma use_variable_pointers", ""); intermediate.setUseVariablePointers(); + } else if (spvVersion.spv > 0 && tokens[0].compare("use_replicated_composites") == 0) { + if (tokens.size() != 1) + error(loc, "extra tokens", "#pragma", ""); + intermediate.setReplicatedComposites(); } else if (tokens[0].compare("once") == 0) { warn(loc, "not implemented", "#pragma once", ""); } else if (tokens[0].compare("glslang_binary_double_output") == 0) { @@ -441,7 +432,6 @@ void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& setInvariant(loc, "gl_FragColor"); setInvariant(loc, "gl_FragData"); } -#endif } // @@ -455,7 +445,6 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb if (symbol && symbol->getNumExtensions()) requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str()); -#ifndef GLSLANG_WEB if (symbol && symbol->isReadOnly()) { // All shared things containing an unsized array must be copied up // on first use, so that all future references will share its array structure, @@ -475,7 +464,6 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb makeEditable(symbol); } } -#endif const TVariable* variable; const TAnonMember* anon = symbol ? symbol->getAsAnonMember() : nullptr; @@ -502,6 +490,16 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb error(loc, "cannot be used (maybe an instance name is needed)", string->c_str(), ""); variable = nullptr; } + + if (language == EShLangMesh && variable) { + TLayoutGeometry primitiveType = intermediate.getOutputPrimitive(); + if ((variable->getMangledName() == "gl_PrimitiveTriangleIndicesEXT" && primitiveType != ElgTriangles) || + (variable->getMangledName() == "gl_PrimitiveLineIndicesEXT" && primitiveType != ElgLines) || + (variable->getMangledName() == "gl_PrimitivePointIndicesEXT" && primitiveType != ElgPoints)) { + error(loc, "cannot be used (output primitive type mismatch)", string->c_str(), ""); + variable = nullptr; + } + } } else { if (symbol) error(loc, "variable name expected", string->c_str(), ""); @@ -570,7 +568,6 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn // at least one of base and index is not a front-end constant variable... TIntermTyped* result = nullptr; -#ifndef GLSLANG_WEB if (base->isReference() && ! base->isArray()) { requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "buffer reference indexing"); if (base->getType().getReferentType()->containsUnsizedArray()) { @@ -589,15 +586,26 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn } if (base->getAsSymbolNode() && isIoResizeArray(base->getType())) handleIoResizeArrayAccess(loc, base); -#endif if (index->getQualifier().isFrontEndConstant()) checkIndex(loc, base->getType(), indexValue); if (index->getQualifier().isFrontEndConstant()) { -#ifndef GLSLANG_WEB if (base->getType().isUnsizedArray()) { base->getWritableType().updateImplicitArraySize(indexValue + 1); + base->getWritableType().setImplicitlySized(true); + if (base->getQualifier().builtIn == EbvClipDistance && + indexValue >= resources.maxClipDistances) { + error(loc, "gl_ClipDistance", "[", "array index out of range '%d'", indexValue); + } + else if (base->getQualifier().builtIn == EbvCullDistance && + indexValue >= resources.maxCullDistances) { + error(loc, "gl_CullDistance", "[", "array index out of range '%d'", indexValue); + } + else if (base->getQualifier().builtIn == EbvSampleMask && + indexValue >= (resources.maxSamples + 31) / 32) { + error(loc, "gl_SampleMask", "[", "array index out of range '%d'", indexValue); + } // For 2D per-view builtin arrays, update the inner dimension size in parent type if (base->getQualifier().isPerView() && base->getQualifier().builtIn != EbvNone) { TIntermBinary* binaryNode = base->getAsBinaryNode(); @@ -609,11 +617,9 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn } } } else -#endif checkIndex(loc, base->getType(), indexValue); result = intermediate.addIndex(EOpIndexDirect, base, index, loc); } else { -#ifndef GLSLANG_WEB if (base->getType().isUnsizedArray()) { // we have a variable index into an unsized array, which is okay, // depending on the situation @@ -625,7 +631,6 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn } base->getWritableType().setArrayVariablyIndexed(); } -#endif if (base->getBasicType() == EbtBlock) { if (base->getQualifier().storage == EvqBuffer) requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array"); @@ -635,7 +640,7 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn else { // input/output blocks either don't exist or can't be variably indexed } - } else if (language == EShLangFragment && base->getQualifier().isPipeOutput()) + } else if (language == EShLangFragment && base->getQualifier().isPipeOutput() && base->getQualifier().builtIn != EbvSampleMask) requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader output array"); else if (base->getBasicType() == EbtSampler && version >= 130) { const char* explanation = "variable indexing sampler array"; @@ -661,7 +666,6 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn } result->setType(newType); -#ifndef GLSLANG_WEB inheritMemoryQualifiers(base->getQualifier(), result->getWritableType().getQualifier()); // Propagate nonuniform @@ -670,13 +674,10 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn if (anyIndexLimits) handleIndexLimits(loc, base, index); -#endif return result; } -#ifndef GLSLANG_WEB - // for ES 2.0 (version 100) limitations for almost all index operations except vertex-shader uniforms void TParseContext::handleIndexLimits(const TSourceLoc& /*loc*/, TIntermTyped* base, TIntermTyped* index) { @@ -716,8 +717,8 @@ bool TParseContext::isIoResizeArray(const TType& type) const (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && ! type.getQualifier().patch) || (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn && - type.getQualifier().pervertexNV) || - (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && + (type.getQualifier().pervertexNV || type.getQualifier().pervertexEXT)) || + (language == EShLangMesh && type.getQualifier().storage == EvqVaryingOut && !type.getQualifier().perTaskNV)); } @@ -794,7 +795,7 @@ void TParseContext::checkIoArraysConsistency(const TSourceLoc &loc, bool tailOnl // As I/O array sizes don't change, fetch requiredSize only once, // except for mesh shaders which could have different I/O array sizes based on type qualifiers. - if (firstIteration || (language == EShLangMeshNV)) { + if (firstIteration || (language == EShLangMesh)) { requiredSize = getIoArrayImplicitSize(type.getQualifier(), &featureString); if (requiredSize == 0) break; @@ -823,7 +824,7 @@ int TParseContext::getIoArrayImplicitSize(const TQualifier &qualifier, TString * // Number of vertices for Fragment shader is always three. expectedSize = 3; str = "vertices"; - } else if (language == EShLangMeshNV) { + } else if (language == EShLangMesh) { unsigned int maxPrimitives = intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0; if (qualifier.builtIn == EbvPrimitiveIndicesNV) { @@ -831,6 +832,11 @@ int TParseContext::getIoArrayImplicitSize(const TQualifier &qualifier, TString * str = "max_primitives*"; str += TQualifier::getGeometryString(intermediate.getOutputPrimitive()); } + else if (qualifier.builtIn == EbvPrimitiveTriangleIndicesEXT || qualifier.builtIn == EbvPrimitiveLineIndicesEXT || + qualifier.builtIn == EbvPrimitivePointIndicesEXT) { + expectedSize = maxPrimitives; + str = "max_primitives"; + } else if (qualifier.isPerPrimitive()) { expectedSize = maxPrimitives; str = "max_primitives"; @@ -856,17 +862,15 @@ void TParseContext::checkIoArrayConsistency(const TSourceLoc& loc, int requiredS error(loc, "inconsistent output number of vertices for array size of", feature, name.c_str()); else if (language == EShLangFragment) { if (type.getOuterArraySize() > requiredSize) - error(loc, " cannot be greater than 3 for pervertexNV", feature, name.c_str()); + error(loc, " cannot be greater than 3 for pervertexEXT", feature, name.c_str()); } - else if (language == EShLangMeshNV) + else if (language == EShLangMesh) error(loc, "inconsistent output array size of", feature, name.c_str()); else assert(0); } } -#endif // GLSLANG_WEB - // Handle seeing a binary node with a math operation. // Returns nullptr if not semantically allowed. TIntermTyped* TParseContext::handleBinaryMath(const TSourceLoc& loc, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right) @@ -902,8 +906,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 +932,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 +961,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; } @@ -993,22 +1001,44 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm break; } } + if (fieldFound) { - if (base->getType().getQualifier().isFrontEndConstant()) - result = intermediate.foldDereference(base, member, loc); - else { - blockMemberExtensionCheck(loc, base, member, field); - TIntermTyped* index = intermediate.addConstantUnion(member, loc); - result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc); - result->setType(*(*fields)[member].type); - if ((*fields)[member].type->getQualifier().isIo()) - intermediate.addIoAccessed(field); + if (spvVersion.vulkan != 0 && spvVersion.vulkanRelaxed) + result = vkRelaxedRemapDotDereference(loc, *base, *(*fields)[member].type, field); + + if (result == base) + { + if (base->getType().getQualifier().isFrontEndConstant()) + result = intermediate.foldDereference(base, member, loc); + else { + blockMemberExtensionCheck(loc, base, member, field); + TIntermTyped* index = intermediate.addConstantUnion(member, loc); + result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc); + result->setType(*(*fields)[member].type); + if ((*fields)[member].type->getQualifier().isIo()) + 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) { + auto binaryNode = baseSymbol->getAsBinaryNode(); + if (binaryNode == nullptr) break; + baseSymbol = binaryNode->getLeft(); + } + if (baseSymbol->getAsSymbolNode() != nullptr) { + 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, "no such field in structure", field.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()) @@ -1127,7 +1157,6 @@ TFunction* TParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFunct TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn); if (symbol && symbol->getAsFunction() && builtIn) requireProfile(loc, ~EEsProfile, "redefinition of built-in function"); -#ifndef GLSLANG_WEB // Check the validity of using spirv_literal qualifier for (int i = 0; i < function.getParamCount(); ++i) { if (function[i].type->getQualifier().isSpirvLiteral() && function.getBuiltInOp() != EOpSpirvInst) @@ -1139,19 +1168,16 @@ TFunction* TParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFunct // respect this redeclared one. if (symbol && builtIn && function.getBuiltInOp() == EOpSpirvInst) symbol = nullptr; -#endif - const TFunction* prevDec = symbol ? symbol->getAsFunction() : 0; + const TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr; if (prevDec) { if (prevDec->isPrototyped() && prototype) profileRequires(loc, EEsProfile, 300, nullptr, "multiple prototypes for same function"); if (prevDec->getType() != function.getType()) error(loc, "overloaded functions must have the same return type", function.getName().c_str(), ""); -#ifndef GLSLANG_WEB if (prevDec->getSpirvInstruction() != function.getSpirvInstruction()) { error(loc, "overloaded functions must have the same qualifiers", function.getName().c_str(), "spirv_instruction"); } -#endif for (int i = 0; i < prevDec->getParamCount(); ++i) { if ((*prevDec)[i].type->getQualifier().storage != function[i].type->getQualifier().storage) error(loc, "overloaded functions must have the same parameter storage qualifiers for argument", function[i].type->getStorageQualifierString(), "%d", i+1); @@ -1233,6 +1259,8 @@ TIntermAggregate* TParseContext::handleFunctionDefinition(const TSourceLoc& loc, error(loc, "function cannot take any parameter(s)", function.getName().c_str(), ""); if (function.getType().getBasicType() != EbtVoid) error(loc, "", function.getType().getBasicTypeString().c_str(), "entry point cannot return a value"); + if (function.getLinkType() != ELinkNone) + error(loc, "main function cannot be exported", "", ""); } // @@ -1269,6 +1297,7 @@ TIntermAggregate* TParseContext::handleFunctionDefinition(const TSourceLoc& loc, } else paramNodes = intermediate.growAggregate(paramNodes, intermediate.addSymbol(*param.type, loc), loc); } + paramNodes->setLinkType(function.getLinkType()); intermediate.setAggregateOperator(paramNodes, EOpParameters, TType(EbtVoid), loc); loopNestingLevel = 0; statementNestingLevel = 0; @@ -1314,7 +1343,7 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction // result = addConstructor(loc, arguments, type); if (result == nullptr) - error(loc, "cannot construct with these arguments", type.getCompleteString().c_str(), ""); + error(loc, "cannot construct with these arguments", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str(), ""); } } else { // @@ -1330,6 +1359,10 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction // - a user function. // Error check for a function requiring specific extensions present. + if (builtIn && + (fnCandidate->getBuiltInOp() == EOpSubgroupQuadAll || fnCandidate->getBuiltInOp() == EOpSubgroupQuadAny)) + requireExtensions(loc, 1, &E_GL_EXT_shader_quad_control, fnCandidate->getName().c_str()); + if (builtIn && fnCandidate->getNumExtensions()) requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str()); @@ -1339,7 +1372,10 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction requireInt16Arithmetic(loc, "built-in function", "(u)int16 types can only be in uniform block or buffer storage"); if (builtIn && fnCandidate->getType().contains8BitInt()) requireInt8Arithmetic(loc, "built-in function", "(u)int8 types can only be in uniform block or buffer storage"); - + if (builtIn && (fnCandidate->getBuiltInOp() == EOpTextureFetch || fnCandidate->getBuiltInOp() == EOpTextureQuerySize)) { + if ((*fnCandidate)[0].type->getSampler().isMultiSample() && version <= 140) + requireExtensions(loc, 1, &E_GL_ARB_texture_multisample, fnCandidate->getName().c_str()); + } if (arguments != nullptr) { // Make sure qualifications work for these arguments. TIntermAggregate* aggregate = arguments->getAsAggregate(); @@ -1353,7 +1389,6 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction if (lValueErrorCheck(arguments->getLoc(), "assign", arg->getAsTyped())) error(arguments->getLoc(), "Non-L-value cannot be passed for 'out' or 'inout' parameters.", "out", ""); } -#ifndef GLSLANG_WEB if (formalQualifier.isSpirvLiteral()) { if (!arg->getAsTyped()->getQualifier().isFrontEndConstant()) { error(arguments->getLoc(), @@ -1361,12 +1396,11 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction "spirv_literal", ""); } } -#endif const TType& argType = arg->getAsTyped()->getType(); const TQualifier& argQualifier = argType.getQualifier(); - if (argQualifier.isMemory() && (argType.containsOpaque() || argType.isReference())) { + bool containsBindlessSampler = intermediate.getBindlessMode() && argType.containsSampler(); + if (argQualifier.isMemory() && !containsBindlessSampler && (argType.containsOpaque() || argType.isReference())) { const char* message = "argument cannot drop memory qualifier when passed to formal parameter"; -#ifndef GLSLANG_WEB if (argQualifier.volatil && ! formalQualifier.volatil) error(arguments->getLoc(), message, "volatile", ""); if (argQualifier.coherent && ! (formalQualifier.devicecoherent || formalQualifier.coherent)) @@ -1386,7 +1420,6 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction // Don't check 'restrict', it is different than the rest: // "...but only restrict can be taken away from a calling argument, by a formal parameter that // lacks the restrict qualifier..." -#endif } if (!builtIn && argQualifier.getFormat() != formalQualifier.getFormat()) { // we have mismatched formats, which should only be allowed if writeonly @@ -1416,11 +1449,9 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction if (builtIn && fnCandidate->getBuiltInOp() != EOpNull) { // A function call mapped to a built-in operation. result = handleBuiltInFunctionCall(loc, arguments, *fnCandidate); -#ifndef GLSLANG_WEB } else if (fnCandidate->getBuiltInOp() == EOpSpirvInst) { // When SPIR-V instruction qualifier is specified, the function call is still mapped to a built-in operation. result = handleBuiltInFunctionCall(loc, arguments, *fnCandidate); -#endif } else { // This is a function call not mapped to built-in operator. // It could still be a built-in function, but only if PureOperatorBuiltins == false. @@ -1440,11 +1471,9 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction intermediate.addToCallGraph(infoSink, currentCaller, fnCandidate->getMangledName()); } -#ifndef GLSLANG_WEB if (builtIn) nonOpBuiltInCheck(loc, *fnCandidate, *call); else -#endif userFunctionCallCheck(loc, *call); } @@ -1462,7 +1491,8 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction if (result->getAsTyped()->getType().isCoopMat() && !result->getAsTyped()->getType().isParameterized()) { - assert(fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAdd); + assert(fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAdd || + fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAddNV); result->setType(result->getAsAggregate()->getSequence()[2]->getAsTyped()->getType()); } @@ -1494,11 +1524,10 @@ TIntermTyped* TParseContext::handleBuiltInFunctionCall(TSourceLoc loc, TIntermNo else error(arguments->getLoc(), " wrong operand type", "Internal Error", "built in unary operator function. Type: %s", - static_cast(arguments)->getCompleteString().c_str()); + static_cast(arguments)->getCompleteString(intermediate.getEnhancedMsgs()).c_str()); } else if (result->getAsOperator()) builtInOpCheck(loc, function, *result->getAsOperator()); -#ifndef GLSLANG_WEB // Special handling for function call with SPIR-V instruction qualifier specified if (function.getBuiltInOp() == EOpSpirvInst) { if (auto agg = result->getAsAggregate()) { @@ -1525,7 +1554,6 @@ TIntermTyped* TParseContext::handleBuiltInFunctionCall(TSourceLoc loc, TIntermNo } else assert(0); } -#endif return result; } @@ -1628,9 +1656,7 @@ void TParseContext::computeBuiltinPrecisions(TIntermTyped& node, const TFunction TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value) { -#ifndef GLSLANG_WEB storage16BitAssignmentCheck(loc, value->getType(), "return"); -#endif functionReturnsValue = true; TIntermBranch* branch = nullptr; @@ -1650,9 +1676,15 @@ TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermType error(loc, "type does not match, or is not convertible to, the function's return type", "return", ""); branch = intermediate.addBranch(EOpReturn, value, loc); } - } else + } else { + if (value->getType().isTexture() || value->getType().isImage()) { + if (spvVersion.spv != 0) + error(loc, "sampler or image cannot be used as return type when generating SPIR-V", "return", ""); + else if (!extensionTurnedOn(E_GL_ARB_bindless_texture)) + error(loc, "sampler or image can be used as return type only when the extension GL_ARB_bindless_texture enabled", "return", ""); + } branch = intermediate.addBranch(EOpReturn, value, loc); - + } branch->updatePrecision(currentFunctionType->getQualifier().precision); return branch; } @@ -1660,7 +1692,6 @@ TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermType // See if the operation is being done in an illegal location. void TParseContext::checkLocation(const TSourceLoc& loc, TOperator op) { -#ifndef GLSLANG_WEB switch (op) { case EOpBarrier: if (language == EShLangTessControl) { @@ -1713,7 +1744,6 @@ void TParseContext::checkLocation(const TSourceLoc& loc, TOperator op) default: break; } -#endif } // Finish processing object.length(). This started earlier in handleDotDereference(), where @@ -1731,7 +1761,6 @@ TIntermTyped* TParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction const TType& type = intermNode->getAsTyped()->getType(); if (type.isArray()) { if (type.isUnsizedArray()) { -#ifndef GLSLANG_WEB if (intermNode->getAsSymbolNode() && isIoResizeArray(type)) { // We could be between a layout declaration that gives a built-in io array implicit size and // a user redeclaration of that array, meaning we have to substitute its implicit size here @@ -1742,17 +1771,19 @@ TIntermTyped* TParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction name == "gl_MeshPrimitivesNV") { length = getIoArrayImplicitSize(type.getQualifier()); } + } else if (const auto typed = intermNode->getAsTyped()) { + if (typed->getQualifier().builtIn == EbvSampleMask) { + requireProfile(loc, EEsProfile, "the array size of gl_SampleMask and gl_SampleMaskIn is ceil(gl_MaxSamples/32)"); + length = (resources.maxSamples + 31) / 32; + } } -#endif if (length == 0) { -#ifndef GLSLANG_WEB if (intermNode->getAsSymbolNode() && isIoResizeArray(type)) error(loc, "", function->getName().c_str(), "array must first be sized by a redeclaration or layout qualifier"); else if (isRuntimeLength(*intermNode->getAsTyped())) { // Create a unary op and let the back end handle it return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt)); } else -#endif error(loc, "", function->getName().c_str(), "array must be declared with a size before using this method"); } } else if (type.getOuterArrayNode()) { @@ -1785,7 +1816,6 @@ TIntermTyped* TParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction // void TParseContext::addInputArgumentConversions(const TFunction& function, TIntermNode*& arguments) const { -#ifndef GLSLANG_WEB TIntermAggregate* aggregate = arguments->getAsAggregate(); // Process each argument's conversion @@ -1813,7 +1843,6 @@ void TParseContext::addInputArgumentConversions(const TFunction& function, TInte } } } -#endif } // @@ -1825,9 +1854,6 @@ void TParseContext::addInputArgumentConversions(const TFunction& function, TInte // TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& function, TIntermAggregate& intermNode) const { -#ifdef GLSLANG_WEB - return &intermNode; -#else TIntermSequence& arguments = intermNode.getSequence(); // Will there be any output conversions? @@ -1895,7 +1921,6 @@ TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& funct conversionTree = intermediate.setAggregateOperator(conversionTree, EOpComma, intermNode.getType(), intermNode.getLoc()); return conversionTree; -#endif } TIntermTyped* TParseContext::addAssign(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right) @@ -1903,6 +1928,9 @@ TIntermTyped* TParseContext::addAssign(const TSourceLoc& loc, TOperator op, TInt if ((op == EOpAddAssign || op == EOpSubAssign) && left->isReference()) requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "+= and -= on a buffer reference"); + if (op == EOpAssign && left->getBasicType() == EbtSampler && right->getBasicType() == EbtSampler) + requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "sampler assignment for bindless texture"); + return intermediate.addAssign(op, left, right, loc); } @@ -1990,18 +2018,18 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& break; } - if ((semantics & gl_SemanticsAcquire) && + if ((semantics & gl_SemanticsAcquire) && (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore)) { error(loc, "gl_SemanticsAcquire must not be used with (image) atomic store", fnCandidate.getName().c_str(), ""); } - if ((semantics & gl_SemanticsRelease) && + if ((semantics & gl_SemanticsRelease) && (callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpImageAtomicLoad)) { error(loc, "gl_SemanticsRelease must not be used with (image) atomic load", fnCandidate.getName().c_str(), ""); } - if ((semantics & gl_SemanticsAcquireRelease) && - (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore || + if ((semantics & gl_SemanticsAcquireRelease) && + (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore || callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpImageAtomicLoad)) { error(loc, "gl_SemanticsAcquireRelease must not be used with (image) atomic load/store", fnCandidate.getName().c_str(), ""); @@ -2102,7 +2130,6 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan TString featureString; const char* feature = nullptr; switch (callNode.getOp()) { -#ifndef GLSLANG_WEB case EOpTextureGather: case EOpTextureGatherOffset: case EOpTextureGatherOffsets: @@ -2175,6 +2202,37 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } break; } + + case EOpTexture: + case EOpTextureLod: + { + if ((fnCandidate.getParamCount() > 2) && ((*argp)[1]->getAsTyped()->getType().getBasicType() == EbtFloat) && + ((*argp)[1]->getAsTyped()->getType().getVectorSize() == 4) && fnCandidate[0].type->getSampler().shadow) { + featureString = fnCandidate.getName(); + if (callNode.getOp() == EOpTexture) + featureString += "(..., float bias)"; + else + featureString += "(..., float lod)"; + feature = featureString.c_str(); + + if ((fnCandidate[0].type->getSampler().dim == Esd2D && fnCandidate[0].type->getSampler().arrayed) || //2D Array Shadow + (fnCandidate[0].type->getSampler().dim == EsdCube && fnCandidate[0].type->getSampler().arrayed && fnCandidate.getParamCount() > 3) || // Cube Array Shadow + (fnCandidate[0].type->getSampler().dim == EsdCube && callNode.getOp() == EOpTextureLod)) { // Cube Shadow + requireExtensions(loc, 1, &E_GL_EXT_texture_shadow_lod, feature); + if (isEsProfile()) { + if (version < 320 && + !extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array)) + error(loc, "GL_EXT_texture_shadow_lod not supported for this ES version", feature, ""); + else + profileRequires(loc, EEsProfile, 320, nullptr, feature); + } else { // Desktop + profileRequires(loc, ~EEsProfile, 130, nullptr, feature); + } + } + } + break; + } + case EOpSparseTextureGather: case EOpSparseTextureGatherOffset: case EOpSparseTextureGatherOffsets: @@ -2243,7 +2301,6 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan break; } -#endif case EOpTextureOffset: case EOpTextureFetchOffset: @@ -2271,12 +2328,10 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan if (arg > 0) { -#ifndef GLSLANG_WEB bool f16ShadowCompare = (*argp)[1]->getAsTyped()->getBasicType() == EbtFloat16 && arg0->getType().getSampler().shadow; if (f16ShadowCompare) ++arg; -#endif if (! (*argp)[arg]->getAsTyped()->getQualifier().isConstant()) error(loc, "argument must be compile-time constant", "texel offset", ""); else if ((*argp)[arg]->getAsConstantUnion()) { @@ -2292,18 +2347,41 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan if (callNode.getOp() == EOpTextureOffset) { TSampler s = arg0->getType().getSampler(); if (s.is2D() && s.isArrayed() && s.isShadow()) { - if (isEsProfile()) + if ( + ((*argp)[1]->getAsTyped()->getType().getBasicType() == EbtFloat) && + ((*argp)[1]->getAsTyped()->getType().getVectorSize() == 4) && + (fnCandidate.getParamCount() == 4)) { + featureString = fnCandidate.getName() + " for sampler2DArrayShadow"; + feature = featureString.c_str(); + requireExtensions(loc, 1, &E_GL_EXT_texture_shadow_lod, feature); + profileRequires(loc, EEsProfile, 300, nullptr, feature); + profileRequires(loc, ~EEsProfile, 130, nullptr, feature); + } + else if (isEsProfile()) error(loc, "TextureOffset does not support sampler2DArrayShadow : ", "sampler", "ES Profile"); else if (version <= 420) error(loc, "TextureOffset does not support sampler2DArrayShadow : ", "sampler", "version <= 420"); } } + + if (callNode.getOp() == EOpTextureLodOffset) { + TSampler s = arg0->getType().getSampler(); + if (s.is2D() && s.isArrayed() && s.isShadow() && + ((*argp)[1]->getAsTyped()->getType().getBasicType() == EbtFloat) && + ((*argp)[1]->getAsTyped()->getType().getVectorSize() == 4) && + (fnCandidate.getParamCount() == 4)) { + featureString = fnCandidate.getName() + " for sampler2DArrayShadow"; + feature = featureString.c_str(); + profileRequires(loc, EEsProfile, 300, nullptr, feature); + profileRequires(loc, ~EEsProfile, 130, nullptr, feature); + requireExtensions(loc, 1, &E_GL_EXT_texture_shadow_lod, feature); + } + } } break; } -#ifndef GLSLANG_WEB case EOpTraceNV: if (!(*argp)[10]->getAsConstantUnion()) error(loc, "argument must be compile-time constant", "payload number", "a"); @@ -2317,7 +2395,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan error(loc, "argument must be compile-time constant", "payload number", "a"); else { unsigned int location = (*argp)[10]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); - if (intermediate.checkLocationRT(0, location) < 0) + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(0, location) < 0) error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location); } break; @@ -2330,11 +2408,84 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan error(loc, "argument must be compile-time constant", "callable data number", ""); else { unsigned int location = (*argp)[1]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); - if (intermediate.checkLocationRT(1, location) < 0) + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(1, location) < 0) error(loc, "with layout(location =", "no callableDataEXT/callableDataInEXT declared", "%d)", location); } break; + case EOpHitObjectTraceRayNV: + if (!(*argp)[11]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "payload number", ""); + else { + unsigned int location = (*argp)[11]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(0, location) < 0) + error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location); + } + break; + case EOpHitObjectTraceRayMotionNV: + if (!(*argp)[12]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "payload number", ""); + else { + unsigned int location = (*argp)[12]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(0, location) < 0) + error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location); + } + break; + case EOpHitObjectExecuteShaderNV: + if (!(*argp)[1]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "payload number", ""); + else { + unsigned int location = (*argp)[1]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(0, location) < 0) + error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location); + } + break; + case EOpHitObjectRecordHitNV: + if (!(*argp)[12]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "hitobjectattribute number", ""); + else { + unsigned int location = (*argp)[12]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(2, location) < 0) + error(loc, "with layout(location =", "no hitObjectAttributeNV declared", "%d)", location); + } + break; + case EOpHitObjectRecordHitMotionNV: + if (!(*argp)[13]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "hitobjectattribute number", ""); + else { + unsigned int location = (*argp)[13]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(2, location) < 0) + error(loc, "with layout(location =", "no hitObjectAttributeNV declared", "%d)", location); + } + break; + case EOpHitObjectRecordHitWithIndexNV: + if (!(*argp)[11]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "hitobjectattribute number", ""); + else { + unsigned int location = (*argp)[11]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(2, location) < 0) + error(loc, "with layout(location =", "no hitObjectAttributeNV declared", "%d)", location); + } + break; + case EOpHitObjectRecordHitWithIndexMotionNV: + if (!(*argp)[12]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "hitobjectattribute number", ""); + else { + unsigned int location = (*argp)[12]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(2, location) < 0) + error(loc, "with layout(location =", "no hitObjectAttributeNV declared", "%d)", location); + } + break; + case EOpHitObjectGetAttributesNV: + if (!(*argp)[1]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "hitobjectattribute number", ""); + else { + unsigned int location = (*argp)[1]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(2, location) < 0) + error(loc, "with layout(location =", "no hitObjectAttributeNV declared", "%d)", location); + } + break; + case EOpRayQueryGetIntersectionType: case EOpRayQueryGetIntersectionT: case EOpRayQueryGetIntersectionInstanceCustomIndex: @@ -2348,6 +2499,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan case EOpRayQueryGetIntersectionObjectRayOrigin: case EOpRayQueryGetIntersectionObjectToWorld: case EOpRayQueryGetIntersectionWorldToObject: + case EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: if (!(*argp)[1]->getAsConstantUnion()) error(loc, "argument must be compile-time constant", "committed", ""); break; @@ -2380,15 +2532,26 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan error(loc, "only supported on image with format r64i", fnCandidate.getName().c_str(), ""); else if (callNode.getType().getBasicType() == EbtUint64 && imageType.getQualifier().getFormat() != ElfR64ui) error(loc, "only supported on image with format r64ui", fnCandidate.getName().c_str(), ""); + } else if(callNode.getType().getBasicType() == EbtFloat16 && + ((callNode.getType().getVectorSize() == 2 && arg0->getType().getQualifier().getFormat() == ElfRg16f) || + (callNode.getType().getVectorSize() == 4 && arg0->getType().getQualifier().getFormat() == ElfRgba16f))) { + if (StartsWith(fnCandidate.getName(), "imageAtomicAdd") || + StartsWith(fnCandidate.getName(), "imageAtomicExchange") || + StartsWith(fnCandidate.getName(), "imageAtomicMin") || + StartsWith(fnCandidate.getName(), "imageAtomicMax")) { + requireExtensions(loc, 1, &E_GL_NV_shader_atomic_fp16_vector, fnCandidate.getName().c_str()); + } else { + error(loc, "f16vec2/4 operation not supported on: ", fnCandidate.getName().c_str(), ""); + } } else if (imageType.getSampler().type == EbtFloat) { - if (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") == 0) { + if (StartsWith(fnCandidate.getName(), "imageAtomicExchange")) { // imageAtomicExchange doesn't require an extension - } else if ((fnCandidate.getName().compare(0, 14, "imageAtomicAdd") == 0) || - (fnCandidate.getName().compare(0, 15, "imageAtomicLoad") == 0) || - (fnCandidate.getName().compare(0, 16, "imageAtomicStore") == 0)) { + } else if (StartsWith(fnCandidate.getName(), "imageAtomicAdd") || + StartsWith(fnCandidate.getName(), "imageAtomicLoad") || + StartsWith(fnCandidate.getName(), "imageAtomicStore")) { requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str()); - } else if ((fnCandidate.getName().compare(0, 14, "imageAtomicMin") == 0) || - (fnCandidate.getName().compare(0, 14, "imageAtomicMax") == 0)) { + } else if (StartsWith(fnCandidate.getName(), "imageAtomicMin") || + StartsWith(fnCandidate.getName(), "imageAtomicMax")) { requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str()); } else { error(loc, "only supported on integer images", fnCandidate.getName().c_str(), ""); @@ -2438,6 +2601,11 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan const char* const extensions[2] = { E_GL_NV_shader_atomic_int64, E_GL_EXT_shader_atomic_int64 }; requireExtensions(loc, 2, extensions, fnCandidate.getName().c_str()); + } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange || + callNode.getOp() == EOpAtomicMin || callNode.getOp() == EOpAtomicMax) && + arg0->getType().getBasicType() == EbtFloat16 && + (arg0->getType().getVectorSize() == 2 || arg0->getType().getVectorSize() == 4 )) { + requireExtensions(loc, 1, &E_GL_NV_shader_atomic_fp16_vector, fnCandidate.getName().c_str()); } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange) && (arg0->getType().getBasicType() == EbtFloat || arg0->getType().getBasicType() == EbtDouble)) { @@ -2449,12 +2617,19 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str()); } - const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true , true); - const TType* refType = (base->getType().isReference()) ? base->getType().getReferentType() : nullptr; - const TQualifier& qualifier = (refType != nullptr) ? refType->getQualifier() : base->getType().getQualifier(); - if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer) - error(loc,"Atomic memory function can only be used for shader storage block member or shared variable.", - fnCandidate.getName().c_str(), ""); + const TIntermTyped* base = TIntermediate::traverseLValueBase(arg0, true, true); + const char* errMsg = "Only l-values corresponding to shader block storage or shared variables can be used with " + "atomic memory functions."; + if (base) { + const TType* refType = (base->getType().isReference()) ? base->getType().getReferentType() : nullptr; + const TQualifier& qualifier = + (refType != nullptr) ? refType->getQualifier() : base->getType().getQualifier(); + if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer && + qualifier.storage != EvqtaskPayloadSharedEXT) + error(loc, errMsg, fnCandidate.getName().c_str(), ""); + } else { + error(loc, errMsg, fnCandidate.getName().c_str(), ""); + } break; } @@ -2462,20 +2637,57 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan case EOpInterpolateAtCentroid: case EOpInterpolateAtSample: case EOpInterpolateAtOffset: - case EOpInterpolateAtVertex: - // Make sure the first argument is an interpolant, or an array element of an interpolant + case EOpInterpolateAtVertex: { if (arg0->getType().getQualifier().storage != EvqVaryingIn) { - // It might still be an array element. + // Traverse down the left branch of arg0 to ensure this argument is a valid interpolant. // - // We could check more, but the semantics of the first argument are already met; the - // only way to turn an array into a float/vec* is array dereference and swizzle. + // For desktop GL >4.3 we effectively only need to ensure that arg0 represents an l-value from an + // input declaration. // - // ES and desktop 4.3 and earlier: swizzles may not be used - // desktop 4.4 and later: swizzles may be used - bool swizzleOkay = (!isEsProfile()) && (version >= 440); - const TIntermTyped* base = TIntermediate::findLValueBase(arg0, swizzleOkay); - if (base == nullptr || base->getType().getQualifier().storage != EvqVaryingIn) - error(loc, "first argument must be an interpolant, or interpolant-array element", fnCandidate.getName().c_str(), ""); + // For desktop GL <= 4.3 and ES, we must also ensure that swizzling is not used + // + // For ES, we must also ensure that a field selection operator (i.e., '.') is not used on a named + // struct. + + const bool esProfile = isEsProfile(); + const bool swizzleOkay = !esProfile && (version >= 440); + + std::string interpolantErrorMsg = "first argument must be an interpolant, or interpolant-array element"; + bool isValid = true; // Assume that the interpolant is valid until we find a condition making it invalid + bool isIn = false; // Checks whether or not the interpolant is a shader input + bool structAccessOp = false; // Whether or not the previous node in the chain is a struct accessor + TIntermediate::traverseLValueBase( + arg0, swizzleOkay, false, + [&isValid, &isIn, &interpolantErrorMsg, esProfile, &structAccessOp](const TIntermNode& n) -> bool { + auto* type = n.getAsTyped(); + if (type) { + if (type->getType().getQualifier().storage == EvqVaryingIn) { + isIn = true; + } + // If a field accessor was used, it can only be used to access a field with an input block, not a struct. + if (structAccessOp && (type->getType().getBasicType() != EbtBlock)) { + interpolantErrorMsg += + ". Using the field of a named struct as an interpolant argument is not " + "allowed (ES-only)."; + isValid = false; + } + } + + // ES has different requirements for interpolants than GL + if (esProfile) { + // Swizzling will be taken care of by the 'swizzleOkay' argument passsed to traverseLValueBase, + // so we only ned to check whether or not a field accessor has been used with a named struct. + auto* binary = n.getAsBinaryNode(); + if (binary && (binary->getOp() == EOpIndexDirectStruct)) { + structAccessOp = true; + } + } + // Don't continue traversing if we know we have an invalid interpolant at this point. + return isValid; + }); + if (!isIn || !isValid) { + error(loc, interpolantErrorMsg.c_str(), fnCandidate.getName().c_str(), ""); + } } if (callNode.getOp() == EOpInterpolateAtVertex) { @@ -2491,12 +2703,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } } } - break; + } break; 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"); + requireExtensions(loc, 1, &E_GL_ARB_gpu_shader5, "if the version is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5"); intermediate.setMultiStream(); break; @@ -2550,7 +2762,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } if (profile != EEsProfile && version < 450) { - if ((*argp)[0]->getAsTyped()->getBasicType() != EbtFloat && + if ((*argp)[0]->getAsTyped()->getBasicType() != EbtFloat && (*argp)[0]->getAsTyped()->getBasicType() != EbtDouble && (*argp)[1]->getAsTyped()->getBasicType() != EbtFloat && (*argp)[1]->getAsTyped()->getBasicType() != EbtDouble && @@ -2560,7 +2772,6 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } break; -#endif default: break; @@ -2599,32 +2810,30 @@ 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; } } } } -#ifndef GLSLANG_WEB - -extern bool PureOperatorBuiltins; // Deprecated! Use PureOperatorBuiltins == true instead, in which case this // functionality is handled in builtInOpCheck() instead of here. @@ -2750,8 +2959,6 @@ void TParseContext::nonOpBuiltInCheck(const TSourceLoc& loc, const TFunction& fn } } -#endif - // // Do any extra checking for a user function call. // @@ -2785,10 +2992,21 @@ TFunction* TParseContext::handleConstructorCall(const TSourceLoc& loc, const TPu profileRequires(loc, EEsProfile, 300, nullptr, "arrayed constructor"); } + // Reuse EOpConstructTextureSampler for bindless image constructor + // uvec2 imgHandle; + // imageLoad(image1D(imgHandle), 0); + if (type.isImage() && extensionTurnedOn(E_GL_ARB_bindless_texture)) + { + intermediate.setBindlessImageMode(currentCaller, AstRefTypeFunc); + } + 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); @@ -2899,7 +3117,6 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt bool errorReturn = false; switch(binaryNode->getOp()) { -#ifndef GLSLANG_WEB case EOpIndexDirect: case EOpIndexIndirect: // ... tessellation control shader ... @@ -2916,7 +3133,6 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt } } break; // left node is checked by base class -#endif case EOpVectorSwizzle: errorReturn = lValueErrorCheck(loc, op, binaryNode->getLeft()); if (!errorReturn) { @@ -2974,7 +3190,17 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt if (isEsProfile() && intermediate.getEarlyFragmentTests()) message = "can't modify gl_FragDepth if using early_fragment_tests"; break; + case EvqFragStencil: + intermediate.setStencilReplacing(); + // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader." + if (isEsProfile() && intermediate.getEarlyFragmentTests()) + message = "can't modify EvqFragStencil if using early_fragment_tests"; + break; + case EvqtaskPayloadSharedEXT: + if (language == EShLangMesh) + message = "can't modify variable with storage qualifier taskPayloadSharedEXT in mesh shaders"; + break; default: break; } @@ -3013,7 +3239,7 @@ void TParseContext::rValueErrorCheck(const TSourceLoc& loc, const char* op, TInt if (symNode && symNode->getQualifier().isExplicitInterpolation()) error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str()); - // local_size_{xyz} must be assigned or specialized before gl_WorkGroupSize can be assigned. + // local_size_{xyz} must be assigned or specialized before gl_WorkGroupSize can be assigned. if(node->getQualifier().builtIn == EbvWorkGroupSize && !(intermediate.isLocalSizeSet() || intermediate.isLocalSizeSpecialized())) error(loc, "can't read from gl_WorkGroupSize before a fixed workgroup size has been declared", op, ""); @@ -3101,7 +3327,7 @@ void TParseContext::reservedPpErrorCheck(const TSourceLoc& loc, const char* iden ppWarn(loc, "\"defined\" is (un)defined:", op, identifier); else ppError(loc, "\"defined\" can't be (un)defined:", op, identifier); - else if (strstr(identifier, "__") != 0 && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) { + else if (strstr(identifier, "__") != nullptr && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) { // The extension GL_EXT_spirv_intrinsics allows us to declare macros prefixed with "__". if (isEsProfile() && version >= 300 && (strcmp(identifier, "__LINE__") == 0 || @@ -3124,10 +3350,6 @@ void TParseContext::reservedPpErrorCheck(const TSourceLoc& loc, const char* iden // bool TParseContext::lineContinuationCheck(const TSourceLoc& loc, bool endOfComment) { -#ifdef GLSLANG_WEB - return true; -#endif - const char* message = "line continuation"; bool lineContinuationAllowed = (isEsProfile() && version >= 300) || @@ -3184,7 +3406,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T // it, in which case the type comes from the argument instead of from the // constructor function. switch (op) { -#ifndef GLSLANG_WEB case EOpConstructNonuniform: if (node != nullptr && node->getAsTyped() != nullptr) { type.shallowCopy(node->getAsTyped()->getType()); @@ -3192,12 +3413,17 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T type.getQualifier().nonUniform = true; } break; -#endif default: type.shallowCopy(function.getType()); 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) { @@ -3212,7 +3438,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T case EOpConstructMat4x2: case EOpConstructMat4x3: case EOpConstructMat4x4: -#ifndef GLSLANG_WEB case EOpConstructDMat2x2: case EOpConstructDMat2x3: case EOpConstructDMat2x4: @@ -3231,7 +3456,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T case EOpConstructF16Mat4x2: case EOpConstructF16Mat4x3: case EOpConstructF16Mat4x4: -#endif constructingMatrix = true; break; default: @@ -3255,7 +3479,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T if (function[arg].type->isArray()) { if (function[arg].type->isUnsizedArray()) { // Can't construct from an unsized array. - error(loc, "array argument must be sized", "constructor", ""); + error(loc, "array argument must be sized", constructorString.c_str(), ""); return true; } arrayArg = true; @@ -3285,29 +3509,28 @@ 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"); } } } if (op == EOpConstructNonuniform) constType = false; -#ifndef GLSLANG_WEB switch (op) { case EOpConstructFloat16: case EOpConstructF16Vec2: case EOpConstructF16Vec3: case EOpConstructF16Vec4: if (type.isArray()) - requireFloat16Arithmetic(loc, "constructor", "16-bit arrays not supported"); + requireFloat16Arithmetic(loc, constructorString.c_str(), "16-bit arrays not supported"); if (type.isVector() && function.getParamCount() != 1) - requireFloat16Arithmetic(loc, "constructor", "16-bit vectors only take vector types"); + requireFloat16Arithmetic(loc, constructorString.c_str(), "16-bit vectors only take vector types"); break; case EOpConstructUint16: case EOpConstructU16Vec2: @@ -3318,9 +3541,9 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T case EOpConstructI16Vec3: case EOpConstructI16Vec4: if (type.isArray()) - requireInt16Arithmetic(loc, "constructor", "16-bit arrays not supported"); + requireInt16Arithmetic(loc, constructorString.c_str(), "16-bit arrays not supported"); if (type.isVector() && function.getParamCount() != 1) - requireInt16Arithmetic(loc, "constructor", "16-bit vectors only take vector types"); + requireInt16Arithmetic(loc, constructorString.c_str(), "16-bit vectors only take vector types"); break; case EOpConstructUint8: case EOpConstructU8Vec2: @@ -3331,14 +3554,13 @@ 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; } -#endif // inherit constness from children if (constType) { @@ -3359,7 +3581,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T case EOpConstructUVec2: case EOpConstructUVec3: case EOpConstructUVec4: -#ifndef GLSLANG_WEB case EOpConstructUint8: case EOpConstructInt16: case EOpConstructUint16: @@ -3383,7 +3604,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T case EOpConstructU64Vec2: case EOpConstructU64Vec3: case EOpConstructU64Vec4: -#endif // This was the list of valid ones, if they aren't converting from float // and aren't making an array. makeSpecConst = ! floatArgument && ! type.isArray(); @@ -3397,6 +3617,19 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T makeSpecConst = ! intArgument && !type.isArray(); break; + case EOpConstructCooperativeMatrixNV: + case EOpConstructCooperativeMatrixKHR: + case EOpConstructStruct: + { + const char *specConstantCompositeExt[] = { E_GL_EXT_spec_constant_composites }; + if (checkExtensionsRequested(loc, 1, specConstantCompositeExt, "spec constant aggregate constructor")) { + makeSpecConst = true; + } else { + makeSpecConst = false; + } + } + break; + default: // anything else wasn't white-listed in the spec as a conversion makeSpecConst = false; @@ -3415,7 +3648,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T if (type.isArray()) { if (function.getParamCount() == 0) { - error(loc, "array constructor must have at least one argument", "constructor", ""); + error(loc, "array constructor must have at least one argument", constructorString.c_str(), ""); return true; } @@ -3423,7 +3656,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T // auto adapt the constructor type to the number of arguments type.changeOuterArraySize(function.getParamCount()); } else if (type.getOuterArraySize() != function.getParamCount()) { - error(loc, "array constructor needs one argument per array element", "constructor", ""); + error(loc, "array constructor needs one argument per array element", constructorString.c_str(), ""); return true; } @@ -3436,7 +3669,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T // At least the dimensionalities have to match. if (! function[0].type->isArray() || arraySizes.getNumDims() != function[0].type->getArraySizes()->getNumDims() + 1) { - error(loc, "array constructor argument not correct type to construct array element", "constructor", ""); + error(loc, "array constructor argument not correct type to construct array element", constructorString.c_str(), ""); return true; } @@ -3453,7 +3686,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T } if (arrayArg && op != EOpConstructStruct && ! type.isArrayOfArrays()) { - error(loc, "constructing non-array constituent from array argument", "constructor", ""); + error(loc, "constructing non-array constituent from array argument", constructorString.c_str(), ""); return true; } @@ -3463,51 +3696,62 @@ 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 (type.isCoopMat() && typed->getType().isCoopMat() && + !type.sameCoopMatShapeAndUse(typed->getType())) { + error(loc, "Cooperative matrix type parameters mismatch", constructorString.c_str(), ""); + return true; + } + 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", ""); - return true; + if (op == EOpConstructUVec2 && extensionTurnedOn(E_GL_ARB_bindless_texture)) { + intermediate.setBindlessTextureMode(currentCaller, AstRefTypeFunc); + } + else { + 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; } @@ -3520,6 +3764,26 @@ bool TParseContext::constructorTextureSamplerError(const TSourceLoc& loc, const { TString constructorName = function.getType().getBasicTypeString(); // TODO: performance: should not be making copy; interface needs to change const char* token = constructorName.c_str(); + // verify the constructor for bindless texture, the input must be ivec2 or uvec2 + if (function.getParamCount() == 1) { + TType* pType = function[0].type; + TBasicType basicType = pType->getBasicType(); + bool isIntegerVec2 = ((basicType == EbtUint || basicType == EbtInt) && pType->getVectorSize() == 2); + bool bindlessMode = extensionTurnedOn(E_GL_ARB_bindless_texture); + if (isIntegerVec2 && bindlessMode) { + if (pType->getSampler().isImage()) + intermediate.setBindlessImageMode(currentCaller, AstRefTypeFunc); + else + intermediate.setBindlessTextureMode(currentCaller, AstRefTypeFunc); + return false; + } else { + if (!bindlessMode) + error(loc, "sampler-constructor requires the extension GL_ARB_bindless_texture enabled", token, ""); + else + error(loc, "sampler-constructor requires the input to be ivec2 or uvec2", token, ""); + return true; + } + } // exactly two arguments needed if (function.getParamCount() != 2) { @@ -3615,18 +3879,38 @@ void TParseContext::samplerCheck(const TSourceLoc& loc, const TType& type, const if (type.getQualifier().storage == EvqUniform) return; - if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtSampler)) - error(loc, "non-uniform struct contains a sampler or image:", type.getBasicTypeString().c_str(), identifier.c_str()); + if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtSampler)) { + // For bindless texture, sampler can be declared as an struct member + if (extensionTurnedOn(E_GL_ARB_bindless_texture)) { + if (type.getSampler().isImage()) + intermediate.setBindlessImageMode(currentCaller, AstRefTypeVar); + else + intermediate.setBindlessTextureMode(currentCaller, AstRefTypeVar); + } + else { + error(loc, "non-uniform struct contains a sampler or image:", type.getBasicTypeString().c_str(), identifier.c_str()); + } + } else if (type.getBasicType() == EbtSampler && type.getQualifier().storage != EvqUniform) { - // non-uniform sampler - // not yet: okay if it has an initializer - // if (! initializer) - error(loc, "sampler/image types can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str()); + // For bindless texture, sampler can be declared as an input/output/block member + if (extensionTurnedOn(E_GL_ARB_bindless_texture)) { + if (type.getSampler().isImage()) + intermediate.setBindlessImageMode(currentCaller, AstRefTypeVar); + else + intermediate.setBindlessTextureMode(currentCaller, AstRefTypeVar); + } + else { + // non-uniform sampler + // not yet: okay if it has an initializer + // if (! initializer) + if (type.getSampler().isAttachmentEXT() && type.getQualifier().storage != EvqTileImageEXT) + error(loc, "can only be used in tileImageEXT variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str()); + else if (type.getQualifier().storage != EvqTileImageEXT) + error(loc, "sampler/image types can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str()); + } } } -#ifndef GLSLANG_WEB - void TParseContext::atomicUintCheck(const TSourceLoc& loc, const TType& type, const TString& identifier) { if (type.getQualifier().storage == EvqUniform) @@ -3651,7 +3935,17 @@ void TParseContext::accStructCheck(const TSourceLoc& loc, const TType& type, con } -#endif // GLSLANG_WEB +void TParseContext::hitObjectNVCheck(const TSourceLoc & loc, const TType & type, const TString & identifier) +{ + if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtHitObjectNV)) { + error(loc, "struct is not allowed to contain hitObjectNV:", type.getTypeName().c_str(), identifier.c_str()); + } else if (type.getBasicType() == EbtHitObjectNV) { + TStorageQualifier qualifier = type.getQualifier().storage; + if (qualifier != EvqGlobal && qualifier != EvqTemporary) { + error(loc, "hitObjectNV can only be declared in global or function scope with no storage qualifier:", "hitObjectNV", identifier.c_str()); + } + } +} void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& type, const TString& identifier) { @@ -3687,7 +3981,7 @@ void TParseContext::memberQualifierCheck(glslang::TPublicType& publicType) // // Check/fix just a full qualifier (no variables or types yet, but qualifier is complete) at global level. // -void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier, bool isMemberCheck) +void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier, bool isMemberCheck, const TPublicType* publicType) { bool nonuniformOkay = false; @@ -3723,6 +4017,11 @@ void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& q { requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "default std430 layout for uniform"); } + + if (publicType != nullptr && publicType->isImage() && + (qualifier.layoutFormat > ElfExtSizeGuard && qualifier.layoutFormat < ElfCount)) + qualifier.layoutFormat = mapLegacyLayoutFormat(qualifier.layoutFormat, publicType->sampler.getBasicType()); + break; default: break; @@ -3731,17 +4030,27 @@ void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& q if (!nonuniformOkay && qualifier.isNonUniform()) error(loc, "for non-parameter, can only apply to 'in' or no storage qualifier", "nonuniformEXT", ""); -#ifndef GLSLANG_WEB if (qualifier.isSpirvByReference()) error(loc, "can only apply to parameter", "spirv_by_reference", ""); if (qualifier.isSpirvLiteral()) error(loc, "can only apply to parameter", "spirv_literal", ""); -#endif // Storage qualifier isn't ready for memberQualifierCheck, we should skip invariantCheck for it. if (!isMemberCheck || structNestingLevel > 0) invariantCheck(loc, qualifier); + + if (qualifier.isFullQuads()) { + if (qualifier.storage != EvqVaryingIn) + error(loc, "can only apply to input layout", "full_quads ", ""); + intermediate.setReqFullQuadsMode(); + } + + if (qualifier.isQuadDeriv()) { + if (qualifier.storage != EvqVaryingIn) + error(loc, "can only apply to input layout", "quad_derivatives", ""); + intermediate.setQuadDerivMode(); + } } // @@ -3783,10 +4092,12 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali return; } - if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble) - profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output"); + if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble) { + profileRequires(loc, EEsProfile, 300, nullptr, "non-float shader input/output"); + profileRequires(loc, ~EEsProfile, 130, nullptr, "non-float shader input/output"); + } - if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV()) { + if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV() && !qualifier.isPervertexEXT()) { if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble || (publicType.userDef && ( publicType.userDef->containsBasicType(EbtInt) @@ -3805,6 +4116,9 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali if (qualifier.isPatch() && qualifier.isInterpolation()) error(loc, "cannot use interpolation qualifiers with patch", "patch", ""); + if (qualifier.isTaskPayload() && publicType.basicType == EbtBlock) + error(loc, "taskPayloadSharedEXT variables should not be declared as interface blocks", "taskPayloadSharedEXT", ""); + if (qualifier.isTaskMemory() && publicType.basicType != EbtBlock) error(loc, "taskNV variables can be declared only as blocks", "taskNV", ""); @@ -3812,7 +4126,7 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali switch (language) { case EShLangVertex: if (publicType.basicType == EbtStruct) { - error(loc, "cannot be a structure or array", GetStorageQualifierString(qualifier.storage), ""); + error(loc, "cannot be a structure", GetStorageQualifierString(qualifier.storage), ""); return; } if (publicType.arraySizes) { @@ -3838,12 +4152,10 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali if (! symbolTable.atBuiltInLevel()) error(loc, "global storage input qualifier cannot be used in a compute shader", "in", ""); break; -#ifndef GLSLANG_WEB case EShLangTessControl: if (qualifier.patch) error(loc, "can only use on output in tessellation-control shader", "patch", ""); break; -#endif default: break; } @@ -3882,12 +4194,10 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali case EShLangCompute: error(loc, "global storage output qualifier cannot be used in a compute shader", "out", ""); break; -#ifndef GLSLANG_WEB case EShLangTessEvaluation: if (qualifier.patch) error(loc, "can only use on input in tessellation-evaluation shader", "patch", ""); break; -#endif default: break; } @@ -3955,17 +4265,16 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons if (dst.precision == EpqNone || (force && src.precision != EpqNone)) dst.precision = src.precision; -#ifndef GLSLANG_WEB if (!force && ((src.coherent && (dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) || (src.devicecoherent && (dst.coherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) || (src.queuefamilycoherent && (dst.coherent || dst.devicecoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) || (src.workgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.subgroupcoherent || dst.shadercallcoherent)) || (src.subgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.shadercallcoherent)) || (src.shadercallcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)))) { - error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent/shadercallcoherent qualifier allowed", + error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent/shadercallcoherent qualifier allowed", GetPrecisionQualifierString(src.precision), ""); } -#endif + // Layout qualifiers mergeObjectLayoutQualifiers(dst, src, false); @@ -3977,7 +4286,6 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons MERGE_SINGLETON(smooth); MERGE_SINGLETON(flat); MERGE_SINGLETON(specConstant); -#ifndef GLSLANG_WEB MERGE_SINGLETON(noContraction); MERGE_SINGLETON(nopersp); MERGE_SINGLETON(explicitInterp); @@ -3998,15 +4306,13 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons MERGE_SINGLETON(readonly); MERGE_SINGLETON(writeonly); MERGE_SINGLETON(nonUniform); -#endif -#ifndef GLSLANG_WEB // SPIR-V storage class qualifier (GL_EXT_spirv_intrinsics) dst.spirvStorageClass = src.spirvStorageClass; // SPIR-V decorate qualifiers (GL_EXT_spirv_intrinsics) - if (src.hasSprivDecorate()) { - if (dst.hasSprivDecorate()) { + if (src.hasSpirvDecorate()) { + if (dst.hasSpirvDecorate()) { const TSpirvDecorate& srcSpirvDecorate = src.getSpirvDecorate(); TSpirvDecorate& dstSpirvDecorate = dst.getSpirvDecorate(); for (auto& decorate : srcSpirvDecorate.decorates) { @@ -4027,13 +4333,12 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons if (dstSpirvDecorate.decorates.find(decorateString.first) != dstSpirvDecorate.decorates.end()) error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate_string", "(decoration=%u)", decorateString.first); else - dstSpirvDecorate.decorates.insert(decorateString); + dstSpirvDecorate.decorateStrings.insert(decorateString); } } else { dst.spirvDecorate = src.spirvDecorate; } } -#endif if (repeated) error(loc, "replicated qualifiers", "", ""); @@ -4097,17 +4402,18 @@ TPrecisionQualifier TParseContext::getDefaultPrecision(TPublicType& publicType) return defaultPrecision[publicType.basicType]; } -void TParseContext::precisionQualifierCheck(const TSourceLoc& loc, TBasicType baseType, TQualifier& qualifier) +void TParseContext::precisionQualifierCheck(const TSourceLoc& loc, TBasicType baseType, TQualifier& qualifier, bool isCoopMat) { // Built-in symbols are allowed some ambiguous precisions, to be pinned down // later by context. if (! obeyPrecisionQualifiers() || parsingBuiltins) return; -#ifndef GLSLANG_WEB if (baseType == EbtAtomicUint && qualifier.precision != EpqNone && qualifier.precision != EpqHigh) error(loc, "atomic counters can only be highp", "atomic_uint", ""); -#endif + + if (isCoopMat) + return; if (baseType == EbtFloat || baseType == EbtUint || baseType == EbtInt || baseType == EbtSampler || baseType == EbtAtomicUint) { if (qualifier.precision == EpqNone) { @@ -4124,7 +4430,7 @@ void TParseContext::precisionQualifierCheck(const TSourceLoc& loc, TBasicType ba void TParseContext::parameterTypeCheck(const TSourceLoc& loc, TStorageQualifier qualifier, const TType& type) { - if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque()) + if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque() && !intermediate.getBindlessMode()) error(loc, "samplers and atomic_uints cannot be output parameters", type.getBasicTypeString().c_str(), ""); if (!parsingBuiltins && type.contains16BitFloat()) requireFloat16Arithmetic(loc, type.getBasicTypeString().c_str(), "float16 types can only be in uniform block or buffer storage"); @@ -4153,7 +4459,8 @@ bool TParseContext::containsFieldWithBasicType(const TType& type, TBasicType bas // // Do size checking for an array type's size. // -void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TArraySize& sizePair, const char *sizeType) +void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TArraySize& sizePair, + const char* sizeType, const bool allowZero) { bool isConst = false; sizePair.node = nullptr; @@ -4173,9 +4480,8 @@ void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TA TIntermSymbol* symbol = expr->getAsSymbolNode(); if (symbol && symbol->getConstArray().size() > 0) size = symbol->getConstArray()[0].getIConst(); - } else if (expr->getAsUnaryNode() && - expr->getAsUnaryNode()->getOp() == glslang::EOpArrayLength && - expr->getAsUnaryNode()->getOperand()->getType().isCoopMat()) { + } else if (expr->getAsUnaryNode() && expr->getAsUnaryNode()->getOp() == glslang::EOpArrayLength && + expr->getAsUnaryNode()->getOperand()->getType().isCoopMatNV()) { isConst = true; size = 1; sizePair.node = expr->getAsUnaryNode(); @@ -4189,9 +4495,16 @@ void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TA return; } - if (size <= 0) { - error(loc, sizeType, "", "must be a positive integer"); - return; + if (allowZero) { + if (size < 0) { + error(loc, sizeType, "", "must be a non-negative integer"); + return; + } + } else { + if (size <= 0) { + error(loc, sizeType, "", "must be a positive integer"); + return; + } } } @@ -4289,8 +4602,6 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua (qualifier.storage != EvqTemporary && qualifier.storage != EvqGlobal && qualifier.storage != EvqShared && qualifier.storage != EvqConst)) error(loc, "only outermost dimension of an array of arrays can be a specialization constant", "[]", ""); -#ifndef GLSLANG_WEB - // desktop always allows outer-dimension-unsized variable arrays, if (!isEsProfile()) return; @@ -4320,18 +4631,16 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader)) return; break; - case EShLangMeshNV: + case EShLangMesh: if (qualifier.storage == EvqVaryingOut) if ((isEsProfile() && version >= 320) || - extensionTurnedOn(E_GL_NV_mesh_shader)) + extensionsTurnedOn(Num_AEP_mesh_shader, AEP_mesh_shader)) return; break; default: break; } -#endif - // last member of ssbo block exception: if (qualifier.storage == EvqBuffer && lastMember) return; @@ -4376,7 +4685,6 @@ void TParseContext::declareArray(const TSourceLoc& loc, const TString& identifie if (symbolTable.atGlobalLevel()) trackLinkage(*symbol); -#ifndef GLSLANG_WEB if (! symbolTable.atBuiltInLevel()) { if (isIoResizeArray(type)) { ioArraySymbolResizeList.push_back(symbol); @@ -4384,7 +4692,6 @@ void TParseContext::declareArray(const TSourceLoc& loc, const TString& identifie } else fixIoArraySize(loc, symbol->getWritableType()); } -#endif return; } @@ -4422,7 +4729,6 @@ void TParseContext::declareArray(const TSourceLoc& loc, const TString& identifie return; } -#ifndef GLSLANG_WEB if (existingType.isSizedArray()) { // be more leniant for input arrays to geometry shaders and tessellation control outputs, where the redeclaration is the same size if (! (isIoResizeArray(type) && existingType.getOuterArraySize() == type.getOuterArraySize())) @@ -4436,11 +4742,8 @@ void TParseContext::declareArray(const TSourceLoc& loc, const TString& identifie if (isIoResizeArray(type)) checkIoArraysConsistency(loc); -#endif } -#ifndef GLSLANG_WEB - // Policy and error check for needing a runtime sized array. void TParseContext::checkRuntimeSizable(const TSourceLoc& loc, const TIntermTyped& base) { @@ -4468,7 +4771,7 @@ void TParseContext::checkRuntimeSizable(const TSourceLoc& loc, const TIntermType // check for additional things allowed by GL_EXT_nonuniform_qualifier if (base.getBasicType() == EbtSampler || base.getBasicType() == EbtAccStruct || base.getBasicType() == EbtRayQuery || - (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer())) + base.getBasicType() == EbtHitObjectNV || (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer())) requireExtensions(loc, 1, &E_GL_EXT_nonuniform_qualifier, "variable index"); else error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable"); @@ -4523,8 +4826,6 @@ void TParseContext::checkAndResizeMeshViewDim(const TSourceLoc& loc, TType& type } } -#endif // GLSLANG_WEB - // Returns true if the first argument to the #line directive is the line number for the next line. // // Desktop, pre-version 3.30: "After processing this directive @@ -4567,7 +4868,6 @@ void TParseContext::nonInitConstCheck(const TSourceLoc& loc, TString& identifier TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TString& identifier, const TQualifier& qualifier, const TShaderQualifiers& publicType) { -#ifndef GLSLANG_WEB if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel()) return nullptr; @@ -4591,7 +4891,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" || @@ -4607,6 +4907,9 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS identifier == "gl_SampleMask" || identifier == "gl_Layer" || identifier == "gl_PrimitiveIndicesNV" || + identifier == "gl_PrimitivePointIndicesEXT" || + identifier == "gl_PrimitiveLineIndicesEXT" || + identifier == "gl_PrimitiveTriangleIndicesEXT" || identifier == "gl_TexCoord") { // Find the existing symbol, if any. @@ -4660,7 +4963,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()) @@ -4670,6 +4973,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) @@ -4686,10 +4992,22 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS if (! intermediate.setDepth(publicType.layoutDepth)) error(loc, "all redeclarations must use the same depth layout on", "redeclaration", symbol->getName().c_str()); } + } else if (identifier == "gl_FragStencilRefARB") { + if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat || + qualifier.isMemory() || qualifier.isAuxiliary()) + error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str()); + if (qualifier.storage != EvqVaryingOut) + error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str()); + if (publicType.layoutStencil != ElsNone) { + if (intermediate.inIoAccessed("gl_FragStencilRefARB")) + error(loc, "cannot redeclare after use", "gl_FragStencilRefARB", ""); + if (!intermediate.setStencil(publicType.layoutStencil)) + error(loc, "all redeclarations must use the same stencil layout on", "redeclaration", + symbol->getName().c_str()); + } } else if ( - identifier == "gl_PrimitiveIndicesNV" || - identifier == "gl_FragStencilRefARB") { + identifier == "gl_PrimitiveIndicesNV") { if (qualifier.hasLayout()) error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str()); if (qualifier.storage != EvqVaryingOut) @@ -4712,7 +5030,6 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS return symbol; } -#endif return nullptr; } @@ -4724,13 +5041,13 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newTypeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes) { -#ifndef GLSLANG_WEB const char* feature = "built-in block redeclaration"; profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature); profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature); if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment" && - blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV") { + blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV" && + blockName != "gl_MeshPerVertexEXT" && blockName != "gl_MeshPerPrimitiveEXT") { error(loc, "cannot redeclare block: ", "block declaration", blockName.c_str()); return; } @@ -4939,7 +5256,6 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT // Save it in the AST for linker use. trackLinkage(*block); -#endif // GLSLANG_WEB } void TParseContext::paramCheckFixStorage(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type) @@ -4952,6 +5268,7 @@ void TParseContext::paramCheckFixStorage(const TSourceLoc& loc, const TStorageQu case EvqIn: case EvqOut: case EvqInOut: + case EvqTileImageEXT: type.getQualifier().storage = qualifier; break; case EvqGlobal: @@ -4967,7 +5284,6 @@ void TParseContext::paramCheckFixStorage(const TSourceLoc& loc, const TStorageQu void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& qualifier, TType& type) { -#ifndef GLSLANG_WEB if (qualifier.isMemory()) { type.getQualifier().volatil = qualifier.volatil; type.getQualifier().coherent = qualifier.coherent; @@ -4981,7 +5297,6 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali type.getQualifier().writeonly = qualifier.writeonly; type.getQualifier().restrict = qualifier.restrict; } -#endif if (qualifier.isAuxiliary() || qualifier.isInterpolation()) @@ -4998,7 +5313,6 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali } if (qualifier.isNonUniform()) type.getQualifier().nonUniform = qualifier.nonUniform; -#ifndef GLSLANG_WEB if (qualifier.isSpirvByReference()) type.getQualifier().setSpirvByReference(); if (qualifier.isSpirvLiteral()) { @@ -5007,7 +5321,6 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali type.getQualifier().setSpirvLiteral(); else error(loc, "cannot use spirv_literal qualifier", type.getBasicTypeString().c_str(), ""); -#endif } paramCheckFixStorage(loc, qualifier.storage, type); @@ -5038,21 +5351,18 @@ void TParseContext::arrayObjectCheck(const TSourceLoc& loc, const TType& type, c void TParseContext::opaqueCheck(const TSourceLoc& loc, const TType& type, const char* op) { - if (containsFieldWithBasicType(type, EbtSampler)) + if (containsFieldWithBasicType(type, EbtSampler) && !extensionTurnedOn(E_GL_ARB_bindless_texture)) error(loc, "can't use with samplers or structs containing samplers", op, ""); } void TParseContext::referenceCheck(const TSourceLoc& loc, const TType& type, const char* op) { -#ifndef GLSLANG_WEB if (containsFieldWithBasicType(type, EbtReference)) error(loc, "can't use with reference types", op, ""); -#endif } void TParseContext::storage16BitAssignmentCheck(const TSourceLoc& loc, const TType& type, const char* op) { -#ifndef GLSLANG_WEB if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtFloat16)) requireFloat16Arithmetic(loc, op, "can't use with structs containing float16"); @@ -5082,7 +5392,6 @@ void TParseContext::storage16BitAssignmentCheck(const TSourceLoc& loc, const TTy if (type.isArray() && type.getBasicType() == EbtUint8) requireInt8Arithmetic(loc, op, "can't use with arrays containing uint8"); -#endif } void TParseContext::specializationCheck(const TSourceLoc& loc, const TType& type, const char* op) @@ -5134,12 +5443,11 @@ void TParseContext::structTypeCheck(const TSourceLoc& /*loc*/, TPublicType& publ // void TParseContext::inductiveLoopCheck(const TSourceLoc& loc, TIntermNode* init, TIntermLoop* loop) { -#ifndef GLSLANG_WEB // loop index init must exist and be a declaration, which shows up in the AST as an aggregate of size 1 of the declaration bool badInit = false; if (! init || ! init->getAsAggregate() || init->getAsAggregate()->getSequence().size() != 1) badInit = true; - TIntermBinary* binaryInit = 0; + TIntermBinary* binaryInit = nullptr; if (! badInit) { // get the declaration assignment binaryInit = init->getAsAggregate()->getSequence()[0]->getAsBinaryNode(); @@ -5230,10 +5538,8 @@ void TParseContext::inductiveLoopCheck(const TSourceLoc& loc, TIntermNode* init, // the body inductiveLoopBodyCheck(loop->getBody(), loopIndex, symbolTable); -#endif } -#ifndef GLSLANG_WEB // Do limit checks for built-in arrays. void TParseContext::arrayLimitCheck(const TSourceLoc& loc, const TString& identifier, int size) { @@ -5248,7 +5554,6 @@ void TParseContext::arrayLimitCheck(const TSourceLoc& loc, const TString& identi else if (identifier.compare("gl_CullDistancePerViewNV") == 0) limitCheck(loc, size, "gl_MaxCullDistances", "gl_CullDistancePerViewNV array size"); } -#endif // GLSLANG_WEB // See if the provided value is less than or equal to the symbol indicated by limit, // which should be a constant in the symbol table. @@ -5262,8 +5567,6 @@ void TParseContext::limitCheck(const TSourceLoc& loc, int value, const char* lim error(loc, "must be less than or equal to", feature, "%s (%d)", limit, constArray[0].getIConst()); } -#ifndef GLSLANG_WEB - // // Do any additional error checking, etc., once we know the parsing is done. // @@ -5299,11 +5602,11 @@ void TParseContext::finish() if (!isEsProfile() && version < 430) requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "compute shaders"); break; - case EShLangTaskNV: - requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "task shaders"); + case EShLangTask: + requireExtensions(getCurrentLoc(), Num_AEP_mesh_shader, AEP_mesh_shader, "task shaders"); break; - case EShLangMeshNV: - requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "mesh shaders"); + case EShLangMesh: + requireExtensions(getCurrentLoc(), Num_AEP_mesh_shader, AEP_mesh_shader, "mesh shaders"); break; default: break; @@ -5329,7 +5632,6 @@ void TParseContext::finish() } } } -#endif // GLSLANG_WEB // // Layout qualifier stuff. @@ -5373,7 +5675,6 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi publicType.qualifier.layoutPacking = ElpStd140; return; } -#ifndef GLSLANG_WEB if (id == TQualifier::getLayoutPackingString(ElpStd430)) { requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "std430"); profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_shader_storage_buffer_object, "std430"); @@ -5413,12 +5714,34 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi intermediate.setUsePhysicalStorageBuffer(); return; } - if (language == EShLangGeometry || language == EShLangTessEvaluation || language == EShLangMeshNV) { + if (id == "bindless_sampler") { + requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bindless_sampler"); + publicType.qualifier.layoutBindlessSampler = true; + intermediate.setBindlessTextureMode(currentCaller, AstRefTypeLayout); + return; + } + if (id == "bindless_image") { + requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bindless_image"); + publicType.qualifier.layoutBindlessImage = true; + intermediate.setBindlessImageMode(currentCaller, AstRefTypeLayout); + return; + } + if (id == "bound_sampler") { + requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bound_sampler"); + publicType.qualifier.layoutBindlessSampler = false; + return; + } + if (id == "bound_image") { + requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bound_image"); + publicType.qualifier.layoutBindlessImage = false; + return; + } + if (language == EShLangGeometry || language == EShLangTessEvaluation || language == EShLangMesh) { if (id == TQualifier::getGeometryString(ElgTriangles)) { publicType.shaderQualifiers.geometry = ElgTriangles; return; } - if (language == EShLangGeometry || language == EShLangMeshNV) { + if (language == EShLangGeometry || language == EShLangMesh) { if (id == TQualifier::getGeometryString(ElgPoints)) { publicType.shaderQualifiers.geometry = ElgPoints; return; @@ -5501,12 +5824,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; } @@ -5516,6 +5846,12 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi publicType.shaderQualifiers.earlyFragmentTests = true; return; } + if (id == "early_and_late_fragment_tests_amd") { + profileRequires(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, 420, E_GL_AMD_shader_early_and_late_fragment_tests, "early_and_late_fragment_tests_amd"); + profileRequires(loc, EEsProfile, 310, nullptr, "early_and_late_fragment_tests_amd"); + publicType.shaderQualifiers.earlyAndLateFragmentTestsAMD = true; + return; + } if (id == "post_depth_coverage") { requireExtensions(loc, Num_post_depth_coverageEXTs, post_depth_coverageEXTs, "post depth coverage"); if (extensionTurnedOn(E_GL_ARB_post_depth_coverage)) { @@ -5524,6 +5860,22 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi publicType.shaderQualifiers.postDepthCoverage = true; return; } + /* id is transformed into lower case in the beginning of this function. */ + if (id == "non_coherent_color_attachment_readext") { + requireExtensions(loc, 1, &E_GL_EXT_shader_tile_image, "non_coherent_color_attachment_readEXT"); + publicType.shaderQualifiers.nonCoherentColorAttachmentReadEXT = true; + return; + } + if (id == "non_coherent_depth_attachment_readext") { + requireExtensions(loc, 1, &E_GL_EXT_shader_tile_image, "non_coherent_depth_attachment_readEXT"); + publicType.shaderQualifiers.nonCoherentDepthAttachmentReadEXT = true; + return; + } + if (id == "non_coherent_stencil_attachment_readext") { + requireExtensions(loc, 1, &E_GL_EXT_shader_tile_image, "non_coherent_stencil_attachment_readEXT"); + publicType.shaderQualifiers.nonCoherentStencilAttachmentReadEXT = true; + return; + } for (TLayoutDepth depth = (TLayoutDepth)(EldNone + 1); depth < EldCount; depth = (TLayoutDepth)(depth+1)) { if (id == TQualifier::getLayoutDepthString(depth)) { requireProfile(loc, ECoreProfile | ECompatibilityProfile, "depth layout qualifier"); @@ -5532,6 +5884,14 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi return; } } + for (TLayoutStencil stencil = (TLayoutStencil)(ElsNone + 1); stencil < ElsCount; stencil = (TLayoutStencil)(stencil+1)) { + if (id == TQualifier::getLayoutStencilString(stencil)) { + requireProfile(loc, ECoreProfile | ECompatibilityProfile, "stencil layout qualifier"); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, nullptr, "stencil layout qualifier"); + publicType.shaderQualifiers.layoutStencil = stencil; + return; + } + } for (TInterlockOrdering order = (TInterlockOrdering)(EioNone + 1); order < EioCount; order = (TInterlockOrdering)(order+1)) { if (id == TQualifier::getInterlockOrderingString(order)) { requireProfile(loc, ECoreProfile | ECompatibilityProfile, "fragment shader interlock layout qualifier"); @@ -5564,6 +5924,15 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi publicType.shaderQualifiers.layoutOverrideCoverage = true; return; } + if (id == "full_quads") + { + const char* feature = "full_quads qualifier"; + requireProfile(loc, ECompatibilityProfile | ECoreProfile | EEsProfile, feature); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 140, E_GL_EXT_shader_quad_control, feature); + profileRequires(loc, EEsProfile, 310, E_GL_EXT_shader_quad_control, feature); + publicType.qualifier.layoutFullQuads = true; + return; + } } if (language == EShLangVertex || language == EShLangTessControl || @@ -5586,6 +5955,10 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi } publicType.qualifier.layoutShaderRecord = true; return; + } else if (id == "hitobjectshaderrecordnv") { + requireExtensions(loc, 1, &E_GL_NV_shader_invocation_reorder, "hitobject shader record NV"); + publicType.qualifier.layoutHitObjectShaderRecordNV = true; + return; } } @@ -5608,7 +5981,16 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi publicType.shaderQualifiers.layoutPrimitiveCulling = true; return; } -#endif + + if (id == "quad_derivatives") + { + const char* feature = "quad_derivatives qualifier"; + requireProfile(loc, ECompatibilityProfile | ECoreProfile | EEsProfile, feature); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 140, E_GL_EXT_shader_quad_control, feature); + profileRequires(loc, EEsProfile, 310, E_GL_EXT_shader_quad_control, feature); + publicType.qualifier.layoutQuadDeriv = true; + return; + } error(loc, "unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)", id.c_str(), ""); } @@ -5675,7 +6057,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi return; } else if (id == "location") { profileRequires(loc, EEsProfile, 300, nullptr, "location"); - const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; + const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; // GL_ARB_explicit_uniform_location requires 330 or GL_ARB_explicit_attrib_location we do not need to add it here profileRequires(loc, ~EEsProfile, 330, 2, exts, "location"); if ((unsigned int)value >= TQualifier::layoutLocationEnd) @@ -5696,10 +6078,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi error(loc, "needs a literal integer", "set", ""); return; } else if (id == "binding") { -#ifndef GLSLANG_WEB profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, "binding"); profileRequires(loc, EEsProfile, 310, nullptr, "binding"); -#endif if ((unsigned int)value >= TQualifier::layoutBindingEnd) error(loc, "binding is too large", id.c_str(), ""); else @@ -5722,7 +6102,6 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi error(loc, "needs a literal integer", "constant_id", ""); return; } -#ifndef GLSLANG_WEB if (id == "component") { requireProfile(loc, ECoreProfile | ECompatibilityProfile, "component"); profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, "component"); @@ -5820,10 +6199,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi error(loc, "needs a literal integer", "buffer_reference_align", ""); return; } -#endif switch (language) { -#ifndef GLSLANG_WEB case EShLangTessControl: if (id == "vertices") { if (value == 0) @@ -5885,40 +6262,49 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi } break; - case EShLangMeshNV: + case EShLangMesh: if (id == "max_vertices") { - requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "max_vertices"); + requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "max_vertices"); publicType.shaderQualifiers.vertices = value; - if (value > resources.maxMeshOutputVerticesNV) - error(loc, "too large, must be less than gl_MaxMeshOutputVerticesNV", "max_vertices", ""); + int max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? resources.maxMeshOutputVerticesEXT + : resources.maxMeshOutputVerticesNV; + if (value > max) { + TString maxsErrtring = "too large, must be less than "; + maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ? "gl_MaxMeshOutputVerticesEXT" + : "gl_MaxMeshOutputVerticesNV"); + error(loc, maxsErrtring.c_str(), "max_vertices", ""); + } if (nonLiteral) error(loc, "needs a literal integer", "max_vertices", ""); return; } if (id == "max_primitives") { - requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "max_primitives"); + requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "max_primitives"); publicType.shaderQualifiers.primitives = value; - if (value > resources.maxMeshOutputPrimitivesNV) - error(loc, "too large, must be less than gl_MaxMeshOutputPrimitivesNV", "max_primitives", ""); + int max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? resources.maxMeshOutputPrimitivesEXT + : resources.maxMeshOutputPrimitivesNV; + if (value > max) { + TString maxsErrtring = "too large, must be less than "; + maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ? "gl_MaxMeshOutputPrimitivesEXT" + : "gl_MaxMeshOutputPrimitivesNV"); + error(loc, maxsErrtring.c_str(), "max_primitives", ""); + } if (nonLiteral) error(loc, "needs a literal integer", "max_primitives", ""); return; } - // Fall through + [[fallthrough]]; - case EShLangTaskNV: + case EShLangTask: // Fall through -#endif case EShLangCompute: if (id.compare(0, 11, "local_size_") == 0) { -#ifndef GLSLANG_WEB - if (language == EShLangMeshNV || language == EShLangTaskNV) { - requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "gl_WorkGroupSize"); + if (language == EShLangMesh || language == EShLangTask) { + requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "gl_WorkGroupSize"); } else { - profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize"); + profileRequires(loc, EEsProfile, 310, nullptr, "gl_WorkGroupSize"); profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize"); } -#endif if (nonLiteral) error(loc, "needs a literal integer", "local_size", ""); if (id.size() == 12 && value == 0) { @@ -5985,7 +6371,6 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie if (src.hasPacking()) dst.layoutPacking = src.layoutPacking; -#ifndef GLSLANG_WEB if (src.hasStream()) dst.layoutStream = src.layoutStream; if (src.hasFormat()) @@ -5994,7 +6379,6 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie dst.layoutXfbBuffer = src.layoutXfbBuffer; if (src.hasBufferReferenceAlign()) dst.layoutBufferReferenceAlign = src.layoutBufferReferenceAlign; -#endif if (src.hasAlign()) dst.layoutAlign = src.layoutAlign; @@ -6012,7 +6396,6 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie if (src.hasSpecConstantId()) dst.layoutSpecConstantId = src.layoutSpecConstantId; -#ifndef GLSLANG_WEB if (src.hasComponent()) dst.layoutComponent = src.layoutComponent; if (src.hasIndex()) @@ -6037,9 +6420,20 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie dst.layoutSecondaryViewportRelativeOffset = src.layoutSecondaryViewportRelativeOffset; if (src.layoutShaderRecord) dst.layoutShaderRecord = true; + if (src.layoutFullQuads) + dst.layoutFullQuads = true; + if (src.layoutQuadDeriv) + dst.layoutQuadDeriv = true; + if (src.layoutBindlessSampler) + dst.layoutBindlessSampler = true; + if (src.layoutBindlessImage) + dst.layoutBindlessImage = true; if (src.pervertexNV) dst.pervertexNV = true; -#endif + if (src.pervertexEXT) + dst.pervertexEXT = true; + if (src.layoutHitObjectShaderRecordNV) + dst.layoutHitObjectShaderRecordNV = true; } } @@ -6075,10 +6469,7 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb switch (qualifier.storage) { case EvqVaryingIn: case EvqVaryingOut: - if (!type.getQualifier().isTaskMemory() && -#ifndef GLSLANG_WEB - !type.getQualifier().hasSprivDecorate() && -#endif + if (!type.getQualifier().isTaskMemory() && !type.getQualifier().hasSpirvDecorate() && (type.getBasicType() != EbtBlock || (!(*type.getStruct())[0].type->getQualifier().hasLocation() && (*type.getStruct())[0].type->getQualifier().builtIn == EbvNone))) @@ -6140,11 +6531,6 @@ void TParseContext::layoutMemberLocationArrayCheck(const TSourceLoc& loc, bool m // Do layout error checking with respect to a type. void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) { -#ifndef GLSLANG_WEB - if (extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) - return; // Skip any check if GL_EXT_spirv_intrinsics is turned on -#endif - const TQualifier& qualifier = type.getQualifier(); // first, intra-layout qualifier-only error checking @@ -6186,15 +6572,22 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) case EvqBuffer: if (type.getBasicType() == EbtBlock) error(loc, "cannot apply to uniform or buffer block", "location", ""); + else if (type.getBasicType() == EbtSampler && type.getSampler().isAttachmentEXT()) + error(loc, "only applies to", "location", "%s with storage tileImageEXT", type.getBasicTypeString().c_str()); + break; + case EvqtaskPayloadSharedEXT: + error(loc, "cannot apply to taskPayloadSharedEXT", "location", ""); break; -#ifndef GLSLANG_WEB case EvqPayload: case EvqPayloadIn: case EvqHitAttr: case EvqCallableData: case EvqCallableDataIn: + case EvqHitObjectAttrNV: + case EvqSpirvStorageClass: + break; + case EvqTileImageEXT: break; -#endif default: error(loc, "can only apply to uniform, buffer, in, or out storage qualifiers", "location", ""); break; @@ -6204,13 +6597,12 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) int repeated = intermediate.addUsedLocation(qualifier, type, typeCollision); if (repeated >= 0 && ! typeCollision) error(loc, "overlapping use of location", "location", "%d", repeated); - // "fragment-shader outputs ... if two variables are placed within the same - // location, they must have the same underlying type (floating-point or integer)" - if (typeCollision && language == EShLangFragment && qualifier.isPipeOutput()) - error(loc, "fragment outputs sharing the same location must be the same basic type", "location", "%d", repeated); + // When location aliasing, the aliases sharing the location must have the same underlying numerical type and bit width( + // floating - point or integer, 32 - bit versus 64 - bit,etc.) + if (typeCollision && (qualifier.isPipeInput() || qualifier.isPipeOutput() || qualifier.storage == EvqTileImageEXT)) + error(loc, "the aliases sharing the location", "location", "%d must be the same basic type and interpolation qualification", repeated); } -#ifndef GLSLANG_WEB if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) { if (type.isUnsizedArray()) { error(loc, "unsized array", "xfb_offset", "in buffer %d", qualifier.layoutXfbBuffer); @@ -6239,7 +6631,6 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) if (! intermediate.setXfbBufferStride(qualifier.layoutXfbBuffer, qualifier.layoutXfbStride)) error(loc, "all stride settings must match for xfb buffer", "xfb_stride", "%d", qualifier.layoutXfbBuffer); } -#endif if (qualifier.hasBinding()) { // Binding checking, from the spec: @@ -6250,7 +6641,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) // an array of size N, all elements of the array from binding through binding + N - 1 must be within this // range." // - if (! type.isOpaque() && type.getBasicType() != EbtBlock) + if (!type.isOpaque() && type.getBasicType() != EbtBlock && type.getBasicType() != EbtSpirvType) error(loc, "requires block, or sampler/image, or atomic-counter type", "binding", ""); if (type.getBasicType() == EbtSampler) { int lastBinding = qualifier.layoutBinding; @@ -6259,16 +6650,12 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) if (type.isSizedArray()) lastBinding += (type.getCumulativeArraySize() - 1); else { -#ifndef GLSLANG_WEB warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", ""); -#endif } } } -#ifndef GLSLANG_WEB if (spvVersion.vulkan == 0 && lastBinding >= resources.maxCombinedTextureImageUnits) error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : ""); -#endif } if (type.isAtomic() && !spvVersion.vulkanRelaxed) { if (qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) { @@ -6291,7 +6678,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) !qualifier.hasAttachment() && !qualifier.hasBufferReference()) error(loc, "uniform/buffer blocks require layout(binding=X)", "binding", ""); - else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler) + else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler && !type.getSampler().isAttachmentEXT()) error(loc, "sampler/texture/image requires layout(binding=X)", "binding", ""); } } @@ -6313,7 +6700,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) // Image format if (qualifier.hasFormat()) { - if (! type.isImage()) + if (! type.isImage() && !intermediate.getBindlessImageMode()) error(loc, "only apply to images", TQualifier::getLayoutFormatString(qualifier.getFormat()), ""); else { if (type.getSampler().type == EbtFloat && qualifier.getFormat() > ElfFloatGuard) @@ -6332,14 +6719,18 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) } } } - } else if (type.isImage() && ! qualifier.isWriteOnly()) { + } else if (type.isImage() && ! qualifier.isWriteOnly() && !intermediate.getBindlessImageMode()) { const char *explanation = "image variables not declared 'writeonly' and without a format layout qualifier"; requireProfile(loc, ECoreProfile | ECompatibilityProfile, explanation); 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", ""); @@ -6349,6 +6740,8 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) // input attachment if (type.isSubpass()) { + if (extensionTurnedOn(E_GL_EXT_shader_tile_image)) + error(loc, "can not be used with GL_EXT_shader_tile_image enabled", type.getSampler().getString().c_str(), ""); if (! qualifier.hasAttachment()) error(loc, "requires an input_attachment_index layout qualifier", "subpass", ""); } else { @@ -6418,7 +6811,6 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier // output block declarations, and output block member declarations." switch (qualifier.storage) { -#ifndef GLSLANG_WEB case EvqVaryingIn: { const char* feature = "location qualifier on input"; @@ -6453,7 +6845,6 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier } break; } -#endif case EvqUniform: case EvqBuffer: { @@ -6516,6 +6907,14 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier error(loc, "cannot be used with shaderRecordNV", "set", ""); } + + if (qualifier.storage == EvqTileImageEXT) { + if (qualifier.hasSet()) + error(loc, "cannot be used with tileImageEXT", "set", ""); + if (!qualifier.hasLocation()) + error(loc, "can only be used with an explicit location", "tileImageEXT", ""); + } + if (qualifier.storage == EvqHitAttr && qualifier.hasLayout()) { error(loc, "cannot apply layout qualifiers to hitAttributeNV variable", "hitAttributeNV", ""); } @@ -6524,7 +6923,6 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier // For places that can't have shader-level layout qualifiers void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQualifiers& shaderQualifiers) { -#ifndef GLSLANG_WEB const char* message = "can only apply to a standalone qualifier"; if (shaderQualifiers.geometry != ElgNone) @@ -6544,7 +6942,7 @@ void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQua error(loc, message, "local_size id", ""); } if (shaderQualifiers.vertices != TQualifier::layoutNotSet) { - if (language == EShLangGeometry || language == EShLangMeshNV) + if (language == EShLangGeometry || language == EShLangMesh) error(loc, message, "max_vertices", ""); else if (language == EShLangTessControl) error(loc, message, "vertices", ""); @@ -6555,8 +6953,14 @@ void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQua error(loc, message, "early_fragment_tests", ""); if (shaderQualifiers.postDepthCoverage) error(loc, message, "post_depth_coverage", ""); + if (shaderQualifiers.nonCoherentColorAttachmentReadEXT) + error(loc, message, "non_coherent_color_attachment_readEXT", ""); + if (shaderQualifiers.nonCoherentDepthAttachmentReadEXT) + error(loc, message, "non_coherent_depth_attachment_readEXT", ""); + if (shaderQualifiers.nonCoherentStencilAttachmentReadEXT) + error(loc, message, "non_coherent_stencil_attachment_readEXT", ""); if (shaderQualifiers.primitives != TQualifier::layoutNotSet) { - if (language == EShLangMeshNV) + if (language == EShLangMesh) error(loc, message, "max_primitives", ""); else assert(0); @@ -6569,14 +6973,12 @@ void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQua error(loc, message, TQualifier::getInterlockOrderingString(shaderQualifiers.interlockOrdering), ""); if (shaderQualifiers.layoutPrimitiveCulling) error(loc, "can only be applied as standalone", "primitive_culling", ""); -#endif } // Correct and/or advance an object's offset layout qualifier. void TParseContext::fixOffset(const TSourceLoc& loc, TSymbol& symbol) { const TQualifier& qualifier = symbol.getType().getQualifier(); -#ifndef GLSLANG_WEB if (symbol.getType().isAtomic()) { if (qualifier.hasBinding() && (int)qualifier.layoutBinding < resources.maxAtomicCounterBindings) { @@ -6610,7 +7012,6 @@ void TParseContext::fixOffset(const TSourceLoc& loc, TSymbol& symbol) atomicUintOffsets[qualifier.layoutBinding] = offset + numOffsets; } } -#endif } // @@ -6625,10 +7026,6 @@ const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunct return nullptr; } -#ifdef GLSLANG_WEB - return findFunctionExact(loc, call, builtIn); -#endif - const TFunction* function = nullptr; // debugPrintfEXT has var args and is in the symbol table as "debugPrintfEXT()", @@ -6955,7 +7352,6 @@ TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, T { TIntermTyped* result = nullptr; -#ifndef GLSLANG_WEB if (function->getBuiltInOp() != EOpNull) { return nullptr; } @@ -6967,12 +7363,14 @@ TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, T TFunction realFunc(&name, function->getType()); + // Use copyParam to avoid shared ownership of the 'type' field + // of the parameter. for (int i = 0; i < function->getParamCount(); ++i) { - realFunc.addParameter((*function)[i]); + realFunc.addParameter(TParameter().copyParam((*function)[i])); } - TParameter tmpP = { 0, &uintType }; - realFunc.addParameter(tmpP); + TParameter tmpP = { nullptr, &uintType, {} }; + realFunc.addParameter(TParameter().copyParam(tmpP)); arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(1, loc, true)); result = handleFunctionCall(loc, &realFunc, arguments); @@ -6985,11 +7383,11 @@ TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, T TFunction realFunc(&name, function->getType()); for (int i = 0; i < function->getParamCount(); ++i) { - realFunc.addParameter((*function)[i]); + realFunc.addParameter(TParameter().copyParam((*function)[i])); } - TParameter tmpP = { 0, &uintType }; - realFunc.addParameter(tmpP); + TParameter tmpP = { nullptr, &uintType, {} }; + realFunc.addParameter(TParameter().copyParam(tmpP)); arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(-1, loc, true)); result = handleFunctionCall(loc, &realFunc, arguments); @@ -7000,11 +7398,10 @@ TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, T } } else if (function->getName() == "atomicCounter") { // change atomicCounter into a direct read of the variable - if (arguments->getAsTyped()) { + if (arguments && arguments->getAsTyped()) { result = arguments->getAsTyped(); } } -#endif return result; } @@ -7013,7 +7410,6 @@ TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, T // to establish defaults. void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType) { -#ifndef GLSLANG_WEB if (publicType.basicType == EbtAtomicUint && publicType.qualifier.hasBinding()) { if (publicType.qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) { error(loc, "atomic_uint binding is too large", "binding", ""); @@ -7030,19 +7426,52 @@ void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType if (publicType.qualifier.hasLayout() && !publicType.qualifier.hasBufferReference()) warn(loc, "useless application of layout qualifier", "layout", ""); -#endif } -bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString& identifier, const TPublicType&, +void TParseContext::coopMatTypeParametersCheck(const TSourceLoc& loc, const TPublicType& publicType) +{ + if (parsingBuiltins) + return; + if (publicType.isCoopmatKHR()) { + if (publicType.typeParameters == nullptr) { + error(loc, "coopmat missing type parameters", "", ""); + return; + } + switch (publicType.typeParameters->basicType) { + case EbtFloat: + case EbtFloat16: + case EbtInt: + case EbtInt8: + case EbtInt16: + case EbtUint: + case EbtUint8: + case EbtUint16: + case EbtSpirvType: + break; + default: + error(loc, "coopmat invalid basic type", TType::getBasicString(publicType.typeParameters->basicType), ""); + break; + } + if (publicType.typeParameters->arraySizes->getNumDims() != 4) { + error(loc, "coopmat incorrect number of type parameters", "", ""); + return; + } + int use = publicType.typeParameters->arraySizes->getDimSize(3); + if (use < 0 || use > 2) { + error(loc, "coopmat invalid matrix Use", "", ""); + return; + } + } +} + +bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString& identifier, const TPublicType& publicType, TArraySizes*, TIntermTyped* initializer, TType& type) { + vkRelaxedRemapUniformMembers(loc, publicType, type, identifier); + if (parsingBuiltins || symbolTable.atBuiltInLevel() || !symbolTable.atGlobalLevel() || type.getQualifier().storage != EvqUniform || - !(type.containsNonOpaque() -#ifndef GLSLANG_WEB - || type.getBasicType() == EbtAtomicUint -#endif - )) { + !(type.containsNonOpaque() || type.getBasicType() == EbtAtomicUint || (type.containsSampler() && type.isStruct()))) { return false; } @@ -7071,7 +7500,6 @@ bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString int bufferBinding = TQualifier::layoutBindingEnd; TVariable* updatedBlock = nullptr; -#ifndef GLSLANG_WEB // Convert atomic_uint into members of a buffer block if (type.isAtomic()) { type.setBasicType(EbtUint); @@ -7087,7 +7515,6 @@ bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString growAtomicCounterBlock(bufferBinding, loc, type, identifier, nullptr); updatedBlock = atomicCounterBuffers[bufferBinding]; } -#endif if (!updatedBlock) { growGlobalUniformBlock(loc, type, identifier, nullptr); @@ -7118,6 +7545,263 @@ bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString return true; } +template +static void ForEachOpaque(const TType& type, const TString& path, Function callback) +{ + auto recursion = [&callback](const TType& type, const TString& path, bool skipArray, auto& recursion) -> void { + if (!skipArray && type.isArray()) + { + std::vector indices(type.getArraySizes()->getNumDims()); + for (int flatIndex = 0; + flatIndex < type.getArraySizes()->getCumulativeSize(); + ++flatIndex) + { + TString subscriptPath = path; + for (size_t dimIndex = 0; dimIndex < indices.size(); ++dimIndex) + { + int index = indices[dimIndex]; + subscriptPath.append("["); + subscriptPath.append(String(index)); + subscriptPath.append("]"); + } + + recursion(type, subscriptPath, true, recursion); + + for (size_t dimIndex = 0; dimIndex < indices.size(); ++dimIndex) + { + ++indices[dimIndex]; + if (indices[dimIndex] < type.getArraySizes()->getDimSize(dimIndex)) + break; + else + indices[dimIndex] = 0; + } + } + } + + else if (type.isStruct() && type.containsOpaque()) + { + const TTypeList& types = *type.getStruct(); + for (const TTypeLoc& typeLoc : types) + { + TString nextPath = path; + nextPath.append("."); + nextPath.append(typeLoc.type->getFieldName()); + + recursion(*(typeLoc.type), nextPath, false, recursion); + } + } + + else if (type.isOpaque()) + { + callback(type, path); + } + }; + + recursion(type, path, false, recursion); +} + +void TParseContext::vkRelaxedRemapUniformMembers(const TSourceLoc& loc, const TPublicType& publicType, const TType& type, + const TString& identifier) +{ + if (!type.isStruct() || !type.containsOpaque()) + return; + + ForEachOpaque(type, identifier, + [&publicType, &loc, this](const TType& type, const TString& path) { + TArraySizes arraySizes = {}; + if (type.getArraySizes()) arraySizes = *type.getArraySizes(); + TTypeParameters typeParameters = {}; + if (type.getTypeParameters()) typeParameters = *type.getTypeParameters(); + + TPublicType memberType{}; + memberType.basicType = type.getBasicType(); + memberType.sampler = type.getSampler(); + memberType.qualifier = type.getQualifier(); + memberType.vectorSize = type.getVectorSize(); + memberType.matrixCols = type.getMatrixCols(); + memberType.matrixRows = type.getMatrixRows(); + memberType.coopmatNV = type.isCoopMatNV(); + memberType.coopmatKHR = type.isCoopMatKHR(); + memberType.arraySizes = nullptr; + memberType.userDef = nullptr; + memberType.loc = loc; + memberType.typeParameters = (type.getTypeParameters() ? &typeParameters : nullptr); + memberType.spirvType = nullptr; + + memberType.qualifier.storage = publicType.qualifier.storage; + memberType.shaderQualifiers = publicType.shaderQualifiers; + + TString& structMemberName = *NewPoolTString(path.c_str()); // A copy is required due to declareVariable() signature. + declareVariable(loc, structMemberName, memberType, nullptr, nullptr); + }); +} + +void TParseContext::vkRelaxedRemapFunctionParameter(TFunction* function, TParameter& param, std::vector* newParams) +{ + function->addParameter(param); + + if (!param.type->isStruct() || !param.type->containsOpaque()) + return; + + ForEachOpaque(*param.type, (param.name ? *param.name : param.type->getFieldName()), + [function, param, newParams](const TType& type, const TString& path) { + TString* memberName = NewPoolTString(path.c_str()); + + TType* memberType = new TType(); + memberType->shallowCopy(type); + memberType->getQualifier().storage = param.type->getQualifier().storage; + memberType->clearArraySizes(); + + TParameter memberParam = {}; + memberParam.name = memberName; + memberParam.type = memberType; + memberParam.defaultValue = nullptr; + function->addParameter(memberParam); + if (newParams) + newParams->push_back(function->getParamCount()-1); + }); +} + +// +// Generates a valid GLSL dereferencing string for the input TIntermNode +// +struct AccessChainTraverser : public TIntermTraverser { + AccessChainTraverser() : TIntermTraverser(false, false, true) + {} + + TString path = ""; + TStorageQualifier topLevelStorageQualifier = TStorageQualifier::EvqLast; + + bool visitBinary(TVisit, TIntermBinary* binary) override { + if (binary->getOp() == EOpIndexDirectStruct) + { + const TTypeList& members = *binary->getLeft()->getType().getStruct(); + const TTypeLoc& member = + members[binary->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst()]; + TString memberName = member.type->getFieldName(); + + if (path != "") + path.append("."); + + path.append(memberName); + } + + if (binary->getOp() == EOpIndexDirect) + { + const TConstUnionArray& indices = binary->getRight()->getAsConstantUnion()->getConstArray(); + for (int index = 0; index < indices.size(); ++index) + { + path.append("["); + path.append(String(indices[index].getIConst())); + path.append("]"); + } + } + + return true; + } + + void visitSymbol(TIntermSymbol* symbol) override { + if (symbol->getType().isOpaque()) + topLevelStorageQualifier = symbol->getQualifier().storage; + if (!IsAnonymous(symbol->getName())) + path.append(symbol->getName()); + } +}; + +TIntermNode* TParseContext::vkRelaxedRemapFunctionArgument(const TSourceLoc& loc, TFunction* function, TIntermTyped* intermTyped) +{ + AccessChainTraverser accessChainTraverser{}; + intermTyped->traverse(&accessChainTraverser); + + if (accessChainTraverser.topLevelStorageQualifier == TStorageQualifier::EvqUniform) + { + TParameter param = { 0, new TType, {} }; + param.type->shallowCopy(intermTyped->getType()); + + function->addParameter(param); + return intermTyped; + } + + TParameter param = { NewPoolTString(accessChainTraverser.path.c_str()), new TType, {} }; + param.type->shallowCopy(intermTyped->getType()); + + std::vector newParams = {}; + vkRelaxedRemapFunctionParameter(function, param, &newParams); + + if (intermTyped->getType().isOpaque()) + { + TIntermNode* remappedArgument = intermTyped; + { + TIntermSymbol* intermSymbol = nullptr; + TSymbol* symbol = symbolTable.find(*param.name); + if (symbol && symbol->getAsVariable()) + intermSymbol = intermediate.addSymbol(*symbol->getAsVariable(), loc); + else + { + TVariable* variable = new TVariable(param.name, *param.type); + intermSymbol = intermediate.addSymbol(*variable, loc); + } + + remappedArgument = intermSymbol; + } + + return remappedArgument; + } + else if (!(intermTyped->isStruct() && intermTyped->getType().containsOpaque())) + return intermTyped; + else + { + TIntermNode* remappedArgument = intermTyped; + { + TSymbol* symbol = symbolTable.find(*param.name); + if (symbol && symbol->getAsVariable()) + remappedArgument = intermediate.addSymbol(*symbol->getAsVariable(), loc); + } + + if (!newParams.empty()) + remappedArgument = intermediate.makeAggregate(remappedArgument, loc); + + for (int paramIndex : newParams) + { + TParameter& newParam = function->operator[](paramIndex); + TIntermSymbol* intermSymbol = nullptr; + TSymbol* symbol = symbolTable.find(*newParam.name); + if (symbol && symbol->getAsVariable()) + intermSymbol = intermediate.addSymbol(*symbol->getAsVariable(), loc); + else + { + TVariable* variable = new TVariable(newParam.name, *newParam.type); + intermSymbol = intermediate.addSymbol(*variable, loc); + } + + remappedArgument = intermediate.growAggregate(remappedArgument, intermSymbol); + } + + return remappedArgument; + } +} + +TIntermTyped* TParseContext::vkRelaxedRemapDotDereference(const TSourceLoc&, TIntermTyped& base, const TType& member, + const TString& identifier) +{ + if (!member.isOpaque()) + return &base; + + AccessChainTraverser traverser{}; + base.traverse(&traverser); + if (!traverser.path.empty()) + traverser.path.append("."); + traverser.path.append(identifier); + + const TSymbol* symbol = symbolTable.find(traverser.path); + if (!symbol) + return &base; + + TIntermTyped* result = intermediate.addSymbol(*symbol->getAsVariable()); + result->setType(symbol->getType()); + return result; +} + // // Do everything necessary to handle a variable (non-block) declaration. // Either redeclaring a variable, or making a new one, updating the symbol @@ -7142,32 +7826,50 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden if (initializer) { if (type.getBasicType() == EbtRayQuery) { error(loc, "ray queries can only be initialized by using the rayQueryInitializeEXT intrinsic:", "=", identifier.c_str()); + } else if (type.getBasicType() == EbtHitObjectNV) { + error(loc, "hit objects cannot be initialized using initializers", "=", identifier.c_str()); } + } - if (type.isCoopMat()) { + if (type.isCoopMatKHR()) { intermediate.setUseVulkanMemoryModel(); intermediate.setUseStorageBuffer(); - if (!publicType.typeParameters || publicType.typeParameters->getNumDims() != 4) { + if (!publicType.typeParameters || !publicType.typeParameters->arraySizes || + publicType.typeParameters->arraySizes->getNumDims() != 3) { + error(loc, "unexpected number type parameters", identifier.c_str(), ""); + } + if (publicType.typeParameters) { + if (!isTypeFloat(publicType.typeParameters->basicType) && + !isTypeInt(publicType.typeParameters->basicType) && publicType.typeParameters->basicType != EbtSpirvType) { + error(loc, "expected 8, 16, 32, or 64 bit signed or unsigned integer or 16, 32, or 64 bit float type", identifier.c_str(), ""); + } + } + } + else if (type.isCoopMatNV()) { + intermediate.setUseVulkanMemoryModel(); + intermediate.setUseStorageBuffer(); + + if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() != 4) { error(loc, "expected four type parameters", identifier.c_str(), ""); } if (publicType.typeParameters) { if (isTypeFloat(publicType.basicType) && - publicType.typeParameters->getDimSize(0) != 16 && - publicType.typeParameters->getDimSize(0) != 32 && - publicType.typeParameters->getDimSize(0) != 64) { + publicType.typeParameters->arraySizes->getDimSize(0) != 16 && + publicType.typeParameters->arraySizes->getDimSize(0) != 32 && + publicType.typeParameters->arraySizes->getDimSize(0) != 64) { error(loc, "expected 16, 32, or 64 bits for first type parameter", identifier.c_str(), ""); } if (isTypeInt(publicType.basicType) && - publicType.typeParameters->getDimSize(0) != 8 && - publicType.typeParameters->getDimSize(0) != 32) { - error(loc, "expected 8 or 32 bits for first type parameter", identifier.c_str(), ""); + publicType.typeParameters->arraySizes->getDimSize(0) != 8 && + publicType.typeParameters->arraySizes->getDimSize(0) != 16 && + publicType.typeParameters->arraySizes->getDimSize(0) != 32) { + error(loc, "expected 8, 16, or 32 bits for first type parameter", identifier.c_str(), ""); } } - } else { - if (publicType.typeParameters && publicType.typeParameters->getNumDims() != 0) { + if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() != 0) { error(loc, "unexpected type parameters", identifier.c_str(), ""); } } @@ -7182,11 +7884,10 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden samplerCheck(loc, type, identifier, initializer); transparentOpaqueCheck(loc, type, identifier); -#ifndef GLSLANG_WEB atomicUintCheck(loc, type, identifier); accStructCheck(loc, type, identifier); + hitObjectNVCheck(loc, type, identifier); checkAndResizeMeshViewDim(loc, type, /*isBlockMember*/ false); -#endif if (type.getQualifier().storage == EvqConst && type.containsReference()) { error(loc, "variables with reference type can't have qualifier 'const'", "qualifier", ""); } @@ -7200,6 +7901,8 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden requireInt8Arithmetic(loc, "qualifier", "(u)int8 types can only be in uniform block or buffer storage"); } + if (type.getQualifier().storage == EvqtaskPayloadSharedEXT) + intermediate.addTaskPayloadEXTCount(); if (type.getQualifier().storage == EvqShared && type.containsCoopMat()) error(loc, "qualifier", "Cooperative matrix types must not be used in shared memory", ""); @@ -7223,6 +7926,8 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", ""); if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.getDepth() != EldNone) error(loc, "can only apply depth layout to gl_FragDepth", "layout qualifier", ""); + if (identifier != "gl_FragStencilRefARB" && publicType.shaderQualifiers.getStencil() != ElsNone) + error(loc, "can only apply depth layout to gl_FragStencilRefARB", "layout qualifier", ""); // Check for redeclaration of built-ins and/or attempting to declare a reserved name TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers); @@ -7285,14 +7990,12 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden // Pick up global defaults from the provide global defaults into dst. void TParseContext::inheritGlobalDefaults(TQualifier& dst) const { -#ifndef GLSLANG_WEB if (dst.storage == EvqVaryingOut) { if (! dst.hasStream() && language == EShLangGeometry) dst.layoutStream = globalOutputDefaults.layoutStream; if (! dst.hasXfbBuffer()) dst.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer; } -#endif } // @@ -7321,9 +8024,7 @@ TVariable* TParseContext::declareNonArray(const TSourceLoc& loc, const TString& // make a new variable TVariable* variable = new TVariable(&identifier, type); -#ifndef GLSLANG_WEB ioArrayCheck(loc, type, identifier); -#endif // add variable to symbol table if (symbolTable.insert(*variable)) { @@ -7400,9 +8101,7 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp TType skeletalType; skeletalType.shallowCopy(variable->getType()); skeletalType.getQualifier().makeTemporary(); -#ifndef GLSLANG_WEB initializer = convertInitializerList(loc, skeletalType, initializer); -#endif if (! initializer) { // error recovery; don't leave const without constant values if (qualifier == EvqConst) @@ -7430,14 +8129,14 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp // Uniforms require a compile-time constant initializer if (qualifier == EvqUniform && ! initializer->getType().getQualifier().isFrontEndConstant()) { error(loc, "uniform initializers must be constant", "=", "'%s'", - variable->getType().getCompleteString().c_str()); + variable->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str()); variable->getWritableType().getQualifier().makeTemporary(); return nullptr; } // Global consts require a constant initializer (specialization constant is okay) if (qualifier == EvqConst && symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) { error(loc, "global const initializers must be constant", "=", "'%s'", - variable->getType().getCompleteString().c_str()); + variable->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str()); variable->getWritableType().getQualifier().makeTemporary(); return nullptr; } @@ -7500,7 +8199,7 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc); TIntermTyped* initNode = intermediate.addAssign(EOpAssign, intermSymbol, initializer, loc); if (! initNode) - assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString()); + assignError(loc, "=", intermSymbol->getCompleteString(intermediate.getEnhancedMsgs()), initializer->getCompleteString(intermediate.getEnhancedMsgs())); return initNode; } @@ -7571,7 +8270,7 @@ TIntermTyped* TParseContext::convertInitializerList(const TSourceLoc& loc, const } } else if (type.isMatrix()) { if (type.getMatrixCols() != (int)initList->getSequence().size()) { - error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString().c_str()); + error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str()); return nullptr; } TType vectorType(type, 0); // dereferenced type @@ -7582,20 +8281,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; } @@ -7630,12 +8329,14 @@ TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* // Combined texture-sampler constructors are completely semantic checked // in constructorTextureSamplerError() if (op == EOpConstructTextureSampler) { - if (aggrNode->getSequence()[1]->getAsTyped()->getType().getSampler().shadow) { - // Transfer depth into the texture (SPIR-V image) type, as a hint - // for tools to know this texture/image is a depth image. - aggrNode->getSequence()[0]->getAsTyped()->getWritableType().getSampler().shadow = true; + if (aggrNode != nullptr) { + if (aggrNode->getSequence()[1]->getAsTyped()->getType().getSampler().shadow) { + // Transfer depth into the texture (SPIR-V image) type, as a hint + // for tools to know this texture/image is a depth image. + aggrNode->getSequence()[0]->getAsTyped()->getWritableType().getSampler().shadow = true; + } + return intermediate.setAggregateOperator(aggrNode, op, type, loc); } - return intermediate.setAggregateOperator(aggrNode, op, type, loc); } TTypeList::const_iterator memberTypes; @@ -7684,6 +8385,11 @@ TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* int paramCount = 0; // keeps track of the constructor parameter number being checked + // We don't know "top down" whether type is a specialization constant, + // but a const becomes a specialization constant if any of its children are. + bool hasSpecConst = false; + bool isConstConstructor = true; + // for each parameter to the constructor call, check to see if the right type is passed or convert them // to the right type if possible (and allowed). // for structure constructors, just check if the right type is passed, no conversion is allowed. @@ -7696,13 +8402,24 @@ TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* else newNode = constructBuiltIn(type, op, (*p)->getAsTyped(), node->getLoc(), true); - if (newNode) + if (newNode) { *p = newNode; - else + if (!newNode->getType().getQualifier().isConstant()) + isConstConstructor = false; + if (newNode->getType().getQualifier().isSpecConstant()) + hasSpecConst = true; + } else return nullptr; } - TIntermTyped *ret_node = intermediate.setAggregateOperator(aggrNode, op, type, loc); + TIntermTyped* ret_node = intermediate.setAggregateOperator(aggrNode, op, type, loc); + + const char *specConstantCompositeExt[] = { E_GL_EXT_spec_constant_composites }; + if (checkExtensionsRequested(loc, 1, specConstantCompositeExt, "spec constant aggregate constructor")) { + if (isConstConstructor && hasSpecConst) { + ret_node->getWritableType().getQualifier().makeSpecConstant(); + } + } TIntermAggregate *agg_node = ret_node->getAsAggregate(); if (agg_node && (agg_node->isVector() || agg_node->isArray() || agg_node->isMatrix())) @@ -7770,7 +8487,18 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUvec2, true, node, type); return newNode; + } else if (node->getType().getBasicType() == EbtSampler) { + requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "sampler conversion to uvec2"); + // force the basic type of the constructor param to uvec2, otherwise spv builder will + // report some errors + TIntermTyped* newSrcNode = intermediate.createConversion(EbtUint, node); + newSrcNode->getAsTyped()->getWritableType().setVectorSize(2); + + TIntermTyped* newNode = + intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConstructUVec2, false, newSrcNode, type); + return newNode; } + [[fallthrough]]; case EOpConstructUVec3: case EOpConstructUVec4: case EOpConstructUint: @@ -7783,9 +8511,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructBool: basicOp = EOpConstructBool; break; - -#ifndef GLSLANG_WEB - + case EOpConstructTextureSampler: + if ((node->getType().getBasicType() == EbtUint || node->getType().getBasicType() == EbtInt) && + node->getType().getVectorSize() == 2) { + requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "ivec2/uvec2 convert to texture handle"); + // No matter ivec2 or uvec2, Set EOpPackUint2x32 just to generate an opBitcast op code + TIntermTyped* newNode = + intermediate.addBuiltInFunctionCall(node->getLoc(), EOpPackUint2x32, true, node, type); + return newNode; + } + [[fallthrough]]; case EOpConstructDVec2: case EOpConstructDVec3: case EOpConstructDVec4: @@ -7816,9 +8551,10 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructF16Mat4x4: case EOpConstructFloat16: basicOp = EOpConstructFloat16; - // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types, + // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types, // so construct a 32-bit type and convert - if (!intermediate.getArithemeticFloat16Enabled()) { + // and do not generate any conversion if it is an identity conversion, i.e. float16_t( var) + if (!intermediate.getArithemeticFloat16Enabled() && (node->getBasicType() != EbtFloat16)) { TType tempType(EbtFloat, EvqTemporary, type.getVectorSize()); newNode = node; if (tempType != newNode->getType()) { @@ -7839,9 +8575,10 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructI8Vec4: case EOpConstructInt8: basicOp = EOpConstructInt8; - // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types, + // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types, // so construct a 32-bit type and convert - if (!intermediate.getArithemeticInt8Enabled()) { + // and do not generate any conversion if it is an identity conversion, i.e. int8_t( var) + if (!intermediate.getArithemeticInt8Enabled() && (node->getBasicType() != EbtInt8)) { TType tempType(EbtInt, EvqTemporary, type.getVectorSize()); newNode = node; if (tempType != newNode->getType()) { @@ -7862,9 +8599,10 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructU8Vec4: case EOpConstructUint8: basicOp = EOpConstructUint8; - // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types, + // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types, // so construct a 32-bit type and convert - if (!intermediate.getArithemeticInt8Enabled()) { + // and do not generate any conversion if it is an identity conversion, i.e. uint8_t( var) + if (!intermediate.getArithemeticInt8Enabled() && (node->getBasicType() != EbtUint8)) { TType tempType(EbtUint, EvqTemporary, type.getVectorSize()); newNode = node; if (tempType != newNode->getType()) { @@ -7885,9 +8623,10 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructI16Vec4: case EOpConstructInt16: basicOp = EOpConstructInt16; - // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types, + // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types, // so construct a 32-bit type and convert - if (!intermediate.getArithemeticInt16Enabled()) { + // and do not generate any conversion if it is an identity conversion, i.e. int16_t( var) + if (!intermediate.getArithemeticInt16Enabled() && (node->getBasicType() != EbtInt16)) { TType tempType(EbtInt, EvqTemporary, type.getVectorSize()); newNode = node; if (tempType != newNode->getType()) { @@ -7908,9 +8647,10 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructU16Vec4: case EOpConstructUint16: basicOp = EOpConstructUint16; - // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types, + // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types, // so construct a 32-bit type and convert - if (!intermediate.getArithemeticInt16Enabled()) { + // and do not generate any conversion if it is an identity conversion, i.e. uint16_t( var) + if (!intermediate.getArithemeticInt16Enabled() && (node->getBasicType() != EbtUint16)) { TType tempType(EbtUint, EvqTemporary, type.getVectorSize()); newNode = node; if (tempType != newNode->getType()) { @@ -7938,7 +8678,7 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUint64, true, node, type); return newNode; } - // fall through + [[fallthrough]]; case EOpConstructU64Vec2: case EOpConstructU64Vec3: case EOpConstructU64Vec4: @@ -7971,14 +8711,18 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T return nullptr; } - case EOpConstructCooperativeMatrix: + case EOpConstructCooperativeMatrixNV: + case EOpConstructCooperativeMatrixKHR: + if (node->getType() == type) { + return node; + } if (!node->getType().isCoopMat()) { if (type.getBasicType() != node->getType().getBasicType()) { node = intermediate.addConversion(type.getBasicType(), node); if (node == nullptr) return nullptr; } - node = intermediate.setAggregateOperator(node, EOpConstructCooperativeMatrix, type, node->getLoc()); + node = intermediate.setAggregateOperator(node, op, type, node->getLoc()); } else { TOperator op = EOpNull; switch (type.getBasicType()) { @@ -7991,6 +8735,8 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EbtFloat16: op = EOpConvFloat16ToInt; break; case EbtUint8: op = EOpConvUint8ToInt; break; case EbtInt8: op = EOpConvInt8ToInt; break; + case EbtUint16: op = EOpConvUint16ToInt; break; + case EbtInt16: op = EOpConvInt16ToInt; break; case EbtUint: op = EOpConvUintToInt; break; default: assert(0); } @@ -8001,8 +8747,33 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EbtFloat16: op = EOpConvFloat16ToUint; break; case EbtUint8: op = EOpConvUint8ToUint; break; case EbtInt8: op = EOpConvInt8ToUint; break; + case EbtUint16: op = EOpConvUint16ToUint; break; + case EbtInt16: op = EOpConvInt16ToUint; break; case EbtInt: op = EOpConvIntToUint; break; - case EbtUint: op = EOpConvUintToInt8; break; + default: assert(0); + } + break; + case EbtInt16: + switch (node->getType().getBasicType()) { + case EbtFloat: op = EOpConvFloatToInt16; break; + case EbtFloat16: op = EOpConvFloat16ToInt16; break; + case EbtUint8: op = EOpConvUint8ToInt16; break; + case EbtInt8: op = EOpConvInt8ToInt16; break; + case EbtUint16: op = EOpConvUint16ToInt16; break; + case EbtInt: op = EOpConvIntToInt16; break; + case EbtUint: op = EOpConvUintToInt16; break; + default: assert(0); + } + break; + case EbtUint16: + switch (node->getType().getBasicType()) { + case EbtFloat: op = EOpConvFloatToUint16; break; + case EbtFloat16: op = EOpConvFloat16ToUint16; break; + case EbtUint8: op = EOpConvUint8ToUint16; break; + case EbtInt8: op = EOpConvInt8ToUint16; break; + case EbtInt16: op = EOpConvInt16ToUint16; break; + case EbtInt: op = EOpConvIntToUint16; break; + case EbtUint: op = EOpConvUintToUint16; break; default: assert(0); } break; @@ -8011,6 +8782,8 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EbtFloat: op = EOpConvFloatToInt8; break; case EbtFloat16: op = EOpConvFloat16ToInt8; break; case EbtUint8: op = EOpConvUint8ToInt8; break; + case EbtInt16: op = EOpConvInt16ToInt8; break; + case EbtUint16: op = EOpConvUint16ToInt8; break; case EbtInt: op = EOpConvIntToInt8; break; case EbtUint: op = EOpConvUintToInt8; break; default: assert(0); @@ -8021,6 +8794,8 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EbtFloat: op = EOpConvFloatToUint8; break; case EbtFloat16: op = EOpConvFloat16ToUint8; break; case EbtInt8: op = EOpConvInt8ToUint8; break; + case EbtInt16: op = EOpConvInt16ToUint8; break; + case EbtUint16: op = EOpConvUint16ToUint8; break; case EbtInt: op = EOpConvIntToUint8; break; case EbtUint: op = EOpConvUintToUint8; break; default: assert(0); @@ -8031,6 +8806,8 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EbtFloat16: op = EOpConvFloat16ToFloat; break; case EbtInt8: op = EOpConvInt8ToFloat; break; case EbtUint8: op = EOpConvUint8ToFloat; break; + case EbtInt16: op = EOpConvInt16ToFloat; break; + case EbtUint16: op = EOpConvUint16ToFloat; break; case EbtInt: op = EOpConvIntToFloat; break; case EbtUint: op = EOpConvUintToFloat; break; default: assert(0); @@ -8041,6 +8818,8 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EbtFloat: op = EOpConvFloatToFloat16; break; case EbtInt8: op = EOpConvInt8ToFloat16; break; case EbtUint8: op = EOpConvUint8ToFloat16; break; + case EbtInt16: op = EOpConvInt16ToFloat16; break; + case EbtUint16: op = EOpConvUint16ToFloat16; break; case EbtInt: op = EOpConvIntToFloat16; break; case EbtUint: op = EOpConvUintToFloat16; break; default: assert(0); @@ -8059,17 +8838,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructAccStruct: if ((node->getType().isScalar() && node->getType().getBasicType() == EbtUint64)) { // construct acceleration structure from uint64 - requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "uint64_t conversion to acclerationStructureEXT"); + requireExtensions(loc, Num_ray_tracing_EXTs, ray_tracing_EXTs, "uint64_t conversion to acclerationStructureEXT"); return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToAccStruct, true, node, type); } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint && node->getVectorSize() == 2) { // construct acceleration structure from uint64 - requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "uvec2 conversion to accelerationStructureEXT"); + requireExtensions(loc, Num_ray_tracing_EXTs, ray_tracing_EXTs, "uvec2 conversion to accelerationStructureEXT"); return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToAccStruct, true, node, type); } else return nullptr; -#endif // GLSLANG_WEB default: error(loc, "unsupported construction", "", ""); @@ -8103,8 +8881,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; } @@ -8115,7 +8894,6 @@ TIntermTyped* TParseContext::constructAggregate(TIntermNode* node, const TType& // If a memory qualifier is present in 'to', also make it present in 'from'. void TParseContext::inheritMemoryQualifiers(const TQualifier& from, TQualifier& to) { -#ifndef GLSLANG_WEB if (from.isReadOnly()) to.readonly = from.readonly; if (from.isWriteOnly()) @@ -8126,7 +8904,30 @@ void TParseContext::inheritMemoryQualifiers(const TQualifier& from, TQualifier& to.volatil = from.volatil; if (from.restrict) to.restrict = from.restrict; -#endif +} + +// +// Update qualifier layoutBindlessImage & layoutBindlessSampler on block member +// +void TParseContext::updateBindlessQualifier(TType& memberType) +{ + if (memberType.containsSampler()) { + if (memberType.isStruct()) { + TTypeList* typeList = memberType.getWritableStruct(); + for (unsigned int member = 0; member < typeList->size(); ++member) { + TType* subMemberType = (*typeList)[member].type; + updateBindlessQualifier(*subMemberType); + } + } + else if (memberType.getSampler().isImage()) { + intermediate.setBindlessImageMode(currentCaller, AstRefTypeLayout); + memberType.getQualifier().layoutBindlessImage = true; + } + else { + intermediate.setBindlessTextureMode(currentCaller, AstRefTypeLayout); + memberType.getQualifier().layoutBindlessSampler = true; + } + } } // @@ -8155,7 +8956,6 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con error(memberLoc, "member storage qualifier cannot contradict block storage qualifier", memberType.getFieldName().c_str(), ""); memberQualifier.storage = currentBlockQualifier.storage; globalQualifierFixCheck(memberLoc, memberQualifier); -#ifndef GLSLANG_WEB inheritMemoryQualifiers(currentBlockQualifier, memberQualifier); if (currentBlockQualifier.perPrimitiveNV) memberQualifier.perPrimitiveNV = currentBlockQualifier.perPrimitiveNV; @@ -8163,11 +8963,12 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con memberQualifier.perViewNV = currentBlockQualifier.perViewNV; if (currentBlockQualifier.perTaskNV) memberQualifier.perTaskNV = currentBlockQualifier.perTaskNV; + if (currentBlockQualifier.storage == EvqtaskPayloadSharedEXT) + memberQualifier.storage = EvqtaskPayloadSharedEXT; if (memberQualifier.storage == EvqSpirvStorageClass) error(memberLoc, "member cannot have a spirv_storage_class qualifier", memberType.getFieldName().c_str(), ""); - if (memberQualifier.hasSprivDecorate() && !memberQualifier.getSpirvDecorate().decorateIds.empty()) + if (memberQualifier.hasSpirvDecorate() && !memberQualifier.getSpirvDecorate().decorateIds.empty()) error(memberLoc, "member cannot have a spirv_decorate_id qualifier", memberType.getFieldName().c_str(), ""); -#endif if ((currentBlockQualifier.storage == EvqUniform || currentBlockQualifier.storage == EvqBuffer) && (memberQualifier.isInterpolation() || memberQualifier.isAuxiliary())) error(memberLoc, "member of uniform or buffer block cannot have an auxiliary or interpolation qualifier", memberType.getFieldName().c_str(), ""); if (memberType.isArray()) @@ -8179,8 +8980,13 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con } } - if (memberType.containsOpaque()) - error(memberLoc, "member of block cannot be or contain a sampler, image, or atomic_uint type", typeList[member].type->getFieldName().c_str(), ""); + // For bindless texture, sampler can be declared as uniform/storage block member, + if (memberType.containsOpaque()) { + if (memberType.containsSampler() && extensionTurnedOn(E_GL_ARB_bindless_texture)) + updateBindlessQualifier(memberType); + else + error(memberLoc, "member of block cannot be or contain a sampler, image, or atomic_uint type", typeList[member].type->getFieldName().c_str(), ""); + } if (memberType.containsCoopMat()) error(memberLoc, "member of block cannot be or contain a cooperative matrix type", typeList[member].type->getFieldName().c_str(), ""); @@ -8242,7 +9048,6 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con for (unsigned int member = 0; member < typeList.size(); ++member) { TQualifier& memberQualifier = typeList[member].type->getQualifier(); const TSourceLoc& memberLoc = typeList[member].loc; -#ifndef GLSLANG_WEB if (memberQualifier.hasStream()) { if (defaultQualification.layoutStream != memberQualifier.layoutStream) error(memberLoc, "member cannot contradict block", "stream", ""); @@ -8256,14 +9061,12 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con if (defaultQualification.layoutXfbBuffer != memberQualifier.layoutXfbBuffer) error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", ""); } -#endif if (memberQualifier.hasPacking()) error(memberLoc, "member of block cannot have a packing layout qualifier", typeList[member].type->getFieldName().c_str(), ""); if (memberQualifier.hasLocation()) { const char* feature = "location on block member"; switch (currentBlockQualifier.storage) { -#ifndef GLSLANG_WEB case EvqVaryingIn: case EvqVaryingOut: requireProfile(memberLoc, ECoreProfile | ECompatibilityProfile | EEsProfile, feature); @@ -8271,7 +9074,6 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con profileRequires(memberLoc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature); memberWithLocation = true; break; -#endif default: error(memberLoc, "can only use in an in/out block", feature, ""); break; @@ -8299,7 +9101,6 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con layoutMemberLocationArrayCheck(loc, memberWithLocation, arraySizes); -#ifndef GLSLANG_WEB // Ensure that the block has an XfbBuffer assigned. This is needed // because if the block has a XfbOffset assigned, then it is // assumed that it has implicitly assigned the current global @@ -8309,7 +9110,6 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con if (!currentBlockQualifier.hasXfbBuffer() && currentBlockQualifier.hasXfbOffset()) currentBlockQualifier.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer; } -#endif // Process the members fixBlockLocations(loc, currentBlockQualifier, typeList, memberWithLocation, memberWithoutLocation); @@ -8320,13 +9120,11 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con for (unsigned int member = 0; member < typeList.size(); ++member) layoutTypeCheck(typeList[member].loc, *typeList[member].type); -#ifndef GLSLANG_WEB if (memberWithPerViewQualifier) { for (unsigned int member = 0; member < typeList.size(); ++member) { checkAndResizeMeshViewDim(typeList[member].loc, *typeList[member].type, /*isBlockMember*/ true); } } -#endif // reverse merge, so that currentBlockQualifier now has all layout information // (can't use defaultQualification directly, it's missing other non-layout-default-class qualifiers) @@ -8340,7 +9138,6 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con if (arraySizes != nullptr) blockType.transferArraySizes(arraySizes); -#ifndef GLSLANG_WEB if (arraySizes == nullptr) ioArrayCheck(loc, blockType, instanceName ? *instanceName : *blockName); if (currentBlockQualifier.hasBufferReference()) { @@ -8367,9 +9164,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con if (!instanceName) { return; } - } else -#endif - { + } else { // // Don't make a user-defined type out of block name; that will cause an error // if the same block name gets reused in a different interface. @@ -8417,14 +9212,12 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con // Check for general layout qualifier errors layoutObjectCheck(loc, variable); -#ifndef GLSLANG_WEB // fix up if (isIoResizeArray(blockType)) { ioArraySymbolResizeList.push_back(&variable); checkIoArraysConsistency(loc, true); } else fixIoArraySize(loc, variable.getWritableType()); -#endif // Save it in the AST for linker use. trackLinkage(variable); @@ -8463,23 +9256,23 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q // It is a compile-time error to have an input block in a vertex shader or an output block in a fragment shader // "Compute shaders do not permit user-defined input variables..." requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask| - EShLangFragmentMask|EShLangMeshNVMask), "input block"); + EShLangFragmentMask|EShLangMeshMask), "input block"); if (language == EShLangFragment) { profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "fragment input block"); - } else if (language == EShLangMeshNV && ! qualifier.isTaskMemory()) { + } else if (language == EShLangMesh && ! qualifier.isTaskMemory()) { error(loc, "input blocks cannot be used in a mesh shader", "out", ""); } break; case EvqVaryingOut: profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "output block"); requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask| - EShLangGeometryMask|EShLangMeshNVMask|EShLangTaskNVMask), "output block"); + EShLangGeometryMask|EShLangMeshMask|EShLangTaskMask), "output block"); // ES 310 can have a block before shader_io is turned on, so skip this test for built-ins if (language == EShLangVertex && ! parsingBuiltins) { profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "vertex output block"); - } else if (language == EShLangMeshNV && qualifier.isTaskMemory()) { + } else if (language == EShLangMesh && qualifier.isTaskMemory()) { error(loc, "can only use on input blocks in mesh shader", "taskNV", ""); - } else if (language == EShLangTaskNV && ! qualifier.isTaskMemory()) { + } else if (language == EShLangTask && ! qualifier.isTaskMemory()) { error(loc, "output blocks cannot be used in a task shader", "out", ""); } break; @@ -8489,7 +9282,6 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q } profileRequires(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shared_memory_block, "shared block"); break; -#ifndef GLSLANG_WEB case EvqPayload: profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "rayPayloadNV block"); requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangAnyHitMask | EShLangClosestHitMask | EShLangMissMask), @@ -8513,7 +9305,10 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "callableDataInNV block"); requireStage(loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV block"); break; -#endif + case EvqHitObjectAttrNV: + profileRequires(loc, ~EEsProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV block"); + requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask), "hitObjectAttributeNV block"); + break; default: error(loc, "only uniform, buffer, in, or out blocks are supported", blockName->c_str(), ""); break; @@ -8602,7 +9397,6 @@ void TParseContext::fixBlockLocations(const TSourceLoc& loc, TQualifier& qualifi void TParseContext::fixXfbOffsets(TQualifier& qualifier, TTypeList& typeList) { -#ifndef GLSLANG_WEB // "If a block is qualified with xfb_offset, all its // members are assigned transform feedback buffer offsets. If a block is not qualified with xfb_offset, any // members of that block not qualified with an xfb_offset will not be assigned transform feedback buffer @@ -8636,7 +9430,6 @@ void TParseContext::fixXfbOffsets(TQualifier& qualifier, TTypeList& typeList) // The above gave all block members an offset, so we can take it off the block now, // which will avoid double counting the offset usage. qualifier.layoutXfbOffset = TQualifier::layoutXfbOffsetEnd; -#endif } // Calculate and save the offset of each block member, using the recursively @@ -8669,7 +9462,8 @@ void TParseContext::fixBlockUniformOffsets(TQualifier& qualifier, TTypeList& typ // "The specified offset must be a multiple // of the base alignment of the type of the block member it qualifies, or a compile-time error results." if (! IsMultipleOfPow2(memberQualifier.layoutOffset, memberAlignment)) - error(memberLoc, "must be a multiple of the member's alignment", "offset", ""); + error(memberLoc, "must be a multiple of the member's alignment", "offset", + "(layout offset = %d | member alignment = %d)", memberQualifier.layoutOffset, memberAlignment); // GLSL: "It is a compile-time error to specify an offset that is smaller than the offset of the previous // member in the block or that lies within the previous member of the block" @@ -8812,7 +9606,7 @@ void TParseContext::addQualifierToExisting(const TSourceLoc& loc, TQualifier qua // TParseContext::declareBlock. if (!symbol && qualifier.hasBufferReference()) { TTypeList typeList; - TType blockType(&typeList, identifier, qualifier);; + TType blockType(&typeList, identifier, qualifier); TType blockNameType(EbtReference, blockType, identifier); TVariable* blockNameVar = new TVariable(&identifier, blockNameType, true); if (! symbolTable.insert(*blockNameVar)) { @@ -8891,9 +9685,8 @@ void TParseContext::invariantCheck(const TSourceLoc& loc, const TQualifier& qual // void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, const TPublicType& publicType) { -#ifndef GLSLANG_WEB if (publicType.shaderQualifiers.vertices != TQualifier::layoutNotSet) { - assert(language == EShLangTessControl || language == EShLangGeometry || language == EShLangMeshNV); + assert(language == EShLangTessControl || language == EShLangGeometry || language == EShLangMesh); const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices"; if (publicType.qualifier.storage != EvqVaryingOut) @@ -8905,7 +9698,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con checkIoArraysConsistency(loc); } if (publicType.shaderQualifiers.primitives != TQualifier::layoutNotSet) { - assert(language == EShLangMeshNV); + assert(language == EShLangMesh); const char* id = "max_primitives"; if (publicType.qualifier.storage != EvqVaryingOut) @@ -8929,7 +9722,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con case ElgTrianglesAdjacency: case ElgQuads: case ElgIsolines: - if (language == EShLangMeshNV) { + if (language == EShLangMesh) { error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); break; } @@ -8946,11 +9739,11 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con switch (publicType.shaderQualifiers.geometry) { case ElgLines: case ElgTriangles: - if (language != EShLangMeshNV) { + if (language != EShLangMesh) { error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); break; } - // Fall through + [[fallthrough]]; case ElgPoints: case ElgLineStrip: case ElgTriangleStrip: @@ -8983,7 +9776,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con else error(loc, "can only apply to 'in'", "point_mode", ""); } -#endif + for (int i = 0; i < 3; ++i) { if (publicType.shaderQualifiers.localSizeNotDefault[i]) { if (publicType.qualifier.storage == EvqVaryingIn) { @@ -9000,29 +9793,57 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con } if (intermediate.getLocalSize(i) > (unsigned int)max) error(loc, "too large; see gl_MaxComputeWorkGroupSize", "local_size", ""); - } -#ifndef GLSLANG_WEB - else if (language == EShLangMeshNV) { + } else if (language == EShLangMesh) { switch (i) { - case 0: max = resources.maxMeshWorkGroupSizeX_NV; break; - case 1: max = resources.maxMeshWorkGroupSizeY_NV; break; - case 2: max = resources.maxMeshWorkGroupSizeZ_NV; break; + case 0: + max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? + resources.maxMeshWorkGroupSizeX_EXT : + resources.maxMeshWorkGroupSizeX_NV; + break; + case 1: + max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? + resources.maxMeshWorkGroupSizeY_EXT : + resources.maxMeshWorkGroupSizeY_NV ; + break; + case 2: + max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? + resources.maxMeshWorkGroupSizeZ_EXT : + resources.maxMeshWorkGroupSizeZ_NV ; + break; default: break; } - if (intermediate.getLocalSize(i) > (unsigned int)max) - error(loc, "too large; see gl_MaxMeshWorkGroupSizeNV", "local_size", ""); - } else if (language == EShLangTaskNV) { + if (intermediate.getLocalSize(i) > (unsigned int)max) { + TString maxsErrtring = "too large, see "; + maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ? + "gl_MaxMeshWorkGroupSizeEXT" : "gl_MaxMeshWorkGroupSizeNV"); + error(loc, maxsErrtring.c_str(), "local_size", ""); + } + } else if (language == EShLangTask) { switch (i) { - case 0: max = resources.maxTaskWorkGroupSizeX_NV; break; - case 1: max = resources.maxTaskWorkGroupSizeY_NV; break; - case 2: max = resources.maxTaskWorkGroupSizeZ_NV; break; + case 0: + max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? + resources.maxTaskWorkGroupSizeX_EXT : + resources.maxTaskWorkGroupSizeX_NV; + break; + case 1: + max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? + resources.maxTaskWorkGroupSizeY_EXT: + resources.maxTaskWorkGroupSizeY_NV; + break; + case 2: + max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? + resources.maxTaskWorkGroupSizeZ_EXT: + resources.maxTaskWorkGroupSizeZ_NV; + break; default: break; } - if (intermediate.getLocalSize(i) > (unsigned int)max) - error(loc, "too large; see gl_MaxTaskWorkGroupSizeNV", "local_size", ""); - } -#endif - else { + if (intermediate.getLocalSize(i) > (unsigned int)max) { + TString maxsErrtring = "too large, see "; + maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ? + "gl_MaxTaskWorkGroupSizeEXT" : "gl_MaxTaskWorkGroupSizeNV"); + error(loc, maxsErrtring.c_str(), "local_size", ""); + } + } else { assert(0); } @@ -9047,19 +9868,42 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con } } -#ifndef GLSLANG_WEB if (publicType.shaderQualifiers.earlyFragmentTests) { if (publicType.qualifier.storage == EvqVaryingIn) intermediate.setEarlyFragmentTests(); else error(loc, "can only apply to 'in'", "early_fragment_tests", ""); } + if (publicType.shaderQualifiers.earlyAndLateFragmentTestsAMD) { + if (publicType.qualifier.storage == EvqVaryingIn) + intermediate.setEarlyAndLateFragmentTestsAMD(); + else + error(loc, "can only apply to 'in'", "early_and_late_fragment_tests_amd", ""); + } if (publicType.shaderQualifiers.postDepthCoverage) { if (publicType.qualifier.storage == EvqVaryingIn) intermediate.setPostDepthCoverage(); else error(loc, "can only apply to 'in'", "post_coverage_coverage", ""); } + if (publicType.shaderQualifiers.nonCoherentColorAttachmentReadEXT) { + if (publicType.qualifier.storage == EvqVaryingIn) + intermediate.setNonCoherentColorAttachmentReadEXT(); + else + error(loc, "can only apply to 'in'", "non_coherent_color_attachment_readEXT", ""); + } + if (publicType.shaderQualifiers.nonCoherentDepthAttachmentReadEXT) { + if (publicType.qualifier.storage == EvqVaryingIn) + intermediate.setNonCoherentDepthAttachmentReadEXT(); + else + error(loc, "can only apply to 'in'", "non_coherent_depth_attachment_readEXT", ""); + } + if (publicType.shaderQualifiers.nonCoherentStencilAttachmentReadEXT) { + if (publicType.qualifier.storage == EvqVaryingIn) + intermediate.setNonCoherentStencilAttachmentReadEXT(); + else + error(loc, "can only apply to 'in'", "non_coherent_stencil_attachment_readEXT", ""); + } if (publicType.shaderQualifiers.hasBlendEquation()) { if (publicType.qualifier.storage != EvqVaryingOut) error(loc, "can only apply to 'out'", "blend equation", ""); @@ -9080,8 +9924,8 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con if (publicType.shaderQualifiers.layoutDerivativeGroupQuads) { if (publicType.qualifier.storage == EvqVaryingIn) { - if ((intermediate.getLocalSize(0) & 1) || - (intermediate.getLocalSize(1) & 1)) + if ((intermediate.getLocalSizeSpecId(0) == TQualifier::layoutNotSet && (intermediate.getLocalSize(0) & 1)) || + (intermediate.getLocalSizeSpecId(1) == TQualifier::layoutNotSet && (intermediate.getLocalSize(1) & 1))) error(loc, "requires local_size_x and local_size_y to be multiple of two", "derivative_group_quadsNV", ""); else intermediate.setLayoutDerivativeMode(LayoutDerivativeGroupQuads); @@ -9091,7 +9935,10 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con } if (publicType.shaderQualifiers.layoutDerivativeGroupLinear) { if (publicType.qualifier.storage == EvqVaryingIn) { - if((intermediate.getLocalSize(0) * + if (intermediate.getLocalSizeSpecId(0) == TQualifier::layoutNotSet && + intermediate.getLocalSizeSpecId(1) == TQualifier::layoutNotSet && + intermediate.getLocalSizeSpecId(2) == TQualifier::layoutNotSet && + (intermediate.getLocalSize(0) * intermediate.getLocalSize(1) * intermediate.getLocalSize(2)) % 4 != 0) error(loc, "requires total group size to be multiple of four", "derivative_group_linearNV", ""); @@ -9102,7 +9949,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con error(loc, "can only apply to 'in'", "derivative_group_linearNV", ""); } // Check mesh out array sizes, once all the necessary out qualifiers are defined. - if ((language == EShLangMeshNV) && + if ((language == EShLangMesh) && (intermediate.getVertices() != TQualifier::layoutNotSet) && (intermediate.getPrimitives() != TQualifier::layoutNotSet) && (intermediate.getOutputPrimitive() != ElgNone)) @@ -9119,7 +9966,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con // Exit early as further checks are not valid return; } -#endif + const TQualifier& qualifier = publicType.qualifier; if (qualifier.isAuxiliary() || @@ -9152,7 +9999,6 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con case EvqVaryingIn: break; case EvqVaryingOut: -#ifndef GLSLANG_WEB if (qualifier.hasStream()) globalOutputDefaults.layoutStream = qualifier.layoutStream; if (qualifier.hasXfbBuffer()) @@ -9161,7 +10007,6 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con if (! intermediate.setXfbBufferStride(globalOutputDefaults.layoutXfbBuffer, qualifier.layoutXfbStride)) error(loc, "all stride settings must match for xfb buffer", "xfb_stride", "%d", qualifier.layoutXfbBuffer); } -#endif break; case EvqShared: if (qualifier.hasMatrix()) @@ -9316,5 +10161,38 @@ const TTypeList* TParseContext::recordStructCopy(TStructRecord& record, const TT return originStruct; } -} // end namespace glslang +TLayoutFormat TParseContext::mapLegacyLayoutFormat(TLayoutFormat legacyLayoutFormat, TBasicType imageType) +{ + TLayoutFormat layoutFormat = ElfNone; + if (imageType == EbtFloat) { + switch (legacyLayoutFormat) { + case ElfSize1x16: layoutFormat = ElfR16f; break; + case ElfSize1x32: layoutFormat = ElfR32f; break; + case ElfSize2x32: layoutFormat = ElfRg32f; break; + case ElfSize4x32: layoutFormat = ElfRgba32f; break; + default: break; + } + } else if (imageType == EbtUint) { + switch (legacyLayoutFormat) { + case ElfSize1x8: layoutFormat = ElfR8ui; break; + case ElfSize1x16: layoutFormat = ElfR16ui; break; + case ElfSize1x32: layoutFormat = ElfR32ui; break; + case ElfSize2x32: layoutFormat = ElfRg32ui; break; + case ElfSize4x32: layoutFormat = ElfRgba32ui; break; + default: break; + } + } else if (imageType == EbtInt) { + switch (legacyLayoutFormat) { + case ElfSize1x8: layoutFormat = ElfR8i; break; + case ElfSize1x16: layoutFormat = ElfR16i; break; + case ElfSize1x32: layoutFormat = ElfR32i; break; + case ElfSize2x32: layoutFormat = ElfRg32i; break; + case ElfSize4x32: layoutFormat = ElfRgba32i; break; + default: break; + } + } + return layoutFormat; +} + +} // end namespace glslang diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 885fd90810..67ba7dbd1a 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -95,12 +95,15 @@ class TParseContextBase : public TParseVersions { globalUniformSet(TQualifier::layoutSetEnd), atomicCounterBlockSet(TQualifier::layoutSetEnd) { + // use storage buffer on SPIR-V 1.3 and up + if (spvVersion.spv >= EShTargetSpv_1_3) + intermediate.setUseStorageBuffer(); + if (entryPoint != nullptr) sourceEntryPointName = *entryPoint; } virtual ~TParseContextBase() { } -#if !defined(GLSLANG_WEB) || defined(GLSLANG_WEB_DEVEL) virtual void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken, const char* szExtraInfoFormat, ...); virtual void C_DECL warn(const TSourceLoc&, const char* szReason, const char* szToken, @@ -109,7 +112,6 @@ class TParseContextBase : public TParseVersions { const char* szExtraInfoFormat, ...); virtual void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken, const char* szExtraInfoFormat, ...); -#endif virtual void setLimits(const TBuiltInResource&) = 0; @@ -178,6 +180,7 @@ class TParseContextBase : public TParseVersions { // Basic parsing state, easily accessible to the grammar TSymbolTable& symbolTable; // symbol table that goes with the current language, version, and profile + TVector relaxedSymbols; int statementNestingLevel; // 0 if outside all flow control or compound statements int loopNestingLevel; // 0 if outside all loops int structNestingLevel; // 0 if outside structures @@ -194,6 +197,7 @@ class TParseContextBase : public TParseVersions { struct TPragma contextPragma; int beginInvocationInterlockCount; int endInvocationInterlockCount; + bool compileOnly = false; protected: TParseContextBase(TParseContextBase&); @@ -327,10 +331,8 @@ class TParseContext : public TParseContextBase { TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index); void handleIndexLimits(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index); -#ifndef GLSLANG_WEB void makeEditable(TSymbol*&) override; void ioArrayCheck(const TSourceLoc&, const TType&, const TString& identifier); -#endif bool isIoResizeArray(const TType&) const; void fixIoArraySize(const TSourceLoc&, TType&); void handleIoResizeArrayAccess(const TSourceLoc&, TIntermTyped* base); @@ -366,6 +368,10 @@ class TParseContext : public TParseContextBase { TIntermTyped* vkRelaxedRemapFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*); // returns true if the variable was remapped to something else bool vkRelaxedRemapUniformVariable(const TSourceLoc&, TString&, const TPublicType&, TArraySizes*, TIntermTyped*, TType&); + void vkRelaxedRemapUniformMembers(const TSourceLoc&, const TPublicType&, const TType&, const TString&); + void vkRelaxedRemapFunctionParameter(TFunction*, TParameter&, std::vector* newParams = nullptr); + TIntermNode* vkRelaxedRemapFunctionArgument(const TSourceLoc&, TFunction*, TIntermTyped*); + TIntermTyped* vkRelaxedRemapDotDereference(const TSourceLoc&, TIntermTyped&, const TType&, const TString&); void assignError(const TSourceLoc&, const char* op, TString left, TString right); void unaryOpError(const TSourceLoc&, const char* op, TString operand); @@ -378,7 +384,7 @@ class TParseContext : public TParseContextBase { void globalCheck(const TSourceLoc&, const char* token); bool constructorError(const TSourceLoc&, TIntermNode*, TFunction&, TOperator, TType&); bool constructorTextureSamplerError(const TSourceLoc&, const TFunction&); - void arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&, const char *sizeType); + void arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&, const char *sizeType, const bool allowZero = false); bool arrayQualifierError(const TSourceLoc&, const TQualifier&); bool arrayError(const TSourceLoc&, const TType&); void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&); @@ -391,16 +397,17 @@ class TParseContext : public TParseContextBase { void samplerCheck(const TSourceLoc&, const TType&, const TString& identifier, TIntermTyped* initializer); void atomicUintCheck(const TSourceLoc&, const TType&, const TString& identifier); void accStructCheck(const TSourceLoc & loc, const TType & type, const TString & identifier); + void hitObjectNVCheck(const TSourceLoc & loc, const TType & type, const TString & identifier); void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier); void memberQualifierCheck(glslang::TPublicType&); - void globalQualifierFixCheck(const TSourceLoc&, TQualifier&, bool isMemberCheck = false); + void globalQualifierFixCheck(const TSourceLoc&, TQualifier&, bool isMemberCheck = false, const TPublicType* publicType = nullptr); void globalQualifierTypeCheck(const TSourceLoc&, const TQualifier&, const TPublicType&); bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType); void mergeQualifiers(const TSourceLoc&, TQualifier& dst, const TQualifier& src, bool force); void setDefaultPrecision(const TSourceLoc&, TPublicType&, TPrecisionQualifier); int computeSamplerTypeIndex(TSampler&); TPrecisionQualifier getDefaultPrecision(TPublicType&); - void precisionQualifierCheck(const TSourceLoc&, TBasicType, TQualifier&); + void precisionQualifierCheck(const TSourceLoc&, TBasicType, TQualifier&, bool isCoopMat); void parameterTypeCheck(const TSourceLoc&, TStorageQualifier qualifier, const TType& type); bool containsFieldWithBasicType(const TType& type ,TBasicType basicType); TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&); @@ -418,6 +425,7 @@ class TParseContext : public TParseContextBase { void inductiveLoopCheck(const TSourceLoc&, TIntermNode* init, TIntermLoop* loop); void arrayLimitCheck(const TSourceLoc&, const TString&, int size); void limitCheck(const TSourceLoc&, int value, const char* limit, const char* feature); + void coopMatTypeParametersCheck(const TSourceLoc&, const TPublicType&); void inductiveLoopBodyCheck(TIntermNode*, long long loopIndexId, TSymbolTable&); void constantIndexExpressionCheck(TIntermNode*); @@ -438,12 +446,12 @@ class TParseContext : public TParseContextBase { const TFunction* findFunction400(const TSourceLoc& loc, const TFunction& call, bool& builtIn); const TFunction* findFunctionExplicitTypes(const TSourceLoc& loc, const TFunction& call, bool& builtIn); void declareTypeDefaults(const TSourceLoc&, const TPublicType&); - TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0); + TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = nullptr, TIntermTyped* initializer = nullptr); TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&); TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&); TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset); void inheritMemoryQualifiers(const TQualifier& from, TQualifier& to); - void declareBlock(const TSourceLoc&, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0); + void declareBlock(const TSourceLoc&, TTypeList& typeList, const TString* instanceName = nullptr, TArraySizes* arraySizes = nullptr); void blockStorageRemap(const TSourceLoc&, const TString*, TQualifier&); void blockStageIoCheck(const TSourceLoc&, const TQualifier&); void blockQualifierCheck(const TSourceLoc&, const TQualifier&, bool instanceName); @@ -456,11 +464,12 @@ class TParseContext : public TParseContextBase { void addQualifierToExisting(const TSourceLoc&, TQualifier, TIdentifierList&); void invariantCheck(const TSourceLoc&, const TQualifier&); void updateStandaloneQualifierDefaults(const TSourceLoc&, const TPublicType&); + void updateBindlessQualifier(TType& memberType); void wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode); TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body); const TTypeList* recordStructCopy(TStructRecord&, const TType*, const TType*); + TLayoutFormat mapLegacyLayoutFormat(TLayoutFormat legacyLayoutFormat, TBasicType imageType); -#ifndef GLSLANG_WEB TAttributeType attributeFromName(const TString& name) const; TAttributes* makeAttributes(const TString& identifier) const; TAttributes* makeAttributes(const TString& identifier, TIntermNode* node) const; @@ -480,14 +489,13 @@ class TParseContext : public TParseContextBase { TSpirvRequirement* mergeSpirvRequirements(const TSourceLoc& loc, TSpirvRequirement* spirvReq1, TSpirvRequirement* spirvReq2); TSpirvTypeParameters* makeSpirvTypeParameters(const TSourceLoc& loc, const TIntermConstantUnion* constant); + TSpirvTypeParameters* makeSpirvTypeParameters(const TSourceLoc& loc, const TPublicType& type); TSpirvTypeParameters* mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1, TSpirvTypeParameters* spirvTypeParams2); TSpirvInstruction* makeSpirvInstruction(const TSourceLoc& loc, const TString& name, const TString& value); TSpirvInstruction* makeSpirvInstruction(const TSourceLoc& loc, const TString& name, int value); TSpirvInstruction* mergeSpirvInstruction(const TSourceLoc& loc, TSpirvInstruction* spirvInst1, TSpirvInstruction* spirvInst2); -#endif - void checkAndResizeMeshViewDim(const TSourceLoc&, TType&, bool isBlockMember); protected: @@ -500,9 +508,7 @@ class TParseContext : public TParseContextBase { bool isRuntimeLength(const TIntermTyped&) const; TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable); TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer); -#ifndef GLSLANG_WEB void finish() override; -#endif virtual const char* getGlobalUniformBlockName() const override; virtual void finalizeGlobalUniformBlockLayout(TVariable&) override; @@ -539,7 +545,6 @@ class TParseContext : public TParseContextBase { TQualifier globalOutputDefaults; TQualifier globalSharedDefaults; TString currentCaller; // name of last function body entered (not valid when at global scope) -#ifndef GLSLANG_WEB int* atomicUintOffsets; // to become an array of the right size to hold an offset per binding point bool anyIndexLimits; TIdSetType inductiveLoopIds; @@ -580,7 +585,6 @@ class TParseContext : public TParseContextBase { // array-sizing declarations // TVector ioArraySymbolResizeList; -#endif }; } // end namespace glslang diff --git a/glslang/MachineIndependent/PoolAlloc.cpp b/glslang/MachineIndependent/PoolAlloc.cpp index 84c40f4e79..93a3b0d12f 100644 --- a/glslang/MachineIndependent/PoolAlloc.cpp +++ b/glslang/MachineIndependent/PoolAlloc.cpp @@ -35,34 +35,35 @@ #include "../Include/Common.h" #include "../Include/PoolAlloc.h" -#include "../Include/InitializeGlobals.h" -#include "../OSDependent/osinclude.h" +// Mostly here for target that do not support threads such as WASI. +#ifdef DISABLE_THREAD_SUPPORT +#define THREAD_LOCAL +#else +#define THREAD_LOCAL thread_local +#endif namespace glslang { -// Process-wide TLS index -OS_TLSIndex PoolIndex; +namespace { +THREAD_LOCAL TPoolAllocator* threadPoolAllocator = nullptr; + +TPoolAllocator* GetDefaultThreadPoolAllocator() +{ + THREAD_LOCAL TPoolAllocator defaultAllocator; + return &defaultAllocator; +} +} // anonymous namespace // Return the thread-specific current pool. TPoolAllocator& GetThreadPoolAllocator() { - return *static_cast(OS_GetTLSValue(PoolIndex)); + return *(threadPoolAllocator ? threadPoolAllocator : GetDefaultThreadPoolAllocator()); } // Set the thread-specific current pool. void SetThreadPoolAllocator(TPoolAllocator* poolAllocator) { - OS_SetTLSValue(PoolIndex, poolAllocator); -} - -// Process-wide set up of the TLS pool storage. -bool InitializePoolIndex() -{ - // Allocate a TLS index. - if ((PoolIndex = OS_AllocTLSIndex()) == OS_INVALID_TLS_INDEX) - return false; - - return true; + threadPoolAllocator = poolAllocator; } // @@ -137,16 +138,6 @@ TPoolAllocator::~TPoolAllocator() } } -const unsigned char TAllocation::guardBlockBeginVal = 0xfb; -const unsigned char TAllocation::guardBlockEndVal = 0xfe; -const unsigned char TAllocation::userDataFill = 0xcd; - -# ifdef GUARD_BLOCKS - const size_t TAllocation::guardBlockSize = 16; -# else - const size_t TAllocation::guardBlockSize = 0; -# endif - // // Check a single guard block for damage // @@ -267,8 +258,8 @@ void* TPoolAllocator::allocate(size_t numBytes) // size_t numBytesToAlloc = allocationSize + headerSkip; tHeader* memory = reinterpret_cast(::new char[numBytesToAlloc]); - if (memory == 0) - return 0; + if (memory == nullptr) + return nullptr; // Use placement-new to initialize header new(memory) tHeader(inUseList, (numBytesToAlloc + pageSize - 1) / pageSize); @@ -289,8 +280,8 @@ void* TPoolAllocator::allocate(size_t numBytes) freeList = freeList->nextPage; } else { memory = reinterpret_cast(::new char[pageSize]); - if (memory == 0) - return 0; + if (memory == nullptr) + return nullptr; } // Use placement-new to initialize header @@ -308,7 +299,7 @@ void* TPoolAllocator::allocate(size_t numBytes) // void TAllocation::checkAllocList() const { - for (const TAllocation* alloc = this; alloc != 0; alloc = alloc->prevAlloc) + for (const TAllocation* alloc = this; alloc != nullptr; alloc = alloc->prevAlloc) alloc->check(); } diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index c387aede0e..a90edb32f9 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -322,498 +322,481 @@ struct str_hash }; // A single global usable by all threads, by all versions, by all languages. -// After a single process-level initialization, this is read only and thread safe -std::unordered_map* KeywordMap = nullptr; -#ifndef GLSLANG_WEB -std::unordered_set* ReservedSet = nullptr; -#endif - -}; - -namespace glslang { - -void TScanContext::fillInKeywordMap() -{ - if (KeywordMap != nullptr) { - // this is really an error, as this should called only once per process - // but, the only risk is if two threads called simultaneously - return; - } - KeywordMap = new std::unordered_map; - - (*KeywordMap)["const"] = CONST; - (*KeywordMap)["uniform"] = UNIFORM; - (*KeywordMap)["buffer"] = BUFFER; - (*KeywordMap)["in"] = IN; - (*KeywordMap)["out"] = OUT; - (*KeywordMap)["smooth"] = SMOOTH; - (*KeywordMap)["flat"] = FLAT; - (*KeywordMap)["centroid"] = CENTROID; - (*KeywordMap)["invariant"] = INVARIANT; - (*KeywordMap)["packed"] = PACKED; - (*KeywordMap)["resource"] = RESOURCE; - (*KeywordMap)["inout"] = INOUT; - (*KeywordMap)["struct"] = STRUCT; - (*KeywordMap)["break"] = BREAK; - (*KeywordMap)["continue"] = CONTINUE; - (*KeywordMap)["do"] = DO; - (*KeywordMap)["for"] = FOR; - (*KeywordMap)["while"] = WHILE; - (*KeywordMap)["switch"] = SWITCH; - (*KeywordMap)["case"] = CASE; - (*KeywordMap)["default"] = DEFAULT; - (*KeywordMap)["if"] = IF; - (*KeywordMap)["else"] = ELSE; - (*KeywordMap)["discard"] = DISCARD; - (*KeywordMap)["terminateInvocation"] = TERMINATE_INVOCATION; - (*KeywordMap)["terminateRayEXT"] = TERMINATE_RAY; - (*KeywordMap)["ignoreIntersectionEXT"] = IGNORE_INTERSECTION; - (*KeywordMap)["return"] = RETURN; - (*KeywordMap)["void"] = VOID; - (*KeywordMap)["bool"] = BOOL; - (*KeywordMap)["float"] = FLOAT; - (*KeywordMap)["int"] = INT; - (*KeywordMap)["bvec2"] = BVEC2; - (*KeywordMap)["bvec3"] = BVEC3; - (*KeywordMap)["bvec4"] = BVEC4; - (*KeywordMap)["vec2"] = VEC2; - (*KeywordMap)["vec3"] = VEC3; - (*KeywordMap)["vec4"] = VEC4; - (*KeywordMap)["ivec2"] = IVEC2; - (*KeywordMap)["ivec3"] = IVEC3; - (*KeywordMap)["ivec4"] = IVEC4; - (*KeywordMap)["mat2"] = MAT2; - (*KeywordMap)["mat3"] = MAT3; - (*KeywordMap)["mat4"] = MAT4; - (*KeywordMap)["true"] = BOOLCONSTANT; - (*KeywordMap)["false"] = BOOLCONSTANT; - (*KeywordMap)["layout"] = LAYOUT; - (*KeywordMap)["shared"] = SHARED; - (*KeywordMap)["highp"] = HIGH_PRECISION; - (*KeywordMap)["mediump"] = MEDIUM_PRECISION; - (*KeywordMap)["lowp"] = LOW_PRECISION; - (*KeywordMap)["superp"] = SUPERP; - (*KeywordMap)["precision"] = PRECISION; - (*KeywordMap)["mat2x2"] = MAT2X2; - (*KeywordMap)["mat2x3"] = MAT2X3; - (*KeywordMap)["mat2x4"] = MAT2X4; - (*KeywordMap)["mat3x2"] = MAT3X2; - (*KeywordMap)["mat3x3"] = MAT3X3; - (*KeywordMap)["mat3x4"] = MAT3X4; - (*KeywordMap)["mat4x2"] = MAT4X2; - (*KeywordMap)["mat4x3"] = MAT4X3; - (*KeywordMap)["mat4x4"] = MAT4X4; - (*KeywordMap)["uint"] = UINT; - (*KeywordMap)["uvec2"] = UVEC2; - (*KeywordMap)["uvec3"] = UVEC3; - (*KeywordMap)["uvec4"] = UVEC4; - -#ifndef GLSLANG_WEB - (*KeywordMap)["nonuniformEXT"] = NONUNIFORM; - (*KeywordMap)["demote"] = DEMOTE; - (*KeywordMap)["attribute"] = ATTRIBUTE; - (*KeywordMap)["varying"] = VARYING; - (*KeywordMap)["noperspective"] = NOPERSPECTIVE; - (*KeywordMap)["coherent"] = COHERENT; - (*KeywordMap)["devicecoherent"] = DEVICECOHERENT; - (*KeywordMap)["queuefamilycoherent"] = QUEUEFAMILYCOHERENT; - (*KeywordMap)["workgroupcoherent"] = WORKGROUPCOHERENT; - (*KeywordMap)["subgroupcoherent"] = SUBGROUPCOHERENT; - (*KeywordMap)["shadercallcoherent"] = SHADERCALLCOHERENT; - (*KeywordMap)["nonprivate"] = NONPRIVATE; - (*KeywordMap)["restrict"] = RESTRICT; - (*KeywordMap)["readonly"] = READONLY; - (*KeywordMap)["writeonly"] = WRITEONLY; - (*KeywordMap)["atomic_uint"] = ATOMIC_UINT; - (*KeywordMap)["volatile"] = VOLATILE; - (*KeywordMap)["patch"] = PATCH; - (*KeywordMap)["sample"] = SAMPLE; - (*KeywordMap)["subroutine"] = SUBROUTINE; - (*KeywordMap)["dmat2"] = DMAT2; - (*KeywordMap)["dmat3"] = DMAT3; - (*KeywordMap)["dmat4"] = DMAT4; - (*KeywordMap)["dmat2x2"] = DMAT2X2; - (*KeywordMap)["dmat2x3"] = DMAT2X3; - (*KeywordMap)["dmat2x4"] = DMAT2X4; - (*KeywordMap)["dmat3x2"] = DMAT3X2; - (*KeywordMap)["dmat3x3"] = DMAT3X3; - (*KeywordMap)["dmat3x4"] = DMAT3X4; - (*KeywordMap)["dmat4x2"] = DMAT4X2; - (*KeywordMap)["dmat4x3"] = DMAT4X3; - (*KeywordMap)["dmat4x4"] = DMAT4X4; - (*KeywordMap)["image1D"] = IMAGE1D; - (*KeywordMap)["iimage1D"] = IIMAGE1D; - (*KeywordMap)["uimage1D"] = UIMAGE1D; - (*KeywordMap)["image2D"] = IMAGE2D; - (*KeywordMap)["iimage2D"] = IIMAGE2D; - (*KeywordMap)["uimage2D"] = UIMAGE2D; - (*KeywordMap)["image3D"] = IMAGE3D; - (*KeywordMap)["iimage3D"] = IIMAGE3D; - (*KeywordMap)["uimage3D"] = UIMAGE3D; - (*KeywordMap)["image2DRect"] = IMAGE2DRECT; - (*KeywordMap)["iimage2DRect"] = IIMAGE2DRECT; - (*KeywordMap)["uimage2DRect"] = UIMAGE2DRECT; - (*KeywordMap)["imageCube"] = IMAGECUBE; - (*KeywordMap)["iimageCube"] = IIMAGECUBE; - (*KeywordMap)["uimageCube"] = UIMAGECUBE; - (*KeywordMap)["imageBuffer"] = IMAGEBUFFER; - (*KeywordMap)["iimageBuffer"] = IIMAGEBUFFER; - (*KeywordMap)["uimageBuffer"] = UIMAGEBUFFER; - (*KeywordMap)["image1DArray"] = IMAGE1DARRAY; - (*KeywordMap)["iimage1DArray"] = IIMAGE1DARRAY; - (*KeywordMap)["uimage1DArray"] = UIMAGE1DARRAY; - (*KeywordMap)["image2DArray"] = IMAGE2DARRAY; - (*KeywordMap)["iimage2DArray"] = IIMAGE2DARRAY; - (*KeywordMap)["uimage2DArray"] = UIMAGE2DARRAY; - (*KeywordMap)["imageCubeArray"] = IMAGECUBEARRAY; - (*KeywordMap)["iimageCubeArray"] = IIMAGECUBEARRAY; - (*KeywordMap)["uimageCubeArray"] = UIMAGECUBEARRAY; - (*KeywordMap)["image2DMS"] = IMAGE2DMS; - (*KeywordMap)["iimage2DMS"] = IIMAGE2DMS; - (*KeywordMap)["uimage2DMS"] = UIMAGE2DMS; - (*KeywordMap)["image2DMSArray"] = IMAGE2DMSARRAY; - (*KeywordMap)["iimage2DMSArray"] = IIMAGE2DMSARRAY; - (*KeywordMap)["uimage2DMSArray"] = UIMAGE2DMSARRAY; - (*KeywordMap)["i64image1D"] = I64IMAGE1D; - (*KeywordMap)["u64image1D"] = U64IMAGE1D; - (*KeywordMap)["i64image2D"] = I64IMAGE2D; - (*KeywordMap)["u64image2D"] = U64IMAGE2D; - (*KeywordMap)["i64image3D"] = I64IMAGE3D; - (*KeywordMap)["u64image3D"] = U64IMAGE3D; - (*KeywordMap)["i64image2DRect"] = I64IMAGE2DRECT; - (*KeywordMap)["u64image2DRect"] = U64IMAGE2DRECT; - (*KeywordMap)["i64imageCube"] = I64IMAGECUBE; - (*KeywordMap)["u64imageCube"] = U64IMAGECUBE; - (*KeywordMap)["i64imageBuffer"] = I64IMAGEBUFFER; - (*KeywordMap)["u64imageBuffer"] = U64IMAGEBUFFER; - (*KeywordMap)["i64image1DArray"] = I64IMAGE1DARRAY; - (*KeywordMap)["u64image1DArray"] = U64IMAGE1DARRAY; - (*KeywordMap)["i64image2DArray"] = I64IMAGE2DARRAY; - (*KeywordMap)["u64image2DArray"] = U64IMAGE2DARRAY; - (*KeywordMap)["i64imageCubeArray"] = I64IMAGECUBEARRAY; - (*KeywordMap)["u64imageCubeArray"] = U64IMAGECUBEARRAY; - (*KeywordMap)["i64image2DMS"] = I64IMAGE2DMS; - (*KeywordMap)["u64image2DMS"] = U64IMAGE2DMS; - (*KeywordMap)["i64image2DMSArray"] = I64IMAGE2DMSARRAY; - (*KeywordMap)["u64image2DMSArray"] = U64IMAGE2DMSARRAY; - (*KeywordMap)["double"] = DOUBLE; - (*KeywordMap)["dvec2"] = DVEC2; - (*KeywordMap)["dvec3"] = DVEC3; - (*KeywordMap)["dvec4"] = DVEC4; - (*KeywordMap)["int64_t"] = INT64_T; - (*KeywordMap)["uint64_t"] = UINT64_T; - (*KeywordMap)["i64vec2"] = I64VEC2; - (*KeywordMap)["i64vec3"] = I64VEC3; - (*KeywordMap)["i64vec4"] = I64VEC4; - (*KeywordMap)["u64vec2"] = U64VEC2; - (*KeywordMap)["u64vec3"] = U64VEC3; - (*KeywordMap)["u64vec4"] = U64VEC4; +const std::unordered_map KeywordMap { + {"const",CONST}, + {"uniform",UNIFORM}, + {"tileImageEXT",TILEIMAGEEXT}, + {"buffer",BUFFER}, + {"in",IN}, + {"out",OUT}, + {"smooth",SMOOTH}, + {"flat",FLAT}, + {"centroid",CENTROID}, + {"invariant",INVARIANT}, + {"packed",PACKED}, + {"resource",RESOURCE}, + {"inout",INOUT}, + {"struct",STRUCT}, + {"break",BREAK}, + {"continue",CONTINUE}, + {"do",DO}, + {"for",FOR}, + {"while",WHILE}, + {"switch",SWITCH}, + {"case",CASE}, + {"default",DEFAULT}, + {"if",IF}, + {"else",ELSE}, + {"discard",DISCARD}, + {"terminateInvocation",TERMINATE_INVOCATION}, + {"terminateRayEXT",TERMINATE_RAY}, + {"ignoreIntersectionEXT",IGNORE_INTERSECTION}, + {"return",RETURN}, + {"void",VOID}, + {"bool",BOOL}, + {"float",FLOAT}, + {"int",INT}, + {"bvec2",BVEC2}, + {"bvec3",BVEC3}, + {"bvec4",BVEC4}, + {"vec2",VEC2}, + {"vec3",VEC3}, + {"vec4",VEC4}, + {"ivec2",IVEC2}, + {"ivec3",IVEC3}, + {"ivec4",IVEC4}, + {"mat2",MAT2}, + {"mat3",MAT3}, + {"mat4",MAT4}, + {"true",BOOLCONSTANT}, + {"false",BOOLCONSTANT}, + {"layout",LAYOUT}, + {"shared",SHARED}, + {"highp",HIGH_PRECISION}, + {"mediump",MEDIUM_PRECISION}, + {"lowp",LOW_PRECISION}, + {"superp",SUPERP}, + {"precision",PRECISION}, + {"mat2x2",MAT2X2}, + {"mat2x3",MAT2X3}, + {"mat2x4",MAT2X4}, + {"mat3x2",MAT3X2}, + {"mat3x3",MAT3X3}, + {"mat3x4",MAT3X4}, + {"mat4x2",MAT4X2}, + {"mat4x3",MAT4X3}, + {"mat4x4",MAT4X4}, + {"uint",UINT}, + {"uvec2",UVEC2}, + {"uvec3",UVEC3}, + {"uvec4",UVEC4}, + + {"nonuniformEXT",NONUNIFORM}, + {"demote",DEMOTE}, + {"attribute",ATTRIBUTE}, + {"varying",VARYING}, + {"noperspective",NOPERSPECTIVE}, + {"coherent",COHERENT}, + {"devicecoherent",DEVICECOHERENT}, + {"queuefamilycoherent",QUEUEFAMILYCOHERENT}, + {"workgroupcoherent",WORKGROUPCOHERENT}, + {"subgroupcoherent",SUBGROUPCOHERENT}, + {"shadercallcoherent",SHADERCALLCOHERENT}, + {"nonprivate",NONPRIVATE}, + {"restrict",RESTRICT}, + {"readonly",READONLY}, + {"writeonly",WRITEONLY}, + {"atomic_uint",ATOMIC_UINT}, + {"volatile",VOLATILE}, + {"patch",PATCH}, + {"sample",SAMPLE}, + {"subroutine",SUBROUTINE}, + {"dmat2",DMAT2}, + {"dmat3",DMAT3}, + {"dmat4",DMAT4}, + {"dmat2x2",DMAT2X2}, + {"dmat2x3",DMAT2X3}, + {"dmat2x4",DMAT2X4}, + {"dmat3x2",DMAT3X2}, + {"dmat3x3",DMAT3X3}, + {"dmat3x4",DMAT3X4}, + {"dmat4x2",DMAT4X2}, + {"dmat4x3",DMAT4X3}, + {"dmat4x4",DMAT4X4}, + {"image1D",IMAGE1D}, + {"iimage1D",IIMAGE1D}, + {"uimage1D",UIMAGE1D}, + {"image2D",IMAGE2D}, + {"iimage2D",IIMAGE2D}, + {"uimage2D",UIMAGE2D}, + {"image3D",IMAGE3D}, + {"iimage3D",IIMAGE3D}, + {"uimage3D",UIMAGE3D}, + {"image2DRect",IMAGE2DRECT}, + {"iimage2DRect",IIMAGE2DRECT}, + {"uimage2DRect",UIMAGE2DRECT}, + {"imageCube",IMAGECUBE}, + {"iimageCube",IIMAGECUBE}, + {"uimageCube",UIMAGECUBE}, + {"imageBuffer",IMAGEBUFFER}, + {"iimageBuffer",IIMAGEBUFFER}, + {"uimageBuffer",UIMAGEBUFFER}, + {"image1DArray",IMAGE1DARRAY}, + {"iimage1DArray",IIMAGE1DARRAY}, + {"uimage1DArray",UIMAGE1DARRAY}, + {"image2DArray",IMAGE2DARRAY}, + {"iimage2DArray",IIMAGE2DARRAY}, + {"uimage2DArray",UIMAGE2DARRAY}, + {"imageCubeArray",IMAGECUBEARRAY}, + {"iimageCubeArray",IIMAGECUBEARRAY}, + {"uimageCubeArray",UIMAGECUBEARRAY}, + {"image2DMS",IMAGE2DMS}, + {"iimage2DMS",IIMAGE2DMS}, + {"uimage2DMS",UIMAGE2DMS}, + {"image2DMSArray",IMAGE2DMSARRAY}, + {"iimage2DMSArray",IIMAGE2DMSARRAY}, + {"uimage2DMSArray",UIMAGE2DMSARRAY}, + {"i64image1D",I64IMAGE1D}, + {"u64image1D",U64IMAGE1D}, + {"i64image2D",I64IMAGE2D}, + {"u64image2D",U64IMAGE2D}, + {"i64image3D",I64IMAGE3D}, + {"u64image3D",U64IMAGE3D}, + {"i64image2DRect",I64IMAGE2DRECT}, + {"u64image2DRect",U64IMAGE2DRECT}, + {"i64imageCube",I64IMAGECUBE}, + {"u64imageCube",U64IMAGECUBE}, + {"i64imageBuffer",I64IMAGEBUFFER}, + {"u64imageBuffer",U64IMAGEBUFFER}, + {"i64image1DArray",I64IMAGE1DARRAY}, + {"u64image1DArray",U64IMAGE1DARRAY}, + {"i64image2DArray",I64IMAGE2DARRAY}, + {"u64image2DArray",U64IMAGE2DARRAY}, + {"i64imageCubeArray",I64IMAGECUBEARRAY}, + {"u64imageCubeArray",U64IMAGECUBEARRAY}, + {"i64image2DMS",I64IMAGE2DMS}, + {"u64image2DMS",U64IMAGE2DMS}, + {"i64image2DMSArray",I64IMAGE2DMSARRAY}, + {"u64image2DMSArray",U64IMAGE2DMSARRAY}, + {"double",DOUBLE}, + {"dvec2",DVEC2}, + {"dvec3",DVEC3}, + {"dvec4",DVEC4}, + {"int64_t",INT64_T}, + {"uint64_t",UINT64_T}, + {"i64vec2",I64VEC2}, + {"i64vec3",I64VEC3}, + {"i64vec4",I64VEC4}, + {"u64vec2",U64VEC2}, + {"u64vec3",U64VEC3}, + {"u64vec4",U64VEC4}, // GL_EXT_shader_explicit_arithmetic_types - (*KeywordMap)["int8_t"] = INT8_T; - (*KeywordMap)["i8vec2"] = I8VEC2; - (*KeywordMap)["i8vec3"] = I8VEC3; - (*KeywordMap)["i8vec4"] = I8VEC4; - (*KeywordMap)["uint8_t"] = UINT8_T; - (*KeywordMap)["u8vec2"] = U8VEC2; - (*KeywordMap)["u8vec3"] = U8VEC3; - (*KeywordMap)["u8vec4"] = U8VEC4; - - (*KeywordMap)["int16_t"] = INT16_T; - (*KeywordMap)["i16vec2"] = I16VEC2; - (*KeywordMap)["i16vec3"] = I16VEC3; - (*KeywordMap)["i16vec4"] = I16VEC4; - (*KeywordMap)["uint16_t"] = UINT16_T; - (*KeywordMap)["u16vec2"] = U16VEC2; - (*KeywordMap)["u16vec3"] = U16VEC3; - (*KeywordMap)["u16vec4"] = U16VEC4; - - (*KeywordMap)["int32_t"] = INT32_T; - (*KeywordMap)["i32vec2"] = I32VEC2; - (*KeywordMap)["i32vec3"] = I32VEC3; - (*KeywordMap)["i32vec4"] = I32VEC4; - (*KeywordMap)["uint32_t"] = UINT32_T; - (*KeywordMap)["u32vec2"] = U32VEC2; - (*KeywordMap)["u32vec3"] = U32VEC3; - (*KeywordMap)["u32vec4"] = U32VEC4; - - (*KeywordMap)["float16_t"] = FLOAT16_T; - (*KeywordMap)["f16vec2"] = F16VEC2; - (*KeywordMap)["f16vec3"] = F16VEC3; - (*KeywordMap)["f16vec4"] = F16VEC4; - (*KeywordMap)["f16mat2"] = F16MAT2; - (*KeywordMap)["f16mat3"] = F16MAT3; - (*KeywordMap)["f16mat4"] = F16MAT4; - (*KeywordMap)["f16mat2x2"] = F16MAT2X2; - (*KeywordMap)["f16mat2x3"] = F16MAT2X3; - (*KeywordMap)["f16mat2x4"] = F16MAT2X4; - (*KeywordMap)["f16mat3x2"] = F16MAT3X2; - (*KeywordMap)["f16mat3x3"] = F16MAT3X3; - (*KeywordMap)["f16mat3x4"] = F16MAT3X4; - (*KeywordMap)["f16mat4x2"] = F16MAT4X2; - (*KeywordMap)["f16mat4x3"] = F16MAT4X3; - (*KeywordMap)["f16mat4x4"] = F16MAT4X4; - - (*KeywordMap)["float32_t"] = FLOAT32_T; - (*KeywordMap)["f32vec2"] = F32VEC2; - (*KeywordMap)["f32vec3"] = F32VEC3; - (*KeywordMap)["f32vec4"] = F32VEC4; - (*KeywordMap)["f32mat2"] = F32MAT2; - (*KeywordMap)["f32mat3"] = F32MAT3; - (*KeywordMap)["f32mat4"] = F32MAT4; - (*KeywordMap)["f32mat2x2"] = F32MAT2X2; - (*KeywordMap)["f32mat2x3"] = F32MAT2X3; - (*KeywordMap)["f32mat2x4"] = F32MAT2X4; - (*KeywordMap)["f32mat3x2"] = F32MAT3X2; - (*KeywordMap)["f32mat3x3"] = F32MAT3X3; - (*KeywordMap)["f32mat3x4"] = F32MAT3X4; - (*KeywordMap)["f32mat4x2"] = F32MAT4X2; - (*KeywordMap)["f32mat4x3"] = F32MAT4X3; - (*KeywordMap)["f32mat4x4"] = F32MAT4X4; - (*KeywordMap)["float64_t"] = FLOAT64_T; - (*KeywordMap)["f64vec2"] = F64VEC2; - (*KeywordMap)["f64vec3"] = F64VEC3; - (*KeywordMap)["f64vec4"] = F64VEC4; - (*KeywordMap)["f64mat2"] = F64MAT2; - (*KeywordMap)["f64mat3"] = F64MAT3; - (*KeywordMap)["f64mat4"] = F64MAT4; - (*KeywordMap)["f64mat2x2"] = F64MAT2X2; - (*KeywordMap)["f64mat2x3"] = F64MAT2X3; - (*KeywordMap)["f64mat2x4"] = F64MAT2X4; - (*KeywordMap)["f64mat3x2"] = F64MAT3X2; - (*KeywordMap)["f64mat3x3"] = F64MAT3X3; - (*KeywordMap)["f64mat3x4"] = F64MAT3X4; - (*KeywordMap)["f64mat4x2"] = F64MAT4X2; - (*KeywordMap)["f64mat4x3"] = F64MAT4X3; - (*KeywordMap)["f64mat4x4"] = F64MAT4X4; + {"int8_t",INT8_T}, + {"i8vec2",I8VEC2}, + {"i8vec3",I8VEC3}, + {"i8vec4",I8VEC4}, + {"uint8_t",UINT8_T}, + {"u8vec2",U8VEC2}, + {"u8vec3",U8VEC3}, + {"u8vec4",U8VEC4}, + + {"int16_t",INT16_T}, + {"i16vec2",I16VEC2}, + {"i16vec3",I16VEC3}, + {"i16vec4",I16VEC4}, + {"uint16_t",UINT16_T}, + {"u16vec2",U16VEC2}, + {"u16vec3",U16VEC3}, + {"u16vec4",U16VEC4}, + + {"int32_t",INT32_T}, + {"i32vec2",I32VEC2}, + {"i32vec3",I32VEC3}, + {"i32vec4",I32VEC4}, + {"uint32_t",UINT32_T}, + {"u32vec2",U32VEC2}, + {"u32vec3",U32VEC3}, + {"u32vec4",U32VEC4}, + + {"float16_t",FLOAT16_T}, + {"f16vec2",F16VEC2}, + {"f16vec3",F16VEC3}, + {"f16vec4",F16VEC4}, + {"f16mat2",F16MAT2}, + {"f16mat3",F16MAT3}, + {"f16mat4",F16MAT4}, + {"f16mat2x2",F16MAT2X2}, + {"f16mat2x3",F16MAT2X3}, + {"f16mat2x4",F16MAT2X4}, + {"f16mat3x2",F16MAT3X2}, + {"f16mat3x3",F16MAT3X3}, + {"f16mat3x4",F16MAT3X4}, + {"f16mat4x2",F16MAT4X2}, + {"f16mat4x3",F16MAT4X3}, + {"f16mat4x4",F16MAT4X4}, + + {"float32_t",FLOAT32_T}, + {"f32vec2",F32VEC2}, + {"f32vec3",F32VEC3}, + {"f32vec4",F32VEC4}, + {"f32mat2",F32MAT2}, + {"f32mat3",F32MAT3}, + {"f32mat4",F32MAT4}, + {"f32mat2x2",F32MAT2X2}, + {"f32mat2x3",F32MAT2X3}, + {"f32mat2x4",F32MAT2X4}, + {"f32mat3x2",F32MAT3X2}, + {"f32mat3x3",F32MAT3X3}, + {"f32mat3x4",F32MAT3X4}, + {"f32mat4x2",F32MAT4X2}, + {"f32mat4x3",F32MAT4X3}, + {"f32mat4x4",F32MAT4X4}, + {"float64_t",FLOAT64_T}, + {"f64vec2",F64VEC2}, + {"f64vec3",F64VEC3}, + {"f64vec4",F64VEC4}, + {"f64mat2",F64MAT2}, + {"f64mat3",F64MAT3}, + {"f64mat4",F64MAT4}, + {"f64mat2x2",F64MAT2X2}, + {"f64mat2x3",F64MAT2X3}, + {"f64mat2x4",F64MAT2X4}, + {"f64mat3x2",F64MAT3X2}, + {"f64mat3x3",F64MAT3X3}, + {"f64mat3x4",F64MAT3X4}, + {"f64mat4x2",F64MAT4X2}, + {"f64mat4x3",F64MAT4X3}, + {"f64mat4x4",F64MAT4X4}, // GL_EXT_spirv_intrinsics - (*KeywordMap)["spirv_instruction"] = SPIRV_INSTRUCTION; - (*KeywordMap)["spirv_execution_mode"] = SPIRV_EXECUTION_MODE; - (*KeywordMap)["spirv_execution_mode_id"] = SPIRV_EXECUTION_MODE_ID; - (*KeywordMap)["spirv_decorate"] = SPIRV_DECORATE; - (*KeywordMap)["spirv_decorate_id"] = SPIRV_DECORATE_ID; - (*KeywordMap)["spirv_decorate_string"] = SPIRV_DECORATE_STRING; - (*KeywordMap)["spirv_type"] = SPIRV_TYPE; - (*KeywordMap)["spirv_storage_class"] = SPIRV_STORAGE_CLASS; - (*KeywordMap)["spirv_by_reference"] = SPIRV_BY_REFERENCE; - (*KeywordMap)["spirv_literal"] = SPIRV_LITERAL; -#endif - - (*KeywordMap)["sampler2D"] = SAMPLER2D; - (*KeywordMap)["samplerCube"] = SAMPLERCUBE; - (*KeywordMap)["samplerCubeShadow"] = SAMPLERCUBESHADOW; - (*KeywordMap)["sampler2DArray"] = SAMPLER2DARRAY; - (*KeywordMap)["sampler2DArrayShadow"] = SAMPLER2DARRAYSHADOW; - (*KeywordMap)["isampler2D"] = ISAMPLER2D; - (*KeywordMap)["isampler3D"] = ISAMPLER3D; - (*KeywordMap)["isamplerCube"] = ISAMPLERCUBE; - (*KeywordMap)["isampler2DArray"] = ISAMPLER2DARRAY; - (*KeywordMap)["usampler2D"] = USAMPLER2D; - (*KeywordMap)["usampler3D"] = USAMPLER3D; - (*KeywordMap)["usamplerCube"] = USAMPLERCUBE; - (*KeywordMap)["usampler2DArray"] = USAMPLER2DARRAY; - (*KeywordMap)["sampler3D"] = SAMPLER3D; - (*KeywordMap)["sampler2DShadow"] = SAMPLER2DSHADOW; - - (*KeywordMap)["texture2D"] = TEXTURE2D; - (*KeywordMap)["textureCube"] = TEXTURECUBE; - (*KeywordMap)["texture2DArray"] = TEXTURE2DARRAY; - (*KeywordMap)["itexture2D"] = ITEXTURE2D; - (*KeywordMap)["itexture3D"] = ITEXTURE3D; - (*KeywordMap)["itextureCube"] = ITEXTURECUBE; - (*KeywordMap)["itexture2DArray"] = ITEXTURE2DARRAY; - (*KeywordMap)["utexture2D"] = UTEXTURE2D; - (*KeywordMap)["utexture3D"] = UTEXTURE3D; - (*KeywordMap)["utextureCube"] = UTEXTURECUBE; - (*KeywordMap)["utexture2DArray"] = UTEXTURE2DARRAY; - (*KeywordMap)["texture3D"] = TEXTURE3D; - - (*KeywordMap)["sampler"] = SAMPLER; - (*KeywordMap)["samplerShadow"] = SAMPLERSHADOW; - -#ifndef GLSLANG_WEB - (*KeywordMap)["textureCubeArray"] = TEXTURECUBEARRAY; - (*KeywordMap)["itextureCubeArray"] = ITEXTURECUBEARRAY; - (*KeywordMap)["utextureCubeArray"] = UTEXTURECUBEARRAY; - (*KeywordMap)["samplerCubeArray"] = SAMPLERCUBEARRAY; - (*KeywordMap)["samplerCubeArrayShadow"] = SAMPLERCUBEARRAYSHADOW; - (*KeywordMap)["isamplerCubeArray"] = ISAMPLERCUBEARRAY; - (*KeywordMap)["usamplerCubeArray"] = USAMPLERCUBEARRAY; - (*KeywordMap)["sampler1DArrayShadow"] = SAMPLER1DARRAYSHADOW; - (*KeywordMap)["isampler1DArray"] = ISAMPLER1DARRAY; - (*KeywordMap)["usampler1D"] = USAMPLER1D; - (*KeywordMap)["isampler1D"] = ISAMPLER1D; - (*KeywordMap)["usampler1DArray"] = USAMPLER1DARRAY; - (*KeywordMap)["samplerBuffer"] = SAMPLERBUFFER; - (*KeywordMap)["isampler2DRect"] = ISAMPLER2DRECT; - (*KeywordMap)["usampler2DRect"] = USAMPLER2DRECT; - (*KeywordMap)["isamplerBuffer"] = ISAMPLERBUFFER; - (*KeywordMap)["usamplerBuffer"] = USAMPLERBUFFER; - (*KeywordMap)["sampler2DMS"] = SAMPLER2DMS; - (*KeywordMap)["isampler2DMS"] = ISAMPLER2DMS; - (*KeywordMap)["usampler2DMS"] = USAMPLER2DMS; - (*KeywordMap)["sampler2DMSArray"] = SAMPLER2DMSARRAY; - (*KeywordMap)["isampler2DMSArray"] = ISAMPLER2DMSARRAY; - (*KeywordMap)["usampler2DMSArray"] = USAMPLER2DMSARRAY; - (*KeywordMap)["sampler1D"] = SAMPLER1D; - (*KeywordMap)["sampler1DShadow"] = SAMPLER1DSHADOW; - (*KeywordMap)["sampler2DRect"] = SAMPLER2DRECT; - (*KeywordMap)["sampler2DRectShadow"] = SAMPLER2DRECTSHADOW; - (*KeywordMap)["sampler1DArray"] = SAMPLER1DARRAY; - - (*KeywordMap)["samplerExternalOES"] = SAMPLEREXTERNALOES; // GL_OES_EGL_image_external - - (*KeywordMap)["__samplerExternal2DY2YEXT"] = SAMPLEREXTERNAL2DY2YEXT; // GL_EXT_YUV_target - - (*KeywordMap)["itexture1DArray"] = ITEXTURE1DARRAY; - (*KeywordMap)["utexture1D"] = UTEXTURE1D; - (*KeywordMap)["itexture1D"] = ITEXTURE1D; - (*KeywordMap)["utexture1DArray"] = UTEXTURE1DARRAY; - (*KeywordMap)["textureBuffer"] = TEXTUREBUFFER; - (*KeywordMap)["itexture2DRect"] = ITEXTURE2DRECT; - (*KeywordMap)["utexture2DRect"] = UTEXTURE2DRECT; - (*KeywordMap)["itextureBuffer"] = ITEXTUREBUFFER; - (*KeywordMap)["utextureBuffer"] = UTEXTUREBUFFER; - (*KeywordMap)["texture2DMS"] = TEXTURE2DMS; - (*KeywordMap)["itexture2DMS"] = ITEXTURE2DMS; - (*KeywordMap)["utexture2DMS"] = UTEXTURE2DMS; - (*KeywordMap)["texture2DMSArray"] = TEXTURE2DMSARRAY; - (*KeywordMap)["itexture2DMSArray"] = ITEXTURE2DMSARRAY; - (*KeywordMap)["utexture2DMSArray"] = UTEXTURE2DMSARRAY; - (*KeywordMap)["texture1D"] = TEXTURE1D; - (*KeywordMap)["texture2DRect"] = TEXTURE2DRECT; - (*KeywordMap)["texture1DArray"] = TEXTURE1DARRAY; - - (*KeywordMap)["subpassInput"] = SUBPASSINPUT; - (*KeywordMap)["subpassInputMS"] = SUBPASSINPUTMS; - (*KeywordMap)["isubpassInput"] = ISUBPASSINPUT; - (*KeywordMap)["isubpassInputMS"] = ISUBPASSINPUTMS; - (*KeywordMap)["usubpassInput"] = USUBPASSINPUT; - (*KeywordMap)["usubpassInputMS"] = USUBPASSINPUTMS; - - (*KeywordMap)["f16sampler1D"] = F16SAMPLER1D; - (*KeywordMap)["f16sampler2D"] = F16SAMPLER2D; - (*KeywordMap)["f16sampler3D"] = F16SAMPLER3D; - (*KeywordMap)["f16sampler2DRect"] = F16SAMPLER2DRECT; - (*KeywordMap)["f16samplerCube"] = F16SAMPLERCUBE; - (*KeywordMap)["f16sampler1DArray"] = F16SAMPLER1DARRAY; - (*KeywordMap)["f16sampler2DArray"] = F16SAMPLER2DARRAY; - (*KeywordMap)["f16samplerCubeArray"] = F16SAMPLERCUBEARRAY; - (*KeywordMap)["f16samplerBuffer"] = F16SAMPLERBUFFER; - (*KeywordMap)["f16sampler2DMS"] = F16SAMPLER2DMS; - (*KeywordMap)["f16sampler2DMSArray"] = F16SAMPLER2DMSARRAY; - (*KeywordMap)["f16sampler1DShadow"] = F16SAMPLER1DSHADOW; - (*KeywordMap)["f16sampler2DShadow"] = F16SAMPLER2DSHADOW; - (*KeywordMap)["f16sampler2DRectShadow"] = F16SAMPLER2DRECTSHADOW; - (*KeywordMap)["f16samplerCubeShadow"] = F16SAMPLERCUBESHADOW; - (*KeywordMap)["f16sampler1DArrayShadow"] = F16SAMPLER1DARRAYSHADOW; - (*KeywordMap)["f16sampler2DArrayShadow"] = F16SAMPLER2DARRAYSHADOW; - (*KeywordMap)["f16samplerCubeArrayShadow"] = F16SAMPLERCUBEARRAYSHADOW; - - (*KeywordMap)["f16image1D"] = F16IMAGE1D; - (*KeywordMap)["f16image2D"] = F16IMAGE2D; - (*KeywordMap)["f16image3D"] = F16IMAGE3D; - (*KeywordMap)["f16image2DRect"] = F16IMAGE2DRECT; - (*KeywordMap)["f16imageCube"] = F16IMAGECUBE; - (*KeywordMap)["f16image1DArray"] = F16IMAGE1DARRAY; - (*KeywordMap)["f16image2DArray"] = F16IMAGE2DARRAY; - (*KeywordMap)["f16imageCubeArray"] = F16IMAGECUBEARRAY; - (*KeywordMap)["f16imageBuffer"] = F16IMAGEBUFFER; - (*KeywordMap)["f16image2DMS"] = F16IMAGE2DMS; - (*KeywordMap)["f16image2DMSArray"] = F16IMAGE2DMSARRAY; - - (*KeywordMap)["f16texture1D"] = F16TEXTURE1D; - (*KeywordMap)["f16texture2D"] = F16TEXTURE2D; - (*KeywordMap)["f16texture3D"] = F16TEXTURE3D; - (*KeywordMap)["f16texture2DRect"] = F16TEXTURE2DRECT; - (*KeywordMap)["f16textureCube"] = F16TEXTURECUBE; - (*KeywordMap)["f16texture1DArray"] = F16TEXTURE1DARRAY; - (*KeywordMap)["f16texture2DArray"] = F16TEXTURE2DARRAY; - (*KeywordMap)["f16textureCubeArray"] = F16TEXTURECUBEARRAY; - (*KeywordMap)["f16textureBuffer"] = F16TEXTUREBUFFER; - (*KeywordMap)["f16texture2DMS"] = F16TEXTURE2DMS; - (*KeywordMap)["f16texture2DMSArray"] = F16TEXTURE2DMSARRAY; - - (*KeywordMap)["f16subpassInput"] = F16SUBPASSINPUT; - (*KeywordMap)["f16subpassInputMS"] = F16SUBPASSINPUTMS; - (*KeywordMap)["__explicitInterpAMD"] = EXPLICITINTERPAMD; - (*KeywordMap)["pervertexNV"] = PERVERTEXNV; - (*KeywordMap)["precise"] = PRECISE; - - (*KeywordMap)["rayPayloadNV"] = PAYLOADNV; - (*KeywordMap)["rayPayloadEXT"] = PAYLOADEXT; - (*KeywordMap)["rayPayloadInNV"] = PAYLOADINNV; - (*KeywordMap)["rayPayloadInEXT"] = PAYLOADINEXT; - (*KeywordMap)["hitAttributeNV"] = HITATTRNV; - (*KeywordMap)["hitAttributeEXT"] = HITATTREXT; - (*KeywordMap)["callableDataNV"] = CALLDATANV; - (*KeywordMap)["callableDataEXT"] = CALLDATAEXT; - (*KeywordMap)["callableDataInNV"] = CALLDATAINNV; - (*KeywordMap)["callableDataInEXT"] = CALLDATAINEXT; - (*KeywordMap)["accelerationStructureNV"] = ACCSTRUCTNV; - (*KeywordMap)["accelerationStructureEXT"] = ACCSTRUCTEXT; - (*KeywordMap)["rayQueryEXT"] = RAYQUERYEXT; - (*KeywordMap)["perprimitiveNV"] = PERPRIMITIVENV; - (*KeywordMap)["perviewNV"] = PERVIEWNV; - (*KeywordMap)["taskNV"] = PERTASKNV; - - (*KeywordMap)["fcoopmatNV"] = FCOOPMATNV; - (*KeywordMap)["icoopmatNV"] = ICOOPMATNV; - (*KeywordMap)["ucoopmatNV"] = UCOOPMATNV; - - ReservedSet = new std::unordered_set; - - ReservedSet->insert("common"); - ReservedSet->insert("partition"); - ReservedSet->insert("active"); - ReservedSet->insert("asm"); - ReservedSet->insert("class"); - ReservedSet->insert("union"); - ReservedSet->insert("enum"); - ReservedSet->insert("typedef"); - ReservedSet->insert("template"); - ReservedSet->insert("this"); - ReservedSet->insert("goto"); - ReservedSet->insert("inline"); - ReservedSet->insert("noinline"); - ReservedSet->insert("public"); - ReservedSet->insert("static"); - ReservedSet->insert("extern"); - ReservedSet->insert("external"); - ReservedSet->insert("interface"); - ReservedSet->insert("long"); - ReservedSet->insert("short"); - ReservedSet->insert("half"); - ReservedSet->insert("fixed"); - ReservedSet->insert("unsigned"); - ReservedSet->insert("input"); - ReservedSet->insert("output"); - ReservedSet->insert("hvec2"); - ReservedSet->insert("hvec3"); - ReservedSet->insert("hvec4"); - ReservedSet->insert("fvec2"); - ReservedSet->insert("fvec3"); - ReservedSet->insert("fvec4"); - ReservedSet->insert("sampler3DRect"); - ReservedSet->insert("filter"); - ReservedSet->insert("sizeof"); - ReservedSet->insert("cast"); - ReservedSet->insert("namespace"); - ReservedSet->insert("using"); -#endif -} + {"spirv_instruction",SPIRV_INSTRUCTION}, + {"spirv_execution_mode",SPIRV_EXECUTION_MODE}, + {"spirv_execution_mode_id",SPIRV_EXECUTION_MODE_ID}, + {"spirv_decorate",SPIRV_DECORATE}, + {"spirv_decorate_id",SPIRV_DECORATE_ID}, + {"spirv_decorate_string",SPIRV_DECORATE_STRING}, + {"spirv_type",SPIRV_TYPE}, + {"spirv_storage_class",SPIRV_STORAGE_CLASS}, + {"spirv_by_reference",SPIRV_BY_REFERENCE}, + {"spirv_literal",SPIRV_LITERAL}, + + {"sampler2D",SAMPLER2D}, + {"samplerCube",SAMPLERCUBE}, + {"samplerCubeShadow",SAMPLERCUBESHADOW}, + {"sampler2DArray",SAMPLER2DARRAY}, + {"sampler2DArrayShadow",SAMPLER2DARRAYSHADOW}, + {"isampler2D",ISAMPLER2D}, + {"isampler3D",ISAMPLER3D}, + {"isamplerCube",ISAMPLERCUBE}, + {"isampler2DArray",ISAMPLER2DARRAY}, + {"usampler2D",USAMPLER2D}, + {"usampler3D",USAMPLER3D}, + {"usamplerCube",USAMPLERCUBE}, + {"usampler2DArray",USAMPLER2DARRAY}, + {"sampler3D",SAMPLER3D}, + {"sampler2DShadow",SAMPLER2DSHADOW}, + + {"texture2D",TEXTURE2D}, + {"textureCube",TEXTURECUBE}, + {"texture2DArray",TEXTURE2DARRAY}, + {"itexture2D",ITEXTURE2D}, + {"itexture3D",ITEXTURE3D}, + {"itextureCube",ITEXTURECUBE}, + {"itexture2DArray",ITEXTURE2DARRAY}, + {"utexture2D",UTEXTURE2D}, + {"utexture3D",UTEXTURE3D}, + {"utextureCube",UTEXTURECUBE}, + {"utexture2DArray",UTEXTURE2DARRAY}, + {"texture3D",TEXTURE3D}, + + {"sampler",SAMPLER}, + {"samplerShadow",SAMPLERSHADOW}, + + {"textureCubeArray",TEXTURECUBEARRAY}, + {"itextureCubeArray",ITEXTURECUBEARRAY}, + {"utextureCubeArray",UTEXTURECUBEARRAY}, + {"samplerCubeArray",SAMPLERCUBEARRAY}, + {"samplerCubeArrayShadow",SAMPLERCUBEARRAYSHADOW}, + {"isamplerCubeArray",ISAMPLERCUBEARRAY}, + {"usamplerCubeArray",USAMPLERCUBEARRAY}, + {"sampler1DArrayShadow",SAMPLER1DARRAYSHADOW}, + {"isampler1DArray",ISAMPLER1DARRAY}, + {"usampler1D",USAMPLER1D}, + {"isampler1D",ISAMPLER1D}, + {"usampler1DArray",USAMPLER1DARRAY}, + {"samplerBuffer",SAMPLERBUFFER}, + {"isampler2DRect",ISAMPLER2DRECT}, + {"usampler2DRect",USAMPLER2DRECT}, + {"isamplerBuffer",ISAMPLERBUFFER}, + {"usamplerBuffer",USAMPLERBUFFER}, + {"sampler2DMS",SAMPLER2DMS}, + {"isampler2DMS",ISAMPLER2DMS}, + {"usampler2DMS",USAMPLER2DMS}, + {"sampler2DMSArray",SAMPLER2DMSARRAY}, + {"isampler2DMSArray",ISAMPLER2DMSARRAY}, + {"usampler2DMSArray",USAMPLER2DMSARRAY}, + {"sampler1D",SAMPLER1D}, + {"sampler1DShadow",SAMPLER1DSHADOW}, + {"sampler2DRect",SAMPLER2DRECT}, + {"sampler2DRectShadow",SAMPLER2DRECTSHADOW}, + {"sampler1DArray",SAMPLER1DARRAY}, + + {"samplerExternalOES", SAMPLEREXTERNALOES}, // GL_OES_EGL_image_external + {"__samplerExternal2DY2YEXT", SAMPLEREXTERNAL2DY2YEXT}, // GL_EXT_YUV_target + + {"itexture1DArray",ITEXTURE1DARRAY}, + {"utexture1D",UTEXTURE1D}, + {"itexture1D",ITEXTURE1D}, + {"utexture1DArray",UTEXTURE1DARRAY}, + {"textureBuffer",TEXTUREBUFFER}, + {"itexture2DRect",ITEXTURE2DRECT}, + {"utexture2DRect",UTEXTURE2DRECT}, + {"itextureBuffer",ITEXTUREBUFFER}, + {"utextureBuffer",UTEXTUREBUFFER}, + {"texture2DMS",TEXTURE2DMS}, + {"itexture2DMS",ITEXTURE2DMS}, + {"utexture2DMS",UTEXTURE2DMS}, + {"texture2DMSArray",TEXTURE2DMSARRAY}, + {"itexture2DMSArray",ITEXTURE2DMSARRAY}, + {"utexture2DMSArray",UTEXTURE2DMSARRAY}, + {"texture1D",TEXTURE1D}, + {"texture2DRect",TEXTURE2DRECT}, + {"texture1DArray",TEXTURE1DARRAY}, + + {"attachmentEXT",ATTACHMENTEXT}, + {"iattachmentEXT",IATTACHMENTEXT}, + {"uattachmentEXT",UATTACHMENTEXT}, + + {"subpassInput",SUBPASSINPUT}, + {"subpassInputMS",SUBPASSINPUTMS}, + {"isubpassInput",ISUBPASSINPUT}, + {"isubpassInputMS",ISUBPASSINPUTMS}, + {"usubpassInput",USUBPASSINPUT}, + {"usubpassInputMS",USUBPASSINPUTMS}, + + {"f16sampler1D",F16SAMPLER1D}, + {"f16sampler2D",F16SAMPLER2D}, + {"f16sampler3D",F16SAMPLER3D}, + {"f16sampler2DRect",F16SAMPLER2DRECT}, + {"f16samplerCube",F16SAMPLERCUBE}, + {"f16sampler1DArray",F16SAMPLER1DARRAY}, + {"f16sampler2DArray",F16SAMPLER2DARRAY}, + {"f16samplerCubeArray",F16SAMPLERCUBEARRAY}, + {"f16samplerBuffer",F16SAMPLERBUFFER}, + {"f16sampler2DMS",F16SAMPLER2DMS}, + {"f16sampler2DMSArray",F16SAMPLER2DMSARRAY}, + {"f16sampler1DShadow",F16SAMPLER1DSHADOW}, + {"f16sampler2DShadow",F16SAMPLER2DSHADOW}, + {"f16sampler2DRectShadow",F16SAMPLER2DRECTSHADOW}, + {"f16samplerCubeShadow",F16SAMPLERCUBESHADOW}, + {"f16sampler1DArrayShadow",F16SAMPLER1DARRAYSHADOW}, + {"f16sampler2DArrayShadow",F16SAMPLER2DARRAYSHADOW}, + {"f16samplerCubeArrayShadow",F16SAMPLERCUBEARRAYSHADOW}, + + {"f16image1D",F16IMAGE1D}, + {"f16image2D",F16IMAGE2D}, + {"f16image3D",F16IMAGE3D}, + {"f16image2DRect",F16IMAGE2DRECT}, + {"f16imageCube",F16IMAGECUBE}, + {"f16image1DArray",F16IMAGE1DARRAY}, + {"f16image2DArray",F16IMAGE2DARRAY}, + {"f16imageCubeArray",F16IMAGECUBEARRAY}, + {"f16imageBuffer",F16IMAGEBUFFER}, + {"f16image2DMS",F16IMAGE2DMS}, + {"f16image2DMSArray",F16IMAGE2DMSARRAY}, + + {"f16texture1D",F16TEXTURE1D}, + {"f16texture2D",F16TEXTURE2D}, + {"f16texture3D",F16TEXTURE3D}, + {"f16texture2DRect",F16TEXTURE2DRECT}, + {"f16textureCube",F16TEXTURECUBE}, + {"f16texture1DArray",F16TEXTURE1DARRAY}, + {"f16texture2DArray",F16TEXTURE2DARRAY}, + {"f16textureCubeArray",F16TEXTURECUBEARRAY}, + {"f16textureBuffer",F16TEXTUREBUFFER}, + {"f16texture2DMS",F16TEXTURE2DMS}, + {"f16texture2DMSArray",F16TEXTURE2DMSARRAY}, + + {"f16subpassInput",F16SUBPASSINPUT}, + {"f16subpassInputMS",F16SUBPASSINPUTMS}, + {"__explicitInterpAMD",EXPLICITINTERPAMD}, + {"pervertexNV",PERVERTEXNV}, + {"pervertexEXT",PERVERTEXEXT}, + {"precise",PRECISE}, + + {"rayPayloadNV",PAYLOADNV}, + {"rayPayloadEXT",PAYLOADEXT}, + {"rayPayloadInNV",PAYLOADINNV}, + {"rayPayloadInEXT",PAYLOADINEXT}, + {"hitAttributeNV",HITATTRNV}, + {"hitAttributeEXT",HITATTREXT}, + {"callableDataNV",CALLDATANV}, + {"callableDataEXT",CALLDATAEXT}, + {"callableDataInNV",CALLDATAINNV}, + {"callableDataInEXT",CALLDATAINEXT}, + {"accelerationStructureNV",ACCSTRUCTNV}, + {"accelerationStructureEXT",ACCSTRUCTEXT}, + {"rayQueryEXT",RAYQUERYEXT}, + {"perprimitiveNV",PERPRIMITIVENV}, + {"perviewNV",PERVIEWNV}, + {"taskNV",PERTASKNV}, + {"perprimitiveEXT",PERPRIMITIVEEXT}, + {"taskPayloadSharedEXT",TASKPAYLOADWORKGROUPEXT}, + + {"fcoopmatNV",FCOOPMATNV}, + {"icoopmatNV",ICOOPMATNV}, + {"ucoopmatNV",UCOOPMATNV}, + + {"coopmat",COOPMAT}, + + {"hitObjectNV",HITOBJECTNV}, + {"hitObjectAttributeNV",HITOBJECTATTRNV}, +}; +const std::unordered_set ReservedSet { + "common", + "partition", + "active", + "asm", + "class", + "union", + "enum", + "typedef", + "template", + "this", + "goto", + "inline", + "noinline", + "public", + "static", + "extern", + "external", + "interface", + "long", + "short", + "half", + "fixed", + "unsigned", + "input", + "output", + "hvec2", + "hvec3", + "hvec4", + "fvec2", + "fvec3", + "fvec4", + "sampler3DRect", + "filter", + "sizeof", + "cast", + "namespace", + "using", +}; -void TScanContext::deleteKeywordMap() -{ - delete KeywordMap; - KeywordMap = nullptr; -#ifndef GLSLANG_WEB - delete ReservedSet; - ReservedSet = nullptr; -#endif } +namespace glslang { + // Called by yylex to get the next token. // Returning 0 implies end of input. int TScanContext::tokenize(TPpContext* pp, TParserToken& token) @@ -892,14 +875,12 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token) case PpAtomConstInt: parserToken->sType.lex.i = ppToken.ival; return INTCONSTANT; case PpAtomConstUint: parserToken->sType.lex.i = ppToken.ival; return UINTCONSTANT; case PpAtomConstFloat: parserToken->sType.lex.d = ppToken.dval; return FLOATCONSTANT; -#ifndef GLSLANG_WEB case PpAtomConstInt16: parserToken->sType.lex.i = ppToken.ival; return INT16CONSTANT; case PpAtomConstUint16: parserToken->sType.lex.i = ppToken.ival; return UINT16CONSTANT; case PpAtomConstInt64: parserToken->sType.lex.i64 = ppToken.i64val; return INT64CONSTANT; case PpAtomConstUint64: parserToken->sType.lex.i64 = ppToken.i64val; return UINT64CONSTANT; case PpAtomConstDouble: parserToken->sType.lex.d = ppToken.dval; return DOUBLECONSTANT; case PpAtomConstFloat16: parserToken->sType.lex.d = ppToken.dval; return FLOAT16CONSTANT; -#endif case PpAtomIdentifier: { int token = tokenizeIdentifier(); @@ -921,13 +902,11 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token) int TScanContext::tokenizeIdentifier() { -#ifndef GLSLANG_WEB - if (ReservedSet->find(tokenText) != ReservedSet->end()) + if (ReservedSet.find(tokenText) != ReservedSet.end()) return reservedWord(); -#endif - auto it = KeywordMap->find(tokenText); - if (it == KeywordMap->end()) { + auto it = KeywordMap.find(tokenText); + if (it == KeywordMap.end()) { // Should have an identifier of some sort return identifierOrType(); } @@ -936,6 +915,7 @@ int TScanContext::tokenizeIdentifier() switch (keyword) { case CONST: case UNIFORM: + case TILEIMAGEEXT: case IN: case OUT: case INOUT: @@ -1046,7 +1026,6 @@ int TScanContext::tokenizeIdentifier() return identifierOrReserved(reserved); } -#ifndef GLSLANG_WEB case NOPERSPECTIVE: if (parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation)) return keyword; @@ -1072,12 +1051,18 @@ int TScanContext::tokenizeIdentifier() parseContext.extensionTurnedOn(E_GL_NV_ray_tracing)) return keyword; return identifierOrType(); + case ACCSTRUCTEXT: + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing) || + parseContext.extensionTurnedOn(E_GL_EXT_ray_query) || + parseContext.extensionTurnedOn(E_GL_NV_displacement_micromap)) + return keyword; + return identifierOrType(); case PAYLOADEXT: case PAYLOADINEXT: case HITATTREXT: case CALLDATAEXT: case CALLDATAINEXT: - case ACCSTRUCTEXT: if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing) || parseContext.extensionTurnedOn(E_GL_EXT_ray_query)) @@ -1133,7 +1118,7 @@ int TScanContext::tokenizeIdentifier() case SUBROUTINE: return es30ReservedFromGLSL(400); -#endif + case SHARED: if ((parseContext.isEsProfile() && parseContext.version < 300) || (!parseContext.isEsProfile() && parseContext.version < 140)) @@ -1168,7 +1153,6 @@ int TScanContext::tokenizeIdentifier() case MAT4X4: return matNxM(); -#ifndef GLSLANG_WEB case DMAT2: case DMAT3: case DMAT4: @@ -1473,7 +1457,6 @@ int TScanContext::tokenizeIdentifier() return keyword; else return identifierOrType(); -#endif case UINT: case UVEC2: @@ -1491,6 +1474,12 @@ int TScanContext::tokenizeIdentifier() case USAMPLERCUBE: case USAMPLER2DARRAY: afterType = true; + if (keyword == SAMPLER2DARRAY || keyword == SAMPLER2DARRAYSHADOW) { + if (!parseContext.isEsProfile() && + (parseContext.extensionTurnedOn(E_GL_EXT_texture_array) || parseContext.symbolTable.atBuiltInLevel())) { + return keyword; + } + } return nonreservedKeyword(300, 130); case SAMPLER3D: @@ -1528,13 +1517,18 @@ int TScanContext::tokenizeIdentifier() else return identifierOrType(); -#ifndef GLSLANG_WEB case ISAMPLER1D: case ISAMPLER1DARRAY: case SAMPLER1DARRAYSHADOW: case USAMPLER1D: case USAMPLER1DARRAY: afterType = true; + if (keyword == SAMPLER1DARRAYSHADOW) { + if (!parseContext.isEsProfile() && + (parseContext.extensionTurnedOn(E_GL_EXT_texture_array) || parseContext.symbolTable.atBuiltInLevel())) { + return keyword; + } + } return es30ReservedFromGLSL(130); case ISAMPLER2DRECT: case USAMPLER2DRECT: @@ -1604,7 +1598,9 @@ int TScanContext::tokenizeIdentifier() if (parseContext.isEsProfile() && parseContext.version == 300) reservedWord(); else if ((parseContext.isEsProfile() && parseContext.version < 300) || - (!parseContext.isEsProfile() && parseContext.version < 130)) + ((!parseContext.isEsProfile() && parseContext.version < 130) && + !parseContext.symbolTable.atBuiltInLevel() && + !parseContext.extensionTurnedOn(E_GL_EXT_texture_array))) return identifierOrType(); return keyword; @@ -1652,6 +1648,9 @@ int TScanContext::tokenizeIdentifier() case ISUBPASSINPUTMS: case USUBPASSINPUT: case USUBPASSINPUTMS: + case ATTACHMENTEXT: + case IATTACHMENTEXT: + case UATTACHMENTEXT: if (parseContext.spvVersion.vulkan > 0) return keyword; else @@ -1719,6 +1718,12 @@ int TScanContext::tokenizeIdentifier() return keyword; return identifierOrType(); + case PERVERTEXEXT: + if ((!parseContext.isEsProfile() && parseContext.version >= 450) || + parseContext.extensionTurnedOn(E_GL_EXT_fragment_shader_barycentric)) + return keyword; + return identifierOrType(); + case PRECISE: if ((parseContext.isEsProfile() && (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) || @@ -1733,12 +1738,18 @@ int TScanContext::tokenizeIdentifier() case PERPRIMITIVENV: case PERVIEWNV: case PERTASKNV: - if ((!parseContext.isEsProfile() && parseContext.version >= 450) || - (parseContext.isEsProfile() && parseContext.version >= 320) || + if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionTurnedOn(E_GL_NV_mesh_shader)) return keyword; return identifierOrType(); + case PERPRIMITIVEEXT: + case TASKPAYLOADWORKGROUPEXT: + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_mesh_shader)) + return keyword; + return identifierOrType(); + case FCOOPMATNV: afterType = true; if (parseContext.symbolTable.atBuiltInLevel() || @@ -1754,6 +1765,13 @@ int TScanContext::tokenizeIdentifier() return keyword; return identifierOrType(); + case COOPMAT: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_KHR_cooperative_matrix)) + return keyword; + return identifierOrType(); + case DEMOTE: if (parseContext.extensionTurnedOn(E_GL_EXT_demote_to_helper_invocation)) return keyword; @@ -1774,7 +1792,20 @@ int TScanContext::tokenizeIdentifier() parseContext.extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) return keyword; return identifierOrType(); -#endif + + case HITOBJECTNV: + if (parseContext.symbolTable.atBuiltInLevel() || + (!parseContext.isEsProfile() && parseContext.version >= 460 + && parseContext.extensionTurnedOn(E_GL_NV_shader_invocation_reorder))) + return keyword; + return identifierOrType(); + + case HITOBJECTATTRNV: + if (parseContext.symbolTable.atBuiltInLevel() || + (!parseContext.isEsProfile() && parseContext.version >= 460 + && parseContext.extensionTurnedOn(E_GL_NV_shader_invocation_reorder))) + return keyword; + return identifierOrType(); default: parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc); diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index bcf2c33ff7..40aeaa7cf3 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include "SymbolTable.h" #include "ParseHelper.h" #include "Scan.h" @@ -57,7 +58,6 @@ #endif #include "../Include/ShHandle.h" -#include "../../OGLCompilersDLL/InitializeDll.h" #include "preprocessor/PpContext.h" @@ -81,6 +81,12 @@ namespace { // anonymous namespace for file-local functions and symbols // Shared global; access should be protected by a global mutex/critical section. int NumberOfClients = 0; +// global initialization lock +#ifndef DISABLE_THREAD_SUPPORT +std::mutex init_lock; +#endif + + using namespace glslang; // Create a language specific version of parseables. @@ -295,14 +301,6 @@ void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int versi EShLanguage language, EShSource source, TInfoSink& infoSink, TSymbolTable** commonTable, TSymbolTable** symbolTables) { -#ifdef GLSLANG_WEB - profile = EEsProfile; - version = 310; -#elif defined(GLSLANG_ANGLE) - profile = ECoreProfile; - version = 450; -#endif - (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]); InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, source, infoSink, *symbolTables[language]); @@ -319,14 +317,6 @@ void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int versi // bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TSymbolTable** symbolTables, int version, EProfile profile, const SpvVersion& spvVersion, EShSource source) { -#ifdef GLSLANG_WEB - profile = EEsProfile; - version = 310; -#elif defined(GLSLANG_ANGLE) - profile = ECoreProfile; - version = 450; -#endif - std::unique_ptr builtInParseables(CreateBuiltInParseables(infoSink, source)); if (builtInParseables == nullptr) @@ -349,7 +339,6 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TS InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, source, infoSink, commonTable, symbolTables); -#ifndef GLSLANG_WEB // check for tessellation if ((profile != EEsProfile && version >= 150) || (profile == EEsProfile && version >= 310)) { @@ -371,7 +360,6 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TS InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source, infoSink, commonTable, symbolTables); -#ifndef GLSLANG_ANGLE // check for ray tracing stages if (profile != EEsProfile && version >= 450) { InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source, @@ -391,16 +379,14 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TS // check for mesh if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) - InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMeshNV, source, + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMesh, source, infoSink, commonTable, symbolTables); // check for task if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) - InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source, + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTask, source, infoSink, commonTable, symbolTables); -#endif // !GLSLANG_ANGLE -#endif // !GLSLANG_WEB return true; } @@ -437,18 +423,17 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& sp TInfoSink infoSink; // Make sure only one thread tries to do this at a time - glslang::GetGlobalLock(); +#ifndef DISABLE_THREAD_SUPPORT + const std::lock_guard lock(init_lock); +#endif // See if it's already been done for this version/profile combination int versionIndex = MapVersionToIndex(version); int spvVersionIndex = MapSpvVersionToIndex(spvVersion); int profileIndex = MapProfileToIndex(profile); int sourceIndex = MapSourceToIndex(source); - if (CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][EPcGeneral]) { - glslang::ReleaseGlobalLock(); - + if (CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][EPcGeneral]) return; - } // Switch to a new pool TPoolAllocator& previousAllocator = GetThreadPoolAllocator(); @@ -495,20 +480,16 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& sp delete builtInPoolAllocator; SetThreadPoolAllocator(&previousAllocator); - - glslang::ReleaseGlobalLock(); } // Function to Print all builtins void DumpBuiltinSymbolTable(TInfoSink& infoSink, const TSymbolTable& symbolTable) { -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) infoSink.debug << "BuiltinSymbolTable {\n"; symbolTable.dump(infoSink, true); infoSink.debug << "}\n"; -#endif } // Return true if the shader was correctly specified for version/profile/stage. @@ -606,7 +587,6 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo break; } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // Correct for stage type... switch (stage) { case EShLangGeometry: @@ -650,14 +630,15 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo version = 460; } break; - case EShLangMeshNV: - case EShLangTaskNV: + case EShLangMesh: + case EShLangTask: if ((profile == EEsProfile && version < 320) || (profile != EEsProfile && version < 450)) { correct = false; infoSink.info.message(EPrefixError, "#version: mesh/task shaders require es profile with version 320 or above, or non-es profile with version 450 or above"); version = profile == EEsProfile ? 320 : 450; } + break; default: break; } @@ -694,7 +675,6 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo break; } } -#endif return correct; } @@ -813,6 +793,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 #version 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. @@ -820,7 +801,8 @@ bool ProcessDeferred( bool requireNonempty, TShader::Includer& includer, const std::string sourceEntryPointName = "", - const TEnvironment* environment = nullptr) // optional way of fully setting all versions, overriding the above + const TEnvironment* environment = nullptr, // optional way of fully setting all versions, overriding the above + bool compileOnly = false) { // This must be undone (.pop()) by the caller, after it finishes consuming the created tree. GetThreadPoolAllocator().push(); @@ -883,7 +865,6 @@ bool ProcessDeferred( : userInput.scanVersion(version, profile, versionNotFirstToken); bool versionNotFound = version == 0; if (forceDefaultVersionAndProfile && source == EShSourceGlsl) { -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound && (version != defaultVersion || profile != defaultProfile)) { compiler->infoSink.info << "Warning, (version, profile) forced to be (" @@ -891,7 +872,7 @@ bool ProcessDeferred( << "), while in source code it is (" << version << ", " << ProfileName(profile) << ")\n"; } -#endif + if (versionNotFound) { versionNotFirstToken = false; versionNotFirst = false; @@ -900,19 +881,13 @@ 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); -#ifdef GLSLANG_WEB - profile = EEsProfile; - version = 310; -#elif defined(GLSLANG_ANGLE) - profile = ECoreProfile; - version = 450; -#endif - bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst)); -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) bool warnVersionNotFirst = false; if (! versionWillBeError && versionNotFirstToken) { if (messages & EShMsgRelaxedErrors) @@ -920,7 +895,6 @@ bool ProcessDeferred( else versionWillBeError = true; } -#endif intermediate.setSource(source); intermediate.setVersion(version); @@ -974,6 +948,7 @@ bool ProcessDeferred( std::unique_ptr parseContext(CreateParseContext(*symbolTable, intermediate, version, profile, source, stage, compiler->infoSink, spvVersion, forwardCompatible, messages, false, sourceEntryPointName)); + parseContext->compileOnly = compileOnly; TPpContext ppContext(*parseContext, names[numPre] ? names[numPre] : "", includer); // only GLSL (bison triggered, really) needs an externally set scan context @@ -985,13 +960,11 @@ bool ProcessDeferred( parseContext->setLimits(*resources); if (! goodVersion) parseContext->addError(); -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (warnVersionNotFirst) { TSourceLoc loc; loc.init(); parseContext->warn(loc, "Illegal to have non-comment, non-whitespace tokens before #version", "#version", ""); } -#endif parseContext->initializeExtensionBehavior(); @@ -1023,8 +996,6 @@ bool ProcessDeferred( return success; } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - // Responsible for keeping track of the most recent source string and line in // the preprocessor and outputting newlines appropriately if the source string // or line changes. @@ -1102,8 +1073,8 @@ struct DoPreprocessing { EShOptimizationLevel, EShMessages) { // This is a list of tokens that do not require a space before or after. - static const std::string unNeededSpaceTokens = ";()[]"; - static const std::string noSpaceBeforeTokens = ","; + static const std::string noNeededSpaceBeforeTokens = ";)[].,"; + static const std::string noNeededSpaceAfterTokens = ".(["; glslang::TPpToken ppToken; parseContext.setScanner(&input); @@ -1176,6 +1147,7 @@ struct DoPreprocessing { }); int lastToken = EndOfInput; // lastToken records the last token processed. + std::string lastTokenName; do { int token = ppContext.tokenize(ppToken); if (token == EndOfInput) @@ -1194,12 +1166,23 @@ struct DoPreprocessing { // Output a space in between tokens, but not at the start of a line, // and also not around special tokens. This helps with readability // and consistency. - if (!isNewString && !isNewLine && lastToken != EndOfInput && - (unNeededSpaceTokens.find((char)token) == std::string::npos) && - (unNeededSpaceTokens.find((char)lastToken) == std::string::npos) && - (noSpaceBeforeTokens.find((char)token) == std::string::npos)) { - outputBuffer += ' '; + if (!isNewString && !isNewLine && lastToken != EndOfInput) { + // left parenthesis need a leading space, except it is in a function-call-like context. + // examples: `for (xxx)`, `a * (b + c)`, `vec(2.0)`, `foo(x, y, z)` + if (token == '(') { + if (lastToken != PpAtomIdentifier || + lastTokenName == "if" || + lastTokenName == "for" || + lastTokenName == "while" || + lastTokenName == "switch") + outputBuffer += ' '; + } else if ((noNeededSpaceBeforeTokens.find((char)token) == std::string::npos) && + (noNeededSpaceAfterTokens.find((char)lastToken) == std::string::npos)) { + outputBuffer += ' '; + } } + if (token == PpAtomIdentifier) + lastTokenName = ppToken.name; lastToken = token; if (token == PpAtomConstString) outputBuffer += "\""; @@ -1221,8 +1204,6 @@ struct DoPreprocessing { std::string* outputString; }; -#endif - // DoFullParse is a valid ProcessingConext template argument for fully // parsing the shader. It populates the "intermediate" with the AST. struct DoFullParse{ @@ -1246,16 +1227,13 @@ struct DoFullParse{ parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors. No code generated.\n\n"; } -#ifndef GLSLANG_ANGLE if (messages & EShMsgAST) intermediate.output(parseContext.infoSink, true); -#endif return success; } }; -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // Take a single compilation unit, and run the preprocessor on it. // Return: True if there were no issues found in preprocessing, // False if during preprocessing any unknown version, pragmas or @@ -1275,6 +1253,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,11 +1264,10 @@ 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); } -#endif // // do a partial compile on the given strings for a single compilation unit @@ -1314,19 +1292,21 @@ 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. TShader::Includer& includer, const std::string sourceEntryPointName = "", - TEnvironment* environment = nullptr) + TEnvironment* environment = nullptr, + bool compileOnly = false) { 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); + true, includer, sourceEntryPointName, environment, compileOnly); } } // end anonymous namespace for local functions @@ -1336,23 +1316,14 @@ bool CompileDeferred( // int ShInitialize() { - glslang::InitGlobalLock(); - - if (! InitProcess()) - return 0; - - glslang::GetGlobalLock(); +#ifndef DISABLE_THREAD_SUPPORT + const std::lock_guard lock(init_lock); +#endif ++NumberOfClients; if (PerProcessGPA == nullptr) PerProcessGPA = new TPoolAllocator(); - glslang::TScanContext::fillInKeywordMap(); -#ifdef ENABLE_HLSL - glslang::HlslScanContext::fillInKeywordMap(); -#endif - - glslang::ReleaseGlobalLock(); return 1; } @@ -1361,31 +1332,22 @@ int ShInitialize() // objects. // -ShHandle ShConstructCompiler(const EShLanguage language, int debugOptions) +ShHandle ShConstructCompiler(const EShLanguage language, int /*debugOptions unused*/) { - if (!InitThread()) - return 0; - - TShHandleBase* base = static_cast(ConstructCompiler(language, debugOptions)); + TShHandleBase* base = static_cast(ConstructCompiler(language, 0)); return reinterpret_cast(base); } -ShHandle ShConstructLinker(const EShExecutable executable, int debugOptions) +ShHandle ShConstructLinker(const EShExecutable executable, int /*debugOptions unused*/) { - if (!InitThread()) - return 0; - - TShHandleBase* base = static_cast(ConstructLinker(executable, debugOptions)); + TShHandleBase* base = static_cast(ConstructLinker(executable, 0)); return reinterpret_cast(base); } ShHandle ShConstructUniformMap() { - if (!InitThread()) - return 0; - TShHandleBase* base = static_cast(ConstructUniformMap()); return reinterpret_cast(base); @@ -1393,7 +1355,7 @@ ShHandle ShConstructUniformMap() void ShDestruct(ShHandle handle) { - if (handle == 0) + if (handle == nullptr) return; TShHandleBase* base = static_cast(handle); @@ -1411,14 +1373,13 @@ void ShDestruct(ShHandle handle) // int ShFinalize() { - glslang::GetGlobalLock(); +#ifndef DISABLE_THREAD_SUPPORT + const std::lock_guard lock(init_lock); +#endif --NumberOfClients; assert(NumberOfClients >= 0); - bool finalize = NumberOfClients == 0; - if (! finalize) { - glslang::ReleaseGlobalLock(); + if (NumberOfClients > 0) return 1; - } for (int version = 0; version < VersionCount; ++version) { for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) { @@ -1426,7 +1387,7 @@ int ShFinalize() for (int source = 0; source < SourceCount; ++source) { for (int stage = 0; stage < EShLangCount; ++stage) { delete SharedSymbolTables[version][spvVersion][p][source][stage]; - SharedSymbolTables[version][spvVersion][p][source][stage] = 0; + SharedSymbolTables[version][spvVersion][p][source][stage] = nullptr; } } } @@ -1439,7 +1400,7 @@ int ShFinalize() for (int source = 0; source < SourceCount; ++source) { for (int pc = 0; pc < EPcCount; ++pc) { delete CommonSymbolTable[version][spvVersion][p][source][pc]; - CommonSymbolTable[version][spvVersion][p][source][pc] = 0; + CommonSymbolTable[version][spvVersion][p][source][pc] = nullptr; } } } @@ -1451,12 +1412,6 @@ int ShFinalize() PerProcessGPA = nullptr; } - glslang::TScanContext::deleteKeywordMap(); -#ifdef ENABLE_HLSL - glslang::HlslScanContext::deleteKeywordMap(); -#endif - - glslang::ReleaseGlobalLock(); return 1; } @@ -1478,27 +1433,31 @@ int ShCompile( int /*debugOptions*/, int defaultVersion, // use 100 for ES environment, 110 for desktop bool forwardCompatible, // give errors for use of deprecated features - EShMessages messages // warnings/errors/AST; things to print out + EShMessages messages, // warnings/errors/AST; things to print out, + const char *shaderFileName // the filename ) { // Map the generic handle to the C++ object - if (handle == 0) + if (handle == nullptr) return 0; TShHandleBase* base = reinterpret_cast(handle); TCompiler* compiler = base->getAsCompiler(); - if (compiler == 0) + if (compiler == nullptr) return 0; SetThreadPoolAllocator(compiler->getPool()); compiler->infoSink.info.erase(); compiler->infoSink.debug.erase(); + compiler->infoSink.info.setShaderFileName(shaderFileName); + compiler->infoSink.debug.setShaderFileName(shaderFileName); + 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); // @@ -1527,13 +1486,13 @@ int ShLinkExt( const ShHandle compHandles[], const int numHandles) { - if (linkHandle == 0 || numHandles == 0) + if (linkHandle == nullptr || numHandles == 0) return 0; THandleList cObjects; for (int i = 0; i < numHandles; ++i) { - if (compHandles[i] == 0) + if (compHandles[i] == nullptr) return 0; TShHandleBase* base = reinterpret_cast(compHandles[i]); if (base->getAsLinker()) { @@ -1542,18 +1501,17 @@ int ShLinkExt( if (base->getAsCompiler()) cObjects.push_back(base->getAsCompiler()); - if (cObjects[i] == 0) + if (cObjects[i] == nullptr) return 0; } TShHandleBase* base = reinterpret_cast(linkHandle); TLinker* linker = static_cast(base->getAsLinker()); - SetThreadPoolAllocator(linker->getPool()); - - if (linker == 0) + if (linker == nullptr) return 0; - + + SetThreadPoolAllocator(linker->getPool()); linker->infoSink.info.erase(); for (int i = 0; i < numHandles; ++i) { @@ -1576,7 +1534,7 @@ int ShLinkExt( // void ShSetEncryptionMethod(ShHandle handle) { - if (handle == 0) + if (handle == nullptr) return; } @@ -1585,8 +1543,8 @@ void ShSetEncryptionMethod(ShHandle handle) // const char* ShGetInfoLog(const ShHandle handle) { - if (handle == 0) - return 0; + if (handle == nullptr) + return nullptr; TShHandleBase* base = static_cast(handle); TInfoSink* infoSink; @@ -1596,7 +1554,7 @@ const char* ShGetInfoLog(const ShHandle handle) else if (base->getAsLinker()) infoSink = &(base->getAsLinker()->getInfoSink()); else - return 0; + return nullptr; infoSink->info << infoSink->debug.c_str(); return infoSink->info.c_str(); @@ -1608,14 +1566,14 @@ const char* ShGetInfoLog(const ShHandle handle) // const void* ShGetExecutable(const ShHandle handle) { - if (handle == 0) - return 0; + if (handle == nullptr) + return nullptr; TShHandleBase* base = reinterpret_cast(handle); TLinker* linker = static_cast(base->getAsLinker()); - if (linker == 0) - return 0; + if (linker == nullptr) + return nullptr; return linker->getObjectCode(); } @@ -1630,13 +1588,13 @@ const void* ShGetExecutable(const ShHandle handle) // int ShSetVirtualAttributeBindings(const ShHandle handle, const ShBindingTable* table) { - if (handle == 0) + if (handle == nullptr) return 0; TShHandleBase* base = reinterpret_cast(handle); TLinker* linker = static_cast(base->getAsLinker()); - if (linker == 0) + if (linker == nullptr) return 0; linker->setAppAttributeBindings(table); @@ -1649,13 +1607,13 @@ int ShSetVirtualAttributeBindings(const ShHandle handle, const ShBindingTable* t // int ShSetFixedAttributeBindings(const ShHandle handle, const ShBindingTable* table) { - if (handle == 0) + if (handle == nullptr) return 0; TShHandleBase* base = reinterpret_cast(handle); TLinker* linker = static_cast(base->getAsLinker()); - if (linker == 0) + if (linker == nullptr) return 0; linker->setFixedAttributeBindings(table); @@ -1667,12 +1625,12 @@ int ShSetFixedAttributeBindings(const ShHandle handle, const ShBindingTable* tab // int ShExcludeAttributes(const ShHandle handle, int *attributes, int count) { - if (handle == 0) + if (handle == nullptr) return 0; TShHandleBase* base = reinterpret_cast(handle); TLinker* linker = static_cast(base->getAsLinker()); - if (linker == 0) + if (linker == nullptr) return 0; linker->setExcludedAttributes(attributes, count); @@ -1688,12 +1646,12 @@ int ShExcludeAttributes(const ShHandle handle, int *attributes, int count) // int ShGetUniformLocation(const ShHandle handle, const char* name) { - if (handle == 0) + if (handle == nullptr) return -1; TShHandleBase* base = reinterpret_cast(handle); TUniformMap* uniformMap= base->getAsUniformMap(); - if (uniformMap == 0) + if (uniformMap == nullptr) return -1; return uniformMap->getLocation(name); @@ -1758,8 +1716,12 @@ class TDeferredCompiler : public TCompiler { virtual bool compile(TIntermNode*, int = 0, EProfile = ENoProfile) { return true; } }; +TIoMapper* GetGlslIoMapper() { + return static_cast(new TGlslIoMapper()); +} + 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,12 +1790,17 @@ void TShader::setUniqueId(unsigned long long id) intermediate->setUniqueId(id); } +void TShader::setOverrideVersion(int version) +{ + overrideVersion = version; +} + +void TShader::setDebugInfo(bool debugInfo) { intermediate->setDebugInfo(debugInfo); } 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 - // Set binding base for given resource type void TShader::setShiftBinding(TResourceType res, unsigned int base) { intermediate->setShiftBinding(res, base); @@ -1875,7 +1842,6 @@ void TShader::setUniformLocationBase(int base) void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); } void TShader::setResourceSetBinding(const std::vector& base) { intermediate->setResourceSetBinding(base); } void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); } -#endif void TShader::addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) { intermediate->addBlockStorageOverride(nameStr, backing); } @@ -1886,6 +1852,9 @@ void TShader::setGlobalUniformBinding(unsigned int binding) { intermediate->setG void TShader::setAtomicCounterBlockName(const char* name) { intermediate->setAtomicCounterBlockName(name); } void TShader::setAtomicCounterBlockSet(unsigned int set) { intermediate->setAtomicCounterBlockSet(set); } +void TShader::addSourceText(const char* text, size_t len) { intermediate->addSourceText(text, len); } +void TShader::setSourceFile(const char* file) { intermediate->setSourceFile(file); } + #ifdef ENABLE_HLSL // See comment above TDefaultHlslIoMapper in iomapper.cpp: void TShader::setHlslIoMapping(bool hlslIoMap) { intermediate->setHlslIoMapping(hlslIoMap); } @@ -1900,8 +1869,6 @@ void TShader::setFlattenUniformArrays(bool flatten) { intermediate->setFlatt bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, bool forwardCompatible, EShMessages messages, Includer& includer) { - if (! InitThread()) - return false; SetThreadPoolAllocator(pool); if (! preamble) @@ -1909,12 +1876,11 @@ 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); + &environment, compileOnly); } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // Fill in a string with the result of preprocessing ShaderStrings // Returns true if all extensions, pragmas and version strings were valid. // @@ -1927,8 +1893,6 @@ bool TShader::preprocess(const TBuiltInResource* builtInResources, std::string* output_string, Includer& includer) { - if (! InitThread()) - return false; SetThreadPoolAllocator(pool); if (! preamble) @@ -1936,11 +1900,10 @@ 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); } -#endif const char* TShader::getInfoLog() { @@ -1952,16 +1915,12 @@ const char* TShader::getInfoDebugLog() return infoSink->debug.c_str(); } -TProgram::TProgram() : -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - reflection(0), -#endif - linked(false) +TProgram::TProgram() : reflection(nullptr), linked(false) { pool = new TPoolAllocator; infoSink = new TInfoSink; for (int s = 0; s < EShLangCount; ++s) { - intermediate[s] = 0; + intermediate[s] = nullptr; newedIntermediate[s] = false; } } @@ -1969,9 +1928,7 @@ TProgram::TProgram() : TProgram::~TProgram() { delete infoSink; -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) delete reflection; -#endif for (int s = 0; s < EShLangCount; ++s) if (newedIntermediate[s]) @@ -2019,7 +1976,6 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages) if (stages[stage].size() == 0) return true; -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) int numEsShaders = 0, numNonEsShaders = 0; for (auto it = stages[stage].begin(); it != stages[stage].end(); ++it) { if ((*it)->intermediate->getProfile() == EEsProfile) { @@ -2049,6 +2005,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. @@ -2068,15 +2026,10 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages) for (it = stages[stage].begin(); it != stages[stage].end(); ++it) intermediate[stage]->merge(*infoSink, *(*it)->intermediate); } -#else - intermediate[stage] = stages[stage].front()->intermediate; -#endif intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0); -#ifndef GLSLANG_ANGLE if (messages & EShMsgAST) intermediate[stage]->output(*infoSink, true); -#endif return intermediate[stage]->getNumErrors() == 0; } @@ -2154,17 +2107,19 @@ const char* TProgram::getInfoDebugLog() return infoSink->debug.c_str(); } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - // // Reflection implementation. // +unsigned int TObjectReflection::layoutLocation() const { return type->getQualifier().layoutLocation; } + bool TProgram::buildReflection(int opts) { if (! linked || reflection != nullptr) return false; + SetThreadPoolAllocator(pool); + int firstStage = EShLangVertex, lastStage = EShLangFragment; if (opts & EShReflectionIntermediateIO) { @@ -2213,6 +2168,12 @@ int TProgram::getNumAtomicCounters() const { return r const TObjectReflection& TProgram::getAtomicCounter(int index) const { return reflection->getAtomicCounter(index); } void TProgram::dumpReflection() { if (reflection != nullptr) reflection->dump(); } +TIoMapResolver* TProgram::getGlslIoResolver(EShLanguage stage) { + auto *intermediate = getIntermediate(stage); + if (!intermediate) + return NULL; + return static_cast(new TDefaultGlslIoResolver(*intermediate)); +} // // I/O mapping implementation. // @@ -2220,6 +2181,9 @@ bool TProgram::mapIO(TIoMapResolver* pResolver, TIoMapper* pIoMapper) { if (! linked) return false; + + SetThreadPoolAllocator(pool); + TIoMapper* ioMapper = nullptr; TIoMapper defaultIOMapper; if (pIoMapper == nullptr) @@ -2236,6 +2200,4 @@ bool TProgram::mapIO(TIoMapResolver* pResolver, TIoMapper* pIoMapper) return ioMapper->doMap(pResolver, *infoSink); } -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE - } // end namespace glslang diff --git a/glslang/MachineIndependent/SpirvIntrinsics.cpp b/glslang/MachineIndependent/SpirvIntrinsics.cpp index 6650f7d9ee..1d08797ac2 100644 --- a/glslang/MachineIndependent/SpirvIntrinsics.cpp +++ b/glslang/MachineIndependent/SpirvIntrinsics.cpp @@ -33,8 +33,6 @@ // POSSIBILITY OF SUCH DAMAGE. // -#ifndef GLSLANG_WEB - // // GL_EXT_spirv_intrinsics // @@ -45,6 +43,15 @@ namespace glslang { +bool TSpirvTypeParameter::operator==(const TSpirvTypeParameter& rhs) const +{ + if (getAsConstant() != nullptr) + return getAsConstant()->getConstArray() == rhs.getAsConstant()->getConstArray(); + + assert(getAsType() != nullptr); + return *getAsType() == *rhs.getAsType(); +} + // // Handle SPIR-V requirements // @@ -67,7 +74,7 @@ TSpirvRequirement* TParseContext::makeSpirvRequirement(const TSourceLoc& loc, co spirvReq->capabilities.insert(capability->getAsConstantUnion()->getConstArray()[0].getIConst()); } } else - error(loc, "unknow SPIR-V requirement", name.c_str(), ""); + error(loc, "unknown SPIR-V requirement", name.c_str(), ""); return spirvReq; } @@ -168,7 +175,7 @@ void TQualifier::setSpirvDecorateId(int decoration, const TIntermAggregate* args TVector extraOperands; for (auto arg : args->getSequence()) { auto extraOperand = arg->getAsTyped(); - assert(extraOperand != nullptr && extraOperand->getQualifier().isConstant()); + assert(extraOperand != nullptr); extraOperands.push_back(extraOperand); } spirvDecorate->decorateIds[decoration] = extraOperands; @@ -202,30 +209,29 @@ TString TQualifier::getSpirvDecorateQualifierString() const const auto appendStr = [&](const char* s) { qualifierString.append(s); }; const auto appendDecorate = [&](const TIntermTyped* constant) { - auto& constArray = constant->getAsConstantUnion() != nullptr ? constant->getAsConstantUnion()->getConstArray() - : constant->getAsSymbolNode()->getConstArray(); - if (constant->getBasicType() == EbtFloat) { - float value = static_cast(constArray[0].getDConst()); - appendFloat(value); - } - else if (constant->getBasicType() == EbtInt) { - int value = constArray[0].getIConst(); - appendInt(value); - } - else if (constant->getBasicType() == EbtUint) { - unsigned value = constArray[0].getUConst(); - appendUint(value); - } - else if (constant->getBasicType() == EbtBool) { - bool value = constArray[0].getBConst(); - appendBool(value); + if (constant->getAsConstantUnion()) { + auto& constArray = constant->getAsConstantUnion()->getConstArray(); + if (constant->getBasicType() == EbtFloat) { + float value = static_cast(constArray[0].getDConst()); + appendFloat(value); + } else if (constant->getBasicType() == EbtInt) { + int value = constArray[0].getIConst(); + appendInt(value); + } else if (constant->getBasicType() == EbtUint) { + unsigned value = constArray[0].getUConst(); + appendUint(value); + } else if (constant->getBasicType() == EbtBool) { + bool value = constArray[0].getBConst(); + appendBool(value); + } else if (constant->getBasicType() == EbtString) { + const TString* value = constArray[0].getSConst(); + appendStr(value->c_str()); + } else + assert(0); + } else { + assert(constant->getAsSymbolNode()); + appendStr(constant->getAsSymbolNode()->getName().c_str()); } - else if (constant->getBasicType() == EbtString) { - const TString* value = constArray[0].getSConst(); - appendStr(value->c_str()); - } - else - assert(0); }; for (auto& decorate : spirvDecorate->decorates) { @@ -284,14 +290,20 @@ TSpirvTypeParameters* TParseContext::makeSpirvTypeParameters(const TSourceLoc& l constant->getBasicType() != EbtBool && constant->getBasicType() != EbtString) error(loc, "this type not allowed", constant->getType().getBasicString(), ""); - else { - assert(constant); + else spirvTypeParams->push_back(TSpirvTypeParameter(constant)); - } return spirvTypeParams; } +TSpirvTypeParameters* TParseContext::makeSpirvTypeParameters(const TSourceLoc& /* loc */, + const TPublicType& type) +{ + TSpirvTypeParameters* spirvTypeParams = new TSpirvTypeParameters; + spirvTypeParams->push_back(TSpirvTypeParameter(new TType(type))); + return spirvTypeParams; +} + TSpirvTypeParameters* TParseContext::mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1, TSpirvTypeParameters* spirvTypeParams2) { // Merge SPIR-V type parameters of the second one to the first one @@ -346,5 +358,3 @@ TSpirvInstruction* TParseContext::mergeSpirvInstruction(const TSourceLoc& loc, T } } // end namespace glslang - -#endif // GLSLANG_WEB diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index a3ffa0c467..3b56e414bc 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -65,7 +65,6 @@ void TType::buildMangledName(TString& mangledName) const case EbtInt: mangledName += 'i'; break; case EbtUint: mangledName += 'u'; break; case EbtBool: mangledName += 'b'; break; -#ifndef GLSLANG_WEB case EbtDouble: mangledName += 'd'; break; case EbtFloat16: mangledName += "f16"; break; case EbtInt8: mangledName += "i8"; break; @@ -78,12 +77,10 @@ void TType::buildMangledName(TString& mangledName) const case EbtAccStruct: mangledName += "as"; break; case EbtRayQuery: mangledName += "rq"; break; case EbtSpirvType: mangledName += "spv-t"; break; -#endif + case EbtHitObjectNV: mangledName += "ho"; break; case EbtSampler: switch (sampler.type) { -#ifndef GLSLANG_WEB case EbtFloat16: mangledName += "f16"; break; -#endif case EbtInt: mangledName += "i"; break; case EbtUint: mangledName += "u"; break; case EbtInt64: mangledName += "i64"; break; @@ -110,12 +107,10 @@ void TType::buildMangledName(TString& mangledName) const case Esd2D: mangledName += "2"; break; case Esd3D: mangledName += "3"; break; case EsdCube: mangledName += "C"; break; -#ifndef GLSLANG_WEB case Esd1D: mangledName += "1"; break; case EsdRect: mangledName += "R2"; break; case EsdBuffer: mangledName += "B"; break; case EsdSubpass: mangledName += "P"; break; -#endif default: break; // some compilers want this } @@ -154,6 +149,7 @@ void TType::buildMangledName(TString& mangledName) const mangledName += '-'; (*structure)[i].type->buildMangledName(mangledName); } + break; default: break; } @@ -183,8 +179,6 @@ void TType::buildMangledName(TString& mangledName) const } } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - // // Dump functions. // @@ -263,8 +257,6 @@ void TSymbolTable::dump(TInfoSink& infoSink, bool complete) const } } -#endif - // // Functions have buried pointers to delete. // @@ -327,6 +319,16 @@ void TSymbolTableLevel::setFunctionExtensions(const char* name, int num, const c } } +// Make a single function require an extension(s). i.e., this will only set the extensions for the symbol that matches 'name' exactly. +// This is different from setFunctionExtensions, which uses std::map::lower_bound to effectively set all symbols that start with 'name'. +// Should only be used for a version/profile that actually needs the extension(s). +void TSymbolTableLevel::setSingleFunctionExtensions(const char* name, int num, const char* const extensions[]) +{ + if (auto candidate = level.find(name); candidate != level.end()) { + candidate->second->setExtensions(num, extensions); + } +} + // // Make all symbols in this table level read only. // @@ -381,9 +383,9 @@ TVariable* TVariable::clone() const TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf) { for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) { - TParameter param; + TParameter param{}; parameters.push_back(param); - parameters.back().copyParam(copyOf.parameters[i]); + (void)parameters.back().copyParam(copyOf.parameters[i]); } extensions = nullptr; @@ -397,9 +399,7 @@ TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf) implicitThis = copyOf.implicitThis; illegalImplicitThis = copyOf.illegalImplicitThis; defaultParamCount = copyOf.defaultParamCount; -#ifndef GLSLANG_WEB spirvInst = copyOf.spirvInst; -#endif } TFunction* TFunction::clone() const @@ -416,7 +416,7 @@ TAnonMember* TAnonMember::clone() const // copy of the original container. assert(0); - return 0; + return nullptr; } TSymbolTableLevel* TSymbolTableLevel::clone() const diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index 31312ecbaa..94c3929da2 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -84,7 +84,7 @@ typedef TVector TExtensionList; class TSymbol { public: POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - explicit TSymbol(const TString *n) : name(n), uniqueId(0), extensions(0), writable(true) { } + explicit TSymbol(const TString *n) : name(n), uniqueId(0), extensions(nullptr), writable(true) { } virtual TSymbol* clone() const = 0; virtual ~TSymbol() { } // rely on all symbol owned memory coming from the pool @@ -97,18 +97,18 @@ class TSymbol { changeName(NewPoolTString(newName.c_str())); } virtual const TString& getMangledName() const { return getName(); } - virtual TFunction* getAsFunction() { return 0; } - virtual const TFunction* getAsFunction() const { return 0; } - virtual TVariable* getAsVariable() { return 0; } - virtual const TVariable* getAsVariable() const { return 0; } - virtual const TAnonMember* getAsAnonMember() const { return 0; } + virtual TFunction* getAsFunction() { return nullptr; } + virtual const TFunction* getAsFunction() const { return nullptr; } + virtual TVariable* getAsVariable() { return nullptr; } + virtual const TVariable* getAsVariable() const { return nullptr; } + virtual const TAnonMember* getAsAnonMember() const { return nullptr; } virtual const TType& getType() const = 0; virtual TType& getWritableType() = 0; virtual void setUniqueId(long long id) { uniqueId = id; } virtual long long getUniqueId() const { return uniqueId; } virtual void setExtensions(int numExts, const char* const exts[]) { - assert(extensions == 0); + assert(extensions == nullptr); assert(numExts > 0); extensions = NewPoolObject(extensions); for (int e = 0; e < numExts; ++e) @@ -117,10 +117,8 @@ class TSymbol { virtual int getNumExtensions() const { return extensions == nullptr ? 0 : (int)extensions->size(); } virtual const char** getExtensions() const { return extensions->data(); } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) virtual void dump(TInfoSink& infoSink, bool complete = false) const = 0; void dumpExtensions(TInfoSink& infoSink) const; -#endif virtual bool isReadOnly() const { return ! writable; } virtual void makeReadOnly() { writable = false; } @@ -196,9 +194,7 @@ class TVariable : public TSymbol { } virtual const char** getMemberExtensions(int member) const { return (*memberExtensions)[member].data(); } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) virtual void dump(TInfoSink& infoSink, bool complete = false) const; -#endif protected: explicit TVariable(const TVariable&); @@ -224,14 +220,15 @@ struct TParameter { TString *name; TType* type; TIntermTyped* defaultValue; - void copyParam(const TParameter& param) + TParameter& copyParam(const TParameter& param) { if (param.name) name = NewPoolTString(param.name->c_str()); else - name = 0; + name = nullptr; type = param.type->clone(); defaultValue = param.defaultValue; + return *this; } TBuiltInVariable getDeclaredBuiltIn() const { return type->getQualifier().declaredBuiltIn; } }; @@ -242,14 +239,15 @@ struct TParameter { class TFunction : public TSymbol { public: explicit TFunction(TOperator o) : - TSymbol(0), + TSymbol(nullptr), op(o), defined(false), prototyped(false), implicitThis(false), illegalImplicitThis(false), defaultParamCount(0) { } TFunction(const TString *name, const TType& retType, TOperator tOp = EOpNull) : TSymbol(name), mangledName(*name + '('), op(tOp), - defined(false), prototyped(false), implicitThis(false), illegalImplicitThis(false), defaultParamCount(0) + defined(false), prototyped(false), implicitThis(false), illegalImplicitThis(false), defaultParamCount(0), + linkType(ELinkNone) { returnType.shallowCopy(retType); declaredBuiltIn = retType.getQualifier().builtIn; @@ -318,19 +316,19 @@ class TFunction : public TSymbol { virtual TParameter& operator[](int i) { assert(writable); return parameters[i]; } virtual const TParameter& operator[](int i) const { return parameters[i]; } + const TQualifier& getQualifier() const { return returnType.getQualifier(); } -#ifndef GLSLANG_WEB virtual void setSpirvInstruction(const TSpirvInstruction& inst) { relateToOperator(EOpSpirvInst); spirvInst = inst; } virtual const TSpirvInstruction& getSpirvInstruction() const { return spirvInst; } -#endif -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) virtual void dump(TInfoSink& infoSink, bool complete = false) const override; -#endif + + void setExport() { linkType = ELinkExport; } + TLinkType getLinkType() const { return linkType; } protected: explicit TFunction(const TFunction&); @@ -352,9 +350,8 @@ class TFunction : public TSymbol { // but is not allowed to use them, or see hidden symbols instead. int defaultParamCount; -#ifndef GLSLANG_WEB TSpirvInstruction spirvInst; // SPIR-V instruction qualifiers -#endif + TLinkType linkType; }; // @@ -394,9 +391,7 @@ class TAnonMember : public TSymbol { virtual const char** getExtensions() const override { return anonContainer.getMemberExtensions(memberNumber); } virtual int getAnonId() const { return anonId; } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) virtual void dump(TInfoSink& infoSink, bool complete = false) const override; -#endif protected: explicit TAnonMember(const TAnonMember&); @@ -410,7 +405,7 @@ class TAnonMember : public TSymbol { class TSymbolTableLevel { public: POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - TSymbolTableLevel() : defaultPrecision(0), anonId(0), thisLevel(false) { } + TSymbolTableLevel() : defaultPrecision(nullptr), anonId(0), thisLevel(false) { } ~TSymbolTableLevel(); bool insert(const TString& name, TSymbol* symbol) { @@ -492,7 +487,7 @@ class TSymbolTableLevel { { tLevel::const_iterator it = level.find(name); if (it == level.end()) - return 0; + return nullptr; else return (*it).second; } @@ -560,7 +555,7 @@ class TSymbolTableLevel { { // can call multiple times at one scope, will only latch on first call, // as we're tracking the previous scope's values, not the current values - if (defaultPrecision != 0) + if (defaultPrecision != nullptr) return; defaultPrecision = new TPrecisionQualifier[EbtNumTypes]; @@ -572,7 +567,7 @@ class TSymbolTableLevel { { // can be called for table level pops that didn't set the // defaults - if (defaultPrecision == 0 || p == 0) + if (defaultPrecision == nullptr || p == nullptr) return; for (int t = 0; t < EbtNumTypes; ++t) @@ -581,9 +576,8 @@ class TSymbolTableLevel { void relateToOperator(const char* name, TOperator op); void setFunctionExtensions(const char* name, int num, const char* const extensions[]); -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) + void setSingleFunctionExtensions(const char* name, int num, const char* const extensions[]); void dump(TInfoSink& infoSink, bool complete = false) const; -#endif TSymbolTableLevel* clone() const; void readOnly(); @@ -621,7 +615,7 @@ class TSymbolTable { // don't deallocate levels passed in from elsewhere while (table.size() > adoptedLevels) - pop(0); + pop(nullptr); } void adoptLevels(TSymbolTable& symTable) @@ -782,7 +776,7 @@ class TSymbolTable { // Normal find of a symbol, that can optionally say whether the symbol was found // at a built-in level or the current top-scope level. - TSymbol* find(const TString& name, bool* builtIn = 0, bool* currentScope = 0, int* thisDepthP = 0) + TSymbol* find(const TString& name, bool* builtIn = nullptr, bool* currentScope = nullptr, int* thisDepthP = nullptr) { int level = currentLevel(); TSymbol* symbol; @@ -826,7 +820,7 @@ class TSymbolTable { ++thisDepth; symbol = table[level]->find(name); --level; - } while (symbol == 0 && level >= 0); + } while (symbol == nullptr && level >= 0); if (! table[level + 1]->isThisLevel()) thisDepth = 0; @@ -884,6 +878,12 @@ class TSymbolTable { table[level]->setFunctionExtensions(name, num, extensions); } + void setSingleFunctionExtensions(const char* name, int num, const char* const extensions[]) + { + for (unsigned int level = 0; level < table.size(); ++level) + table[level]->setSingleFunctionExtensions(name, num, extensions); + } + void setVariableExtensions(const char* name, int numExts, const char* const extensions[]) { TSymbol* symbol = find(TString(name)); @@ -911,9 +911,7 @@ class TSymbolTable { } long long getMaxSymbolId() { return uniqueId; } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) void dump(TInfoSink& infoSink, bool complete = false) const; -#endif void copyTable(const TSymbolTable& copyOf); void setPreviousDefaultPrecisions(TPrecisionQualifier *p) { table[currentLevel()]->setPreviousDefaultPrecisions(p); } diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 8d96e0e104..0262c54dcb 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -1,7 +1,7 @@ // // Copyright (C) 2002-2005 3Dlabs Inc. Ltd. // Copyright (C) 2012-2013 LunarG, Inc. -// Copyright (C) 2017 ARM Limited. +// Copyright (C) 2017, 2022-2024 Arm Limited. // Copyright (C) 2015-2020 Google, Inc. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // @@ -151,8 +151,6 @@ namespace glslang { -#ifndef GLSLANG_WEB - // // Initialize all extensions, almost always to 'disable', as once their features // are incorporated into a core version, their features are supported through allowing that @@ -166,7 +164,8 @@ void TParseVersions::initializeExtensionBehavior() } extensionData; const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4}, - {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4} + {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4}, + {E_GL_EXT_mesh_shader, EShTargetSpv_1_4} }; for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) { @@ -226,6 +225,7 @@ 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_bindless_texture] = EBhDisable; extensionBehavior[E_GL_ARB_fragment_coord_conventions] = EBhDisable; @@ -235,6 +235,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_KHR_shader_subgroup_ballot] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_shuffle] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_shuffle_relative] = EBhDisable; + extensionBehavior[E_GL_KHR_shader_subgroup_rotate] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_clustered] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_quad] = EBhDisable; extensionBehavior[E_GL_KHR_memory_scope_semantics] = EBhDisable; @@ -258,10 +259,20 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_shader_16bit_storage] = EBhDisable; extensionBehavior[E_GL_EXT_shader_8bit_storage] = EBhDisable; extensionBehavior[E_GL_EXT_subgroup_uniform_control_flow] = EBhDisable; + extensionBehavior[E_GL_EXT_maximal_reconvergence] = EBhDisable; + + extensionBehavior[E_GL_EXT_fragment_shader_barycentric] = EBhDisable; + extensionBehavior[E_GL_EXT_expect_assume] = EBhDisable; + + extensionBehavior[E_GL_EXT_control_flow_attributes2] = EBhDisable; + extensionBehavior[E_GL_EXT_spec_constant_composites] = EBhDisable; + + extensionBehavior[E_GL_KHR_cooperative_matrix] = EBhDisable; // #line and #include extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhDisable; extensionBehavior[E_GL_GOOGLE_include_directive] = EBhDisable; + extensionBehavior[E_GL_ARB_shading_language_include] = EBhDisable; extensionBehavior[E_GL_AMD_shader_ballot] = EBhDisable; extensionBehavior[E_GL_AMD_shader_trinary_minmax] = EBhDisable; @@ -273,6 +284,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_AMD_shader_image_load_store_lod] = EBhDisable; extensionBehavior[E_GL_AMD_shader_fragment_mask] = EBhDisable; extensionBehavior[E_GL_AMD_gpu_shader_half_float_fetch] = EBhDisable; + extensionBehavior[E_GL_AMD_shader_early_and_late_fragment_tests] = EBhDisable; extensionBehavior[E_GL_INTEL_shader_integer_functions2] = EBhDisable; @@ -292,10 +304,19 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_NV_compute_shader_derivatives] = EBhDisable; extensionBehavior[E_GL_NV_shader_texture_footprint] = EBhDisable; extensionBehavior[E_GL_NV_mesh_shader] = EBhDisable; - extensionBehavior[E_GL_NV_cooperative_matrix] = EBhDisable; extensionBehavior[E_GL_NV_shader_sm_builtins] = EBhDisable; extensionBehavior[E_GL_NV_integer_cooperative_matrix] = EBhDisable; + extensionBehavior[E_GL_NV_shader_invocation_reorder] = EBhDisable; + extensionBehavior[E_GL_NV_displacement_micromap] = EBhDisable; + extensionBehavior[E_GL_NV_shader_atomic_fp16_vector] = EBhDisable; + + // ARM + extensionBehavior[E_GL_ARM_shader_core_builtins] = EBhDisable; + + // QCOM + extensionBehavior[E_GL_QCOM_image_processing] = EBhDisable; + extensionBehavior[E_GL_QCOM_image_processing2] = EBhDisable; // AEP extensionBehavior[E_GL_ANDROID_extension_pack_es31a] = EBhDisable; @@ -334,13 +355,22 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_ray_tracing] = EBhDisable; extensionBehavior[E_GL_EXT_ray_query] = EBhDisable; extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable; + extensionBehavior[E_GL_EXT_ray_cull_mask] = EBhDisable; extensionBehavior[E_GL_EXT_blend_func_extended] = EBhDisable; extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable; extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable; - extensionBehavior[E_GL_EXT_shader_image_int64] = EBhDisable; + extensionBehavior[E_GL_EXT_shader_image_int64] = EBhDisable; extensionBehavior[E_GL_EXT_terminate_invocation] = EBhDisable; extensionBehavior[E_GL_EXT_shared_memory_block] = EBhDisable; extensionBehavior[E_GL_EXT_spirv_intrinsics] = EBhDisable; + extensionBehavior[E_GL_EXT_mesh_shader] = EBhDisable; + extensionBehavior[E_GL_EXT_opacity_micromap] = EBhDisable; + extensionBehavior[E_GL_EXT_shader_quad_control] = EBhDisable; + extensionBehavior[E_GL_EXT_ray_tracing_position_fetch] = EBhDisable; + extensionBehavior[E_GL_EXT_shader_tile_image] = EBhDisable; + extensionBehavior[E_GL_EXT_texture_shadow_lod] = EBhDisable; + extensionBehavior[E_GL_EXT_draw_instanced] = EBhDisable; + extensionBehavior[E_GL_EXT_texture_array] = EBhDisable; // OVR extensions extensionBehavior[E_GL_OVR_multiview] = EBhDisable; @@ -363,9 +393,10 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_float16] = EBhDisable; extensionBehavior[E_GL_EXT_shader_atomic_float] = EBhDisable; extensionBehavior[E_GL_EXT_shader_atomic_float2] = EBhDisable; -} -#endif // GLSLANG_WEB + // Record extensions not for spv. + spvUnsupportedExt.push_back(E_GL_ARB_bindless_texture); +} // Get code that is not part of a shared symbol table, is specific to this shader, // or needed by the preprocessor (which does not use a shared symbol table). @@ -375,9 +406,6 @@ void TParseVersions::getPreamble(std::string& preamble) preamble = "#define GL_ES 1\n" "#define GL_FRAGMENT_PRECISION_HIGH 1\n" -#ifdef GLSLANG_WEB - ; -#else "#define GL_OES_texture_3D 1\n" "#define GL_OES_standard_derivatives 1\n" "#define GL_EXT_frag_depth 1\n" @@ -418,6 +446,9 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_OES_texture_buffer 1\n" "#define GL_OES_texture_cube_map_array 1\n" "#define GL_EXT_shader_non_constant_global_initializers 1\n" + + "#define GL_QCOM_image_processing 1\n" + "#define GL_QCOM_image_processing2 1\n" ; if (version >= 300) { @@ -426,11 +457,11 @@ void TParseVersions::getPreamble(std::string& preamble) if (version >= 310) { preamble += "#define GL_EXT_null_initializer 1\n"; preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n"; + preamble += "#define GL_EXT_maximal_reconvergence 1\n"; } } else { // !isEsProfile() preamble = - "#define GL_FRAGMENT_PRECISION_HIGH 1\n" "#define GL_ARB_texture_rectangle 1\n" "#define GL_ARB_shading_language_420pack 1\n" "#define GL_ARB_texture_gather 1\n" @@ -470,6 +501,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#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" @@ -488,6 +520,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_fragment_shading_rate 1\n" "#define GL_EXT_shared_memory_block 1\n" "#define GL_EXT_shader_integer_mix 1\n" + "#define GL_EXT_spec_constant_composites 1\n" // GL_KHR_shader_subgroup "#define GL_KHR_shader_subgroup_basic 1\n" @@ -499,13 +532,18 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_KHR_shader_subgroup_clustered 1\n" "#define GL_KHR_shader_subgroup_quad 1\n" + "#define GL_KHR_cooperative_matrix 1\n" + "#define GL_EXT_shader_image_int64 1\n" "#define GL_EXT_shader_atomic_int64 1\n" "#define GL_EXT_shader_realtime_clock 1\n" "#define GL_EXT_ray_tracing 1\n" "#define GL_EXT_ray_query 1\n" "#define GL_EXT_ray_flags_primitive_culling 1\n" + "#define GL_EXT_ray_cull_mask 1\n" + "#define GL_EXT_ray_tracing_position_fetch 1\n" "#define GL_EXT_spirv_intrinsics 1\n" + "#define GL_EXT_mesh_shader 1\n" "#define GL_AMD_shader_ballot 1\n" "#define GL_AMD_shader_trinary_minmax 1\n" @@ -535,6 +573,10 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_NV_mesh_shader 1\n" "#define GL_NV_cooperative_matrix 1\n" "#define GL_NV_integer_cooperative_matrix 1\n" + "#define GL_NV_shader_invocation_reorder 1\n" + + "#define GL_QCOM_image_processing 1\n" + "#define GL_QCOM_image_processing2 1\n" "#define GL_EXT_shader_explicit_arithmetic_types 1\n" "#define GL_EXT_shader_explicit_arithmetic_types_int8 1\n" @@ -552,8 +594,18 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_shader_atomic_float 1\n" "#define GL_EXT_shader_atomic_float2 1\n" + + "#define GL_EXT_fragment_shader_barycentric 1\n" + "#define GL_EXT_shader_quad_control 1\n" + "#define GL_EXT_texture_array 1\n" + + "#define GL_EXT_control_flow_attributes2 1\n" ; + if (spvVersion.spv == 0) { + preamble += "#define GL_ARB_bindless_texture 1\n"; + } + if (version >= 150) { // define GL_core_profile and GL_compatibility_profile preamble += "#define GL_core_profile 1\n"; @@ -564,11 +616,13 @@ void TParseVersions::getPreamble(std::string& preamble) if (version >= 140) { preamble += "#define GL_EXT_null_initializer 1\n"; preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n"; + preamble += "#define GL_EXT_maximal_reconvergence 1\n"; + } + if (version >= 130) { + preamble +="#define GL_FRAGMENT_PRECISION_HIGH 1\n"; } -#endif // GLSLANG_WEB } -#ifndef GLSLANG_WEB if ((!isEsProfile() && version >= 140) || (isEsProfile() && version >= 310)) { preamble += @@ -596,7 +650,6 @@ void TParseVersions::getPreamble(std::string& preamble) preamble += "#define GL_EXT_terminate_invocation 1\n" ; -#endif // #define VULKAN XXXX const int numberBufSize = 12; @@ -608,7 +661,6 @@ void TParseVersions::getPreamble(std::string& preamble) preamble += "\n"; } -#ifndef GLSLANG_WEB // #define GL_SPIRV XXXX if (spvVersion.openGl > 0) { preamble += "#define GL_SPIRV "; @@ -616,9 +668,7 @@ void TParseVersions::getPreamble(std::string& preamble) preamble += numberBuf; preamble += "\n"; } -#endif -#ifndef GLSLANG_WEB // GL_EXT_spirv_intrinsics if (!isEsProfile()) { switch (language) { @@ -634,12 +684,11 @@ void TParseVersions::getPreamble(std::string& preamble) case EShLangClosestHit: preamble += "#define GL_CLOSEST_HIT_SHADER_EXT 1 \n"; break; case EShLangMiss: preamble += "#define GL_MISS_SHADER_EXT 1 \n"; break; case EShLangCallable: preamble += "#define GL_CALLABLE_SHADER_EXT 1 \n"; break; - case EShLangTaskNV: preamble += "#define GL_TASK_SHADER_NV 1 \n"; break; - case EShLangMeshNV: preamble += "#define GL_MESH_SHADER_NV 1 \n"; break; + case EShLangTask: preamble += "#define GL_TASK_SHADER_NV 1 \n"; break; + case EShLangMesh: preamble += "#define GL_MESH_SHADER_NV 1 \n"; break; default: break; } } -#endif } // @@ -651,7 +700,6 @@ const char* StageName(EShLanguage stage) case EShLangVertex: return "vertex"; case EShLangFragment: return "fragment"; case EShLangCompute: return "compute"; -#ifndef GLSLANG_WEB case EShLangTessControl: return "tessellation control"; case EShLangTessEvaluation: return "tessellation evaluation"; case EShLangGeometry: return "geometry"; @@ -661,9 +709,8 @@ const char* StageName(EShLanguage stage) case EShLangClosestHit: return "closest-hit"; case EShLangMiss: return "miss"; case EShLangCallable: return "callable"; - case EShLangMeshNV: return "mesh"; - case EShLangTaskNV: return "task"; -#endif + case EShLangMesh: return "mesh"; + case EShLangTask: return "task"; default: return "unknown stage"; } } @@ -688,7 +735,6 @@ void TParseVersions::requireStage(const TSourceLoc& loc, EShLanguage stage, cons requireStage(loc, static_cast(1 << stage), featureDesc); } -#ifndef GLSLANG_WEB // // When to use requireProfile(): // @@ -726,12 +772,11 @@ void TParseVersions::profileRequires(const TSourceLoc& loc, int profileMask, int { if (profile & profileMask) { bool okay = minVersion > 0 && version >= minVersion; -#ifndef GLSLANG_WEB for (int i = 0; i < numExtensions; ++i) { switch (getExtensionBehavior(extensions[i])) { case EBhWarn: - infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc); - // fall through + infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn); + [[fallthrough]]; case EBhRequire: case EBhEnable: okay = true; @@ -739,7 +784,6 @@ void TParseVersions::profileRequires(const TSourceLoc& loc, int profileMask, int default: break; // some compilers want this } } -#endif if (! okay) error(loc, "not supported for this version or the enabled extensions", featureDesc, ""); } @@ -769,7 +813,8 @@ void TParseVersions::checkDeprecated(const TSourceLoc& loc, int profileMask, int error(loc, "deprecated, may be removed in future release", featureDesc, ""); else if (! suppressWarnings()) infoSink.info.message(EPrefixWarning, (TString(featureDesc) + " deprecated in version " + - String(depVersion) + "; may be removed in future release").c_str(), loc); + String(depVersion) + "; may be removed in future release").c_str(), + loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn); } } } @@ -806,11 +851,14 @@ bool TParseVersions::checkExtensionsRequested(const TSourceLoc& loc, int numExte for (int i = 0; i < numExtensions; ++i) { TExtensionBehavior behavior = getExtensionBehavior(extensions[i]); if (behavior == EBhDisable && relaxedErrors()) { - infoSink.info.message(EPrefixWarning, "The following extension must be enabled to use this feature:", loc); + infoSink.info.message(EPrefixWarning, "The following extension must be enabled to use this feature:", loc, + messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn); behavior = EBhWarn; } if (behavior == EBhWarn) { - infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc); + infoSink.info.message(EPrefixWarning, + ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), + loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn); warned = true; } } @@ -949,6 +997,8 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString); else if (strcmp(extension, "GL_GOOGLE_include_directive") == 0) updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString); + else if (strcmp(extension, "GL_ARB_shading_language_include") == 0) + updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString); // subgroup_* to subgroup_basic else if (strcmp(extension, "GL_KHR_shader_subgroup_vote") == 0) updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString); @@ -1053,10 +1103,22 @@ void TParseVersions::checkExtensionStage(const TSourceLoc& loc, const char * con { // GL_NV_mesh_shader extension is only allowed in task/mesh shaders if (strcmp(extension, "GL_NV_mesh_shader") == 0) { - requireStage(loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask | EShLangFragmentMask), + requireStage(loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask | EShLangFragmentMask), "#extension GL_NV_mesh_shader"); - profileRequires(loc, ECoreProfile, 450, 0, "#extension GL_NV_mesh_shader"); - profileRequires(loc, EEsProfile, 320, 0, "#extension GL_NV_mesh_shader"); + profileRequires(loc, ECoreProfile, 450, nullptr, "#extension GL_NV_mesh_shader"); + profileRequires(loc, EEsProfile, 320, nullptr, "#extension GL_NV_mesh_shader"); + if (extensionTurnedOn(E_GL_EXT_mesh_shader)) { + error(loc, "GL_EXT_mesh_shader is already turned on, and not allowed with", "#extension", extension); + } + } + else if (strcmp(extension, "GL_EXT_mesh_shader") == 0) { + requireStage(loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask | EShLangFragmentMask), + "#extension GL_EXT_mesh_shader"); + profileRequires(loc, ECoreProfile, 450, nullptr, "#extension GL_EXT_mesh_shader"); + profileRequires(loc, EEsProfile, 320, nullptr, "#extension GL_EXT_mesh_shader"); + if (extensionTurnedOn(E_GL_NV_mesh_shader)) { + error(loc, "GL_NV_mesh_shader is already turned on, and not allowed with", "#extension", extension); + } } } @@ -1076,6 +1138,13 @@ void TParseVersions::extensionRequires(const TSourceLoc &loc, const char * const minSpvVersion = iter->second; requireSpv(loc, extension, minSpvVersion); } + + if (spvVersion.spv != 0){ + for (auto ext : spvUnsupportedExt){ + if (strcmp(extension, ext.c_str()) == 0) + error(loc, "not allowed when using generating SPIR-V codes", extension, ""); + } + } } // Call for any operation needing full GLSL integer data-type support. @@ -1288,7 +1357,7 @@ void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool buil } } -void TParseVersions::fcoopmatCheck(const TSourceLoc& loc, const char* op, bool builtIn) +void TParseVersions::fcoopmatCheckNV(const TSourceLoc& loc, const char* op, bool builtIn) { if (!builtIn) { const char* const extensions[] = {E_GL_NV_cooperative_matrix}; @@ -1296,14 +1365,22 @@ void TParseVersions::fcoopmatCheck(const TSourceLoc& loc, const char* op, bool b } } -void TParseVersions::intcoopmatCheck(const TSourceLoc& loc, const char* op, bool builtIn) +void TParseVersions::intcoopmatCheckNV(const TSourceLoc& loc, const char* op, bool builtIn) { if (!builtIn) { const char* const extensions[] = {E_GL_NV_integer_cooperative_matrix}; requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); } } -#endif // GLSLANG_WEB + +void TParseVersions::coopmatCheck(const TSourceLoc& loc, const char* op, bool builtIn) +{ + if (!builtIn) { + const char* const extensions[] = {E_GL_KHR_cooperative_matrix}; + requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + } +} + // Call for any operation removed because SPIR-V is in use. void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op) { @@ -1321,26 +1398,20 @@ void TParseVersions::vulkanRemoved(const TSourceLoc& loc, const char* op) // Call for any operation that requires Vulkan. void TParseVersions::requireVulkan(const TSourceLoc& loc, const char* op) { -#ifndef GLSLANG_WEB if (spvVersion.vulkan == 0) error(loc, "only allowed when using GLSL for Vulkan", op, ""); -#endif } // Call for any operation that requires SPIR-V. void TParseVersions::requireSpv(const TSourceLoc& loc, const char* op) { -#ifndef GLSLANG_WEB if (spvVersion.spv == 0) error(loc, "only allowed when generating SPIR-V", op, ""); -#endif } void TParseVersions::requireSpv(const TSourceLoc& loc, const char *op, unsigned int version) { -#ifndef GLSLANG_WEB if (spvVersion.spv < version) error(loc, "not supported for current targeted SPIR-V version", op, ""); -#endif } } // end namespace glslang diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 96a6e1fc52..75a823774e 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -1,7 +1,7 @@ // // Copyright (C) 2002-2005 3Dlabs Inc. Ltd. // Copyright (C) 2012-2013 LunarG, Inc. -// Copyright (C) 2017 ARM Limited. +// Copyright (C) 2017, 2022-2024 Arm Limited. // Copyright (C) 2015-2018 Google, Inc. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // @@ -163,6 +163,7 @@ const char* const E_GL_ARB_texture_query_lod = "GL_ARB_texture_query_ 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_ARB_bindless_texture = "GL_ARB_bindless_texture"; 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"; @@ -170,9 +171,11 @@ const char* const E_GL_KHR_shader_subgroup_arithmetic = "GL_KHR_shader_sub const char* const E_GL_KHR_shader_subgroup_ballot = "GL_KHR_shader_subgroup_ballot"; const char* const E_GL_KHR_shader_subgroup_shuffle = "GL_KHR_shader_subgroup_shuffle"; const char* const E_GL_KHR_shader_subgroup_shuffle_relative = "GL_KHR_shader_subgroup_shuffle_relative"; +const char* const E_GL_KHR_shader_subgroup_rotate = "GL_KHR_shader_subgroup_rotate"; const char* const E_GL_KHR_shader_subgroup_clustered = "GL_KHR_shader_subgroup_clustered"; const char* const E_GL_KHR_shader_subgroup_quad = "GL_KHR_shader_subgroup_quad"; const char* const E_GL_KHR_memory_scope_semantics = "GL_KHR_memory_scope_semantics"; +const char* const E_GL_KHR_cooperative_matrix = "GL_KHR_cooperative_matrix"; const char* const E_GL_EXT_shader_atomic_int64 = "GL_EXT_shader_atomic_int64"; @@ -201,6 +204,7 @@ const char* const E_GL_EXT_debug_printf = "GL_EXT_debug_prin const char* const E_GL_EXT_ray_tracing = "GL_EXT_ray_tracing"; const char* const E_GL_EXT_ray_query = "GL_EXT_ray_query"; const char* const E_GL_EXT_ray_flags_primitive_culling = "GL_EXT_ray_flags_primitive_culling"; +const char* const E_GL_EXT_ray_cull_mask = "GL_EXT_ray_cull_mask"; const char* const E_GL_EXT_blend_func_extended = "GL_EXT_blend_func_extended"; const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_implicit_conversions"; const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_shading_rate"; @@ -209,12 +213,26 @@ const char* const E_GL_EXT_null_initializer = "GL_EXT_null_initi const char* const E_GL_EXT_shared_memory_block = "GL_EXT_shared_memory_block"; const char* const E_GL_EXT_subgroup_uniform_control_flow = "GL_EXT_subgroup_uniform_control_flow"; const char* const E_GL_EXT_spirv_intrinsics = "GL_EXT_spirv_intrinsics"; +const char* const E_GL_EXT_fragment_shader_barycentric = "GL_EXT_fragment_shader_barycentric"; +const char* const E_GL_EXT_mesh_shader = "GL_EXT_mesh_shader"; +const char* const E_GL_EXT_opacity_micromap = "GL_EXT_opacity_micromap"; +const char* const E_GL_EXT_shader_quad_control = "GL_EXT_shader_quad_control"; +const char* const E_GL_EXT_draw_instanced = "GL_EXT_draw_instanced"; +const char* const E_GL_EXT_texture_array = "GL_EXT_texture_array"; +const char* const E_GL_EXT_maximal_reconvergence = "GL_EXT_maximal_reconvergence"; +const char* const E_GL_EXT_expect_assume = "GL_EXT_expect_assume"; +const char* const E_GL_EXT_control_flow_attributes2 = "GL_EXT_control_flow_attributes2"; +const char* const E_GL_EXT_spec_constant_composites = "GL_EXT_spec_constant_composites"; // Arrays of extensions for the above viewportEXTs duplications const char* const post_depth_coverageEXTs[] = { E_GL_ARB_post_depth_coverage, E_GL_EXT_post_depth_coverage }; const int Num_post_depth_coverageEXTs = sizeof(post_depth_coverageEXTs) / sizeof(post_depth_coverageEXTs[0]); +// Array of extensions to cover both extensions providing ray tracing capabilities. +const char* const ray_tracing_EXTs[] = { E_GL_EXT_ray_query, E_GL_EXT_ray_tracing }; +const int Num_ray_tracing_EXTs = sizeof(ray_tracing_EXTs) / sizeof(ray_tracing_EXTs[0]); + // OVR extensions const char* const E_GL_OVR_multiview = "GL_OVR_multiview"; const char* const E_GL_OVR_multiview2 = "GL_OVR_multiview2"; @@ -225,6 +243,7 @@ const int Num_OVR_multiview_EXTs = sizeof(OVR_multiview_EXTs) / sizeof(OVR_multi // #line and #include const char* const E_GL_GOOGLE_cpp_style_line_directive = "GL_GOOGLE_cpp_style_line_directive"; const char* const E_GL_GOOGLE_include_directive = "GL_GOOGLE_include_directive"; +const char* const E_GL_ARB_shading_language_include = "GL_ARB_shading_language_include"; const char* const E_GL_AMD_shader_ballot = "GL_AMD_shader_ballot"; const char* const E_GL_AMD_shader_trinary_minmax = "GL_AMD_shader_trinary_minmax"; @@ -236,6 +255,7 @@ const char* const E_GL_AMD_gpu_shader_int16 = "GL_AMD_gpu_sh const char* const E_GL_AMD_shader_image_load_store_lod = "GL_AMD_shader_image_load_store_lod"; const char* const E_GL_AMD_shader_fragment_mask = "GL_AMD_shader_fragment_mask"; const char* const E_GL_AMD_gpu_shader_half_float_fetch = "GL_AMD_gpu_shader_half_float_fetch"; +const char* const E_GL_AMD_shader_early_and_late_fragment_tests = "GL_AMD_shader_early_and_late_fragment_tests"; const char* const E_GL_INTEL_shader_integer_functions2 = "GL_INTEL_shader_integer_functions2"; @@ -255,15 +275,25 @@ const char* const E_GL_NV_fragment_shader_barycentric = "GL_NV_fragmen const char* const E_GL_NV_compute_shader_derivatives = "GL_NV_compute_shader_derivatives"; const char* const E_GL_NV_shader_texture_footprint = "GL_NV_shader_texture_footprint"; const char* const E_GL_NV_mesh_shader = "GL_NV_mesh_shader"; +const char* const E_GL_NV_cooperative_matrix = "GL_NV_cooperative_matrix"; +const char* const E_GL_NV_shader_sm_builtins = "GL_NV_shader_sm_builtins"; +const char* const E_GL_NV_integer_cooperative_matrix = "GL_NV_integer_cooperative_matrix"; +const char* const E_GL_NV_shader_invocation_reorder = "GL_NV_shader_invocation_reorder"; +const char* const E_GL_EXT_ray_tracing_position_fetch = "GL_EXT_ray_tracing_position_fetch"; +const char* const E_GL_NV_displacement_micromap = "GL_NV_displacement_micromap"; +const char* const E_GL_NV_shader_atomic_fp16_vector = "GL_NV_shader_atomic_fp16_vector"; + +// ARM +const char* const E_GL_ARM_shader_core_builtins = "GL_ARM_shader_core_builtins"; // Arrays of extensions for the above viewportEXTs duplications const char* const viewportEXTs[] = { E_GL_ARB_shader_viewport_layer_array, E_GL_NV_viewport_array2 }; const int Num_viewportEXTs = sizeof(viewportEXTs) / sizeof(viewportEXTs[0]); -const char* const E_GL_NV_cooperative_matrix = "GL_NV_cooperative_matrix"; -const char* const E_GL_NV_shader_sm_builtins = "GL_NV_shader_sm_builtins"; -const char* const E_GL_NV_integer_cooperative_matrix = "GL_NV_integer_cooperative_matrix"; + +const char* const E_GL_QCOM_image_processing = "GL_QCOM_image_processing"; +const char* const E_GL_QCOM_image_processing2 = "GL_QCOM_image_processing2"; // AEP const char* const E_GL_ANDROID_extension_pack_es31a = "GL_ANDROID_extension_pack_es31a"; @@ -281,7 +311,7 @@ const char* const E_GL_EXT_tessellation_shader = "GL_EXT_tessel const char* const E_GL_EXT_tessellation_point_size = "GL_EXT_tessellation_point_size"; const char* const E_GL_EXT_texture_buffer = "GL_EXT_texture_buffer"; const char* const E_GL_EXT_texture_cube_map_array = "GL_EXT_texture_cube_map_array"; -const char* const E_GL_EXT_shader_integer_mix = "GL_EXT_shader_integer_mix"; +const char* const E_GL_EXT_shader_integer_mix = "GL_EXT_shader_integer_mix"; // OES matching AEP const char* const E_GL_OES_geometry_shader = "GL_OES_geometry_shader"; @@ -313,6 +343,10 @@ const char* const E_GL_EXT_terminate_invocation = "GL_EXT_terminate_invocation"; const char* const E_GL_EXT_shader_atomic_float = "GL_EXT_shader_atomic_float"; const char* const E_GL_EXT_shader_atomic_float2 = "GL_EXT_shader_atomic_float2"; +const char* const E_GL_EXT_shader_tile_image = "GL_EXT_shader_tile_image"; + +const char* const E_GL_EXT_texture_shadow_lod = "GL_EXT_texture_shadow_lod"; + // Arrays of extensions for the above AEP duplications const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader }; @@ -342,6 +376,9 @@ const int Num_AEP_texture_buffer = sizeof(AEP_texture_buffer)/sizeof(AEP_texture const char* const AEP_texture_cube_map_array[] = { E_GL_EXT_texture_cube_map_array, E_GL_OES_texture_cube_map_array }; const int Num_AEP_texture_cube_map_array = sizeof(AEP_texture_cube_map_array)/sizeof(AEP_texture_cube_map_array[0]); +const char* const AEP_mesh_shader[] = { E_GL_NV_mesh_shader, E_GL_EXT_mesh_shader }; +const int Num_AEP_mesh_shader = sizeof(AEP_mesh_shader)/sizeof(AEP_mesh_shader[0]); + } // end namespace glslang #endif // _VERSIONS_INCLUDED_ diff --git a/glslang/MachineIndependent/attribute.cpp b/glslang/MachineIndependent/attribute.cpp index df7fdc2a60..19e8faac33 100644 --- a/glslang/MachineIndependent/attribute.cpp +++ b/glslang/MachineIndependent/attribute.cpp @@ -34,8 +34,6 @@ // POSSIBILITY OF SUCH DAMAGE. // -#ifndef GLSLANG_WEB - #include "attribute.h" #include "../Include/intermediate.h" #include "ParseHelper.h" @@ -125,6 +123,10 @@ TAttributeType TParseContext::attributeFromName(const TString& name) const return EatPartialCount; else if (name == "subgroup_uniform_control_flow") return EatSubgroupUniformControlFlow; + else if (name == "export") + return EatExport; + else if (name == "maximally_reconverges") + return EatMaximallyReconverges; else return EatNone; } @@ -357,8 +359,13 @@ void TParseContext::handleFunctionAttributes(const TSourceLoc& loc, const TAttri switch (it->name) { case EatSubgroupUniformControlFlow: + requireExtensions(loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); intermediate.setSubgroupUniformControlFlow(); break; + case EatMaximallyReconverges: + requireExtensions(loc, 1, &E_GL_EXT_maximal_reconvergence, "attribute"); + intermediate.setMaximallyReconverges(); + break; default: warn(loc, "attribute does not apply to a function", "", ""); break; @@ -367,5 +374,3 @@ void TParseContext::handleFunctionAttributes(const TSourceLoc& loc, const TAttri } } // end namespace glslang - -#endif // GLSLANG_WEB diff --git a/glslang/MachineIndependent/attribute.h b/glslang/MachineIndependent/attribute.h index c5b29176c4..3b480c6f03 100644 --- a/glslang/MachineIndependent/attribute.h +++ b/glslang/MachineIndependent/attribute.h @@ -120,6 +120,8 @@ namespace glslang { EatNonWritable, EatNonReadable, EatSubgroupUniformControlFlow, + EatExport, + EatMaximallyReconverges, }; class TIntermAggregate; diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 deleted file mode 100644 index d4cc5bc9ce..0000000000 --- a/glslang/MachineIndependent/glslang.m4 +++ /dev/null @@ -1,4397 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2012-2013 LunarG, Inc. -// Copyright (C) 2017 ARM Limited. -// Copyright (C) 2015-2019 Google, Inc. -// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -// -// Do not edit the .y file, only edit the .m4 file. -// The .y bison file is not a source file, it is a derivative of the .m4 file. -// The m4 file needs to be processed by m4 to generate the .y bison file. -// -// Code sandwiched between a pair: -// -// GLSLANG_WEB_EXCLUDE_ON -// ... -// ... -// ... -// GLSLANG_WEB_EXCLUDE_OFF -// -// Will be excluded from the grammar when m4 is executed as: -// -// m4 -P -DGLSLANG_WEB -// -// It will be included when m4 is executed as: -// -// m4 -P -// - -m4_define(`GLSLANG_WEB_EXCLUDE_ON', `m4_ifdef(`GLSLANG_WEB', `m4_divert(`-1')')') -m4_define(`GLSLANG_WEB_EXCLUDE_OFF', `m4_ifdef(`GLSLANG_WEB', `m4_divert')') - -/** - * This is bison grammar and productions for parsing all versions of the - * GLSL shading languages. - */ -%{ - -/* Based on: -ANSI C Yacc grammar - -In 1985, Jeff Lee published his Yacc grammar (which is accompanied by a -matching Lex specification) for the April 30, 1985 draft version of the -ANSI C standard. Tom Stockfisch reposted it to net.sources in 1987; that -original, as mentioned in the answer to question 17.25 of the comp.lang.c -FAQ, can be ftp'ed from ftp.uu.net, file usenet/net.sources/ansi.c.grammar.Z. - -I intend to keep this version as close to the current C Standard grammar as -possible; please let me know if you discover discrepancies. - -Jutta Degener, 1995 -*/ - -#include "SymbolTable.h" -#include "ParseHelper.h" -#include "../Public/ShaderLang.h" -#include "attribute.h" - -using namespace glslang; - -%} - -%define parse.error verbose - -%union { - struct { - glslang::TSourceLoc loc; - union { - glslang::TString *string; - int i; - unsigned int u; - long long i64; - unsigned long long u64; - bool b; - double d; - }; - glslang::TSymbol* symbol; - } lex; - struct { - glslang::TSourceLoc loc; - glslang::TOperator op; - union { - TIntermNode* intermNode; - glslang::TIntermNodePair nodePair; - glslang::TIntermTyped* intermTypedNode; - glslang::TAttributes* attributes; - glslang::TSpirvRequirement* spirvReq; - glslang::TSpirvInstruction* spirvInst; - glslang::TSpirvTypeParameters* spirvTypeParams; - }; - union { - glslang::TPublicType type; - glslang::TFunction* function; - glslang::TParameter param; - glslang::TTypeLoc typeLine; - glslang::TTypeList* typeList; - glslang::TArraySizes* arraySizes; - glslang::TIdentifierList* identifierList; - }; - glslang::TArraySizes* typeParameters; - } interm; -} - -%{ - -/* windows only pragma */ -#ifdef _MSC_VER - #pragma warning(disable : 4065) - #pragma warning(disable : 4127) - #pragma warning(disable : 4244) -#endif - -#define parseContext (*pParseContext) -#define yyerror(context, msg) context->parserError(msg) - -extern int yylex(YYSTYPE*, TParseContext&); - -%} - -%parse-param {glslang::TParseContext* pParseContext} -%lex-param {parseContext} -%pure-parser // enable thread safety -%expect 1 // One shift reduce conflict because of if | else - -%token CONST BOOL INT UINT FLOAT -%token BVEC2 BVEC3 BVEC4 -%token IVEC2 IVEC3 IVEC4 -%token UVEC2 UVEC3 UVEC4 -%token VEC2 VEC3 VEC4 -%token MAT2 MAT3 MAT4 -%token MAT2X2 MAT2X3 MAT2X4 -%token MAT3X2 MAT3X3 MAT3X4 -%token MAT4X2 MAT4X3 MAT4X4 - -// combined image/sampler -%token SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER2DSHADOW -%token SAMPLERCUBESHADOW SAMPLER2DARRAY -%token SAMPLER2DARRAYSHADOW ISAMPLER2D ISAMPLER3D ISAMPLERCUBE -%token ISAMPLER2DARRAY USAMPLER2D USAMPLER3D -%token USAMPLERCUBE USAMPLER2DARRAY - -// separate image/sampler -%token SAMPLER SAMPLERSHADOW -%token TEXTURE2D TEXTURE3D TEXTURECUBE TEXTURE2DARRAY -%token ITEXTURE2D ITEXTURE3D ITEXTURECUBE ITEXTURE2DARRAY -%token UTEXTURE2D UTEXTURE3D UTEXTURECUBE UTEXTURE2DARRAY - -GLSLANG_WEB_EXCLUDE_ON - -%token ATTRIBUTE VARYING -%token FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T -%token INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T -%token I64VEC2 I64VEC3 I64VEC4 -%token U64VEC2 U64VEC3 U64VEC4 -%token I32VEC2 I32VEC3 I32VEC4 -%token U32VEC2 U32VEC3 U32VEC4 -%token I16VEC2 I16VEC3 I16VEC4 -%token U16VEC2 U16VEC3 U16VEC4 -%token I8VEC2 I8VEC3 I8VEC4 -%token U8VEC2 U8VEC3 U8VEC4 -%token DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4 -%token F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4 -%token F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4 -%token F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4 -%token DMAT2X2 DMAT2X3 DMAT2X4 -%token DMAT3X2 DMAT3X3 DMAT3X4 -%token DMAT4X2 DMAT4X3 DMAT4X4 -%token F16MAT2X2 F16MAT2X3 F16MAT2X4 -%token F16MAT3X2 F16MAT3X3 F16MAT3X4 -%token F16MAT4X2 F16MAT4X3 F16MAT4X4 -%token F32MAT2X2 F32MAT2X3 F32MAT2X4 -%token F32MAT3X2 F32MAT3X3 F32MAT3X4 -%token F32MAT4X2 F32MAT4X3 F32MAT4X4 -%token F64MAT2X2 F64MAT2X3 F64MAT2X4 -%token F64MAT3X2 F64MAT3X3 F64MAT3X4 -%token F64MAT4X2 F64MAT4X3 F64MAT4X4 -%token ATOMIC_UINT -%token ACCSTRUCTNV -%token ACCSTRUCTEXT -%token RAYQUERYEXT -%token FCOOPMATNV ICOOPMATNV UCOOPMATNV - -// combined image/sampler -%token SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW -%token ISAMPLERCUBEARRAY USAMPLERCUBEARRAY -%token SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW -%token SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT -%token SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER -%token SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS -%token SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY -%token SAMPLEREXTERNALOES -%token SAMPLEREXTERNAL2DY2YEXT -%token ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY -%token F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE -%token F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY -%token F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY -%token F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW -%token F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW - -// images -%token IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D -%token UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D -%token IMAGE2DRECT IIMAGE2DRECT UIMAGE2DRECT -%token IMAGECUBE IIMAGECUBE UIMAGECUBE -%token IMAGEBUFFER IIMAGEBUFFER UIMAGEBUFFER -%token IMAGE1DARRAY IIMAGE1DARRAY UIMAGE1DARRAY -%token IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY -%token IMAGECUBEARRAY IIMAGECUBEARRAY UIMAGECUBEARRAY -%token IMAGE2DMS IIMAGE2DMS UIMAGE2DMS -%token IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY - -%token F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT -%token F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY -%token F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY - -%token I64IMAGE1D U64IMAGE1D -%token I64IMAGE2D U64IMAGE2D -%token I64IMAGE3D U64IMAGE3D -%token I64IMAGE2DRECT U64IMAGE2DRECT -%token I64IMAGECUBE U64IMAGECUBE -%token I64IMAGEBUFFER U64IMAGEBUFFER -%token I64IMAGE1DARRAY U64IMAGE1DARRAY -%token I64IMAGE2DARRAY U64IMAGE2DARRAY -%token I64IMAGECUBEARRAY U64IMAGECUBEARRAY -%token I64IMAGE2DMS U64IMAGE2DMS -%token I64IMAGE2DMSARRAY U64IMAGE2DMSARRAY - -// texture without sampler -%token TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY -%token TEXTURE1D ITEXTURE1D UTEXTURE1D -%token TEXTURE1DARRAY ITEXTURE1DARRAY UTEXTURE1DARRAY -%token TEXTURE2DRECT ITEXTURE2DRECT UTEXTURE2DRECT -%token TEXTUREBUFFER ITEXTUREBUFFER UTEXTUREBUFFER -%token TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS -%token TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY - -%token F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE -%token F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY -%token F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY - -// input attachments -%token SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS -%token F16SUBPASSINPUT F16SUBPASSINPUTMS - -// spirv intrinsics -%token SPIRV_INSTRUCTION SPIRV_EXECUTION_MODE SPIRV_EXECUTION_MODE_ID -%token SPIRV_DECORATE SPIRV_DECORATE_ID SPIRV_DECORATE_STRING -%token SPIRV_TYPE SPIRV_STORAGE_CLASS SPIRV_BY_REFERENCE SPIRV_LITERAL - -GLSLANG_WEB_EXCLUDE_OFF - -%token LEFT_OP RIGHT_OP -%token INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP -%token AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN -%token MOD_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN -%token SUB_ASSIGN -%token STRING_LITERAL - -%token LEFT_PAREN RIGHT_PAREN LEFT_BRACKET RIGHT_BRACKET LEFT_BRACE RIGHT_BRACE DOT -%token COMMA COLON EQUAL SEMICOLON BANG DASH TILDE PLUS STAR SLASH PERCENT -%token LEFT_ANGLE RIGHT_ANGLE VERTICAL_BAR CARET AMPERSAND QUESTION - -%token INVARIANT -%token HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION -%token PACKED RESOURCE SUPERP - -%token FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT -%token IDENTIFIER TYPE_NAME -%token CENTROID IN OUT INOUT -%token STRUCT VOID WHILE -%token BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT -%token TERMINATE_INVOCATION -%token TERMINATE_RAY IGNORE_INTERSECTION -%token UNIFORM SHARED BUFFER -%token FLAT SMOOTH LAYOUT - -GLSLANG_WEB_EXCLUDE_ON -%token DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT -%token INT64CONSTANT UINT64CONSTANT -%token SUBROUTINE DEMOTE -%token PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV -%token PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT -%token PATCH SAMPLE NONUNIFORM -%token COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT -%token SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT -%token NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV -%token PRECISE -GLSLANG_WEB_EXCLUDE_OFF - -%type assignment_operator unary_operator -%type variable_identifier primary_expression postfix_expression -%type expression integer_expression assignment_expression -%type unary_expression multiplicative_expression additive_expression -%type relational_expression equality_expression -%type conditional_expression constant_expression -%type logical_or_expression logical_xor_expression logical_and_expression -%type shift_expression and_expression exclusive_or_expression inclusive_or_expression -%type function_call initializer condition conditionopt - -%type translation_unit function_definition -%type statement simple_statement -%type statement_list switch_statement_list compound_statement -%type declaration_statement selection_statement selection_statement_nonattributed expression_statement -%type switch_statement switch_statement_nonattributed case_label -%type declaration external_declaration -%type for_init_statement compound_statement_no_new_scope -%type selection_rest_statement for_rest_statement -%type iteration_statement iteration_statement_nonattributed jump_statement statement_no_new_scope statement_scoped -%type single_declaration init_declarator_list - -%type parameter_declaration parameter_declarator parameter_type_specifier - -%type array_specifier -%type invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier -%type layout_qualifier layout_qualifier_id_list layout_qualifier_id - -%type type_parameter_specifier -%type type_parameter_specifier_opt -%type type_parameter_specifier_list - -%type type_qualifier fully_specified_type type_specifier -%type single_type_qualifier -%type type_specifier_nonarray -%type struct_specifier -%type struct_declarator -%type struct_declarator_list struct_declaration struct_declaration_list -%type block_structure -%type function_header function_declarator -%type function_header_with_parameters -%type function_call_header_with_parameters function_call_header_no_parameters function_call_generic function_prototype -%type function_call_or_method function_identifier function_call_header - -%type identifier_list - -GLSLANG_WEB_EXCLUDE_ON -%type precise_qualifier non_uniform_qualifier -%type type_name_list -%type attribute attribute_list single_attribute -%type demote_statement -%type initializer_list -%type spirv_requirements_list spirv_requirements_parameter -%type spirv_extension_list spirv_capability_list -%type spirv_execution_mode_qualifier -%type spirv_execution_mode_parameter_list spirv_execution_mode_parameter spirv_execution_mode_id_parameter_list -%type spirv_storage_class_qualifier -%type spirv_decorate_qualifier -%type spirv_decorate_parameter_list spirv_decorate_parameter -%type spirv_decorate_id_parameter_list -%type spirv_decorate_string_parameter_list -%type spirv_type_specifier -%type spirv_type_parameter_list spirv_type_parameter -%type spirv_instruction_qualifier -%type spirv_instruction_qualifier_list spirv_instruction_qualifier_id -GLSLANG_WEB_EXCLUDE_OFF - -%start translation_unit -%% - -variable_identifier - : IDENTIFIER { - $$ = parseContext.handleVariable($1.loc, $1.symbol, $1.string); - } - ; - -primary_expression - : variable_identifier { - $$ = $1; - } - | LEFT_PAREN expression RIGHT_PAREN { - $$ = $2; - if ($$->getAsConstantUnion()) - $$->getAsConstantUnion()->setExpression(); - } - | FLOATCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true); - } - | INTCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true); - } - | UINTCONSTANT { - parseContext.fullIntegerCheck($1.loc, "unsigned literal"); - $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true); - } - | BOOLCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true); - } -GLSLANG_WEB_EXCLUDE_ON - | STRING_LITERAL { - $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true); - } - | INT32CONSTANT { - parseContext.explicitInt32Check($1.loc, "32-bit signed literal"); - $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true); - } - | UINT32CONSTANT { - parseContext.explicitInt32Check($1.loc, "32-bit signed literal"); - $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true); - } - | INT64CONSTANT { - parseContext.int64Check($1.loc, "64-bit integer literal"); - $$ = parseContext.intermediate.addConstantUnion($1.i64, $1.loc, true); - } - | UINT64CONSTANT { - parseContext.int64Check($1.loc, "64-bit unsigned integer literal"); - $$ = parseContext.intermediate.addConstantUnion($1.u64, $1.loc, true); - } - | INT16CONSTANT { - parseContext.explicitInt16Check($1.loc, "16-bit integer literal"); - $$ = parseContext.intermediate.addConstantUnion((short)$1.i, $1.loc, true); - } - | UINT16CONSTANT { - parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer literal"); - $$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true); - } - | DOUBLECONSTANT { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double literal"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double literal"); - $$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true); - } - | FLOAT16CONSTANT { - parseContext.float16Check($1.loc, "half float literal"); - $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true); - } -GLSLANG_WEB_EXCLUDE_OFF - ; - -postfix_expression - : primary_expression { - $$ = $1; - } - | postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET { - $$ = parseContext.handleBracketDereference($2.loc, $1, $3); - } - | function_call { - $$ = $1; - } - | postfix_expression DOT IDENTIFIER { - $$ = parseContext.handleDotDereference($3.loc, $1, *$3.string); - } - | postfix_expression INC_OP { - parseContext.variableCheck($1); - parseContext.lValueErrorCheck($2.loc, "++", $1); - $$ = parseContext.handleUnaryMath($2.loc, "++", EOpPostIncrement, $1); - } - | postfix_expression DEC_OP { - parseContext.variableCheck($1); - parseContext.lValueErrorCheck($2.loc, "--", $1); - $$ = parseContext.handleUnaryMath($2.loc, "--", EOpPostDecrement, $1); - } - ; - -integer_expression - : expression { - parseContext.integerCheck($1, "[]"); - $$ = $1; - } - ; - -function_call - : function_call_or_method { - $$ = parseContext.handleFunctionCall($1.loc, $1.function, $1.intermNode); - delete $1.function; - } - ; - -function_call_or_method - : function_call_generic { - $$ = $1; - } - ; - -function_call_generic - : function_call_header_with_parameters RIGHT_PAREN { - $$ = $1; - $$.loc = $2.loc; - } - | function_call_header_no_parameters RIGHT_PAREN { - $$ = $1; - $$.loc = $2.loc; - } - ; - -function_call_header_no_parameters - : function_call_header VOID { - $$ = $1; - } - | function_call_header { - $$ = $1; - } - ; - -function_call_header_with_parameters - : function_call_header assignment_expression { - TParameter param = { 0, new TType }; - param.type->shallowCopy($2->getType()); - $1.function->addParameter(param); - $$.function = $1.function; - $$.intermNode = $2; - } - | function_call_header_with_parameters COMMA assignment_expression { - TParameter param = { 0, new TType }; - param.type->shallowCopy($3->getType()); - $1.function->addParameter(param); - $$.function = $1.function; - $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc); - } - ; - -function_call_header - : function_identifier LEFT_PAREN { - $$ = $1; - } - ; - -// Grammar Note: Constructors look like functions, but are recognized as types. - -function_identifier - : type_specifier { - // Constructor - $$.intermNode = 0; - $$.function = parseContext.handleConstructorCall($1.loc, $1); - } - | postfix_expression { - // - // Should be a method or subroutine call, but we haven't recognized the arguments yet. - // - $$.function = 0; - $$.intermNode = 0; - - TIntermMethod* method = $1->getAsMethodNode(); - if (method) { - $$.function = new TFunction(&method->getMethodName(), TType(EbtInt), EOpArrayLength); - $$.intermNode = method->getObject(); - } else { - TIntermSymbol* symbol = $1->getAsSymbolNode(); - if (symbol) { - parseContext.reservedErrorCheck(symbol->getLoc(), symbol->getName()); - TFunction *function = new TFunction(&symbol->getName(), TType(EbtVoid)); - $$.function = function; - } else - parseContext.error($1->getLoc(), "function call, method, or subroutine call expected", "", ""); - } - - if ($$.function == 0) { - // error recover - TString* empty = NewPoolTString(""); - $$.function = new TFunction(empty, TType(EbtVoid), EOpNull); - } - } -GLSLANG_WEB_EXCLUDE_ON - | non_uniform_qualifier { - // Constructor - $$.intermNode = 0; - $$.function = parseContext.handleConstructorCall($1.loc, $1); - } -GLSLANG_WEB_EXCLUDE_OFF - ; - -unary_expression - : postfix_expression { - parseContext.variableCheck($1); - $$ = $1; - if (TIntermMethod* method = $1->getAsMethodNode()) - parseContext.error($1->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); - } - | INC_OP unary_expression { - parseContext.lValueErrorCheck($1.loc, "++", $2); - $$ = parseContext.handleUnaryMath($1.loc, "++", EOpPreIncrement, $2); - } - | DEC_OP unary_expression { - parseContext.lValueErrorCheck($1.loc, "--", $2); - $$ = parseContext.handleUnaryMath($1.loc, "--", EOpPreDecrement, $2); - } - | unary_operator unary_expression { - if ($1.op != EOpNull) { - char errorOp[2] = {0, 0}; - switch($1.op) { - case EOpNegative: errorOp[0] = '-'; break; - case EOpLogicalNot: errorOp[0] = '!'; break; - case EOpBitwiseNot: errorOp[0] = '~'; break; - default: break; // some compilers want this - } - $$ = parseContext.handleUnaryMath($1.loc, errorOp, $1.op, $2); - } else { - $$ = $2; - if ($$->getAsConstantUnion()) - $$->getAsConstantUnion()->setExpression(); - } - } - ; -// Grammar Note: No traditional style type casts. - -unary_operator - : PLUS { $$.loc = $1.loc; $$.op = EOpNull; } - | DASH { $$.loc = $1.loc; $$.op = EOpNegative; } - | BANG { $$.loc = $1.loc; $$.op = EOpLogicalNot; } - | TILDE { $$.loc = $1.loc; $$.op = EOpBitwiseNot; - parseContext.fullIntegerCheck($1.loc, "bitwise not"); } - ; -// Grammar Note: No '*' or '&' unary ops. Pointers are not supported. - -multiplicative_expression - : unary_expression { $$ = $1; } - | multiplicative_expression STAR unary_expression { - $$ = parseContext.handleBinaryMath($2.loc, "*", EOpMul, $1, $3); - if ($$ == 0) - $$ = $1; - } - | multiplicative_expression SLASH unary_expression { - $$ = parseContext.handleBinaryMath($2.loc, "/", EOpDiv, $1, $3); - if ($$ == 0) - $$ = $1; - } - | multiplicative_expression PERCENT unary_expression { - parseContext.fullIntegerCheck($2.loc, "%"); - $$ = parseContext.handleBinaryMath($2.loc, "%", EOpMod, $1, $3); - if ($$ == 0) - $$ = $1; - } - ; - -additive_expression - : multiplicative_expression { $$ = $1; } - | additive_expression PLUS multiplicative_expression { - $$ = parseContext.handleBinaryMath($2.loc, "+", EOpAdd, $1, $3); - if ($$ == 0) - $$ = $1; - } - | additive_expression DASH multiplicative_expression { - $$ = parseContext.handleBinaryMath($2.loc, "-", EOpSub, $1, $3); - if ($$ == 0) - $$ = $1; - } - ; - -shift_expression - : additive_expression { $$ = $1; } - | shift_expression LEFT_OP additive_expression { - parseContext.fullIntegerCheck($2.loc, "bit shift left"); - $$ = parseContext.handleBinaryMath($2.loc, "<<", EOpLeftShift, $1, $3); - if ($$ == 0) - $$ = $1; - } - | shift_expression RIGHT_OP additive_expression { - parseContext.fullIntegerCheck($2.loc, "bit shift right"); - $$ = parseContext.handleBinaryMath($2.loc, ">>", EOpRightShift, $1, $3); - if ($$ == 0) - $$ = $1; - } - ; - -relational_expression - : shift_expression { $$ = $1; } - | relational_expression LEFT_ANGLE shift_expression { - $$ = parseContext.handleBinaryMath($2.loc, "<", EOpLessThan, $1, $3); - if ($$ == 0) - $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); - } - | relational_expression RIGHT_ANGLE shift_expression { - $$ = parseContext.handleBinaryMath($2.loc, ">", EOpGreaterThan, $1, $3); - if ($$ == 0) - $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); - } - | relational_expression LE_OP shift_expression { - $$ = parseContext.handleBinaryMath($2.loc, "<=", EOpLessThanEqual, $1, $3); - if ($$ == 0) - $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); - } - | relational_expression GE_OP shift_expression { - $$ = parseContext.handleBinaryMath($2.loc, ">=", EOpGreaterThanEqual, $1, $3); - if ($$ == 0) - $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); - } - ; - -equality_expression - : relational_expression { $$ = $1; } - | equality_expression EQ_OP relational_expression { - parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison"); - parseContext.opaqueCheck($2.loc, $1->getType(), "=="); - parseContext.specializationCheck($2.loc, $1->getType(), "=="); - parseContext.referenceCheck($2.loc, $1->getType(), "=="); - $$ = parseContext.handleBinaryMath($2.loc, "==", EOpEqual, $1, $3); - if ($$ == 0) - $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); - } - | equality_expression NE_OP relational_expression { - parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison"); - parseContext.opaqueCheck($2.loc, $1->getType(), "!="); - parseContext.specializationCheck($2.loc, $1->getType(), "!="); - parseContext.referenceCheck($2.loc, $1->getType(), "!="); - $$ = parseContext.handleBinaryMath($2.loc, "!=", EOpNotEqual, $1, $3); - if ($$ == 0) - $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); - } - ; - -and_expression - : equality_expression { $$ = $1; } - | and_expression AMPERSAND equality_expression { - parseContext.fullIntegerCheck($2.loc, "bitwise and"); - $$ = parseContext.handleBinaryMath($2.loc, "&", EOpAnd, $1, $3); - if ($$ == 0) - $$ = $1; - } - ; - -exclusive_or_expression - : and_expression { $$ = $1; } - | exclusive_or_expression CARET and_expression { - parseContext.fullIntegerCheck($2.loc, "bitwise exclusive or"); - $$ = parseContext.handleBinaryMath($2.loc, "^", EOpExclusiveOr, $1, $3); - if ($$ == 0) - $$ = $1; - } - ; - -inclusive_or_expression - : exclusive_or_expression { $$ = $1; } - | inclusive_or_expression VERTICAL_BAR exclusive_or_expression { - parseContext.fullIntegerCheck($2.loc, "bitwise inclusive or"); - $$ = parseContext.handleBinaryMath($2.loc, "|", EOpInclusiveOr, $1, $3); - if ($$ == 0) - $$ = $1; - } - ; - -logical_and_expression - : inclusive_or_expression { $$ = $1; } - | logical_and_expression AND_OP inclusive_or_expression { - $$ = parseContext.handleBinaryMath($2.loc, "&&", EOpLogicalAnd, $1, $3); - if ($$ == 0) - $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); - } - ; - -logical_xor_expression - : logical_and_expression { $$ = $1; } - | logical_xor_expression XOR_OP logical_and_expression { - $$ = parseContext.handleBinaryMath($2.loc, "^^", EOpLogicalXor, $1, $3); - if ($$ == 0) - $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); - } - ; - -logical_or_expression - : logical_xor_expression { $$ = $1; } - | logical_or_expression OR_OP logical_xor_expression { - $$ = parseContext.handleBinaryMath($2.loc, "||", EOpLogicalOr, $1, $3); - if ($$ == 0) - $$ = parseContext.intermediate.addConstantUnion(false, $2.loc); - } - ; - -conditional_expression - : logical_or_expression { $$ = $1; } - | logical_or_expression QUESTION { - ++parseContext.controlFlowNestingLevel; - } - expression COLON assignment_expression { - --parseContext.controlFlowNestingLevel; - parseContext.boolCheck($2.loc, $1); - parseContext.rValueErrorCheck($2.loc, "?", $1); - parseContext.rValueErrorCheck($5.loc, ":", $4); - parseContext.rValueErrorCheck($5.loc, ":", $6); - $$ = parseContext.intermediate.addSelection($1, $4, $6, $2.loc); - if ($$ == 0) { - parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(), $6->getCompleteString()); - $$ = $6; - } - } - ; - -assignment_expression - : conditional_expression { $$ = $1; } - | unary_expression assignment_operator assignment_expression { - parseContext.arrayObjectCheck($2.loc, $1->getType(), "array assignment"); - parseContext.opaqueCheck($2.loc, $1->getType(), "="); - parseContext.storage16BitAssignmentCheck($2.loc, $1->getType(), "="); - parseContext.specializationCheck($2.loc, $1->getType(), "="); - parseContext.lValueErrorCheck($2.loc, "assign", $1); - 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()); - $$ = $1; - } - } - ; - -assignment_operator - : EQUAL { - $$.loc = $1.loc; - $$.op = EOpAssign; - } - | MUL_ASSIGN { - $$.loc = $1.loc; - $$.op = EOpMulAssign; - } - | DIV_ASSIGN { - $$.loc = $1.loc; - $$.op = EOpDivAssign; - } - | MOD_ASSIGN { - parseContext.fullIntegerCheck($1.loc, "%="); - $$.loc = $1.loc; - $$.op = EOpModAssign; - } - | ADD_ASSIGN { - $$.loc = $1.loc; - $$.op = EOpAddAssign; - } - | SUB_ASSIGN { - $$.loc = $1.loc; - $$.op = EOpSubAssign; - } - | LEFT_ASSIGN { - parseContext.fullIntegerCheck($1.loc, "bit-shift left assign"); - $$.loc = $1.loc; $$.op = EOpLeftShiftAssign; - } - | RIGHT_ASSIGN { - parseContext.fullIntegerCheck($1.loc, "bit-shift right assign"); - $$.loc = $1.loc; $$.op = EOpRightShiftAssign; - } - | AND_ASSIGN { - parseContext.fullIntegerCheck($1.loc, "bitwise-and assign"); - $$.loc = $1.loc; $$.op = EOpAndAssign; - } - | XOR_ASSIGN { - parseContext.fullIntegerCheck($1.loc, "bitwise-xor assign"); - $$.loc = $1.loc; $$.op = EOpExclusiveOrAssign; - } - | OR_ASSIGN { - parseContext.fullIntegerCheck($1.loc, "bitwise-or assign"); - $$.loc = $1.loc; $$.op = EOpInclusiveOrAssign; - } - ; - -expression - : assignment_expression { - $$ = $1; - } - | expression COMMA assignment_expression { - parseContext.samplerConstructorLocationCheck($2.loc, ",", $3); - $$ = parseContext.intermediate.addComma($1, $3, $2.loc); - if ($$ == 0) { - parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(), $3->getCompleteString()); - $$ = $3; - } - } - ; - -constant_expression - : conditional_expression { - parseContext.constantValueCheck($1, ""); - $$ = $1; - } - ; - -declaration - : function_prototype SEMICOLON { - parseContext.handleFunctionDeclarator($1.loc, *$1.function, true /* prototype */); - $$ = 0; - // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature - } -GLSLANG_WEB_EXCLUDE_ON - | spirv_instruction_qualifier function_prototype SEMICOLON { - parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier"); - $2.function->setSpirvInstruction(*$1); // Attach SPIR-V intruction qualifier - parseContext.handleFunctionDeclarator($2.loc, *$2.function, true /* prototype */); - $$ = 0; - // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature - } - | spirv_execution_mode_qualifier SEMICOLON { - parseContext.globalCheck($2.loc, "SPIR-V execution mode qualifier"); - parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier"); - $$ = 0; - } -GLSLANG_WEB_EXCLUDE_OFF - | init_declarator_list SEMICOLON { - if ($1.intermNode && $1.intermNode->getAsAggregate()) - $1.intermNode->getAsAggregate()->setOperator(EOpSequence); - $$ = $1.intermNode; - } - | PRECISION precision_qualifier type_specifier SEMICOLON { - parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "precision statement"); - // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope - parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]); - parseContext.setDefaultPrecision($1.loc, $3, $2.qualifier.precision); - $$ = 0; - } - | block_structure SEMICOLON { - parseContext.declareBlock($1.loc, *$1.typeList); - $$ = 0; - } - | block_structure IDENTIFIER SEMICOLON { - parseContext.declareBlock($1.loc, *$1.typeList, $2.string); - $$ = 0; - } - | block_structure IDENTIFIER array_specifier SEMICOLON { - parseContext.declareBlock($1.loc, *$1.typeList, $2.string, $3.arraySizes); - $$ = 0; - } - | type_qualifier SEMICOLON { - parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); - parseContext.updateStandaloneQualifierDefaults($1.loc, $1); - $$ = 0; - } - | type_qualifier IDENTIFIER SEMICOLON { - parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); - parseContext.addQualifierToExisting($1.loc, $1.qualifier, *$2.string); - $$ = 0; - } - | type_qualifier IDENTIFIER identifier_list SEMICOLON { - parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); - $3->push_back($2.string); - parseContext.addQualifierToExisting($1.loc, $1.qualifier, *$3); - $$ = 0; - } - ; - -block_structure - : type_qualifier IDENTIFIER LEFT_BRACE { parseContext.nestedBlockCheck($1.loc); } struct_declaration_list RIGHT_BRACE { - --parseContext.blockNestingLevel; - parseContext.blockName = $2.string; - parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); - parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); - parseContext.currentBlockQualifier = $1.qualifier; - $$.loc = $1.loc; - $$.typeList = $5; - } - -identifier_list - : COMMA IDENTIFIER { - $$ = new TIdentifierList; - $$->push_back($2.string); - } - | identifier_list COMMA IDENTIFIER { - $$ = $1; - $$->push_back($3.string); - } - ; - -function_prototype - : function_declarator RIGHT_PAREN { - $$.function = $1; - $$.loc = $2.loc; - } - | function_declarator RIGHT_PAREN attribute { - $$.function = $1; - $$.loc = $2.loc; - parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes($2.loc, *$3); - } - | attribute function_declarator RIGHT_PAREN { - $$.function = $2; - $$.loc = $3.loc; - parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes($3.loc, *$1); - } - | attribute function_declarator RIGHT_PAREN attribute { - $$.function = $2; - $$.loc = $3.loc; - parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes($3.loc, *$1); - parseContext.handleFunctionAttributes($3.loc, *$4); - } - ; - -function_declarator - : function_header { - $$ = $1; - } - | function_header_with_parameters { - $$ = $1; - } - ; - - -function_header_with_parameters - : function_header parameter_declaration { - // Add the parameter - $$ = $1; - if ($2.param.type->getBasicType() != EbtVoid) - $1->addParameter($2.param); - else - delete $2.param.type; - } - | function_header_with_parameters COMMA parameter_declaration { - // - // Only first parameter of one-parameter functions can be void - // The check for named parameters not being void is done in parameter_declarator - // - if ($3.param.type->getBasicType() == EbtVoid) { - // - // This parameter > first is void - // - parseContext.error($2.loc, "cannot be an argument type except for '(void)'", "void", ""); - delete $3.param.type; - } else { - // Add the parameter - $$ = $1; - $1->addParameter($3.param); - } - } - ; - -function_header - : fully_specified_type IDENTIFIER LEFT_PAREN { - if ($1.qualifier.storage != EvqGlobal && $1.qualifier.storage != EvqTemporary) { - parseContext.error($2.loc, "no qualifiers allowed for function return", - GetStorageQualifierString($1.qualifier.storage), ""); - } - if ($1.arraySizes) - parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); - - // Add the function as a prototype after parsing it (we do not support recursion) - TFunction *function; - TType type($1); - - // Potentially rename shader entry point function. No-op most of the time. - parseContext.renameShaderFunction($2.string); - - // Make the function - function = new TFunction($2.string, type); - $$ = function; - } - ; - -parameter_declarator - // Type + name - : type_specifier IDENTIFIER { - if ($1.arraySizes) { - parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); - parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); - parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); - } - if ($1.basicType == EbtVoid) { - parseContext.error($2.loc, "illegal use of type 'void'", $2.string->c_str(), ""); - } - parseContext.reservedErrorCheck($2.loc, *$2.string); - - TParameter param = {$2.string, new TType($1)}; - $$.loc = $2.loc; - $$.param = param; - } - | type_specifier IDENTIFIER array_specifier { - if ($1.arraySizes) { - parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); - parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); - parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); - } - TType* type = new TType($1); - type->transferArraySizes($3.arraySizes); - type->copyArrayInnerSizes($1.arraySizes); - - parseContext.arrayOfArrayVersionCheck($2.loc, type->getArraySizes()); - parseContext.arraySizeRequiredCheck($3.loc, *$3.arraySizes); - parseContext.reservedErrorCheck($2.loc, *$2.string); - - TParameter param = { $2.string, type }; - - $$.loc = $2.loc; - $$.param = param; - } - ; - -parameter_declaration - // - // With name - // - : type_qualifier parameter_declarator { - $$ = $2; - if ($1.qualifier.precision != EpqNone) - $$.param.type->getQualifier().precision = $1.qualifier.precision; - parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); - - parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); - parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type); - parseContext.paramCheckFix($1.loc, $1.qualifier, *$$.param.type); - - } - | parameter_declarator { - $$ = $1; - - parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type); - parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type); - parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); - } - // - // Without name - // - | type_qualifier parameter_type_specifier { - $$ = $2; - if ($1.qualifier.precision != EpqNone) - $$.param.type->getQualifier().precision = $1.qualifier.precision; - parseContext.precisionQualifierCheck($1.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); - - parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); - parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type); - parseContext.paramCheckFix($1.loc, $1.qualifier, *$$.param.type); - } - | parameter_type_specifier { - $$ = $1; - - parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type); - parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type); - parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); - } - ; - -parameter_type_specifier - : type_specifier { - TParameter param = { 0, new TType($1) }; - $$.param = param; - if ($1.arraySizes) - parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); - } - ; - -init_declarator_list - : single_declaration { - $$ = $1; - } - | init_declarator_list COMMA IDENTIFIER { - $$ = $1; - parseContext.declareVariable($3.loc, *$3.string, $1.type); - } - | init_declarator_list COMMA IDENTIFIER array_specifier { - $$ = $1; - parseContext.declareVariable($3.loc, *$3.string, $1.type, $4.arraySizes); - } - | init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer { - $$.type = $1.type; - TIntermNode* initNode = parseContext.declareVariable($3.loc, *$3.string, $1.type, $4.arraySizes, $6); - $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, initNode, $5.loc); - } - | init_declarator_list COMMA IDENTIFIER EQUAL initializer { - $$.type = $1.type; - TIntermNode* initNode = parseContext.declareVariable($3.loc, *$3.string, $1.type, 0, $5); - $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, initNode, $4.loc); - } - ; - -single_declaration - : fully_specified_type { - $$.type = $1; - $$.intermNode = 0; -GLSLANG_WEB_EXCLUDE_ON - parseContext.declareTypeDefaults($$.loc, $$.type); -GLSLANG_WEB_EXCLUDE_OFF - } - | fully_specified_type IDENTIFIER { - $$.type = $1; - $$.intermNode = 0; - parseContext.declareVariable($2.loc, *$2.string, $1); - } - | fully_specified_type IDENTIFIER array_specifier { - $$.type = $1; - $$.intermNode = 0; - parseContext.declareVariable($2.loc, *$2.string, $1, $3.arraySizes); - } - | fully_specified_type IDENTIFIER array_specifier EQUAL initializer { - $$.type = $1; - TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, $3.arraySizes, $5); - $$.intermNode = parseContext.intermediate.growAggregate(0, initNode, $4.loc); - } - | fully_specified_type IDENTIFIER EQUAL initializer { - $$.type = $1; - TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, 0, $4); - $$.intermNode = parseContext.intermediate.growAggregate(0, initNode, $3.loc); - } - -// Grammar Note: No 'enum', or 'typedef'. - -fully_specified_type - : type_specifier { - $$ = $1; - - parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $$); - if ($1.arraySizes) { - parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); - parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); - } - parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier); - } - | type_qualifier type_specifier { - parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); - parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $2); - - if ($2.arraySizes) { - parseContext.profileRequires($2.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); - parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type"); - } - - if ($2.arraySizes && parseContext.arrayQualifierError($2.loc, $1.qualifier)) - $2.arraySizes = nullptr; - - parseContext.checkNoShaderLayouts($2.loc, $1.shaderQualifiers); - $2.shaderQualifiers.merge($1.shaderQualifiers); - parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); - parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier); - - $$ = $2; - - if (! $$.qualifier.isInterpolation() && - ((parseContext.language == EShLangVertex && $$.qualifier.storage == EvqVaryingOut) || - (parseContext.language == EShLangFragment && $$.qualifier.storage == EvqVaryingIn))) - $$.qualifier.smooth = true; - } - ; - -invariant_qualifier - : INVARIANT { - parseContext.globalCheck($1.loc, "invariant"); - parseContext.profileRequires($$.loc, ENoProfile, 120, 0, "invariant"); - $$.init($1.loc); - $$.qualifier.invariant = true; - } - ; - -interpolation_qualifier - : SMOOTH { - parseContext.globalCheck($1.loc, "smooth"); - parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "smooth"); - parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "smooth"); - $$.init($1.loc); - $$.qualifier.smooth = true; - } - | FLAT { - parseContext.globalCheck($1.loc, "flat"); - parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "flat"); - parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "flat"); - $$.init($1.loc); - $$.qualifier.flat = true; - } -GLSLANG_WEB_EXCLUDE_ON - | NOPERSPECTIVE { - parseContext.globalCheck($1.loc, "noperspective"); - parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); - parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "noperspective"); - $$.init($1.loc); - $$.qualifier.nopersp = true; - } - | EXPLICITINTERPAMD { - parseContext.globalCheck($1.loc, "__explicitInterpAMD"); - parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); - parseContext.profileRequires($1.loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); - $$.init($1.loc); - $$.qualifier.explicitInterp = true; - } - | PERVERTEXNV { - parseContext.globalCheck($1.loc, "pervertexNV"); - parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); - parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); - parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); - $$.init($1.loc); - $$.qualifier.pervertexNV = true; - } - | PERPRIMITIVENV { - // No need for profile version or extension check. Shader stage already checks both. - parseContext.globalCheck($1.loc, "perprimitiveNV"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV"); - // Fragment shader stage doesn't check for extension. So we explicitly add below extension check. - if (parseContext.language == EShLangFragment) - parseContext.requireExtensions($1.loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV"); - $$.init($1.loc); - $$.qualifier.perPrimitiveNV = true; - } - | PERVIEWNV { - // No need for profile version or extension check. Shader stage already checks both. - parseContext.globalCheck($1.loc, "perviewNV"); - parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV"); - $$.init($1.loc); - $$.qualifier.perViewNV = true; - } - | PERTASKNV { - // No need for profile version or extension check. Shader stage already checks both. - parseContext.globalCheck($1.loc, "taskNV"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV"); - $$.init($1.loc); - $$.qualifier.perTaskNV = true; - } -GLSLANG_WEB_EXCLUDE_OFF - ; - -layout_qualifier - : LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN { - $$ = $3; - } - ; - -layout_qualifier_id_list - : layout_qualifier_id { - $$ = $1; - } - | layout_qualifier_id_list COMMA layout_qualifier_id { - $$ = $1; - $$.shaderQualifiers.merge($3.shaderQualifiers); - parseContext.mergeObjectLayoutQualifiers($$.qualifier, $3.qualifier, false); - } - -layout_qualifier_id - : IDENTIFIER { - $$.init($1.loc); - parseContext.setLayoutQualifier($1.loc, $$, *$1.string); - } - | IDENTIFIER EQUAL constant_expression { - $$.init($1.loc); - parseContext.setLayoutQualifier($1.loc, $$, *$1.string, $3); - } - | SHARED { // because "shared" is both an identifier and a keyword - $$.init($1.loc); - TString strShared("shared"); - parseContext.setLayoutQualifier($1.loc, $$, strShared); - } - ; - -GLSLANG_WEB_EXCLUDE_ON -precise_qualifier - : PRECISE { - parseContext.profileRequires($$.loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); - parseContext.profileRequires($1.loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); - $$.init($1.loc); - $$.qualifier.noContraction = true; - } - ; -GLSLANG_WEB_EXCLUDE_OFF - -type_qualifier - : single_type_qualifier { - $$ = $1; - } - | type_qualifier single_type_qualifier { - $$ = $1; - if ($$.basicType == EbtVoid) - $$.basicType = $2.basicType; - - $$.shaderQualifiers.merge($2.shaderQualifiers); - parseContext.mergeQualifiers($$.loc, $$.qualifier, $2.qualifier, false); - } - ; - -single_type_qualifier - : storage_qualifier { - $$ = $1; - } - | layout_qualifier { - $$ = $1; - } - | precision_qualifier { - parseContext.checkPrecisionQualifier($1.loc, $1.qualifier.precision); - $$ = $1; - } - | interpolation_qualifier { - // allow inheritance of storage qualifier from block declaration - $$ = $1; - } - | invariant_qualifier { - // allow inheritance of storage qualifier from block declaration - $$ = $1; - } -GLSLANG_WEB_EXCLUDE_ON - | precise_qualifier { - // allow inheritance of storage qualifier from block declaration - $$ = $1; - } - | non_uniform_qualifier { - $$ = $1; - } - | spirv_storage_class_qualifier { - parseContext.globalCheck($1.loc, "spirv_storage_class"); - parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V storage class qualifier"); - $$ = $1; - } - | spirv_decorate_qualifier { - parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier"); - $$ = $1; - } - | SPIRV_BY_REFERENCE { - parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_reference"); - $$.init($1.loc); - $$.qualifier.setSpirvByReference(); - } - | SPIRV_LITERAL { - parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_literal"); - $$.init($1.loc); - $$.qualifier.setSpirvLiteral(); - } -GLSLANG_WEB_EXCLUDE_OFF - ; - -storage_qualifier - : CONST { - $$.init($1.loc); - $$.qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant - } - | INOUT { - parseContext.globalCheck($1.loc, "inout"); - $$.init($1.loc); - $$.qualifier.storage = EvqInOut; - } - | IN { - parseContext.globalCheck($1.loc, "in"); - $$.init($1.loc); - // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later - $$.qualifier.storage = EvqIn; - } - | OUT { - parseContext.globalCheck($1.loc, "out"); - $$.init($1.loc); - // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later - $$.qualifier.storage = EvqOut; - } - | CENTROID { - parseContext.profileRequires($1.loc, ENoProfile, 120, 0, "centroid"); - parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "centroid"); - parseContext.globalCheck($1.loc, "centroid"); - $$.init($1.loc); - $$.qualifier.centroid = true; - } - | UNIFORM { - parseContext.globalCheck($1.loc, "uniform"); - $$.init($1.loc); - $$.qualifier.storage = EvqUniform; - } - | SHARED { - parseContext.globalCheck($1.loc, "shared"); - parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); - parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared"); - $$.init($1.loc); - $$.qualifier.storage = EvqShared; - } - | BUFFER { - parseContext.globalCheck($1.loc, "buffer"); - $$.init($1.loc); - $$.qualifier.storage = EvqBuffer; - } -GLSLANG_WEB_EXCLUDE_ON - | ATTRIBUTE { - parseContext.requireStage($1.loc, EShLangVertex, "attribute"); - parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "attribute"); - parseContext.checkDeprecated($1.loc, ENoProfile, 130, "attribute"); - parseContext.requireNotRemoved($1.loc, ECoreProfile, 420, "attribute"); - parseContext.requireNotRemoved($1.loc, EEsProfile, 300, "attribute"); - - parseContext.globalCheck($1.loc, "attribute"); - - $$.init($1.loc); - $$.qualifier.storage = EvqVaryingIn; - } - | VARYING { - parseContext.checkDeprecated($1.loc, ENoProfile, 130, "varying"); - parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "varying"); - parseContext.requireNotRemoved($1.loc, ECoreProfile, 420, "varying"); - parseContext.requireNotRemoved($1.loc, EEsProfile, 300, "varying"); - - parseContext.globalCheck($1.loc, "varying"); - - $$.init($1.loc); - if (parseContext.language == EShLangVertex) - $$.qualifier.storage = EvqVaryingOut; - else - $$.qualifier.storage = EvqVaryingIn; - } - | PATCH { - parseContext.globalCheck($1.loc, "patch"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); - $$.init($1.loc); - $$.qualifier.patch = true; - } - | SAMPLE { - parseContext.globalCheck($1.loc, "sample"); - $$.init($1.loc); - $$.qualifier.sample = true; - } - | HITATTRNV { - parseContext.globalCheck($1.loc, "hitAttributeNV"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask - | EShLangAnyHitMask), "hitAttributeNV"); - parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV"); - $$.init($1.loc); - $$.qualifier.storage = EvqHitAttr; - } - | HITATTREXT { - parseContext.globalCheck($1.loc, "hitAttributeEXT"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask - | EShLangAnyHitMask), "hitAttributeEXT"); - parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "hitAttributeNV"); - $$.init($1.loc); - $$.qualifier.storage = EvqHitAttr; - } - | PAYLOADNV { - parseContext.globalCheck($1.loc, "rayPayloadNV"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | - EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV"); - parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV"); - $$.init($1.loc); - $$.qualifier.storage = EvqPayload; - } - | PAYLOADEXT { - parseContext.globalCheck($1.loc, "rayPayloadEXT"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | - EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT"); - parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadEXT"); - $$.init($1.loc); - $$.qualifier.storage = EvqPayload; - } - | PAYLOADINNV { - parseContext.globalCheck($1.loc, "rayPayloadInNV"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitMask | - EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV"); - parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV"); - $$.init($1.loc); - $$.qualifier.storage = EvqPayloadIn; - } - | PAYLOADINEXT { - parseContext.globalCheck($1.loc, "rayPayloadInEXT"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitMask | - EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT"); - parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadInEXT"); - $$.init($1.loc); - $$.qualifier.storage = EvqPayloadIn; - } - | CALLDATANV { - parseContext.globalCheck($1.loc, "callableDataNV"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | - EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV"); - parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV"); - $$.init($1.loc); - $$.qualifier.storage = EvqCallableData; - } - | CALLDATAEXT { - parseContext.globalCheck($1.loc, "callableDataEXT"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | - EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT"); - parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataEXT"); - $$.init($1.loc); - $$.qualifier.storage = EvqCallableData; - } - | CALLDATAINNV { - parseContext.globalCheck($1.loc, "callableDataInNV"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); - parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV"); - $$.init($1.loc); - $$.qualifier.storage = EvqCallableDataIn; - } - | CALLDATAINEXT { - parseContext.globalCheck($1.loc, "callableDataInEXT"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); - parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT"); - $$.init($1.loc); - $$.qualifier.storage = EvqCallableDataIn; - } - | COHERENT { - $$.init($1.loc); - $$.qualifier.coherent = true; - } - | DEVICECOHERENT { - $$.init($1.loc); - parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); - $$.qualifier.devicecoherent = true; - } - | QUEUEFAMILYCOHERENT { - $$.init($1.loc); - parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); - $$.qualifier.queuefamilycoherent = true; - } - | WORKGROUPCOHERENT { - $$.init($1.loc); - parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); - $$.qualifier.workgroupcoherent = true; - } - | SUBGROUPCOHERENT { - $$.init($1.loc); - parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); - $$.qualifier.subgroupcoherent = true; - } - | NONPRIVATE { - $$.init($1.loc); - parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); - $$.qualifier.nonprivate = true; - } - | SHADERCALLCOHERENT { - $$.init($1.loc); - parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent"); - $$.qualifier.shadercallcoherent = true; - } - | VOLATILE { - $$.init($1.loc); - $$.qualifier.volatil = true; - } - | RESTRICT { - $$.init($1.loc); - $$.qualifier.restrict = true; - } - | READONLY { - $$.init($1.loc); - $$.qualifier.readonly = true; - } - | WRITEONLY { - $$.init($1.loc); - $$.qualifier.writeonly = true; - } - | SUBROUTINE { - parseContext.spvRemoved($1.loc, "subroutine"); - parseContext.globalCheck($1.loc, "subroutine"); - parseContext.unimplemented($1.loc, "subroutine"); - $$.init($1.loc); - } - | SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN { - parseContext.spvRemoved($1.loc, "subroutine"); - parseContext.globalCheck($1.loc, "subroutine"); - parseContext.unimplemented($1.loc, "subroutine"); - $$.init($1.loc); - } -GLSLANG_WEB_EXCLUDE_OFF - ; - -GLSLANG_WEB_EXCLUDE_ON -non_uniform_qualifier - : NONUNIFORM { - $$.init($1.loc); - $$.qualifier.nonUniform = true; - } - ; - -type_name_list - : IDENTIFIER { - // TODO - } - | type_name_list COMMA IDENTIFIER { - // TODO: 4.0 semantics: subroutines - // 1) make sure each identifier is a type declared earlier with SUBROUTINE - // 2) save all of the identifiers for future comparison with the declared function - } - ; -GLSLANG_WEB_EXCLUDE_OFF - -type_specifier - : type_specifier_nonarray type_parameter_specifier_opt { - $$ = $1; - $$.qualifier.precision = parseContext.getDefaultPrecision($$); - $$.typeParameters = $2; - } - | type_specifier_nonarray type_parameter_specifier_opt array_specifier { - parseContext.arrayOfArrayVersionCheck($3.loc, $3.arraySizes); - $$ = $1; - $$.qualifier.precision = parseContext.getDefaultPrecision($$); - $$.typeParameters = $2; - $$.arraySizes = $3.arraySizes; - } - ; - -array_specifier - : LEFT_BRACKET RIGHT_BRACKET { - $$.loc = $1.loc; - $$.arraySizes = new TArraySizes; - $$.arraySizes->addInnerSize(); - } - | LEFT_BRACKET conditional_expression RIGHT_BRACKET { - $$.loc = $1.loc; - $$.arraySizes = new TArraySizes; - - TArraySize size; - parseContext.arraySizeCheck($2->getLoc(), $2, size, "array size"); - $$.arraySizes->addInnerSize(size); - } - | array_specifier LEFT_BRACKET RIGHT_BRACKET { - $$ = $1; - $$.arraySizes->addInnerSize(); - } - | array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET { - $$ = $1; - - TArraySize size; - parseContext.arraySizeCheck($3->getLoc(), $3, size, "array size"); - $$.arraySizes->addInnerSize(size); - } - ; - -type_parameter_specifier_opt - : type_parameter_specifier { - $$ = $1; - } - | /* May be null */ { - $$ = 0; - } - ; - -type_parameter_specifier - : LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE { - $$ = $2; - } - ; - -type_parameter_specifier_list - : unary_expression { - $$ = new TArraySizes; - - TArraySize size; - parseContext.arraySizeCheck($1->getLoc(), $1, size, "type parameter"); - $$->addInnerSize(size); - } - | type_parameter_specifier_list COMMA unary_expression { - $$ = $1; - - TArraySize size; - parseContext.arraySizeCheck($3->getLoc(), $3, size, "type parameter"); - $$->addInnerSize(size); - } - ; - -type_specifier_nonarray - : VOID { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtVoid; - } - | FLOAT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - } - | INT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt; - } - | UINT { - parseContext.fullIntegerCheck($1.loc, "unsigned integer"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint; - } - | BOOL { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtBool; - } - | VEC2 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setVector(2); - } - | VEC3 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setVector(3); - } - | VEC4 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setVector(4); - } - | BVEC2 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtBool; - $$.setVector(2); - } - | BVEC3 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtBool; - $$.setVector(3); - } - | BVEC4 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtBool; - $$.setVector(4); - } - | IVEC2 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt; - $$.setVector(2); - } - | IVEC3 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt; - $$.setVector(3); - } - | IVEC4 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt; - $$.setVector(4); - } - | UVEC2 { - parseContext.fullIntegerCheck($1.loc, "unsigned integer vector"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint; - $$.setVector(2); - } - | UVEC3 { - parseContext.fullIntegerCheck($1.loc, "unsigned integer vector"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint; - $$.setVector(3); - } - | UVEC4 { - parseContext.fullIntegerCheck($1.loc, "unsigned integer vector"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint; - $$.setVector(4); - } - | MAT2 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(2, 2); - } - | MAT3 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(3, 3); - } - | MAT4 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(4, 4); - } - | MAT2X2 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(2, 2); - } - | MAT2X3 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(2, 3); - } - | MAT2X4 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(2, 4); - } - | MAT3X2 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(3, 2); - } - | MAT3X3 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(3, 3); - } - | MAT3X4 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(3, 4); - } - | MAT4X2 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(4, 2); - } - | MAT4X3 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(4, 3); - } - | MAT4X4 { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(4, 4); - } -GLSLANG_WEB_EXCLUDE_ON - | DOUBLE { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - } - | FLOAT16_T { - parseContext.float16ScalarVectorCheck($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - } - | FLOAT32_T { - parseContext.explicitFloat32Check($1.loc, "float32_t", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - } - | FLOAT64_T { - parseContext.explicitFloat64Check($1.loc, "float64_t", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - } - | INT8_T { - parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt8; - } - | UINT8_T { - parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint8; - } - | INT16_T { - parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt16; - } - | UINT16_T { - parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint16; - } - | INT32_T { - parseContext.explicitInt32Check($1.loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt; - } - | UINT32_T { - parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint; - } - | INT64_T { - parseContext.int64Check($1.loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt64; - } - | UINT64_T { - parseContext.int64Check($1.loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint64; - } - | DVEC2 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double vector"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setVector(2); - } - | DVEC3 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double vector"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setVector(3); - } - | DVEC4 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double vector"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setVector(4); - } - | F16VEC2 { - parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setVector(2); - } - | F16VEC3 { - parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setVector(3); - } - | F16VEC4 { - parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setVector(4); - } - | F32VEC2 { - parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setVector(2); - } - | F32VEC3 { - parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setVector(3); - } - | F32VEC4 { - parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setVector(4); - } - | F64VEC2 { - parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setVector(2); - } - | F64VEC3 { - parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setVector(3); - } - | F64VEC4 { - parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setVector(4); - } - | I8VEC2 { - parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt8; - $$.setVector(2); - } - | I8VEC3 { - parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt8; - $$.setVector(3); - } - | I8VEC4 { - parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt8; - $$.setVector(4); - } - | I16VEC2 { - parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt16; - $$.setVector(2); - } - | I16VEC3 { - parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt16; - $$.setVector(3); - } - | I16VEC4 { - parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt16; - $$.setVector(4); - } - | I32VEC2 { - parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt; - $$.setVector(2); - } - | I32VEC3 { - parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt; - $$.setVector(3); - } - | I32VEC4 { - parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt; - $$.setVector(4); - } - | I64VEC2 { - parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt64; - $$.setVector(2); - } - | I64VEC3 { - parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt64; - $$.setVector(3); - } - | I64VEC4 { - parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt64; - $$.setVector(4); - } - | U8VEC2 { - parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint8; - $$.setVector(2); - } - | U8VEC3 { - parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint8; - $$.setVector(3); - } - | U8VEC4 { - parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint8; - $$.setVector(4); - } - | U16VEC2 { - parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint16; - $$.setVector(2); - } - | U16VEC3 { - parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint16; - $$.setVector(3); - } - | U16VEC4 { - parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint16; - $$.setVector(4); - } - | U32VEC2 { - parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint; - $$.setVector(2); - } - | U32VEC3 { - parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint; - $$.setVector(3); - } - | U32VEC4 { - parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint; - $$.setVector(4); - } - | U64VEC2 { - parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint64; - $$.setVector(2); - } - | U64VEC3 { - parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint64; - $$.setVector(3); - } - | U64VEC4 { - parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint64; - $$.setVector(4); - } - | DMAT2 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(2, 2); - } - | DMAT3 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(3, 3); - } - | DMAT4 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(4, 4); - } - | DMAT2X2 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(2, 2); - } - | DMAT2X3 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(2, 3); - } - | DMAT2X4 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(2, 4); - } - | DMAT3X2 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(3, 2); - } - | DMAT3X3 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(3, 3); - } - | DMAT3X4 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(3, 4); - } - | DMAT4X2 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(4, 2); - } - | DMAT4X3 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(4, 3); - } - | DMAT4X4 { - parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck($1.loc, "double matrix"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(4, 4); - } - | F16MAT2 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(2, 2); - } - | F16MAT3 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(3, 3); - } - | F16MAT4 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(4, 4); - } - | F16MAT2X2 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(2, 2); - } - | F16MAT2X3 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(2, 3); - } - | F16MAT2X4 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(2, 4); - } - | F16MAT3X2 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(3, 2); - } - | F16MAT3X3 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(3, 3); - } - | F16MAT3X4 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(3, 4); - } - | F16MAT4X2 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(4, 2); - } - | F16MAT4X3 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(4, 3); - } - | F16MAT4X4 { - parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat16; - $$.setMatrix(4, 4); - } - | F32MAT2 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(2, 2); - } - | F32MAT3 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(3, 3); - } - | F32MAT4 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(4, 4); - } - | F32MAT2X2 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(2, 2); - } - | F32MAT2X3 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(2, 3); - } - | F32MAT2X4 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(2, 4); - } - | F32MAT3X2 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(3, 2); - } - | F32MAT3X3 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(3, 3); - } - | F32MAT3X4 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(3, 4); - } - | F32MAT4X2 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(4, 2); - } - | F32MAT4X3 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(4, 3); - } - | F32MAT4X4 { - parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.setMatrix(4, 4); - } - | F64MAT2 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(2, 2); - } - | F64MAT3 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(3, 3); - } - | F64MAT4 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(4, 4); - } - | F64MAT2X2 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(2, 2); - } - | F64MAT2X3 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(2, 3); - } - | F64MAT2X4 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(2, 4); - } - | F64MAT3X2 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(3, 2); - } - | F64MAT3X3 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(3, 3); - } - | F64MAT3X4 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(3, 4); - } - | F64MAT4X2 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(4, 2); - } - | F64MAT4X3 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(4, 3); - } - | F64MAT4X4 { - parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtDouble; - $$.setMatrix(4, 4); - } - | ACCSTRUCTNV { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtAccStruct; - } - | ACCSTRUCTEXT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtAccStruct; - } - | RAYQUERYEXT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtRayQuery; - } - | ATOMIC_UINT { - parseContext.vulkanRemoved($1.loc, "atomic counter types"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtAtomicUint; - } - | SAMPLER1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd1D); - } -GLSLANG_WEB_EXCLUDE_OFF - | SAMPLER2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd2D); - } - | SAMPLER3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd3D); - } - | SAMPLERCUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, EsdCube); - } - | SAMPLER2DSHADOW { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd2D, false, true); - } - | SAMPLERCUBESHADOW { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, EsdCube, false, true); - } - | SAMPLER2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd2D, true); - } - | SAMPLER2DARRAYSHADOW { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd2D, true, true); - } -GLSLANG_WEB_EXCLUDE_ON - | SAMPLER1DSHADOW { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd1D, false, true); - } - | SAMPLER1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd1D, true); - } - | SAMPLER1DARRAYSHADOW { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd1D, true, true); - } - | SAMPLERCUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, EsdCube, true); - } - | SAMPLERCUBEARRAYSHADOW { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, EsdCube, true, true); - } - | F16SAMPLER1D { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd1D); - } - | F16SAMPLER2D { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd2D); - } - | F16SAMPLER3D { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd3D); - } - | F16SAMPLERCUBE { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, EsdCube); - } - | F16SAMPLER1DSHADOW { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd1D, false, true); - } - | F16SAMPLER2DSHADOW { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd2D, false, true); - } - | F16SAMPLERCUBESHADOW { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, EsdCube, false, true); - } - | F16SAMPLER1DARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd1D, true); - } - | F16SAMPLER2DARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd2D, true); - } - | F16SAMPLER1DARRAYSHADOW { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd1D, true, true); - } - | F16SAMPLER2DARRAYSHADOW { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd2D, true, true); - } - | F16SAMPLERCUBEARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, EsdCube, true); - } - | F16SAMPLERCUBEARRAYSHADOW { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, EsdCube, true, true); - } - | ISAMPLER1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, Esd1D); - } -GLSLANG_WEB_EXCLUDE_OFF - | ISAMPLER2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, Esd2D); - } - | ISAMPLER3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, Esd3D); - } - | ISAMPLERCUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, EsdCube); - } - | ISAMPLER2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, Esd2D, true); - } - | USAMPLER2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, Esd2D); - } - | USAMPLER3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, Esd3D); - } - | USAMPLERCUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, EsdCube); - } -GLSLANG_WEB_EXCLUDE_ON - | ISAMPLER1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, Esd1D, true); - } - | ISAMPLERCUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, EsdCube, true); - } - | USAMPLER1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, Esd1D); - } - | USAMPLER1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, Esd1D, true); - } - | USAMPLERCUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, EsdCube, true); - } - | TEXTURECUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, EsdCube, true); - } - | ITEXTURECUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, EsdCube, true); - } - | UTEXTURECUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, EsdCube, true); - } -GLSLANG_WEB_EXCLUDE_OFF - | USAMPLER2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, Esd2D, true); - } - | TEXTURE2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, Esd2D); - } - | TEXTURE3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, Esd3D); - } - | TEXTURE2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, Esd2D, true); - } - | TEXTURECUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, EsdCube); - } - | ITEXTURE2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, Esd2D); - } - | ITEXTURE3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, Esd3D); - } - | ITEXTURECUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, EsdCube); - } - | ITEXTURE2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, Esd2D, true); - } - | UTEXTURE2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, Esd2D); - } - | UTEXTURE3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, Esd3D); - } - | UTEXTURECUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, EsdCube); - } - | UTEXTURE2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, Esd2D, true); - } - | SAMPLER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setPureSampler(false); - } - | SAMPLERSHADOW { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setPureSampler(true); - } -GLSLANG_WEB_EXCLUDE_ON - | SAMPLER2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, EsdRect); - } - | SAMPLER2DRECTSHADOW { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, EsdRect, false, true); - } - | F16SAMPLER2DRECT { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, EsdRect); - } - | F16SAMPLER2DRECTSHADOW { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, EsdRect, false, true); - } - | ISAMPLER2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, EsdRect); - } - | USAMPLER2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, EsdRect); - } - | SAMPLERBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, EsdBuffer); - } - | F16SAMPLERBUFFER { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, EsdBuffer); - } - | ISAMPLERBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, EsdBuffer); - } - | USAMPLERBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, EsdBuffer); - } - | SAMPLER2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd2D, false, false, true); - } - | F16SAMPLER2DMS { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd2D, false, false, true); - } - | ISAMPLER2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, Esd2D, false, false, true); - } - | USAMPLER2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, Esd2D, false, false, true); - } - | SAMPLER2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd2D, true, false, true); - } - | F16SAMPLER2DMSARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat16, Esd2D, true, false, true); - } - | ISAMPLER2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtInt, Esd2D, true, false, true); - } - | USAMPLER2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtUint, Esd2D, true, false, true); - } - | TEXTURE1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, Esd1D); - } - | F16TEXTURE1D { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, Esd1D); - } - | F16TEXTURE2D { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, Esd2D); - } - | F16TEXTURE3D { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, Esd3D); - } - | F16TEXTURECUBE { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, EsdCube); - } - | TEXTURE1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, Esd1D, true); - } - | F16TEXTURE1DARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, Esd1D, true); - } - | F16TEXTURE2DARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, Esd2D, true); - } - | F16TEXTURECUBEARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, EsdCube, true); - } - | ITEXTURE1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, Esd1D); - } - | ITEXTURE1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, Esd1D, true); - } - | UTEXTURE1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, Esd1D); - } - | UTEXTURE1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, Esd1D, true); - } - | TEXTURE2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, EsdRect); - } - | F16TEXTURE2DRECT { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, EsdRect); - } - | ITEXTURE2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, EsdRect); - } - | UTEXTURE2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, EsdRect); - } - | TEXTUREBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, EsdBuffer); - } - | F16TEXTUREBUFFER { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, EsdBuffer); - } - | ITEXTUREBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, EsdBuffer); - } - | UTEXTUREBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, EsdBuffer); - } - | TEXTURE2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, Esd2D, false, false, true); - } - | F16TEXTURE2DMS { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, Esd2D, false, false, true); - } - | ITEXTURE2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, Esd2D, false, false, true); - } - | UTEXTURE2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, Esd2D, false, false, true); - } - | TEXTURE2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat, Esd2D, true, false, true); - } - | F16TEXTURE2DMSARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtFloat16, Esd2D, true, false, true); - } - | ITEXTURE2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtInt, Esd2D, true, false, true); - } - | UTEXTURE2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setTexture(EbtUint, Esd2D, true, false, true); - } - | IMAGE1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, Esd1D); - } - | F16IMAGE1D { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, Esd1D); - } - | IIMAGE1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, Esd1D); - } - | UIMAGE1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, Esd1D); - } - | IMAGE2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, Esd2D); - } - | F16IMAGE2D { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, Esd2D); - } - | IIMAGE2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, Esd2D); - } - | UIMAGE2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, Esd2D); - } - | IMAGE3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, Esd3D); - } - | F16IMAGE3D { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, Esd3D); - } - | IIMAGE3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, Esd3D); - } - | UIMAGE3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, Esd3D); - } - | IMAGE2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, EsdRect); - } - | F16IMAGE2DRECT { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, EsdRect); - } - | IIMAGE2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, EsdRect); - } - | UIMAGE2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, EsdRect); - } - | IMAGECUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, EsdCube); - } - | F16IMAGECUBE { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, EsdCube); - } - | IIMAGECUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, EsdCube); - } - | UIMAGECUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, EsdCube); - } - | IMAGEBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, EsdBuffer); - } - | F16IMAGEBUFFER { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, EsdBuffer); - } - | IIMAGEBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, EsdBuffer); - } - | UIMAGEBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, EsdBuffer); - } - | IMAGE1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, Esd1D, true); - } - | F16IMAGE1DARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, Esd1D, true); - } - | IIMAGE1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, Esd1D, true); - } - | UIMAGE1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, Esd1D, true); - } - | IMAGE2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, Esd2D, true); - } - | F16IMAGE2DARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, Esd2D, true); - } - | IIMAGE2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, Esd2D, true); - } - | UIMAGE2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, Esd2D, true); - } - | IMAGECUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, EsdCube, true); - } - | F16IMAGECUBEARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, EsdCube, true); - } - | IIMAGECUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, EsdCube, true); - } - | UIMAGECUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, EsdCube, true); - } - | IMAGE2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, Esd2D, false, false, true); - } - | F16IMAGE2DMS { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, Esd2D, false, false, true); - } - | IIMAGE2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, Esd2D, false, false, true); - } - | UIMAGE2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, Esd2D, false, false, true); - } - | IMAGE2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat, Esd2D, true, false, true); - } - | F16IMAGE2DMSARRAY { - parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true); - } - | IIMAGE2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt, Esd2D, true, false, true); - } - | UIMAGE2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint, Esd2D, true, false, true); - } - | I64IMAGE1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, Esd1D); - } - | U64IMAGE1D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, Esd1D); - } - | I64IMAGE2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, Esd2D); - } - | U64IMAGE2D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, Esd2D); - } - | I64IMAGE3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, Esd3D); - } - | U64IMAGE3D { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, Esd3D); - } - | I64IMAGE2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, EsdRect); - } - | U64IMAGE2DRECT { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, EsdRect); - } - | I64IMAGECUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, EsdCube); - } - | U64IMAGECUBE { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, EsdCube); - } - | I64IMAGEBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, EsdBuffer); - } - | U64IMAGEBUFFER { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, EsdBuffer); - } - | I64IMAGE1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, Esd1D, true); - } - | U64IMAGE1DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, Esd1D, true); - } - | I64IMAGE2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, Esd2D, true); - } - | U64IMAGE2DARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, Esd2D, true); - } - | I64IMAGECUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, EsdCube, true); - } - | U64IMAGECUBEARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, EsdCube, true); - } - | I64IMAGE2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, Esd2D, false, false, true); - } - | U64IMAGE2DMS { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, Esd2D, false, false, true); - } - | I64IMAGE2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtInt64, Esd2D, true, false, true); - } - | U64IMAGE2DMSARRAY { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setImage(EbtUint64, Esd2D, true, false, true); - } - | SAMPLEREXTERNALOES { // GL_OES_EGL_image_external - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd2D); - $$.sampler.external = true; - } - | SAMPLEREXTERNAL2DY2YEXT { // GL_EXT_YUV_target - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.set(EbtFloat, Esd2D); - $$.sampler.yuv = true; - } - | SUBPASSINPUT { - parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setSubpass(EbtFloat); - } - | SUBPASSINPUTMS { - parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setSubpass(EbtFloat, true); - } - | F16SUBPASSINPUT { - parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); - parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setSubpass(EbtFloat16); - } - | F16SUBPASSINPUTMS { - parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); - parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setSubpass(EbtFloat16, true); - } - | ISUBPASSINPUT { - parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setSubpass(EbtInt); - } - | ISUBPASSINPUTMS { - parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setSubpass(EbtInt, true); - } - | USUBPASSINPUT { - parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setSubpass(EbtUint); - } - | USUBPASSINPUTMS { - parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtSampler; - $$.sampler.setSubpass(EbtUint, true); - } - | FCOOPMATNV { - parseContext.fcoopmatCheck($1.loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtFloat; - $$.coopmat = true; - } - | ICOOPMATNV { - parseContext.intcoopmatCheck($1.loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtInt; - $$.coopmat = true; - } - | UCOOPMATNV { - parseContext.intcoopmatCheck($1.loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtUint; - $$.coopmat = true; - } - | spirv_type_specifier { - parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier"); - $$ = $1; - } -GLSLANG_WEB_EXCLUDE_OFF - | struct_specifier { - $$ = $1; - $$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; - parseContext.structTypeCheck($$.loc, $$); - } - | TYPE_NAME { - // - // This is for user defined type names. The lexical phase looked up the - // type. - // - if (const TVariable* variable = ($1.symbol)->getAsVariable()) { - const TType& structure = variable->getType(); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.basicType = EbtStruct; - $$.userDef = &structure; - } else - parseContext.error($1.loc, "expected type name", $1.string->c_str(), ""); - } - ; - -precision_qualifier - : HIGH_PRECISION { - parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "highp precision qualifier"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqHigh); - } - | MEDIUM_PRECISION { - parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "mediump precision qualifier"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqMedium); - } - | LOW_PRECISION { - parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "lowp precision qualifier"); - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqLow); - } - ; - -struct_specifier - : STRUCT IDENTIFIER LEFT_BRACE { parseContext.nestedStructCheck($1.loc); } struct_declaration_list RIGHT_BRACE { - TType* structure = new TType($5, *$2.string); - parseContext.structArrayCheck($2.loc, *structure); - TVariable* userTypeDef = new TVariable($2.string, *structure, true); - if (! parseContext.symbolTable.insert(*userTypeDef)) - parseContext.error($2.loc, "redefinition", $2.string->c_str(), "struct"); - $$.init($1.loc); - $$.basicType = EbtStruct; - $$.userDef = structure; - --parseContext.structNestingLevel; - } - | STRUCT LEFT_BRACE { parseContext.nestedStructCheck($1.loc); } struct_declaration_list RIGHT_BRACE { - TType* structure = new TType($4, TString("")); - $$.init($1.loc); - $$.basicType = EbtStruct; - $$.userDef = structure; - --parseContext.structNestingLevel; - } - ; - -struct_declaration_list - : struct_declaration { - $$ = $1; - } - | struct_declaration_list struct_declaration { - $$ = $1; - for (unsigned int i = 0; i < $2->size(); ++i) { - for (unsigned int j = 0; j < $$->size(); ++j) { - if ((*$$)[j].type->getFieldName() == (*$2)[i].type->getFieldName()) - parseContext.error((*$2)[i].loc, "duplicate member name:", "", (*$2)[i].type->getFieldName().c_str()); - } - $$->push_back((*$2)[i]); - } - } - ; - -struct_declaration - : type_specifier struct_declarator_list SEMICOLON { - if ($1.arraySizes) { - parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); - parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); - if (parseContext.isEsProfile()) - parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); - } - - $$ = $2; - - parseContext.voidErrorCheck($1.loc, (*$2)[0].type->getFieldName(), $1.basicType); - parseContext.precisionQualifierCheck($1.loc, $1.basicType, $1.qualifier); - - for (unsigned int i = 0; i < $$->size(); ++i) { - TType type($1); - type.setFieldName((*$$)[i].type->getFieldName()); - type.transferArraySizes((*$$)[i].type->getArraySizes()); - type.copyArrayInnerSizes($1.arraySizes); - parseContext.arrayOfArrayVersionCheck((*$$)[i].loc, type.getArraySizes()); - (*$$)[i].type->shallowCopy(type); - } - } - | type_qualifier type_specifier struct_declarator_list SEMICOLON { - if ($2.arraySizes) { - parseContext.profileRequires($2.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); - parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type"); - if (parseContext.isEsProfile()) - parseContext.arraySizeRequiredCheck($2.loc, *$2.arraySizes); - } - - $$ = $3; - - parseContext.memberQualifierCheck($1); - parseContext.voidErrorCheck($2.loc, (*$3)[0].type->getFieldName(), $2.basicType); - parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); - parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier); - - for (unsigned int i = 0; i < $$->size(); ++i) { - TType type($2); - type.setFieldName((*$$)[i].type->getFieldName()); - type.transferArraySizes((*$$)[i].type->getArraySizes()); - type.copyArrayInnerSizes($2.arraySizes); - parseContext.arrayOfArrayVersionCheck((*$$)[i].loc, type.getArraySizes()); - (*$$)[i].type->shallowCopy(type); - } - } - ; - -struct_declarator_list - : struct_declarator { - $$ = new TTypeList; - $$->push_back($1); - } - | struct_declarator_list COMMA struct_declarator { - $$->push_back($3); - } - ; - -struct_declarator - : IDENTIFIER { - $$.type = new TType(EbtVoid); - $$.loc = $1.loc; - $$.type->setFieldName(*$1.string); - } - | IDENTIFIER array_specifier { - parseContext.arrayOfArrayVersionCheck($1.loc, $2.arraySizes); - - $$.type = new TType(EbtVoid); - $$.loc = $1.loc; - $$.type->setFieldName(*$1.string); - $$.type->transferArraySizes($2.arraySizes); - } - ; - -initializer - : assignment_expression { - $$ = $1; - } -GLSLANG_WEB_EXCLUDE_ON - | LEFT_BRACE initializer_list RIGHT_BRACE { - const char* initFeature = "{ } style initializers"; - parseContext.requireProfile($1.loc, ~EEsProfile, initFeature); - parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); - $$ = $2; - } - | LEFT_BRACE initializer_list COMMA RIGHT_BRACE { - const char* initFeature = "{ } style initializers"; - parseContext.requireProfile($1.loc, ~EEsProfile, initFeature); - parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); - $$ = $2; - } - | LEFT_BRACE RIGHT_BRACE { - const char* initFeature = "empty { } initializer"; - parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); - parseContext.profileRequires($1.loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); - $$ = parseContext.intermediate.makeAggregate($1.loc); - } -GLSLANG_WEB_EXCLUDE_OFF - ; - -GLSLANG_WEB_EXCLUDE_ON -initializer_list - : initializer { - $$ = parseContext.intermediate.growAggregate(0, $1, $1->getLoc()); - } - | initializer_list COMMA initializer { - $$ = parseContext.intermediate.growAggregate($1, $3); - } - ; -GLSLANG_WEB_EXCLUDE_OFF - -declaration_statement - : declaration { $$ = $1; } - ; - -statement - : compound_statement { $$ = $1; } - | simple_statement { $$ = $1; } - ; - -// Grammar Note: labeled statements for switch statements only; 'goto' is not supported. - -simple_statement - : declaration_statement { $$ = $1; } - | expression_statement { $$ = $1; } - | selection_statement { $$ = $1; } - | switch_statement { $$ = $1; } - | case_label { $$ = $1; } - | iteration_statement { $$ = $1; } - | jump_statement { $$ = $1; } -GLSLANG_WEB_EXCLUDE_ON - | demote_statement { $$ = $1; } -GLSLANG_WEB_EXCLUDE_OFF - ; - -GLSLANG_WEB_EXCLUDE_ON -demote_statement - : DEMOTE SEMICOLON { - parseContext.requireStage($1.loc, EShLangFragment, "demote"); - parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote"); - $$ = parseContext.intermediate.addBranch(EOpDemote, $1.loc); - } - ; -GLSLANG_WEB_EXCLUDE_OFF - -compound_statement - : LEFT_BRACE RIGHT_BRACE { $$ = 0; } - | LEFT_BRACE { - parseContext.symbolTable.push(); - ++parseContext.statementNestingLevel; - } - statement_list { - parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); - --parseContext.statementNestingLevel; - } - RIGHT_BRACE { - if ($3 && $3->getAsAggregate()) - $3->getAsAggregate()->setOperator(EOpSequence); - $$ = $3; - } - ; - -statement_no_new_scope - : compound_statement_no_new_scope { $$ = $1; } - | simple_statement { $$ = $1; } - ; - -statement_scoped - : { - ++parseContext.controlFlowNestingLevel; - } - compound_statement { - --parseContext.controlFlowNestingLevel; - $$ = $2; - } - | { - parseContext.symbolTable.push(); - ++parseContext.statementNestingLevel; - ++parseContext.controlFlowNestingLevel; - } - simple_statement { - parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); - --parseContext.statementNestingLevel; - --parseContext.controlFlowNestingLevel; - $$ = $2; - } - -compound_statement_no_new_scope - // Statement that doesn't create a new scope, for selection_statement, iteration_statement - : LEFT_BRACE RIGHT_BRACE { - $$ = 0; - } - | LEFT_BRACE statement_list RIGHT_BRACE { - if ($2 && $2->getAsAggregate()) - $2->getAsAggregate()->setOperator(EOpSequence); - $$ = $2; - } - ; - -statement_list - : statement { - $$ = parseContext.intermediate.makeAggregate($1); - if ($1 && $1->getAsBranchNode() && ($1->getAsBranchNode()->getFlowOp() == EOpCase || - $1->getAsBranchNode()->getFlowOp() == EOpDefault)) { - parseContext.wrapupSwitchSubsequence(0, $1); - $$ = 0; // start a fresh subsequence for what's after this case - } - } - | statement_list statement { - if ($2 && $2->getAsBranchNode() && ($2->getAsBranchNode()->getFlowOp() == EOpCase || - $2->getAsBranchNode()->getFlowOp() == EOpDefault)) { - parseContext.wrapupSwitchSubsequence($1 ? $1->getAsAggregate() : 0, $2); - $$ = 0; // start a fresh subsequence for what's after this case - } else - $$ = parseContext.intermediate.growAggregate($1, $2); - } - ; - -expression_statement - : SEMICOLON { $$ = 0; } - | expression SEMICOLON { $$ = static_cast($1); } - ; - -selection_statement - : selection_statement_nonattributed { - $$ = $1; - } -GLSLANG_WEB_EXCLUDE_ON - | attribute selection_statement_nonattributed { - parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); - parseContext.handleSelectionAttributes(*$1, $2); - $$ = $2; - } -GLSLANG_WEB_EXCLUDE_OFF - -selection_statement_nonattributed - : IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement { - parseContext.boolCheck($1.loc, $3); - $$ = parseContext.intermediate.addSelection($3, $5, $1.loc); - } - ; - -selection_rest_statement - : statement_scoped ELSE statement_scoped { - $$.node1 = $1; - $$.node2 = $3; - } - | statement_scoped { - $$.node1 = $1; - $$.node2 = 0; - } - ; - -condition - // In 1996 c++ draft, conditions can include single declarations - : expression { - $$ = $1; - parseContext.boolCheck($1->getLoc(), $1); - } - | fully_specified_type IDENTIFIER EQUAL initializer { - parseContext.boolCheck($2.loc, $1); - - TType type($1); - TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, 0, $4); - if (initNode) - $$ = initNode->getAsTyped(); - else - $$ = 0; - } - ; - -switch_statement - : switch_statement_nonattributed { - $$ = $1; - } -GLSLANG_WEB_EXCLUDE_ON - | attribute switch_statement_nonattributed { - parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); - parseContext.handleSwitchAttributes(*$1, $2); - $$ = $2; - } -GLSLANG_WEB_EXCLUDE_OFF - -switch_statement_nonattributed - : SWITCH LEFT_PAREN expression RIGHT_PAREN { - // start new switch sequence on the switch stack - ++parseContext.controlFlowNestingLevel; - ++parseContext.statementNestingLevel; - parseContext.switchSequenceStack.push_back(new TIntermSequence); - parseContext.switchLevel.push_back(parseContext.statementNestingLevel); - parseContext.symbolTable.push(); - } - LEFT_BRACE switch_statement_list RIGHT_BRACE { - $$ = parseContext.addSwitch($1.loc, $3, $7 ? $7->getAsAggregate() : 0); - delete parseContext.switchSequenceStack.back(); - parseContext.switchSequenceStack.pop_back(); - parseContext.switchLevel.pop_back(); - parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); - --parseContext.statementNestingLevel; - --parseContext.controlFlowNestingLevel; - } - ; - -switch_statement_list - : /* nothing */ { - $$ = 0; - } - | statement_list { - $$ = $1; - } - ; - -case_label - : CASE expression COLON { - $$ = 0; - if (parseContext.switchLevel.size() == 0) - parseContext.error($1.loc, "cannot appear outside switch statement", "case", ""); - else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel) - parseContext.error($1.loc, "cannot be nested inside control flow", "case", ""); - else { - parseContext.constantValueCheck($2, "case"); - parseContext.integerCheck($2, "case"); - $$ = parseContext.intermediate.addBranch(EOpCase, $2, $1.loc); - } - } - | DEFAULT COLON { - $$ = 0; - if (parseContext.switchLevel.size() == 0) - parseContext.error($1.loc, "cannot appear outside switch statement", "default", ""); - else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel) - parseContext.error($1.loc, "cannot be nested inside control flow", "default", ""); - else - $$ = parseContext.intermediate.addBranch(EOpDefault, $1.loc); - } - ; - -iteration_statement - : iteration_statement_nonattributed { - $$ = $1; - } -GLSLANG_WEB_EXCLUDE_ON - | attribute iteration_statement_nonattributed { - parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); - parseContext.handleLoopAttributes(*$1, $2); - $$ = $2; - } -GLSLANG_WEB_EXCLUDE_OFF - -iteration_statement_nonattributed - : WHILE LEFT_PAREN { - if (! parseContext.limits.whileLoops) - parseContext.error($1.loc, "while loops not available", "limitation", ""); - parseContext.symbolTable.push(); - ++parseContext.loopNestingLevel; - ++parseContext.statementNestingLevel; - ++parseContext.controlFlowNestingLevel; - } - condition RIGHT_PAREN statement_no_new_scope { - parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); - $$ = parseContext.intermediate.addLoop($6, $4, 0, true, $1.loc); - --parseContext.loopNestingLevel; - --parseContext.statementNestingLevel; - --parseContext.controlFlowNestingLevel; - } - | DO { - parseContext.symbolTable.push(); - ++parseContext.loopNestingLevel; - ++parseContext.statementNestingLevel; - ++parseContext.controlFlowNestingLevel; - } - statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON { - if (! parseContext.limits.whileLoops) - parseContext.error($1.loc, "do-while loops not available", "limitation", ""); - - parseContext.boolCheck($8.loc, $6); - - $$ = parseContext.intermediate.addLoop($3, $6, 0, false, $4.loc); - parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); - --parseContext.loopNestingLevel; - --parseContext.statementNestingLevel; - --parseContext.controlFlowNestingLevel; - } - | FOR LEFT_PAREN { - parseContext.symbolTable.push(); - ++parseContext.loopNestingLevel; - ++parseContext.statementNestingLevel; - ++parseContext.controlFlowNestingLevel; - } - for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope { - parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); - $$ = parseContext.intermediate.makeAggregate($4, $2.loc); - TIntermLoop* forLoop = parseContext.intermediate.addLoop($7, reinterpret_cast($5.node1), reinterpret_cast($5.node2), true, $1.loc); - if (! parseContext.limits.nonInductiveForLoops) - parseContext.inductiveLoopCheck($1.loc, $4, forLoop); - $$ = parseContext.intermediate.growAggregate($$, forLoop, $1.loc); - $$->getAsAggregate()->setOperator(EOpSequence); - --parseContext.loopNestingLevel; - --parseContext.statementNestingLevel; - --parseContext.controlFlowNestingLevel; - } - ; - -for_init_statement - : expression_statement { - $$ = $1; - } - | declaration_statement { - $$ = $1; - } - ; - -conditionopt - : condition { - $$ = $1; - } - | /* May be null */ { - $$ = 0; - } - ; - -for_rest_statement - : conditionopt SEMICOLON { - $$.node1 = $1; - $$.node2 = 0; - } - | conditionopt SEMICOLON expression { - $$.node1 = $1; - $$.node2 = $3; - } - ; - -jump_statement - : CONTINUE SEMICOLON { - if (parseContext.loopNestingLevel <= 0) - parseContext.error($1.loc, "continue statement only allowed in loops", "", ""); - $$ = parseContext.intermediate.addBranch(EOpContinue, $1.loc); - } - | BREAK SEMICOLON { - if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0) - parseContext.error($1.loc, "break statement only allowed in switch and loops", "", ""); - $$ = parseContext.intermediate.addBranch(EOpBreak, $1.loc); - } - | RETURN SEMICOLON { - $$ = parseContext.intermediate.addBranch(EOpReturn, $1.loc); - if (parseContext.currentFunctionType->getBasicType() != EbtVoid) - parseContext.error($1.loc, "non-void function must return a value", "return", ""); - if (parseContext.inMain) - parseContext.postEntryPointReturn = true; - } - | RETURN expression SEMICOLON { - $$ = parseContext.handleReturnValue($1.loc, $2); - } - | DISCARD SEMICOLON { - parseContext.requireStage($1.loc, EShLangFragment, "discard"); - $$ = parseContext.intermediate.addBranch(EOpKill, $1.loc); - } - | TERMINATE_INVOCATION SEMICOLON { - parseContext.requireStage($1.loc, EShLangFragment, "terminateInvocation"); - $$ = parseContext.intermediate.addBranch(EOpTerminateInvocation, $1.loc); - } -GLSLANG_WEB_EXCLUDE_ON - | TERMINATE_RAY SEMICOLON { - parseContext.requireStage($1.loc, EShLangAnyHit, "terminateRayEXT"); - $$ = parseContext.intermediate.addBranch(EOpTerminateRayKHR, $1.loc); - } - | IGNORE_INTERSECTION SEMICOLON { - parseContext.requireStage($1.loc, EShLangAnyHit, "ignoreIntersectionEXT"); - $$ = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, $1.loc); - } -GLSLANG_WEB_EXCLUDE_OFF - ; - -// Grammar Note: No 'goto'. Gotos are not supported. - -translation_unit - : external_declaration { - $$ = $1; - parseContext.intermediate.setTreeRoot($$); - } - | translation_unit external_declaration { - if ($2 != nullptr) { - $$ = parseContext.intermediate.growAggregate($1, $2); - parseContext.intermediate.setTreeRoot($$); - } - } - ; - -external_declaration - : function_definition { - $$ = $1; - } - | declaration { - $$ = $1; - } -GLSLANG_WEB_EXCLUDE_ON - | SEMICOLON { - parseContext.requireProfile($1.loc, ~EEsProfile, "extraneous semicolon"); - parseContext.profileRequires($1.loc, ~EEsProfile, 460, nullptr, "extraneous semicolon"); - $$ = nullptr; - } -GLSLANG_WEB_EXCLUDE_OFF - ; - -function_definition - : function_prototype { - $1.function = parseContext.handleFunctionDeclarator($1.loc, *$1.function, false /* not prototype */); - $1.intermNode = parseContext.handleFunctionDefinition($1.loc, *$1.function); - - // For ES 100 only, according to ES shading language 100 spec: A function - // body has a scope nested inside the function's definition. - if (parseContext.profile == EEsProfile && parseContext.version == 100) - { - parseContext.symbolTable.push(); - ++parseContext.statementNestingLevel; - } - } - compound_statement_no_new_scope { - // May be best done as post process phase on intermediate code - if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) - parseContext.error($1.loc, "function does not return a value:", "", $1.function->getName().c_str()); - parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); - $$ = parseContext.intermediate.growAggregate($1.intermNode, $3); - parseContext.intermediate.setAggregateOperator($$, EOpFunction, $1.function->getType(), $1.loc); - $$->getAsAggregate()->setName($1.function->getMangledName().c_str()); - - // store the pragma information for debug and optimize and other vendor specific - // information. This information can be queried from the parse tree - $$->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize); - $$->getAsAggregate()->setDebug(parseContext.contextPragma.debug); - $$->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable); - - // Set currentFunctionType to empty pointer when goes outside of the function - parseContext.currentFunctionType = nullptr; - - // For ES 100 only, according to ES shading language 100 spec: A function - // body has a scope nested inside the function's definition. - if (parseContext.profile == EEsProfile && parseContext.version == 100) - { - parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); - --parseContext.statementNestingLevel; - } - } - ; - -GLSLANG_WEB_EXCLUDE_ON -attribute - : LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET { - $$ = $3; - } - -attribute_list - : single_attribute { - $$ = $1; - } - | attribute_list COMMA single_attribute { - $$ = parseContext.mergeAttributes($1, $3); - } - -single_attribute - : IDENTIFIER { - $$ = parseContext.makeAttributes(*$1.string); - } - | IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN { - $$ = parseContext.makeAttributes(*$1.string, $3); - } -GLSLANG_WEB_EXCLUDE_OFF - -GLSLANG_WEB_EXCLUDE_ON -spirv_requirements_list - : spirv_requirements_parameter { - $$ = $1; - } - | spirv_requirements_list COMMA spirv_requirements_parameter { - $$ = parseContext.mergeSpirvRequirements($2.loc, $1, $3); - } - -spirv_requirements_parameter - : IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET { - $$ = parseContext.makeSpirvRequirement($2.loc, *$1.string, $4->getAsAggregate(), nullptr); - } - | IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET { - $$ = parseContext.makeSpirvRequirement($2.loc, *$1.string, nullptr, $4->getAsAggregate()); - } - -spirv_extension_list - : STRING_LITERAL { - $$ = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion($1.string, $1.loc, true)); - } - | spirv_extension_list COMMA STRING_LITERAL { - $$ = parseContext.intermediate.growAggregate($1, parseContext.intermediate.addConstantUnion($3.string, $3.loc, true)); - } - -spirv_capability_list - : INTCONSTANT { - $$ = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion($1.i, $1.loc, true)); - } - | spirv_capability_list COMMA INTCONSTANT { - $$ = parseContext.intermediate.growAggregate($1, parseContext.intermediate.addConstantUnion($3.i, $3.loc, true)); - } - -spirv_execution_mode_qualifier - : SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN { - parseContext.intermediate.insertSpirvExecutionMode($3.i); - $$ = 0; - } - | SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN { - parseContext.intermediate.insertSpirvRequirement($3); - parseContext.intermediate.insertSpirvExecutionMode($5.i); - $$ = 0; - } - | SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN { - parseContext.intermediate.insertSpirvExecutionMode($3.i, $5->getAsAggregate()); - $$ = 0; - } - | SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN { - parseContext.intermediate.insertSpirvRequirement($3); - parseContext.intermediate.insertSpirvExecutionMode($5.i, $7->getAsAggregate()); - $$ = 0; - } - | SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN { - parseContext.intermediate.insertSpirvExecutionModeId($3.i, $5->getAsAggregate()); - $$ = 0; - } - | SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN { - parseContext.intermediate.insertSpirvRequirement($3); - parseContext.intermediate.insertSpirvExecutionModeId($5.i, $7->getAsAggregate()); - $$ = 0; - } - -spirv_execution_mode_parameter_list - : spirv_execution_mode_parameter { - $$ = parseContext.intermediate.makeAggregate($1); - } - | spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter { - $$ = parseContext.intermediate.growAggregate($1, $3); - } - -spirv_execution_mode_parameter - : FLOATCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true); - } - | INTCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true); - } - | UINTCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true); - } - | BOOLCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true); - } - | STRING_LITERAL { - $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true); - } - -spirv_execution_mode_id_parameter_list - : constant_expression { - if ($1->getBasicType() != EbtFloat && - $1->getBasicType() != EbtInt && - $1->getBasicType() != EbtUint && - $1->getBasicType() != EbtBool && - $1->getBasicType() != EbtString) - parseContext.error($1->getLoc(), "this type not allowed", $1->getType().getBasicString(), ""); - $$ = parseContext.intermediate.makeAggregate($1); - } - | spirv_execution_mode_id_parameter_list COMMA constant_expression { - if ($3->getBasicType() != EbtFloat && - $3->getBasicType() != EbtInt && - $3->getBasicType() != EbtUint && - $3->getBasicType() != EbtBool && - $3->getBasicType() != EbtString) - parseContext.error($3->getLoc(), "this type not allowed", $3->getType().getBasicString(), ""); - $$ = parseContext.intermediate.growAggregate($1, $3); - } - -spirv_storage_class_qualifier - : SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN { - $$.init($1.loc); - $$.qualifier.storage = EvqSpirvStorageClass; - $$.qualifier.spirvStorageClass = $3.i; - } - | SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN { - $$.init($1.loc); - parseContext.intermediate.insertSpirvRequirement($3); - $$.qualifier.storage = EvqSpirvStorageClass; - $$.qualifier.spirvStorageClass = $5.i; - } - -spirv_decorate_qualifier - : SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN{ - $$.init($1.loc); - $$.qualifier.setSpirvDecorate($3.i); - } - | SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN{ - $$.init($1.loc); - parseContext.intermediate.insertSpirvRequirement($3); - $$.qualifier.setSpirvDecorate($5.i); - } - | SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN { - $$.init($1.loc); - $$.qualifier.setSpirvDecorate($3.i, $5->getAsAggregate()); - } - | SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN { - $$.init($1.loc); - parseContext.intermediate.insertSpirvRequirement($3); - $$.qualifier.setSpirvDecorate($5.i, $7->getAsAggregate()); - } - | SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN { - $$.init($1.loc); - $$.qualifier.setSpirvDecorateId($3.i, $5->getAsAggregate()); - } - | SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN { - $$.init($1.loc); - parseContext.intermediate.insertSpirvRequirement($3); - $$.qualifier.setSpirvDecorateId($5.i, $7->getAsAggregate()); - } - | SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN { - $$.init($1.loc); - $$.qualifier.setSpirvDecorateString($3.i, $5->getAsAggregate()); - } - | SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN { - $$.init($1.loc); - parseContext.intermediate.insertSpirvRequirement($3); - $$.qualifier.setSpirvDecorateString($5.i, $7->getAsAggregate()); - } - -spirv_decorate_parameter_list - : spirv_decorate_parameter { - $$ = parseContext.intermediate.makeAggregate($1); - } - | spirv_decorate_parameter_list COMMA spirv_decorate_parameter { - $$ = parseContext.intermediate.growAggregate($1, $3); - } - -spirv_decorate_parameter - : FLOATCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true); - } - | INTCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true); - } - | UINTCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true); - } - | BOOLCONSTANT { - $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true); - } - -spirv_decorate_id_parameter_list - : constant_expression { - if ($1->getBasicType() != EbtFloat && - $1->getBasicType() != EbtInt && - $1->getBasicType() != EbtUint && - $1->getBasicType() != EbtBool) - parseContext.error($1->getLoc(), "this type not allowed", $1->getType().getBasicString(), ""); - $$ = parseContext.intermediate.makeAggregate($1); - } - | spirv_decorate_id_parameter_list COMMA constant_expression { - if ($3->getBasicType() != EbtFloat && - $3->getBasicType() != EbtInt && - $3->getBasicType() != EbtUint && - $3->getBasicType() != EbtBool) - parseContext.error($3->getLoc(), "this type not allowed", $3->getType().getBasicString(), ""); - $$ = parseContext.intermediate.growAggregate($1, $3); - } - -spirv_decorate_string_parameter_list - : STRING_LITERAL { - $$ = parseContext.intermediate.makeAggregate( - parseContext.intermediate.addConstantUnion($1.string, $1.loc, true)); - } - | spirv_decorate_string_parameter_list COMMA STRING_LITERAL { - $$ = parseContext.intermediate.growAggregate($1, parseContext.intermediate.addConstantUnion($3.string, $3.loc, true)); - } - -spirv_type_specifier - : SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.setSpirvType(*$3, $5); - } - | SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - parseContext.intermediate.insertSpirvRequirement($3); - $$.setSpirvType(*$5, $7); - } - | SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - $$.setSpirvType(*$3); - } - | SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN { - $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); - parseContext.intermediate.insertSpirvRequirement($3); - $$.setSpirvType(*$5); - } - -spirv_type_parameter_list - : spirv_type_parameter { - $$ = $1; - } - | spirv_type_parameter_list COMMA spirv_type_parameter { - $$ = parseContext.mergeSpirvTypeParameters($1, $3); - } - -spirv_type_parameter - : constant_expression { - $$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion()); - } - -spirv_instruction_qualifier - : SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN { - $$ = $3; - } - | SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN { - parseContext.intermediate.insertSpirvRequirement($3); - $$ = $5; - } - -spirv_instruction_qualifier_list - : spirv_instruction_qualifier_id { - $$ = $1; - } - | spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id { - $$ = parseContext.mergeSpirvInstruction($2.loc, $1, $3); - } - -spirv_instruction_qualifier_id - : IDENTIFIER EQUAL STRING_LITERAL { - $$ = parseContext.makeSpirvInstruction($2.loc, *$1.string, *$3.string); - } - | IDENTIFIER EQUAL INTCONSTANT { - $$ = parseContext.makeSpirvInstruction($2.loc, *$1.string, $3.i); - } -GLSLANG_WEB_EXCLUDE_OFF - -%% diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index df53eb5bd8..35686fbc70 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -37,31 +37,6 @@ // POSSIBILITY OF SUCH DAMAGE. // -// -// Do not edit the .y file, only edit the .m4 file. -// The .y bison file is not a source file, it is a derivative of the .m4 file. -// The m4 file needs to be processed by m4 to generate the .y bison file. -// -// Code sandwiched between a pair: -// -// GLSLANG_WEB_EXCLUDE_ON -// ... -// ... -// ... -// GLSLANG_WEB_EXCLUDE_OFF -// -// Will be excluded from the grammar when m4 is executed as: -// -// m4 -P -DGLSLANG_WEB -// -// It will be included when m4 is executed as: -// -// m4 -P -// - - - - /** * This is bison grammar and productions for parsing all versions of the * GLSL shading languages. @@ -129,19 +104,12 @@ using namespace glslang; glslang::TArraySizes* arraySizes; glslang::TIdentifierList* identifierList; }; - glslang::TArraySizes* typeParameters; + glslang::TTypeParameters* typeParameters; } interm; } %{ -/* windows only pragma */ -#ifdef _MSC_VER - #pragma warning(disable : 4065) - #pragma warning(disable : 4127) - #pragma warning(disable : 4244) -#endif - #define parseContext (*pParseContext) #define yyerror(context, msg) context->parserError(msg) @@ -177,8 +145,6 @@ extern int yylex(YYSTYPE*, TParseContext&); %token ITEXTURE2D ITEXTURE3D ITEXTURECUBE ITEXTURE2DARRAY %token UTEXTURE2D UTEXTURE3D UTEXTURECUBE UTEXTURE2DARRAY - - %token ATTRIBUTE VARYING %token FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T %token INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T @@ -211,6 +177,8 @@ extern int yylex(YYSTYPE*, TParseContext&); %token ACCSTRUCTEXT %token RAYQUERYEXT %token FCOOPMATNV ICOOPMATNV UCOOPMATNV +%token COOPMAT +%token HITOBJECTNV HITOBJECTATTRNV // combined image/sampler %token SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW @@ -278,8 +246,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token SPIRV_INSTRUCTION SPIRV_EXECUTION_MODE SPIRV_EXECUTION_MODE_ID %token SPIRV_DECORATE SPIRV_DECORATE_ID SPIRV_DECORATE_STRING %token SPIRV_TYPE SPIRV_STORAGE_CLASS SPIRV_BY_REFERENCE SPIRV_LITERAL - - +%token ATTACHMENTEXT IATTACHMENTEXT UATTACHMENTEXT %token LEFT_OP RIGHT_OP %token INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP @@ -303,22 +270,20 @@ extern int yylex(YYSTYPE*, TParseContext&); %token BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT %token TERMINATE_INVOCATION %token TERMINATE_RAY IGNORE_INTERSECTION -%token UNIFORM SHARED BUFFER +%token UNIFORM SHARED BUFFER TILEIMAGEEXT %token FLAT SMOOTH LAYOUT - %token DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT %token INT64CONSTANT UINT64CONSTANT %token SUBROUTINE DEMOTE -%token PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV +%token PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV %token PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT %token PATCH SAMPLE NONUNIFORM %token COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT %token SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT -%token NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV +%token NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXEXT PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV PERPRIMITIVEEXT TASKPAYLOADWORKGROUPEXT %token PRECISE - %type assignment_operator unary_operator %type variable_identifier primary_expression postfix_expression %type expression integer_expression assignment_expression @@ -364,7 +329,6 @@ extern int yylex(YYSTYPE*, TParseContext&); %type identifier_list - %type precise_qualifier non_uniform_qualifier %type type_name_list %type attribute attribute_list single_attribute @@ -377,14 +341,13 @@ extern int yylex(YYSTYPE*, TParseContext&); %type spirv_storage_class_qualifier %type spirv_decorate_qualifier %type spirv_decorate_parameter_list spirv_decorate_parameter -%type spirv_decorate_id_parameter_list +%type spirv_decorate_id_parameter_list spirv_decorate_id_parameter %type spirv_decorate_string_parameter_list %type spirv_type_specifier %type spirv_type_parameter_list spirv_type_parameter %type spirv_instruction_qualifier %type spirv_instruction_qualifier_list spirv_instruction_qualifier_id - %start translation_unit %% @@ -416,7 +379,6 @@ primary_expression | BOOLCONSTANT { $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true); } - | STRING_LITERAL { $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true); } @@ -454,7 +416,6 @@ primary_expression parseContext.float16Check($1.loc, "half float literal"); $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true); } - ; postfix_expression @@ -524,18 +485,44 @@ function_call_header_no_parameters function_call_header_with_parameters : function_call_header assignment_expression { - TParameter param = { 0, new TType }; - param.type->shallowCopy($2->getType()); - $1.function->addParameter(param); - $$.function = $1.function; - $$.intermNode = $2; + if (parseContext.spvVersion.vulkan > 0 + && parseContext.spvVersion.vulkanRelaxed + && $2->getType().containsOpaque()) + { + $$.intermNode = parseContext.vkRelaxedRemapFunctionArgument($$.loc, $1.function, $2); + $$.function = $1.function; + } + else + { + TParameter param = { 0, new TType, {} }; + param.type->shallowCopy($2->getType()); + + $1.function->addParameter(param); + $$.function = $1.function; + $$.intermNode = $2; + } } | function_call_header_with_parameters COMMA assignment_expression { - TParameter param = { 0, new TType }; - param.type->shallowCopy($3->getType()); - $1.function->addParameter(param); - $$.function = $1.function; - $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc); + if (parseContext.spvVersion.vulkan > 0 + && parseContext.spvVersion.vulkanRelaxed + && $3->getType().containsOpaque()) + { + TIntermNode* remappedNode = parseContext.vkRelaxedRemapFunctionArgument($2.loc, $1.function, $3); + if (remappedNode == $3) + $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc); + else + $$.intermNode = parseContext.intermediate.mergeAggregate($1.intermNode, remappedNode, $2.loc); + $$.function = $1.function; + } + else + { + TParameter param = { 0, new TType, {} }; + param.type->shallowCopy($3->getType()); + + $1.function->addParameter(param); + $$.function = $1.function; + $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc); + } } ; @@ -580,13 +567,11 @@ function_identifier $$.function = new TFunction(empty, TType(EbtVoid), EOpNull); } } - | non_uniform_qualifier { // Constructor $$.intermNode = 0; $$.function = parseContext.handleConstructorCall($1.loc, $1); } - ; unary_expression @@ -798,7 +783,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 +800,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 +862,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; } } @@ -896,7 +881,6 @@ declaration $$ = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } - | spirv_instruction_qualifier function_prototype SEMICOLON { parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier"); $2.function->setSpirvInstruction(*$1); // Attach SPIR-V intruction qualifier @@ -909,7 +893,6 @@ declaration parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier"); $$ = 0; } - | init_declarator_list SEMICOLON { if ($1.intermNode && $1.intermNode->getAsAggregate()) $1.intermNode->getAsAggregate()->setOperator(EOpSequence); @@ -977,24 +960,31 @@ identifier_list function_prototype : function_declarator RIGHT_PAREN { $$.function = $1; + if (parseContext.compileOnly) $$.function->setExport(); $$.loc = $2.loc; } | function_declarator RIGHT_PAREN attribute { $$.function = $1; + if (parseContext.compileOnly) $$.function->setExport(); $$.loc = $2.loc; - parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; + parseContext.requireExtensions($2.loc, 2, extensions, "attribute"); parseContext.handleFunctionAttributes($2.loc, *$3); } | attribute function_declarator RIGHT_PAREN { $$.function = $2; + if (parseContext.compileOnly) $$.function->setExport(); $$.loc = $3.loc; - parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; + parseContext.requireExtensions($3.loc, 2, extensions, "attribute"); parseContext.handleFunctionAttributes($3.loc, *$1); } | attribute function_declarator RIGHT_PAREN attribute { $$.function = $2; + if (parseContext.compileOnly) $$.function->setExport(); $$.loc = $3.loc; - parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; + parseContext.requireExtensions($3.loc, 2, extensions, "attribute"); parseContext.handleFunctionAttributes($3.loc, *$1); parseContext.handleFunctionAttributes($3.loc, *$4); } @@ -1015,7 +1005,12 @@ function_header_with_parameters // Add the parameter $$ = $1; if ($2.param.type->getBasicType() != EbtVoid) - $1->addParameter($2.param); + { + if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed)) + $1->addParameter($2.param); + else + parseContext.vkRelaxedRemapFunctionParameter($1, $2.param); + } else delete $2.param.type; } @@ -1033,7 +1028,10 @@ function_header_with_parameters } else { // Add the parameter $$ = $1; - $1->addParameter($3.param); + if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed)) + $1->addParameter($3.param); + else + parseContext.vkRelaxedRemapFunctionParameter($1, $3.param); } } ; @@ -1073,7 +1071,7 @@ parameter_declarator } parseContext.reservedErrorCheck($2.loc, *$2.string); - TParameter param = {$2.string, new TType($1)}; + TParameter param = {$2.string, new TType($1), {}}; $$.loc = $2.loc; $$.param = param; } @@ -1091,7 +1089,7 @@ parameter_declarator parseContext.arraySizeRequiredCheck($3.loc, *$3.arraySizes); parseContext.reservedErrorCheck($2.loc, *$2.string); - TParameter param = { $2.string, type }; + TParameter param = { $2.string, type, {} }; $$.loc = $2.loc; $$.param = param; @@ -1106,7 +1104,7 @@ parameter_declaration $$ = $2; if ($1.qualifier.precision != EpqNone) $$.param.type->getQualifier().precision = $1.qualifier.precision; - parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); + parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMat()); parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type); @@ -1118,7 +1116,7 @@ parameter_declaration parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type); parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type); - parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); + parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMat()); } // // Without name @@ -1127,7 +1125,7 @@ parameter_declaration $$ = $2; if ($1.qualifier.precision != EpqNone) $$.param.type->getQualifier().precision = $1.qualifier.precision; - parseContext.precisionQualifierCheck($1.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); + parseContext.precisionQualifierCheck($1.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMat()); parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type); @@ -1138,13 +1136,13 @@ parameter_declaration parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type); parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type); - parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier()); + parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMat()); } ; parameter_type_specifier : type_specifier { - TParameter param = { 0, new TType($1) }; + TParameter param = { 0, new TType($1), {} }; $$.param = param; if ($1.arraySizes) parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes); @@ -1179,9 +1177,7 @@ single_declaration : fully_specified_type { $$.type = $1; $$.intermNode = 0; - parseContext.declareTypeDefaults($$.loc, $$.type); - } | fully_specified_type IDENTIFIER { $$.type = $1; @@ -1215,10 +1211,10 @@ fully_specified_type parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); } - parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier); + parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier, $$.isCoopmat()); } | type_qualifier type_specifier { - parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); + parseContext.globalQualifierFixCheck($1.loc, $1.qualifier, false, &$2); parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $2); if ($2.arraySizes) { @@ -1232,7 +1228,7 @@ fully_specified_type parseContext.checkNoShaderLayouts($2.loc, $1.shaderQualifiers); $2.shaderQualifiers.merge($1.shaderQualifiers); parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); - parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier); + parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier, $2.isCoopmat()); $$ = $2; @@ -1267,7 +1263,6 @@ interpolation_qualifier $$.init($1.loc); $$.qualifier.flat = true; } - | NOPERSPECTIVE { parseContext.globalCheck($1.loc, "noperspective"); parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); @@ -1290,31 +1285,48 @@ interpolation_qualifier $$.init($1.loc); $$.qualifier.pervertexNV = true; } + | PERVERTEXEXT { + parseContext.globalCheck($1.loc, "pervertexEXT"); + parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + $$.init($1.loc); + $$.qualifier.pervertexEXT = true; + } | PERPRIMITIVENV { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck($1.loc, "perprimitiveNV"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV"); + parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveNV"); // Fragment shader stage doesn't check for extension. So we explicitly add below extension check. if (parseContext.language == EShLangFragment) parseContext.requireExtensions($1.loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV"); $$.init($1.loc); $$.qualifier.perPrimitiveNV = true; } + | PERPRIMITIVEEXT { + // No need for profile version or extension check. Shader stage already checks both. + parseContext.globalCheck($1.loc, "perprimitiveEXT"); + parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveEXT"); + // Fragment shader stage doesn't check for extension. So we explicitly add below extension check. + if (parseContext.language == EShLangFragment) + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_mesh_shader, "perprimitiveEXT"); + $$.init($1.loc); + $$.qualifier.perPrimitiveNV = true; + } | PERVIEWNV { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck($1.loc, "perviewNV"); - parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV"); + parseContext.requireStage($1.loc, EShLangMesh, "perviewNV"); $$.init($1.loc); $$.qualifier.perViewNV = true; } | PERTASKNV { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck($1.loc, "taskNV"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV"); + parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskNV"); $$.init($1.loc); $$.qualifier.perTaskNV = true; } - ; layout_qualifier @@ -1349,7 +1361,6 @@ layout_qualifier_id } ; - precise_qualifier : PRECISE { parseContext.profileRequires($$.loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); @@ -1359,7 +1370,6 @@ precise_qualifier } ; - type_qualifier : single_type_qualifier { $$ = $1; @@ -1393,7 +1403,6 @@ single_type_qualifier // allow inheritance of storage qualifier from block declaration $$ = $1; } - | precise_qualifier { // allow inheritance of storage qualifier from block declaration $$ = $1; @@ -1420,7 +1429,6 @@ single_type_qualifier $$.init($1.loc); $$.qualifier.setSpirvLiteral(); } - ; storage_qualifier @@ -1457,11 +1465,16 @@ storage_qualifier $$.init($1.loc); $$.qualifier.storage = EvqUniform; } + | TILEIMAGEEXT { + parseContext.globalCheck($1.loc, "tileImageEXT"); + $$.init($1.loc); + $$.qualifier.storage = EvqTileImageEXT; + } | SHARED { parseContext.globalCheck($1.loc, "shared"); parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared"); - parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared"); + parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshMask | EShLangTaskMask), "shared"); $$.init($1.loc); $$.qualifier.storage = EvqShared; } @@ -1470,7 +1483,6 @@ storage_qualifier $$.init($1.loc); $$.qualifier.storage = EvqBuffer; } - | ATTRIBUTE { parseContext.requireStage($1.loc, EShLangVertex, "attribute"); parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "attribute"); @@ -1516,6 +1528,14 @@ storage_qualifier $$.init($1.loc); $$.qualifier.storage = EvqHitAttr; } + | HITOBJECTATTRNV { + parseContext.globalCheck($1.loc, "hitAttributeNV"); + parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask + | EShLangMissMask), "hitObjectAttributeNV"); + parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV"); + $$.init($1.loc); + $$.qualifier.storage = EvqHitObjectAttrNV; + } | HITATTREXT { parseContext.globalCheck($1.loc, "hitAttributeEXT"); parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -1648,10 +1668,15 @@ storage_qualifier parseContext.unimplemented($1.loc, "subroutine"); $$.init($1.loc); } - + | TASKPAYLOADWORKGROUPEXT { + // No need for profile version or extension check. Shader stage already checks both. + parseContext.globalCheck($1.loc, "taskPayloadSharedEXT"); + parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskPayloadSharedEXT "); + $$.init($1.loc); + $$.qualifier.storage = EvqtaskPayloadSharedEXT; + } ; - non_uniform_qualifier : NONUNIFORM { $$.init($1.loc); @@ -1670,12 +1695,13 @@ type_name_list } ; - type_specifier : type_specifier_nonarray type_parameter_specifier_opt { $$ = $1; $$.qualifier.precision = parseContext.getDefaultPrecision($$); $$.typeParameters = $2; + parseContext.coopMatTypeParametersCheck($1.loc, $$); + } | type_specifier_nonarray type_parameter_specifier_opt array_specifier { parseContext.arrayOfArrayVersionCheck($3.loc, $3.arraySizes); @@ -1683,6 +1709,7 @@ type_specifier $$.qualifier.precision = parseContext.getDefaultPrecision($$); $$.typeParameters = $2; $$.arraySizes = $3.arraySizes; + parseContext.coopMatTypeParametersCheck($1.loc, $$); } ; @@ -1729,19 +1756,26 @@ type_parameter_specifier ; type_parameter_specifier_list - : unary_expression { - $$ = new TArraySizes; + : type_specifier { + $$ = new TTypeParameters; + $$->arraySizes = new TArraySizes; + $$->spirvType = $1.spirvType; + $$->basicType = $1.basicType; + } + | unary_expression { + $$ = new TTypeParameters; + $$->arraySizes = new TArraySizes; TArraySize size; - parseContext.arraySizeCheck($1->getLoc(), $1, size, "type parameter"); - $$->addInnerSize(size); + parseContext.arraySizeCheck($1->getLoc(), $1, size, "type parameter", true); + $$->arraySizes->addInnerSize(size); } | type_parameter_specifier_list COMMA unary_expression { $$ = $1; TArraySize size; - parseContext.arraySizeCheck($3->getLoc(), $3, size, "type parameter"); - $$->addInnerSize(size); + parseContext.arraySizeCheck($3->getLoc(), $3, size, "type parameter", true); + $$->arraySizes->addInnerSize(size); } ; @@ -1890,7 +1924,6 @@ type_specifier_nonarray $$.basicType = EbtFloat; $$.setMatrix(4, 4); } - | DOUBLE { parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -2509,7 +2542,6 @@ type_specifier_nonarray $$.basicType = EbtSampler; $$.sampler.set(EbtFloat, Esd1D); } - | SAMPLER2D { $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtSampler; @@ -2545,7 +2577,6 @@ type_specifier_nonarray $$.basicType = EbtSampler; $$.sampler.set(EbtFloat, Esd2D, true, true); } - | SAMPLER1DSHADOW { $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtSampler; @@ -2654,7 +2685,6 @@ type_specifier_nonarray $$.basicType = EbtSampler; $$.sampler.set(EbtInt, Esd1D); } - | ISAMPLER2D { $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtSampler; @@ -2690,7 +2720,6 @@ type_specifier_nonarray $$.basicType = EbtSampler; $$.sampler.set(EbtUint, EsdCube); } - | ISAMPLER1DARRAY { $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtSampler; @@ -2731,7 +2760,6 @@ type_specifier_nonarray $$.basicType = EbtSampler; $$.sampler.setTexture(EbtUint, EsdCube, true); } - | USAMPLER2DARRAY { $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtSampler; @@ -2807,7 +2835,6 @@ type_specifier_nonarray $$.basicType = EbtSampler; $$.sampler.setPureSampler(true); } - | SAMPLER2DRECT { $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtSampler; @@ -3412,6 +3439,24 @@ type_specifier_nonarray $$.sampler.set(EbtFloat, Esd2D); $$.sampler.yuv = true; } + | ATTACHMENTEXT { + parseContext.requireStage($1.loc, EShLangFragment, "attachmentEXT input"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setAttachmentEXT(EbtFloat); + } + | IATTACHMENTEXT { + parseContext.requireStage($1.loc, EShLangFragment, "attachmentEXT input"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setAttachmentEXT(EbtInt); + } + | UATTACHMENTEXT { + parseContext.requireStage($1.loc, EShLangFragment, "attachmentEXT input"); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setAttachmentEXT(EbtUint); + } | SUBPASSINPUT { parseContext.requireStage($1.loc, EShLangFragment, "subpass input"); $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); @@ -3463,28 +3508,41 @@ type_specifier_nonarray $$.sampler.setSubpass(EbtUint, true); } | FCOOPMATNV { - parseContext.fcoopmatCheck($1.loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); + parseContext.fcoopmatCheckNV($1.loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtFloat; - $$.coopmat = true; + $$.coopmatNV = true; + $$.coopmatKHR = false; } | ICOOPMATNV { - parseContext.intcoopmatCheck($1.loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); + parseContext.intcoopmatCheckNV($1.loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtInt; - $$.coopmat = true; + $$.coopmatNV = true; + $$.coopmatKHR = false; } | UCOOPMATNV { - parseContext.intcoopmatCheck($1.loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); + parseContext.intcoopmatCheckNV($1.loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtUint; - $$.coopmat = true; + $$.coopmatNV = true; + $$.coopmatKHR = false; + } + | COOPMAT { + parseContext.coopmatCheck($1.loc, "coopmat", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtCoopmat; + $$.coopmatNV = false; + $$.coopmatKHR = true; } | spirv_type_specifier { parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier"); $$ = $1; } - + | HITOBJECTNV { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtHitObjectNV; + } | struct_specifier { $$ = $1; $$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; @@ -3525,11 +3583,17 @@ precision_qualifier struct_specifier : STRUCT IDENTIFIER LEFT_BRACE { parseContext.nestedStructCheck($1.loc); } struct_declaration_list RIGHT_BRACE { + TType* structure = new TType($5, *$2.string); parseContext.structArrayCheck($2.loc, *structure); + TVariable* userTypeDef = new TVariable($2.string, *structure, true); if (! parseContext.symbolTable.insert(*userTypeDef)) parseContext.error($2.loc, "redefinition", $2.string->c_str(), "struct"); + else if (parseContext.spvVersion.vulkanRelaxed + && structure->containsOpaque()) + parseContext.relaxedSymbols.push_back(structure->getTypeName()); + $$.init($1.loc); $$.basicType = EbtStruct; $$.userDef = structure; @@ -3572,7 +3636,7 @@ struct_declaration $$ = $2; parseContext.voidErrorCheck($1.loc, (*$2)[0].type->getFieldName(), $1.basicType); - parseContext.precisionQualifierCheck($1.loc, $1.basicType, $1.qualifier); + parseContext.precisionQualifierCheck($1.loc, $1.basicType, $1.qualifier, $1.isCoopmat()); for (unsigned int i = 0; i < $$->size(); ++i) { TType type($1); @@ -3596,7 +3660,7 @@ struct_declaration parseContext.memberQualifierCheck($1); parseContext.voidErrorCheck($2.loc, (*$3)[0].type->getFieldName(), $2.basicType); parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); - parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier); + parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier, $2.isCoopmat()); for (unsigned int i = 0; i < $$->size(); ++i) { TType type($2); @@ -3639,7 +3703,6 @@ initializer : assignment_expression { $$ = $1; } - | LEFT_BRACE initializer_list RIGHT_BRACE { const char* initFeature = "{ } style initializers"; parseContext.requireProfile($1.loc, ~EEsProfile, initFeature); @@ -3658,10 +3721,8 @@ initializer parseContext.profileRequires($1.loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); $$ = parseContext.intermediate.makeAggregate($1.loc); } - ; - initializer_list : initializer { $$ = parseContext.intermediate.growAggregate(0, $1, $1->getLoc()); @@ -3671,7 +3732,6 @@ initializer_list } ; - declaration_statement : declaration { $$ = $1; } ; @@ -3691,12 +3751,9 @@ simple_statement | case_label { $$ = $1; } | iteration_statement { $$ = $1; } | jump_statement { $$ = $1; } - | demote_statement { $$ = $1; } - ; - demote_statement : DEMOTE SEMICOLON { parseContext.requireStage($1.loc, EShLangFragment, "demote"); @@ -3705,7 +3762,6 @@ demote_statement } ; - compound_statement : LEFT_BRACE RIGHT_BRACE { $$ = 0; } | LEFT_BRACE { @@ -3717,8 +3773,10 @@ compound_statement --parseContext.statementNestingLevel; } RIGHT_BRACE { - if ($3 && $3->getAsAggregate()) - $3->getAsAggregate()->setOperator(EOpSequence); + if ($3 && $3->getAsAggregate()) { + $3->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence); + $3->getAsAggregate()->setEndLoc($5.loc); + } $$ = $3; } ; @@ -3754,8 +3812,10 @@ compound_statement_no_new_scope $$ = 0; } | LEFT_BRACE statement_list RIGHT_BRACE { - if ($2 && $2->getAsAggregate()) + if ($2 && $2->getAsAggregate()) { $2->getAsAggregate()->setOperator(EOpSequence); + $2->getAsAggregate()->setEndLoc($3.loc); + } $$ = $2; } ; @@ -3788,14 +3848,12 @@ selection_statement : selection_statement_nonattributed { $$ = $1; } - | attribute selection_statement_nonattributed { parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSelectionAttributes(*$1, $2); $$ = $2; } - selection_statement_nonattributed : IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement { parseContext.boolCheck($1.loc, $3); @@ -3836,14 +3894,12 @@ switch_statement : switch_statement_nonattributed { $$ = $1; } - | attribute switch_statement_nonattributed { parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSwitchAttributes(*$1, $2); $$ = $2; } - switch_statement_nonattributed : SWITCH LEFT_PAREN expression RIGHT_PAREN { // start new switch sequence on the switch stack @@ -3901,14 +3957,13 @@ iteration_statement : iteration_statement_nonattributed { $$ = $1; } - | attribute iteration_statement_nonattributed { - parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); + const char * extensions[2] = { E_GL_EXT_control_flow_attributes, E_GL_EXT_control_flow_attributes2 }; + parseContext.requireExtensions($2->getLoc(), 2, extensions, "attribute"); parseContext.handleLoopAttributes(*$1, $2); $$ = $2; } - iteration_statement_nonattributed : WHILE LEFT_PAREN { if (! parseContext.limits.whileLoops) @@ -4021,7 +4076,6 @@ jump_statement parseContext.requireStage($1.loc, EShLangFragment, "terminateInvocation"); $$ = parseContext.intermediate.addBranch(EOpTerminateInvocation, $1.loc); } - | TERMINATE_RAY SEMICOLON { parseContext.requireStage($1.loc, EShLangAnyHit, "terminateRayEXT"); $$ = parseContext.intermediate.addBranch(EOpTerminateRayKHR, $1.loc); @@ -4030,7 +4084,6 @@ jump_statement parseContext.requireStage($1.loc, EShLangAnyHit, "ignoreIntersectionEXT"); $$ = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, $1.loc); } - ; // Grammar Note: No 'goto'. Gotos are not supported. @@ -4055,13 +4108,11 @@ external_declaration | declaration { $$ = $1; } - | SEMICOLON { parseContext.requireProfile($1.loc, ~EEsProfile, "extraneous semicolon"); parseContext.profileRequires($1.loc, ~EEsProfile, 460, nullptr, "extraneous semicolon"); $$ = nullptr; } - ; function_definition @@ -4083,6 +4134,7 @@ function_definition parseContext.error($1.loc, "function does not return a value:", "", $1.function->getName().c_str()); parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); $$ = parseContext.intermediate.growAggregate($1.intermNode, $3); + $$->getAsAggregate()->setLinkType($1.function->getLinkType()); parseContext.intermediate.setAggregateOperator($$, EOpFunction, $1.function->getType(), $1.loc); $$->getAsAggregate()->setName($1.function->getMangledName().c_str()); @@ -4105,7 +4157,6 @@ function_definition } ; - attribute : LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET { $$ = $3; @@ -4127,8 +4178,6 @@ single_attribute $$ = parseContext.makeAttributes(*$1.string, $3); } - - spirv_requirements_list : spirv_requirements_parameter { $$ = $1; @@ -4309,23 +4358,33 @@ spirv_decorate_parameter } spirv_decorate_id_parameter_list - : constant_expression { - if ($1->getBasicType() != EbtFloat && - $1->getBasicType() != EbtInt && - $1->getBasicType() != EbtUint && - $1->getBasicType() != EbtBool) - parseContext.error($1->getLoc(), "this type not allowed", $1->getType().getBasicString(), ""); + : spirv_decorate_id_parameter { $$ = parseContext.intermediate.makeAggregate($1); } - | spirv_decorate_id_parameter_list COMMA constant_expression { - if ($3->getBasicType() != EbtFloat && - $3->getBasicType() != EbtInt && - $3->getBasicType() != EbtUint && - $3->getBasicType() != EbtBool) - parseContext.error($3->getLoc(), "this type not allowed", $3->getType().getBasicString(), ""); + | spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter { $$ = parseContext.intermediate.growAggregate($1, $3); } +spirv_decorate_id_parameter + : variable_identifier { + if ($1->getAsConstantUnion() || $1->getAsSymbolNode()) + $$ = $1; + else + parseContext.error($1->getLoc(), "only allow constants or variables which are not elements of a composite", "", ""); + } + | FLOATCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true); + } + | INTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true); + } + | UINTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true); + } + | BOOLCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true); + } + spirv_decorate_string_parameter_list : STRING_LITERAL { $$ = parseContext.intermediate.makeAggregate( @@ -4367,6 +4426,9 @@ spirv_type_parameter : constant_expression { $$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion()); } + | type_specifier_nonarray { + $$ = parseContext.makeSpirvTypeParameters($1.loc, $1); + } spirv_instruction_qualifier : SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN { @@ -4393,5 +4455,4 @@ spirv_instruction_qualifier_id $$ = parseContext.makeSpirvInstruction($2.loc, *$1.string, $3.i); } - %% diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 5ba6a6d495..77571b947b 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.7.4. */ +/* A Bison parser, made by GNU Bison 3.8.2. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ 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 . */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -46,10 +46,10 @@ USER NAME SPACE" below. */ /* Identify Bison output, and Bison version. */ -#define YYBISON 30704 +#define YYBISON 30802 /* Bison version string. */ -#define YYBISON_VERSION "3.7.4" +#define YYBISON_VERSION "3.8.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -67,7 +67,7 @@ /* First part of user prologue. */ -#line 69 "MachineIndependent/glslang.y" +#line 44 "MachineIndependent/glslang.y" /* Based on: @@ -287,448 +287,452 @@ enum yysymbol_kind_t YYSYMBOL_FCOOPMATNV = 163, /* FCOOPMATNV */ YYSYMBOL_ICOOPMATNV = 164, /* ICOOPMATNV */ YYSYMBOL_UCOOPMATNV = 165, /* UCOOPMATNV */ - YYSYMBOL_SAMPLERCUBEARRAY = 166, /* SAMPLERCUBEARRAY */ - YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 167, /* SAMPLERCUBEARRAYSHADOW */ - YYSYMBOL_ISAMPLERCUBEARRAY = 168, /* ISAMPLERCUBEARRAY */ - YYSYMBOL_USAMPLERCUBEARRAY = 169, /* USAMPLERCUBEARRAY */ - YYSYMBOL_SAMPLER1D = 170, /* SAMPLER1D */ - YYSYMBOL_SAMPLER1DARRAY = 171, /* SAMPLER1DARRAY */ - YYSYMBOL_SAMPLER1DARRAYSHADOW = 172, /* SAMPLER1DARRAYSHADOW */ - YYSYMBOL_ISAMPLER1D = 173, /* ISAMPLER1D */ - YYSYMBOL_SAMPLER1DSHADOW = 174, /* SAMPLER1DSHADOW */ - YYSYMBOL_SAMPLER2DRECT = 175, /* SAMPLER2DRECT */ - YYSYMBOL_SAMPLER2DRECTSHADOW = 176, /* SAMPLER2DRECTSHADOW */ - YYSYMBOL_ISAMPLER2DRECT = 177, /* ISAMPLER2DRECT */ - YYSYMBOL_USAMPLER2DRECT = 178, /* USAMPLER2DRECT */ - YYSYMBOL_SAMPLERBUFFER = 179, /* SAMPLERBUFFER */ - YYSYMBOL_ISAMPLERBUFFER = 180, /* ISAMPLERBUFFER */ - YYSYMBOL_USAMPLERBUFFER = 181, /* USAMPLERBUFFER */ - YYSYMBOL_SAMPLER2DMS = 182, /* SAMPLER2DMS */ - YYSYMBOL_ISAMPLER2DMS = 183, /* ISAMPLER2DMS */ - YYSYMBOL_USAMPLER2DMS = 184, /* USAMPLER2DMS */ - YYSYMBOL_SAMPLER2DMSARRAY = 185, /* SAMPLER2DMSARRAY */ - YYSYMBOL_ISAMPLER2DMSARRAY = 186, /* ISAMPLER2DMSARRAY */ - YYSYMBOL_USAMPLER2DMSARRAY = 187, /* USAMPLER2DMSARRAY */ - YYSYMBOL_SAMPLEREXTERNALOES = 188, /* SAMPLEREXTERNALOES */ - YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 189, /* SAMPLEREXTERNAL2DY2YEXT */ - YYSYMBOL_ISAMPLER1DARRAY = 190, /* ISAMPLER1DARRAY */ - YYSYMBOL_USAMPLER1D = 191, /* USAMPLER1D */ - YYSYMBOL_USAMPLER1DARRAY = 192, /* USAMPLER1DARRAY */ - YYSYMBOL_F16SAMPLER1D = 193, /* F16SAMPLER1D */ - YYSYMBOL_F16SAMPLER2D = 194, /* F16SAMPLER2D */ - YYSYMBOL_F16SAMPLER3D = 195, /* F16SAMPLER3D */ - YYSYMBOL_F16SAMPLER2DRECT = 196, /* F16SAMPLER2DRECT */ - YYSYMBOL_F16SAMPLERCUBE = 197, /* F16SAMPLERCUBE */ - YYSYMBOL_F16SAMPLER1DARRAY = 198, /* F16SAMPLER1DARRAY */ - YYSYMBOL_F16SAMPLER2DARRAY = 199, /* F16SAMPLER2DARRAY */ - YYSYMBOL_F16SAMPLERCUBEARRAY = 200, /* F16SAMPLERCUBEARRAY */ - YYSYMBOL_F16SAMPLERBUFFER = 201, /* F16SAMPLERBUFFER */ - YYSYMBOL_F16SAMPLER2DMS = 202, /* F16SAMPLER2DMS */ - YYSYMBOL_F16SAMPLER2DMSARRAY = 203, /* F16SAMPLER2DMSARRAY */ - YYSYMBOL_F16SAMPLER1DSHADOW = 204, /* F16SAMPLER1DSHADOW */ - YYSYMBOL_F16SAMPLER2DSHADOW = 205, /* F16SAMPLER2DSHADOW */ - YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 206, /* F16SAMPLER1DARRAYSHADOW */ - YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 207, /* F16SAMPLER2DARRAYSHADOW */ - YYSYMBOL_F16SAMPLER2DRECTSHADOW = 208, /* F16SAMPLER2DRECTSHADOW */ - YYSYMBOL_F16SAMPLERCUBESHADOW = 209, /* F16SAMPLERCUBESHADOW */ - YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 210, /* F16SAMPLERCUBEARRAYSHADOW */ - YYSYMBOL_IMAGE1D = 211, /* IMAGE1D */ - YYSYMBOL_IIMAGE1D = 212, /* IIMAGE1D */ - YYSYMBOL_UIMAGE1D = 213, /* UIMAGE1D */ - YYSYMBOL_IMAGE2D = 214, /* IMAGE2D */ - YYSYMBOL_IIMAGE2D = 215, /* IIMAGE2D */ - YYSYMBOL_UIMAGE2D = 216, /* UIMAGE2D */ - YYSYMBOL_IMAGE3D = 217, /* IMAGE3D */ - YYSYMBOL_IIMAGE3D = 218, /* IIMAGE3D */ - YYSYMBOL_UIMAGE3D = 219, /* UIMAGE3D */ - YYSYMBOL_IMAGE2DRECT = 220, /* IMAGE2DRECT */ - YYSYMBOL_IIMAGE2DRECT = 221, /* IIMAGE2DRECT */ - YYSYMBOL_UIMAGE2DRECT = 222, /* UIMAGE2DRECT */ - YYSYMBOL_IMAGECUBE = 223, /* IMAGECUBE */ - YYSYMBOL_IIMAGECUBE = 224, /* IIMAGECUBE */ - YYSYMBOL_UIMAGECUBE = 225, /* UIMAGECUBE */ - YYSYMBOL_IMAGEBUFFER = 226, /* IMAGEBUFFER */ - YYSYMBOL_IIMAGEBUFFER = 227, /* IIMAGEBUFFER */ - YYSYMBOL_UIMAGEBUFFER = 228, /* UIMAGEBUFFER */ - YYSYMBOL_IMAGE1DARRAY = 229, /* IMAGE1DARRAY */ - YYSYMBOL_IIMAGE1DARRAY = 230, /* IIMAGE1DARRAY */ - YYSYMBOL_UIMAGE1DARRAY = 231, /* UIMAGE1DARRAY */ - YYSYMBOL_IMAGE2DARRAY = 232, /* IMAGE2DARRAY */ - YYSYMBOL_IIMAGE2DARRAY = 233, /* IIMAGE2DARRAY */ - YYSYMBOL_UIMAGE2DARRAY = 234, /* UIMAGE2DARRAY */ - YYSYMBOL_IMAGECUBEARRAY = 235, /* IMAGECUBEARRAY */ - YYSYMBOL_IIMAGECUBEARRAY = 236, /* IIMAGECUBEARRAY */ - YYSYMBOL_UIMAGECUBEARRAY = 237, /* UIMAGECUBEARRAY */ - YYSYMBOL_IMAGE2DMS = 238, /* IMAGE2DMS */ - YYSYMBOL_IIMAGE2DMS = 239, /* IIMAGE2DMS */ - YYSYMBOL_UIMAGE2DMS = 240, /* UIMAGE2DMS */ - YYSYMBOL_IMAGE2DMSARRAY = 241, /* IMAGE2DMSARRAY */ - YYSYMBOL_IIMAGE2DMSARRAY = 242, /* IIMAGE2DMSARRAY */ - YYSYMBOL_UIMAGE2DMSARRAY = 243, /* UIMAGE2DMSARRAY */ - YYSYMBOL_F16IMAGE1D = 244, /* F16IMAGE1D */ - YYSYMBOL_F16IMAGE2D = 245, /* F16IMAGE2D */ - YYSYMBOL_F16IMAGE3D = 246, /* F16IMAGE3D */ - YYSYMBOL_F16IMAGE2DRECT = 247, /* F16IMAGE2DRECT */ - YYSYMBOL_F16IMAGECUBE = 248, /* F16IMAGECUBE */ - YYSYMBOL_F16IMAGE1DARRAY = 249, /* F16IMAGE1DARRAY */ - YYSYMBOL_F16IMAGE2DARRAY = 250, /* F16IMAGE2DARRAY */ - YYSYMBOL_F16IMAGECUBEARRAY = 251, /* F16IMAGECUBEARRAY */ - YYSYMBOL_F16IMAGEBUFFER = 252, /* F16IMAGEBUFFER */ - YYSYMBOL_F16IMAGE2DMS = 253, /* F16IMAGE2DMS */ - YYSYMBOL_F16IMAGE2DMSARRAY = 254, /* F16IMAGE2DMSARRAY */ - YYSYMBOL_I64IMAGE1D = 255, /* I64IMAGE1D */ - YYSYMBOL_U64IMAGE1D = 256, /* U64IMAGE1D */ - YYSYMBOL_I64IMAGE2D = 257, /* I64IMAGE2D */ - YYSYMBOL_U64IMAGE2D = 258, /* U64IMAGE2D */ - YYSYMBOL_I64IMAGE3D = 259, /* I64IMAGE3D */ - YYSYMBOL_U64IMAGE3D = 260, /* U64IMAGE3D */ - YYSYMBOL_I64IMAGE2DRECT = 261, /* I64IMAGE2DRECT */ - YYSYMBOL_U64IMAGE2DRECT = 262, /* U64IMAGE2DRECT */ - YYSYMBOL_I64IMAGECUBE = 263, /* I64IMAGECUBE */ - YYSYMBOL_U64IMAGECUBE = 264, /* U64IMAGECUBE */ - YYSYMBOL_I64IMAGEBUFFER = 265, /* I64IMAGEBUFFER */ - YYSYMBOL_U64IMAGEBUFFER = 266, /* U64IMAGEBUFFER */ - YYSYMBOL_I64IMAGE1DARRAY = 267, /* I64IMAGE1DARRAY */ - YYSYMBOL_U64IMAGE1DARRAY = 268, /* U64IMAGE1DARRAY */ - YYSYMBOL_I64IMAGE2DARRAY = 269, /* I64IMAGE2DARRAY */ - YYSYMBOL_U64IMAGE2DARRAY = 270, /* U64IMAGE2DARRAY */ - YYSYMBOL_I64IMAGECUBEARRAY = 271, /* I64IMAGECUBEARRAY */ - YYSYMBOL_U64IMAGECUBEARRAY = 272, /* U64IMAGECUBEARRAY */ - YYSYMBOL_I64IMAGE2DMS = 273, /* I64IMAGE2DMS */ - YYSYMBOL_U64IMAGE2DMS = 274, /* U64IMAGE2DMS */ - YYSYMBOL_I64IMAGE2DMSARRAY = 275, /* I64IMAGE2DMSARRAY */ - YYSYMBOL_U64IMAGE2DMSARRAY = 276, /* U64IMAGE2DMSARRAY */ - YYSYMBOL_TEXTURECUBEARRAY = 277, /* TEXTURECUBEARRAY */ - YYSYMBOL_ITEXTURECUBEARRAY = 278, /* ITEXTURECUBEARRAY */ - YYSYMBOL_UTEXTURECUBEARRAY = 279, /* UTEXTURECUBEARRAY */ - YYSYMBOL_TEXTURE1D = 280, /* TEXTURE1D */ - YYSYMBOL_ITEXTURE1D = 281, /* ITEXTURE1D */ - YYSYMBOL_UTEXTURE1D = 282, /* UTEXTURE1D */ - YYSYMBOL_TEXTURE1DARRAY = 283, /* TEXTURE1DARRAY */ - YYSYMBOL_ITEXTURE1DARRAY = 284, /* ITEXTURE1DARRAY */ - YYSYMBOL_UTEXTURE1DARRAY = 285, /* UTEXTURE1DARRAY */ - YYSYMBOL_TEXTURE2DRECT = 286, /* TEXTURE2DRECT */ - YYSYMBOL_ITEXTURE2DRECT = 287, /* ITEXTURE2DRECT */ - YYSYMBOL_UTEXTURE2DRECT = 288, /* UTEXTURE2DRECT */ - YYSYMBOL_TEXTUREBUFFER = 289, /* TEXTUREBUFFER */ - YYSYMBOL_ITEXTUREBUFFER = 290, /* ITEXTUREBUFFER */ - YYSYMBOL_UTEXTUREBUFFER = 291, /* UTEXTUREBUFFER */ - YYSYMBOL_TEXTURE2DMS = 292, /* TEXTURE2DMS */ - YYSYMBOL_ITEXTURE2DMS = 293, /* ITEXTURE2DMS */ - YYSYMBOL_UTEXTURE2DMS = 294, /* UTEXTURE2DMS */ - YYSYMBOL_TEXTURE2DMSARRAY = 295, /* TEXTURE2DMSARRAY */ - YYSYMBOL_ITEXTURE2DMSARRAY = 296, /* ITEXTURE2DMSARRAY */ - YYSYMBOL_UTEXTURE2DMSARRAY = 297, /* UTEXTURE2DMSARRAY */ - YYSYMBOL_F16TEXTURE1D = 298, /* F16TEXTURE1D */ - YYSYMBOL_F16TEXTURE2D = 299, /* F16TEXTURE2D */ - YYSYMBOL_F16TEXTURE3D = 300, /* F16TEXTURE3D */ - YYSYMBOL_F16TEXTURE2DRECT = 301, /* F16TEXTURE2DRECT */ - YYSYMBOL_F16TEXTURECUBE = 302, /* F16TEXTURECUBE */ - YYSYMBOL_F16TEXTURE1DARRAY = 303, /* F16TEXTURE1DARRAY */ - YYSYMBOL_F16TEXTURE2DARRAY = 304, /* F16TEXTURE2DARRAY */ - YYSYMBOL_F16TEXTURECUBEARRAY = 305, /* F16TEXTURECUBEARRAY */ - YYSYMBOL_F16TEXTUREBUFFER = 306, /* F16TEXTUREBUFFER */ - YYSYMBOL_F16TEXTURE2DMS = 307, /* F16TEXTURE2DMS */ - YYSYMBOL_F16TEXTURE2DMSARRAY = 308, /* F16TEXTURE2DMSARRAY */ - YYSYMBOL_SUBPASSINPUT = 309, /* SUBPASSINPUT */ - YYSYMBOL_SUBPASSINPUTMS = 310, /* SUBPASSINPUTMS */ - YYSYMBOL_ISUBPASSINPUT = 311, /* ISUBPASSINPUT */ - YYSYMBOL_ISUBPASSINPUTMS = 312, /* ISUBPASSINPUTMS */ - YYSYMBOL_USUBPASSINPUT = 313, /* USUBPASSINPUT */ - YYSYMBOL_USUBPASSINPUTMS = 314, /* USUBPASSINPUTMS */ - YYSYMBOL_F16SUBPASSINPUT = 315, /* F16SUBPASSINPUT */ - YYSYMBOL_F16SUBPASSINPUTMS = 316, /* F16SUBPASSINPUTMS */ - YYSYMBOL_SPIRV_INSTRUCTION = 317, /* SPIRV_INSTRUCTION */ - YYSYMBOL_SPIRV_EXECUTION_MODE = 318, /* SPIRV_EXECUTION_MODE */ - YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 319, /* SPIRV_EXECUTION_MODE_ID */ - YYSYMBOL_SPIRV_DECORATE = 320, /* SPIRV_DECORATE */ - YYSYMBOL_SPIRV_DECORATE_ID = 321, /* SPIRV_DECORATE_ID */ - YYSYMBOL_SPIRV_DECORATE_STRING = 322, /* SPIRV_DECORATE_STRING */ - YYSYMBOL_SPIRV_TYPE = 323, /* SPIRV_TYPE */ - YYSYMBOL_SPIRV_STORAGE_CLASS = 324, /* SPIRV_STORAGE_CLASS */ - YYSYMBOL_SPIRV_BY_REFERENCE = 325, /* SPIRV_BY_REFERENCE */ - YYSYMBOL_SPIRV_LITERAL = 326, /* SPIRV_LITERAL */ - YYSYMBOL_LEFT_OP = 327, /* LEFT_OP */ - YYSYMBOL_RIGHT_OP = 328, /* RIGHT_OP */ - YYSYMBOL_INC_OP = 329, /* INC_OP */ - YYSYMBOL_DEC_OP = 330, /* DEC_OP */ - YYSYMBOL_LE_OP = 331, /* LE_OP */ - YYSYMBOL_GE_OP = 332, /* GE_OP */ - YYSYMBOL_EQ_OP = 333, /* EQ_OP */ - YYSYMBOL_NE_OP = 334, /* NE_OP */ - YYSYMBOL_AND_OP = 335, /* AND_OP */ - YYSYMBOL_OR_OP = 336, /* OR_OP */ - YYSYMBOL_XOR_OP = 337, /* XOR_OP */ - YYSYMBOL_MUL_ASSIGN = 338, /* MUL_ASSIGN */ - YYSYMBOL_DIV_ASSIGN = 339, /* DIV_ASSIGN */ - YYSYMBOL_ADD_ASSIGN = 340, /* ADD_ASSIGN */ - YYSYMBOL_MOD_ASSIGN = 341, /* MOD_ASSIGN */ - YYSYMBOL_LEFT_ASSIGN = 342, /* LEFT_ASSIGN */ - YYSYMBOL_RIGHT_ASSIGN = 343, /* RIGHT_ASSIGN */ - YYSYMBOL_AND_ASSIGN = 344, /* AND_ASSIGN */ - YYSYMBOL_XOR_ASSIGN = 345, /* XOR_ASSIGN */ - YYSYMBOL_OR_ASSIGN = 346, /* OR_ASSIGN */ - YYSYMBOL_SUB_ASSIGN = 347, /* SUB_ASSIGN */ - YYSYMBOL_STRING_LITERAL = 348, /* STRING_LITERAL */ - YYSYMBOL_LEFT_PAREN = 349, /* LEFT_PAREN */ - YYSYMBOL_RIGHT_PAREN = 350, /* RIGHT_PAREN */ - YYSYMBOL_LEFT_BRACKET = 351, /* LEFT_BRACKET */ - YYSYMBOL_RIGHT_BRACKET = 352, /* RIGHT_BRACKET */ - YYSYMBOL_LEFT_BRACE = 353, /* LEFT_BRACE */ - YYSYMBOL_RIGHT_BRACE = 354, /* RIGHT_BRACE */ - YYSYMBOL_DOT = 355, /* DOT */ - YYSYMBOL_COMMA = 356, /* COMMA */ - YYSYMBOL_COLON = 357, /* COLON */ - YYSYMBOL_EQUAL = 358, /* EQUAL */ - YYSYMBOL_SEMICOLON = 359, /* SEMICOLON */ - YYSYMBOL_BANG = 360, /* BANG */ - YYSYMBOL_DASH = 361, /* DASH */ - YYSYMBOL_TILDE = 362, /* TILDE */ - YYSYMBOL_PLUS = 363, /* PLUS */ - YYSYMBOL_STAR = 364, /* STAR */ - YYSYMBOL_SLASH = 365, /* SLASH */ - YYSYMBOL_PERCENT = 366, /* PERCENT */ - YYSYMBOL_LEFT_ANGLE = 367, /* LEFT_ANGLE */ - YYSYMBOL_RIGHT_ANGLE = 368, /* RIGHT_ANGLE */ - YYSYMBOL_VERTICAL_BAR = 369, /* VERTICAL_BAR */ - YYSYMBOL_CARET = 370, /* CARET */ - YYSYMBOL_AMPERSAND = 371, /* AMPERSAND */ - YYSYMBOL_QUESTION = 372, /* QUESTION */ - YYSYMBOL_INVARIANT = 373, /* INVARIANT */ - YYSYMBOL_HIGH_PRECISION = 374, /* HIGH_PRECISION */ - YYSYMBOL_MEDIUM_PRECISION = 375, /* MEDIUM_PRECISION */ - YYSYMBOL_LOW_PRECISION = 376, /* LOW_PRECISION */ - YYSYMBOL_PRECISION = 377, /* PRECISION */ - YYSYMBOL_PACKED = 378, /* PACKED */ - YYSYMBOL_RESOURCE = 379, /* RESOURCE */ - YYSYMBOL_SUPERP = 380, /* SUPERP */ - YYSYMBOL_FLOATCONSTANT = 381, /* FLOATCONSTANT */ - YYSYMBOL_INTCONSTANT = 382, /* INTCONSTANT */ - YYSYMBOL_UINTCONSTANT = 383, /* UINTCONSTANT */ - YYSYMBOL_BOOLCONSTANT = 384, /* BOOLCONSTANT */ - YYSYMBOL_IDENTIFIER = 385, /* IDENTIFIER */ - YYSYMBOL_TYPE_NAME = 386, /* TYPE_NAME */ - YYSYMBOL_CENTROID = 387, /* CENTROID */ - YYSYMBOL_IN = 388, /* IN */ - YYSYMBOL_OUT = 389, /* OUT */ - YYSYMBOL_INOUT = 390, /* INOUT */ - YYSYMBOL_STRUCT = 391, /* STRUCT */ - YYSYMBOL_VOID = 392, /* VOID */ - YYSYMBOL_WHILE = 393, /* WHILE */ - YYSYMBOL_BREAK = 394, /* BREAK */ - YYSYMBOL_CONTINUE = 395, /* CONTINUE */ - YYSYMBOL_DO = 396, /* DO */ - YYSYMBOL_ELSE = 397, /* ELSE */ - YYSYMBOL_FOR = 398, /* FOR */ - YYSYMBOL_IF = 399, /* IF */ - YYSYMBOL_DISCARD = 400, /* DISCARD */ - YYSYMBOL_RETURN = 401, /* RETURN */ - YYSYMBOL_SWITCH = 402, /* SWITCH */ - YYSYMBOL_CASE = 403, /* CASE */ - YYSYMBOL_DEFAULT = 404, /* DEFAULT */ - YYSYMBOL_TERMINATE_INVOCATION = 405, /* TERMINATE_INVOCATION */ - YYSYMBOL_TERMINATE_RAY = 406, /* TERMINATE_RAY */ - YYSYMBOL_IGNORE_INTERSECTION = 407, /* IGNORE_INTERSECTION */ - YYSYMBOL_UNIFORM = 408, /* UNIFORM */ - YYSYMBOL_SHARED = 409, /* SHARED */ - YYSYMBOL_BUFFER = 410, /* BUFFER */ - YYSYMBOL_FLAT = 411, /* FLAT */ - YYSYMBOL_SMOOTH = 412, /* SMOOTH */ - YYSYMBOL_LAYOUT = 413, /* LAYOUT */ - YYSYMBOL_DOUBLECONSTANT = 414, /* DOUBLECONSTANT */ - YYSYMBOL_INT16CONSTANT = 415, /* INT16CONSTANT */ - YYSYMBOL_UINT16CONSTANT = 416, /* UINT16CONSTANT */ - YYSYMBOL_FLOAT16CONSTANT = 417, /* FLOAT16CONSTANT */ - YYSYMBOL_INT32CONSTANT = 418, /* INT32CONSTANT */ - YYSYMBOL_UINT32CONSTANT = 419, /* UINT32CONSTANT */ - YYSYMBOL_INT64CONSTANT = 420, /* INT64CONSTANT */ - YYSYMBOL_UINT64CONSTANT = 421, /* UINT64CONSTANT */ - YYSYMBOL_SUBROUTINE = 422, /* SUBROUTINE */ - YYSYMBOL_DEMOTE = 423, /* DEMOTE */ - YYSYMBOL_PAYLOADNV = 424, /* PAYLOADNV */ - YYSYMBOL_PAYLOADINNV = 425, /* PAYLOADINNV */ - YYSYMBOL_HITATTRNV = 426, /* HITATTRNV */ - YYSYMBOL_CALLDATANV = 427, /* CALLDATANV */ - YYSYMBOL_CALLDATAINNV = 428, /* CALLDATAINNV */ - YYSYMBOL_PAYLOADEXT = 429, /* PAYLOADEXT */ - YYSYMBOL_PAYLOADINEXT = 430, /* PAYLOADINEXT */ - YYSYMBOL_HITATTREXT = 431, /* HITATTREXT */ - YYSYMBOL_CALLDATAEXT = 432, /* CALLDATAEXT */ - YYSYMBOL_CALLDATAINEXT = 433, /* CALLDATAINEXT */ - YYSYMBOL_PATCH = 434, /* PATCH */ - YYSYMBOL_SAMPLE = 435, /* SAMPLE */ - YYSYMBOL_NONUNIFORM = 436, /* NONUNIFORM */ - YYSYMBOL_COHERENT = 437, /* COHERENT */ - YYSYMBOL_VOLATILE = 438, /* VOLATILE */ - YYSYMBOL_RESTRICT = 439, /* RESTRICT */ - YYSYMBOL_READONLY = 440, /* READONLY */ - YYSYMBOL_WRITEONLY = 441, /* WRITEONLY */ - YYSYMBOL_DEVICECOHERENT = 442, /* DEVICECOHERENT */ - YYSYMBOL_QUEUEFAMILYCOHERENT = 443, /* QUEUEFAMILYCOHERENT */ - YYSYMBOL_WORKGROUPCOHERENT = 444, /* WORKGROUPCOHERENT */ - YYSYMBOL_SUBGROUPCOHERENT = 445, /* SUBGROUPCOHERENT */ - YYSYMBOL_NONPRIVATE = 446, /* NONPRIVATE */ - YYSYMBOL_SHADERCALLCOHERENT = 447, /* SHADERCALLCOHERENT */ - YYSYMBOL_NOPERSPECTIVE = 448, /* NOPERSPECTIVE */ - YYSYMBOL_EXPLICITINTERPAMD = 449, /* EXPLICITINTERPAMD */ - YYSYMBOL_PERVERTEXNV = 450, /* PERVERTEXNV */ - YYSYMBOL_PERPRIMITIVENV = 451, /* PERPRIMITIVENV */ - YYSYMBOL_PERVIEWNV = 452, /* PERVIEWNV */ - YYSYMBOL_PERTASKNV = 453, /* PERTASKNV */ - YYSYMBOL_PRECISE = 454, /* PRECISE */ - YYSYMBOL_YYACCEPT = 455, /* $accept */ - YYSYMBOL_variable_identifier = 456, /* variable_identifier */ - YYSYMBOL_primary_expression = 457, /* primary_expression */ - YYSYMBOL_postfix_expression = 458, /* postfix_expression */ - YYSYMBOL_integer_expression = 459, /* integer_expression */ - YYSYMBOL_function_call = 460, /* function_call */ - YYSYMBOL_function_call_or_method = 461, /* function_call_or_method */ - YYSYMBOL_function_call_generic = 462, /* function_call_generic */ - YYSYMBOL_function_call_header_no_parameters = 463, /* function_call_header_no_parameters */ - YYSYMBOL_function_call_header_with_parameters = 464, /* function_call_header_with_parameters */ - YYSYMBOL_function_call_header = 465, /* function_call_header */ - YYSYMBOL_function_identifier = 466, /* function_identifier */ - YYSYMBOL_unary_expression = 467, /* unary_expression */ - YYSYMBOL_unary_operator = 468, /* unary_operator */ - YYSYMBOL_multiplicative_expression = 469, /* multiplicative_expression */ - YYSYMBOL_additive_expression = 470, /* additive_expression */ - YYSYMBOL_shift_expression = 471, /* shift_expression */ - YYSYMBOL_relational_expression = 472, /* relational_expression */ - YYSYMBOL_equality_expression = 473, /* equality_expression */ - YYSYMBOL_and_expression = 474, /* and_expression */ - YYSYMBOL_exclusive_or_expression = 475, /* exclusive_or_expression */ - YYSYMBOL_inclusive_or_expression = 476, /* inclusive_or_expression */ - YYSYMBOL_logical_and_expression = 477, /* logical_and_expression */ - YYSYMBOL_logical_xor_expression = 478, /* logical_xor_expression */ - YYSYMBOL_logical_or_expression = 479, /* logical_or_expression */ - YYSYMBOL_conditional_expression = 480, /* conditional_expression */ - YYSYMBOL_481_1 = 481, /* $@1 */ - YYSYMBOL_assignment_expression = 482, /* assignment_expression */ - YYSYMBOL_assignment_operator = 483, /* assignment_operator */ - YYSYMBOL_expression = 484, /* expression */ - YYSYMBOL_constant_expression = 485, /* constant_expression */ - YYSYMBOL_declaration = 486, /* declaration */ - YYSYMBOL_block_structure = 487, /* block_structure */ - YYSYMBOL_488_2 = 488, /* $@2 */ - YYSYMBOL_identifier_list = 489, /* identifier_list */ - YYSYMBOL_function_prototype = 490, /* function_prototype */ - YYSYMBOL_function_declarator = 491, /* function_declarator */ - YYSYMBOL_function_header_with_parameters = 492, /* function_header_with_parameters */ - YYSYMBOL_function_header = 493, /* function_header */ - YYSYMBOL_parameter_declarator = 494, /* parameter_declarator */ - YYSYMBOL_parameter_declaration = 495, /* parameter_declaration */ - YYSYMBOL_parameter_type_specifier = 496, /* parameter_type_specifier */ - YYSYMBOL_init_declarator_list = 497, /* init_declarator_list */ - YYSYMBOL_single_declaration = 498, /* single_declaration */ - YYSYMBOL_fully_specified_type = 499, /* fully_specified_type */ - YYSYMBOL_invariant_qualifier = 500, /* invariant_qualifier */ - YYSYMBOL_interpolation_qualifier = 501, /* interpolation_qualifier */ - YYSYMBOL_layout_qualifier = 502, /* layout_qualifier */ - YYSYMBOL_layout_qualifier_id_list = 503, /* layout_qualifier_id_list */ - YYSYMBOL_layout_qualifier_id = 504, /* layout_qualifier_id */ - YYSYMBOL_precise_qualifier = 505, /* precise_qualifier */ - YYSYMBOL_type_qualifier = 506, /* type_qualifier */ - YYSYMBOL_single_type_qualifier = 507, /* single_type_qualifier */ - YYSYMBOL_storage_qualifier = 508, /* storage_qualifier */ - YYSYMBOL_non_uniform_qualifier = 509, /* non_uniform_qualifier */ - YYSYMBOL_type_name_list = 510, /* type_name_list */ - YYSYMBOL_type_specifier = 511, /* type_specifier */ - YYSYMBOL_array_specifier = 512, /* array_specifier */ - YYSYMBOL_type_parameter_specifier_opt = 513, /* type_parameter_specifier_opt */ - YYSYMBOL_type_parameter_specifier = 514, /* type_parameter_specifier */ - YYSYMBOL_type_parameter_specifier_list = 515, /* type_parameter_specifier_list */ - YYSYMBOL_type_specifier_nonarray = 516, /* type_specifier_nonarray */ - YYSYMBOL_precision_qualifier = 517, /* precision_qualifier */ - YYSYMBOL_struct_specifier = 518, /* struct_specifier */ - YYSYMBOL_519_3 = 519, /* $@3 */ - YYSYMBOL_520_4 = 520, /* $@4 */ - YYSYMBOL_struct_declaration_list = 521, /* struct_declaration_list */ - YYSYMBOL_struct_declaration = 522, /* struct_declaration */ - YYSYMBOL_struct_declarator_list = 523, /* struct_declarator_list */ - YYSYMBOL_struct_declarator = 524, /* struct_declarator */ - YYSYMBOL_initializer = 525, /* initializer */ - YYSYMBOL_initializer_list = 526, /* initializer_list */ - YYSYMBOL_declaration_statement = 527, /* declaration_statement */ - YYSYMBOL_statement = 528, /* statement */ - YYSYMBOL_simple_statement = 529, /* simple_statement */ - YYSYMBOL_demote_statement = 530, /* demote_statement */ - YYSYMBOL_compound_statement = 531, /* compound_statement */ - YYSYMBOL_532_5 = 532, /* $@5 */ - YYSYMBOL_533_6 = 533, /* $@6 */ - YYSYMBOL_statement_no_new_scope = 534, /* statement_no_new_scope */ - YYSYMBOL_statement_scoped = 535, /* statement_scoped */ - YYSYMBOL_536_7 = 536, /* $@7 */ - YYSYMBOL_537_8 = 537, /* $@8 */ - YYSYMBOL_compound_statement_no_new_scope = 538, /* compound_statement_no_new_scope */ - YYSYMBOL_statement_list = 539, /* statement_list */ - YYSYMBOL_expression_statement = 540, /* expression_statement */ - YYSYMBOL_selection_statement = 541, /* selection_statement */ - YYSYMBOL_selection_statement_nonattributed = 542, /* selection_statement_nonattributed */ - YYSYMBOL_selection_rest_statement = 543, /* selection_rest_statement */ - YYSYMBOL_condition = 544, /* condition */ - YYSYMBOL_switch_statement = 545, /* switch_statement */ - YYSYMBOL_switch_statement_nonattributed = 546, /* switch_statement_nonattributed */ - YYSYMBOL_547_9 = 547, /* $@9 */ - YYSYMBOL_switch_statement_list = 548, /* switch_statement_list */ - YYSYMBOL_case_label = 549, /* case_label */ - YYSYMBOL_iteration_statement = 550, /* iteration_statement */ - YYSYMBOL_iteration_statement_nonattributed = 551, /* iteration_statement_nonattributed */ - YYSYMBOL_552_10 = 552, /* $@10 */ - YYSYMBOL_553_11 = 553, /* $@11 */ - YYSYMBOL_554_12 = 554, /* $@12 */ - YYSYMBOL_for_init_statement = 555, /* for_init_statement */ - YYSYMBOL_conditionopt = 556, /* conditionopt */ - YYSYMBOL_for_rest_statement = 557, /* for_rest_statement */ - YYSYMBOL_jump_statement = 558, /* jump_statement */ - YYSYMBOL_translation_unit = 559, /* translation_unit */ - YYSYMBOL_external_declaration = 560, /* external_declaration */ - YYSYMBOL_function_definition = 561, /* function_definition */ - YYSYMBOL_562_13 = 562, /* $@13 */ - YYSYMBOL_attribute = 563, /* attribute */ - YYSYMBOL_attribute_list = 564, /* attribute_list */ - YYSYMBOL_single_attribute = 565, /* single_attribute */ - YYSYMBOL_spirv_requirements_list = 566, /* spirv_requirements_list */ - YYSYMBOL_spirv_requirements_parameter = 567, /* spirv_requirements_parameter */ - YYSYMBOL_spirv_extension_list = 568, /* spirv_extension_list */ - YYSYMBOL_spirv_capability_list = 569, /* spirv_capability_list */ - YYSYMBOL_spirv_execution_mode_qualifier = 570, /* spirv_execution_mode_qualifier */ - YYSYMBOL_spirv_execution_mode_parameter_list = 571, /* spirv_execution_mode_parameter_list */ - YYSYMBOL_spirv_execution_mode_parameter = 572, /* spirv_execution_mode_parameter */ - YYSYMBOL_spirv_execution_mode_id_parameter_list = 573, /* spirv_execution_mode_id_parameter_list */ - YYSYMBOL_spirv_storage_class_qualifier = 574, /* spirv_storage_class_qualifier */ - YYSYMBOL_spirv_decorate_qualifier = 575, /* spirv_decorate_qualifier */ - YYSYMBOL_spirv_decorate_parameter_list = 576, /* spirv_decorate_parameter_list */ - YYSYMBOL_spirv_decorate_parameter = 577, /* spirv_decorate_parameter */ - YYSYMBOL_spirv_decorate_id_parameter_list = 578, /* spirv_decorate_id_parameter_list */ - YYSYMBOL_spirv_decorate_string_parameter_list = 579, /* spirv_decorate_string_parameter_list */ - YYSYMBOL_spirv_type_specifier = 580, /* spirv_type_specifier */ - YYSYMBOL_spirv_type_parameter_list = 581, /* spirv_type_parameter_list */ - YYSYMBOL_spirv_type_parameter = 582, /* spirv_type_parameter */ - YYSYMBOL_spirv_instruction_qualifier = 583, /* spirv_instruction_qualifier */ - YYSYMBOL_spirv_instruction_qualifier_list = 584, /* spirv_instruction_qualifier_list */ - YYSYMBOL_spirv_instruction_qualifier_id = 585 /* spirv_instruction_qualifier_id */ + YYSYMBOL_COOPMAT = 166, /* COOPMAT */ + YYSYMBOL_HITOBJECTNV = 167, /* HITOBJECTNV */ + YYSYMBOL_HITOBJECTATTRNV = 168, /* HITOBJECTATTRNV */ + YYSYMBOL_SAMPLERCUBEARRAY = 169, /* SAMPLERCUBEARRAY */ + YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 170, /* SAMPLERCUBEARRAYSHADOW */ + YYSYMBOL_ISAMPLERCUBEARRAY = 171, /* ISAMPLERCUBEARRAY */ + YYSYMBOL_USAMPLERCUBEARRAY = 172, /* USAMPLERCUBEARRAY */ + YYSYMBOL_SAMPLER1D = 173, /* SAMPLER1D */ + YYSYMBOL_SAMPLER1DARRAY = 174, /* SAMPLER1DARRAY */ + YYSYMBOL_SAMPLER1DARRAYSHADOW = 175, /* SAMPLER1DARRAYSHADOW */ + YYSYMBOL_ISAMPLER1D = 176, /* ISAMPLER1D */ + YYSYMBOL_SAMPLER1DSHADOW = 177, /* SAMPLER1DSHADOW */ + YYSYMBOL_SAMPLER2DRECT = 178, /* SAMPLER2DRECT */ + YYSYMBOL_SAMPLER2DRECTSHADOW = 179, /* SAMPLER2DRECTSHADOW */ + YYSYMBOL_ISAMPLER2DRECT = 180, /* ISAMPLER2DRECT */ + YYSYMBOL_USAMPLER2DRECT = 181, /* USAMPLER2DRECT */ + YYSYMBOL_SAMPLERBUFFER = 182, /* SAMPLERBUFFER */ + YYSYMBOL_ISAMPLERBUFFER = 183, /* ISAMPLERBUFFER */ + YYSYMBOL_USAMPLERBUFFER = 184, /* USAMPLERBUFFER */ + YYSYMBOL_SAMPLER2DMS = 185, /* SAMPLER2DMS */ + YYSYMBOL_ISAMPLER2DMS = 186, /* ISAMPLER2DMS */ + YYSYMBOL_USAMPLER2DMS = 187, /* USAMPLER2DMS */ + YYSYMBOL_SAMPLER2DMSARRAY = 188, /* SAMPLER2DMSARRAY */ + YYSYMBOL_ISAMPLER2DMSARRAY = 189, /* ISAMPLER2DMSARRAY */ + YYSYMBOL_USAMPLER2DMSARRAY = 190, /* USAMPLER2DMSARRAY */ + YYSYMBOL_SAMPLEREXTERNALOES = 191, /* SAMPLEREXTERNALOES */ + YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 192, /* SAMPLEREXTERNAL2DY2YEXT */ + YYSYMBOL_ISAMPLER1DARRAY = 193, /* ISAMPLER1DARRAY */ + YYSYMBOL_USAMPLER1D = 194, /* USAMPLER1D */ + YYSYMBOL_USAMPLER1DARRAY = 195, /* USAMPLER1DARRAY */ + YYSYMBOL_F16SAMPLER1D = 196, /* F16SAMPLER1D */ + YYSYMBOL_F16SAMPLER2D = 197, /* F16SAMPLER2D */ + YYSYMBOL_F16SAMPLER3D = 198, /* F16SAMPLER3D */ + YYSYMBOL_F16SAMPLER2DRECT = 199, /* F16SAMPLER2DRECT */ + YYSYMBOL_F16SAMPLERCUBE = 200, /* F16SAMPLERCUBE */ + YYSYMBOL_F16SAMPLER1DARRAY = 201, /* F16SAMPLER1DARRAY */ + YYSYMBOL_F16SAMPLER2DARRAY = 202, /* F16SAMPLER2DARRAY */ + YYSYMBOL_F16SAMPLERCUBEARRAY = 203, /* F16SAMPLERCUBEARRAY */ + YYSYMBOL_F16SAMPLERBUFFER = 204, /* F16SAMPLERBUFFER */ + YYSYMBOL_F16SAMPLER2DMS = 205, /* F16SAMPLER2DMS */ + YYSYMBOL_F16SAMPLER2DMSARRAY = 206, /* F16SAMPLER2DMSARRAY */ + YYSYMBOL_F16SAMPLER1DSHADOW = 207, /* F16SAMPLER1DSHADOW */ + YYSYMBOL_F16SAMPLER2DSHADOW = 208, /* F16SAMPLER2DSHADOW */ + YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 209, /* F16SAMPLER1DARRAYSHADOW */ + YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 210, /* F16SAMPLER2DARRAYSHADOW */ + YYSYMBOL_F16SAMPLER2DRECTSHADOW = 211, /* F16SAMPLER2DRECTSHADOW */ + YYSYMBOL_F16SAMPLERCUBESHADOW = 212, /* F16SAMPLERCUBESHADOW */ + YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 213, /* F16SAMPLERCUBEARRAYSHADOW */ + YYSYMBOL_IMAGE1D = 214, /* IMAGE1D */ + YYSYMBOL_IIMAGE1D = 215, /* IIMAGE1D */ + YYSYMBOL_UIMAGE1D = 216, /* UIMAGE1D */ + YYSYMBOL_IMAGE2D = 217, /* IMAGE2D */ + YYSYMBOL_IIMAGE2D = 218, /* IIMAGE2D */ + YYSYMBOL_UIMAGE2D = 219, /* UIMAGE2D */ + YYSYMBOL_IMAGE3D = 220, /* IMAGE3D */ + YYSYMBOL_IIMAGE3D = 221, /* IIMAGE3D */ + YYSYMBOL_UIMAGE3D = 222, /* UIMAGE3D */ + YYSYMBOL_IMAGE2DRECT = 223, /* IMAGE2DRECT */ + YYSYMBOL_IIMAGE2DRECT = 224, /* IIMAGE2DRECT */ + YYSYMBOL_UIMAGE2DRECT = 225, /* UIMAGE2DRECT */ + YYSYMBOL_IMAGECUBE = 226, /* IMAGECUBE */ + YYSYMBOL_IIMAGECUBE = 227, /* IIMAGECUBE */ + YYSYMBOL_UIMAGECUBE = 228, /* UIMAGECUBE */ + YYSYMBOL_IMAGEBUFFER = 229, /* IMAGEBUFFER */ + YYSYMBOL_IIMAGEBUFFER = 230, /* IIMAGEBUFFER */ + YYSYMBOL_UIMAGEBUFFER = 231, /* UIMAGEBUFFER */ + YYSYMBOL_IMAGE1DARRAY = 232, /* IMAGE1DARRAY */ + YYSYMBOL_IIMAGE1DARRAY = 233, /* IIMAGE1DARRAY */ + YYSYMBOL_UIMAGE1DARRAY = 234, /* UIMAGE1DARRAY */ + YYSYMBOL_IMAGE2DARRAY = 235, /* IMAGE2DARRAY */ + YYSYMBOL_IIMAGE2DARRAY = 236, /* IIMAGE2DARRAY */ + YYSYMBOL_UIMAGE2DARRAY = 237, /* UIMAGE2DARRAY */ + YYSYMBOL_IMAGECUBEARRAY = 238, /* IMAGECUBEARRAY */ + YYSYMBOL_IIMAGECUBEARRAY = 239, /* IIMAGECUBEARRAY */ + YYSYMBOL_UIMAGECUBEARRAY = 240, /* UIMAGECUBEARRAY */ + YYSYMBOL_IMAGE2DMS = 241, /* IMAGE2DMS */ + YYSYMBOL_IIMAGE2DMS = 242, /* IIMAGE2DMS */ + YYSYMBOL_UIMAGE2DMS = 243, /* UIMAGE2DMS */ + YYSYMBOL_IMAGE2DMSARRAY = 244, /* IMAGE2DMSARRAY */ + YYSYMBOL_IIMAGE2DMSARRAY = 245, /* IIMAGE2DMSARRAY */ + YYSYMBOL_UIMAGE2DMSARRAY = 246, /* UIMAGE2DMSARRAY */ + YYSYMBOL_F16IMAGE1D = 247, /* F16IMAGE1D */ + YYSYMBOL_F16IMAGE2D = 248, /* F16IMAGE2D */ + YYSYMBOL_F16IMAGE3D = 249, /* F16IMAGE3D */ + YYSYMBOL_F16IMAGE2DRECT = 250, /* F16IMAGE2DRECT */ + YYSYMBOL_F16IMAGECUBE = 251, /* F16IMAGECUBE */ + YYSYMBOL_F16IMAGE1DARRAY = 252, /* F16IMAGE1DARRAY */ + YYSYMBOL_F16IMAGE2DARRAY = 253, /* F16IMAGE2DARRAY */ + YYSYMBOL_F16IMAGECUBEARRAY = 254, /* F16IMAGECUBEARRAY */ + YYSYMBOL_F16IMAGEBUFFER = 255, /* F16IMAGEBUFFER */ + YYSYMBOL_F16IMAGE2DMS = 256, /* F16IMAGE2DMS */ + YYSYMBOL_F16IMAGE2DMSARRAY = 257, /* F16IMAGE2DMSARRAY */ + YYSYMBOL_I64IMAGE1D = 258, /* I64IMAGE1D */ + YYSYMBOL_U64IMAGE1D = 259, /* U64IMAGE1D */ + YYSYMBOL_I64IMAGE2D = 260, /* I64IMAGE2D */ + YYSYMBOL_U64IMAGE2D = 261, /* U64IMAGE2D */ + YYSYMBOL_I64IMAGE3D = 262, /* I64IMAGE3D */ + YYSYMBOL_U64IMAGE3D = 263, /* U64IMAGE3D */ + YYSYMBOL_I64IMAGE2DRECT = 264, /* I64IMAGE2DRECT */ + YYSYMBOL_U64IMAGE2DRECT = 265, /* U64IMAGE2DRECT */ + YYSYMBOL_I64IMAGECUBE = 266, /* I64IMAGECUBE */ + YYSYMBOL_U64IMAGECUBE = 267, /* U64IMAGECUBE */ + YYSYMBOL_I64IMAGEBUFFER = 268, /* I64IMAGEBUFFER */ + YYSYMBOL_U64IMAGEBUFFER = 269, /* U64IMAGEBUFFER */ + YYSYMBOL_I64IMAGE1DARRAY = 270, /* I64IMAGE1DARRAY */ + YYSYMBOL_U64IMAGE1DARRAY = 271, /* U64IMAGE1DARRAY */ + YYSYMBOL_I64IMAGE2DARRAY = 272, /* I64IMAGE2DARRAY */ + YYSYMBOL_U64IMAGE2DARRAY = 273, /* U64IMAGE2DARRAY */ + YYSYMBOL_I64IMAGECUBEARRAY = 274, /* I64IMAGECUBEARRAY */ + YYSYMBOL_U64IMAGECUBEARRAY = 275, /* U64IMAGECUBEARRAY */ + YYSYMBOL_I64IMAGE2DMS = 276, /* I64IMAGE2DMS */ + YYSYMBOL_U64IMAGE2DMS = 277, /* U64IMAGE2DMS */ + YYSYMBOL_I64IMAGE2DMSARRAY = 278, /* I64IMAGE2DMSARRAY */ + YYSYMBOL_U64IMAGE2DMSARRAY = 279, /* U64IMAGE2DMSARRAY */ + YYSYMBOL_TEXTURECUBEARRAY = 280, /* TEXTURECUBEARRAY */ + YYSYMBOL_ITEXTURECUBEARRAY = 281, /* ITEXTURECUBEARRAY */ + YYSYMBOL_UTEXTURECUBEARRAY = 282, /* UTEXTURECUBEARRAY */ + YYSYMBOL_TEXTURE1D = 283, /* TEXTURE1D */ + YYSYMBOL_ITEXTURE1D = 284, /* ITEXTURE1D */ + YYSYMBOL_UTEXTURE1D = 285, /* UTEXTURE1D */ + YYSYMBOL_TEXTURE1DARRAY = 286, /* TEXTURE1DARRAY */ + YYSYMBOL_ITEXTURE1DARRAY = 287, /* ITEXTURE1DARRAY */ + YYSYMBOL_UTEXTURE1DARRAY = 288, /* UTEXTURE1DARRAY */ + YYSYMBOL_TEXTURE2DRECT = 289, /* TEXTURE2DRECT */ + YYSYMBOL_ITEXTURE2DRECT = 290, /* ITEXTURE2DRECT */ + YYSYMBOL_UTEXTURE2DRECT = 291, /* UTEXTURE2DRECT */ + YYSYMBOL_TEXTUREBUFFER = 292, /* TEXTUREBUFFER */ + YYSYMBOL_ITEXTUREBUFFER = 293, /* ITEXTUREBUFFER */ + YYSYMBOL_UTEXTUREBUFFER = 294, /* UTEXTUREBUFFER */ + YYSYMBOL_TEXTURE2DMS = 295, /* TEXTURE2DMS */ + YYSYMBOL_ITEXTURE2DMS = 296, /* ITEXTURE2DMS */ + YYSYMBOL_UTEXTURE2DMS = 297, /* UTEXTURE2DMS */ + YYSYMBOL_TEXTURE2DMSARRAY = 298, /* TEXTURE2DMSARRAY */ + YYSYMBOL_ITEXTURE2DMSARRAY = 299, /* ITEXTURE2DMSARRAY */ + YYSYMBOL_UTEXTURE2DMSARRAY = 300, /* UTEXTURE2DMSARRAY */ + YYSYMBOL_F16TEXTURE1D = 301, /* F16TEXTURE1D */ + YYSYMBOL_F16TEXTURE2D = 302, /* F16TEXTURE2D */ + YYSYMBOL_F16TEXTURE3D = 303, /* F16TEXTURE3D */ + YYSYMBOL_F16TEXTURE2DRECT = 304, /* F16TEXTURE2DRECT */ + YYSYMBOL_F16TEXTURECUBE = 305, /* F16TEXTURECUBE */ + YYSYMBOL_F16TEXTURE1DARRAY = 306, /* F16TEXTURE1DARRAY */ + YYSYMBOL_F16TEXTURE2DARRAY = 307, /* F16TEXTURE2DARRAY */ + YYSYMBOL_F16TEXTURECUBEARRAY = 308, /* F16TEXTURECUBEARRAY */ + YYSYMBOL_F16TEXTUREBUFFER = 309, /* F16TEXTUREBUFFER */ + YYSYMBOL_F16TEXTURE2DMS = 310, /* F16TEXTURE2DMS */ + YYSYMBOL_F16TEXTURE2DMSARRAY = 311, /* F16TEXTURE2DMSARRAY */ + YYSYMBOL_SUBPASSINPUT = 312, /* SUBPASSINPUT */ + YYSYMBOL_SUBPASSINPUTMS = 313, /* SUBPASSINPUTMS */ + YYSYMBOL_ISUBPASSINPUT = 314, /* ISUBPASSINPUT */ + YYSYMBOL_ISUBPASSINPUTMS = 315, /* ISUBPASSINPUTMS */ + YYSYMBOL_USUBPASSINPUT = 316, /* USUBPASSINPUT */ + YYSYMBOL_USUBPASSINPUTMS = 317, /* USUBPASSINPUTMS */ + YYSYMBOL_F16SUBPASSINPUT = 318, /* F16SUBPASSINPUT */ + YYSYMBOL_F16SUBPASSINPUTMS = 319, /* F16SUBPASSINPUTMS */ + YYSYMBOL_SPIRV_INSTRUCTION = 320, /* SPIRV_INSTRUCTION */ + YYSYMBOL_SPIRV_EXECUTION_MODE = 321, /* SPIRV_EXECUTION_MODE */ + YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 322, /* SPIRV_EXECUTION_MODE_ID */ + YYSYMBOL_SPIRV_DECORATE = 323, /* SPIRV_DECORATE */ + YYSYMBOL_SPIRV_DECORATE_ID = 324, /* SPIRV_DECORATE_ID */ + YYSYMBOL_SPIRV_DECORATE_STRING = 325, /* SPIRV_DECORATE_STRING */ + YYSYMBOL_SPIRV_TYPE = 326, /* SPIRV_TYPE */ + YYSYMBOL_SPIRV_STORAGE_CLASS = 327, /* SPIRV_STORAGE_CLASS */ + YYSYMBOL_SPIRV_BY_REFERENCE = 328, /* SPIRV_BY_REFERENCE */ + YYSYMBOL_SPIRV_LITERAL = 329, /* SPIRV_LITERAL */ + YYSYMBOL_ATTACHMENTEXT = 330, /* ATTACHMENTEXT */ + YYSYMBOL_IATTACHMENTEXT = 331, /* IATTACHMENTEXT */ + YYSYMBOL_UATTACHMENTEXT = 332, /* UATTACHMENTEXT */ + YYSYMBOL_LEFT_OP = 333, /* LEFT_OP */ + YYSYMBOL_RIGHT_OP = 334, /* RIGHT_OP */ + YYSYMBOL_INC_OP = 335, /* INC_OP */ + YYSYMBOL_DEC_OP = 336, /* DEC_OP */ + YYSYMBOL_LE_OP = 337, /* LE_OP */ + YYSYMBOL_GE_OP = 338, /* GE_OP */ + YYSYMBOL_EQ_OP = 339, /* EQ_OP */ + YYSYMBOL_NE_OP = 340, /* NE_OP */ + YYSYMBOL_AND_OP = 341, /* AND_OP */ + YYSYMBOL_OR_OP = 342, /* OR_OP */ + YYSYMBOL_XOR_OP = 343, /* XOR_OP */ + YYSYMBOL_MUL_ASSIGN = 344, /* MUL_ASSIGN */ + YYSYMBOL_DIV_ASSIGN = 345, /* DIV_ASSIGN */ + YYSYMBOL_ADD_ASSIGN = 346, /* ADD_ASSIGN */ + YYSYMBOL_MOD_ASSIGN = 347, /* MOD_ASSIGN */ + YYSYMBOL_LEFT_ASSIGN = 348, /* LEFT_ASSIGN */ + YYSYMBOL_RIGHT_ASSIGN = 349, /* RIGHT_ASSIGN */ + YYSYMBOL_AND_ASSIGN = 350, /* AND_ASSIGN */ + YYSYMBOL_XOR_ASSIGN = 351, /* XOR_ASSIGN */ + YYSYMBOL_OR_ASSIGN = 352, /* OR_ASSIGN */ + YYSYMBOL_SUB_ASSIGN = 353, /* SUB_ASSIGN */ + YYSYMBOL_STRING_LITERAL = 354, /* STRING_LITERAL */ + YYSYMBOL_LEFT_PAREN = 355, /* LEFT_PAREN */ + YYSYMBOL_RIGHT_PAREN = 356, /* RIGHT_PAREN */ + YYSYMBOL_LEFT_BRACKET = 357, /* LEFT_BRACKET */ + YYSYMBOL_RIGHT_BRACKET = 358, /* RIGHT_BRACKET */ + YYSYMBOL_LEFT_BRACE = 359, /* LEFT_BRACE */ + YYSYMBOL_RIGHT_BRACE = 360, /* RIGHT_BRACE */ + YYSYMBOL_DOT = 361, /* DOT */ + YYSYMBOL_COMMA = 362, /* COMMA */ + YYSYMBOL_COLON = 363, /* COLON */ + YYSYMBOL_EQUAL = 364, /* EQUAL */ + YYSYMBOL_SEMICOLON = 365, /* SEMICOLON */ + YYSYMBOL_BANG = 366, /* BANG */ + YYSYMBOL_DASH = 367, /* DASH */ + YYSYMBOL_TILDE = 368, /* TILDE */ + YYSYMBOL_PLUS = 369, /* PLUS */ + YYSYMBOL_STAR = 370, /* STAR */ + YYSYMBOL_SLASH = 371, /* SLASH */ + YYSYMBOL_PERCENT = 372, /* PERCENT */ + YYSYMBOL_LEFT_ANGLE = 373, /* LEFT_ANGLE */ + YYSYMBOL_RIGHT_ANGLE = 374, /* RIGHT_ANGLE */ + YYSYMBOL_VERTICAL_BAR = 375, /* VERTICAL_BAR */ + YYSYMBOL_CARET = 376, /* CARET */ + YYSYMBOL_AMPERSAND = 377, /* AMPERSAND */ + YYSYMBOL_QUESTION = 378, /* QUESTION */ + YYSYMBOL_INVARIANT = 379, /* INVARIANT */ + YYSYMBOL_HIGH_PRECISION = 380, /* HIGH_PRECISION */ + YYSYMBOL_MEDIUM_PRECISION = 381, /* MEDIUM_PRECISION */ + YYSYMBOL_LOW_PRECISION = 382, /* LOW_PRECISION */ + YYSYMBOL_PRECISION = 383, /* PRECISION */ + YYSYMBOL_PACKED = 384, /* PACKED */ + YYSYMBOL_RESOURCE = 385, /* RESOURCE */ + YYSYMBOL_SUPERP = 386, /* SUPERP */ + YYSYMBOL_FLOATCONSTANT = 387, /* FLOATCONSTANT */ + YYSYMBOL_INTCONSTANT = 388, /* INTCONSTANT */ + YYSYMBOL_UINTCONSTANT = 389, /* UINTCONSTANT */ + YYSYMBOL_BOOLCONSTANT = 390, /* BOOLCONSTANT */ + YYSYMBOL_IDENTIFIER = 391, /* IDENTIFIER */ + YYSYMBOL_TYPE_NAME = 392, /* TYPE_NAME */ + YYSYMBOL_CENTROID = 393, /* CENTROID */ + YYSYMBOL_IN = 394, /* IN */ + YYSYMBOL_OUT = 395, /* OUT */ + YYSYMBOL_INOUT = 396, /* INOUT */ + YYSYMBOL_STRUCT = 397, /* STRUCT */ + YYSYMBOL_VOID = 398, /* VOID */ + YYSYMBOL_WHILE = 399, /* WHILE */ + YYSYMBOL_BREAK = 400, /* BREAK */ + YYSYMBOL_CONTINUE = 401, /* CONTINUE */ + YYSYMBOL_DO = 402, /* DO */ + YYSYMBOL_ELSE = 403, /* ELSE */ + YYSYMBOL_FOR = 404, /* FOR */ + YYSYMBOL_IF = 405, /* IF */ + YYSYMBOL_DISCARD = 406, /* DISCARD */ + YYSYMBOL_RETURN = 407, /* RETURN */ + YYSYMBOL_SWITCH = 408, /* SWITCH */ + YYSYMBOL_CASE = 409, /* CASE */ + YYSYMBOL_DEFAULT = 410, /* DEFAULT */ + YYSYMBOL_TERMINATE_INVOCATION = 411, /* TERMINATE_INVOCATION */ + YYSYMBOL_TERMINATE_RAY = 412, /* TERMINATE_RAY */ + YYSYMBOL_IGNORE_INTERSECTION = 413, /* IGNORE_INTERSECTION */ + YYSYMBOL_UNIFORM = 414, /* UNIFORM */ + YYSYMBOL_SHARED = 415, /* SHARED */ + YYSYMBOL_BUFFER = 416, /* BUFFER */ + YYSYMBOL_TILEIMAGEEXT = 417, /* TILEIMAGEEXT */ + YYSYMBOL_FLAT = 418, /* FLAT */ + YYSYMBOL_SMOOTH = 419, /* SMOOTH */ + YYSYMBOL_LAYOUT = 420, /* LAYOUT */ + YYSYMBOL_DOUBLECONSTANT = 421, /* DOUBLECONSTANT */ + YYSYMBOL_INT16CONSTANT = 422, /* INT16CONSTANT */ + YYSYMBOL_UINT16CONSTANT = 423, /* UINT16CONSTANT */ + YYSYMBOL_FLOAT16CONSTANT = 424, /* FLOAT16CONSTANT */ + YYSYMBOL_INT32CONSTANT = 425, /* INT32CONSTANT */ + YYSYMBOL_UINT32CONSTANT = 426, /* UINT32CONSTANT */ + YYSYMBOL_INT64CONSTANT = 427, /* INT64CONSTANT */ + YYSYMBOL_UINT64CONSTANT = 428, /* UINT64CONSTANT */ + YYSYMBOL_SUBROUTINE = 429, /* SUBROUTINE */ + YYSYMBOL_DEMOTE = 430, /* DEMOTE */ + YYSYMBOL_PAYLOADNV = 431, /* PAYLOADNV */ + YYSYMBOL_PAYLOADINNV = 432, /* PAYLOADINNV */ + YYSYMBOL_HITATTRNV = 433, /* HITATTRNV */ + YYSYMBOL_CALLDATANV = 434, /* CALLDATANV */ + YYSYMBOL_CALLDATAINNV = 435, /* CALLDATAINNV */ + YYSYMBOL_PAYLOADEXT = 436, /* PAYLOADEXT */ + YYSYMBOL_PAYLOADINEXT = 437, /* PAYLOADINEXT */ + YYSYMBOL_HITATTREXT = 438, /* HITATTREXT */ + YYSYMBOL_CALLDATAEXT = 439, /* CALLDATAEXT */ + YYSYMBOL_CALLDATAINEXT = 440, /* CALLDATAINEXT */ + YYSYMBOL_PATCH = 441, /* PATCH */ + YYSYMBOL_SAMPLE = 442, /* SAMPLE */ + YYSYMBOL_NONUNIFORM = 443, /* NONUNIFORM */ + YYSYMBOL_COHERENT = 444, /* COHERENT */ + YYSYMBOL_VOLATILE = 445, /* VOLATILE */ + YYSYMBOL_RESTRICT = 446, /* RESTRICT */ + YYSYMBOL_READONLY = 447, /* READONLY */ + YYSYMBOL_WRITEONLY = 448, /* WRITEONLY */ + YYSYMBOL_DEVICECOHERENT = 449, /* DEVICECOHERENT */ + YYSYMBOL_QUEUEFAMILYCOHERENT = 450, /* QUEUEFAMILYCOHERENT */ + YYSYMBOL_WORKGROUPCOHERENT = 451, /* WORKGROUPCOHERENT */ + YYSYMBOL_SUBGROUPCOHERENT = 452, /* SUBGROUPCOHERENT */ + YYSYMBOL_NONPRIVATE = 453, /* NONPRIVATE */ + YYSYMBOL_SHADERCALLCOHERENT = 454, /* SHADERCALLCOHERENT */ + YYSYMBOL_NOPERSPECTIVE = 455, /* NOPERSPECTIVE */ + YYSYMBOL_EXPLICITINTERPAMD = 456, /* EXPLICITINTERPAMD */ + YYSYMBOL_PERVERTEXEXT = 457, /* PERVERTEXEXT */ + YYSYMBOL_PERVERTEXNV = 458, /* PERVERTEXNV */ + YYSYMBOL_PERPRIMITIVENV = 459, /* PERPRIMITIVENV */ + YYSYMBOL_PERVIEWNV = 460, /* PERVIEWNV */ + YYSYMBOL_PERTASKNV = 461, /* PERTASKNV */ + YYSYMBOL_PERPRIMITIVEEXT = 462, /* PERPRIMITIVEEXT */ + YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 463, /* TASKPAYLOADWORKGROUPEXT */ + YYSYMBOL_PRECISE = 464, /* PRECISE */ + YYSYMBOL_YYACCEPT = 465, /* $accept */ + YYSYMBOL_variable_identifier = 466, /* variable_identifier */ + YYSYMBOL_primary_expression = 467, /* primary_expression */ + YYSYMBOL_postfix_expression = 468, /* postfix_expression */ + YYSYMBOL_integer_expression = 469, /* integer_expression */ + YYSYMBOL_function_call = 470, /* function_call */ + YYSYMBOL_function_call_or_method = 471, /* function_call_or_method */ + YYSYMBOL_function_call_generic = 472, /* function_call_generic */ + YYSYMBOL_function_call_header_no_parameters = 473, /* function_call_header_no_parameters */ + YYSYMBOL_function_call_header_with_parameters = 474, /* function_call_header_with_parameters */ + YYSYMBOL_function_call_header = 475, /* function_call_header */ + YYSYMBOL_function_identifier = 476, /* function_identifier */ + YYSYMBOL_unary_expression = 477, /* unary_expression */ + YYSYMBOL_unary_operator = 478, /* unary_operator */ + YYSYMBOL_multiplicative_expression = 479, /* multiplicative_expression */ + YYSYMBOL_additive_expression = 480, /* additive_expression */ + YYSYMBOL_shift_expression = 481, /* shift_expression */ + YYSYMBOL_relational_expression = 482, /* relational_expression */ + YYSYMBOL_equality_expression = 483, /* equality_expression */ + YYSYMBOL_and_expression = 484, /* and_expression */ + YYSYMBOL_exclusive_or_expression = 485, /* exclusive_or_expression */ + YYSYMBOL_inclusive_or_expression = 486, /* inclusive_or_expression */ + YYSYMBOL_logical_and_expression = 487, /* logical_and_expression */ + YYSYMBOL_logical_xor_expression = 488, /* logical_xor_expression */ + YYSYMBOL_logical_or_expression = 489, /* logical_or_expression */ + YYSYMBOL_conditional_expression = 490, /* conditional_expression */ + YYSYMBOL_491_1 = 491, /* $@1 */ + YYSYMBOL_assignment_expression = 492, /* assignment_expression */ + YYSYMBOL_assignment_operator = 493, /* assignment_operator */ + YYSYMBOL_expression = 494, /* expression */ + YYSYMBOL_constant_expression = 495, /* constant_expression */ + YYSYMBOL_declaration = 496, /* declaration */ + YYSYMBOL_block_structure = 497, /* block_structure */ + YYSYMBOL_498_2 = 498, /* $@2 */ + YYSYMBOL_identifier_list = 499, /* identifier_list */ + YYSYMBOL_function_prototype = 500, /* function_prototype */ + YYSYMBOL_function_declarator = 501, /* function_declarator */ + YYSYMBOL_function_header_with_parameters = 502, /* function_header_with_parameters */ + YYSYMBOL_function_header = 503, /* function_header */ + YYSYMBOL_parameter_declarator = 504, /* parameter_declarator */ + YYSYMBOL_parameter_declaration = 505, /* parameter_declaration */ + YYSYMBOL_parameter_type_specifier = 506, /* parameter_type_specifier */ + YYSYMBOL_init_declarator_list = 507, /* init_declarator_list */ + YYSYMBOL_single_declaration = 508, /* single_declaration */ + YYSYMBOL_fully_specified_type = 509, /* fully_specified_type */ + YYSYMBOL_invariant_qualifier = 510, /* invariant_qualifier */ + YYSYMBOL_interpolation_qualifier = 511, /* interpolation_qualifier */ + YYSYMBOL_layout_qualifier = 512, /* layout_qualifier */ + YYSYMBOL_layout_qualifier_id_list = 513, /* layout_qualifier_id_list */ + YYSYMBOL_layout_qualifier_id = 514, /* layout_qualifier_id */ + YYSYMBOL_precise_qualifier = 515, /* precise_qualifier */ + YYSYMBOL_type_qualifier = 516, /* type_qualifier */ + YYSYMBOL_single_type_qualifier = 517, /* single_type_qualifier */ + YYSYMBOL_storage_qualifier = 518, /* storage_qualifier */ + YYSYMBOL_non_uniform_qualifier = 519, /* non_uniform_qualifier */ + YYSYMBOL_type_name_list = 520, /* type_name_list */ + YYSYMBOL_type_specifier = 521, /* type_specifier */ + YYSYMBOL_array_specifier = 522, /* array_specifier */ + YYSYMBOL_type_parameter_specifier_opt = 523, /* type_parameter_specifier_opt */ + YYSYMBOL_type_parameter_specifier = 524, /* type_parameter_specifier */ + YYSYMBOL_type_parameter_specifier_list = 525, /* type_parameter_specifier_list */ + YYSYMBOL_type_specifier_nonarray = 526, /* type_specifier_nonarray */ + YYSYMBOL_precision_qualifier = 527, /* precision_qualifier */ + YYSYMBOL_struct_specifier = 528, /* struct_specifier */ + YYSYMBOL_529_3 = 529, /* $@3 */ + YYSYMBOL_530_4 = 530, /* $@4 */ + YYSYMBOL_struct_declaration_list = 531, /* struct_declaration_list */ + YYSYMBOL_struct_declaration = 532, /* struct_declaration */ + YYSYMBOL_struct_declarator_list = 533, /* struct_declarator_list */ + YYSYMBOL_struct_declarator = 534, /* struct_declarator */ + YYSYMBOL_initializer = 535, /* initializer */ + YYSYMBOL_initializer_list = 536, /* initializer_list */ + YYSYMBOL_declaration_statement = 537, /* declaration_statement */ + YYSYMBOL_statement = 538, /* statement */ + YYSYMBOL_simple_statement = 539, /* simple_statement */ + YYSYMBOL_demote_statement = 540, /* demote_statement */ + YYSYMBOL_compound_statement = 541, /* compound_statement */ + YYSYMBOL_542_5 = 542, /* $@5 */ + YYSYMBOL_543_6 = 543, /* $@6 */ + YYSYMBOL_statement_no_new_scope = 544, /* statement_no_new_scope */ + YYSYMBOL_statement_scoped = 545, /* statement_scoped */ + YYSYMBOL_546_7 = 546, /* $@7 */ + YYSYMBOL_547_8 = 547, /* $@8 */ + YYSYMBOL_compound_statement_no_new_scope = 548, /* compound_statement_no_new_scope */ + YYSYMBOL_statement_list = 549, /* statement_list */ + YYSYMBOL_expression_statement = 550, /* expression_statement */ + YYSYMBOL_selection_statement = 551, /* selection_statement */ + YYSYMBOL_selection_statement_nonattributed = 552, /* selection_statement_nonattributed */ + YYSYMBOL_selection_rest_statement = 553, /* selection_rest_statement */ + YYSYMBOL_condition = 554, /* condition */ + YYSYMBOL_switch_statement = 555, /* switch_statement */ + YYSYMBOL_switch_statement_nonattributed = 556, /* switch_statement_nonattributed */ + YYSYMBOL_557_9 = 557, /* $@9 */ + YYSYMBOL_switch_statement_list = 558, /* switch_statement_list */ + YYSYMBOL_case_label = 559, /* case_label */ + YYSYMBOL_iteration_statement = 560, /* iteration_statement */ + YYSYMBOL_iteration_statement_nonattributed = 561, /* iteration_statement_nonattributed */ + YYSYMBOL_562_10 = 562, /* $@10 */ + YYSYMBOL_563_11 = 563, /* $@11 */ + YYSYMBOL_564_12 = 564, /* $@12 */ + YYSYMBOL_for_init_statement = 565, /* for_init_statement */ + YYSYMBOL_conditionopt = 566, /* conditionopt */ + YYSYMBOL_for_rest_statement = 567, /* for_rest_statement */ + YYSYMBOL_jump_statement = 568, /* jump_statement */ + YYSYMBOL_translation_unit = 569, /* translation_unit */ + YYSYMBOL_external_declaration = 570, /* external_declaration */ + YYSYMBOL_function_definition = 571, /* function_definition */ + YYSYMBOL_572_13 = 572, /* $@13 */ + YYSYMBOL_attribute = 573, /* attribute */ + YYSYMBOL_attribute_list = 574, /* attribute_list */ + YYSYMBOL_single_attribute = 575, /* single_attribute */ + YYSYMBOL_spirv_requirements_list = 576, /* spirv_requirements_list */ + YYSYMBOL_spirv_requirements_parameter = 577, /* spirv_requirements_parameter */ + YYSYMBOL_spirv_extension_list = 578, /* spirv_extension_list */ + YYSYMBOL_spirv_capability_list = 579, /* spirv_capability_list */ + YYSYMBOL_spirv_execution_mode_qualifier = 580, /* spirv_execution_mode_qualifier */ + YYSYMBOL_spirv_execution_mode_parameter_list = 581, /* spirv_execution_mode_parameter_list */ + YYSYMBOL_spirv_execution_mode_parameter = 582, /* spirv_execution_mode_parameter */ + YYSYMBOL_spirv_execution_mode_id_parameter_list = 583, /* spirv_execution_mode_id_parameter_list */ + YYSYMBOL_spirv_storage_class_qualifier = 584, /* spirv_storage_class_qualifier */ + YYSYMBOL_spirv_decorate_qualifier = 585, /* spirv_decorate_qualifier */ + YYSYMBOL_spirv_decorate_parameter_list = 586, /* spirv_decorate_parameter_list */ + YYSYMBOL_spirv_decorate_parameter = 587, /* spirv_decorate_parameter */ + YYSYMBOL_spirv_decorate_id_parameter_list = 588, /* spirv_decorate_id_parameter_list */ + YYSYMBOL_spirv_decorate_id_parameter = 589, /* spirv_decorate_id_parameter */ + YYSYMBOL_spirv_decorate_string_parameter_list = 590, /* spirv_decorate_string_parameter_list */ + YYSYMBOL_spirv_type_specifier = 591, /* spirv_type_specifier */ + YYSYMBOL_spirv_type_parameter_list = 592, /* spirv_type_parameter_list */ + YYSYMBOL_spirv_type_parameter = 593, /* spirv_type_parameter */ + YYSYMBOL_spirv_instruction_qualifier = 594, /* spirv_instruction_qualifier */ + YYSYMBOL_spirv_instruction_qualifier_list = 595, /* spirv_instruction_qualifier_list */ + YYSYMBOL_spirv_instruction_qualifier_id = 596 /* spirv_instruction_qualifier_id */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; /* Second part of user prologue. */ -#line 136 "MachineIndependent/glslang.y" +#line 111 "MachineIndependent/glslang.y" -/* windows only pragma */ -#ifdef _MSC_VER - #pragma warning(disable : 4065) - #pragma warning(disable : 4127) - #pragma warning(disable : 4244) -#endif - #define parseContext (*pParseContext) #define yyerror(context, msg) context->parserError(msg) extern int yylex(YYSTYPE*, TParseContext&); -#line 732 "MachineIndependent/glslang_tab.cpp" +#line 736 "MachineIndependent/glslang_tab.cpp" #ifdef short @@ -768,6 +772,18 @@ typedef int_least16_t yytype_int16; typedef short yytype_int16; #endif +/* Work around bug in HP-UX 11.23, which defines these macros + incorrectly for preprocessor constants. This workaround can likely + be removed in 2023, as HPE has promised support for HP-UX 11.23 + (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of + . */ +#ifdef __hpux +# undef UINT_LEAST8_MAX +# undef UINT_LEAST16_MAX +# define UINT_LEAST8_MAX 255 +# define UINT_LEAST16_MAX 65535 +#endif + #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ typedef __UINT_LEAST8_TYPE__ yytype_uint8; #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ @@ -865,17 +881,23 @@ typedef int yy_state_fast_t; /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) +# define YY_USE(E) ((void) (E)) #else -# define YYUSE(E) /* empty */ +# define YY_USE(E) /* empty */ #endif -#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ +#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ +# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") +# else +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# endif # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else @@ -1032,21 +1054,21 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 442 +#define YYFINAL 452 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 12452 +#define YYLAST 12701 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 455 +#define YYNTOKENS 465 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 131 +#define YYNNTS 132 /* YYNRULES -- Number of rules. */ -#define YYNRULES 683 +#define YYNRULES 700 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 929 +#define YYNSTATES 946 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 709 +#define YYMAXUTOK 719 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1130,82 +1152,85 @@ static const yytype_int16 yytranslate[] = 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454 + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464 }; #if YYDEBUG - /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 392, 392, 398, 401, 406, 409, 412, 416, 420, - 423, 427, 431, 435, 439, 443, 447, 453, 461, 464, - 467, 470, 473, 478, 486, 493, 500, 506, 510, 517, - 520, 526, 533, 543, 551, 556, 584, 593, 599, 603, - 607, 627, 628, 629, 630, 636, 637, 642, 647, 656, - 657, 662, 670, 671, 677, 686, 687, 692, 697, 702, - 710, 711, 720, 732, 733, 742, 743, 752, 753, 762, - 763, 771, 772, 780, 781, 789, 790, 790, 808, 809, - 825, 829, 833, 837, 842, 846, 850, 854, 858, 862, - 866, 873, 876, 887, 894, 900, 907, 913, 918, 925, - 929, 933, 937, 942, 947, 956, 956, 967, 971, 978, - 982, 988, 994, 1004, 1007, 1014, 1022, 1042, 1065, 1080, - 1105, 1116, 1126, 1136, 1146, 1155, 1158, 1162, 1166, 1171, - 1179, 1186, 1191, 1196, 1201, 1210, 1220, 1247, 1256, 1263, - 1271, 1278, 1285, 1293, 1303, 1310, 1321, 1327, 1330, 1337, - 1341, 1345, 1354, 1364, 1367, 1378, 1381, 1384, 1388, 1392, - 1397, 1401, 1404, 1409, 1413, 1418, 1427, 1431, 1436, 1442, - 1448, 1455, 1460, 1468, 1474, 1486, 1500, 1506, 1511, 1519, - 1527, 1535, 1543, 1551, 1559, 1567, 1575, 1582, 1589, 1593, - 1598, 1603, 1608, 1613, 1618, 1623, 1627, 1631, 1635, 1639, - 1645, 1656, 1663, 1666, 1675, 1680, 1690, 1695, 1703, 1707, - 1717, 1720, 1726, 1732, 1739, 1749, 1753, 1757, 1761, 1766, - 1770, 1775, 1780, 1785, 1790, 1795, 1800, 1805, 1810, 1815, - 1821, 1827, 1833, 1838, 1843, 1848, 1853, 1858, 1863, 1868, - 1873, 1878, 1883, 1888, 1894, 1901, 1906, 1911, 1916, 1921, - 1926, 1931, 1936, 1941, 1946, 1951, 1956, 1964, 1972, 1980, - 1986, 1992, 1998, 2004, 2010, 2016, 2022, 2028, 2034, 2040, - 2046, 2052, 2058, 2064, 2070, 2076, 2082, 2088, 2094, 2100, - 2106, 2112, 2118, 2124, 2130, 2136, 2142, 2148, 2154, 2160, - 2166, 2172, 2178, 2186, 2194, 2202, 2210, 2218, 2226, 2234, - 2242, 2250, 2258, 2266, 2274, 2280, 2286, 2292, 2298, 2304, - 2310, 2316, 2322, 2328, 2334, 2340, 2346, 2352, 2358, 2364, - 2370, 2376, 2382, 2388, 2394, 2400, 2406, 2412, 2418, 2424, - 2430, 2436, 2442, 2448, 2454, 2460, 2466, 2472, 2478, 2484, - 2490, 2494, 2498, 2502, 2507, 2513, 2518, 2523, 2528, 2533, - 2538, 2543, 2549, 2554, 2559, 2564, 2569, 2574, 2580, 2586, - 2592, 2598, 2604, 2610, 2616, 2622, 2628, 2634, 2640, 2646, - 2652, 2658, 2663, 2668, 2673, 2678, 2683, 2688, 2694, 2699, - 2704, 2709, 2714, 2719, 2724, 2729, 2735, 2740, 2745, 2750, - 2755, 2760, 2765, 2770, 2775, 2780, 2785, 2790, 2795, 2800, - 2805, 2811, 2816, 2821, 2827, 2833, 2838, 2843, 2848, 2854, - 2859, 2864, 2869, 2875, 2880, 2885, 2890, 2896, 2901, 2906, - 2911, 2917, 2923, 2929, 2935, 2940, 2946, 2952, 2958, 2963, - 2968, 2973, 2978, 2983, 2989, 2994, 2999, 3004, 3010, 3015, - 3020, 3025, 3031, 3036, 3041, 3046, 3052, 3057, 3062, 3067, - 3073, 3078, 3083, 3088, 3094, 3099, 3104, 3109, 3115, 3120, - 3125, 3130, 3136, 3141, 3146, 3151, 3157, 3162, 3167, 3172, - 3178, 3183, 3188, 3193, 3199, 3204, 3209, 3214, 3220, 3225, - 3230, 3235, 3241, 3246, 3251, 3256, 3262, 3267, 3272, 3277, - 3283, 3288, 3293, 3298, 3303, 3308, 3313, 3318, 3323, 3328, - 3333, 3338, 3343, 3348, 3353, 3358, 3363, 3368, 3373, 3378, - 3383, 3388, 3393, 3398, 3403, 3409, 3415, 3421, 3427, 3434, - 3441, 3447, 3453, 3459, 3465, 3471, 3477, 3483, 3488, 3493, - 3509, 3514, 3519, 3527, 3527, 3538, 3538, 3548, 3551, 3564, - 3586, 3613, 3617, 3623, 3628, 3639, 3643, 3649, 3655, 3666, - 3669, 3676, 3680, 3681, 3687, 3688, 3689, 3690, 3691, 3692, - 3693, 3695, 3701, 3710, 3711, 3715, 3711, 3727, 3728, 3732, - 3732, 3739, 3739, 3753, 3756, 3764, 3772, 3783, 3784, 3788, - 3792, 3800, 3807, 3811, 3819, 3823, 3836, 3840, 3848, 3848, - 3868, 3871, 3877, 3889, 3901, 3905, 3913, 3913, 3928, 3928, - 3946, 3946, 3967, 3970, 3976, 3979, 3985, 3989, 3996, 4001, - 4006, 4013, 4016, 4020, 4025, 4029, 4039, 4043, 4052, 4055, - 4059, 4068, 4068, 4110, 4115, 4118, 4123, 4126, 4133, 4136, - 4141, 4144, 4149, 4152, 4157, 4160, 4165, 4169, 4174, 4178, - 4183, 4187, 4194, 4197, 4202, 4205, 4208, 4211, 4214, 4219, - 4228, 4239, 4244, 4252, 4256, 4261, 4265, 4270, 4274, 4279, - 4283, 4290, 4293, 4298, 4301, 4304, 4307, 4312, 4320, 4330, - 4334, 4339, 4343, 4348, 4352, 4359, 4362, 4367, 4372, 4375, - 4381, 4384, 4389, 4392 + 0, 355, 355, 361, 364, 369, 372, 375, 379, 382, + 385, 389, 393, 397, 401, 405, 409, 415, 422, 425, + 428, 431, 434, 439, 447, 454, 461, 467, 471, 478, + 481, 487, 505, 530, 538, 543, 570, 578, 584, 588, + 592, 612, 613, 614, 615, 621, 622, 627, 632, 641, + 642, 647, 655, 656, 662, 671, 672, 677, 682, 687, + 695, 696, 705, 717, 718, 727, 728, 737, 738, 747, + 748, 756, 757, 765, 766, 774, 775, 775, 793, 794, + 810, 814, 818, 822, 827, 831, 835, 839, 843, 847, + 851, 858, 861, 872, 879, 884, 891, 896, 901, 908, + 912, 916, 920, 925, 930, 939, 939, 950, 954, 961, + 966, 974, 982, 994, 997, 1004, 1017, 1040, 1063, 1078, + 1103, 1114, 1124, 1134, 1144, 1153, 1156, 1160, 1164, 1169, + 1177, 1182, 1187, 1192, 1197, 1206, 1216, 1243, 1252, 1259, + 1266, 1273, 1280, 1288, 1296, 1306, 1316, 1323, 1333, 1339, + 1342, 1349, 1353, 1357, 1365, 1374, 1377, 1388, 1391, 1394, + 1398, 1402, 1406, 1410, 1413, 1418, 1422, 1427, 1435, 1439, + 1444, 1450, 1456, 1463, 1468, 1473, 1481, 1486, 1498, 1512, + 1518, 1523, 1531, 1539, 1547, 1555, 1563, 1571, 1579, 1587, + 1595, 1602, 1609, 1613, 1618, 1623, 1628, 1633, 1638, 1643, + 1647, 1651, 1655, 1659, 1665, 1671, 1681, 1688, 1691, 1699, + 1706, 1717, 1722, 1730, 1734, 1744, 1747, 1753, 1759, 1765, + 1773, 1783, 1787, 1791, 1795, 1800, 1804, 1809, 1814, 1819, + 1824, 1829, 1834, 1839, 1844, 1849, 1855, 1861, 1867, 1872, + 1877, 1882, 1887, 1892, 1897, 1902, 1907, 1912, 1917, 1922, + 1927, 1934, 1939, 1944, 1949, 1954, 1959, 1964, 1969, 1974, + 1979, 1984, 1989, 1997, 2005, 2013, 2019, 2025, 2031, 2037, + 2043, 2049, 2055, 2061, 2067, 2073, 2079, 2085, 2091, 2097, + 2103, 2109, 2115, 2121, 2127, 2133, 2139, 2145, 2151, 2157, + 2163, 2169, 2175, 2181, 2187, 2193, 2199, 2205, 2211, 2219, + 2227, 2235, 2243, 2251, 2259, 2267, 2275, 2283, 2291, 2299, + 2307, 2313, 2319, 2325, 2331, 2337, 2343, 2349, 2355, 2361, + 2367, 2373, 2379, 2385, 2391, 2397, 2403, 2409, 2415, 2421, + 2427, 2433, 2439, 2445, 2451, 2457, 2463, 2469, 2475, 2481, + 2487, 2493, 2499, 2505, 2511, 2517, 2523, 2527, 2531, 2535, + 2540, 2545, 2550, 2555, 2560, 2565, 2570, 2575, 2580, 2585, + 2590, 2595, 2600, 2605, 2611, 2617, 2623, 2629, 2635, 2641, + 2647, 2653, 2659, 2665, 2671, 2677, 2683, 2688, 2693, 2698, + 2703, 2708, 2713, 2718, 2723, 2728, 2733, 2738, 2743, 2748, + 2753, 2758, 2763, 2768, 2773, 2778, 2783, 2788, 2793, 2798, + 2803, 2808, 2813, 2818, 2823, 2828, 2833, 2838, 2843, 2848, + 2854, 2860, 2865, 2870, 2875, 2881, 2886, 2891, 2896, 2902, + 2907, 2912, 2917, 2923, 2928, 2933, 2938, 2944, 2950, 2956, + 2962, 2967, 2973, 2979, 2985, 2990, 2995, 3000, 3005, 3010, + 3016, 3021, 3026, 3031, 3037, 3042, 3047, 3052, 3058, 3063, + 3068, 3073, 3079, 3084, 3089, 3094, 3100, 3105, 3110, 3115, + 3121, 3126, 3131, 3136, 3142, 3147, 3152, 3157, 3163, 3168, + 3173, 3178, 3184, 3189, 3194, 3199, 3205, 3210, 3215, 3220, + 3226, 3231, 3236, 3241, 3247, 3252, 3257, 3262, 3268, 3273, + 3278, 3283, 3289, 3294, 3299, 3304, 3310, 3315, 3320, 3325, + 3330, 3335, 3340, 3345, 3350, 3355, 3360, 3365, 3370, 3375, + 3380, 3385, 3390, 3395, 3400, 3405, 3410, 3415, 3420, 3425, + 3430, 3436, 3442, 3448, 3454, 3460, 3466, 3472, 3479, 3486, + 3492, 3498, 3504, 3510, 3517, 3524, 3531, 3538, 3542, 3546, + 3551, 3567, 3572, 3577, 3585, 3585, 3602, 3602, 3612, 3615, + 3628, 3650, 3677, 3681, 3687, 3692, 3703, 3706, 3712, 3718, + 3727, 3730, 3736, 3740, 3741, 3747, 3748, 3749, 3750, 3751, + 3752, 3753, 3754, 3758, 3766, 3767, 3771, 3767, 3785, 3786, + 3790, 3790, 3797, 3797, 3811, 3814, 3824, 3832, 3843, 3844, + 3848, 3851, 3858, 3865, 3869, 3877, 3881, 3894, 3897, 3904, + 3904, 3924, 3927, 3933, 3945, 3957, 3960, 3968, 3968, 3983, + 3983, 4001, 4001, 4022, 4025, 4031, 4034, 4040, 4044, 4051, + 4056, 4061, 4068, 4071, 4075, 4079, 4083, 4092, 4096, 4105, + 4108, 4111, 4119, 4119, 4161, 4166, 4169, 4174, 4177, 4182, + 4185, 4190, 4193, 4198, 4201, 4206, 4209, 4214, 4218, 4223, + 4227, 4232, 4236, 4243, 4246, 4251, 4254, 4257, 4260, 4263, + 4268, 4277, 4288, 4293, 4301, 4305, 4310, 4314, 4319, 4323, + 4328, 4332, 4339, 4342, 4347, 4350, 4353, 4356, 4361, 4364, + 4369, 4375, 4378, 4381, 4384, 4389, 4393, 4398, 4402, 4407, + 4411, 4418, 4421, 4426, 4429, 4434, 4437, 4443, 4446, 4451, + 4454 }; #endif @@ -1250,16 +1275,17 @@ static const char *const yytname[] = "F32MAT4X2", "F32MAT4X3", "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT", - "RAYQUERYEXT", "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", - "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", - "USAMPLERCUBEARRAY", "SAMPLER1D", "SAMPLER1DARRAY", - "SAMPLER1DARRAYSHADOW", "ISAMPLER1D", "SAMPLER1DSHADOW", "SAMPLER2DRECT", - "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT", "USAMPLER2DRECT", - "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER", "SAMPLER2DMS", - "ISAMPLER2DMS", "USAMPLER2DMS", "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", - "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT", - "ISAMPLER1DARRAY", "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D", - "F16SAMPLER2D", "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE", + "RAYQUERYEXT", "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "COOPMAT", + "HITOBJECTNV", "HITOBJECTATTRNV", "SAMPLERCUBEARRAY", + "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY", + "SAMPLER1D", "SAMPLER1DARRAY", "SAMPLER1DARRAYSHADOW", "ISAMPLER1D", + "SAMPLER1DSHADOW", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", + "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", + "USAMPLERBUFFER", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS", + "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY", + "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT", "ISAMPLER1DARRAY", + "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D", "F16SAMPLER2D", + "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE", "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY", "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY", "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW", @@ -1295,32 +1321,34 @@ static const char *const yytname[] = "F16SUBPASSINPUTMS", "SPIRV_INSTRUCTION", "SPIRV_EXECUTION_MODE", "SPIRV_EXECUTION_MODE_ID", "SPIRV_DECORATE", "SPIRV_DECORATE_ID", "SPIRV_DECORATE_STRING", "SPIRV_TYPE", "SPIRV_STORAGE_CLASS", - "SPIRV_BY_REFERENCE", "SPIRV_LITERAL", "LEFT_OP", "RIGHT_OP", "INC_OP", - "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", - "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", - "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", - "SUB_ASSIGN", "STRING_LITERAL", "LEFT_PAREN", "RIGHT_PAREN", - "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT", - "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", - "STAR", "SLASH", "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", - "CARET", "AMPERSAND", "QUESTION", "INVARIANT", "HIGH_PRECISION", - "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", - "SUPERP", "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT", + "SPIRV_BY_REFERENCE", "SPIRV_LITERAL", "ATTACHMENTEXT", "IATTACHMENTEXT", + "UATTACHMENTEXT", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", + "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", + "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", + "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "STRING_LITERAL", + "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET", + "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL", + "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT", + "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND", + "QUESTION", "INVARIANT", "HIGH_PRECISION", "MEDIUM_PRECISION", + "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP", + "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT", "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", "INOUT", "STRUCT", "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "TERMINATE_INVOCATION", "TERMINATE_RAY", "IGNORE_INTERSECTION", "UNIFORM", "SHARED", "BUFFER", - "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT", - "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT", - "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "PAYLOADNV", - "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT", - "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT", "PATCH", - "SAMPLE", "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY", - "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", - "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", - "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD", - "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "PRECISE", - "$accept", "variable_identifier", "primary_expression", + "TILEIMAGEEXT", "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", + "INT16CONSTANT", "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", + "UINT32CONSTANT", "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", + "DEMOTE", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", "CALLDATANV", + "CALLDATAINNV", "PAYLOADEXT", "PAYLOADINEXT", "HITATTREXT", + "CALLDATAEXT", "CALLDATAINEXT", "PATCH", "SAMPLE", "NONUNIFORM", + "COHERENT", "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", + "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT", + "SUBGROUPCOHERENT", "NONPRIVATE", "SHADERCALLCOHERENT", "NOPERSPECTIVE", + "EXPLICITINTERPAMD", "PERVERTEXEXT", "PERVERTEXNV", "PERPRIMITIVENV", + "PERVIEWNV", "PERTASKNV", "PERPRIMITIVEEXT", "TASKPAYLOADWORKGROUPEXT", + "PRECISE", "$accept", "variable_identifier", "primary_expression", "postfix_expression", "integer_expression", "function_call", "function_call_or_method", "function_call_generic", "function_call_header_no_parameters", @@ -1365,7 +1393,7 @@ static const char *const yytname[] = "spirv_execution_mode_id_parameter_list", "spirv_storage_class_qualifier", "spirv_decorate_qualifier", "spirv_decorate_parameter_list", "spirv_decorate_parameter", - "spirv_decorate_id_parameter_list", + "spirv_decorate_id_parameter_list", "spirv_decorate_id_parameter", "spirv_decorate_string_parameter_list", "spirv_type_specifier", "spirv_type_parameter_list", "spirv_type_parameter", "spirv_instruction_qualifier", "spirv_instruction_qualifier_list", @@ -1379,406 +1407,358 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#ifdef YYPRINT -/* YYTOKNUM[NUM] -- (External) token number corresponding to the - (internal) symbol number NUM (which must be that of a token). */ -static const yytype_int16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, - 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, - 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, - 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, - 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, - 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, - 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, - 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, - 705, 706, 707, 708, 709 -}; -#endif - -#define YYPACT_NINF (-859) +#define YYPACT_NINF (-872) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-570) +#define YYTABLE_NINF (-695) #define yytable_value_is_error(Yyn) \ 0 - /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ static const yytype_int16 yypact[] = { - 4548, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -312, -274, -244, -212, -208, - -201, -181, -169, -859, -859, -194, -859, -859, -859, -859, - -859, -285, -859, -859, -859, -859, -859, -317, -859, -859, - -859, -859, -859, -859, -132, -73, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -329, -70, - -158, -145, 7712, -221, -859, -164, -859, -859, -859, -859, - 5452, -859, -859, -859, -859, -68, -859, -859, 932, -859, - -859, 7712, -55, -859, -859, -859, 5904, -80, -154, -150, - -142, -135, -130, -80, -129, -79, 12060, -859, -45, -354, - -76, -859, -308, -859, -43, -40, 7712, -859, -859, -859, - 7712, -72, -71, -859, -265, -859, -257, -859, -859, 10761, - -39, -859, -859, -859, -35, -69, 7712, -859, -42, -38, - -37, -859, -302, -859, -235, -32, -33, -28, -27, -217, - -26, -23, -22, -21, -20, -16, -216, -29, -15, -31, - -303, -859, -13, 7712, -859, -14, -859, -214, -859, -859, - -205, 9029, -859, -279, 1384, -859, -859, -859, -859, -859, - -39, -299, -859, 9462, -275, -859, -34, -859, -137, 10761, - 10761, -859, 10761, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -248, -859, -859, -859, -3, -203, 11194, -1, - -859, 10761, -859, -859, -310, 3, -40, 1, -859, -309, - -80, -859, -30, -859, -319, 5, -128, 10761, -124, -859, - -157, -122, 10761, -120, 10, -118, -80, -859, 11627, -859, - -116, 10761, 7, -79, -859, 7712, -25, 6356, -859, 7712, - 10761, -859, -354, -859, -19, -859, -859, -78, -263, -94, - -298, -52, -18, -8, -12, 29, 28, -301, 15, 9895, - -859, 16, -859, -859, 19, 12, 17, -859, 20, 23, - 18, 10328, 24, 10761, 21, 22, 25, 27, 30, -215, - -859, -859, -117, -859, -70, 26, 34, -859, -859, -859, - -859, -859, 1836, -859, -859, -859, -859, -859, -859, -859, - -859, -859, 5000, 3, 9462, -264, 8163, -859, -859, 9462, - 7712, -859, -11, -859, -859, -859, -195, -859, -859, 10761, - -6, -859, -859, 10761, 37, -859, -859, -859, 10761, -859, - -859, -859, -322, -859, -859, -192, 35, -859, -859, -859, - -859, -859, -859, -179, -859, -178, -859, -859, -177, 32, - -859, -859, -859, -859, -175, -859, -174, -859, -167, 36, - -859, -166, 38, -165, 35, -859, -163, -859, 45, 46, - -859, -859, -25, -39, -115, -859, -859, -859, 6808, -859, - -859, -859, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, - 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, - 10761, -859, -859, -859, 51, -859, 2288, -859, -859, -859, - 2288, -859, 10761, -859, -859, -88, 10761, -63, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, 10761, 10761, -859, -859, -859, -859, - -859, -859, -859, 9462, -859, -859, -108, -859, 7260, -859, - -859, 52, 53, -859, -859, -859, -859, -859, -138, -136, - -859, -304, -859, -319, -859, -319, -859, 10761, 10761, -859, - -157, -859, -157, -859, 10761, 10761, -859, 65, 10, -859, - 11627, -859, 10761, -859, -859, -86, 3, -25, -859, -859, - -859, -859, -859, -78, -78, -263, -263, -94, -94, -94, - -94, -298, -298, -52, -18, -8, -12, 29, 28, 10761, - -859, 2288, 4096, 31, 3644, -156, -859, -155, -859, -859, - -859, -859, -859, 8596, -859, -859, -859, 66, -859, 39, - -859, -153, -859, -151, -859, -148, -859, -146, -859, -144, - -143, -859, -859, -859, -61, 64, 53, 40, 72, 74, - -859, -859, 4096, 75, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, 10761, -859, 71, 2740, 10761, - -859, 73, 81, 41, 80, 3192, -859, 83, -859, 9462, - -859, -859, -859, -141, 10761, 2740, 75, -859, -859, 2288, - -859, 78, 53, -859, -859, 2288, 86, -859, -859 + 4648, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -305, -301, + -289, -276, -246, -238, -227, -182, -872, -872, -872, -872, + -872, -168, -872, -872, -872, -872, -872, -55, -872, -872, + -872, -872, -872, -319, -872, -872, -872, -872, -872, -872, + -872, -135, -120, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -327, -114, + -81, -124, 7882, -313, -872, -101, -872, -872, -872, -872, + 5572, -872, -872, -872, -872, -94, -872, -872, 952, -872, + -872, 7882, -73, -872, -872, -872, 6034, -78, -252, -250, + -216, -197, -136, -78, -127, -49, 12303, -872, -13, -346, + -39, -872, -309, -872, -10, -9, 7882, -872, -872, -872, + 7882, -38, -37, -872, -267, -872, -236, -872, -872, 10983, + -2, -872, -872, -872, 3, -35, 7882, -872, -8, -6, + -1, -872, -256, -872, -255, -4, 4, 7, 8, -237, + 10, 11, 13, 14, 15, 18, -232, 9, 19, 27, + -188, -872, -3, 7882, -872, 20, -872, -229, -872, -872, + -219, 9223, -872, -272, 1414, -872, -872, -872, -872, -872, + -2, -277, -872, 9663, -265, -872, -23, -872, -112, 10983, + 10983, -872, 10983, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -253, -872, -872, -872, 29, -204, 11423, 28, + -872, 10983, -872, 31, -321, 17, -9, 32, -872, -325, + -78, -872, 5, -872, -330, 33, -125, 10983, -123, -872, + -130, -119, -146, -118, 34, -103, -78, -872, 11863, -872, + -74, 10983, 36, -49, -872, 7882, 24, 6496, -872, 7882, + 10983, -872, -346, -872, 30, -872, -872, -33, -133, -105, + -303, -11, -14, 21, 23, 48, 52, -316, 41, -872, + 10103, -872, 42, -872, -872, 46, 38, 40, -872, 64, + 67, 60, 10543, 74, 10983, 68, 65, 69, 70, 73, + -167, -872, -872, -47, -872, -114, 77, 31, -872, -872, + -872, -872, -872, 1876, -872, -872, -872, -872, -872, -872, + -872, -872, -872, 5110, 17, 9663, -261, 8343, -872, -872, + 9663, 7882, -872, 50, -872, -872, -872, -203, -872, -872, + 10983, 51, -872, -872, 10983, 87, -872, -872, -872, 10983, + -872, -872, -872, -312, -872, -872, -200, 80, -872, -872, + -872, -872, -872, -872, -199, -872, -196, -872, -872, -195, + 71, -872, -872, -872, -872, -169, -872, -164, -872, -872, + -872, -872, -872, -161, -872, 83, -872, -160, 84, -153, + 80, -872, -278, -152, -872, 91, 94, -872, -872, 24, + -2, -43, -872, -872, -872, 6958, -872, -872, -872, 10983, + 10983, 10983, 10983, 10983, 10983, 10983, 10983, 10983, 10983, 10983, + 10983, 10983, 10983, 10983, 10983, 10983, 10983, 10983, -872, -872, + -872, 93, -872, 2338, -872, -872, -872, 2338, -872, 10983, + -872, -872, -42, 10983, -32, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, 10983, 10983, -872, -872, -872, -872, -872, -872, -872, + 9663, -872, -872, -76, -872, 7420, -872, -872, 96, 95, + -872, -872, -872, -872, -872, -132, -131, -872, -311, -872, + -330, -872, -330, -872, 10983, 10983, -872, -130, -872, -130, + -872, -146, -146, -872, 101, 34, -872, 11863, -872, 10983, + -872, -872, -41, 17, 24, -872, -872, -872, -872, -872, + -33, -33, -133, -133, -105, -105, -105, -105, -303, -303, + -11, -14, 21, 23, 48, 52, 10983, -872, 2338, 4186, + 59, 3724, -151, -872, -150, -872, -872, -872, -872, -872, + 8783, -872, -872, -872, 105, -872, 72, -872, -149, -872, + -148, -872, -141, -872, -140, -872, -139, -138, -872, -872, + -872, -28, 102, 95, 75, 107, 106, -872, -872, 4186, + 108, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, 10983, -872, 100, 2800, 10983, -872, 104, 109, + 76, 112, 3262, -872, 113, -872, 9663, -872, -872, -872, + -137, 10983, 2800, 108, -872, -872, 2338, -872, 110, 95, + -872, -872, 2338, 114, -872, -872 }; - /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ +/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ static const yytype_int16 yydefact[] = { - 0, 166, 219, 217, 218, 216, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 220, 221, 222, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 345, 346, 347, 348, 349, 350, 351, 371, 372, 373, - 374, 375, 376, 377, 386, 399, 400, 387, 388, 390, - 389, 391, 392, 393, 394, 395, 396, 397, 398, 174, - 175, 245, 246, 244, 247, 254, 255, 252, 253, 250, - 251, 248, 249, 277, 278, 279, 289, 290, 291, 274, - 275, 276, 286, 287, 288, 271, 272, 273, 283, 284, - 285, 268, 269, 270, 280, 281, 282, 256, 257, 258, - 292, 293, 294, 259, 260, 261, 304, 305, 306, 262, - 263, 264, 316, 317, 318, 265, 266, 267, 328, 329, - 330, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 319, - 320, 321, 322, 323, 324, 325, 326, 327, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 343, 340, 341, - 342, 524, 525, 526, 355, 356, 379, 382, 344, 353, - 354, 370, 352, 401, 402, 405, 406, 407, 409, 410, - 411, 413, 414, 415, 417, 418, 514, 515, 378, 380, - 381, 357, 358, 359, 403, 360, 364, 365, 368, 408, - 412, 416, 361, 362, 366, 367, 404, 363, 369, 448, - 450, 451, 452, 454, 455, 456, 458, 459, 460, 462, - 463, 464, 466, 467, 468, 470, 471, 472, 474, 475, - 476, 478, 479, 480, 482, 483, 484, 486, 487, 488, - 490, 491, 449, 453, 457, 461, 465, 473, 477, 481, - 469, 485, 489, 492, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 383, 384, 385, 419, 428, - 430, 424, 429, 431, 432, 434, 435, 436, 438, 439, - 440, 442, 443, 444, 446, 447, 420, 421, 422, 433, - 423, 425, 426, 427, 437, 441, 445, 516, 517, 520, - 521, 522, 523, 518, 519, 0, 0, 0, 0, 0, - 0, 0, 0, 164, 165, 0, 620, 137, 530, 531, - 532, 0, 529, 170, 168, 169, 167, 0, 215, 171, - 172, 173, 139, 138, 0, 199, 180, 182, 178, 184, - 186, 181, 183, 179, 185, 187, 176, 177, 201, 188, - 195, 196, 197, 198, 189, 190, 191, 192, 193, 194, - 140, 141, 142, 143, 144, 145, 152, 619, 0, 621, - 0, 114, 113, 0, 125, 130, 159, 158, 156, 160, - 0, 153, 155, 161, 135, 211, 157, 528, 0, 616, - 618, 0, 0, 162, 163, 527, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, + 0, 168, 225, 223, 224, 222, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 226, 227, 228, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 351, 352, 353, 354, 355, 356, 357, 377, 378, 379, + 380, 381, 382, 383, 392, 405, 406, 393, 394, 396, + 395, 397, 398, 399, 400, 401, 402, 403, 404, 177, + 178, 251, 252, 250, 253, 260, 261, 258, 259, 256, + 257, 254, 255, 283, 284, 285, 295, 296, 297, 280, + 281, 282, 292, 293, 294, 277, 278, 279, 289, 290, + 291, 274, 275, 276, 286, 287, 288, 262, 263, 264, + 298, 299, 300, 265, 266, 267, 310, 311, 312, 268, + 269, 270, 322, 323, 324, 271, 272, 273, 334, 335, + 336, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 349, 346, 347, + 348, 533, 534, 535, 536, 538, 182, 361, 362, 385, + 388, 350, 359, 360, 376, 358, 407, 408, 411, 412, + 413, 415, 416, 417, 419, 420, 421, 423, 424, 520, + 521, 384, 386, 387, 363, 364, 365, 409, 366, 370, + 371, 374, 414, 418, 422, 367, 368, 372, 373, 410, + 369, 375, 454, 456, 457, 458, 460, 461, 462, 464, + 465, 466, 468, 469, 470, 472, 473, 474, 476, 477, + 478, 480, 481, 482, 484, 485, 486, 488, 489, 490, + 492, 493, 494, 496, 497, 455, 459, 463, 467, 471, + 479, 483, 487, 475, 491, 495, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 389, 390, + 391, 425, 434, 436, 430, 435, 437, 438, 440, 441, + 442, 444, 445, 446, 448, 449, 450, 452, 453, 426, + 427, 428, 439, 429, 431, 432, 433, 443, 447, 451, + 525, 526, 529, 530, 531, 532, 527, 528, 0, 0, + 0, 0, 0, 0, 0, 0, 166, 167, 522, 523, + 524, 0, 631, 137, 541, 542, 543, 0, 540, 172, + 170, 171, 169, 0, 221, 173, 175, 176, 174, 139, + 138, 0, 203, 184, 186, 181, 188, 190, 185, 187, + 183, 189, 191, 179, 180, 206, 192, 199, 200, 201, + 202, 193, 194, 195, 196, 197, 198, 140, 141, 143, + 142, 144, 146, 147, 145, 205, 154, 630, 0, 632, + 0, 114, 113, 0, 125, 130, 161, 160, 158, 162, + 0, 155, 157, 163, 135, 216, 159, 539, 0, 627, + 629, 0, 0, 164, 165, 537, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 99, 0, 94, 0, 109, 0, 121, 115, 123, - 0, 124, 0, 97, 131, 102, 0, 154, 136, 0, - 204, 210, 1, 617, 0, 0, 0, 96, 0, 0, - 0, 628, 0, 680, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, - 0, 624, 0, 0, 533, 149, 151, 0, 147, 202, - 0, 0, 100, 0, 0, 622, 110, 116, 120, 122, + 0, 124, 0, 97, 131, 102, 0, 156, 136, 0, + 209, 215, 1, 628, 0, 0, 0, 96, 0, 0, + 0, 639, 0, 697, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, + 0, 635, 0, 0, 544, 151, 153, 0, 149, 207, + 0, 0, 100, 0, 0, 633, 110, 116, 120, 122, 118, 126, 117, 0, 132, 105, 0, 103, 0, 0, 0, 9, 0, 43, 42, 44, 41, 5, 6, 7, 8, 2, 16, 14, 15, 17, 10, 11, 12, 13, 3, 18, 37, 20, 25, 26, 0, 0, 30, 0, - 213, 0, 36, 34, 0, 205, 111, 0, 95, 0, - 0, 678, 0, 636, 0, 0, 0, 0, 0, 653, - 0, 0, 0, 0, 0, 0, 0, 673, 0, 651, - 0, 0, 0, 0, 98, 0, 0, 0, 537, 0, - 0, 146, 0, 200, 0, 206, 45, 49, 52, 55, - 60, 63, 65, 67, 69, 71, 73, 75, 0, 0, - 101, 564, 573, 577, 0, 0, 0, 598, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, - 78, 91, 0, 551, 0, 161, 135, 554, 575, 553, - 561, 552, 0, 555, 556, 579, 557, 586, 558, 559, - 594, 560, 0, 119, 0, 127, 0, 545, 134, 0, - 0, 107, 0, 104, 38, 39, 0, 22, 23, 0, - 0, 28, 27, 0, 215, 31, 33, 40, 0, 212, - 112, 682, 0, 683, 629, 0, 0, 681, 648, 644, - 645, 646, 647, 0, 642, 0, 93, 649, 0, 0, - 663, 664, 665, 666, 0, 661, 0, 667, 0, 0, - 669, 0, 0, 0, 2, 677, 0, 675, 0, 0, - 623, 625, 0, 543, 0, 541, 536, 538, 0, 150, - 148, 203, 0, 0, 0, 0, 0, 0, 0, 0, + 219, 0, 36, 218, 0, 210, 111, 0, 95, 0, + 0, 695, 0, 647, 0, 0, 0, 0, 0, 664, + 0, 0, 0, 0, 0, 0, 0, 689, 0, 662, + 0, 0, 0, 0, 98, 0, 0, 0, 548, 0, + 0, 148, 0, 204, 0, 211, 45, 49, 52, 55, + 60, 63, 65, 67, 69, 71, 73, 75, 0, 34, + 0, 101, 575, 584, 588, 0, 0, 0, 609, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 45, 78, 91, 0, 562, 0, 163, 135, 565, 586, + 564, 572, 563, 0, 566, 567, 590, 568, 597, 569, + 570, 605, 571, 0, 119, 0, 127, 0, 556, 134, + 0, 0, 107, 0, 104, 38, 39, 0, 22, 23, + 0, 0, 28, 27, 0, 221, 31, 33, 40, 0, + 217, 112, 699, 0, 700, 640, 0, 0, 698, 659, + 655, 656, 657, 658, 0, 653, 0, 93, 660, 0, + 0, 674, 675, 676, 677, 0, 672, 0, 681, 682, + 683, 684, 680, 0, 678, 0, 685, 0, 0, 0, + 2, 693, 216, 0, 691, 0, 0, 634, 636, 0, + 554, 0, 552, 547, 549, 0, 152, 150, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 76, 207, 208, 0, 563, 0, 596, 609, 608, - 0, 600, 0, 612, 610, 0, 0, 0, 593, 613, - 614, 615, 562, 81, 82, 84, 83, 86, 87, 88, - 89, 90, 85, 80, 0, 0, 578, 574, 576, 580, - 587, 595, 129, 0, 548, 549, 0, 133, 0, 108, - 4, 0, 24, 21, 32, 214, 632, 634, 0, 0, - 679, 0, 638, 0, 637, 0, 640, 0, 0, 655, - 0, 654, 0, 657, 0, 0, 659, 0, 0, 674, - 0, 671, 0, 652, 627, 0, 544, 0, 539, 534, - 46, 47, 48, 51, 50, 53, 54, 58, 59, 56, - 57, 61, 62, 64, 66, 68, 70, 72, 74, 0, - 209, 565, 0, 0, 0, 0, 611, 0, 592, 79, - 92, 128, 546, 0, 106, 19, 630, 0, 631, 0, - 643, 0, 650, 0, 662, 0, 668, 0, 670, 0, - 0, 676, 540, 542, 0, 0, 584, 0, 0, 0, - 603, 602, 605, 571, 588, 547, 550, 633, 635, 639, - 641, 656, 658, 660, 672, 0, 566, 0, 0, 0, - 604, 0, 0, 583, 0, 0, 581, 0, 77, 0, - 568, 597, 567, 0, 606, 0, 571, 570, 572, 590, - 585, 0, 607, 601, 582, 591, 0, 599, 589 + 0, 0, 0, 0, 0, 0, 0, 0, 76, 212, + 213, 0, 574, 0, 607, 620, 619, 0, 611, 0, + 623, 621, 0, 0, 0, 604, 624, 625, 626, 573, + 81, 82, 84, 83, 86, 87, 88, 89, 90, 85, + 80, 0, 0, 589, 585, 587, 591, 598, 606, 129, + 0, 559, 560, 0, 133, 0, 108, 4, 0, 24, + 21, 32, 220, 643, 645, 0, 0, 696, 0, 649, + 0, 648, 0, 651, 0, 0, 666, 0, 665, 0, + 668, 0, 0, 670, 0, 0, 690, 0, 687, 0, + 663, 638, 0, 555, 0, 550, 545, 46, 47, 48, + 51, 50, 53, 54, 58, 59, 56, 57, 61, 62, + 64, 66, 68, 70, 72, 74, 0, 214, 576, 0, + 0, 0, 0, 622, 0, 603, 79, 92, 128, 557, + 0, 106, 19, 641, 0, 642, 0, 654, 0, 661, + 0, 673, 0, 679, 0, 686, 0, 0, 692, 551, + 553, 0, 0, 595, 0, 0, 0, 614, 613, 616, + 582, 599, 558, 561, 644, 646, 650, 652, 667, 669, + 671, 688, 0, 577, 0, 0, 0, 615, 0, 0, + 594, 0, 0, 592, 0, 77, 0, 579, 608, 578, + 0, 617, 0, 582, 581, 583, 601, 596, 0, 618, + 612, 593, 602, 0, 610, 600 }; - /* YYPGOTO[NTERM-NUM]. */ +/* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -209, -859, -418, -417, -602, -421, -291, -284, - -286, -283, -281, -287, -859, -473, -859, -490, -859, -497, - -520, 13, -859, -859, -859, 14, -394, -859, -859, 33, - 42, 44, -859, -859, -395, -859, -859, -859, -859, -121, - -859, -381, -369, -859, 9, -859, 0, -424, -859, -859, - -859, -859, 113, -859, -859, -859, -545, -549, -252, -365, - -617, -859, -391, -618, -858, -859, -450, -859, -859, -459, - -458, -859, -859, 43, -721, -387, -859, -173, -859, -422, - -859, -170, -859, -859, -859, -859, -168, -859, -859, -859, - -859, -859, -859, -859, -859, 67, -859, -859, 2, -859, - -97, -300, -386, -859, -859, -859, -326, -323, -327, -859, - -859, -330, -325, -328, -332, -859, -331, -334, -859, -390, - -530 + -872, -544, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -436, -872, -392, -391, -490, -390, -269, -266, + -268, -264, -262, -260, -872, -482, -872, -499, -872, -492, + -534, 6, -872, -872, -872, 1, -403, -872, -872, 45, + 44, 49, -872, -872, -406, -872, -872, -872, -872, -104, + -872, -389, -375, -872, 12, -872, 0, -433, -872, -872, + -872, -553, 145, -872, -872, -872, -560, -556, -233, -344, + -614, -872, -373, -626, -871, -872, -430, -872, -872, -440, + -437, -872, -872, 63, -737, -363, -872, -144, -872, -399, + -872, -142, -872, -872, -872, -872, -134, -872, -872, -872, + -872, -872, -872, -872, -872, 97, -872, -872, 2, -872, + -71, -308, -416, -872, -872, -872, -304, -307, -302, -872, + -872, -315, -310, -306, -300, -314, -872, -299, -317, -872, + -395, -538 }; - /* YYDEFGOTO[NTERM-NUM]. */ +/* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 520, 521, 522, 781, 523, 524, 525, 526, 527, - 528, 529, 609, 531, 577, 578, 579, 580, 581, 582, - 583, 584, 585, 586, 587, 610, 839, 611, 764, 612, - 695, 613, 378, 640, 498, 614, 380, 381, 382, 427, - 428, 429, 383, 384, 385, 386, 387, 388, 477, 478, - 389, 390, 391, 392, 532, 480, 533, 483, 440, 441, - 534, 395, 396, 397, 569, 473, 567, 568, 704, 705, - 638, 776, 617, 618, 619, 620, 621, 736, 875, 911, - 903, 904, 905, 912, 622, 623, 624, 625, 906, 878, - 626, 627, 907, 926, 628, 629, 630, 842, 740, 844, - 882, 901, 902, 631, 398, 399, 400, 424, 632, 470, - 471, 450, 451, 788, 789, 402, 673, 674, 678, 403, - 404, 684, 685, 688, 691, 405, 696, 697, 406, 452, - 453 + 0, 530, 531, 532, 798, 533, 534, 535, 536, 537, + 538, 539, 620, 541, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 621, 856, 622, 781, 623, + 711, 624, 388, 651, 508, 625, 390, 391, 392, 437, + 438, 439, 393, 394, 395, 396, 397, 398, 487, 488, + 399, 400, 401, 402, 542, 490, 599, 493, 450, 451, + 544, 405, 406, 407, 579, 483, 577, 578, 721, 722, + 649, 793, 628, 629, 630, 631, 632, 753, 892, 928, + 920, 921, 922, 929, 633, 634, 635, 636, 923, 895, + 637, 638, 924, 943, 639, 640, 641, 859, 757, 861, + 899, 918, 919, 642, 408, 409, 410, 434, 643, 480, + 481, 460, 461, 805, 806, 412, 684, 685, 689, 413, + 414, 695, 696, 703, 704, 707, 415, 713, 714, 416, + 462, 463 }; - /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ +/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 394, 430, 401, 637, 768, 646, 445, 444, 588, 393, - 494, 445, 667, 377, 379, 841, 535, 772, 707, 775, - 446, 437, 777, 466, 708, 446, 786, 677, 667, 668, - 421, 475, 687, 719, 720, 730, 417, 407, 655, 661, - 910, 699, 662, 481, 661, 430, 658, 918, 541, 562, - 709, 482, 481, 563, 542, 476, 422, 910, 659, 634, - 787, 437, 669, 670, 671, 672, 633, 635, 418, 721, - 722, 731, 589, 663, 676, 408, 589, 437, 663, 676, - 590, 647, 648, 639, 492, 676, 481, 589, 676, 328, - 329, 330, 565, 493, 773, 778, 495, 676, 715, 496, - 716, -35, 497, 649, 745, 409, 747, 650, 456, 458, - 460, 462, 464, 465, 468, 543, 734, 827, 828, 829, - 830, 544, 843, 753, 754, 755, 756, 757, 758, 759, - 760, 761, 762, 549, 557, 432, 571, 410, 433, 550, - 558, 411, 572, 763, 637, 573, 637, 652, 412, 637, - 665, 574, 782, 653, 664, 780, 851, 415, 790, 707, - 664, 765, 664, 784, 542, 664, 693, 664, 413, 664, - 664, 792, 794, 796, 664, 799, 801, 793, 795, 797, - 414, 800, 802, 803, 806, 809, 565, 811, 565, 804, - 807, 810, 425, 812, 883, 884, 437, 889, 925, 890, - 765, 765, 891, 793, 892, 797, 893, 894, 800, 921, - 804, 426, 807, 812, 856, 765, 858, 419, 857, 642, - 859, 434, 643, 768, 680, 681, 682, 683, 454, 707, - 530, 455, 457, 717, 718, 455, 886, 445, 444, 765, - 459, 817, 766, 455, 818, 845, 852, 461, 853, 847, - 455, 446, 463, 467, 675, 455, 455, 455, 679, 565, - 686, 455, 689, 455, 692, 455, 698, 455, 765, 455, - 817, 846, 576, 872, 849, 850, 420, 862, 677, 816, - 667, 723, 724, 637, 866, 687, 712, 713, 714, 423, - 644, 645, 920, 765, 848, 765, 895, 823, 824, 439, - 825, 826, 831, 832, 447, 449, 469, 768, 474, 479, - 484, 325, 481, 490, 491, 536, 537, 538, 561, 540, - 539, 559, 657, 546, 676, 676, 545, 565, 547, 548, - 551, 676, 676, 552, 553, 554, 555, 676, 576, 676, - 556, 560, 874, 576, 570, 876, 564, 651, 656, 576, - 492, 641, 576, 725, 589, 666, 662, 727, 690, 700, - 703, 576, 726, 637, 728, 729, 711, 732, 737, 741, - 735, 738, 742, 746, 779, -36, 739, 743, 748, 783, - 576, 749, 431, -34, 750, 876, 751, -29, 798, 752, - 438, 393, 805, 791, 808, 813, 814, 565, 394, 393, - 401, 394, 913, 840, 855, 908, 394, 393, 401, 765, - 393, 377, 379, 868, 887, 393, 472, 922, 896, 637, - 448, 888, 898, 899, 879, 897, 431, 486, -569, 909, - 431, 915, 914, 591, 833, 393, 919, 927, 916, 393, - 928, 835, 834, 838, 416, 836, 438, 877, 837, 785, - 815, 710, 873, 880, 917, 393, 923, 881, 924, 769, - 900, 446, 770, 488, 771, 443, 701, 485, 487, 861, - 860, 863, 865, 566, 489, 864, 869, 867, 871, 870, - 0, 0, 393, 0, 616, 0, 0, 877, 0, 0, - 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, - 0, 446, 0, 820, 821, 822, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, + 404, 389, 411, 440, 648, 455, 387, 785, 454, 598, + 455, 504, 403, 540, 678, 712, 858, 545, 702, 725, + 657, 724, 456, 688, 679, 447, 747, 456, 476, 672, + 678, 789, 673, 792, 736, 737, 794, 716, 431, 666, + 427, 669, 803, 672, 927, 485, 726, 440, 491, 442, + 417, 935, 443, 670, 418, 586, 492, 680, 681, 682, + 683, 927, 748, 674, 432, 447, 419, 644, 646, 486, + 738, 739, 428, 655, 656, 687, 804, 674, -694, 420, + 491, 447, 658, 659, -694, 600, 687, 645, 502, 687, + 491, 795, 600, 601, 575, 449, 600, 503, 687, 650, + 551, 553, -35, 790, 660, 668, 552, 554, 661, 421, + 466, 468, 470, 472, 474, 475, 478, 422, 751, 559, + 762, 586, 764, 505, 567, 560, 506, 581, 423, 507, + 568, 860, 586, 582, 675, 586, 464, 583, 467, 465, + 675, 465, 675, 584, 586, 675, 648, 675, 648, 675, + 675, 648, 663, 797, 675, 676, 807, 809, 664, 782, + 811, 813, 552, 810, 586, 801, 812, 814, 799, 724, + 572, 709, 469, 424, 573, 465, 868, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 816, 575, 425, + 575, 471, 818, 817, 465, 820, 823, 780, 819, 942, + 447, 821, 824, 826, 828, 900, 901, 906, 907, 827, + 829, 782, 782, 810, 814, 908, 909, 910, 911, 938, + 429, 817, 821, 824, 829, 782, 873, 875, 734, 735, + 874, 876, 785, 802, 732, 430, 733, 455, 436, 724, + 454, 698, 699, 700, 701, 521, 844, 845, 846, 847, + 653, 433, 473, 654, 456, 465, 903, 691, 692, 693, + 694, 477, 575, 686, 465, 690, 465, 862, 465, 697, + 705, 864, 465, 465, 712, 435, 712, 702, 702, 449, + 879, 688, 866, 867, 869, 708, 870, 833, 465, 678, + 444, 648, 457, 837, 838, 839, 586, 586, 586, 586, + 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, + 586, 586, 937, 459, 715, 782, 785, 465, 783, 834, + 782, 834, 835, 863, 889, 334, 335, 336, 740, 741, + 782, 865, 687, 687, 782, 912, 575, 729, 730, 731, + 840, 841, 479, 842, 843, 687, 484, 687, 331, 494, + 848, 849, 489, 500, 501, 491, 547, 548, 549, 546, + 555, 550, 574, 742, 891, 569, 556, 893, 652, 557, + 558, 648, 561, 562, 600, 563, 564, 565, 586, 586, + 566, 570, 571, 667, 580, 662, -34, 502, 706, 745, + 673, 586, 441, 586, 717, 746, 677, 743, 744, 749, + 448, 754, 752, 755, 403, 756, 575, 893, 404, 389, + 411, 404, 403, 925, 387, 720, 404, 458, 411, 758, + 403, 728, 759, 403, 930, 760, 482, 648, 403, 763, + 766, 765, -36, 815, 767, 768, 441, 496, 769, 939, + 441, 796, 800, -29, 808, 822, 825, 830, 403, 543, + 831, 857, 403, 894, 872, 885, 448, 782, 896, 904, + 905, 916, 913, 915, 926, 932, 914, -580, 403, 931, + 456, 602, 936, 850, 945, 944, 852, 851, 727, 933, + 497, 853, 426, 576, 854, 498, 832, 855, 897, 499, + 890, 934, 940, 894, 627, 403, 941, 495, 898, 786, + 917, 787, 718, 877, 882, 453, 626, 881, 878, 788, + 456, 886, 888, 880, 0, 0, 884, 0, 0, 0, + 0, 883, 0, 0, 0, 0, 0, 0, 887, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 719, 0, 576, 0, 576, + 0, 0, 0, 0, 0, 0, 0, 403, 0, 403, + 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 702, 0, 566, 0, 566, - 0, 0, 0, 0, 393, 0, 393, 0, 393, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 576, 576, - 0, 0, 0, 0, 0, 576, 576, 0, 0, 0, - 0, 576, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, - 0, 615, 394, 0, 0, 0, 0, 0, 0, 0, - 566, 393, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 404, 0, 626, 0, 0, 0, 0, + 0, 576, 0, 0, 0, 403, 0, 0, 0, 0, + 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, - 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, - 616, 0, 0, 0, 0, 615, 0, 0, 0, 615, + 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 627, 0, 0, 0, 627, 0, 0, + 0, 0, 0, 0, 0, 626, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, - 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 616, 616, 0, 616, 0, 401, 0, 0, 0, - 615, 615, 0, 615, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 627, 627, + 0, 627, 0, 411, 0, 0, 0, 0, 0, 0, + 626, 626, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, - 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, - 0, 0, 0, 0, 0, 616, 0, 615, 0, 0, - 0, 0, 0, 0, 615, 616, 0, 0, 0, 616, - 0, 0, 0, 0, 615, 616, 0, 0, 615, 0, - 0, 0, 442, 0, 615, 1, 2, 3, 4, 5, + 0, 626, 0, 0, 0, 627, 0, 0, 0, 0, + 0, 0, 627, 0, 0, 0, 0, 626, 0, 0, + 0, 0, 627, 0, 626, 0, 627, 0, 0, 0, + 0, 0, 627, 0, 626, 0, 0, 0, 626, 0, + 0, 0, 452, 0, 626, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -1810,20 +1790,21 @@ static const yytype_int16 yytable[] = 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, - 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 328, 329, 330, 331, - 0, 0, 0, 0, 0, 0, 0, 0, 332, 333, - 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, + 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, - 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 333, 334, 335, 336, 337, 0, 0, 0, 0, + 0, 0, 0, 0, 338, 339, 340, 341, 342, 343, + 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 351, 0, 0, 0, 0, 0, 0, 0, + 0, 352, 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -1856,19 +1837,20 @@ static const yytype_int16 yytable[] = 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 0, 0, 499, 500, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 501, 502, 0, 325, 0, 591, 592, 0, - 0, 0, 0, 593, 503, 504, 505, 506, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, - 330, 331, 0, 0, 0, 507, 508, 509, 510, 511, - 332, 333, 334, 335, 336, 337, 338, 594, 595, 596, - 597, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 339, 340, 341, 342, 343, 344, 512, 513, - 514, 515, 516, 517, 518, 519, 345, 608, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 324, 325, 326, 327, 328, 329, 330, 0, 0, 509, + 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 511, 512, + 0, 331, 0, 602, 603, 0, 0, 0, 0, 604, + 513, 514, 515, 516, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 333, 334, 335, 336, 337, 0, 0, + 0, 517, 518, 519, 520, 521, 338, 339, 340, 341, + 342, 343, 344, 605, 606, 607, 608, 0, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 345, 346, + 347, 348, 349, 350, 351, 522, 523, 524, 525, 526, + 527, 528, 529, 352, 619, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, @@ -1901,20 +1883,21 @@ static const yytype_int16 yytable[] = 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 0, 0, 499, 500, 0, 0, 0, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 0, + 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 501, 502, 0, 325, 0, 591, - 767, 0, 0, 0, 0, 593, 503, 504, 505, 506, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 328, 329, 330, 331, 0, 0, 0, 507, 508, 509, - 510, 511, 332, 333, 334, 335, 336, 337, 338, 594, - 595, 596, 597, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 339, 340, 341, 342, 343, 344, - 512, 513, 514, 515, 516, 517, 518, 519, 345, 608, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 511, 512, 0, 331, 0, 602, 784, 0, 0, 0, + 0, 604, 513, 514, 515, 516, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 333, 334, 335, 336, 337, + 0, 0, 0, 517, 518, 519, 520, 521, 338, 339, + 340, 341, 342, 343, 344, 605, 606, 607, 608, 0, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 345, 346, 347, 348, 349, 350, 351, 522, 523, 524, + 525, 526, 527, 528, 529, 352, 619, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -1946,20 +1929,21 @@ static const yytype_int16 yytable[] = 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 0, 0, 499, 500, 0, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 501, 502, 0, 325, - 0, 591, 0, 0, 0, 0, 0, 593, 503, 504, - 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 328, 329, 330, 331, 0, 0, 0, 507, - 508, 509, 510, 511, 332, 333, 334, 335, 336, 337, - 338, 594, 595, 596, 597, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 339, 340, 341, 342, - 343, 344, 512, 513, 514, 515, 516, 517, 518, 519, - 345, 608, 346, 347, 348, 349, 350, 351, 352, 353, + 0, 0, 511, 512, 0, 331, 0, 602, 0, 0, + 0, 0, 0, 604, 513, 514, 515, 516, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 333, 334, 335, + 336, 337, 0, 0, 0, 517, 518, 519, 520, 521, + 338, 339, 340, 341, 342, 343, 344, 605, 606, 607, + 608, 0, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 345, 346, 347, 348, 349, 350, 351, 522, + 523, 524, 525, 526, 527, 528, 529, 352, 619, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -1991,20 +1975,21 @@ static const yytype_int16 yytable[] = 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 0, 0, 499, - 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 501, 502, - 0, 325, 0, 484, 0, 0, 0, 0, 0, 593, - 503, 504, 505, 506, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 328, 329, 330, 331, 0, 0, - 0, 507, 508, 509, 510, 511, 332, 333, 334, 335, - 336, 337, 338, 594, 595, 596, 597, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 339, 340, - 341, 342, 343, 344, 512, 513, 514, 515, 516, 517, - 518, 519, 345, 608, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 511, 512, 0, 331, 0, 494, + 0, 0, 0, 0, 0, 604, 513, 514, 515, 516, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, + 334, 335, 336, 337, 0, 0, 0, 517, 518, 519, + 520, 521, 338, 339, 340, 341, 342, 343, 344, 605, + 606, 607, 608, 0, 609, 610, 611, 612, 613, 614, + 615, 616, 617, 618, 345, 346, 347, 348, 349, 350, + 351, 522, 523, 524, 525, 526, 527, 528, 529, 352, + 619, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -2036,20 +2021,21 @@ static const yytype_int16 yytable[] = 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, 0, - 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 501, 502, 0, 325, 0, 0, 0, 0, 0, 0, - 0, 593, 503, 504, 505, 506, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 328, 329, 330, 331, - 0, 0, 0, 507, 508, 509, 510, 511, 332, 333, - 334, 335, 336, 337, 338, 594, 595, 596, 597, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 339, 340, 341, 342, 343, 344, 512, 513, 514, 515, - 516, 517, 518, 519, 345, 608, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 0, 0, 0, 0, 0, 511, 512, 0, 331, + 0, 0, 0, 0, 0, 0, 0, 604, 513, 514, + 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 333, 334, 335, 336, 337, 0, 0, 0, 517, + 518, 519, 520, 521, 338, 339, 340, 341, 342, 343, + 344, 605, 606, 607, 608, 0, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 345, 346, 347, 348, + 349, 350, 351, 522, 523, 524, 525, 526, 527, 528, + 529, 352, 619, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -2082,19 +2068,20 @@ static const yytype_int16 yytable[] = 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 0, 0, 499, 500, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 501, 502, 0, 325, 0, 0, 0, 0, - 0, 0, 0, 593, 503, 504, 505, 506, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, - 330, 331, 0, 0, 0, 507, 508, 509, 510, 511, - 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 339, 340, 341, 342, 343, 344, 512, 513, - 514, 515, 516, 517, 518, 519, 345, 0, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 324, 325, 326, 327, 328, 329, 330, 0, 0, 509, + 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 511, 512, + 0, 331, 0, 0, 0, 0, 0, 0, 0, 604, + 513, 514, 515, 516, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 333, 334, 335, 336, 337, 0, 0, + 0, 517, 518, 519, 520, 521, 338, 339, 340, 341, + 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 351, 522, 523, 524, 525, 526, + 527, 528, 529, 352, 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, @@ -2126,21 +2113,22 @@ static const yytype_int16 yytable[] = 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 0, 0, 499, 500, 0, 0, 0, + 312, 313, 314, 315, 316, 317, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 0, + 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 501, 502, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 503, 504, 505, 506, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 328, 329, 330, 0, 0, 0, 0, 507, 508, 509, - 510, 511, 332, 333, 334, 335, 336, 337, 338, 0, + 511, 512, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 513, 514, 515, 516, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 333, 334, 335, 336, 0, + 0, 0, 0, 517, 518, 519, 520, 521, 338, 339, + 340, 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 339, 340, 341, 342, 343, 344, - 512, 513, 514, 515, 516, 517, 518, 519, 345, 0, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 345, 346, 347, 348, 349, 350, 351, 522, 523, 524, + 525, 526, 527, 528, 529, 352, 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -2172,20 +2160,21 @@ static const yytype_int16 yytable[] = 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, - 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, + 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, + 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 333, 334, 335, + 336, 337, 0, 0, 0, 0, 0, 0, 0, 0, + 338, 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 328, 329, 330, 331, 0, 0, 0, 0, - 0, 0, 0, 0, 332, 333, 334, 335, 336, 337, - 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 339, 340, 341, 342, - 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, - 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, + 0, 0, 345, 346, 347, 348, 349, 350, 351, 0, + 0, 0, 0, 0, 0, 0, 0, 352, 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -2216,21 +2205,22 @@ static const yytype_int16 yytable[] = 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, - 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 0, 0, 0, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 332, 333, 334, 335, - 336, 337, 338, 594, 0, 0, 597, 0, 598, 599, - 0, 0, 602, 0, 0, 0, 0, 0, 339, 340, - 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, - 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, + 334, 335, 336, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 338, 339, 340, 341, 342, 343, 344, 605, + 0, 0, 608, 0, 609, 610, 0, 0, 613, 0, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 351, 0, 0, 0, 0, 0, 0, 0, 0, 352, + 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -2261,21 +2251,22 @@ static const yytype_int16 yytable[] = 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, - 0, 0, 318, 319, 320, 321, 322, 323, 324, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 0, 0, 0, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, - 0, 0, 0, 0, 0, 0, 0, 436, 332, 333, - 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, - 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 333, 334, 335, 336, 0, 0, 0, 0, 0, + 0, 0, 0, 446, 338, 339, 340, 341, 342, 343, + 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 351, 0, 0, 0, 0, 0, 0, 0, + 0, 352, 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -2307,20 +2298,21 @@ static const yytype_int16 yytable[] = 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 314, 315, 316, 317, 0, 0, 0, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, - 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, + 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 339, 340, 341, 342, 343, 344, 0, 0, - 0, 0, 0, 0, 0, 0, 345, 0, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 0, 0, 0, 333, 334, 335, 336, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 338, 339, 340, 341, + 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 351, 0, 0, 0, 0, 0, + 0, 0, 0, 352, 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, @@ -2352,21 +2344,22 @@ static const yytype_int16 yytable[] = 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 0, 0, 0, 0, 0, 0, 0, + 312, 313, 314, 315, 316, 317, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 332, 333, 334, 335, 336, 337, 338, 0, + 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 339, 340, 341, 342, 343, 344, - 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 0, 0, 0, 0, 0, 333, 334, 335, 336, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, + 340, 341, 342, 343, 344, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 351, 0, 0, 0, + 0, 0, 0, 0, 0, 352, 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -2397,21 +2390,22 @@ static const yytype_int16 yytable[] = 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 0, 0, 0, 318, 319, - 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, + 310, 311, 312, 313, 314, 315, 316, 317, 0, 0, + 0, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 333, 334, 335, + 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 338, 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 328, 329, 330, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 332, 333, 334, 335, 336, 337, - 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 339, 340, 341, 342, - 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, - 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, + 0, 0, 345, 346, 347, 348, 349, 350, 351, 0, + 0, 0, 0, 0, 0, 0, 0, 352, 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -2442,21 +2436,22 @@ static const yytype_int16 yytable[] = 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, - 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 0, 0, 0, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 854, 0, 0, 0, 0, 0, + 871, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, + 334, 335, 336, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 338, 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 332, 333, 334, 335, - 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 339, 340, - 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, - 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 351, 0, 0, 0, 0, 0, 0, 0, 0, 352, + 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -2487,21 +2482,22 @@ static const yytype_int16 yytable[] = 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, - 0, 0, 318, 319, 320, 321, 322, 323, 324, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 0, 0, 0, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 332, 333, - 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, - 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 333, 334, 335, 336, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 338, 339, 340, 341, 342, 343, + 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 351, 0, 0, 0, 0, 0, 0, 0, + 0, 352, 0, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 2, 3, 4, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -2518,7 +2514,7 @@ static const yytype_int16 yytable[] = 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 165, 0, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, @@ -2533,502 +2529,511 @@ static const yytype_int16 yytable[] = 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, - 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 501, 502, 0, 0, 0, 636, 774, 0, 0, - 0, 0, 0, 503, 504, 505, 506, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 507, 508, 509, 510, 511, 332, - 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 512, 513, 514, - 515, 516, 517, 518, 519, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 0, 0, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 0, 0, 0, 0, 0, 0, 321, - 0, 0, 0, 0, 0, 499, 500, 0, 0, 0, + 315, 316, 317, 0, 0, 0, 0, 0, 0, 324, + 0, 0, 0, 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 501, 502, 0, 0, 0, 636, - 885, 0, 0, 0, 0, 0, 503, 504, 505, 506, + 0, 0, 0, 0, 0, 0, 0, 511, 512, 0, + 0, 0, 647, 791, 0, 0, 0, 0, 0, 513, + 514, 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 507, 508, 509, - 510, 511, 332, 0, 0, 0, 0, 337, 338, 0, + 517, 518, 519, 520, 521, 338, 0, 0, 0, 0, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 522, 523, 524, 525, 526, 527, + 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 365, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 0, 0, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 0, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 0, 0, 0, 0, 0, 0, 324, + 0, 0, 0, 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 512, 513, 514, 515, 516, 517, 518, 519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 511, 512, 0, + 0, 0, 647, 902, 0, 0, 0, 0, 0, 513, + 514, 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 0, 0, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 0, 0, 0, 0, - 0, 0, 321, 0, 0, 0, 0, 0, 499, 500, + 517, 518, 519, 520, 521, 338, 0, 0, 0, 0, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 501, 502, 0, - 0, 575, 0, 0, 0, 0, 0, 0, 0, 503, - 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 522, 523, 524, 525, 526, 527, + 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 365, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 0, 0, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 0, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 0, 0, 0, 0, 0, 0, 324, + 0, 0, 0, 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 507, 508, 509, 510, 511, 332, 0, 0, 0, 0, - 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 511, 512, 0, + 0, 585, 0, 0, 0, 0, 0, 0, 0, 513, + 514, 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 512, 513, 514, 515, 516, 517, 518, - 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 0, 0, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, - 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, - 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, + 517, 518, 519, 520, 521, 338, 0, 0, 0, 0, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 501, 502, 0, 0, 0, 636, 0, 0, 0, 0, - 0, 0, 503, 504, 505, 506, 0, 0, 0, 0, + 0, 0, 0, 0, 522, 523, 524, 525, 526, 527, + 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 365, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 0, 0, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 0, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 0, 0, 0, 0, 0, 0, 324, + 0, 0, 0, 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 507, 508, 509, 510, 511, 332, 0, - 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 511, 512, 0, + 0, 0, 647, 0, 0, 0, 0, 0, 0, 513, + 514, 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 512, 513, 514, 515, - 516, 517, 518, 519, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 0, 0, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 0, 0, 0, 0, 0, 0, 321, 0, - 0, 0, 0, 0, 499, 500, 0, 0, 0, 0, + 517, 518, 519, 520, 521, 338, 0, 0, 0, 0, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 501, 502, 0, 0, 733, 0, 0, - 0, 0, 0, 0, 0, 503, 504, 505, 506, 0, + 0, 0, 0, 0, 522, 523, 524, 525, 526, 527, + 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 365, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 0, 0, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 0, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 0, 0, 0, 0, 0, 0, 324, + 0, 0, 0, 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 507, 508, 509, 510, - 511, 332, 0, 0, 0, 0, 337, 338, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 511, 512, 0, + 0, 750, 0, 0, 0, 0, 0, 0, 0, 513, + 514, 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, - 513, 514, 515, 516, 517, 518, 519, 0, 0, 0, + 517, 518, 519, 520, 521, 338, 0, 0, 0, 0, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 0, - 0, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 0, 0, 0, 0, 0, - 0, 321, 0, 0, 0, 0, 0, 499, 500, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 501, 502, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 744, 503, 504, - 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, - 508, 509, 510, 511, 332, 0, 0, 0, 0, 337, - 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 522, 523, 524, 525, 526, 527, + 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 365, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 0, 0, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 0, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 0, 0, 0, 0, 0, 0, 324, + 0, 0, 0, 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 0, 0, 0, 0, 0, 0, 511, 512, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 761, 513, + 514, 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 0, 0, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, - 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, - 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, - 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 503, 504, 505, 506, 0, 0, 0, 0, 0, + 517, 518, 519, 520, 521, 338, 0, 0, 0, 0, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 507, 508, 509, 510, 511, 332, 0, 0, - 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 522, 523, 524, 525, 526, 527, + 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 365, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 0, 0, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 0, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 0, 0, 0, 0, 0, 0, 324, + 0, 0, 0, 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 512, 513, 514, 515, 516, - 517, 518, 519, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 0, 0, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 0, 0, 0, 0, 0, 0, 321, 0, 0, - 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 511, 512, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, + 514, 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 501, 502, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 503, 504, 505, 506, 0, 0, + 517, 518, 519, 520, 521, 338, 0, 0, 0, 0, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 507, 508, 509, 510, 511, - 332, 0, 0, 0, 0, 337, 654, 0, 0, 0, + 0, 0, 0, 0, 522, 523, 524, 525, 526, 527, + 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 365, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 0, 0, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 0, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 0, 0, 0, 0, 0, 0, 324, + 0, 0, 0, 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, - 514, 515, 516, 517, 518, 519, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 511, 512, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, + 514, 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 0, 0, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 0, 0, 0, 0, 0, 0, - 321, 0, 0, 0, 0, 0, 499, 500, 0, 0, + 517, 518, 519, 520, 521, 338, 0, 0, 0, 0, + 343, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 501, 502, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 503, 504, 505, - 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 507, 508, - 509, 510, 694, 332, 0, 0, 0, 0, 337, 338, + 0, 0, 0, 0, 522, 523, 524, 525, 526, 527, + 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 365, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 0, 0, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 0, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 0, 0, 0, 0, 0, 0, 324, + 0, 0, 0, 328, 329, 330, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 511, 512, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, + 514, 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 512, 513, 514, 515, 516, 517, 518, 519, 0, + 517, 518, 519, 520, 710, 338, 0, 0, 0, 0, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 0, 0, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, - 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 522, 523, 524, 525, 526, 527, + 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 365, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 0, 0, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 0, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 0, 0, 0, 0, 0, 0, 324, + 0, 0, 0, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, - 0, 337, 338 + 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, + 343, 344 }; static const yytype_int16 yycheck[] = { - 0, 382, 0, 493, 622, 502, 401, 401, 481, 0, - 434, 406, 542, 0, 0, 736, 440, 634, 567, 636, - 401, 390, 639, 413, 569, 406, 348, 547, 558, 348, - 359, 385, 552, 331, 332, 336, 353, 349, 528, 348, - 898, 561, 351, 351, 348, 426, 356, 905, 350, 352, - 570, 359, 351, 356, 356, 409, 385, 915, 368, 358, - 382, 430, 381, 382, 383, 384, 490, 491, 385, 367, - 368, 372, 351, 382, 547, 349, 351, 446, 382, 552, - 359, 329, 330, 358, 349, 558, 351, 351, 561, 374, - 375, 376, 473, 358, 358, 640, 353, 570, 361, 356, - 363, 349, 359, 351, 601, 349, 603, 355, 408, 409, - 410, 411, 412, 413, 414, 350, 589, 719, 720, 721, - 722, 356, 740, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 350, 350, 356, 350, 349, 359, 356, - 356, 349, 356, 358, 634, 350, 636, 350, 349, 639, - 540, 356, 649, 356, 540, 350, 773, 351, 350, 708, - 546, 356, 548, 653, 356, 551, 556, 553, 349, 555, - 556, 350, 350, 350, 560, 350, 350, 356, 356, 356, - 349, 356, 356, 350, 350, 350, 567, 350, 569, 356, - 356, 356, 350, 356, 350, 350, 565, 350, 919, 350, - 356, 356, 350, 356, 350, 356, 350, 350, 356, 350, - 356, 356, 356, 356, 352, 356, 352, 349, 356, 356, - 356, 385, 359, 841, 381, 382, 383, 384, 382, 778, - 439, 385, 382, 327, 328, 385, 853, 632, 632, 356, - 382, 356, 359, 385, 359, 742, 354, 382, 356, 746, - 385, 632, 382, 382, 382, 385, 385, 385, 382, 640, - 382, 385, 382, 385, 382, 385, 382, 385, 356, 385, - 356, 359, 481, 359, 764, 765, 349, 797, 798, 703, - 810, 333, 334, 773, 804, 805, 364, 365, 366, 359, - 499, 500, 909, 356, 357, 356, 357, 715, 716, 367, - 717, 718, 723, 724, 359, 385, 385, 925, 353, 385, - 353, 351, 351, 385, 385, 350, 385, 359, 349, 356, - 358, 350, 531, 356, 797, 798, 358, 708, 356, 356, - 356, 804, 805, 356, 356, 356, 356, 810, 547, 812, - 356, 356, 839, 552, 358, 842, 359, 350, 349, 558, - 349, 385, 561, 371, 351, 385, 351, 369, 348, 352, - 385, 570, 370, 853, 335, 337, 385, 352, 349, 349, - 354, 359, 349, 349, 385, 349, 359, 359, 357, 385, - 589, 359, 382, 349, 359, 882, 359, 350, 356, 359, - 390, 382, 356, 358, 356, 350, 350, 778, 398, 390, - 398, 401, 899, 352, 352, 895, 406, 398, 406, 356, - 401, 398, 398, 348, 348, 406, 416, 914, 354, 909, - 406, 382, 350, 349, 393, 385, 426, 425, 353, 358, - 430, 350, 359, 353, 725, 426, 353, 359, 397, 430, - 354, 727, 726, 730, 331, 728, 446, 842, 729, 658, - 702, 572, 817, 844, 904, 446, 915, 844, 916, 632, - 882, 842, 632, 430, 632, 398, 563, 424, 426, 795, - 793, 798, 802, 473, 430, 800, 808, 805, 812, 810, - -1, -1, 473, -1, 484, -1, -1, 882, -1, -1, - -1, -1, -1, 484, -1, -1, -1, -1, -1, -1, - -1, 882, -1, 712, 713, 714, 715, 716, 717, 718, - 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, - 729, 730, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 536, -1, + 0, 0, 0, 392, 503, 411, 0, 633, 411, 491, + 416, 444, 0, 449, 552, 568, 753, 450, 562, 579, + 512, 577, 411, 557, 354, 400, 342, 416, 423, 354, + 568, 645, 357, 647, 337, 338, 650, 571, 365, 538, + 359, 362, 354, 354, 915, 391, 580, 436, 357, 362, + 355, 922, 365, 374, 355, 491, 365, 387, 388, 389, + 390, 932, 378, 388, 391, 440, 355, 500, 501, 415, + 373, 374, 391, 509, 510, 557, 388, 388, 356, 355, + 357, 456, 335, 336, 362, 357, 568, 364, 355, 571, + 357, 651, 357, 365, 483, 373, 357, 364, 580, 364, + 356, 356, 355, 364, 357, 541, 362, 362, 361, 355, + 418, 419, 420, 421, 422, 423, 424, 355, 600, 356, + 612, 557, 614, 359, 356, 362, 362, 356, 355, 365, + 362, 757, 568, 362, 550, 571, 388, 356, 388, 391, + 556, 391, 558, 362, 580, 561, 645, 563, 647, 565, + 566, 650, 356, 356, 570, 550, 356, 356, 362, 362, + 356, 356, 362, 362, 600, 664, 362, 362, 660, 725, + 358, 566, 388, 355, 362, 391, 790, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 356, 577, 357, + 579, 388, 356, 362, 391, 356, 356, 364, 362, 936, + 575, 362, 362, 356, 356, 356, 356, 356, 356, 362, + 362, 362, 362, 362, 362, 356, 356, 356, 356, 356, + 355, 362, 362, 362, 362, 362, 358, 358, 333, 334, + 362, 362, 858, 669, 367, 355, 369, 643, 362, 795, + 643, 387, 388, 389, 390, 391, 736, 737, 738, 739, + 362, 365, 388, 365, 643, 391, 870, 387, 388, 389, + 390, 388, 651, 388, 391, 388, 391, 759, 391, 388, + 388, 763, 391, 391, 827, 356, 829, 821, 822, 373, + 814, 815, 781, 782, 360, 388, 362, 720, 391, 827, + 391, 790, 365, 729, 730, 731, 732, 733, 734, 735, + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 926, 391, 388, 362, 942, 391, 365, 362, + 362, 362, 365, 365, 365, 380, 381, 382, 339, 340, + 362, 363, 814, 815, 362, 363, 725, 370, 371, 372, + 732, 733, 391, 734, 735, 827, 359, 829, 357, 359, + 740, 741, 391, 391, 391, 357, 391, 365, 364, 356, + 364, 362, 365, 377, 856, 356, 362, 859, 391, 362, + 362, 870, 362, 362, 357, 362, 362, 362, 814, 815, + 362, 362, 355, 355, 364, 356, 355, 355, 354, 341, + 357, 827, 392, 829, 358, 343, 391, 376, 375, 358, + 400, 355, 360, 365, 392, 365, 795, 899, 408, 408, + 408, 411, 400, 912, 408, 391, 416, 416, 416, 355, + 408, 391, 355, 411, 916, 365, 426, 926, 416, 355, + 365, 363, 355, 362, 365, 365, 436, 435, 365, 931, + 440, 391, 391, 356, 364, 362, 362, 356, 436, 449, + 356, 358, 440, 859, 358, 354, 456, 362, 399, 354, + 388, 355, 360, 356, 364, 356, 391, 359, 456, 365, + 859, 359, 359, 742, 360, 365, 744, 743, 582, 403, + 436, 745, 337, 483, 746, 440, 719, 747, 861, 440, + 834, 921, 932, 899, 494, 483, 933, 434, 861, 643, + 899, 643, 573, 810, 819, 408, 494, 817, 812, 643, + 899, 825, 829, 815, -1, -1, 822, -1, -1, -1, + -1, 821, -1, -1, -1, -1, -1, -1, 827, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 546, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 565, -1, 567, -1, 569, - -1, -1, -1, -1, 565, -1, 567, -1, 569, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 797, 798, - -1, -1, -1, -1, -1, 804, 805, -1, -1, -1, - -1, 810, -1, 812, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 622, -1, -1, -1, -1, -1, -1, -1, - -1, 622, 632, -1, -1, -1, -1, -1, -1, -1, - 640, 632, -1, -1, -1, -1, -1, -1, -1, 640, + -1, -1, -1, -1, -1, 575, -1, 577, -1, 579, + -1, -1, -1, -1, -1, -1, -1, 575, -1, 577, + -1, 579, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 633, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 643, -1, 633, -1, -1, -1, -1, + -1, 651, -1, -1, -1, 643, -1, -1, -1, -1, + -1, -1, -1, 651, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 708, -1, - -1, -1, -1, -1, -1, -1, -1, 708, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 736, -1, -1, -1, - 740, -1, -1, -1, -1, 736, -1, -1, -1, 740, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 778, -1, - -1, -1, -1, -1, -1, -1, -1, 778, -1, -1, + -1, -1, -1, -1, -1, 725, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 725, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 753, -1, -1, -1, 757, -1, -1, + -1, -1, -1, -1, -1, 753, -1, -1, -1, 757, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 795, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 795, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 841, 842, -1, 844, -1, 844, -1, -1, -1, - 841, 842, -1, 844, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 882, -1, -1, -1, -1, -1, -1, -1, - -1, 882, -1, -1, -1, -1, -1, -1, 898, -1, - -1, -1, -1, -1, -1, 905, -1, 898, -1, -1, - -1, -1, -1, -1, 905, 915, -1, -1, -1, 919, - -1, -1, -1, -1, 915, 925, -1, -1, 919, -1, - -1, -1, 0, -1, 925, 3, 4, 5, 6, 7, + -1, -1, -1, -1, -1, -1, -1, -1, 858, 859, + -1, 861, -1, 861, -1, -1, -1, -1, -1, -1, + 858, 859, -1, 861, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 899, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 899, -1, -1, -1, 915, -1, -1, -1, -1, + -1, -1, 922, -1, -1, -1, -1, 915, -1, -1, + -1, -1, 932, -1, 922, -1, 936, -1, -1, -1, + -1, -1, 942, -1, 932, -1, -1, -1, 936, -1, + -1, -1, 0, -1, 942, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -3060,20 +3065,21 @@ static const yytype_int16 yycheck[] = 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 357, + -1, -1, -1, -1, -1, -1, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 351, -1, -1, -1, -1, -1, -1, - -1, 359, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 373, 374, 375, 376, 377, - -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, - 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, - -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + -1, 379, 380, 381, 382, 383, -1, -1, -1, -1, + -1, -1, -1, -1, 392, 393, 394, 395, 396, 397, + 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 414, 415, 416, 417, + 418, 419, 420, -1, -1, -1, -1, -1, -1, -1, + -1, 429, -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -3106,19 +3112,20 @@ static const yytype_int16 yycheck[] = 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 348, 349, -1, 351, -1, 353, 354, -1, - -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, - 376, 377, -1, -1, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 326, 327, 328, 329, 330, 331, 332, -1, -1, 335, + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 354, 355, + -1, 357, -1, 359, 360, -1, -1, -1, -1, 365, + 366, 367, 368, 369, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 379, 380, 381, 382, 383, -1, -1, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -3151,20 +3158,21 @@ static const yytype_int16 yycheck[] = 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 326, -1, -1, 329, 330, -1, -1, -1, + 324, 325, 326, 327, 328, 329, 330, 331, 332, -1, + -1, 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 348, 349, -1, 351, -1, 353, - 354, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, - 374, 375, 376, 377, -1, -1, -1, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 354, 355, -1, 357, -1, 359, 360, -1, -1, -1, + -1, 365, 366, 367, 368, 369, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 379, 380, 381, 382, 383, + -1, -1, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, @@ -3196,20 +3204,21 @@ static const yytype_int16 yycheck[] = 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, -1, -1, 329, 330, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, -1, -1, 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 348, 349, -1, 351, - -1, 353, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 373, 374, 375, 376, 377, -1, -1, -1, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 354, 355, -1, 357, -1, 359, -1, -1, + -1, -1, -1, 365, 366, 367, 368, 369, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 379, 380, 381, + 382, 383, -1, -1, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, -1, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -3241,20 +3250,21 @@ static const yytype_int16 yycheck[] = 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 326, -1, -1, 329, - 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 348, 349, - -1, 351, -1, 353, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 373, 374, 375, 376, 377, -1, -1, - -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, -1, -1, 335, 336, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 354, 355, -1, 357, -1, 359, + -1, -1, -1, -1, -1, 365, 366, 367, 368, 369, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 379, + 380, 381, 382, 383, -1, -1, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, -1, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -3286,20 +3296,21 @@ static const yytype_int16 yycheck[] = 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, - -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, -1, -1, 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 348, 349, -1, 351, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 373, 374, 375, 376, 377, - -1, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, -1, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + -1, -1, -1, -1, -1, -1, 354, 355, -1, 357, + -1, -1, -1, -1, -1, -1, -1, 365, 366, 367, + 368, 369, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 379, 380, 381, 382, 383, -1, -1, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, -1, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -3332,19 +3343,20 @@ static const yytype_int16 yycheck[] = 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 348, 349, -1, 351, -1, -1, -1, -1, - -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, - 376, 377, -1, -1, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, -1, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 326, 327, 328, 329, 330, 331, 332, -1, -1, 335, + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 354, 355, + -1, 357, -1, -1, -1, -1, -1, -1, -1, 365, + 366, 367, 368, 369, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 379, 380, 381, 382, 383, -1, -1, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -3376,21 +3388,22 @@ static const yytype_int16 yycheck[] = 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, -1, -1, -1, 320, 321, 322, 323, - 324, 325, 326, -1, -1, 329, 330, -1, -1, -1, + 314, 315, 316, 317, 318, 319, -1, -1, -1, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, -1, + -1, 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 348, 349, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, - 374, 375, 376, -1, -1, -1, -1, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 392, -1, + 354, 355, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 366, 367, 368, 369, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 379, 380, 381, 382, -1, + -1, -1, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, -1, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, @@ -3422,20 +3435,21 @@ static const yytype_int16 yycheck[] = 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 351, - -1, -1, -1, -1, -1, -1, -1, 359, -1, -1, + -1, -1, -1, -1, -1, 357, -1, -1, -1, -1, + -1, -1, -1, 365, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 379, 380, 381, + 382, 383, -1, -1, -1, -1, -1, -1, -1, -1, + 392, 393, 394, 395, 396, 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 373, 374, 375, 376, 377, -1, -1, -1, -1, - -1, -1, -1, -1, 386, 387, 388, 389, 390, 391, - 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 408, 409, 410, 411, - 412, 413, -1, -1, -1, -1, -1, -1, -1, -1, - 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, + -1, -1, 414, 415, 416, 417, 418, 419, 420, -1, + -1, -1, -1, -1, -1, -1, -1, 429, -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -3466,21 +3480,22 @@ static const yytype_int16 yycheck[] = 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, - 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + -1, -1, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 386, 387, 388, 389, - 390, 391, 392, 393, -1, -1, 396, -1, 398, 399, - -1, -1, 402, -1, -1, -1, -1, -1, 408, 409, - 410, 411, 412, 413, -1, -1, -1, -1, -1, -1, - -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 379, + 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 392, 393, 394, 395, 396, 397, 398, 399, + -1, -1, 402, -1, 404, 405, -1, -1, 408, -1, + -1, -1, -1, -1, 414, 415, 416, 417, 418, 419, + 420, -1, -1, -1, -1, -1, -1, -1, -1, 429, + -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -3511,21 +3526,22 @@ static const yytype_int16 yycheck[] = 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, - -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, -1, -1, -1, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 373, 374, 375, 376, -1, - -1, -1, -1, -1, -1, -1, -1, 385, 386, 387, - 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, - -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + -1, 379, 380, 381, 382, -1, -1, -1, -1, -1, + -1, -1, -1, 391, 392, 393, 394, 395, 396, 397, + 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 414, 415, 416, 417, + 418, 419, 420, -1, -1, -1, -1, -1, -1, -1, + -1, 429, -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -3557,20 +3573,21 @@ static const yytype_int16 yycheck[] = 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, -1, -1, -1, 320, 321, 322, 323, 324, 325, - 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 316, 317, 318, 319, -1, -1, -1, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 351, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, - 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, + -1, 357, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 408, 409, 410, 411, 412, 413, -1, -1, - -1, -1, -1, -1, -1, -1, 422, -1, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + -1, -1, -1, 379, 380, 381, 382, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 392, 393, 394, 395, + 396, 397, 398, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 414, 415, + 416, 417, 418, 419, 420, -1, -1, -1, -1, -1, + -1, -1, -1, 429, -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -3602,21 +3619,22 @@ static const yytype_int16 yycheck[] = 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, -1, -1, -1, 320, 321, 322, 323, - 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, + 314, 315, 316, 317, 318, 319, -1, -1, -1, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, - 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 386, 387, 388, 389, 390, 391, 392, -1, + -1, -1, -1, -1, -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 408, 409, 410, 411, 412, 413, - -1, -1, -1, -1, -1, -1, -1, -1, 422, -1, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + -1, -1, -1, -1, -1, 379, 380, 381, 382, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 392, 393, + 394, 395, 396, 397, 398, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 414, 415, 416, 417, 418, 419, 420, -1, -1, -1, + -1, -1, -1, -1, -1, 429, -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, @@ -3647,21 +3665,22 @@ static const yytype_int16 yycheck[] = 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, -1, -1, -1, 320, 321, - 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, + 312, 313, 314, 315, 316, 317, 318, 319, -1, -1, + -1, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 354, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 379, 380, 381, + 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 392, 393, 394, 395, 396, 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 373, 374, 375, 376, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 386, 387, 388, 389, 390, 391, - 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 408, 409, 410, 411, - 412, 413, -1, -1, -1, -1, -1, -1, -1, -1, - 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, + -1, -1, 414, 415, 416, 417, 418, 419, 420, -1, + -1, -1, -1, -1, -1, -1, -1, 429, -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -3692,21 +3711,22 @@ static const yytype_int16 yycheck[] = 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, - 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + -1, -1, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 354, -1, -1, -1, -1, -1, + 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 379, + 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 392, 393, 394, 395, 396, 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 386, 387, 388, 389, - 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 408, 409, - 410, 411, 412, 413, -1, -1, -1, -1, -1, -1, - -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + -1, -1, -1, -1, 414, 415, 416, 417, 418, 419, + 420, -1, -1, -1, -1, -1, -1, -1, -1, 429, + -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -3737,21 +3757,242 @@ static const yytype_int16 yycheck[] = 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, - -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, -1, -1, -1, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 379, 380, 381, 382, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 392, 393, 394, 395, 396, 397, + 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 414, 415, 416, 417, + 418, 419, 420, -1, -1, -1, -1, -1, -1, -1, + -1, 429, -1, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, -1, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, -1, -1, -1, -1, -1, -1, 326, + -1, -1, -1, 330, 331, 332, -1, -1, 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 354, 355, -1, + -1, -1, 359, 360, -1, -1, -1, -1, -1, 366, + 367, 368, 369, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 443, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, -1, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, -1, -1, -1, -1, -1, -1, 326, + -1, -1, -1, 330, 331, 332, -1, -1, 335, 336, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 354, 355, -1, + -1, -1, 359, 360, -1, -1, -1, -1, -1, 366, + 367, 368, 369, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 443, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, -1, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, -1, -1, -1, -1, -1, -1, 326, + -1, -1, -1, 330, 331, 332, -1, -1, 335, 336, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 354, 355, -1, + -1, 358, -1, -1, -1, -1, -1, -1, -1, 366, + 367, 368, 369, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 443, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, -1, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, -1, -1, -1, -1, -1, -1, 326, + -1, -1, -1, 330, 331, 332, -1, -1, 335, 336, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 354, 355, -1, + -1, -1, 359, -1, -1, -1, -1, -1, -1, 366, + 367, 368, 369, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 443, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, -1, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, -1, -1, -1, -1, -1, -1, 326, + -1, -1, -1, 330, 331, 332, -1, -1, 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 354, 355, -1, + -1, 358, -1, -1, -1, -1, -1, -1, -1, 366, + 367, 368, 369, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 373, 374, 375, 376, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, - 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, - -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 4, 5, 6, + -1, -1, -1, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 443, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -3768,7 +4009,7 @@ static const yytype_int16 yycheck[] = 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 167, -1, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, @@ -3783,408 +4024,195 @@ static const yytype_int16 yycheck[] = 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - -1, -1, -1, -1, -1, -1, 323, -1, -1, -1, - -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 348, 349, -1, -1, -1, 353, 354, -1, -1, - -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, - -1, -1, -1, -1, 391, 392, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 414, 415, 416, - 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 436, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, -1, -1, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, -1, -1, -1, -1, -1, -1, 323, - -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 348, 349, -1, -1, -1, 353, - 354, -1, -1, -1, -1, -1, 360, 361, 362, 363, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, - 384, 385, 386, -1, -1, -1, -1, 391, 392, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 414, 415, 416, 417, 418, 419, 420, 421, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 436, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - -1, -1, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, -1, -1, -1, -1, - -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 348, 349, -1, - -1, 352, -1, -1, -1, -1, -1, -1, -1, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 381, 382, 383, 384, 385, 386, -1, -1, -1, -1, - 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 414, 415, 416, 417, 418, 419, 420, - 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 436, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, -1, -1, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, - -1, -1, -1, -1, -1, 323, -1, -1, -1, -1, - -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 348, 349, -1, -1, -1, 353, -1, -1, -1, -1, - -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, - -1, -1, -1, 391, 392, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 414, 415, 416, 417, - 418, 419, 420, 421, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 436, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, -1, -1, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, -1, -1, -1, -1, -1, -1, 323, -1, - -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 348, 349, -1, -1, 352, -1, -1, - -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, - 385, 386, -1, -1, -1, -1, 391, 392, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 414, - 415, 416, 417, 418, 419, 420, 421, -1, -1, -1, + 317, 318, 319, -1, -1, -1, -1, -1, -1, 326, + -1, -1, -1, 330, 331, 332, -1, -1, 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 436, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, - -1, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, - -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, + -1, -1, -1, -1, -1, -1, -1, 354, 355, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 365, 366, + 367, 368, 369, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 348, 349, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, - 382, 383, 384, 385, 386, -1, -1, -1, -1, 391, - 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 414, 415, 416, 417, 418, 419, 420, 421, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 436, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, -1, -1, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, - -1, -1, -1, -1, 323, -1, -1, -1, -1, -1, - 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 348, - 349, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 381, 382, 383, 384, 385, 386, -1, -1, - -1, -1, 391, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 443, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, -1, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, -1, -1, -1, -1, -1, -1, 326, + -1, -1, -1, 330, 331, 332, -1, -1, 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 414, 415, 416, 417, 418, - 419, 420, 421, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 436, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, -1, -1, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, -1, -1, -1, -1, -1, -1, 323, -1, -1, - -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 354, 355, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 366, + 367, 368, 369, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 348, 349, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, - 386, -1, -1, -1, -1, 391, 392, -1, -1, -1, + -1, -1, -1, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 443, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, -1, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, -1, -1, -1, -1, -1, -1, 326, + -1, -1, -1, 330, 331, 332, -1, -1, 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 414, 415, - 416, 417, 418, 419, 420, 421, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 354, 355, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 366, + 367, 368, 369, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, -1, -1, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, -1, -1, -1, -1, -1, -1, - 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 348, 349, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, - 383, 384, 385, 386, -1, -1, -1, -1, 391, 392, + -1, -1, -1, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 443, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, -1, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, -1, -1, -1, -1, -1, -1, 326, + -1, -1, -1, 330, 331, 332, -1, -1, 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 354, 355, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 366, + 367, 368, 369, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 414, 415, 416, 417, 418, 419, 420, 421, -1, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + 397, 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 436, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, -1, -1, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, - -1, -1, -1, 323, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 443, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, -1, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, -1, -1, -1, -1, -1, -1, 326, + -1, -1, -1, 330, 331, 332, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 386, -1, -1, -1, - -1, 391, 392 + -1, -1, -1, -1, -1, 392, -1, -1, -1, -1, + 397, 398 }; - /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ +/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of + state STATE-NUM. */ static const yytype_int16 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, @@ -4219,144 +4247,148 @@ static const yytype_int16 yystos[] = 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 351, 359, 373, 374, 375, - 376, 377, 386, 387, 388, 389, 390, 391, 392, 408, - 409, 410, 411, 412, 413, 422, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 357, 365, 379, 380, 381, 382, 383, 392, 393, + 394, 395, 396, 397, 398, 414, 415, 416, 417, 418, + 419, 420, 429, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 486, 487, 490, - 491, 492, 493, 497, 498, 499, 500, 501, 502, 505, - 506, 507, 508, 509, 511, 516, 517, 518, 559, 560, - 561, 563, 570, 574, 575, 580, 583, 349, 349, 349, - 349, 349, 349, 349, 349, 351, 517, 353, 385, 349, - 349, 359, 385, 359, 562, 350, 356, 494, 495, 496, - 506, 511, 356, 359, 385, 359, 385, 507, 511, 367, - 513, 514, 0, 560, 491, 499, 506, 359, 490, 385, - 566, 567, 584, 585, 382, 385, 566, 382, 566, 382, - 566, 382, 566, 382, 566, 566, 584, 382, 566, 385, - 564, 565, 511, 520, 353, 385, 409, 503, 504, 385, - 510, 351, 359, 512, 353, 538, 563, 495, 494, 496, - 385, 385, 349, 358, 512, 353, 356, 359, 489, 329, - 330, 348, 349, 360, 361, 362, 363, 381, 382, 383, - 384, 385, 414, 415, 416, 417, 418, 419, 420, 421, - 456, 457, 458, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 509, 511, 515, 512, 350, 385, 359, 358, - 356, 350, 356, 350, 356, 358, 356, 356, 356, 350, - 356, 356, 356, 356, 356, 356, 356, 350, 356, 350, - 356, 349, 352, 356, 359, 506, 511, 521, 522, 519, - 358, 350, 356, 350, 356, 352, 467, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 351, - 359, 353, 354, 359, 393, 394, 395, 396, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 423, 467, - 480, 482, 484, 486, 490, 509, 511, 527, 528, 529, - 530, 531, 539, 540, 541, 542, 545, 546, 549, 550, - 551, 558, 563, 512, 358, 512, 353, 482, 525, 358, - 488, 385, 356, 359, 467, 467, 484, 329, 330, 351, - 355, 350, 350, 356, 392, 482, 349, 467, 356, 368, - 563, 348, 351, 382, 567, 584, 385, 585, 348, 381, - 382, 383, 384, 571, 572, 382, 480, 485, 573, 382, - 381, 382, 383, 384, 576, 577, 382, 485, 578, 382, - 348, 579, 382, 584, 385, 485, 581, 582, 382, 485, - 352, 565, 511, 385, 523, 524, 354, 522, 521, 485, - 504, 385, 364, 365, 366, 361, 363, 327, 328, 331, - 332, 367, 368, 333, 334, 371, 370, 369, 335, 337, - 336, 372, 352, 352, 480, 354, 532, 349, 359, 359, - 553, 349, 349, 359, 359, 484, 349, 484, 357, 359, - 359, 359, 359, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 358, 483, 356, 359, 354, 528, 542, - 546, 551, 525, 358, 354, 525, 526, 525, 521, 385, - 350, 459, 484, 385, 482, 467, 348, 382, 568, 569, - 350, 358, 350, 356, 350, 356, 350, 356, 356, 350, - 356, 350, 356, 350, 356, 356, 350, 356, 356, 350, - 356, 350, 356, 350, 350, 523, 512, 356, 359, 354, - 467, 467, 467, 469, 469, 470, 470, 471, 471, 471, - 471, 472, 472, 473, 474, 475, 476, 477, 478, 481, - 352, 539, 552, 528, 554, 484, 359, 484, 357, 482, - 482, 525, 354, 356, 354, 352, 352, 356, 352, 356, - 572, 571, 485, 573, 577, 576, 485, 578, 348, 579, - 581, 582, 359, 524, 484, 533, 484, 499, 544, 393, - 527, 540, 555, 350, 350, 354, 525, 348, 382, 350, - 350, 350, 350, 350, 350, 357, 354, 385, 350, 349, - 544, 556, 557, 535, 536, 537, 543, 547, 482, 358, - 529, 534, 538, 484, 359, 350, 397, 531, 529, 353, - 525, 350, 484, 534, 535, 539, 548, 359, 354 + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 496, 497, 500, + 501, 502, 503, 507, 508, 509, 510, 511, 512, 515, + 516, 517, 518, 519, 521, 526, 527, 528, 569, 570, + 571, 573, 580, 584, 585, 591, 594, 355, 355, 355, + 355, 355, 355, 355, 355, 357, 527, 359, 391, 355, + 355, 365, 391, 365, 572, 356, 362, 504, 505, 506, + 516, 521, 362, 365, 391, 365, 391, 517, 521, 373, + 523, 524, 0, 570, 501, 509, 516, 365, 500, 391, + 576, 577, 595, 596, 388, 391, 576, 388, 576, 388, + 576, 388, 576, 388, 576, 576, 595, 388, 576, 391, + 574, 575, 521, 530, 359, 391, 415, 513, 514, 391, + 520, 357, 365, 522, 359, 548, 573, 505, 504, 506, + 391, 391, 355, 364, 522, 359, 362, 365, 499, 335, + 336, 354, 355, 366, 367, 368, 369, 387, 388, 389, + 390, 391, 421, 422, 423, 424, 425, 426, 427, 428, + 466, 467, 468, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 519, 521, 525, 522, 356, 391, 365, 364, + 362, 356, 362, 356, 362, 364, 362, 362, 362, 356, + 362, 362, 362, 362, 362, 362, 362, 356, 362, 356, + 362, 355, 358, 362, 365, 516, 521, 531, 532, 529, + 364, 356, 362, 356, 362, 358, 477, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 521, + 357, 365, 359, 360, 365, 399, 400, 401, 402, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 430, + 477, 490, 492, 494, 496, 500, 519, 521, 537, 538, + 539, 540, 541, 549, 550, 551, 552, 555, 556, 559, + 560, 561, 568, 573, 522, 364, 522, 359, 492, 535, + 364, 498, 391, 362, 365, 477, 477, 494, 335, 336, + 357, 361, 356, 356, 362, 398, 492, 355, 477, 362, + 374, 573, 354, 357, 388, 577, 595, 391, 596, 354, + 387, 388, 389, 390, 581, 582, 388, 490, 495, 583, + 388, 387, 388, 389, 390, 586, 587, 388, 387, 388, + 389, 390, 466, 588, 589, 388, 354, 590, 388, 595, + 391, 495, 526, 592, 593, 388, 495, 358, 575, 521, + 391, 533, 534, 360, 532, 531, 495, 514, 391, 370, + 371, 372, 367, 369, 333, 334, 337, 338, 373, 374, + 339, 340, 377, 376, 375, 341, 343, 342, 378, 358, + 358, 490, 360, 542, 355, 365, 365, 563, 355, 355, + 365, 365, 494, 355, 494, 363, 365, 365, 365, 365, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 364, 493, 362, 365, 360, 538, 552, 556, 561, 535, + 364, 360, 535, 536, 535, 531, 391, 356, 469, 494, + 391, 492, 477, 354, 388, 578, 579, 356, 364, 356, + 362, 356, 362, 356, 362, 362, 356, 362, 356, 362, + 356, 362, 362, 356, 362, 362, 356, 362, 356, 362, + 356, 356, 533, 522, 362, 365, 360, 477, 477, 477, + 479, 479, 480, 480, 481, 481, 481, 481, 482, 482, + 483, 484, 485, 486, 487, 488, 491, 358, 549, 562, + 538, 564, 494, 365, 494, 363, 492, 492, 535, 360, + 362, 360, 358, 358, 362, 358, 362, 582, 581, 495, + 583, 587, 586, 589, 588, 354, 590, 592, 593, 365, + 534, 494, 543, 494, 509, 554, 399, 537, 550, 565, + 356, 356, 360, 535, 354, 388, 356, 356, 356, 356, + 356, 356, 363, 360, 391, 356, 355, 554, 566, 567, + 545, 546, 547, 553, 557, 492, 364, 539, 544, 548, + 494, 365, 356, 403, 541, 539, 359, 535, 356, 494, + 544, 545, 549, 558, 365, 360 }; - /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int16 yyr1[] = { - 0, 455, 456, 457, 457, 457, 457, 457, 457, 457, - 457, 457, 457, 457, 457, 457, 457, 457, 458, 458, - 458, 458, 458, 458, 459, 460, 461, 462, 462, 463, - 463, 464, 464, 465, 466, 466, 466, 467, 467, 467, - 467, 468, 468, 468, 468, 469, 469, 469, 469, 470, - 470, 470, 471, 471, 471, 472, 472, 472, 472, 472, - 473, 473, 473, 474, 474, 475, 475, 476, 476, 477, - 477, 478, 478, 479, 479, 480, 481, 480, 482, 482, - 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, - 483, 484, 484, 485, 486, 486, 486, 486, 486, 486, - 486, 486, 486, 486, 486, 488, 487, 489, 489, 490, - 490, 490, 490, 491, 491, 492, 492, 493, 494, 494, - 495, 495, 495, 495, 496, 497, 497, 497, 497, 497, - 498, 498, 498, 498, 498, 499, 499, 500, 501, 501, - 501, 501, 501, 501, 501, 501, 502, 503, 503, 504, - 504, 504, 505, 506, 506, 507, 507, 507, 507, 507, - 507, 507, 507, 507, 507, 507, 508, 508, 508, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 508, 509, 510, 510, 511, 511, 512, 512, 512, 512, - 513, 513, 514, 515, 515, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 517, 517, 517, 519, 518, 520, 518, 521, 521, 522, - 522, 523, 523, 524, 524, 525, 525, 525, 525, 526, - 526, 527, 528, 528, 529, 529, 529, 529, 529, 529, - 529, 529, 530, 531, 532, 533, 531, 534, 534, 536, - 535, 537, 535, 538, 538, 539, 539, 540, 540, 541, - 541, 542, 543, 543, 544, 544, 545, 545, 547, 546, - 548, 548, 549, 549, 550, 550, 552, 551, 553, 551, - 554, 551, 555, 555, 556, 556, 557, 557, 558, 558, - 558, 558, 558, 558, 558, 558, 559, 559, 560, 560, - 560, 562, 561, 563, 564, 564, 565, 565, 566, 566, - 567, 567, 568, 568, 569, 569, 570, 570, 570, 570, - 570, 570, 571, 571, 572, 572, 572, 572, 572, 573, - 573, 574, 574, 575, 575, 575, 575, 575, 575, 575, - 575, 576, 576, 577, 577, 577, 577, 578, 578, 579, - 579, 580, 580, 580, 580, 581, 581, 582, 583, 583, - 584, 584, 585, 585 + 0, 465, 466, 467, 467, 467, 467, 467, 467, 467, + 467, 467, 467, 467, 467, 467, 467, 467, 468, 468, + 468, 468, 468, 468, 469, 470, 471, 472, 472, 473, + 473, 474, 474, 475, 476, 476, 476, 477, 477, 477, + 477, 478, 478, 478, 478, 479, 479, 479, 479, 480, + 480, 480, 481, 481, 481, 482, 482, 482, 482, 482, + 483, 483, 483, 484, 484, 485, 485, 486, 486, 487, + 487, 488, 488, 489, 489, 490, 491, 490, 492, 492, + 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, + 493, 494, 494, 495, 496, 496, 496, 496, 496, 496, + 496, 496, 496, 496, 496, 498, 497, 499, 499, 500, + 500, 500, 500, 501, 501, 502, 502, 503, 504, 504, + 505, 505, 505, 505, 506, 507, 507, 507, 507, 507, + 508, 508, 508, 508, 508, 509, 509, 510, 511, 511, + 511, 511, 511, 511, 511, 511, 511, 511, 512, 513, + 513, 514, 514, 514, 515, 516, 516, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 518, 518, + 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, + 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, + 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, + 518, 518, 518, 518, 518, 518, 519, 520, 520, 521, + 521, 522, 522, 522, 522, 523, 523, 524, 525, 525, + 525, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 527, 527, 527, 529, 528, 530, 528, 531, 531, + 532, 532, 533, 533, 534, 534, 535, 535, 535, 535, + 536, 536, 537, 538, 538, 539, 539, 539, 539, 539, + 539, 539, 539, 540, 541, 542, 543, 541, 544, 544, + 546, 545, 547, 545, 548, 548, 549, 549, 550, 550, + 551, 551, 552, 553, 553, 554, 554, 555, 555, 557, + 556, 558, 558, 559, 559, 560, 560, 562, 561, 563, + 561, 564, 561, 565, 565, 566, 566, 567, 567, 568, + 568, 568, 568, 568, 568, 568, 568, 569, 569, 570, + 570, 570, 572, 571, 573, 574, 574, 575, 575, 576, + 576, 577, 577, 578, 578, 579, 579, 580, 580, 580, + 580, 580, 580, 581, 581, 582, 582, 582, 582, 582, + 583, 583, 584, 584, 585, 585, 585, 585, 585, 585, + 585, 585, 586, 586, 587, 587, 587, 587, 588, 588, + 589, 589, 589, 589, 589, 590, 590, 591, 591, 591, + 591, 592, 592, 593, 593, 594, 594, 595, 595, 596, + 596 }; - /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 3, 1, 1, 1, 1, 1, @@ -4373,14 +4405,15 @@ static const yytype_int8 yyr2[] = 3, 3, 4, 1, 1, 2, 3, 3, 2, 3, 2, 1, 2, 1, 1, 1, 3, 4, 6, 5, 1, 2, 3, 5, 4, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 4, 1, 3, 1, - 3, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, + 3, 1, 3, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 4, 1, 1, 3, 2, 3, 2, 3, 3, 4, - 1, 0, 3, 1, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 4, 1, 1, 1, 3, 2, + 3, 2, 3, 3, 4, 1, 0, 3, 1, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -4412,22 +4445,23 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 6, 0, 5, 1, 2, 3, - 4, 1, 3, 1, 2, 1, 3, 4, 2, 1, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 0, 0, 5, 1, 1, 0, - 2, 0, 2, 2, 3, 1, 2, 1, 2, 1, - 2, 5, 3, 1, 1, 4, 1, 2, 0, 8, - 0, 1, 3, 2, 1, 2, 0, 6, 0, 8, - 0, 7, 1, 1, 1, 0, 2, 3, 2, 2, - 2, 3, 2, 2, 2, 2, 1, 2, 1, 1, - 1, 0, 3, 5, 1, 3, 1, 4, 1, 3, - 5, 5, 1, 3, 1, 3, 4, 6, 6, 8, - 6, 8, 1, 3, 1, 1, 1, 1, 1, 1, - 3, 4, 6, 4, 6, 6, 8, 6, 8, 6, - 8, 1, 3, 1, 1, 1, 1, 1, 3, 1, - 3, 6, 8, 4, 6, 1, 3, 1, 4, 6, - 1, 3, 3, 3 + 1, 1, 1, 1, 0, 6, 0, 5, 1, 2, + 3, 4, 1, 3, 1, 2, 1, 3, 4, 2, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 0, 0, 5, 1, 1, + 0, 2, 0, 2, 2, 3, 1, 2, 1, 2, + 1, 2, 5, 3, 1, 1, 4, 1, 2, 0, + 8, 0, 1, 3, 2, 1, 2, 0, 6, 0, + 8, 0, 7, 1, 1, 1, 0, 2, 3, 2, + 2, 2, 3, 2, 2, 2, 2, 1, 2, 1, + 1, 1, 0, 3, 5, 1, 3, 1, 4, 1, + 3, 5, 5, 1, 3, 1, 3, 4, 6, 6, + 8, 6, 8, 1, 3, 1, 1, 1, 1, 1, + 1, 3, 4, 6, 4, 6, 6, 8, 6, 8, + 6, 8, 1, 3, 1, 1, 1, 1, 1, 3, + 1, 1, 1, 1, 1, 1, 3, 6, 8, 4, + 6, 1, 3, 1, 1, 4, 6, 1, 3, 3, + 3 }; @@ -4439,6 +4473,7 @@ enum { YYENOMEM = -2 }; #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab +#define YYNOMEM goto yyexhaustedlab #define YYRECOVERING() (!!yyerrstatus) @@ -4479,10 +4514,7 @@ do { \ YYFPRINTF Args; \ } while (0) -/* This macro is provided for backward compatibility. */ -# ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif + # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ @@ -4506,16 +4538,12 @@ yy_symbol_value_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext) { FILE *yyoutput = yyo; - YYUSE (yyoutput); - YYUSE (pParseContext); + YY_USE (yyoutput); + YY_USE (pParseContext); if (!yyvaluep) return; -# ifdef YYPRINT - if (yykind < YYNTOKENS) - YYPRINT (yyo, yytoknum[yykind], *yyvaluep); -# endif YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yykind); + YY_USE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -4896,14 +4924,14 @@ static void yydestruct (const char *yymsg, yysymbol_kind_t yykind, YYSTYPE *yyvaluep, glslang::TParseContext* pParseContext) { - YYUSE (yyvaluep); - YYUSE (pParseContext); + YY_USE (yyvaluep); + YY_USE (pParseContext); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yykind); + YY_USE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -4975,6 +5003,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); YYDPRINTF ((stderr, "Starting parse\n")); yychar = YYEMPTY; /* Cause a token to be read. */ + goto yysetstate; @@ -5000,7 +5029,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE - goto yyexhaustedlab; + YYNOMEM; #else { /* Get the current used size of the three stacks, in elements. */ @@ -5028,7 +5057,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); # else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + YYNOMEM; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; @@ -5039,7 +5068,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); YY_CAST (union yyalloc *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) - goto yyexhaustedlab; + YYNOMEM; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE @@ -5061,6 +5090,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + if (yystate == YYFINAL) YYACCEPT; @@ -5173,302 +5203,328 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); switch (yyn) { case 2: /* variable_identifier: IDENTIFIER */ -#line 392 "MachineIndependent/glslang.y" +#line 355 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 5181 "MachineIndependent/glslang_tab.cpp" +#line 5211 "MachineIndependent/glslang_tab.cpp" break; case 3: /* primary_expression: variable_identifier */ -#line 398 "MachineIndependent/glslang.y" +#line 361 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5189 "MachineIndependent/glslang_tab.cpp" +#line 5219 "MachineIndependent/glslang_tab.cpp" break; case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */ -#line 401 "MachineIndependent/glslang.y" +#line 364 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 5199 "MachineIndependent/glslang_tab.cpp" +#line 5229 "MachineIndependent/glslang_tab.cpp" break; case 5: /* primary_expression: FLOATCONSTANT */ -#line 406 "MachineIndependent/glslang.y" +#line 369 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 5207 "MachineIndependent/glslang_tab.cpp" +#line 5237 "MachineIndependent/glslang_tab.cpp" break; case 6: /* primary_expression: INTCONSTANT */ -#line 409 "MachineIndependent/glslang.y" +#line 372 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 5215 "MachineIndependent/glslang_tab.cpp" +#line 5245 "MachineIndependent/glslang_tab.cpp" break; case 7: /* primary_expression: UINTCONSTANT */ -#line 412 "MachineIndependent/glslang.y" +#line 375 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 5224 "MachineIndependent/glslang_tab.cpp" +#line 5254 "MachineIndependent/glslang_tab.cpp" break; case 8: /* primary_expression: BOOLCONSTANT */ -#line 416 "MachineIndependent/glslang.y" +#line 379 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 5232 "MachineIndependent/glslang_tab.cpp" +#line 5262 "MachineIndependent/glslang_tab.cpp" break; case 9: /* primary_expression: STRING_LITERAL */ -#line 420 "MachineIndependent/glslang.y" +#line 382 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 5240 "MachineIndependent/glslang_tab.cpp" +#line 5270 "MachineIndependent/glslang_tab.cpp" break; case 10: /* primary_expression: INT32CONSTANT */ -#line 423 "MachineIndependent/glslang.y" +#line 385 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 5249 "MachineIndependent/glslang_tab.cpp" +#line 5279 "MachineIndependent/glslang_tab.cpp" break; case 11: /* primary_expression: UINT32CONSTANT */ -#line 427 "MachineIndependent/glslang.y" +#line 389 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 5258 "MachineIndependent/glslang_tab.cpp" +#line 5288 "MachineIndependent/glslang_tab.cpp" break; case 12: /* primary_expression: INT64CONSTANT */ -#line 431 "MachineIndependent/glslang.y" +#line 393 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true); } -#line 5267 "MachineIndependent/glslang_tab.cpp" +#line 5297 "MachineIndependent/glslang_tab.cpp" break; case 13: /* primary_expression: UINT64CONSTANT */ -#line 435 "MachineIndependent/glslang.y" +#line 397 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true); } -#line 5276 "MachineIndependent/glslang_tab.cpp" +#line 5306 "MachineIndependent/glslang_tab.cpp" break; case 14: /* primary_expression: INT16CONSTANT */ -#line 439 "MachineIndependent/glslang.y" +#line 401 "MachineIndependent/glslang.y" { parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 5285 "MachineIndependent/glslang_tab.cpp" +#line 5315 "MachineIndependent/glslang_tab.cpp" break; case 15: /* primary_expression: UINT16CONSTANT */ -#line 443 "MachineIndependent/glslang.y" +#line 405 "MachineIndependent/glslang.y" { parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 5294 "MachineIndependent/glslang_tab.cpp" +#line 5324 "MachineIndependent/glslang_tab.cpp" break; case 16: /* primary_expression: DOUBLECONSTANT */ -#line 447 "MachineIndependent/glslang.y" +#line 409 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true); } -#line 5305 "MachineIndependent/glslang_tab.cpp" +#line 5335 "MachineIndependent/glslang_tab.cpp" break; case 17: /* primary_expression: FLOAT16CONSTANT */ -#line 453 "MachineIndependent/glslang.y" +#line 415 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true); } -#line 5314 "MachineIndependent/glslang_tab.cpp" +#line 5344 "MachineIndependent/glslang_tab.cpp" break; case 18: /* postfix_expression: primary_expression */ -#line 461 "MachineIndependent/glslang.y" +#line 422 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5322 "MachineIndependent/glslang_tab.cpp" +#line 5352 "MachineIndependent/glslang_tab.cpp" break; case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ -#line 464 "MachineIndependent/glslang.y" +#line 425 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 5330 "MachineIndependent/glslang_tab.cpp" +#line 5360 "MachineIndependent/glslang_tab.cpp" break; case 20: /* postfix_expression: function_call */ -#line 467 "MachineIndependent/glslang.y" +#line 428 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5338 "MachineIndependent/glslang_tab.cpp" +#line 5368 "MachineIndependent/glslang_tab.cpp" break; case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER */ -#line 470 "MachineIndependent/glslang.y" +#line 431 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 5346 "MachineIndependent/glslang_tab.cpp" +#line 5376 "MachineIndependent/glslang_tab.cpp" break; case 22: /* postfix_expression: postfix_expression INC_OP */ -#line 473 "MachineIndependent/glslang.y" +#line 434 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode)); } -#line 5356 "MachineIndependent/glslang_tab.cpp" +#line 5386 "MachineIndependent/glslang_tab.cpp" break; case 23: /* postfix_expression: postfix_expression DEC_OP */ -#line 478 "MachineIndependent/glslang.y" +#line 439 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode)); } -#line 5366 "MachineIndependent/glslang_tab.cpp" +#line 5396 "MachineIndependent/glslang_tab.cpp" break; case 24: /* integer_expression: expression */ -#line 486 "MachineIndependent/glslang.y" +#line 447 "MachineIndependent/glslang.y" { parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5375 "MachineIndependent/glslang_tab.cpp" +#line 5405 "MachineIndependent/glslang_tab.cpp" break; case 25: /* function_call: function_call_or_method */ -#line 493 "MachineIndependent/glslang.y" +#line 454 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 5384 "MachineIndependent/glslang_tab.cpp" +#line 5414 "MachineIndependent/glslang_tab.cpp" break; case 26: /* function_call_or_method: function_call_generic */ -#line 500 "MachineIndependent/glslang.y" +#line 461 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5392 "MachineIndependent/glslang_tab.cpp" +#line 5422 "MachineIndependent/glslang_tab.cpp" break; case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ -#line 506 "MachineIndependent/glslang.y" +#line 467 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5401 "MachineIndependent/glslang_tab.cpp" +#line 5431 "MachineIndependent/glslang_tab.cpp" break; case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ -#line 510 "MachineIndependent/glslang.y" +#line 471 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5410 "MachineIndependent/glslang_tab.cpp" +#line 5440 "MachineIndependent/glslang_tab.cpp" break; case 29: /* function_call_header_no_parameters: function_call_header VOID */ -#line 517 "MachineIndependent/glslang.y" +#line 478 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 5418 "MachineIndependent/glslang_tab.cpp" +#line 5448 "MachineIndependent/glslang_tab.cpp" break; case 30: /* function_call_header_no_parameters: function_call_header */ -#line 520 "MachineIndependent/glslang.y" +#line 481 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5426 "MachineIndependent/glslang_tab.cpp" +#line 5456 "MachineIndependent/glslang_tab.cpp" break; case 31: /* function_call_header_with_parameters: function_call_header assignment_expression */ -#line 526 "MachineIndependent/glslang.y" +#line 487 "MachineIndependent/glslang.y" { - TParameter param = { 0, new TType }; - param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); - (yyvsp[-1].interm).function->addParameter(param); - (yyval.interm).function = (yyvsp[-1].interm).function; - (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); + if (parseContext.spvVersion.vulkan > 0 + && parseContext.spvVersion.vulkanRelaxed + && (yyvsp[0].interm.intermTypedNode)->getType().containsOpaque()) + { + (yyval.interm).intermNode = parseContext.vkRelaxedRemapFunctionArgument((yyval.interm).loc, (yyvsp[-1].interm).function, (yyvsp[0].interm.intermTypedNode)); + (yyval.interm).function = (yyvsp[-1].interm).function; + } + else + { + TParameter param = { 0, new TType, {} }; + param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); + + (yyvsp[-1].interm).function->addParameter(param); + (yyval.interm).function = (yyvsp[-1].interm).function; + (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); + } } -#line 5438 "MachineIndependent/glslang_tab.cpp" +#line 5479 "MachineIndependent/glslang_tab.cpp" break; case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression */ -#line 533 "MachineIndependent/glslang.y" +#line 505 "MachineIndependent/glslang.y" { - TParameter param = { 0, new TType }; - param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); - (yyvsp[-2].interm).function->addParameter(param); - (yyval.interm).function = (yyvsp[-2].interm).function; - (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); + if (parseContext.spvVersion.vulkan > 0 + && parseContext.spvVersion.vulkanRelaxed + && (yyvsp[0].interm.intermTypedNode)->getType().containsOpaque()) + { + TIntermNode* remappedNode = parseContext.vkRelaxedRemapFunctionArgument((yyvsp[-1].lex).loc, (yyvsp[-2].interm).function, (yyvsp[0].interm.intermTypedNode)); + if (remappedNode == (yyvsp[0].interm.intermTypedNode)) + (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); + else + (yyval.interm).intermNode = parseContext.intermediate.mergeAggregate((yyvsp[-2].interm).intermNode, remappedNode, (yyvsp[-1].lex).loc); + (yyval.interm).function = (yyvsp[-2].interm).function; + } + else + { + TParameter param = { 0, new TType, {} }; + param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); + + (yyvsp[-2].interm).function->addParameter(param); + (yyval.interm).function = (yyvsp[-2].interm).function; + (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); + } } -#line 5450 "MachineIndependent/glslang_tab.cpp" +#line 5506 "MachineIndependent/glslang_tab.cpp" break; case 33: /* function_call_header: function_identifier LEFT_PAREN */ -#line 543 "MachineIndependent/glslang.y" +#line 530 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 5458 "MachineIndependent/glslang_tab.cpp" +#line 5514 "MachineIndependent/glslang_tab.cpp" break; case 34: /* function_identifier: type_specifier */ -#line 551 "MachineIndependent/glslang.y" +#line 538 "MachineIndependent/glslang.y" { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5468 "MachineIndependent/glslang_tab.cpp" +#line 5524 "MachineIndependent/glslang_tab.cpp" break; case 35: /* function_identifier: postfix_expression */ -#line 556 "MachineIndependent/glslang.y" +#line 543 "MachineIndependent/glslang.y" { // // Should be a method or subroutine call, but we haven't recognized the arguments yet. @@ -5496,50 +5552,50 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 5500 "MachineIndependent/glslang_tab.cpp" +#line 5556 "MachineIndependent/glslang_tab.cpp" break; case 36: /* function_identifier: non_uniform_qualifier */ -#line 584 "MachineIndependent/glslang.y" +#line 570 "MachineIndependent/glslang.y" { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5510 "MachineIndependent/glslang_tab.cpp" +#line 5566 "MachineIndependent/glslang_tab.cpp" break; case 37: /* unary_expression: postfix_expression */ -#line 593 "MachineIndependent/glslang.y" +#line 578 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 5521 "MachineIndependent/glslang_tab.cpp" +#line 5577 "MachineIndependent/glslang_tab.cpp" break; case 38: /* unary_expression: INC_OP unary_expression */ -#line 599 "MachineIndependent/glslang.y" +#line 584 "MachineIndependent/glslang.y" { parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode)); } -#line 5530 "MachineIndependent/glslang_tab.cpp" +#line 5586 "MachineIndependent/glslang_tab.cpp" break; case 39: /* unary_expression: DEC_OP unary_expression */ -#line 603 "MachineIndependent/glslang.y" +#line 588 "MachineIndependent/glslang.y" { parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode)); } -#line 5539 "MachineIndependent/glslang_tab.cpp" +#line 5595 "MachineIndependent/glslang_tab.cpp" break; case 40: /* unary_expression: unary_operator unary_expression */ -#line 607 "MachineIndependent/glslang.y" +#line 592 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm).op != EOpNull) { char errorOp[2] = {0, 0}; @@ -5556,179 +5612,179 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 5560 "MachineIndependent/glslang_tab.cpp" +#line 5616 "MachineIndependent/glslang_tab.cpp" break; case 41: /* unary_operator: PLUS */ -#line 627 "MachineIndependent/glslang.y" +#line 612 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 5566 "MachineIndependent/glslang_tab.cpp" +#line 5622 "MachineIndependent/glslang_tab.cpp" break; case 42: /* unary_operator: DASH */ -#line 628 "MachineIndependent/glslang.y" +#line 613 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 5572 "MachineIndependent/glslang_tab.cpp" +#line 5628 "MachineIndependent/glslang_tab.cpp" break; case 43: /* unary_operator: BANG */ -#line 629 "MachineIndependent/glslang.y" +#line 614 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 5578 "MachineIndependent/glslang_tab.cpp" +#line 5634 "MachineIndependent/glslang_tab.cpp" break; case 44: /* unary_operator: TILDE */ -#line 630 "MachineIndependent/glslang.y" +#line 615 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); } -#line 5585 "MachineIndependent/glslang_tab.cpp" +#line 5641 "MachineIndependent/glslang_tab.cpp" break; case 45: /* multiplicative_expression: unary_expression */ -#line 636 "MachineIndependent/glslang.y" +#line 621 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5591 "MachineIndependent/glslang_tab.cpp" +#line 5647 "MachineIndependent/glslang_tab.cpp" break; case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ -#line 637 "MachineIndependent/glslang.y" +#line 622 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5601 "MachineIndependent/glslang_tab.cpp" +#line 5657 "MachineIndependent/glslang_tab.cpp" break; case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ -#line 642 "MachineIndependent/glslang.y" +#line 627 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5611 "MachineIndependent/glslang_tab.cpp" +#line 5667 "MachineIndependent/glslang_tab.cpp" break; case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ -#line 647 "MachineIndependent/glslang.y" +#line 632 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5622 "MachineIndependent/glslang_tab.cpp" +#line 5678 "MachineIndependent/glslang_tab.cpp" break; case 49: /* additive_expression: multiplicative_expression */ -#line 656 "MachineIndependent/glslang.y" +#line 641 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5628 "MachineIndependent/glslang_tab.cpp" +#line 5684 "MachineIndependent/glslang_tab.cpp" break; case 50: /* additive_expression: additive_expression PLUS multiplicative_expression */ -#line 657 "MachineIndependent/glslang.y" +#line 642 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5638 "MachineIndependent/glslang_tab.cpp" +#line 5694 "MachineIndependent/glslang_tab.cpp" break; case 51: /* additive_expression: additive_expression DASH multiplicative_expression */ -#line 662 "MachineIndependent/glslang.y" +#line 647 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5648 "MachineIndependent/glslang_tab.cpp" +#line 5704 "MachineIndependent/glslang_tab.cpp" break; case 52: /* shift_expression: additive_expression */ -#line 670 "MachineIndependent/glslang.y" +#line 655 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5654 "MachineIndependent/glslang_tab.cpp" +#line 5710 "MachineIndependent/glslang_tab.cpp" break; case 53: /* shift_expression: shift_expression LEFT_OP additive_expression */ -#line 671 "MachineIndependent/glslang.y" +#line 656 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5665 "MachineIndependent/glslang_tab.cpp" +#line 5721 "MachineIndependent/glslang_tab.cpp" break; case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression */ -#line 677 "MachineIndependent/glslang.y" +#line 662 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5676 "MachineIndependent/glslang_tab.cpp" +#line 5732 "MachineIndependent/glslang_tab.cpp" break; case 55: /* relational_expression: shift_expression */ -#line 686 "MachineIndependent/glslang.y" +#line 671 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5682 "MachineIndependent/glslang_tab.cpp" +#line 5738 "MachineIndependent/glslang_tab.cpp" break; case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ -#line 687 "MachineIndependent/glslang.y" +#line 672 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5692 "MachineIndependent/glslang_tab.cpp" +#line 5748 "MachineIndependent/glslang_tab.cpp" break; case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ -#line 692 "MachineIndependent/glslang.y" +#line 677 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5702 "MachineIndependent/glslang_tab.cpp" +#line 5758 "MachineIndependent/glslang_tab.cpp" break; case 58: /* relational_expression: relational_expression LE_OP shift_expression */ -#line 697 "MachineIndependent/glslang.y" +#line 682 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5712 "MachineIndependent/glslang_tab.cpp" +#line 5768 "MachineIndependent/glslang_tab.cpp" break; case 59: /* relational_expression: relational_expression GE_OP shift_expression */ -#line 702 "MachineIndependent/glslang.y" +#line 687 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5722 "MachineIndependent/glslang_tab.cpp" +#line 5778 "MachineIndependent/glslang_tab.cpp" break; case 60: /* equality_expression: relational_expression */ -#line 710 "MachineIndependent/glslang.y" +#line 695 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5728 "MachineIndependent/glslang_tab.cpp" +#line 5784 "MachineIndependent/glslang_tab.cpp" break; case 61: /* equality_expression: equality_expression EQ_OP relational_expression */ -#line 711 "MachineIndependent/glslang.y" +#line 696 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=="); @@ -5738,11 +5794,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5742 "MachineIndependent/glslang_tab.cpp" +#line 5798 "MachineIndependent/glslang_tab.cpp" break; case 62: /* equality_expression: equality_expression NE_OP relational_expression */ -#line 720 "MachineIndependent/glslang.y" +#line 705 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!="); @@ -5752,124 +5808,124 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5756 "MachineIndependent/glslang_tab.cpp" +#line 5812 "MachineIndependent/glslang_tab.cpp" break; case 63: /* and_expression: equality_expression */ -#line 732 "MachineIndependent/glslang.y" +#line 717 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5762 "MachineIndependent/glslang_tab.cpp" +#line 5818 "MachineIndependent/glslang_tab.cpp" break; case 64: /* and_expression: and_expression AMPERSAND equality_expression */ -#line 733 "MachineIndependent/glslang.y" +#line 718 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5773 "MachineIndependent/glslang_tab.cpp" +#line 5829 "MachineIndependent/glslang_tab.cpp" break; case 65: /* exclusive_or_expression: and_expression */ -#line 742 "MachineIndependent/glslang.y" +#line 727 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5779 "MachineIndependent/glslang_tab.cpp" +#line 5835 "MachineIndependent/glslang_tab.cpp" break; case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ -#line 743 "MachineIndependent/glslang.y" +#line 728 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5790 "MachineIndependent/glslang_tab.cpp" +#line 5846 "MachineIndependent/glslang_tab.cpp" break; case 67: /* inclusive_or_expression: exclusive_or_expression */ -#line 752 "MachineIndependent/glslang.y" +#line 737 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5796 "MachineIndependent/glslang_tab.cpp" +#line 5852 "MachineIndependent/glslang_tab.cpp" break; case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression */ -#line 753 "MachineIndependent/glslang.y" +#line 738 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5807 "MachineIndependent/glslang_tab.cpp" +#line 5863 "MachineIndependent/glslang_tab.cpp" break; case 69: /* logical_and_expression: inclusive_or_expression */ -#line 762 "MachineIndependent/glslang.y" +#line 747 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5813 "MachineIndependent/glslang_tab.cpp" +#line 5869 "MachineIndependent/glslang_tab.cpp" break; case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ -#line 763 "MachineIndependent/glslang.y" +#line 748 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5823 "MachineIndependent/glslang_tab.cpp" +#line 5879 "MachineIndependent/glslang_tab.cpp" break; case 71: /* logical_xor_expression: logical_and_expression */ -#line 771 "MachineIndependent/glslang.y" +#line 756 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5829 "MachineIndependent/glslang_tab.cpp" +#line 5885 "MachineIndependent/glslang_tab.cpp" break; case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ -#line 772 "MachineIndependent/glslang.y" +#line 757 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5839 "MachineIndependent/glslang_tab.cpp" +#line 5895 "MachineIndependent/glslang_tab.cpp" break; case 73: /* logical_or_expression: logical_xor_expression */ -#line 780 "MachineIndependent/glslang.y" +#line 765 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5845 "MachineIndependent/glslang_tab.cpp" +#line 5901 "MachineIndependent/glslang_tab.cpp" break; case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ -#line 781 "MachineIndependent/glslang.y" +#line 766 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5855 "MachineIndependent/glslang_tab.cpp" +#line 5911 "MachineIndependent/glslang_tab.cpp" break; case 75: /* conditional_expression: logical_or_expression */ -#line 789 "MachineIndependent/glslang.y" +#line 774 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5861 "MachineIndependent/glslang_tab.cpp" +#line 5917 "MachineIndependent/glslang_tab.cpp" break; case 76: /* $@1: %empty */ -#line 790 "MachineIndependent/glslang.y" +#line 775 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 5869 "MachineIndependent/glslang_tab.cpp" +#line 5925 "MachineIndependent/glslang_tab.cpp" break; case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression */ -#line 793 "MachineIndependent/glslang.y" +#line 778 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode)); @@ -5878,21 +5934,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.intermediate.addSelection((yyvsp[-5].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-4].lex).loc); if ((yyval.interm.intermTypedNode) == 0) { - parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString()); + parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5886 "MachineIndependent/glslang_tab.cpp" +#line 5942 "MachineIndependent/glslang_tab.cpp" break; case 78: /* assignment_expression: conditional_expression */ -#line 808 "MachineIndependent/glslang.y" +#line 793 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5892 "MachineIndependent/glslang_tab.cpp" +#line 5948 "MachineIndependent/glslang_tab.cpp" break; case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression */ -#line 809 "MachineIndependent/glslang.y" +#line 794 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment"); parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "="); @@ -5902,155 +5958,155 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.rValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.addAssign((yyvsp[-1].interm).loc, (yyvsp[-1].interm).op, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) { - parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString()); + parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 5910 "MachineIndependent/glslang_tab.cpp" +#line 5966 "MachineIndependent/glslang_tab.cpp" break; case 80: /* assignment_operator: EQUAL */ -#line 825 "MachineIndependent/glslang.y" +#line 810 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 5919 "MachineIndependent/glslang_tab.cpp" +#line 5975 "MachineIndependent/glslang_tab.cpp" break; case 81: /* assignment_operator: MUL_ASSIGN */ -#line 829 "MachineIndependent/glslang.y" +#line 814 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 5928 "MachineIndependent/glslang_tab.cpp" +#line 5984 "MachineIndependent/glslang_tab.cpp" break; case 82: /* assignment_operator: DIV_ASSIGN */ -#line 833 "MachineIndependent/glslang.y" +#line 818 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 5937 "MachineIndependent/glslang_tab.cpp" +#line 5993 "MachineIndependent/glslang_tab.cpp" break; case 83: /* assignment_operator: MOD_ASSIGN */ -#line 837 "MachineIndependent/glslang.y" +#line 822 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%="); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 5947 "MachineIndependent/glslang_tab.cpp" +#line 6003 "MachineIndependent/glslang_tab.cpp" break; case 84: /* assignment_operator: ADD_ASSIGN */ -#line 842 "MachineIndependent/glslang.y" +#line 827 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 5956 "MachineIndependent/glslang_tab.cpp" +#line 6012 "MachineIndependent/glslang_tab.cpp" break; case 85: /* assignment_operator: SUB_ASSIGN */ -#line 846 "MachineIndependent/glslang.y" +#line 831 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 5965 "MachineIndependent/glslang_tab.cpp" +#line 6021 "MachineIndependent/glslang_tab.cpp" break; case 86: /* assignment_operator: LEFT_ASSIGN */ -#line 850 "MachineIndependent/glslang.y" +#line 835 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 5974 "MachineIndependent/glslang_tab.cpp" +#line 6030 "MachineIndependent/glslang_tab.cpp" break; case 87: /* assignment_operator: RIGHT_ASSIGN */ -#line 854 "MachineIndependent/glslang.y" +#line 839 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 5983 "MachineIndependent/glslang_tab.cpp" +#line 6039 "MachineIndependent/glslang_tab.cpp" break; case 88: /* assignment_operator: AND_ASSIGN */ -#line 858 "MachineIndependent/glslang.y" +#line 843 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 5992 "MachineIndependent/glslang_tab.cpp" +#line 6048 "MachineIndependent/glslang_tab.cpp" break; case 89: /* assignment_operator: XOR_ASSIGN */ -#line 862 "MachineIndependent/glslang.y" +#line 847 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 6001 "MachineIndependent/glslang_tab.cpp" +#line 6057 "MachineIndependent/glslang_tab.cpp" break; case 90: /* assignment_operator: OR_ASSIGN */ -#line 866 "MachineIndependent/glslang.y" +#line 851 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 6010 "MachineIndependent/glslang_tab.cpp" +#line 6066 "MachineIndependent/glslang_tab.cpp" break; case 91: /* expression: assignment_expression */ -#line 873 "MachineIndependent/glslang.y" +#line 858 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6018 "MachineIndependent/glslang_tab.cpp" +#line 6074 "MachineIndependent/glslang_tab.cpp" break; case 92: /* expression: expression COMMA assignment_expression */ -#line 876 "MachineIndependent/glslang.y" +#line 861 "MachineIndependent/glslang.y" { parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); if ((yyval.interm.intermTypedNode) == 0) { - 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); } } -#line 6031 "MachineIndependent/glslang_tab.cpp" +#line 6087 "MachineIndependent/glslang_tab.cpp" break; case 93: /* constant_expression: conditional_expression */ -#line 887 "MachineIndependent/glslang.y" +#line 872 "MachineIndependent/glslang.y" { parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6040 "MachineIndependent/glslang_tab.cpp" +#line 6096 "MachineIndependent/glslang_tab.cpp" break; case 94: /* declaration: function_prototype SEMICOLON */ -#line 894 "MachineIndependent/glslang.y" +#line 879 "MachineIndependent/glslang.y" { parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 6050 "MachineIndependent/glslang_tab.cpp" +#line 6106 "MachineIndependent/glslang_tab.cpp" break; case 95: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON */ -#line 900 "MachineIndependent/glslang.y" +#line 884 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[-1].interm).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier"); (yyvsp[-1].interm).function->setSpirvInstruction(*(yyvsp[-2].interm.spirvInst)); // Attach SPIR-V intruction qualifier @@ -6058,31 +6114,31 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 6062 "MachineIndependent/glslang_tab.cpp" +#line 6118 "MachineIndependent/glslang_tab.cpp" break; case 96: /* declaration: spirv_execution_mode_qualifier SEMICOLON */ -#line 907 "MachineIndependent/glslang.y" +#line 891 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "SPIR-V execution mode qualifier"); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier"); (yyval.interm.intermNode) = 0; } -#line 6072 "MachineIndependent/glslang_tab.cpp" +#line 6128 "MachineIndependent/glslang_tab.cpp" break; case 97: /* declaration: init_declarator_list SEMICOLON */ -#line 913 "MachineIndependent/glslang.y" +#line 896 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate()) (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence); (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode; } -#line 6082 "MachineIndependent/glslang_tab.cpp" +#line 6138 "MachineIndependent/glslang_tab.cpp" break; case 98: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ -#line 918 "MachineIndependent/glslang.y" +#line 901 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement"); // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope @@ -6090,75 +6146,75 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 6094 "MachineIndependent/glslang_tab.cpp" +#line 6150 "MachineIndependent/glslang_tab.cpp" break; case 99: /* declaration: block_structure SEMICOLON */ -#line 925 "MachineIndependent/glslang.y" +#line 908 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 6103 "MachineIndependent/glslang_tab.cpp" +#line 6159 "MachineIndependent/glslang_tab.cpp" break; case 100: /* declaration: block_structure IDENTIFIER SEMICOLON */ -#line 929 "MachineIndependent/glslang.y" +#line 912 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 6112 "MachineIndependent/glslang_tab.cpp" +#line 6168 "MachineIndependent/glslang_tab.cpp" break; case 101: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ -#line 933 "MachineIndependent/glslang.y" +#line 916 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 6121 "MachineIndependent/glslang_tab.cpp" +#line 6177 "MachineIndependent/glslang_tab.cpp" break; case 102: /* declaration: type_qualifier SEMICOLON */ -#line 937 "MachineIndependent/glslang.y" +#line 920 "MachineIndependent/glslang.y" { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 6131 "MachineIndependent/glslang_tab.cpp" +#line 6187 "MachineIndependent/glslang_tab.cpp" break; case 103: /* declaration: type_qualifier IDENTIFIER SEMICOLON */ -#line 942 "MachineIndependent/glslang.y" +#line 925 "MachineIndependent/glslang.y" { parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers); parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 6141 "MachineIndependent/glslang_tab.cpp" +#line 6197 "MachineIndependent/glslang_tab.cpp" break; case 104: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON */ -#line 947 "MachineIndependent/glslang.y" +#line 930 "MachineIndependent/glslang.y" { parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers); (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string); parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 6152 "MachineIndependent/glslang_tab.cpp" +#line 6208 "MachineIndependent/glslang_tab.cpp" break; case 105: /* $@2: %empty */ -#line 956 "MachineIndependent/glslang.y" +#line 939 "MachineIndependent/glslang.y" { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 6158 "MachineIndependent/glslang_tab.cpp" +#line 6214 "MachineIndependent/glslang_tab.cpp" break; case 106: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */ -#line 956 "MachineIndependent/glslang.y" +#line 939 "MachineIndependent/glslang.y" { --parseContext.blockNestingLevel; parseContext.blockName = (yyvsp[-4].lex).string; @@ -6168,101 +6224,113 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 6172 "MachineIndependent/glslang_tab.cpp" +#line 6228 "MachineIndependent/glslang_tab.cpp" break; case 107: /* identifier_list: COMMA IDENTIFIER */ -#line 967 "MachineIndependent/glslang.y" +#line 950 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 6181 "MachineIndependent/glslang_tab.cpp" +#line 6237 "MachineIndependent/glslang_tab.cpp" break; case 108: /* identifier_list: identifier_list COMMA IDENTIFIER */ -#line 971 "MachineIndependent/glslang.y" +#line 954 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 6190 "MachineIndependent/glslang_tab.cpp" +#line 6246 "MachineIndependent/glslang_tab.cpp" break; case 109: /* function_prototype: function_declarator RIGHT_PAREN */ -#line 978 "MachineIndependent/glslang.y" +#line 961 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-1].interm.function); + if (parseContext.compileOnly) (yyval.interm).function->setExport(); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 6199 "MachineIndependent/glslang_tab.cpp" +#line 6256 "MachineIndependent/glslang_tab.cpp" break; case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute */ -#line 982 "MachineIndependent/glslang.y" +#line 966 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-2].interm.function); + if (parseContext.compileOnly) (yyval.interm).function->setExport(); (yyval.interm).loc = (yyvsp[-1].lex).loc; - parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; + parseContext.requireExtensions((yyvsp[-1].lex).loc, 2, extensions, "attribute"); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); } -#line 6210 "MachineIndependent/glslang_tab.cpp" +#line 6269 "MachineIndependent/glslang_tab.cpp" break; case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN */ -#line 988 "MachineIndependent/glslang.y" +#line 974 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-1].interm.function); + if (parseContext.compileOnly) (yyval.interm).function->setExport(); (yyval.interm).loc = (yyvsp[0].lex).loc; - parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; + parseContext.requireExtensions((yyvsp[0].lex).loc, 2, extensions, "attribute"); parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes)); } -#line 6221 "MachineIndependent/glslang_tab.cpp" +#line 6282 "MachineIndependent/glslang_tab.cpp" break; case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute */ -#line 994 "MachineIndependent/glslang.y" +#line 982 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-2].interm.function); + if (parseContext.compileOnly) (yyval.interm).function->setExport(); (yyval.interm).loc = (yyvsp[-1].lex).loc; - parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; + parseContext.requireExtensions((yyvsp[-1].lex).loc, 2, extensions, "attribute"); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes)); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); } -#line 6233 "MachineIndependent/glslang_tab.cpp" +#line 6296 "MachineIndependent/glslang_tab.cpp" break; case 113: /* function_declarator: function_header */ -#line 1004 "MachineIndependent/glslang.y" +#line 994 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 6241 "MachineIndependent/glslang_tab.cpp" +#line 6304 "MachineIndependent/glslang_tab.cpp" break; case 114: /* function_declarator: function_header_with_parameters */ -#line 1007 "MachineIndependent/glslang.y" +#line 997 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 6249 "MachineIndependent/glslang_tab.cpp" +#line 6312 "MachineIndependent/glslang_tab.cpp" break; case 115: /* function_header_with_parameters: function_header parameter_declaration */ -#line 1014 "MachineIndependent/glslang.y" +#line 1004 "MachineIndependent/glslang.y" { // Add the parameter (yyval.interm.function) = (yyvsp[-1].interm.function); if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid) - (yyvsp[-1].interm.function)->addParameter((yyvsp[0].interm).param); + { + if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed)) + (yyvsp[-1].interm.function)->addParameter((yyvsp[0].interm).param); + else + parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-1].interm.function), (yyvsp[0].interm).param); + } else delete (yyvsp[0].interm).param.type; } -#line 6262 "MachineIndependent/glslang_tab.cpp" +#line 6330 "MachineIndependent/glslang_tab.cpp" break; case 116: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ -#line 1022 "MachineIndependent/glslang.y" +#line 1017 "MachineIndependent/glslang.y" { // // Only first parameter of one-parameter functions can be void @@ -6277,14 +6345,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else { // Add the parameter (yyval.interm.function) = (yyvsp[-2].interm.function); - (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); + if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed)) + (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); + else + parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-2].interm.function), (yyvsp[0].interm).param); } } -#line 6284 "MachineIndependent/glslang_tab.cpp" +#line 6355 "MachineIndependent/glslang_tab.cpp" break; case 117: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ -#line 1042 "MachineIndependent/glslang.y" +#line 1040 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) { parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return", @@ -6304,11 +6375,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 6308 "MachineIndependent/glslang_tab.cpp" +#line 6379 "MachineIndependent/glslang_tab.cpp" break; case 118: /* parameter_declarator: type_specifier IDENTIFIER */ -#line 1065 "MachineIndependent/glslang.y" +#line 1063 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -6320,15 +6391,15 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } parseContext.reservedErrorCheck((yyvsp[0].lex).loc, *(yyvsp[0].lex).string); - TParameter param = {(yyvsp[0].lex).string, new TType((yyvsp[-1].interm.type))}; + TParameter param = {(yyvsp[0].lex).string, new TType((yyvsp[-1].interm.type)), {}}; (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 6328 "MachineIndependent/glslang_tab.cpp" +#line 6399 "MachineIndependent/glslang_tab.cpp" break; case 119: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ -#line 1080 "MachineIndependent/glslang.y" +#line 1078 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -6343,180 +6414,178 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeRequiredCheck((yyvsp[0].interm).loc, *(yyvsp[0].interm).arraySizes); parseContext.reservedErrorCheck((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string); - TParameter param = { (yyvsp[-1].lex).string, type }; + TParameter param = { (yyvsp[-1].lex).string, type, {} }; (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 6352 "MachineIndependent/glslang_tab.cpp" +#line 6423 "MachineIndependent/glslang_tab.cpp" break; case 120: /* parameter_declaration: type_qualifier parameter_declarator */ -#line 1105 "MachineIndependent/glslang.y" +#line 1103 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision; - parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier()); + parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->isCoopMat()); parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers); parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 6368 "MachineIndependent/glslang_tab.cpp" +#line 6439 "MachineIndependent/glslang_tab.cpp" break; case 121: /* parameter_declaration: parameter_declarator */ -#line 1116 "MachineIndependent/glslang.y" +#line 1114 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type); parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type); - parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier()); + parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->isCoopMat()); } -#line 6380 "MachineIndependent/glslang_tab.cpp" +#line 6451 "MachineIndependent/glslang_tab.cpp" break; case 122: /* parameter_declaration: type_qualifier parameter_type_specifier */ -#line 1126 "MachineIndependent/glslang.y" +#line 1124 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision; - parseContext.precisionQualifierCheck((yyvsp[-1].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier()); + parseContext.precisionQualifierCheck((yyvsp[-1].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->isCoopMat()); parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers); parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 6395 "MachineIndependent/glslang_tab.cpp" +#line 6466 "MachineIndependent/glslang_tab.cpp" break; case 123: /* parameter_declaration: parameter_type_specifier */ -#line 1136 "MachineIndependent/glslang.y" +#line 1134 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type); parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type); - parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier()); + parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->isCoopMat()); } -#line 6407 "MachineIndependent/glslang_tab.cpp" +#line 6478 "MachineIndependent/glslang_tab.cpp" break; case 124: /* parameter_type_specifier: type_specifier */ -#line 1146 "MachineIndependent/glslang.y" +#line 1144 "MachineIndependent/glslang.y" { - TParameter param = { 0, new TType((yyvsp[0].interm.type)) }; + TParameter param = { 0, new TType((yyvsp[0].interm.type)), {} }; (yyval.interm).param = param; if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 6418 "MachineIndependent/glslang_tab.cpp" +#line 6489 "MachineIndependent/glslang_tab.cpp" break; case 125: /* init_declarator_list: single_declaration */ -#line 1155 "MachineIndependent/glslang.y" +#line 1153 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 6426 "MachineIndependent/glslang_tab.cpp" +#line 6497 "MachineIndependent/glslang_tab.cpp" break; case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ -#line 1158 "MachineIndependent/glslang.y" +#line 1156 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 6435 "MachineIndependent/glslang_tab.cpp" +#line 6506 "MachineIndependent/glslang_tab.cpp" break; case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ -#line 1162 "MachineIndependent/glslang.y" +#line 1160 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 6444 "MachineIndependent/glslang_tab.cpp" +#line 6515 "MachineIndependent/glslang_tab.cpp" break; case 128: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ -#line 1166 "MachineIndependent/glslang.y" +#line 1164 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-5].interm).type; TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc); } -#line 6454 "MachineIndependent/glslang_tab.cpp" +#line 6525 "MachineIndependent/glslang_tab.cpp" break; case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ -#line 1171 "MachineIndependent/glslang.y" +#line 1169 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm).type; TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc); } -#line 6464 "MachineIndependent/glslang_tab.cpp" +#line 6535 "MachineIndependent/glslang_tab.cpp" break; case 130: /* single_declaration: fully_specified_type */ -#line 1179 "MachineIndependent/glslang.y" +#line 1177 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[0].interm.type); (yyval.interm).intermNode = 0; - parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); - } -#line 6476 "MachineIndependent/glslang_tab.cpp" +#line 6545 "MachineIndependent/glslang_tab.cpp" break; case 131: /* single_declaration: fully_specified_type IDENTIFIER */ -#line 1186 "MachineIndependent/glslang.y" +#line 1182 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-1].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 6486 "MachineIndependent/glslang_tab.cpp" +#line 6555 "MachineIndependent/glslang_tab.cpp" break; case 132: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ -#line 1191 "MachineIndependent/glslang.y" +#line 1187 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-2].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 6496 "MachineIndependent/glslang_tab.cpp" +#line 6565 "MachineIndependent/glslang_tab.cpp" break; case 133: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ -#line 1196 "MachineIndependent/glslang.y" +#line 1192 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm.type); TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc); } -#line 6506 "MachineIndependent/glslang_tab.cpp" +#line 6575 "MachineIndependent/glslang_tab.cpp" break; case 134: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 1201 "MachineIndependent/glslang.y" +#line 1197 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-3].interm.type); TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc); } -#line 6516 "MachineIndependent/glslang_tab.cpp" +#line 6585 "MachineIndependent/glslang_tab.cpp" break; case 135: /* fully_specified_type: type_specifier */ -#line 1210 "MachineIndependent/glslang.y" +#line 1206 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); @@ -6525,15 +6594,15 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type"); } - parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); + parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier, (yyval.interm.type).isCoopmat()); } -#line 6531 "MachineIndependent/glslang_tab.cpp" +#line 6600 "MachineIndependent/glslang_tab.cpp" break; case 136: /* fully_specified_type: type_qualifier type_specifier */ -#line 1220 "MachineIndependent/glslang.y" +#line 1216 "MachineIndependent/glslang.y" { - parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); + parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, false, &(yyvsp[0].interm.type)); parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type)); if ((yyvsp[0].interm.type).arraySizes) { @@ -6547,7 +6616,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.checkNoShaderLayouts((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers); (yyvsp[0].interm.type).shaderQualifiers.merge((yyvsp[-1].interm.type).shaderQualifiers); parseContext.mergeQualifiers((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyvsp[-1].interm.type).qualifier, true); - parseContext.precisionQualifierCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).basicType, (yyvsp[0].interm.type).qualifier); + parseContext.precisionQualifierCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).basicType, (yyvsp[0].interm.type).qualifier, (yyvsp[0].interm.type).isCoopmat()); (yyval.interm.type) = (yyvsp[0].interm.type); @@ -6556,22 +6625,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 6560 "MachineIndependent/glslang_tab.cpp" +#line 6629 "MachineIndependent/glslang_tab.cpp" break; case 137: /* invariant_qualifier: INVARIANT */ -#line 1247 "MachineIndependent/glslang.y" +#line 1243 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "invariant"); parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 6571 "MachineIndependent/glslang_tab.cpp" +#line 6640 "MachineIndependent/glslang_tab.cpp" break; case 138: /* interpolation_qualifier: SMOOTH */ -#line 1256 "MachineIndependent/glslang.y" +#line 1252 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "smooth"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth"); @@ -6579,11 +6648,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 6583 "MachineIndependent/glslang_tab.cpp" +#line 6652 "MachineIndependent/glslang_tab.cpp" break; case 139: /* interpolation_qualifier: FLAT */ -#line 1263 "MachineIndependent/glslang.y" +#line 1259 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "flat"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat"); @@ -6591,11 +6660,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 6595 "MachineIndependent/glslang_tab.cpp" +#line 6664 "MachineIndependent/glslang_tab.cpp" break; case 140: /* interpolation_qualifier: NOPERSPECTIVE */ -#line 1271 "MachineIndependent/glslang.y" +#line 1266 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); @@ -6603,11 +6672,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 6607 "MachineIndependent/glslang_tab.cpp" +#line 6676 "MachineIndependent/glslang_tab.cpp" break; case 141: /* interpolation_qualifier: EXPLICITINTERPAMD */ -#line 1278 "MachineIndependent/glslang.y" +#line 1273 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); @@ -6615,11 +6684,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 6619 "MachineIndependent/glslang_tab.cpp" +#line 6688 "MachineIndependent/glslang_tab.cpp" break; case 142: /* interpolation_qualifier: PERVERTEXNV */ -#line 1285 "MachineIndependent/glslang.y" +#line 1280 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); @@ -6628,123 +6697,151 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 6632 "MachineIndependent/glslang_tab.cpp" +#line 6701 "MachineIndependent/glslang_tab.cpp" + break; + + case 143: /* interpolation_qualifier: PERVERTEXEXT */ +#line 1288 "MachineIndependent/glslang.y" + { + parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexEXT"); + parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + (yyval.interm.type).init((yyvsp[0].lex).loc); + (yyval.interm.type).qualifier.pervertexEXT = true; + } +#line 6714 "MachineIndependent/glslang_tab.cpp" break; - case 143: /* interpolation_qualifier: PERPRIMITIVENV */ -#line 1293 "MachineIndependent/glslang.y" + case 144: /* interpolation_qualifier: PERPRIMITIVENV */ +#line 1296 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV"); - parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV"); + parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveNV"); // Fragment shader stage doesn't check for extension. So we explicitly add below extension check. if (parseContext.language == EShLangFragment) parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 6647 "MachineIndependent/glslang_tab.cpp" +#line 6729 "MachineIndependent/glslang_tab.cpp" + break; + + case 145: /* interpolation_qualifier: PERPRIMITIVEEXT */ +#line 1306 "MachineIndependent/glslang.y" + { + // No need for profile version or extension check. Shader stage already checks both. + parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveEXT"); + parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveEXT"); + // Fragment shader stage doesn't check for extension. So we explicitly add below extension check. + if (parseContext.language == EShLangFragment) + parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_mesh_shader, "perprimitiveEXT"); + (yyval.interm.type).init((yyvsp[0].lex).loc); + (yyval.interm.type).qualifier.perPrimitiveNV = true; + } +#line 6744 "MachineIndependent/glslang_tab.cpp" break; - case 144: /* interpolation_qualifier: PERVIEWNV */ -#line 1303 "MachineIndependent/glslang.y" + case 146: /* interpolation_qualifier: PERVIEWNV */ +#line 1316 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV"); - parseContext.requireStage((yyvsp[0].lex).loc, EShLangMeshNV, "perviewNV"); + parseContext.requireStage((yyvsp[0].lex).loc, EShLangMesh, "perviewNV"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 6659 "MachineIndependent/glslang_tab.cpp" +#line 6756 "MachineIndependent/glslang_tab.cpp" break; - case 145: /* interpolation_qualifier: PERTASKNV */ -#line 1310 "MachineIndependent/glslang.y" + case 147: /* interpolation_qualifier: PERTASKNV */ +#line 1323 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV"); - parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV"); + parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskNV"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 6671 "MachineIndependent/glslang_tab.cpp" +#line 6768 "MachineIndependent/glslang_tab.cpp" break; - case 146: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ -#line 1321 "MachineIndependent/glslang.y" + case 148: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ +#line 1333 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 6679 "MachineIndependent/glslang_tab.cpp" +#line 6776 "MachineIndependent/glslang_tab.cpp" break; - case 147: /* layout_qualifier_id_list: layout_qualifier_id */ -#line 1327 "MachineIndependent/glslang.y" + case 149: /* layout_qualifier_id_list: layout_qualifier_id */ +#line 1339 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6687 "MachineIndependent/glslang_tab.cpp" +#line 6784 "MachineIndependent/glslang_tab.cpp" break; - case 148: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ -#line 1330 "MachineIndependent/glslang.y" + case 150: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ +#line 1342 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 6697 "MachineIndependent/glslang_tab.cpp" +#line 6794 "MachineIndependent/glslang_tab.cpp" break; - case 149: /* layout_qualifier_id: IDENTIFIER */ -#line 1337 "MachineIndependent/glslang.y" + case 151: /* layout_qualifier_id: IDENTIFIER */ +#line 1349 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 6706 "MachineIndependent/glslang_tab.cpp" +#line 6803 "MachineIndependent/glslang_tab.cpp" break; - case 150: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ -#line 1341 "MachineIndependent/glslang.y" + case 152: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ +#line 1353 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-2].lex).loc); parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode)); } -#line 6715 "MachineIndependent/glslang_tab.cpp" +#line 6812 "MachineIndependent/glslang_tab.cpp" break; - case 151: /* layout_qualifier_id: SHARED */ -#line 1345 "MachineIndependent/glslang.y" + case 153: /* layout_qualifier_id: SHARED */ +#line 1357 "MachineIndependent/glslang.y" { // because "shared" is both an identifier and a keyword (yyval.interm.type).init((yyvsp[0].lex).loc); TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 6725 "MachineIndependent/glslang_tab.cpp" +#line 6822 "MachineIndependent/glslang_tab.cpp" break; - case 152: /* precise_qualifier: PRECISE */ -#line 1354 "MachineIndependent/glslang.y" + case 154: /* precise_qualifier: PRECISE */ +#line 1365 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 6736 "MachineIndependent/glslang_tab.cpp" +#line 6833 "MachineIndependent/glslang_tab.cpp" break; - case 153: /* type_qualifier: single_type_qualifier */ -#line 1364 "MachineIndependent/glslang.y" + case 155: /* type_qualifier: single_type_qualifier */ +#line 1374 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6744 "MachineIndependent/glslang_tab.cpp" +#line 6841 "MachineIndependent/glslang_tab.cpp" break; - case 154: /* type_qualifier: type_qualifier single_type_qualifier */ -#line 1367 "MachineIndependent/glslang.y" + case 156: /* type_qualifier: type_qualifier single_type_qualifier */ +#line 1377 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -6753,151 +6850,151 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 6757 "MachineIndependent/glslang_tab.cpp" +#line 6854 "MachineIndependent/glslang_tab.cpp" break; - case 155: /* single_type_qualifier: storage_qualifier */ -#line 1378 "MachineIndependent/glslang.y" + case 157: /* single_type_qualifier: storage_qualifier */ +#line 1388 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6765 "MachineIndependent/glslang_tab.cpp" +#line 6862 "MachineIndependent/glslang_tab.cpp" break; - case 156: /* single_type_qualifier: layout_qualifier */ -#line 1381 "MachineIndependent/glslang.y" + case 158: /* single_type_qualifier: layout_qualifier */ +#line 1391 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6773 "MachineIndependent/glslang_tab.cpp" +#line 6870 "MachineIndependent/glslang_tab.cpp" break; - case 157: /* single_type_qualifier: precision_qualifier */ -#line 1384 "MachineIndependent/glslang.y" + case 159: /* single_type_qualifier: precision_qualifier */ +#line 1394 "MachineIndependent/glslang.y" { parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6782 "MachineIndependent/glslang_tab.cpp" +#line 6879 "MachineIndependent/glslang_tab.cpp" break; - case 158: /* single_type_qualifier: interpolation_qualifier */ -#line 1388 "MachineIndependent/glslang.y" + case 160: /* single_type_qualifier: interpolation_qualifier */ +#line 1398 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6791 "MachineIndependent/glslang_tab.cpp" +#line 6888 "MachineIndependent/glslang_tab.cpp" break; - case 159: /* single_type_qualifier: invariant_qualifier */ -#line 1392 "MachineIndependent/glslang.y" + case 161: /* single_type_qualifier: invariant_qualifier */ +#line 1402 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6800 "MachineIndependent/glslang_tab.cpp" +#line 6897 "MachineIndependent/glslang_tab.cpp" break; - case 160: /* single_type_qualifier: precise_qualifier */ -#line 1397 "MachineIndependent/glslang.y" + case 162: /* single_type_qualifier: precise_qualifier */ +#line 1406 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6809 "MachineIndependent/glslang_tab.cpp" +#line 6906 "MachineIndependent/glslang_tab.cpp" break; - case 161: /* single_type_qualifier: non_uniform_qualifier */ -#line 1401 "MachineIndependent/glslang.y" + case 163: /* single_type_qualifier: non_uniform_qualifier */ +#line 1410 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6817 "MachineIndependent/glslang_tab.cpp" +#line 6914 "MachineIndependent/glslang_tab.cpp" break; - case 162: /* single_type_qualifier: spirv_storage_class_qualifier */ -#line 1404 "MachineIndependent/glslang.y" + case 164: /* single_type_qualifier: spirv_storage_class_qualifier */ +#line 1413 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].interm.type).loc, "spirv_storage_class"); parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V storage class qualifier"); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6827 "MachineIndependent/glslang_tab.cpp" +#line 6924 "MachineIndependent/glslang_tab.cpp" break; - case 163: /* single_type_qualifier: spirv_decorate_qualifier */ -#line 1409 "MachineIndependent/glslang.y" + case 165: /* single_type_qualifier: spirv_decorate_qualifier */ +#line 1418 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier"); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6836 "MachineIndependent/glslang_tab.cpp" +#line 6933 "MachineIndependent/glslang_tab.cpp" break; - case 164: /* single_type_qualifier: SPIRV_BY_REFERENCE */ -#line 1413 "MachineIndependent/glslang.y" + case 166: /* single_type_qualifier: SPIRV_BY_REFERENCE */ +#line 1422 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_reference"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.setSpirvByReference(); } -#line 6846 "MachineIndependent/glslang_tab.cpp" +#line 6943 "MachineIndependent/glslang_tab.cpp" break; - case 165: /* single_type_qualifier: SPIRV_LITERAL */ -#line 1418 "MachineIndependent/glslang.y" + case 167: /* single_type_qualifier: SPIRV_LITERAL */ +#line 1427 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_literal"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.setSpirvLiteral(); } -#line 6856 "MachineIndependent/glslang_tab.cpp" +#line 6953 "MachineIndependent/glslang_tab.cpp" break; - case 166: /* storage_qualifier: CONST */ -#line 1427 "MachineIndependent/glslang.y" + case 168: /* storage_qualifier: CONST */ +#line 1435 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant } -#line 6865 "MachineIndependent/glslang_tab.cpp" +#line 6962 "MachineIndependent/glslang_tab.cpp" break; - case 167: /* storage_qualifier: INOUT */ -#line 1431 "MachineIndependent/glslang.y" + case 169: /* storage_qualifier: INOUT */ +#line 1439 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "inout"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 6875 "MachineIndependent/glslang_tab.cpp" +#line 6972 "MachineIndependent/glslang_tab.cpp" break; - case 168: /* storage_qualifier: IN */ -#line 1436 "MachineIndependent/glslang.y" + case 170: /* storage_qualifier: IN */ +#line 1444 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "in"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 6886 "MachineIndependent/glslang_tab.cpp" +#line 6983 "MachineIndependent/glslang_tab.cpp" break; - case 169: /* storage_qualifier: OUT */ -#line 1442 "MachineIndependent/glslang.y" + case 171: /* storage_qualifier: OUT */ +#line 1450 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "out"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 6897 "MachineIndependent/glslang_tab.cpp" +#line 6994 "MachineIndependent/glslang_tab.cpp" break; - case 170: /* storage_qualifier: CENTROID */ -#line 1448 "MachineIndependent/glslang.y" + case 172: /* storage_qualifier: CENTROID */ +#line 1456 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); @@ -6905,44 +7002,54 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 6909 "MachineIndependent/glslang_tab.cpp" +#line 7006 "MachineIndependent/glslang_tab.cpp" break; - case 171: /* storage_qualifier: UNIFORM */ -#line 1455 "MachineIndependent/glslang.y" + case 173: /* storage_qualifier: UNIFORM */ +#line 1463 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "uniform"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 6919 "MachineIndependent/glslang_tab.cpp" +#line 7016 "MachineIndependent/glslang_tab.cpp" + break; + + case 174: /* storage_qualifier: TILEIMAGEEXT */ +#line 1468 "MachineIndependent/glslang.y" + { + parseContext.globalCheck((yyvsp[0].lex).loc, "tileImageEXT"); + (yyval.interm.type).init((yyvsp[0].lex).loc); + (yyval.interm.type).qualifier.storage = EvqTileImageEXT; + } +#line 7026 "MachineIndependent/glslang_tab.cpp" break; - case 172: /* storage_qualifier: SHARED */ -#line 1460 "MachineIndependent/glslang.y" + case 175: /* storage_qualifier: SHARED */ +#line 1473 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared"); - parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared"); + parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshMask | EShLangTaskMask), "shared"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 6932 "MachineIndependent/glslang_tab.cpp" +#line 7039 "MachineIndependent/glslang_tab.cpp" break; - case 173: /* storage_qualifier: BUFFER */ -#line 1468 "MachineIndependent/glslang.y" + case 176: /* storage_qualifier: BUFFER */ +#line 1481 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "buffer"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 6942 "MachineIndependent/glslang_tab.cpp" +#line 7049 "MachineIndependent/glslang_tab.cpp" break; - case 174: /* storage_qualifier: ATTRIBUTE */ -#line 1474 "MachineIndependent/glslang.y" + case 177: /* storage_qualifier: ATTRIBUTE */ +#line 1486 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); @@ -6955,11 +7062,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6959 "MachineIndependent/glslang_tab.cpp" +#line 7066 "MachineIndependent/glslang_tab.cpp" break; - case 175: /* storage_qualifier: VARYING */ -#line 1486 "MachineIndependent/glslang.y" + case 178: /* storage_qualifier: VARYING */ +#line 1498 "MachineIndependent/glslang.y" { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); @@ -6974,32 +7081,32 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6978 "MachineIndependent/glslang_tab.cpp" +#line 7085 "MachineIndependent/glslang_tab.cpp" break; - case 176: /* storage_qualifier: PATCH */ -#line 1500 "MachineIndependent/glslang.y" + case 179: /* storage_qualifier: PATCH */ +#line 1512 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "patch"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 6989 "MachineIndependent/glslang_tab.cpp" +#line 7096 "MachineIndependent/glslang_tab.cpp" break; - case 177: /* storage_qualifier: SAMPLE */ -#line 1506 "MachineIndependent/glslang.y" + case 180: /* storage_qualifier: SAMPLE */ +#line 1518 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "sample"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 6999 "MachineIndependent/glslang_tab.cpp" +#line 7106 "MachineIndependent/glslang_tab.cpp" break; - case 178: /* storage_qualifier: HITATTRNV */ -#line 1511 "MachineIndependent/glslang.y" + case 181: /* storage_qualifier: HITATTRNV */ +#line 1523 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -7008,11 +7115,24 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 7012 "MachineIndependent/glslang_tab.cpp" +#line 7119 "MachineIndependent/glslang_tab.cpp" + break; + + case 182: /* storage_qualifier: HITOBJECTATTRNV */ +#line 1531 "MachineIndependent/glslang.y" + { + parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); + parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask + | EShLangMissMask), "hitObjectAttributeNV"); + parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV"); + (yyval.interm.type).init((yyvsp[0].lex).loc); + (yyval.interm.type).qualifier.storage = EvqHitObjectAttrNV; + } +#line 7132 "MachineIndependent/glslang_tab.cpp" break; - case 179: /* storage_qualifier: HITATTREXT */ -#line 1519 "MachineIndependent/glslang.y" + case 183: /* storage_qualifier: HITATTREXT */ +#line 1539 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -7021,11 +7141,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 7025 "MachineIndependent/glslang_tab.cpp" +#line 7145 "MachineIndependent/glslang_tab.cpp" break; - case 180: /* storage_qualifier: PAYLOADNV */ -#line 1527 "MachineIndependent/glslang.y" + case 184: /* storage_qualifier: PAYLOADNV */ +#line 1547 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -7034,11 +7154,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 7038 "MachineIndependent/glslang_tab.cpp" +#line 7158 "MachineIndependent/glslang_tab.cpp" break; - case 181: /* storage_qualifier: PAYLOADEXT */ -#line 1535 "MachineIndependent/glslang.y" + case 185: /* storage_qualifier: PAYLOADEXT */ +#line 1555 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -7047,11 +7167,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 7051 "MachineIndependent/glslang_tab.cpp" +#line 7171 "MachineIndependent/glslang_tab.cpp" break; - case 182: /* storage_qualifier: PAYLOADINNV */ -#line 1543 "MachineIndependent/glslang.y" + case 186: /* storage_qualifier: PAYLOADINNV */ +#line 1563 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -7060,11 +7180,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 7064 "MachineIndependent/glslang_tab.cpp" +#line 7184 "MachineIndependent/glslang_tab.cpp" break; - case 183: /* storage_qualifier: PAYLOADINEXT */ -#line 1551 "MachineIndependent/glslang.y" + case 187: /* storage_qualifier: PAYLOADINEXT */ +#line 1571 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -7073,11 +7193,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 7077 "MachineIndependent/glslang_tab.cpp" +#line 7197 "MachineIndependent/glslang_tab.cpp" break; - case 184: /* storage_qualifier: CALLDATANV */ -#line 1559 "MachineIndependent/glslang.y" + case 188: /* storage_qualifier: CALLDATANV */ +#line 1579 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -7086,11 +7206,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 7090 "MachineIndependent/glslang_tab.cpp" +#line 7210 "MachineIndependent/glslang_tab.cpp" break; - case 185: /* storage_qualifier: CALLDATAEXT */ -#line 1567 "MachineIndependent/glslang.y" + case 189: /* storage_qualifier: CALLDATAEXT */ +#line 1587 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -7099,11 +7219,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 7103 "MachineIndependent/glslang_tab.cpp" +#line 7223 "MachineIndependent/glslang_tab.cpp" break; - case 186: /* storage_qualifier: CALLDATAINNV */ -#line 1575 "MachineIndependent/glslang.y" + case 190: /* storage_qualifier: CALLDATAINNV */ +#line 1595 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); @@ -7111,11 +7231,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 7115 "MachineIndependent/glslang_tab.cpp" +#line 7235 "MachineIndependent/glslang_tab.cpp" break; - case 187: /* storage_qualifier: CALLDATAINEXT */ -#line 1582 "MachineIndependent/glslang.y" + case 191: /* storage_qualifier: CALLDATAINEXT */ +#line 1602 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); @@ -7123,197 +7243,212 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 7127 "MachineIndependent/glslang_tab.cpp" +#line 7247 "MachineIndependent/glslang_tab.cpp" break; - case 188: /* storage_qualifier: COHERENT */ -#line 1589 "MachineIndependent/glslang.y" + case 192: /* storage_qualifier: COHERENT */ +#line 1609 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 7136 "MachineIndependent/glslang_tab.cpp" +#line 7256 "MachineIndependent/glslang_tab.cpp" break; - case 189: /* storage_qualifier: DEVICECOHERENT */ -#line 1593 "MachineIndependent/glslang.y" + case 193: /* storage_qualifier: DEVICECOHERENT */ +#line 1613 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 7146 "MachineIndependent/glslang_tab.cpp" +#line 7266 "MachineIndependent/glslang_tab.cpp" break; - case 190: /* storage_qualifier: QUEUEFAMILYCOHERENT */ -#line 1598 "MachineIndependent/glslang.y" + case 194: /* storage_qualifier: QUEUEFAMILYCOHERENT */ +#line 1618 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 7156 "MachineIndependent/glslang_tab.cpp" +#line 7276 "MachineIndependent/glslang_tab.cpp" break; - case 191: /* storage_qualifier: WORKGROUPCOHERENT */ -#line 1603 "MachineIndependent/glslang.y" + case 195: /* storage_qualifier: WORKGROUPCOHERENT */ +#line 1623 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 7166 "MachineIndependent/glslang_tab.cpp" +#line 7286 "MachineIndependent/glslang_tab.cpp" break; - case 192: /* storage_qualifier: SUBGROUPCOHERENT */ -#line 1608 "MachineIndependent/glslang.y" + case 196: /* storage_qualifier: SUBGROUPCOHERENT */ +#line 1628 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 7176 "MachineIndependent/glslang_tab.cpp" +#line 7296 "MachineIndependent/glslang_tab.cpp" break; - case 193: /* storage_qualifier: NONPRIVATE */ -#line 1613 "MachineIndependent/glslang.y" + case 197: /* storage_qualifier: NONPRIVATE */ +#line 1633 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); (yyval.interm.type).qualifier.nonprivate = true; } -#line 7186 "MachineIndependent/glslang_tab.cpp" +#line 7306 "MachineIndependent/glslang_tab.cpp" break; - case 194: /* storage_qualifier: SHADERCALLCOHERENT */ -#line 1618 "MachineIndependent/glslang.y" + case 198: /* storage_qualifier: SHADERCALLCOHERENT */ +#line 1638 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent"); (yyval.interm.type).qualifier.shadercallcoherent = true; } -#line 7196 "MachineIndependent/glslang_tab.cpp" +#line 7316 "MachineIndependent/glslang_tab.cpp" break; - case 195: /* storage_qualifier: VOLATILE */ -#line 1623 "MachineIndependent/glslang.y" + case 199: /* storage_qualifier: VOLATILE */ +#line 1643 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 7205 "MachineIndependent/glslang_tab.cpp" +#line 7325 "MachineIndependent/glslang_tab.cpp" break; - case 196: /* storage_qualifier: RESTRICT */ -#line 1627 "MachineIndependent/glslang.y" + case 200: /* storage_qualifier: RESTRICT */ +#line 1647 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 7214 "MachineIndependent/glslang_tab.cpp" +#line 7334 "MachineIndependent/glslang_tab.cpp" break; - case 197: /* storage_qualifier: READONLY */ -#line 1631 "MachineIndependent/glslang.y" + case 201: /* storage_qualifier: READONLY */ +#line 1651 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 7223 "MachineIndependent/glslang_tab.cpp" +#line 7343 "MachineIndependent/glslang_tab.cpp" break; - case 198: /* storage_qualifier: WRITEONLY */ -#line 1635 "MachineIndependent/glslang.y" + case 202: /* storage_qualifier: WRITEONLY */ +#line 1655 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 7232 "MachineIndependent/glslang_tab.cpp" +#line 7352 "MachineIndependent/glslang_tab.cpp" break; - case 199: /* storage_qualifier: SUBROUTINE */ -#line 1639 "MachineIndependent/glslang.y" + case 203: /* storage_qualifier: SUBROUTINE */ +#line 1659 "MachineIndependent/glslang.y" { parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 7243 "MachineIndependent/glslang_tab.cpp" +#line 7363 "MachineIndependent/glslang_tab.cpp" break; - case 200: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ -#line 1645 "MachineIndependent/glslang.y" + case 204: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ +#line 1665 "MachineIndependent/glslang.y" { parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 7254 "MachineIndependent/glslang_tab.cpp" +#line 7374 "MachineIndependent/glslang_tab.cpp" + break; + + case 205: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT */ +#line 1671 "MachineIndependent/glslang.y" + { + // No need for profile version or extension check. Shader stage already checks both. + parseContext.globalCheck((yyvsp[0].lex).loc, "taskPayloadSharedEXT"); + parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskPayloadSharedEXT "); + (yyval.interm.type).init((yyvsp[0].lex).loc); + (yyval.interm.type).qualifier.storage = EvqtaskPayloadSharedEXT; + } +#line 7386 "MachineIndependent/glslang_tab.cpp" break; - case 201: /* non_uniform_qualifier: NONUNIFORM */ -#line 1656 "MachineIndependent/glslang.y" + case 206: /* non_uniform_qualifier: NONUNIFORM */ +#line 1681 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 7263 "MachineIndependent/glslang_tab.cpp" +#line 7395 "MachineIndependent/glslang_tab.cpp" break; - case 202: /* type_name_list: IDENTIFIER */ -#line 1663 "MachineIndependent/glslang.y" + case 207: /* type_name_list: IDENTIFIER */ +#line 1688 "MachineIndependent/glslang.y" { // TODO } -#line 7271 "MachineIndependent/glslang_tab.cpp" +#line 7403 "MachineIndependent/glslang_tab.cpp" break; - case 203: /* type_name_list: type_name_list COMMA IDENTIFIER */ -#line 1666 "MachineIndependent/glslang.y" + case 208: /* type_name_list: type_name_list COMMA IDENTIFIER */ +#line 1691 "MachineIndependent/glslang.y" { // TODO: 4.0 semantics: subroutines // 1) make sure each identifier is a type declared earlier with SUBROUTINE // 2) save all of the identifiers for future comparison with the declared function } -#line 7281 "MachineIndependent/glslang_tab.cpp" +#line 7413 "MachineIndependent/glslang_tab.cpp" break; - case 204: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ -#line 1675 "MachineIndependent/glslang.y" + case 209: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ +#line 1699 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); + parseContext.coopMatTypeParametersCheck((yyvsp[-1].interm.type).loc, (yyval.interm.type)); + } -#line 7291 "MachineIndependent/glslang_tab.cpp" +#line 7425 "MachineIndependent/glslang_tab.cpp" break; - case 205: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ -#line 1680 "MachineIndependent/glslang.y" + case 210: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ +#line 1706 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; + parseContext.coopMatTypeParametersCheck((yyvsp[-2].interm.type).loc, (yyval.interm.type)); } -#line 7303 "MachineIndependent/glslang_tab.cpp" +#line 7438 "MachineIndependent/glslang_tab.cpp" break; - case 206: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ -#line 1690 "MachineIndependent/glslang.y" + case 211: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ +#line 1717 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 7313 "MachineIndependent/glslang_tab.cpp" +#line 7448 "MachineIndependent/glslang_tab.cpp" break; - case 207: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1695 "MachineIndependent/glslang.y" + case 212: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1722 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -7322,20 +7457,20 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 7326 "MachineIndependent/glslang_tab.cpp" +#line 7461 "MachineIndependent/glslang_tab.cpp" break; - case 208: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ -#line 1703 "MachineIndependent/glslang.y" + case 213: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ +#line 1730 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 7335 "MachineIndependent/glslang_tab.cpp" +#line 7470 "MachineIndependent/glslang_tab.cpp" break; - case 209: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1707 "MachineIndependent/glslang.y" + case 214: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1734 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); @@ -7343,348 +7478,360 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 7347 "MachineIndependent/glslang_tab.cpp" +#line 7482 "MachineIndependent/glslang_tab.cpp" break; - case 210: /* type_parameter_specifier_opt: type_parameter_specifier */ -#line 1717 "MachineIndependent/glslang.y" + case 215: /* type_parameter_specifier_opt: type_parameter_specifier */ +#line 1744 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 7355 "MachineIndependent/glslang_tab.cpp" +#line 7490 "MachineIndependent/glslang_tab.cpp" break; - case 211: /* type_parameter_specifier_opt: %empty */ -#line 1720 "MachineIndependent/glslang.y" + case 216: /* type_parameter_specifier_opt: %empty */ +#line 1747 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = 0; } -#line 7363 "MachineIndependent/glslang_tab.cpp" +#line 7498 "MachineIndependent/glslang_tab.cpp" break; - case 212: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ -#line 1726 "MachineIndependent/glslang.y" + case 217: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ +#line 1753 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 7371 "MachineIndependent/glslang_tab.cpp" +#line 7506 "MachineIndependent/glslang_tab.cpp" + break; + + case 218: /* type_parameter_specifier_list: type_specifier */ +#line 1759 "MachineIndependent/glslang.y" + { + (yyval.interm.typeParameters) = new TTypeParameters; + (yyval.interm.typeParameters)->arraySizes = new TArraySizes; + (yyval.interm.typeParameters)->spirvType = (yyvsp[0].interm.type).spirvType; + (yyval.interm.typeParameters)->basicType = (yyvsp[0].interm.type).basicType; + } +#line 7517 "MachineIndependent/glslang_tab.cpp" break; - case 213: /* type_parameter_specifier_list: unary_expression */ -#line 1732 "MachineIndependent/glslang.y" + case 219: /* type_parameter_specifier_list: unary_expression */ +#line 1765 "MachineIndependent/glslang.y" { - (yyval.interm.typeParameters) = new TArraySizes; + (yyval.interm.typeParameters) = new TTypeParameters; + (yyval.interm.typeParameters)->arraySizes = new TArraySizes; TArraySize size; - parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); - (yyval.interm.typeParameters)->addInnerSize(size); + parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true); + (yyval.interm.typeParameters)->arraySizes->addInnerSize(size); } -#line 7383 "MachineIndependent/glslang_tab.cpp" +#line 7530 "MachineIndependent/glslang_tab.cpp" break; - case 214: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ -#line 1739 "MachineIndependent/glslang.y" + case 220: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ +#line 1773 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); TArraySize size; - parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); - (yyval.interm.typeParameters)->addInnerSize(size); + parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true); + (yyval.interm.typeParameters)->arraySizes->addInnerSize(size); } -#line 7395 "MachineIndependent/glslang_tab.cpp" +#line 7542 "MachineIndependent/glslang_tab.cpp" break; - case 215: /* type_specifier_nonarray: VOID */ -#line 1749 "MachineIndependent/glslang.y" + case 221: /* type_specifier_nonarray: VOID */ +#line 1783 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 7404 "MachineIndependent/glslang_tab.cpp" +#line 7551 "MachineIndependent/glslang_tab.cpp" break; - case 216: /* type_specifier_nonarray: FLOAT */ -#line 1753 "MachineIndependent/glslang.y" + case 222: /* type_specifier_nonarray: FLOAT */ +#line 1787 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7413 "MachineIndependent/glslang_tab.cpp" +#line 7560 "MachineIndependent/glslang_tab.cpp" break; - case 217: /* type_specifier_nonarray: INT */ -#line 1757 "MachineIndependent/glslang.y" + case 223: /* type_specifier_nonarray: INT */ +#line 1791 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7422 "MachineIndependent/glslang_tab.cpp" +#line 7569 "MachineIndependent/glslang_tab.cpp" break; - case 218: /* type_specifier_nonarray: UINT */ -#line 1761 "MachineIndependent/glslang.y" + case 224: /* type_specifier_nonarray: UINT */ +#line 1795 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 7432 "MachineIndependent/glslang_tab.cpp" +#line 7579 "MachineIndependent/glslang_tab.cpp" break; - case 219: /* type_specifier_nonarray: BOOL */ -#line 1766 "MachineIndependent/glslang.y" + case 225: /* type_specifier_nonarray: BOOL */ +#line 1800 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 7441 "MachineIndependent/glslang_tab.cpp" +#line 7588 "MachineIndependent/glslang_tab.cpp" break; - case 220: /* type_specifier_nonarray: VEC2 */ -#line 1770 "MachineIndependent/glslang.y" + case 226: /* type_specifier_nonarray: VEC2 */ +#line 1804 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 7451 "MachineIndependent/glslang_tab.cpp" +#line 7598 "MachineIndependent/glslang_tab.cpp" break; - case 221: /* type_specifier_nonarray: VEC3 */ -#line 1775 "MachineIndependent/glslang.y" + case 227: /* type_specifier_nonarray: VEC3 */ +#line 1809 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 7461 "MachineIndependent/glslang_tab.cpp" +#line 7608 "MachineIndependent/glslang_tab.cpp" break; - case 222: /* type_specifier_nonarray: VEC4 */ -#line 1780 "MachineIndependent/glslang.y" + case 228: /* type_specifier_nonarray: VEC4 */ +#line 1814 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 7471 "MachineIndependent/glslang_tab.cpp" +#line 7618 "MachineIndependent/glslang_tab.cpp" break; - case 223: /* type_specifier_nonarray: BVEC2 */ -#line 1785 "MachineIndependent/glslang.y" + case 229: /* type_specifier_nonarray: BVEC2 */ +#line 1819 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 7481 "MachineIndependent/glslang_tab.cpp" +#line 7628 "MachineIndependent/glslang_tab.cpp" break; - case 224: /* type_specifier_nonarray: BVEC3 */ -#line 1790 "MachineIndependent/glslang.y" + case 230: /* type_specifier_nonarray: BVEC3 */ +#line 1824 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 7491 "MachineIndependent/glslang_tab.cpp" +#line 7638 "MachineIndependent/glslang_tab.cpp" break; - case 225: /* type_specifier_nonarray: BVEC4 */ -#line 1795 "MachineIndependent/glslang.y" + case 231: /* type_specifier_nonarray: BVEC4 */ +#line 1829 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 7501 "MachineIndependent/glslang_tab.cpp" +#line 7648 "MachineIndependent/glslang_tab.cpp" break; - case 226: /* type_specifier_nonarray: IVEC2 */ -#line 1800 "MachineIndependent/glslang.y" + case 232: /* type_specifier_nonarray: IVEC2 */ +#line 1834 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 7511 "MachineIndependent/glslang_tab.cpp" +#line 7658 "MachineIndependent/glslang_tab.cpp" break; - case 227: /* type_specifier_nonarray: IVEC3 */ -#line 1805 "MachineIndependent/glslang.y" + case 233: /* type_specifier_nonarray: IVEC3 */ +#line 1839 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 7521 "MachineIndependent/glslang_tab.cpp" +#line 7668 "MachineIndependent/glslang_tab.cpp" break; - case 228: /* type_specifier_nonarray: IVEC4 */ -#line 1810 "MachineIndependent/glslang.y" + case 234: /* type_specifier_nonarray: IVEC4 */ +#line 1844 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 7531 "MachineIndependent/glslang_tab.cpp" +#line 7678 "MachineIndependent/glslang_tab.cpp" break; - case 229: /* type_specifier_nonarray: UVEC2 */ -#line 1815 "MachineIndependent/glslang.y" + case 235: /* type_specifier_nonarray: UVEC2 */ +#line 1849 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 7542 "MachineIndependent/glslang_tab.cpp" +#line 7689 "MachineIndependent/glslang_tab.cpp" break; - case 230: /* type_specifier_nonarray: UVEC3 */ -#line 1821 "MachineIndependent/glslang.y" + case 236: /* type_specifier_nonarray: UVEC3 */ +#line 1855 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 7553 "MachineIndependent/glslang_tab.cpp" +#line 7700 "MachineIndependent/glslang_tab.cpp" break; - case 231: /* type_specifier_nonarray: UVEC4 */ -#line 1827 "MachineIndependent/glslang.y" + case 237: /* type_specifier_nonarray: UVEC4 */ +#line 1861 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 7564 "MachineIndependent/glslang_tab.cpp" +#line 7711 "MachineIndependent/glslang_tab.cpp" break; - case 232: /* type_specifier_nonarray: MAT2 */ -#line 1833 "MachineIndependent/glslang.y" + case 238: /* type_specifier_nonarray: MAT2 */ +#line 1867 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7574 "MachineIndependent/glslang_tab.cpp" +#line 7721 "MachineIndependent/glslang_tab.cpp" break; - case 233: /* type_specifier_nonarray: MAT3 */ -#line 1838 "MachineIndependent/glslang.y" + case 239: /* type_specifier_nonarray: MAT3 */ +#line 1872 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7584 "MachineIndependent/glslang_tab.cpp" +#line 7731 "MachineIndependent/glslang_tab.cpp" break; - case 234: /* type_specifier_nonarray: MAT4 */ -#line 1843 "MachineIndependent/glslang.y" + case 240: /* type_specifier_nonarray: MAT4 */ +#line 1877 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7594 "MachineIndependent/glslang_tab.cpp" +#line 7741 "MachineIndependent/glslang_tab.cpp" break; - case 235: /* type_specifier_nonarray: MAT2X2 */ -#line 1848 "MachineIndependent/glslang.y" + case 241: /* type_specifier_nonarray: MAT2X2 */ +#line 1882 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7604 "MachineIndependent/glslang_tab.cpp" +#line 7751 "MachineIndependent/glslang_tab.cpp" break; - case 236: /* type_specifier_nonarray: MAT2X3 */ -#line 1853 "MachineIndependent/glslang.y" + case 242: /* type_specifier_nonarray: MAT2X3 */ +#line 1887 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7614 "MachineIndependent/glslang_tab.cpp" +#line 7761 "MachineIndependent/glslang_tab.cpp" break; - case 237: /* type_specifier_nonarray: MAT2X4 */ -#line 1858 "MachineIndependent/glslang.y" + case 243: /* type_specifier_nonarray: MAT2X4 */ +#line 1892 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7624 "MachineIndependent/glslang_tab.cpp" +#line 7771 "MachineIndependent/glslang_tab.cpp" break; - case 238: /* type_specifier_nonarray: MAT3X2 */ -#line 1863 "MachineIndependent/glslang.y" + case 244: /* type_specifier_nonarray: MAT3X2 */ +#line 1897 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7634 "MachineIndependent/glslang_tab.cpp" +#line 7781 "MachineIndependent/glslang_tab.cpp" break; - case 239: /* type_specifier_nonarray: MAT3X3 */ -#line 1868 "MachineIndependent/glslang.y" + case 245: /* type_specifier_nonarray: MAT3X3 */ +#line 1902 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7644 "MachineIndependent/glslang_tab.cpp" +#line 7791 "MachineIndependent/glslang_tab.cpp" break; - case 240: /* type_specifier_nonarray: MAT3X4 */ -#line 1873 "MachineIndependent/glslang.y" + case 246: /* type_specifier_nonarray: MAT3X4 */ +#line 1907 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7654 "MachineIndependent/glslang_tab.cpp" +#line 7801 "MachineIndependent/glslang_tab.cpp" break; - case 241: /* type_specifier_nonarray: MAT4X2 */ -#line 1878 "MachineIndependent/glslang.y" + case 247: /* type_specifier_nonarray: MAT4X2 */ +#line 1912 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7664 "MachineIndependent/glslang_tab.cpp" +#line 7811 "MachineIndependent/glslang_tab.cpp" break; - case 242: /* type_specifier_nonarray: MAT4X3 */ -#line 1883 "MachineIndependent/glslang.y" + case 248: /* type_specifier_nonarray: MAT4X3 */ +#line 1917 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7674 "MachineIndependent/glslang_tab.cpp" +#line 7821 "MachineIndependent/glslang_tab.cpp" break; - case 243: /* type_specifier_nonarray: MAT4X4 */ -#line 1888 "MachineIndependent/glslang.y" + case 249: /* type_specifier_nonarray: MAT4X4 */ +#line 1922 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7684 "MachineIndependent/glslang_tab.cpp" +#line 7831 "MachineIndependent/glslang_tab.cpp" break; - case 244: /* type_specifier_nonarray: DOUBLE */ -#line 1894 "MachineIndependent/glslang.y" + case 250: /* type_specifier_nonarray: DOUBLE */ +#line 1927 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7692,121 +7839,121 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7696 "MachineIndependent/glslang_tab.cpp" +#line 7843 "MachineIndependent/glslang_tab.cpp" break; - case 245: /* type_specifier_nonarray: FLOAT16_T */ -#line 1901 "MachineIndependent/glslang.y" + case 251: /* type_specifier_nonarray: FLOAT16_T */ +#line 1934 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 7706 "MachineIndependent/glslang_tab.cpp" +#line 7853 "MachineIndependent/glslang_tab.cpp" break; - case 246: /* type_specifier_nonarray: FLOAT32_T */ -#line 1906 "MachineIndependent/glslang.y" + case 252: /* type_specifier_nonarray: FLOAT32_T */ +#line 1939 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7716 "MachineIndependent/glslang_tab.cpp" +#line 7863 "MachineIndependent/glslang_tab.cpp" break; - case 247: /* type_specifier_nonarray: FLOAT64_T */ -#line 1911 "MachineIndependent/glslang.y" + case 253: /* type_specifier_nonarray: FLOAT64_T */ +#line 1944 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7726 "MachineIndependent/glslang_tab.cpp" +#line 7873 "MachineIndependent/glslang_tab.cpp" break; - case 248: /* type_specifier_nonarray: INT8_T */ -#line 1916 "MachineIndependent/glslang.y" + case 254: /* type_specifier_nonarray: INT8_T */ +#line 1949 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 7736 "MachineIndependent/glslang_tab.cpp" +#line 7883 "MachineIndependent/glslang_tab.cpp" break; - case 249: /* type_specifier_nonarray: UINT8_T */ -#line 1921 "MachineIndependent/glslang.y" + case 255: /* type_specifier_nonarray: UINT8_T */ +#line 1954 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 7746 "MachineIndependent/glslang_tab.cpp" +#line 7893 "MachineIndependent/glslang_tab.cpp" break; - case 250: /* type_specifier_nonarray: INT16_T */ -#line 1926 "MachineIndependent/glslang.y" + case 256: /* type_specifier_nonarray: INT16_T */ +#line 1959 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 7756 "MachineIndependent/glslang_tab.cpp" +#line 7903 "MachineIndependent/glslang_tab.cpp" break; - case 251: /* type_specifier_nonarray: UINT16_T */ -#line 1931 "MachineIndependent/glslang.y" + case 257: /* type_specifier_nonarray: UINT16_T */ +#line 1964 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 7766 "MachineIndependent/glslang_tab.cpp" +#line 7913 "MachineIndependent/glslang_tab.cpp" break; - case 252: /* type_specifier_nonarray: INT32_T */ -#line 1936 "MachineIndependent/glslang.y" + case 258: /* type_specifier_nonarray: INT32_T */ +#line 1969 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7776 "MachineIndependent/glslang_tab.cpp" +#line 7923 "MachineIndependent/glslang_tab.cpp" break; - case 253: /* type_specifier_nonarray: UINT32_T */ -#line 1941 "MachineIndependent/glslang.y" + case 259: /* type_specifier_nonarray: UINT32_T */ +#line 1974 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 7786 "MachineIndependent/glslang_tab.cpp" +#line 7933 "MachineIndependent/glslang_tab.cpp" break; - case 254: /* type_specifier_nonarray: INT64_T */ -#line 1946 "MachineIndependent/glslang.y" + case 260: /* type_specifier_nonarray: INT64_T */ +#line 1979 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 7796 "MachineIndependent/glslang_tab.cpp" +#line 7943 "MachineIndependent/glslang_tab.cpp" break; - case 255: /* type_specifier_nonarray: UINT64_T */ -#line 1951 "MachineIndependent/glslang.y" + case 261: /* type_specifier_nonarray: UINT64_T */ +#line 1984 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 7806 "MachineIndependent/glslang_tab.cpp" +#line 7953 "MachineIndependent/glslang_tab.cpp" break; - case 256: /* type_specifier_nonarray: DVEC2 */ -#line 1956 "MachineIndependent/glslang.y" + case 262: /* type_specifier_nonarray: DVEC2 */ +#line 1989 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7815,11 +7962,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7819 "MachineIndependent/glslang_tab.cpp" +#line 7966 "MachineIndependent/glslang_tab.cpp" break; - case 257: /* type_specifier_nonarray: DVEC3 */ -#line 1964 "MachineIndependent/glslang.y" + case 263: /* type_specifier_nonarray: DVEC3 */ +#line 1997 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7828,11 +7975,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7832 "MachineIndependent/glslang_tab.cpp" +#line 7979 "MachineIndependent/glslang_tab.cpp" break; - case 258: /* type_specifier_nonarray: DVEC4 */ -#line 1972 "MachineIndependent/glslang.y" + case 264: /* type_specifier_nonarray: DVEC4 */ +#line 2005 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7841,374 +7988,374 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7845 "MachineIndependent/glslang_tab.cpp" +#line 7992 "MachineIndependent/glslang_tab.cpp" break; - case 259: /* type_specifier_nonarray: F16VEC2 */ -#line 1980 "MachineIndependent/glslang.y" + case 265: /* type_specifier_nonarray: F16VEC2 */ +#line 2013 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 7856 "MachineIndependent/glslang_tab.cpp" +#line 8003 "MachineIndependent/glslang_tab.cpp" break; - case 260: /* type_specifier_nonarray: F16VEC3 */ -#line 1986 "MachineIndependent/glslang.y" + case 266: /* type_specifier_nonarray: F16VEC3 */ +#line 2019 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 7867 "MachineIndependent/glslang_tab.cpp" +#line 8014 "MachineIndependent/glslang_tab.cpp" break; - case 261: /* type_specifier_nonarray: F16VEC4 */ -#line 1992 "MachineIndependent/glslang.y" + case 267: /* type_specifier_nonarray: F16VEC4 */ +#line 2025 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 7878 "MachineIndependent/glslang_tab.cpp" +#line 8025 "MachineIndependent/glslang_tab.cpp" break; - case 262: /* type_specifier_nonarray: F32VEC2 */ -#line 1998 "MachineIndependent/glslang.y" + case 268: /* type_specifier_nonarray: F32VEC2 */ +#line 2031 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 7889 "MachineIndependent/glslang_tab.cpp" +#line 8036 "MachineIndependent/glslang_tab.cpp" break; - case 263: /* type_specifier_nonarray: F32VEC3 */ -#line 2004 "MachineIndependent/glslang.y" + case 269: /* type_specifier_nonarray: F32VEC3 */ +#line 2037 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 7900 "MachineIndependent/glslang_tab.cpp" +#line 8047 "MachineIndependent/glslang_tab.cpp" break; - case 264: /* type_specifier_nonarray: F32VEC4 */ -#line 2010 "MachineIndependent/glslang.y" + case 270: /* type_specifier_nonarray: F32VEC4 */ +#line 2043 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 7911 "MachineIndependent/glslang_tab.cpp" +#line 8058 "MachineIndependent/glslang_tab.cpp" break; - case 265: /* type_specifier_nonarray: F64VEC2 */ -#line 2016 "MachineIndependent/glslang.y" + case 271: /* type_specifier_nonarray: F64VEC2 */ +#line 2049 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7922 "MachineIndependent/glslang_tab.cpp" +#line 8069 "MachineIndependent/glslang_tab.cpp" break; - case 266: /* type_specifier_nonarray: F64VEC3 */ -#line 2022 "MachineIndependent/glslang.y" + case 272: /* type_specifier_nonarray: F64VEC3 */ +#line 2055 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7933 "MachineIndependent/glslang_tab.cpp" +#line 8080 "MachineIndependent/glslang_tab.cpp" break; - case 267: /* type_specifier_nonarray: F64VEC4 */ -#line 2028 "MachineIndependent/glslang.y" + case 273: /* type_specifier_nonarray: F64VEC4 */ +#line 2061 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7944 "MachineIndependent/glslang_tab.cpp" +#line 8091 "MachineIndependent/glslang_tab.cpp" break; - case 268: /* type_specifier_nonarray: I8VEC2 */ -#line 2034 "MachineIndependent/glslang.y" + case 274: /* type_specifier_nonarray: I8VEC2 */ +#line 2067 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 7955 "MachineIndependent/glslang_tab.cpp" +#line 8102 "MachineIndependent/glslang_tab.cpp" break; - case 269: /* type_specifier_nonarray: I8VEC3 */ -#line 2040 "MachineIndependent/glslang.y" + case 275: /* type_specifier_nonarray: I8VEC3 */ +#line 2073 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 7966 "MachineIndependent/glslang_tab.cpp" +#line 8113 "MachineIndependent/glslang_tab.cpp" break; - case 270: /* type_specifier_nonarray: I8VEC4 */ -#line 2046 "MachineIndependent/glslang.y" + case 276: /* type_specifier_nonarray: I8VEC4 */ +#line 2079 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 7977 "MachineIndependent/glslang_tab.cpp" +#line 8124 "MachineIndependent/glslang_tab.cpp" break; - case 271: /* type_specifier_nonarray: I16VEC2 */ -#line 2052 "MachineIndependent/glslang.y" + case 277: /* type_specifier_nonarray: I16VEC2 */ +#line 2085 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 7988 "MachineIndependent/glslang_tab.cpp" +#line 8135 "MachineIndependent/glslang_tab.cpp" break; - case 272: /* type_specifier_nonarray: I16VEC3 */ -#line 2058 "MachineIndependent/glslang.y" + case 278: /* type_specifier_nonarray: I16VEC3 */ +#line 2091 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 7999 "MachineIndependent/glslang_tab.cpp" +#line 8146 "MachineIndependent/glslang_tab.cpp" break; - case 273: /* type_specifier_nonarray: I16VEC4 */ -#line 2064 "MachineIndependent/glslang.y" + case 279: /* type_specifier_nonarray: I16VEC4 */ +#line 2097 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 8010 "MachineIndependent/glslang_tab.cpp" +#line 8157 "MachineIndependent/glslang_tab.cpp" break; - case 274: /* type_specifier_nonarray: I32VEC2 */ -#line 2070 "MachineIndependent/glslang.y" + case 280: /* type_specifier_nonarray: I32VEC2 */ +#line 2103 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 8021 "MachineIndependent/glslang_tab.cpp" +#line 8168 "MachineIndependent/glslang_tab.cpp" break; - case 275: /* type_specifier_nonarray: I32VEC3 */ -#line 2076 "MachineIndependent/glslang.y" + case 281: /* type_specifier_nonarray: I32VEC3 */ +#line 2109 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 8032 "MachineIndependent/glslang_tab.cpp" +#line 8179 "MachineIndependent/glslang_tab.cpp" break; - case 276: /* type_specifier_nonarray: I32VEC4 */ -#line 2082 "MachineIndependent/glslang.y" + case 282: /* type_specifier_nonarray: I32VEC4 */ +#line 2115 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 8043 "MachineIndependent/glslang_tab.cpp" +#line 8190 "MachineIndependent/glslang_tab.cpp" break; - case 277: /* type_specifier_nonarray: I64VEC2 */ -#line 2088 "MachineIndependent/glslang.y" + case 283: /* type_specifier_nonarray: I64VEC2 */ +#line 2121 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 8054 "MachineIndependent/glslang_tab.cpp" +#line 8201 "MachineIndependent/glslang_tab.cpp" break; - case 278: /* type_specifier_nonarray: I64VEC3 */ -#line 2094 "MachineIndependent/glslang.y" + case 284: /* type_specifier_nonarray: I64VEC3 */ +#line 2127 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 8065 "MachineIndependent/glslang_tab.cpp" +#line 8212 "MachineIndependent/glslang_tab.cpp" break; - case 279: /* type_specifier_nonarray: I64VEC4 */ -#line 2100 "MachineIndependent/glslang.y" + case 285: /* type_specifier_nonarray: I64VEC4 */ +#line 2133 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 8076 "MachineIndependent/glslang_tab.cpp" +#line 8223 "MachineIndependent/glslang_tab.cpp" break; - case 280: /* type_specifier_nonarray: U8VEC2 */ -#line 2106 "MachineIndependent/glslang.y" + case 286: /* type_specifier_nonarray: U8VEC2 */ +#line 2139 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 8087 "MachineIndependent/glslang_tab.cpp" +#line 8234 "MachineIndependent/glslang_tab.cpp" break; - case 281: /* type_specifier_nonarray: U8VEC3 */ -#line 2112 "MachineIndependent/glslang.y" + case 287: /* type_specifier_nonarray: U8VEC3 */ +#line 2145 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(3); } -#line 8098 "MachineIndependent/glslang_tab.cpp" +#line 8245 "MachineIndependent/glslang_tab.cpp" break; - case 282: /* type_specifier_nonarray: U8VEC4 */ -#line 2118 "MachineIndependent/glslang.y" + case 288: /* type_specifier_nonarray: U8VEC4 */ +#line 2151 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 8109 "MachineIndependent/glslang_tab.cpp" +#line 8256 "MachineIndependent/glslang_tab.cpp" break; - case 283: /* type_specifier_nonarray: U16VEC2 */ -#line 2124 "MachineIndependent/glslang.y" + case 289: /* type_specifier_nonarray: U16VEC2 */ +#line 2157 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 8120 "MachineIndependent/glslang_tab.cpp" +#line 8267 "MachineIndependent/glslang_tab.cpp" break; - case 284: /* type_specifier_nonarray: U16VEC3 */ -#line 2130 "MachineIndependent/glslang.y" + case 290: /* type_specifier_nonarray: U16VEC3 */ +#line 2163 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 8131 "MachineIndependent/glslang_tab.cpp" +#line 8278 "MachineIndependent/glslang_tab.cpp" break; - case 285: /* type_specifier_nonarray: U16VEC4 */ -#line 2136 "MachineIndependent/glslang.y" + case 291: /* type_specifier_nonarray: U16VEC4 */ +#line 2169 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 8142 "MachineIndependent/glslang_tab.cpp" +#line 8289 "MachineIndependent/glslang_tab.cpp" break; - case 286: /* type_specifier_nonarray: U32VEC2 */ -#line 2142 "MachineIndependent/glslang.y" + case 292: /* type_specifier_nonarray: U32VEC2 */ +#line 2175 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 8153 "MachineIndependent/glslang_tab.cpp" +#line 8300 "MachineIndependent/glslang_tab.cpp" break; - case 287: /* type_specifier_nonarray: U32VEC3 */ -#line 2148 "MachineIndependent/glslang.y" + case 293: /* type_specifier_nonarray: U32VEC3 */ +#line 2181 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 8164 "MachineIndependent/glslang_tab.cpp" +#line 8311 "MachineIndependent/glslang_tab.cpp" break; - case 288: /* type_specifier_nonarray: U32VEC4 */ -#line 2154 "MachineIndependent/glslang.y" + case 294: /* type_specifier_nonarray: U32VEC4 */ +#line 2187 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 8175 "MachineIndependent/glslang_tab.cpp" +#line 8322 "MachineIndependent/glslang_tab.cpp" break; - case 289: /* type_specifier_nonarray: U64VEC2 */ -#line 2160 "MachineIndependent/glslang.y" + case 295: /* type_specifier_nonarray: U64VEC2 */ +#line 2193 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 8186 "MachineIndependent/glslang_tab.cpp" +#line 8333 "MachineIndependent/glslang_tab.cpp" break; - case 290: /* type_specifier_nonarray: U64VEC3 */ -#line 2166 "MachineIndependent/glslang.y" + case 296: /* type_specifier_nonarray: U64VEC3 */ +#line 2199 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 8197 "MachineIndependent/glslang_tab.cpp" +#line 8344 "MachineIndependent/glslang_tab.cpp" break; - case 291: /* type_specifier_nonarray: U64VEC4 */ -#line 2172 "MachineIndependent/glslang.y" + case 297: /* type_specifier_nonarray: U64VEC4 */ +#line 2205 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 8208 "MachineIndependent/glslang_tab.cpp" +#line 8355 "MachineIndependent/glslang_tab.cpp" break; - case 292: /* type_specifier_nonarray: DMAT2 */ -#line 2178 "MachineIndependent/glslang.y" + case 298: /* type_specifier_nonarray: DMAT2 */ +#line 2211 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8217,11 +8364,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8221 "MachineIndependent/glslang_tab.cpp" +#line 8368 "MachineIndependent/glslang_tab.cpp" break; - case 293: /* type_specifier_nonarray: DMAT3 */ -#line 2186 "MachineIndependent/glslang.y" + case 299: /* type_specifier_nonarray: DMAT3 */ +#line 2219 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8230,11 +8377,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8234 "MachineIndependent/glslang_tab.cpp" +#line 8381 "MachineIndependent/glslang_tab.cpp" break; - case 294: /* type_specifier_nonarray: DMAT4 */ -#line 2194 "MachineIndependent/glslang.y" + case 300: /* type_specifier_nonarray: DMAT4 */ +#line 2227 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8243,11 +8390,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8247 "MachineIndependent/glslang_tab.cpp" +#line 8394 "MachineIndependent/glslang_tab.cpp" break; - case 295: /* type_specifier_nonarray: DMAT2X2 */ -#line 2202 "MachineIndependent/glslang.y" + case 301: /* type_specifier_nonarray: DMAT2X2 */ +#line 2235 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8256,11 +8403,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8260 "MachineIndependent/glslang_tab.cpp" +#line 8407 "MachineIndependent/glslang_tab.cpp" break; - case 296: /* type_specifier_nonarray: DMAT2X3 */ -#line 2210 "MachineIndependent/glslang.y" + case 302: /* type_specifier_nonarray: DMAT2X3 */ +#line 2243 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8269,11 +8416,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 8273 "MachineIndependent/glslang_tab.cpp" +#line 8420 "MachineIndependent/glslang_tab.cpp" break; - case 297: /* type_specifier_nonarray: DMAT2X4 */ -#line 2218 "MachineIndependent/glslang.y" + case 303: /* type_specifier_nonarray: DMAT2X4 */ +#line 2251 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8282,11 +8429,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 8286 "MachineIndependent/glslang_tab.cpp" +#line 8433 "MachineIndependent/glslang_tab.cpp" break; - case 298: /* type_specifier_nonarray: DMAT3X2 */ -#line 2226 "MachineIndependent/glslang.y" + case 304: /* type_specifier_nonarray: DMAT3X2 */ +#line 2259 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8295,11 +8442,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 8299 "MachineIndependent/glslang_tab.cpp" +#line 8446 "MachineIndependent/glslang_tab.cpp" break; - case 299: /* type_specifier_nonarray: DMAT3X3 */ -#line 2234 "MachineIndependent/glslang.y" + case 305: /* type_specifier_nonarray: DMAT3X3 */ +#line 2267 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8308,11 +8455,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8312 "MachineIndependent/glslang_tab.cpp" +#line 8459 "MachineIndependent/glslang_tab.cpp" break; - case 300: /* type_specifier_nonarray: DMAT3X4 */ -#line 2242 "MachineIndependent/glslang.y" + case 306: /* type_specifier_nonarray: DMAT3X4 */ +#line 2275 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8321,11 +8468,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 8325 "MachineIndependent/glslang_tab.cpp" +#line 8472 "MachineIndependent/glslang_tab.cpp" break; - case 301: /* type_specifier_nonarray: DMAT4X2 */ -#line 2250 "MachineIndependent/glslang.y" + case 307: /* type_specifier_nonarray: DMAT4X2 */ +#line 2283 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8334,11 +8481,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 8338 "MachineIndependent/glslang_tab.cpp" +#line 8485 "MachineIndependent/glslang_tab.cpp" break; - case 302: /* type_specifier_nonarray: DMAT4X3 */ -#line 2258 "MachineIndependent/glslang.y" + case 308: /* type_specifier_nonarray: DMAT4X3 */ +#line 2291 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8347,11 +8494,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 8351 "MachineIndependent/glslang_tab.cpp" +#line 8498 "MachineIndependent/glslang_tab.cpp" break; - case 303: /* type_specifier_nonarray: DMAT4X4 */ -#line 2266 "MachineIndependent/glslang.y" + case 309: /* type_specifier_nonarray: DMAT4X4 */ +#line 2299 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8360,2228 +8507,2261 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8364 "MachineIndependent/glslang_tab.cpp" +#line 8511 "MachineIndependent/glslang_tab.cpp" break; - case 304: /* type_specifier_nonarray: F16MAT2 */ -#line 2274 "MachineIndependent/glslang.y" + case 310: /* type_specifier_nonarray: F16MAT2 */ +#line 2307 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 8375 "MachineIndependent/glslang_tab.cpp" +#line 8522 "MachineIndependent/glslang_tab.cpp" break; - case 305: /* type_specifier_nonarray: F16MAT3 */ -#line 2280 "MachineIndependent/glslang.y" + case 311: /* type_specifier_nonarray: F16MAT3 */ +#line 2313 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 8386 "MachineIndependent/glslang_tab.cpp" +#line 8533 "MachineIndependent/glslang_tab.cpp" break; - case 306: /* type_specifier_nonarray: F16MAT4 */ -#line 2286 "MachineIndependent/glslang.y" + case 312: /* type_specifier_nonarray: F16MAT4 */ +#line 2319 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 8397 "MachineIndependent/glslang_tab.cpp" +#line 8544 "MachineIndependent/glslang_tab.cpp" break; - case 307: /* type_specifier_nonarray: F16MAT2X2 */ -#line 2292 "MachineIndependent/glslang.y" + case 313: /* type_specifier_nonarray: F16MAT2X2 */ +#line 2325 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 8408 "MachineIndependent/glslang_tab.cpp" +#line 8555 "MachineIndependent/glslang_tab.cpp" break; - case 308: /* type_specifier_nonarray: F16MAT2X3 */ -#line 2298 "MachineIndependent/glslang.y" + case 314: /* type_specifier_nonarray: F16MAT2X3 */ +#line 2331 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 8419 "MachineIndependent/glslang_tab.cpp" +#line 8566 "MachineIndependent/glslang_tab.cpp" break; - case 309: /* type_specifier_nonarray: F16MAT2X4 */ -#line 2304 "MachineIndependent/glslang.y" + case 315: /* type_specifier_nonarray: F16MAT2X4 */ +#line 2337 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 8430 "MachineIndependent/glslang_tab.cpp" +#line 8577 "MachineIndependent/glslang_tab.cpp" break; - case 310: /* type_specifier_nonarray: F16MAT3X2 */ -#line 2310 "MachineIndependent/glslang.y" + case 316: /* type_specifier_nonarray: F16MAT3X2 */ +#line 2343 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 8441 "MachineIndependent/glslang_tab.cpp" +#line 8588 "MachineIndependent/glslang_tab.cpp" break; - case 311: /* type_specifier_nonarray: F16MAT3X3 */ -#line 2316 "MachineIndependent/glslang.y" + case 317: /* type_specifier_nonarray: F16MAT3X3 */ +#line 2349 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 8452 "MachineIndependent/glslang_tab.cpp" +#line 8599 "MachineIndependent/glslang_tab.cpp" break; - case 312: /* type_specifier_nonarray: F16MAT3X4 */ -#line 2322 "MachineIndependent/glslang.y" + case 318: /* type_specifier_nonarray: F16MAT3X4 */ +#line 2355 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 8463 "MachineIndependent/glslang_tab.cpp" +#line 8610 "MachineIndependent/glslang_tab.cpp" break; - case 313: /* type_specifier_nonarray: F16MAT4X2 */ -#line 2328 "MachineIndependent/glslang.y" + case 319: /* type_specifier_nonarray: F16MAT4X2 */ +#line 2361 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 8474 "MachineIndependent/glslang_tab.cpp" +#line 8621 "MachineIndependent/glslang_tab.cpp" break; - case 314: /* type_specifier_nonarray: F16MAT4X3 */ -#line 2334 "MachineIndependent/glslang.y" + case 320: /* type_specifier_nonarray: F16MAT4X3 */ +#line 2367 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 8485 "MachineIndependent/glslang_tab.cpp" +#line 8632 "MachineIndependent/glslang_tab.cpp" break; - case 315: /* type_specifier_nonarray: F16MAT4X4 */ -#line 2340 "MachineIndependent/glslang.y" + case 321: /* type_specifier_nonarray: F16MAT4X4 */ +#line 2373 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 8496 "MachineIndependent/glslang_tab.cpp" +#line 8643 "MachineIndependent/glslang_tab.cpp" break; - case 316: /* type_specifier_nonarray: F32MAT2 */ -#line 2346 "MachineIndependent/glslang.y" + case 322: /* type_specifier_nonarray: F32MAT2 */ +#line 2379 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 8507 "MachineIndependent/glslang_tab.cpp" +#line 8654 "MachineIndependent/glslang_tab.cpp" break; - case 317: /* type_specifier_nonarray: F32MAT3 */ -#line 2352 "MachineIndependent/glslang.y" + case 323: /* type_specifier_nonarray: F32MAT3 */ +#line 2385 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 8518 "MachineIndependent/glslang_tab.cpp" +#line 8665 "MachineIndependent/glslang_tab.cpp" break; - case 318: /* type_specifier_nonarray: F32MAT4 */ -#line 2358 "MachineIndependent/glslang.y" + case 324: /* type_specifier_nonarray: F32MAT4 */ +#line 2391 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 8529 "MachineIndependent/glslang_tab.cpp" +#line 8676 "MachineIndependent/glslang_tab.cpp" break; - case 319: /* type_specifier_nonarray: F32MAT2X2 */ -#line 2364 "MachineIndependent/glslang.y" + case 325: /* type_specifier_nonarray: F32MAT2X2 */ +#line 2397 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 8540 "MachineIndependent/glslang_tab.cpp" +#line 8687 "MachineIndependent/glslang_tab.cpp" break; - case 320: /* type_specifier_nonarray: F32MAT2X3 */ -#line 2370 "MachineIndependent/glslang.y" + case 326: /* type_specifier_nonarray: F32MAT2X3 */ +#line 2403 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 8551 "MachineIndependent/glslang_tab.cpp" +#line 8698 "MachineIndependent/glslang_tab.cpp" break; - case 321: /* type_specifier_nonarray: F32MAT2X4 */ -#line 2376 "MachineIndependent/glslang.y" + case 327: /* type_specifier_nonarray: F32MAT2X4 */ +#line 2409 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 8562 "MachineIndependent/glslang_tab.cpp" +#line 8709 "MachineIndependent/glslang_tab.cpp" break; - case 322: /* type_specifier_nonarray: F32MAT3X2 */ -#line 2382 "MachineIndependent/glslang.y" + case 328: /* type_specifier_nonarray: F32MAT3X2 */ +#line 2415 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 8573 "MachineIndependent/glslang_tab.cpp" +#line 8720 "MachineIndependent/glslang_tab.cpp" break; - case 323: /* type_specifier_nonarray: F32MAT3X3 */ -#line 2388 "MachineIndependent/glslang.y" + case 329: /* type_specifier_nonarray: F32MAT3X3 */ +#line 2421 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 8584 "MachineIndependent/glslang_tab.cpp" +#line 8731 "MachineIndependent/glslang_tab.cpp" break; - case 324: /* type_specifier_nonarray: F32MAT3X4 */ -#line 2394 "MachineIndependent/glslang.y" + case 330: /* type_specifier_nonarray: F32MAT3X4 */ +#line 2427 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 8595 "MachineIndependent/glslang_tab.cpp" +#line 8742 "MachineIndependent/glslang_tab.cpp" break; - case 325: /* type_specifier_nonarray: F32MAT4X2 */ -#line 2400 "MachineIndependent/glslang.y" + case 331: /* type_specifier_nonarray: F32MAT4X2 */ +#line 2433 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 8606 "MachineIndependent/glslang_tab.cpp" +#line 8753 "MachineIndependent/glslang_tab.cpp" break; - case 326: /* type_specifier_nonarray: F32MAT4X3 */ -#line 2406 "MachineIndependent/glslang.y" + case 332: /* type_specifier_nonarray: F32MAT4X3 */ +#line 2439 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 8617 "MachineIndependent/glslang_tab.cpp" +#line 8764 "MachineIndependent/glslang_tab.cpp" break; - case 327: /* type_specifier_nonarray: F32MAT4X4 */ -#line 2412 "MachineIndependent/glslang.y" + case 333: /* type_specifier_nonarray: F32MAT4X4 */ +#line 2445 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 8628 "MachineIndependent/glslang_tab.cpp" +#line 8775 "MachineIndependent/glslang_tab.cpp" break; - case 328: /* type_specifier_nonarray: F64MAT2 */ -#line 2418 "MachineIndependent/glslang.y" + case 334: /* type_specifier_nonarray: F64MAT2 */ +#line 2451 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8639 "MachineIndependent/glslang_tab.cpp" +#line 8786 "MachineIndependent/glslang_tab.cpp" break; - case 329: /* type_specifier_nonarray: F64MAT3 */ -#line 2424 "MachineIndependent/glslang.y" + case 335: /* type_specifier_nonarray: F64MAT3 */ +#line 2457 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8650 "MachineIndependent/glslang_tab.cpp" +#line 8797 "MachineIndependent/glslang_tab.cpp" break; - case 330: /* type_specifier_nonarray: F64MAT4 */ -#line 2430 "MachineIndependent/glslang.y" + case 336: /* type_specifier_nonarray: F64MAT4 */ +#line 2463 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8661 "MachineIndependent/glslang_tab.cpp" +#line 8808 "MachineIndependent/glslang_tab.cpp" break; - case 331: /* type_specifier_nonarray: F64MAT2X2 */ -#line 2436 "MachineIndependent/glslang.y" + case 337: /* type_specifier_nonarray: F64MAT2X2 */ +#line 2469 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8672 "MachineIndependent/glslang_tab.cpp" +#line 8819 "MachineIndependent/glslang_tab.cpp" break; - case 332: /* type_specifier_nonarray: F64MAT2X3 */ -#line 2442 "MachineIndependent/glslang.y" + case 338: /* type_specifier_nonarray: F64MAT2X3 */ +#line 2475 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 8683 "MachineIndependent/glslang_tab.cpp" +#line 8830 "MachineIndependent/glslang_tab.cpp" break; - case 333: /* type_specifier_nonarray: F64MAT2X4 */ -#line 2448 "MachineIndependent/glslang.y" + case 339: /* type_specifier_nonarray: F64MAT2X4 */ +#line 2481 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 8694 "MachineIndependent/glslang_tab.cpp" +#line 8841 "MachineIndependent/glslang_tab.cpp" break; - case 334: /* type_specifier_nonarray: F64MAT3X2 */ -#line 2454 "MachineIndependent/glslang.y" + case 340: /* type_specifier_nonarray: F64MAT3X2 */ +#line 2487 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 8705 "MachineIndependent/glslang_tab.cpp" +#line 8852 "MachineIndependent/glslang_tab.cpp" break; - case 335: /* type_specifier_nonarray: F64MAT3X3 */ -#line 2460 "MachineIndependent/glslang.y" + case 341: /* type_specifier_nonarray: F64MAT3X3 */ +#line 2493 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8716 "MachineIndependent/glslang_tab.cpp" +#line 8863 "MachineIndependent/glslang_tab.cpp" break; - case 336: /* type_specifier_nonarray: F64MAT3X4 */ -#line 2466 "MachineIndependent/glslang.y" + case 342: /* type_specifier_nonarray: F64MAT3X4 */ +#line 2499 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 8727 "MachineIndependent/glslang_tab.cpp" +#line 8874 "MachineIndependent/glslang_tab.cpp" break; - case 337: /* type_specifier_nonarray: F64MAT4X2 */ -#line 2472 "MachineIndependent/glslang.y" + case 343: /* type_specifier_nonarray: F64MAT4X2 */ +#line 2505 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 8738 "MachineIndependent/glslang_tab.cpp" +#line 8885 "MachineIndependent/glslang_tab.cpp" break; - case 338: /* type_specifier_nonarray: F64MAT4X3 */ -#line 2478 "MachineIndependent/glslang.y" + case 344: /* type_specifier_nonarray: F64MAT4X3 */ +#line 2511 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 8749 "MachineIndependent/glslang_tab.cpp" +#line 8896 "MachineIndependent/glslang_tab.cpp" break; - case 339: /* type_specifier_nonarray: F64MAT4X4 */ -#line 2484 "MachineIndependent/glslang.y" + case 345: /* type_specifier_nonarray: F64MAT4X4 */ +#line 2517 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8760 "MachineIndependent/glslang_tab.cpp" +#line 8907 "MachineIndependent/glslang_tab.cpp" break; - case 340: /* type_specifier_nonarray: ACCSTRUCTNV */ -#line 2490 "MachineIndependent/glslang.y" + case 346: /* type_specifier_nonarray: ACCSTRUCTNV */ +#line 2523 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8769 "MachineIndependent/glslang_tab.cpp" +#line 8916 "MachineIndependent/glslang_tab.cpp" break; - case 341: /* type_specifier_nonarray: ACCSTRUCTEXT */ -#line 2494 "MachineIndependent/glslang.y" + case 347: /* type_specifier_nonarray: ACCSTRUCTEXT */ +#line 2527 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8778 "MachineIndependent/glslang_tab.cpp" +#line 8925 "MachineIndependent/glslang_tab.cpp" break; - case 342: /* type_specifier_nonarray: RAYQUERYEXT */ -#line 2498 "MachineIndependent/glslang.y" + case 348: /* type_specifier_nonarray: RAYQUERYEXT */ +#line 2531 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 8787 "MachineIndependent/glslang_tab.cpp" +#line 8934 "MachineIndependent/glslang_tab.cpp" break; - case 343: /* type_specifier_nonarray: ATOMIC_UINT */ -#line 2502 "MachineIndependent/glslang.y" + case 349: /* type_specifier_nonarray: ATOMIC_UINT */ +#line 2535 "MachineIndependent/glslang.y" { parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 8797 "MachineIndependent/glslang_tab.cpp" +#line 8944 "MachineIndependent/glslang_tab.cpp" break; - case 344: /* type_specifier_nonarray: SAMPLER1D */ -#line 2507 "MachineIndependent/glslang.y" + case 350: /* type_specifier_nonarray: SAMPLER1D */ +#line 2540 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 8807 "MachineIndependent/glslang_tab.cpp" +#line 8954 "MachineIndependent/glslang_tab.cpp" break; - case 345: /* type_specifier_nonarray: SAMPLER2D */ -#line 2513 "MachineIndependent/glslang.y" + case 351: /* type_specifier_nonarray: SAMPLER2D */ +#line 2545 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 8817 "MachineIndependent/glslang_tab.cpp" +#line 8964 "MachineIndependent/glslang_tab.cpp" break; - case 346: /* type_specifier_nonarray: SAMPLER3D */ -#line 2518 "MachineIndependent/glslang.y" + case 352: /* type_specifier_nonarray: SAMPLER3D */ +#line 2550 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 8827 "MachineIndependent/glslang_tab.cpp" +#line 8974 "MachineIndependent/glslang_tab.cpp" break; - case 347: /* type_specifier_nonarray: SAMPLERCUBE */ -#line 2523 "MachineIndependent/glslang.y" + case 353: /* type_specifier_nonarray: SAMPLERCUBE */ +#line 2555 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 8837 "MachineIndependent/glslang_tab.cpp" +#line 8984 "MachineIndependent/glslang_tab.cpp" break; - case 348: /* type_specifier_nonarray: SAMPLER2DSHADOW */ -#line 2528 "MachineIndependent/glslang.y" + case 354: /* type_specifier_nonarray: SAMPLER2DSHADOW */ +#line 2560 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 8847 "MachineIndependent/glslang_tab.cpp" +#line 8994 "MachineIndependent/glslang_tab.cpp" break; - case 349: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ -#line 2533 "MachineIndependent/glslang.y" + case 355: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ +#line 2565 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 8857 "MachineIndependent/glslang_tab.cpp" +#line 9004 "MachineIndependent/glslang_tab.cpp" break; - case 350: /* type_specifier_nonarray: SAMPLER2DARRAY */ -#line 2538 "MachineIndependent/glslang.y" + case 356: /* type_specifier_nonarray: SAMPLER2DARRAY */ +#line 2570 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 8867 "MachineIndependent/glslang_tab.cpp" +#line 9014 "MachineIndependent/glslang_tab.cpp" break; - case 351: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ -#line 2543 "MachineIndependent/glslang.y" + case 357: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ +#line 2575 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 8877 "MachineIndependent/glslang_tab.cpp" +#line 9024 "MachineIndependent/glslang_tab.cpp" break; - case 352: /* type_specifier_nonarray: SAMPLER1DSHADOW */ -#line 2549 "MachineIndependent/glslang.y" + case 358: /* type_specifier_nonarray: SAMPLER1DSHADOW */ +#line 2580 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 8887 "MachineIndependent/glslang_tab.cpp" +#line 9034 "MachineIndependent/glslang_tab.cpp" break; - case 353: /* type_specifier_nonarray: SAMPLER1DARRAY */ -#line 2554 "MachineIndependent/glslang.y" + case 359: /* type_specifier_nonarray: SAMPLER1DARRAY */ +#line 2585 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 8897 "MachineIndependent/glslang_tab.cpp" +#line 9044 "MachineIndependent/glslang_tab.cpp" break; - case 354: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ -#line 2559 "MachineIndependent/glslang.y" + case 360: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ +#line 2590 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 8907 "MachineIndependent/glslang_tab.cpp" +#line 9054 "MachineIndependent/glslang_tab.cpp" break; - case 355: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ -#line 2564 "MachineIndependent/glslang.y" + case 361: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ +#line 2595 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 8917 "MachineIndependent/glslang_tab.cpp" +#line 9064 "MachineIndependent/glslang_tab.cpp" break; - case 356: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ -#line 2569 "MachineIndependent/glslang.y" + case 362: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ +#line 2600 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 8927 "MachineIndependent/glslang_tab.cpp" +#line 9074 "MachineIndependent/glslang_tab.cpp" break; - case 357: /* type_specifier_nonarray: F16SAMPLER1D */ -#line 2574 "MachineIndependent/glslang.y" + case 363: /* type_specifier_nonarray: F16SAMPLER1D */ +#line 2605 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); } -#line 8938 "MachineIndependent/glslang_tab.cpp" +#line 9085 "MachineIndependent/glslang_tab.cpp" break; - case 358: /* type_specifier_nonarray: F16SAMPLER2D */ -#line 2580 "MachineIndependent/glslang.y" + case 364: /* type_specifier_nonarray: F16SAMPLER2D */ +#line 2611 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); } -#line 8949 "MachineIndependent/glslang_tab.cpp" +#line 9096 "MachineIndependent/glslang_tab.cpp" break; - case 359: /* type_specifier_nonarray: F16SAMPLER3D */ -#line 2586 "MachineIndependent/glslang.y" + case 365: /* type_specifier_nonarray: F16SAMPLER3D */ +#line 2617 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); } -#line 8960 "MachineIndependent/glslang_tab.cpp" +#line 9107 "MachineIndependent/glslang_tab.cpp" break; - case 360: /* type_specifier_nonarray: F16SAMPLERCUBE */ -#line 2592 "MachineIndependent/glslang.y" + case 366: /* type_specifier_nonarray: F16SAMPLERCUBE */ +#line 2623 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); } -#line 8971 "MachineIndependent/glslang_tab.cpp" +#line 9118 "MachineIndependent/glslang_tab.cpp" break; - case 361: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ -#line 2598 "MachineIndependent/glslang.y" + case 367: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ +#line 2629 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); } -#line 8982 "MachineIndependent/glslang_tab.cpp" +#line 9129 "MachineIndependent/glslang_tab.cpp" break; - case 362: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ -#line 2604 "MachineIndependent/glslang.y" + case 368: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ +#line 2635 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); } -#line 8993 "MachineIndependent/glslang_tab.cpp" +#line 9140 "MachineIndependent/glslang_tab.cpp" break; - case 363: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ -#line 2610 "MachineIndependent/glslang.y" + case 369: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ +#line 2641 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); } -#line 9004 "MachineIndependent/glslang_tab.cpp" +#line 9151 "MachineIndependent/glslang_tab.cpp" break; - case 364: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ -#line 2616 "MachineIndependent/glslang.y" + case 370: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ +#line 2647 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); } -#line 9015 "MachineIndependent/glslang_tab.cpp" +#line 9162 "MachineIndependent/glslang_tab.cpp" break; - case 365: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ -#line 2622 "MachineIndependent/glslang.y" + case 371: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ +#line 2653 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); } -#line 9026 "MachineIndependent/glslang_tab.cpp" +#line 9173 "MachineIndependent/glslang_tab.cpp" break; - case 366: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ -#line 2628 "MachineIndependent/glslang.y" + case 372: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ +#line 2659 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); } -#line 9037 "MachineIndependent/glslang_tab.cpp" +#line 9184 "MachineIndependent/glslang_tab.cpp" break; - case 367: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ -#line 2634 "MachineIndependent/glslang.y" + case 373: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ +#line 2665 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); } -#line 9048 "MachineIndependent/glslang_tab.cpp" +#line 9195 "MachineIndependent/glslang_tab.cpp" break; - case 368: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ -#line 2640 "MachineIndependent/glslang.y" + case 374: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ +#line 2671 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); } -#line 9059 "MachineIndependent/glslang_tab.cpp" +#line 9206 "MachineIndependent/glslang_tab.cpp" break; - case 369: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ -#line 2646 "MachineIndependent/glslang.y" + case 375: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ +#line 2677 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); } -#line 9070 "MachineIndependent/glslang_tab.cpp" +#line 9217 "MachineIndependent/glslang_tab.cpp" break; - case 370: /* type_specifier_nonarray: ISAMPLER1D */ -#line 2652 "MachineIndependent/glslang.y" + case 376: /* type_specifier_nonarray: ISAMPLER1D */ +#line 2683 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 9080 "MachineIndependent/glslang_tab.cpp" +#line 9227 "MachineIndependent/glslang_tab.cpp" break; - case 371: /* type_specifier_nonarray: ISAMPLER2D */ -#line 2658 "MachineIndependent/glslang.y" + case 377: /* type_specifier_nonarray: ISAMPLER2D */ +#line 2688 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 9090 "MachineIndependent/glslang_tab.cpp" +#line 9237 "MachineIndependent/glslang_tab.cpp" break; - case 372: /* type_specifier_nonarray: ISAMPLER3D */ -#line 2663 "MachineIndependent/glslang.y" + case 378: /* type_specifier_nonarray: ISAMPLER3D */ +#line 2693 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 9100 "MachineIndependent/glslang_tab.cpp" +#line 9247 "MachineIndependent/glslang_tab.cpp" break; - case 373: /* type_specifier_nonarray: ISAMPLERCUBE */ -#line 2668 "MachineIndependent/glslang.y" + case 379: /* type_specifier_nonarray: ISAMPLERCUBE */ +#line 2698 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 9110 "MachineIndependent/glslang_tab.cpp" +#line 9257 "MachineIndependent/glslang_tab.cpp" break; - case 374: /* type_specifier_nonarray: ISAMPLER2DARRAY */ -#line 2673 "MachineIndependent/glslang.y" + case 380: /* type_specifier_nonarray: ISAMPLER2DARRAY */ +#line 2703 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 9120 "MachineIndependent/glslang_tab.cpp" +#line 9267 "MachineIndependent/glslang_tab.cpp" break; - case 375: /* type_specifier_nonarray: USAMPLER2D */ -#line 2678 "MachineIndependent/glslang.y" + case 381: /* type_specifier_nonarray: USAMPLER2D */ +#line 2708 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 9130 "MachineIndependent/glslang_tab.cpp" +#line 9277 "MachineIndependent/glslang_tab.cpp" break; - case 376: /* type_specifier_nonarray: USAMPLER3D */ -#line 2683 "MachineIndependent/glslang.y" + case 382: /* type_specifier_nonarray: USAMPLER3D */ +#line 2713 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 9140 "MachineIndependent/glslang_tab.cpp" +#line 9287 "MachineIndependent/glslang_tab.cpp" break; - case 377: /* type_specifier_nonarray: USAMPLERCUBE */ -#line 2688 "MachineIndependent/glslang.y" + case 383: /* type_specifier_nonarray: USAMPLERCUBE */ +#line 2718 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 9150 "MachineIndependent/glslang_tab.cpp" +#line 9297 "MachineIndependent/glslang_tab.cpp" break; - case 378: /* type_specifier_nonarray: ISAMPLER1DARRAY */ -#line 2694 "MachineIndependent/glslang.y" + case 384: /* type_specifier_nonarray: ISAMPLER1DARRAY */ +#line 2723 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 9160 "MachineIndependent/glslang_tab.cpp" +#line 9307 "MachineIndependent/glslang_tab.cpp" break; - case 379: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ -#line 2699 "MachineIndependent/glslang.y" + case 385: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ +#line 2728 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 9170 "MachineIndependent/glslang_tab.cpp" +#line 9317 "MachineIndependent/glslang_tab.cpp" break; - case 380: /* type_specifier_nonarray: USAMPLER1D */ -#line 2704 "MachineIndependent/glslang.y" + case 386: /* type_specifier_nonarray: USAMPLER1D */ +#line 2733 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 9180 "MachineIndependent/glslang_tab.cpp" +#line 9327 "MachineIndependent/glslang_tab.cpp" break; - case 381: /* type_specifier_nonarray: USAMPLER1DARRAY */ -#line 2709 "MachineIndependent/glslang.y" + case 387: /* type_specifier_nonarray: USAMPLER1DARRAY */ +#line 2738 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 9190 "MachineIndependent/glslang_tab.cpp" +#line 9337 "MachineIndependent/glslang_tab.cpp" break; - case 382: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ -#line 2714 "MachineIndependent/glslang.y" + case 388: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ +#line 2743 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 9200 "MachineIndependent/glslang_tab.cpp" +#line 9347 "MachineIndependent/glslang_tab.cpp" break; - case 383: /* type_specifier_nonarray: TEXTURECUBEARRAY */ -#line 2719 "MachineIndependent/glslang.y" + case 389: /* type_specifier_nonarray: TEXTURECUBEARRAY */ +#line 2748 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 9210 "MachineIndependent/glslang_tab.cpp" +#line 9357 "MachineIndependent/glslang_tab.cpp" break; - case 384: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ -#line 2724 "MachineIndependent/glslang.y" + case 390: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ +#line 2753 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 9220 "MachineIndependent/glslang_tab.cpp" +#line 9367 "MachineIndependent/glslang_tab.cpp" break; - case 385: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ -#line 2729 "MachineIndependent/glslang.y" + case 391: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ +#line 2758 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 9230 "MachineIndependent/glslang_tab.cpp" +#line 9377 "MachineIndependent/glslang_tab.cpp" break; - case 386: /* type_specifier_nonarray: USAMPLER2DARRAY */ -#line 2735 "MachineIndependent/glslang.y" + case 392: /* type_specifier_nonarray: USAMPLER2DARRAY */ +#line 2763 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 9240 "MachineIndependent/glslang_tab.cpp" +#line 9387 "MachineIndependent/glslang_tab.cpp" break; - case 387: /* type_specifier_nonarray: TEXTURE2D */ -#line 2740 "MachineIndependent/glslang.y" + case 393: /* type_specifier_nonarray: TEXTURE2D */ +#line 2768 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 9250 "MachineIndependent/glslang_tab.cpp" +#line 9397 "MachineIndependent/glslang_tab.cpp" break; - case 388: /* type_specifier_nonarray: TEXTURE3D */ -#line 2745 "MachineIndependent/glslang.y" + case 394: /* type_specifier_nonarray: TEXTURE3D */ +#line 2773 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 9260 "MachineIndependent/glslang_tab.cpp" +#line 9407 "MachineIndependent/glslang_tab.cpp" break; - case 389: /* type_specifier_nonarray: TEXTURE2DARRAY */ -#line 2750 "MachineIndependent/glslang.y" + case 395: /* type_specifier_nonarray: TEXTURE2DARRAY */ +#line 2778 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 9270 "MachineIndependent/glslang_tab.cpp" +#line 9417 "MachineIndependent/glslang_tab.cpp" break; - case 390: /* type_specifier_nonarray: TEXTURECUBE */ -#line 2755 "MachineIndependent/glslang.y" + case 396: /* type_specifier_nonarray: TEXTURECUBE */ +#line 2783 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 9280 "MachineIndependent/glslang_tab.cpp" +#line 9427 "MachineIndependent/glslang_tab.cpp" break; - case 391: /* type_specifier_nonarray: ITEXTURE2D */ -#line 2760 "MachineIndependent/glslang.y" + case 397: /* type_specifier_nonarray: ITEXTURE2D */ +#line 2788 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 9290 "MachineIndependent/glslang_tab.cpp" +#line 9437 "MachineIndependent/glslang_tab.cpp" break; - case 392: /* type_specifier_nonarray: ITEXTURE3D */ -#line 2765 "MachineIndependent/glslang.y" + case 398: /* type_specifier_nonarray: ITEXTURE3D */ +#line 2793 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 9300 "MachineIndependent/glslang_tab.cpp" +#line 9447 "MachineIndependent/glslang_tab.cpp" break; - case 393: /* type_specifier_nonarray: ITEXTURECUBE */ -#line 2770 "MachineIndependent/glslang.y" + case 399: /* type_specifier_nonarray: ITEXTURECUBE */ +#line 2798 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 9310 "MachineIndependent/glslang_tab.cpp" +#line 9457 "MachineIndependent/glslang_tab.cpp" break; - case 394: /* type_specifier_nonarray: ITEXTURE2DARRAY */ -#line 2775 "MachineIndependent/glslang.y" + case 400: /* type_specifier_nonarray: ITEXTURE2DARRAY */ +#line 2803 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 9320 "MachineIndependent/glslang_tab.cpp" +#line 9467 "MachineIndependent/glslang_tab.cpp" break; - case 395: /* type_specifier_nonarray: UTEXTURE2D */ -#line 2780 "MachineIndependent/glslang.y" + case 401: /* type_specifier_nonarray: UTEXTURE2D */ +#line 2808 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 9330 "MachineIndependent/glslang_tab.cpp" +#line 9477 "MachineIndependent/glslang_tab.cpp" break; - case 396: /* type_specifier_nonarray: UTEXTURE3D */ -#line 2785 "MachineIndependent/glslang.y" + case 402: /* type_specifier_nonarray: UTEXTURE3D */ +#line 2813 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 9340 "MachineIndependent/glslang_tab.cpp" +#line 9487 "MachineIndependent/glslang_tab.cpp" break; - case 397: /* type_specifier_nonarray: UTEXTURECUBE */ -#line 2790 "MachineIndependent/glslang.y" + case 403: /* type_specifier_nonarray: UTEXTURECUBE */ +#line 2818 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 9350 "MachineIndependent/glslang_tab.cpp" +#line 9497 "MachineIndependent/glslang_tab.cpp" break; - case 398: /* type_specifier_nonarray: UTEXTURE2DARRAY */ -#line 2795 "MachineIndependent/glslang.y" + case 404: /* type_specifier_nonarray: UTEXTURE2DARRAY */ +#line 2823 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 9360 "MachineIndependent/glslang_tab.cpp" +#line 9507 "MachineIndependent/glslang_tab.cpp" break; - case 399: /* type_specifier_nonarray: SAMPLER */ -#line 2800 "MachineIndependent/glslang.y" + case 405: /* type_specifier_nonarray: SAMPLER */ +#line 2828 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 9370 "MachineIndependent/glslang_tab.cpp" +#line 9517 "MachineIndependent/glslang_tab.cpp" break; - case 400: /* type_specifier_nonarray: SAMPLERSHADOW */ -#line 2805 "MachineIndependent/glslang.y" + case 406: /* type_specifier_nonarray: SAMPLERSHADOW */ +#line 2833 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 9380 "MachineIndependent/glslang_tab.cpp" +#line 9527 "MachineIndependent/glslang_tab.cpp" break; - case 401: /* type_specifier_nonarray: SAMPLER2DRECT */ -#line 2811 "MachineIndependent/glslang.y" + case 407: /* type_specifier_nonarray: SAMPLER2DRECT */ +#line 2838 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 9390 "MachineIndependent/glslang_tab.cpp" +#line 9537 "MachineIndependent/glslang_tab.cpp" break; - case 402: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ -#line 2816 "MachineIndependent/glslang.y" + case 408: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ +#line 2843 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 9400 "MachineIndependent/glslang_tab.cpp" +#line 9547 "MachineIndependent/glslang_tab.cpp" break; - case 403: /* type_specifier_nonarray: F16SAMPLER2DRECT */ -#line 2821 "MachineIndependent/glslang.y" + case 409: /* type_specifier_nonarray: F16SAMPLER2DRECT */ +#line 2848 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); } -#line 9411 "MachineIndependent/glslang_tab.cpp" +#line 9558 "MachineIndependent/glslang_tab.cpp" break; - case 404: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ -#line 2827 "MachineIndependent/glslang.y" + case 410: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ +#line 2854 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); } -#line 9422 "MachineIndependent/glslang_tab.cpp" +#line 9569 "MachineIndependent/glslang_tab.cpp" break; - case 405: /* type_specifier_nonarray: ISAMPLER2DRECT */ -#line 2833 "MachineIndependent/glslang.y" + case 411: /* type_specifier_nonarray: ISAMPLER2DRECT */ +#line 2860 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 9432 "MachineIndependent/glslang_tab.cpp" +#line 9579 "MachineIndependent/glslang_tab.cpp" break; - case 406: /* type_specifier_nonarray: USAMPLER2DRECT */ -#line 2838 "MachineIndependent/glslang.y" + case 412: /* type_specifier_nonarray: USAMPLER2DRECT */ +#line 2865 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 9442 "MachineIndependent/glslang_tab.cpp" +#line 9589 "MachineIndependent/glslang_tab.cpp" break; - case 407: /* type_specifier_nonarray: SAMPLERBUFFER */ -#line 2843 "MachineIndependent/glslang.y" + case 413: /* type_specifier_nonarray: SAMPLERBUFFER */ +#line 2870 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 9452 "MachineIndependent/glslang_tab.cpp" +#line 9599 "MachineIndependent/glslang_tab.cpp" break; - case 408: /* type_specifier_nonarray: F16SAMPLERBUFFER */ -#line 2848 "MachineIndependent/glslang.y" + case 414: /* type_specifier_nonarray: F16SAMPLERBUFFER */ +#line 2875 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); } -#line 9463 "MachineIndependent/glslang_tab.cpp" +#line 9610 "MachineIndependent/glslang_tab.cpp" break; - case 409: /* type_specifier_nonarray: ISAMPLERBUFFER */ -#line 2854 "MachineIndependent/glslang.y" + case 415: /* type_specifier_nonarray: ISAMPLERBUFFER */ +#line 2881 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 9473 "MachineIndependent/glslang_tab.cpp" +#line 9620 "MachineIndependent/glslang_tab.cpp" break; - case 410: /* type_specifier_nonarray: USAMPLERBUFFER */ -#line 2859 "MachineIndependent/glslang.y" + case 416: /* type_specifier_nonarray: USAMPLERBUFFER */ +#line 2886 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 9483 "MachineIndependent/glslang_tab.cpp" +#line 9630 "MachineIndependent/glslang_tab.cpp" break; - case 411: /* type_specifier_nonarray: SAMPLER2DMS */ -#line 2864 "MachineIndependent/glslang.y" + case 417: /* type_specifier_nonarray: SAMPLER2DMS */ +#line 2891 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 9493 "MachineIndependent/glslang_tab.cpp" +#line 9640 "MachineIndependent/glslang_tab.cpp" break; - case 412: /* type_specifier_nonarray: F16SAMPLER2DMS */ -#line 2869 "MachineIndependent/glslang.y" + case 418: /* type_specifier_nonarray: F16SAMPLER2DMS */ +#line 2896 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); } -#line 9504 "MachineIndependent/glslang_tab.cpp" +#line 9651 "MachineIndependent/glslang_tab.cpp" break; - case 413: /* type_specifier_nonarray: ISAMPLER2DMS */ -#line 2875 "MachineIndependent/glslang.y" + case 419: /* type_specifier_nonarray: ISAMPLER2DMS */ +#line 2902 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 9514 "MachineIndependent/glslang_tab.cpp" +#line 9661 "MachineIndependent/glslang_tab.cpp" break; - case 414: /* type_specifier_nonarray: USAMPLER2DMS */ -#line 2880 "MachineIndependent/glslang.y" + case 420: /* type_specifier_nonarray: USAMPLER2DMS */ +#line 2907 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 9524 "MachineIndependent/glslang_tab.cpp" +#line 9671 "MachineIndependent/glslang_tab.cpp" break; - case 415: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ -#line 2885 "MachineIndependent/glslang.y" + case 421: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ +#line 2912 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 9534 "MachineIndependent/glslang_tab.cpp" +#line 9681 "MachineIndependent/glslang_tab.cpp" break; - case 416: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ -#line 2890 "MachineIndependent/glslang.y" + case 422: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ +#line 2917 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); } -#line 9545 "MachineIndependent/glslang_tab.cpp" +#line 9692 "MachineIndependent/glslang_tab.cpp" break; - case 417: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ -#line 2896 "MachineIndependent/glslang.y" + case 423: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ +#line 2923 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 9555 "MachineIndependent/glslang_tab.cpp" +#line 9702 "MachineIndependent/glslang_tab.cpp" break; - case 418: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ -#line 2901 "MachineIndependent/glslang.y" + case 424: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ +#line 2928 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 9565 "MachineIndependent/glslang_tab.cpp" +#line 9712 "MachineIndependent/glslang_tab.cpp" break; - case 419: /* type_specifier_nonarray: TEXTURE1D */ -#line 2906 "MachineIndependent/glslang.y" + case 425: /* type_specifier_nonarray: TEXTURE1D */ +#line 2933 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 9575 "MachineIndependent/glslang_tab.cpp" +#line 9722 "MachineIndependent/glslang_tab.cpp" break; - case 420: /* type_specifier_nonarray: F16TEXTURE1D */ -#line 2911 "MachineIndependent/glslang.y" + case 426: /* type_specifier_nonarray: F16TEXTURE1D */ +#line 2938 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); } -#line 9586 "MachineIndependent/glslang_tab.cpp" +#line 9733 "MachineIndependent/glslang_tab.cpp" break; - case 421: /* type_specifier_nonarray: F16TEXTURE2D */ -#line 2917 "MachineIndependent/glslang.y" + case 427: /* type_specifier_nonarray: F16TEXTURE2D */ +#line 2944 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); } -#line 9597 "MachineIndependent/glslang_tab.cpp" +#line 9744 "MachineIndependent/glslang_tab.cpp" break; - case 422: /* type_specifier_nonarray: F16TEXTURE3D */ -#line 2923 "MachineIndependent/glslang.y" + case 428: /* type_specifier_nonarray: F16TEXTURE3D */ +#line 2950 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); } -#line 9608 "MachineIndependent/glslang_tab.cpp" +#line 9755 "MachineIndependent/glslang_tab.cpp" break; - case 423: /* type_specifier_nonarray: F16TEXTURECUBE */ -#line 2929 "MachineIndependent/glslang.y" + case 429: /* type_specifier_nonarray: F16TEXTURECUBE */ +#line 2956 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); } -#line 9619 "MachineIndependent/glslang_tab.cpp" +#line 9766 "MachineIndependent/glslang_tab.cpp" break; - case 424: /* type_specifier_nonarray: TEXTURE1DARRAY */ -#line 2935 "MachineIndependent/glslang.y" + case 430: /* type_specifier_nonarray: TEXTURE1DARRAY */ +#line 2962 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 9629 "MachineIndependent/glslang_tab.cpp" +#line 9776 "MachineIndependent/glslang_tab.cpp" break; - case 425: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ -#line 2940 "MachineIndependent/glslang.y" + case 431: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ +#line 2967 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); } -#line 9640 "MachineIndependent/glslang_tab.cpp" +#line 9787 "MachineIndependent/glslang_tab.cpp" break; - case 426: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ -#line 2946 "MachineIndependent/glslang.y" + case 432: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ +#line 2973 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); } -#line 9651 "MachineIndependent/glslang_tab.cpp" +#line 9798 "MachineIndependent/glslang_tab.cpp" break; - case 427: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ -#line 2952 "MachineIndependent/glslang.y" + case 433: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ +#line 2979 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); } -#line 9662 "MachineIndependent/glslang_tab.cpp" +#line 9809 "MachineIndependent/glslang_tab.cpp" break; - case 428: /* type_specifier_nonarray: ITEXTURE1D */ -#line 2958 "MachineIndependent/glslang.y" + case 434: /* type_specifier_nonarray: ITEXTURE1D */ +#line 2985 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 9672 "MachineIndependent/glslang_tab.cpp" +#line 9819 "MachineIndependent/glslang_tab.cpp" break; - case 429: /* type_specifier_nonarray: ITEXTURE1DARRAY */ -#line 2963 "MachineIndependent/glslang.y" + case 435: /* type_specifier_nonarray: ITEXTURE1DARRAY */ +#line 2990 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 9682 "MachineIndependent/glslang_tab.cpp" +#line 9829 "MachineIndependent/glslang_tab.cpp" break; - case 430: /* type_specifier_nonarray: UTEXTURE1D */ -#line 2968 "MachineIndependent/glslang.y" + case 436: /* type_specifier_nonarray: UTEXTURE1D */ +#line 2995 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 9692 "MachineIndependent/glslang_tab.cpp" +#line 9839 "MachineIndependent/glslang_tab.cpp" break; - case 431: /* type_specifier_nonarray: UTEXTURE1DARRAY */ -#line 2973 "MachineIndependent/glslang.y" + case 437: /* type_specifier_nonarray: UTEXTURE1DARRAY */ +#line 3000 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 9702 "MachineIndependent/glslang_tab.cpp" +#line 9849 "MachineIndependent/glslang_tab.cpp" break; - case 432: /* type_specifier_nonarray: TEXTURE2DRECT */ -#line 2978 "MachineIndependent/glslang.y" + case 438: /* type_specifier_nonarray: TEXTURE2DRECT */ +#line 3005 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 9712 "MachineIndependent/glslang_tab.cpp" +#line 9859 "MachineIndependent/glslang_tab.cpp" break; - case 433: /* type_specifier_nonarray: F16TEXTURE2DRECT */ -#line 2983 "MachineIndependent/glslang.y" + case 439: /* type_specifier_nonarray: F16TEXTURE2DRECT */ +#line 3010 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); } -#line 9723 "MachineIndependent/glslang_tab.cpp" +#line 9870 "MachineIndependent/glslang_tab.cpp" break; - case 434: /* type_specifier_nonarray: ITEXTURE2DRECT */ -#line 2989 "MachineIndependent/glslang.y" + case 440: /* type_specifier_nonarray: ITEXTURE2DRECT */ +#line 3016 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 9733 "MachineIndependent/glslang_tab.cpp" +#line 9880 "MachineIndependent/glslang_tab.cpp" break; - case 435: /* type_specifier_nonarray: UTEXTURE2DRECT */ -#line 2994 "MachineIndependent/glslang.y" + case 441: /* type_specifier_nonarray: UTEXTURE2DRECT */ +#line 3021 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 9743 "MachineIndependent/glslang_tab.cpp" +#line 9890 "MachineIndependent/glslang_tab.cpp" break; - case 436: /* type_specifier_nonarray: TEXTUREBUFFER */ -#line 2999 "MachineIndependent/glslang.y" + case 442: /* type_specifier_nonarray: TEXTUREBUFFER */ +#line 3026 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 9753 "MachineIndependent/glslang_tab.cpp" +#line 9900 "MachineIndependent/glslang_tab.cpp" break; - case 437: /* type_specifier_nonarray: F16TEXTUREBUFFER */ -#line 3004 "MachineIndependent/glslang.y" + case 443: /* type_specifier_nonarray: F16TEXTUREBUFFER */ +#line 3031 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); } -#line 9764 "MachineIndependent/glslang_tab.cpp" +#line 9911 "MachineIndependent/glslang_tab.cpp" break; - case 438: /* type_specifier_nonarray: ITEXTUREBUFFER */ -#line 3010 "MachineIndependent/glslang.y" + case 444: /* type_specifier_nonarray: ITEXTUREBUFFER */ +#line 3037 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 9774 "MachineIndependent/glslang_tab.cpp" +#line 9921 "MachineIndependent/glslang_tab.cpp" break; - case 439: /* type_specifier_nonarray: UTEXTUREBUFFER */ -#line 3015 "MachineIndependent/glslang.y" + case 445: /* type_specifier_nonarray: UTEXTUREBUFFER */ +#line 3042 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 9784 "MachineIndependent/glslang_tab.cpp" +#line 9931 "MachineIndependent/glslang_tab.cpp" break; - case 440: /* type_specifier_nonarray: TEXTURE2DMS */ -#line 3020 "MachineIndependent/glslang.y" + case 446: /* type_specifier_nonarray: TEXTURE2DMS */ +#line 3047 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 9794 "MachineIndependent/glslang_tab.cpp" +#line 9941 "MachineIndependent/glslang_tab.cpp" break; - case 441: /* type_specifier_nonarray: F16TEXTURE2DMS */ -#line 3025 "MachineIndependent/glslang.y" + case 447: /* type_specifier_nonarray: F16TEXTURE2DMS */ +#line 3052 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); } -#line 9805 "MachineIndependent/glslang_tab.cpp" +#line 9952 "MachineIndependent/glslang_tab.cpp" break; - case 442: /* type_specifier_nonarray: ITEXTURE2DMS */ -#line 3031 "MachineIndependent/glslang.y" + case 448: /* type_specifier_nonarray: ITEXTURE2DMS */ +#line 3058 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 9815 "MachineIndependent/glslang_tab.cpp" +#line 9962 "MachineIndependent/glslang_tab.cpp" break; - case 443: /* type_specifier_nonarray: UTEXTURE2DMS */ -#line 3036 "MachineIndependent/glslang.y" + case 449: /* type_specifier_nonarray: UTEXTURE2DMS */ +#line 3063 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 9825 "MachineIndependent/glslang_tab.cpp" +#line 9972 "MachineIndependent/glslang_tab.cpp" break; - case 444: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ -#line 3041 "MachineIndependent/glslang.y" + case 450: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ +#line 3068 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 9835 "MachineIndependent/glslang_tab.cpp" +#line 9982 "MachineIndependent/glslang_tab.cpp" break; - case 445: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ -#line 3046 "MachineIndependent/glslang.y" + case 451: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ +#line 3073 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); } -#line 9846 "MachineIndependent/glslang_tab.cpp" +#line 9993 "MachineIndependent/glslang_tab.cpp" break; - case 446: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ -#line 3052 "MachineIndependent/glslang.y" + case 452: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ +#line 3079 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 9856 "MachineIndependent/glslang_tab.cpp" +#line 10003 "MachineIndependent/glslang_tab.cpp" break; - case 447: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ -#line 3057 "MachineIndependent/glslang.y" + case 453: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ +#line 3084 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 9866 "MachineIndependent/glslang_tab.cpp" +#line 10013 "MachineIndependent/glslang_tab.cpp" break; - case 448: /* type_specifier_nonarray: IMAGE1D */ -#line 3062 "MachineIndependent/glslang.y" + case 454: /* type_specifier_nonarray: IMAGE1D */ +#line 3089 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 9876 "MachineIndependent/glslang_tab.cpp" +#line 10023 "MachineIndependent/glslang_tab.cpp" break; - case 449: /* type_specifier_nonarray: F16IMAGE1D */ -#line 3067 "MachineIndependent/glslang.y" + case 455: /* type_specifier_nonarray: F16IMAGE1D */ +#line 3094 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); } -#line 9887 "MachineIndependent/glslang_tab.cpp" +#line 10034 "MachineIndependent/glslang_tab.cpp" break; - case 450: /* type_specifier_nonarray: IIMAGE1D */ -#line 3073 "MachineIndependent/glslang.y" + case 456: /* type_specifier_nonarray: IIMAGE1D */ +#line 3100 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 9897 "MachineIndependent/glslang_tab.cpp" +#line 10044 "MachineIndependent/glslang_tab.cpp" break; - case 451: /* type_specifier_nonarray: UIMAGE1D */ -#line 3078 "MachineIndependent/glslang.y" + case 457: /* type_specifier_nonarray: UIMAGE1D */ +#line 3105 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 9907 "MachineIndependent/glslang_tab.cpp" +#line 10054 "MachineIndependent/glslang_tab.cpp" break; - case 452: /* type_specifier_nonarray: IMAGE2D */ -#line 3083 "MachineIndependent/glslang.y" + case 458: /* type_specifier_nonarray: IMAGE2D */ +#line 3110 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 9917 "MachineIndependent/glslang_tab.cpp" +#line 10064 "MachineIndependent/glslang_tab.cpp" break; - case 453: /* type_specifier_nonarray: F16IMAGE2D */ -#line 3088 "MachineIndependent/glslang.y" + case 459: /* type_specifier_nonarray: F16IMAGE2D */ +#line 3115 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); } -#line 9928 "MachineIndependent/glslang_tab.cpp" +#line 10075 "MachineIndependent/glslang_tab.cpp" break; - case 454: /* type_specifier_nonarray: IIMAGE2D */ -#line 3094 "MachineIndependent/glslang.y" + case 460: /* type_specifier_nonarray: IIMAGE2D */ +#line 3121 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 9938 "MachineIndependent/glslang_tab.cpp" +#line 10085 "MachineIndependent/glslang_tab.cpp" break; - case 455: /* type_specifier_nonarray: UIMAGE2D */ -#line 3099 "MachineIndependent/glslang.y" + case 461: /* type_specifier_nonarray: UIMAGE2D */ +#line 3126 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 9948 "MachineIndependent/glslang_tab.cpp" +#line 10095 "MachineIndependent/glslang_tab.cpp" break; - case 456: /* type_specifier_nonarray: IMAGE3D */ -#line 3104 "MachineIndependent/glslang.y" + case 462: /* type_specifier_nonarray: IMAGE3D */ +#line 3131 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 9958 "MachineIndependent/glslang_tab.cpp" +#line 10105 "MachineIndependent/glslang_tab.cpp" break; - case 457: /* type_specifier_nonarray: F16IMAGE3D */ -#line 3109 "MachineIndependent/glslang.y" + case 463: /* type_specifier_nonarray: F16IMAGE3D */ +#line 3136 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); } -#line 9969 "MachineIndependent/glslang_tab.cpp" +#line 10116 "MachineIndependent/glslang_tab.cpp" break; - case 458: /* type_specifier_nonarray: IIMAGE3D */ -#line 3115 "MachineIndependent/glslang.y" + case 464: /* type_specifier_nonarray: IIMAGE3D */ +#line 3142 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 9979 "MachineIndependent/glslang_tab.cpp" +#line 10126 "MachineIndependent/glslang_tab.cpp" break; - case 459: /* type_specifier_nonarray: UIMAGE3D */ -#line 3120 "MachineIndependent/glslang.y" + case 465: /* type_specifier_nonarray: UIMAGE3D */ +#line 3147 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 9989 "MachineIndependent/glslang_tab.cpp" +#line 10136 "MachineIndependent/glslang_tab.cpp" break; - case 460: /* type_specifier_nonarray: IMAGE2DRECT */ -#line 3125 "MachineIndependent/glslang.y" + case 466: /* type_specifier_nonarray: IMAGE2DRECT */ +#line 3152 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 9999 "MachineIndependent/glslang_tab.cpp" +#line 10146 "MachineIndependent/glslang_tab.cpp" break; - case 461: /* type_specifier_nonarray: F16IMAGE2DRECT */ -#line 3130 "MachineIndependent/glslang.y" + case 467: /* type_specifier_nonarray: F16IMAGE2DRECT */ +#line 3157 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); } -#line 10010 "MachineIndependent/glslang_tab.cpp" +#line 10157 "MachineIndependent/glslang_tab.cpp" break; - case 462: /* type_specifier_nonarray: IIMAGE2DRECT */ -#line 3136 "MachineIndependent/glslang.y" + case 468: /* type_specifier_nonarray: IIMAGE2DRECT */ +#line 3163 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 10020 "MachineIndependent/glslang_tab.cpp" +#line 10167 "MachineIndependent/glslang_tab.cpp" break; - case 463: /* type_specifier_nonarray: UIMAGE2DRECT */ -#line 3141 "MachineIndependent/glslang.y" + case 469: /* type_specifier_nonarray: UIMAGE2DRECT */ +#line 3168 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 10030 "MachineIndependent/glslang_tab.cpp" +#line 10177 "MachineIndependent/glslang_tab.cpp" break; - case 464: /* type_specifier_nonarray: IMAGECUBE */ -#line 3146 "MachineIndependent/glslang.y" + case 470: /* type_specifier_nonarray: IMAGECUBE */ +#line 3173 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 10040 "MachineIndependent/glslang_tab.cpp" +#line 10187 "MachineIndependent/glslang_tab.cpp" break; - case 465: /* type_specifier_nonarray: F16IMAGECUBE */ -#line 3151 "MachineIndependent/glslang.y" + case 471: /* type_specifier_nonarray: F16IMAGECUBE */ +#line 3178 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); } -#line 10051 "MachineIndependent/glslang_tab.cpp" +#line 10198 "MachineIndependent/glslang_tab.cpp" break; - case 466: /* type_specifier_nonarray: IIMAGECUBE */ -#line 3157 "MachineIndependent/glslang.y" + case 472: /* type_specifier_nonarray: IIMAGECUBE */ +#line 3184 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 10061 "MachineIndependent/glslang_tab.cpp" +#line 10208 "MachineIndependent/glslang_tab.cpp" break; - case 467: /* type_specifier_nonarray: UIMAGECUBE */ -#line 3162 "MachineIndependent/glslang.y" + case 473: /* type_specifier_nonarray: UIMAGECUBE */ +#line 3189 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 10071 "MachineIndependent/glslang_tab.cpp" +#line 10218 "MachineIndependent/glslang_tab.cpp" break; - case 468: /* type_specifier_nonarray: IMAGEBUFFER */ -#line 3167 "MachineIndependent/glslang.y" + case 474: /* type_specifier_nonarray: IMAGEBUFFER */ +#line 3194 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 10081 "MachineIndependent/glslang_tab.cpp" +#line 10228 "MachineIndependent/glslang_tab.cpp" break; - case 469: /* type_specifier_nonarray: F16IMAGEBUFFER */ -#line 3172 "MachineIndependent/glslang.y" + case 475: /* type_specifier_nonarray: F16IMAGEBUFFER */ +#line 3199 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); } -#line 10092 "MachineIndependent/glslang_tab.cpp" +#line 10239 "MachineIndependent/glslang_tab.cpp" break; - case 470: /* type_specifier_nonarray: IIMAGEBUFFER */ -#line 3178 "MachineIndependent/glslang.y" + case 476: /* type_specifier_nonarray: IIMAGEBUFFER */ +#line 3205 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 10102 "MachineIndependent/glslang_tab.cpp" +#line 10249 "MachineIndependent/glslang_tab.cpp" break; - case 471: /* type_specifier_nonarray: UIMAGEBUFFER */ -#line 3183 "MachineIndependent/glslang.y" + case 477: /* type_specifier_nonarray: UIMAGEBUFFER */ +#line 3210 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 10112 "MachineIndependent/glslang_tab.cpp" +#line 10259 "MachineIndependent/glslang_tab.cpp" break; - case 472: /* type_specifier_nonarray: IMAGE1DARRAY */ -#line 3188 "MachineIndependent/glslang.y" + case 478: /* type_specifier_nonarray: IMAGE1DARRAY */ +#line 3215 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 10122 "MachineIndependent/glslang_tab.cpp" +#line 10269 "MachineIndependent/glslang_tab.cpp" break; - case 473: /* type_specifier_nonarray: F16IMAGE1DARRAY */ -#line 3193 "MachineIndependent/glslang.y" + case 479: /* type_specifier_nonarray: F16IMAGE1DARRAY */ +#line 3220 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); } -#line 10133 "MachineIndependent/glslang_tab.cpp" +#line 10280 "MachineIndependent/glslang_tab.cpp" break; - case 474: /* type_specifier_nonarray: IIMAGE1DARRAY */ -#line 3199 "MachineIndependent/glslang.y" + case 480: /* type_specifier_nonarray: IIMAGE1DARRAY */ +#line 3226 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 10143 "MachineIndependent/glslang_tab.cpp" +#line 10290 "MachineIndependent/glslang_tab.cpp" break; - case 475: /* type_specifier_nonarray: UIMAGE1DARRAY */ -#line 3204 "MachineIndependent/glslang.y" + case 481: /* type_specifier_nonarray: UIMAGE1DARRAY */ +#line 3231 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 10153 "MachineIndependent/glslang_tab.cpp" +#line 10300 "MachineIndependent/glslang_tab.cpp" break; - case 476: /* type_specifier_nonarray: IMAGE2DARRAY */ -#line 3209 "MachineIndependent/glslang.y" + case 482: /* type_specifier_nonarray: IMAGE2DARRAY */ +#line 3236 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 10163 "MachineIndependent/glslang_tab.cpp" +#line 10310 "MachineIndependent/glslang_tab.cpp" break; - case 477: /* type_specifier_nonarray: F16IMAGE2DARRAY */ -#line 3214 "MachineIndependent/glslang.y" + case 483: /* type_specifier_nonarray: F16IMAGE2DARRAY */ +#line 3241 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); } -#line 10174 "MachineIndependent/glslang_tab.cpp" +#line 10321 "MachineIndependent/glslang_tab.cpp" break; - case 478: /* type_specifier_nonarray: IIMAGE2DARRAY */ -#line 3220 "MachineIndependent/glslang.y" + case 484: /* type_specifier_nonarray: IIMAGE2DARRAY */ +#line 3247 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 10184 "MachineIndependent/glslang_tab.cpp" +#line 10331 "MachineIndependent/glslang_tab.cpp" break; - case 479: /* type_specifier_nonarray: UIMAGE2DARRAY */ -#line 3225 "MachineIndependent/glslang.y" + case 485: /* type_specifier_nonarray: UIMAGE2DARRAY */ +#line 3252 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 10194 "MachineIndependent/glslang_tab.cpp" +#line 10341 "MachineIndependent/glslang_tab.cpp" break; - case 480: /* type_specifier_nonarray: IMAGECUBEARRAY */ -#line 3230 "MachineIndependent/glslang.y" + case 486: /* type_specifier_nonarray: IMAGECUBEARRAY */ +#line 3257 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 10204 "MachineIndependent/glslang_tab.cpp" +#line 10351 "MachineIndependent/glslang_tab.cpp" break; - case 481: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ -#line 3235 "MachineIndependent/glslang.y" + case 487: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ +#line 3262 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); } -#line 10215 "MachineIndependent/glslang_tab.cpp" +#line 10362 "MachineIndependent/glslang_tab.cpp" break; - case 482: /* type_specifier_nonarray: IIMAGECUBEARRAY */ -#line 3241 "MachineIndependent/glslang.y" + case 488: /* type_specifier_nonarray: IIMAGECUBEARRAY */ +#line 3268 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 10225 "MachineIndependent/glslang_tab.cpp" +#line 10372 "MachineIndependent/glslang_tab.cpp" break; - case 483: /* type_specifier_nonarray: UIMAGECUBEARRAY */ -#line 3246 "MachineIndependent/glslang.y" + case 489: /* type_specifier_nonarray: UIMAGECUBEARRAY */ +#line 3273 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 10235 "MachineIndependent/glslang_tab.cpp" +#line 10382 "MachineIndependent/glslang_tab.cpp" break; - case 484: /* type_specifier_nonarray: IMAGE2DMS */ -#line 3251 "MachineIndependent/glslang.y" + case 490: /* type_specifier_nonarray: IMAGE2DMS */ +#line 3278 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 10245 "MachineIndependent/glslang_tab.cpp" +#line 10392 "MachineIndependent/glslang_tab.cpp" break; - case 485: /* type_specifier_nonarray: F16IMAGE2DMS */ -#line 3256 "MachineIndependent/glslang.y" + case 491: /* type_specifier_nonarray: F16IMAGE2DMS */ +#line 3283 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); } -#line 10256 "MachineIndependent/glslang_tab.cpp" +#line 10403 "MachineIndependent/glslang_tab.cpp" break; - case 486: /* type_specifier_nonarray: IIMAGE2DMS */ -#line 3262 "MachineIndependent/glslang.y" + case 492: /* type_specifier_nonarray: IIMAGE2DMS */ +#line 3289 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 10266 "MachineIndependent/glslang_tab.cpp" +#line 10413 "MachineIndependent/glslang_tab.cpp" break; - case 487: /* type_specifier_nonarray: UIMAGE2DMS */ -#line 3267 "MachineIndependent/glslang.y" + case 493: /* type_specifier_nonarray: UIMAGE2DMS */ +#line 3294 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 10276 "MachineIndependent/glslang_tab.cpp" +#line 10423 "MachineIndependent/glslang_tab.cpp" break; - case 488: /* type_specifier_nonarray: IMAGE2DMSARRAY */ -#line 3272 "MachineIndependent/glslang.y" + case 494: /* type_specifier_nonarray: IMAGE2DMSARRAY */ +#line 3299 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 10286 "MachineIndependent/glslang_tab.cpp" +#line 10433 "MachineIndependent/glslang_tab.cpp" break; - case 489: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ -#line 3277 "MachineIndependent/glslang.y" + case 495: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ +#line 3304 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); } -#line 10297 "MachineIndependent/glslang_tab.cpp" +#line 10444 "MachineIndependent/glslang_tab.cpp" break; - case 490: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ -#line 3283 "MachineIndependent/glslang.y" + case 496: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ +#line 3310 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 10307 "MachineIndependent/glslang_tab.cpp" +#line 10454 "MachineIndependent/glslang_tab.cpp" break; - case 491: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ -#line 3288 "MachineIndependent/glslang.y" + case 497: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ +#line 3315 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 10317 "MachineIndependent/glslang_tab.cpp" +#line 10464 "MachineIndependent/glslang_tab.cpp" break; - case 492: /* type_specifier_nonarray: I64IMAGE1D */ -#line 3293 "MachineIndependent/glslang.y" + case 498: /* type_specifier_nonarray: I64IMAGE1D */ +#line 3320 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D); } -#line 10327 "MachineIndependent/glslang_tab.cpp" +#line 10474 "MachineIndependent/glslang_tab.cpp" break; - case 493: /* type_specifier_nonarray: U64IMAGE1D */ -#line 3298 "MachineIndependent/glslang.y" + case 499: /* type_specifier_nonarray: U64IMAGE1D */ +#line 3325 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D); } -#line 10337 "MachineIndependent/glslang_tab.cpp" +#line 10484 "MachineIndependent/glslang_tab.cpp" break; - case 494: /* type_specifier_nonarray: I64IMAGE2D */ -#line 3303 "MachineIndependent/glslang.y" + case 500: /* type_specifier_nonarray: I64IMAGE2D */ +#line 3330 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D); } -#line 10347 "MachineIndependent/glslang_tab.cpp" +#line 10494 "MachineIndependent/glslang_tab.cpp" break; - case 495: /* type_specifier_nonarray: U64IMAGE2D */ -#line 3308 "MachineIndependent/glslang.y" + case 501: /* type_specifier_nonarray: U64IMAGE2D */ +#line 3335 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D); } -#line 10357 "MachineIndependent/glslang_tab.cpp" +#line 10504 "MachineIndependent/glslang_tab.cpp" break; - case 496: /* type_specifier_nonarray: I64IMAGE3D */ -#line 3313 "MachineIndependent/glslang.y" + case 502: /* type_specifier_nonarray: I64IMAGE3D */ +#line 3340 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D); } -#line 10367 "MachineIndependent/glslang_tab.cpp" +#line 10514 "MachineIndependent/glslang_tab.cpp" break; - case 497: /* type_specifier_nonarray: U64IMAGE3D */ -#line 3318 "MachineIndependent/glslang.y" + case 503: /* type_specifier_nonarray: U64IMAGE3D */ +#line 3345 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D); } -#line 10377 "MachineIndependent/glslang_tab.cpp" +#line 10524 "MachineIndependent/glslang_tab.cpp" break; - case 498: /* type_specifier_nonarray: I64IMAGE2DRECT */ -#line 3323 "MachineIndependent/glslang.y" + case 504: /* type_specifier_nonarray: I64IMAGE2DRECT */ +#line 3350 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect); } -#line 10387 "MachineIndependent/glslang_tab.cpp" +#line 10534 "MachineIndependent/glslang_tab.cpp" break; - case 499: /* type_specifier_nonarray: U64IMAGE2DRECT */ -#line 3328 "MachineIndependent/glslang.y" + case 505: /* type_specifier_nonarray: U64IMAGE2DRECT */ +#line 3355 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect); } -#line 10397 "MachineIndependent/glslang_tab.cpp" +#line 10544 "MachineIndependent/glslang_tab.cpp" break; - case 500: /* type_specifier_nonarray: I64IMAGECUBE */ -#line 3333 "MachineIndependent/glslang.y" + case 506: /* type_specifier_nonarray: I64IMAGECUBE */ +#line 3360 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube); } -#line 10407 "MachineIndependent/glslang_tab.cpp" +#line 10554 "MachineIndependent/glslang_tab.cpp" break; - case 501: /* type_specifier_nonarray: U64IMAGECUBE */ -#line 3338 "MachineIndependent/glslang.y" + case 507: /* type_specifier_nonarray: U64IMAGECUBE */ +#line 3365 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube); } -#line 10417 "MachineIndependent/glslang_tab.cpp" +#line 10564 "MachineIndependent/glslang_tab.cpp" break; - case 502: /* type_specifier_nonarray: I64IMAGEBUFFER */ -#line 3343 "MachineIndependent/glslang.y" + case 508: /* type_specifier_nonarray: I64IMAGEBUFFER */ +#line 3370 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer); } -#line 10427 "MachineIndependent/glslang_tab.cpp" +#line 10574 "MachineIndependent/glslang_tab.cpp" break; - case 503: /* type_specifier_nonarray: U64IMAGEBUFFER */ -#line 3348 "MachineIndependent/glslang.y" + case 509: /* type_specifier_nonarray: U64IMAGEBUFFER */ +#line 3375 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer); } -#line 10437 "MachineIndependent/glslang_tab.cpp" +#line 10584 "MachineIndependent/glslang_tab.cpp" break; - case 504: /* type_specifier_nonarray: I64IMAGE1DARRAY */ -#line 3353 "MachineIndependent/glslang.y" + case 510: /* type_specifier_nonarray: I64IMAGE1DARRAY */ +#line 3380 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true); } -#line 10447 "MachineIndependent/glslang_tab.cpp" +#line 10594 "MachineIndependent/glslang_tab.cpp" break; - case 505: /* type_specifier_nonarray: U64IMAGE1DARRAY */ -#line 3358 "MachineIndependent/glslang.y" + case 511: /* type_specifier_nonarray: U64IMAGE1DARRAY */ +#line 3385 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true); } -#line 10457 "MachineIndependent/glslang_tab.cpp" +#line 10604 "MachineIndependent/glslang_tab.cpp" break; - case 506: /* type_specifier_nonarray: I64IMAGE2DARRAY */ -#line 3363 "MachineIndependent/glslang.y" + case 512: /* type_specifier_nonarray: I64IMAGE2DARRAY */ +#line 3390 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true); } -#line 10467 "MachineIndependent/glslang_tab.cpp" +#line 10614 "MachineIndependent/glslang_tab.cpp" break; - case 507: /* type_specifier_nonarray: U64IMAGE2DARRAY */ -#line 3368 "MachineIndependent/glslang.y" + case 513: /* type_specifier_nonarray: U64IMAGE2DARRAY */ +#line 3395 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true); } -#line 10477 "MachineIndependent/glslang_tab.cpp" +#line 10624 "MachineIndependent/glslang_tab.cpp" break; - case 508: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ -#line 3373 "MachineIndependent/glslang.y" + case 514: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ +#line 3400 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true); } -#line 10487 "MachineIndependent/glslang_tab.cpp" +#line 10634 "MachineIndependent/glslang_tab.cpp" break; - case 509: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ -#line 3378 "MachineIndependent/glslang.y" + case 515: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ +#line 3405 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true); } -#line 10497 "MachineIndependent/glslang_tab.cpp" +#line 10644 "MachineIndependent/glslang_tab.cpp" break; - case 510: /* type_specifier_nonarray: I64IMAGE2DMS */ -#line 3383 "MachineIndependent/glslang.y" + case 516: /* type_specifier_nonarray: I64IMAGE2DMS */ +#line 3410 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true); } -#line 10507 "MachineIndependent/glslang_tab.cpp" +#line 10654 "MachineIndependent/glslang_tab.cpp" break; - case 511: /* type_specifier_nonarray: U64IMAGE2DMS */ -#line 3388 "MachineIndependent/glslang.y" + case 517: /* type_specifier_nonarray: U64IMAGE2DMS */ +#line 3415 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true); } -#line 10517 "MachineIndependent/glslang_tab.cpp" +#line 10664 "MachineIndependent/glslang_tab.cpp" break; - case 512: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ -#line 3393 "MachineIndependent/glslang.y" + case 518: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ +#line 3420 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true); } -#line 10527 "MachineIndependent/glslang_tab.cpp" +#line 10674 "MachineIndependent/glslang_tab.cpp" break; - case 513: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ -#line 3398 "MachineIndependent/glslang.y" + case 519: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ +#line 3425 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true); } -#line 10537 "MachineIndependent/glslang_tab.cpp" +#line 10684 "MachineIndependent/glslang_tab.cpp" break; - case 514: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ -#line 3403 "MachineIndependent/glslang.y" + case 520: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ +#line 3430 "MachineIndependent/glslang.y" { // GL_OES_EGL_image_external (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 10548 "MachineIndependent/glslang_tab.cpp" +#line 10695 "MachineIndependent/glslang_tab.cpp" break; - case 515: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ -#line 3409 "MachineIndependent/glslang.y" + case 521: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ +#line 3436 "MachineIndependent/glslang.y" { // GL_EXT_YUV_target (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.yuv = true; } -#line 10559 "MachineIndependent/glslang_tab.cpp" +#line 10706 "MachineIndependent/glslang_tab.cpp" break; - case 516: /* type_specifier_nonarray: SUBPASSINPUT */ -#line 3415 "MachineIndependent/glslang.y" + case 522: /* type_specifier_nonarray: ATTACHMENTEXT */ +#line 3442 "MachineIndependent/glslang.y" + { + parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input"); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setAttachmentEXT(EbtFloat); + } +#line 10717 "MachineIndependent/glslang_tab.cpp" + break; + + case 523: /* type_specifier_nonarray: IATTACHMENTEXT */ +#line 3448 "MachineIndependent/glslang.y" + { + parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input"); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setAttachmentEXT(EbtInt); + } +#line 10728 "MachineIndependent/glslang_tab.cpp" + break; + + case 524: /* type_specifier_nonarray: UATTACHMENTEXT */ +#line 3454 "MachineIndependent/glslang.y" + { + parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input"); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setAttachmentEXT(EbtUint); + } +#line 10739 "MachineIndependent/glslang_tab.cpp" + break; + + case 525: /* type_specifier_nonarray: SUBPASSINPUT */ +#line 3460 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 10570 "MachineIndependent/glslang_tab.cpp" +#line 10750 "MachineIndependent/glslang_tab.cpp" break; - case 517: /* type_specifier_nonarray: SUBPASSINPUTMS */ -#line 3421 "MachineIndependent/glslang.y" + case 526: /* type_specifier_nonarray: SUBPASSINPUTMS */ +#line 3466 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 10581 "MachineIndependent/glslang_tab.cpp" +#line 10761 "MachineIndependent/glslang_tab.cpp" break; - case 518: /* type_specifier_nonarray: F16SUBPASSINPUT */ -#line 3427 "MachineIndependent/glslang.y" + case 527: /* type_specifier_nonarray: F16SUBPASSINPUT */ +#line 3472 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -10589,11 +10769,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 10593 "MachineIndependent/glslang_tab.cpp" +#line 10773 "MachineIndependent/glslang_tab.cpp" break; - case 519: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ -#line 3434 "MachineIndependent/glslang.y" + case 528: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ +#line 3479 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -10601,107 +10781,131 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 10605 "MachineIndependent/glslang_tab.cpp" +#line 10785 "MachineIndependent/glslang_tab.cpp" break; - case 520: /* type_specifier_nonarray: ISUBPASSINPUT */ -#line 3441 "MachineIndependent/glslang.y" + case 529: /* type_specifier_nonarray: ISUBPASSINPUT */ +#line 3486 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 10616 "MachineIndependent/glslang_tab.cpp" +#line 10796 "MachineIndependent/glslang_tab.cpp" break; - case 521: /* type_specifier_nonarray: ISUBPASSINPUTMS */ -#line 3447 "MachineIndependent/glslang.y" + case 530: /* type_specifier_nonarray: ISUBPASSINPUTMS */ +#line 3492 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 10627 "MachineIndependent/glslang_tab.cpp" +#line 10807 "MachineIndependent/glslang_tab.cpp" break; - case 522: /* type_specifier_nonarray: USUBPASSINPUT */ -#line 3453 "MachineIndependent/glslang.y" + case 531: /* type_specifier_nonarray: USUBPASSINPUT */ +#line 3498 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 10638 "MachineIndependent/glslang_tab.cpp" +#line 10818 "MachineIndependent/glslang_tab.cpp" break; - case 523: /* type_specifier_nonarray: USUBPASSINPUTMS */ -#line 3459 "MachineIndependent/glslang.y" + case 532: /* type_specifier_nonarray: USUBPASSINPUTMS */ +#line 3504 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 10649 "MachineIndependent/glslang_tab.cpp" +#line 10829 "MachineIndependent/glslang_tab.cpp" break; - case 524: /* type_specifier_nonarray: FCOOPMATNV */ -#line 3465 "MachineIndependent/glslang.y" + case 533: /* type_specifier_nonarray: FCOOPMATNV */ +#line 3510 "MachineIndependent/glslang.y" { - parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); + parseContext.fcoopmatCheckNV((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; - (yyval.interm.type).coopmat = true; + (yyval.interm.type).coopmatNV = true; + (yyval.interm.type).coopmatKHR = false; } -#line 10660 "MachineIndependent/glslang_tab.cpp" +#line 10841 "MachineIndependent/glslang_tab.cpp" break; - case 525: /* type_specifier_nonarray: ICOOPMATNV */ -#line 3471 "MachineIndependent/glslang.y" + case 534: /* type_specifier_nonarray: ICOOPMATNV */ +#line 3517 "MachineIndependent/glslang.y" { - parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); + parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; - (yyval.interm.type).coopmat = true; + (yyval.interm.type).coopmatNV = true; + (yyval.interm.type).coopmatKHR = false; } -#line 10671 "MachineIndependent/glslang_tab.cpp" +#line 10853 "MachineIndependent/glslang_tab.cpp" break; - case 526: /* type_specifier_nonarray: UCOOPMATNV */ -#line 3477 "MachineIndependent/glslang.y" + case 535: /* type_specifier_nonarray: UCOOPMATNV */ +#line 3524 "MachineIndependent/glslang.y" { - parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); + parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; - (yyval.interm.type).coopmat = true; + (yyval.interm.type).coopmatNV = true; + (yyval.interm.type).coopmatKHR = false; + } +#line 10865 "MachineIndependent/glslang_tab.cpp" + break; + + case 536: /* type_specifier_nonarray: COOPMAT */ +#line 3531 "MachineIndependent/glslang.y" + { + parseContext.coopmatCheck((yyvsp[0].lex).loc, "coopmat", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtCoopmat; + (yyval.interm.type).coopmatNV = false; + (yyval.interm.type).coopmatKHR = true; } -#line 10682 "MachineIndependent/glslang_tab.cpp" +#line 10877 "MachineIndependent/glslang_tab.cpp" break; - case 527: /* type_specifier_nonarray: spirv_type_specifier */ -#line 3483 "MachineIndependent/glslang.y" + case 537: /* type_specifier_nonarray: spirv_type_specifier */ +#line 3538 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier"); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 10691 "MachineIndependent/glslang_tab.cpp" +#line 10886 "MachineIndependent/glslang_tab.cpp" + break; + + case 538: /* type_specifier_nonarray: HITOBJECTNV */ +#line 3542 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtHitObjectNV; + } +#line 10895 "MachineIndependent/glslang_tab.cpp" break; - case 528: /* type_specifier_nonarray: struct_specifier */ -#line 3488 "MachineIndependent/glslang.y" + case 539: /* type_specifier_nonarray: struct_specifier */ +#line 3546 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 10701 "MachineIndependent/glslang_tab.cpp" +#line 10905 "MachineIndependent/glslang_tab.cpp" break; - case 529: /* type_specifier_nonarray: TYPE_NAME */ -#line 3493 "MachineIndependent/glslang.y" + case 540: /* type_specifier_nonarray: TYPE_NAME */ +#line 3551 "MachineIndependent/glslang.y" { // // This is for user defined type names. The lexical phase looked up the @@ -10715,69 +10919,75 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 10719 "MachineIndependent/glslang_tab.cpp" +#line 10923 "MachineIndependent/glslang_tab.cpp" break; - case 530: /* precision_qualifier: HIGH_PRECISION */ -#line 3509 "MachineIndependent/glslang.y" + case 541: /* precision_qualifier: HIGH_PRECISION */ +#line 3567 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 10729 "MachineIndependent/glslang_tab.cpp" +#line 10933 "MachineIndependent/glslang_tab.cpp" break; - case 531: /* precision_qualifier: MEDIUM_PRECISION */ -#line 3514 "MachineIndependent/glslang.y" + case 542: /* precision_qualifier: MEDIUM_PRECISION */ +#line 3572 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 10739 "MachineIndependent/glslang_tab.cpp" +#line 10943 "MachineIndependent/glslang_tab.cpp" break; - case 532: /* precision_qualifier: LOW_PRECISION */ -#line 3519 "MachineIndependent/glslang.y" + case 543: /* precision_qualifier: LOW_PRECISION */ +#line 3577 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 10749 "MachineIndependent/glslang_tab.cpp" +#line 10953 "MachineIndependent/glslang_tab.cpp" break; - case 533: /* $@3: %empty */ -#line 3527 "MachineIndependent/glslang.y" + case 544: /* $@3: %empty */ +#line 3585 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 10755 "MachineIndependent/glslang_tab.cpp" +#line 10959 "MachineIndependent/glslang_tab.cpp" break; - case 534: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ -#line 3527 "MachineIndependent/glslang.y" + case 545: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ +#line 3585 "MachineIndependent/glslang.y" { + TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure); + TVariable* userTypeDef = new TVariable((yyvsp[-4].lex).string, *structure, true); if (! parseContext.symbolTable.insert(*userTypeDef)) parseContext.error((yyvsp[-4].lex).loc, "redefinition", (yyvsp[-4].lex).string->c_str(), "struct"); + else if (parseContext.spvVersion.vulkanRelaxed + && structure->containsOpaque()) + parseContext.relaxedSymbols.push_back(structure->getTypeName()); + (yyval.interm.type).init((yyvsp[-5].lex).loc); (yyval.interm.type).basicType = EbtStruct; (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10771 "MachineIndependent/glslang_tab.cpp" +#line 10981 "MachineIndependent/glslang_tab.cpp" break; - case 535: /* $@4: %empty */ -#line 3538 "MachineIndependent/glslang.y" + case 546: /* $@4: %empty */ +#line 3602 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 10777 "MachineIndependent/glslang_tab.cpp" +#line 10987 "MachineIndependent/glslang_tab.cpp" break; - case 536: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ -#line 3538 "MachineIndependent/glslang.y" + case 547: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ +#line 3602 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); @@ -10785,19 +10995,19 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10789 "MachineIndependent/glslang_tab.cpp" +#line 10999 "MachineIndependent/glslang_tab.cpp" break; - case 537: /* struct_declaration_list: struct_declaration */ -#line 3548 "MachineIndependent/glslang.y" + case 548: /* struct_declaration_list: struct_declaration */ +#line 3612 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 10797 "MachineIndependent/glslang_tab.cpp" +#line 11007 "MachineIndependent/glslang_tab.cpp" break; - case 538: /* struct_declaration_list: struct_declaration_list struct_declaration */ -#line 3551 "MachineIndependent/glslang.y" + case 549: /* struct_declaration_list: struct_declaration_list struct_declaration */ +#line 3615 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { @@ -10808,11 +11018,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 10812 "MachineIndependent/glslang_tab.cpp" +#line 11022 "MachineIndependent/glslang_tab.cpp" break; - case 539: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ -#line 3564 "MachineIndependent/glslang.y" + case 550: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ +#line 3628 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -10824,7 +11034,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType); - parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier); + parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).isCoopmat()); for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) { TType type((yyvsp[-2].interm.type)); @@ -10835,11 +11045,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10839 "MachineIndependent/glslang_tab.cpp" +#line 11049 "MachineIndependent/glslang_tab.cpp" break; - case 540: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ -#line 3586 "MachineIndependent/glslang.y" + case 551: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ +#line 3650 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -10853,7 +11063,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.memberQualifierCheck((yyvsp[-3].interm.type)); parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType); parseContext.mergeQualifiers((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, (yyvsp[-3].interm.type).qualifier, true); - parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier); + parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).isCoopmat()); for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) { TType type((yyvsp[-2].interm.type)); @@ -10864,38 +11074,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10868 "MachineIndependent/glslang_tab.cpp" +#line 11078 "MachineIndependent/glslang_tab.cpp" break; - case 541: /* struct_declarator_list: struct_declarator */ -#line 3613 "MachineIndependent/glslang.y" + case 552: /* struct_declarator_list: struct_declarator */ +#line 3677 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10877 "MachineIndependent/glslang_tab.cpp" +#line 11087 "MachineIndependent/glslang_tab.cpp" break; - case 542: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ -#line 3617 "MachineIndependent/glslang.y" + case 553: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ +#line 3681 "MachineIndependent/glslang.y" { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10885 "MachineIndependent/glslang_tab.cpp" +#line 11095 "MachineIndependent/glslang_tab.cpp" break; - case 543: /* struct_declarator: IDENTIFIER */ -#line 3623 "MachineIndependent/glslang.y" + case 554: /* struct_declarator: IDENTIFIER */ +#line 3687 "MachineIndependent/glslang.y" { (yyval.interm.typeLine).type = new TType(EbtVoid); (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 10895 "MachineIndependent/glslang_tab.cpp" +#line 11105 "MachineIndependent/glslang_tab.cpp" break; - case 544: /* struct_declarator: IDENTIFIER array_specifier */ -#line 3628 "MachineIndependent/glslang.y" + case 555: /* struct_declarator: IDENTIFIER array_specifier */ +#line 3692 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes); @@ -10904,246 +11114,250 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 10908 "MachineIndependent/glslang_tab.cpp" +#line 11118 "MachineIndependent/glslang_tab.cpp" break; - case 545: /* initializer: assignment_expression */ -#line 3639 "MachineIndependent/glslang.y" + case 556: /* initializer: assignment_expression */ +#line 3703 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10916 "MachineIndependent/glslang_tab.cpp" +#line 11126 "MachineIndependent/glslang_tab.cpp" break; - case 546: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ -#line 3643 "MachineIndependent/glslang.y" + case 557: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ +#line 3706 "MachineIndependent/glslang.y" { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 10927 "MachineIndependent/glslang_tab.cpp" +#line 11137 "MachineIndependent/glslang_tab.cpp" break; - case 547: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ -#line 3649 "MachineIndependent/glslang.y" + case 558: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ +#line 3712 "MachineIndependent/glslang.y" { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 10938 "MachineIndependent/glslang_tab.cpp" +#line 11148 "MachineIndependent/glslang_tab.cpp" break; - case 548: /* initializer: LEFT_BRACE RIGHT_BRACE */ -#line 3655 "MachineIndependent/glslang.y" + case 559: /* initializer: LEFT_BRACE RIGHT_BRACE */ +#line 3718 "MachineIndependent/glslang.y" { const char* initFeature = "empty { } initializer"; parseContext.profileRequires((yyvsp[-1].lex).loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); parseContext.profileRequires((yyvsp[-1].lex).loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); (yyval.interm.intermTypedNode) = parseContext.intermediate.makeAggregate((yyvsp[-1].lex).loc); } -#line 10949 "MachineIndependent/glslang_tab.cpp" +#line 11159 "MachineIndependent/glslang_tab.cpp" break; - case 549: /* initializer_list: initializer */ -#line 3666 "MachineIndependent/glslang.y" + case 560: /* initializer_list: initializer */ +#line 3727 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 10957 "MachineIndependent/glslang_tab.cpp" +#line 11167 "MachineIndependent/glslang_tab.cpp" break; - case 550: /* initializer_list: initializer_list COMMA initializer */ -#line 3669 "MachineIndependent/glslang.y" + case 561: /* initializer_list: initializer_list COMMA initializer */ +#line 3730 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 10965 "MachineIndependent/glslang_tab.cpp" +#line 11175 "MachineIndependent/glslang_tab.cpp" break; - case 551: /* declaration_statement: declaration */ -#line 3676 "MachineIndependent/glslang.y" + case 562: /* declaration_statement: declaration */ +#line 3736 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10971 "MachineIndependent/glslang_tab.cpp" +#line 11181 "MachineIndependent/glslang_tab.cpp" break; - case 552: /* statement: compound_statement */ -#line 3680 "MachineIndependent/glslang.y" + case 563: /* statement: compound_statement */ +#line 3740 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10977 "MachineIndependent/glslang_tab.cpp" +#line 11187 "MachineIndependent/glslang_tab.cpp" break; - case 553: /* statement: simple_statement */ -#line 3681 "MachineIndependent/glslang.y" + case 564: /* statement: simple_statement */ +#line 3741 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10983 "MachineIndependent/glslang_tab.cpp" +#line 11193 "MachineIndependent/glslang_tab.cpp" break; - case 554: /* simple_statement: declaration_statement */ -#line 3687 "MachineIndependent/glslang.y" + case 565: /* simple_statement: declaration_statement */ +#line 3747 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10989 "MachineIndependent/glslang_tab.cpp" +#line 11199 "MachineIndependent/glslang_tab.cpp" break; - case 555: /* simple_statement: expression_statement */ -#line 3688 "MachineIndependent/glslang.y" + case 566: /* simple_statement: expression_statement */ +#line 3748 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10995 "MachineIndependent/glslang_tab.cpp" +#line 11205 "MachineIndependent/glslang_tab.cpp" break; - case 556: /* simple_statement: selection_statement */ -#line 3689 "MachineIndependent/glslang.y" + case 567: /* simple_statement: selection_statement */ +#line 3749 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11001 "MachineIndependent/glslang_tab.cpp" +#line 11211 "MachineIndependent/glslang_tab.cpp" break; - case 557: /* simple_statement: switch_statement */ -#line 3690 "MachineIndependent/glslang.y" + case 568: /* simple_statement: switch_statement */ +#line 3750 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11007 "MachineIndependent/glslang_tab.cpp" +#line 11217 "MachineIndependent/glslang_tab.cpp" break; - case 558: /* simple_statement: case_label */ -#line 3691 "MachineIndependent/glslang.y" + case 569: /* simple_statement: case_label */ +#line 3751 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11013 "MachineIndependent/glslang_tab.cpp" +#line 11223 "MachineIndependent/glslang_tab.cpp" break; - case 559: /* simple_statement: iteration_statement */ -#line 3692 "MachineIndependent/glslang.y" + case 570: /* simple_statement: iteration_statement */ +#line 3752 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11019 "MachineIndependent/glslang_tab.cpp" +#line 11229 "MachineIndependent/glslang_tab.cpp" break; - case 560: /* simple_statement: jump_statement */ -#line 3693 "MachineIndependent/glslang.y" + case 571: /* simple_statement: jump_statement */ +#line 3753 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11025 "MachineIndependent/glslang_tab.cpp" +#line 11235 "MachineIndependent/glslang_tab.cpp" break; - case 561: /* simple_statement: demote_statement */ -#line 3695 "MachineIndependent/glslang.y" + case 572: /* simple_statement: demote_statement */ +#line 3754 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11031 "MachineIndependent/glslang_tab.cpp" +#line 11241 "MachineIndependent/glslang_tab.cpp" break; - case 562: /* demote_statement: DEMOTE SEMICOLON */ -#line 3701 "MachineIndependent/glslang.y" + case 573: /* demote_statement: DEMOTE SEMICOLON */ +#line 3758 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "demote"); parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDemote, (yyvsp[-1].lex).loc); } -#line 11041 "MachineIndependent/glslang_tab.cpp" +#line 11251 "MachineIndependent/glslang_tab.cpp" break; - case 563: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ -#line 3710 "MachineIndependent/glslang.y" + case 574: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ +#line 3766 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11047 "MachineIndependent/glslang_tab.cpp" +#line 11257 "MachineIndependent/glslang_tab.cpp" break; - case 564: /* $@5: %empty */ -#line 3711 "MachineIndependent/glslang.y" + case 575: /* $@5: %empty */ +#line 3767 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 11056 "MachineIndependent/glslang_tab.cpp" +#line 11266 "MachineIndependent/glslang_tab.cpp" break; - case 565: /* $@6: %empty */ -#line 3715 "MachineIndependent/glslang.y" + case 576: /* $@6: %empty */ +#line 3771 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 11065 "MachineIndependent/glslang_tab.cpp" +#line 11275 "MachineIndependent/glslang_tab.cpp" break; - case 566: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ -#line 3719 "MachineIndependent/glslang.y" + case 577: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ +#line 3775 "MachineIndependent/glslang.y" { - if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate()) - (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence); + if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate()) { + (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence); + (yyvsp[-2].interm.intermNode)->getAsAggregate()->setEndLoc((yyvsp[0].lex).loc); + } (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode); } -#line 11075 "MachineIndependent/glslang_tab.cpp" +#line 11287 "MachineIndependent/glslang_tab.cpp" break; - case 567: /* statement_no_new_scope: compound_statement_no_new_scope */ -#line 3727 "MachineIndependent/glslang.y" + case 578: /* statement_no_new_scope: compound_statement_no_new_scope */ +#line 3785 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11081 "MachineIndependent/glslang_tab.cpp" +#line 11293 "MachineIndependent/glslang_tab.cpp" break; - case 568: /* statement_no_new_scope: simple_statement */ -#line 3728 "MachineIndependent/glslang.y" + case 579: /* statement_no_new_scope: simple_statement */ +#line 3786 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11087 "MachineIndependent/glslang_tab.cpp" +#line 11299 "MachineIndependent/glslang_tab.cpp" break; - case 569: /* $@7: %empty */ -#line 3732 "MachineIndependent/glslang.y" + case 580: /* $@7: %empty */ +#line 3790 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 11095 "MachineIndependent/glslang_tab.cpp" +#line 11307 "MachineIndependent/glslang_tab.cpp" break; - case 570: /* statement_scoped: $@7 compound_statement */ -#line 3735 "MachineIndependent/glslang.y" + case 581: /* statement_scoped: $@7 compound_statement */ +#line 3793 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11104 "MachineIndependent/glslang_tab.cpp" +#line 11316 "MachineIndependent/glslang_tab.cpp" break; - case 571: /* $@8: %empty */ -#line 3739 "MachineIndependent/glslang.y" + case 582: /* $@8: %empty */ +#line 3797 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11114 "MachineIndependent/glslang_tab.cpp" +#line 11326 "MachineIndependent/glslang_tab.cpp" break; - case 572: /* statement_scoped: $@8 simple_statement */ -#line 3744 "MachineIndependent/glslang.y" + case 583: /* statement_scoped: $@8 simple_statement */ +#line 3802 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11125 "MachineIndependent/glslang_tab.cpp" +#line 11337 "MachineIndependent/glslang_tab.cpp" break; - case 573: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ -#line 3753 "MachineIndependent/glslang.y" + case 584: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ +#line 3811 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11133 "MachineIndependent/glslang_tab.cpp" +#line 11345 "MachineIndependent/glslang_tab.cpp" break; - case 574: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ -#line 3756 "MachineIndependent/glslang.y" + case 585: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ +#line 3814 "MachineIndependent/glslang.y" { - if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate()) + if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate()) { (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence); + (yyvsp[-1].interm.intermNode)->getAsAggregate()->setEndLoc((yyvsp[0].lex).loc); + } (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode); } -#line 11143 "MachineIndependent/glslang_tab.cpp" +#line 11357 "MachineIndependent/glslang_tab.cpp" break; - case 575: /* statement_list: statement */ -#line 3764 "MachineIndependent/glslang.y" + case 586: /* statement_list: statement */ +#line 3824 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase || @@ -11152,11 +11366,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 11156 "MachineIndependent/glslang_tab.cpp" +#line 11370 "MachineIndependent/glslang_tab.cpp" break; - case 576: /* statement_list: statement_list statement */ -#line 3772 "MachineIndependent/glslang.y" + case 587: /* statement_list: statement_list statement */ +#line 3832 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase || (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) { @@ -11165,77 +11379,77 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 11169 "MachineIndependent/glslang_tab.cpp" +#line 11383 "MachineIndependent/glslang_tab.cpp" break; - case 577: /* expression_statement: SEMICOLON */ -#line 3783 "MachineIndependent/glslang.y" + case 588: /* expression_statement: SEMICOLON */ +#line 3843 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11175 "MachineIndependent/glslang_tab.cpp" +#line 11389 "MachineIndependent/glslang_tab.cpp" break; - case 578: /* expression_statement: expression SEMICOLON */ -#line 3784 "MachineIndependent/glslang.y" + case 589: /* expression_statement: expression SEMICOLON */ +#line 3844 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 11181 "MachineIndependent/glslang_tab.cpp" +#line 11395 "MachineIndependent/glslang_tab.cpp" break; - case 579: /* selection_statement: selection_statement_nonattributed */ -#line 3788 "MachineIndependent/glslang.y" + case 590: /* selection_statement: selection_statement_nonattributed */ +#line 3848 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11189 "MachineIndependent/glslang_tab.cpp" +#line 11403 "MachineIndependent/glslang_tab.cpp" break; - case 580: /* selection_statement: attribute selection_statement_nonattributed */ -#line 3792 "MachineIndependent/glslang.y" + case 591: /* selection_statement: attribute selection_statement_nonattributed */ +#line 3851 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11199 "MachineIndependent/glslang_tab.cpp" +#line 11413 "MachineIndependent/glslang_tab.cpp" break; - case 581: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ -#line 3800 "MachineIndependent/glslang.y" + case 592: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ +#line 3858 "MachineIndependent/glslang.y" { parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode)); (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc); } -#line 11208 "MachineIndependent/glslang_tab.cpp" +#line 11422 "MachineIndependent/glslang_tab.cpp" break; - case 582: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ -#line 3807 "MachineIndependent/glslang.y" + case 593: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ +#line 3865 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 11217 "MachineIndependent/glslang_tab.cpp" +#line 11431 "MachineIndependent/glslang_tab.cpp" break; - case 583: /* selection_rest_statement: statement_scoped */ -#line 3811 "MachineIndependent/glslang.y" + case 594: /* selection_rest_statement: statement_scoped */ +#line 3869 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 11226 "MachineIndependent/glslang_tab.cpp" +#line 11440 "MachineIndependent/glslang_tab.cpp" break; - case 584: /* condition: expression */ -#line 3819 "MachineIndependent/glslang.y" + case 595: /* condition: expression */ +#line 3877 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)); } -#line 11235 "MachineIndependent/glslang_tab.cpp" +#line 11449 "MachineIndependent/glslang_tab.cpp" break; - case 585: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 3823 "MachineIndependent/glslang.y" + case 596: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 3881 "MachineIndependent/glslang.y" { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -11246,29 +11460,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermTypedNode) = 0; } -#line 11250 "MachineIndependent/glslang_tab.cpp" +#line 11464 "MachineIndependent/glslang_tab.cpp" break; - case 586: /* switch_statement: switch_statement_nonattributed */ -#line 3836 "MachineIndependent/glslang.y" + case 597: /* switch_statement: switch_statement_nonattributed */ +#line 3894 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11258 "MachineIndependent/glslang_tab.cpp" +#line 11472 "MachineIndependent/glslang_tab.cpp" break; - case 587: /* switch_statement: attribute switch_statement_nonattributed */ -#line 3840 "MachineIndependent/glslang.y" + case 598: /* switch_statement: attribute switch_statement_nonattributed */ +#line 3897 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11268 "MachineIndependent/glslang_tab.cpp" +#line 11482 "MachineIndependent/glslang_tab.cpp" break; - case 588: /* $@9: %empty */ -#line 3848 "MachineIndependent/glslang.y" + case 599: /* $@9: %empty */ +#line 3904 "MachineIndependent/glslang.y" { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -11277,11 +11491,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 11281 "MachineIndependent/glslang_tab.cpp" +#line 11495 "MachineIndependent/glslang_tab.cpp" break; - case 589: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ -#line 3856 "MachineIndependent/glslang.y" + case 600: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ +#line 3912 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0); delete parseContext.switchSequenceStack.back(); @@ -11291,27 +11505,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11295 "MachineIndependent/glslang_tab.cpp" +#line 11509 "MachineIndependent/glslang_tab.cpp" break; - case 590: /* switch_statement_list: %empty */ -#line 3868 "MachineIndependent/glslang.y" + case 601: /* switch_statement_list: %empty */ +#line 3924 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11303 "MachineIndependent/glslang_tab.cpp" +#line 11517 "MachineIndependent/glslang_tab.cpp" break; - case 591: /* switch_statement_list: statement_list */ -#line 3871 "MachineIndependent/glslang.y" + case 602: /* switch_statement_list: statement_list */ +#line 3927 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11311 "MachineIndependent/glslang_tab.cpp" +#line 11525 "MachineIndependent/glslang_tab.cpp" break; - case 592: /* case_label: CASE expression COLON */ -#line 3877 "MachineIndependent/glslang.y" + case 603: /* case_label: CASE expression COLON */ +#line 3933 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -11324,11 +11538,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 11328 "MachineIndependent/glslang_tab.cpp" +#line 11542 "MachineIndependent/glslang_tab.cpp" break; - case 593: /* case_label: DEFAULT COLON */ -#line 3889 "MachineIndependent/glslang.y" + case 604: /* case_label: DEFAULT COLON */ +#line 3945 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -11338,29 +11552,30 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 11342 "MachineIndependent/glslang_tab.cpp" +#line 11556 "MachineIndependent/glslang_tab.cpp" break; - case 594: /* iteration_statement: iteration_statement_nonattributed */ -#line 3901 "MachineIndependent/glslang.y" + case 605: /* iteration_statement: iteration_statement_nonattributed */ +#line 3957 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11350 "MachineIndependent/glslang_tab.cpp" +#line 11564 "MachineIndependent/glslang_tab.cpp" break; - case 595: /* iteration_statement: attribute iteration_statement_nonattributed */ -#line 3905 "MachineIndependent/glslang.y" + case 606: /* iteration_statement: attribute iteration_statement_nonattributed */ +#line 3960 "MachineIndependent/glslang.y" { - parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); + const char * extensions[2] = { E_GL_EXT_control_flow_attributes, E_GL_EXT_control_flow_attributes2 }; + parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 2, extensions, "attribute"); parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11360 "MachineIndependent/glslang_tab.cpp" +#line 11575 "MachineIndependent/glslang_tab.cpp" break; - case 596: /* $@10: %empty */ -#line 3913 "MachineIndependent/glslang.y" + case 607: /* $@10: %empty */ +#line 3968 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -11369,11 +11584,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11373 "MachineIndependent/glslang_tab.cpp" +#line 11588 "MachineIndependent/glslang_tab.cpp" break; - case 597: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ -#line 3921 "MachineIndependent/glslang.y" + case 608: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ +#line 3976 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc); @@ -11381,22 +11596,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11385 "MachineIndependent/glslang_tab.cpp" +#line 11600 "MachineIndependent/glslang_tab.cpp" break; - case 598: /* $@11: %empty */ -#line 3928 "MachineIndependent/glslang.y" + case 609: /* $@11: %empty */ +#line 3983 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11396 "MachineIndependent/glslang_tab.cpp" +#line 11611 "MachineIndependent/glslang_tab.cpp" break; - case 599: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ -#line 3934 "MachineIndependent/glslang.y" + case 610: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ +#line 3989 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -11409,22 +11624,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11413 "MachineIndependent/glslang_tab.cpp" +#line 11628 "MachineIndependent/glslang_tab.cpp" break; - case 600: /* $@12: %empty */ -#line 3946 "MachineIndependent/glslang.y" + case 611: /* $@12: %empty */ +#line 4001 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11424 "MachineIndependent/glslang_tab.cpp" +#line 11639 "MachineIndependent/glslang_tab.cpp" break; - case 601: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ -#line 3952 "MachineIndependent/glslang.y" + case 612: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ +#line 4007 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); @@ -11437,81 +11652,81 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11441 "MachineIndependent/glslang_tab.cpp" +#line 11656 "MachineIndependent/glslang_tab.cpp" break; - case 602: /* for_init_statement: expression_statement */ -#line 3967 "MachineIndependent/glslang.y" + case 613: /* for_init_statement: expression_statement */ +#line 4022 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11449 "MachineIndependent/glslang_tab.cpp" +#line 11664 "MachineIndependent/glslang_tab.cpp" break; - case 603: /* for_init_statement: declaration_statement */ -#line 3970 "MachineIndependent/glslang.y" + case 614: /* for_init_statement: declaration_statement */ +#line 4025 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11457 "MachineIndependent/glslang_tab.cpp" +#line 11672 "MachineIndependent/glslang_tab.cpp" break; - case 604: /* conditionopt: condition */ -#line 3976 "MachineIndependent/glslang.y" + case 615: /* conditionopt: condition */ +#line 4031 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 11465 "MachineIndependent/glslang_tab.cpp" +#line 11680 "MachineIndependent/glslang_tab.cpp" break; - case 605: /* conditionopt: %empty */ -#line 3979 "MachineIndependent/glslang.y" + case 616: /* conditionopt: %empty */ +#line 4034 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = 0; } -#line 11473 "MachineIndependent/glslang_tab.cpp" +#line 11688 "MachineIndependent/glslang_tab.cpp" break; - case 606: /* for_rest_statement: conditionopt SEMICOLON */ -#line 3985 "MachineIndependent/glslang.y" + case 617: /* for_rest_statement: conditionopt SEMICOLON */ +#line 4040 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 11482 "MachineIndependent/glslang_tab.cpp" +#line 11697 "MachineIndependent/glslang_tab.cpp" break; - case 607: /* for_rest_statement: conditionopt SEMICOLON expression */ -#line 3989 "MachineIndependent/glslang.y" + case 618: /* for_rest_statement: conditionopt SEMICOLON expression */ +#line 4044 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 11491 "MachineIndependent/glslang_tab.cpp" +#line 11706 "MachineIndependent/glslang_tab.cpp" break; - case 608: /* jump_statement: CONTINUE SEMICOLON */ -#line 3996 "MachineIndependent/glslang.y" + case 619: /* jump_statement: CONTINUE SEMICOLON */ +#line 4051 "MachineIndependent/glslang.y" { if (parseContext.loopNestingLevel <= 0) parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", ""); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc); } -#line 11501 "MachineIndependent/glslang_tab.cpp" +#line 11716 "MachineIndependent/glslang_tab.cpp" break; - case 609: /* jump_statement: BREAK SEMICOLON */ -#line 4001 "MachineIndependent/glslang.y" + case 620: /* jump_statement: BREAK SEMICOLON */ +#line 4056 "MachineIndependent/glslang.y" { if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0) parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", ""); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc); } -#line 11511 "MachineIndependent/glslang_tab.cpp" +#line 11726 "MachineIndependent/glslang_tab.cpp" break; - case 610: /* jump_statement: RETURN SEMICOLON */ -#line 4006 "MachineIndependent/glslang.y" + case 621: /* jump_statement: RETURN SEMICOLON */ +#line 4061 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -11519,101 +11734,101 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 11523 "MachineIndependent/glslang_tab.cpp" +#line 11738 "MachineIndependent/glslang_tab.cpp" break; - case 611: /* jump_statement: RETURN expression SEMICOLON */ -#line 4013 "MachineIndependent/glslang.y" + case 622: /* jump_statement: RETURN expression SEMICOLON */ +#line 4068 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 11531 "MachineIndependent/glslang_tab.cpp" +#line 11746 "MachineIndependent/glslang_tab.cpp" break; - case 612: /* jump_statement: DISCARD SEMICOLON */ -#line 4016 "MachineIndependent/glslang.y" + case 623: /* jump_statement: DISCARD SEMICOLON */ +#line 4071 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 11540 "MachineIndependent/glslang_tab.cpp" +#line 11755 "MachineIndependent/glslang_tab.cpp" break; - case 613: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ -#line 4020 "MachineIndependent/glslang.y" + case 624: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ +#line 4075 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc); } -#line 11549 "MachineIndependent/glslang_tab.cpp" +#line 11764 "MachineIndependent/glslang_tab.cpp" break; - case 614: /* jump_statement: TERMINATE_RAY SEMICOLON */ -#line 4025 "MachineIndependent/glslang.y" + case 625: /* jump_statement: TERMINATE_RAY SEMICOLON */ +#line 4079 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc); } -#line 11558 "MachineIndependent/glslang_tab.cpp" +#line 11773 "MachineIndependent/glslang_tab.cpp" break; - case 615: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ -#line 4029 "MachineIndependent/glslang.y" + case 626: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ +#line 4083 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc); } -#line 11567 "MachineIndependent/glslang_tab.cpp" +#line 11782 "MachineIndependent/glslang_tab.cpp" break; - case 616: /* translation_unit: external_declaration */ -#line 4039 "MachineIndependent/glslang.y" + case 627: /* translation_unit: external_declaration */ +#line 4092 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 11576 "MachineIndependent/glslang_tab.cpp" +#line 11791 "MachineIndependent/glslang_tab.cpp" break; - case 617: /* translation_unit: translation_unit external_declaration */ -#line 4043 "MachineIndependent/glslang.y" + case 628: /* translation_unit: translation_unit external_declaration */ +#line 4096 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermNode) != nullptr) { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } } -#line 11587 "MachineIndependent/glslang_tab.cpp" +#line 11802 "MachineIndependent/glslang_tab.cpp" break; - case 618: /* external_declaration: function_definition */ -#line 4052 "MachineIndependent/glslang.y" + case 629: /* external_declaration: function_definition */ +#line 4105 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11595 "MachineIndependent/glslang_tab.cpp" +#line 11810 "MachineIndependent/glslang_tab.cpp" break; - case 619: /* external_declaration: declaration */ -#line 4055 "MachineIndependent/glslang.y" + case 630: /* external_declaration: declaration */ +#line 4108 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11603 "MachineIndependent/glslang_tab.cpp" +#line 11818 "MachineIndependent/glslang_tab.cpp" break; - case 620: /* external_declaration: SEMICOLON */ -#line 4059 "MachineIndependent/glslang.y" + case 631: /* external_declaration: SEMICOLON */ +#line 4111 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon"); parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon"); (yyval.interm.intermNode) = nullptr; } -#line 11613 "MachineIndependent/glslang_tab.cpp" +#line 11828 "MachineIndependent/glslang_tab.cpp" break; - case 621: /* $@13: %empty */ -#line 4068 "MachineIndependent/glslang.y" + case 632: /* $@13: %empty */ +#line 4119 "MachineIndependent/glslang.y" { (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */); (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function); @@ -11626,17 +11841,18 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; } } -#line 11630 "MachineIndependent/glslang_tab.cpp" +#line 11845 "MachineIndependent/glslang_tab.cpp" break; - case 622: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ -#line 4080 "MachineIndependent/glslang.y" + case 633: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ +#line 4131 "MachineIndependent/glslang.y" { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) parseContext.error((yyvsp[-2].interm).loc, "function does not return a value:", "", (yyvsp[-2].interm).function->getName().c_str()); parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermNode)); + (yyval.interm.intermNode)->getAsAggregate()->setLinkType((yyvsp[-2].interm).function->getLinkType()); parseContext.intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yyvsp[-2].interm).function->getType(), (yyvsp[-2].interm).loc); (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[-2].interm).function->getMangledName().c_str()); @@ -11657,228 +11873,228 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; } } -#line 11661 "MachineIndependent/glslang_tab.cpp" +#line 11877 "MachineIndependent/glslang_tab.cpp" break; - case 623: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ -#line 4110 "MachineIndependent/glslang.y" + case 634: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ +#line 4161 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); } -#line 11669 "MachineIndependent/glslang_tab.cpp" +#line 11885 "MachineIndependent/glslang_tab.cpp" break; - case 624: /* attribute_list: single_attribute */ -#line 4115 "MachineIndependent/glslang.y" + case 635: /* attribute_list: single_attribute */ +#line 4166 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 11677 "MachineIndependent/glslang_tab.cpp" +#line 11893 "MachineIndependent/glslang_tab.cpp" break; - case 625: /* attribute_list: attribute_list COMMA single_attribute */ -#line 4118 "MachineIndependent/glslang.y" + case 636: /* attribute_list: attribute_list COMMA single_attribute */ +#line 4169 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 11685 "MachineIndependent/glslang_tab.cpp" +#line 11901 "MachineIndependent/glslang_tab.cpp" break; - case 626: /* single_attribute: IDENTIFIER */ -#line 4123 "MachineIndependent/glslang.y" + case 637: /* single_attribute: IDENTIFIER */ +#line 4174 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 11693 "MachineIndependent/glslang_tab.cpp" +#line 11909 "MachineIndependent/glslang_tab.cpp" break; - case 627: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ -#line 4126 "MachineIndependent/glslang.y" + case 638: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ +#line 4177 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 11701 "MachineIndependent/glslang_tab.cpp" +#line 11917 "MachineIndependent/glslang_tab.cpp" break; - case 628: /* spirv_requirements_list: spirv_requirements_parameter */ -#line 4133 "MachineIndependent/glslang.y" + case 639: /* spirv_requirements_list: spirv_requirements_parameter */ +#line 4182 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq); } -#line 11709 "MachineIndependent/glslang_tab.cpp" +#line 11925 "MachineIndependent/glslang_tab.cpp" break; - case 629: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ -#line 4136 "MachineIndependent/glslang.y" + case 640: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ +#line 4185 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq)); } -#line 11717 "MachineIndependent/glslang_tab.cpp" +#line 11933 "MachineIndependent/glslang_tab.cpp" break; - case 630: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ -#line 4141 "MachineIndependent/glslang.y" + case 641: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ +#line 4190 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr); } -#line 11725 "MachineIndependent/glslang_tab.cpp" +#line 11941 "MachineIndependent/glslang_tab.cpp" break; - case 631: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ -#line 4144 "MachineIndependent/glslang.y" + case 642: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ +#line 4193 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11733 "MachineIndependent/glslang_tab.cpp" +#line 11949 "MachineIndependent/glslang_tab.cpp" break; - case 632: /* spirv_extension_list: STRING_LITERAL */ -#line 4149 "MachineIndependent/glslang.y" + case 643: /* spirv_extension_list: STRING_LITERAL */ +#line 4198 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 11741 "MachineIndependent/glslang_tab.cpp" +#line 11957 "MachineIndependent/glslang_tab.cpp" break; - case 633: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ -#line 4152 "MachineIndependent/glslang.y" + case 644: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ +#line 4201 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 11749 "MachineIndependent/glslang_tab.cpp" +#line 11965 "MachineIndependent/glslang_tab.cpp" break; - case 634: /* spirv_capability_list: INTCONSTANT */ -#line 4157 "MachineIndependent/glslang.y" + case 645: /* spirv_capability_list: INTCONSTANT */ +#line 4206 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true)); } -#line 11757 "MachineIndependent/glslang_tab.cpp" +#line 11973 "MachineIndependent/glslang_tab.cpp" break; - case 635: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ -#line 4160 "MachineIndependent/glslang.y" + case 646: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ +#line 4209 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true)); } -#line 11765 "MachineIndependent/glslang_tab.cpp" +#line 11981 "MachineIndependent/glslang_tab.cpp" break; - case 636: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4165 "MachineIndependent/glslang.y" + case 647: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4214 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); (yyval.interm.intermNode) = 0; } -#line 11774 "MachineIndependent/glslang_tab.cpp" +#line 11990 "MachineIndependent/glslang_tab.cpp" break; - case 637: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4169 "MachineIndependent/glslang.y" + case 648: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4218 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); (yyval.interm.intermNode) = 0; } -#line 11784 "MachineIndependent/glslang_tab.cpp" +#line 12000 "MachineIndependent/glslang_tab.cpp" break; - case 638: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4174 "MachineIndependent/glslang.y" + case 649: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ +#line 4223 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11793 "MachineIndependent/glslang_tab.cpp" +#line 12009 "MachineIndependent/glslang_tab.cpp" break; - case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4178 "MachineIndependent/glslang.y" + case 650: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ +#line 4227 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11803 "MachineIndependent/glslang_tab.cpp" +#line 12019 "MachineIndependent/glslang_tab.cpp" break; - case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ -#line 4183 "MachineIndependent/glslang.y" + case 651: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ +#line 4232 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11812 "MachineIndependent/glslang_tab.cpp" +#line 12028 "MachineIndependent/glslang_tab.cpp" break; - case 641: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ -#line 4187 "MachineIndependent/glslang.y" + case 652: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ +#line 4236 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11822 "MachineIndependent/glslang_tab.cpp" +#line 12038 "MachineIndependent/glslang_tab.cpp" break; - case 642: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ -#line 4194 "MachineIndependent/glslang.y" + case 653: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ +#line 4243 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 11830 "MachineIndependent/glslang_tab.cpp" +#line 12046 "MachineIndependent/glslang_tab.cpp" break; - case 643: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ -#line 4197 "MachineIndependent/glslang.y" + case 654: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ +#line 4246 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 11838 "MachineIndependent/glslang_tab.cpp" +#line 12054 "MachineIndependent/glslang_tab.cpp" break; - case 644: /* spirv_execution_mode_parameter: FLOATCONSTANT */ -#line 4202 "MachineIndependent/glslang.y" + case 655: /* spirv_execution_mode_parameter: FLOATCONSTANT */ +#line 4251 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 11846 "MachineIndependent/glslang_tab.cpp" +#line 12062 "MachineIndependent/glslang_tab.cpp" break; - case 645: /* spirv_execution_mode_parameter: INTCONSTANT */ -#line 4205 "MachineIndependent/glslang.y" + case 656: /* spirv_execution_mode_parameter: INTCONSTANT */ +#line 4254 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 11854 "MachineIndependent/glslang_tab.cpp" +#line 12070 "MachineIndependent/glslang_tab.cpp" break; - case 646: /* spirv_execution_mode_parameter: UINTCONSTANT */ -#line 4208 "MachineIndependent/glslang.y" + case 657: /* spirv_execution_mode_parameter: UINTCONSTANT */ +#line 4257 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 11862 "MachineIndependent/glslang_tab.cpp" +#line 12078 "MachineIndependent/glslang_tab.cpp" break; - case 647: /* spirv_execution_mode_parameter: BOOLCONSTANT */ -#line 4211 "MachineIndependent/glslang.y" + case 658: /* spirv_execution_mode_parameter: BOOLCONSTANT */ +#line 4260 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 11870 "MachineIndependent/glslang_tab.cpp" +#line 12086 "MachineIndependent/glslang_tab.cpp" break; - case 648: /* spirv_execution_mode_parameter: STRING_LITERAL */ -#line 4214 "MachineIndependent/glslang.y" + case 659: /* spirv_execution_mode_parameter: STRING_LITERAL */ +#line 4263 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 11878 "MachineIndependent/glslang_tab.cpp" +#line 12094 "MachineIndependent/glslang_tab.cpp" break; - case 649: /* spirv_execution_mode_id_parameter_list: constant_expression */ -#line 4219 "MachineIndependent/glslang.y" + case 660: /* spirv_execution_mode_id_parameter_list: constant_expression */ +#line 4268 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -11888,11 +12104,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode)); } -#line 11892 "MachineIndependent/glslang_tab.cpp" +#line 12108 "MachineIndependent/glslang_tab.cpp" break; - case 650: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ -#line 4228 "MachineIndependent/glslang.y" + case 661: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ +#line 4277 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -11902,310 +12118,351 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode)); } -#line 11906 "MachineIndependent/glslang_tab.cpp" +#line 12122 "MachineIndependent/glslang_tab.cpp" break; - case 651: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4239 "MachineIndependent/glslang.y" + case 662: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4288 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc); (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass; (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i; } -#line 11916 "MachineIndependent/glslang_tab.cpp" +#line 12132 "MachineIndependent/glslang_tab.cpp" break; - case 652: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4244 "MachineIndependent/glslang.y" + case 663: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4293 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass; (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i; } -#line 11927 "MachineIndependent/glslang_tab.cpp" +#line 12143 "MachineIndependent/glslang_tab.cpp" break; - case 653: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4252 "MachineIndependent/glslang.y" + case 664: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4301 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i); } -#line 11936 "MachineIndependent/glslang_tab.cpp" +#line 12152 "MachineIndependent/glslang_tab.cpp" break; - case 654: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4256 "MachineIndependent/glslang.y" + case 665: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4305 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i); } -#line 11946 "MachineIndependent/glslang_tab.cpp" +#line 12162 "MachineIndependent/glslang_tab.cpp" break; - case 655: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4261 "MachineIndependent/glslang.y" + case 666: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ +#line 4310 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11955 "MachineIndependent/glslang_tab.cpp" +#line 12171 "MachineIndependent/glslang_tab.cpp" break; - case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4265 "MachineIndependent/glslang.y" + case 667: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ +#line 4314 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11965 "MachineIndependent/glslang_tab.cpp" +#line 12181 "MachineIndependent/glslang_tab.cpp" break; - case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4270 "MachineIndependent/glslang.y" + case 668: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ +#line 4319 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11974 "MachineIndependent/glslang_tab.cpp" +#line 12190 "MachineIndependent/glslang_tab.cpp" break; - case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4274 "MachineIndependent/glslang.y" + case 669: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ +#line 4323 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11984 "MachineIndependent/glslang_tab.cpp" +#line 12200 "MachineIndependent/glslang_tab.cpp" break; - case 659: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4279 "MachineIndependent/glslang.y" + case 670: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ +#line 4328 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11993 "MachineIndependent/glslang_tab.cpp" +#line 12209 "MachineIndependent/glslang_tab.cpp" break; - case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4283 "MachineIndependent/glslang.y" + case 671: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ +#line 4332 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 12003 "MachineIndependent/glslang_tab.cpp" +#line 12219 "MachineIndependent/glslang_tab.cpp" break; - case 661: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ -#line 4290 "MachineIndependent/glslang.y" + case 672: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ +#line 4339 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 12011 "MachineIndependent/glslang_tab.cpp" +#line 12227 "MachineIndependent/glslang_tab.cpp" break; - case 662: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ -#line 4293 "MachineIndependent/glslang.y" + case 673: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ +#line 4342 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 12019 "MachineIndependent/glslang_tab.cpp" +#line 12235 "MachineIndependent/glslang_tab.cpp" break; - case 663: /* spirv_decorate_parameter: FLOATCONSTANT */ -#line 4298 "MachineIndependent/glslang.y" + case 674: /* spirv_decorate_parameter: FLOATCONSTANT */ +#line 4347 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 12027 "MachineIndependent/glslang_tab.cpp" +#line 12243 "MachineIndependent/glslang_tab.cpp" break; - case 664: /* spirv_decorate_parameter: INTCONSTANT */ -#line 4301 "MachineIndependent/glslang.y" + case 675: /* spirv_decorate_parameter: INTCONSTANT */ +#line 4350 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 12035 "MachineIndependent/glslang_tab.cpp" +#line 12251 "MachineIndependent/glslang_tab.cpp" break; - case 665: /* spirv_decorate_parameter: UINTCONSTANT */ -#line 4304 "MachineIndependent/glslang.y" + case 676: /* spirv_decorate_parameter: UINTCONSTANT */ +#line 4353 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 12043 "MachineIndependent/glslang_tab.cpp" +#line 12259 "MachineIndependent/glslang_tab.cpp" break; - case 666: /* spirv_decorate_parameter: BOOLCONSTANT */ -#line 4307 "MachineIndependent/glslang.y" + case 677: /* spirv_decorate_parameter: BOOLCONSTANT */ +#line 4356 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 12051 "MachineIndependent/glslang_tab.cpp" +#line 12267 "MachineIndependent/glslang_tab.cpp" + break; + + case 678: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter */ +#line 4361 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); + } +#line 12275 "MachineIndependent/glslang_tab.cpp" + break; + + case 679: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter */ +#line 4364 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); + } +#line 12283 "MachineIndependent/glslang_tab.cpp" break; - case 667: /* spirv_decorate_id_parameter_list: constant_expression */ -#line 4312 "MachineIndependent/glslang.y" + case 680: /* spirv_decorate_id_parameter: variable_identifier */ +#line 4369 "MachineIndependent/glslang.y" { - if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && - (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && - (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint && - (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool) - parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); - (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode)); + if ((yyvsp[0].interm.intermTypedNode)->getAsConstantUnion() || (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode()) + (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode); + else + parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "only allow constants or variables which are not elements of a composite", "", ""); } -#line 12064 "MachineIndependent/glslang_tab.cpp" +#line 12294 "MachineIndependent/glslang_tab.cpp" break; - case 668: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA constant_expression */ -#line 4320 "MachineIndependent/glslang.y" - { - if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && - (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && - (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint && - (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool) - parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); - (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode)); + case 681: /* spirv_decorate_id_parameter: FLOATCONSTANT */ +#line 4375 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); + } +#line 12302 "MachineIndependent/glslang_tab.cpp" + break; + + case 682: /* spirv_decorate_id_parameter: INTCONSTANT */ +#line 4378 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 12077 "MachineIndependent/glslang_tab.cpp" +#line 12310 "MachineIndependent/glslang_tab.cpp" break; - case 669: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ -#line 4330 "MachineIndependent/glslang.y" + case 683: /* spirv_decorate_id_parameter: UINTCONSTANT */ +#line 4381 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); + } +#line 12318 "MachineIndependent/glslang_tab.cpp" + break; + + case 684: /* spirv_decorate_id_parameter: BOOLCONSTANT */ +#line 4384 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); + } +#line 12326 "MachineIndependent/glslang_tab.cpp" + break; + + case 685: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ +#line 4389 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate( parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 12086 "MachineIndependent/glslang_tab.cpp" +#line 12335 "MachineIndependent/glslang_tab.cpp" break; - case 670: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ -#line 4334 "MachineIndependent/glslang.y" + case 686: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ +#line 4393 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 12094 "MachineIndependent/glslang_tab.cpp" +#line 12343 "MachineIndependent/glslang_tab.cpp" break; - case 671: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4339 "MachineIndependent/glslang.y" + case 687: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ +#line 4398 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams)); } -#line 12103 "MachineIndependent/glslang_tab.cpp" +#line 12352 "MachineIndependent/glslang_tab.cpp" break; - case 672: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4343 "MachineIndependent/glslang.y" + case 688: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ +#line 4402 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams)); } -#line 12113 "MachineIndependent/glslang_tab.cpp" +#line 12362 "MachineIndependent/glslang_tab.cpp" break; - case 673: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4348 "MachineIndependent/glslang.y" + case 689: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4407 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst)); } -#line 12122 "MachineIndependent/glslang_tab.cpp" +#line 12371 "MachineIndependent/glslang_tab.cpp" break; - case 674: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4352 "MachineIndependent/glslang.y" + case 690: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4411 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst)); } -#line 12132 "MachineIndependent/glslang_tab.cpp" +#line 12381 "MachineIndependent/glslang_tab.cpp" break; - case 675: /* spirv_type_parameter_list: spirv_type_parameter */ -#line 4359 "MachineIndependent/glslang.y" + case 691: /* spirv_type_parameter_list: spirv_type_parameter */ +#line 4418 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams); } -#line 12140 "MachineIndependent/glslang_tab.cpp" +#line 12389 "MachineIndependent/glslang_tab.cpp" break; - case 676: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ -#line 4362 "MachineIndependent/glslang.y" + case 692: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ +#line 4421 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams)); } -#line 12148 "MachineIndependent/glslang_tab.cpp" +#line 12397 "MachineIndependent/glslang_tab.cpp" break; - case 677: /* spirv_type_parameter: constant_expression */ -#line 4367 "MachineIndependent/glslang.y" + case 693: /* spirv_type_parameter: constant_expression */ +#line 4426 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion()); } -#line 12156 "MachineIndependent/glslang_tab.cpp" +#line 12405 "MachineIndependent/glslang_tab.cpp" + break; + + case 694: /* spirv_type_parameter: type_specifier_nonarray */ +#line 4429 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); + } +#line 12413 "MachineIndependent/glslang_tab.cpp" break; - case 678: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4372 "MachineIndependent/glslang.y" + case 695: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4434 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 12164 "MachineIndependent/glslang_tab.cpp" +#line 12421 "MachineIndependent/glslang_tab.cpp" break; - case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4375 "MachineIndependent/glslang.y" + case 696: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4437 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 12173 "MachineIndependent/glslang_tab.cpp" +#line 12430 "MachineIndependent/glslang_tab.cpp" break; - case 680: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ -#line 4381 "MachineIndependent/glslang.y" + case 697: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ +#line 4443 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst); } -#line 12181 "MachineIndependent/glslang_tab.cpp" +#line 12438 "MachineIndependent/glslang_tab.cpp" break; - case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ -#line 4384 "MachineIndependent/glslang.y" + case 698: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ +#line 4446 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst)); } -#line 12189 "MachineIndependent/glslang_tab.cpp" +#line 12446 "MachineIndependent/glslang_tab.cpp" break; - case 682: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ -#line 4389 "MachineIndependent/glslang.y" + case 699: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ +#line 4451 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string); } -#line 12197 "MachineIndependent/glslang_tab.cpp" +#line 12454 "MachineIndependent/glslang_tab.cpp" break; - case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ -#line 4392 "MachineIndependent/glslang.y" + case 700: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ +#line 4454 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i); } -#line 12205 "MachineIndependent/glslang_tab.cpp" +#line 12462 "MachineIndependent/glslang_tab.cpp" break; -#line 12209 "MachineIndependent/glslang_tab.cpp" +#line 12466 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -12281,7 +12538,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } yyerror (pParseContext, yymsgp); if (yysyntax_error_status == YYENOMEM) - goto yyexhaustedlab; + YYNOMEM; } } @@ -12317,6 +12574,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; + ++yynerrs; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -12377,7 +12635,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); `-------------------------------------*/ yyacceptlab: yyresult = 0; - goto yyreturn; + goto yyreturnlab; /*-----------------------------------. @@ -12385,24 +12643,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); `-----------------------------------*/ yyabortlab: yyresult = 1; - goto yyreturn; + goto yyreturnlab; -#if 1 -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ +/*-----------------------------------------------------------. +| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | +`-----------------------------------------------------------*/ yyexhaustedlab: yyerror (pParseContext, YY_("memory exhausted")); yyresult = 2; - goto yyreturn; -#endif + goto yyreturnlab; -/*-------------------------------------------------------. -| yyreturn -- parsing is finished, clean up and return. | -`-------------------------------------------------------*/ -yyreturn: +/*----------------------------------------------------------. +| yyreturnlab -- parsing is finished, clean up and return. | +`----------------------------------------------------------*/ +yyreturnlab: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at @@ -12430,5 +12686,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); return yyresult; } -#line 4397 "MachineIndependent/glslang.y" +#line 4458 "MachineIndependent/glslang.y" diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h index 596a10e6d9..d6484924d6 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/glslang/MachineIndependent/glslang_tab.cpp.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.7.4. */ +/* A Bison parser, made by GNU Bison 3.8.2. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ 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 . */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -217,295 +217,305 @@ extern int yydebug; FCOOPMATNV = 418, /* FCOOPMATNV */ ICOOPMATNV = 419, /* ICOOPMATNV */ UCOOPMATNV = 420, /* UCOOPMATNV */ - SAMPLERCUBEARRAY = 421, /* SAMPLERCUBEARRAY */ - SAMPLERCUBEARRAYSHADOW = 422, /* SAMPLERCUBEARRAYSHADOW */ - ISAMPLERCUBEARRAY = 423, /* ISAMPLERCUBEARRAY */ - USAMPLERCUBEARRAY = 424, /* USAMPLERCUBEARRAY */ - SAMPLER1D = 425, /* SAMPLER1D */ - SAMPLER1DARRAY = 426, /* SAMPLER1DARRAY */ - SAMPLER1DARRAYSHADOW = 427, /* SAMPLER1DARRAYSHADOW */ - ISAMPLER1D = 428, /* ISAMPLER1D */ - SAMPLER1DSHADOW = 429, /* SAMPLER1DSHADOW */ - SAMPLER2DRECT = 430, /* SAMPLER2DRECT */ - SAMPLER2DRECTSHADOW = 431, /* SAMPLER2DRECTSHADOW */ - ISAMPLER2DRECT = 432, /* ISAMPLER2DRECT */ - USAMPLER2DRECT = 433, /* USAMPLER2DRECT */ - SAMPLERBUFFER = 434, /* SAMPLERBUFFER */ - ISAMPLERBUFFER = 435, /* ISAMPLERBUFFER */ - USAMPLERBUFFER = 436, /* USAMPLERBUFFER */ - SAMPLER2DMS = 437, /* SAMPLER2DMS */ - ISAMPLER2DMS = 438, /* ISAMPLER2DMS */ - USAMPLER2DMS = 439, /* USAMPLER2DMS */ - SAMPLER2DMSARRAY = 440, /* SAMPLER2DMSARRAY */ - ISAMPLER2DMSARRAY = 441, /* ISAMPLER2DMSARRAY */ - USAMPLER2DMSARRAY = 442, /* USAMPLER2DMSARRAY */ - SAMPLEREXTERNALOES = 443, /* SAMPLEREXTERNALOES */ - SAMPLEREXTERNAL2DY2YEXT = 444, /* SAMPLEREXTERNAL2DY2YEXT */ - ISAMPLER1DARRAY = 445, /* ISAMPLER1DARRAY */ - USAMPLER1D = 446, /* USAMPLER1D */ - USAMPLER1DARRAY = 447, /* USAMPLER1DARRAY */ - F16SAMPLER1D = 448, /* F16SAMPLER1D */ - F16SAMPLER2D = 449, /* F16SAMPLER2D */ - F16SAMPLER3D = 450, /* F16SAMPLER3D */ - F16SAMPLER2DRECT = 451, /* F16SAMPLER2DRECT */ - F16SAMPLERCUBE = 452, /* F16SAMPLERCUBE */ - F16SAMPLER1DARRAY = 453, /* F16SAMPLER1DARRAY */ - F16SAMPLER2DARRAY = 454, /* F16SAMPLER2DARRAY */ - F16SAMPLERCUBEARRAY = 455, /* F16SAMPLERCUBEARRAY */ - F16SAMPLERBUFFER = 456, /* F16SAMPLERBUFFER */ - F16SAMPLER2DMS = 457, /* F16SAMPLER2DMS */ - F16SAMPLER2DMSARRAY = 458, /* F16SAMPLER2DMSARRAY */ - F16SAMPLER1DSHADOW = 459, /* F16SAMPLER1DSHADOW */ - F16SAMPLER2DSHADOW = 460, /* F16SAMPLER2DSHADOW */ - F16SAMPLER1DARRAYSHADOW = 461, /* F16SAMPLER1DARRAYSHADOW */ - F16SAMPLER2DARRAYSHADOW = 462, /* F16SAMPLER2DARRAYSHADOW */ - F16SAMPLER2DRECTSHADOW = 463, /* F16SAMPLER2DRECTSHADOW */ - F16SAMPLERCUBESHADOW = 464, /* F16SAMPLERCUBESHADOW */ - F16SAMPLERCUBEARRAYSHADOW = 465, /* F16SAMPLERCUBEARRAYSHADOW */ - IMAGE1D = 466, /* IMAGE1D */ - IIMAGE1D = 467, /* IIMAGE1D */ - UIMAGE1D = 468, /* UIMAGE1D */ - IMAGE2D = 469, /* IMAGE2D */ - IIMAGE2D = 470, /* IIMAGE2D */ - UIMAGE2D = 471, /* UIMAGE2D */ - IMAGE3D = 472, /* IMAGE3D */ - IIMAGE3D = 473, /* IIMAGE3D */ - UIMAGE3D = 474, /* UIMAGE3D */ - IMAGE2DRECT = 475, /* IMAGE2DRECT */ - IIMAGE2DRECT = 476, /* IIMAGE2DRECT */ - UIMAGE2DRECT = 477, /* UIMAGE2DRECT */ - IMAGECUBE = 478, /* IMAGECUBE */ - IIMAGECUBE = 479, /* IIMAGECUBE */ - UIMAGECUBE = 480, /* UIMAGECUBE */ - IMAGEBUFFER = 481, /* IMAGEBUFFER */ - IIMAGEBUFFER = 482, /* IIMAGEBUFFER */ - UIMAGEBUFFER = 483, /* UIMAGEBUFFER */ - IMAGE1DARRAY = 484, /* IMAGE1DARRAY */ - IIMAGE1DARRAY = 485, /* IIMAGE1DARRAY */ - UIMAGE1DARRAY = 486, /* UIMAGE1DARRAY */ - IMAGE2DARRAY = 487, /* IMAGE2DARRAY */ - IIMAGE2DARRAY = 488, /* IIMAGE2DARRAY */ - UIMAGE2DARRAY = 489, /* UIMAGE2DARRAY */ - IMAGECUBEARRAY = 490, /* IMAGECUBEARRAY */ - IIMAGECUBEARRAY = 491, /* IIMAGECUBEARRAY */ - UIMAGECUBEARRAY = 492, /* UIMAGECUBEARRAY */ - IMAGE2DMS = 493, /* IMAGE2DMS */ - IIMAGE2DMS = 494, /* IIMAGE2DMS */ - UIMAGE2DMS = 495, /* UIMAGE2DMS */ - IMAGE2DMSARRAY = 496, /* IMAGE2DMSARRAY */ - IIMAGE2DMSARRAY = 497, /* IIMAGE2DMSARRAY */ - UIMAGE2DMSARRAY = 498, /* UIMAGE2DMSARRAY */ - F16IMAGE1D = 499, /* F16IMAGE1D */ - F16IMAGE2D = 500, /* F16IMAGE2D */ - F16IMAGE3D = 501, /* F16IMAGE3D */ - F16IMAGE2DRECT = 502, /* F16IMAGE2DRECT */ - F16IMAGECUBE = 503, /* F16IMAGECUBE */ - F16IMAGE1DARRAY = 504, /* F16IMAGE1DARRAY */ - F16IMAGE2DARRAY = 505, /* F16IMAGE2DARRAY */ - F16IMAGECUBEARRAY = 506, /* F16IMAGECUBEARRAY */ - F16IMAGEBUFFER = 507, /* F16IMAGEBUFFER */ - F16IMAGE2DMS = 508, /* F16IMAGE2DMS */ - F16IMAGE2DMSARRAY = 509, /* F16IMAGE2DMSARRAY */ - I64IMAGE1D = 510, /* I64IMAGE1D */ - U64IMAGE1D = 511, /* U64IMAGE1D */ - I64IMAGE2D = 512, /* I64IMAGE2D */ - U64IMAGE2D = 513, /* U64IMAGE2D */ - I64IMAGE3D = 514, /* I64IMAGE3D */ - U64IMAGE3D = 515, /* U64IMAGE3D */ - I64IMAGE2DRECT = 516, /* I64IMAGE2DRECT */ - U64IMAGE2DRECT = 517, /* U64IMAGE2DRECT */ - I64IMAGECUBE = 518, /* I64IMAGECUBE */ - U64IMAGECUBE = 519, /* U64IMAGECUBE */ - I64IMAGEBUFFER = 520, /* I64IMAGEBUFFER */ - U64IMAGEBUFFER = 521, /* U64IMAGEBUFFER */ - I64IMAGE1DARRAY = 522, /* I64IMAGE1DARRAY */ - U64IMAGE1DARRAY = 523, /* U64IMAGE1DARRAY */ - I64IMAGE2DARRAY = 524, /* I64IMAGE2DARRAY */ - U64IMAGE2DARRAY = 525, /* U64IMAGE2DARRAY */ - I64IMAGECUBEARRAY = 526, /* I64IMAGECUBEARRAY */ - U64IMAGECUBEARRAY = 527, /* U64IMAGECUBEARRAY */ - I64IMAGE2DMS = 528, /* I64IMAGE2DMS */ - U64IMAGE2DMS = 529, /* U64IMAGE2DMS */ - I64IMAGE2DMSARRAY = 530, /* I64IMAGE2DMSARRAY */ - U64IMAGE2DMSARRAY = 531, /* U64IMAGE2DMSARRAY */ - TEXTURECUBEARRAY = 532, /* TEXTURECUBEARRAY */ - ITEXTURECUBEARRAY = 533, /* ITEXTURECUBEARRAY */ - UTEXTURECUBEARRAY = 534, /* UTEXTURECUBEARRAY */ - TEXTURE1D = 535, /* TEXTURE1D */ - ITEXTURE1D = 536, /* ITEXTURE1D */ - UTEXTURE1D = 537, /* UTEXTURE1D */ - TEXTURE1DARRAY = 538, /* TEXTURE1DARRAY */ - ITEXTURE1DARRAY = 539, /* ITEXTURE1DARRAY */ - UTEXTURE1DARRAY = 540, /* UTEXTURE1DARRAY */ - TEXTURE2DRECT = 541, /* TEXTURE2DRECT */ - ITEXTURE2DRECT = 542, /* ITEXTURE2DRECT */ - UTEXTURE2DRECT = 543, /* UTEXTURE2DRECT */ - TEXTUREBUFFER = 544, /* TEXTUREBUFFER */ - ITEXTUREBUFFER = 545, /* ITEXTUREBUFFER */ - UTEXTUREBUFFER = 546, /* UTEXTUREBUFFER */ - TEXTURE2DMS = 547, /* TEXTURE2DMS */ - ITEXTURE2DMS = 548, /* ITEXTURE2DMS */ - UTEXTURE2DMS = 549, /* UTEXTURE2DMS */ - TEXTURE2DMSARRAY = 550, /* TEXTURE2DMSARRAY */ - ITEXTURE2DMSARRAY = 551, /* ITEXTURE2DMSARRAY */ - UTEXTURE2DMSARRAY = 552, /* UTEXTURE2DMSARRAY */ - F16TEXTURE1D = 553, /* F16TEXTURE1D */ - F16TEXTURE2D = 554, /* F16TEXTURE2D */ - F16TEXTURE3D = 555, /* F16TEXTURE3D */ - F16TEXTURE2DRECT = 556, /* F16TEXTURE2DRECT */ - F16TEXTURECUBE = 557, /* F16TEXTURECUBE */ - F16TEXTURE1DARRAY = 558, /* F16TEXTURE1DARRAY */ - F16TEXTURE2DARRAY = 559, /* F16TEXTURE2DARRAY */ - F16TEXTURECUBEARRAY = 560, /* F16TEXTURECUBEARRAY */ - F16TEXTUREBUFFER = 561, /* F16TEXTUREBUFFER */ - F16TEXTURE2DMS = 562, /* F16TEXTURE2DMS */ - F16TEXTURE2DMSARRAY = 563, /* F16TEXTURE2DMSARRAY */ - SUBPASSINPUT = 564, /* SUBPASSINPUT */ - SUBPASSINPUTMS = 565, /* SUBPASSINPUTMS */ - ISUBPASSINPUT = 566, /* ISUBPASSINPUT */ - ISUBPASSINPUTMS = 567, /* ISUBPASSINPUTMS */ - USUBPASSINPUT = 568, /* USUBPASSINPUT */ - USUBPASSINPUTMS = 569, /* USUBPASSINPUTMS */ - F16SUBPASSINPUT = 570, /* F16SUBPASSINPUT */ - F16SUBPASSINPUTMS = 571, /* F16SUBPASSINPUTMS */ - SPIRV_INSTRUCTION = 572, /* SPIRV_INSTRUCTION */ - SPIRV_EXECUTION_MODE = 573, /* SPIRV_EXECUTION_MODE */ - SPIRV_EXECUTION_MODE_ID = 574, /* SPIRV_EXECUTION_MODE_ID */ - SPIRV_DECORATE = 575, /* SPIRV_DECORATE */ - SPIRV_DECORATE_ID = 576, /* SPIRV_DECORATE_ID */ - SPIRV_DECORATE_STRING = 577, /* SPIRV_DECORATE_STRING */ - SPIRV_TYPE = 578, /* SPIRV_TYPE */ - SPIRV_STORAGE_CLASS = 579, /* SPIRV_STORAGE_CLASS */ - SPIRV_BY_REFERENCE = 580, /* SPIRV_BY_REFERENCE */ - SPIRV_LITERAL = 581, /* SPIRV_LITERAL */ - LEFT_OP = 582, /* LEFT_OP */ - RIGHT_OP = 583, /* RIGHT_OP */ - INC_OP = 584, /* INC_OP */ - DEC_OP = 585, /* DEC_OP */ - LE_OP = 586, /* LE_OP */ - GE_OP = 587, /* GE_OP */ - EQ_OP = 588, /* EQ_OP */ - NE_OP = 589, /* NE_OP */ - AND_OP = 590, /* AND_OP */ - OR_OP = 591, /* OR_OP */ - XOR_OP = 592, /* XOR_OP */ - MUL_ASSIGN = 593, /* MUL_ASSIGN */ - DIV_ASSIGN = 594, /* DIV_ASSIGN */ - ADD_ASSIGN = 595, /* ADD_ASSIGN */ - MOD_ASSIGN = 596, /* MOD_ASSIGN */ - LEFT_ASSIGN = 597, /* LEFT_ASSIGN */ - RIGHT_ASSIGN = 598, /* RIGHT_ASSIGN */ - AND_ASSIGN = 599, /* AND_ASSIGN */ - XOR_ASSIGN = 600, /* XOR_ASSIGN */ - OR_ASSIGN = 601, /* OR_ASSIGN */ - SUB_ASSIGN = 602, /* SUB_ASSIGN */ - STRING_LITERAL = 603, /* STRING_LITERAL */ - LEFT_PAREN = 604, /* LEFT_PAREN */ - RIGHT_PAREN = 605, /* RIGHT_PAREN */ - LEFT_BRACKET = 606, /* LEFT_BRACKET */ - RIGHT_BRACKET = 607, /* RIGHT_BRACKET */ - LEFT_BRACE = 608, /* LEFT_BRACE */ - RIGHT_BRACE = 609, /* RIGHT_BRACE */ - DOT = 610, /* DOT */ - COMMA = 611, /* COMMA */ - COLON = 612, /* COLON */ - EQUAL = 613, /* EQUAL */ - SEMICOLON = 614, /* SEMICOLON */ - BANG = 615, /* BANG */ - DASH = 616, /* DASH */ - TILDE = 617, /* TILDE */ - PLUS = 618, /* PLUS */ - STAR = 619, /* STAR */ - SLASH = 620, /* SLASH */ - PERCENT = 621, /* PERCENT */ - LEFT_ANGLE = 622, /* LEFT_ANGLE */ - RIGHT_ANGLE = 623, /* RIGHT_ANGLE */ - VERTICAL_BAR = 624, /* VERTICAL_BAR */ - CARET = 625, /* CARET */ - AMPERSAND = 626, /* AMPERSAND */ - QUESTION = 627, /* QUESTION */ - INVARIANT = 628, /* INVARIANT */ - HIGH_PRECISION = 629, /* HIGH_PRECISION */ - MEDIUM_PRECISION = 630, /* MEDIUM_PRECISION */ - LOW_PRECISION = 631, /* LOW_PRECISION */ - PRECISION = 632, /* PRECISION */ - PACKED = 633, /* PACKED */ - RESOURCE = 634, /* RESOURCE */ - SUPERP = 635, /* SUPERP */ - FLOATCONSTANT = 636, /* FLOATCONSTANT */ - INTCONSTANT = 637, /* INTCONSTANT */ - UINTCONSTANT = 638, /* UINTCONSTANT */ - BOOLCONSTANT = 639, /* BOOLCONSTANT */ - IDENTIFIER = 640, /* IDENTIFIER */ - TYPE_NAME = 641, /* TYPE_NAME */ - CENTROID = 642, /* CENTROID */ - IN = 643, /* IN */ - OUT = 644, /* OUT */ - INOUT = 645, /* INOUT */ - STRUCT = 646, /* STRUCT */ - VOID = 647, /* VOID */ - WHILE = 648, /* WHILE */ - BREAK = 649, /* BREAK */ - CONTINUE = 650, /* CONTINUE */ - DO = 651, /* DO */ - ELSE = 652, /* ELSE */ - FOR = 653, /* FOR */ - IF = 654, /* IF */ - DISCARD = 655, /* DISCARD */ - RETURN = 656, /* RETURN */ - SWITCH = 657, /* SWITCH */ - CASE = 658, /* CASE */ - DEFAULT = 659, /* DEFAULT */ - TERMINATE_INVOCATION = 660, /* TERMINATE_INVOCATION */ - TERMINATE_RAY = 661, /* TERMINATE_RAY */ - IGNORE_INTERSECTION = 662, /* IGNORE_INTERSECTION */ - UNIFORM = 663, /* UNIFORM */ - SHARED = 664, /* SHARED */ - BUFFER = 665, /* BUFFER */ - FLAT = 666, /* FLAT */ - SMOOTH = 667, /* SMOOTH */ - LAYOUT = 668, /* LAYOUT */ - DOUBLECONSTANT = 669, /* DOUBLECONSTANT */ - INT16CONSTANT = 670, /* INT16CONSTANT */ - UINT16CONSTANT = 671, /* UINT16CONSTANT */ - FLOAT16CONSTANT = 672, /* FLOAT16CONSTANT */ - INT32CONSTANT = 673, /* INT32CONSTANT */ - UINT32CONSTANT = 674, /* UINT32CONSTANT */ - INT64CONSTANT = 675, /* INT64CONSTANT */ - UINT64CONSTANT = 676, /* UINT64CONSTANT */ - SUBROUTINE = 677, /* SUBROUTINE */ - DEMOTE = 678, /* DEMOTE */ - PAYLOADNV = 679, /* PAYLOADNV */ - PAYLOADINNV = 680, /* PAYLOADINNV */ - HITATTRNV = 681, /* HITATTRNV */ - CALLDATANV = 682, /* CALLDATANV */ - CALLDATAINNV = 683, /* CALLDATAINNV */ - PAYLOADEXT = 684, /* PAYLOADEXT */ - PAYLOADINEXT = 685, /* PAYLOADINEXT */ - HITATTREXT = 686, /* HITATTREXT */ - CALLDATAEXT = 687, /* CALLDATAEXT */ - CALLDATAINEXT = 688, /* CALLDATAINEXT */ - PATCH = 689, /* PATCH */ - SAMPLE = 690, /* SAMPLE */ - NONUNIFORM = 691, /* NONUNIFORM */ - COHERENT = 692, /* COHERENT */ - VOLATILE = 693, /* VOLATILE */ - RESTRICT = 694, /* RESTRICT */ - READONLY = 695, /* READONLY */ - WRITEONLY = 696, /* WRITEONLY */ - DEVICECOHERENT = 697, /* DEVICECOHERENT */ - QUEUEFAMILYCOHERENT = 698, /* QUEUEFAMILYCOHERENT */ - WORKGROUPCOHERENT = 699, /* WORKGROUPCOHERENT */ - SUBGROUPCOHERENT = 700, /* SUBGROUPCOHERENT */ - NONPRIVATE = 701, /* NONPRIVATE */ - SHADERCALLCOHERENT = 702, /* SHADERCALLCOHERENT */ - NOPERSPECTIVE = 703, /* NOPERSPECTIVE */ - EXPLICITINTERPAMD = 704, /* EXPLICITINTERPAMD */ - PERVERTEXNV = 705, /* PERVERTEXNV */ - PERPRIMITIVENV = 706, /* PERPRIMITIVENV */ - PERVIEWNV = 707, /* PERVIEWNV */ - PERTASKNV = 708, /* PERTASKNV */ - PRECISE = 709 /* PRECISE */ + COOPMAT = 421, /* COOPMAT */ + HITOBJECTNV = 422, /* HITOBJECTNV */ + HITOBJECTATTRNV = 423, /* HITOBJECTATTRNV */ + SAMPLERCUBEARRAY = 424, /* SAMPLERCUBEARRAY */ + SAMPLERCUBEARRAYSHADOW = 425, /* SAMPLERCUBEARRAYSHADOW */ + ISAMPLERCUBEARRAY = 426, /* ISAMPLERCUBEARRAY */ + USAMPLERCUBEARRAY = 427, /* USAMPLERCUBEARRAY */ + SAMPLER1D = 428, /* SAMPLER1D */ + SAMPLER1DARRAY = 429, /* SAMPLER1DARRAY */ + SAMPLER1DARRAYSHADOW = 430, /* SAMPLER1DARRAYSHADOW */ + ISAMPLER1D = 431, /* ISAMPLER1D */ + SAMPLER1DSHADOW = 432, /* SAMPLER1DSHADOW */ + SAMPLER2DRECT = 433, /* SAMPLER2DRECT */ + SAMPLER2DRECTSHADOW = 434, /* SAMPLER2DRECTSHADOW */ + ISAMPLER2DRECT = 435, /* ISAMPLER2DRECT */ + USAMPLER2DRECT = 436, /* USAMPLER2DRECT */ + SAMPLERBUFFER = 437, /* SAMPLERBUFFER */ + ISAMPLERBUFFER = 438, /* ISAMPLERBUFFER */ + USAMPLERBUFFER = 439, /* USAMPLERBUFFER */ + SAMPLER2DMS = 440, /* SAMPLER2DMS */ + ISAMPLER2DMS = 441, /* ISAMPLER2DMS */ + USAMPLER2DMS = 442, /* USAMPLER2DMS */ + SAMPLER2DMSARRAY = 443, /* SAMPLER2DMSARRAY */ + ISAMPLER2DMSARRAY = 444, /* ISAMPLER2DMSARRAY */ + USAMPLER2DMSARRAY = 445, /* USAMPLER2DMSARRAY */ + SAMPLEREXTERNALOES = 446, /* SAMPLEREXTERNALOES */ + SAMPLEREXTERNAL2DY2YEXT = 447, /* SAMPLEREXTERNAL2DY2YEXT */ + ISAMPLER1DARRAY = 448, /* ISAMPLER1DARRAY */ + USAMPLER1D = 449, /* USAMPLER1D */ + USAMPLER1DARRAY = 450, /* USAMPLER1DARRAY */ + F16SAMPLER1D = 451, /* F16SAMPLER1D */ + F16SAMPLER2D = 452, /* F16SAMPLER2D */ + F16SAMPLER3D = 453, /* F16SAMPLER3D */ + F16SAMPLER2DRECT = 454, /* F16SAMPLER2DRECT */ + F16SAMPLERCUBE = 455, /* F16SAMPLERCUBE */ + F16SAMPLER1DARRAY = 456, /* F16SAMPLER1DARRAY */ + F16SAMPLER2DARRAY = 457, /* F16SAMPLER2DARRAY */ + F16SAMPLERCUBEARRAY = 458, /* F16SAMPLERCUBEARRAY */ + F16SAMPLERBUFFER = 459, /* F16SAMPLERBUFFER */ + F16SAMPLER2DMS = 460, /* F16SAMPLER2DMS */ + F16SAMPLER2DMSARRAY = 461, /* F16SAMPLER2DMSARRAY */ + F16SAMPLER1DSHADOW = 462, /* F16SAMPLER1DSHADOW */ + F16SAMPLER2DSHADOW = 463, /* F16SAMPLER2DSHADOW */ + F16SAMPLER1DARRAYSHADOW = 464, /* F16SAMPLER1DARRAYSHADOW */ + F16SAMPLER2DARRAYSHADOW = 465, /* F16SAMPLER2DARRAYSHADOW */ + F16SAMPLER2DRECTSHADOW = 466, /* F16SAMPLER2DRECTSHADOW */ + F16SAMPLERCUBESHADOW = 467, /* F16SAMPLERCUBESHADOW */ + F16SAMPLERCUBEARRAYSHADOW = 468, /* F16SAMPLERCUBEARRAYSHADOW */ + IMAGE1D = 469, /* IMAGE1D */ + IIMAGE1D = 470, /* IIMAGE1D */ + UIMAGE1D = 471, /* UIMAGE1D */ + IMAGE2D = 472, /* IMAGE2D */ + IIMAGE2D = 473, /* IIMAGE2D */ + UIMAGE2D = 474, /* UIMAGE2D */ + IMAGE3D = 475, /* IMAGE3D */ + IIMAGE3D = 476, /* IIMAGE3D */ + UIMAGE3D = 477, /* UIMAGE3D */ + IMAGE2DRECT = 478, /* IMAGE2DRECT */ + IIMAGE2DRECT = 479, /* IIMAGE2DRECT */ + UIMAGE2DRECT = 480, /* UIMAGE2DRECT */ + IMAGECUBE = 481, /* IMAGECUBE */ + IIMAGECUBE = 482, /* IIMAGECUBE */ + UIMAGECUBE = 483, /* UIMAGECUBE */ + IMAGEBUFFER = 484, /* IMAGEBUFFER */ + IIMAGEBUFFER = 485, /* IIMAGEBUFFER */ + UIMAGEBUFFER = 486, /* UIMAGEBUFFER */ + IMAGE1DARRAY = 487, /* IMAGE1DARRAY */ + IIMAGE1DARRAY = 488, /* IIMAGE1DARRAY */ + UIMAGE1DARRAY = 489, /* UIMAGE1DARRAY */ + IMAGE2DARRAY = 490, /* IMAGE2DARRAY */ + IIMAGE2DARRAY = 491, /* IIMAGE2DARRAY */ + UIMAGE2DARRAY = 492, /* UIMAGE2DARRAY */ + IMAGECUBEARRAY = 493, /* IMAGECUBEARRAY */ + IIMAGECUBEARRAY = 494, /* IIMAGECUBEARRAY */ + UIMAGECUBEARRAY = 495, /* UIMAGECUBEARRAY */ + IMAGE2DMS = 496, /* IMAGE2DMS */ + IIMAGE2DMS = 497, /* IIMAGE2DMS */ + UIMAGE2DMS = 498, /* UIMAGE2DMS */ + IMAGE2DMSARRAY = 499, /* IMAGE2DMSARRAY */ + IIMAGE2DMSARRAY = 500, /* IIMAGE2DMSARRAY */ + UIMAGE2DMSARRAY = 501, /* UIMAGE2DMSARRAY */ + F16IMAGE1D = 502, /* F16IMAGE1D */ + F16IMAGE2D = 503, /* F16IMAGE2D */ + F16IMAGE3D = 504, /* F16IMAGE3D */ + F16IMAGE2DRECT = 505, /* F16IMAGE2DRECT */ + F16IMAGECUBE = 506, /* F16IMAGECUBE */ + F16IMAGE1DARRAY = 507, /* F16IMAGE1DARRAY */ + F16IMAGE2DARRAY = 508, /* F16IMAGE2DARRAY */ + F16IMAGECUBEARRAY = 509, /* F16IMAGECUBEARRAY */ + F16IMAGEBUFFER = 510, /* F16IMAGEBUFFER */ + F16IMAGE2DMS = 511, /* F16IMAGE2DMS */ + F16IMAGE2DMSARRAY = 512, /* F16IMAGE2DMSARRAY */ + I64IMAGE1D = 513, /* I64IMAGE1D */ + U64IMAGE1D = 514, /* U64IMAGE1D */ + I64IMAGE2D = 515, /* I64IMAGE2D */ + U64IMAGE2D = 516, /* U64IMAGE2D */ + I64IMAGE3D = 517, /* I64IMAGE3D */ + U64IMAGE3D = 518, /* U64IMAGE3D */ + I64IMAGE2DRECT = 519, /* I64IMAGE2DRECT */ + U64IMAGE2DRECT = 520, /* U64IMAGE2DRECT */ + I64IMAGECUBE = 521, /* I64IMAGECUBE */ + U64IMAGECUBE = 522, /* U64IMAGECUBE */ + I64IMAGEBUFFER = 523, /* I64IMAGEBUFFER */ + U64IMAGEBUFFER = 524, /* U64IMAGEBUFFER */ + I64IMAGE1DARRAY = 525, /* I64IMAGE1DARRAY */ + U64IMAGE1DARRAY = 526, /* U64IMAGE1DARRAY */ + I64IMAGE2DARRAY = 527, /* I64IMAGE2DARRAY */ + U64IMAGE2DARRAY = 528, /* U64IMAGE2DARRAY */ + I64IMAGECUBEARRAY = 529, /* I64IMAGECUBEARRAY */ + U64IMAGECUBEARRAY = 530, /* U64IMAGECUBEARRAY */ + I64IMAGE2DMS = 531, /* I64IMAGE2DMS */ + U64IMAGE2DMS = 532, /* U64IMAGE2DMS */ + I64IMAGE2DMSARRAY = 533, /* I64IMAGE2DMSARRAY */ + U64IMAGE2DMSARRAY = 534, /* U64IMAGE2DMSARRAY */ + TEXTURECUBEARRAY = 535, /* TEXTURECUBEARRAY */ + ITEXTURECUBEARRAY = 536, /* ITEXTURECUBEARRAY */ + UTEXTURECUBEARRAY = 537, /* UTEXTURECUBEARRAY */ + TEXTURE1D = 538, /* TEXTURE1D */ + ITEXTURE1D = 539, /* ITEXTURE1D */ + UTEXTURE1D = 540, /* UTEXTURE1D */ + TEXTURE1DARRAY = 541, /* TEXTURE1DARRAY */ + ITEXTURE1DARRAY = 542, /* ITEXTURE1DARRAY */ + UTEXTURE1DARRAY = 543, /* UTEXTURE1DARRAY */ + TEXTURE2DRECT = 544, /* TEXTURE2DRECT */ + ITEXTURE2DRECT = 545, /* ITEXTURE2DRECT */ + UTEXTURE2DRECT = 546, /* UTEXTURE2DRECT */ + TEXTUREBUFFER = 547, /* TEXTUREBUFFER */ + ITEXTUREBUFFER = 548, /* ITEXTUREBUFFER */ + UTEXTUREBUFFER = 549, /* UTEXTUREBUFFER */ + TEXTURE2DMS = 550, /* TEXTURE2DMS */ + ITEXTURE2DMS = 551, /* ITEXTURE2DMS */ + UTEXTURE2DMS = 552, /* UTEXTURE2DMS */ + TEXTURE2DMSARRAY = 553, /* TEXTURE2DMSARRAY */ + ITEXTURE2DMSARRAY = 554, /* ITEXTURE2DMSARRAY */ + UTEXTURE2DMSARRAY = 555, /* UTEXTURE2DMSARRAY */ + F16TEXTURE1D = 556, /* F16TEXTURE1D */ + F16TEXTURE2D = 557, /* F16TEXTURE2D */ + F16TEXTURE3D = 558, /* F16TEXTURE3D */ + F16TEXTURE2DRECT = 559, /* F16TEXTURE2DRECT */ + F16TEXTURECUBE = 560, /* F16TEXTURECUBE */ + F16TEXTURE1DARRAY = 561, /* F16TEXTURE1DARRAY */ + F16TEXTURE2DARRAY = 562, /* F16TEXTURE2DARRAY */ + F16TEXTURECUBEARRAY = 563, /* F16TEXTURECUBEARRAY */ + F16TEXTUREBUFFER = 564, /* F16TEXTUREBUFFER */ + F16TEXTURE2DMS = 565, /* F16TEXTURE2DMS */ + F16TEXTURE2DMSARRAY = 566, /* F16TEXTURE2DMSARRAY */ + SUBPASSINPUT = 567, /* SUBPASSINPUT */ + SUBPASSINPUTMS = 568, /* SUBPASSINPUTMS */ + ISUBPASSINPUT = 569, /* ISUBPASSINPUT */ + ISUBPASSINPUTMS = 570, /* ISUBPASSINPUTMS */ + USUBPASSINPUT = 571, /* USUBPASSINPUT */ + USUBPASSINPUTMS = 572, /* USUBPASSINPUTMS */ + F16SUBPASSINPUT = 573, /* F16SUBPASSINPUT */ + F16SUBPASSINPUTMS = 574, /* F16SUBPASSINPUTMS */ + SPIRV_INSTRUCTION = 575, /* SPIRV_INSTRUCTION */ + SPIRV_EXECUTION_MODE = 576, /* SPIRV_EXECUTION_MODE */ + SPIRV_EXECUTION_MODE_ID = 577, /* SPIRV_EXECUTION_MODE_ID */ + SPIRV_DECORATE = 578, /* SPIRV_DECORATE */ + SPIRV_DECORATE_ID = 579, /* SPIRV_DECORATE_ID */ + SPIRV_DECORATE_STRING = 580, /* SPIRV_DECORATE_STRING */ + SPIRV_TYPE = 581, /* SPIRV_TYPE */ + SPIRV_STORAGE_CLASS = 582, /* SPIRV_STORAGE_CLASS */ + SPIRV_BY_REFERENCE = 583, /* SPIRV_BY_REFERENCE */ + SPIRV_LITERAL = 584, /* SPIRV_LITERAL */ + ATTACHMENTEXT = 585, /* ATTACHMENTEXT */ + IATTACHMENTEXT = 586, /* IATTACHMENTEXT */ + UATTACHMENTEXT = 587, /* UATTACHMENTEXT */ + LEFT_OP = 588, /* LEFT_OP */ + RIGHT_OP = 589, /* RIGHT_OP */ + INC_OP = 590, /* INC_OP */ + DEC_OP = 591, /* DEC_OP */ + LE_OP = 592, /* LE_OP */ + GE_OP = 593, /* GE_OP */ + EQ_OP = 594, /* EQ_OP */ + NE_OP = 595, /* NE_OP */ + AND_OP = 596, /* AND_OP */ + OR_OP = 597, /* OR_OP */ + XOR_OP = 598, /* XOR_OP */ + MUL_ASSIGN = 599, /* MUL_ASSIGN */ + DIV_ASSIGN = 600, /* DIV_ASSIGN */ + ADD_ASSIGN = 601, /* ADD_ASSIGN */ + MOD_ASSIGN = 602, /* MOD_ASSIGN */ + LEFT_ASSIGN = 603, /* LEFT_ASSIGN */ + RIGHT_ASSIGN = 604, /* RIGHT_ASSIGN */ + AND_ASSIGN = 605, /* AND_ASSIGN */ + XOR_ASSIGN = 606, /* XOR_ASSIGN */ + OR_ASSIGN = 607, /* OR_ASSIGN */ + SUB_ASSIGN = 608, /* SUB_ASSIGN */ + STRING_LITERAL = 609, /* STRING_LITERAL */ + LEFT_PAREN = 610, /* LEFT_PAREN */ + RIGHT_PAREN = 611, /* RIGHT_PAREN */ + LEFT_BRACKET = 612, /* LEFT_BRACKET */ + RIGHT_BRACKET = 613, /* RIGHT_BRACKET */ + LEFT_BRACE = 614, /* LEFT_BRACE */ + RIGHT_BRACE = 615, /* RIGHT_BRACE */ + DOT = 616, /* DOT */ + COMMA = 617, /* COMMA */ + COLON = 618, /* COLON */ + EQUAL = 619, /* EQUAL */ + SEMICOLON = 620, /* SEMICOLON */ + BANG = 621, /* BANG */ + DASH = 622, /* DASH */ + TILDE = 623, /* TILDE */ + PLUS = 624, /* PLUS */ + STAR = 625, /* STAR */ + SLASH = 626, /* SLASH */ + PERCENT = 627, /* PERCENT */ + LEFT_ANGLE = 628, /* LEFT_ANGLE */ + RIGHT_ANGLE = 629, /* RIGHT_ANGLE */ + VERTICAL_BAR = 630, /* VERTICAL_BAR */ + CARET = 631, /* CARET */ + AMPERSAND = 632, /* AMPERSAND */ + QUESTION = 633, /* QUESTION */ + INVARIANT = 634, /* INVARIANT */ + HIGH_PRECISION = 635, /* HIGH_PRECISION */ + MEDIUM_PRECISION = 636, /* MEDIUM_PRECISION */ + LOW_PRECISION = 637, /* LOW_PRECISION */ + PRECISION = 638, /* PRECISION */ + PACKED = 639, /* PACKED */ + RESOURCE = 640, /* RESOURCE */ + SUPERP = 641, /* SUPERP */ + FLOATCONSTANT = 642, /* FLOATCONSTANT */ + INTCONSTANT = 643, /* INTCONSTANT */ + UINTCONSTANT = 644, /* UINTCONSTANT */ + BOOLCONSTANT = 645, /* BOOLCONSTANT */ + IDENTIFIER = 646, /* IDENTIFIER */ + TYPE_NAME = 647, /* TYPE_NAME */ + CENTROID = 648, /* CENTROID */ + IN = 649, /* IN */ + OUT = 650, /* OUT */ + INOUT = 651, /* INOUT */ + STRUCT = 652, /* STRUCT */ + VOID = 653, /* VOID */ + WHILE = 654, /* WHILE */ + BREAK = 655, /* BREAK */ + CONTINUE = 656, /* CONTINUE */ + DO = 657, /* DO */ + ELSE = 658, /* ELSE */ + FOR = 659, /* FOR */ + IF = 660, /* IF */ + DISCARD = 661, /* DISCARD */ + RETURN = 662, /* RETURN */ + SWITCH = 663, /* SWITCH */ + CASE = 664, /* CASE */ + DEFAULT = 665, /* DEFAULT */ + TERMINATE_INVOCATION = 666, /* TERMINATE_INVOCATION */ + TERMINATE_RAY = 667, /* TERMINATE_RAY */ + IGNORE_INTERSECTION = 668, /* IGNORE_INTERSECTION */ + UNIFORM = 669, /* UNIFORM */ + SHARED = 670, /* SHARED */ + BUFFER = 671, /* BUFFER */ + TILEIMAGEEXT = 672, /* TILEIMAGEEXT */ + FLAT = 673, /* FLAT */ + SMOOTH = 674, /* SMOOTH */ + LAYOUT = 675, /* LAYOUT */ + DOUBLECONSTANT = 676, /* DOUBLECONSTANT */ + INT16CONSTANT = 677, /* INT16CONSTANT */ + UINT16CONSTANT = 678, /* UINT16CONSTANT */ + FLOAT16CONSTANT = 679, /* FLOAT16CONSTANT */ + INT32CONSTANT = 680, /* INT32CONSTANT */ + UINT32CONSTANT = 681, /* UINT32CONSTANT */ + INT64CONSTANT = 682, /* INT64CONSTANT */ + UINT64CONSTANT = 683, /* UINT64CONSTANT */ + SUBROUTINE = 684, /* SUBROUTINE */ + DEMOTE = 685, /* DEMOTE */ + PAYLOADNV = 686, /* PAYLOADNV */ + PAYLOADINNV = 687, /* PAYLOADINNV */ + HITATTRNV = 688, /* HITATTRNV */ + CALLDATANV = 689, /* CALLDATANV */ + CALLDATAINNV = 690, /* CALLDATAINNV */ + PAYLOADEXT = 691, /* PAYLOADEXT */ + PAYLOADINEXT = 692, /* PAYLOADINEXT */ + HITATTREXT = 693, /* HITATTREXT */ + CALLDATAEXT = 694, /* CALLDATAEXT */ + CALLDATAINEXT = 695, /* CALLDATAINEXT */ + PATCH = 696, /* PATCH */ + SAMPLE = 697, /* SAMPLE */ + NONUNIFORM = 698, /* NONUNIFORM */ + COHERENT = 699, /* COHERENT */ + VOLATILE = 700, /* VOLATILE */ + RESTRICT = 701, /* RESTRICT */ + READONLY = 702, /* READONLY */ + WRITEONLY = 703, /* WRITEONLY */ + DEVICECOHERENT = 704, /* DEVICECOHERENT */ + QUEUEFAMILYCOHERENT = 705, /* QUEUEFAMILYCOHERENT */ + WORKGROUPCOHERENT = 706, /* WORKGROUPCOHERENT */ + SUBGROUPCOHERENT = 707, /* SUBGROUPCOHERENT */ + NONPRIVATE = 708, /* NONPRIVATE */ + SHADERCALLCOHERENT = 709, /* SHADERCALLCOHERENT */ + NOPERSPECTIVE = 710, /* NOPERSPECTIVE */ + EXPLICITINTERPAMD = 711, /* EXPLICITINTERPAMD */ + PERVERTEXEXT = 712, /* PERVERTEXEXT */ + PERVERTEXNV = 713, /* PERVERTEXNV */ + PERPRIMITIVENV = 714, /* PERPRIMITIVENV */ + PERVIEWNV = 715, /* PERVIEWNV */ + PERTASKNV = 716, /* PERTASKNV */ + PERPRIMITIVEEXT = 717, /* PERPRIMITIVEEXT */ + TASKPAYLOADWORKGROUPEXT = 718, /* TASKPAYLOADWORKGROUPEXT */ + PRECISE = 719 /* PRECISE */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -514,7 +524,7 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 97 "MachineIndependent/glslang.y" +#line 72 "MachineIndependent/glslang.y" struct { glslang::TSourceLoc loc; @@ -550,10 +560,10 @@ union YYSTYPE glslang::TArraySizes* arraySizes; glslang::TIdentifierList* identifierList; }; - glslang::TArraySizes* typeParameters; + glslang::TTypeParameters* typeParameters; } interm; -#line 557 "MachineIndependent/glslang_tab.cpp.h" +#line 567 "MachineIndependent/glslang_tab.cpp.h" }; typedef union YYSTYPE YYSTYPE; @@ -563,6 +573,8 @@ typedef union YYSTYPE YYSTYPE; + int yyparse (glslang::TParseContext* pParseContext); + #endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */ diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index d8a3aab5d0..f0621bd9eb 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -1,7 +1,7 @@ // // Copyright (C) 2002-2005 3Dlabs Inc. Ltd. // Copyright (C) 2012-2016 LunarG, Inc. -// Copyright (C) 2017 ARM Limited. +// Copyright (C) 2017, 2022-2024 Arm Limited. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // // All rights reserved. @@ -36,8 +36,6 @@ // POSSIBILITY OF SUCH DAMAGE. // -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - #include "localintermediate.h" #include "../Include/InfoSink.h" @@ -567,6 +565,8 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node) case EOpSubgroupShuffleXor: out.debug << "subgroupShuffleXor"; break; case EOpSubgroupShuffleUp: out.debug << "subgroupShuffleUp"; break; case EOpSubgroupShuffleDown: out.debug << "subgroupShuffleDown"; break; + case EOpSubgroupRotate: out.debug << "subgroupRotate"; break; + case EOpSubgroupClusteredRotate: out.debug << "subgroupClusteredRotate"; break; case EOpSubgroupAdd: out.debug << "subgroupAdd"; break; case EOpSubgroupMul: out.debug << "subgroupMul"; break; case EOpSubgroupMin: out.debug << "subgroupMin"; break; @@ -599,6 +599,8 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node) case EOpSubgroupQuadSwapHorizontal: out.debug << "subgroupQuadSwapHorizontal"; break; case EOpSubgroupQuadSwapVertical: out.debug << "subgroupQuadSwapVertical"; break; case EOpSubgroupQuadSwapDiagonal: out.debug << "subgroupQuadSwapDiagonal"; break; + case EOpSubgroupQuadAll: out.debug << "subgroupQuadAll"; break; + case EOpSubgroupQuadAny: out.debug << "subgroupQuadAny"; break; case EOpSubgroupPartition: out.debug << "subgroupPartitionNV"; break; case EOpSubgroupPartitionedAdd: out.debug << "subgroupPartitionedAddNV"; break; @@ -663,11 +665,13 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node) case EOpSubpassLoad: out.debug << "subpassLoad"; break; case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break; + case EOpColorAttachmentReadEXT: out.debug << "colorAttachmentReadEXT"; break; + case EOpConstructReference: out.debug << "Construct reference type"; break; -#ifndef GLSLANG_WEB + case EOpDeclare: out.debug << "Declare"; break; + case EOpSpirvInst: out.debug << "spirv_instruction"; break; -#endif default: out.debug.message(EPrefixError, "Bad unary op"); } @@ -692,6 +696,7 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node switch (node->getOp()) { case EOpSequence: out.debug << "Sequence\n"; return true; + case EOpScope: out.debug << "Scope\n"; return true; case EOpLinkerObjects: out.debug << "Linker Objects\n"; return true; case EOpComma: out.debug << "Comma"; break; case EOpFunction: out.debug << "Function Definition: " << node->getName(); break; @@ -804,7 +809,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpConstructStruct: out.debug << "Construct structure"; break; case EOpConstructTextureSampler: out.debug << "Construct combined texture-sampler"; break; case EOpConstructReference: out.debug << "Construct reference"; break; - case EOpConstructCooperativeMatrix: out.debug << "Construct cooperative matrix"; break; + case EOpConstructCooperativeMatrixNV: out.debug << "Construct cooperative matrix NV"; break; + case EOpConstructCooperativeMatrixKHR: out.debug << "Construct cooperative matrix KHR"; break; case EOpConstructAccStruct: out.debug << "Construct acceleration structure"; break; case EOpLessThan: out.debug << "Compare Less Than"; break; @@ -998,6 +1004,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpSubgroupShuffleXor: out.debug << "subgroupShuffleXor"; break; case EOpSubgroupShuffleUp: out.debug << "subgroupShuffleUp"; break; case EOpSubgroupShuffleDown: out.debug << "subgroupShuffleDown"; break; + case EOpSubgroupRotate: out.debug << "subgroupRotate"; break; + case EOpSubgroupClusteredRotate: out.debug << "subgroupClusteredRotate"; break; case EOpSubgroupAdd: out.debug << "subgroupAdd"; break; case EOpSubgroupMul: out.debug << "subgroupMul"; break; case EOpSubgroupMin: out.debug << "subgroupMin"; break; @@ -1030,6 +1038,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpSubgroupQuadSwapHorizontal: out.debug << "subgroupQuadSwapHorizontal"; break; case EOpSubgroupQuadSwapVertical: out.debug << "subgroupQuadSwapVertical"; break; case EOpSubgroupQuadSwapDiagonal: out.debug << "subgroupQuadSwapDiagonal"; break; + case EOpSubgroupQuadAll: out.debug << "subgroupQuadAll"; break; + case EOpSubgroupQuadAny: out.debug << "subgroupQuadAny"; break; case EOpSubgroupPartition: out.debug << "subgroupPartitionNV"; break; case EOpSubgroupPartitionedAdd: out.debug << "subgroupPartitionedAddNV"; break; @@ -1057,6 +1067,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpSubpassLoad: out.debug << "subpassLoad"; break; case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break; + case EOpColorAttachmentReadEXT: out.debug << "colorAttachmentReadEXT"; break; + case EOpTraceNV: out.debug << "traceNV"; break; case EOpTraceRayMotionNV: out.debug << "traceRayMotionNV"; break; case EOpTraceKHR: out.debug << "traceRayKHR"; break; @@ -1068,6 +1080,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpExecuteCallableNV: out.debug << "executeCallableNV"; break; case EOpExecuteCallableKHR: out.debug << "executeCallableKHR"; break; case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break; + case EOpEmitMeshTasksEXT: out.debug << "EmitMeshTasksEXT"; break; + case EOpSetMeshOutputsEXT: out.debug << "SetMeshOutputsEXT"; break; case EOpRayQueryInitialize: out.debug << "rayQueryInitializeEXT"; break; case EOpRayQueryTerminate: out.debug << "rayQueryTerminateEXT"; break; @@ -1092,22 +1106,60 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpRayQueryGetWorldRayOrigin: out.debug << "rayQueryGetWorldRayOriginEXT"; break; case EOpRayQueryGetIntersectionObjectToWorld: out.debug << "rayQueryGetIntersectionObjectToWorldEXT"; break; case EOpRayQueryGetIntersectionWorldToObject: out.debug << "rayQueryGetIntersectionWorldToObjectEXT"; break; + case EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: out.debug << "rayQueryGetIntersectionTriangleVertexPositionsEXT"; break; - case EOpCooperativeMatrixLoad: out.debug << "Load cooperative matrix"; break; - case EOpCooperativeMatrixStore: out.debug << "Store cooperative matrix"; break; - case EOpCooperativeMatrixMulAdd: out.debug << "MulAdd cooperative matrices"; break; + case EOpCooperativeMatrixLoad: out.debug << "Load cooperative matrix KHR"; break; + case EOpCooperativeMatrixStore: out.debug << "Store cooperative matrix KHR"; break; + case EOpCooperativeMatrixMulAdd: out.debug << "MulAdd cooperative matrices KHR"; break; + case EOpCooperativeMatrixLoadNV: out.debug << "Load cooperative matrix NV"; break; + case EOpCooperativeMatrixStoreNV: out.debug << "Store cooperative matrix NV"; break; + case EOpCooperativeMatrixMulAddNV: out.debug << "MulAdd cooperative matrices NV"; break; case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break; case EOpDebugPrintf: out.debug << "Debug printf"; break; -#ifndef GLSLANG_WEB + case EOpHitObjectTraceRayNV: out.debug << "HitObjectTraceRayNV"; break; + case EOpHitObjectTraceRayMotionNV: out.debug << "HitObjectTraceRayMotionNV"; break; + case EOpHitObjectRecordHitNV: out.debug << "HitObjectRecordHitNV"; break; + case EOpHitObjectRecordHitMotionNV: out.debug << "HitObjectRecordHitMotionNV"; break; + case EOpHitObjectRecordHitWithIndexNV: out.debug << "HitObjectRecordHitWithIndexNV"; break; + case EOpHitObjectRecordHitWithIndexMotionNV: out.debug << "HitObjectRecordHitWithIndexMotionNV"; break; + case EOpHitObjectRecordMissNV: out.debug << "HitObjectRecordMissNV"; break; + case EOpHitObjectRecordMissMotionNV: out.debug << "HitObjectRecordMissMotionNV"; break; + case EOpHitObjectRecordEmptyNV: out.debug << "HitObjectRecordEmptyNV"; break; + case EOpHitObjectExecuteShaderNV: out.debug << "HitObjectExecuteShaderNV"; break; + case EOpHitObjectIsEmptyNV: out.debug << "HitObjectIsEmptyNV"; break; + case EOpHitObjectIsMissNV: out.debug << "HitObjectIsMissNV"; break; + case EOpHitObjectIsHitNV: out.debug << "HitObjectIsHitNV"; break; + case EOpHitObjectGetRayTMinNV: out.debug << "HitObjectGetRayTMinNV"; break; + case EOpHitObjectGetRayTMaxNV: out.debug << "HitObjectGetRayTMaxNV"; break; + case EOpHitObjectGetObjectRayOriginNV: out.debug << "HitObjectGetObjectRayOriginNV"; break; + case EOpHitObjectGetObjectRayDirectionNV: out.debug << "HitObjectGetObjectRayDirectionNV"; break; + case EOpHitObjectGetWorldRayOriginNV: out.debug << "HitObjectGetWorldRayOriginNV"; break; + case EOpHitObjectGetWorldRayDirectionNV: out.debug << "HitObjectGetWorldRayDirectionNV"; break; + case EOpHitObjectGetObjectToWorldNV: out.debug << "HitObjectGetObjectToWorldNV"; break; + case EOpHitObjectGetWorldToObjectNV: out.debug << "HitObjectGetWorldToObjectNV"; break; + case EOpHitObjectGetInstanceCustomIndexNV: out.debug<< "HitObjectGetInstanceCustomIndexNV"; break; + case EOpHitObjectGetInstanceIdNV: out.debug << "HitObjectGetInstaneIdNV"; break; + case EOpHitObjectGetGeometryIndexNV: out.debug << "HitObjectGetGeometryIndexNV"; break; + case EOpHitObjectGetPrimitiveIndexNV: out.debug << "HitObjectGetPrimitiveIndexNV"; break; + case EOpHitObjectGetHitKindNV: out.debug << "HitObjectGetHitKindNV"; break; + case EOpHitObjectGetAttributesNV: out.debug << "HitObjectGetAttributesNV"; break; + case EOpHitObjectGetCurrentTimeNV: out.debug << "HitObjectGetCurrentTimeNV"; break; + case EOpHitObjectGetShaderBindingTableRecordIndexNV: out.debug << "HitObjectGetShaderBindingTableRecordIndexNV"; break; + case EOpHitObjectGetShaderRecordBufferHandleNV: out.debug << "HitObjectReadShaderRecordBufferHandleNV"; break; + case EOpReorderThreadNV: out.debug << "ReorderThreadNV"; break; + case EOpFetchMicroTriangleVertexPositionNV: out.debug << "MicroTriangleVertexPositionNV"; break; + case EOpFetchMicroTriangleVertexBarycentricNV: out.debug << "MicroTriangleVertexBarycentricNV"; break; + case EOpSpirvInst: out.debug << "spirv_instruction"; break; -#endif + case EOpStencilAttachmentReadEXT: out.debug << "stencilAttachmentReadEXT"; break; + case EOpDepthAttachmentReadEXT: out.debug << "depthAttachmentReadEXT"; break; default: out.debug.message(EPrefixError, "Bad aggregation op"); } - if (node->getOp() != EOpSequence && node->getOp() != EOpParameters) + if (node->getOp() != EOpSequence && node->getOp() != EOpScope && node->getOp() != EOpParameters) out.debug << " (" << node->getCompleteString() << ")"; out.debug << "\n"; @@ -1164,12 +1216,12 @@ bool TOutputTraverser::visitSelection(TVisit /* visit */, TIntermSelection* node // - shows all digits, no premature rounding static void OutputDouble(TInfoSink& out, double value, TOutputTraverser::EExtraOutput extra) { - if (IsInfinity(value)) { + if (std::isinf(value)) { if (value < 0) out.debug << "-1.#INF"; else out.debug << "+1.#INF"; - } else if (IsNan(value)) + } else if (std::isnan(value)) out.debug << "1.#IND"; else { const int maxSize = 340; @@ -1468,6 +1520,9 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree) if (getSubgroupUniformControlFlow()) infoSink.debug << "subgroup_uniform_control_flow\n"; + if (getMaximallyReconverges()) + infoSink.debug << "maximally_reconverges\n"; + switch (language) { case EShLangVertex: break; @@ -1507,6 +1562,12 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree) infoSink.debug << "using early_fragment_tests\n"; if (postDepthCoverage) infoSink.debug << "using post_depth_coverage\n"; + if (nonCoherentColorAttachmentReadEXT) + infoSink.debug << "using non_coherent_color_attachment_readEXT\n"; + if (nonCoherentDepthAttachmentReadEXT) + infoSink.debug << "using non_coherent_depth_attachment_readEXT\n"; + if (nonCoherentStencilAttachmentReadEXT) + infoSink.debug << "using non_coherent_stencil_attachment_readEXT\n"; if (depthLayout != EldNone) infoSink.debug << "using " << TQualifier::getLayoutDepthString(depthLayout) << "\n"; if (blendEquations != 0) { @@ -1522,12 +1583,12 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree) infoSink.debug << "interlock ordering = " << TQualifier::getInterlockOrderingString(interlockOrdering) << "\n"; break; - case EShLangMeshNV: + case EShLangMesh: infoSink.debug << "max_vertices = " << vertices << "\n"; infoSink.debug << "max_primitives = " << primitives << "\n"; infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n"; - // Fall through - case EShLangTaskNV: + [[fallthrough]]; + case EShLangTask: // Fall through case EShLangCompute: infoSink.debug << "local_size = (" << localSize[0] << ", " << localSize[1] << ", " << localSize[2] << ")\n"; @@ -1547,7 +1608,7 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree) break; } - if (treeRoot == 0 || ! tree) + if (treeRoot == nullptr || ! tree) return; TOutputTraverser it(infoSink); @@ -1557,5 +1618,3 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree) } } // end namespace glslang - -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index a3c53f505d..3e7749d3a7 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -33,14 +33,13 @@ // POSSIBILITY OF SUCH DAMAGE. // -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - #include "../Include/Common.h" #include "../Include/InfoSink.h" #include "../Include/Types.h" #include "gl_types.h" #include "iomapper.h" +#include "LiveTraverser.h" #include "SymbolTable.h" // @@ -62,6 +61,108 @@ namespace glslang { +struct TVarEntryInfo { + long long id; + TIntermSymbol* symbol; + bool live; + bool upgradedToPushConstant; + int newBinding; + int newSet; + int newLocation; + int newComponent; + int newIndex; + EShLanguage stage; + + void clearNewAssignments() { + upgradedToPushConstant = false; + 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; } + }; + + struct TOrderByPriority { + // ordering: + // 1) has both binding and set + // 2) has binding but no set + // 3) has no binding but set + // 4) has no binding and no set + inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { + const TQualifier& lq = l.symbol->getQualifier(); + const TQualifier& rq = r.symbol->getQualifier(); + + // simple rules: + // has binding gives 2 points + // has set gives 1 point + // who has the most points is more important. + int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); + int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); + + if (lPoints == rPoints) + return l.id < r.id; + return lPoints > rPoints; + } + }; + + struct TOrderByPriorityAndLive { + // ordering: + // 1) do live variables first + // 2) has both binding and set + // 3) has binding but no set + // 4) has no binding but set + // 5) has no binding and no set + inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { + + const TQualifier& lq = l.symbol->getQualifier(); + const TQualifier& rq = r.symbol->getQualifier(); + + // simple rules: + // has binding gives 2 points + // has set gives 1 point + // who has the most points is more important. + int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); + int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); + + if (l.live != r.live) + return l.live > r.live; + + if (lPoints != rPoints) + return lPoints > rPoints; + + return l.id < r.id; + } + }; +}; + +// override function "operator=", if a vector being sort, +// when use vc++, the sort function will call : +// pair& operator=(const pair<_Other1, _Other2>& _Right) +// { +// first = _Right.first; +// second = _Right.second; +// return (*this); +// } +// that will make a const type handing on left. +// override this function can avoid a compiler error. +// In the future, if the vc++ compiler can handle such a situation, +// this part of the code will be removed. +struct TVarLivePair : std::pair { + TVarLivePair(const std::pair& _Right) : pair(_Right.first, _Right.second) {} + TVarLivePair& operator=(const TVarLivePair& _Right) { + const_cast(first) = _Right.first; + second = _Right.second; + return (*this); + } + TVarLivePair(const TVarLivePair& src) : pair(src) { } +}; +typedef std::vector TVarLiveVector; + + class TVarGatherTraverser : public TLiveTraverser { public: TVarGatherTraverser(const TIntermediate& i, bool traverseDeadCode, TVarLiveMap& inList, TVarLiveMap& outList, TVarLiveMap& uniformList) @@ -87,7 +188,7 @@ class TVarGatherTraverser : public TLiveTraverser { addGlobalReference(base->getAccessName()); if (target) { - TVarEntryInfo ent = {base->getId(), base, ! traverseAll}; + TVarEntryInfo ent = {base->getId(), base, ! traverseAll, {}, {}, {}, {}, {}, {}, {}}; ent.stage = intermediate.getStage(); TVarLiveMap::iterator at = target->find( ent.symbol->getAccessName()); // std::lower_bound(target->begin(), target->end(), ent, TVarEntryInfo::TOrderById()); @@ -126,7 +227,7 @@ class TVarSetTraverser : public TLiveTraverser else return; - TVarEntryInfo ent = { base->getId() }; + TVarEntryInfo ent = { base->getId(), {}, {}, {}, {}, {}, {}, {}, {}, {} }; // Fix a defect, when block has no instance name, we need to find its block name TVarLiveMap::const_iterator at = source->find(base->getAccessName()); if (at == source->end()) @@ -145,6 +246,8 @@ class TVarSetTraverser : public TLiveTraverser base->getWritableType().getQualifier().layoutComponent = at->second.newComponent; if (at->second.newIndex != -1) base->getWritableType().getQualifier().layoutIndex = at->second.newIndex; + if (at->second.upgradedToPushConstant) + base->getWritableType().getQualifier().layoutPushConstant = true; } private: @@ -176,7 +279,7 @@ struct TNotifyInOutAdaptor { EShLanguage stage; TIoMapResolver& resolver; - inline TNotifyInOutAdaptor(EShLanguage s, TIoMapResolver& r) + inline TNotifyInOutAdaptor(EShLanguage s, TIoMapResolver& r) : stage(s) , resolver(r) { @@ -203,11 +306,7 @@ struct TResolverUniformAdaptor { inline void operator()(std::pair& entKey) { TVarEntryInfo& ent = entKey.second; - ent.newLocation = -1; - ent.newComponent = -1; - ent.newBinding = -1; - ent.newSet = -1; - ent.newIndex = -1; + ent.clearNewAssignments(); const bool isValid = resolver.validateBinding(stage, ent); if (isValid) { resolver.resolveSet(ent.stage, ent); @@ -281,11 +380,7 @@ struct TResolverInOutAdaptor { inline void operator()(std::pair& entKey) { TVarEntryInfo& ent = entKey.second; - ent.newLocation = -1; - ent.newComponent = -1; - ent.newBinding = -1; - ent.newSet = -1; - ent.newIndex = -1; + ent.clearNewAssignments(); const bool isValid = resolver.validateInOut(ent.stage, ent); if (isValid) { resolver.resolveInOutLocation(stage, ent); @@ -874,7 +969,7 @@ int TDefaultIoResolverBase::resolveInOutLocation(EShLanguage stage, TVarEntryInf } // 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()) { + if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getQualifier().hasSpirvDecorate()) { return ent.newLocation = -1; } @@ -961,7 +1056,7 @@ int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInf return ent.newLocation = type.getQualifier().layoutLocation; } // no locations added if already present, a built-in variable, or a variable with SPIR-V decorate - if (type.isBuiltIn() || type.getQualifier().hasSprivDecorate()) { + if (type.isBuiltIn() || type.getQualifier().hasSpirvDecorate()) { return ent.newLocation = -1; } // no locations on blocks of built-in variables @@ -1505,6 +1600,36 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi return !hadError; } +TGlslIoMapper::TGlslIoMapper() { + memset(inVarMaps, 0, sizeof(TVarLiveMap*) * EShLangCount); + memset(outVarMaps, 0, sizeof(TVarLiveMap*) * EShLangCount); + memset(uniformVarMap, 0, sizeof(TVarLiveMap*) * EShLangCount); + memset(intermediates, 0, sizeof(TIntermediate*) * EShLangCount); + profile = ENoProfile; + version = 0; + autoPushConstantMaxSize = 128; + autoPushConstantBlockPacking = ElpStd430; +} + +TGlslIoMapper::~TGlslIoMapper() { + for (size_t stage = 0; stage < EShLangCount; stage++) { + if (inVarMaps[stage] != nullptr) { + delete inVarMaps[stage]; + inVarMaps[stage] = nullptr; + } + if (outVarMaps[stage] != nullptr) { + delete outVarMaps[stage]; + outVarMaps[stage] = nullptr; + } + if (uniformVarMap[stage] != nullptr) { + delete uniformVarMap[stage]; + uniformVarMap[stage] = nullptr; + } + if (intermediates[stage] != nullptr) + intermediates[stage] = nullptr; + } +} + // Map I/O variables to provided offsets, and make bindings for // unbound but live variables. // @@ -1670,31 +1795,42 @@ 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; } } } - // If it's been upgraded to push_constant, then remove it from the uniformVector + // If it's been upgraded to push_constant, then set the flag so when its traversed + // in the next for loop, all references to this symbol will get their flag changed. // 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); + std::for_each(uniformVector.begin(), uniformVector.end(), + [this](TVarLivePair& p) { + if (p.first == autoPushConstantBlockName) { + p.second.upgradedToPushConstant = true; + } + }); } } for (size_t stage = 0; stage < EShLangCount; stage++) { if (intermediates[stage] != nullptr) { // traverse each stage, set new location to each input/output and unifom symbol, set new binding to - // ubo, ssbo and opaque symbols + // ubo, ssbo and opaque symbols. Assign push_constant upgrades as well. TVarLiveMap** pUniformVarMap = uniformResolve.uniformVarMap; std::for_each(uniformVector.begin(), uniformVector.end(), [pUniformVarMap, stage](TVarLivePair p) { auto at = pUniformVarMap[stage]->find(p.second.symbol->getAccessName()); if (at != pUniformVarMap[stage]->end() && at->second.id == p.second.id){ - int resolvedBinding = at->second.newBinding; - at->second = p.second; - if (resolvedBinding > 0) - at->second.newBinding = resolvedBinding; + if (p.second.upgradedToPushConstant) { + at->second.upgradedToPushConstant = true; + } else { + int resolvedBinding = at->second.newBinding; + at->second = p.second; + if (resolvedBinding > 0) + at->second.newBinding = resolvedBinding; + } } }); TVarSetTraverser iter_iomap(*intermediates[stage], *inVarMaps[stage], *outVarMaps[stage], @@ -1709,5 +1845,3 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { } } // end namespace glslang - -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index c43864e3aa..ef513d9a60 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -33,13 +33,10 @@ // POSSIBILITY OF SUCH DAMAGE. // -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - #ifndef _IOMAPPER_INCLUDED #define _IOMAPPER_INCLUDED #include -#include "LiveTraverser.h" #include #include // @@ -51,73 +48,7 @@ class TInfoSink; namespace glslang { class TIntermediate; -struct TVarEntryInfo { - long long id; - TIntermSymbol* symbol; - bool live; - int newBinding; - int newSet; - int newLocation; - int newComponent; - int newIndex; - EShLanguage stage; - struct TOrderById { - inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { return l.id < r.id; } - }; - - struct TOrderByPriority { - // ordering: - // 1) has both binding and set - // 2) has binding but no set - // 3) has no binding but set - // 4) has no binding and no set - inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { - const TQualifier& lq = l.symbol->getQualifier(); - const TQualifier& rq = r.symbol->getQualifier(); - - // simple rules: - // has binding gives 2 points - // has set gives 1 point - // who has the most points is more important. - int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); - int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); - - if (lPoints == rPoints) - return l.id < r.id; - return lPoints > rPoints; - } - }; - - struct TOrderByPriorityAndLive { - // ordering: - // 1) do live variables first - // 2) has both binding and set - // 3) has binding but no set - // 4) has no binding but set - // 5) has no binding and no set - inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { - - const TQualifier& lq = l.symbol->getQualifier(); - const TQualifier& rq = r.symbol->getQualifier(); - - // simple rules: - // has binding gives 2 points - // has set gives 1 point - // who has the most points is more important. - int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); - int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); - - if (l.live != r.live) - return l.live > r.live; - - if (lPoints != rPoints) - return lPoints > rPoints; - - return l.id < r.id; - } - }; -}; - +struct TVarEntryInfo; // Base class for shared TIoMapResolver services, used by several derivations. struct TDefaultIoResolverBase : public glslang::TIoMapResolver { public: @@ -258,82 +189,22 @@ struct TDefaultGlslIoResolver : public TDefaultIoResolverBase { typedef std::map TVarLiveMap; -// override function "operator=", if a vector being sort, -// when use vc++, the sort function will call : -// pair& operator=(const pair<_Other1, _Other2>& _Right) -// { -// first = _Right.first; -// second = _Right.second; -// return (*this); -// } -// that will make a const type handing on left. -// override this function can avoid a compiler error. -// In the future, if the vc++ compiler can handle such a situation, -// this part of the code will be removed. -struct TVarLivePair : std::pair { - TVarLivePair(const std::pair& _Right) : pair(_Right.first, _Right.second) {} - TVarLivePair& operator=(const TVarLivePair& _Right) { - const_cast(first) = _Right.first; - second = _Right.second; - return (*this); - } - TVarLivePair(const TVarLivePair& src) : pair(src) { } -}; -typedef std::vector TVarLiveVector; - -// I/O mapper -class TIoMapper { -public: - TIoMapper() {} - virtual ~TIoMapper() {} - // grow the reflection stage by stage - bool virtual addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*); - bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; } -}; - // I/O mapper for GLSL class TGlslIoMapper : public TIoMapper { public: - TGlslIoMapper() { - memset(inVarMaps, 0, sizeof(TVarLiveMap*) * (EShLangCount + 1)); - memset(outVarMaps, 0, sizeof(TVarLiveMap*) * (EShLangCount + 1)); - memset(uniformVarMap, 0, sizeof(TVarLiveMap*) * (EShLangCount + 1)); - memset(intermediates, 0, sizeof(TIntermediate*) * (EShLangCount + 1)); - profile = ENoProfile; - version = 0; - autoPushConstantMaxSize = 128; - autoPushConstantBlockPacking = ElpStd430; - } - virtual ~TGlslIoMapper() { - for (size_t stage = 0; stage < EShLangCount; stage++) { - if (inVarMaps[stage] != nullptr) { - delete inVarMaps[stage]; - inVarMaps[stage] = nullptr; - } - if (outVarMaps[stage] != nullptr) { - delete outVarMaps[stage]; - outVarMaps[stage] = nullptr; - } - if (uniformVarMap[stage] != nullptr) { - delete uniformVarMap[stage]; - uniformVarMap[stage] = nullptr; - } - if (intermediates[stage] != nullptr) - intermediates[stage] = nullptr; - } - } + TGlslIoMapper(); + virtual ~TGlslIoMapper(); // If set, the uniform block with the given name will be changed to be backed by // push_constant if it's size is <= maxSize - void setAutoPushConstantBlock(const char* name, unsigned int maxSize, TLayoutPacking packing) { + bool setAutoPushConstantBlock(const char* name, unsigned int maxSize, TLayoutPacking packing) override { autoPushConstantBlockName = name; autoPushConstantMaxSize = maxSize; autoPushConstantBlockPacking = packing; + return true; } // grow the reflection stage by stage bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*) override; bool doMap(TIoMapResolver*, TInfoSink&) override; - TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount], - *uniformVarMap[EShLangCount]; TIntermediate* intermediates[EShLangCount]; bool hadError = false; EProfile profile; @@ -343,10 +214,10 @@ class TGlslIoMapper : public TIoMapper { TString autoPushConstantBlockName; unsigned int autoPushConstantMaxSize; TLayoutPacking autoPushConstantBlockPacking; + TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount], + *uniformVarMap[EShLangCount]; }; } // end namespace glslang #endif // _IOMAPPER_INCLUDED - -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE diff --git a/glslang/MachineIndependent/limits.cpp b/glslang/MachineIndependent/limits.cpp index 391570579d..4404beca4f 100644 --- a/glslang/MachineIndependent/limits.cpp +++ b/glslang/MachineIndependent/limits.cpp @@ -187,14 +187,12 @@ bool TIndexTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node) // void TParseContext::constantIndexExpressionCheck(TIntermNode* index) { -#ifndef GLSLANG_WEB TIndexTraverser it(inductiveLoopIds); index->traverse(&it); if (it.bad) error(it.badLoc, "Non-constant-index-expression", "limitations", ""); -#endif } } // end namespace glslang diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 620be97c97..182a67754d 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -55,23 +55,25 @@ 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"; -#endif + if (unitStage < EShLangCount) + infoSink.info << "Linking " << StageName(getStage()) << " and " << StageName(unitStage) << " stages: " << message << "\n"; + else + infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n"; ++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"; -#endif + if (unitStage < EShLangCount) + infoSink.info << "Linking " << StageName(language) << " and " << StageName(unitStage) << " stages: " << message << "\n"; + else + infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n"; } // TODO: 4.4 offset/align: "Two blocks linked together in the same program with the same block @@ -83,11 +85,9 @@ void TIntermediate::warn(TInfoSink& infoSink, const char* message) // void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit) { -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) mergeCallGraphs(infoSink, unit); mergeModes(infoSink, unit); mergeTrees(infoSink, unit); -#endif } // @@ -113,8 +113,30 @@ void TIntermediate::mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); } +static inline bool isSameInterface(TIntermSymbol* symbol, EShLanguage stage, TIntermSymbol* unitSymbol, EShLanguage unitStage) { + return // 1) same stage and same shader interface + (stage == unitStage && symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) || + // 2) accross stages and both are uniform or buffer + (symbol->getQualifier().storage == EvqUniform && unitSymbol->getQualifier().storage == EvqUniform) || + (symbol->getQualifier().storage == EvqBuffer && unitSymbol->getQualifier().storage == EvqBuffer) || + // 3) in/out matched across stage boundary + (stage < unitStage && symbol->getQualifier().storage == EvqVaryingOut && unitSymbol->getQualifier().storage == EvqVaryingIn) || + (unitStage < stage && symbol->getQualifier().storage == EvqVaryingIn && unitSymbol->getQualifier().storage == EvqVaryingOut); +} + +static bool isSameSymbol(TIntermSymbol* symbol1, EShLanguage stage1, TIntermSymbol* symbol2, EShLanguage stage2) { + // If they are both blocks in the same shader interface, + // match by the block-name, not the identifier name. + if (symbol1->getType().getBasicType() == EbtBlock && symbol2->getType().getBasicType() == EbtBlock) { + if (isSameInterface(symbol1, stage1, symbol2, stage2)) { + return symbol1->getType().getTypeName() == symbol2->getType().getTypeName(); + } + } else if (symbol1->getName() == symbol2->getName()) + return true; + return false; +} // -// do error checking on the shader boundary in / out vars +// do error checking on the shader boundary in / out vars // void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit) { if (unit.treeRoot == nullptr || treeRoot == nullptr) @@ -137,7 +159,32 @@ void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit) { // do matching and error checking mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); - // TODO: final check; make sure that any statically used `in` have matching `out` written to + // Check that all of our inputs have matching outputs from the previous stage. + // Only do this for Vulkan, since GL_ARB_separate_shader_objects allows for + // the in/out to not match + if (spvVersion.vulkan > 0) { + for (auto& nextStageInterm : unitLinkerObjects) { + auto* nextStageSymbol = nextStageInterm->getAsSymbolNode(); + bool found = false; + for (auto& curStageInterm : linkerObjects) { + if (isSameSymbol(curStageInterm->getAsSymbolNode(), getStage(), nextStageSymbol, unit.getStage())) { + found = true; + break; + } + } + if (!found) { + TString errmsg; + errmsg.append("Input '"); + if (nextStageSymbol->getType().getBasicType() == EbtBlock) + errmsg.append(nextStageSymbol->getType().getTypeName()); + else + errmsg.append(nextStageSymbol->getName()); + errmsg.append("' in ").append(StageName(unit.getStage())); + errmsg.append(" shader has no corresponding output in ").append(StageName(getStage())).append(" shader."); + error(infoSink, errmsg.c_str(), unit.getStage()); + } + } + } } void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit) @@ -155,8 +202,6 @@ void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit) callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end()); } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - #define MERGE_MAX(member) member = std::max(member, unit.member) #define MERGE_TRUE(member) if (unit.member) member = unit.member; @@ -206,7 +251,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) if (vertices == TQualifier::layoutNotSet) vertices = unit.vertices; else if (unit.vertices != TQualifier::layoutNotSet && vertices != unit.vertices) { - if (language == EShLangGeometry || language == EShLangMeshNV) + if (language == EShLangGeometry || language == EShLangMesh) error(infoSink, "Contradictory layout max_vertices values"); else if (language == EShLangTessControl) error(infoSink, "Contradictory layout vertices values"); @@ -216,7 +261,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) if (primitives == TQualifier::layoutNotSet) primitives = unit.primitives; else if (primitives != unit.primitives) { - if (language == EShLangMeshNV) + if (language == EShLangMesh) error(infoSink, "Contradictory layout max_primitives values"); else assert(0); @@ -265,6 +310,9 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) MERGE_TRUE(earlyFragmentTests); MERGE_TRUE(postDepthCoverage); + MERGE_TRUE(nonCoherentColorAttachmentReadEXT); + MERGE_TRUE(nonCoherentDepthAttachmentReadEXT); + MERGE_TRUE(nonCoherentStencilAttachmentReadEXT); if (depthLayout == EldNone) depthLayout = unit.depthLayout; @@ -313,6 +361,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) MERGE_TRUE(autoMapLocations); MERGE_TRUE(invertY); MERGE_TRUE(dxPositionW); + MERGE_TRUE(debugInfo); MERGE_TRUE(flattenUniformArrays); MERGE_TRUE(useUnknownFormat); MERGE_TRUE(hlslOffsets); @@ -371,8 +420,6 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit) ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end()); } -#endif - static const TString& getNameForIdMap(TIntermSymbol* symbol) { TShaderInterface si = symbol->getType().getShaderInterface(); @@ -511,17 +558,6 @@ void TIntermediate::mergeBodies(TInfoSink& infoSink, TIntermSequence& globals, c globals.insert(globals.end() - 1, unitGlobals.begin(), unitGlobals.end() - 1); } -static inline bool isSameInterface(TIntermSymbol* symbol, EShLanguage stage, TIntermSymbol* unitSymbol, EShLanguage unitStage) { - return // 1) same stage and same shader interface - (stage == unitStage && symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) || - // 2) accross stages and both are uniform or buffer - (symbol->getQualifier().storage == EvqUniform && unitSymbol->getQualifier().storage == EvqUniform) || - (symbol->getQualifier().storage == EvqBuffer && unitSymbol->getQualifier().storage == EvqBuffer) || - // 3) in/out matched across stage boundary - (stage < unitStage && symbol->getQualifier().storage == EvqVaryingOut && unitSymbol->getQualifier().storage == EvqVaryingIn) || - (unitStage < stage && symbol->getQualifier().storage == EvqVaryingIn && unitSymbol->getQualifier().storage == EvqVaryingOut); -} - // // Global Unfiform block stores any default uniforms (i.e. uniforms without a block) // If two linked stages declare the same member, they are meant to be the same uniform @@ -580,9 +616,6 @@ void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& } void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unit) { - if (block->getType() == unitBlock->getType()) { - return; - } if (block->getType().getTypeName() != unitBlock->getType().getTypeName() || block->getType().getBasicType() != unitBlock->getType().getBasicType() || @@ -629,44 +662,42 @@ void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* bl } } - TType unitType; - unitType.shallowCopy(unitBlock->getType()); - // update symbol node in unit tree, // and other nodes that may reference it class TMergeBlockTraverser : public TIntermTraverser { public: - TMergeBlockTraverser(const glslang::TType &type, const glslang::TType& unitType, - glslang::TIntermediate& unit, - const std::map& memberIdxUpdates) : - newType(type), unitType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates) - { } - virtual ~TMergeBlockTraverser() { } - - const glslang::TType& newType; // type with modifications - const glslang::TType& unitType; // copy of original type - glslang::TIntermediate& unit; // intermediate that is being updated - const std::map& memberIndexUpdates; - - virtual void visitSymbol(TIntermSymbol* symbol) + TMergeBlockTraverser(const TIntermSymbol* newSym) + : newSymbol(newSym), newType(nullptr), unit(nullptr), memberIndexUpdates(nullptr) + { + } + TMergeBlockTraverser(const TIntermSymbol* newSym, const glslang::TType* unitType, glslang::TIntermediate* unit, + const std::map* memberIdxUpdates) + : TIntermTraverser(false, true), newSymbol(newSym), newType(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* newType; // shallow copy of the new type + glslang::TIntermediate* unit; // intermediate that is being updated + const std::map* memberIndexUpdates; - // e.g. the struct list is a ptr to an object, so it can be updated - // once, outside the traverser - //*symType.getWritableStruct() = *newType.getStruct(); + virtual void visitSymbol(TIntermSymbol* symbol) + { + if (newSymbol->getAccessName() == symbol->getAccessName() && + newSymbol->getQualifier().getBlockStorage() == symbol->getQualifier().getBlockStorage()) { + // Each symbol node may have a local copy of the block structure. + // Update those structures to match the new one post-merge + *(symbol->getWritableType().getWritableStruct()) = *(newSymbol->getType().getStruct()); } - } virtual bool visitBinary(TVisit, glslang::TIntermBinary* node) { - if (node->getOp() == EOpIndexDirectStruct && node->getLeft()->getType() == unitType) { + if (!unit || !newType || !memberIndexUpdates || memberIndexUpdates->empty()) + return true; + + if (node->getOp() == EOpIndexDirectStruct && node->getLeft()->getType() == *newType) { // this is a dereference to a member of the block since the // member list changed, need to update this to point to the // right index @@ -674,8 +705,8 @@ void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* bl glslang::TIntermConstantUnion* constNode = node->getRight()->getAsConstantUnion(); unsigned int memberIdx = constNode->getConstArray()[0].getUConst(); - unsigned int newIdx = memberIndexUpdates.at(memberIdx); - TIntermTyped* newConstNode = unit.addConstantUnion(newIdx, node->getRight()->getLoc()); + unsigned int newIdx = memberIndexUpdates->at(memberIdx); + TIntermTyped* newConstNode = unit->addConstantUnion(newIdx, node->getRight()->getLoc()); node->setRight(newConstNode); delete constNode; @@ -684,10 +715,20 @@ void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* bl } return true; } - } finalLinkTraverser(block->getType(), unitType, *unit, memberIndexUpdates); + }; - // update the tree to use the new type - unit->getTreeRoot()->traverse(&finalLinkTraverser); + // '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); + + // 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 newType; + newType.shallowCopy(block->getType()); + TMergeBlockTraverser unitFinalLinkTraverser(block, &newType, unit, &memberIndexUpdates); + unit->getTreeRoot()->traverse(&unitFinalLinkTraverser); // update the member list (*unitMemberList) = (*memberList); @@ -702,24 +743,18 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin // Error check and merge the linker objects (duplicates should not be created) std::size_t initialNumLinkerObjects = linkerObjects.size(); for (unsigned int unitLinkObj = 0; unitLinkObj < unitLinkerObjects.size(); ++unitLinkObj) { + TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode(); bool merge = true; + + // Don't merge inputs backwards into previous stages + if (getStage() != unitStage && unitSymbol->getQualifier().storage == EvqVaryingIn) + merge = false; + for (std::size_t linkObj = 0; linkObj < initialNumLinkerObjects; ++linkObj) { TIntermSymbol* symbol = linkerObjects[linkObj]->getAsSymbolNode(); - TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode(); assert(symbol && unitSymbol); - bool isSameSymbol = false; - // If they are both blocks in the same shader interface, - // match by the block-name, not the identifier name. - if (symbol->getType().getBasicType() == EbtBlock && unitSymbol->getType().getBasicType() == EbtBlock) { - if (isSameInterface(symbol, getStage(), unitSymbol, unitStage)) { - isSameSymbol = symbol->getType().getTypeName() == unitSymbol->getType().getTypeName(); - } - } - else if (symbol->getName() == unitSymbol->getName()) - isSameSymbol = true; - - if (isSameSymbol) { + if (isSameSymbol(symbol, getStage(), unitSymbol, unitStage)) { // filter out copy merge = false; @@ -737,6 +772,21 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin symbol->getQualifier().layoutLocation = unitSymbol->getQualifier().layoutLocation; } + // Update implicit array sizes + if (symbol->getWritableType().isImplicitlySizedArray() && unitSymbol->getType().isImplicitlySizedArray()) { + if (unitSymbol->getType().getImplicitArraySize() > symbol->getType().getImplicitArraySize()){ + symbol->getWritableType().updateImplicitArraySize(unitSymbol->getType().getImplicitArraySize()); + } + } + else if (symbol->getWritableType().isImplicitlySizedArray() && unitSymbol->getType().isSizedArray()) { + if (symbol->getWritableType().getImplicitArraySize() > unitSymbol->getType().getOuterArraySize()) + error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders."); + } + else if (unitSymbol->getType().isImplicitlySizedArray() && symbol->getWritableType().isSizedArray()) { + if (unitSymbol->getType().getImplicitArraySize() > symbol->getWritableType().getOuterArraySize()) + error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders."); + } + // Update implicit array sizes mergeImplicitArraySizes(symbol->getWritableType(), unitSymbol->getType()); @@ -747,6 +797,19 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant() && getStage() == unitStage) error(infoSink, "Only one push_constant block is allowed per stage"); } + + // Check conflicts between preset primitives and sizes of I/O variables among multiple geometry shaders + if (language == EShLangGeometry && unitStage == EShLangGeometry) + { + TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode(); + if (unitSymbol->isArray() && unitSymbol->getQualifier().storage == EvqVaryingIn && unitSymbol->getQualifier().builtIn == EbvNone) + if ((unitSymbol->getArraySizes()->isImplicitlySized() && + unitSymbol->getArraySizes()->getImplicitSize() != TQualifier::mapGeometryToSize(getInputPrimitive())) || + (! unitSymbol->getArraySizes()->isImplicitlySized() && + unitSymbol->getArraySizes()->getDimSize(0) != TQualifier::mapGeometryToSize(getInputPrimitive()))) + error(infoSink, "Not all array sizes match across all geometry shaders in the program"); + } + if (merge) { linkerObjects.push_back(unitLinkerObjects[unitLinkObj]); @@ -816,9 +879,12 @@ void TIntermediate::mergeImplicitArraySizes(TType& type, const TType& unitType) // void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, EShLanguage unitStage) { -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) bool crossStage = getStage() != unitStage; bool writeTypeComparison = false; + bool errorReported = false; + bool printQualifiers = false; + bool printPrecision = false; + bool printType = false; // Types have to match { @@ -847,14 +913,52 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy else { arraysMatch = symbol.getType().sameArrayness(unitSymbol.getType()) || (symbol.getType().isArray() && unitSymbol.getType().isArray() && - (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray())); + (symbol.getType().isImplicitlySizedArray() || unitSymbol.getType().isImplicitlySizedArray() || + symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray())); } - if (!symbol.getType().sameElementType(unitSymbol.getType()) || - !symbol.getType().sameTypeParameters(unitSymbol.getType()) || - !arraysMatch ) { + int lpidx = -1; + int rpidx = -1; + if (!symbol.getType().sameElementType(unitSymbol.getType(), &lpidx, &rpidx)) { + if (lpidx >= 0 && rpidx >= 0) { + error(infoSink, "Member names and types must match:", unitStage); + infoSink.info << " Block: " << symbol.getType().getTypeName() << "\n"; + infoSink.info << " " << StageName(getStage()) << " stage: \"" + << (*symbol.getType().getStruct())[lpidx].type->getCompleteString(true, false, false, true, + (*symbol.getType().getStruct())[lpidx].type->getFieldName()) << "\"\n"; + infoSink.info << " " << StageName(unitStage) << " stage: \"" + << (*unitSymbol.getType().getStruct())[rpidx].type->getCompleteString(true, false, false, true, + (*unitSymbol.getType().getStruct())[rpidx].type->getFieldName()) << "\"\n"; + errorReported = true; + } else if (lpidx >= 0 && rpidx == -1) { + TString errmsg = StageName(getStage()); + errmsg.append(" block member has no corresponding member in ").append(StageName(unitStage)).append(" block:"); + error(infoSink, errmsg.c_str(), unitStage); + infoSink.info << " " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: " + << (*symbol.getType().getStruct())[lpidx].type->getFieldName() << "\n"; + infoSink.info << " " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << ", Member: n/a \n"; + errorReported = true; + } else if (lpidx == -1 && rpidx >= 0) { + TString errmsg = StageName(unitStage); + errmsg.append(" block member has no corresponding member in ").append(StageName(getStage())).append(" block:"); + error(infoSink, errmsg.c_str(), unitStage); + infoSink.info << " " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << ", Member: " + << (*unitSymbol.getType().getStruct())[rpidx].type->getFieldName() << "\n"; + infoSink.info << " " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: n/a \n"; + errorReported = true; + } else { + error(infoSink, "Types must match:", unitStage); + writeTypeComparison = true; + printType = true; + } + } else if (!arraysMatch) { + error(infoSink, "Array sizes must be compatible:", unitStage); + writeTypeComparison = true; + printType = true; + } else if (!symbol.getType().sameTypeParameters(unitSymbol.getType())) { + error(infoSink, "Type parameters must match:", unitStage); writeTypeComparison = true; - error(infoSink, "Types must match:"); + printType = true; } } @@ -875,13 +979,35 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy } const TQualifier& qualifier = (*symbol.getType().getStruct())[li].type->getQualifier(); const TQualifier & unitQualifier = (*unitSymbol.getType().getStruct())[ri].type->getQualifier(); - if (qualifier.layoutMatrix != unitQualifier.layoutMatrix || - qualifier.layoutOffset != unitQualifier.layoutOffset || - qualifier.layoutAlign != unitQualifier.layoutAlign || - qualifier.layoutLocation != unitQualifier.layoutLocation || - qualifier.layoutComponent != unitQualifier.layoutComponent) { - error(infoSink, "Interface block member layout qualifiers must match:"); - writeTypeComparison = true; + bool layoutQualifierError = false; + if (qualifier.layoutMatrix != unitQualifier.layoutMatrix) { + error(infoSink, "Interface block member layout matrix qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (qualifier.layoutOffset != unitQualifier.layoutOffset) { + error(infoSink, "Interface block member layout offset qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (qualifier.layoutAlign != unitQualifier.layoutAlign) { + error(infoSink, "Interface block member layout align qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (qualifier.layoutLocation != unitQualifier.layoutLocation) { + error(infoSink, "Interface block member layout location qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (qualifier.layoutComponent != unitQualifier.layoutComponent) { + error(infoSink, "Interface block member layout component qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (layoutQualifierError) { + infoSink.info << " " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: " + << (*symbol.getType().getStruct())[li].type->getFieldName() << " \"" + << (*symbol.getType().getStruct())[li].type->getCompleteString(true, true, false, false) << "\"\n"; + infoSink.info << " " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << ", Member: " + << (*unitSymbol.getType().getStruct())[ri].type->getFieldName() << " \"" + << (*unitSymbol.getType().getStruct())[ri].type->getCompleteString(true, true, false, false) << "\"\n"; + errorReported = true; } ++li; ++ri; @@ -895,8 +1021,9 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy // Qualifiers have to (almost) match // Storage... if (!isInOut && symbol.getQualifier().storage != unitSymbol.getQualifier().storage) { - error(infoSink, "Storage qualifiers must match:"); + error(infoSink, "Storage qualifiers must match:", unitStage); writeTypeComparison = true; + printQualifiers = true; } // Uniform and buffer blocks must either both have an instance name, or @@ -904,37 +1031,40 @@ 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... - // "interpolation qualification (e.g., flat) and auxiliary qualification (e.g. centroid) may differ. + // "interpolation qualification (e.g., flat) and auxiliary qualification (e.g. centroid) may differ. // These mismatches are allowed between any pair of stages ... // those provided in the fragment shader supersede those provided in previous stages." if (!crossStage && @@ -944,59 +1074,138 @@ 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 } void TIntermediate::sharedBlockCheck(TInfoSink& infoSink) @@ -1043,7 +1252,6 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) // overlap/alias/missing I/O, etc. inOutLocationCheck(infoSink); -#ifndef GLSLANG_WEB if (getNumPushConstants() > 1) error(infoSink, "Only one push_constant block is allowed per stage"); @@ -1136,8 +1344,8 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) error(infoSink, "At least one shader must specify a layout(max_vertices = value)"); break; case EShLangFragment: - // for GL_ARB_post_depth_coverage, EarlyFragmentTest is set automatically in - // ParseHelper.cpp. So if we reach here, this must be GL_EXT_post_depth_coverage + // for GL_ARB_post_depth_coverage, EarlyFragmentTest is set automatically in + // ParseHelper.cpp. So if we reach here, this must be GL_EXT_post_depth_coverage // requiring explicit early_fragment_tests if (getPostDepthCoverage() && !getEarlyFragmentTests()) error(infoSink, "post_depth_coverage requires early_fragment_tests"); @@ -1154,7 +1362,7 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) if (numShaderRecordBlocks > 1) error(infoSink, "Only one shaderRecordNV buffer block is allowed per stage"); break; - case EShLangMeshNV: + case EShLangMesh: // NV_mesh_shader doesn't allow use of both single-view and per-view builtins. if (inIoAccessed("gl_Position") && inIoAccessed("gl_PositionPerViewNV")) error(infoSink, "Can only use one of gl_Position or gl_PositionPerViewNV"); @@ -1172,10 +1380,12 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) error(infoSink, "At least one shader must specify a layout(max_vertices = value)"); if (primitives == TQualifier::layoutNotSet) error(infoSink, "At least one shader must specify a layout(max_primitives = value)"); - // fall through - case EShLangTaskNV: + [[fallthrough]]; + case EShLangTask: if (numTaskNVBlocks > 1) error(infoSink, "Only one taskNV interface block is allowed per shader"); + if (numTaskEXTPayloads > 1) + error(infoSink, "Only single variable of type taskPayloadSharedEXT is allowed per shader"); sharedBlockCheck(infoSink); break; default: @@ -1199,7 +1409,6 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) } finalLinkTraverser; treeRoot->traverse(&finalLinkTraverser); -#endif } // @@ -1222,7 +1431,7 @@ void TIntermediate::checkCallGraphCycles(TInfoSink& infoSink) TCall* newRoot; do { // See if we have unvisited parts of the graph. - newRoot = 0; + newRoot = nullptr; for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) { if (! call->visited) { newRoot = &(*call); @@ -1356,7 +1565,10 @@ void TIntermediate::checkCallGraphBodies(TInfoSink& infoSink, bool keepUncalled) if (! keepUncalled) { for (int f = 0; f < (int)functionSequence.size(); ++f) { if (! reachable[f]) + { + resetTopLevelUncalledStatus(functionSequence[f]->getAsAggregate()->getName()); functionSequence[f] = nullptr; + } } functionSequence.erase(std::remove(functionSequence.begin(), functionSequence.end(), nullptr), functionSequence.end()); } @@ -1424,7 +1636,7 @@ bool TIntermediate::userOutputUsed() const return found; } -// Accumulate locations used for inputs, outputs, and uniforms, payload and callable data +// Accumulate locations used for inputs, outputs, and uniforms, payload, callable data, and tileImageEXT // and check for collisions as the accumulation is done. // // Returns < 0 if no collision, >= 0 if collision and the value returned is a colliding value. @@ -1437,7 +1649,6 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ typeCollision = false; int set; - int setRT; if (qualifier.isPipeInput()) set = 0; else if (qualifier.isPipeOutput()) @@ -1446,10 +1657,14 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ set = 2; else if (qualifier.storage == EvqBuffer) set = 3; + else if (qualifier.storage == EvqTileImageEXT) + set = 4; else if (qualifier.isAnyPayload()) - setRT = 0; + set = 0; else if (qualifier.isAnyCallable()) - setRT = 1; + set = 1; + else if (qualifier.isHitObjectAttrNV()) + set = 2; else return -1; @@ -1488,13 +1703,14 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ // For raytracing IO (payloads and callabledata) each declaration occupies a single // slot irrespective of type. int collision = -1; // no collision -#ifndef GLSLANG_WEB - if (qualifier.isAnyPayload() || qualifier.isAnyCallable()) { + if (qualifier.isAnyPayload() || qualifier.isAnyCallable() || qualifier.isHitObjectAttrNV()) { TRange range(qualifier.layoutLocation, qualifier.layoutLocation); - collision = checkLocationRT(setRT, qualifier.layoutLocation); + collision = checkLocationRT(set, qualifier.layoutLocation); if (collision < 0) - usedIoRT[setRT].push_back(range); - } else if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 && + usedIoRT[set].push_back(range); + return collision; + } + if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 && (qualifier.isPipeInput() || qualifier.isPipeOutput())) { // Dealing with dvec3 in/out split across two locations. // Need two io-ranges. @@ -1503,7 +1719,7 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ // First range: TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation); TRange componentRange(0, 3); - TIoRange range(locationRange, componentRange, type.getBasicType(), 0); + TIoRange range(locationRange, componentRange, type.getBasicType(), 0, qualifier.centroid, qualifier.smooth, qualifier.flat, qualifier.sample, qualifier.patch); // check for collisions collision = checkLocationRange(set, range, type, typeCollision); @@ -1513,42 +1729,62 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ // Second range: TRange locationRange2(qualifier.layoutLocation + 1, qualifier.layoutLocation + 1); TRange componentRange2(0, 1); - TIoRange range2(locationRange2, componentRange2, type.getBasicType(), 0); + TIoRange range2(locationRange2, componentRange2, type.getBasicType(), 0, qualifier.centroid, qualifier.smooth, qualifier.flat, qualifier.sample, qualifier.patch); // check for collisions collision = checkLocationRange(set, range2, type, typeCollision); if (collision < 0) usedIo[set].push_back(range2); } - } else -#endif - { - // Not a dvec3 in/out split across two locations, generic path. - // Need a single IO-range block. + return collision; + } - TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation + size - 1); - TRange componentRange(0, 3); - if (qualifier.hasComponent() || type.getVectorSize() > 0) { - int consumedComponents = type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1); - if (qualifier.hasComponent()) - componentRange.start = qualifier.layoutComponent; - componentRange.last = componentRange.start + consumedComponents - 1; - } + // Not a dvec3 in/out split across two locations, generic path. + // Need a single IO-range block. - // combine location and component ranges - TIoRange range(locationRange, componentRange, type.getBasicType(), qualifier.hasIndex() ? qualifier.getIndex() : 0); + TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation + size - 1); + TRange componentRange(0, 3); + if (qualifier.hasComponent() || type.getVectorSize() > 0) { + int consumedComponents = type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1); + if (qualifier.hasComponent()) + componentRange.start = qualifier.layoutComponent; + componentRange.last = componentRange.start + consumedComponents - 1; + } - // check for collisions, except for vertex inputs on desktop targeting OpenGL - if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0) - collision = checkLocationRange(set, range, type, typeCollision); + // combine location and component ranges + TBasicType basicTy = type.getBasicType(); + if (basicTy == EbtSampler && type.getSampler().isAttachmentEXT()) + basicTy = type.getSampler().type; + TIoRange range(locationRange, componentRange, basicTy, qualifier.hasIndex() ? qualifier.getIndex() : 0, qualifier.centroid, qualifier.smooth, qualifier.flat, qualifier.sample, qualifier.patch); - if (collision < 0) - usedIo[set].push_back(range); - } + // check for collisions, except for vertex inputs on desktop targeting OpenGL + if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0) + collision = checkLocationRange(set, range, type, typeCollision); + + if (collision < 0) + usedIo[set].push_back(range); return collision; } +// Check that two types can be stored in different components in the same location. +// They must be the same type, except signed/unsigned integers are considered compatible. +static bool checkCompatibleTypes(TBasicType t1, TBasicType t2) { + if (t1 != t2) { + if ((t1 == EbtInt8 && t2 == EbtUint8) || + (t2 == EbtInt8 && t1 == EbtUint8) || + (t1 == EbtInt16 && t2 == EbtUint16) || + (t2 == EbtInt16 && t1 == EbtUint16)|| + (t1 == EbtInt && t2 == EbtUint) || + (t2 == EbtInt && t1 == EbtUint)|| + (t1 == EbtInt64 && t2 == EbtUint64) || + (t2 == EbtInt64 && t1 == EbtUint64)) { + return true; + } + } + return t1 == t2; +} + // Compare a new (the passed in) 'range' against the existing set, and see // if there are any collisions. // @@ -1560,13 +1796,32 @@ int TIntermediate::checkLocationRange(int set, const TIoRange& range, const TTyp if (range.overlap(usedIo[set][r])) { // there is a collision; pick one return std::max(range.location.start, usedIo[set][r].location.start); - } else if (range.location.overlap(usedIo[set][r].location) && type.getBasicType() != usedIo[set][r].basicType) { + } else if (range.location.overlap(usedIo[set][r].location) && + (!checkCompatibleTypes(type.getBasicType(), usedIo[set][r].basicType) || + type.getQualifier().centroid != usedIo[set][r].centroid || + type.getQualifier().smooth != usedIo[set][r].smooth || + type.getQualifier().flat != usedIo[set][r].flat || + type.getQualifier().sample != usedIo[set][r].sample || + type.getQualifier().patch != usedIo[set][r].patch)) { // aliased-type mismatch typeCollision = true; return std::max(range.location.start, usedIo[set][r].location.start); } } + // check typeCollision between tileImageEXT and out + if (set == 4 || set == 1) { + // if the set is "tileImageEXT", check against "out" and vice versa + int againstSet = (set == 4) ? 1 : 4; + for (size_t r = 0; r < usedIo[againstSet].size(); ++r) { + if (range.location.overlap(usedIo[againstSet][r].location) && type.getBasicType() != usedIo[againstSet][r].basicType) { + // aliased-type mismatch + typeCollision = true; + return std::max(range.location.start, usedIo[againstSet][r].location.start); + } + } + } + return -1; // no collision } @@ -1630,10 +1885,8 @@ int TIntermediate::computeTypeLocationSize(const TType& type, EShLanguage stage) if (type.isSizedArray() && !type.getQualifier().isPerView()) return type.getOuterArraySize() * computeTypeLocationSize(elementType, stage); else { -#ifndef GLSLANG_WEB // unset perViewNV attributes for arrayed per-view outputs: "perviewNV vec4 v[MAX_VIEWS][3];" elementType.getQualifier().perViewNV = false; -#endif return computeTypeLocationSize(elementType, stage); } } @@ -1709,8 +1962,6 @@ int TIntermediate::computeTypeUniformLocationSize(const TType& type) return 1; } -#ifndef GLSLANG_WEB - // Accumulate xfb buffer ranges and check for collisions as the accumulation is done. // // Returns < 0 if no collision, >= 0 if collision and the value returned is a colliding value. @@ -1828,8 +2079,6 @@ unsigned int TIntermediate::computeTypeXfbSize(const TType& type, bool& contains } } -#endif - const int baseAlignmentVec4Std140 = 16; // Return the size and alignment of a component of the given type. @@ -1837,10 +2086,6 @@ const int baseAlignmentVec4Std140 = 16; // Return value is the alignment.. int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size) { -#ifdef GLSLANG_WEB - size = 4; return 4; -#endif - switch (type.getBasicType()) { case EbtInt64: case EbtUint64: @@ -1851,6 +2096,15 @@ int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size) case EbtInt16: case EbtUint16: size = 2; return 2; case EbtReference: size = 8; return 8; + case EbtSampler: + { + if (type.isBindlessImage() || type.isBindlessTexture()) { + size = 8; return 8; + } + else { + size = 4; return 4; + } + } default: size = 4; return 4; } } @@ -2017,9 +2271,9 @@ int TIntermediate::getBaseAlignment(const TType& type, int& size, int& stride, T } // To aid the basic HLSL rule about crossing vec4 boundaries. -bool TIntermediate::improperStraddle(const TType& type, int size, int offset) +bool TIntermediate::improperStraddle(const TType& type, int size, int offset, bool vectorLike) { - if (! type.isVector() || type.isArray()) + if (! vectorLike || type.isArray()) return false; return size <= 16 ? offset / 16 != (offset + size - 1) / 16 @@ -2068,7 +2322,7 @@ int TIntermediate::getScalarAlignment(const TType& type, int& size, int& stride, if (type.isVector()) { int scalarAlign = getBaseAlignmentScalar(type, size); - + size *= type.getVectorSize(); return scalarAlign; } @@ -2089,7 +2343,7 @@ int TIntermediate::getScalarAlignment(const TType& type, int& size, int& stride, assert(0); // all cases should be covered above size = 1; - return 1; + return 1; } int TIntermediate::getMemberAlignment(const TType& type, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor) @@ -2171,7 +2425,6 @@ int TIntermediate::computeBufferReferenceTypeSize(const TType& type) return size; } -#ifndef GLSLANG_WEB bool TIntermediate::isIoResizeArray(const TType& type, EShLanguage language) { return type.isArray() && ((language == EShLangGeometry && type.getQualifier().storage == EvqVaryingIn) || @@ -2179,10 +2432,9 @@ bool TIntermediate::isIoResizeArray(const TType& type, EShLanguage language) { ! type.getQualifier().patch) || (language == EShLangTessEvaluation && type.getQualifier().storage == EvqVaryingIn) || (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn && - type.getQualifier().pervertexNV) || - (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && + (type.getQualifier().pervertexNV || type.getQualifier().pervertexEXT)) || + (language == EShLangMesh && type.getQualifier().storage == EvqVaryingOut && !type.getQualifier().perTaskNV)); } -#endif // not GLSLANG_WEB } // end namespace glslang diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 1386cb3a87..80638a6bf9 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -43,11 +43,12 @@ #include "../Public/ShaderLang.h" #include "Versions.h" -#include -#include #include -#include #include +#include +#include +#include +#include class TInfoSink; @@ -98,7 +99,8 @@ class TSwizzleSelectors { // A "call" is a pair: . // There can be duplicates. General assumption is the list is small. struct TCall { - TCall(const TString& pCaller, const TString& pCallee) : caller(pCaller), callee(pCallee) { } + TCall(const TString& pCaller, const TString& pCallee) + : caller(pCaller), callee(pCallee), visited(false), currentPath(false), errorGiven(false) { } TString caller; TString callee; bool visited; @@ -122,8 +124,10 @@ struct TRange { // within the same location range, component range, and index value. Locations don't alias unless // all other dimensions of their range overlap. struct TIoRange { - TIoRange(TRange location, TRange component, TBasicType basicType, int index) - : location(location), component(component), basicType(basicType), index(index) { } + TIoRange(TRange location, TRange component, TBasicType basicType, int index, bool centroid, bool smooth, bool flat, bool sample, bool patch) + : location(location), component(component), basicType(basicType), index(index), centroid(centroid), smooth(smooth), flat(flat), sample(sample), patch(patch) + { + } bool overlap(const TIoRange& rhs) const { return location.overlap(rhs.location) && component.overlap(rhs.component) && index == rhs.index; @@ -132,6 +136,11 @@ struct TIoRange { TRange component; TBasicType basicType; int index; + bool centroid; + bool smooth; + bool flat; + bool sample; + bool patch; }; // An offset range is a 2-D rectangle; the set of (binding, offset) pairs all lying @@ -147,7 +156,6 @@ struct TOffsetRange { TRange offset; }; -#ifndef GLSLANG_WEB // Things that need to be tracked per xfb buffer. struct TXfbBuffer { TXfbBuffer() : stride(TQualifier::layoutXfbStrideEnd), implicitStride(0), contains64BitType(false), @@ -159,7 +167,6 @@ struct TXfbBuffer { bool contains32BitType; bool contains16BitType; }; -#endif // Track a set of strings describing how the module was processed. // This includes command line options, transforms, etc., ideally inclusive enough @@ -225,6 +232,16 @@ enum ComputeDerivativeMode { LayoutDerivativeGroupLinear, // derivative_group_linearNV }; +// +// Status type on AST level. Some uncalled status or functions would be reset in call graph. +// Currently we will keep status set by explicitly declared layout or variable decl. +// +enum AstRefType { + AstRefTypeVar, // Status set by variable decl + AstRefTypeFunc, // Status set by function decl + AstRefTypeLayout, // Status set by layout decl +}; + class TIdMaps { public: TMap& operator[](long long i) { return maps[i]; } @@ -283,34 +300,38 @@ class TIntermediate { public: explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) : language(l), -#ifndef GLSLANG_ANGLE profile(p), version(v), -#endif - treeRoot(0), + treeRoot(nullptr), resources(TBuiltInResource{}), numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false), invertY(false), dxPositionW(false), + enhancedMsgs(false), + debugInfo(false), useStorageBuffer(false), invariantAll(false), nanMinMaxClamp(false), depthReplacing(false), + stencilReplacing(false), uniqueId(0), globalUniformBlockName(""), atomicCounterBlockName(""), globalUniformBlockSet(TQualifier::layoutSetEnd), globalUniformBlockBinding(TQualifier::layoutBindingEnd), - atomicCounterBlockSet(TQualifier::layoutSetEnd) -#ifndef GLSLANG_WEB - , + atomicCounterBlockSet(TQualifier::layoutSetEnd), implicitThisName("@this"), implicitCounterName("@count"), source(EShSourceNone), 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), + postDepthCoverage(false), earlyAndLateFragmentTestsAMD(false), + nonCoherentColorAttachmentReadEXT(false), + nonCoherentDepthAttachmentReadEXT(false), + nonCoherentStencilAttachmentReadEXT(false), + depthLayout(EldNone), + stencilLayout(ElsNone), hlslFunctionality1(false), blendEquations(0), xfbMode(false), multiStream(false), layoutOverrideCoverage(false), @@ -320,6 +341,7 @@ class TIntermediate { primitives(TQualifier::layoutNotSet), numTaskNVBlocks(0), layoutPrimitiveCulling(false), + numTaskEXTPayloads(0), autoMapBindings(false), autoMapLocations(false), flattenUniformArrays(false), @@ -331,11 +353,12 @@ class TIntermediate { needToLegalize(false), binaryDoubleOutput(false), subgroupUniformControlFlow(false), + maximallyReconverges(false), usePhysicalStorageBuffer(false), spirvRequirement(nullptr), spirvExecutionMode(nullptr), - uniformLocationBase(0) -#endif + uniformLocationBase(0), + quadDerivMode(false), reqFullQuadsMode(false) { localSize[0] = 1; localSize[1] = 1; @@ -346,23 +369,17 @@ class TIntermediate { localSizeSpecId[0] = TQualifier::layoutNotSet; localSizeSpecId[1] = TQualifier::layoutNotSet; localSizeSpecId[2] = TQualifier::layoutNotSet; -#ifndef GLSLANG_WEB xfbBuffers.resize(TQualifier::layoutXfbBufferEnd); shiftBinding.fill(0); -#endif } void setVersion(int v) { -#ifndef GLSLANG_ANGLE version = v; -#endif } void setProfile(EProfile p) { -#ifndef GLSLANG_ANGLE profile = p; -#endif } int getVersion() const { return version; } @@ -419,6 +436,9 @@ class TIntermediate { case EShTargetVulkan_1_2: processes.addProcess("target-env vulkan1.2"); break; + case EShTargetVulkan_1_3: + processes.addProcess("target-env vulkan1.3"); + break; default: processes.addProcess("target-env vulkanUnknown"); break; @@ -456,6 +476,12 @@ class TIntermediate { const std::string& getEntryPointName() const { return entryPointName; } const std::string& getEntryPointMangledName() const { return entryPointMangledName; } + void setDebugInfo(bool debuginfo) + { + debugInfo = debuginfo; + } + bool getDebugInfo() const { return debugInfo; } + void setInvertY(bool invert) { invertY = invert; @@ -466,12 +492,18 @@ class TIntermediate { void setDxPositionW(bool dxPosW) { - dxPositionW = dxPosW; - if (dxPositionW) - processes.addProcess("dx-position-w"); + dxPositionW = dxPosW; + if (dxPositionW) + processes.addProcess("dx-position-w"); } bool getDxPositionW() const { return dxPositionW; } + void setEnhancedMsgs() + { + enhancedMsgs = true; + } + bool getEnhancedMsgs() const { return enhancedMsgs && getSource() == EShSourceGlsl; } + #ifdef ENABLE_HLSL void setSource(EShSource s) { source = s; } EShSource getSource() const { return source; } @@ -506,6 +538,8 @@ class TIntermediate { TOperator mapTypeToConstructorOp(const TType&) const; TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right); TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&); + TIntermAggregate* mergeAggregate(TIntermNode* left, TIntermNode* right); + TIntermAggregate* mergeAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&); TIntermAggregate* makeAggregate(TIntermNode* node); TIntermAggregate* makeAggregate(TIntermNode* node, const TSourceLoc&); TIntermAggregate* makeAggregate(const TSourceLoc&); @@ -551,7 +585,8 @@ class TIntermediate { TIntermTyped* foldSwizzle(TIntermTyped* node, TSwizzleSelectors& fields, const TSourceLoc&); // Tree ops - static const TIntermTyped* findLValueBase(const TIntermTyped*, bool swizzleOkay , bool BufferReferenceOk = false); + static const TIntermTyped* traverseLValueBase(const TIntermTyped*, bool swizzleOkay, bool bufferReferenceOk = false, + std::function proc = {}); // Linkage related void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&); @@ -577,6 +612,8 @@ class TIntermediate { bool isInvariantAll() const { return invariantAll; } void setDepthReplacing() { depthReplacing = true; } bool isDepthReplacing() const { return depthReplacing; } + void setStencilReplacing() { stencilReplacing = true; } + bool isStencilReplacing() const { return stencilReplacing; } bool setLocalSize(int dim, int size) { if (localSizeNotDefault[dim]) @@ -606,34 +643,6 @@ class TIntermediate { localSizeSpecId[1] != TQualifier::layoutNotSet || localSizeSpecId[2] != TQualifier::layoutNotSet; } -#ifdef GLSLANG_WEB - void output(TInfoSink&, bool tree) { } - - bool isEsProfile() const { return false; } - bool getXfbMode() const { return false; } - bool isMultiStream() const { return false; } - TLayoutGeometry getOutputPrimitive() const { return ElgNone; } - bool getPostDepthCoverage() const { return false; } - bool getEarlyFragmentTests() const { return false; } - TLayoutDepth getDepth() const { return EldNone; } - bool getPixelCenterInteger() const { return false; } - void setOriginUpperLeft() { } - bool getOriginUpperLeft() const { return true; } - TInterlockOrdering getInterlockOrdering() const { return EioNone; } - - bool getAutoMapBindings() const { return false; } - bool getAutoMapLocations() const { return false; } - int getNumPushConstants() const { return 0; } - void addShaderRecordCount() { } - void addTaskNVCount() { } - void setUseVulkanMemoryModel() { } - bool usingVulkanMemoryModel() const { return false; } - bool usingPhysicalStorageBuffer() const { return false; } - bool usingVariablePointers() const { return false; } - unsigned getXfbStride(int buffer) const { return 0; } - bool hasLayoutDerivativeModeNone() const { return false; } - ComputeDerivativeMode getLayoutDerivativeModeNone() const { return LayoutDerivativeNone; } -#else void output(TInfoSink&, bool tree); bool isEsProfile() const { return profile == EEsProfile; } @@ -723,11 +732,75 @@ class TIntermediate { usePhysicalStorageBuffer = true; } bool usingPhysicalStorageBuffer() const { return usePhysicalStorageBuffer; } + void setReplicatedComposites() + { + useReplicatedComposites = true; + } + bool usingReplicatedComposites() const { return useReplicatedComposites; } void setUseVariablePointers() { useVariablePointers = true; processes.addProcess("use-variable-pointers"); } + // Set the global flag for bindless texture + void setBindlessTextureMode(const TString& currentCaller, AstRefType type) + { + // When type is not func, currentCaller should be "" (empty string) + bindlessTextureModeCaller[currentCaller] = type; + } + + // Get the global flag for bindless texture + bool getBindlessTextureMode() const + { + return (bindlessTextureModeCaller.size() > 0); + } + + // Set the global flag for bindless image + void setBindlessImageMode(const TString& currentCaller, AstRefType type) + { + // When type is not func, currentCaller should be "" (empty string) + bindlessImageModeCaller[currentCaller] = type; + } + + // Get the global flag for bindless image + bool getBindlessImageMode() const + { + return (bindlessImageModeCaller.size() > 0); + } + + // Get the global flag for bindless texture + bool resetTopLevelUncalledStatus(const TString& deadCaller) + { + // For reflection collection purpose, currently uniform layout setting and some + // flags introduced by variables (IO, global, etc,.) won't be reset here. + // Remove each global status (AST top level) introduced by uncalled functions. + // If a status is set by several functions, keep those which in call graph. + bool result = false; + + // For two types of bindless mode flag, we would only reset which is set by an uncalled function. + // If one status flag's key in caller vec is empty, it should be come from a non-function setting. + if (!bindlessTextureModeCaller.empty()) { + auto caller = bindlessTextureModeCaller.find(deadCaller); + if (caller != bindlessTextureModeCaller.end() && bindlessTextureModeCaller[deadCaller] == AstRefTypeFunc) { + bindlessTextureModeCaller.erase(caller); + result = true; + } + } + if (!bindlessImageModeCaller.empty()) { + auto caller = bindlessImageModeCaller.find(deadCaller); + if (caller != bindlessImageModeCaller.end() && bindlessImageModeCaller[deadCaller] == AstRefTypeFunc) { + bindlessImageModeCaller.erase(caller); + result = true; + } + } + return result; + } + + bool getBindlessMode() const + { + return getBindlessTextureMode() || getBindlessImageMode(); + } + bool usingVariablePointers() const { return useVariablePointers; } #ifdef ENABLE_HLSL @@ -743,6 +816,7 @@ class TIntermediate { int getNumPushConstants() const { return numPushConstants; } void addShaderRecordCount() { ++numShaderRecordBlocks; } void addTaskNVCount() { ++numTaskNVBlocks; } + void addTaskPayloadEXTCount() { ++numTaskEXTPayloads; } bool setInvocations(int i) { @@ -798,6 +872,10 @@ class TIntermediate { void setXfbMode() { xfbMode = true; } bool getXfbMode() const { return xfbMode; } + void setQuadDerivMode(bool mode = true) { quadDerivMode = mode; } + bool getQuadDerivMode() const { return quadDerivMode; } + void setReqFullQuadsMode(bool mode = true) { reqFullQuadsMode = mode; } + bool getReqFullQuadsMode() const { return reqFullQuadsMode; } void setMultiStream() { multiStream = true; } bool isMultiStream() const { return multiStream; } bool setOutputPrimitive(TLayoutGeometry p) @@ -808,10 +886,18 @@ class TIntermediate { return true; } TLayoutGeometry getOutputPrimitive() const { return outputPrimitive; } + void setNonCoherentColorAttachmentReadEXT() { nonCoherentColorAttachmentReadEXT = true; } + bool getNonCoherentColorAttachmentReadEXT() const { return nonCoherentColorAttachmentReadEXT; } + void setNonCoherentDepthAttachmentReadEXT() { nonCoherentDepthAttachmentReadEXT = true; } + bool getNonCoherentDepthAttachmentReadEXT() const { return nonCoherentDepthAttachmentReadEXT; } + void setNonCoherentStencilAttachmentReadEXT() { nonCoherentStencilAttachmentReadEXT = true; } + bool getNonCoherentStencilAttachmentReadEXT() const { return nonCoherentStencilAttachmentReadEXT; } void setPostDepthCoverage() { postDepthCoverage = true; } bool getPostDepthCoverage() const { return postDepthCoverage; } void setEarlyFragmentTests() { earlyFragmentTests = true; } + void setEarlyAndLateFragmentTestsAMD() { earlyAndLateFragmentTestsAMD = true; } bool getEarlyFragmentTests() const { return earlyFragmentTests; } + bool getEarlyAndLateFragmentTestsAMD() const { return earlyAndLateFragmentTestsAMD; } bool setDepth(TLayoutDepth d) { if (depthLayout != EldNone) @@ -819,11 +905,21 @@ class TIntermediate { depthLayout = d; return true; } + bool setStencil(TLayoutStencil s) + { + if (stencilLayout != ElsNone) + return stencilLayout == s; + stencilLayout = s; + return true; + } TLayoutDepth getDepth() const { return depthLayout; } + TLayoutStencil getStencil() const { return stencilLayout; } void setOriginUpperLeft() { originUpperLeft = true; } bool getOriginUpperLeft() const { return originUpperLeft; } void setPixelCenterInteger() { pixelCenterInteger = true; } 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) @@ -886,6 +982,9 @@ class TIntermediate { void setSubgroupUniformControlFlow() { subgroupUniformControlFlow = true; } bool getSubgroupUniformControlFlow() const { return subgroupUniformControlFlow; } + void setMaximallyReconverges() { maximallyReconverges = true; } + bool getMaximallyReconverges() const { return maximallyReconverges; } + // GL_EXT_spirv_intrinsics void insertSpirvRequirement(const TSpirvRequirement* spirvReq); bool hasSpirvRequirement() const { return spirvRequirement != nullptr; } @@ -894,7 +993,6 @@ class TIntermediate { void insertSpirvExecutionModeId(int executionMode, const TIntermAggregate* args); bool hasSpirvExecutionMode() const { return spirvExecutionMode != nullptr; } const TSpirvExecutionMode& getSpirvExecutionMode() const { return *spirvExecutionMode; } -#endif // GLSLANG_WEB void addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) { @@ -965,6 +1063,7 @@ class TIntermediate { int checkLocationRT(int set, int location); int addUsedOffsets(int binding, int offset, int numOffsets); bool addUsedConstantId(int id); + GLSLANG_EXPORT_FOR_TESTS static int computeTypeLocationSize(const TType&, EShLanguage); static int computeTypeUniformLocationSize(const TType&); @@ -972,7 +1071,7 @@ class TIntermediate { static int getBaseAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor); static int getScalarAlignment(const TType&, int& size, int& stride, bool rowMajor); static int getMemberAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor); - static bool improperStraddle(const TType& type, int size, int offset); + static bool improperStraddle(const TType& type, int size, int offset, bool vectorLike); static void updateOffset(const TType& parentType, const TType& memberType, int& offset, int& memberSize); static int getOffset(const TType& type, int index); static int getBlockSize(const TType& blockType); @@ -1001,12 +1100,6 @@ class TIntermediate { void setUniqueId(unsigned long long id) { uniqueId = id; } // Certain explicit conversions are allowed conditionally -#ifdef GLSLANG_WEB - bool getArithemeticInt8Enabled() const { return false; } - bool getArithemeticInt16Enabled() const { return false; } - bool getArithemeticFloat16Enabled() const { return false; } - void updateNumericFeature(TNumericFeatures::feature f, bool on) { } -#else bool getArithemeticInt8Enabled() const { return numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int8); @@ -1024,12 +1117,11 @@ class TIntermediate { } void updateNumericFeature(TNumericFeatures::feature f, bool on) { on ? numericFeatures.insert(f) : numericFeatures.erase(f); } -#endif 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&); @@ -1066,13 +1158,8 @@ class TIntermediate { typedef std::list TGraph; TGraph callGraph; -#ifdef GLSLANG_ANGLE - const EProfile profile = ECoreProfile; - const int version = 450; -#else EProfile profile; // source profile int version; // source version -#endif SpvVersion spvVersion; TIntermNode* treeRoot; std::set requestedExtensions; // cumulation of all enabled or required extensions; not connected to what subset of the shader used them @@ -1083,10 +1170,13 @@ class TIntermediate { bool recursive; bool invertY; bool dxPositionW; + bool enhancedMsgs; + bool debugInfo; bool useStorageBuffer; bool invariantAll; bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN bool depthReplacing; + bool stencilReplacing; int localSize[3]; bool localSizeNotDefault[3]; int localSizeSpecId[3]; @@ -1098,7 +1188,6 @@ class TIntermediate { unsigned int globalUniformBlockBinding; unsigned int atomicCounterBlockSet; -#ifndef GLSLANG_WEB public: const char* const implicitThisName; const char* const implicitCounterName; @@ -1111,13 +1200,19 @@ class TIntermediate { TLayoutGeometry outputPrimitive; bool pixelCenterInteger; bool originUpperLeft; + bool texCoordBuiltinRedeclared; TVertexSpacing vertexSpacing; TVertexOrder vertexOrder; TInterlockOrdering interlockOrdering; bool pointMode; bool earlyFragmentTests; bool postDepthCoverage; + bool earlyAndLateFragmentTestsAMD; + bool nonCoherentColorAttachmentReadEXT; + bool nonCoherentDepthAttachmentReadEXT; + bool nonCoherentStencilAttachmentReadEXT; TLayoutDepth depthLayout; + TLayoutStencil stencilLayout; bool hlslFunctionality1; int blendEquations; // an 'or'ing of masks of shifts of TBlendEquationShift bool xfbMode; @@ -1130,6 +1225,7 @@ class TIntermediate { int primitives; int numTaskNVBlocks; bool layoutPrimitiveCulling; + int numTaskEXTPayloads; // Base shift values std::array shiftBinding; @@ -1153,24 +1249,30 @@ class TIntermediate { bool needToLegalize; bool binaryDoubleOutput; bool subgroupUniformControlFlow; + bool maximallyReconverges; bool usePhysicalStorageBuffer; + bool useReplicatedComposites { false }; TSpirvRequirement* spirvRequirement; TSpirvExecutionMode* spirvExecutionMode; - + std::map bindlessTextureModeCaller; + std::map bindlessImageModeCaller; std::unordered_map uniformLocationOverrides; int uniformLocationBase; + bool quadDerivMode; + bool reqFullQuadsMode; TNumericFeatures numericFeatures; -#endif std::unordered_map blockBackingOverrides; std::unordered_set usedConstantId; // specialization constant ids used std::vector usedAtomics; // sets of bindings used by atomic counters - std::vector usedIo[4]; // sets of used locations, one for each of in, out, uniform, and buffers - std::vector usedIoRT[2]; // sets of used location, one for rayPayload/rayPayloadIN and other - // for callableData/callableDataIn + std::vector usedIo[5]; // sets of used locations, one for each of in, out, uniform, and buffers + std::vector usedIoRT[4]; // sets of used location, one for rayPayload/rayPayloadIN, + // one for callableData/callableDataIn, one for hitObjectAttributeNV and + // one for shaderrecordhitobjectNV // set of names of statically read/written I/O that might need extra checking std::set ioAccessed; + // source code of shader, useful as part of debug information std::string sourceFile; std::string sourceText; diff --git a/glslang/MachineIndependent/parseConst.cpp b/glslang/MachineIndependent/parseConst.cpp index 6c182991f5..835097234e 100644 --- a/glslang/MachineIndependent/parseConst.cpp +++ b/glslang/MachineIndependent/parseConst.cpp @@ -198,7 +198,7 @@ void TConstTraverser::visitConstantUnion(TIntermConstantUnion* node) bool TIntermediate::parseConstTree(TIntermNode* root, TConstUnionArray unionArray, TOperator constructorType, const TType& t, bool singleConstantParam) { - if (root == 0) + if (root == nullptr) return false; TConstTraverser it(unionArray, singleConstantParam, constructorType, t); diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h index 7248354e4b..5c77e42ce3 100644 --- a/glslang/MachineIndependent/parseVersions.h +++ b/glslang/MachineIndependent/parseVersions.h @@ -58,72 +58,18 @@ class TParseVersions { const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, bool forwardCompatible, EShMessages messages) : -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) forwardCompatible(forwardCompatible), profile(profile), -#endif infoSink(infoSink), version(version), language(language), spvVersion(spvVersion), - intermediate(interm), messages(messages), numErrors(0), currentScanner(0) { } + intermediate(interm), messages(messages), numErrors(0), currentScanner(nullptr) { } virtual ~TParseVersions() { } void requireStage(const TSourceLoc&, EShLanguageMask, const char* featureDesc); void requireStage(const TSourceLoc&, EShLanguage, const char* featureDesc); -#ifdef GLSLANG_WEB - const EProfile profile = EEsProfile; - bool isEsProfile() const { return true; } - void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc) - { - if (! (EEsProfile & profileMask)) - error(loc, "not supported with this profile:", featureDesc, ProfileName(profile)); - } - void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions, - const char* const extensions[], const char* featureDesc) - { - if ((EEsProfile & profileMask) && (minVersion == 0 || version < minVersion)) - error(loc, "not supported for this version or the enabled extensions", featureDesc, ""); - } - void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, const char* extension, - const char* featureDesc) - { - profileRequires(loc, profileMask, minVersion, extension ? 1 : 0, &extension, featureDesc); - } - void initializeExtensionBehavior() { } - void checkDeprecated(const TSourceLoc&, int queryProfiles, int depVersion, const char* featureDesc) { } - void requireNotRemoved(const TSourceLoc&, int queryProfiles, int removedVersion, const char* featureDesc) { } - void requireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[], - const char* featureDesc) { } - void ppRequireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[], - const char* featureDesc) { } - TExtensionBehavior getExtensionBehavior(const char*) { return EBhMissing; } - bool extensionTurnedOn(const char* const extension) { return false; } - bool extensionsTurnedOn(int numExtensions, const char* const extensions[]) { return false; } - void updateExtensionBehavior(int line, const char* const extension, const char* behavior) { } - void updateExtensionBehavior(const char* const extension, TExtensionBehavior) { } - void checkExtensionStage(const TSourceLoc&, const char* const extension) { } - void extensionRequires(const TSourceLoc&, const char* const extension, const char* behavior) { } - void fullIntegerCheck(const TSourceLoc&, const char* op) { } - void doubleCheck(const TSourceLoc&, const char* op) { } - bool float16Arithmetic() { return false; } - void requireFloat16Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) { } - bool int16Arithmetic() { return false; } - void requireInt16Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) { } - bool int8Arithmetic() { return false; } - void requireInt8Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) { } - void int64Check(const TSourceLoc&, const char* op, bool builtIn = false) { } - void explicitFloat32Check(const TSourceLoc&, const char* op, bool builtIn = false) { } - void explicitFloat64Check(const TSourceLoc&, const char* op, bool builtIn = false) { } - bool relaxedErrors() const { return false; } - bool suppressWarnings() const { return true; } - bool isForwardCompatible() const { return false; } -#else -#ifdef GLSLANG_ANGLE - const bool forwardCompatible = true; - const EProfile profile = ECoreProfile; -#else + bool forwardCompatible; // true if errors are to be given for use of deprecated features EProfile profile; // the declared profile in the shader (core by default) -#endif bool isEsProfile() const { return profile == EEsProfile; } void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc); void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions, @@ -137,6 +83,11 @@ class TParseVersions { const char* featureDesc); virtual void ppRequireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[], const char* featureDesc); + template + constexpr void ppRequireExtensions(const TSourceLoc& loc, Container extensions, const char* featureDesc) { + ppRequireExtensions(loc, static_cast(extensions.size()), extensions.data(), featureDesc); + } + virtual TExtensionBehavior getExtensionBehavior(const char*); virtual bool extensionTurnedOn(const char* const extension); virtual bool extensionsTurnedOn(int numExtensions, const char* const extensions[]); @@ -167,29 +118,19 @@ class TParseVersions { virtual void explicitInt32Check(const TSourceLoc&, const char* op, bool builtIn = false); virtual void explicitFloat32Check(const TSourceLoc&, const char* op, bool builtIn = false); virtual void explicitFloat64Check(const TSourceLoc&, const char* op, bool builtIn = false); - virtual void fcoopmatCheck(const TSourceLoc&, const char* op, bool builtIn = false); - virtual void intcoopmatCheck(const TSourceLoc&, const char *op, bool builtIn = false); + virtual void fcoopmatCheckNV(const TSourceLoc&, const char* op, bool builtIn = false); + virtual void intcoopmatCheckNV(const TSourceLoc&, const char *op, bool builtIn = false); + virtual void coopmatCheck(const TSourceLoc&, const char* op, bool builtIn = false); bool relaxedErrors() const { return (messages & EShMsgRelaxedErrors) != 0; } bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; } bool isForwardCompatible() const { return forwardCompatible; } -#endif // GLSLANG_WEB + virtual void spvRemoved(const TSourceLoc&, const char* op); virtual void vulkanRemoved(const TSourceLoc&, const char* op); virtual void requireVulkan(const TSourceLoc&, const char* op); virtual void requireSpv(const TSourceLoc&, const char* op); virtual void requireSpv(const TSourceLoc&, const char *op, unsigned int version); - -#if defined(GLSLANG_WEB) && !defined(GLSLANG_WEB_DEVEL) - void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken, - const char* szExtraInfoFormat, ...) { addError(); } - void C_DECL warn(const TSourceLoc&, const char* szReason, const char* szToken, - const char* szExtraInfoFormat, ...) { } - void C_DECL ppError(const TSourceLoc&, const char* szReason, const char* szToken, - const char* szExtraInfoFormat, ...) { addError(); } - void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken, - const char* szExtraInfoFormat, ...) { } -#else virtual void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken, const char* szExtraInfoFormat, ...) = 0; virtual void C_DECL warn(const TSourceLoc&, const char* szReason, const char* szToken, @@ -198,7 +139,6 @@ class TParseVersions { const char* szExtraInfoFormat, ...) = 0; virtual void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken, const char* szExtraInfoFormat, ...) = 0; -#endif void addError() { ++numErrors; } int getNumErrors() const { return numErrors; } @@ -231,6 +171,7 @@ class TParseVersions { protected: TMap extensionBehavior; // for each extension string, what its current behavior is TMap extensionMinSpv; // for each extension string, store minimum spirv required + TVector spvUnsupportedExt; // for extensions reserved for spv usage. EShMessages messages; // errors/warnings/rule-sets int numErrors; // number of compile-time errors encountered TInputScanner* currentScanner; diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp index aa1e0d7451..5b44b1304e 100644 --- a/glslang/MachineIndependent/preprocessor/Pp.cpp +++ b/glslang/MachineIndependent/preprocessor/Pp.cpp @@ -241,6 +241,7 @@ int TPpContext::CPPundef(TPpToken* ppToken) */ int TPpContext::CPPelse(int matchelse, TPpToken* ppToken) { + inElseSkip = true; int depth = 0; int token = scanToken(ppToken); @@ -297,7 +298,7 @@ int TPpContext::CPPelse(int matchelse, TPpToken* ppToken) elseSeen[elsetracker] = false; --elsetracker; } - + inElseSkip = false; return CPPif(ppToken); } } else if (nextAtom == PpAtomElse) { @@ -311,7 +312,8 @@ int TPpContext::CPPelse(int matchelse, TPpToken* ppToken) parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", ""); } } - + + inElseSkip = false; return token; } @@ -374,12 +376,10 @@ namespace { int op_div(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a / b; } int op_mod(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a % b; } int op_pos(int a) { return a; } - int op_neg(int a) { return -a; } + int op_neg(int a) { return a == INT_MIN ? INT_MIN : -a; } int op_cmpl(int a) { return ~a; } int op_not(int a) { return !a; } -}; - struct TBinop { int token, precedence, (*op)(int, int); } binop[] = { @@ -412,6 +412,8 @@ struct TUnop { { '!', op_not }, }; +} // anonymous namespace + #define NUM_ELEMENTS(A) (sizeof(A) / sizeof(A[0])) int TPpContext::eval(int token, int precedence, bool shortCircuit, int& res, bool& err, TPpToken* ppToken) @@ -736,7 +738,6 @@ int TPpContext::CPPline(TPpToken* ppToken) parseContext.setCurrentLine(lineRes); if (token != '\n') { -#ifndef GLSLANG_WEB if (token == PpAtomConstString) { parseContext.ppRequireExtensions(directiveLoc, 1, &E_GL_GOOGLE_cpp_style_line_directive, "filename-based #line"); // We need to save a copy of the string instead of pointing @@ -746,9 +747,7 @@ int TPpContext::CPPline(TPpToken* ppToken) parseContext.setCurrentSourceName(sourceName); hasFile = true; token = scanToken(ppToken); - } else -#endif - { + } else { token = eval(token, MIN_PRECEDENCE, false, fileRes, fileErr, ppToken); if (! fileErr) { parseContext.setCurrentString(fileRes); @@ -974,17 +973,16 @@ int TPpContext::readCPPline(TPpToken* ppToken) case PpAtomLine: token = CPPline(ppToken); break; -#ifndef GLSLANG_WEB case PpAtomInclude: if(!parseContext.isReadingHLSL()) { - parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_include_directive, "#include"); + const std::array exts = { E_GL_GOOGLE_include_directive, E_GL_ARB_shading_language_include }; + parseContext.ppRequireExtensions(ppToken->loc, exts, "#include"); } token = CPPinclude(ppToken); break; case PpAtomPragma: token = CPPpragma(ppToken); break; -#endif case PpAtomUndef: token = CPPundef(ppToken); break; @@ -1126,9 +1124,6 @@ int TPpContext::tMacroInput::scan(TPpToken* ppToken) pasting = true; } - // HLSL does expand macros before concatenation - if (pasting && pp->parseContext.isReadingHLSL()) - pasting = false; // TODO: preprocessor: properly handle whitespace (or lack of it) between tokens when expanding if (token == PpAtomIdentifier) { @@ -1138,9 +1133,12 @@ int TPpContext::tMacroInput::scan(TPpToken* ppToken) break; if (i >= 0) { TokenStream* arg = expandedArgs[i]; - if (arg == nullptr || pasting) + bool expanded = !!arg && !pasting; + // HLSL does expand macros before concatenation + if (arg == nullptr || (pasting && !pp->parseContext.isReadingHLSL()) ) { arg = args[i]; - pp->pushTokenStreamInput(*arg, prepaste); + } + pp->pushTokenStreamInput(*arg, prepaste, expanded); return pp->scanToken(ppToken); } @@ -1183,6 +1181,9 @@ MacroExpandResult TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, b { ppToken->space = false; int macroAtom = atomStrings.getAtom(ppToken->name); + if (ppToken->fullyExpanded) + return MacroExpandNotStarted; + switch (macroAtom) { case PpAtomLineMacro: // Arguments which are macro have been replaced in the first stage. @@ -1214,8 +1215,10 @@ MacroExpandResult TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, b MacroSymbol* macro = macroAtom == 0 ? nullptr : lookupMacroDef(macroAtom); // no recursive expansions - if (macro != nullptr && macro->busy) + if (macro != nullptr && macro->busy) { + ppToken->fullyExpanded = true; return MacroExpandNotStarted; + } // not expanding undefined macros if ((macro == nullptr || macro->undef) && ! expandUndef) diff --git a/glslang/MachineIndependent/preprocessor/PpContext.cpp b/glslang/MachineIndependent/preprocessor/PpContext.cpp index 1363ce2be0..f27204bc4a 100644 --- a/glslang/MachineIndependent/preprocessor/PpContext.cpp +++ b/glslang/MachineIndependent/preprocessor/PpContext.cpp @@ -85,10 +85,11 @@ NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace glslang { TPpContext::TPpContext(TParseContextBase& pc, const std::string& rootFileName, TShader::Includer& inclr) : - preamble(0), strings(0), previous_token('\n'), parseContext(pc), includer(inclr), inComment(false), + preamble(nullptr), strings(nullptr), previous_token('\n'), parseContext(pc), includer(inclr), inComment(false), rootFileName(rootFileName), currentSourceFile(rootFileName), - disableEscapeSequences(false) + disableEscapeSequences(false), + inElseSkip(false) { ifdepth = 0; for (elsetracker = 0; elsetracker < maxIfNesting; elsetracker++) diff --git a/glslang/MachineIndependent/preprocessor/PpContext.h b/glslang/MachineIndependent/preprocessor/PpContext.h index 714b5eadba..3446f1e1c9 100644 --- a/glslang/MachineIndependent/preprocessor/PpContext.h +++ b/glslang/MachineIndependent/preprocessor/PpContext.h @@ -86,11 +86,6 @@ NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "../ParseHelper.h" #include "PpTokens.h" -/* windows only pragma */ -#ifdef _MSC_VER - #pragma warning(disable : 4127) -#endif - namespace glslang { class TPpToken { @@ -102,6 +97,7 @@ class TPpToken { i64val = 0; loc.init(); name[0] = 0; + fullyExpanded = false; } // Used for comparing macro definitions, so checks what is relevant for that. @@ -117,6 +113,8 @@ class TPpToken { // True if a space (for white space or a removed comment) should also be // recognized, in front of the token returned: bool space; + + bool fullyExpanded; // Numeric value of the token: union { int ival; @@ -217,6 +215,7 @@ class TPpContext { virtual bool peekContinuedPasting(int) { return false; } // true when non-spaced tokens can paste virtual bool endOfReplacementList() { return false; } // true when at the end of a macro replacement list (RHS of #define) virtual bool isMacroInput() { return false; } + virtual bool isStringInput() { return false; } // Will be called when we start reading tokens from this instance virtual void notifyActivated() {} @@ -357,7 +356,8 @@ class TPpContext { // Scanner data: int previous_token; TParseContextBase& parseContext; - + std::vector lastLineTokens; + std::vector lastLineTokenLocs; // Get the next token from *stack* of input sources, popping input sources // that are out of tokens, down until an input source is found that has a token. // Return EndOfInput when there are no more tokens to be found by doing this. @@ -371,7 +371,31 @@ class TPpContext { break; popInput(); } - + if (!inputStack.empty() && inputStack.back()->isStringInput() && !inElseSkip) { + if (token == '\n') { + bool seenNumSign = false; + for (int i = 0; i < (int)lastLineTokens.size() - 1;) { + int curPos = i; + int curToken = lastLineTokens[i++]; + if (curToken == '#' && lastLineTokens[i] == '#') { + curToken = PpAtomPaste; + i++; + } + if (curToken == '#') { + if (seenNumSign) { + parseContext.ppError(lastLineTokenLocs[curPos], "(#) can be preceded in its line only by spaces or horizontal tabs", "#", ""); + } else { + seenNumSign = true; + } + } + } + lastLineTokens.clear(); + lastLineTokenLocs.clear(); + } else { + lastLineTokens.push_back(token); + lastLineTokenLocs.push_back(ppToken->loc); + } + } return token; } int getChar() { return inputStack.back()->getch(); } @@ -475,16 +499,27 @@ class TPpContext { // // From PpTokens.cpp // - void pushTokenStreamInput(TokenStream&, bool pasting = false); + void pushTokenStreamInput(TokenStream&, bool pasting = false, bool expanded = false); void UngetToken(int token, TPpToken*); class tTokenInput : public tInput { public: - tTokenInput(TPpContext* pp, TokenStream* t, bool prepasting) : + tTokenInput(TPpContext* pp, TokenStream* t, bool prepasting, bool expanded) : tInput(pp), tokens(t), - lastTokenPastes(prepasting) { } - virtual int scan(TPpToken *ppToken) override { return tokens->getToken(pp->parseContext, ppToken); } + lastTokenPastes(prepasting), + preExpanded(expanded) { } + virtual int scan(TPpToken *ppToken) override { + int token = tokens->getToken(pp->parseContext, ppToken); + ppToken->fullyExpanded = preExpanded; + if (tokens->atEnd() && token == PpAtomIdentifier) { + int macroAtom = pp->atomStrings.getAtom(ppToken->name); + MacroSymbol* macro = macroAtom == 0 ? nullptr : pp->lookupMacroDef(macroAtom); + if (macro && macro->functionLike) + ppToken->fullyExpanded = false; + } + return token; + } virtual int getch() override { assert(0); return EndOfInput; } virtual void ungetch() override { assert(0); } virtual bool peekPasting() override { return tokens->peekTokenizedPasting(lastTokenPastes); } @@ -492,6 +527,7 @@ class TPpContext { protected: TokenStream* tokens; bool lastTokenPastes; // true if the last token in the input is to be pasted, rather than consumed as a token + bool preExpanded; }; class tUngotTokenInput : public tInput { @@ -512,7 +548,7 @@ class TPpContext { public: tStringInput(TPpContext* pp, TInputScanner& i) : tInput(pp), input(&i) { } virtual int scan(TPpToken*) override; - + bool isStringInput() override { return true; } // Scanner used to get source stream characters. // - Escaped newlines are handled here, invisibly to the caller. // - All forms of newline are handled, and turned into just a '\n'. @@ -696,6 +732,9 @@ class TPpContext { std::istringstream strtodStream; bool disableEscapeSequences; + // True if we're skipping a section enclosed by #if/#ifdef/#elif/#else which was evaluated to + // be inactive, e.g. #if 0 + bool inElseSkip; }; } // end namespace glslang diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp index ad11792002..49dafa59a7 100644 --- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -3,6 +3,7 @@ // Copyright (C) 2013 LunarG, Inc. // Copyright (C) 2017 ARM Limited. // Copyright (C) 2015-2018 Google, Inc. +// Copyright (c) 2023, Mobica Limited // // All rights reserved. // @@ -219,7 +220,9 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) } if (ch >= '0' && ch <= '9') { while (ch >= '0' && ch <= '9') { - exponent = exponent * 10 + (ch - '0'); + if (exponent < 500) { + exponent = exponent * 10 + (ch - '0'); + } saveName(ch); ch = getChar(); } @@ -259,7 +262,6 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) // Suffix: bool isDouble = false; bool isFloat16 = false; -#ifndef GLSLANG_WEB if (ch == 'l' || ch == 'L') { if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl) parseContext.doubleCheck(ppToken->loc, "double floating-point suffix"); @@ -299,14 +301,11 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) isFloat16 = true; } } else -#endif if (ch == 'f' || ch == 'F') { -#ifndef GLSLANG_WEB if (ifdepth == 0) parseContext.profileRequires(ppToken->loc, EEsProfile, 300, nullptr, "floating-point suffix"); if (ifdepth == 0 && !parseContext.relaxedErrors()) parseContext.profileRequires(ppToken->loc, ~EEsProfile, 120, nullptr, "floating-point suffix"); -#endif if (ifdepth == 0 && !hasDecimalOrExponent) parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", ""); saveName(ch); @@ -480,9 +479,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) E_GL_EXT_shader_explicit_arithmetic_types_int16 }; static const int Num_Int16_Extensions = sizeof(Int16_Extensions) / sizeof(Int16_Extensions[0]); - ppToken->ival = 0; - ppToken->i64val = 0; - ppToken->space = false; + ppToken->clear(); ch = getch(); for (;;) { while (ch == ' ' || ch == '\t') { @@ -551,7 +548,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) ival = 0; do { - if (len < MaxTokenLength && ival <= 0x0fffffffffffffffull) { + if (len < MaxTokenLength && ival <= 0x7fffffffffffffffull) { ppToken->name[len++] = (char)ch; if (ch >= '0' && ch <= '9') { ii = ch - '0'; @@ -584,7 +581,6 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) ppToken->name[len++] = (char)ch; isUnsigned = true; -#ifndef GLSLANG_WEB int nextCh = getch(); if (nextCh == 'l' || nextCh == 'L') { if (len < MaxTokenLength) @@ -610,7 +606,6 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) if (len < MaxTokenLength) ppToken->name[len++] = (char)ch; isInt16 = true; -#endif } else ungetch(); ppToken->name[len] = '\0'; @@ -641,6 +636,108 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) ppToken->ival = (int)ival; return isUnsigned ? PpAtomConstUint : PpAtomConstInt; } + } else if ((ch == 'b' || ch == 'B') && pp->parseContext.intermediate.getSource() == EShSourceHlsl) { + // must be binary + bool isUnsigned = false; + bool isInt64 = false; + bool isInt16 = false; + ppToken->name[len++] = (char)ch; + ch = getch(); + + // Check value + if ((ch == '0' || ch == '1')) + { + ival = 0; + do { + if (len < MaxTokenLength && ival <= 0x7fffffffffffffffull) { + ppToken->name[len++] = (char)ch; + if (ch == '0' || ch == '1') { + ii = ch - '0'; + } else { + pp->parseContext.ppError(ppToken->loc, "bad digit in binary literal", "", ""); + } + ival = (ival << 1) | ii; + } + else + { + if (! AlreadyComplained) { + if(len < MaxTokenLength) + pp->parseContext.ppError(ppToken->loc, "binary literal too big", "", ""); + else + pp->parseContext.ppError(ppToken->loc, "binary literal too long", "", ""); + AlreadyComplained = 1; + } + ival = 0xffffffffffffffffull; + } + ch = getch(); + } while (ch == '0' || ch == '1'); + } + else + { + pp->parseContext.ppError(ppToken->loc, "bad digit in binary literal", "", ""); + } + + // check type + if (ch == 'u' || ch == 'U') { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + isUnsigned = true; + + int nextCh = getch(); + if (nextCh == 'l' || nextCh == 'L') { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)nextCh; + isInt64 = true; + } else + ungetch(); + + nextCh = getch(); + if ((nextCh == 's' || nextCh == 'S') && + pp->parseContext.intermediate.getSource() == EShSourceGlsl) { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)nextCh; + isInt16 = true; + } else + ungetch(); + } else if (ch == 'l' || ch == 'L') { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + isInt64 = true; + } else if ((ch == 's' || ch == 'S') && + pp->parseContext.intermediate.getSource() == EShSourceGlsl) { + if (len < MaxTokenLength) + ppToken->name[len++] = (char)ch; + isInt16 = true; + } else { + ungetch(); + } + ppToken->name[len] = '\0'; + + // Assign value + if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) { + if (pp->ifdepth == 0) { + pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, + "64-bit binary literal"); + pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, + Num_Int64_Extensions, Int64_Extensions, "64-bit binary literal"); + } + ppToken->i64val = ival; + return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64; + } else if (isInt16) { + if (pp->ifdepth == 0) { + if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) { + pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, + "16-bit binary literal"); + pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, + Num_Int16_Extensions, Int16_Extensions, "16-bit binary literal"); + } + } + ppToken->ival = (int)ival; + return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16; + } else { + ppToken->ival = (int)ival; + return isUnsigned ? PpAtomConstUint : PpAtomConstInt; + } } else { // could be octal integer or floating point, speculative pursue octal until it must be floating point @@ -692,7 +789,6 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) ppToken->name[len++] = (char)ch; isUnsigned = true; -#ifndef GLSLANG_WEB int nextCh = getch(); if (nextCh == 'l' || nextCh == 'L') { if (len < MaxTokenLength) @@ -718,7 +814,6 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) if (len < MaxTokenLength) ppToken->name[len++] = (char)ch; isInt16 = true; -#endif } else ungetch(); ppToken->name[len] = '\0'; @@ -781,7 +876,6 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) ppToken->name[len++] = (char)ch; isUnsigned = true; -#ifndef GLSLANG_WEB int nextCh = getch(); if (nextCh == 'l' || nextCh == 'L') { if (len < MaxTokenLength) @@ -807,7 +901,6 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) if (len < MaxTokenLength) ppToken->name[len++] = (char)ch; isInt16 = true; -#endif } else ungetch(); diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp index 7ed58703f2..e6ee64cf9e 100644 --- a/glslang/MachineIndependent/preprocessor/PpTokens.cpp +++ b/glslang/MachineIndependent/preprocessor/PpTokens.cpp @@ -85,9 +85,6 @@ NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif -#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) -#define snprintf sprintf_s -#endif #include #include @@ -116,17 +113,15 @@ int TPpContext::TokenStream::getToken(TParseContextBase& parseContext, TPpToken int atom = stream[currentPos++].get(*ppToken); ppToken->loc = parseContext.getCurrentLoc(); -#ifndef GLSLANG_WEB // Check for ##, unless the current # is the last character if (atom == '#') { if (peekToken('#')) { parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)"); - parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, 0, "token pasting (##)"); + parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, nullptr, "token pasting (##)"); currentPos++; atom = PpAtomPaste; } } -#endif return atom; } @@ -195,9 +190,9 @@ bool TPpContext::TokenStream::peekUntokenizedPasting() return pasting; } -void TPpContext::pushTokenStreamInput(TokenStream& ts, bool prepasting) +void TPpContext::pushTokenStreamInput(TokenStream& ts, bool prepasting, bool expanded) { - pushInput(new tTokenInput(this, &ts, prepasting)); + pushInput(new tTokenInput(this, &ts, prepasting, expanded)); ts.reset(); } diff --git a/glslang/MachineIndependent/propagateNoContraction.cpp b/glslang/MachineIndependent/propagateNoContraction.cpp index 9def592baf..7b5cd03fa6 100644 --- a/glslang/MachineIndependent/propagateNoContraction.cpp +++ b/glslang/MachineIndependent/propagateNoContraction.cpp @@ -37,8 +37,6 @@ // propagate the 'noContraction' qualifier. // -#ifndef GLSLANG_WEB - #include "propagateNoContraction.h" #include @@ -423,7 +421,7 @@ getSymbolToDefinitionMappingAndPreciseSymbolIDs(const glslang::TIntermediate& in ReturnBranchNodeSet()); TIntermNode* root = intermediate.getTreeRoot(); - if (root == 0) + if (root == nullptr) return result_tuple; NodeMapping& symbol_definition_mapping = std::get<0>(result_tuple); @@ -865,6 +863,4 @@ void PropagateNoContraction(const glslang::TIntermediate& intermediate) precise_object_accesschains.erase(precise_object_accesschain); } } -}; - -#endif // GLSLANG_WEB +} diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp index 9ea48c452d..7e3160929c 100644 --- a/glslang/MachineIndependent/reflection.cpp +++ b/glslang/MachineIndependent/reflection.cpp @@ -33,8 +33,6 @@ // POSSIBILITY OF SUCH DAMAGE. // -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - #include "../Include/Common.h" #include "reflection.h" #include "LiveTraverser.h" @@ -682,7 +680,7 @@ class TReflectionTraverser : public TIntermTraverser { } // For a binary operation indexing into an aggregate, chase down the base of the aggregate. - // Return 0 if the topology does not fit this situation. + // Return nullptr if the topology does not fit this situation. TIntermSymbol* findBase(const TIntermBinary* node) { TIntermSymbol *base = node->getLeft()->getAsSymbolNode(); @@ -706,69 +704,73 @@ class TReflectionTraverser : public TIntermTraverser { case EbtFloat: switch ((int)sampler.dim) { case Esd1D: - switch ((int)sampler.shadow) { - case false: return sampler.arrayed ? GL_SAMPLER_1D_ARRAY : GL_SAMPLER_1D; - case true: return sampler.arrayed ? GL_SAMPLER_1D_ARRAY_SHADOW : GL_SAMPLER_1D_SHADOW; - } + if (sampler.shadow) + return sampler.arrayed ? GL_SAMPLER_1D_ARRAY_SHADOW : GL_SAMPLER_1D_SHADOW; + else + return sampler.arrayed ? GL_SAMPLER_1D_ARRAY : GL_SAMPLER_1D; case Esd2D: - switch ((int)sampler.ms) { - case false: - switch ((int)sampler.shadow) { - case false: return sampler.arrayed ? GL_SAMPLER_2D_ARRAY : GL_SAMPLER_2D; - case true: return sampler.arrayed ? GL_SAMPLER_2D_ARRAY_SHADOW : GL_SAMPLER_2D_SHADOW; - } - case true: return sampler.arrayed ? GL_SAMPLER_2D_MULTISAMPLE_ARRAY : GL_SAMPLER_2D_MULTISAMPLE; + if (sampler.ms) { + return sampler.arrayed ? GL_SAMPLER_2D_MULTISAMPLE_ARRAY : GL_SAMPLER_2D_MULTISAMPLE; + } else { + if (sampler.shadow) + return sampler.arrayed ? GL_SAMPLER_2D_ARRAY_SHADOW : GL_SAMPLER_2D_SHADOW; + else + return sampler.arrayed ? GL_SAMPLER_2D_ARRAY : GL_SAMPLER_2D; } case Esd3D: return GL_SAMPLER_3D; case EsdCube: - switch ((int)sampler.shadow) { - case false: return sampler.arrayed ? GL_SAMPLER_CUBE_MAP_ARRAY : GL_SAMPLER_CUBE; - case true: return sampler.arrayed ? GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW : GL_SAMPLER_CUBE_SHADOW; - } + if (sampler.shadow) + return sampler.arrayed ? GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW : GL_SAMPLER_CUBE_SHADOW; + else + return sampler.arrayed ? GL_SAMPLER_CUBE_MAP_ARRAY : GL_SAMPLER_CUBE; case EsdRect: return sampler.shadow ? GL_SAMPLER_2D_RECT_SHADOW : GL_SAMPLER_2D_RECT; case EsdBuffer: return GL_SAMPLER_BUFFER; + default: + return 0; } case EbtFloat16: switch ((int)sampler.dim) { case Esd1D: - switch ((int)sampler.shadow) { - case false: return sampler.arrayed ? GL_FLOAT16_SAMPLER_1D_ARRAY_AMD : GL_FLOAT16_SAMPLER_1D_AMD; - case true: return sampler.arrayed ? GL_FLOAT16_SAMPLER_1D_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_1D_SHADOW_AMD; - } + if (sampler.shadow) + return sampler.arrayed ? GL_FLOAT16_SAMPLER_1D_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_1D_SHADOW_AMD; + else + return sampler.arrayed ? GL_FLOAT16_SAMPLER_1D_ARRAY_AMD : GL_FLOAT16_SAMPLER_1D_AMD; case Esd2D: - switch ((int)sampler.ms) { - case false: - switch ((int)sampler.shadow) { - case false: return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_ARRAY_AMD : GL_FLOAT16_SAMPLER_2D_AMD; - case true: return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_2D_SHADOW_AMD; - } - case true: return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_ARRAY_AMD : GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_AMD; + if (sampler.ms) { + return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_ARRAY_AMD : GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_AMD; + } else { + if (sampler.shadow) + return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_2D_SHADOW_AMD; + else + return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_ARRAY_AMD : GL_FLOAT16_SAMPLER_2D_AMD; } case Esd3D: return GL_FLOAT16_SAMPLER_3D_AMD; case EsdCube: - switch ((int)sampler.shadow) { - case false: return sampler.arrayed ? GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_AMD : GL_FLOAT16_SAMPLER_CUBE_AMD; - case true: return sampler.arrayed ? GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_CUBE_SHADOW_AMD; - } + if (sampler.shadow) + return sampler.arrayed ? GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_CUBE_SHADOW_AMD; + else + return sampler.arrayed ? GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_AMD : GL_FLOAT16_SAMPLER_CUBE_AMD; case EsdRect: return sampler.shadow ? GL_FLOAT16_SAMPLER_2D_RECT_SHADOW_AMD : GL_FLOAT16_SAMPLER_2D_RECT_AMD; case EsdBuffer: return GL_FLOAT16_SAMPLER_BUFFER_AMD; + default: + return 0; } case EbtInt: switch ((int)sampler.dim) { case Esd1D: return sampler.arrayed ? GL_INT_SAMPLER_1D_ARRAY : GL_INT_SAMPLER_1D; case Esd2D: - switch ((int)sampler.ms) { - case false: return sampler.arrayed ? GL_INT_SAMPLER_2D_ARRAY : GL_INT_SAMPLER_2D; - case true: return sampler.arrayed ? GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY - : GL_INT_SAMPLER_2D_MULTISAMPLE; - } + if (sampler.ms) + return sampler.arrayed ? GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY + : GL_INT_SAMPLER_2D_MULTISAMPLE; + else + return sampler.arrayed ? GL_INT_SAMPLER_2D_ARRAY : GL_INT_SAMPLER_2D; case Esd3D: return GL_INT_SAMPLER_3D; case EsdCube: @@ -777,17 +779,19 @@ class TReflectionTraverser : public TIntermTraverser { return GL_INT_SAMPLER_2D_RECT; case EsdBuffer: return GL_INT_SAMPLER_BUFFER; + default: + return 0; } case EbtUint: switch ((int)sampler.dim) { case Esd1D: return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_1D_ARRAY : GL_UNSIGNED_INT_SAMPLER_1D; case Esd2D: - switch ((int)sampler.ms) { - case false: return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_ARRAY : GL_UNSIGNED_INT_SAMPLER_2D; - case true: return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY - : GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE; - } + if (sampler.ms) + return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY + : GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE; + else + return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_ARRAY : GL_UNSIGNED_INT_SAMPLER_2D; case Esd3D: return GL_UNSIGNED_INT_SAMPLER_3D; case EsdCube: @@ -796,6 +800,8 @@ class TReflectionTraverser : public TIntermTraverser { return GL_UNSIGNED_INT_SAMPLER_2D_RECT; case EsdBuffer: return GL_UNSIGNED_INT_SAMPLER_BUFFER; + default: + return 0; } default: return 0; @@ -808,10 +814,10 @@ class TReflectionTraverser : public TIntermTraverser { case Esd1D: return sampler.arrayed ? GL_IMAGE_1D_ARRAY : GL_IMAGE_1D; case Esd2D: - switch ((int)sampler.ms) { - case false: return sampler.arrayed ? GL_IMAGE_2D_ARRAY : GL_IMAGE_2D; - case true: return sampler.arrayed ? GL_IMAGE_2D_MULTISAMPLE_ARRAY : GL_IMAGE_2D_MULTISAMPLE; - } + if (sampler.ms) + return sampler.arrayed ? GL_IMAGE_2D_MULTISAMPLE_ARRAY : GL_IMAGE_2D_MULTISAMPLE; + else + return sampler.arrayed ? GL_IMAGE_2D_ARRAY : GL_IMAGE_2D; case Esd3D: return GL_IMAGE_3D; case EsdCube: @@ -820,16 +826,18 @@ class TReflectionTraverser : public TIntermTraverser { return GL_IMAGE_2D_RECT; case EsdBuffer: return GL_IMAGE_BUFFER; + default: + return 0; } case EbtFloat16: switch ((int)sampler.dim) { case Esd1D: return sampler.arrayed ? GL_FLOAT16_IMAGE_1D_ARRAY_AMD : GL_FLOAT16_IMAGE_1D_AMD; case Esd2D: - switch ((int)sampler.ms) { - case false: return sampler.arrayed ? GL_FLOAT16_IMAGE_2D_ARRAY_AMD : GL_FLOAT16_IMAGE_2D_AMD; - case true: return sampler.arrayed ? GL_FLOAT16_IMAGE_2D_MULTISAMPLE_ARRAY_AMD : GL_FLOAT16_IMAGE_2D_MULTISAMPLE_AMD; - } + if (sampler.ms) + return sampler.arrayed ? GL_FLOAT16_IMAGE_2D_MULTISAMPLE_ARRAY_AMD : GL_FLOAT16_IMAGE_2D_MULTISAMPLE_AMD; + else + return sampler.arrayed ? GL_FLOAT16_IMAGE_2D_ARRAY_AMD : GL_FLOAT16_IMAGE_2D_AMD; case Esd3D: return GL_FLOAT16_IMAGE_3D_AMD; case EsdCube: @@ -838,16 +846,18 @@ class TReflectionTraverser : public TIntermTraverser { return GL_FLOAT16_IMAGE_2D_RECT_AMD; case EsdBuffer: return GL_FLOAT16_IMAGE_BUFFER_AMD; + default: + return 0; } case EbtInt: switch ((int)sampler.dim) { case Esd1D: return sampler.arrayed ? GL_INT_IMAGE_1D_ARRAY : GL_INT_IMAGE_1D; case Esd2D: - switch ((int)sampler.ms) { - case false: return sampler.arrayed ? GL_INT_IMAGE_2D_ARRAY : GL_INT_IMAGE_2D; - case true: return sampler.arrayed ? GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY : GL_INT_IMAGE_2D_MULTISAMPLE; - } + if (sampler.ms) + return sampler.arrayed ? GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY : GL_INT_IMAGE_2D_MULTISAMPLE; + else + return sampler.arrayed ? GL_INT_IMAGE_2D_ARRAY : GL_INT_IMAGE_2D; case Esd3D: return GL_INT_IMAGE_3D; case EsdCube: @@ -856,17 +866,19 @@ class TReflectionTraverser : public TIntermTraverser { return GL_INT_IMAGE_2D_RECT; case EsdBuffer: return GL_INT_IMAGE_BUFFER; + default: + return 0; } case EbtUint: switch ((int)sampler.dim) { case Esd1D: return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_1D_ARRAY : GL_UNSIGNED_INT_IMAGE_1D; case Esd2D: - switch ((int)sampler.ms) { - case false: return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_ARRAY : GL_UNSIGNED_INT_IMAGE_2D; - case true: return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY - : GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE; - } + if (sampler.ms) + return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY + : GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE; + else + return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_ARRAY : GL_UNSIGNED_INT_IMAGE_2D; case Esd3D: return GL_UNSIGNED_INT_IMAGE_3D; case EsdCube: @@ -875,6 +887,8 @@ class TReflectionTraverser : public TIntermTraverser { return GL_UNSIGNED_INT_IMAGE_2D_RECT; case EsdBuffer: return GL_UNSIGNED_INT_IMAGE_BUFFER; + default: + return 0; } default: return 0; @@ -939,6 +953,7 @@ class TReflectionTraverser : public TIntermTraverser { case 4: return GL_FLOAT_MAT4; default: return 0; } + default: return 0; } case EbtDouble: switch (type.getMatrixCols()) { @@ -963,6 +978,7 @@ class TReflectionTraverser : public TIntermTraverser { case 4: return GL_DOUBLE_MAT4; default: return 0; } + default: return 0; } case EbtFloat16: switch (type.getMatrixCols()) { @@ -987,6 +1003,7 @@ class TReflectionTraverser : public TIntermTraverser { case 4: return GL_FLOAT16_MAT4_AMD; default: return 0; } + default: return 0; } default: return 0; @@ -1270,5 +1287,3 @@ void TReflection::dump() } } // end namespace glslang - -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h index 5af4467c1f..8315b1128a 100644 --- a/glslang/MachineIndependent/reflection.h +++ b/glslang/MachineIndependent/reflection.h @@ -33,14 +33,12 @@ // POSSIBILITY OF SUCH DAMAGE. // -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - #ifndef _REFLECTION_INCLUDED #define _REFLECTION_INCLUDED #include "../Public/ShaderLang.h" -#include "../Include/Types.h" - +#include "../Include/BaseTypes.h" +#include "../Include/visibility.h" #include #include @@ -67,6 +65,7 @@ class TReflection { virtual ~TReflection() {} // grow the reflection stage by stage + GLSLANG_EXPORT_FOR_TESTS bool addStage(EShLanguage, const TIntermediate&); // for mapping a uniform index to a uniform object's description @@ -219,5 +218,3 @@ class TReflection { } // end namespace glslang #endif // _REFLECTION_INCLUDED - -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE diff --git a/glslang/MachineIndependent/span.h b/glslang/MachineIndependent/span.h new file mode 100644 index 0000000000..bd705fead1 --- /dev/null +++ b/glslang/MachineIndependent/span.h @@ -0,0 +1,92 @@ +#pragma once + +// +// Copyright (C) 2023 LunarG, Inc. +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +// Partial implementation of std::span for C++11 +// Replace with std::span if repo standard is bumped to C++20 +// +// This code was copied from https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/layers/containers/custom_containers.h +template +class span { + public: + using pointer = T *; + using const_pointer = T const *; + using iterator = pointer; + using const_iterator = const_pointer; + + span() = default; + span(pointer start, size_t n) : data_(start), count_(n) {} + template + span(Iterator start, Iterator end) : data_(&(*start)), count_(end - start) {} + template + span(Container &c) : data_(c.data()), count_(c.size()) {} + + iterator begin() { return data_; } + const_iterator begin() const { return data_; } + + iterator end() { return data_ + count_; } + const_iterator end() const { return data_ + count_; } + + T &operator[](int i) { return data_[i]; } + const T &operator[](int i) const { return data_[i]; } + + T &front() { return *data_; } + const T &front() const { return *data_; } + + T &back() { return *(data_ + (count_ - 1)); } + const T &back() const { return *(data_ + (count_ - 1)); } + + size_t size() const { return count_; } + bool empty() const { return count_ == 0; } + + pointer data() { return data_; } + const_pointer data() const { return data_; } + + private: + pointer data_ = {}; + size_t count_ = 0; +}; + +// +// Allow type inference that using the constructor doesn't allow in C++11 +template +span make_span(T *begin, size_t count) { + return span(begin, count); +} +template +span make_span(T *begin, T *end) { + return make_span(begin, end); +} diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt index d521da170a..53d9ad3845 100644 --- a/glslang/OSDependent/Unix/CMakeLists.txt +++ b/glslang/OSDependent/Unix/CMakeLists.txt @@ -31,29 +31,18 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -add_library(OSDependent STATIC ossource.cpp ../osinclude.h) +set(OSDEPENDENT_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/ossource.cpp + PARENT_SCOPE) + +set(OSDEPENDENT_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/../osinclude.h + PARENT_SCOPE) + +add_library(OSDependent STATIC ${CMAKE_CURRENT_SOURCE_DIR}/../../stub.cpp) set_property(TARGET OSDependent PROPERTY FOLDER glslang) set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE ON) -# Link pthread -set(CMAKE_THREAD_PREFER_PTHREAD ON) -if(${CMAKE_VERSION} VERSION_LESS "3.1.0" OR CMAKE_CROSSCOMPILING) - # Needed as long as we support CMake 2.8 for Ubuntu 14.04, - # which does not support the recommended Threads::Threads target. - # https://cmake.org/cmake/help/v2.8.12/cmake.html#module:FindThreads - # Also needed when cross-compiling to work around - # https://gitlab.kitware.com/cmake/cmake/issues/16920 - find_package(Threads) - target_link_libraries(OSDependent ${CMAKE_THREAD_LIBS_INIT}) -else() - # This is the recommended way, so we use it for 3.1+. - set(THREADS_PREFER_PTHREAD_FLAG ON) - find_package(Threads) - target_link_libraries(OSDependent Threads::Threads) -endif() - -if(ENABLE_GLSLANG_INSTALL) - install(TARGETS OSDependent EXPORT OSDependentTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) +if(GLSLANG_ENABLE_INSTALL AND NOT BUILD_SHARED_LIBS) + install(TARGETS OSDependent EXPORT glslang-targets) endif() diff --git a/glslang/OSDependent/Unix/ossource.cpp b/glslang/OSDependent/Unix/ossource.cpp index 81da99c2c4..fbb51f7bd1 100644 --- a/glslang/OSDependent/Unix/ossource.cpp +++ b/glslang/OSDependent/Unix/ossource.cpp @@ -36,15 +36,8 @@ // This file contains the Linux-specific functions // #include "../osinclude.h" -#include "../../../OGLCompilersDLL/InitializeDll.h" -#include -#include -#include -#include -#include #include -#include #if !defined(__Fuchsia__) #include @@ -52,150 +45,6 @@ namespace glslang { -// -// Thread cleanup -// - -// -// Wrapper for Linux call to DetachThread. This is required as pthread_cleanup_push() expects -// the cleanup routine to return void. -// -static void DetachThreadLinux(void *) -{ - DetachThread(); -} - -// -// Registers cleanup handler, sets cancel type and state, and executes the thread specific -// cleanup handler. This function will be called in the Standalone.cpp for regression -// testing. When OpenGL applications are run with the driver code, Linux OS does the -// thread cleanup. -// -void OS_CleanupThreadData(void) -{ -#if defined(__ANDROID__) || defined(__Fuchsia__) - DetachThreadLinux(NULL); -#else - int old_cancel_state, old_cancel_type; - void *cleanupArg = NULL; - - // - // Set thread cancel state and push cleanup handler. - // - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old_cancel_state); - pthread_cleanup_push(DetachThreadLinux, (void *) cleanupArg); - - // - // Put the thread in deferred cancellation mode. - // - pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &old_cancel_type); - - // - // Pop cleanup handler and execute it prior to unregistering the cleanup handler. - // - pthread_cleanup_pop(1); - - // - // Restore the thread's previous cancellation mode. - // - pthread_setcanceltype(old_cancel_state, NULL); -#endif -} - -// -// Thread Local Storage Operations -// -inline OS_TLSIndex PthreadKeyToTLSIndex(pthread_key_t key) -{ - return (OS_TLSIndex)((uintptr_t)key + 1); -} - -inline pthread_key_t TLSIndexToPthreadKey(OS_TLSIndex nIndex) -{ - return (pthread_key_t)((uintptr_t)nIndex - 1); -} - -OS_TLSIndex OS_AllocTLSIndex() -{ - pthread_key_t pPoolIndex; - - // - // Create global pool key. - // - if ((pthread_key_create(&pPoolIndex, NULL)) != 0) { - assert(0 && "OS_AllocTLSIndex(): Unable to allocate Thread Local Storage"); - return OS_INVALID_TLS_INDEX; - } - else - return PthreadKeyToTLSIndex(pPoolIndex); -} - -bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue) -{ - if (nIndex == OS_INVALID_TLS_INDEX) { - assert(0 && "OS_SetTLSValue(): Invalid TLS Index"); - return false; - } - - if (pthread_setspecific(TLSIndexToPthreadKey(nIndex), lpvValue) == 0) - return true; - else - return false; -} - -void* OS_GetTLSValue(OS_TLSIndex nIndex) -{ - // - // This function should return 0 if nIndex is invalid. - // - assert(nIndex != OS_INVALID_TLS_INDEX); - return pthread_getspecific(TLSIndexToPthreadKey(nIndex)); -} - -bool OS_FreeTLSIndex(OS_TLSIndex nIndex) -{ - if (nIndex == OS_INVALID_TLS_INDEX) { - assert(0 && "OS_SetTLSValue(): Invalid TLS Index"); - return false; - } - - // - // Delete the global pool key. - // - if (pthread_key_delete(TLSIndexToPthreadKey(nIndex)) == 0) - return true; - else - return false; -} - -namespace { - pthread_mutex_t gMutex; -} - -static void InitMutex(void) -{ - pthread_mutexattr_t mutexattr; - pthread_mutexattr_init(&mutexattr); - pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(&gMutex, &mutexattr); -} - -void InitGlobalLock() -{ - static pthread_once_t once = PTHREAD_ONCE_INIT; - pthread_once(&once, InitMutex); -} - -void GetGlobalLock() -{ - pthread_mutex_lock(&gMutex); -} - -void ReleaseGlobalLock() -{ - pthread_mutex_unlock(&gMutex); -} - // #define DUMP_COUNTERS void OS_DumpMemoryCounters() diff --git a/glslang/OSDependent/Web/CMakeLists.txt b/glslang/OSDependent/Web/CMakeLists.txt index 5bfbed415c..2cfe7aae67 100644 --- a/glslang/OSDependent/Web/CMakeLists.txt +++ b/glslang/OSDependent/Web/CMakeLists.txt @@ -34,7 +34,7 @@ if(ENABLE_GLSLANG_JS) add_executable(glslang.js "glslang.js.cpp") glslang_set_link_args(glslang.js) - target_link_libraries(glslang.js glslang SPIRV) + target_link_libraries(glslang.js glslang) # Link library names that start with "-" are treated as link flags. # "-Os" should be OK in MSVC; don't use /Os because CMake won't @@ -53,6 +53,9 @@ if(ENABLE_GLSLANG_JS) target_link_libraries(glslang.js "-s ALLOW_MEMORY_GROWTH=1") target_link_libraries(glslang.js "-s FILESYSTEM=0") + # We use ccall in glslang.pre.js, so make sure it's exposed + target_link_libraries(glslang.js "-s EXPORTED_RUNTIME_METHODS=ccall") + if(ENABLE_EMSCRIPTEN_SINGLE_FILE) target_link_libraries(glslang.js "-s SINGLE_FILE=1") endif() @@ -64,8 +67,28 @@ if(ENABLE_GLSLANG_JS) endif() if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE) - add_custom_command(TARGET glslang.js POST_BUILD - COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js) + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.18") + add_custom_command(TARGET glslang.js POST_BUILD + COMMAND ${CMAKE_COMMAND} -E cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js + ) + else() + if (MINGW) + message(FATAL_ERROR "Must use at least CMake 3.18") + endif() + + if (CMAKE_HOST_SYSTEM MATCHES "Windows.*") + # There are several ways we could append one file to another on Windows, but unfortunately 'cat' is not one of them + # (there is no 'cat' command in cmd). Also, since this will ultimately run in cmd and not pwsh, we need to ensure + # Windows path separators are used. + file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/glslang.js" glslang_js_path) + file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js" glslang_after_js_path) + add_custom_command(TARGET glslang.js POST_BUILD + COMMAND type "${glslang_after_js_path}" >> "${glslang_js_path}") + else() + add_custom_command(TARGET glslang.js POST_BUILD + COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js) + endif() + endif() endif() endif() -endif() +endif() \ No newline at end of file diff --git a/glslang/OSDependent/Web/glslang.js.cpp b/glslang/OSDependent/Web/glslang.js.cpp index f2306a6092..c820da6aa4 100644 --- a/glslang/OSDependent/Web/glslang.js.cpp +++ b/glslang/OSDependent/Web/glslang.js.cpp @@ -141,6 +141,15 @@ const TBuiltInResource DefaultTBuiltInResource = { /* .maxTaskWorkGroupSizeY_NV = */ 1, /* .maxTaskWorkGroupSizeZ_NV = */ 1, /* .maxMeshViewCountNV = */ 4, + /* .maxMeshOutputVerticesEXT = */ 256, + /* .maxMeshOutputPrimitivesEXT = */ 512, + /* .maxMeshWorkGroupSizeX_EXT = */ 32, + /* .maxMeshWorkGroupSizeY_EXT = */ 1, + /* .maxMeshWorkGroupSizeZ_EXT = */ 1, + /* .maxTaskWorkGroupSizeX_EXT = */ 32, + /* .maxTaskWorkGroupSizeY_EXT = */ 1, + /* .maxTaskWorkGroupSizeZ_EXT = */ 1, + /* .maxMeshViewCountEXT = */ 4, /* .maxDualSourceDrawBuffersEXT = */ 1, /* .limits = */ { diff --git a/glslang/OSDependent/Web/glslang.pre.js b/glslang/OSDependent/Web/glslang.pre.js index 46a569506d..390390e99f 100644 --- a/glslang/OSDependent/Web/glslang.pre.js +++ b/glslang/OSDependent/Web/glslang.pre.js @@ -25,7 +25,7 @@ Module['compileGLSLZeroCopy'] = function(glsl, shader_stage, gen_debug, spirv_ve var p_output = Module['_malloc'](4); var p_output_len = Module['_malloc'](4); - var id = ccall('convert_glsl_to_spirv', + var id = Module['ccall']('convert_glsl_to_spirv', 'number', ['string', 'number', 'boolean', 'number', 'number', 'number'], [glsl, shader_stage_int, gen_debug, spirv_version_int, p_output, p_output_len]); diff --git a/glslang/OSDependent/Windows/CMakeLists.txt b/glslang/OSDependent/Windows/CMakeLists.txt index 21d603e72c..040f4348f1 100644 --- a/glslang/OSDependent/Windows/CMakeLists.txt +++ b/glslang/OSDependent/Windows/CMakeLists.txt @@ -31,24 +31,32 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -set(SOURCES ossource.cpp ../osinclude.h) +set(OSDEPENDENT_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/ossource.cpp + PARENT_SCOPE) + +set(OSDEPENDENT_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/../osinclude.h + PARENT_SCOPE) + +add_library(OSDependent STATIC) + +target_sources(OSDependent PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/../../stub.cpp) -add_library(OSDependent STATIC ${SOURCES}) set_property(TARGET OSDependent PROPERTY FOLDER glslang) set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE ON) # MinGW GCC complains about function pointer casts to void*. # Turn that off with -fpermissive. -if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") - target_compile_options(OSDependent PRIVATE -fpermissive) +if(MINGW AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") + set_source_files_properties(${OSDEPENDENT_SOURCES} PROPERTIES COMPILE_FLAGS -fpermissive) endif() if(WIN32) source_group("Source" FILES ${SOURCES}) endif() -if(ENABLE_GLSLANG_INSTALL) - install(TARGETS OSDependent EXPORT OSDependentTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) +if(GLSLANG_ENABLE_INSTALL) + install(TARGETS OSDependent EXPORT glslang-targets) endif() diff --git a/glslang/OSDependent/Windows/main.cpp b/glslang/OSDependent/Windows/main.cpp deleted file mode 100644 index 0bcde7b660..0000000000 --- a/glslang/OSDependent/Windows/main.cpp +++ /dev/null @@ -1,74 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#include "InitializeDll.h" - -#define STRICT -#define VC_EXTRALEAN 1 -#include -#include - -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - - if (! glslang::InitProcess()) - return FALSE; - break; - case DLL_THREAD_ATTACH: - - if (! glslang::InitThread()) - return FALSE; - break; - - case DLL_THREAD_DETACH: - - if (! glslang::DetachThread()) - return FALSE; - break; - - case DLL_PROCESS_DETACH: - - glslang::DetachProcess(); - break; - - default: - assert(0 && "DllMain(): Reason for calling DLL Main is unknown"); - return FALSE; - } - - return TRUE; -} diff --git a/glslang/OSDependent/Windows/ossource.cpp b/glslang/OSDependent/Windows/ossource.cpp index 870840c56e..d7f89f71b6 100644 --- a/glslang/OSDependent/Windows/ossource.cpp +++ b/glslang/OSDependent/Windows/ossource.cpp @@ -37,11 +37,9 @@ #define STRICT #define VC_EXTRALEAN 1 #include -#include #include #include #include -#include // // This file contains the Window-OS-specific functions @@ -53,84 +51,6 @@ namespace glslang { -inline OS_TLSIndex ToGenericTLSIndex (DWORD handle) -{ - return (OS_TLSIndex)((uintptr_t)handle + 1); -} - -inline DWORD ToNativeTLSIndex (OS_TLSIndex nIndex) -{ - return (DWORD)((uintptr_t)nIndex - 1); -} - -// -// Thread Local Storage Operations -// -OS_TLSIndex OS_AllocTLSIndex() -{ - DWORD dwIndex = TlsAlloc(); - if (dwIndex == TLS_OUT_OF_INDEXES) { - assert(0 && "OS_AllocTLSIndex(): Unable to allocate Thread Local Storage"); - return OS_INVALID_TLS_INDEX; - } - - return ToGenericTLSIndex(dwIndex); -} - -bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue) -{ - if (nIndex == OS_INVALID_TLS_INDEX) { - assert(0 && "OS_SetTLSValue(): Invalid TLS Index"); - return false; - } - - if (TlsSetValue(ToNativeTLSIndex(nIndex), lpvValue)) - return true; - else - return false; -} - -void* OS_GetTLSValue(OS_TLSIndex nIndex) -{ - assert(nIndex != OS_INVALID_TLS_INDEX); - return TlsGetValue(ToNativeTLSIndex(nIndex)); -} - -bool OS_FreeTLSIndex(OS_TLSIndex nIndex) -{ - if (nIndex == OS_INVALID_TLS_INDEX) { - assert(0 && "OS_SetTLSValue(): Invalid TLS Index"); - return false; - } - - if (TlsFree(ToNativeTLSIndex(nIndex))) - return true; - else - return false; -} - -HANDLE GlobalLock; - -void InitGlobalLock() -{ - GlobalLock = CreateMutex(0, false, 0); -} - -void GetGlobalLock() -{ - WaitForSingleObject(GlobalLock, INFINITE); -} - -void ReleaseGlobalLock() -{ - ReleaseMutex(GlobalLock); -} - -unsigned int __stdcall EnterGenericThread (void* entry) -{ - return ((TThreadEntrypoint)entry)(0); -} - //#define DUMP_COUNTERS void OS_DumpMemoryCounters() diff --git a/glslang/OSDependent/osinclude.h b/glslang/OSDependent/osinclude.h index 218abe4f23..da1c4f6956 100644 --- a/glslang/OSDependent/osinclude.h +++ b/glslang/OSDependent/osinclude.h @@ -35,28 +35,10 @@ #ifndef __OSINCLUDE_H #define __OSINCLUDE_H +#include "../Include/visibility.h" namespace glslang { -// -// Thread Local Storage Operations -// -typedef void* OS_TLSIndex; -#define OS_INVALID_TLS_INDEX ((void*)0) - -OS_TLSIndex OS_AllocTLSIndex(); -bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue); -bool OS_FreeTLSIndex(OS_TLSIndex nIndex); -void* OS_GetTLSValue(OS_TLSIndex nIndex); - -void InitGlobalLock(); -void GetGlobalLock(); -void ReleaseGlobalLock(); - -typedef unsigned int (*TThreadEntrypoint)(void*); - -void OS_CleanupThreadData(void); - -void OS_DumpMemoryCounters(); +GLSLANG_EXPORT void OS_DumpMemoryCounters(); } // end namespace glslang diff --git a/StandAlone/ResourceLimits.h b/glslang/Public/ResourceLimits.h similarity index 82% rename from StandAlone/ResourceLimits.h rename to glslang/Public/ResourceLimits.h index 736248eb39..8245e12d7a 100644 --- a/StandAlone/ResourceLimits.h +++ b/glslang/Public/ResourceLimits.h @@ -37,21 +37,22 @@ #include -#include "../glslang/Include/ResourceLimits.h" +#include "../Include/ResourceLimits.h" +#include "../Include/visibility.h" -namespace glslang { +// Return pointer to user-writable Resource to pass through API in +// future-proof way. +GLSLANG_EXPORT extern TBuiltInResource* GetResources(); // These are the default resources for TBuiltInResources, used for both // - parsing this string for the case where the user didn't supply one, // - dumping out a template for user construction of a config file. -extern const TBuiltInResource DefaultTBuiltInResource; +GLSLANG_EXPORT extern const TBuiltInResource* GetDefaultResources(); // Returns the DefaultTBuiltInResource as a human-readable string. -std::string GetDefaultTBuiltInResourceString(); +GLSLANG_EXPORT std::string GetDefaultTBuiltInResourceString(); // Decodes the resource limits from |config| to |resources|. -void DecodeResourceLimits(TBuiltInResource* resources, char* config); - -} // end namespace glslang +GLSLANG_EXPORT void DecodeResourceLimits(TBuiltInResource* resources, char* config); #endif // _STAND_ALONE_RESOURCE_LIMITS_INCLUDED_ diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 7744abf025..b105b5c999 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -38,6 +38,7 @@ #define _COMPILER_INTERFACE_INCLUDED_ #include "../Include/ResourceLimits.h" +#include "../Include/visibility.h" #include "../MachineIndependent/Versions.h" #include @@ -49,22 +50,6 @@ #define C_DECL #endif -#ifdef GLSLANG_IS_SHARED_LIBRARY - #ifdef _WIN32 - #ifdef GLSLANG_EXPORTING - #define GLSLANG_EXPORT __declspec(dllexport) - #else - #define GLSLANG_EXPORT __declspec(dllimport) - #endif - #elif __GNUC__ >= 4 - #define GLSLANG_EXPORT __attribute__((visibility("default"))) - #endif -#endif // GLSLANG_IS_SHARED_LIBRARY - -#ifndef GLSLANG_EXPORT -#define GLSLANG_EXPORT -#endif - // // This is the platform independent interface between an OGL driver // and the shading language compiler/linker. @@ -108,8 +93,10 @@ typedef enum { EShLangMissNV = EShLangMiss, EShLangCallable, EShLangCallableNV = EShLangCallable, - EShLangTaskNV, - EShLangMeshNV, + EShLangTask, + EShLangTaskNV = EShLangTask, + EShLangMesh, + EShLangMeshNV = EShLangMesh, LAST_ELEMENT_MARKER(EShLangCount), } EShLanguage; // would be better as stage, but this is ancient now @@ -132,8 +119,10 @@ typedef enum : unsigned { EShLangMissNVMask = EShLangMissMask, EShLangCallableMask = (1 << EShLangCallable), EShLangCallableNVMask = EShLangCallableMask, - EShLangTaskNVMask = (1 << EShLangTaskNV), - EShLangMeshNVMask = (1 << EShLangMeshNV), + EShLangTaskMask = (1 << EShLangTask), + EShLangTaskNVMask = EShLangTaskMask, + EShLangMeshMask = (1 << EShLangMesh), + EShLangMeshNVMask = EShLangMeshMask, LAST_ELEMENT_MARKER(EShLanguageMaskCount), } EShLanguageMask; @@ -150,8 +139,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; @@ -162,16 +151,13 @@ typedef enum { LAST_ELEMENT_MARKER(EShTargetCount), } EShTargetLanguage; -// TODO(greg-lunarg): Fix non-determinism problem with Universal -// https://github.com/KhronosGroup/glslang/issues/2858 - typedef enum { - EShTargetUniversal = 0, // Universal - Do not use, see comment above EShTargetVulkan_1_0 = (1 << 22), // Vulkan 1.0 EShTargetVulkan_1_1 = (1 << 22) | (1 << 12), // Vulkan 1.1 EShTargetVulkan_1_2 = (1 << 22) | (2 << 12), // Vulkan 1.2 + EShTargetVulkan_1_3 = (1 << 22) | (3 << 12), // Vulkan 1.3 EShTargetOpenGL_450 = 450, // OpenGL - LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 4), + LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 5), } EShTargetClientVersion; typedef EShTargetClientVersion EshTargetClientVersion; @@ -187,6 +173,21 @@ typedef enum { LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount = 7), } EShTargetLanguageVersion; +// +// Following are a series of helper enums for managing layouts and qualifiers, +// used for TPublicType, TType, others. +// + +enum TLayoutPacking { + ElpNone, + ElpShared, // default, but different than saying nothing + ElpStd140, + ElpStd430, + ElpPacked, + ElpScalar, + ElpCount // If expanding, see bitfield width below +}; + struct TInputLanguage { EShSource languageFamily; // redundant information with other input, this one overrides when not EShSourceNone EShLanguage stage; // redundant information with other input, this one overrides when not EShSourceNone @@ -251,22 +252,25 @@ typedef enum { // Message choices for what errors and warnings are given. // enum EShMessages : unsigned { - EShMsgDefault = 0, // default is to give all required errors and extra warnings - EShMsgRelaxedErrors = (1 << 0), // be liberal in accepting input - EShMsgSuppressWarnings = (1 << 1), // suppress all warnings, except those required by the specification - EShMsgAST = (1 << 2), // print the AST intermediate representation - EShMsgSpvRules = (1 << 3), // issue messages for SPIR-V generation - EShMsgVulkanRules = (1 << 4), // issue messages for Vulkan-requirements of GLSL for SPIR-V - EShMsgOnlyPreprocessor = (1 << 5), // only print out errors produced by the preprocessor - EShMsgReadHlsl = (1 << 6), // use HLSL parsing rules and semantics - EShMsgCascadingErrors = (1 << 7), // get cascading errors; risks error-recovery issues, instead of an early exit - EShMsgKeepUncalled = (1 << 8), // for testing, don't eliminate uncalled functions - EShMsgHlslOffsets = (1 << 9), // allow block offsets to follow HLSL rules instead of GLSL rules - EShMsgDebugInfo = (1 << 10), // save debug information - EShMsgHlslEnable16BitTypes = (1 << 11), // enable use of 16-bit types in SPIR-V for HLSL - 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 + EShMsgDefault = 0, // default is to give all required errors and extra warnings + EShMsgRelaxedErrors = (1 << 0), // be liberal in accepting input + EShMsgSuppressWarnings = (1 << 1), // suppress all warnings, except those required by the specification + EShMsgAST = (1 << 2), // print the AST intermediate representation + EShMsgSpvRules = (1 << 3), // issue messages for SPIR-V generation + EShMsgVulkanRules = (1 << 4), // issue messages for Vulkan-requirements of GLSL for SPIR-V + EShMsgOnlyPreprocessor = (1 << 5), // only print out errors produced by the preprocessor + EShMsgReadHlsl = (1 << 6), // use HLSL parsing rules and semantics + EShMsgCascadingErrors = (1 << 7), // get cascading errors; risks error-recovery issues, instead of an early exit + EShMsgKeepUncalled = (1 << 8), // for testing, don't eliminate uncalled functions + EShMsgHlslOffsets = (1 << 9), // allow block offsets to follow HLSL rules instead of GLSL rules + EShMsgDebugInfo = (1 << 10), // save debug information + EShMsgHlslEnable16BitTypes = (1 << 11), // enable use of 16-bit types in SPIR-V for HLSL + 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 + EShMsgAbsolutePath = (1 << 16), // Output Absolute path for messages + EShMsgDisplayErrorColumn = (1 << 17), // Display error message column aswell as line LAST_ELEMENT_MARKER(EShMsgCount), }; @@ -303,7 +307,7 @@ typedef struct { // // ShHandle held by but opaque to the driver. It is allocated, -// managed, and de-allocated by the compiler/linker. It's contents +// managed, and de-allocated by the compiler/linker. Its contents // are defined by and used by the compiler and linker. For example, // symbol table information and object code passed from the compiler // to the linker can be stored where ShHandle points. @@ -316,8 +320,8 @@ typedef void* ShHandle; // Driver calls these to create and destroy compiler/linker // objects. // -GLSLANG_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int debugOptions); // one per shader -GLSLANG_EXPORT ShHandle ShConstructLinker(const EShExecutable, int debugOptions); // one per shader pair +GLSLANG_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int /*debugOptions unused*/); // one per shader +GLSLANG_EXPORT ShHandle ShConstructLinker(const EShExecutable, int /*debugOptions unused*/); // one per shader pair GLSLANG_EXPORT ShHandle ShConstructUniformMap(); // one per uniform namespace (currently entire program object) GLSLANG_EXPORT void ShDestruct(ShHandle); @@ -328,18 +332,14 @@ GLSLANG_EXPORT void ShDestruct(ShHandle); // The info-log should be written by ShCompile into // ShHandle, so it can answer future queries. // -GLSLANG_EXPORT int ShCompile( - const ShHandle, - const char* const shaderStrings[], - const int numStrings, - const int* lengths, - const EShOptimizationLevel, - const TBuiltInResource *resources, - int debugOptions, - int defaultVersion = 110, // use 100 for ES environment, overridden by #version in shader - bool forwardCompatible = false, // give errors for use of deprecated features - EShMessages messages = EShMsgDefault // warnings and errors - ); +GLSLANG_EXPORT int ShCompile(const ShHandle, const char* const shaderStrings[], const int numStrings, + const int* lengths, const EShOptimizationLevel, const TBuiltInResource* resources, + int, // debugOptions unused + int defaultVersion = 110, // use 100 for ES environment, overridden by #version in shader + bool forwardCompatible = false, // give errors for use of deprecated features + EShMessages messages = EShMsgDefault, // warnings and errors + const char* fileName = nullptr +); GLSLANG_EXPORT int ShLinkExt( const ShHandle, // linker object @@ -415,6 +415,7 @@ GLSLANG_EXPORT int GetKhronosToolId(); class TIntermediate; class TProgram; class TPoolAllocator; +class TIoMapResolver; // Call this exactly once per process before using anything else GLSLANG_EXPORT bool InitializeProcess(); @@ -473,6 +474,8 @@ class TShader { GLSLANG_EXPORT void setSourceEntryPoint(const char* sourceEntryPointName); GLSLANG_EXPORT void addProcesses(const std::vector&); GLSLANG_EXPORT void setUniqueId(unsigned long long id); + GLSLANG_EXPORT void setOverrideVersion(int version); + GLSLANG_EXPORT void setDebugInfo(bool debugInfo); // IO resolver binding data: see comments in ShaderLang.cpp GLSLANG_EXPORT void setShiftBinding(TResourceType res, unsigned int base); @@ -491,6 +494,7 @@ class TShader { GLSLANG_EXPORT void setUniformLocationBase(int base); GLSLANG_EXPORT void setInvertY(bool invert); GLSLANG_EXPORT void setDxPositionW(bool dxPosW); + GLSLANG_EXPORT void setEnhancedMsgs(); #ifdef ENABLE_HLSL GLSLANG_EXPORT void setHlslIoMapping(bool hlslIoMap); GLSLANG_EXPORT void setFlattenUniformArrays(bool flatten); @@ -507,6 +511,9 @@ class TShader { GLSLANG_EXPORT void setAtomicCounterBlockSet(unsigned int set); GLSLANG_EXPORT void setAtomicCounterBlockBinding(unsigned int binding); + GLSLANG_EXPORT void addSourceText(const char* text, size_t len); + GLSLANG_EXPORT void setSourceFile(const char* file); + // For setting up the environment (cleared to nothingness in the constructor). // These must be called so that parsing is done for the right source language and // target environment, either indirectly through TranslateEnvironment() based on @@ -518,11 +525,14 @@ class TShader { // use EShClientNone and version of 0, e.g. for validation mode. // Note 'version' does not describe the target environment, // just the version of the source dialect to compile under. + // For example, to choose the Vulkan dialect of GLSL defined by + // version 100 of the KHR_vulkan_glsl extension: lang = EShSourceGlsl, + // dialect = EShClientVulkan, and version = 100. // // See the definitions of TEnvironment, EShSource, EShLanguage, // and EShClient for choices and more detail. // - // setEnvClient: The client that will be hosting the execution, and it's version. + // setEnvClient: The client that will be hosting the execution, and its version. // Note 'version' is not the version of the languages involved, but // the version of the client environment. // Use EShClientNone and version of 0 if there is no client, e.g. @@ -565,6 +575,9 @@ class TShader { void setEnvInputVulkanRulesRelaxed() { environment.input.vulkanRulesRelaxed = true; } bool getEnvInputVulkanRulesRelaxed() const { return environment.input.vulkanRulesRelaxed; } + void setCompileOnly() { compileOnly = true; } + bool getCompileOnly() const { return compileOnly; } + // Interface to #include handlers. // // To support #include, a client of Glslang does the following: @@ -709,16 +722,20 @@ class TShader { // a function in the source string can be renamed FROM this TO the name given in setEntryPoint. std::string sourceEntryPointName; + // overrides #version in shader source or default version if #version isn't present + int overrideVersion; + TEnvironment environment; + // Indicates this shader is meant to be used without linking + bool compileOnly = false; + friend class TProgram; private: TShader& operator=(TShader&); }; -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - // // A reflection database and its interface, consistent with the OpenGL API reflection queries. // @@ -733,6 +750,8 @@ class TObjectReflection { GLSLANG_EXPORT void dump() const; static TObjectReflection badReflection() { return TObjectReflection(); } + GLSLANG_EXPORT unsigned int layoutLocation() const; + std::string name; int offset; int glDefineType; @@ -835,7 +854,19 @@ class TIoMapResolver virtual void addStage(EShLanguage stage, TIntermediate& stageIntermediate) = 0; }; -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE +// I/O mapper +class TIoMapper { +public: + TIoMapper() {} + virtual ~TIoMapper() {} + // grow the reflection stage by stage + bool virtual addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*); + bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; } + bool virtual setAutoPushConstantBlock(const char*, unsigned int, TLayoutPacking) { return false; } +}; + +// Get the default GLSL IO mapper +GLSLANG_EXPORT TIoMapper* GetGlslIoMapper(); // Make one TProgram per set of shaders that will get linked together. Add all // the shaders that are to be linked together. After calling shader.parse() @@ -856,8 +887,6 @@ class TProgram { TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - // Reflection Interface // call first, to do liveness analysis, index mapping, etc.; returns false on failure @@ -946,11 +975,14 @@ class TProgram { const TType *getAttributeTType(int index) const { return getPipeInput(index).getType(); } GLSLANG_EXPORT void dumpReflection(); + + // Get the IO resolver to use for mapIO + GLSLANG_EXPORT TIoMapResolver* getGlslIoResolver(EShLanguage stage); + // I/O mapping: apply base offsets and map live unbound variables // If resolver is not provided it uses the previous approach // and respects auto assignment and offsets. GLSLANG_EXPORT bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr); -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE protected: GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages); @@ -961,9 +993,7 @@ class TProgram { TIntermediate* intermediate[EShLangCount]; bool newedIntermediate[EShLangCount]; // track which intermediate were "new" versus reusing a singleton unit in a stage TInfoSink* infoSink; -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) TReflection* reflection; -#endif bool linked; private: diff --git a/StandAlone/resource_limits_c.h b/glslang/Public/resource_limits_c.h similarity index 81% rename from StandAlone/resource_limits_c.h rename to glslang/Public/resource_limits_c.h index 108fd5e21e..3cf7442f45 100644 --- a/StandAlone/resource_limits_c.h +++ b/glslang/Public/resource_limits_c.h @@ -29,23 +29,27 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_ #define _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_ -#include "../glslang/Include/glslang_c_interface.h" +#include "../Include/glslang_c_interface.h" +#include "../Include/visibility.h" #ifdef __cplusplus extern "C" { #endif +// Returns a struct that can be use to create custom resource values. +GLSLANG_EXPORT glslang_resource_t* glslang_resource(void); + // These are the default resources for TBuiltInResources, used for both // - parsing this string for the case where the user didn't supply one, // - dumping out a template for user construction of a config file. -const glslang_resource_t* glslang_default_resource(void); +GLSLANG_EXPORT const glslang_resource_t* glslang_default_resource(void); // Returns the DefaultTBuiltInResource as a human-readable string. // NOTE: User is responsible for freeing this string. -const char* glslang_default_resource_string(); +GLSLANG_EXPORT const char* glslang_default_resource_string(); // Decodes the resource limits from |config| to |resources|. -void glslang_decode_resource_limits(glslang_resource_t* resources, char* config); +GLSLANG_EXPORT void glslang_decode_resource_limits(glslang_resource_t* resources, char* config); #ifdef __cplusplus } diff --git a/StandAlone/ResourceLimits.cpp b/glslang/ResourceLimits/ResourceLimits.cpp similarity index 91% rename from StandAlone/ResourceLimits.cpp rename to glslang/ResourceLimits/ResourceLimits.cpp index 7c7f4c4e49..0e9d1b5480 100644 --- a/StandAlone/ResourceLimits.cpp +++ b/glslang/ResourceLimits/ResourceLimits.cpp @@ -37,9 +37,9 @@ #include #include -#include "ResourceLimits.h" +#include "glslang/Public/ResourceLimits.h" -namespace glslang { +TBuiltInResource Resources; const TBuiltInResource DefaultTBuiltInResource = { /* .MaxLights = */ 32, @@ -134,6 +134,15 @@ const TBuiltInResource DefaultTBuiltInResource = { /* .maxTaskWorkGroupSizeY_NV = */ 1, /* .maxTaskWorkGroupSizeZ_NV = */ 1, /* .maxMeshViewCountNV = */ 4, + /* .maxMeshOutputVerticesEXT = */ 256, + /* .maxMeshOutputPrimitivesEXT = */ 256, + /* .maxMeshWorkGroupSizeX_EXT = */ 128, + /* .maxMeshWorkGroupSizeY_EXT = */ 128, + /* .maxMeshWorkGroupSizeZ_EXT = */ 128, + /* .maxTaskWorkGroupSizeX_EXT = */ 128, + /* .maxTaskWorkGroupSizeY_EXT = */ 128, + /* .maxTaskWorkGroupSizeZ_EXT = */ 128, + /* .maxMeshViewCountEXT = */ 4, /* .maxDualSourceDrawBuffersEXT = */ 1, /* .limits = */ { @@ -244,6 +253,15 @@ std::string GetDefaultTBuiltInResourceString() << "MaxTaskWorkGroupSizeY_NV " << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n" << "MaxTaskWorkGroupSizeZ_NV " << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n" << "MaxMeshViewCountNV " << DefaultTBuiltInResource.maxMeshViewCountNV << "\n" + << "MaxMeshOutputVerticesEXT " << DefaultTBuiltInResource.maxMeshOutputVerticesEXT << "\n" + << "MaxMeshOutputPrimitivesEXT " << DefaultTBuiltInResource.maxMeshOutputPrimitivesEXT << "\n" + << "MaxMeshWorkGroupSizeX_EXT " << DefaultTBuiltInResource.maxMeshWorkGroupSizeX_EXT << "\n" + << "MaxMeshWorkGroupSizeY_EXT " << DefaultTBuiltInResource.maxMeshWorkGroupSizeY_EXT << "\n" + << "MaxMeshWorkGroupSizeZ_EXT " << DefaultTBuiltInResource.maxMeshWorkGroupSizeZ_EXT << "\n" + << "MaxTaskWorkGroupSizeX_EXT " << DefaultTBuiltInResource.maxTaskWorkGroupSizeX_EXT << "\n" + << "MaxTaskWorkGroupSizeY_EXT " << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_EXT << "\n" + << "MaxTaskWorkGroupSizeZ_EXT " << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_EXT << "\n" + << "MaxMeshViewCountEXT " << DefaultTBuiltInResource.maxMeshViewCountEXT << "\n" << "MaxDualSourceDrawBuffersEXT " << DefaultTBuiltInResource.maxDualSourceDrawBuffersEXT << "\n" << "nonInductiveForLoops " << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n" << "whileLoops " << DefaultTBuiltInResource.limits.whileLoops << "\n" @@ -469,6 +487,26 @@ void DecodeResourceLimits(TBuiltInResource* resources, char* config) resources->maxTaskWorkGroupSizeZ_NV = value; else if (tokenStr == "MaxMeshViewCountNV") resources->maxMeshViewCountNV = value; + else if (tokenStr == "MaxMeshOutputVerticesEXT") + resources->maxMeshOutputVerticesEXT = value; + else if (tokenStr == "MaxMeshOutputPrimitivesEXT") + resources->maxMeshOutputPrimitivesEXT = value; + else if (tokenStr == "MaxMeshWorkGroupSizeX_EXT") + resources->maxMeshWorkGroupSizeX_EXT = value; + else if (tokenStr == "MaxMeshWorkGroupSizeY_EXT") + resources->maxMeshWorkGroupSizeY_EXT = value; + else if (tokenStr == "MaxMeshWorkGroupSizeZ_EXT") + resources->maxMeshWorkGroupSizeZ_EXT = value; + else if (tokenStr == "MaxTaskWorkGroupSizeX_EXT") + resources->maxTaskWorkGroupSizeX_EXT = value; + else if (tokenStr == "MaxTaskWorkGroupSizeY_EXT") + resources->maxTaskWorkGroupSizeY_EXT = value; + else if (tokenStr == "MaxTaskWorkGroupSizeZ_EXT") + resources->maxTaskWorkGroupSizeZ_EXT = value; + else if (tokenStr == "MaxMeshViewCountEXT") + resources->maxMeshViewCountEXT = value; + else if (tokenStr == "MaxDualSourceDrawBuffersEXT") + resources->maxDualSourceDrawBuffersEXT = value; else if (tokenStr == "nonInductiveForLoops") resources->limits.nonInductiveForLoops = (value != 0); else if (tokenStr == "whileLoops") @@ -493,4 +531,12 @@ void DecodeResourceLimits(TBuiltInResource* resources, char* config) } } -} // end namespace glslang +TBuiltInResource* GetResources() +{ + return &Resources; +} + +const TBuiltInResource* GetDefaultResources() +{ + return &DefaultTBuiltInResource; +} diff --git a/StandAlone/resource_limits_c.cpp b/glslang/ResourceLimits/resource_limits_c.cpp similarity index 70% rename from StandAlone/resource_limits_c.cpp rename to glslang/ResourceLimits/resource_limits_c.cpp index a1f681c7b8..8909d9ef5e 100644 --- a/StandAlone/resource_limits_c.cpp +++ b/glslang/ResourceLimits/resource_limits_c.cpp @@ -26,40 +26,31 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **/ -#include "resource_limits_c.h" -#include "ResourceLimits.h" +#include "glslang/Public/resource_limits_c.h" +#include "glslang/Public/ResourceLimits.h" #include #include #include -const glslang_resource_t* glslang_default_resource(void) +glslang_resource_t* glslang_resource(void) { - return reinterpret_cast(&glslang::DefaultTBuiltInResource); + return reinterpret_cast(GetResources()); } -#if defined(__clang__) || defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#elif defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable : 4996) -#endif +const glslang_resource_t* glslang_default_resource(void) +{ + return reinterpret_cast(GetDefaultResources()); +} const char* glslang_default_resource_string() { - std::string cpp_str = glslang::GetDefaultTBuiltInResourceString(); + std::string cpp_str = GetDefaultTBuiltInResourceString(); char* c_str = (char*)malloc(cpp_str.length() + 1); - strcpy(c_str, cpp_str.c_str()); + strncpy(c_str, cpp_str.c_str(), cpp_str.length() + 1); return c_str; } -#if defined(__clang__) || defined(__GNUC__) -#pragma GCC diagnostic pop -#elif defined(_MSC_VER) -#pragma warning(pop) -#endif - void glslang_decode_resource_limits(glslang_resource_t* resources, char* config) { - glslang::DecodeResourceLimits(reinterpret_cast(resources), config); + DecodeResourceLimits(reinterpret_cast(resources), config); } diff --git a/hlsl/stub.cpp b/glslang/stub.cpp similarity index 77% rename from hlsl/stub.cpp rename to glslang/stub.cpp index f1d39c1517..b9aec6d15e 100644 --- a/hlsl/stub.cpp +++ b/glslang/stub.cpp @@ -1,6 +1,5 @@ // -// Copyright (C) 2020 Google, Inc. -// +// Copyright (C) 2024 The Khronos Group Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -15,7 +14,7 @@ // disclaimer in the documentation and/or other materials provided // with the distribution. // -// Neither the name of Google, Inc., nor the names of its +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // @@ -33,9 +32,6 @@ // POSSIBILITY OF SUCH DAMAGE. // -// The HLSL source is directly embedded into the glslang target when ENABLE_HLSL -// is set. -// This source now lives at: glslang/HLSL/ -// The HLSL target is now just a stub that exists for backwards compatibility -// for projects that referenced this target. As a target requires at least one -// source file to build, this file acts as that stub. +// This empty source file exists to support building stubbed versions of +// deprecated libraries which have been integrated into the main glslang +// library. It should be deleted once the stub libraries are fully removed. diff --git a/glslang/updateGrammar b/glslang/updateGrammar index 9209493f38..a15dc24b30 100755 --- a/glslang/updateGrammar +++ b/glslang/updateGrammar @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # Copyright (C) 2020 The Khronos Group Inc. # @@ -33,17 +33,4 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -if [ "$1" = 'web' ] -then - m4 -P -DGLSLANG_WEB MachineIndependent/glslang.m4 > MachineIndependent/glslang.y -elif [ "$#" -eq 0 ] -then - m4 -P MachineIndependent/glslang.m4 > MachineIndependent/glslang.y -else - echo usage: - echo $0 web - echo $0 - exit -fi - bison --defines=MachineIndependent/glslang_tab.cpp.h -t MachineIndependent/glslang.y -o MachineIndependent/glslang_tab.cpp diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index c0ced5e4a0..cc433fe70e 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -1,5 +1,6 @@ // // Copyright (C) 2016 Google, Inc. +// Copyright (C) 2022-2024 Arm Limited. // // All rights reserved. // @@ -211,6 +212,7 @@ INSTANTIATE_TEST_SUITE_P( "runtimeArray.vert", "simpleFunctionCall.frag", "stringToDouble.vert", + "struct.error.frag", "structAssignment.frag", "structDeref.frag", "structure.frag", @@ -251,6 +253,7 @@ INSTANTIATE_TEST_SUITE_P( "glsl.450.subgroupClustered.comp", "glsl.450.subgroupClusteredNeg.comp", "glsl.450.subgroupPartitioned.comp", + "glsl.450.subgroupRotate.comp", "glsl.450.subgroupShuffle.comp", "glsl.450.subgroupShuffleRelative.comp", "glsl.450.subgroupQuad.comp", @@ -276,10 +279,14 @@ INSTANTIATE_TEST_SUITE_P( "glsl.es320.subgroupClustered.comp", "glsl.es320.subgroupClusteredNeg.comp", "glsl.es320.subgroupPartitioned.comp", + "glsl.es320.subgroupRotate.comp", "glsl.es320.subgroupShuffle.comp", "glsl.es320.subgroupShuffleRelative.comp", "glsl.es320.subgroupQuad.comp", "glsl.es320.subgroupVote.comp", + "glsl.es320.extTextureShadowLod.frag", + "gl_samplemask_array_size.frag", + "glsl.ext.textureShadowLod.frag", "terminate.frag", "terminate.vert", "negativeWorkGroupSize.comp", @@ -291,9 +298,25 @@ INSTANTIATE_TEST_SUITE_P( "GL_EXT_shader_integer_mix.vert", "GL_ARB_draw_instanced.vert", "GL_ARB_fragment_coord_conventions.vert", + "GL_ARB_bindless_texture.frag", + "GL_ARB_texture_multisample.vert", "BestMatchFunction.vert", "EndStreamPrimitive.geom", "floatBitsToInt.vert", + "coord_conventions.frag", + "gl_FragCoord.frag", + "glsl.interpOp.error.frag", + "location_aliasing.tesc", + "location_aliasing1.frag", + "GL_EXT_draw_instanced.vert", + "overflow_underflow_toinf_0.frag", + "GL_EXT_texture_array.frag", + "index_outside_sample_mask_range.frag", + "positive_infinity.frag", + "matrixCompMult.vert", + "ps_uint_int.frag", + "ps_sample.frag", + "tes_patch.tese", })), FileNameAsCustomTestSuffix ); diff --git a/gtests/BuiltInResource.FromFile.cpp b/gtests/BuiltInResource.FromFile.cpp index da81fe98c3..eeea51187d 100644 --- a/gtests/BuiltInResource.FromFile.cpp +++ b/gtests/BuiltInResource.FromFile.cpp @@ -36,7 +36,7 @@ #include -#include "StandAlone/ResourceLimits.h" +#include "glslang/Public/ResourceLimits.h" #include "TestFixture.h" namespace glslangtest { @@ -49,9 +49,19 @@ TEST_F(DefaultResourceTest, FromFile) const std::string path = GlobalTestSettings.testRoot + "/baseResults/test.conf"; std::string expectedConfig; tryLoadFile(path, "expected resource limit", &expectedConfig); - const std::string realConfig = glslang::GetDefaultTBuiltInResourceString(); + const std::string realConfig = GetDefaultTBuiltInResourceString(); ASSERT_EQ(expectedConfig, realConfig); } +TEST_F(DefaultResourceTest, UnrecognizedLimit) +{ + const std::string defaultConfig = GetDefaultTBuiltInResourceString(); + testing::internal::CaptureStdout(); + TBuiltInResource resources; + DecodeResourceLimits(&resources, const_cast(defaultConfig.c_str())); + std::string output = testing::internal::GetCapturedStdout(); + ASSERT_EQ(output.find("unrecognized limit"), std::string::npos); +} + } // anonymous namespace } // namespace glslangtest diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index c8f02828cd..1987a6d6bb 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2020 The Khronos Group Inc. +# Copyright (C) 2020-2023 The Khronos Group Inc. # # All rights reserved. # @@ -31,7 +31,7 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -if(BUILD_TESTING) +if(GLSLANG_TESTS) if(TARGET gmock) message(STATUS "Google Mock found - building tests") @@ -68,11 +68,6 @@ if(BUILD_TESTING) glslang_pch(glslangtests ${CMAKE_CURRENT_SOURCE_DIR}/pch.h) set_property(TARGET glslangtests PROPERTY FOLDER tests) glslang_set_link_args(glslangtests) - if(ENABLE_GLSLANG_INSTALL) - install(TARGETS glslangtests EXPORT glslangtestsTargets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(EXPORT glslangtestsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) - endif() set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test") # Supply a default test root directory, so that manual testing @@ -87,22 +82,18 @@ if(BUILD_TESTING) ${gtest_SOURCE_DIR}/include) if(ENABLE_OPT) - target_include_directories(glslangtests - PRIVATE ${spirv-tools_SOURCE_DIR}/include + target_link_libraries(glslangtests + PRIVATE SPIRV-Tools-opt ) endif() set(LIBRARIES - glslang OSDependent OGLCompiler glslang - SPIRV glslang-default-resource-limits) + glslang glslang-default-resource-limits) if(ENABLE_SPVREMAPPER) set(LIBRARIES ${LIBRARIES} SPVRemapper) endif() - if(ENABLE_HLSL) - set(LIBRARIES ${LIBRARIES} HLSL) - endif() target_link_libraries(glslangtests PRIVATE ${LIBRARIES} gmock) add_test(NAME glslang-gtests diff --git a/gtests/Config.FromFile.cpp b/gtests/Config.FromFile.cpp index dd18c13a93..05107e7870 100644 --- a/gtests/Config.FromFile.cpp +++ b/gtests/Config.FromFile.cpp @@ -32,7 +32,7 @@ // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. -#include "StandAlone/ResourceLimits.h" +#include "glslang/Public/ResourceLimits.h" #include "TestFixture.h" namespace glslangtest { @@ -65,7 +65,7 @@ TEST_P(ConfigTest, FromFile) char* configChars = new char[len + 1]; memcpy(configChars, configContents.data(), len); configChars[len] = 0; - glslang::DecodeResourceLimits(&resources, configChars); + DecodeResourceLimits(&resources, configChars); delete[] configChars; } diff --git a/gtests/GlslMapIO.FromFile.cpp b/gtests/GlslMapIO.FromFile.cpp index aabb4ae203..855a2af25a 100644 --- a/gtests/GlslMapIO.FromFile.cpp +++ b/gtests/GlslMapIO.FromFile.cpp @@ -39,10 +39,10 @@ #include "TestFixture.h" +#include "glslang/MachineIndependent/localintermediate.h" #include "glslang/MachineIndependent/iomapper.h" #include "glslang/MachineIndependent/reflection.h" -#ifndef GLSLANG_WEB namespace glslangtest { namespace { @@ -285,19 +285,21 @@ TEST_P(GlslMapIOTest, FromFile) result.linkingOutput = program.getInfoLog(); result.linkingError = program.getInfoDebugLog(); - unsigned int stage = 0; - glslang::TIntermediate* firstIntermediate = nullptr; - while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; } - firstIntermediate = program.getIntermediate((EShLanguage)stage); - - glslang::TDefaultGlslIoResolver resolver(*firstIntermediate); - glslang::TGlslIoMapper ioMapper; + glslang::TIoMapResolver *resolver; + for (unsigned stage = 0; stage < EShLangCount; stage++) { + resolver = program.getGlslIoResolver((EShLanguage)stage); + if (resolver) + break; + } + glslang::TIoMapper *ioMapper = glslang::GetGlslIoMapper(); if (success) { - success &= program.mapIO(&resolver, &ioMapper); + success &= program.mapIO(resolver, ioMapper); result.linkingOutput = program.getInfoLog(); result.linkingError = program.getInfoDebugLog(); } + delete ioMapper; + delete resolver; success &= verifyIOMapping(result.linkingError, program); result.validationResult = success; @@ -312,7 +314,6 @@ TEST_P(GlslMapIOTest, FromFile) spirv_binary, &logger, &options()); std::ostringstream disassembly_stream; - spv::Parameterize(); spv::Disassemble(disassembly_stream, spirv_binary); result.spirvWarningsErrors += logger.getAllMessages(); result.spirv += disassembly_stream.str(); @@ -346,10 +347,10 @@ INSTANTIATE_TEST_SUITE_P( {{"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}, + {{"iomap.crossStage.vk.2.vert", "iomap.crossStage.vk.2.geom", "iomap.crossStage.vk.2.frag" }, Semantics::Vulkan}, })) ); // clang-format on } // anonymous namespace } // namespace glslangtest -#endif diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 6c9591056d..053793df8c 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -59,12 +59,14 @@ std::string FileNameAsCustomTestSuffix( using HlslCompileTest = GlslangTest<::testing::TestWithParam>; using HlslVulkan1_1CompileTest = GlslangTest<::testing::TestWithParam>; -//using HlslSpv1_6CompileTest = GlslangTest<::testing::TestWithParam>; +using HlslVulkan1_2CompileTest = GlslangTest<::testing::TestWithParam>; +using HlslSpv1_6CompileTest = GlslangTest<::testing::TestWithParam>; using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam>; using HlslLegalizeTest = GlslangTest<::testing::TestWithParam>; using HlslDebugTest = GlslangTest<::testing::TestWithParam>; using HlslDX9CompatibleTest = GlslangTest<::testing::TestWithParam>; using HlslLegalDebugTest = GlslangTest<::testing::TestWithParam>; +using HlslNonSemanticShaderDebugInfoTest = GlslangTest<::testing::TestWithParam>; // Compiling HLSL to pre-legalized SPIR-V under Vulkan semantics. Expected // to successfully generate both AST and SPIR-V. @@ -82,14 +84,19 @@ TEST_P(HlslVulkan1_1CompileTest, FromFile) Target::BothASTAndSpv, true, GetParam().entryPoint); } -// TODO(greg-lunarg): Re-enable tests when Vulkan1.3 ClientTarget is available +TEST_P(HlslVulkan1_2CompileTest, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, Source::HLSL, Semantics::Vulkan, + glslang::EShTargetVulkan_1_2, glslang::EShTargetSpv_1_4, Target::BothASTAndSpv, true, + GetParam().entryPoint); +} -//TEST_P(HlslSpv1_6CompileTest, FromFile) -//{ -// loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, -// Source::HLSL, Semantics::Vulkan, glslang::EShTargetUniversal, glslang::EShTargetSpv_1_6, -// Target::BothASTAndSpv, true, GetParam().entryPoint); -//} +TEST_P(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) { @@ -138,6 +145,13 @@ TEST_P(HlslLegalDebugTest, FromFile) "/baseResults/", true, true); } +TEST_P(HlslNonSemanticShaderDebugInfoTest, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, + Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, + Target::Spv, true, GetParam().entryPoint, "/baseResults/", false, false, true); +} + // clang-format off INSTANTIATE_TEST_SUITE_P( ToSpirv, HlslCompileTest, @@ -156,10 +170,12 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.basic.geom", "main"}, {"hlsl.boolConv.vert", "main"}, {"hlsl.buffer.frag", "PixelShaderFunction"}, + {"hlsl.buffer-offsets.comp", "main"}, {"hlsl.calculatelod.dx10.frag", "main"}, {"hlsl.calculatelodunclamped.dx10.frag", "main"}, {"hlsl.cast.frag", "PixelShaderFunction"}, {"hlsl.cbuffer-identifier.vert", "main"}, + {"hlsl.cbuffer-offsets.comp", "main"}, {"hlsl.charLit.vert", "main"}, {"hlsl.clip.frag", "main"}, {"hlsl.clipdistance-1.frag", "main"}, @@ -199,8 +215,10 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.earlydepthstencil.frag", "main"}, {"hlsl.emptystructreturn.frag", "main"}, {"hlsl.emptystructreturn.vert", "main"}, + {"hlsl.emptystructreturn.tesc", "main"}, {"hlsl.emptystruct.init.vert", "main"}, {"hlsl.entry-in.frag", "PixelShaderFunction"}, + {"hlsl.entry-inout.vert", "main"}, {"hlsl.entry-out.frag", "PixelShaderFunction"}, {"hlsl.fraggeom.frag", "main"}, {"hlsl.float1.frag", "PixelShaderFunction"}, @@ -303,9 +321,11 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.mul-truncate.frag", "main"}, {"hlsl.multiEntry.vert", "RealEntrypoint"}, {"hlsl.multiReturn.frag", "main"}, + {"hlsl.multiView.frag", "main"}, {"hlsl.matrixindex.frag", "main"}, {"hlsl.nonstaticMemberFunction.frag", "main"}, {"hlsl.numericsuffixes.frag", "main"}, + {"hlsl.numericsuffixes.negative.frag", "main"}, {"hlsl.numthreads.comp", "main_aux2"}, {"hlsl.overload.frag", "PixelShaderFunction"}, {"hlsl.opaque-type-bug.frag", "main"}, @@ -396,10 +416,12 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.structbuffer.rw.frag", "main"}, {"hlsl.structbuffer.rwbyte.frag", "main"}, {"hlsl.structbuffer.rwbyte2.comp", "main"}, + {"hlsl.structcopy.comp", "main"}, {"hlsl.structin.vert", "main"}, {"hlsl.structIoFourWay.frag", "main"}, {"hlsl.structStructName.frag", "main"}, {"hlsl.subpass.frag", "main"}, + {"hlsl.swizzle.vec1.comp", "main"}, {"hlsl.synthesizeInput.frag", "main"}, {"hlsl.texturebuffer.frag", "main"}, {"hlsl.texture.struct.frag", "main"}, @@ -411,6 +433,7 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.matType.bool.frag", "main"}, {"hlsl.matType.int.frag", "main"}, {"hlsl.max.frag", "PixelShaderFunction"}, + {"hlsl.nested-runtimeArray.frag", "main"}, {"hlsl.preprocessor.frag", "main"}, {"hlsl.precedence.frag", "PixelShaderFunction"}, {"hlsl.precedence2.frag", "PixelShaderFunction"}, @@ -436,7 +459,8 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.typedef.frag", "PixelShaderFunction"}, {"hlsl.whileLoop.frag", "PixelShaderFunction"}, {"hlsl.void.frag", "PixelShaderFunction"}, - {"hlsl.type.type.conversion.all.frag", "main"} + {"hlsl.type.type.conversion.all.frag", "main"}, + {"hlsl.instance.geom", "GeometryShader"} }), FileNameAsCustomTestSuffix ); @@ -458,16 +482,25 @@ INSTANTIATE_TEST_SUITE_P( }), FileNameAsCustomTestSuffix ); + +INSTANTIATE_TEST_SUITE_P( + ToSpirv, HlslVulkan1_2CompileTest, + ::testing::ValuesIn(std::vector{ + {"hlsl.buffer_ref_parameter.comp", "main"}, + }), + FileNameAsCustomTestSuffix +); // clang-format on // clang-format off -//INSTANTIATE_TEST_SUITE_P( -// ToSpirv, HlslSpv1_6CompileTest, -// ::testing::ValuesIn(std::vector{ -// {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"} -// }), -// FileNameAsCustomTestSuffix -//); +INSTANTIATE_TEST_SUITE_P( + ToSpirv, HlslSpv1_6CompileTest, + ::testing::ValuesIn(std::vector{ + {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"}, + {"hlsl.structcopylogical.comp","main"}, + }), + FileNameAsCustomTestSuffix +); // clang-format on // clang-format off @@ -528,7 +561,21 @@ INSTANTIATE_TEST_SUITE_P( }), FileNameAsCustomTestSuffix ); +// clang-format on +// clang-format off +INSTANTIATE_TEST_SUITE_P( + ToSpirv, HlslNonSemanticShaderDebugInfoTest, + ::testing::ValuesIn(std::vector{ + {"spv.debuginfo.hlsl.vert", "main"}, + {"spv.debuginfo.hlsl.frag", "main"}, + {"spv.debuginfo.hlsl.comp", "main"}, + {"spv.debuginfo.hlsl.geom", "main"}, + {"spv.debuginfo.hlsl.tesc", "main"}, + {"spv.debuginfo.hlsl.tese", "main"}, + }), + FileNameAsCustomTestSuffix +); // clang-format on } // anonymous namespace diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp index 4db71c2c96..9ec67576ed 100644 --- a/gtests/Link.FromFile.Vk.cpp +++ b/gtests/Link.FromFile.Vk.cpp @@ -75,10 +75,8 @@ TEST_P(LinkTestVulkan, FromFile) result.linkingOutput = program.getInfoLog(); result.linkingError = program.getInfoDebugLog(); -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - if (success) - program.mapIO(); -#endif + if (success) + program.mapIO(); if (success && (controls & EShMsgSpvRules)) { spv::SpvBuildLogger logger; @@ -88,7 +86,6 @@ TEST_P(LinkTestVulkan, FromFile) spirv_binary, &logger, &options()); std::ostringstream disassembly_stream; - spv::Parameterize(); spv::Disassemble(disassembly_stream, spirv_binary); result.spirvWarningsErrors = logger.getAllMessages(); result.spirv = disassembly_stream.str(); diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp index 9e029fc7b2..3b769bbb6e 100644 --- a/gtests/Link.FromFile.cpp +++ b/gtests/Link.FromFile.cpp @@ -90,6 +90,9 @@ INSTANTIATE_TEST_SUITE_P( Glsl, LinkTest, ::testing::ValuesIn(std::vector>({ {"mains1.frag", "mains2.frag", "noMain1.geom", "noMain2.geom"}, + {"implicitArraySize.vert", "implicitArraySize.frag"}, + {"implicitArraySizeBuiltin.vert", "implicitArraySizeBuiltin.geom"}, + {"implicitArraySize1.geom", "implicitArraySize2.geom"}, {"noMain.vert", "mains.frag"}, {"link1.frag", "link2.frag", "link3.frag"}, {"recurse1.vert", "recurse1.frag", "recurse2.frag"}, diff --git a/gtests/Pp.FromFile.cpp b/gtests/Pp.FromFile.cpp index 92b4d24922..9cadd226ee 100644 --- a/gtests/Pp.FromFile.cpp +++ b/gtests/Pp.FromFile.cpp @@ -67,6 +67,9 @@ INSTANTIATE_TEST_SUITE_P( "preprocessor.defined.vert", "preprocessor.many.endif.vert", "preprocessor.eof_missing.vert", + "preprocess.arb_shading_language_include.vert", + "preprocess.include_directive_missing_extension.vert", + "preprocess.inactive_stringify.vert" })), FileNameAsCustomTestSuffix ); diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index ca13b88d77..2267181654 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -1,6 +1,6 @@ // // Copyright (C) 2016 Google, Inc. -// Copyright (C) 2019 ARM Limited. +// Copyright (C) 2019, 2022-2024 Arm Limited. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // // All rights reserved. @@ -65,21 +65,24 @@ std::string FileNameAsCustomTestSuffixIoMap( } using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam>; +using CompileVulkanToSpirvTestNoLink = GlslangTest<::testing::TestWithParam>; using CompileVulkanToSpirvDeadCodeElimTest = GlslangTest<::testing::TestWithParam>; -using CompileVulkanToDebugSpirvTest = GlslangTest<::testing::TestWithParam>; using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam>; using CompileToSpirv14Test = GlslangTest<::testing::TestWithParam>; -//using CompileToSpirv16Test = GlslangTest<::testing::TestWithParam>; +using CompileToSpirv16Test = GlslangTest<::testing::TestWithParam>; using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam>; using VulkanSemantics = GlslangTest<::testing::TestWithParam>; using OpenGLSemantics = GlslangTest<::testing::TestWithParam>; using VulkanAstSemantics = GlslangTest<::testing::TestWithParam>; using HlslIoMap = GlslangTest<::testing::TestWithParam>; using GlslIoMap = GlslangTest<::testing::TestWithParam>; +using CompileVulkanToSpirvTestQCOM = GlslangTest<::testing::TestWithParam>; using CompileVulkanToSpirvTestAMD = GlslangTest<::testing::TestWithParam>; using CompileVulkanToSpirvTestNV = GlslangTest<::testing::TestWithParam>; using CompileVulkanToSpirv14TestNV = GlslangTest<::testing::TestWithParam>; using CompileUpgradeTextureToSampledTextureAndDropSamplersTest = GlslangTest<::testing::TestWithParam>; +using GlslSpirvDebugInfoTest = GlslangTest<::testing::TestWithParam>; +using GlslNonSemanticShaderDebugInfoTest = GlslangTest<::testing::TestWithParam>; // Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully // generate SPIR-V. @@ -90,22 +93,21 @@ TEST_P(CompileVulkanToSpirvTest, FromFile) Target::Spv); } -TEST_P(CompileVulkanToSpirvDeadCodeElimTest, FromFile) +// Compiling GLSL to SPIR-V under Vulkan semantics without linking. Expected to successfully generate SPIR-V. +TEST_P(CompileVulkanToSpirvTestNoLink, FromFile) { - loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), - Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, - Target::Spv); + options().compileOnly = true; + // NOTE: Vulkan 1.3 is currently required to use the linkage capability + // TODO(ncesario) make sure this is actually necessary + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), Source::GLSL, Semantics::Vulkan, + glslang::EShTargetVulkan_1_3, glslang::EShTargetSpv_1_0, Target::Spv); } -// Compiling GLSL to SPIR-V with debug info under Vulkan semantics. Expected -// to successfully generate SPIR-V. -TEST_P(CompileVulkanToDebugSpirvTest, FromFile) +TEST_P(CompileVulkanToSpirvDeadCodeElimTest, FromFile) { loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), - Source::GLSL, Semantics::Vulkan, - glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, - Target::Spv, true, "", - "/baseResults/", false, true); + Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, + Target::Spv); } @@ -123,14 +125,12 @@ TEST_P(CompileToSpirv14Test, FromFile) Target::Spv); } -// TODO(greg-lunarg): Re-enable tests when Vulkan1.3 ClientTarget is available - -//TEST_P(CompileToSpirv16Test, FromFile) -//{ -// loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), -// Source::GLSL, Semantics::Vulkan, glslang::EShTargetUniversal, glslang::EShTargetSpv_1_6, -// Target::Spv); -//} +TEST_P(CompileToSpirv16Test, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_3, glslang::EShTargetSpv_1_6, + Target::Spv); +} // Compiling GLSL to SPIR-V under OpenGL semantics. Expected to successfully // generate SPIR-V. @@ -197,6 +197,15 @@ TEST_P(GlslIoMap, FromFile) GetParam().flattenUniforms); } +// Compiling GLSL to SPIR-V under Vulkan semantics (QCOM extensions enabled). +// Expected to successfully generate SPIR-V. +TEST_P(CompileVulkanToSpirvTestQCOM, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, + Target::Spv); +} + // Compiling GLSL to SPIR-V under Vulkan semantics (AMD extensions enabled). // Expected to successfully generate SPIR-V. TEST_P(CompileVulkanToSpirvTestAMD, FromFile) @@ -231,6 +240,20 @@ TEST_P(CompileUpgradeTextureToSampledTextureAndDropSamplersTest, FromFile) Target::Spv); } +TEST_P(GlslSpirvDebugInfoTest, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), Source::GLSL, Semantics::Vulkan, + glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, Target::Spv, true, "", + "/baseResults/", false, true, false); +} + +TEST_P(GlslNonSemanticShaderDebugInfoTest, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), Source::GLSL, Semantics::Vulkan, + glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, Target::Spv, true, "", + "/baseResults/", false, true, true); +} + // clang-format off INSTANTIATE_TEST_SUITE_P( Glsl, CompileVulkanToSpirvTest, @@ -260,6 +283,7 @@ INSTANTIATE_TEST_SUITE_P( "rayQuery-initialization.Error.comp", "rayQuery-global.rgen", "rayQuery-types.comp", + "rayQuery-OpConvertUToAccelerationStructureKHR.comp", "spv.set.vert", "spv.double.comp", "spv.100ops.frag", @@ -338,6 +362,13 @@ INSTANTIATE_TEST_SUITE_P( "spv.conversion.frag", "spv.coopmat.comp", "spv.coopmat_Error.comp", + "spv.coopmatKHR.comp", + "spv.coopmat_armlayout.comp", + "spv.coopmatKHR_arithmetic.comp", + "spv.coopmatKHR_arithmeticError.comp", + "spv.coopmatKHR_Error.comp", + "spv.coopmatKHR_constructor.comp", + "spv.coopmatKHR_constructorError.comp", "spv.dataOut.frag", "spv.dataOutIndirect.frag", "spv.dataOutIndirect.vert", @@ -350,6 +381,15 @@ INSTANTIATE_TEST_SUITE_P( "spv.discard-dce.frag", "spv.doWhileLoop.frag", "spv.earlyReturnDiscard.frag", + "spv.expect_assume.assumeEXT.comp", + "spv.expect_assume.expectEXT.comp", + "spv.expect_assume.expectEXT.exttypes.comp", + "spv.ext.ShaderTileImage.color.frag", + "spv.ext.ShaderTileImage.depth_stencil.frag", + "spv.ext.ShaderTileImage.subpassinput.frag", + "spv.ext.ShaderTileImage.typemismatch.frag", + "spv.ext.ShaderTileImage.overlap.frag", + "spv.ext.ShaderTileImage.wronglayout.frag", "spv.extPostDepthCoverage.frag", "spv.extPostDepthCoverage_Error.frag", "spv.float16convertonlyarith.comp", @@ -375,14 +415,19 @@ INSTANTIATE_TEST_SUITE_P( "spv.int64.frag", "spv.intcoopmat.comp", "spv.intOps.vert", + "spv.intrinsicsDebugBreak.frag", "spv.intrinsicsSpirvByReference.vert", "spv.intrinsicsSpirvDecorate.frag", + "spv.intrinsicsSpirvDecorateId.comp", + "spv.intrinsicsSpirvDecorateString.comp", "spv.intrinsicsSpirvExecutionMode.frag", + "spv.intrinsicsInteractWithCoopMat.comp", "spv.intrinsicsSpirvInstruction.vert", "spv.intrinsicsSpirvLiteral.vert", "spv.intrinsicsSpirvStorageClass.rchit", "spv.intrinsicsSpirvType.rgen", "spv.intrinsicsSpirvTypeLocalVar.vert", + "spv.intrinsicsSpirvTypeWithTypeSpecifier.vert", "spv.invariantAll.vert", "spv.layer.tese", "spv.layoutNested.vert", @@ -393,6 +438,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.matFun.vert", "spv.matrix.frag", "spv.matrix2.frag", + "spv.maximalReconvergence.vert", "spv.memoryQualifier.frag", "spv.merge-unreachable.frag", "spv.multiStruct.comp", @@ -406,6 +452,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.nonuniform4.frag", "spv.nonuniform5.frag", "spv.noWorkgroup.comp", + "spv.nvAtomicFp16Vec.frag", "spv.nullInit.comp", "spv.offsets.frag", "spv.Operations.frag", @@ -418,6 +465,8 @@ INSTANTIATE_TEST_SUITE_P( "spv.prepost.frag", "spv.privateVariableTypes.frag", "spv.qualifiers.vert", + "spv.replicate.comp", + "spv.replicatespec.comp", "spv.sample.frag", "spv.sampleId.frag", "spv.samplePosition.frag", @@ -434,6 +483,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.sparseTexture.frag", "spv.sparseTextureClamp.frag", "spv.structAssignment.frag", + "spv.structCopy.comp", "spv.structDeref.frag", "spv.structure.frag", "spv.switch.frag", @@ -446,6 +496,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.textureBuffer.vert", "spv.image.frag", "spv.imageAtomic64.frag", + "spv.imageAtomic64.comp", "spv.types.frag", "spv.uint.frag", "spv.uniformArray.frag", @@ -469,9 +520,13 @@ INSTANTIATE_TEST_SUITE_P( "spv.specConstant.float16.comp", "spv.specConstant.int16.comp", "spv.specConstant.int8.comp", + "spv.specConstantOp.int16.comp", + "spv.specConstantOp.int8.comp", + "spv.specConstantOp.float16.comp", "spv.storageBuffer.vert", "spv.terminate.frag", "spv.subgroupUniformControlFlow.vert", + "spv.subgroupSizeARB.frag", "spv.precise.tese", "spv.precise.tesc", "spv.viewportindex.tese", @@ -484,9 +539,27 @@ INSTANTIATE_TEST_SUITE_P( "spv.samplerlessTextureFunctions.frag", "spv.smBuiltins.vert", "spv.smBuiltins.frag", + "spv.ARMCoreBuiltIns.vert", + "spv.ARMCoreBuiltIns.frag", "spv.builtin.PrimitiveShadingRateEXT.vert", "spv.builtin.ShadingRateEXT.frag", - "spv.atomicAdd.bufferReference.comp" + "spv.atomicAdd.bufferReference.comp", + "spv.fragmentShaderBarycentric3.frag", + "spv.fragmentShaderBarycentric4.frag", + "spv.ext.textureShadowLod.frag", + "spv.ext.textureShadowLod.error.frag", + "spv.floatFetch.frag", + "spv.atomicRvalue.error.vert", + "spv.sampledImageBlock.frag", + "spv.multiple.var.same.const.frag", + })), + FileNameAsCustomTestSuffix +); + +INSTANTIATE_TEST_SUITE_P( + Glsl, CompileVulkanToSpirvTestNoLink, + ::testing::ValuesIn(std::vector({ + "spv.exportFunctions.comp", })), FileNameAsCustomTestSuffix ); @@ -508,15 +581,6 @@ INSTANTIATE_TEST_SUITE_P( FileNameAsCustomTestSuffix ); -// clang-format off -INSTANTIATE_TEST_SUITE_P( - Glsl, CompileVulkanToDebugSpirvTest, - ::testing::ValuesIn(std::vector({ - "spv.pp.line.frag", - })), - FileNameAsCustomTestSuffix -); - // clang-format off INSTANTIATE_TEST_SUITE_P( Glsl, CompileVulkan1_1ToSpirvTest, @@ -530,6 +594,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", @@ -549,6 +614,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.subgroupClustered.comp", "spv.subgroupClusteredNeg.comp", "spv.subgroupPartitioned.comp", + "spv.subgroupRotate.comp", "spv.subgroupShuffle.comp", "spv.subgroupShuffleRelative.comp", "spv.subgroupQuad.comp", @@ -561,6 +627,8 @@ INSTANTIATE_TEST_SUITE_P( "spv.subgroupExtendedTypesClusteredNeg.comp", "spv.subgroupExtendedTypesPartitioned.comp", "spv.subgroupExtendedTypesPartitionedNeg.comp", + "spv.subgroupExtendedTypesRotate.comp", + "spv.subgroupExtendedTypesRotateNeg.comp", "spv.subgroupExtendedTypesShuffle.comp", "spv.subgroupExtendedTypesShuffleNeg.comp", "spv.subgroupExtendedTypesShuffleRelative.comp", @@ -627,20 +695,52 @@ INSTANTIATE_TEST_SUITE_P( "spv.WorkgroupMemoryExplicitLayout.std140.comp", "spv.WorkgroupMemoryExplicitLayout.std430.comp", "spv.WorkgroupMemoryExplicitLayout.scalar.comp", + + // SPV_EXT_mesh_shader + "spv.ext.meshShaderBuiltins.mesh", + "spv.ext.meshShaderBuiltinsShadingRate.mesh", + "spv.ext.meshShaderRedeclBuiltins.mesh", + "spv.ext.meshShaderTaskMem.mesh", + "spv.ext.meshShaderUserDefined.mesh", + "spv.ext.meshTaskShader.task", + "spv.atomiAddEXT.error.mesh", + "spv.atomiAddEXT.task", + "spv.460.subgroupEXT.task", + "spv.460.subgroupEXT.mesh", + + // SPV_NV_shader_execution_reorder + + "spv.nv.hitobject-errors.rgen", + "spv.nv.hitobject-allops.rgen", + "spv.nv.hitobject-allops.rchit", + "spv.nv.hitobject-allops.rmiss", + + + // SPV_NV_displacment_micromap + + "spv.nv.dmm-allops.rgen", + "spv.nv.dmm-allops.rchit", + "spv.nv.dmm-allops.rahit", + "spv.nv.dmm-allops.mesh", + "spv.nv.dmm-allops.comp", })), FileNameAsCustomTestSuffix ); // clang-format off -//INSTANTIATE_TEST_SUITE_P( -// Glsl, CompileToSpirv16Test, -// ::testing::ValuesIn(std::vector({ -// "spv.1.6.conditionalDiscard.frag", -// "spv.1.6.helperInvocation.frag", -// "spv.1.6.specConstant.comp", -// })), -// FileNameAsCustomTestSuffix -//); +INSTANTIATE_TEST_SUITE_P( + Glsl, CompileToSpirv16Test, + ::testing::ValuesIn(std::vector({ + "spv.1.6.conditionalDiscard.frag", + "spv.1.6.helperInvocation.frag", + "spv.1.6.helperInvocation.memmodel.frag", + "spv.1.6.specConstant.comp", + "spv.1.6.samplerBuffer.frag", + "spv.1.6.separate.frag", + "spv.1.6.quad.frag", + })), + FileNameAsCustomTestSuffix +); // clang-format off @@ -658,7 +758,7 @@ INSTANTIATE_TEST_SUITE_P( { "spv.register.autoassign.rangetest.frag", "main", glslang::TQualifier::layoutBindingEnd-2, glslang::TQualifier::layoutBindingEnd+5, - 20, 30, true, false }, + 0, 20, 30, true, false }, }), FileNameAsCustomTestSuffixIoMap ); @@ -706,6 +806,7 @@ INSTANTIATE_TEST_SUITE_P( "vulkan.vert", "vulkan.comp", "samplerlessTextureFunctions.frag", + "spv.intrinsicsFakeEnable.vert", "spv.specConstArrayCheck.vert", })), FileNameAsCustomTestSuffix @@ -731,6 +832,22 @@ INSTANTIATE_TEST_SUITE_P( FileNameAsCustomTestSuffix ); +INSTANTIATE_TEST_SUITE_P( + Glsl, CompileVulkanToSpirvTestQCOM, + ::testing::ValuesIn(std::vector({ + "spv.tpipSampleWeighted.frag", + "spv.tpipBoxFilter.frag", + "spv.tpipBlockMatchSSD.frag", + "spv.tpipBlockMatchSAD.frag", + "spv.tpipTextureArrays.frag", + "spv.tpipBlockMatchGatherSAD.frag", + "spv.tpipBlockMatchGatherSSD.frag", + "spv.tpipBlockMatchWindowSAD.frag", + "spv.tpipBlockMatchWindowSSD.frag", + })), + FileNameAsCustomTestSuffix +); + INSTANTIATE_TEST_SUITE_P( Glsl, CompileVulkanToSpirvTestAMD, ::testing::ValuesIn(std::vector({ @@ -779,6 +896,8 @@ INSTANTIATE_TEST_SUITE_P( "spv.fragmentShaderBarycentric2.frag", "spv.computeShaderDerivatives.comp", "spv.computeShaderDerivatives2.comp", + "spv.computeShaderDerivativesSpec.comp", + "spv.computeShaderDerivativesSpec2.comp", "spv.shaderImageFootprint.frag", "spv.meshShaderBuiltins.mesh", "spv.meshShaderUserDefined.mesh", @@ -807,6 +926,7 @@ INSTANTIATE_TEST_SUITE_P( })), FileNameAsCustomTestSuffix ); + INSTANTIATE_TEST_SUITE_P( Glsl, CompileUpgradeTextureToSampledTextureAndDropSamplersTest, ::testing::ValuesIn(std::vector({ @@ -814,6 +934,34 @@ INSTANTIATE_TEST_SUITE_P( })), FileNameAsCustomTestSuffix ); + +INSTANTIATE_TEST_SUITE_P( + Glsl, GlslSpirvDebugInfoTest, + ::testing::ValuesIn(std::vector({ + "spv.pp.line.frag", + })), + FileNameAsCustomTestSuffix +); + +INSTANTIATE_TEST_SUITE_P( + Glsl, GlslNonSemanticShaderDebugInfoTest, + ::testing::ValuesIn(std::vector({ + "spv.debuginfo.glsl.vert", + "spv.debuginfo.glsl.frag", + "spv.debuginfo.glsl.comp", + "spv.debuginfo.glsl.geom", + "spv.debuginfo.glsl.tesc", + "spv.debuginfo.glsl.tese", + "spv.debuginfo.bufferref.glsl.frag", + "spv.debuginfo.const_params.glsl.comp", + "spv.debuginfo.scalar_types.glsl.frag", + "spv.debuginfo.rt_types.glsl.rgen", + "spv.debuginfo.include.glsl.frag", + "spv.debuginfo.multiline.glsl.frag", + "spv.debuginfo.implicit_br.glsl.frag", + })), + FileNameAsCustomTestSuffix +); // clang-format on } // anonymous namespace diff --git a/gtests/TestFixture.cpp b/gtests/TestFixture.cpp index ced6fcce6e..4c935f8850 100644 --- a/gtests/TestFixture.cpp +++ b/gtests/TestFixture.cpp @@ -73,9 +73,9 @@ EShLanguage GetShaderStage(const std::string& stage) } else if (stage == "rcall") { return EShLangCallable; } else if (stage == "task") { - return EShLangTaskNV; + return EShLangTask; } else if (stage == "mesh") { - return EShLangMeshNV; + return EShLangMesh; } else { assert(0 && "Unknown shader stage"); return EShLangCount; diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h index 2b057dcb0e..ab548f5627 100644 --- a/gtests/TestFixture.h +++ b/gtests/TestFixture.h @@ -35,6 +35,7 @@ #ifndef GLSLANG_GTESTS_TEST_FIXTURE_H #define GLSLANG_GTESTS_TEST_FIXTURE_H +#include #include #include #include @@ -48,7 +49,8 @@ #include "SPIRV/disassemble.h" #include "SPIRV/doc.h" #include "SPIRV/SPVRemapper.h" -#include "StandAlone/ResourceLimits.h" +#include "glslang/Include/Types.h" +#include "glslang/Public/ResourceLimits.h" #include "glslang/Public/ShaderLang.h" #include "Initializer.h" @@ -198,9 +200,42 @@ class GlslangTest : public GT { } else shader->setStringsWithLengths(&shaderStrings, &shaderLengths, 1); if (!entryPointName.empty()) shader->setEntryPoint(entryPointName.c_str()); - return shader->parse( - (resources ? resources : &glslang::DefaultTBuiltInResource), - defaultVersion, isForwardCompatible, controls); + + // A includer that always assumes header name is a relative path to the test folder. + class GlslangTestIncluder : public glslang::TShader::Includer { + public: + virtual IncludeResult* includeLocal(const char* headerName, const char* /*includerName*/, + size_t /*inclusionDepth*/) override + { + std::string path = GLSLANG_TEST_DIRECTORY; + path += '/'; + path += headerName; + std::replace(path.begin(), path.end(), '\\', '/'); + + auto [success, fileContent] = ReadFile(path); + if (success) { + auto buffer = new char[fileContent.size() + 1]; + std::copy(fileContent.begin(), fileContent.end(), buffer); + buffer[fileContent.size()] = '\0'; + + return new IncludeResult(headerName, buffer, fileContent.size(), buffer); + } + + return nullptr; + } + + virtual void releaseInclude(IncludeResult* result) override + { + if (result != nullptr) { + delete[] static_cast(result->userData); + delete result; + } + } + }; + + GlslangTestIncluder includer; + return shader->parse((resources ? resources : GetDefaultResources()), defaultVersion, isForwardCompatible, + controls, includer); } // Compiles and links the given source |code| of the given shader @@ -217,6 +252,7 @@ class GlslangTest : public GT { EShTextureSamplerTransformMode texSampTransMode = EShTexSampTransKeep, bool enableOptimizer = false, bool enableDebug = false, + bool enableNonSemanticShaderDebugInfo = false, bool automap = true) { const EShLanguage stage = GetShaderStage(GetSuffix(shaderName)); @@ -247,36 +283,57 @@ class GlslangTest : public GT { } } + if (options().compileOnly) + shader.setCompileOnly(); + bool success = compile( &shader, code, entryPointName, controls, nullptr, &shaderName); glslang::TProgram program; - program.addShader(&shader); - success &= program.link(controls); -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - if (success) - program.mapIO(); -#endif - - if (success && (controls & EShMsgSpvRules)) { - spv::SpvBuildLogger logger; - std::vector spirv_binary; + spv::SpvBuildLogger logger; + std::vector spirv_binary; + + if (!options().compileOnly) { + program.addShader(&shader); + success &= program.link(controls); + if (success) + program.mapIO(); + + if (success && (controls & EShMsgSpvRules)) { + options().disableOptimizer = !enableOptimizer; + options().generateDebugInfo = enableDebug; + options().emitNonSemanticShaderDebugInfo = enableNonSemanticShaderDebugInfo; + options().emitNonSemanticShaderDebugSource = enableNonSemanticShaderDebugInfo; + glslang::GlslangToSpv(*program.getIntermediate(stage), spirv_binary, &logger, &options()); + } else { + return {{ + {shaderName, shader.getInfoLog(), shader.getInfoDebugLog()}, + }, + program.getInfoLog(), + program.getInfoDebugLog(), + true, + "", + ""}; + } + } else { options().disableOptimizer = !enableOptimizer; options().generateDebugInfo = enableDebug; - glslang::GlslangToSpv(*program.getIntermediate(stage), - spirv_binary, &logger, &options()); - - std::ostringstream disassembly_stream; - spv::Parameterize(); - spv::Disassemble(disassembly_stream, spirv_binary); - bool validation_result = !options().validate || logger.getAllMessages().empty(); - return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},}, - program.getInfoLog(), program.getInfoDebugLog(), - validation_result, logger.getAllMessages(), disassembly_stream.str()}; - } else { - return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},}, - program.getInfoLog(), program.getInfoDebugLog(), true, "", ""}; + options().emitNonSemanticShaderDebugInfo = enableNonSemanticShaderDebugInfo; + options().emitNonSemanticShaderDebugSource = enableNonSemanticShaderDebugInfo; + glslang::GlslangToSpv(*shader.getIntermediate(), spirv_binary, &logger, &options()); } + + std::ostringstream disassembly_stream; + spv::Disassemble(disassembly_stream, spirv_binary); + bool validation_result = !options().validate || logger.getAllMessages().empty(); + return {{ + {shaderName, shader.getInfoLog(), shader.getInfoDebugLog()}, + }, + program.getInfoLog(), + program.getInfoDebugLog(), + validation_result, + logger.getAllMessages(), + disassembly_stream.str()}; } // Compiles and links the given source |code| of the given shader @@ -315,10 +372,8 @@ class GlslangTest : public GT { program.addShader(&shader); success &= program.link(controls); -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (success) program.mapIO(); -#endif spv::SpvBuildLogger logger; @@ -328,7 +383,6 @@ class GlslangTest : public GT { spirv_binary, &logger, &options()); std::ostringstream disassembly_stream; - spv::Parameterize(); spv::Disassemble(disassembly_stream, spirv_binary); bool validation_result = !options().validate || logger.getAllMessages().empty(); return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},}, @@ -360,21 +414,19 @@ class GlslangTest : public GT { glslang::TProgram program; program.addShader(&shader); success &= program.link(controls); -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (success) program.mapIO(); -#endif if (success && (controls & EShMsgSpvRules)) { spv::SpvBuildLogger logger; + std::vector whiteListStrings; std::vector spirv_binary; glslang::GlslangToSpv(*program.getIntermediate(stage), spirv_binary, &logger, &options()); - spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions); + spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, whiteListStrings, remapOptions); std::ostringstream disassembly_stream; - spv::Parameterize(); spv::Disassemble(disassembly_stream, spirv_binary); bool validation_result = !options().validate || logger.getAllMessages().empty(); return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},}, @@ -394,11 +446,10 @@ class GlslangTest : public GT { { if ((controls & EShMsgSpvRules)) { std::vector spirv_binary(code); // scratch copy + std::vector whiteListStrings; + spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, whiteListStrings, remapOptions); - spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions); - std::ostringstream disassembly_stream; - spv::Parameterize(); spv::Disassemble(disassembly_stream, spirv_binary); return {{{shaderName, "", ""},}, @@ -447,7 +498,8 @@ class GlslangTest : public GT { const std::string& entryPointName="", const std::string& baseDir="/baseResults/", const bool enableOptimizer = false, - const bool enableDebug = false) + const bool enableDebug = false, + const bool enableNonSemanticShaderDebugInfo = false) { const std::string inputFname = testDir + "/" + testName; const std::string expectedOutputFname = @@ -463,9 +515,10 @@ class GlslangTest : public GT { if (enableDebug) controls = static_cast(controls | EShMsgDebugInfo); GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion, - targetLanguageVersion, false, EShTexSampTransKeep, enableOptimizer, enableDebug, automap); + targetLanguageVersion, false, EShTexSampTransKeep, enableOptimizer, enableDebug, + enableNonSemanticShaderDebugInfo, automap); - // Generate the hybrid output in the way of glslangValidator. + // Generate the hybrid output in the way of glslang. std::ostringstream stream; outputResultToStream(&stream, result, controls); @@ -495,7 +548,7 @@ class GlslangTest : public GT { GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion, targetLanguageVersion, false, EShTexSampTransKeep, false, automap); - // Generate the hybrid output in the way of glslangValidator. + // Generate the hybrid output in the way of glslang. std::ostringstream stream; outputResultToStream(&stream, result, controls); @@ -521,7 +574,7 @@ class GlslangTest : public GT { GlslangResult result = compileAndLink(testName, input, entryPointName, controls, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, true); - // Generate the hybrid output in the way of glslangValidator. + // Generate the hybrid output in the way of glslang. std::ostringstream stream; outputResultToStream(&stream, result, controls); @@ -558,7 +611,7 @@ class GlslangTest : public GT { autoMapBindings, flattenUniformArrays); - // Generate the hybrid output in the way of glslangValidator. + // Generate the hybrid output in the way of glslang. std::ostringstream stream; outputResultToStream(&stream, result, controls); @@ -585,7 +638,7 @@ class GlslangTest : public GT { const EShMessages controls = DeriveOptions(source, semantics, target); GlslangResult result = compileLinkRemap(testName, input, entryPointName, controls, remapOptions); - // Generate the hybrid output in the way of glslangValidator. + // Generate the hybrid output in the way of glslang. std::ostringstream stream; outputResultToStream(&stream, result, controls); @@ -612,7 +665,7 @@ class GlslangTest : public GT { const EShMessages controls = DeriveOptions(source, semantics, target); GlslangResult result = remap(testName, input, controls, remapOptions); - // Generate the hybrid output in the way of glslangValidator. + // Generate the hybrid output in the way of glslang. std::ostringstream stream; outputResultToStream(&stream, result, controls); @@ -634,8 +687,8 @@ class GlslangTest : public GT { std::string ppShader; glslang::TShader::ForbidIncluder includer; const bool success = shader.preprocess( - &glslang::DefaultTBuiltInResource, defaultVersion, defaultProfile, - forceVersionProfile, isForwardCompatible, (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors), + GetDefaultResources(), defaultVersion, defaultProfile, forceVersionProfile, isForwardCompatible, + (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors), &ppShader, includer); std::string log = shader.getInfoLog(); @@ -692,7 +745,7 @@ class GlslangTest : public GT { glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, false, EShTexSampTransUpgradeTextureRemoveSampler); - // Generate the hybrid output in the way of glslangValidator. + // Generate the hybrid output in the way of glslang. std::ostringstream stream; outputResultToStream(&stream, result, controls); diff --git a/gtests/VkRelaxed.FromFile.cpp b/gtests/VkRelaxed.FromFile.cpp index 777134d913..8b8a628aa8 100644 --- a/gtests/VkRelaxed.FromFile.cpp +++ b/gtests/VkRelaxed.FromFile.cpp @@ -42,7 +42,6 @@ #include "glslang/MachineIndependent/iomapper.h" #include "glslang/MachineIndependent/reflection.h" -#ifndef GLSLANG_WEB namespace glslangtest { namespace { @@ -107,8 +106,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; } } @@ -238,19 +237,21 @@ TEST_P(VulkanRelaxedTest, FromFile) shaders[i]->setResourceSetBinding(resourceSetBindings[i]); } - unsigned int stage = 0; - glslang::TIntermediate* firstIntermediate = nullptr; - while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; } - firstIntermediate = program.getIntermediate((EShLanguage)stage); - - glslang::TDefaultGlslIoResolver resolver(*firstIntermediate); - glslang::TGlslIoMapper ioMapper; + glslang::TIoMapResolver *resolver; + for (unsigned stage = 0; stage < EShLangCount; stage++) { + resolver = program.getGlslIoResolver((EShLanguage)stage); + if (resolver) + break; + } + glslang::TIoMapper *ioMapper = glslang::GetGlslIoMapper(); if (success) { - success &= program.mapIO(&resolver, &ioMapper); + success &= program.mapIO(resolver, ioMapper); result.linkingOutput = program.getInfoLog(); result.linkingError = program.getInfoDebugLog(); } + delete ioMapper; + delete resolver; success &= verifyIOMapping(result.linkingError, program); result.validationResult = success; @@ -265,7 +266,6 @@ TEST_P(VulkanRelaxedTest, FromFile) spirv_binary, &logger, &options()); std::ostringstream disassembly_stream; - spv::Parameterize(); spv::Disassemble(disassembly_stream, spirv_binary); result.spirvWarningsErrors += logger.getAllMessages(); result.spirv += disassembly_stream.str(); @@ -291,10 +291,11 @@ TEST_P(VulkanRelaxedTest, FromFile) INSTANTIATE_TEST_SUITE_P( Glsl, VulkanRelaxedTest, ::testing::ValuesIn(std::vector({ - {{"vk.relaxed.frag"}}, - {{"vk.relaxed.link1.frag", "vk.relaxed.link2.frag"}}, - {{"vk.relaxed.stagelink.vert", "vk.relaxed.stagelink.frag"}}, - {{"vk.relaxed.errorcheck.vert", "vk.relaxed.errorcheck.frag"}}, + {{"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"} } }, })) ); @@ -302,4 +303,3 @@ INSTANTIATE_TEST_SUITE_P( } // anonymous namespace } // namespace glslangtest -#endif diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt deleted file mode 100644 index 7d5bc152ac..0000000000 --- a/hlsl/CMakeLists.txt +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (C) 2020 The Khronos Group Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of The Khronos Group Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# The HLSL source is directly embedded into the glslang target when ENABLE_HLSL -# is set. -# This source now lives at: glslang/HLSL/ -# The HLSL target is now just a stub that exists for backwards compatibility for -# projects that referenced this target. - -add_library(HLSL ${LIB_TYPE} "stub.cpp") -set_property(TARGET HLSL PROPERTY FOLDER hlsl) -set_property(TARGET HLSL PROPERTY POSITION_INDEPENDENT_CODE ON) - -if(WIN32 AND BUILD_SHARED_LIBS) - set_target_properties(HLSL PROPERTIES PREFIX "") -endif() - -if(ENABLE_GLSLANG_INSTALL) - if(BUILD_SHARED_LIBS) - install(TARGETS HLSL EXPORT HLSLTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - else() - install(TARGETS HLSL EXPORT HLSLTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif() - install(EXPORT HLSLTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) -endif() diff --git a/known_good.json b/known_good.json index 052de57b0a..1108a920b7 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,21 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "7d768812e20296c877a44ce0633d71f952fbf83c" + "commit": "6dcc7e350a0b9871a825414d42329e44b0eb8109" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "eddd4dfc930f1374a70797460240a501c7d333f7" + "commit" : "2a9b6f951c7d6b04b6c21fe1bf3f475b68b84801" + }, + { + "name": "googletest", + "site": "github", + "subrepo": "google/googletest", + "subdir": "External/googletest", + "commit": "v1.14.0" } ] } diff --git a/known_good_khr.json b/known_good_khr.json index a64198a81f..7911c71441 100644 --- a/known_good_khr.json +++ b/known_good_khr.json @@ -13,6 +13,13 @@ "subrepo" : "spirv/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", "commit" : "gitlab-prelim-rc4" + }, + { + "name": "googletest", + "site": "github", + "subrepo": "google/googletest", + "subdir": "External/googletest", + "commit": "v1.14.0" } ] } diff --git a/kokoro/android-ndk-build/build-docker.sh b/kokoro/android-ndk-build/build-docker.sh index 2b23b27a75..94edcd3fc4 100755 --- a/kokoro/android-ndk-build/build-docker.sh +++ b/kokoro/android-ndk-build/build-docker.sh @@ -43,6 +43,7 @@ using ndk-r21d export NDK_PROJECT_PATH="${ROOT_DIR}/ndk_test" export APP_BUILD_SCRIPT="${ROOT_DIR}/ndk_test/Android.mk" +export APP_PLATFORM=android-24 # Vulkan introduced in API 24 echo "Building..." ndk-build -j diff --git a/kokoro/linux-clang-cmake/build-docker.sh b/kokoro/linux-clang-cmake/build-docker.sh index c5fdcd2356..01627a56be 100755 --- a/kokoro/linux-clang-cmake/build-docker.sh +++ b/kokoro/linux-clang-cmake/build-docker.sh @@ -42,9 +42,10 @@ set -x # Display commands being run. using cmake-3.17.2 using clang-10.0.0 using ninja-1.10.0 +using python-3.12 echo "Building..." mkdir /build && cd /build -cmake "$ROOT_DIR" -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS +cmake "$ROOT_DIR" -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS -DENABLE_OPT=0 ninja install diff --git a/kokoro/linux-clang-gn/build-docker.sh b/kokoro/linux-clang-gn/build-docker.sh index 1035ab88ce..6540b1be0d 100755 --- a/kokoro/linux-clang-gn/build-docker.sh +++ b/kokoro/linux-clang-gn/build-docker.sh @@ -34,8 +34,17 @@ # POSSIBILITY OF SUCH DAMAGE. set -e # Fail on any error. + +. /bin/using.sh # Declare the bash `using` function for configuring toolchains. + set -x # Display commands being run. +using ninja-1.10.0 + +# Disable git's "detected dubious ownership" error - kokoro checks out the repo +# with a different user, and we don't care about this warning. +git config --global --add safe.directory '*' + echo "Fetching external projects..." ./update_glslang_sources.py diff --git a/kokoro/linux-clang-gn/build.sh b/kokoro/linux-clang-gn/build.sh index 563432a1ad..111f5294ee 100755 --- a/kokoro/linux-clang-gn/build.sh +++ b/kokoro/linux-clang-gn/build.sh @@ -38,6 +38,7 @@ set -e # Fail on any error. SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )" ROOT_DIR="$( cd "${SCRIPT_DIR}/../.." >/dev/null 2>&1 && pwd )" +set +e # Allow build failure docker run --rm -i \ --volume "${ROOT_DIR}:${ROOT_DIR}" \ --workdir "${ROOT_DIR}" \ @@ -46,4 +47,9 @@ docker run --rm -i \ --entrypoint "${SCRIPT_DIR}/build-docker.sh" \ "gcr.io/shaderc-build/radial-build:latest" +# This is important. If the permissions are not fixed, kokoro will fail +# to pull build artifacts, and put the build in tool-failure state, which +# blocks the logs. +RESULT=$? sudo chown -R "$(id -u):$(id -g)" "${ROOT_DIR}" +exit $RESULT diff --git a/kokoro/linux-clang-release-bazel/build.sh b/kokoro/linux-clang-release-bazel/build.sh deleted file mode 100644 index 190e3d7024..0000000000 --- a/kokoro/linux-clang-release-bazel/build.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -# Copyright (C) 2019 Google, Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# Linux Build Script. - -# Fail on any error. -set -e -# Display commands being run. -set -x - -CC=clang -CXX=clang++ -SRC=$PWD/github/glslang -cd $SRC - -# Bazel limitation: No 'External' directory is allowed!! -mv External third_party - -gsutil cp gs://bazel/0.29.1/release/bazel-0.29.1-linux-x86_64 . -chmod +x bazel-0.29.1-linux-x86_64 - -echo $(date): Build everything... -./bazel-0.29.1-linux-x86_64 build :all -echo $(date): Build completed. - -echo $(date): Starting bazel test... -./bazel-0.29.1-linux-x86_64 test :all --test_output=all -echo $(date): Bazel test completed. diff --git a/kokoro/linux-clang-release-bazel/continuous.cfg b/kokoro/linux-clang-release-bazel/continuous.cfg deleted file mode 100644 index 767556d0b4..0000000000 --- a/kokoro/linux-clang-release-bazel/continuous.cfg +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2019 Google, Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# Continuous build configuration. -build_file: "glslang/kokoro/linux-clang-release-bazel/build.sh" diff --git a/kokoro/linux-clang-release-bazel/presubmit.cfg b/kokoro/linux-clang-release-bazel/presubmit.cfg deleted file mode 100644 index 669491f829..0000000000 --- a/kokoro/linux-clang-release-bazel/presubmit.cfg +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2019 Google, Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# Presubmit build configuration. -build_file: "glslang/kokoro/linux-clang-release-bazel/build.sh" diff --git a/kokoro/linux-gcc-cmake/build-docker.sh b/kokoro/linux-gcc-cmake/build-docker.sh index 0edc05e24b..65e013e2c6 100755 --- a/kokoro/linux-gcc-cmake/build-docker.sh +++ b/kokoro/linux-gcc-cmake/build-docker.sh @@ -42,9 +42,10 @@ set -x # Display commands being run. using cmake-3.17.2 using gcc-9 using ninja-1.10.0 +using python-3.12 echo "Building..." mkdir /build && cd /build -cmake "$ROOT_DIR" -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS +cmake "$ROOT_DIR" -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS -DENABLE_OPT=0 ninja install diff --git a/kokoro/macos-clang-release-bazel/build.sh b/kokoro/macos-clang-release-bazel/build.sh deleted file mode 100644 index 8f1b2516b2..0000000000 --- a/kokoro/macos-clang-release-bazel/build.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -# Copyright (C) 2019 Google, Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# macOS Build Script. - -# Fail on any error. -set -e -# Display commands being run. -set -x - -CC=clang -CXX=clang++ -SRC=$PWD/github/glslang -cd $SRC - -mv External third_party - -# Get bazel 0.29.1. -gsutil cp gs://bazel/0.29.1/release/bazel-0.29.1-darwin-x86_64 . -chmod +x bazel-0.29.1-darwin-x86_64 - -echo $(date): Build everything... -./bazel-0.29.1-darwin-x86_64 build :all -echo $(date): Build completed. - -echo $(date): Starting bazel test... -./bazel-0.29.1-darwin-x86_64 test :all --test_output=all -echo $(date): Bazel test completed. diff --git a/kokoro/macos-clang-release-bazel/continuous.cfg b/kokoro/macos-clang-release-bazel/continuous.cfg deleted file mode 100644 index f1980790e2..0000000000 --- a/kokoro/macos-clang-release-bazel/continuous.cfg +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2019 Google, Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# Continuous build configuration. -build_file: "glslang/kokoro/macos-clang-release-bazel/build.sh" diff --git a/kokoro/macos-clang-release-bazel/presubmit.cfg b/kokoro/macos-clang-release-bazel/presubmit.cfg deleted file mode 100644 index daa30be5cb..0000000000 --- a/kokoro/macos-clang-release-bazel/presubmit.cfg +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2019 Google, Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# Presubmit build configuration. -build_file: "glslang/kokoro/macos-clang-release-bazel/build.sh" diff --git a/kokoro/windows-msvc-2015-release-bazel/build.bat b/kokoro/windows-msvc-2015-release-bazel/build.bat deleted file mode 100644 index fb2009b187..0000000000 --- a/kokoro/windows-msvc-2015-release-bazel/build.bat +++ /dev/null @@ -1,75 +0,0 @@ -:: Copyright (C) 2019 Google, Inc. -:: -:: All rights reserved. -:: -:: Redistribution and use in source and binary forms, with or without -:: modification, are permitted provided that the following conditions -:: are met: -:: -:: Redistributions of source code must retain the above copyright -:: notice, this list of conditions and the following disclaimer. -:: -:: Redistributions in binary form must reproduce the above -:: copyright notice, this list of conditions and the following -:: disclaimer in the documentation and/or other materials provided -:: with the distribution. -:: -:: Neither the name of Google Inc. nor the names of its -:: contributors may be used to endorse or promote products derived -:: from this software without specific prior written permission. -:: -:: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -:: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -:: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -:: FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -:: COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -:: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -:: BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -:: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -:: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -:: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -:: ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -:: POSSIBILITY OF SUCH DAMAGE. -:: Copyright (c) 2019 Google LLC. -:: -:: Windows Build Script. - -@echo on - -set SRC=%cd%\github\glslang - -:: Force usage of python 3.6 -set PATH=C:\python36;%PATH% -cd %SRC% - -mv External third_party - -:: REM Install Bazel. -wget -q https://github.com/bazelbuild/bazel/releases/download/0.29.1/bazel-0.29.1-windows-x86_64.zip -unzip -q bazel-0.29.1-windows-x86_64.zip - -:: Set up MSVC -call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 -set BAZEL_VS=C:\Program Files (x86)\Microsoft Visual Studio 14.0 -set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC -set BAZEL_SH=c:\tools\msys64\usr\bin\bash.exe -set BAZEL_PYTHON=c:\tools\python2\python.exe - -:: ######################################### -:: Start building. -:: ######################################### -echo "Build everything... %DATE% %TIME%" -bazel.exe build :all -if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL% -echo "Build Completed %DATE% %TIME%" - -:: ############## -:: Run the tests -:: ############## -echo "Running Tests... %DATE% %TIME%" -bazel.exe test :all --test_output=all -if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL% -echo "Tests Completed %DATE% %TIME%" - -exit /b 0 - diff --git a/kokoro/windows-msvc-2015-release-bazel/continuous.cfg b/kokoro/windows-msvc-2015-release-bazel/continuous.cfg deleted file mode 100644 index 554d29de57..0000000000 --- a/kokoro/windows-msvc-2015-release-bazel/continuous.cfg +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2019 Google, Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# Continuous build configuration. -build_file: "glslang/kokoro/windows-msvc-2015-release-bazel/build.bat" diff --git a/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg b/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg deleted file mode 100644 index 4980bb6b58..0000000000 --- a/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2019 Google, Inc. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# Presubmit build configuration. -build_file: "glslang/kokoro/windows-msvc-2015-release-bazel/build.bat" diff --git a/license-checker.cfg b/license-checker.cfg index 51ce2762c8..15b8f9729e 100644 --- a/license-checker.cfg +++ b/license-checker.cfg @@ -36,6 +36,7 @@ "SPIRV/GLSL.*.h", "SPIRV/NonSemanticDebugPrintf.h", + "SPIRV/NonSemanticShaderDebugInfo100.h", "SPIRV/spirv.hpp" ] } diff --git a/ndk_test/Android.mk b/ndk_test/Android.mk index b1b2207c44..897ace0067 100644 --- a/ndk_test/Android.mk +++ b/ndk_test/Android.mk @@ -38,8 +38,8 @@ LOCAL_CPP_EXTENSION := .cc .cpp .cxx LOCAL_SRC_FILES:=test.cpp LOCAL_MODULE:=glslang_ndk_test LOCAL_LDLIBS:=-landroid -LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti -Werror -LOCAL_STATIC_LIBRARIES:=glslang SPIRV HLSL +LOCAL_CXXFLAGS:=-std=c++17 -fno-exceptions -fno-rtti -Werror +LOCAL_STATIC_LIBRARIES:=glslang include $(BUILD_SHARED_LIBRARY) include $(LOCAL_PATH)/../Android.mk diff --git a/ndk_test/jni/Application.mk b/ndk_test/jni/Application.mk index 07b7615733..0eb8ffdf66 100644 --- a/ndk_test/jni/Application.mk +++ b/ndk_test/jni/Application.mk @@ -34,5 +34,5 @@ APP_ABI := all APP_BUILD_SCRIPT := Android.mk APP_STL := c++_static -APP_PLATFORM := android-9 +APP_PLATFORM := android-24 NDK_TOOLCHAIN_VERSION := 4.9 diff --git a/update_glslang_sources.py b/update_glslang_sources.py index 65be2f6a2c..2e02c96eeb 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. # @@ -17,12 +17,9 @@ """Get source files for Glslang and its dependencies from public repositories. """ -from __future__ import print_function - import argparse import json -import distutils.dir_util -import os.path +import os import subprocess import sys @@ -106,7 +103,7 @@ def HasCommit(self): cwd=self.subdir) def Clone(self): - distutils.dir_util.mkpath(self.subdir) + os.makedirs(self.subdir, exist_ok=True) command_output(['git', 'clone', self.GetUrl(), '.'], self.subdir) def Fetch(self): @@ -139,7 +136,7 @@ def main(): commits = GetGoodCommits(args.site) - distutils.dir_util.mkpath(args.dir) + os.makedirs(args.dir, exist_ok=True) print('Change directory to {d}'.format(d=args.dir)) os.chdir(args.dir)