Merge remote-tracking branch 'upstream/master' into patch-3

This commit is contained in:
nihuini 2020-12-24 10:33:22 +08:00
commit 08e4874a56
257 changed files with 12592 additions and 6719 deletions

0
.gitattributes vendored Executable file → Normal file
View File

7
.gitignore vendored
View File

@ -11,3 +11,10 @@ Test/localResults/
External/googletest External/googletest
External/spirv-tools External/spirv-tools
out/ out/
# GN generated files
.cipd/
*.gclient_entries
third_party/
buildtools/
tools/

39
.gn Normal file
View File

@ -0,0 +1,39 @@
# Copyright (C) 2020 The Khronos Group Inc.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# Neither the name of The Khronos Group Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
buildconfig = "//build/config/BUILDCONFIG.gn"
default_args = {
clang_use_chrome_plugins = false
use_custom_libcxx = false
}

View File

@ -61,7 +61,17 @@ install:
fi fi
before_script: before_script:
- git clone --depth=1 https://github.com/google/googletest.git External/googletest # check out pre-breakage version of googletest; can be deleted when
# issue 3128 is fixed
# git clone --depth=1 https://github.com/google/googletest.git External/googletest
- mkdir -p External/googletest
- cd External/googletest
- git init
- git remote add origin https://github.com/google/googletest.git
- git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
- git reset --hard FETCH_HEAD
- cd ../..
# get spirv-tools and spirv-headers
- ./update_glslang_sources.py - ./update_glslang_sources.py
script: script:

View File

@ -76,6 +76,9 @@ if (!defined(glslang_angle)) {
config("glslang_public") { config("glslang_public") {
include_dirs = [ "." ] include_dirs = [ "." ]
if (!is_win || is_clang) {
cflags = [ "-Wno-conversion" ]
}
} }
config("glslang_hlsl") { config("glslang_hlsl") {
@ -243,6 +246,8 @@ template("glslang_sources_common") {
] ]
} }
include_dirs = [ "${target_gen_dir}/include" ]
deps = [ ":glslang_build_info" ] deps = [ ":glslang_build_info" ]
if (invoker.enable_opt) { if (invoker.enable_opt) {
@ -250,10 +255,9 @@ template("glslang_sources_common") {
"${spirv_tools_dir}:spvtools_opt", "${spirv_tools_dir}:spvtools_opt",
"${spirv_tools_dir}:spvtools_val", "${spirv_tools_dir}:spvtools_val",
] ]
include_dirs += [ "${spirv_tools_dir}/include" ]
} }
include_dirs = [ "${target_gen_dir}/include" ]
configs -= _configs_to_remove configs -= _configs_to_remove
configs += _configs_to_add configs += _configs_to_add
} }
@ -299,7 +303,10 @@ executable("glslang_validator") {
] ]
public_configs = [ ":glslang_hlsl" ] public_configs = [ ":glslang_hlsl" ]
include_dirs = [ "${target_gen_dir}/include" ] include_dirs = [
"${target_gen_dir}/include",
"${spirv_tools_dir}/include",
]
configs -= _configs_to_remove configs -= _configs_to_remove
configs += _configs_to_add configs += _configs_to_add
@ -310,6 +317,8 @@ executable("spirv-remap") {
defines = [ "ENABLE_OPT=1" ] defines = [ "ENABLE_OPT=1" ]
deps = [ ":glslang_sources" ] deps = [ ":glslang_sources" ]
include_dirs = [ "${spirv_tools_dir}/include" ]
configs -= _configs_to_remove configs -= _configs_to_remove
configs += _configs_to_add configs += _configs_to_add
} }

View File

@ -228,9 +228,15 @@ function(glslang_set_link_args TARGET)
endif() endif()
endfunction(glslang_set_link_args) endfunction(glslang_set_link_args)
if(NOT COMMAND find_host_package)
macro(find_host_package)
find_package(${ARGN})
endmacro()
endif()
# CMake needs to find the right version of python, right from the beginning, # CMake needs to find the right version of python, right from the beginning,
# otherwise, it will find the wrong version and fail later # otherwise, it will find the wrong version and fail later
find_package(PythonInterp 3 REQUIRED) find_host_package(PythonInterp 3 REQUIRED)
# Root directory for build-time generated include files # Root directory for build-time generated include files
set(GLSLANG_GENERATED_INCLUDEDIR "${CMAKE_BINARY_DIR}/include") set(GLSLANG_GENERATED_INCLUDEDIR "${CMAKE_BINARY_DIR}/include")

82
DEPS Normal file
View File

@ -0,0 +1,82 @@
# Copyright (C) 2020 The Khronos Group Inc.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# Neither the name of The Khronos Group Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
use_relative_paths = True
gclient_gn_args_file = 'build/config/gclient_args.gni'
vars = {
'chromium_git': 'https://chromium.googlesource.com',
'build_with_chromium': False,
}
deps = {
'./build': {
'url': '{chromium_git}/chromium/src/build.git@85ee3b7692e5284f08bd3c9459fb5685eed7b838',
'condition': 'not build_with_chromium',
},
'./buildtools': {
'url': '{chromium_git}/chromium/src/buildtools.git@4be464e050b3d05060471788f926b34c641db9fd',
'condition': 'not build_with_chromium',
},
'./tools/clang': {
'url': '{chromium_git}/chromium/src/tools/clang.git@3a982adabb720aa8f3e3885d40bf3fe506990157',
'condition': 'not build_with_chromium',
},
}
hooks = [
{
'name': 'sysroot_x64',
'pattern': '.',
'condition': 'checkout_linux and (checkout_x64 and not build_with_chromium)',
'action': ['python', './build/linux/sysroot_scripts/install-sysroot.py',
'--arch=x64'],
},
{
# Note: On Win, this should run after win_toolchain, as it may use it.
'name': 'clang',
'pattern': '.',
'action': ['python', './tools/clang/scripts/update.py'],
'condition': 'not build_with_chromium',
},
]
recursedeps = [
# buildtools provides clang_format, libc++, and libc++abi
'buildtools',
]

41
README.md Executable file → Normal file
View File

@ -88,7 +88,7 @@ The applied stage-specific rules are based on the file extension:
There is also a non-shader extension There is also a non-shader extension
* `.conf` for a configuration file of limits, see usage statement for example * `.conf` for a configuration file of limits, see usage statement for example
## Building ## Building (CMake)
Instead of building manually, you can also download the binaries for your 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 [master-tot release][master-tot-release] on GitHub.
@ -125,6 +125,15 @@ cd <the directory glslang was cloned to, "External" will be a subdirectory>
git clone https://github.com/google/googletest.git External/googletest 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, 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 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: integrated test suite, install spirv-tools with this:
@ -184,6 +193,36 @@ cmake --build . --config Release --target install
If using MSVC, after running CMake to configure, use the If using MSVC, after running CMake to configure, use the
Configuration Manager to check the `INSTALL` project. Configuration Manager to check the `INSTALL` project.
### Building (GN)
glslang can also be built with the [GN build system](https://gn.googlesource.com/gn/).
#### 1) Install `depot_tools`
Download [depot_tools.zip](https://storage.googleapis.com/chrome-infra/depot_tools.zip),
extract to a directory, and add this directory to your `PATH`.
#### 2) Synchronize dependencies and generate build files
This only needs to be done once after updating `glslang`.
With the current directory set to your `glslang` checkout, type:
```bash
./update_glslang_sources.py
gclient sync --gclientfile=standalone.gclient
gn gen out/Default
```
#### 3) Build
With the current directory set to your `glslang` checkout, type:
```bash
cd out/Default
ninja
```
### If you need to change the GLSL grammar ### If you need to change the GLSL grammar
The grammar in `glslang/MachineIndependent/glslang.y` has to be recompiled with The grammar in `glslang/MachineIndependent/glslang.y` has to be recompiled with

View File

@ -36,5 +36,6 @@ static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fu
static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density"; static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density";
static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation"; static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation";
static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_atomic_float_add"; static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_atomic_float_add";
static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64";
#endif // #ifndef GLSLextEXT_H #endif // #ifndef GLSLextEXT_H

View File

@ -48,4 +48,7 @@ static const char* const E_SPV_KHR_shader_clock = "SPV_KHR_shade
static const char* const E_SPV_KHR_non_semantic_info = "SPV_KHR_non_semantic_info"; static const char* const E_SPV_KHR_non_semantic_info = "SPV_KHR_non_semantic_info";
static const char* const E_SPV_KHR_ray_tracing = "SPV_KHR_ray_tracing"; static const char* const E_SPV_KHR_ray_tracing = "SPV_KHR_ray_tracing";
static const char* const E_SPV_KHR_ray_query = "SPV_KHR_ray_query"; static const char* const E_SPV_KHR_ray_query = "SPV_KHR_ray_query";
static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragment_shading_rate";
static const char* const E_SPV_KHR_terminate_invocation = "SPV_KHR_terminate_invocation";
#endif // #ifndef GLSLextKHR_H #endif // #ifndef GLSLextKHR_H

View File

@ -149,6 +149,7 @@ protected:
spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier); spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier);
spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier); spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier);
spv::Decoration TranslateNonUniformDecoration(const glslang::TQualifier& qualifier); spv::Decoration TranslateNonUniformDecoration(const glslang::TQualifier& qualifier);
spv::Decoration TranslateNonUniformDecoration(const spv::Builder::AccessChain::CoherentFlags& coherentFlags);
spv::Builder::AccessChain::CoherentFlags TranslateCoherent(const glslang::TType& type); spv::Builder::AccessChain::CoherentFlags TranslateCoherent(const glslang::TType& type);
spv::MemoryAccessMask TranslateMemoryAccess(const spv::Builder::AccessChain::CoherentFlags &coherentFlags); spv::MemoryAccessMask TranslateMemoryAccess(const spv::Builder::AccessChain::CoherentFlags &coherentFlags);
spv::ImageOperandsMask TranslateImageOperands(const spv::Builder::AccessChain::CoherentFlags &coherentFlags); spv::ImageOperandsMask TranslateImageOperands(const spv::Builder::AccessChain::CoherentFlags &coherentFlags);
@ -189,6 +190,7 @@ protected:
bool originalParam(glslang::TStorageQualifier, const glslang::TType&, bool implicitThisParam); bool originalParam(glslang::TStorageQualifier, const glslang::TType&, bool implicitThisParam);
void makeFunctions(const glslang::TIntermSequence&); void makeFunctions(const glslang::TIntermSequence&);
void makeGlobalInitializers(const glslang::TIntermSequence&); void makeGlobalInitializers(const glslang::TIntermSequence&);
void collectRayTracingLinkerObjects();
void visitFunctions(const glslang::TIntermSequence&); void visitFunctions(const glslang::TIntermSequence&);
void handleFunctionEntry(const glslang::TIntermAggregate* node); void handleFunctionEntry(const glslang::TIntermAggregate* node);
void translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments, void translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments,
@ -272,6 +274,9 @@ protected:
// requiring local translation to and from SPIR-V type on every access. // requiring local translation to and from SPIR-V type on every access.
// Maps <builtin-variable-id -> AST-required-type-id> // Maps <builtin-variable-id -> AST-required-type-id>
std::unordered_map<spv::Id, spv::Id> forceType; std::unordered_map<spv::Id, spv::Id> forceType;
// Used later for generating OpTraceKHR/OpExecuteCallableKHR
std::unordered_map<unsigned int, glslang::TIntermSymbol *> locationToSymbol[2];
}; };
// //
@ -539,6 +544,20 @@ spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glsl
return spv::DecorationMax; return spv::DecorationMax;
} }
// If lvalue flags contains nonUniform, return SPIR-V NonUniform decoration.
spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(
const spv::Builder::AccessChain::CoherentFlags& coherentFlags)
{
#ifndef GLSLANG_WEB
if (coherentFlags.isNonUniform()) {
builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
builder.addCapability(spv::CapabilityShaderNonUniformEXT);
return spv::DecorationNonUniformEXT;
} else
#endif
return spv::DecorationMax;
}
spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess( spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess(
const spv::Builder::AccessChain::CoherentFlags &coherentFlags) const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
{ {
@ -614,6 +633,7 @@ spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCohere
flags.volatil; flags.volatil;
flags.isImage = type.getBasicType() == glslang::EbtSampler; flags.isImage = type.getBasicType() == glslang::EbtSampler;
#endif #endif
flags.nonUniform = type.getQualifier().nonUniform;
return flags; return flags;
} }
@ -709,13 +729,20 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
return spv::BuiltInCullDistance; return spv::BuiltInCullDistance;
case glslang::EbvViewportIndex: case glslang::EbvViewportIndex:
builder.addCapability(spv::CapabilityMultiViewport); if (glslangIntermediate->getStage() == EShLangGeometry ||
glslangIntermediate->getStage() == EShLangFragment) {
builder.addCapability(spv::CapabilityMultiViewport);
}
if (glslangIntermediate->getStage() == EShLangVertex || if (glslangIntermediate->getStage() == EShLangVertex ||
glslangIntermediate->getStage() == EShLangTessControl || glslangIntermediate->getStage() == EShLangTessControl ||
glslangIntermediate->getStage() == EShLangTessEvaluation) { glslangIntermediate->getStage() == EShLangTessEvaluation) {
builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5); if (builder.getSpvVersion() < spv::Spv_1_5) {
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT); builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
}
else
builder.addCapability(spv::CapabilityShaderViewportIndex);
} }
return spv::BuiltInViewportIndex; return spv::BuiltInViewportIndex;
@ -734,13 +761,19 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
if (glslangIntermediate->getStage() == EShLangMeshNV) { if (glslangIntermediate->getStage() == EShLangMeshNV) {
return spv::BuiltInLayer; return spv::BuiltInLayer;
} }
builder.addCapability(spv::CapabilityGeometry); if (glslangIntermediate->getStage() == EShLangGeometry ||
glslangIntermediate->getStage() == EShLangFragment) {
builder.addCapability(spv::CapabilityGeometry);
}
if (glslangIntermediate->getStage() == EShLangVertex || if (glslangIntermediate->getStage() == EShLangVertex ||
glslangIntermediate->getStage() == EShLangTessControl || glslangIntermediate->getStage() == EShLangTessControl ||
glslangIntermediate->getStage() == EShLangTessEvaluation) { glslangIntermediate->getStage() == EShLangTessEvaluation) {
builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5); if (builder.getSpvVersion() < spv::Spv_1_5) {
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT); builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
} else
builder.addCapability(spv::CapabilityShaderLayer);
} }
return spv::BuiltInLayer; return spv::BuiltInLayer;
@ -769,6 +802,16 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder.addCapability(spv::CapabilityStencilExportEXT); builder.addCapability(spv::CapabilityStencilExportEXT);
return spv::BuiltInFragStencilRefEXT; return spv::BuiltInFragStencilRefEXT;
case glslang::EbvShadingRateKHR:
builder.addExtension(spv::E_SPV_KHR_fragment_shading_rate);
builder.addCapability(spv::CapabilityFragmentShadingRateKHR);
return spv::BuiltInShadingRateKHR;
case glslang::EbvPrimitiveShadingRateKHR:
builder.addExtension(spv::E_SPV_KHR_fragment_shading_rate);
builder.addCapability(spv::CapabilityFragmentShadingRateKHR);
return spv::BuiltInPrimitiveShadingRateKHR;
case glslang::EbvInvocationId: return spv::BuiltInInvocationId; case glslang::EbvInvocationId: return spv::BuiltInInvocationId;
case glslang::EbvTessLevelInner: return spv::BuiltInTessLevelInner; case glslang::EbvTessLevelInner: return spv::BuiltInTessLevelInner;
case glslang::EbvTessLevelOuter: return spv::BuiltInTessLevelOuter; case glslang::EbvTessLevelOuter: return spv::BuiltInTessLevelOuter;
@ -963,7 +1006,17 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case glslang::EbvInstanceCustomIndex: case glslang::EbvInstanceCustomIndex:
return spv::BuiltInInstanceCustomIndexKHR; return spv::BuiltInInstanceCustomIndexKHR;
case glslang::EbvHitT: case glslang::EbvHitT:
return spv::BuiltInHitTKHR; {
// this is a GLSL alias of RayTmax
// in SPV_NV_ray_tracing it has a dedicated builtin
// but in SPV_KHR_ray_tracing it gets mapped to RayTmax
auto& extensions = glslangIntermediate->getRequestedExtensions();
if (extensions.find("GL_NV_ray_tracing") != extensions.end()) {
return spv::BuiltInHitTNV;
} else {
return spv::BuiltInRayTmaxKHR;
}
}
case glslang::EbvHitKind: case glslang::EbvHitKind:
return spv::BuiltInHitKindKHR; return spv::BuiltInHitKindKHR;
case glslang::EbvObjectToWorld: case glslang::EbvObjectToWorld:
@ -1071,6 +1124,10 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
builder.addCapability(spv::CapabilityStorageImageExtendedFormats); builder.addCapability(spv::CapabilityStorageImageExtendedFormats);
break; break;
case glslang::ElfR64ui:
case glslang::ElfR64i:
builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
builder.addCapability(spv::CapabilityInt64ImageEXT);
default: default:
break; break;
} }
@ -1117,6 +1174,8 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
case glslang::ElfRg8ui: return spv::ImageFormatRg8ui; case glslang::ElfRg8ui: return spv::ImageFormatRg8ui;
case glslang::ElfR16ui: return spv::ImageFormatR16ui; case glslang::ElfR16ui: return spv::ImageFormatR16ui;
case glslang::ElfR8ui: return spv::ImageFormatR8ui; case glslang::ElfR8ui: return spv::ImageFormatR8ui;
case glslang::ElfR64ui: return spv::ImageFormatR64ui;
case glslang::ElfR64i: return spv::ImageFormatR64i;
default: return spv::ImageFormatMax; default: return spv::ImageFormatMax;
} }
} }
@ -1187,7 +1246,7 @@ spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang:
spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type) spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type)
{ {
if (type.getBasicType() == glslang::EbtRayQuery) if (type.getBasicType() == glslang::EbtRayQuery)
return spv::StorageClassFunction; return spv::StorageClassPrivate;
if (type.getQualifier().isPipeInput()) if (type.getQualifier().isPipeInput())
return spv::StorageClassInput; return spv::StorageClassInput;
if (type.getQualifier().isPipeOutput()) if (type.getQualifier().isPipeOutput())
@ -1353,6 +1412,8 @@ void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& pa
if (parent.writeonly) if (parent.writeonly)
child.writeonly = true; child.writeonly = true;
#endif #endif
if (parent.nonUniform)
child.nonUniform = true;
} }
bool HasNonLayoutQualifiers(const glslang::TType& type, const glslang::TQualifier& qualifier) bool HasNonLayoutQualifiers(const glslang::TType& type, const glslang::TQualifier& qualifier)
@ -1454,7 +1515,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
} }
if (glslangIntermediate->getLayoutPrimitiveCulling()) { if (glslangIntermediate->getLayoutPrimitiveCulling()) {
builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingProvisionalKHR); builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingKHR);
} }
unsigned int mode; unsigned int mode;
@ -1621,7 +1682,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
{ {
auto& extensions = glslangIntermediate->getRequestedExtensions(); auto& extensions = glslangIntermediate->getRequestedExtensions();
if (extensions.find("GL_NV_ray_tracing") == extensions.end()) { if (extensions.find("GL_NV_ray_tracing") == extensions.end()) {
builder.addCapability(spv::CapabilityRayTracingProvisionalKHR); builder.addCapability(spv::CapabilityRayTracingKHR);
builder.addExtension("SPV_KHR_ray_tracing"); builder.addExtension("SPV_KHR_ray_tracing");
} }
else { else {
@ -1710,6 +1771,12 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
if (symbol->getType().getQualifier().isSpecConstant()) if (symbol->getType().getQualifier().isSpecConstant())
spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
#ifdef ENABLE_HLSL
// Skip symbol handling if it is string-typed
if (symbol->getBasicType() == glslang::EbtString)
return;
#endif
// getSymbolId() will set up all the IO decorations on the first call. // getSymbolId() will set up all the IO decorations on the first call.
// Formal function parameters were mapped during makeFunctions(). // Formal function parameters were mapped during makeFunctions().
spv::Id id = getSymbolId(symbol); spv::Id id = getSymbolId(symbol);
@ -1852,9 +1919,11 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
spv::Id leftRValue = accessChainLoad(node->getLeft()->getType()); spv::Id leftRValue = accessChainLoad(node->getLeft()->getType());
// do the operation // do the operation
spv::Builder::AccessChain::CoherentFlags coherentFlags = TranslateCoherent(node->getLeft()->getType());
coherentFlags |= TranslateCoherent(node->getRight()->getType());
OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()), OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
TranslateNoContractionDecoration(node->getType().getQualifier()), TranslateNoContractionDecoration(node->getType().getQualifier()),
TranslateNonUniformDecoration(node->getType().getQualifier()) }; TranslateNonUniformDecoration(coherentFlags) };
rValue = createBinaryOperation(node->getOp(), decorations, rValue = createBinaryOperation(node->getOp(), decorations,
convertGlslangToSpvType(node->getType()), leftRValue, rValue, convertGlslangToSpvType(node->getType()), leftRValue, rValue,
node->getType().getBasicType()); node->getType().getBasicType());
@ -1885,13 +1954,16 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
if (! node->getLeft()->getType().isArray() && if (! node->getLeft()->getType().isArray() &&
node->getLeft()->getType().isVector() && node->getLeft()->getType().isVector() &&
node->getOp() == glslang::EOpIndexDirect) { node->getOp() == glslang::EOpIndexDirect) {
// Swizzle is uniform so propagate uniform into access chain
spv::Builder::AccessChain::CoherentFlags coherentFlags = TranslateCoherent(node->getLeft()->getType());
coherentFlags.nonUniform = 0;
// This is essentially a hard-coded vector swizzle of size 1, // This is essentially a hard-coded vector swizzle of size 1,
// so short circuit the access-chain stuff with a swizzle. // so short circuit the access-chain stuff with a swizzle.
std::vector<unsigned> swizzle; std::vector<unsigned> swizzle;
swizzle.push_back(glslangIndex); swizzle.push_back(glslangIndex);
int dummySize; int dummySize;
builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()), builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()),
TranslateCoherent(node->getLeft()->getType()), coherentFlags,
glslangIntermediate->getBaseAlignmentScalar( glslangIntermediate->getBaseAlignmentScalar(
node->getLeft()->getType(), dummySize)); node->getLeft()->getType(), dummySize));
} else { } else {
@ -1922,9 +1994,14 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
} }
} }
// Struct reference propagates uniform lvalue
spv::Builder::AccessChain::CoherentFlags coherentFlags =
TranslateCoherent(node->getLeft()->getType());
coherentFlags.nonUniform = 0;
// normal case for indexing array or structure or block // normal case for indexing array or structure or block
builder.accessChainPush(builder.makeIntConstant(spvIndex), builder.accessChainPush(builder.makeIntConstant(spvIndex),
TranslateCoherent(node->getLeft()->getType()), coherentFlags,
node->getLeft()->getType().getBufferReferenceAlignment()); node->getLeft()->getType().getBufferReferenceAlignment());
// Add capabilities here for accessing PointSize and clip/cull distance. // Add capabilities here for accessing PointSize and clip/cull distance.
@ -1958,15 +2035,20 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
// restore the saved access chain // restore the saved access chain
builder.setAccessChain(partial); builder.setAccessChain(partial);
// Only if index is nonUniform should we propagate nonUniform into access chain
spv::Builder::AccessChain::CoherentFlags index_flags = TranslateCoherent(node->getRight()->getType());
spv::Builder::AccessChain::CoherentFlags coherent_flags = TranslateCoherent(node->getLeft()->getType());
coherent_flags.nonUniform = index_flags.nonUniform;
if (! node->getLeft()->getType().isArray() && node->getLeft()->getType().isVector()) { if (! node->getLeft()->getType().isArray() && node->getLeft()->getType().isVector()) {
int dummySize; int dummySize;
builder.accessChainPushComponent(index, convertGlslangToSpvType(node->getLeft()->getType()), builder.accessChainPushComponent(
TranslateCoherent(node->getLeft()->getType()), index, convertGlslangToSpvType(node->getLeft()->getType()), coherent_flags,
glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(),
dummySize)); dummySize));
} else } else
builder.accessChainPush(index, TranslateCoherent(node->getLeft()->getType()), builder.accessChainPush(index, coherent_flags,
node->getLeft()->getType().getBufferReferenceAlignment()); node->getLeft()->getType().getBufferReferenceAlignment());
} }
return false; return false;
case glslang::EOpVectorSwizzle: case glslang::EOpVectorSwizzle:
@ -2050,8 +2132,9 @@ std::pair<spv::Id, spv::Id> TGlslangToSpvTraverser::getForcedType(glslang::TBuil
// these require changing a 64-bit scaler -> a vector of 32-bit components // these require changing a 64-bit scaler -> a vector of 32-bit components
if (glslangType.isVector()) if (glslangType.isVector())
break; break;
std::pair<spv::Id, spv::Id> ret(builder.makeVectorType(builder.makeUintType(32), 4), spv::Id ivec4_type = builder.makeVectorType(builder.makeUintType(32), 4);
builder.makeUintType(64)); spv::Id uint64_type = builder.makeUintType(64);
std::pair<spv::Id, spv::Id> ret(ivec4_type, uint64_type);
return ret; return ret;
} }
// There are no SPIR-V builtins defined for these and map onto original non-transposed // There are no SPIR-V builtins defined for these and map onto original non-transposed
@ -2090,7 +2173,7 @@ spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object)
// handle 32-bit v.xy* -> 64-bit // handle 32-bit v.xy* -> 64-bit
builder.clearAccessChain(); builder.clearAccessChain();
builder.setAccessChainLValue(object); builder.setAccessChainLValue(object);
object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId); object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, spv::DecorationMax, objectTypeId);
std::vector<spv::Id> components; std::vector<spv::Id> components;
components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 0)); components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 0));
components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 1)); components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 1));
@ -2106,7 +2189,7 @@ spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object)
// and we insert a transpose after loading the original non-transposed builtins // and we insert a transpose after loading the original non-transposed builtins
builder.clearAccessChain(); builder.clearAccessChain();
builder.setAccessChainLValue(object); builder.setAccessChainLValue(object);
object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId); object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, spv::DecorationMax, objectTypeId);
return builder.createUnaryOp(spv::OpTranspose, desiredTypeId, object); return builder.createUnaryOp(spv::OpTranspose, desiredTypeId, object);
} else { } else {
@ -2292,7 +2375,8 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
// The result of operation is always stored, but conditionally the // The result of operation is always stored, but conditionally the
// consumed result. The consumed result is always an r-value. // consumed result. The consumed result is always an r-value.
builder.accessChainStore(result); builder.accessChainStore(result,
TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags));
builder.clearAccessChain(); builder.clearAccessChain();
if (node->getOp() == glslang::EOpPreIncrement || if (node->getOp() == glslang::EOpPreIncrement ||
node->getOp() == glslang::EOpPreDecrement) node->getOp() == glslang::EOpPreDecrement)
@ -2421,6 +2505,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
// anything else gets there, so visit out of order, doing them all now. // anything else gets there, so visit out of order, doing them all now.
makeGlobalInitializers(node->getAsAggregate()->getSequence()); makeGlobalInitializers(node->getAsAggregate()->getSequence());
//Pre process linker objects for ray tracing stages
if (glslangIntermediate->isRayTracingStage())
collectRayTracingLinkerObjects();
// Initializers are done, don't want to visit again, but functions and link objects need to be processed, // Initializers are done, don't want to visit again, but functions and link objects need to be processed,
// so do them manually. // so do them manually.
visitFunctions(node->getAsAggregate()->getSequence()); visitFunctions(node->getAsAggregate()->getSequence());
@ -2611,6 +2699,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
else else
constructed = builder.createConstructor(precision, arguments, resultType()); constructed = builder.createConstructor(precision, arguments, resultType());
if (node->getType().getQualifier().isNonUniform()) {
builder.addDecoration(constructed, spv::DecorationNonUniformEXT);
}
builder.clearAccessChain(); builder.clearAccessChain();
builder.setAccessChainRValue(constructed); builder.setAccessChainRValue(constructed);
@ -2726,10 +2818,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
binOp = node->getOp(); binOp = node->getOp();
break; break;
case glslang::EOpIgnoreIntersection: case glslang::EOpIgnoreIntersectionNV:
case glslang::EOpTerminateRay: case glslang::EOpTerminateRayNV:
case glslang::EOpTrace: case glslang::EOpTraceNV:
case glslang::EOpExecuteCallable: case glslang::EOpTraceKHR:
case glslang::EOpExecuteCallableNV:
case glslang::EOpExecuteCallableKHR:
case glslang::EOpWritePackedPrimitiveIndices4x8NV: case glslang::EOpWritePackedPrimitiveIndices4x8NV:
noReturnValue = true; noReturnValue = true;
break; break;
@ -2738,7 +2832,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpRayQueryGenerateIntersection: case glslang::EOpRayQueryGenerateIntersection:
case glslang::EOpRayQueryConfirmIntersection: case glslang::EOpRayQueryConfirmIntersection:
builder.addExtension("SPV_KHR_ray_query"); builder.addExtension("SPV_KHR_ray_query");
builder.addCapability(spv::CapabilityRayQueryProvisionalKHR); builder.addCapability(spv::CapabilityRayQueryKHR);
noReturnValue = true; noReturnValue = true;
break; break;
case glslang::EOpRayQueryProceed: case glslang::EOpRayQueryProceed:
@ -2761,7 +2855,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpRayQueryGetIntersectionObjectToWorld: case glslang::EOpRayQueryGetIntersectionObjectToWorld:
case glslang::EOpRayQueryGetIntersectionWorldToObject: case glslang::EOpRayQueryGetIntersectionWorldToObject:
builder.addExtension("SPV_KHR_ray_query"); builder.addExtension("SPV_KHR_ray_query");
builder.addCapability(spv::CapabilityRayQueryProvisionalKHR); builder.addCapability(spv::CapabilityRayQueryKHR);
break; break;
case glslang::EOpCooperativeMatrixLoad: case glslang::EOpCooperativeMatrixLoad:
case glslang::EOpCooperativeMatrixStore: case glslang::EOpCooperativeMatrixStore:
@ -3014,11 +3108,18 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
)) { )) {
bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst(); bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst();
operands.push_back(builder.makeIntConstant(cond ? 1 : 0)); operands.push_back(builder.makeIntConstant(cond ? 1 : 0));
} } else if ((arg == 10 && glslangOp == glslang::EOpTraceKHR) ||
else { (arg == 1 && glslangOp == glslang::EOpExecuteCallableKHR)) {
const int opdNum = glslangOp == glslang::EOpTraceKHR ? 10 : 1;
const int set = glslangOp == glslang::EOpTraceKHR ? 0 : 1;
const int location = glslangOperands[opdNum]->getAsConstantUnion()->getConstArray()[0].getUConst();
auto itNode = locationToSymbol[set].find(location);
visitSymbol(itNode->second);
spv::Id symId = getSymbolId(itNode->second);
operands.push_back(symId);
} else {
operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType())); operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType()));
} }
} }
} }
@ -3089,7 +3190,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
for (unsigned int i = 0; i < temporaryLvalues.size(); ++i) { for (unsigned int i = 0; i < temporaryLvalues.size(); ++i) {
builder.setAccessChain(complexLvalues[i]); builder.setAccessChain(complexLvalues[i]);
builder.accessChainStore(builder.createLoad(temporaryLvalues[i], spv::NoPrecision)); builder.accessChainStore(builder.createLoad(temporaryLvalues[i], spv::NoPrecision),
TranslateNonUniformDecoration(complexLvalues[i].coherentFlags));
} }
} }
@ -3420,7 +3522,11 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
switch (node->getFlowOp()) { switch (node->getFlowOp()) {
case glslang::EOpKill: case glslang::EOpKill:
builder.makeDiscard(); builder.makeStatementTerminator(spv::OpKill, "post-discard");
break;
case glslang::EOpTerminateInvocation:
builder.addExtension(spv::E_SPV_KHR_terminate_invocation);
builder.makeStatementTerminator(spv::OpTerminateInvocation, "post-terminate-invocation");
break; break;
case glslang::EOpBreak: case glslang::EOpBreak:
if (breakForLoop.top()) if (breakForLoop.top())
@ -3457,6 +3563,12 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation); builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation);
builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT); builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT);
break; break;
case glslang::EOpTerminateRayKHR:
builder.makeStatementTerminator(spv::OpTerminateRayKHR, "post-terminateRayKHR");
break;
case glslang::EOpIgnoreIntersectionKHR:
builder.makeStatementTerminator(spv::OpIgnoreIntersectionKHR, "post-ignoreIntersectionKHR");
break;
#endif #endif
default: default:
@ -3564,6 +3676,12 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler)
builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch); builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch);
builder.addCapability(spv::CapabilityFloat16ImageAMD); builder.addCapability(spv::CapabilityFloat16ImageAMD);
return builder.makeFloatType(16); return builder.makeFloatType(16);
case glslang::EbtInt64: return builder.makeIntType(64);
builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
builder.addCapability(spv::CapabilityFloat16ImageAMD);
case glslang::EbtUint64: return builder.makeUintType(64);
builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
builder.addCapability(spv::CapabilityFloat16ImageAMD);
#endif #endif
default: default:
assert(0); assert(0);
@ -3670,10 +3788,36 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
spvType = builder.makeUintType(32); spvType = builder.makeUintType(32);
break; break;
case glslang::EbtAccStruct: case glslang::EbtAccStruct:
switch (glslangIntermediate->getStage()) {
case EShLangRayGen:
case EShLangIntersect:
case EShLangAnyHit:
case EShLangClosestHit:
case EShLangMiss:
case EShLangCallable:
// these all should have the RayTracingNV/KHR capability already
break;
default:
{
auto& extensions = glslangIntermediate->getRequestedExtensions();
if (extensions.find("GL_EXT_ray_query") != extensions.end()) {
builder.addExtension(spv::E_SPV_KHR_ray_query);
builder.addCapability(spv::CapabilityRayQueryKHR);
}
}
break;
}
spvType = builder.makeAccelerationStructureType(); spvType = builder.makeAccelerationStructureType();
break; break;
case glslang::EbtRayQuery: case glslang::EbtRayQuery:
spvType = builder.makeRayQueryType(); {
auto& extensions = glslangIntermediate->getRequestedExtensions();
if (extensions.find("GL_EXT_ray_query") != extensions.end()) {
builder.addExtension(spv::E_SPV_KHR_ray_query);
builder.addCapability(spv::CapabilityRayQueryKHR);
}
spvType = builder.makeRayQueryType();
}
break; break;
case glslang::EbtReference: case glslang::EbtReference:
{ {
@ -3929,6 +4073,8 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
// Name and decorate the non-hidden members // Name and decorate the non-hidden members
int offset = -1; int offset = -1;
int locationOffset = 0; // for use within the members of this struct int locationOffset = 0; // for use within the members of this struct
bool memberLocationInvalid = type.isArrayOfArrays() ||
(type.isArray() && (type.getQualifier().isArrayedIo(glslangIntermediate->getStage()) == false));
for (int i = 0; i < (int)glslangMembers->size(); i++) { for (int i = 0; i < (int)glslangMembers->size(); i++) {
glslang::TType& glslangMember = *(*glslangMembers)[i].type; glslang::TType& glslangMember = *(*glslangMembers)[i].type;
int member = i; int member = i;
@ -3981,7 +4127,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
// just track whether a member needs to be decorated. // just track whether a member needs to be decorated.
// Ignore member locations if the container is an array, as that's // Ignore member locations if the container is an array, as that's
// ill-specified and decisions have been made to not allow this. // ill-specified and decisions have been made to not allow this.
if (! type.isArray() && memberQualifier.hasLocation()) if (!memberLocationInvalid && memberQualifier.hasLocation())
builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation); builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation);
if (qualifier.hasLocation()) // track for upcoming inheritance if (qualifier.hasLocation()) // track for upcoming inheritance
@ -4087,6 +4233,7 @@ spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type)
alignment |= type.getBufferReferenceAlignment(); alignment |= type.getBufferReferenceAlignment();
spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type), spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type),
TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags),
TranslateNonUniformDecoration(type.getQualifier()), TranslateNonUniformDecoration(type.getQualifier()),
nominalTypeId, nominalTypeId,
spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask), spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask),
@ -4154,7 +4301,7 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I
unsigned int alignment = builder.getAccessChain().alignment; unsigned int alignment = builder.getAccessChain().alignment;
alignment |= type.getBufferReferenceAlignment(); alignment |= type.getBufferReferenceAlignment();
builder.accessChainStore(rvalue, builder.accessChainStore(rvalue, TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags),
spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) &
~spv::MemoryAccessMakePointerVisibleKHRMask), ~spv::MemoryAccessMakePointerVisibleKHRMask),
TranslateMemoryScope(coherentFlags), alignment); TranslateMemoryScope(coherentFlags), alignment);
@ -4542,7 +4689,39 @@ void TGlslangToSpvTraverser::makeGlobalInitializers(const glslang::TIntermSequen
} }
} }
} }
// Walk over all linker objects to create a map for payload and callable data linker objects
// and their location to be used during codegen for OpTraceKHR and OpExecuteCallableKHR
// This is done here since it is possible that these linker objects are not be referenced in the AST
void TGlslangToSpvTraverser::collectRayTracingLinkerObjects()
{
glslang::TIntermAggregate* linkerObjects = glslangIntermediate->findLinkerObjects();
for (auto& objSeq : linkerObjects->getSequence()) {
auto objNode = objSeq->getAsSymbolNode();
if (objNode != nullptr) {
if (objNode->getQualifier().hasLocation()) {
unsigned int location = objNode->getQualifier().layoutLocation;
auto st = objNode->getQualifier().storage;
int set;
switch (st)
{
case glslang::EvqPayload:
case glslang::EvqPayloadIn:
set = 0;
break;
case glslang::EvqCallableData:
case glslang::EvqCallableDataIn:
set = 1;
break;
default:
set = -1;
}
if (set != -1)
locationToSymbol[set].insert(std::make_pair(location, objNode));
}
}
}
}
// Process all the functions, while skipping initializers. // Process all the functions, while skipping initializers.
void TGlslangToSpvTraverser::visitFunctions(const glslang::TIntermSequence& glslFunctions) void TGlslangToSpvTraverser::visitFunctions(const glslang::TIntermSequence& glslFunctions)
{ {
@ -4686,8 +4865,10 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
} }
if (lvalue) { if (lvalue) {
arguments.push_back(builder.accessChainGetLValue()); spv::Id lvalue_id = builder.accessChainGetLValue();
arguments.push_back(lvalue_id);
lvalueCoherentFlags = builder.getAccessChain().coherentFlags; lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
builder.addDecoration(lvalue_id, TranslateNonUniformDecoration(lvalueCoherentFlags));
lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType()); lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType());
} else } else
#endif #endif
@ -4750,12 +4931,15 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
const bool isUnsignedResult = node->getType().getBasicType() == glslang::EbtUint; const bool isUnsignedResult = node->getType().getBasicType() == glslang::EbtUint;
if (builder.isSampledImage(params.sampler) &&
((cracked.query && node->getOp() != glslang::EOpTextureQueryLod) || cracked.fragMask || cracked.fetch)) {
params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
if (imageType.getQualifier().isNonUniform()) {
builder.addDecoration(params.sampler, spv::DecorationNonUniformEXT);
}
}
// Check for queries // Check for queries
if (cracked.query) { if (cracked.query) {
// OpImageQueryLod works on a sampled image, for other queries the image has to be extracted first
if (node->getOp() != glslang::EOpTextureQueryLod && builder.isSampledImage(params.sampler))
params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
switch (node->getOp()) { switch (node->getOp()) {
case glslang::EOpImageQuerySize: case glslang::EOpImageQuerySize:
case glslang::EOpTextureQuerySize: case glslang::EOpTextureQuerySize:
@ -5009,10 +5193,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
auto opIt = arguments.begin(); auto opIt = arguments.begin();
std::vector<spv::Id> operands; std::vector<spv::Id> operands;
// Extract the image if necessary
if (builder.isSampledImage(params.sampler))
params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
operands.push_back(params.sampler); operands.push_back(params.sampler);
++opIt; ++opIt;
@ -5073,13 +5253,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
bias = true; bias = true;
} }
// See if the sampler param should really be just the SPV image part
if (cracked.fetch) {
// a fetch needs to have the image extracted first
if (builder.isSampledImage(params.sampler))
params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
}
#ifndef GLSLANG_WEB #ifndef GLSLANG_WEB
if (cracked.gather) { if (cracked.gather) {
const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions(); const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions();
@ -5239,7 +5412,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
builder.accessChainPush(builder.makeIntConstant(i), flags, 0); builder.accessChainPush(builder.makeIntConstant(i), flags, 0);
builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1), builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1),
i+1)); i+1), TranslateNonUniformDecoration(imageType.getQualifier()));
} }
return builder.createCompositeExtract(res, resultType(), 0); return builder.createCompositeExtract(res, resultType(), 0);
} }
@ -5375,6 +5548,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg
// 3. Make the call. // 3. Make the call.
spv::Id result = builder.createFunctionCall(function, spvArgs); spv::Id result = builder.createFunctionCall(function, spvArgs);
builder.setPrecision(result, TranslatePrecisionDecoration(node->getType())); builder.setPrecision(result, TranslatePrecisionDecoration(node->getType()));
builder.addDecoration(result, TranslateNonUniformDecoration(node->getType().getQualifier()));
// 4. Copy back out an "out" arguments. // 4. Copy back out an "out" arguments.
lValueCount = 0; lValueCount = 0;
@ -5384,6 +5558,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg
else if (writableParam(qualifiers[a])) { else if (writableParam(qualifiers[a])) {
if (qualifiers[a] == glslang::EvqOut || qualifiers[a] == glslang::EvqInOut) { if (qualifiers[a] == glslang::EvqOut || qualifiers[a] == glslang::EvqInOut) {
spv::Id copy = builder.createLoad(spvArgs[a], spv::NoPrecision); spv::Id copy = builder.createLoad(spvArgs[a], spv::NoPrecision);
builder.addDecoration(copy, TranslateNonUniformDecoration(argTypes[a]->getQualifier()));
builder.setAccessChain(lValues[lValueCount]); builder.setAccessChain(lValues[lValueCount]);
multiTypeStore(*argTypes[a], copy); multiTypeStore(*argTypes[a], copy);
} }
@ -6171,6 +6346,11 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
case glslang::EOpConstructReference: case glslang::EOpConstructReference:
unaryOp = spv::OpBitcast; unaryOp = spv::OpBitcast;
break; break;
case glslang::EOpConvUint64ToAccStruct:
case glslang::EOpConvUvec2ToAccStruct:
unaryOp = spv::OpConvertUToAccelerationStructureKHR;
break;
#endif #endif
case glslang::EOpCopyObject: case glslang::EOpCopyObject:
@ -7757,10 +7937,16 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
typeId = builder.makeBoolType(); typeId = builder.makeBoolType();
opCode = spv::OpReportIntersectionKHR; opCode = spv::OpReportIntersectionKHR;
break; break;
case glslang::EOpTrace: case glslang::EOpTraceNV:
builder.createNoResultOp(spv::OpTraceNV, operands);
return 0;
case glslang::EOpTraceKHR:
builder.createNoResultOp(spv::OpTraceRayKHR, operands); builder.createNoResultOp(spv::OpTraceRayKHR, operands);
return 0; return 0;
case glslang::EOpExecuteCallable: case glslang::EOpExecuteCallableNV:
builder.createNoResultOp(spv::OpExecuteCallableNV, operands);
return 0;
case glslang::EOpExecuteCallableKHR:
builder.createNoResultOp(spv::OpExecuteCallableKHR, operands); builder.createNoResultOp(spv::OpExecuteCallableKHR, operands);
return 0; return 0;
@ -7805,7 +7991,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
opCode = spv::OpRayQueryGetIntersectionInstanceIdKHR; opCode = spv::OpRayQueryGetIntersectionInstanceIdKHR;
break; break;
case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset: case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
typeId = builder.makeIntType(32); typeId = builder.makeUintType(32);
opCode = spv::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR; opCode = spv::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR;
break; break;
case glslang::EOpRayQueryGetIntersectionGeometryIndex: case glslang::EOpRayQueryGetIntersectionGeometryIndex:
@ -8048,11 +8234,11 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv:
spv::Id id = builder.createBuiltinCall(typeId, getExtBuiltins(spv::E_SPV_AMD_gcn_shader), spv::TimeAMD, args); spv::Id id = builder.createBuiltinCall(typeId, getExtBuiltins(spv::E_SPV_AMD_gcn_shader), spv::TimeAMD, args);
return builder.setPrecision(id, precision); return builder.setPrecision(id, precision);
} }
case glslang::EOpIgnoreIntersection: case glslang::EOpIgnoreIntersectionNV:
builder.createNoResultOp(spv::OpIgnoreIntersectionKHR); builder.createNoResultOp(spv::OpIgnoreIntersectionNV);
return 0; return 0;
case glslang::EOpTerminateRay: case glslang::EOpTerminateRayNV:
builder.createNoResultOp(spv::OpTerminateRayKHR); builder.createNoResultOp(spv::OpTerminateRayNV);
return 0; return 0;
case glslang::EOpRayQueryInitialize: case glslang::EOpRayQueryInitialize:
builder.createNoResultOp(spv::OpRayQueryInitializeKHR); builder.createNoResultOp(spv::OpRayQueryInitializeKHR);
@ -8180,7 +8366,8 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
} }
#ifndef GLSLANG_WEB #ifndef GLSLANG_WEB
if (symbol->getType().isImage()) { // Subgroup builtins which have input storage class are volatile for ray tracing stages.
if (symbol->getType().isImage() || symbol->getQualifier().isPipeInput()) {
std::vector<spv::Decoration> memory; std::vector<spv::Decoration> memory;
TranslateMemoryDecoration(symbol->getType().getQualifier(), memory, TranslateMemoryDecoration(symbol->getType().getQualifier(), memory,
glslangIntermediate->usingVulkanMemoryModel()); glslangIntermediate->usingVulkanMemoryModel());
@ -8188,9 +8375,6 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder.addDecoration(id, memory[i]); builder.addDecoration(id, memory[i]);
} }
// nonuniform
builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier()));
if (builtIn == spv::BuiltInSampleMask) { if (builtIn == spv::BuiltInSampleMask) {
spv::Decoration decoration; spv::Decoration decoration;
// GL_NV_sample_mask_override_coverage extension // GL_NV_sample_mask_override_coverage extension

0
SPIRV/GlslangToSpv.h Executable file → Normal file
View File

View File

@ -625,6 +625,9 @@ namespace spv {
break; break;
} }
case spv::OperandVariableLiteralStrings:
return nextInst;
// Execution mode might have extra literal operands. Skip them. // Execution mode might have extra literal operands. Skip them.
case spv::OperandExecutionMode: case spv::OperandExecutionMode:
return nextInst; return nextInst;
@ -827,7 +830,15 @@ namespace spv {
[&](spv::Id& id) { [&](spv::Id& id) {
if (thisOpCode != spv::OpNop) { if (thisOpCode != spv::OpNop) {
++idCounter; ++idCounter;
const std::uint32_t hashval = opCounter[thisOpCode] * thisOpCode * 50047 + idCounter + fnId * 117; const std::uint32_t hashval =
// Explicitly cast operands to unsigned int to avoid integer
// promotion to signed int followed by integer overflow,
// which would result in undefined behavior.
static_cast<unsigned int>(opCounter[thisOpCode])
* thisOpCode
* 50047
+ idCounter
+ static_cast<unsigned int>(fnId) * 117;
if (isOldIdUnmapped(id)) if (isOldIdUnmapped(id))
localId(id, nextUnusedId(hashval % softTypeIdLimit + firstMappedID)); localId(id, nextUnusedId(hashval % softTypeIdLimit + firstMappedID));

View File

@ -621,13 +621,13 @@ Id Builder::makeAccelerationStructureType()
Id Builder::makeRayQueryType() Id Builder::makeRayQueryType()
{ {
Instruction *type; Instruction *type;
if (groupedTypes[OpTypeRayQueryProvisionalKHR].size() == 0) { if (groupedTypes[OpTypeRayQueryKHR].size() == 0) {
type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryProvisionalKHR); type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryKHR);
groupedTypes[OpTypeRayQueryProvisionalKHR].push_back(type); groupedTypes[OpTypeRayQueryKHR].push_back(type);
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type)); constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
module.mapInstruction(type); module.mapInstruction(type);
} else { } else {
type = groupedTypes[OpTypeRayQueryProvisionalKHR].back(); type = groupedTypes[OpTypeRayQueryKHR].back();
} }
return type->getResultId(); return type->getResultId();
@ -1183,6 +1183,28 @@ void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, int val
executionModes.push_back(std::unique_ptr<Instruction>(instr)); executionModes.push_back(std::unique_ptr<Instruction>(instr));
} }
void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, const std::vector<unsigned>& literals)
{
Instruction* instr = new Instruction(OpExecutionMode);
instr->addIdOperand(entryPoint->getId());
instr->addImmediateOperand(mode);
for (auto literal : literals)
instr->addImmediateOperand(literal);
executionModes.push_back(std::unique_ptr<Instruction>(instr));
}
void Builder::addExecutionModeId(Function* entryPoint, ExecutionMode mode, const std::vector<Id>& operandIds)
{
Instruction* instr = new Instruction(OpExecutionModeId);
instr->addIdOperand(entryPoint->getId());
instr->addImmediateOperand(mode);
for (auto operandId : operandIds)
instr->addIdOperand(operandId);
executionModes.push_back(std::unique_ptr<Instruction>(instr));
}
void Builder::addName(Id id, const char* string) void Builder::addName(Id id, const char* string)
{ {
Instruction* name = new Instruction(OpName); Instruction* name = new Instruction(OpName);
@ -1221,7 +1243,7 @@ void Builder::addDecoration(Id id, Decoration decoration, const char* s)
if (decoration == spv::DecorationMax) if (decoration == spv::DecorationMax)
return; return;
Instruction* dec = new Instruction(OpDecorateStringGOOGLE); Instruction* dec = new Instruction(OpDecorateString);
dec->addIdOperand(id); dec->addIdOperand(id);
dec->addImmediateOperand(decoration); dec->addImmediateOperand(decoration);
dec->addStringOperand(s); dec->addStringOperand(s);
@ -1229,6 +1251,34 @@ void Builder::addDecoration(Id id, Decoration decoration, const char* s)
decorations.push_back(std::unique_ptr<Instruction>(dec)); decorations.push_back(std::unique_ptr<Instruction>(dec));
} }
void Builder::addDecoration(Id id, Decoration decoration, const std::vector<unsigned>& literals)
{
if (decoration == spv::DecorationMax)
return;
Instruction* dec = new Instruction(OpDecorate);
dec->addIdOperand(id);
dec->addImmediateOperand(decoration);
for (auto literal : literals)
dec->addImmediateOperand(literal);
decorations.push_back(std::unique_ptr<Instruction>(dec));
}
void Builder::addDecoration(Id id, Decoration decoration, const std::vector<const char*>& strings)
{
if (decoration == spv::DecorationMax)
return;
Instruction* dec = new Instruction(OpDecorateString);
dec->addIdOperand(id);
dec->addImmediateOperand(decoration);
for (auto string : strings)
dec->addStringOperand(string);
decorations.push_back(std::unique_ptr<Instruction>(dec));
}
void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration) void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration)
{ {
if (decoration == spv::DecorationMax) if (decoration == spv::DecorationMax)
@ -1242,6 +1292,21 @@ void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration)
decorations.push_back(std::unique_ptr<Instruction>(dec)); decorations.push_back(std::unique_ptr<Instruction>(dec));
} }
void Builder::addDecorationId(Id id, Decoration decoration, const std::vector<Id>& operandIds)
{
if(decoration == spv::DecorationMax)
return;
Instruction* dec = new Instruction(OpDecorateId);
dec->addIdOperand(id);
dec->addImmediateOperand(decoration);
for (auto operandId : operandIds)
dec->addIdOperand(operandId);
decorations.push_back(std::unique_ptr<Instruction>(dec));
}
void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, int num) void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, int num)
{ {
if (decoration == spv::DecorationMax) if (decoration == spv::DecorationMax)
@ -1271,6 +1336,36 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat
decorations.push_back(std::unique_ptr<Instruction>(dec)); decorations.push_back(std::unique_ptr<Instruction>(dec));
} }
void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const std::vector<unsigned>& literals)
{
if (decoration == spv::DecorationMax)
return;
Instruction* dec = new Instruction(OpMemberDecorate);
dec->addIdOperand(id);
dec->addImmediateOperand(member);
dec->addImmediateOperand(decoration);
for (auto literal : literals)
dec->addImmediateOperand(literal);
decorations.push_back(std::unique_ptr<Instruction>(dec));
}
void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const std::vector<const char*>& strings)
{
if (decoration == spv::DecorationMax)
return;
Instruction* dec = new Instruction(OpMemberDecorateString);
dec->addIdOperand(id);
dec->addImmediateOperand(member);
dec->addImmediateOperand(decoration);
for (auto string : strings)
dec->addStringOperand(string);
decorations.push_back(std::unique_ptr<Instruction>(dec));
}
// Comments in header // Comments in header
Function* Builder::makeEntryPoint(const char* entryPoint) Function* Builder::makeEntryPoint(const char* entryPoint)
{ {
@ -1352,10 +1447,10 @@ void Builder::leaveFunction()
} }
// Comments in header // Comments in header
void Builder::makeDiscard() void Builder::makeStatementTerminator(spv::Op opcode, const char *name)
{ {
buildPoint->addInstruction(std::unique_ptr<Instruction>(new Instruction(OpKill))); buildPoint->addInstruction(std::unique_ptr<Instruction>(new Instruction(opcode)));
createAndSetNoPredecessorBlock("post-discard"); createAndSetNoPredecessorBlock(name);
} }
// Comments in header // Comments in header
@ -2666,12 +2761,14 @@ void Builder::accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizz
} }
// Comments in header // Comments in header
void Builder::accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment) void Builder::accessChainStore(Id rvalue, Decoration nonUniform, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
{ {
assert(accessChain.isRValue == false); assert(accessChain.isRValue == false);
transferAccessChainSwizzle(true); transferAccessChainSwizzle(true);
Id base = collapseAccessChain(); Id base = collapseAccessChain();
addDecoration(base, nonUniform);
Id source = rvalue; Id source = rvalue;
// dynamic component should be gone // dynamic component should be gone
@ -2694,8 +2791,9 @@ void Builder::accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess, sp
} }
// Comments in header // Comments in header
Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType, Id Builder::accessChainLoad(Decoration precision, Decoration l_nonUniform,
spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment) Decoration r_nonUniform, Id resultType, spv::MemoryAccessMask memoryAccess,
spv::Scope scope, unsigned int alignment)
{ {
Id id; Id id;
@ -2759,9 +2857,9 @@ Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resu
// Buffer accesses need the access chain decorated, and this is where // Buffer accesses need the access chain decorated, and this is where
// loaded image types get decorated. TODO: This should maybe move to // loaded image types get decorated. TODO: This should maybe move to
// createImageTextureFunctionCall. // createImageTextureFunctionCall.
addDecoration(id, nonUniform); addDecoration(id, l_nonUniform);
id = createLoad(id, precision, memoryAccess, scope, alignment); id = createLoad(id, precision, memoryAccess, scope, alignment);
addDecoration(id, nonUniform); addDecoration(id, r_nonUniform);
} }
// Done, unless there are swizzles to do // Done, unless there are swizzles to do
@ -2782,7 +2880,7 @@ Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resu
if (accessChain.component != NoResult) if (accessChain.component != NoResult)
id = setPrecision(createVectorExtractDynamic(id, resultType, accessChain.component), precision); id = setPrecision(createVectorExtractDynamic(id, resultType, accessChain.component), precision);
addDecoration(id, nonUniform); addDecoration(id, r_nonUniform);
return id; return id;
} }

View File

@ -321,13 +321,20 @@ public:
// Methods for adding information outside the CFG. // Methods for adding information outside the CFG.
Instruction* addEntryPoint(ExecutionModel, Function*, const char* name); Instruction* addEntryPoint(ExecutionModel, Function*, const char* name);
void addExecutionMode(Function*, ExecutionMode mode, int value1 = -1, int value2 = -1, int value3 = -1); void addExecutionMode(Function*, ExecutionMode mode, int value1 = -1, int value2 = -1, int value3 = -1);
void addExecutionMode(Function*, ExecutionMode mode, const std::vector<unsigned>& literals);
void addExecutionModeId(Function*, ExecutionMode mode, const std::vector<Id>& operandIds);
void addName(Id, const char* name); void addName(Id, const char* name);
void addMemberName(Id, int member, const char* name); void addMemberName(Id, int member, const char* name);
void addDecoration(Id, Decoration, int num = -1); void addDecoration(Id, Decoration, int num = -1);
void addDecoration(Id, Decoration, const char*); void addDecoration(Id, Decoration, const char*);
void addDecoration(Id, Decoration, const std::vector<unsigned>& literals);
void addDecoration(Id, Decoration, const std::vector<const char*>& strings);
void addDecorationId(Id id, Decoration, Id idDecoration); void addDecorationId(Id id, Decoration, Id idDecoration);
void addDecorationId(Id id, Decoration, const std::vector<Id>& operandIds);
void addMemberDecoration(Id, unsigned int member, Decoration, int num = -1); void addMemberDecoration(Id, unsigned int member, Decoration, int num = -1);
void addMemberDecoration(Id, unsigned int member, Decoration, const char*); void addMemberDecoration(Id, unsigned int member, Decoration, const char*);
void addMemberDecoration(Id, unsigned int member, Decoration, const std::vector<unsigned>& literals);
void addMemberDecoration(Id, unsigned int member, Decoration, const std::vector<const char*>& strings);
// At the end of what block do the next create*() instructions go? // At the end of what block do the next create*() instructions go?
void setBuildPoint(Block* bp) { buildPoint = bp; } void setBuildPoint(Block* bp) { buildPoint = bp; }
@ -350,8 +357,9 @@ public:
// Generate all the code needed to finish up a function. // Generate all the code needed to finish up a function.
void leaveFunction(); void leaveFunction();
// Create a discard. // Create block terminator instruction for certain statements like
void makeDiscard(); // discard, terminate-invocation, terminateRayEXT, or ignoreIntersectionEXT
void makeStatementTerminator(spv::Op opcode, const char *name);
// Create a global or function local or IO variable. // Create a global or function local or IO variable.
Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr, Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr,
@ -617,6 +625,7 @@ public:
CoherentFlags operator |=(const CoherentFlags &other) { return *this; } CoherentFlags operator |=(const CoherentFlags &other) { return *this; }
#else #else
bool isVolatile() const { return volatil; } bool isVolatile() const { return volatil; }
bool isNonUniform() const { return nonUniform; }
bool anyCoherent() const { bool anyCoherent() const {
return coherent || devicecoherent || queuefamilycoherent || workgroupcoherent || return coherent || devicecoherent || queuefamilycoherent || workgroupcoherent ||
subgroupcoherent || shadercallcoherent; subgroupcoherent || shadercallcoherent;
@ -631,6 +640,7 @@ public:
unsigned nonprivate : 1; unsigned nonprivate : 1;
unsigned volatil : 1; unsigned volatil : 1;
unsigned isImage : 1; unsigned isImage : 1;
unsigned nonUniform : 1;
void clear() { void clear() {
coherent = 0; coherent = 0;
@ -642,6 +652,7 @@ public:
nonprivate = 0; nonprivate = 0;
volatil = 0; volatil = 0;
isImage = 0; isImage = 0;
nonUniform = 0;
} }
CoherentFlags operator |=(const CoherentFlags &other) { CoherentFlags operator |=(const CoherentFlags &other) {
@ -654,6 +665,7 @@ public:
nonprivate |= other.nonprivate; nonprivate |= other.nonprivate;
volatil |= other.volatil; volatil |= other.volatil;
isImage |= other.isImage; isImage |= other.isImage;
nonUniform |= other.nonUniform;
return *this; return *this;
} }
#endif #endif
@ -714,11 +726,12 @@ public:
} }
// use accessChain and swizzle to store value // use accessChain and swizzle to store value
void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, void accessChainStore(Id rvalue, Decoration nonUniform,
spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0); spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
// use accessChain and swizzle to load an r-value // use accessChain and swizzle to load an r-value
Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType, Id accessChainLoad(Decoration precision, Decoration l_nonUniform, Decoration r_nonUniform, Id ResultType,
spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax,
unsigned int alignment = 0); unsigned int alignment = 0);

View File

@ -44,7 +44,6 @@
#include "SpvTools.h" #include "SpvTools.h"
#include "spirv-tools/optimizer.hpp" #include "spirv-tools/optimizer.hpp"
#include "spirv-tools/libspirv.h"
namespace glslang { namespace glslang {
@ -114,11 +113,18 @@ void OptimizerMesssageConsumer(spv_message_level_t level, const char *source,
out << std::endl; out << std::endl;
} }
// Use the SPIRV-Tools disassembler to print SPIR-V. // Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment.
void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv) void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv)
{
SpirvToolsDisassemble(out, spirv, spv_target_env::SPV_ENV_UNIVERSAL_1_3);
}
// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment.
void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv,
spv_target_env requested_context)
{ {
// disassemble // disassemble
spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3); spv_context context = spvContextCreate(requested_context);
spv_text text; spv_text text;
spv_diagnostic diagnostic = nullptr; spv_diagnostic diagnostic = nullptr;
spvBinaryToText(context, spirv.data(), spirv.size(), spvBinaryToText(context, spirv.data(), spirv.size(),
@ -174,10 +180,7 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector
// line information into all SPIR-V instructions. This avoids loss of // line information into all SPIR-V instructions. This avoids loss of
// information when instructions are deleted or moved. Later, remove // information when instructions are deleted or moved. Later, remove
// redundant information to minimize final SPRIR-V size. // redundant information to minimize final SPRIR-V size.
if (options->generateDebugInfo) { if (options->stripDebugInfo) {
optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass());
}
else if (options->stripDebugInfo) {
optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass()); optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass());
} }
optimizer.RegisterPass(spvtools::CreateWrapOpKillPass()); optimizer.RegisterPass(spvtools::CreateWrapOpKillPass());
@ -207,9 +210,6 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector
} }
optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
optimizer.RegisterPass(spvtools::CreateCFGCleanupPass()); optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
if (options->generateDebugInfo) {
optimizer.RegisterPass(spvtools::CreateRedundantLineInfoElimPass());
}
spvtools::OptimizerOptions spvOptOptions; spvtools::OptimizerOptions spvOptOptions;
optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger)); optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger));

View File

@ -41,9 +41,10 @@
#ifndef GLSLANG_SPV_TOOLS_H #ifndef GLSLANG_SPV_TOOLS_H
#define GLSLANG_SPV_TOOLS_H #define GLSLANG_SPV_TOOLS_H
#ifdef ENABLE_OPT #if ENABLE_OPT
#include <vector> #include <vector>
#include <ostream> #include <ostream>
#include "spirv-tools/libspirv.h"
#endif #endif
#include "glslang/MachineIndependent/localintermediate.h" #include "glslang/MachineIndependent/localintermediate.h"
@ -62,11 +63,15 @@ struct SpvOptions {
bool validate; bool validate;
}; };
#ifdef ENABLE_OPT #if ENABLE_OPT
// Use the SPIRV-Tools disassembler to print SPIR-V. // Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment.
void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv); void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment.
void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv,
spv_target_env requested_context);
// Apply the SPIRV-Tools validator to generated SPIR-V. // Apply the SPIRV-Tools validator to generated SPIR-V.
void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv, void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
spv::SpvBuildLogger*, bool prelegalization); spv::SpvBuildLogger*, bool prelegalization);

View File

@ -46,7 +46,6 @@
#include "disassemble.h" #include "disassemble.h"
#include "doc.h" #include "doc.h"
#include "SpvTools.h"
namespace spv { namespace spv {
extern "C" { extern "C" {
@ -519,6 +518,10 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode,
case OperandLiteralString: case OperandLiteralString:
numOperands -= disassembleString(); numOperands -= disassembleString();
break; break;
case OperandVariableLiteralStrings:
while (numOperands > 0)
numOperands -= disassembleString();
return;
case OperandMemoryAccess: case OperandMemoryAccess:
outputMask(OperandMemoryAccess, stream[word++]); outputMask(OperandMemoryAccess, stream[word++]);
--numOperands; --numOperands;

View File

@ -372,6 +372,8 @@ const char* BuiltInString(int builtIn)
case 4424: return "BaseVertex"; case 4424: return "BaseVertex";
case 4425: return "BaseInstance"; case 4425: return "BaseInstance";
case 4426: return "DrawIndex"; case 4426: return "DrawIndex";
case 4432: return "PrimitiveShadingRateKHR";
case 4444: return "ShadingRateKHR";
case 5014: return "FragStencilRefEXT"; case 5014: return "FragStencilRefEXT";
case 4992: return "BaryCoordNoPerspAMD"; case 4992: return "BaryCoordNoPerspAMD";
@ -393,7 +395,7 @@ const char* BuiltInString(int builtIn)
case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR"; case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR";
case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR"; case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR";
case BuiltInWorldToObjectKHR: return "WorldToObjectKHR"; case BuiltInWorldToObjectKHR: return "WorldToObjectKHR";
case BuiltInHitTKHR: return "HitTKHR"; case BuiltInHitTNV: return "HitTNV";
case BuiltInHitKindKHR: return "HitKindKHR"; case BuiltInHitKindKHR: return "HitKindKHR";
case BuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR"; case BuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR";
case BuiltInViewportMaskNV: return "ViewportMaskNV"; case BuiltInViewportMaskNV: return "ViewportMaskNV";
@ -521,6 +523,8 @@ const char* ImageFormatString(int format)
case 37: return "Rg8ui"; case 37: return "Rg8ui";
case 38: return "R16ui"; case 38: return "R16ui";
case 39: return "R8ui"; case 39: return "R8ui";
case 40: return "R64ui";
case 41: return "R64i";
default: default:
return "Bad"; return "Bad";
@ -911,9 +915,9 @@ const char* CapabilityString(int info)
case CapabilityPerViewAttributesNV: return "PerViewAttributesNV"; case CapabilityPerViewAttributesNV: return "PerViewAttributesNV";
case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV"; case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV";
case CapabilityRayTracingNV: return "RayTracingNV"; case CapabilityRayTracingNV: return "RayTracingNV";
case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; case CapabilityRayTracingKHR: return "RayTracingKHR";
case CapabilityRayQueryProvisionalKHR: return "RayQueryProvisionalKHR"; case CapabilityRayQueryKHR: return "RayQueryKHR";
case CapabilityRayTraversalPrimitiveCullingProvisionalKHR: return "RayTraversalPrimitiveCullingProvisionalKHR"; case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";
case CapabilityComputeDerivativeGroupQuadsNV: return "ComputeDerivativeGroupQuadsNV"; case CapabilityComputeDerivativeGroupQuadsNV: return "ComputeDerivativeGroupQuadsNV";
case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV"; case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV";
case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV"; case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV";
@ -952,8 +956,11 @@ const char* CapabilityString(int info)
case CapabilityFragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT"; case CapabilityFragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT";
case CapabilityFragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT"; case CapabilityFragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT";
case CapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR";
case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT"; case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT";
case CapabilityShaderClockKHR: return "ShaderClockKHR"; case CapabilityShaderClockKHR: return "ShaderClockKHR";
case CapabilityInt64ImageEXT: return "Int64ImageEXT";
case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL"; case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL";
@ -1329,6 +1336,8 @@ const char* OpcodeString(int op)
case 365: return "OpGroupNonUniformQuadBroadcast"; case 365: return "OpGroupNonUniformQuadBroadcast";
case 366: return "OpGroupNonUniformQuadSwap"; case 366: return "OpGroupNonUniformQuadSwap";
case OpTerminateInvocation: return "OpTerminateInvocation";
case 4421: return "OpSubgroupBallotKHR"; case 4421: return "OpSubgroupBallotKHR";
case 4422: return "OpSubgroupFirstInvocationKHR"; case 4422: return "OpSubgroupFirstInvocationKHR";
case 4428: return "OpSubgroupAllKHR"; case 4428: return "OpSubgroupAllKHR";
@ -1355,17 +1364,23 @@ const char* OpcodeString(int op)
case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE"; case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE";
case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE"; case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
case OpReportIntersectionKHR: return "OpReportIntersectionKHR";
case OpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV";
case OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR";
case OpTerminateRayNV: return "OpTerminateRayNV";
case OpTerminateRayKHR: return "OpTerminateRayKHR";
case OpTraceNV: return "OpTraceNV";
case OpTraceRayKHR: return "OpTraceRayKHR";
case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR";
case OpExecuteCallableNV: return "OpExecuteCallableNV";
case OpExecuteCallableKHR: return "OpExecuteCallableKHR";
case OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR";
case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV"; case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
case OpReportIntersectionKHR: return "OpReportIntersectionKHR";
case OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR";
case OpTerminateRayKHR: return "OpTerminateRayKHR";
case OpTraceRayKHR: return "OpTraceRayKHR";
case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR";
case OpExecuteCallableKHR: return "OpExecuteCallableKHR";
case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV";
case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
case OpTypeRayQueryProvisionalKHR: return "OpTypeRayQueryProvisionalKHR"; case OpTypeRayQueryKHR: return "OpTypeRayQueryKHR";
case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR"; case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR";
case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR"; case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR";
case OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR"; case OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR";
@ -1497,6 +1512,7 @@ void Parameterize()
InstructionDesc[OpBranchConditional].setResultAndType(false, false); InstructionDesc[OpBranchConditional].setResultAndType(false, false);
InstructionDesc[OpSwitch].setResultAndType(false, false); InstructionDesc[OpSwitch].setResultAndType(false, false);
InstructionDesc[OpKill].setResultAndType(false, false); InstructionDesc[OpKill].setResultAndType(false, false);
InstructionDesc[OpTerminateInvocation].setResultAndType(false, false);
InstructionDesc[OpReturn].setResultAndType(false, false); InstructionDesc[OpReturn].setResultAndType(false, false);
InstructionDesc[OpReturnValue].setResultAndType(false, false); InstructionDesc[OpReturnValue].setResultAndType(false, false);
InstructionDesc[OpUnreachable].setResultAndType(false, false); InstructionDesc[OpUnreachable].setResultAndType(false, false);
@ -1727,7 +1743,7 @@ void Parameterize()
InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'"); InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'");
InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, ""); InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, "");
InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandLiteralString, "'Literal String'"); InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'"); InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'");
InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'"); InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'");
@ -1737,7 +1753,7 @@ void Parameterize()
InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'"); InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'");
InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'"); InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'");
InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, ""); InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, "");
InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralString, "'Literal String'"); InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'"); InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'");
InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'"); InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'");
@ -2761,7 +2777,20 @@ void Parameterize()
InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false); InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'NV Acceleration Structure'"); InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'");
InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'");
InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'");
InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'");
InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'");
InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'");
InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'");
InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'");
InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'");
InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'");
InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'");
InstructionDesc[OpTraceNV].setResultAndType(false, false);
InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'");
InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'"); InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'");
InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'"); InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'");
InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'"); InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'");
@ -2777,17 +2806,28 @@ void Parameterize()
InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'"); InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");
InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'"); InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");
InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false);
InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false); InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);
InstructionDesc[OpTerminateRayNV].setResultAndType(false, false);
InstructionDesc[OpTerminateRayKHR].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, "SBT Record Index");
InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData ID"); InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData");
InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false); InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);
InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value");
InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true);
// Ray Query // Ray Query
InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false); InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
InstructionDesc[OpTypeRayQueryProvisionalKHR].setResultAndType(true, false); InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false);
InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'"); InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'");
InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'"); InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'");

View File

@ -125,6 +125,7 @@ enum OperandClass {
OperandVariableLiteralId, OperandVariableLiteralId,
OperandLiteralNumber, OperandLiteralNumber,
OperandLiteralString, OperandLiteralString,
OperandVariableLiteralStrings,
OperandSource, OperandSource,
OperandExecutionModel, OperandExecutionModel,
OperandAddressing, OperandAddressing,

View File

@ -50,11 +50,11 @@ namespace spv {
typedef unsigned int Id; typedef unsigned int Id;
#define SPV_VERSION 0x10500 #define SPV_VERSION 0x10500
#define SPV_REVISION 3 #define SPV_REVISION 4
static const unsigned int MagicNumber = 0x07230203; static const unsigned int MagicNumber = 0x07230203;
static const unsigned int Version = 0x00010500; static const unsigned int Version = 0x00010500;
static const unsigned int Revision = 3; static const unsigned int Revision = 4;
static const unsigned int OpCodeMask = 0xffff; static const unsigned int OpCodeMask = 0xffff;
static const unsigned int WordCountShift = 16; static const unsigned int WordCountShift = 16;
@ -274,6 +274,8 @@ enum ImageFormat {
ImageFormatRg8ui = 37, ImageFormatRg8ui = 37,
ImageFormatR16ui = 38, ImageFormatR16ui = 38,
ImageFormatR8ui = 39, ImageFormatR8ui = 39,
ImageFormatR64ui = 40,
ImageFormatR64i = 41,
ImageFormatMax = 0x7fffffff, ImageFormatMax = 0x7fffffff,
}; };
@ -558,8 +560,10 @@ enum BuiltIn {
BuiltInBaseVertex = 4424, BuiltInBaseVertex = 4424,
BuiltInBaseInstance = 4425, BuiltInBaseInstance = 4425,
BuiltInDrawIndex = 4426, BuiltInDrawIndex = 4426,
BuiltInPrimitiveShadingRateKHR = 4432,
BuiltInDeviceIndex = 4438, BuiltInDeviceIndex = 4438,
BuiltInViewIndex = 4440, BuiltInViewIndex = 4440,
BuiltInShadingRateKHR = 4444,
BuiltInBaryCoordNoPerspAMD = 4992, BuiltInBaryCoordNoPerspAMD = 4992,
BuiltInBaryCoordNoPerspCentroidAMD = 4993, BuiltInBaryCoordNoPerspCentroidAMD = 4993,
BuiltInBaryCoordNoPerspSampleAMD = 4994, BuiltInBaryCoordNoPerspSampleAMD = 4994,
@ -610,7 +614,6 @@ enum BuiltIn {
BuiltInObjectToWorldNV = 5330, BuiltInObjectToWorldNV = 5330,
BuiltInWorldToObjectKHR = 5331, BuiltInWorldToObjectKHR = 5331,
BuiltInWorldToObjectNV = 5331, BuiltInWorldToObjectNV = 5331,
BuiltInHitTKHR = 5332,
BuiltInHitTNV = 5332, BuiltInHitTNV = 5332,
BuiltInHitKindKHR = 5333, BuiltInHitKindKHR = 5333,
BuiltInHitKindNV = 5333, BuiltInHitKindNV = 5333,
@ -870,6 +873,7 @@ enum Capability {
CapabilityGroupNonUniformQuad = 68, CapabilityGroupNonUniformQuad = 68,
CapabilityShaderLayer = 69, CapabilityShaderLayer = 69,
CapabilityShaderViewportIndex = 70, CapabilityShaderViewportIndex = 70,
CapabilityFragmentShadingRateKHR = 4422,
CapabilitySubgroupBallotKHR = 4423, CapabilitySubgroupBallotKHR = 4423,
CapabilityDrawParameters = 4427, CapabilityDrawParameters = 4427,
CapabilitySubgroupVoteKHR = 4431, CapabilitySubgroupVoteKHR = 4431,
@ -894,12 +898,15 @@ enum Capability {
CapabilityRoundingModeRTE = 4467, CapabilityRoundingModeRTE = 4467,
CapabilityRoundingModeRTZ = 4468, CapabilityRoundingModeRTZ = 4468,
CapabilityRayQueryProvisionalKHR = 4471, CapabilityRayQueryProvisionalKHR = 4471,
CapabilityRayTraversalPrimitiveCullingProvisionalKHR = 4478, CapabilityRayQueryKHR = 4472,
CapabilityRayTraversalPrimitiveCullingKHR = 4478,
CapabilityRayTracingKHR = 4479,
CapabilityFloat16ImageAMD = 5008, CapabilityFloat16ImageAMD = 5008,
CapabilityImageGatherBiasLodAMD = 5009, CapabilityImageGatherBiasLodAMD = 5009,
CapabilityFragmentMaskAMD = 5010, CapabilityFragmentMaskAMD = 5010,
CapabilityStencilExportEXT = 5013, CapabilityStencilExportEXT = 5013,
CapabilityImageReadWriteLodAMD = 5015, CapabilityImageReadWriteLodAMD = 5015,
CapabilityInt64ImageEXT = 5016,
CapabilityShaderClockKHR = 5055, CapabilityShaderClockKHR = 5055,
CapabilitySampleMaskOverrideCoverageNV = 5249, CapabilitySampleMaskOverrideCoverageNV = 5249,
CapabilityGeometryShaderPassthroughNV = 5251, CapabilityGeometryShaderPassthroughNV = 5251,
@ -1024,6 +1031,22 @@ enum RayQueryCandidateIntersectionType {
RayQueryCandidateIntersectionTypeMax = 0x7fffffff, RayQueryCandidateIntersectionTypeMax = 0x7fffffff,
}; };
enum FragmentShadingRateShift {
FragmentShadingRateVertical2PixelsShift = 0,
FragmentShadingRateVertical4PixelsShift = 1,
FragmentShadingRateHorizontal2PixelsShift = 2,
FragmentShadingRateHorizontal4PixelsShift = 3,
FragmentShadingRateMax = 0x7fffffff,
};
enum FragmentShadingRateMask {
FragmentShadingRateMaskNone = 0,
FragmentShadingRateVertical2PixelsMask = 0x00000001,
FragmentShadingRateVertical4PixelsMask = 0x00000002,
FragmentShadingRateHorizontal2PixelsMask = 0x00000004,
FragmentShadingRateHorizontal4PixelsMask = 0x00000008,
};
enum Op { enum Op {
OpNop = 0, OpNop = 0,
OpUndef = 1, OpUndef = 1,
@ -1369,13 +1392,19 @@ enum Op {
OpPtrEqual = 401, OpPtrEqual = 401,
OpPtrNotEqual = 402, OpPtrNotEqual = 402,
OpPtrDiff = 403, OpPtrDiff = 403,
OpTerminateInvocation = 4416,
OpSubgroupBallotKHR = 4421, OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422, OpSubgroupFirstInvocationKHR = 4422,
OpSubgroupAllKHR = 4428, OpSubgroupAllKHR = 4428,
OpSubgroupAnyKHR = 4429, OpSubgroupAnyKHR = 4429,
OpSubgroupAllEqualKHR = 4430, OpSubgroupAllEqualKHR = 4430,
OpSubgroupReadInvocationKHR = 4432, OpSubgroupReadInvocationKHR = 4432,
OpTypeRayQueryProvisionalKHR = 4472, OpTraceRayKHR = 4445,
OpExecuteCallableKHR = 4446,
OpConvertUToAccelerationStructureKHR = 4447,
OpIgnoreIntersectionKHR = 4448,
OpTerminateRayKHR = 4449,
OpTypeRayQueryKHR = 4472,
OpRayQueryInitializeKHR = 4473, OpRayQueryInitializeKHR = 4473,
OpRayQueryTerminateKHR = 4474, OpRayQueryTerminateKHR = 4474,
OpRayQueryGenerateIntersectionKHR = 4475, OpRayQueryGenerateIntersectionKHR = 4475,
@ -1398,15 +1427,11 @@ enum Op {
OpWritePackedPrimitiveIndices4x8NV = 5299, OpWritePackedPrimitiveIndices4x8NV = 5299,
OpReportIntersectionKHR = 5334, OpReportIntersectionKHR = 5334,
OpReportIntersectionNV = 5334, OpReportIntersectionNV = 5334,
OpIgnoreIntersectionKHR = 5335,
OpIgnoreIntersectionNV = 5335, OpIgnoreIntersectionNV = 5335,
OpTerminateRayKHR = 5336,
OpTerminateRayNV = 5336, OpTerminateRayNV = 5336,
OpTraceNV = 5337, OpTraceNV = 5337,
OpTraceRayKHR = 5337,
OpTypeAccelerationStructureKHR = 5341, OpTypeAccelerationStructureKHR = 5341,
OpTypeAccelerationStructureNV = 5341, OpTypeAccelerationStructureNV = 5341,
OpExecuteCallableKHR = 5344,
OpExecuteCallableNV = 5344, OpExecuteCallableNV = 5344,
OpTypeCooperativeMatrixNV = 5358, OpTypeCooperativeMatrixNV = 5358,
OpCooperativeMatrixLoadNV = 5359, OpCooperativeMatrixLoadNV = 5359,
@ -1939,13 +1964,19 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
case OpPtrEqual: *hasResult = true; *hasResultType = true; break; case OpPtrEqual: *hasResult = true; *hasResultType = true; break;
case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
case OpPtrDiff: *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 OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
case OpTypeRayQueryProvisionalKHR: *hasResult = true; *hasResultType = false; break; case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break;
case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break;
case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break;
@ -2164,6 +2195,7 @@ inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask
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 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 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 FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); }
} // end namespace spv } // end namespace spv

1
SPIRV/spvIR.h Executable file → Normal file
View File

@ -263,6 +263,7 @@ public:
case OpBranchConditional: case OpBranchConditional:
case OpSwitch: case OpSwitch:
case OpKill: case OpKill:
case OpTerminateInvocation:
case OpReturn: case OpReturn:
case OpReturnValue: case OpReturnValue:
case OpUnreachable: case OpUnreachable:

View File

@ -41,7 +41,6 @@ target_include_directories(glslang-default-resource-limits
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>) PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
set(SOURCES StandAlone.cpp DirStackFileIncluder.h) set(SOURCES StandAlone.cpp DirStackFileIncluder.h)
add_executable(glslangValidator ${SOURCES}) add_executable(glslangValidator ${SOURCES})
@ -70,6 +69,12 @@ target_include_directories(glslangValidator PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>) $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
if(ENABLE_OPT)
target_include_directories(glslangValidator
PRIVATE ${spirv-tools_SOURCE_DIR}/include
)
endif(ENABLE_OPT)
if(ENABLE_SPVREMAPPER) if(ENABLE_SPVREMAPPER)
set(REMAPPER_SOURCES spirv-remap.cpp) set(REMAPPER_SOURCES spirv-remap.cpp)
add_executable(spirv-remap ${REMAPPER_SOURCES}) add_executable(spirv-remap ${REMAPPER_SOURCES})

View File

@ -2,7 +2,7 @@
int f(int a, int b, int c) int f(int a, int b, int c)
{ {
int a = b; // ERROR, redefinition int a = b;
{ {
float a = float(a) + 1.0; float a = float(a) + 1.0;

0
Test/310.frag Executable file → Normal file
View File

View File

@ -1,5 +1,4 @@
100scope.vert 100scope.vert
ERROR: 0:5: 'a' : redefinition
ERROR: 0:17: 'b' : function name is redeclaration of existing name ERROR: 0:17: 'b' : function name is redeclaration of existing name
ERROR: 0:20: 'c' : redefinition ERROR: 0:20: 'c' : redefinition
ERROR: 0:22: 'f' : redefinition ERROR: 0:22: 'f' : redefinition
@ -13,7 +12,7 @@ ERROR: 0:57: 'z' : undeclared identifier
ERROR: 0:57: 'z' : redefinition ERROR: 0:57: 'z' : redefinition
ERROR: 0:73: 'degrees' : can't use function syntax on variable ERROR: 0:73: 'degrees' : can't use function syntax on variable
ERROR: 0:76: 'vertex-shader struct output' : not supported for this version or the enabled extensions ERROR: 0:76: 'vertex-shader struct output' : not supported for this version or the enabled extensions
ERROR: 14 compilation errors. No code generated. ERROR: 13 compilation errors. No code generated.
Shader version: 100 Shader version: 100
@ -23,18 +22,22 @@ ERROR: node is still EOpNull!
0:3 'a' ( in highp int) 0:3 'a' ( in highp int)
0:3 'b' ( in highp int) 0:3 'b' ( in highp int)
0:3 'c' ( in highp int) 0:3 'c' ( in highp int)
0:? Sequence 0:5 Sequence
0:5 Sequence
0:5 move second child to first child ( temp highp int)
0:5 'a' ( temp highp int)
0:5 'b' ( in highp int)
0:8 Sequence 0:8 Sequence
0:8 Sequence 0:8 Sequence
0:8 move second child to first child ( temp highp float) 0:8 move second child to first child ( temp highp float)
0:8 'a' ( temp highp float) 0:8 'a' ( temp highp float)
0:8 add ( temp highp float) 0:8 add ( temp highp float)
0:8 Convert int to float ( temp highp float) 0:8 Convert int to float ( temp highp float)
0:8 'a' ( in highp int) 0:8 'a' ( temp highp int)
0:8 Constant: 0:8 Constant:
0:8 1.000000 0:8 1.000000
0:11 Branch: Return with expression 0:11 Branch: Return with expression
0:11 'a' ( in highp int) 0:11 'a' ( temp highp int)
0:25 Function Definition: cos(f1; ( global highp float) 0:25 Function Definition: cos(f1; ( global highp float)
0:25 Function Parameters: 0:25 Function Parameters:
0:25 'x' ( in highp float) 0:25 'x' ( in highp float)
@ -138,18 +141,22 @@ ERROR: node is still EOpNull!
0:3 'a' ( in highp int) 0:3 'a' ( in highp int)
0:3 'b' ( in highp int) 0:3 'b' ( in highp int)
0:3 'c' ( in highp int) 0:3 'c' ( in highp int)
0:? Sequence 0:5 Sequence
0:5 Sequence
0:5 move second child to first child ( temp highp int)
0:5 'a' ( temp highp int)
0:5 'b' ( in highp int)
0:8 Sequence 0:8 Sequence
0:8 Sequence 0:8 Sequence
0:8 move second child to first child ( temp highp float) 0:8 move second child to first child ( temp highp float)
0:8 'a' ( temp highp float) 0:8 'a' ( temp highp float)
0:8 add ( temp highp float) 0:8 add ( temp highp float)
0:8 Convert int to float ( temp highp float) 0:8 Convert int to float ( temp highp float)
0:8 'a' ( in highp int) 0:8 'a' ( temp highp int)
0:8 Constant: 0:8 Constant:
0:8 1.000000 0:8 1.000000
0:11 Branch: Return with expression 0:11 Branch: Return with expression
0:11 'a' ( in highp int) 0:11 'a' ( temp highp int)
0:36 Function Definition: main( ( global void) 0:36 Function Definition: main( ( global void)
0:36 Function Parameters: 0:36 Function Parameters:
0:? Sequence 0:? Sequence

View File

@ -1,6 +1,7 @@
300layout.vert 300layout.vert
ERROR: 0:7: 'vertex input arrays' : not supported with this profile: es 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 or array
ERROR: 0:8: 's' : A structure containing an array is not allowed as input in ES
ERROR: 0:8: 'vertex input arrays' : not supported with this profile: es ERROR: 0:8: 'vertex input arrays' : not supported with this profile: es
ERROR: 0:8: 'location' : overlapping use of location 10 ERROR: 0:8: 'location' : overlapping use of location 10
ERROR: 0:12: 'layout' : cannot specify matrix layout on a variable declaration ERROR: 0:12: 'layout' : cannot specify matrix layout on a variable declaration
@ -18,7 +19,7 @@ ERROR: 0:50: 'shared' : not supported for this version or the enabled extensions
ERROR: 0:50: 'shared' : not supported in this stage: vertex ERROR: 0:50: 'shared' : not supported in this stage: vertex
ERROR: 0:54: 'layout' : cannot specify packing on a variable declaration ERROR: 0:54: 'layout' : cannot specify packing on a variable declaration
ERROR: 0:57: 'location' : overlapping use of location 40 ERROR: 0:57: 'location' : overlapping use of location 40
ERROR: 19 compilation errors. No code generated. ERROR: 20 compilation errors. No code generated.
Shader version: 300 Shader version: 300

View File

@ -40,10 +40,14 @@ ERROR: 0:112: 'out' : cannot be a matrix
ERROR: 0:114: 'in' : cannot be bool ERROR: 0:114: 'in' : cannot be bool
ERROR: 0:115: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: ino ERROR: 0:115: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: ino
ERROR: 0:117: 'fragment-shader array-of-array input' : not supported with this profile: es ERROR: 0:117: 'fragment-shader array-of-array input' : not supported with this profile: es
ERROR: 0:120: 'S' : A structure containing an array is not allowed as input in ES
ERROR: 0:120: 'fragment-shader array-of-struct input' : not supported with this profile: es ERROR: 0:120: 'fragment-shader array-of-struct input' : not supported with this profile: es
ERROR: 0:121: 'S' : A structure containing an array is not allowed as input in ES
ERROR: 0:121: 'fragment-shader array-of-struct input' : not supported with this profile: es ERROR: 0:121: 'fragment-shader array-of-struct input' : not supported with this profile: es
ERROR: 0:123: 'fragment-shader struct input containing an array' : not supported with this profile: es ERROR: 0:123: 'fragment-shader struct input containing an array' : not supported with this profile: es
ERROR: 0:123: 'SA' : A structure containing an array is not allowed as input in ES
ERROR: 0:125: 'fragment-shader struct input containing structure' : not supported with this profile: es ERROR: 0:125: 'fragment-shader struct input containing structure' : not supported with this profile: es
ERROR: 0:125: 'SS' : A structure containing an struct is not allowed as input in ES
ERROR: 0:133: 'output block' : not supported in this stage: fragment ERROR: 0:133: 'output block' : not supported in this stage: fragment
ERROR: 0:138: '' : cannot nest a structure definition inside a structure or block ERROR: 0:138: '' : cannot nest a structure definition inside a structure or block
ERROR: 0:146: 'location' : overlapping use of location 13 ERROR: 0:146: 'location' : overlapping use of location 13
@ -139,7 +143,7 @@ ERROR: 0:461: 'func' : function already has a body
ERROR: 0:463: 'return' : void function cannot return a value ERROR: 0:463: 'return' : void function cannot return a value
ERROR: 0:472: '=' : cannot convert from ' temp mediump uint' to ' temp mediump int' ERROR: 0:472: '=' : cannot convert from ' temp mediump uint' to ' temp mediump int'
ERROR: 0:485: '=' : cannot convert from ' global mediump int' to ' temp mediump uint' ERROR: 0:485: '=' : cannot convert from ' global mediump int' to ' temp mediump uint'
ERROR: 132 compilation errors. No code generated. ERROR: 136 compilation errors. No code generated.
Shader version: 310 Shader version: 310

View File

@ -21,6 +21,7 @@ ERROR: 0:105: 'location' : overlapping use of location 12
ERROR: 0:107: 'input block' : not supported in this stage: vertex ERROR: 0:107: 'input block' : not supported in this stage: vertex
ERROR: 0:109: 'gl_PerVertex' : block redeclaration has extra members ERROR: 0:109: 'gl_PerVertex' : block redeclaration has extra members
ERROR: 0:119: 'gl_PointSize' : member of nameless block was not redeclared ERROR: 0:119: 'gl_PointSize' : member of nameless block was not redeclared
ERROR: 0:119: 'assign' : l-value required "gl_PerVertex" (can't modify void)
ERROR: 0:119: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize' ERROR: 0:119: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize'
ERROR: 0:122: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use ERROR: 0:122: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use
ERROR: 0:127: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block ERROR: 0:127: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block
@ -96,7 +97,7 @@ ERROR: 0:389: 'sample' : Reserved word.
ERROR: 0:400: 'interpolateAtCentroid' : no matching overloaded function found ERROR: 0:400: 'interpolateAtCentroid' : no matching overloaded function found
ERROR: 0:401: 'interpolateAtSample' : no matching overloaded function found ERROR: 0:401: 'interpolateAtSample' : no matching overloaded function found
ERROR: 0:402: 'interpolateAtOffset' : no matching overloaded function found ERROR: 0:402: 'interpolateAtOffset' : no matching overloaded function found
ERROR: 93 compilation errors. No code generated. ERROR: 94 compilation errors. No code generated.
Shader version: 310 Shader version: 310

View File

@ -4,6 +4,7 @@ ERROR: 0:14: 'location' : overlapping use of location 12
ERROR: 0:16: 'input block' : not supported in this stage: vertex ERROR: 0:16: 'input block' : not supported in this stage: vertex
ERROR: 0:18: 'gl_PerVertex' : block redeclaration has extra members ERROR: 0:18: 'gl_PerVertex' : block redeclaration has extra members
ERROR: 0:28: 'gl_PointSize' : member of nameless block was not redeclared ERROR: 0:28: 'gl_PointSize' : member of nameless block was not redeclared
ERROR: 0:28: 'assign' : l-value required "gl_PerVertex" (can't modify void)
ERROR: 0:28: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize' ERROR: 0:28: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize'
ERROR: 0:31: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use ERROR: 0:31: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use
ERROR: 0:36: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block ERROR: 0:36: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block
@ -33,7 +34,7 @@ ERROR: 0:211: '=' : cannot convert from ' const float' to ' temp highp 3-compon
ERROR: 0:252: 'interpolateAtCentroid' : no matching overloaded function found ERROR: 0:252: 'interpolateAtCentroid' : no matching overloaded function found
ERROR: 0:253: 'interpolateAtSample' : no matching overloaded function found ERROR: 0:253: 'interpolateAtSample' : no matching overloaded function found
ERROR: 0:254: 'interpolateAtOffset' : no matching overloaded function found ERROR: 0:254: 'interpolateAtOffset' : no matching overloaded function found
ERROR: 34 compilation errors. No code generated. ERROR: 35 compilation errors. No code generated.
Shader version: 320 Shader version: 320

View File

@ -5,9 +5,10 @@ ERROR: 0:20: 'gl_PerVertex' : can only redeclare a built-in block once, and befo
ERROR: 0:32: 'gl_Position' : no such field in structure ERROR: 0:32: 'gl_Position' : no such field in structure
ERROR: 0:32: '=' : cannot convert from ' temp block{ in float PointSize gl_PointSize}' to ' temp 4-component vector of float' ERROR: 0: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: 'gl_Position' : member of nameless block was not redeclared
ERROR: 0:33: 'assign' : l-value required "gl_PerVertex" (can't modify void)
ERROR: 0:33: 'assign' : cannot convert from ' const 4-component vector of float' to 'layout( stream=0) gl_Position void Position' ERROR: 0:33: 'assign' : cannot convert from ' const 4-component vector of float' to 'layout( stream=0) gl_Position void Position'
WARNING: 0:38: 'return' : type conversion on return values was not explicitly allowed until version 420 WARNING: 0:38: 'return' : type conversion on return values was not explicitly allowed until version 420
ERROR: 7 compilation errors. No code generated. ERROR: 8 compilation errors. No code generated.
Shader version: 410 Shader version: 410

0
Test/baseResults/contradict_0.geom.out Executable file → Normal file
View File

0
Test/baseResults/cppBad3.vert.out Executable file → Normal file
View File

0
Test/baseResults/cppBad4.vert.out Executable file → Normal file
View File

0
Test/baseResults/cppBad5.vert.out Executable file → Normal file
View File

View File

@ -1,7 +1,7 @@
cppDeepNest.frag cppDeepNest.frag
ERROR: 0:66: '#if/#ifdef/#ifndef' : maximum nesting depth exceeded ERROR: 0:66: '#if/#ifdef/#ifndef' : maximum nesting depth exceeded
ERROR: 0:66: '' : missing #endif ERROR: 0:66: '' : missing #endif
ERROR: 0:66: '' : syntax error, unexpected $end ERROR: 0:66: '' : syntax error, unexpected end of file
ERROR: 3 compilation errors. No code generated. ERROR: 3 compilation errors. No code generated.

0
Test/baseResults/cppMerge.frag.out Executable file → Normal file
View File

View File

@ -109,8 +109,8 @@ ERROR: node is still EOpNull!
0:4 Function Parameters: 0:4 Function Parameters:
0:4 'f4' ( in 4-component vector of float) 0:4 'f4' ( in 4-component vector of float)
0:? Sequence 0:? Sequence
0:7 'gl_SubgroupSize' ( in uint SubgroupSize) 0:7 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) 0:8 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:9 subgroupBarrier ( global void) 0:9 subgroupBarrier ( global void)
0:10 subgroupMemoryBarrier ( global void) 0:10 subgroupMemoryBarrier ( global void)
0:11 subgroupMemoryBarrierBuffer ( global void) 0:11 subgroupMemoryBarrierBuffer ( global void)
@ -128,11 +128,11 @@ ERROR: node is still EOpNull!
0:19 false (const bool) 0:19 false (const bool)
0:20 subgroupAllEqual ( global bool) 0:20 subgroupAllEqual ( global bool)
0:20 'f4' ( in 4-component vector of float) 0:20 'f4' ( in 4-component vector of float)
0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) 0:22 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) 0:23 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) 0:24 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) 0:25 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) 0:26 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:27 subgroupBroadcast ( global 4-component vector of float) 0:27 subgroupBroadcast ( global 4-component vector of float)
0:27 'f4' ( in 4-component vector of float) 0:27 'f4' ( in 4-component vector of float)
0:27 Constant: 0:27 Constant:
@ -359,8 +359,8 @@ ERROR: node is still EOpNull!
0:119 Function Definition: basic_works( ( global void) 0:119 Function Definition: basic_works( ( global void)
0:119 Function Parameters: 0:119 Function Parameters:
0:121 Sequence 0:121 Sequence
0:121 'gl_SubgroupSize' ( in uint SubgroupSize) 0:121 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:122 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) 0:122 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:123 subgroupBarrier ( global void) 0:123 subgroupBarrier ( global void)
0:124 subgroupMemoryBarrier ( global void) 0:124 subgroupMemoryBarrier ( global void)
0:125 subgroupMemoryBarrierBuffer ( global void) 0:125 subgroupMemoryBarrierBuffer ( global void)
@ -370,11 +370,11 @@ ERROR: node is still EOpNull!
0:131 Function Parameters: 0:131 Function Parameters:
0:131 'f4' ( in 4-component vector of float) 0:131 'f4' ( in 4-component vector of float)
0:132 Sequence 0:132 Sequence
0:132 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) 0:132 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:133 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) 0:133 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:134 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) 0:134 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:135 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) 0:135 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:136 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) 0:136 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:137 subgroupBroadcast ( global 4-component vector of float) 0:137 subgroupBroadcast ( global 4-component vector of float)
0:137 'f4' ( in 4-component vector of float) 0:137 'f4' ( in 4-component vector of float)
0:137 Constant: 0:137 Constant:
@ -624,15 +624,15 @@ ERROR: node is still EOpNull!
0:247 Sequence 0:247 Sequence
0:247 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) 0:247 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:248 'gl_SMCountNV' ( in uint SMCountNV) 0:248 'gl_SMCountNV' ( in uint SMCountNV)
0:249 'gl_WarpIDNV' ( in uint WarpIDNV) 0:249 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:250 'gl_SMIDNV' ( in uint SMIDNV) 0:250 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:257 Function Definition: sm_builtins( ( global void) 0:257 Function Definition: sm_builtins( ( global void)
0:257 Function Parameters: 0:257 Function Parameters:
0:259 Sequence 0:259 Sequence
0:259 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) 0:259 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:260 'gl_SMCountNV' ( in uint SMCountNV) 0:260 'gl_SMCountNV' ( in uint SMCountNV)
0:261 'gl_WarpIDNV' ( in uint WarpIDNV) 0:261 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:262 'gl_SMIDNV' ( in uint SMIDNV) 0:262 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:? Linker Objects 0:? Linker Objects
0:? 'data0' (layout( location=0) callableDataNV 4-component vector of float) 0:? 'data0' (layout( location=0) callableDataNV 4-component vector of float)
0:? 'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1}) 0:? 'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})

View File

@ -109,8 +109,8 @@ ERROR: node is still EOpNull!
0:4 Function Parameters: 0:4 Function Parameters:
0:4 'f4' ( in 4-component vector of float) 0:4 'f4' ( in 4-component vector of float)
0:? Sequence 0:? Sequence
0:7 'gl_SubgroupSize' ( in uint SubgroupSize) 0:7 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) 0:8 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:9 subgroupBarrier ( global void) 0:9 subgroupBarrier ( global void)
0:10 subgroupMemoryBarrier ( global void) 0:10 subgroupMemoryBarrier ( global void)
0:11 subgroupMemoryBarrierBuffer ( global void) 0:11 subgroupMemoryBarrierBuffer ( global void)
@ -128,11 +128,11 @@ ERROR: node is still EOpNull!
0:19 false (const bool) 0:19 false (const bool)
0:20 subgroupAllEqual ( global bool) 0:20 subgroupAllEqual ( global bool)
0:20 'f4' ( in 4-component vector of float) 0:20 'f4' ( in 4-component vector of float)
0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) 0:22 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) 0:23 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) 0:24 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) 0:25 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) 0:26 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:27 subgroupBroadcast ( global 4-component vector of float) 0:27 subgroupBroadcast ( global 4-component vector of float)
0:27 'f4' ( in 4-component vector of float) 0:27 'f4' ( in 4-component vector of float)
0:27 Constant: 0:27 Constant:
@ -425,8 +425,8 @@ ERROR: node is still EOpNull!
0:129 Function Definition: basic_works( ( global void) 0:129 Function Definition: basic_works( ( global void)
0:129 Function Parameters: 0:129 Function Parameters:
0:131 Sequence 0:131 Sequence
0:131 'gl_SubgroupSize' ( in uint SubgroupSize) 0:131 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:132 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) 0:132 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:133 subgroupBarrier ( global void) 0:133 subgroupBarrier ( global void)
0:134 subgroupMemoryBarrier ( global void) 0:134 subgroupMemoryBarrier ( global void)
0:135 subgroupMemoryBarrierBuffer ( global void) 0:135 subgroupMemoryBarrierBuffer ( global void)
@ -436,11 +436,11 @@ ERROR: node is still EOpNull!
0:141 Function Parameters: 0:141 Function Parameters:
0:141 'f4' ( in 4-component vector of float) 0:141 'f4' ( in 4-component vector of float)
0:142 Sequence 0:142 Sequence
0:142 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) 0:142 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:143 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) 0:143 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:144 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) 0:144 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:145 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) 0:145 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:146 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) 0:146 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:147 subgroupBroadcast ( global 4-component vector of float) 0:147 subgroupBroadcast ( global 4-component vector of float)
0:147 'f4' ( in 4-component vector of float) 0:147 'f4' ( in 4-component vector of float)
0:147 Constant: 0:147 Constant:
@ -690,15 +690,15 @@ ERROR: node is still EOpNull!
0:257 Sequence 0:257 Sequence
0:257 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) 0:257 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:258 'gl_SMCountNV' ( in uint SMCountNV) 0:258 'gl_SMCountNV' ( in uint SMCountNV)
0:259 'gl_WarpIDNV' ( in uint WarpIDNV) 0:259 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:260 'gl_SMIDNV' ( in uint SMIDNV) 0:260 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:267 Function Definition: sm_builtins( ( global void) 0:267 Function Definition: sm_builtins( ( global void)
0:267 Function Parameters: 0:267 Function Parameters:
0:269 Sequence 0:269 Sequence
0:269 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) 0:269 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:270 'gl_SMCountNV' ( in uint SMCountNV) 0:270 'gl_SMCountNV' ( in uint SMCountNV)
0:271 'gl_WarpIDNV' ( in uint WarpIDNV) 0:271 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:272 'gl_SMIDNV' ( in uint SMIDNV) 0:272 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:? Linker Objects 0:? Linker Objects
0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV) 0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
0:? 'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float) 0:? 'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)

View File

@ -109,8 +109,8 @@ ERROR: node is still EOpNull!
0:4 Function Parameters: 0:4 Function Parameters:
0:4 'f4' ( in 4-component vector of float) 0:4 'f4' ( in 4-component vector of float)
0:? Sequence 0:? Sequence
0:7 'gl_SubgroupSize' ( in uint SubgroupSize) 0:7 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) 0:8 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:9 subgroupBarrier ( global void) 0:9 subgroupBarrier ( global void)
0:10 subgroupMemoryBarrier ( global void) 0:10 subgroupMemoryBarrier ( global void)
0:11 subgroupMemoryBarrierBuffer ( global void) 0:11 subgroupMemoryBarrierBuffer ( global void)
@ -128,11 +128,11 @@ ERROR: node is still EOpNull!
0:19 false (const bool) 0:19 false (const bool)
0:20 subgroupAllEqual ( global bool) 0:20 subgroupAllEqual ( global bool)
0:20 'f4' ( in 4-component vector of float) 0:20 'f4' ( in 4-component vector of float)
0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) 0:22 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) 0:23 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) 0:24 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) 0:25 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) 0:26 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:27 subgroupBroadcast ( global 4-component vector of float) 0:27 subgroupBroadcast ( global 4-component vector of float)
0:27 'f4' ( in 4-component vector of float) 0:27 'f4' ( in 4-component vector of float)
0:27 Constant: 0:27 Constant:
@ -389,8 +389,8 @@ ERROR: node is still EOpNull!
0:123 Function Definition: basic_works( ( global void) 0:123 Function Definition: basic_works( ( global void)
0:123 Function Parameters: 0:123 Function Parameters:
0:125 Sequence 0:125 Sequence
0:125 'gl_SubgroupSize' ( in uint SubgroupSize) 0:125 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:126 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) 0:126 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:127 subgroupBarrier ( global void) 0:127 subgroupBarrier ( global void)
0:128 subgroupMemoryBarrier ( global void) 0:128 subgroupMemoryBarrier ( global void)
0:129 subgroupMemoryBarrierBuffer ( global void) 0:129 subgroupMemoryBarrierBuffer ( global void)
@ -400,11 +400,11 @@ ERROR: node is still EOpNull!
0:135 Function Parameters: 0:135 Function Parameters:
0:135 'f4' ( in 4-component vector of float) 0:135 'f4' ( in 4-component vector of float)
0:136 Sequence 0:136 Sequence
0:136 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) 0:136 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:137 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) 0:137 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:138 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) 0:138 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:139 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) 0:139 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:140 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) 0:140 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:141 subgroupBroadcast ( global 4-component vector of float) 0:141 subgroupBroadcast ( global 4-component vector of float)
0:141 'f4' ( in 4-component vector of float) 0:141 'f4' ( in 4-component vector of float)
0:141 Constant: 0:141 Constant:
@ -654,15 +654,15 @@ ERROR: node is still EOpNull!
0:251 Sequence 0:251 Sequence
0:251 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) 0:251 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:252 'gl_SMCountNV' ( in uint SMCountNV) 0:252 'gl_SMCountNV' ( in uint SMCountNV)
0:253 'gl_WarpIDNV' ( in uint WarpIDNV) 0:253 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:254 'gl_SMIDNV' ( in uint SMIDNV) 0:254 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:261 Function Definition: sm_builtins( ( global void) 0:261 Function Definition: sm_builtins( ( global void)
0:261 Function Parameters: 0:261 Function Parameters:
0:263 Sequence 0:263 Sequence
0:263 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) 0:263 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:264 'gl_SMCountNV' ( in uint SMCountNV) 0:264 'gl_SMCountNV' ( in uint SMCountNV)
0:265 'gl_WarpIDNV' ( in uint WarpIDNV) 0:265 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:266 'gl_SMIDNV' ( in uint SMIDNV) 0:266 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:? Linker Objects 0:? Linker Objects
0:? 'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV) 0:? 'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
0:? 'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV) 0:? 'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV)

View File

@ -109,8 +109,8 @@ ERROR: node is still EOpNull!
0:5 Function Parameters: 0:5 Function Parameters:
0:5 'f4' ( in 4-component vector of float) 0:5 'f4' ( in 4-component vector of float)
0:? Sequence 0:? Sequence
0:8 'gl_SubgroupSize' ( in uint SubgroupSize) 0:8 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:9 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) 0:9 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:10 subgroupBarrier ( global void) 0:10 subgroupBarrier ( global void)
0:11 subgroupMemoryBarrier ( global void) 0:11 subgroupMemoryBarrier ( global void)
0:12 subgroupMemoryBarrierBuffer ( global void) 0:12 subgroupMemoryBarrierBuffer ( global void)
@ -128,11 +128,11 @@ ERROR: node is still EOpNull!
0:20 false (const bool) 0:20 false (const bool)
0:21 subgroupAllEqual ( global bool) 0:21 subgroupAllEqual ( global bool)
0:21 'f4' ( in 4-component vector of float) 0:21 'f4' ( in 4-component vector of float)
0:23 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) 0:23 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:24 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) 0:24 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:25 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) 0:25 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:26 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) 0:26 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:27 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) 0:27 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:28 subgroupBroadcast ( global 4-component vector of float) 0:28 subgroupBroadcast ( global 4-component vector of float)
0:28 'f4' ( in 4-component vector of float) 0:28 'f4' ( in 4-component vector of float)
0:28 Constant: 0:28 Constant:
@ -403,8 +403,8 @@ ERROR: node is still EOpNull!
0:129 Function Definition: basic_works( ( global void) 0:129 Function Definition: basic_works( ( global void)
0:129 Function Parameters: 0:129 Function Parameters:
0:131 Sequence 0:131 Sequence
0:131 'gl_SubgroupSize' ( in uint SubgroupSize) 0:131 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:132 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) 0:132 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:133 subgroupBarrier ( global void) 0:133 subgroupBarrier ( global void)
0:134 subgroupMemoryBarrier ( global void) 0:134 subgroupMemoryBarrier ( global void)
0:135 subgroupMemoryBarrierBuffer ( global void) 0:135 subgroupMemoryBarrierBuffer ( global void)
@ -414,11 +414,11 @@ ERROR: node is still EOpNull!
0:141 Function Parameters: 0:141 Function Parameters:
0:141 'f4' ( in 4-component vector of float) 0:141 'f4' ( in 4-component vector of float)
0:142 Sequence 0:142 Sequence
0:142 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) 0:142 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:143 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) 0:143 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:144 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) 0:144 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:145 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) 0:145 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:146 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) 0:146 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:147 subgroupBroadcast ( global 4-component vector of float) 0:147 subgroupBroadcast ( global 4-component vector of float)
0:147 'f4' ( in 4-component vector of float) 0:147 'f4' ( in 4-component vector of float)
0:147 Constant: 0:147 Constant:
@ -668,15 +668,15 @@ ERROR: node is still EOpNull!
0:257 Sequence 0:257 Sequence
0:257 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) 0:257 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:258 'gl_SMCountNV' ( in uint SMCountNV) 0:258 'gl_SMCountNV' ( in uint SMCountNV)
0:259 'gl_WarpIDNV' ( in uint WarpIDNV) 0:259 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:260 'gl_SMIDNV' ( in uint SMIDNV) 0:260 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:267 Function Definition: sm_builtins( ( global void) 0:267 Function Definition: sm_builtins( ( global void)
0:267 Function Parameters: 0:267 Function Parameters:
0:269 Sequence 0:269 Sequence
0:269 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) 0:269 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:270 'gl_SMCountNV' ( in uint SMCountNV) 0:270 'gl_SMCountNV' ( in uint SMCountNV)
0:271 'gl_WarpIDNV' ( in uint WarpIDNV) 0:271 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:272 'gl_SMIDNV' ( in uint SMIDNV) 0:272 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:? Linker Objects 0:? Linker Objects
0:? 'iAttr' ( hitAttributeNV 4-component vector of float) 0:? 'iAttr' ( hitAttributeNV 4-component vector of float)

View File

@ -109,8 +109,8 @@ ERROR: node is still EOpNull!
0:5 Function Parameters: 0:5 Function Parameters:
0:5 'f4' ( in 4-component vector of float) 0:5 'f4' ( in 4-component vector of float)
0:? Sequence 0:? Sequence
0:8 'gl_SubgroupSize' ( in uint SubgroupSize) 0:8 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:9 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) 0:9 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:10 subgroupBarrier ( global void) 0:10 subgroupBarrier ( global void)
0:11 subgroupMemoryBarrier ( global void) 0:11 subgroupMemoryBarrier ( global void)
0:12 subgroupMemoryBarrierBuffer ( global void) 0:12 subgroupMemoryBarrierBuffer ( global void)
@ -128,11 +128,11 @@ ERROR: node is still EOpNull!
0:20 false (const bool) 0:20 false (const bool)
0:21 subgroupAllEqual ( global bool) 0:21 subgroupAllEqual ( global bool)
0:21 'f4' ( in 4-component vector of float) 0:21 'f4' ( in 4-component vector of float)
0:23 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) 0:23 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:24 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) 0:24 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:25 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) 0:25 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:26 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) 0:26 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:27 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) 0:27 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:28 subgroupBroadcast ( global 4-component vector of float) 0:28 subgroupBroadcast ( global 4-component vector of float)
0:28 'f4' ( in 4-component vector of float) 0:28 'f4' ( in 4-component vector of float)
0:28 Constant: 0:28 Constant:
@ -397,8 +397,8 @@ ERROR: node is still EOpNull!
0:123 Function Definition: basic_works( ( global void) 0:123 Function Definition: basic_works( ( global void)
0:123 Function Parameters: 0:123 Function Parameters:
0:125 Sequence 0:125 Sequence
0:125 'gl_SubgroupSize' ( in uint SubgroupSize) 0:125 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:126 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) 0:126 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:127 subgroupBarrier ( global void) 0:127 subgroupBarrier ( global void)
0:128 subgroupMemoryBarrier ( global void) 0:128 subgroupMemoryBarrier ( global void)
0:129 subgroupMemoryBarrierBuffer ( global void) 0:129 subgroupMemoryBarrierBuffer ( global void)
@ -408,11 +408,11 @@ ERROR: node is still EOpNull!
0:135 Function Parameters: 0:135 Function Parameters:
0:135 'f4' ( in 4-component vector of float) 0:135 'f4' ( in 4-component vector of float)
0:136 Sequence 0:136 Sequence
0:136 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) 0:136 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:137 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) 0:137 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:138 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) 0:138 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:139 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) 0:139 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:140 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) 0:140 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:141 subgroupBroadcast ( global 4-component vector of float) 0:141 subgroupBroadcast ( global 4-component vector of float)
0:141 'f4' ( in 4-component vector of float) 0:141 'f4' ( in 4-component vector of float)
0:141 Constant: 0:141 Constant:
@ -662,15 +662,15 @@ ERROR: node is still EOpNull!
0:251 Sequence 0:251 Sequence
0:251 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) 0:251 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:252 'gl_SMCountNV' ( in uint SMCountNV) 0:252 'gl_SMCountNV' ( in uint SMCountNV)
0:253 'gl_WarpIDNV' ( in uint WarpIDNV) 0:253 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:254 'gl_SMIDNV' ( in uint SMIDNV) 0:254 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:261 Function Definition: sm_builtins( ( global void) 0:261 Function Definition: sm_builtins( ( global void)
0:261 Function Parameters: 0:261 Function Parameters:
0:263 Sequence 0:263 Sequence
0:263 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) 0:263 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:264 'gl_SMCountNV' ( in uint SMCountNV) 0:264 'gl_SMCountNV' ( in uint SMCountNV)
0:265 'gl_WarpIDNV' ( in uint WarpIDNV) 0:265 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:266 'gl_SMIDNV' ( in uint SMIDNV) 0:266 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:? Linker Objects 0:? Linker Objects
0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV) 0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
0:? 'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float) 0:? 'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)

0
Test/baseResults/hlsl.earlydepthstencil.frag.out Executable file → Normal file
View File

View File

@ -0,0 +1,178 @@
hlsl.printf.comp
Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:4 Function Definition: @main( ( temp void)
0:4 Function Parameters:
0:? Sequence
0:5 Debug printf ( temp void)
0:5 Constant:
0:5 "first string"
0:6 Debug printf ( temp void)
0:6 Constant:
0:6 "please print this message."
0:7 Debug printf ( temp void)
0:7 Constant:
0:7 "Variables are: %d %d %.2f"
0:7 Constant:
0:7 1 (const uint)
0:7 Constant:
0:7 2 (const uint)
0:7 Constant:
0:7 1.500000
0:8 Debug printf ( temp void)
0:8 Constant:
0:8 "Integers are: %d %d %d"
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 Constant:
0:8 3 (const int)
0:9 Debug printf ( temp void)
0:9 Constant:
0:9 "More: %d %d %d %d %d %d %d %d %d %d"
0:9 Constant:
0:9 1 (const int)
0:9 Constant:
0:9 2 (const int)
0:9 Constant:
0:9 3 (const int)
0:9 Constant:
0:9 4 (const int)
0:9 Constant:
0:9 5 (const int)
0:9 Constant:
0:9 6 (const int)
0:9 Constant:
0:9 7 (const int)
0:9 Constant:
0:9 8 (const int)
0:9 Constant:
0:9 9 (const int)
0:9 Constant:
0:9 10 (const int)
0:4 Function Definition: main( ( temp void)
0:4 Function Parameters:
0:? Sequence
0:4 Function Call: @main( ( temp void)
0:? Linker Objects
0:? 'first' ( const string)
0:? "first string"
Linked compute stage:
Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:4 Function Definition: @main( ( temp void)
0:4 Function Parameters:
0:? Sequence
0:5 Debug printf ( temp void)
0:5 Constant:
0:5 "first string"
0:6 Debug printf ( temp void)
0:6 Constant:
0:6 "please print this message."
0:7 Debug printf ( temp void)
0:7 Constant:
0:7 "Variables are: %d %d %.2f"
0:7 Constant:
0:7 1 (const uint)
0:7 Constant:
0:7 2 (const uint)
0:7 Constant:
0:7 1.500000
0:8 Debug printf ( temp void)
0:8 Constant:
0:8 "Integers are: %d %d %d"
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 Constant:
0:8 3 (const int)
0:9 Debug printf ( temp void)
0:9 Constant:
0:9 "More: %d %d %d %d %d %d %d %d %d %d"
0:9 Constant:
0:9 1 (const int)
0:9 Constant:
0:9 2 (const int)
0:9 Constant:
0:9 3 (const int)
0:9 Constant:
0:9 4 (const int)
0:9 Constant:
0:9 5 (const int)
0:9 Constant:
0:9 6 (const int)
0:9 Constant:
0:9 7 (const int)
0:9 Constant:
0:9 8 (const int)
0:9 Constant:
0:9 9 (const int)
0:9 Constant:
0:9 10 (const int)
0:4 Function Definition: main( ( temp void)
0:4 Function Parameters:
0:? Sequence
0:4 Function Call: @main( ( temp void)
0:? Linker Objects
0:? 'first' ( const string)
0:? "first string"
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 36
Capability Shader
Extension "SPV_KHR_non_semantic_info"
1: ExtInstImport "GLSL.std.450"
9: ExtInstImport "NonSemantic.DebugPrintf"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main"
ExecutionMode 4 LocalSize 1 1 1
8: String "first string"
11: String "please print this message."
13: String "Variables are: %d %d %.2f"
20: String "Integers are: %d %d %d"
26: String "More: %d %d %d %d %d %d %d %d %d %d"
Source HLSL 500
Name 4 "main"
Name 6 "@main("
2: TypeVoid
3: TypeFunction 2
14: TypeInt 32 0
15: 14(int) Constant 1
16: 14(int) Constant 2
17: TypeFloat 32
18: 17(float) Constant 1069547520
21: TypeInt 32 1
22: 21(int) Constant 1
23: 21(int) Constant 2
24: 21(int) Constant 3
27: 21(int) Constant 4
28: 21(int) Constant 5
29: 21(int) Constant 6
30: 21(int) Constant 7
31: 21(int) Constant 8
32: 21(int) Constant 9
33: 21(int) Constant 10
4(main): 2 Function None 3
5: Label
35: 2 FunctionCall 6(@main()
Return
FunctionEnd
6(@main(): 2 Function None 3
7: Label
10: 2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 8
12: 2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 11
19: 2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 13 15 16 18
25: 2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 20 22 23 24
34: 2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 26 22 23 24 27 28 29 30 31 32 33
Return
FunctionEnd

View File

@ -0,0 +1,60 @@
hlsl.round.dx10.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input' ( in 4-component vector of float)
0:? Sequence
0:3 Branch: Return with expression
0:3 roundEven ( temp 4-component vector of float)
0:3 'input' ( in 4-component vector of float)
0:? Linker Objects
Linked fragment stage:
WARNING: Linking fragment stage: Entry point not found
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input' ( in 4-component vector of float)
0:? Sequence
0:3 Branch: Return with expression
0:3 roundEven ( temp 4-component vector of float)
0:3 'input' ( in 4-component vector of float)
0:? Linker Objects
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 17
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
Name 11 "PixelShaderFunction(vf4;"
Name 10 "input"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Function 7(fvec4)
9: TypeFunction 7(fvec4) 8(ptr)
4(main): 2 Function None 3
5: Label
Return
FunctionEnd
11(PixelShaderFunction(vf4;): 7(fvec4) Function None 9
10(input): 8(ptr) FunctionParameter
12: Label
13: 7(fvec4) Load 10(input)
14: 7(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 13
ReturnValue 14
FunctionEnd

View File

@ -0,0 +1,70 @@
hlsl.round.dx9.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input' ( in 4-component vector of float)
0:? Sequence
0:3 Branch: Return with expression
0:3 round ( temp 4-component vector of float)
0:3 'input' ( in 4-component vector of float)
0:? Linker Objects
Linked fragment stage:
WARNING: Linking fragment stage: Entry point not found
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input' ( in 4-component vector of float)
0:? Sequence
0:3 Branch: Return with expression
0:3 round ( temp 4-component vector of float)
0:3 'input' ( in 4-component vector of float)
0:? Linker Objects
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 18
Capability Shader
2: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 5 "main"
ExecutionMode 5 OriginUpperLeft
1: String ""
Source HLSL 500 1 "// OpModuleProcessed auto-map-locations
// OpModuleProcessed auto-map-bindings
// OpModuleProcessed entry-point main
// OpModuleProcessed client vulkan100
// OpModuleProcessed target-env vulkan1.0
// OpModuleProcessed keep-uncalled
// OpModuleProcessed hlsl-offsets
#line 1
"
Name 5 "main"
Name 12 "PixelShaderFunction(vf4;"
Name 11 "input"
3: TypeVoid
4: TypeFunction 3
7: TypeFloat 32
8: TypeVector 7(float) 4
9: TypePointer Function 8(fvec4)
10: TypeFunction 8(fvec4) 9(ptr)
5(main): 3 Function None 4
6: Label
Return
FunctionEnd
12(PixelShaderFunction(vf4;): 8(fvec4) Function None 10
11(input): 9(ptr) FunctionParameter
13: Label
Line 1 3 0
14: 8(fvec4) Load 11(input)
15: 8(fvec4) ExtInst 2(GLSL.std.450) 1(Round) 14
ReturnValue 15
FunctionEnd

View File

@ -97,6 +97,7 @@ gl_FragCoord origin is upper left
0:? 'g_tBuf1du1' (layout( binding=3 r32ui) uniform uimageBuffer) 0:? 'g_tBuf1du1' (layout( binding=3 r32ui) uniform uimageBuffer)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Validation failed
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 42 // Id's are bound by 42

View File

@ -1689,6 +1689,7 @@ gl_FragCoord origin is upper left
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform float uf1, uniform int ui1, uniform uint uu1}) 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform float uf1, uniform int ui1, uniform uint uu1})
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Validation failed
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 571 // Id's are bound by 571

View File

@ -1707,6 +1707,7 @@ gl_FragCoord origin is upper left
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform 2-component vector of float uf2, uniform 2-component vector of int ui2, uniform 2-component vector of uint uu2}) 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform 2-component vector of float uf2, uniform 2-component vector of int ui2, uniform 2-component vector of uint uu2})
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Validation failed
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 605 // Id's are bound by 605

0
Test/baseResults/hlsl.singleArgIntPromo.vert.out Executable file → Normal file
View File

0
Test/baseResults/hlsl.specConstant.frag.out Executable file → Normal file
View File

View File

@ -190,13 +190,13 @@ Validation failed
Decorate 9 BufferBlock Decorate 9 BufferBlock
Decorate 12 BufferBlock Decorate 12 BufferBlock
Decorate 49(sbuf_a) DescriptorSet 0 Decorate 49(sbuf_a) DescriptorSet 0
Decorate 49(sbuf_a) Binding 4 Decorate 49(sbuf_a) Binding 0
Decorate 50(sbuf_a@count) DescriptorSet 0 Decorate 50(sbuf_a@count) DescriptorSet 0
Decorate 50(sbuf_a@count) Binding 6 Decorate 50(sbuf_a@count) Binding 0
Decorate 51(sbuf_c) DescriptorSet 0 Decorate 51(sbuf_c) DescriptorSet 0
Decorate 51(sbuf_c) Binding 5 Decorate 51(sbuf_c) Binding 1
Decorate 52(sbuf_c@count) DescriptorSet 0 Decorate 52(sbuf_c@count) DescriptorSet 0
Decorate 52(sbuf_c@count) Binding 7 Decorate 52(sbuf_c@count) Binding 0
Decorate 58(pos) Flat Decorate 58(pos) Flat
Decorate 58(pos) Location 0 Decorate 58(pos) Location 0
Decorate 61(@entryPointOutput) Location 0 Decorate 61(@entryPointOutput) Location 0

View File

@ -191,9 +191,9 @@ Validation failed
Decorate 18 BufferBlock Decorate 18 BufferBlock
Decorate 20 BufferBlock Decorate 20 BufferBlock
Decorate 47(sbuf2) DescriptorSet 0 Decorate 47(sbuf2) DescriptorSet 0
Decorate 47(sbuf2) Binding 2 Decorate 47(sbuf2) Binding 0
Decorate 48(sbuf2@count) DescriptorSet 0 Decorate 48(sbuf2@count) DescriptorSet 0
Decorate 48(sbuf2@count) Binding 3 Decorate 48(sbuf2@count) Binding 0
Decorate 50(sbuf) DescriptorSet 0 Decorate 50(sbuf) DescriptorSet 0
Decorate 50(sbuf) Binding 10 Decorate 50(sbuf) Binding 10
Decorate 63(pos) Flat Decorate 63(pos) Flat

View File

View File

0
Test/baseResults/link.multiBlocksInvalid.0.0.vert.out Executable file → Normal file
View File

0
Test/baseResults/link.multiBlocksValid.1.0.vert.out Executable file → Normal file
View File

0
Test/baseResults/link.vk.differentPC.0.0.frag.out Executable file → Normal file
View File

0
Test/baseResults/link.vk.differentPC.1.0.frag.out Executable file → Normal file
View File

0
Test/baseResults/link.vk.matchingPC.0.0.frag.out Executable file → Normal file
View File

4
Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out Executable file → Normal file
View File

@ -211,7 +211,7 @@ Shader version: 430
Name 70 "BufferBlock" Name 70 "BufferBlock"
MemberName 70(BufferBlock) 0 "p" MemberName 70(BufferBlock) 0 "p"
Name 72 "uBuf" Name 72 "uBuf"
Decorate 14(oColor) Location 4 Decorate 14(oColor) Location 2
MemberDecorate 16(ColorBlock) 0 Offset 0 MemberDecorate 16(ColorBlock) 0 Offset 0
MemberDecorate 16(ColorBlock) 1 Offset 16 MemberDecorate 16(ColorBlock) 1 Offset 16
MemberDecorate 16(ColorBlock) 2 Offset 32 MemberDecorate 16(ColorBlock) 2 Offset 32
@ -224,7 +224,7 @@ Shader version: 430
Decorate 28(uColorBuf) DescriptorSet 0 Decorate 28(uColorBuf) DescriptorSet 0
Decorate 28(uColorBuf) Binding 0 Decorate 28(uColorBuf) Binding 0
Decorate 32(Vertex) Block Decorate 32(Vertex) Block
Decorate 34(oV) Location 2 Decorate 34(oV) Location 0
MemberDecorate 40(gl_PerVertex) 0 BuiltIn Position MemberDecorate 40(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 40(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 40(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 40(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 40(gl_PerVertex) 2 BuiltIn ClipDistance

8
Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out Executable file → Normal file
View File

@ -304,7 +304,7 @@ output primitive = triangle_strip
MemberName 95(BufferBlock) 0 "p" MemberName 95(BufferBlock) 0 "p"
Name 97 "uBuf" Name 97 "uBuf"
Name 100 "P" Name 100 "P"
Decorate 18(oColor) Location 2 Decorate 18(oColor) Location 1
MemberDecorate 20(ColorBlock) 0 Offset 0 MemberDecorate 20(ColorBlock) 0 Offset 0
MemberDecorate 20(ColorBlock) 1 Offset 16 MemberDecorate 20(ColorBlock) 1 Offset 16
MemberDecorate 20(ColorBlock) 2 Offset 32 MemberDecorate 20(ColorBlock) 2 Offset 32
@ -326,16 +326,16 @@ output primitive = triangle_strip
Decorate 50(uM) DescriptorSet 0 Decorate 50(uM) DescriptorSet 0
Decorate 50(uM) Binding 0 Decorate 50(uM) Binding 0
Decorate 59(Vertex) Block Decorate 59(Vertex) Block
Decorate 61(oV) Location 1 Decorate 61(oV) Location 0
Decorate 64(Vertex) Block Decorate 64(Vertex) Block
Decorate 68(iV) Location 0 Decorate 68(iV) Location 1
MemberDecorate 95(BufferBlock) 0 ColMajor MemberDecorate 95(BufferBlock) 0 ColMajor
MemberDecorate 95(BufferBlock) 0 Offset 0 MemberDecorate 95(BufferBlock) 0 Offset 0
MemberDecorate 95(BufferBlock) 0 MatrixStride 16 MemberDecorate 95(BufferBlock) 0 MatrixStride 16
Decorate 95(BufferBlock) BufferBlock Decorate 95(BufferBlock) BufferBlock
Decorate 97(uBuf) DescriptorSet 0 Decorate 97(uBuf) DescriptorSet 0
Decorate 97(uBuf) Binding 1 Decorate 97(uBuf) Binding 1
Decorate 100(P) Location 4 Decorate 100(P) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32

0
Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out Executable file → Normal file
View File

0
Test/baseResults/link.vk.pcNamingValid.0.0.vert.out Executable file → Normal file
View File

View File

@ -12,7 +12,7 @@ ERROR: 0:88: '' : float literal needs a decimal point or exponent
ERROR: 0:98: '' : numeric literal too big ERROR: 0:98: '' : numeric literal too big
ERROR: 0:101: '' : numeric literal too big ERROR: 0:101: '' : numeric literal too big
ERROR: 0:104: '#' : preprocessor directive cannot be preceded by another token ERROR: 0:104: '#' : preprocessor directive cannot be preceded by another token
ERROR: 0:104: '' : syntax error, unexpected $end, expecting COMMA or SEMICOLON ERROR: 0:104: '' : syntax error, unexpected end of file, expecting COMMA or SEMICOLON
ERROR: 14 compilation errors. No code generated. ERROR: 14 compilation errors. No code generated.

View File

@ -4,8 +4,8 @@ rayQuery-allOps.comp
// Id's are bound by 258 // Id's are bound by 258
Capability Shader Capability Shader
Capability RayQueryProvisionalKHR Capability RayQueryKHR
Capability RayTraversalPrimitiveCullingProvisionalKHR Capability RayTraversalPrimitiveCullingKHR
Extension "SPV_KHR_ray_query" Extension "SPV_KHR_ray_query"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
@ -86,8 +86,9 @@ rayQuery-allOps.comp
35: TypePointer Function 8(float) 35: TypePointer Function 8(float)
37: 18(int) Constant 3 37: 18(int) Constant 3
38: 8(float) Constant 1176255488 38: 8(float) Constant 1176255488
45: TypeRayQueryProvisionalKHR 45: TypeRayQueryKHR
46: TypePointer Function 45 46: TypePointer Private 45
47(rayQuery): 46(ptr) Variable Private
48: TypeAccelerationStructureKHR 48: TypeAccelerationStructureKHR
49: TypePointer UniformConstant 48 49: TypePointer UniformConstant 48
50(rtas): 49(ptr) Variable UniformConstant 50(rtas): 49(ptr) Variable UniformConstant
@ -114,7 +115,6 @@ rayQuery-allOps.comp
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
43(ray): 25(ptr) Variable Function 43(ray): 25(ptr) Variable Function
47(rayQuery): 46(ptr) Variable Function
69(candidateType): 68(ptr) Variable Function 69(candidateType): 68(ptr) Variable Function
78(_mat4x3): 77(ptr) Variable Function 78(_mat4x3): 77(ptr) Variable Function
83(_mat3x4): 82(ptr) Variable Function 83(_mat3x4): 82(ptr) Variable Function
@ -223,7 +223,7 @@ rayQuery-allOps.comp
129: 2 FunctionCall 6(doSomething() 129: 2 FunctionCall 6(doSomething()
Branch 128 Branch 128
128: Label 128: Label
130: 18(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23 130: 14(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
131: 66(bool) UGreaterThan 130 20 131: 66(bool) UGreaterThan 130 20
SelectionMerge 133 None SelectionMerge 133 None
BranchConditional 131 132 133 BranchConditional 131 132 133

View File

@ -4,7 +4,7 @@ rayQuery-allOps.frag
// Id's are bound by 257 // Id's are bound by 257
Capability Shader Capability Shader
Capability RayQueryProvisionalKHR Capability RayQueryKHR
Extension "SPV_KHR_ray_query" Extension "SPV_KHR_ray_query"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
@ -85,8 +85,9 @@ rayQuery-allOps.frag
35: TypePointer Function 8(float) 35: TypePointer Function 8(float)
37: 18(int) Constant 3 37: 18(int) Constant 3
38: 8(float) Constant 1176255488 38: 8(float) Constant 1176255488
45: TypeRayQueryProvisionalKHR 45: TypeRayQueryKHR
46: TypePointer Function 45 46: TypePointer Private 45
47(rayQuery): 46(ptr) Variable Private
48: TypeAccelerationStructureKHR 48: TypeAccelerationStructureKHR
49: TypePointer UniformConstant 48 49: TypePointer UniformConstant 48
50(rtas): 49(ptr) Variable UniformConstant 50(rtas): 49(ptr) Variable UniformConstant
@ -112,7 +113,6 @@ rayQuery-allOps.frag
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
43(ray): 25(ptr) Variable Function 43(ray): 25(ptr) Variable Function
47(rayQuery): 46(ptr) Variable Function
69(candidateType): 68(ptr) Variable Function 69(candidateType): 68(ptr) Variable Function
78(_mat4x3): 77(ptr) Variable Function 78(_mat4x3): 77(ptr) Variable Function
83(_mat3x4): 82(ptr) Variable Function 83(_mat3x4): 82(ptr) Variable Function
@ -221,7 +221,7 @@ rayQuery-allOps.frag
129: 2 FunctionCall 6(doSomething() 129: 2 FunctionCall 6(doSomething()
Branch 128 Branch 128
128: Label 128: Label
130: 18(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23 130: 14(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
131: 66(bool) UGreaterThan 130 20 131: 66(bool) UGreaterThan 130 20
SelectionMerge 133 None SelectionMerge 133 None
BranchConditional 131 132 133 BranchConditional 131 132 133

View File

@ -3,7 +3,7 @@ rayQuery-allOps.rgen
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 257 // Id's are bound by 257
Capability RayQueryProvisionalKHR Capability RayQueryKHR
Capability RayTracingNV Capability RayTracingNV
Extension "SPV_KHR_ray_query" Extension "SPV_KHR_ray_query"
Extension "SPV_NV_ray_tracing" Extension "SPV_NV_ray_tracing"
@ -85,8 +85,9 @@ rayQuery-allOps.rgen
35: TypePointer Function 8(float) 35: TypePointer Function 8(float)
37: 18(int) Constant 3 37: 18(int) Constant 3
38: 8(float) Constant 1176255488 38: 8(float) Constant 1176255488
45: TypeRayQueryProvisionalKHR 45: TypeRayQueryKHR
46: TypePointer Function 45 46: TypePointer Private 45
47(rayQuery): 46(ptr) Variable Private
48: TypeAccelerationStructureKHR 48: TypeAccelerationStructureKHR
49: TypePointer UniformConstant 48 49: TypePointer UniformConstant 48
50(rtas): 49(ptr) Variable UniformConstant 50(rtas): 49(ptr) Variable UniformConstant
@ -112,7 +113,6 @@ rayQuery-allOps.rgen
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
43(ray): 25(ptr) Variable Function 43(ray): 25(ptr) Variable Function
47(rayQuery): 46(ptr) Variable Function
69(candidateType): 68(ptr) Variable Function 69(candidateType): 68(ptr) Variable Function
78(_mat4x3): 77(ptr) Variable Function 78(_mat4x3): 77(ptr) Variable Function
83(_mat3x4): 82(ptr) Variable Function 83(_mat3x4): 82(ptr) Variable Function
@ -221,7 +221,7 @@ rayQuery-allOps.rgen
129: 2 FunctionCall 6(doSomething() 129: 2 FunctionCall 6(doSomething()
Branch 128 Branch 128
128: Label 128: Label
130: 18(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23 130: 14(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
131: 66(bool) UGreaterThan 130 20 131: 66(bool) UGreaterThan 130 20
SelectionMerge 133 None SelectionMerge 133 None
BranchConditional 131 132 133 BranchConditional 131 132 133

View File

@ -0,0 +1,76 @@
rayQuery-global.rgen
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 44
Capability RayQueryKHR
Capability RayTracingKHR
Extension "SPV_KHR_ray_query"
Extension "SPV_KHR_ray_tracing"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint RayGenerationKHR 4 "main"
Source GLSL 460
SourceExtension "GL_EXT_ray_flags_primitive_culling"
SourceExtension "GL_EXT_ray_query"
Name 4 "main"
Name 10 "otherWrapper(rq1;"
Name 9 "rq"
Name 13 "wrapper(rq1;"
Name 12 "rq"
Name 17 "rqGlobal"
Name 22 "rq2"
Name 27 "rtas"
Name 40 "rq2"
Decorate 27(rtas) DescriptorSet 0
Decorate 27(rtas) Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeRayQueryKHR
7: TypePointer Private 6
8: TypeFunction 2 7(ptr)
15: TypeBool
17(rqGlobal): 7(ptr) Variable Private
22(rq2): 7(ptr) Variable Private
25: TypeAccelerationStructureKHR
26: TypePointer UniformConstant 25
27(rtas): 26(ptr) Variable UniformConstant
29: TypeInt 32 0
30: 29(int) Constant 0
31: 29(int) Constant 255
32: TypeFloat 32
33: TypeVector 32(float) 3
34: 32(float) Constant 0
35: 33(fvec3) ConstantComposite 34 34 34
36: 32(float) Constant 1065353216
37: 33(fvec3) ConstantComposite 36 34 34
40(rq2): 7(ptr) Variable Private
4(main): 2 Function None 3
5: Label
28: 25 Load 27(rtas)
RayQueryInitializeKHR 17(rqGlobal) 28 30 31 35 34 37 36
38: 2 FunctionCall 13(wrapper(rq1;) 17(rqGlobal)
39: 2 FunctionCall 10(otherWrapper(rq1;) 17(rqGlobal)
41: 25 Load 27(rtas)
RayQueryInitializeKHR 40(rq2) 41 30 31 35 34 37 36
42: 2 FunctionCall 13(wrapper(rq1;) 40(rq2)
43: 2 FunctionCall 10(otherWrapper(rq1;) 40(rq2)
Return
FunctionEnd
10(otherWrapper(rq1;): 2 Function None 8
9(rq): 7(ptr) FunctionParameter
11: Label
16: 15(bool) RayQueryProceedKHR 9(rq)
18: 15(bool) RayQueryProceedKHR 17(rqGlobal)
Return
FunctionEnd
13(wrapper(rq1;): 2 Function None 8
12(rq): 7(ptr) FunctionParameter
14: Label
19: 15(bool) RayQueryProceedKHR 12(rq)
20: 15(bool) RayQueryProceedKHR 17(rqGlobal)
21: 2 FunctionCall 10(otherWrapper(rq1;) 12(rq)
23: 2 FunctionCall 10(otherWrapper(rq1;) 22(rq2)
24: 2 FunctionCall 10(otherWrapper(rq1;) 17(rqGlobal)
Return
FunctionEnd

View File

@ -3,7 +3,7 @@ rayQuery-initialize.rgen
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 103 // Id's are bound by 103
Capability RayQueryProvisionalKHR Capability RayQueryKHR
Capability RayTracingNV Capability RayTracingNV
Extension "SPV_KHR_ray_query" Extension "SPV_KHR_ray_query"
Extension "SPV_NV_ray_tracing" Extension "SPV_NV_ray_tracing"
@ -55,8 +55,8 @@ rayQuery-initialize.rgen
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0
7: TypeFunction 6(int) 7: TypeFunction 6(int)
10: TypeRayQueryProvisionalKHR 10: TypeRayQueryKHR
11: TypePointer Function 10 11: TypePointer Private 10
12: TypeFloat 32 12: TypeFloat 32
13: TypeVector 12(float) 3 13: TypeVector 12(float) 3
14(Ray): TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float) 14(Ray): TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
@ -88,12 +88,12 @@ rayQuery-initialize.rgen
75: TypePointer Uniform 74(Rays) 75: TypePointer Uniform 74(Rays)
76: 75(ptr) Variable Uniform 76: 75(ptr) Variable Uniform
78: TypePointer Uniform 72(Ray) 78: TypePointer Uniform 72(Ray)
89(rayQuery): 11(ptr) Variable Private
94: 6(int) Constant 32 94: 6(int) Constant 32
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
69(index): 68(ptr) Variable Function 69(index): 68(ptr) Variable Function
71(ray): 15(ptr) Variable Function 71(ray): 15(ptr) Variable Function
89(rayQuery): 11(ptr) Variable Function
90(param): 15(ptr) Variable Function 90(param): 15(ptr) Variable Function
70: 6(int) FunctionCall 8(launchIndex() 70: 6(int) FunctionCall 8(launchIndex()
Store 69(index) 70 Store 69(index) 70

View File

@ -3,7 +3,7 @@ rayQuery-no-cse.rgen
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 107 // Id's are bound by 107
Capability RayQueryProvisionalKHR Capability RayQueryKHR
Capability RayTracingNV Capability RayTracingNV
Extension "SPV_KHR_ray_query" Extension "SPV_KHR_ray_query"
Extension "SPV_NV_ray_tracing" Extension "SPV_NV_ray_tracing"
@ -57,8 +57,8 @@ rayQuery-no-cse.rgen
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0
7: TypeFunction 6(int) 7: TypeFunction 6(int)
10: TypeRayQueryProvisionalKHR 10: TypeRayQueryKHR
11: TypePointer Function 10 11: TypePointer Private 10
12: TypeFloat 32 12: TypeFloat 32
13: TypeVector 12(float) 3 13: TypeVector 12(float) 3
14(Ray): TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float) 14(Ray): TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
@ -90,14 +90,14 @@ rayQuery-no-cse.rgen
75: TypePointer Uniform 74(Rays) 75: TypePointer Uniform 74(Rays)
76: 75(ptr) Variable Uniform 76: 75(ptr) Variable Uniform
78: TypePointer Uniform 72(Ray) 78: TypePointer Uniform 72(Ray)
89(rayQuery1): 11(ptr) Variable Private
94: 6(int) Constant 32 94: 6(int) Constant 32
103(rayQuery2): 11(ptr) Variable Private
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
69(index): 68(ptr) Variable Function 69(index): 68(ptr) Variable Function
71(ray): 15(ptr) Variable Function 71(ray): 15(ptr) Variable Function
89(rayQuery1): 11(ptr) Variable Function
90(param): 15(ptr) Variable Function 90(param): 15(ptr) Variable Function
103(rayQuery2): 11(ptr) Variable Function
104(param): 15(ptr) Variable Function 104(param): 15(ptr) Variable Function
70: 6(int) FunctionCall 8(launchIndex() 70: 6(int) FunctionCall 8(launchIndex()
Store 69(index) 70 Store 69(index) 70

View File

@ -0,0 +1,152 @@
rayQuery-types.comp
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 86
Capability Shader
Capability RayQueryKHR
Extension "SPV_KHR_ray_query"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main"
ExecutionMode 4 LocalSize 16 8 1
Source GLSL 460
SourceExtension "GL_EXT_ray_query"
Name 4 "main"
Name 8 "rayQuery"
Name 11 "tlas"
Name 25 "rq_proceed"
Name 35 "intersectionType"
Name 41 "rayTMin"
Name 43 "rayFlags"
Name 46 "worldRayOrigin"
Name 48 "worldDirection"
Name 50 "intersectionT"
Name 53 "customIndex"
Name 55 "instanceId"
Name 57 "sbtOffset"
Name 59 "geometryIndex"
Name 61 "primitiveIndex"
Name 65 "barys"
Name 67 "frontface"
Name 69 "aabbOpaque"
Name 71 "objRayDirection"
Name 73 "objRayOrigin"
Name 77 "objToWorld"
Name 79 "worldToObj"
Decorate 11(tlas) DescriptorSet 0
Decorate 11(tlas) Binding 0
Decorate 85 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeRayQueryKHR
7: TypePointer Private 6
8(rayQuery): 7(ptr) Variable Private
9: TypeAccelerationStructureKHR
10: TypePointer UniformConstant 9
11(tlas): 10(ptr) Variable UniformConstant
13: TypeInt 32 0
14: 13(int) Constant 0
15: 13(int) Constant 255
16: TypeFloat 32
17: TypeVector 16(float) 3
18: 16(float) Constant 0
19: 17(fvec3) ConstantComposite 18 18 18
20: 16(float) Constant 1065353216
21: 17(fvec3) ConstantComposite 20 18 18
22: 16(float) Constant 1176256512
23: TypeBool
24: TypePointer Function 23(bool)
34: TypePointer Function 13(int)
36: 23(bool) ConstantTrue
37: TypeInt 32 1
38: 37(int) Constant 1
40: TypePointer Function 16(float)
45: TypePointer Function 17(fvec3)
52: TypePointer Function 37(int)
63: TypeVector 16(float) 2
64: TypePointer Function 63(fvec2)
75: TypeMatrix 17(fvec3) 4
76: TypePointer Function 75
81: TypeVector 13(int) 3
82: 13(int) Constant 16
83: 13(int) Constant 8
84: 13(int) Constant 1
85: 81(ivec3) ConstantComposite 82 83 84
4(main): 2 Function None 3
5: Label
25(rq_proceed): 24(ptr) Variable Function
35(intersectionType): 34(ptr) Variable Function
41(rayTMin): 40(ptr) Variable Function
43(rayFlags): 34(ptr) Variable Function
46(worldRayOrigin): 45(ptr) Variable Function
48(worldDirection): 45(ptr) Variable Function
50(intersectionT): 40(ptr) Variable Function
53(customIndex): 52(ptr) Variable Function
55(instanceId): 52(ptr) Variable Function
57(sbtOffset): 34(ptr) Variable Function
59(geometryIndex): 52(ptr) Variable Function
61(primitiveIndex): 52(ptr) Variable Function
65(barys): 64(ptr) Variable Function
67(frontface): 24(ptr) Variable Function
69(aabbOpaque): 24(ptr) Variable Function
71(objRayDirection): 45(ptr) Variable Function
73(objRayOrigin): 45(ptr) Variable Function
77(objToWorld): 76(ptr) Variable Function
79(worldToObj): 76(ptr) Variable Function
12: 9 Load 11(tlas)
RayQueryInitializeKHR 8(rayQuery) 12 14 15 19 18 21 22
26: 23(bool) RayQueryProceedKHR 8(rayQuery)
Store 25(rq_proceed) 26
Branch 27
27: Label
LoopMerge 29 30 None
Branch 31
31: Label
32: 23(bool) Load 25(rq_proceed)
BranchConditional 32 28 29
28: Label
33: 23(bool) RayQueryProceedKHR 8(rayQuery)
Store 25(rq_proceed) 33
Branch 30
30: Label
Branch 27
29: Label
39: 13(int) RayQueryGetIntersectionTypeKHR 8(rayQuery) 38
Store 35(intersectionType) 39
42: 16(float) RayQueryGetRayTMinKHR 8(rayQuery)
Store 41(rayTMin) 42
44: 13(int) RayQueryGetRayFlagsKHR 8(rayQuery)
Store 43(rayFlags) 44
47: 17(fvec3) RayQueryGetWorldRayOriginKHR 8(rayQuery)
Store 46(worldRayOrigin) 47
49: 17(fvec3) RayQueryGetWorldRayDirectionKHR 8(rayQuery)
Store 48(worldDirection) 49
51: 16(float) RayQueryGetIntersectionTKHR 8(rayQuery) 38
Store 50(intersectionT) 51
54: 37(int) RayQueryGetIntersectionInstanceCustomIndexKHR 8(rayQuery) 38
Store 53(customIndex) 54
56: 37(int) RayQueryGetIntersectionInstanceIdKHR 8(rayQuery) 38
Store 55(instanceId) 56
58: 13(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 8(rayQuery) 38
Store 57(sbtOffset) 58
60: 37(int) RayQueryGetIntersectionGeometryIndexKHR 8(rayQuery) 38
Store 59(geometryIndex) 60
62: 37(int) RayQueryGetIntersectionPrimitiveIndexKHR 8(rayQuery) 38
Store 61(primitiveIndex) 62
66: 63(fvec2) RayQueryGetIntersectionBarycentricsKHR 8(rayQuery) 38
Store 65(barys) 66
68: 23(bool) RayQueryGetIntersectionFrontFaceKHR 8(rayQuery) 38
Store 67(frontface) 68
70: 23(bool) RayQueryGetIntersectionCandidateAABBOpaqueKHR 8(rayQuery)
Store 69(aabbOpaque) 70
72: 17(fvec3) RayQueryGetIntersectionObjectRayDirectionKHR 8(rayQuery) 38
Store 71(objRayDirection) 72
74: 17(fvec3) RayQueryGetIntersectionObjectRayOriginKHR 8(rayQuery) 38
Store 73(objRayOrigin) 74
78: 75 RayQueryGetIntersectionObjectToWorldKHR 8(rayQuery) 38
Store 77(objToWorld) 78
80: 75 RayQueryGetIntersectionWorldToObjectKHR 8(rayQuery) 38
Store 79(worldToObj) 80
Return
FunctionEnd

View File

@ -3,7 +3,7 @@ rayQuery.rgen
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 44 // Id's are bound by 44
Capability RayQueryProvisionalKHR Capability RayQueryKHR
Capability RayTracingNV Capability RayTracingNV
Extension "SPV_KHR_ray_query" Extension "SPV_KHR_ray_query"
Extension "SPV_NV_ray_tracing" Extension "SPV_NV_ray_tracing"
@ -39,8 +39,9 @@ rayQuery.rgen
11: TypePointer Function 10(float) 11: TypePointer Function 10(float)
13: 10(float) Constant 0 13: 10(float) Constant 0
15: 10(float) Constant 1148846080 15: 10(float) Constant 1148846080
16: TypeRayQueryProvisionalKHR 16: TypeRayQueryKHR
17: TypePointer Function 16 17: TypePointer Private 16
18(localRayQuery): 17(ptr) Variable Private
19: TypeAccelerationStructureKHR 19: TypeAccelerationStructureKHR
20: TypePointer UniformConstant 19 20: TypePointer UniformConstant 19
21(acc0): 20(ptr) Variable UniformConstant 21(acc0): 20(ptr) Variable UniformConstant
@ -59,7 +60,6 @@ rayQuery.rgen
8(rayFlags): 7(ptr) Variable Function 8(rayFlags): 7(ptr) Variable Function
12(tMin): 11(ptr) Variable Function 12(tMin): 11(ptr) Variable Function
14(tMax): 11(ptr) Variable Function 14(tMax): 11(ptr) Variable Function
18(localRayQuery): 17(ptr) Variable Function
Store 8(rayFlags) 9 Store 8(rayFlags) 9
Store 12(tMin) 13 Store 12(tMin) 13
Store 14(tMax) 15 Store 14(tMax) 15

0
Test/baseResults/spv.1.4.NonWritable.frag.out Executable file → Normal file
View File

View File

0
Test/baseResults/spv.1.4.OpSelect.frag.out Executable file → Normal file
View File

0
Test/baseResults/spv.1.4.image.frag.out Executable file → Normal file
View File

0
Test/baseResults/spv.1.4.sparseTexture.frag.out Executable file → Normal file
View File

0
Test/baseResults/spv.1.4.texture.frag.out Executable file → Normal file
View File

View File

@ -53,7 +53,7 @@ spv.AnyHitShader.rahit
Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
Decorate 53(gl_HitTNV) BuiltIn HitTKHR Decorate 53(gl_HitTNV) BuiltIn HitTNV
Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
@ -153,10 +153,10 @@ spv.AnyHitShader.rahit
SelectionMerge 79 None SelectionMerge 79 None
BranchConditional 77 78 80 BranchConditional 77 78 80
78: Label 78: Label
IgnoreIntersectionKHR IgnoreIntersectionNV
Branch 79 Branch 79
80: Label 80: Label
TerminateRayKHR TerminateRayNV
Branch 79 Branch 79
79: Label 79: Label
Return Return

View File

@ -55,7 +55,7 @@ spv.ClosestHitShader.rchit
Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
Decorate 53(gl_HitTNV) BuiltIn HitTKHR Decorate 53(gl_HitTNV) BuiltIn HitTNV
Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
@ -164,6 +164,6 @@ spv.ClosestHitShader.rchit
68: 60 Load 67(gl_WorldToObjectNV) 68: 60 Load 67(gl_WorldToObjectNV)
Store 66(v14) 68 Store 66(v14) 68
72: 69 Load 71(accNV) 72: 69 Load 71(accNV)
TraceRayKHR 72 73 74 75 76 73 78 77 80 81 82 TraceNV 72 73 74 75 76 73 78 77 80 81 82
Return Return
FunctionEnd FunctionEnd

View File

@ -1,13 +1,13 @@
spv.MissShader.rmiss spv.MissShader.rmiss
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 60 // Id's are bound by 59
Capability RayTracingNV Capability RayTracingNV
Extension "SPV_NV_ray_tracing" Extension "SPV_NV_ray_tracing"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint MissKHR 4 "main" 11 14 21 24 27 30 35 38 EntryPoint MissKHR 4 "main" 11 14 21 24 29 34 37
Source GLSL 460 Source GLSL 460
SourceExtension "GL_NV_ray_tracing" SourceExtension "GL_NV_ray_tracing"
Name 4 "main" Name 4 "main"
@ -19,29 +19,26 @@ spv.MissShader.rmiss
Name 21 "gl_WorldRayOriginNV" Name 21 "gl_WorldRayOriginNV"
Name 23 "v3" Name 23 "v3"
Name 24 "gl_WorldRayDirectionNV" Name 24 "gl_WorldRayDirectionNV"
Name 26 "v4" Name 27 "v4"
Name 27 "gl_ObjectRayOriginNV" Name 29 "gl_IncomingRayFlagsNV"
Name 29 "v5" Name 32 "v6"
Name 30 "gl_ObjectRayDirectionNV" Name 34 "gl_RayTminNV"
Name 33 "v6" Name 36 "v7"
Name 35 "gl_RayTminNV" Name 37 "gl_RayTmaxNV"
Name 37 "v7" Name 41 "accNV"
Name 38 "gl_RayTmaxNV" Name 56 "localPayload"
Name 42 "accNV" Name 58 "incomingPayload"
Name 57 "localPayload"
Name 59 "incomingPayload"
Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
Decorate 21(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR Decorate 21(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR
Decorate 24(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR Decorate 24(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR
Decorate 27(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR Decorate 29(gl_IncomingRayFlagsNV) BuiltIn IncomingRayFlagsKHR
Decorate 30(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR Decorate 34(gl_RayTminNV) BuiltIn RayTminKHR
Decorate 35(gl_RayTminNV) BuiltIn RayTminKHR Decorate 37(gl_RayTmaxNV) BuiltIn RayTmaxKHR
Decorate 38(gl_RayTmaxNV) BuiltIn RayTmaxKHR Decorate 41(accNV) DescriptorSet 0
Decorate 42(accNV) DescriptorSet 0 Decorate 41(accNV) Binding 0
Decorate 42(accNV) Binding 0 Decorate 56(localPayload) Location 0
Decorate 57(localPayload) Location 0 Decorate 58(incomingPayload) Location 1
Decorate 59(incomingPayload) Location 1
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0
@ -56,41 +53,41 @@ spv.MissShader.rmiss
20: TypePointer Input 17(fvec3) 20: TypePointer Input 17(fvec3)
21(gl_WorldRayOriginNV): 20(ptr) Variable Input 21(gl_WorldRayOriginNV): 20(ptr) Variable Input
24(gl_WorldRayDirectionNV): 20(ptr) Variable Input 24(gl_WorldRayDirectionNV): 20(ptr) Variable Input
27(gl_ObjectRayOriginNV): 20(ptr) Variable Input 26: TypePointer Function 6(int)
30(gl_ObjectRayDirectionNV): 20(ptr) Variable Input 28: TypePointer Input 6(int)
32: TypePointer Function 16(float) 29(gl_IncomingRayFlagsNV): 28(ptr) Variable Input
34: TypePointer Input 16(float) 31: TypePointer Function 16(float)
35(gl_RayTminNV): 34(ptr) Variable Input 33: TypePointer Input 16(float)
38(gl_RayTmaxNV): 34(ptr) Variable Input 34(gl_RayTminNV): 33(ptr) Variable Input
40: TypeAccelerationStructureKHR 37(gl_RayTmaxNV): 33(ptr) Variable Input
41: TypePointer UniformConstant 40 39: TypeAccelerationStructureKHR
42(accNV): 41(ptr) Variable UniformConstant 40: TypePointer UniformConstant 39
44: 6(int) Constant 0 41(accNV): 40(ptr) Variable UniformConstant
45: 6(int) Constant 1 43: 6(int) Constant 0
46: 6(int) Constant 2 44: 6(int) Constant 1
47: 6(int) Constant 3 45: 6(int) Constant 2
48: 16(float) Constant 1056964608 46: 6(int) Constant 3
49: 17(fvec3) ConstantComposite 48 48 48 47: 16(float) Constant 1056964608
50: 16(float) Constant 1065353216 48: 17(fvec3) ConstantComposite 47 47 47
51: 17(fvec3) ConstantComposite 50 50 50 49: 16(float) Constant 1065353216
52: 16(float) Constant 1061158912 50: 17(fvec3) ConstantComposite 49 49 49
53: TypeInt 32 1 51: 16(float) Constant 1061158912
54: 53(int) Constant 1 52: TypeInt 32 1
55: TypeVector 16(float) 4 53: 52(int) Constant 1
56: TypePointer RayPayloadKHR 55(fvec4) 54: TypeVector 16(float) 4
57(localPayload): 56(ptr) Variable RayPayloadKHR 55: TypePointer RayPayloadKHR 54(fvec4)
58: TypePointer IncomingRayPayloadKHR 55(fvec4) 56(localPayload): 55(ptr) Variable RayPayloadKHR
59(incomingPayload): 58(ptr) Variable IncomingRayPayloadKHR 57: TypePointer IncomingRayPayloadKHR 54(fvec4)
58(incomingPayload): 57(ptr) Variable IncomingRayPayloadKHR
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(v0): 8(ptr) Variable Function 9(v0): 8(ptr) Variable Function
13(v1): 8(ptr) Variable Function 13(v1): 8(ptr) Variable Function
19(v2): 18(ptr) Variable Function 19(v2): 18(ptr) Variable Function
23(v3): 18(ptr) Variable Function 23(v3): 18(ptr) Variable Function
26(v4): 18(ptr) Variable Function 27(v4): 26(ptr) Variable Function
29(v5): 18(ptr) Variable Function 32(v6): 31(ptr) Variable Function
33(v6): 32(ptr) Variable Function 36(v7): 31(ptr) Variable Function
37(v7): 32(ptr) Variable Function
12: 7(ivec3) Load 11(gl_LaunchIDNV) 12: 7(ivec3) Load 11(gl_LaunchIDNV)
Store 9(v0) 12 Store 9(v0) 12
15: 7(ivec3) Load 14(gl_LaunchSizeNV) 15: 7(ivec3) Load 14(gl_LaunchSizeNV)
@ -99,15 +96,13 @@ spv.MissShader.rmiss
Store 19(v2) 22 Store 19(v2) 22
25: 17(fvec3) Load 24(gl_WorldRayDirectionNV) 25: 17(fvec3) Load 24(gl_WorldRayDirectionNV)
Store 23(v3) 25 Store 23(v3) 25
28: 17(fvec3) Load 27(gl_ObjectRayOriginNV) 30: 6(int) Load 29(gl_IncomingRayFlagsNV)
Store 26(v4) 28 Store 27(v4) 30
31: 17(fvec3) Load 30(gl_ObjectRayDirectionNV) 35: 16(float) Load 34(gl_RayTminNV)
Store 29(v5) 31 Store 32(v6) 35
36: 16(float) Load 35(gl_RayTminNV) 38: 16(float) Load 37(gl_RayTmaxNV)
Store 33(v6) 36 Store 36(v7) 38
39: 16(float) Load 38(gl_RayTmaxNV) 42: 39 Load 41(accNV)
Store 37(v7) 39 TraceNV 42 43 44 45 46 43 48 47 50 51 53
43: 40 Load 42(accNV)
TraceRayKHR 43 44 45 46 47 44 49 48 51 52 54
Return Return
FunctionEnd FunctionEnd

View File

@ -55,6 +55,6 @@ spv.RayCallable.rcall
Store 13(size) 15 Store 13(size) 15
23: 22(ptr) AccessChain 18 20 23: 22(ptr) AccessChain 18 20
Store 23 21 Store 23 21
ExecuteCallableKHR 24 25 ExecuteCallableNV 24 25
Return Return
FunctionEnd FunctionEnd

View File

@ -41,6 +41,6 @@ spv.RayConstants.rgen
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9: 6 Load 8(accNV) 9: 6 Load 8(accNV)
TraceRayKHR 9 11 12 13 13 12 17 18 20 21 23 TraceNV 9 11 12 13 13 12 17 18 20 21 23
Return Return
FunctionEnd FunctionEnd

View File

@ -92,6 +92,6 @@ spv.RayGenShader.rgen
44: 36(fvec3) Load 43 44: 36(fvec3) Load 43
47: 42(ptr) AccessChain 39 46 47: 42(ptr) AccessChain 39 46
48: 36(fvec3) Load 47 48: 36(fvec3) Load 47
TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41 TraceNV 30 31 32 33 34 12 44 45 48 49 41
Return Return
FunctionEnd FunctionEnd

2
Test/baseResults/spv.RayGenShader11.rgen.out Executable file → Normal file
View File

@ -88,6 +88,6 @@ spv.RayGenShader11.rgen
44: 36(fvec3) Load 43 44: 36(fvec3) Load 43
47: 42(ptr) AccessChain 39 46 47: 42(ptr) AccessChain 39 46
48: 36(fvec3) Load 47 48: 36(fvec3) Load 47
TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41 TraceNV 30 31 32 33 34 12 44 45 48 49 41
Return Return
FunctionEnd FunctionEnd

View File

@ -111,7 +111,7 @@ spv.RayGenShaderArray.rgen
51: 32(fvec3) Load 50 51: 32(fvec3) Load 50
54: 49(ptr) AccessChain 36 53 54: 49(ptr) AccessChain 36 53
55: 32(fvec3) Load 54 55: 32(fvec3) Load 54
TraceRayKHR 43 44 45 46 47 12 51 52 55 56 48 TraceNV 43 44 45 46 47 12 51 52 55 56 48
61: 38(ptr) AccessChain 36 37 61: 38(ptr) AccessChain 36 37
62: 33(int) Load 61 62: 33(int) Load 61
63: 41(ptr) AccessChain 60(accNV1) 62 63: 41(ptr) AccessChain 60(accNV1) 62
@ -124,7 +124,7 @@ spv.RayGenShaderArray.rgen
70: 32(fvec3) Load 69 70: 32(fvec3) Load 69
71: 49(ptr) AccessChain 36 53 71: 49(ptr) AccessChain 36 53
72: 32(fvec3) Load 71 72: 32(fvec3) Load 71
TraceRayKHR 64 65 66 67 68 12 70 52 72 56 48 TraceNV 64 65 66 67 68 12 70 52 72 56 48
73: 38(ptr) AccessChain 36 37 73: 38(ptr) AccessChain 36 37
74: 33(int) Load 73 74: 33(int) Load 73
75: 33(int) CopyObject 74 75: 33(int) CopyObject 74
@ -138,6 +138,6 @@ spv.RayGenShaderArray.rgen
83: 32(fvec3) Load 82 83: 32(fvec3) Load 82
84: 49(ptr) AccessChain 36 53 84: 49(ptr) AccessChain 36 53
85: 32(fvec3) Load 84 85: 32(fvec3) Load 84
TraceRayKHR 77 78 79 80 81 12 83 52 85 56 48 TraceNV 77 78 79 80 81 12 83 52 85 56 48
Return Return
FunctionEnd FunctionEnd

0
Test/baseResults/spv.atomicFloat.comp.out Executable file → Normal file
View File

0
Test/baseResults/spv.atomicFloat_Error.comp.out Executable file → Normal file
View File

0
Test/baseResults/spv.bufferhandleUvec2.frag.out Executable file → Normal file
View File

View File

@ -0,0 +1,53 @@
spv.builtin.PrimitiveShadingRateEXT.vert
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 26
Capability Shader
Capability FragmentShadingRateKHR
Extension "SPV_KHR_fragment_shading_rate"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 8 16
Source GLSL 450
SourceExtension "GL_EXT_fragment_shading_rate"
Name 4 "main"
Name 8 "id"
Name 16 "gl_PrimitiveShadingRateEXT"
Decorate 8(id) Location 0
Decorate 16(gl_PrimitiveShadingRateEXT) BuiltIn PrimitiveShadingRateKHR
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypePointer Input 6(int)
8(id): 7(ptr) Variable Input
15: TypePointer Output 6(int)
16(gl_PrimitiveShadingRateEXT): 15(ptr) Variable Output
17: 6(int) Constant 5
19: 6(int) Constant 9
21: 6(int) Constant 6
23: 6(int) Constant 10
4(main): 2 Function None 3
5: Label
9: 6(int) Load 8(id)
SelectionMerge 14 None
Switch 9 14
case 0: 10
case 1: 11
case 2: 12
case 3: 13
10: Label
Store 16(gl_PrimitiveShadingRateEXT) 17
Branch 14
11: Label
Store 16(gl_PrimitiveShadingRateEXT) 19
Branch 14
12: Label
Store 16(gl_PrimitiveShadingRateEXT) 21
Branch 14
13: Label
Store 16(gl_PrimitiveShadingRateEXT) 23
Branch 14
14: Label
Return
FunctionEnd

View File

@ -0,0 +1,36 @@
spv.builtin.ShadingRateEXT.frag
WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
"precision mediump int; precision highp float;"
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 12
Capability Shader
Capability FragmentShadingRateKHR
Extension "SPV_KHR_fragment_shading_rate"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 8 10
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_EXT_fragment_shading_rate"
Name 4 "main"
Name 8 "val"
Name 10 "gl_ShadingRateEXT"
Decorate 8(val) Location 0
Decorate 10(gl_ShadingRateEXT) Flat
Decorate 10(gl_ShadingRateEXT) BuiltIn ShadingRateKHR
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypePointer Output 6(int)
8(val): 7(ptr) Variable Output
9: TypePointer Input 6(int)
10(gl_ShadingRateEXT): 9(ptr) Variable Input
4(main): 2 Function None 3
5: Label
11: 6(int) Load 10(gl_ShadingRateEXT)
Store 8(val) 11
Return
FunctionEnd

View File

@ -0,0 +1,41 @@
spv.ext.AccelDecl.frag
// Module Version 10400
// Generated by (magic number): 8000a
// Id's are bound by 15
Capability Shader
Capability RayQueryKHR
Extension "SPV_KHR_ray_query"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 9 14
ExecutionMode 4 OriginUpperLeft
Source GLSL 460
SourceExtension "GL_ARB_separate_shader_objects"
SourceExtension "GL_EXT_nonuniform_qualifier"
SourceExtension "GL_EXT_ray_query"
SourceExtension "GL_EXT_scalar_block_layout"
SourceExtension "GL_GOOGLE_cpp_style_line_directive"
SourceExtension "GL_GOOGLE_include_directive"
Name 4 "main"
Name 9 "outColor"
Name 14 "topLevelAS"
Decorate 9(outColor) Location 0
Decorate 14(topLevelAS) DescriptorSet 0
Decorate 14(topLevelAS) Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Output 7(fvec4)
9(outColor): 8(ptr) Variable Output
10: 6(float) Constant 0
11: 7(fvec4) ConstantComposite 10 10 10 10
12: TypeAccelerationStructureKHR
13: TypePointer UniformConstant 12
14(topLevelAS): 13(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
Store 9(outColor) 11
Return
FunctionEnd

View File

@ -1,15 +1,17 @@
spv.ext.AnyHitShader.rahit spv.ext.AnyHitShader.rahit
// Module Version 10400 // Module Version 10400
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 94 // Id's are bound by 107
Capability RayTracingProvisionalKHR Capability GroupNonUniform
Capability RayTracingKHR
Extension "SPV_KHR_ray_tracing" Extension "SPV_KHR_ray_tracing"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 98
Source GLSL 460 Source GLSL 460
SourceExtension "GL_EXT_ray_tracing" SourceExtension "GL_EXT_ray_tracing"
SourceExtension "GL_KHR_shader_subgroup_basic"
Name 4 "main" Name 4 "main"
Name 9 "v0" Name 9 "v0"
Name 11 "gl_LaunchIDEXT" Name 11 "gl_LaunchIDEXT"
@ -48,6 +50,7 @@ spv.ext.AnyHitShader.rahit
Name 79 "v17" Name 79 "v17"
Name 80 "gl_WorldToObject3x4EXT" Name 80 "gl_WorldToObject3x4EXT"
Name 84 "incomingPayload" Name 84 "incomingPayload"
Name 98 "gl_SubgroupSize"
Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@ -59,7 +62,7 @@ spv.ext.AnyHitShader.rahit
Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
Decorate 53(gl_HitTEXT) BuiltIn HitTKHR Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR
Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
@ -67,6 +70,9 @@ spv.ext.AnyHitShader.rahit
Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
Decorate 84(incomingPayload) Location 1 Decorate 84(incomingPayload) Location 1
Decorate 98(gl_SubgroupSize) RelaxedPrecision
Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize
Decorate 99 RelaxedPrecision
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0
@ -114,6 +120,9 @@ spv.ext.AnyHitShader.rahit
86: 72(fvec4) ConstantComposite 85 85 85 85 86: 72(fvec4) ConstantComposite 85 85 85 85
88: 16(int) Constant 1 88: 16(int) Constant 1
89: TypeBool 89: TypeBool
94: 6(int) Constant 0
98(gl_SubgroupSize): 57(ptr) Variable Input
101: TypePointer IncomingRayPayloadKHR 28(float)
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(v0): 8(ptr) Variable Function 9(v0): 8(ptr) Variable Function
@ -176,13 +185,16 @@ spv.ext.AnyHitShader.rahit
87: 16(int) Load 18(v2) 87: 16(int) Load 18(v2)
90: 89(bool) IEqual 87 88 90: 89(bool) IEqual 87 88
SelectionMerge 92 None SelectionMerge 92 None
BranchConditional 90 91 93 BranchConditional 90 91 92
91: Label 91: Label
IgnoreIntersectionKHR IgnoreIntersectionKHR
Branch 92
93: Label
TerminateRayKHR
Branch 92
92: Label 92: Label
Return 99: 6(int) Load 98(gl_SubgroupSize)
100: 28(float) ConvertUToF 99
102: 101(ptr) AccessChain 84(incomingPayload) 94
103: 28(float) Load 102
104: 28(float) FAdd 103 100
105: 101(ptr) AccessChain 84(incomingPayload) 94
Store 105 104
TerminateRayKHR
FunctionEnd FunctionEnd

View File

@ -3,7 +3,7 @@ spv.ext.ClosestHitShader.rchit
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 101 // Id's are bound by 101
Capability RayTracingProvisionalKHR Capability RayTracingKHR
Extension "SPV_KHR_ray_tracing" Extension "SPV_KHR_ray_tracing"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
@ -48,8 +48,8 @@ spv.ext.ClosestHitShader.rchit
Name 79 "v17" Name 79 "v17"
Name 80 "gl_WorldToObject3x4EXT" Name 80 "gl_WorldToObject3x4EXT"
Name 85 "accEXT" Name 85 "accEXT"
Name 98 "localPayload" Name 98 "incomingPayload"
Name 100 "incomingPayload" Name 100 "localPayload"
Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@ -61,7 +61,7 @@ spv.ext.ClosestHitShader.rchit
Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
Decorate 53(gl_HitTEXT) BuiltIn HitTKHR Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR
Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
@ -70,8 +70,8 @@ spv.ext.ClosestHitShader.rchit
Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
Decorate 85(accEXT) DescriptorSet 0 Decorate 85(accEXT) DescriptorSet 0
Decorate 85(accEXT) Binding 0 Decorate 85(accEXT) Binding 0
Decorate 98(localPayload) Location 0 Decorate 98(incomingPayload) Location 1
Decorate 100(incomingPayload) Location 1 Decorate 100(localPayload) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0
@ -126,10 +126,10 @@ spv.ext.ClosestHitShader.rchit
94: 29(fvec3) ConstantComposite 93 93 93 94: 29(fvec3) ConstantComposite 93 93 93
95: 28(float) Constant 1061158912 95: 28(float) Constant 1061158912
96: 16(int) Constant 1 96: 16(int) Constant 1
97: TypePointer RayPayloadKHR 72(fvec4) 97: TypePointer IncomingRayPayloadKHR 72(fvec4)
98(localPayload): 97(ptr) Variable RayPayloadKHR 98(incomingPayload): 97(ptr) Variable IncomingRayPayloadKHR
99: TypePointer IncomingRayPayloadKHR 72(fvec4) 99: TypePointer RayPayloadKHR 72(fvec4)
100(incomingPayload): 99(ptr) Variable IncomingRayPayloadKHR 100(localPayload): 99(ptr) Variable RayPayloadKHR
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(v0): 8(ptr) Variable Function 9(v0): 8(ptr) Variable Function
@ -189,6 +189,6 @@ spv.ext.ClosestHitShader.rchit
82: 73 Transpose 81 82: 73 Transpose 81
Store 79(v17) 82 Store 79(v17) 82
86: 83 Load 85(accEXT) 86: 83 Load 85(accEXT)
TraceRayKHR 86 87 88 89 90 87 92 91 94 95 96 TraceRayKHR 86 87 88 89 90 87 92 91 94 95 98(incomingPayload)
Return Return
FunctionEnd FunctionEnd

View File

@ -1,10 +1,12 @@
spv.ext.ClosestHitShader_Errors.rchit spv.ext.ClosestHitShader_Errors.rchit
ERROR: 0:8: 'assign' : l-value required "payload" (cannot modify hitAttributeNV in this stage) ERROR: 0:6: 'location' : overlapping use of location 2
ERROR: 0:9: 'reportIntersectionEXT' : no matching overloaded function found ERROR: 0:9: 'assign' : l-value required "payload" (cannot modify hitAttributeNV in this stage)
ERROR: 0:10: 'terminateRayEXT' : no matching overloaded function found ERROR: 0:10: 'reportIntersectionEXT' : no matching overloaded function found
ERROR: 0:11: 'ignoreIntersectionEXT' : no matching overloaded function found ERROR: 0:11: 'terminateRayEXT' : not supported in this stage: closest-hit
ERROR: 0:12: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling ERROR: 0:12: 'ignoreIntersectionEXT' : not supported in this stage: closest-hit
ERROR: 5 compilation errors. No code generated. ERROR: 0:13: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling
ERROR: 0:14: 'no rayPayloadEXT/rayPayloadInEXT declared' : with layout(location = 0)
ERROR: 7 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link SPIR-V is not generated for failed compile or link

View File

@ -0,0 +1,114 @@
spv.ext.ClosestHitShader_Subgroup.rchit
// Module Version 10400
// Generated by (magic number): 8000a
// Id's are bound by 67
Capability Int64
Capability GroupNonUniform
Capability GroupNonUniformBallot
Capability SubgroupBallotKHR
Capability RayTracingKHR
Capability VulkanMemoryModelKHR
Capability ShaderSMBuiltinsNV
Extension "SPV_KHR_ray_tracing"
Extension "SPV_KHR_shader_ballot"
Extension "SPV_KHR_vulkan_memory_model"
Extension "SPV_NV_shader_sm_builtins"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical VulkanKHR
EntryPoint ClosestHitKHR 4 "main" 8 26 28 34 43 48 53 61
Source GLSL 460
SourceExtension "GL_ARB_shader_ballot"
SourceExtension "GL_EXT_ray_tracing"
SourceExtension "GL_KHR_shader_subgroup_ballot"
SourceExtension "GL_KHR_shader_subgroup_basic"
SourceExtension "GL_NV_shader_sm_builtins"
Name 4 "main"
Name 8 "accEXT"
Name 26 "incomingPayload"
Name 28 "gl_SubgroupInvocationID"
Name 34 "gl_SubGroupGeMaskARB"
Name 43 "gl_SubgroupGtMask"
Name 48 "gl_SubgroupLeMask"
Name 53 "gl_SubGroupLtMaskARB"
Name 61 "gl_SMIDNV"
Decorate 8(accEXT) DescriptorSet 0
Decorate 8(accEXT) Binding 0
Decorate 26(incomingPayload) Location 1
Decorate 28(gl_SubgroupInvocationID) RelaxedPrecision
Decorate 28(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 29 RelaxedPrecision
Decorate 34(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
Decorate 43(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
Decorate 48(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
Decorate 53(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
Decorate 61(gl_SMIDNV) BuiltIn SMIDNV
2: TypeVoid
3: TypeFunction 2
6: TypeAccelerationStructureKHR
7: TypePointer UniformConstant 6
8(accEXT): 7(ptr) Variable UniformConstant
10: TypeInt 32 0
11: 10(int) Constant 0
12: 10(int) Constant 1
13: 10(int) Constant 2
14: 10(int) Constant 3
15: TypeFloat 32
16: TypeVector 15(float) 3
17: 15(float) Constant 1056964608
18: 16(fvec3) ConstantComposite 17 17 17
19: 15(float) Constant 1065353216
20: 16(fvec3) ConstantComposite 19 19 19
21: 15(float) Constant 1061158912
22: TypeInt 32 1
23: 22(int) Constant 1
24: TypeVector 15(float) 4
25: TypePointer IncomingRayPayloadKHR 24(fvec4)
26(incomingPayload): 25(ptr) Variable IncomingRayPayloadKHR
27: TypePointer Input 10(int)
28(gl_SubgroupInvocationID): 27(ptr) Variable Input
31: TypeVector 10(int) 4
32: TypeInt 64 0
33: TypePointer Input 31(ivec4)
34(gl_SubGroupGeMaskARB): 33(ptr) Variable Input
38: TypeVector 10(int) 2
43(gl_SubgroupGtMask): 33(ptr) Variable Input
48(gl_SubgroupLeMask): 33(ptr) Variable Input
53(gl_SubGroupLtMaskARB): 33(ptr) Variable Input
61(gl_SMIDNV): 27(ptr) Variable Input
65: TypePointer IncomingRayPayloadKHR 15(float)
4(main): 2 Function None 3
5: Label
9: 6 Load 8(accEXT)
TraceRayKHR 9 11 12 13 14 11 18 17 20 21 26(incomingPayload)
29: 10(int) Load 28(gl_SubgroupInvocationID) Volatile
30: 15(float) ConvertUToF 29
35: 31(ivec4) Load 34(gl_SubGroupGeMaskARB)
36: 10(int) CompositeExtract 35 0
37: 10(int) CompositeExtract 35 1
39: 38(ivec2) CompositeConstruct 36 37
40: 32(int64_t) Bitcast 39
41: 15(float) ConvertUToF 40
42: 15(float) FAdd 30 41
44: 31(ivec4) Load 43(gl_SubgroupGtMask) Volatile
45: 24(fvec4) ConvertUToF 44
46: 15(float) CompositeExtract 45 0
47: 15(float) FAdd 42 46
49: 31(ivec4) Load 48(gl_SubgroupLeMask) Volatile
50: 24(fvec4) ConvertUToF 49
51: 15(float) CompositeExtract 50 0
52: 15(float) FAdd 47 51
54: 31(ivec4) Load 53(gl_SubGroupLtMaskARB)
55: 10(int) CompositeExtract 54 0
56: 10(int) CompositeExtract 54 1
57: 38(ivec2) CompositeConstruct 55 56
58: 32(int64_t) Bitcast 57
59: 15(float) ConvertUToF 58
60: 15(float) FAdd 52 59
62: 10(int) Load 61(gl_SMIDNV) Volatile
63: 15(float) ConvertUToF 62
64: 15(float) FAdd 60 63
66: 65(ptr) AccessChain 26(incomingPayload) 11
Store 66 64
Return
FunctionEnd

View File

@ -3,7 +3,7 @@ spv.ext.IntersectShader.rint
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 81 // Id's are bound by 81
Capability RayTracingProvisionalKHR Capability RayTracingKHR
Extension "SPV_KHR_ray_tracing" Extension "SPV_KHR_ray_tracing"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
@ -53,6 +53,8 @@ spv.ext.IntersectShader.rint
Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
Decorate 50(gl_RayTmaxEXT) Volatile
Decorate 50(gl_RayTmaxEXT) Coherent
Decorate 56(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR Decorate 56(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR

View File

@ -1,15 +1,25 @@
spv.ext.MissShader.rmiss spv.ext.MissShader.rmiss
// Module Version 10400 // Module Version 10400
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 54 // Id's are bound by 71
Capability RayTracingProvisionalKHR Capability GroupNonUniform
Capability GroupNonUniformBallot
Capability SubgroupBallotKHR
Capability RayTracingKHR
Capability ShaderSMBuiltinsNV
Extension "SPV_KHR_ray_tracing" Extension "SPV_KHR_ray_tracing"
Extension "SPV_KHR_shader_ballot"
Extension "SPV_NV_shader_sm_builtins"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53 EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53 58 63 70
Source GLSL 460 Source GLSL 460
SourceExtension "GL_ARB_shader_ballot"
SourceExtension "GL_EXT_ray_tracing" SourceExtension "GL_EXT_ray_tracing"
SourceExtension "GL_KHR_shader_subgroup_ballot"
SourceExtension "GL_KHR_shader_subgroup_basic"
SourceExtension "GL_NV_shader_sm_builtins"
Name 4 "main" Name 4 "main"
Name 9 "v0" Name 9 "v0"
Name 11 "gl_LaunchIDEXT" Name 11 "gl_LaunchIDEXT"
@ -24,8 +34,11 @@ spv.ext.MissShader.rmiss
Name 31 "v5" Name 31 "v5"
Name 32 "gl_RayTmaxEXT" Name 32 "gl_RayTmaxEXT"
Name 36 "accEXT" Name 36 "accEXT"
Name 51 "localPayload" Name 51 "incomingPayload"
Name 53 "incomingPayload" Name 53 "gl_SubGroupSizeARB"
Name 58 "gl_SubgroupEqMask"
Name 63 "gl_WarpIDNV"
Name 70 "localPayload"
Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
@ -34,8 +47,17 @@ spv.ext.MissShader.rmiss
Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
Decorate 36(accEXT) DescriptorSet 0 Decorate 36(accEXT) DescriptorSet 0
Decorate 36(accEXT) Binding 0 Decorate 36(accEXT) Binding 0
Decorate 51(localPayload) Location 0 Decorate 51(incomingPayload) Location 1
Decorate 53(incomingPayload) Location 1 Decorate 53(gl_SubGroupSizeARB) BuiltIn SubgroupSize
Decorate 53(gl_SubGroupSizeARB) Volatile
Decorate 53(gl_SubGroupSizeARB) Coherent
Decorate 58(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
Decorate 58(gl_SubgroupEqMask) Volatile
Decorate 58(gl_SubgroupEqMask) Coherent
Decorate 63(gl_WarpIDNV) BuiltIn WarpIDNV
Decorate 63(gl_WarpIDNV) Volatile
Decorate 63(gl_WarpIDNV) Coherent
Decorate 70(localPayload) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0
@ -69,10 +91,17 @@ spv.ext.MissShader.rmiss
47: TypeInt 32 1 47: TypeInt 32 1
48: 47(int) Constant 1 48: 47(int) Constant 1
49: TypeVector 16(float) 4 49: TypeVector 16(float) 4
50: TypePointer RayPayloadKHR 49(fvec4) 50: TypePointer IncomingRayPayloadKHR 49(fvec4)
51(localPayload): 50(ptr) Variable RayPayloadKHR 51(incomingPayload): 50(ptr) Variable IncomingRayPayloadKHR
52: TypePointer IncomingRayPayloadKHR 49(fvec4) 52: TypePointer Input 6(int)
53(incomingPayload): 52(ptr) Variable IncomingRayPayloadKHR 53(gl_SubGroupSizeARB): 52(ptr) Variable Input
56: TypeVector 6(int) 4
57: TypePointer Input 56(ivec4)
58(gl_SubgroupEqMask): 57(ptr) Variable Input
63(gl_WarpIDNV): 52(ptr) Variable Input
67: TypePointer IncomingRayPayloadKHR 16(float)
69: TypePointer RayPayloadKHR 49(fvec4)
70(localPayload): 69(ptr) Variable RayPayloadKHR
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(v0): 8(ptr) Variable Function 9(v0): 8(ptr) Variable Function
@ -94,6 +123,17 @@ spv.ext.MissShader.rmiss
33: 16(float) Load 32(gl_RayTmaxEXT) 33: 16(float) Load 32(gl_RayTmaxEXT)
Store 31(v5) 33 Store 31(v5) 33
37: 34 Load 36(accEXT) 37: 34 Load 36(accEXT)
TraceRayKHR 37 38 39 40 41 38 43 42 45 46 48 TraceRayKHR 37 38 39 40 41 38 43 42 45 46 51(incomingPayload)
54: 6(int) Load 53(gl_SubGroupSizeARB)
55: 16(float) ConvertUToF 54
59: 56(ivec4) Load 58(gl_SubgroupEqMask)
60: 49(fvec4) ConvertUToF 59
61: 16(float) CompositeExtract 60 0
62: 16(float) FAdd 55 61
64: 6(int) Load 63(gl_WarpIDNV)
65: 16(float) ConvertUToF 64
66: 16(float) FAdd 62 65
68: 67(ptr) AccessChain 51(incomingPayload) 38
Store 68 66
Return Return
FunctionEnd FunctionEnd

View File

@ -13,8 +13,8 @@ ERROR: 0:10: '=' : cannot convert from ' temp float' to ' temp highp 4X3 matrix
ERROR: 0:11: 'gl_HitTEXT' : undeclared identifier ERROR: 0:11: 'gl_HitTEXT' : undeclared identifier
ERROR: 0:12: 'gl_HitKindEXT' : undeclared identifier ERROR: 0:12: 'gl_HitKindEXT' : undeclared identifier
ERROR: 0:13: 'reportIntersectionEXT' : no matching overloaded function found ERROR: 0:13: 'reportIntersectionEXT' : no matching overloaded function found
ERROR: 0:14: 'ignoreIntersectionEXT' : no matching overloaded function found ERROR: 0:14: 'ignoreIntersectionEXT' : not supported in this stage: miss
ERROR: 0:15: 'terminateRayEXT' : no matching overloaded function found ERROR: 0:15: 'terminateRayEXT' : not supported in this stage: miss
ERROR: 16 compilation errors. No code generated. ERROR: 16 compilation errors. No code generated.

Some files were not shown because too many files have changed in this diff Show More