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/spirv-tools
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
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
script:

View File

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

View File

@ -228,9 +228,15 @@ function(glslang_set_link_args TARGET)
endif()
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,
# 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
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
* `.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
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
```
TEMPORARY NOTICE: additionally perform the following to avoid a current
breakage in googletest:
```bash
cd External/googletest
git checkout 0c400f67fcf305869c5fb113dd296eca266c9725
cd ../..
```
If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan,
wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, or wish to run the
integrated test suite, install spirv-tools with this:
@ -184,6 +193,36 @@ cmake --build . --config Release --target install
If using MSVC, after running CMake to configure, use the
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
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_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_image_int64 = "SPV_EXT_shader_image_int64";
#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_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_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

View File

@ -149,6 +149,7 @@ protected:
spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier);
spv::Decoration TranslateAuxiliaryStorageDecoration(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::MemoryAccessMask TranslateMemoryAccess(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);
void makeFunctions(const glslang::TIntermSequence&);
void makeGlobalInitializers(const glslang::TIntermSequence&);
void collectRayTracingLinkerObjects();
void visitFunctions(const glslang::TIntermSequence&);
void handleFunctionEntry(const glslang::TIntermAggregate* node);
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.
// Maps <builtin-variable-id -> AST-required-type-id>
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;
}
// 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(
const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
{
@ -614,6 +633,7 @@ spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCohere
flags.volatil;
flags.isImage = type.getBasicType() == glslang::EbtSampler;
#endif
flags.nonUniform = type.getQualifier().nonUniform;
return flags;
}
@ -709,13 +729,20 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
return spv::BuiltInCullDistance;
case glslang::EbvViewportIndex:
builder.addCapability(spv::CapabilityMultiViewport);
if (glslangIntermediate->getStage() == EShLangGeometry ||
glslangIntermediate->getStage() == EShLangFragment) {
builder.addCapability(spv::CapabilityMultiViewport);
}
if (glslangIntermediate->getStage() == EShLangVertex ||
glslangIntermediate->getStage() == EShLangTessControl ||
glslangIntermediate->getStage() == EShLangTessEvaluation) {
builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
if (builder.getSpvVersion() < spv::Spv_1_5) {
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;
@ -734,13 +761,19 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
if (glslangIntermediate->getStage() == EShLangMeshNV) {
return spv::BuiltInLayer;
}
builder.addCapability(spv::CapabilityGeometry);
if (glslangIntermediate->getStage() == EShLangGeometry ||
glslangIntermediate->getStage() == EShLangFragment) {
builder.addCapability(spv::CapabilityGeometry);
}
if (glslangIntermediate->getStage() == EShLangVertex ||
glslangIntermediate->getStage() == EShLangTessControl ||
glslangIntermediate->getStage() == EShLangTessEvaluation) {
builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
if (builder.getSpvVersion() < spv::Spv_1_5) {
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;
@ -769,6 +802,16 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder.addCapability(spv::CapabilityStencilExportEXT);
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::EbvTessLevelInner: return spv::BuiltInTessLevelInner;
case glslang::EbvTessLevelOuter: return spv::BuiltInTessLevelOuter;
@ -963,7 +1006,17 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case glslang::EbvInstanceCustomIndex:
return spv::BuiltInInstanceCustomIndexKHR;
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:
return spv::BuiltInHitKindKHR;
case glslang::EbvObjectToWorld:
@ -1071,6 +1124,10 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
builder.addCapability(spv::CapabilityStorageImageExtendedFormats);
break;
case glslang::ElfR64ui:
case glslang::ElfR64i:
builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
builder.addCapability(spv::CapabilityInt64ImageEXT);
default:
break;
}
@ -1117,6 +1174,8 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
case glslang::ElfRg8ui: return spv::ImageFormatRg8ui;
case glslang::ElfR16ui: return spv::ImageFormatR16ui;
case glslang::ElfR8ui: return spv::ImageFormatR8ui;
case glslang::ElfR64ui: return spv::ImageFormatR64ui;
case glslang::ElfR64i: return spv::ImageFormatR64i;
default: return spv::ImageFormatMax;
}
}
@ -1187,7 +1246,7 @@ spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang:
spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type)
{
if (type.getBasicType() == glslang::EbtRayQuery)
return spv::StorageClassFunction;
return spv::StorageClassPrivate;
if (type.getQualifier().isPipeInput())
return spv::StorageClassInput;
if (type.getQualifier().isPipeOutput())
@ -1353,6 +1412,8 @@ void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& pa
if (parent.writeonly)
child.writeonly = true;
#endif
if (parent.nonUniform)
child.nonUniform = true;
}
bool HasNonLayoutQualifiers(const glslang::TType& type, const glslang::TQualifier& qualifier)
@ -1454,7 +1515,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
}
if (glslangIntermediate->getLayoutPrimitiveCulling()) {
builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingProvisionalKHR);
builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingKHR);
}
unsigned int mode;
@ -1621,7 +1682,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
{
auto& extensions = glslangIntermediate->getRequestedExtensions();
if (extensions.find("GL_NV_ray_tracing") == extensions.end()) {
builder.addCapability(spv::CapabilityRayTracingProvisionalKHR);
builder.addCapability(spv::CapabilityRayTracingKHR);
builder.addExtension("SPV_KHR_ray_tracing");
}
else {
@ -1710,6 +1771,12 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
if (symbol->getType().getQualifier().isSpecConstant())
spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
#ifdef ENABLE_HLSL
// Skip symbol handling if it is string-typed
if (symbol->getBasicType() == glslang::EbtString)
return;
#endif
// getSymbolId() will set up all the IO decorations on the first call.
// Formal function parameters were mapped during makeFunctions().
spv::Id id = getSymbolId(symbol);
@ -1852,9 +1919,11 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
spv::Id leftRValue = accessChainLoad(node->getLeft()->getType());
// do the operation
spv::Builder::AccessChain::CoherentFlags coherentFlags = TranslateCoherent(node->getLeft()->getType());
coherentFlags |= TranslateCoherent(node->getRight()->getType());
OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
TranslateNoContractionDecoration(node->getType().getQualifier()),
TranslateNonUniformDecoration(node->getType().getQualifier()) };
TranslateNonUniformDecoration(coherentFlags) };
rValue = createBinaryOperation(node->getOp(), decorations,
convertGlslangToSpvType(node->getType()), leftRValue, rValue,
node->getType().getBasicType());
@ -1885,13 +1954,16 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
if (! node->getLeft()->getType().isArray() &&
node->getLeft()->getType().isVector() &&
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,
// so short circuit the access-chain stuff with a swizzle.
std::vector<unsigned> swizzle;
swizzle.push_back(glslangIndex);
int dummySize;
builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()),
TranslateCoherent(node->getLeft()->getType()),
coherentFlags,
glslangIntermediate->getBaseAlignmentScalar(
node->getLeft()->getType(), dummySize));
} 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
builder.accessChainPush(builder.makeIntConstant(spvIndex),
TranslateCoherent(node->getLeft()->getType()),
coherentFlags,
node->getLeft()->getType().getBufferReferenceAlignment());
// 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
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()) {
int dummySize;
builder.accessChainPushComponent(index, convertGlslangToSpvType(node->getLeft()->getType()),
TranslateCoherent(node->getLeft()->getType()),
builder.accessChainPushComponent(
index, convertGlslangToSpvType(node->getLeft()->getType()), coherent_flags,
glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(),
dummySize));
} else
builder.accessChainPush(index, TranslateCoherent(node->getLeft()->getType()),
node->getLeft()->getType().getBufferReferenceAlignment());
builder.accessChainPush(index, coherent_flags,
node->getLeft()->getType().getBufferReferenceAlignment());
}
return false;
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
if (glslangType.isVector())
break;
std::pair<spv::Id, spv::Id> ret(builder.makeVectorType(builder.makeUintType(32), 4),
builder.makeUintType(64));
spv::Id ivec4_type = builder.makeVectorType(builder.makeUintType(32), 4);
spv::Id uint64_type = builder.makeUintType(64);
std::pair<spv::Id, spv::Id> ret(ivec4_type, uint64_type);
return ret;
}
// 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
builder.clearAccessChain();
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;
components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 0));
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
builder.clearAccessChain();
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);
} else {
@ -2292,7 +2375,8 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
// The result of operation is always stored, but conditionally the
// consumed result. The consumed result is always an r-value.
builder.accessChainStore(result);
builder.accessChainStore(result,
TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags));
builder.clearAccessChain();
if (node->getOp() == glslang::EOpPreIncrement ||
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.
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,
// so do them manually.
visitFunctions(node->getAsAggregate()->getSequence());
@ -2611,6 +2699,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
else
constructed = builder.createConstructor(precision, arguments, resultType());
if (node->getType().getQualifier().isNonUniform()) {
builder.addDecoration(constructed, spv::DecorationNonUniformEXT);
}
builder.clearAccessChain();
builder.setAccessChainRValue(constructed);
@ -2726,10 +2818,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
binOp = node->getOp();
break;
case glslang::EOpIgnoreIntersection:
case glslang::EOpTerminateRay:
case glslang::EOpTrace:
case glslang::EOpExecuteCallable:
case glslang::EOpIgnoreIntersectionNV:
case glslang::EOpTerminateRayNV:
case glslang::EOpTraceNV:
case glslang::EOpTraceKHR:
case glslang::EOpExecuteCallableNV:
case glslang::EOpExecuteCallableKHR:
case glslang::EOpWritePackedPrimitiveIndices4x8NV:
noReturnValue = true;
break;
@ -2738,7 +2832,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpRayQueryGenerateIntersection:
case glslang::EOpRayQueryConfirmIntersection:
builder.addExtension("SPV_KHR_ray_query");
builder.addCapability(spv::CapabilityRayQueryProvisionalKHR);
builder.addCapability(spv::CapabilityRayQueryKHR);
noReturnValue = true;
break;
case glslang::EOpRayQueryProceed:
@ -2761,7 +2855,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpRayQueryGetIntersectionObjectToWorld:
case glslang::EOpRayQueryGetIntersectionWorldToObject:
builder.addExtension("SPV_KHR_ray_query");
builder.addCapability(spv::CapabilityRayQueryProvisionalKHR);
builder.addCapability(spv::CapabilityRayQueryKHR);
break;
case glslang::EOpCooperativeMatrixLoad:
case glslang::EOpCooperativeMatrixStore:
@ -3014,11 +3108,18 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
)) {
bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst();
operands.push_back(builder.makeIntConstant(cond ? 1 : 0));
}
else {
} else if ((arg == 10 && glslangOp == glslang::EOpTraceKHR) ||
(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()));
}
}
}
}
@ -3089,7 +3190,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
for (unsigned int i = 0; i < temporaryLvalues.size(); ++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()) {
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;
case glslang::EOpBreak:
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.addCapability(spv::CapabilityDemoteToHelperInvocationEXT);
break;
case glslang::EOpTerminateRayKHR:
builder.makeStatementTerminator(spv::OpTerminateRayKHR, "post-terminateRayKHR");
break;
case glslang::EOpIgnoreIntersectionKHR:
builder.makeStatementTerminator(spv::OpIgnoreIntersectionKHR, "post-ignoreIntersectionKHR");
break;
#endif
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.addCapability(spv::CapabilityFloat16ImageAMD);
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
default:
assert(0);
@ -3670,10 +3788,36 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
spvType = builder.makeUintType(32);
break;
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();
break;
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;
case glslang::EbtReference:
{
@ -3929,6 +4073,8 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
// Name and decorate the non-hidden members
int offset = -1;
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++) {
glslang::TType& glslangMember = *(*glslangMembers)[i].type;
int member = i;
@ -3981,7 +4127,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
// just track whether a member needs to be decorated.
// Ignore member locations if the container is an array, as that's
// 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);
if (qualifier.hasLocation()) // track for upcoming inheritance
@ -4087,6 +4233,7 @@ spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type)
alignment |= type.getBufferReferenceAlignment();
spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type),
TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags),
TranslateNonUniformDecoration(type.getQualifier()),
nominalTypeId,
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;
alignment |= type.getBufferReferenceAlignment();
builder.accessChainStore(rvalue,
builder.accessChainStore(rvalue, TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags),
spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) &
~spv::MemoryAccessMakePointerVisibleKHRMask),
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.
void TGlslangToSpvTraverser::visitFunctions(const glslang::TIntermSequence& glslFunctions)
{
@ -4686,8 +4865,10 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
}
if (lvalue) {
arguments.push_back(builder.accessChainGetLValue());
spv::Id lvalue_id = builder.accessChainGetLValue();
arguments.push_back(lvalue_id);
lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
builder.addDecoration(lvalue_id, TranslateNonUniformDecoration(lvalueCoherentFlags));
lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType());
} else
#endif
@ -4750,12 +4931,15 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
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
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()) {
case glslang::EOpImageQuerySize:
case glslang::EOpTextureQuerySize:
@ -5009,10 +5193,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
auto opIt = arguments.begin();
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);
++opIt;
@ -5073,13 +5253,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
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
if (cracked.gather) {
const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions();
@ -5239,7 +5412,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
builder.accessChainPush(builder.makeIntConstant(i), flags, 0);
builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1),
i+1));
i+1), TranslateNonUniformDecoration(imageType.getQualifier()));
}
return builder.createCompositeExtract(res, resultType(), 0);
}
@ -5375,6 +5548,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg
// 3. Make the call.
spv::Id result = builder.createFunctionCall(function, spvArgs);
builder.setPrecision(result, TranslatePrecisionDecoration(node->getType()));
builder.addDecoration(result, TranslateNonUniformDecoration(node->getType().getQualifier()));
// 4. Copy back out an "out" arguments.
lValueCount = 0;
@ -5384,6 +5558,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg
else if (writableParam(qualifiers[a])) {
if (qualifiers[a] == glslang::EvqOut || qualifiers[a] == glslang::EvqInOut) {
spv::Id copy = builder.createLoad(spvArgs[a], spv::NoPrecision);
builder.addDecoration(copy, TranslateNonUniformDecoration(argTypes[a]->getQualifier()));
builder.setAccessChain(lValues[lValueCount]);
multiTypeStore(*argTypes[a], copy);
}
@ -6171,6 +6346,11 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
case glslang::EOpConstructReference:
unaryOp = spv::OpBitcast;
break;
case glslang::EOpConvUint64ToAccStruct:
case glslang::EOpConvUvec2ToAccStruct:
unaryOp = spv::OpConvertUToAccelerationStructureKHR;
break;
#endif
case glslang::EOpCopyObject:
@ -7757,10 +7937,16 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
typeId = builder.makeBoolType();
opCode = spv::OpReportIntersectionKHR;
break;
case glslang::EOpTrace:
case glslang::EOpTraceNV:
builder.createNoResultOp(spv::OpTraceNV, operands);
return 0;
case glslang::EOpTraceKHR:
builder.createNoResultOp(spv::OpTraceRayKHR, operands);
return 0;
case glslang::EOpExecuteCallable:
case glslang::EOpExecuteCallableNV:
builder.createNoResultOp(spv::OpExecuteCallableNV, operands);
return 0;
case glslang::EOpExecuteCallableKHR:
builder.createNoResultOp(spv::OpExecuteCallableKHR, operands);
return 0;
@ -7805,7 +7991,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
opCode = spv::OpRayQueryGetIntersectionInstanceIdKHR;
break;
case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
typeId = builder.makeIntType(32);
typeId = builder.makeUintType(32);
opCode = spv::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR;
break;
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);
return builder.setPrecision(id, precision);
}
case glslang::EOpIgnoreIntersection:
builder.createNoResultOp(spv::OpIgnoreIntersectionKHR);
case glslang::EOpIgnoreIntersectionNV:
builder.createNoResultOp(spv::OpIgnoreIntersectionNV);
return 0;
case glslang::EOpTerminateRay:
builder.createNoResultOp(spv::OpTerminateRayKHR);
case glslang::EOpTerminateRayNV:
builder.createNoResultOp(spv::OpTerminateRayNV);
return 0;
case glslang::EOpRayQueryInitialize:
builder.createNoResultOp(spv::OpRayQueryInitializeKHR);
@ -8180,7 +8366,8 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
}
#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;
TranslateMemoryDecoration(symbol->getType().getQualifier(), memory,
glslangIntermediate->usingVulkanMemoryModel());
@ -8188,9 +8375,6 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder.addDecoration(id, memory[i]);
}
// nonuniform
builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier()));
if (builtIn == spv::BuiltInSampleMask) {
spv::Decoration decoration;
// 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;
}
case spv::OperandVariableLiteralStrings:
return nextInst;
// Execution mode might have extra literal operands. Skip them.
case spv::OperandExecutionMode:
return nextInst;
@ -827,7 +830,15 @@ namespace spv {
[&](spv::Id& id) {
if (thisOpCode != spv::OpNop) {
++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))
localId(id, nextUnusedId(hashval % softTypeIdLimit + firstMappedID));

View File

@ -621,13 +621,13 @@ Id Builder::makeAccelerationStructureType()
Id Builder::makeRayQueryType()
{
Instruction *type;
if (groupedTypes[OpTypeRayQueryProvisionalKHR].size() == 0) {
type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryProvisionalKHR);
groupedTypes[OpTypeRayQueryProvisionalKHR].push_back(type);
if (groupedTypes[OpTypeRayQueryKHR].size() == 0) {
type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryKHR);
groupedTypes[OpTypeRayQueryKHR].push_back(type);
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
module.mapInstruction(type);
} else {
type = groupedTypes[OpTypeRayQueryProvisionalKHR].back();
type = groupedTypes[OpTypeRayQueryKHR].back();
}
return type->getResultId();
@ -1183,6 +1183,28 @@ void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, int val
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)
{
Instruction* name = new Instruction(OpName);
@ -1221,7 +1243,7 @@ void Builder::addDecoration(Id id, Decoration decoration, const char* s)
if (decoration == spv::DecorationMax)
return;
Instruction* dec = new Instruction(OpDecorateStringGOOGLE);
Instruction* dec = new Instruction(OpDecorateString);
dec->addIdOperand(id);
dec->addImmediateOperand(decoration);
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));
}
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)
{
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));
}
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)
{
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));
}
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
Function* Builder::makeEntryPoint(const char* entryPoint)
{
@ -1352,10 +1447,10 @@ void Builder::leaveFunction()
}
// Comments in header
void Builder::makeDiscard()
void Builder::makeStatementTerminator(spv::Op opcode, const char *name)
{
buildPoint->addInstruction(std::unique_ptr<Instruction>(new Instruction(OpKill)));
createAndSetNoPredecessorBlock("post-discard");
buildPoint->addInstruction(std::unique_ptr<Instruction>(new Instruction(opcode)));
createAndSetNoPredecessorBlock(name);
}
// Comments in header
@ -2666,12 +2761,14 @@ void Builder::accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizz
}
// 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);
transferAccessChainSwizzle(true);
Id base = collapseAccessChain();
addDecoration(base, nonUniform);
Id source = rvalue;
// dynamic component should be gone
@ -2694,8 +2791,9 @@ void Builder::accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess, sp
}
// Comments in header
Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType,
spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
Id Builder::accessChainLoad(Decoration precision, Decoration l_nonUniform,
Decoration r_nonUniform, Id resultType, spv::MemoryAccessMask memoryAccess,
spv::Scope scope, unsigned int alignment)
{
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
// loaded image types get decorated. TODO: This should maybe move to
// createImageTextureFunctionCall.
addDecoration(id, nonUniform);
addDecoration(id, l_nonUniform);
id = createLoad(id, precision, memoryAccess, scope, alignment);
addDecoration(id, nonUniform);
addDecoration(id, r_nonUniform);
}
// Done, unless there are swizzles to do
@ -2782,7 +2880,7 @@ Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resu
if (accessChain.component != NoResult)
id = setPrecision(createVectorExtractDynamic(id, resultType, accessChain.component), precision);
addDecoration(id, nonUniform);
addDecoration(id, r_nonUniform);
return id;
}

View File

@ -321,13 +321,20 @@ public:
// Methods for adding information outside the CFG.
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, const std::vector<unsigned>& literals);
void addExecutionModeId(Function*, ExecutionMode mode, const std::vector<Id>& operandIds);
void addName(Id, const char* name);
void addMemberName(Id, int member, const char* name);
void addDecoration(Id, Decoration, int num = -1);
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, const std::vector<Id>& operandIds);
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 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?
void setBuildPoint(Block* bp) { buildPoint = bp; }
@ -350,8 +357,9 @@ public:
// Generate all the code needed to finish up a function.
void leaveFunction();
// Create a discard.
void makeDiscard();
// Create block terminator instruction for certain statements like
// discard, terminate-invocation, terminateRayEXT, or ignoreIntersectionEXT
void makeStatementTerminator(spv::Op opcode, const char *name);
// Create a global or function local or IO variable.
Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr,
@ -617,6 +625,7 @@ public:
CoherentFlags operator |=(const CoherentFlags &other) { return *this; }
#else
bool isVolatile() const { return volatil; }
bool isNonUniform() const { return nonUniform; }
bool anyCoherent() const {
return coherent || devicecoherent || queuefamilycoherent || workgroupcoherent ||
subgroupcoherent || shadercallcoherent;
@ -631,6 +640,7 @@ public:
unsigned nonprivate : 1;
unsigned volatil : 1;
unsigned isImage : 1;
unsigned nonUniform : 1;
void clear() {
coherent = 0;
@ -642,6 +652,7 @@ public:
nonprivate = 0;
volatil = 0;
isImage = 0;
nonUniform = 0;
}
CoherentFlags operator |=(const CoherentFlags &other) {
@ -654,6 +665,7 @@ public:
nonprivate |= other.nonprivate;
volatil |= other.volatil;
isImage |= other.isImage;
nonUniform |= other.nonUniform;
return *this;
}
#endif
@ -714,11 +726,12 @@ public:
}
// 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);
// 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,
unsigned int alignment = 0);

View File

@ -44,7 +44,6 @@
#include "SpvTools.h"
#include "spirv-tools/optimizer.hpp"
#include "spirv-tools/libspirv.h"
namespace glslang {
@ -114,11 +113,18 @@ void OptimizerMesssageConsumer(spv_message_level_t level, const char *source,
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)
{
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
spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3);
spv_context context = spvContextCreate(requested_context);
spv_text text;
spv_diagnostic diagnostic = nullptr;
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
// information when instructions are deleted or moved. Later, remove
// redundant information to minimize final SPRIR-V size.
if (options->generateDebugInfo) {
optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass());
}
else if (options->stripDebugInfo) {
if (options->stripDebugInfo) {
optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass());
}
optimizer.RegisterPass(spvtools::CreateWrapOpKillPass());
@ -207,9 +210,6 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector
}
optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
if (options->generateDebugInfo) {
optimizer.RegisterPass(spvtools::CreateRedundantLineInfoElimPass());
}
spvtools::OptimizerOptions spvOptOptions;
optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger));

View File

@ -41,9 +41,10 @@
#ifndef GLSLANG_SPV_TOOLS_H
#define GLSLANG_SPV_TOOLS_H
#ifdef ENABLE_OPT
#if ENABLE_OPT
#include <vector>
#include <ostream>
#include "spirv-tools/libspirv.h"
#endif
#include "glslang/MachineIndependent/localintermediate.h"
@ -62,11 +63,15 @@ struct SpvOptions {
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);
// 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.
void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
spv::SpvBuildLogger*, bool prelegalization);

View File

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

View File

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

View File

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

View File

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

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

@ -263,6 +263,7 @@ public:
case OpBranchConditional:
case OpSwitch:
case OpKill:
case OpTerminateInvocation:
case OpReturn:
case OpReturnValue:
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:${PROJECT_SOURCE_DIR}>)
set(SOURCES StandAlone.cpp DirStackFileIncluder.h)
add_executable(glslangValidator ${SOURCES})
@ -70,6 +69,12 @@ target_include_directories(glslangValidator PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../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)
set(REMAPPER_SOURCES spirv-remap.cpp)
add_executable(spirv-remap ${REMAPPER_SOURCES})

View File

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

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

View File

@ -1,5 +1,4 @@
100scope.vert
ERROR: 0:5: 'a' : redefinition
ERROR: 0:17: 'b' : function name is redeclaration of existing name
ERROR: 0:20: 'c' : redefinition
ERROR: 0:22: 'f' : redefinition
@ -13,7 +12,7 @@ ERROR: 0:57: 'z' : undeclared identifier
ERROR: 0:57: 'z' : redefinition
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: 14 compilation errors. No code generated.
ERROR: 13 compilation errors. No code generated.
Shader version: 100
@ -23,18 +22,22 @@ ERROR: node is still EOpNull!
0:3 'a' ( in highp int)
0:3 'b' ( 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 move second child to first child ( temp highp float)
0:8 'a' ( temp highp float)
0:8 add ( 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 1.000000
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 Parameters:
0:25 'x' ( in highp float)
@ -138,18 +141,22 @@ ERROR: node is still EOpNull!
0:3 'a' ( in highp int)
0:3 'b' ( 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 move second child to first child ( temp highp float)
0:8 'a' ( temp highp float)
0:8 add ( 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 1.000000
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 Parameters:
0:? Sequence

View File

@ -1,6 +1,7 @@
300layout.vert
ERROR: 0:7: 'vertex input arrays' : not supported with this profile: es
ERROR: 0:8: 'in' : cannot be a structure or array
ERROR: 0:8: 's' : A structure containing an array is not allowed as input in ES
ERROR: 0:8: 'vertex input arrays' : not supported with this profile: es
ERROR: 0:8: 'location' : overlapping use of location 10
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:54: 'layout' : cannot specify packing on a variable declaration
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

View File

@ -40,10 +40,14 @@ ERROR: 0:112: 'out' : cannot be a matrix
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: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: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: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: '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:138: '' : cannot nest a structure definition inside a structure or block
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: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: 132 compilation errors. No code generated.
ERROR: 136 compilation errors. No code generated.
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:109: 'gl_PerVertex' : block redeclaration has extra members
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: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
@ -96,7 +97,7 @@ ERROR: 0:389: 'sample' : Reserved word.
ERROR: 0:400: 'interpolateAtCentroid' : no matching overloaded function found
ERROR: 0:401: 'interpolateAtSample' : 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

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:18: 'gl_PerVertex' : block redeclaration has extra members
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: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
@ -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:253: 'interpolateAtSample' : 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

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: '=' : cannot convert from ' temp block{ in float PointSize gl_PointSize}' to ' temp 4-component vector of float'
ERROR: 0:33: 'gl_Position' : member of nameless block was not redeclared
ERROR: 0:33: 'assign' : l-value required "gl_PerVertex" (can't modify void)
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
ERROR: 7 compilation errors. No code generated.
ERROR: 8 compilation errors. No code generated.
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
ERROR: 0:66: '#if/#ifdef/#ifndef' : maximum nesting depth exceeded
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.

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 'f4' ( in 4-component vector of float)
0:? Sequence
0:7 'gl_SubgroupSize' ( in uint SubgroupSize)
0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:7 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:8 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:9 subgroupBarrier ( global void)
0:10 subgroupMemoryBarrier ( global void)
0:11 subgroupMemoryBarrierBuffer ( global void)
@ -128,11 +128,11 @@ ERROR: node is still EOpNull!
0:19 false (const bool)
0:20 subgroupAllEqual ( global bool)
0:20 'f4' ( in 4-component vector of float)
0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
0:22 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:23 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:24 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:25 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:26 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:27 subgroupBroadcast ( global 4-component vector of float)
0:27 'f4' ( in 4-component vector of float)
0:27 Constant:
@ -359,8 +359,8 @@ ERROR: node is still EOpNull!
0:119 Function Definition: basic_works( ( global void)
0:119 Function Parameters:
0:121 Sequence
0:121 'gl_SubgroupSize' ( in uint SubgroupSize)
0:122 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:121 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:122 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:123 subgroupBarrier ( global void)
0:124 subgroupMemoryBarrier ( global void)
0:125 subgroupMemoryBarrierBuffer ( global void)
@ -370,11 +370,11 @@ ERROR: node is still EOpNull!
0:131 Function Parameters:
0:131 'f4' ( in 4-component vector of float)
0:132 Sequence
0:132 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
0:133 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
0:134 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
0:135 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
0:136 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
0:132 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:133 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:134 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:135 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:136 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:137 subgroupBroadcast ( global 4-component vector of float)
0:137 'f4' ( in 4-component vector of float)
0:137 Constant:
@ -624,15 +624,15 @@ ERROR: node is still EOpNull!
0:247 Sequence
0:247 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:248 'gl_SMCountNV' ( in uint SMCountNV)
0:249 'gl_WarpIDNV' ( in uint WarpIDNV)
0:250 'gl_SMIDNV' ( in uint SMIDNV)
0:249 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:250 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:257 Function Definition: sm_builtins( ( global void)
0:257 Function Parameters:
0:259 Sequence
0:259 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:260 'gl_SMCountNV' ( in uint SMCountNV)
0:261 'gl_WarpIDNV' ( in uint WarpIDNV)
0:262 'gl_SMIDNV' ( in uint SMIDNV)
0:261 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:262 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:? Linker Objects
0:? 'data0' (layout( location=0) callableDataNV 4-component vector of float)
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 'f4' ( in 4-component vector of float)
0:? Sequence
0:7 'gl_SubgroupSize' ( in uint SubgroupSize)
0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:7 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:8 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:9 subgroupBarrier ( global void)
0:10 subgroupMemoryBarrier ( global void)
0:11 subgroupMemoryBarrierBuffer ( global void)
@ -128,11 +128,11 @@ ERROR: node is still EOpNull!
0:19 false (const bool)
0:20 subgroupAllEqual ( global bool)
0:20 'f4' ( in 4-component vector of float)
0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
0:22 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:23 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:24 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:25 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:26 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:27 subgroupBroadcast ( global 4-component vector of float)
0:27 'f4' ( in 4-component vector of float)
0:27 Constant:
@ -425,8 +425,8 @@ ERROR: node is still EOpNull!
0:129 Function Definition: basic_works( ( global void)
0:129 Function Parameters:
0:131 Sequence
0:131 'gl_SubgroupSize' ( in uint SubgroupSize)
0:132 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:131 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:132 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:133 subgroupBarrier ( global void)
0:134 subgroupMemoryBarrier ( global void)
0:135 subgroupMemoryBarrierBuffer ( global void)
@ -436,11 +436,11 @@ ERROR: node is still EOpNull!
0:141 Function Parameters:
0:141 'f4' ( in 4-component vector of float)
0:142 Sequence
0:142 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
0:143 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
0:144 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
0:145 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
0:146 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
0:142 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:143 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:144 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:145 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:146 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:147 subgroupBroadcast ( global 4-component vector of float)
0:147 'f4' ( in 4-component vector of float)
0:147 Constant:
@ -690,15 +690,15 @@ ERROR: node is still EOpNull!
0:257 Sequence
0:257 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:258 'gl_SMCountNV' ( in uint SMCountNV)
0:259 'gl_WarpIDNV' ( in uint WarpIDNV)
0:260 'gl_SMIDNV' ( in uint SMIDNV)
0:259 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:260 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:267 Function Definition: sm_builtins( ( global void)
0:267 Function Parameters:
0:269 Sequence
0:269 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:270 'gl_SMCountNV' ( in uint SMCountNV)
0:271 'gl_WarpIDNV' ( in uint WarpIDNV)
0:272 'gl_SMIDNV' ( in uint SMIDNV)
0:271 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:272 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:? Linker Objects
0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
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 'f4' ( in 4-component vector of float)
0:? Sequence
0:7 'gl_SubgroupSize' ( in uint SubgroupSize)
0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:7 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:8 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:9 subgroupBarrier ( global void)
0:10 subgroupMemoryBarrier ( global void)
0:11 subgroupMemoryBarrierBuffer ( global void)
@ -128,11 +128,11 @@ ERROR: node is still EOpNull!
0:19 false (const bool)
0:20 subgroupAllEqual ( global bool)
0:20 'f4' ( in 4-component vector of float)
0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
0:22 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:23 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:24 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:25 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:26 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:27 subgroupBroadcast ( global 4-component vector of float)
0:27 'f4' ( in 4-component vector of float)
0:27 Constant:
@ -389,8 +389,8 @@ ERROR: node is still EOpNull!
0:123 Function Definition: basic_works( ( global void)
0:123 Function Parameters:
0:125 Sequence
0:125 'gl_SubgroupSize' ( in uint SubgroupSize)
0:126 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:125 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:126 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:127 subgroupBarrier ( global void)
0:128 subgroupMemoryBarrier ( global void)
0:129 subgroupMemoryBarrierBuffer ( global void)
@ -400,11 +400,11 @@ ERROR: node is still EOpNull!
0:135 Function Parameters:
0:135 'f4' ( in 4-component vector of float)
0:136 Sequence
0:136 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
0:137 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
0:138 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
0:139 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
0:140 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
0:136 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:137 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:138 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:139 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:140 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:141 subgroupBroadcast ( global 4-component vector of float)
0:141 'f4' ( in 4-component vector of float)
0:141 Constant:
@ -654,15 +654,15 @@ ERROR: node is still EOpNull!
0:251 Sequence
0:251 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:252 'gl_SMCountNV' ( in uint SMCountNV)
0:253 'gl_WarpIDNV' ( in uint WarpIDNV)
0:254 'gl_SMIDNV' ( in uint SMIDNV)
0:253 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:254 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:261 Function Definition: sm_builtins( ( global void)
0:261 Function Parameters:
0:263 Sequence
0:263 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:264 'gl_SMCountNV' ( in uint SMCountNV)
0:265 'gl_WarpIDNV' ( in uint WarpIDNV)
0:266 'gl_SMIDNV' ( in uint SMIDNV)
0:265 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:266 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:? Linker Objects
0:? 'accNV0' (layout( set=0 binding=0) 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 'f4' ( in 4-component vector of float)
0:? Sequence
0:8 'gl_SubgroupSize' ( in uint SubgroupSize)
0:9 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:8 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:9 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:10 subgroupBarrier ( global void)
0:11 subgroupMemoryBarrier ( global void)
0:12 subgroupMemoryBarrierBuffer ( global void)
@ -128,11 +128,11 @@ ERROR: node is still EOpNull!
0:20 false (const bool)
0:21 subgroupAllEqual ( global bool)
0:21 'f4' ( in 4-component vector of float)
0:23 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
0:24 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
0:25 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
0:26 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
0:27 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
0:23 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:24 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:25 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:26 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:27 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:28 subgroupBroadcast ( global 4-component vector of float)
0:28 'f4' ( in 4-component vector of float)
0:28 Constant:
@ -403,8 +403,8 @@ ERROR: node is still EOpNull!
0:129 Function Definition: basic_works( ( global void)
0:129 Function Parameters:
0:131 Sequence
0:131 'gl_SubgroupSize' ( in uint SubgroupSize)
0:132 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:131 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:132 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:133 subgroupBarrier ( global void)
0:134 subgroupMemoryBarrier ( global void)
0:135 subgroupMemoryBarrierBuffer ( global void)
@ -414,11 +414,11 @@ ERROR: node is still EOpNull!
0:141 Function Parameters:
0:141 'f4' ( in 4-component vector of float)
0:142 Sequence
0:142 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
0:143 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
0:144 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
0:145 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
0:146 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
0:142 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:143 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:144 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:145 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:146 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:147 subgroupBroadcast ( global 4-component vector of float)
0:147 'f4' ( in 4-component vector of float)
0:147 Constant:
@ -668,15 +668,15 @@ ERROR: node is still EOpNull!
0:257 Sequence
0:257 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:258 'gl_SMCountNV' ( in uint SMCountNV)
0:259 'gl_WarpIDNV' ( in uint WarpIDNV)
0:260 'gl_SMIDNV' ( in uint SMIDNV)
0:259 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:260 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:267 Function Definition: sm_builtins( ( global void)
0:267 Function Parameters:
0:269 Sequence
0:269 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:270 'gl_SMCountNV' ( in uint SMCountNV)
0:271 'gl_WarpIDNV' ( in uint WarpIDNV)
0:272 'gl_SMIDNV' ( in uint SMIDNV)
0:271 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:272 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:? Linker Objects
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 'f4' ( in 4-component vector of float)
0:? Sequence
0:8 'gl_SubgroupSize' ( in uint SubgroupSize)
0:9 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:8 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:9 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:10 subgroupBarrier ( global void)
0:11 subgroupMemoryBarrier ( global void)
0:12 subgroupMemoryBarrierBuffer ( global void)
@ -128,11 +128,11 @@ ERROR: node is still EOpNull!
0:20 false (const bool)
0:21 subgroupAllEqual ( global bool)
0:21 'f4' ( in 4-component vector of float)
0:23 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
0:24 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
0:25 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
0:26 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
0:27 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
0:23 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:24 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:25 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:26 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:27 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:28 subgroupBroadcast ( global 4-component vector of float)
0:28 'f4' ( in 4-component vector of float)
0:28 Constant:
@ -397,8 +397,8 @@ ERROR: node is still EOpNull!
0:123 Function Definition: basic_works( ( global void)
0:123 Function Parameters:
0:125 Sequence
0:125 'gl_SubgroupSize' ( in uint SubgroupSize)
0:126 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:125 'gl_SubgroupSize' ( volatile in uint SubgroupSize)
0:126 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
0:127 subgroupBarrier ( global void)
0:128 subgroupMemoryBarrier ( global void)
0:129 subgroupMemoryBarrierBuffer ( global void)
@ -408,11 +408,11 @@ ERROR: node is still EOpNull!
0:135 Function Parameters:
0:135 'f4' ( in 4-component vector of float)
0:136 Sequence
0:136 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
0:137 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
0:138 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
0:139 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
0:140 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
0:136 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
0:137 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
0:138 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
0:139 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
0:140 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
0:141 subgroupBroadcast ( global 4-component vector of float)
0:141 'f4' ( in 4-component vector of float)
0:141 Constant:
@ -662,15 +662,15 @@ ERROR: node is still EOpNull!
0:251 Sequence
0:251 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:252 'gl_SMCountNV' ( in uint SMCountNV)
0:253 'gl_WarpIDNV' ( in uint WarpIDNV)
0:254 'gl_SMIDNV' ( in uint SMIDNV)
0:253 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:254 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:261 Function Definition: sm_builtins( ( global void)
0:261 Function Parameters:
0:263 Sequence
0:263 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
0:264 'gl_SMCountNV' ( in uint SMCountNV)
0:265 'gl_WarpIDNV' ( in uint WarpIDNV)
0:266 'gl_SMIDNV' ( in uint SMIDNV)
0:265 'gl_WarpIDNV' ( volatile in uint WarpIDNV)
0:266 'gl_SMIDNV' ( volatile in uint SMIDNV)
0:? Linker Objects
0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
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:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Validation failed
// Module Version 10000
// Generated by (magic number): 8000a
// 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:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Validation failed
// Module Version 10000
// Generated by (magic number): 8000a
// 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:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Validation failed
// Module Version 10000
// Generated by (magic number): 8000a
// 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 12 BufferBlock
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) Binding 6
Decorate 50(sbuf_a@count) Binding 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) Binding 7
Decorate 52(sbuf_c@count) Binding 0
Decorate 58(pos) Flat
Decorate 58(pos) Location 0
Decorate 61(@entryPointOutput) Location 0

View File

@ -191,9 +191,9 @@ Validation failed
Decorate 18 BufferBlock
Decorate 20 BufferBlock
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) Binding 3
Decorate 48(sbuf2@count) Binding 0
Decorate 50(sbuf) DescriptorSet 0
Decorate 50(sbuf) Binding 10
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"
MemberName 70(BufferBlock) 0 "p"
Name 72 "uBuf"
Decorate 14(oColor) Location 4
Decorate 14(oColor) Location 2
MemberDecorate 16(ColorBlock) 0 Offset 0
MemberDecorate 16(ColorBlock) 1 Offset 16
MemberDecorate 16(ColorBlock) 2 Offset 32
@ -224,7 +224,7 @@ Shader version: 430
Decorate 28(uColorBuf) DescriptorSet 0
Decorate 28(uColorBuf) Binding 0
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) 1 BuiltIn PointSize
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"
Name 97 "uBuf"
Name 100 "P"
Decorate 18(oColor) Location 2
Decorate 18(oColor) Location 1
MemberDecorate 20(ColorBlock) 0 Offset 0
MemberDecorate 20(ColorBlock) 1 Offset 16
MemberDecorate 20(ColorBlock) 2 Offset 32
@ -326,16 +326,16 @@ output primitive = triangle_strip
Decorate 50(uM) DescriptorSet 0
Decorate 50(uM) Binding 0
Decorate 59(Vertex) Block
Decorate 61(oV) Location 1
Decorate 61(oV) Location 0
Decorate 64(Vertex) Block
Decorate 68(iV) Location 0
Decorate 68(iV) Location 1
MemberDecorate 95(BufferBlock) 0 ColMajor
MemberDecorate 95(BufferBlock) 0 Offset 0
MemberDecorate 95(BufferBlock) 0 MatrixStride 16
Decorate 95(BufferBlock) BufferBlock
Decorate 97(uBuf) DescriptorSet 0
Decorate 97(uBuf) Binding 1
Decorate 100(P) Location 4
Decorate 100(P) Location 0
2: TypeVoid
3: TypeFunction 2
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:101: '' : numeric literal too big
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.

View File

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

View File

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

View File

@ -3,7 +3,7 @@ rayQuery-allOps.rgen
// Generated by (magic number): 8000a
// Id's are bound by 257
Capability RayQueryProvisionalKHR
Capability RayQueryKHR
Capability RayTracingNV
Extension "SPV_KHR_ray_query"
Extension "SPV_NV_ray_tracing"
@ -85,8 +85,9 @@ rayQuery-allOps.rgen
35: TypePointer Function 8(float)
37: 18(int) Constant 3
38: 8(float) Constant 1176255488
45: TypeRayQueryProvisionalKHR
46: TypePointer Function 45
45: TypeRayQueryKHR
46: TypePointer Private 45
47(rayQuery): 46(ptr) Variable Private
48: TypeAccelerationStructureKHR
49: TypePointer UniformConstant 48
50(rtas): 49(ptr) Variable UniformConstant
@ -112,7 +113,6 @@ rayQuery-allOps.rgen
4(main): 2 Function None 3
5: Label
43(ray): 25(ptr) Variable Function
47(rayQuery): 46(ptr) Variable Function
69(candidateType): 68(ptr) Variable Function
78(_mat4x3): 77(ptr) Variable Function
83(_mat3x4): 82(ptr) Variable Function
@ -221,7 +221,7 @@ rayQuery-allOps.rgen
129: 2 FunctionCall 6(doSomething()
Branch 128
128: Label
130: 18(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
130: 14(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
131: 66(bool) UGreaterThan 130 20
SelectionMerge 133 None
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
// Id's are bound by 103
Capability RayQueryProvisionalKHR
Capability RayQueryKHR
Capability RayTracingNV
Extension "SPV_KHR_ray_query"
Extension "SPV_NV_ray_tracing"
@ -55,8 +55,8 @@ rayQuery-initialize.rgen
3: TypeFunction 2
6: TypeInt 32 0
7: TypeFunction 6(int)
10: TypeRayQueryProvisionalKHR
11: TypePointer Function 10
10: TypeRayQueryKHR
11: TypePointer Private 10
12: TypeFloat 32
13: TypeVector 12(float) 3
14(Ray): TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
@ -88,12 +88,12 @@ rayQuery-initialize.rgen
75: TypePointer Uniform 74(Rays)
76: 75(ptr) Variable Uniform
78: TypePointer Uniform 72(Ray)
89(rayQuery): 11(ptr) Variable Private
94: 6(int) Constant 32
4(main): 2 Function None 3
5: Label
69(index): 68(ptr) Variable Function
71(ray): 15(ptr) Variable Function
89(rayQuery): 11(ptr) Variable Function
90(param): 15(ptr) Variable Function
70: 6(int) FunctionCall 8(launchIndex()
Store 69(index) 70

View File

@ -3,7 +3,7 @@ rayQuery-no-cse.rgen
// Generated by (magic number): 8000a
// Id's are bound by 107
Capability RayQueryProvisionalKHR
Capability RayQueryKHR
Capability RayTracingNV
Extension "SPV_KHR_ray_query"
Extension "SPV_NV_ray_tracing"
@ -57,8 +57,8 @@ rayQuery-no-cse.rgen
3: TypeFunction 2
6: TypeInt 32 0
7: TypeFunction 6(int)
10: TypeRayQueryProvisionalKHR
11: TypePointer Function 10
10: TypeRayQueryKHR
11: TypePointer Private 10
12: TypeFloat 32
13: TypeVector 12(float) 3
14(Ray): TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
@ -90,14 +90,14 @@ rayQuery-no-cse.rgen
75: TypePointer Uniform 74(Rays)
76: 75(ptr) Variable Uniform
78: TypePointer Uniform 72(Ray)
89(rayQuery1): 11(ptr) Variable Private
94: 6(int) Constant 32
103(rayQuery2): 11(ptr) Variable Private
4(main): 2 Function None 3
5: Label
69(index): 68(ptr) Variable Function
71(ray): 15(ptr) Variable Function
89(rayQuery1): 11(ptr) Variable Function
90(param): 15(ptr) Variable Function
103(rayQuery2): 11(ptr) Variable Function
104(param): 15(ptr) Variable Function
70: 6(int) FunctionCall 8(launchIndex()
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
// Id's are bound by 44
Capability RayQueryProvisionalKHR
Capability RayQueryKHR
Capability RayTracingNV
Extension "SPV_KHR_ray_query"
Extension "SPV_NV_ray_tracing"
@ -39,8 +39,9 @@ rayQuery.rgen
11: TypePointer Function 10(float)
13: 10(float) Constant 0
15: 10(float) Constant 1148846080
16: TypeRayQueryProvisionalKHR
17: TypePointer Function 16
16: TypeRayQueryKHR
17: TypePointer Private 16
18(localRayQuery): 17(ptr) Variable Private
19: TypeAccelerationStructureKHR
20: TypePointer UniformConstant 19
21(acc0): 20(ptr) Variable UniformConstant
@ -59,7 +60,6 @@ rayQuery.rgen
8(rayFlags): 7(ptr) Variable Function
12(tMin): 11(ptr) Variable Function
14(tMax): 11(ptr) Variable Function
18(localRayQuery): 17(ptr) Variable Function
Store 8(rayFlags) 9
Store 12(tMin) 13
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 47(gl_RayTminNV) BuiltIn RayTminKHR
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 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
@ -153,10 +153,10 @@ spv.AnyHitShader.rahit
SelectionMerge 79 None
BranchConditional 77 78 80
78: Label
IgnoreIntersectionKHR
IgnoreIntersectionNV
Branch 79
80: Label
TerminateRayKHR
TerminateRayNV
Branch 79
79: Label
Return

View File

@ -55,7 +55,7 @@ spv.ClosestHitShader.rchit
Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
Decorate 53(gl_HitTNV) BuiltIn HitTKHR
Decorate 53(gl_HitTNV) BuiltIn HitTNV
Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
@ -164,6 +164,6 @@ spv.ClosestHitShader.rchit
68: 60 Load 67(gl_WorldToObjectNV)
Store 66(v14) 68
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
FunctionEnd

View File

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

View File

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

View File

@ -41,6 +41,6 @@ spv.RayConstants.rgen
4(main): 2 Function None 3
5: Label
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
FunctionEnd

View File

@ -92,6 +92,6 @@ spv.RayGenShader.rgen
44: 36(fvec3) Load 43
47: 42(ptr) AccessChain 39 46
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
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
47: 42(ptr) AccessChain 39 46
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
FunctionEnd

View File

@ -111,7 +111,7 @@ spv.RayGenShaderArray.rgen
51: 32(fvec3) Load 50
54: 49(ptr) AccessChain 36 53
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
62: 33(int) Load 61
63: 41(ptr) AccessChain 60(accNV1) 62
@ -124,7 +124,7 @@ spv.RayGenShaderArray.rgen
70: 32(fvec3) Load 69
71: 49(ptr) AccessChain 36 53
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
74: 33(int) Load 73
75: 33(int) CopyObject 74
@ -138,6 +138,6 @@ spv.RayGenShaderArray.rgen
83: 32(fvec3) Load 82
84: 49(ptr) AccessChain 36 53
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
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
// Module Version 10400
// 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"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84
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
SourceExtension "GL_EXT_ray_tracing"
SourceExtension "GL_KHR_shader_subgroup_basic"
Name 4 "main"
Name 9 "v0"
Name 11 "gl_LaunchIDEXT"
@ -48,6 +50,7 @@ spv.ext.AnyHitShader.rahit
Name 79 "v17"
Name 80 "gl_WorldToObject3x4EXT"
Name 84 "incomingPayload"
Name 98 "gl_SubgroupSize"
Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@ -59,7 +62,7 @@ spv.ext.AnyHitShader.rahit
Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
Decorate 53(gl_HitTEXT) BuiltIn HitTKHR
Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR
Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
@ -67,6 +70,9 @@ spv.ext.AnyHitShader.rahit
Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
Decorate 84(incomingPayload) Location 1
Decorate 98(gl_SubgroupSize) RelaxedPrecision
Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize
Decorate 99 RelaxedPrecision
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@ -114,6 +120,9 @@ spv.ext.AnyHitShader.rahit
86: 72(fvec4) ConstantComposite 85 85 85 85
88: 16(int) Constant 1
89: TypeBool
94: 6(int) Constant 0
98(gl_SubgroupSize): 57(ptr) Variable Input
101: TypePointer IncomingRayPayloadKHR 28(float)
4(main): 2 Function None 3
5: Label
9(v0): 8(ptr) Variable Function
@ -176,13 +185,16 @@ spv.ext.AnyHitShader.rahit
87: 16(int) Load 18(v2)
90: 89(bool) IEqual 87 88
SelectionMerge 92 None
BranchConditional 90 91 93
BranchConditional 90 91 92
91: Label
IgnoreIntersectionKHR
Branch 92
93: Label
TerminateRayKHR
Branch 92
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

View File

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

View File

@ -1,10 +1,12 @@
spv.ext.ClosestHitShader_Errors.rchit
ERROR: 0:8: 'assign' : l-value required "payload" (cannot modify hitAttributeNV in this stage)
ERROR: 0:9: 'reportIntersectionEXT' : no matching overloaded function found
ERROR: 0:10: 'terminateRayEXT' : no matching overloaded function found
ERROR: 0:11: 'ignoreIntersectionEXT' : no matching overloaded function found
ERROR: 0:12: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling
ERROR: 5 compilation errors. No code generated.
ERROR: 0:6: 'location' : overlapping use of location 2
ERROR: 0:9: 'assign' : l-value required "payload" (cannot modify hitAttributeNV in this stage)
ERROR: 0:10: 'reportIntersectionEXT' : no matching overloaded function found
ERROR: 0:11: 'terminateRayEXT' : not supported in this stage: closest-hit
ERROR: 0:12: 'ignoreIntersectionEXT' : not supported in this stage: closest-hit
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

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

View File

@ -1,15 +1,25 @@
spv.ext.MissShader.rmiss
// Module Version 10400
// 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_shader_ballot"
Extension "SPV_NV_shader_sm_builtins"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53
EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53 58 63 70
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 9 "v0"
Name 11 "gl_LaunchIDEXT"
@ -24,8 +34,11 @@ spv.ext.MissShader.rmiss
Name 31 "v5"
Name 32 "gl_RayTmaxEXT"
Name 36 "accEXT"
Name 51 "localPayload"
Name 53 "incomingPayload"
Name 51 "incomingPayload"
Name 53 "gl_SubGroupSizeARB"
Name 58 "gl_SubgroupEqMask"
Name 63 "gl_WarpIDNV"
Name 70 "localPayload"
Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
@ -34,8 +47,17 @@ spv.ext.MissShader.rmiss
Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
Decorate 36(accEXT) DescriptorSet 0
Decorate 36(accEXT) Binding 0
Decorate 51(localPayload) Location 0
Decorate 53(incomingPayload) Location 1
Decorate 51(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
3: TypeFunction 2
6: TypeInt 32 0
@ -69,10 +91,17 @@ spv.ext.MissShader.rmiss
47: TypeInt 32 1
48: 47(int) Constant 1
49: TypeVector 16(float) 4
50: TypePointer RayPayloadKHR 49(fvec4)
51(localPayload): 50(ptr) Variable RayPayloadKHR
52: TypePointer IncomingRayPayloadKHR 49(fvec4)
53(incomingPayload): 52(ptr) Variable IncomingRayPayloadKHR
50: TypePointer IncomingRayPayloadKHR 49(fvec4)
51(incomingPayload): 50(ptr) Variable IncomingRayPayloadKHR
52: TypePointer Input 6(int)
53(gl_SubGroupSizeARB): 52(ptr) Variable Input
56: TypeVector 6(int) 4
57: TypePointer Input 56(ivec4)
58(gl_SubgroupEqMask): 57(ptr) Variable Input
63(gl_WarpIDNV): 52(ptr) Variable Input
67: TypePointer IncomingRayPayloadKHR 16(float)
69: TypePointer RayPayloadKHR 49(fvec4)
70(localPayload): 69(ptr) Variable RayPayloadKHR
4(main): 2 Function None 3
5: Label
9(v0): 8(ptr) Variable Function
@ -94,6 +123,17 @@ spv.ext.MissShader.rmiss
33: 16(float) Load 32(gl_RayTmaxEXT)
Store 31(v5) 33
37: 34 Load 36(accEXT)
TraceRayKHR 37 38 39 40 41 38 43 42 45 46 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
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:12: 'gl_HitKindEXT' : undeclared identifier
ERROR: 0:13: 'reportIntersectionEXT' : no matching overloaded function found
ERROR: 0:14: 'ignoreIntersectionEXT' : no matching overloaded function found
ERROR: 0:15: 'terminateRayEXT' : no matching overloaded function found
ERROR: 0:14: 'ignoreIntersectionEXT' : not supported in this stage: miss
ERROR: 0:15: 'terminateRayEXT' : not supported in this stage: miss
ERROR: 16 compilation errors. No code generated.

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