diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2024-12-12 14:52:14 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-12 14:52:14 +0800 |
| commit | 626e81478f2bcf759567975a3c94478374d1811d (patch) | |
| tree | cf9e1b331203e891b448b8edd5675800d1cbcfaf | |
| parent | 2999cb72a297152699a099b0f7762143dcc9a055 (diff) | |
Bump spirv-header/tools/glslang (#5834)
* Back out "Update SPIRV submodules (#5815)"
This backs out commit e50aac13e2c161d672b137a62f6d66820d0f9ff1.
* Use upstream spirv-tools
* Fix bump-glslang.sh for newer versions of spirv-tools
* Use upstream glslang
* Add --do-fetch option to bump glslang
* Bump glslang and friends
Supersedes https://github.com/shader-slang/slang/pull/5815
* Regenerate glslang and spirv-tools outputs
* Fixes to slang-glslang
* Correct spirv intrinsic for OpImageSampleFootprintNV
Note that this currently fails validation with the following error:
```
error: line 145: Result <id> from OpSampledImage instruction must not appear as operand for OpImageSampleFootprintNV, since it is not specified as taking an OpTypeSampledImage. Found result <id> '55[%sampledImage]' as an operand of <id> '56[%resultVal]'.
%sampledImage = OpSampledImage %54 %51 %40
```
This seems to be in error as the spec for
*SPV_NV_shader_image_footprint* states that "Sampled Image must be an
object whose type is OpTypeSampledImage"
https://refined-github-html-preview.kidonng.workers.dev/KhronosGroup/SPIRV-Registry/raw/refs/heads/main/extensions/NV/SPV_NV_shader_image_footprint.html
glslang also seems to fail with the same validation error
* Fix spv storage class test
| -rw-r--r-- | .gitmodules | 4 | ||||
| -rwxr-xr-x | external/bump-glslang.sh | 32 | ||||
| m--------- | external/glslang | 0 | ||||
| -rw-r--r-- | external/glslang-generated/glslang/build_info.h | 2 | ||||
| m--------- | external/spirv-headers | 0 | ||||
| m--------- | external/spirv-tools | 0 | ||||
| -rw-r--r-- | external/spirv-tools-generated/build-version.inc | 2 | ||||
| -rw-r--r-- | external/spirv-tools-generated/generators.inc | 3 | ||||
| -rw-r--r-- | external/spirv-tools-generated/options-pinned.h | 261 | ||||
| -rw-r--r-- | source/slang-glslang/slang-glslang.cpp | 5 | ||||
| -rw-r--r-- | source/slang/hlsl.meta.slang | 7 | ||||
| -rw-r--r-- | tests/bindings/binding-spv-storage-class.slang | 32 | ||||
| -rw-r--r-- | tests/gpu-feature/texture/query/footprint/nv-shader-texture-footprint.slang | 46 |
13 files changed, 339 insertions, 55 deletions
diff --git a/.gitmodules b/.gitmodules index 29dff6c36..d5bfdc007 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "external/glslang"] path = external/glslang - url = https://github.com/shader-slang/glslang.git + url = https://github.com/KhronosGroup/glslang [submodule "external/tinyobjloader"] path = external/tinyobjloader url = https://github.com/syoyo/tinyobjloader @@ -15,7 +15,7 @@ url = https://github.com/shader-slang/slang-binaries [submodule "external/spirv-tools"] path = external/spirv-tools - url = https://github.com/shader-slang/SPIRV-Tools.git + url = https://github.com/KhronosGroup/SPIRV-Tools.git [submodule "external/spirv-headers"] path = external/spirv-headers url = https://github.com/KhronosGroup/SPIRV-Headers.git diff --git a/external/bump-glslang.sh b/external/bump-glslang.sh index d3923cf0e..fcd2d87d3 100755 --- a/external/bump-glslang.sh +++ b/external/bump-glslang.sh @@ -4,7 +4,7 @@ set -e EXTERNAL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" -refDef=refs/heads/master +refDef=refs/heads/main ref=$refDef upstreamDef=https://github.com/KhronosGroup/glslang upstream=$upstreamDef @@ -27,6 +27,9 @@ while [[ "$#" -gt 0 ]]; do --do-commit) do_commit=1 ;; + --do-fetch) + do_fetch=1 + ;; *) echo "Unknown parameter passed: $1" >&2 exit 1 @@ -47,6 +50,10 @@ $me: Update external/glslang and dependencies - Optionally commit the changes Options: + --do-fetch : Fetch new changes to glslang spirv-tools spirv-headers, if + this isn't specified then the ref/release/upstream options do + nothing + --ref 2b2523f : merge this specific commit into our branch defaults to $refDef @@ -89,6 +96,7 @@ spirv_headers=$EXTERNAL_DIR/spirv-headers spirv_tools=$EXTERNAL_DIR/spirv-tools spirv_tools_generated=$EXTERNAL_DIR/spirv-tools-generated effcee=$spirv_tools/external/effcee +absl=$spirv_tools/external/effcee/third_party/abseil_cpp re2=$spirv_tools/external/re2 if ! test -f "$glslang/.git"; then @@ -127,22 +135,28 @@ merge_dep() { new_ref["$1"]=$(git -C "$dir" describe --exclude master-tot --tags HEAD) } -merge_dep glslang "$glslang" "$upstream" "$ref" +if [ "$do_fetch" ]; then + merge_dep glslang "$glslang" "$upstream" "$ref" -spirv_tools_upstream=https://github.com/$( - jq <"$glslang/known_good.json" \ - ".commits | .[] | select(.name == \"spirv-tools\") | .subrepo" \ - --raw-output -) -merge_dep spirv-tools "$spirv_tools" "$spirv_tools_upstream" "$(known_good_commit "spirv-tools")" + spirv_tools_upstream=https://github.com/$( + jq <"$glslang/known_good.json" \ + ".commits | .[] | select(.name == \"spirv-tools\") | .subrepo" \ + --raw-output + ) + + merge_dep spirv-tools "$spirv_tools" "$spirv_tools_upstream" "$(known_good_commit "spirv-tools")" -bump_dep "$spirv_headers" "spirv-tools/external/spirv-headers" + bump_dep "$spirv_headers" "spirv-tools/external/spirv-headers" +fi # Make sure we have the dependencies of spirv-tools up to date test -d "$effcee" || git clone https://github.com/google/effcee.git "$effcee" git -C "$effcee" pull +test -d "$absl" || git clone https://github.com/abseil/abseil-cpp "$absl" +git -C "$absl" pull + test -d "$re2" || git clone https://github.com/google/re2.git "$re2" git -C "$re2" pull diff --git a/external/glslang b/external/glslang -Subproject d86ef8a6e2b10508266ec8d63d64e866479d70d +Subproject a0995c49ebcaca2c6d3b03efbabf74f3843decd diff --git a/external/glslang-generated/glslang/build_info.h b/external/glslang-generated/glslang/build_info.h index 9327e840e..328c273f0 100644 --- a/external/glslang-generated/glslang/build_info.h +++ b/external/glslang-generated/glslang/build_info.h @@ -34,7 +34,7 @@ #ifndef GLSLANG_BUILD_INFO #define GLSLANG_BUILD_INFO -#define GLSLANG_VERSION_MAJOR 12 +#define GLSLANG_VERSION_MAJOR 15 #define GLSLANG_VERSION_MINOR 0 #define GLSLANG_VERSION_PATCH 0 #define GLSLANG_VERSION_FLAVOR "" diff --git a/external/spirv-headers b/external/spirv-headers -Subproject 3f17b2af6784bfa2c5aa5dbb8e0e74a607dd8b3 +Subproject 36d5e2ddaa54c70d2f29081510c66f4fc98e5e5 diff --git a/external/spirv-tools b/external/spirv-tools -Subproject 43bc4b9ae891ec34c6b033d96a6ed86510b9995 +Subproject 2b315c2eabe906a71757b598dfa2ee46dbd59dd diff --git a/external/spirv-tools-generated/build-version.inc b/external/spirv-tools-generated/build-version.inc index 04be7c922..996ada19a 100644 --- a/external/spirv-tools-generated/build-version.inc +++ b/external/spirv-tools-generated/build-version.inc @@ -1 +1 @@ -"v2024.4", "SPIRV-Tools v2024.4 v2022.2-764-g43bc4b9a" +"v2024.4", "SPIRV-Tools v2024.4 v2024.4.rc2-0-g4d2f0b40" diff --git a/external/spirv-tools-generated/generators.inc b/external/spirv-tools-generated/generators.inc index 35973e133..993e7152a 100644 --- a/external/spirv-tools-generated/generators.inc +++ b/external/spirv-tools-generated/generators.inc @@ -43,5 +43,4 @@ {42, "Rendong Liang", "spq", "Rendong Liang spq"}, {43, "LLVM", "LLVM SPIR-V Backend", "LLVM LLVM SPIR-V Backend"}, {44, "Robert Konrad", "Kongruent", "Robert Konrad Kongruent"}, -{45, "Kitsunebi Games", "Nuvk SPIR-V Emitter and DLSL compiler", "Kitsunebi Games Nuvk SPIR-V Emitter and DLSL compiler"}, -{46, "Nintendo", "", "Nintendo"},
\ No newline at end of file +{45, "Kitsunebi Games", "Nuvk SPIR-V Emitter and DLSL compiler", "Kitsunebi Games Nuvk SPIR-V Emitter and DLSL compiler"},
\ No newline at end of file diff --git a/external/spirv-tools-generated/options-pinned.h b/external/spirv-tools-generated/options-pinned.h new file mode 100644 index 000000000..72d3a6762 --- /dev/null +++ b/external/spirv-tools-generated/options-pinned.h @@ -0,0 +1,261 @@ +// Copyright 2019 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------- +// File: options.h +// ----------------------------------------------------------------------------- +// +// This file contains Abseil configuration options for setting specific +// implementations instead of letting Abseil determine which implementation to +// use at compile-time. Setting these options may be useful for package or build +// managers who wish to guarantee ABI stability within binary builds (which are +// otherwise difficult to enforce). +// +// *** IMPORTANT NOTICE FOR PACKAGE MANAGERS: It is important that +// maintainers of package managers who wish to package Abseil read and +// understand this file! *** +// +// Abseil contains a number of possible configuration endpoints, based on +// parameters such as the detected platform, language version, or command-line +// flags used to invoke the underlying binary. As is the case with all +// libraries, binaries which contain Abseil code must ensure that separate +// packages use the same compiled copy of Abseil to avoid a diamond dependency +// problem, which can occur if two packages built with different Abseil +// configuration settings are linked together. Diamond dependency problems in +// C++ may manifest as violations to the One Definition Rule (ODR) (resulting in +// linker errors), or undefined behavior (resulting in crashes). +// +// Diamond dependency problems can be avoided if all packages utilize the same +// exact version of Abseil. Building from source code with the same compilation +// parameters is the easiest way to avoid such dependency problems. However, for +// package managers who cannot control such compilation parameters, we are +// providing the file to allow you to inject ABI (Application Binary Interface) +// stability across builds. Settings options in this file will neither change +// API nor ABI, providing a stable copy of Abseil between packages. +// +// Care must be taken to keep options within these configurations isolated +// from any other dynamic settings, such as command-line flags which could alter +// these options. This file is provided specifically to help build and package +// managers provide a stable copy of Abseil within their libraries and binaries; +// other developers should not have need to alter the contents of this file. +// +// ----------------------------------------------------------------------------- +// Usage +// ----------------------------------------------------------------------------- +// +// For any particular package release, set the appropriate definitions within +// this file to whatever value makes the most sense for your package(s). Note +// that, by default, most of these options, at the moment, affect the +// implementation of types; future options may affect other implementation +// details. +// +// NOTE: the defaults within this file all assume that Abseil can select the +// proper Abseil implementation at compile-time, which will not be sufficient +// to guarantee ABI stability to package managers. + +#ifndef ABSL_BASE_OPTIONS_H_ +#define ABSL_BASE_OPTIONS_H_ + +// ----------------------------------------------------------------------------- +// Type Compatibility Options +// ----------------------------------------------------------------------------- +// +// ABSL_OPTION_USE_STD_ANY +// +// This option controls whether absl::any is implemented as an alias to +// std::any, or as an independent implementation. +// +// A value of 0 means to use Abseil's implementation. This requires only C++11 +// support, and is expected to work on every toolchain we support. +// +// A value of 1 means to use an alias to std::any. This requires that all code +// using Abseil is built in C++17 mode or later. +// +// A value of 2 means to detect the C++ version being used to compile Abseil, +// and use an alias only if a working std::any is available. This option is +// useful when you are building your entire program, including all of its +// dependencies, from source. It should not be used otherwise -- for example, +// if you are distributing Abseil in a binary package manager -- since in +// mode 2, absl::any will name a different type, with a different mangled name +// and binary layout, depending on the compiler flags passed by the end user. +// For more info, see https://abseil.io/about/design/dropin-types. +// +// User code should not inspect this macro. To check in the preprocessor if +// absl::any is a typedef of std::any, use the feature macro ABSL_USES_STD_ANY. + +#define ABSL_OPTION_USE_STD_ANY 1 + + +// ABSL_OPTION_USE_STD_OPTIONAL +// +// This option controls whether absl::optional is implemented as an alias to +// std::optional, or as an independent implementation. +// +// A value of 0 means to use Abseil's implementation. This requires only C++11 +// support, and is expected to work on every toolchain we support. +// +// A value of 1 means to use an alias to std::optional. This requires that all +// code using Abseil is built in C++17 mode or later. +// +// A value of 2 means to detect the C++ version being used to compile Abseil, +// and use an alias only if a working std::optional is available. This option +// is useful when you are building your program from source. It should not be +// used otherwise -- for example, if you are distributing Abseil in a binary +// package manager -- since in mode 2, absl::optional will name a different +// type, with a different mangled name and binary layout, depending on the +// compiler flags passed by the end user. For more info, see +// https://abseil.io/about/design/dropin-types. + +// User code should not inspect this macro. To check in the preprocessor if +// absl::optional is a typedef of std::optional, use the feature macro +// ABSL_USES_STD_OPTIONAL. + +#define ABSL_OPTION_USE_STD_OPTIONAL 1 + + +// ABSL_OPTION_USE_STD_STRING_VIEW +// +// This option controls whether absl::string_view is implemented as an alias to +// std::string_view, or as an independent implementation. +// +// A value of 0 means to use Abseil's implementation. This requires only C++11 +// support, and is expected to work on every toolchain we support. +// +// A value of 1 means to use an alias to std::string_view. This requires that +// all code using Abseil is built in C++17 mode or later. +// +// A value of 2 means to detect the C++ version being used to compile Abseil, +// and use an alias only if a working std::string_view is available. This +// option is useful when you are building your program from source. It should +// not be used otherwise -- for example, if you are distributing Abseil in a +// binary package manager -- since in mode 2, absl::string_view will name a +// different type, with a different mangled name and binary layout, depending on +// the compiler flags passed by the end user. For more info, see +// https://abseil.io/about/design/dropin-types. +// +// User code should not inspect this macro. To check in the preprocessor if +// absl::string_view is a typedef of std::string_view, use the feature macro +// ABSL_USES_STD_STRING_VIEW. + +#define ABSL_OPTION_USE_STD_STRING_VIEW 1 + +// ABSL_OPTION_USE_STD_VARIANT +// +// This option controls whether absl::variant is implemented as an alias to +// std::variant, or as an independent implementation. +// +// A value of 0 means to use Abseil's implementation. This requires only C++11 +// support, and is expected to work on every toolchain we support. +// +// A value of 1 means to use an alias to std::variant. This requires that all +// code using Abseil is built in C++17 mode or later. +// +// A value of 2 means to detect the C++ version being used to compile Abseil, +// and use an alias only if a working std::variant is available. This option +// is useful when you are building your program from source. It should not be +// used otherwise -- for example, if you are distributing Abseil in a binary +// package manager -- since in mode 2, absl::variant will name a different +// type, with a different mangled name and binary layout, depending on the +// compiler flags passed by the end user. For more info, see +// https://abseil.io/about/design/dropin-types. +// +// User code should not inspect this macro. To check in the preprocessor if +// absl::variant is a typedef of std::variant, use the feature macro +// ABSL_USES_STD_VARIANT. + +#define ABSL_OPTION_USE_STD_VARIANT 1 + +// ABSL_OPTION_USE_STD_ORDERING +// +// This option controls whether absl::{partial,weak,strong}_ordering are +// implemented as aliases to the std:: ordering types, or as an independent +// implementation. +// +// A value of 0 means to use Abseil's implementation. This requires only C++11 +// support, and is expected to work on every toolchain we support. +// +// A value of 1 means to use aliases. This requires that all code using Abseil +// is built in C++20 mode or later. +// +// A value of 2 means to detect the C++ version being used to compile Abseil, +// and use an alias only if working std:: ordering types are available. This +// option is useful when you are building your program from source. It should +// not be used otherwise -- for example, if you are distributing Abseil in a +// binary package manager -- since in mode 2, they will name different types, +// with different mangled names and binary layout, depending on the compiler +// flags passed by the end user. For more info, see +// https://abseil.io/about/design/dropin-types. +// +// User code should not inspect this macro. To check in the preprocessor if +// the ordering types are aliases of std:: ordering types, use the feature macro +// ABSL_USES_STD_ORDERING. + +#define ABSL_OPTION_USE_STD_ORDERING 0 + +// ABSL_OPTION_USE_INLINE_NAMESPACE +// ABSL_OPTION_INLINE_NAMESPACE_NAME +// +// These options controls whether all entities in the absl namespace are +// contained within an inner inline namespace. This does not affect the +// user-visible API of Abseil, but it changes the mangled names of all symbols. +// +// This can be useful as a version tag if you are distributing Abseil in +// precompiled form. This will prevent a binary library build of Abseil with +// one inline namespace being used with headers configured with a different +// inline namespace name. Binary packagers are reminded that Abseil does not +// guarantee any ABI stability in Abseil, so any update of Abseil or +// configuration change in such a binary package should be combined with a +// new, unique value for the inline namespace name. +// +// A value of 0 means not to use inline namespaces. +// +// A value of 1 means to use an inline namespace with the given name inside +// namespace absl. If this is set, ABSL_OPTION_INLINE_NAMESPACE_NAME must also +// be changed to a new, unique identifier name. In particular "head" is not +// allowed. + +#define ABSL_OPTION_USE_INLINE_NAMESPACE 0 +#define ABSL_OPTION_INLINE_NAMESPACE_NAME head + +// ABSL_OPTION_HARDENED +// +// This option enables a "hardened" build in release mode (in this context, +// release mode is defined as a build where the `NDEBUG` macro is defined). +// +// A value of 0 means that "hardened" mode is not enabled. +// +// A value of 1 means that "hardened" mode is enabled with all checks. +// +// A value of 2 means that "hardened" mode is partially enabled, with +// only a subset of checks chosen to minimize performance impact. +// +// Hardened builds have additional security checks enabled when `NDEBUG` is +// defined. Defining `NDEBUG` is normally used to turn `assert()` macro into a +// no-op, as well as disabling other bespoke program consistency checks. By +// defining ABSL_OPTION_HARDENED to 1, a select set of checks remain enabled in +// release mode. These checks guard against programming errors that may lead to +// security vulnerabilities. In release mode, when one of these programming +// errors is encountered, the program will immediately abort, possibly without +// any attempt at logging. +// +// The checks enabled by this option are not free; they do incur runtime cost. +// +// The checks enabled by this option are always active when `NDEBUG` is not +// defined, even in the case when ABSL_OPTION_HARDENED is defined to 0. The +// checks enabled by this option may abort the program in a different way and +// log additional information when `NDEBUG` is not defined. + +#define ABSL_OPTION_HARDENED 0 + +#endif // ABSL_BASE_OPTIONS_H_ diff --git a/source/slang-glslang/slang-glslang.cpp b/source/slang-glslang/slang-glslang.cpp index 6bfd112a7..4abcada62 100644 --- a/source/slang-glslang/slang-glslang.cpp +++ b/source/slang-glslang/slang-glslang.cpp @@ -2,8 +2,7 @@ #include "slang-glslang.h" #include "SPIRV/GlslangToSpv.h" -#include "SPIRV/disassemble.h" -#include "glslang/Public/ResourceLimits.h" +#include "glslang/MachineIndependent/localintermediate.h" #include "glslang/Public/ShaderLang.h" #include "slang.h" #include "spirv-tools/libspirv.h" @@ -13,6 +12,8 @@ #include <windows.h> #endif +#include <cassert> +#include <iostream> #include <memory> #include <mutex> #include <sstream> diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 35b88f9dc..194c14b19 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -19785,7 +19785,6 @@ ${ } [__NoSideEffect] - [ForceInline] __glsl_version(450) __glsl_extension(GL_NV_shader_texture_footprint) [require(glsl_spirv, texturefootprint)] @@ -19813,7 +19812,6 @@ ${ } [__NoSideEffect] - [ForceInline] __glsl_version(450) __glsl_extension(GL_NV_shader_texture_footprint) [require(glsl_spirv, texturefootprint)] @@ -19842,7 +19840,6 @@ ${ } [__NoSideEffect] - [ForceInline] __glsl_version(450) __glsl_extension(GL_NV_shader_texture_footprint) __glsl_extension(GL_ARB_sparse_texture_clamp) @@ -19873,7 +19870,6 @@ ${ } [__NoSideEffect] - [ForceInline] __glsl_version(450) __glsl_extension(GL_NV_shader_texture_footprint) __glsl_extension(GL_ARB_sparse_texture_clamp) @@ -19905,7 +19901,6 @@ ${ } [__NoSideEffect] - [ForceInline] __glsl_version(450) __glsl_extension(GL_NV_shader_texture_footprint) [__requiresNVAPI] @@ -19939,7 +19934,6 @@ ${{{ // Texture sampling with gradient is only available for 2D textures. }}} [__NoSideEffect] - [ForceInline] __glsl_version(450) __glsl_extension(GL_NV_shader_texture_footprint) [__requiresNVAPI] @@ -19970,7 +19964,6 @@ ${{{ } [__NoSideEffect] - [ForceInline] __glsl_version(450) __glsl_extension(GL_NV_shader_texture_footprint) __glsl_extension(GL_ARB_sparse_texture_clamp) diff --git a/tests/bindings/binding-spv-storage-class.slang b/tests/bindings/binding-spv-storage-class.slang index 5e93a1fbd..bb0ad3af3 100644 --- a/tests/bindings/binding-spv-storage-class.slang +++ b/tests/bindings/binding-spv-storage-class.slang @@ -35,21 +35,21 @@ void main(out float3 pos) pos.xy, 0); } -// SPIRV: OpDecorate %myStruct1{{.*}} Binding 1 -// SPIRV: OpDecorate %myStruct1{{.*}} DescriptorSet 1 -// SPIRV: OpDecorate %myStruct2{{.*}} Binding 2 -// SPIRV: OpDecorate %myStruct2{{.*}} DescriptorSet 1 -// SPIRV: OpDecorate %texture{{.*}} Binding 3 -// SPIRV: OpDecorate %texture{{.*}} DescriptorSet 1 -// SPIRV: OpDecorate %sampler{{.*}} Binding 4 -// SPIRV: OpDecorate %sampler{{.*}} DescriptorSet 1 +// SPIRV-DAG: OpDecorate %myStruct1{{.*}} Binding 1 +// SPIRV-DAG: OpDecorate %myStruct1{{.*}} DescriptorSet 1 +// SPIRV-DAG: OpDecorate %myStruct2{{.*}} Binding 2 +// SPIRV-DAG: OpDecorate %myStruct2{{.*}} DescriptorSet 1 +// SPIRV-DAG: OpDecorate %texture{{.*}} Binding 3 +// SPIRV-DAG: OpDecorate %texture{{.*}} DescriptorSet 1 +// SPIRV-DAG: OpDecorate %sampler{{.*}} Binding 4 +// SPIRV-DAG: OpDecorate %sampler{{.*}} DescriptorSet 1 // // -// GL-SPIRV: OpDecorate %myStruct1{{.*}} DescriptorSet 1 -// GL-SPIRV: OpDecorate %myStruct1{{.*}} Binding 1 -// GL-SPIRV: OpDecorate %myStruct2{{.*}} DescriptorSet 1 -// GL-SPIRV: OpDecorate %myStruct2{{.*}} Binding 2 -// GL-SPIRV: OpDecorate %texture{{.*}} DescriptorSet 1 -// GL-SPIRV: OpDecorate %texture{{.*}} Binding 3 -// GL-SPIRV: OpDecorate %sampler{{.*}} DescriptorSet 1 -// GL-SPIRV: OpDecorate %sampler{{.*}} Binding 4 +// GL-SPIRV-DAG: OpDecorate %myStruct1{{.*}} DescriptorSet 1 +// GL-SPIRV-DAG: OpDecorate %myStruct1{{.*}} Binding 1 +// GL-SPIRV-DAG: OpDecorate %myStruct2{{.*}} DescriptorSet 1 +// GL-SPIRV-DAG: OpDecorate %myStruct2{{.*}} Binding 2 +// GL-SPIRV-DAG: OpDecorate %texture{{.*}} DescriptorSet 1 +// GL-SPIRV-DAG: OpDecorate %texture{{.*}} Binding 3 +// GL-SPIRV-DAG: OpDecorate %sampler{{.*}} DescriptorSet 1 +// GL-SPIRV-DAG: OpDecorate %sampler{{.*}} Binding 4 diff --git a/tests/gpu-feature/texture/query/footprint/nv-shader-texture-footprint.slang b/tests/gpu-feature/texture/query/footprint/nv-shader-texture-footprint.slang index fbef718de..55181a383 100644 --- a/tests/gpu-feature/texture/query/footprint/nv-shader-texture-footprint.slang +++ b/tests/gpu-feature/texture/query/footprint/nv-shader-texture-footprint.slang @@ -1,5 +1,5 @@ //TEST:SIMPLE(filecheck=SPIRV):-target spirv-assembly -emit-spirv-via-glsl -entry fragmentMain -stage fragment -DENABLE_CLAMP -//TEST:SIMPLE(filecheck=SPIRV):-target spirv -entry fragmentMain -stage fragment -DENABLE_CLAMP -O0 +//TEST:SIMPLE(filecheck=SPIRV):-target spirv -entry fragmentMain -stage fragment -DENABLE_CLAMP //DISABLED_TEST:SIMPLE(filecheck=SPIRV):-target spirv-assembly -entry fragmentMain -stage fragment -DENABLE_CLAMP -emit-spirv-directly //DISABLED_TEST:SIMPLE(filecheck=DXIL):-target dxil-assembly -entry fragmentMain -stage fragment @@ -148,41 +148,57 @@ CLAMP( accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##GradClamp TEST_2D(Coarse); -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[TRUE]]{{$}} +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[TRUE]] // HLSL-DAG: NvFootprintCoarse{{.*}}NV_EXTN_TEXTURE_2D -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[TRUE]] Bias % +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[TRUE]] Bias // HLSL-DAG: NvFootprintCoarseBias{{.*}}NV_EXTN_TEXTURE_2D -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[TRUE]] MinLod % -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[TRUE]] Bias|MinLod % +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[TRUE]] MinLod -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[TRUE]] Lod % +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[TRUE]] Bias|MinLod + +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[TRUE]] Lod // HLSL-DAG: NvFootprintCoarseLevel{{.*}}NV_EXTN_TEXTURE_2D -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[TRUE]] Grad % +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[TRUE]] Grad // HLSL-DAG: NvFootprintCoarseGrad{{.*}}NV_EXTN_TEXTURE_2D -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[TRUE]] Grad|MinLod % +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[TRUE]] Grad|MinLod TEST_2D(Fine); -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[FALSE]]{{$}} +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[FALSE]] // HLSL-DAG: NvFootprintFine{{.*}}NV_EXTN_TEXTURE_2D -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[FALSE]] Bias % +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[FALSE]] Bias // HLSL-DAG: NvFootprintFineBias{{.*}}NV_EXTN_TEXTURE_2D -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[FALSE]] MinLod % -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[FALSE]] Bias|MinLod % +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[FALSE]] MinLod -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[FALSE]] Lod % +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[FALSE]] Bias|MinLod + +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[FALSE]] Lod // HLSL-DAG: NvFootprintFineLevel{{.*}}NV_EXTN_TEXTURE_2D -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[FALSE]] Grad % +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[FALSE]] Grad // HLSL-DAG: NvFootprintFineGrad{{.*}}NV_EXTN_TEXTURE_2D -// SPIRV-DAG: OpImageSampleFootprintNV {{.*}} [[FALSE]] Grad|MinLod % +// SPIRV: OpImageSampleFootprintNV +// SPIRV-SAME: [[FALSE]] Grad|MinLod } |
