diff --git a/3rdparty/glslang/Android.mk b/3rdparty/glslang/Android.mk new file mode 100644 index 000000000..fda81a7cf --- /dev/null +++ b/3rdparty/glslang/Android.mk @@ -0,0 +1,100 @@ +LOCAL_PATH := $(call my-dir) + +GLSLANG_OS_FLAGS := -DGLSLANG_OSINCLUDE_UNIX +# AMD and NV extensions are turned on by default in upstream Glslang. +GLSLANG_DEFINES:= -DAMD_EXTENSIONS -DNV_EXTENSIONS -DENABLE_HLSL $(GLSLANG_OS_FLAGS) + +include $(CLEAR_VARS) +LOCAL_MODULE:=OSDependent +LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) +LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) +LOCAL_SRC_FILES:=glslang/OSDependent/Unix/ossource.cpp +LOCAL_C_INCLUDES:=$(LOCAL_PATH) $(LOCAL_PATH)/glslang/OSDependent/Unix/ +LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/glslang/OSDependent/Unix/ +include $(BUILD_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE:=OGLCompiler +LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) +LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) +LOCAL_SRC_FILES:=OGLCompilersDLL/InitializeDll.cpp +LOCAL_C_INCLUDES:=$(LOCAL_PATH)/OGLCompiler +LOCAL_STATIC_LIBRARIES:=OSDependent +include $(BUILD_STATIC_LIBRARY) + +# Build Glslang's HLSL parser library. +include $(CLEAR_VARS) +LOCAL_MODULE:=HLSL +LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) +LOCAL_SRC_FILES:= \ + hlsl/hlslAttributes.cpp \ + hlsl/hlslGrammar.cpp \ + hlsl/hlslOpMap.cpp \ + hlsl/hlslParseables.cpp \ + hlsl/hlslParseHelper.cpp \ + hlsl/hlslScanContext.cpp \ + hlsl/hlslTokenStream.cpp +LOCAL_C_INCLUDES:=$(LOCAL_PATH) \ + $(LOCAL_PATH)/hlsl +include $(BUILD_STATIC_LIBRARY) + +include $(CLEAR_VARS) +GLSLANG_OUT_PATH=$(if $(call host-path-is-absolute,$(TARGET_OUT)),$(TARGET_OUT),$(abspath $(TARGET_OUT))) + +LOCAL_MODULE:=glslang +LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) +LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) +LOCAL_SRC_FILES:= \ + glslang/GenericCodeGen/CodeGen.cpp \ + glslang/GenericCodeGen/Link.cpp \ + glslang/MachineIndependent/attribute.cpp \ + glslang/MachineIndependent/Constant.cpp \ + glslang/MachineIndependent/glslang_tab.cpp \ + glslang/MachineIndependent/InfoSink.cpp \ + glslang/MachineIndependent/Initialize.cpp \ + glslang/MachineIndependent/Intermediate.cpp \ + glslang/MachineIndependent/intermOut.cpp \ + glslang/MachineIndependent/IntermTraverse.cpp \ + glslang/MachineIndependent/iomapper.cpp \ + glslang/MachineIndependent/limits.cpp \ + glslang/MachineIndependent/linkValidate.cpp \ + glslang/MachineIndependent/parseConst.cpp \ + glslang/MachineIndependent/ParseContextBase.cpp \ + glslang/MachineIndependent/ParseHelper.cpp \ + glslang/MachineIndependent/PoolAlloc.cpp \ + glslang/MachineIndependent/propagateNoContraction.cpp \ + glslang/MachineIndependent/reflection.cpp \ + glslang/MachineIndependent/RemoveTree.cpp \ + glslang/MachineIndependent/Scan.cpp \ + glslang/MachineIndependent/ShaderLang.cpp \ + glslang/MachineIndependent/SymbolTable.cpp \ + glslang/MachineIndependent/Versions.cpp \ + glslang/MachineIndependent/preprocessor/PpAtom.cpp \ + glslang/MachineIndependent/preprocessor/PpContext.cpp \ + glslang/MachineIndependent/preprocessor/Pp.cpp \ + glslang/MachineIndependent/preprocessor/PpScanner.cpp \ + glslang/MachineIndependent/preprocessor/PpTokens.cpp +LOCAL_C_INCLUDES:=$(LOCAL_PATH) \ + $(LOCAL_PATH)/glslang/MachineIndependent \ + $(GLSLANG_OUT_PATH) +LOCAL_STATIC_LIBRARIES:=OSDependent OGLCompiler HLSL +include $(BUILD_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE:=SPIRV +LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti -Werror $(GLSLANG_DEFINES) +LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) +LOCAL_SRC_FILES:= \ + SPIRV/GlslangToSpv.cpp \ + SPIRV/InReadableOrder.cpp \ + SPIRV/Logger.cpp \ + SPIRV/SPVRemapper.cpp \ + SPIRV/SpvBuilder.cpp \ + SPIRV/SpvPostProcess.cpp \ + SPIRV/SpvTools.cpp \ + SPIRV/disassemble.cpp \ + SPIRV/doc.cpp +LOCAL_C_INCLUDES:=$(LOCAL_PATH) $(LOCAL_PATH)/glslang/SPIRV +LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/glslang/SPIRV +LOCAL_STATIC_LIBRARIES:=glslang +include $(BUILD_STATIC_LIBRARY) diff --git a/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h b/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h index c4a243080..e29c055b9 100644 --- a/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h +++ b/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h @@ -28,10 +28,11 @@ #define GLSLextEXT_H static const int GLSLextEXTVersion = 100; -static const int GLSLextEXTRevision = 1; +static const int GLSLextEXTRevision = 2; static const char* const E_SPV_EXT_shader_stencil_export = "SPV_EXT_shader_stencil_export"; static const char* const E_SPV_EXT_shader_viewport_index_layer = "SPV_EXT_shader_viewport_index_layer"; static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fully_covered"; +static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density"; #endif // #ifndef GLSLextEXT_H diff --git a/3rdparty/glslang/SPIRV/GlslangToSpv.cpp b/3rdparty/glslang/SPIRV/GlslangToSpv.cpp index 2e2a2fe59..4c1dbd4a5 100755 --- a/3rdparty/glslang/SPIRV/GlslangToSpv.cpp +++ b/3rdparty/glslang/SPIRV/GlslangToSpv.cpp @@ -833,6 +833,16 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI builder.addCapability(spv::CapabilityMultiView); return spv::BuiltInViewIndex; + case glslang::EbvFragSizeEXT: + builder.addExtension(spv::E_SPV_EXT_fragment_invocation_density); + builder.addCapability(spv::CapabilityFragmentDensityEXT); + return spv::BuiltInFragSizeEXT; + + case glslang::EbvFragInvocationCountEXT: + builder.addExtension(spv::E_SPV_EXT_fragment_invocation_density); + builder.addCapability(spv::CapabilityFragmentDensityEXT); + return spv::BuiltInFragInvocationCountEXT; + #ifdef NV_EXTENSIONS case glslang::EbvViewportMaskNV: if (!memberDeclaration) { @@ -1815,6 +1825,12 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI unsigned int member = node->getOperand()->getAsBinaryNode()->getRight()->getAsConstantUnion()->getConstArray()[0].getUConst(); spv::Id length = builder.createArrayLength(builder.accessChainGetLValue(), member); + // GLSL semantics say the result of .length() is an int, while SPIR-V says + // signedness must be 0. So, convert from SPIR-V unsigned back to GLSL's + // AST expectation of a signed result. + if (glslangIntermediate->getSource() == glslang::EShSourceGlsl) + length = builder.createUnaryOp(spv::OpBitcast, builder.makeIntType(32), length); + builder.clearAccessChain(); builder.setAccessChainRValue(length); @@ -7153,8 +7169,6 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, spv::DecorationInputAttachmentIndex, symbol->getQualifier().layoutAttachment); if (glslangIntermediate->getXfbMode()) { builder.addCapability(spv::CapabilityTransformFeedback); - if (symbol->getQualifier().hasXfbStride()) - builder.addDecoration(id, spv::DecorationXfbStride, symbol->getQualifier().layoutXfbStride); if (symbol->getQualifier().hasXfbBuffer()) { builder.addDecoration(id, spv::DecorationXfbBuffer, symbol->getQualifier().layoutXfbBuffer); unsigned stride = glslangIntermediate->getXfbStride(symbol->getQualifier().layoutXfbBuffer); diff --git a/3rdparty/glslang/SPIRV/SpvBuilder.cpp b/3rdparty/glslang/SPIRV/SpvBuilder.cpp old mode 100644 new mode 100755 index 8755d9eac..951d10492 --- a/3rdparty/glslang/SPIRV/SpvBuilder.cpp +++ b/3rdparty/glslang/SPIRV/SpvBuilder.cpp @@ -1293,7 +1293,7 @@ Id Builder::createAccessChain(StorageClass storageClass, Id base, const std::vec Id Builder::createArrayLength(Id base, unsigned int member) { - spv::Id intType = makeIntType(32); + spv::Id intType = makeUintType(32); Instruction* length = new Instruction(getUniqueId(), intType, OpArrayLength); length->addIdOperand(base); length->addImmediateOperand(member); diff --git a/3rdparty/glslang/SPIRV/SpvTools.cpp b/3rdparty/glslang/SPIRV/SpvTools.cpp index 05f234cc1..a886b16e5 100755 --- a/3rdparty/glslang/SPIRV/SpvTools.cpp +++ b/3rdparty/glslang/SPIRV/SpvTools.cpp @@ -181,7 +181,7 @@ void SpirvToolsLegalize(const glslang::TIntermediate&, std::vector optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); optimizer.RegisterPass(spvtools::CreateCFGCleanupPass()); - optimizer.Run(spirv.data(), spirv.size(), &spirv, spvtools::ValidatorOptions(), true); + optimizer.Run(spirv.data(), spirv.size(), &spirv); } }; // end namespace glslang diff --git a/3rdparty/glslang/SPIRV/doc.cpp b/3rdparty/glslang/SPIRV/doc.cpp index 4f7c1989b..b0b01fbae 100644 --- a/3rdparty/glslang/SPIRV/doc.cpp +++ b/3rdparty/glslang/SPIRV/doc.cpp @@ -388,12 +388,15 @@ const char* BuiltInString(int builtIn) case BuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; case BuiltInPositionPerViewNV: return "PositionPerViewNV"; case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; - case BuiltInFragmentSizeNV: return "FragmentSizeNV"; - case BuiltInInvocationsPerPixelNV: return "InvocationsPerPixelNV"; +// case BuiltInFragmentSizeNV: return "FragmentSizeNV"; // superseded by BuiltInFragSizeEXT +// case BuiltInInvocationsPerPixelNV: return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT case BuiltInBaryCoordNV: return "BaryCoordNV"; case BuiltInBaryCoordNoPerspNV: return "BaryCoordNoPerspNV"; #endif + case BuiltInFragSizeEXT: return "FragSizeEXT"; + case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT"; + case 5264: return "FullyCoveredEXT"; @@ -897,8 +900,9 @@ const char* CapabilityString(int info) case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV"; case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV"; case CapabilityMeshShadingNV: return "MeshShadingNV"; - case CapabilityShadingRateNV: return "ShadingRateNV"; +// case CapabilityShadingRateNV: return "ShadingRateNV"; // superseded by CapabilityFragmentDensityEXT #endif + case CapabilityFragmentDensityEXT: return "FragmentDensityEXT"; case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT"; diff --git a/3rdparty/glslang/SPIRV/spirv.hpp b/3rdparty/glslang/SPIRV/spirv.hpp index 25b5ce9e9..72e577a14 100644 --- a/3rdparty/glslang/SPIRV/spirv.hpp +++ b/3rdparty/glslang/SPIRV/spirv.hpp @@ -26,13 +26,14 @@ // the Binary Section of the SPIR-V specification. // Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python +// C, C++, C++11, JSON, Lua, Python, C# // // - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL // - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL // - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL // - Lua will use tables, e.g.: spv.SourceLanguage.GLSL // - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// - C# will use enum classes in the Specification class located in the "Spv" namespace, e.g.: Spv.Specification.SourceLanguage.GLSL // // Some tokens act like mask values, which can be OR'd together, // while others are mutually exclusive. The mask-like ones have @@ -512,7 +513,9 @@ enum BuiltIn { BuiltInMeshViewIndicesNV = 5281, BuiltInBaryCoordNV = 5286, BuiltInBaryCoordNoPerspNV = 5287, + BuiltInFragSizeEXT = 5292, BuiltInFragmentSizeNV = 5292, + BuiltInFragInvocationCountEXT = 5293, BuiltInInvocationsPerPixelNV = 5293, BuiltInLaunchIdNV = 5319, BuiltInLaunchSizeNV = 5320, @@ -770,6 +773,7 @@ enum Capability { CapabilityImageFootprintNV = 5282, CapabilityFragmentBarycentricNV = 5284, CapabilityComputeDerivativeGroupQuadsNV = 5288, + CapabilityFragmentDensityEXT = 5291, CapabilityShadingRateNV = 5291, CapabilityGroupNonUniformPartitionedNV = 5297, CapabilityShaderNonUniformEXT = 5301, diff --git a/3rdparty/glslang/Test/baseResults/constantUnaryConversion.comp.out b/3rdparty/glslang/Test/baseResults/constantUnaryConversion.comp.out new file mode 100644 index 000000000..de705e442 --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/constantUnaryConversion.comp.out @@ -0,0 +1,645 @@ +constantUnaryConversion.comp +Shader version: 450 +Requested GL_KHX_shader_explicit_arithmetic_types +local_size = (1, 1, 1) +0:? Sequence +0:48 Function Definition: main( ( global void) +0:48 Function Parameters: +0:? Linker Objects +0:? 'bool_init' ( const bool) +0:? true (const bool) +0:? 'int8_t_init' ( const int8_t) +0:? -1 (const int) +0:? 'int16_t_init' ( const int16_t) +0:? -2 (const int) +0:? 'int32_t_init' ( const int) +0:? -3 (const int) +0:? 'int64_t_init' ( const int64_t) +0:? -4 (const int64_t) +0:? 'uint8_t_init' ( const uint8_t) +0:? 1 (const int) +0:? 'uint16_t_init' ( const uint16_t) +0:? 2 (const int) +0:? 'uint32_t_init' ( const uint) +0:? 3 (const uint) +0:? 'uint64_t_init' ( const uint64_t) +0:? 4 (const uint64_t) +0:? 'float16_t_init' ( const float16_t) +0:? 42.000000 +0:? 'float32_t_init' ( const float) +0:? 13.000000 +0:? 'float64_t_init' ( const double) +0:? -4.000000 +0:? 'bool_to_bool' ( const bool) +0:? true (const bool) +0:? 'int8_t_to_bool' ( const bool) +0:? -1 (const int) +0:? 'int16_t_to_bool' ( const bool) +0:? -2 (const int) +0:? 'int32_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'int64_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'uint8_t_to_bool' ( const bool) +0:? 1 (const int) +0:? 'uint16_t_to_bool' ( const bool) +0:? 2 (const int) +0:? 'uint32_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'uint64_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'float16_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'float32_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'float64_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'bool_to_int8_t' ( const int8_t) +0:? true (const bool) +0:? 'int8_t_to_int8_t' ( const int8_t) +0:? -1 (const int) +0:? 'int16_t_to_int8_t' ( const int8_t) +0:? -2 (const int) +0:? 'int32_t_to_int8_t' ( const int8_t) +0:? -3 (const int) +0:? 'int64_t_to_int8_t' ( const int8_t) +0:? -4 (const int64_t) +0:? 'uint8_t_to_int8_t' ( const int8_t) +0:? 1 (const int) +0:? 'uint16_t_to_int8_t' ( const int8_t) +0:? 2 (const int) +0:? 'uint32_t_to_int8_t' ( const int8_t) +0:? 3 (const uint) +0:? 'uint64_t_to_int8_t' ( const int8_t) +0:? 4 (const uint64_t) +0:? 'float16_t_to_int8_t' ( const int8_t) +0:? 42.000000 +0:? 'float32_t_to_int8_t' ( const int8_t) +0:? 13.000000 +0:? 'float64_t_to_int8_t' ( const int8_t) +0:? -4.000000 +0:? 'bool_to_int16_t' ( const int16_t) +0:? true (const bool) +0:? 'int8_t_to_int16_t' ( const int16_t) +0:? -1 (const int) +0:? 'int16_t_to_int16_t' ( const int16_t) +0:? -2 (const int) +0:? 'int32_t_to_int16_t' ( const int16_t) +0:? -3 (const int) +0:? 'int64_t_to_int16_t' ( const int16_t) +0:? -4 (const int64_t) +0:? 'uint8_t_to_int16_t' ( const int16_t) +0:? 1 (const int) +0:? 'uint16_t_to_int16_t' ( const int16_t) +0:? 2 (const int) +0:? 'uint32_t_to_int16_t' ( const int16_t) +0:? 3 (const uint) +0:? 'uint64_t_to_int16_t' ( const int16_t) +0:? 4 (const uint64_t) +0:? 'float16_t_to_int16_t' ( const int16_t) +0:? 42.000000 +0:? 'float32_t_to_int16_t' ( const int16_t) +0:? 13.000000 +0:? 'float64_t_to_int16_t' ( const int16_t) +0:? -4.000000 +0:? 'bool_to_int32_t' ( const int) +0:? 1 (const int) +0:? 'int8_t_to_int32_t' ( const int) +0:? -1 (const int) +0:? 'int16_t_to_int32_t' ( const int) +0:? -2 (const int) +0:? 'int32_t_to_int32_t' ( const int) +0:? -3 (const int) +0:? 'int64_t_to_int32_t' ( const int) +0:? -4 (const int) +0:? 'uint8_t_to_int32_t' ( const int) +0:? 1 (const int) +0:? 'uint16_t_to_int32_t' ( const int) +0:? 2 (const int) +0:? 'uint32_t_to_int32_t' ( const int) +0:? 3 (const int) +0:? 'uint64_t_to_int32_t' ( const int) +0:? 4 (const int) +0:? 'float16_t_to_int32_t' ( const int) +0:? 42 (const int) +0:? 'float32_t_to_int32_t' ( const int) +0:? 13 (const int) +0:? 'float64_t_to_int32_t' ( const int) +0:? -4 (const int) +0:? 'bool_to_int64_t' ( const int64_t) +0:? 1 (const int64_t) +0:? 'int8_t_to_int64_t' ( const int64_t) +0:? -1 (const int) +0:? 'int16_t_to_int64_t' ( const int64_t) +0:? -2 (const int) +0:? 'int32_t_to_int64_t' ( const int64_t) +0:? -3 (const int64_t) +0:? 'int64_t_to_int64_t' ( const int64_t) +0:? -4 (const int64_t) +0:? 'uint8_t_to_int64_t' ( const int64_t) +0:? 1 (const int) +0:? 'uint16_t_to_int64_t' ( const int64_t) +0:? 2 (const int) +0:? 'uint32_t_to_int64_t' ( const int64_t) +0:? 3 (const int64_t) +0:? 'uint64_t_to_int64_t' ( const int64_t) +0:? 4 (const int64_t) +0:? 'float16_t_to_int64_t' ( const int64_t) +0:? 42 (const int64_t) +0:? 'float32_t_to_int64_t' ( const int64_t) +0:? 13 (const int64_t) +0:? 'float64_t_to_int64_t' ( const int64_t) +0:? -4 (const int64_t) +0:? 'bool_to_uint8_t' ( const uint8_t) +0:? true (const bool) +0:? 'int8_t_to_uint8_t' ( const uint8_t) +0:? -1 (const int) +0:? 'int16_t_to_uint8_t' ( const uint8_t) +0:? -2 (const int) +0:? 'int32_t_to_uint8_t' ( const uint8_t) +0:? -3 (const int) +0:? 'int64_t_to_uint8_t' ( const uint8_t) +0:? -4 (const int64_t) +0:? 'uint8_t_to_uint8_t' ( const uint8_t) +0:? 1 (const int) +0:? 'uint16_t_to_uint8_t' ( const uint8_t) +0:? 2 (const int) +0:? 'uint32_t_to_uint8_t' ( const uint8_t) +0:? 3 (const uint) +0:? 'uint64_t_to_uint8_t' ( const uint8_t) +0:? 4 (const uint64_t) +0:? 'float16_t_to_uint8_t' ( const uint8_t) +0:? 42.000000 +0:? 'float32_t_to_uint8_t' ( const uint8_t) +0:? 13.000000 +0:? 'float64_t_to_uint8_t' ( const uint8_t) +0:? -4.000000 +0:? 'bool_to_uint16_t' ( const uint16_t) +0:? true (const bool) +0:? 'int8_t_to_uint16_t' ( const uint16_t) +0:? -1 (const int) +0:? 'int16_t_to_uint16_t' ( const uint16_t) +0:? -2 (const int) +0:? 'int32_t_to_uint16_t' ( const uint16_t) +0:? -3 (const int) +0:? 'int64_t_to_uint16_t' ( const uint16_t) +0:? -4 (const int64_t) +0:? 'uint8_t_to_uint16_t' ( const uint16_t) +0:? 1 (const int) +0:? 'uint16_t_to_uint16_t' ( const uint16_t) +0:? 2 (const int) +0:? 'uint32_t_to_uint16_t' ( const uint16_t) +0:? 3 (const uint) +0:? 'uint64_t_to_uint16_t' ( const uint16_t) +0:? 4 (const uint64_t) +0:? 'float16_t_to_uint16_t' ( const uint16_t) +0:? 42.000000 +0:? 'float32_t_to_uint16_t' ( const uint16_t) +0:? 13.000000 +0:? 'float64_t_to_uint16_t' ( const uint16_t) +0:? -4.000000 +0:? 'bool_to_uint32_t' ( const uint) +0:? 1 (const uint) +0:? 'int8_t_to_uint32_t' ( const uint) +0:? -1 (const int) +0:? 'int16_t_to_uint32_t' ( const uint) +0:? -2 (const int) +0:? 'int32_t_to_uint32_t' ( const uint) +0:? 4294967293 (const uint) +0:? 'int64_t_to_uint32_t' ( const uint) +0:? 4294967292 (const uint) +0:? 'uint8_t_to_uint32_t' ( const uint) +0:? 1 (const int) +0:? 'uint16_t_to_uint32_t' ( const uint) +0:? 2 (const int) +0:? 'uint32_t_to_uint32_t' ( const uint) +0:? 3 (const uint) +0:? 'uint64_t_to_uint32_t' ( const uint) +0:? 4 (const uint) +0:? 'float16_t_to_uint32_t' ( const uint) +0:? 42 (const uint) +0:? 'float32_t_to_uint32_t' ( const uint) +0:? 13 (const uint) +0:? 'float64_t_to_uint32_t' ( const uint) +0:? 4294967292 (const uint) +0:? 'bool_to_uint64_t' ( const uint64_t) +0:? 1 (const uint64_t) +0:? 'int8_t_to_uint64_t' ( const uint64_t) +0:? -1 (const int) +0:? 'int16_t_to_uint64_t' ( const uint64_t) +0:? -2 (const int) +0:? 'int32_t_to_uint64_t' ( const uint64_t) +0:? 18446744073709551613 (const uint64_t) +0:? 'int64_t_to_uint64_t' ( const uint64_t) +0:? 18446744073709551612 (const uint64_t) +0:? 'uint8_t_to_uint64_t' ( const uint64_t) +0:? 1 (const int) +0:? 'uint16_t_to_uint64_t' ( const uint64_t) +0:? 2 (const int) +0:? 'uint32_t_to_uint64_t' ( const uint64_t) +0:? 3 (const uint64_t) +0:? 'uint64_t_to_uint64_t' ( const uint64_t) +0:? 4 (const uint64_t) +0:? 'float16_t_to_uint64_t' ( const uint64_t) +0:? 42 (const uint64_t) +0:? 'float32_t_to_uint64_t' ( const uint64_t) +0:? 13 (const uint64_t) +0:? 'float64_t_to_uint64_t' ( const uint64_t) +0:? 18446744073709551612 (const uint64_t) +0:? 'bool_to_float16_t' ( const float16_t) +0:? 1.000000 +0:? 'int8_t_to_float16_t' ( const float16_t) +0:? -1 (const int) +0:? 'int16_t_to_float16_t' ( const float16_t) +0:? -2 (const int) +0:? 'int32_t_to_float16_t' ( const float16_t) +0:? -3.000000 +0:? 'int64_t_to_float16_t' ( const float16_t) +0:? -4.000000 +0:? 'uint8_t_to_float16_t' ( const float16_t) +0:? 1 (const int) +0:? 'uint16_t_to_float16_t' ( const float16_t) +0:? 2 (const int) +0:? 'uint32_t_to_float16_t' ( const float16_t) +0:? 3.000000 +0:? 'uint64_t_to_float16_t' ( const float16_t) +0:? 4.000000 +0:? 'float16_t_to_float16_t' ( const float16_t) +0:? 42.000000 +0:? 'float32_t_to_float16_t' ( const float16_t) +0:? 13.000000 +0:? 'float64_t_to_float16_t' ( const float16_t) +0:? -4.000000 +0:? 'bool_to_float32_t' ( const float) +0:? 1.000000 +0:? 'int8_t_to_float32_t' ( const float) +0:? -1 (const int) +0:? 'int16_t_to_float32_t' ( const float) +0:? -2 (const int) +0:? 'int32_t_to_float32_t' ( const float) +0:? -3.000000 +0:? 'int64_t_to_float32_t' ( const float) +0:? -4.000000 +0:? 'uint8_t_to_float32_t' ( const float) +0:? 1 (const int) +0:? 'uint16_t_to_float32_t' ( const float) +0:? 2 (const int) +0:? 'uint32_t_to_float32_t' ( const float) +0:? 3.000000 +0:? 'uint64_t_to_float32_t' ( const float) +0:? 4.000000 +0:? 'float16_t_to_float32_t' ( const float) +0:? 42.000000 +0:? 'float32_t_to_float32_t' ( const float) +0:? 13.000000 +0:? 'float64_t_to_float32_t' ( const float) +0:? -4.000000 +0:? 'bool_to_float64_t' ( const double) +0:? 1.000000 +0:? 'int8_t_to_float64_t' ( const double) +0:? -1 (const int) +0:? 'int16_t_to_float64_t' ( const double) +0:? -2 (const int) +0:? 'int32_t_to_float64_t' ( const double) +0:? -3.000000 +0:? 'int64_t_to_float64_t' ( const double) +0:? -4.000000 +0:? 'uint8_t_to_float64_t' ( const double) +0:? 1 (const int) +0:? 'uint16_t_to_float64_t' ( const double) +0:? 2 (const int) +0:? 'uint32_t_to_float64_t' ( const double) +0:? 3.000000 +0:? 'uint64_t_to_float64_t' ( const double) +0:? 4.000000 +0:? 'float16_t_to_float64_t' ( const double) +0:? 42.000000 +0:? 'float32_t_to_float64_t' ( const double) +0:? 13.000000 +0:? 'float64_t_to_float64_t' ( const double) +0:? -4.000000 + + +Linked compute stage: + + +Shader version: 450 +Requested GL_KHX_shader_explicit_arithmetic_types +local_size = (1, 1, 1) +0:? Sequence +0:48 Function Definition: main( ( global void) +0:48 Function Parameters: +0:? Linker Objects +0:? 'bool_init' ( const bool) +0:? true (const bool) +0:? 'int8_t_init' ( const int8_t) +0:? -1 (const int) +0:? 'int16_t_init' ( const int16_t) +0:? -2 (const int) +0:? 'int32_t_init' ( const int) +0:? -3 (const int) +0:? 'int64_t_init' ( const int64_t) +0:? -4 (const int64_t) +0:? 'uint8_t_init' ( const uint8_t) +0:? 1 (const int) +0:? 'uint16_t_init' ( const uint16_t) +0:? 2 (const int) +0:? 'uint32_t_init' ( const uint) +0:? 3 (const uint) +0:? 'uint64_t_init' ( const uint64_t) +0:? 4 (const uint64_t) +0:? 'float16_t_init' ( const float16_t) +0:? 42.000000 +0:? 'float32_t_init' ( const float) +0:? 13.000000 +0:? 'float64_t_init' ( const double) +0:? -4.000000 +0:? 'bool_to_bool' ( const bool) +0:? true (const bool) +0:? 'int8_t_to_bool' ( const bool) +0:? -1 (const int) +0:? 'int16_t_to_bool' ( const bool) +0:? -2 (const int) +0:? 'int32_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'int64_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'uint8_t_to_bool' ( const bool) +0:? 1 (const int) +0:? 'uint16_t_to_bool' ( const bool) +0:? 2 (const int) +0:? 'uint32_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'uint64_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'float16_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'float32_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'float64_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'bool_to_int8_t' ( const int8_t) +0:? true (const bool) +0:? 'int8_t_to_int8_t' ( const int8_t) +0:? -1 (const int) +0:? 'int16_t_to_int8_t' ( const int8_t) +0:? -2 (const int) +0:? 'int32_t_to_int8_t' ( const int8_t) +0:? -3 (const int) +0:? 'int64_t_to_int8_t' ( const int8_t) +0:? -4 (const int64_t) +0:? 'uint8_t_to_int8_t' ( const int8_t) +0:? 1 (const int) +0:? 'uint16_t_to_int8_t' ( const int8_t) +0:? 2 (const int) +0:? 'uint32_t_to_int8_t' ( const int8_t) +0:? 3 (const uint) +0:? 'uint64_t_to_int8_t' ( const int8_t) +0:? 4 (const uint64_t) +0:? 'float16_t_to_int8_t' ( const int8_t) +0:? 42.000000 +0:? 'float32_t_to_int8_t' ( const int8_t) +0:? 13.000000 +0:? 'float64_t_to_int8_t' ( const int8_t) +0:? -4.000000 +0:? 'bool_to_int16_t' ( const int16_t) +0:? true (const bool) +0:? 'int8_t_to_int16_t' ( const int16_t) +0:? -1 (const int) +0:? 'int16_t_to_int16_t' ( const int16_t) +0:? -2 (const int) +0:? 'int32_t_to_int16_t' ( const int16_t) +0:? -3 (const int) +0:? 'int64_t_to_int16_t' ( const int16_t) +0:? -4 (const int64_t) +0:? 'uint8_t_to_int16_t' ( const int16_t) +0:? 1 (const int) +0:? 'uint16_t_to_int16_t' ( const int16_t) +0:? 2 (const int) +0:? 'uint32_t_to_int16_t' ( const int16_t) +0:? 3 (const uint) +0:? 'uint64_t_to_int16_t' ( const int16_t) +0:? 4 (const uint64_t) +0:? 'float16_t_to_int16_t' ( const int16_t) +0:? 42.000000 +0:? 'float32_t_to_int16_t' ( const int16_t) +0:? 13.000000 +0:? 'float64_t_to_int16_t' ( const int16_t) +0:? -4.000000 +0:? 'bool_to_int32_t' ( const int) +0:? 1 (const int) +0:? 'int8_t_to_int32_t' ( const int) +0:? -1 (const int) +0:? 'int16_t_to_int32_t' ( const int) +0:? -2 (const int) +0:? 'int32_t_to_int32_t' ( const int) +0:? -3 (const int) +0:? 'int64_t_to_int32_t' ( const int) +0:? -4 (const int) +0:? 'uint8_t_to_int32_t' ( const int) +0:? 1 (const int) +0:? 'uint16_t_to_int32_t' ( const int) +0:? 2 (const int) +0:? 'uint32_t_to_int32_t' ( const int) +0:? 3 (const int) +0:? 'uint64_t_to_int32_t' ( const int) +0:? 4 (const int) +0:? 'float16_t_to_int32_t' ( const int) +0:? 42 (const int) +0:? 'float32_t_to_int32_t' ( const int) +0:? 13 (const int) +0:? 'float64_t_to_int32_t' ( const int) +0:? -4 (const int) +0:? 'bool_to_int64_t' ( const int64_t) +0:? 1 (const int64_t) +0:? 'int8_t_to_int64_t' ( const int64_t) +0:? -1 (const int) +0:? 'int16_t_to_int64_t' ( const int64_t) +0:? -2 (const int) +0:? 'int32_t_to_int64_t' ( const int64_t) +0:? -3 (const int64_t) +0:? 'int64_t_to_int64_t' ( const int64_t) +0:? -4 (const int64_t) +0:? 'uint8_t_to_int64_t' ( const int64_t) +0:? 1 (const int) +0:? 'uint16_t_to_int64_t' ( const int64_t) +0:? 2 (const int) +0:? 'uint32_t_to_int64_t' ( const int64_t) +0:? 3 (const int64_t) +0:? 'uint64_t_to_int64_t' ( const int64_t) +0:? 4 (const int64_t) +0:? 'float16_t_to_int64_t' ( const int64_t) +0:? 42 (const int64_t) +0:? 'float32_t_to_int64_t' ( const int64_t) +0:? 13 (const int64_t) +0:? 'float64_t_to_int64_t' ( const int64_t) +0:? -4 (const int64_t) +0:? 'bool_to_uint8_t' ( const uint8_t) +0:? true (const bool) +0:? 'int8_t_to_uint8_t' ( const uint8_t) +0:? -1 (const int) +0:? 'int16_t_to_uint8_t' ( const uint8_t) +0:? -2 (const int) +0:? 'int32_t_to_uint8_t' ( const uint8_t) +0:? -3 (const int) +0:? 'int64_t_to_uint8_t' ( const uint8_t) +0:? -4 (const int64_t) +0:? 'uint8_t_to_uint8_t' ( const uint8_t) +0:? 1 (const int) +0:? 'uint16_t_to_uint8_t' ( const uint8_t) +0:? 2 (const int) +0:? 'uint32_t_to_uint8_t' ( const uint8_t) +0:? 3 (const uint) +0:? 'uint64_t_to_uint8_t' ( const uint8_t) +0:? 4 (const uint64_t) +0:? 'float16_t_to_uint8_t' ( const uint8_t) +0:? 42.000000 +0:? 'float32_t_to_uint8_t' ( const uint8_t) +0:? 13.000000 +0:? 'float64_t_to_uint8_t' ( const uint8_t) +0:? -4.000000 +0:? 'bool_to_uint16_t' ( const uint16_t) +0:? true (const bool) +0:? 'int8_t_to_uint16_t' ( const uint16_t) +0:? -1 (const int) +0:? 'int16_t_to_uint16_t' ( const uint16_t) +0:? -2 (const int) +0:? 'int32_t_to_uint16_t' ( const uint16_t) +0:? -3 (const int) +0:? 'int64_t_to_uint16_t' ( const uint16_t) +0:? -4 (const int64_t) +0:? 'uint8_t_to_uint16_t' ( const uint16_t) +0:? 1 (const int) +0:? 'uint16_t_to_uint16_t' ( const uint16_t) +0:? 2 (const int) +0:? 'uint32_t_to_uint16_t' ( const uint16_t) +0:? 3 (const uint) +0:? 'uint64_t_to_uint16_t' ( const uint16_t) +0:? 4 (const uint64_t) +0:? 'float16_t_to_uint16_t' ( const uint16_t) +0:? 42.000000 +0:? 'float32_t_to_uint16_t' ( const uint16_t) +0:? 13.000000 +0:? 'float64_t_to_uint16_t' ( const uint16_t) +0:? -4.000000 +0:? 'bool_to_uint32_t' ( const uint) +0:? 1 (const uint) +0:? 'int8_t_to_uint32_t' ( const uint) +0:? -1 (const int) +0:? 'int16_t_to_uint32_t' ( const uint) +0:? -2 (const int) +0:? 'int32_t_to_uint32_t' ( const uint) +0:? 4294967293 (const uint) +0:? 'int64_t_to_uint32_t' ( const uint) +0:? 4294967292 (const uint) +0:? 'uint8_t_to_uint32_t' ( const uint) +0:? 1 (const int) +0:? 'uint16_t_to_uint32_t' ( const uint) +0:? 2 (const int) +0:? 'uint32_t_to_uint32_t' ( const uint) +0:? 3 (const uint) +0:? 'uint64_t_to_uint32_t' ( const uint) +0:? 4 (const uint) +0:? 'float16_t_to_uint32_t' ( const uint) +0:? 42 (const uint) +0:? 'float32_t_to_uint32_t' ( const uint) +0:? 13 (const uint) +0:? 'float64_t_to_uint32_t' ( const uint) +0:? 4294967292 (const uint) +0:? 'bool_to_uint64_t' ( const uint64_t) +0:? 1 (const uint64_t) +0:? 'int8_t_to_uint64_t' ( const uint64_t) +0:? -1 (const int) +0:? 'int16_t_to_uint64_t' ( const uint64_t) +0:? -2 (const int) +0:? 'int32_t_to_uint64_t' ( const uint64_t) +0:? 18446744073709551613 (const uint64_t) +0:? 'int64_t_to_uint64_t' ( const uint64_t) +0:? 18446744073709551612 (const uint64_t) +0:? 'uint8_t_to_uint64_t' ( const uint64_t) +0:? 1 (const int) +0:? 'uint16_t_to_uint64_t' ( const uint64_t) +0:? 2 (const int) +0:? 'uint32_t_to_uint64_t' ( const uint64_t) +0:? 3 (const uint64_t) +0:? 'uint64_t_to_uint64_t' ( const uint64_t) +0:? 4 (const uint64_t) +0:? 'float16_t_to_uint64_t' ( const uint64_t) +0:? 42 (const uint64_t) +0:? 'float32_t_to_uint64_t' ( const uint64_t) +0:? 13 (const uint64_t) +0:? 'float64_t_to_uint64_t' ( const uint64_t) +0:? 18446744073709551612 (const uint64_t) +0:? 'bool_to_float16_t' ( const float16_t) +0:? 1.000000 +0:? 'int8_t_to_float16_t' ( const float16_t) +0:? -1 (const int) +0:? 'int16_t_to_float16_t' ( const float16_t) +0:? -2 (const int) +0:? 'int32_t_to_float16_t' ( const float16_t) +0:? -3.000000 +0:? 'int64_t_to_float16_t' ( const float16_t) +0:? -4.000000 +0:? 'uint8_t_to_float16_t' ( const float16_t) +0:? 1 (const int) +0:? 'uint16_t_to_float16_t' ( const float16_t) +0:? 2 (const int) +0:? 'uint32_t_to_float16_t' ( const float16_t) +0:? 3.000000 +0:? 'uint64_t_to_float16_t' ( const float16_t) +0:? 4.000000 +0:? 'float16_t_to_float16_t' ( const float16_t) +0:? 42.000000 +0:? 'float32_t_to_float16_t' ( const float16_t) +0:? 13.000000 +0:? 'float64_t_to_float16_t' ( const float16_t) +0:? -4.000000 +0:? 'bool_to_float32_t' ( const float) +0:? 1.000000 +0:? 'int8_t_to_float32_t' ( const float) +0:? -1 (const int) +0:? 'int16_t_to_float32_t' ( const float) +0:? -2 (const int) +0:? 'int32_t_to_float32_t' ( const float) +0:? -3.000000 +0:? 'int64_t_to_float32_t' ( const float) +0:? -4.000000 +0:? 'uint8_t_to_float32_t' ( const float) +0:? 1 (const int) +0:? 'uint16_t_to_float32_t' ( const float) +0:? 2 (const int) +0:? 'uint32_t_to_float32_t' ( const float) +0:? 3.000000 +0:? 'uint64_t_to_float32_t' ( const float) +0:? 4.000000 +0:? 'float16_t_to_float32_t' ( const float) +0:? 42.000000 +0:? 'float32_t_to_float32_t' ( const float) +0:? 13.000000 +0:? 'float64_t_to_float32_t' ( const float) +0:? -4.000000 +0:? 'bool_to_float64_t' ( const double) +0:? 1.000000 +0:? 'int8_t_to_float64_t' ( const double) +0:? -1 (const int) +0:? 'int16_t_to_float64_t' ( const double) +0:? -2 (const int) +0:? 'int32_t_to_float64_t' ( const double) +0:? -3.000000 +0:? 'int64_t_to_float64_t' ( const double) +0:? -4.000000 +0:? 'uint8_t_to_float64_t' ( const double) +0:? 1 (const int) +0:? 'uint16_t_to_float64_t' ( const double) +0:? 2 (const int) +0:? 'uint32_t_to_float64_t' ( const double) +0:? 3.000000 +0:? 'uint64_t_to_float64_t' ( const double) +0:? 4.000000 +0:? 'float16_t_to_float64_t' ( const double) +0:? 42.000000 +0:? 'float32_t_to_float64_t' ( const double) +0:? 13.000000 +0:? 'float64_t_to_float64_t' ( const double) +0:? -4.000000 + diff --git a/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out b/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out index 49958a658..a23ccd244 100644 --- a/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out +++ b/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out @@ -323,10 +323,6 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'pos' (layout( location=0) flat in uint) -error: SPIRV-Tools Validation Errors -error: OpStore Pointer '14[size]'s type does not match Object '20's type. - OpStore %size %20 - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 114 @@ -370,13 +366,13 @@ error: OpStore Pointer '14[size]'s type does not match Object '20's ty 16(sbuf): TypeStruct 15 17: TypePointer Uniform 16(sbuf) 18(sbuf): 17(ptr) Variable Uniform - 19: TypeInt 32 1 - 21: 19(int) Constant 0 - 23: 19(int) Constant 2 + 20: TypeInt 32 1 + 21: 20(int) Constant 0 + 23: 20(int) Constant 2 25: TypePointer Uniform 6(int) - 29: TypePointer Function 19(int) + 29: TypePointer Function 20(int) 32: 6(int) Constant 4 - 39: 19(int) Constant 1 + 39: 20(int) Constant 1 43: TypeVector 6(int) 2 45: TypeVector 8(float) 2 47: 8(float) Constant 0 @@ -384,7 +380,7 @@ error: OpStore Pointer '14[size]'s type does not match Object '20's ty 69: TypeVector 6(int) 3 71: TypeVector 8(float) 3 80: 6(int) Constant 12 - 95: 19(int) Constant 3 + 95: 20(int) Constant 3 99: TypeVector 6(int) 4 106: TypePointer Input 6(int) 107(pos): 106(ptr) Variable Input @@ -409,22 +405,22 @@ error: OpStore Pointer '14[size]'s type does not match Object '20's ty 30(byteAddrTemp): 29(ptr) Variable Function 53(byteAddrTemp): 29(ptr) Variable Function 78(byteAddrTemp): 29(ptr) Variable Function - 20: 19(int) ArrayLength 18(sbuf) 0 - Store 14(size) 20 + 19: 6(int) ArrayLength 18(sbuf) 0 + Store 14(size) 19 22: 6(int) Load 11(pos) - 24: 19(int) ShiftRightLogical 22 23 + 24: 20(int) ShiftRightLogical 22 23 26: 25(ptr) AccessChain 18(sbuf) 21 24 27: 6(int) Load 26 28: 8(float) ConvertUToF 27 31: 6(int) Load 11(pos) 33: 6(int) IAdd 31 32 - 34: 19(int) ShiftRightLogical 33 23 + 34: 20(int) ShiftRightLogical 33 23 Store 30(byteAddrTemp) 34 - 35: 19(int) Load 30(byteAddrTemp) + 35: 20(int) Load 30(byteAddrTemp) 36: 25(ptr) AccessChain 18(sbuf) 21 35 37: 6(int) Load 36 - 38: 19(int) Load 30(byteAddrTemp) - 40: 19(int) IAdd 38 39 + 38: 20(int) Load 30(byteAddrTemp) + 40: 20(int) IAdd 38 39 41: 25(ptr) AccessChain 18(sbuf) 21 40 42: 6(int) Load 41 44: 43(ivec2) CompositeConstruct 37 42 @@ -436,17 +432,17 @@ error: OpStore Pointer '14[size]'s type does not match Object '20's ty 52: 9(fvec4) FAdd 51 50 54: 6(int) Load 11(pos) 56: 6(int) IAdd 54 55 - 57: 19(int) ShiftRightLogical 56 23 + 57: 20(int) ShiftRightLogical 56 23 Store 53(byteAddrTemp) 57 - 58: 19(int) Load 53(byteAddrTemp) + 58: 20(int) Load 53(byteAddrTemp) 59: 25(ptr) AccessChain 18(sbuf) 21 58 60: 6(int) Load 59 - 61: 19(int) Load 53(byteAddrTemp) - 62: 19(int) IAdd 61 39 + 61: 20(int) Load 53(byteAddrTemp) + 62: 20(int) IAdd 61 39 63: 25(ptr) AccessChain 18(sbuf) 21 62 64: 6(int) Load 63 - 65: 19(int) Load 53(byteAddrTemp) - 66: 19(int) IAdd 65 23 + 65: 20(int) Load 53(byteAddrTemp) + 66: 20(int) IAdd 65 23 67: 25(ptr) AccessChain 18(sbuf) 21 66 68: 6(int) Load 67 70: 69(ivec3) CompositeConstruct 60 64 68 @@ -458,21 +454,21 @@ error: OpStore Pointer '14[size]'s type does not match Object '20's ty 77: 9(fvec4) FAdd 52 76 79: 6(int) Load 11(pos) 81: 6(int) IAdd 79 80 - 82: 19(int) ShiftRightLogical 81 23 + 82: 20(int) ShiftRightLogical 81 23 Store 78(byteAddrTemp) 82 - 83: 19(int) Load 78(byteAddrTemp) + 83: 20(int) Load 78(byteAddrTemp) 84: 25(ptr) AccessChain 18(sbuf) 21 83 85: 6(int) Load 84 - 86: 19(int) Load 78(byteAddrTemp) - 87: 19(int) IAdd 86 39 + 86: 20(int) Load 78(byteAddrTemp) + 87: 20(int) IAdd 86 39 88: 25(ptr) AccessChain 18(sbuf) 21 87 89: 6(int) Load 88 - 90: 19(int) Load 78(byteAddrTemp) - 91: 19(int) IAdd 90 23 + 90: 20(int) Load 78(byteAddrTemp) + 91: 20(int) IAdd 90 23 92: 25(ptr) AccessChain 18(sbuf) 21 91 93: 6(int) Load 92 - 94: 19(int) Load 78(byteAddrTemp) - 96: 19(int) IAdd 94 95 + 94: 20(int) Load 78(byteAddrTemp) + 96: 20(int) IAdd 94 95 97: 25(ptr) AccessChain 18(sbuf) 21 96 98: 6(int) Load 97 100: 99(ivec4) CompositeConstruct 85 89 93 98 diff --git a/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out index 1d11b6470..738e13dd0 100644 --- a/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out +++ b/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out @@ -175,10 +175,6 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'pos' (layout( location=0) flat in uint) -error: SPIRV-Tools Validation Errors -error: OpStore Pointer '26[size]'s type does not match Object '33's type. - OpStore %size %33 - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 78 @@ -276,7 +272,7 @@ error: OpStore Pointer '26[size]'s type does not match Object '33's ty 22: 6(int) IAdd 20 21 25: 24(ptr) AccessChain 17(sbuf2) 19 22 Store 25 23 - 33: 18(int) ArrayLength 32(sbuf) 0 + 33: 6(int) ArrayLength 32(sbuf) 0 Store 26(size) 33 Store 34(stride) 35 36: 6(int) Load 11(pos) diff --git a/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out b/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out index e058d1124..af76bfb46 100644 --- a/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out +++ b/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out @@ -187,10 +187,6 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'pos' (layout( location=0) flat in uint) -error: SPIRV-Tools Validation Errors -error: OpStore Pointer '43[size]'s type does not match Object '44's type. - OpStore %size %44 - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 96 @@ -312,7 +308,7 @@ error: OpStore Pointer '43[size]'s type does not match Object '44's ty 41: 15(bool) INotEqual 39 35 42: 37(ptr) AccessChain 18(mydata) 40 Store 42 41 - 44: 24(int) ArrayLength 23(sbuf) 0 + 44: 6(int) ArrayLength 23(sbuf) 0 Store 43(size) 44 Store 45(stride) 46 47: 6(int) Load 11(pos) diff --git a/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out b/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out index 7fbd1502d..13a59567d 100644 --- a/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out +++ b/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out @@ -175,10 +175,6 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'pos' (layout( location=0) flat in uint) -error: SPIRV-Tools Validation Errors -error: OpStore Pointer '26[size]'s type does not match Object '33's type. - OpStore %size %33 - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 78 @@ -274,7 +270,7 @@ error: OpStore Pointer '26[size]'s type does not match Object '33's ty 22: 6(int) IAdd 20 21 25: 24(ptr) AccessChain 17(sbuf2) 19 22 Store 25 23 - 33: 18(int) ArrayLength 32(sbuf) 0 + 33: 6(int) ArrayLength 32(sbuf) 0 Store 26(size) 33 Store 34(stride) 35 36: 6(int) Load 11(pos) diff --git a/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out index ed27c8939..690a0da85 100644 --- a/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out +++ b/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out @@ -1003,10 +1003,6 @@ gl_FragCoord origin is upper left 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'pos' (layout( location=0) flat in uint) -error: SPIRV-Tools Validation Errors -error: OpStore Pointer '14[size]'s type does not match Object '20's type. - OpStore %size %20 - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 239 @@ -1053,18 +1049,18 @@ error: OpStore Pointer '14[size]'s type does not match Object '20's ty 16(sbuf): TypeStruct 15 17: TypePointer Uniform 16(sbuf) 18(sbuf): 17(ptr) Variable Uniform - 19: TypeInt 32 1 - 21: TypePointer Function 19(int) - 24: 19(int) Constant 2 - 26: 19(int) Constant 0 + 20: TypeInt 32 1 + 21: TypePointer Function 20(int) + 24: 20(int) Constant 2 + 26: 20(int) Constant 0 30: TypePointer Uniform 6(int) - 45: 19(int) Constant 1 + 45: 20(int) Constant 1 49: TypeVector 6(int) 2 51: 6(int) Constant 0 66: 6(int) Constant 1 87: TypeVector 6(int) 3 125: 6(int) Constant 2 - 147: 19(int) Constant 3 + 147: 20(int) Constant 3 151: TypeVector 6(int) 4 219: 6(int) Constant 3 231: TypePointer Input 6(int) @@ -1094,46 +1090,46 @@ error: OpStore Pointer '14[size]'s type does not match Object '20's ty 73(byteAddrTemp): 21(ptr) Variable Function 128(byteAddrTemp): 21(ptr) Variable Function 132(byteAddrTemp): 21(ptr) Variable Function - 20: 19(int) ArrayLength 18(sbuf) 0 - Store 14(size) 20 + 19: 6(int) ArrayLength 18(sbuf) 0 + Store 14(size) 19 23: 6(int) Load 11(pos) - 25: 19(int) ShiftRightLogical 23 24 + 25: 20(int) ShiftRightLogical 23 24 Store 22(byteAddrTemp) 25 - 27: 19(int) Load 22(byteAddrTemp) + 27: 20(int) Load 22(byteAddrTemp) 28: 6(int) Load 11(pos) - 29: 19(int) ShiftRightLogical 28 24 + 29: 20(int) ShiftRightLogical 28 24 31: 30(ptr) AccessChain 18(sbuf) 26 29 32: 6(int) Load 31 33: 30(ptr) AccessChain 18(sbuf) 26 27 Store 33 32 35: 6(int) Load 11(pos) - 36: 19(int) ShiftRightLogical 35 24 + 36: 20(int) ShiftRightLogical 35 24 Store 34(byteAddrTemp) 36 - 37: 19(int) Load 34(byteAddrTemp) + 37: 20(int) Load 34(byteAddrTemp) 39: 6(int) Load 11(pos) - 40: 19(int) ShiftRightLogical 39 24 + 40: 20(int) ShiftRightLogical 39 24 Store 38(byteAddrTemp) 40 - 41: 19(int) Load 38(byteAddrTemp) + 41: 20(int) Load 38(byteAddrTemp) 42: 30(ptr) AccessChain 18(sbuf) 26 41 43: 6(int) Load 42 - 44: 19(int) Load 38(byteAddrTemp) - 46: 19(int) IAdd 44 45 + 44: 20(int) Load 38(byteAddrTemp) + 46: 20(int) IAdd 44 45 47: 30(ptr) AccessChain 18(sbuf) 26 46 48: 6(int) Load 47 50: 49(ivec2) CompositeConstruct 43 48 52: 6(int) CompositeExtract 50 0 53: 30(ptr) AccessChain 18(sbuf) 26 37 Store 53 52 - 54: 19(int) Load 34(byteAddrTemp) - 55: 19(int) IAdd 54 45 + 54: 20(int) Load 34(byteAddrTemp) + 55: 20(int) IAdd 54 45 56: 6(int) Load 11(pos) - 57: 19(int) ShiftRightLogical 56 24 + 57: 20(int) ShiftRightLogical 56 24 Store 38(byteAddrTemp) 57 - 58: 19(int) Load 38(byteAddrTemp) + 58: 20(int) Load 38(byteAddrTemp) 59: 30(ptr) AccessChain 18(sbuf) 26 58 60: 6(int) Load 59 - 61: 19(int) Load 38(byteAddrTemp) - 62: 19(int) IAdd 61 45 + 61: 20(int) Load 38(byteAddrTemp) + 62: 20(int) IAdd 61 45 63: 30(ptr) AccessChain 18(sbuf) 26 62 64: 6(int) Load 63 65: 49(ivec2) CompositeConstruct 60 64 @@ -1141,61 +1137,61 @@ error: OpStore Pointer '14[size]'s type does not match Object '20's ty 68: 30(ptr) AccessChain 18(sbuf) 26 55 Store 68 67 70: 6(int) Load 11(pos) - 71: 19(int) ShiftRightLogical 70 24 + 71: 20(int) ShiftRightLogical 70 24 Store 69(byteAddrTemp) 71 - 72: 19(int) Load 69(byteAddrTemp) + 72: 20(int) Load 69(byteAddrTemp) 74: 6(int) Load 11(pos) - 75: 19(int) ShiftRightLogical 74 24 + 75: 20(int) ShiftRightLogical 74 24 Store 73(byteAddrTemp) 75 - 76: 19(int) Load 73(byteAddrTemp) + 76: 20(int) Load 73(byteAddrTemp) 77: 30(ptr) AccessChain 18(sbuf) 26 76 78: 6(int) Load 77 - 79: 19(int) Load 73(byteAddrTemp) - 80: 19(int) IAdd 79 45 + 79: 20(int) Load 73(byteAddrTemp) + 80: 20(int) IAdd 79 45 81: 30(ptr) AccessChain 18(sbuf) 26 80 82: 6(int) Load 81 - 83: 19(int) Load 73(byteAddrTemp) - 84: 19(int) IAdd 83 24 + 83: 20(int) Load 73(byteAddrTemp) + 84: 20(int) IAdd 83 24 85: 30(ptr) AccessChain 18(sbuf) 26 84 86: 6(int) Load 85 88: 87(ivec3) CompositeConstruct 78 82 86 89: 6(int) CompositeExtract 88 0 90: 30(ptr) AccessChain 18(sbuf) 26 72 Store 90 89 - 91: 19(int) Load 69(byteAddrTemp) - 92: 19(int) IAdd 91 45 + 91: 20(int) Load 69(byteAddrTemp) + 92: 20(int) IAdd 91 45 93: 6(int) Load 11(pos) - 94: 19(int) ShiftRightLogical 93 24 + 94: 20(int) ShiftRightLogical 93 24 Store 73(byteAddrTemp) 94 - 95: 19(int) Load 73(byteAddrTemp) + 95: 20(int) Load 73(byteAddrTemp) 96: 30(ptr) AccessChain 18(sbuf) 26 95 97: 6(int) Load 96 - 98: 19(int) Load 73(byteAddrTemp) - 99: 19(int) IAdd 98 45 + 98: 20(int) Load 73(byteAddrTemp) + 99: 20(int) IAdd 98 45 100: 30(ptr) AccessChain 18(sbuf) 26 99 101: 6(int) Load 100 - 102: 19(int) Load 73(byteAddrTemp) - 103: 19(int) IAdd 102 24 + 102: 20(int) Load 73(byteAddrTemp) + 103: 20(int) IAdd 102 24 104: 30(ptr) AccessChain 18(sbuf) 26 103 105: 6(int) Load 104 106: 87(ivec3) CompositeConstruct 97 101 105 107: 6(int) CompositeExtract 106 1 108: 30(ptr) AccessChain 18(sbuf) 26 92 Store 108 107 - 109: 19(int) Load 69(byteAddrTemp) - 110: 19(int) IAdd 109 24 + 109: 20(int) Load 69(byteAddrTemp) + 110: 20(int) IAdd 109 24 111: 6(int) Load 11(pos) - 112: 19(int) ShiftRightLogical 111 24 + 112: 20(int) ShiftRightLogical 111 24 Store 73(byteAddrTemp) 112 - 113: 19(int) Load 73(byteAddrTemp) + 113: 20(int) Load 73(byteAddrTemp) 114: 30(ptr) AccessChain 18(sbuf) 26 113 115: 6(int) Load 114 - 116: 19(int) Load 73(byteAddrTemp) - 117: 19(int) IAdd 116 45 + 116: 20(int) Load 73(byteAddrTemp) + 117: 20(int) IAdd 116 45 118: 30(ptr) AccessChain 18(sbuf) 26 117 119: 6(int) Load 118 - 120: 19(int) Load 73(byteAddrTemp) - 121: 19(int) IAdd 120 24 + 120: 20(int) Load 73(byteAddrTemp) + 121: 20(int) IAdd 120 24 122: 30(ptr) AccessChain 18(sbuf) 26 121 123: 6(int) Load 122 124: 87(ivec3) CompositeConstruct 115 119 123 @@ -1203,97 +1199,97 @@ error: OpStore Pointer '14[size]'s type does not match Object '20's ty 127: 30(ptr) AccessChain 18(sbuf) 26 110 Store 127 126 129: 6(int) Load 11(pos) - 130: 19(int) ShiftRightLogical 129 24 + 130: 20(int) ShiftRightLogical 129 24 Store 128(byteAddrTemp) 130 - 131: 19(int) Load 128(byteAddrTemp) + 131: 20(int) Load 128(byteAddrTemp) 133: 6(int) Load 11(pos) - 134: 19(int) ShiftRightLogical 133 24 + 134: 20(int) ShiftRightLogical 133 24 Store 132(byteAddrTemp) 134 - 135: 19(int) Load 132(byteAddrTemp) + 135: 20(int) Load 132(byteAddrTemp) 136: 30(ptr) AccessChain 18(sbuf) 26 135 137: 6(int) Load 136 - 138: 19(int) Load 132(byteAddrTemp) - 139: 19(int) IAdd 138 45 + 138: 20(int) Load 132(byteAddrTemp) + 139: 20(int) IAdd 138 45 140: 30(ptr) AccessChain 18(sbuf) 26 139 141: 6(int) Load 140 - 142: 19(int) Load 132(byteAddrTemp) - 143: 19(int) IAdd 142 24 + 142: 20(int) Load 132(byteAddrTemp) + 143: 20(int) IAdd 142 24 144: 30(ptr) AccessChain 18(sbuf) 26 143 145: 6(int) Load 144 - 146: 19(int) Load 132(byteAddrTemp) - 148: 19(int) IAdd 146 147 + 146: 20(int) Load 132(byteAddrTemp) + 148: 20(int) IAdd 146 147 149: 30(ptr) AccessChain 18(sbuf) 26 148 150: 6(int) Load 149 152: 151(ivec4) CompositeConstruct 137 141 145 150 153: 6(int) CompositeExtract 152 0 154: 30(ptr) AccessChain 18(sbuf) 26 131 Store 154 153 - 155: 19(int) Load 128(byteAddrTemp) - 156: 19(int) IAdd 155 45 + 155: 20(int) Load 128(byteAddrTemp) + 156: 20(int) IAdd 155 45 157: 6(int) Load 11(pos) - 158: 19(int) ShiftRightLogical 157 24 + 158: 20(int) ShiftRightLogical 157 24 Store 132(byteAddrTemp) 158 - 159: 19(int) Load 132(byteAddrTemp) + 159: 20(int) Load 132(byteAddrTemp) 160: 30(ptr) AccessChain 18(sbuf) 26 159 161: 6(int) Load 160 - 162: 19(int) Load 132(byteAddrTemp) - 163: 19(int) IAdd 162 45 + 162: 20(int) Load 132(byteAddrTemp) + 163: 20(int) IAdd 162 45 164: 30(ptr) AccessChain 18(sbuf) 26 163 165: 6(int) Load 164 - 166: 19(int) Load 132(byteAddrTemp) - 167: 19(int) IAdd 166 24 + 166: 20(int) Load 132(byteAddrTemp) + 167: 20(int) IAdd 166 24 168: 30(ptr) AccessChain 18(sbuf) 26 167 169: 6(int) Load 168 - 170: 19(int) Load 132(byteAddrTemp) - 171: 19(int) IAdd 170 147 + 170: 20(int) Load 132(byteAddrTemp) + 171: 20(int) IAdd 170 147 172: 30(ptr) AccessChain 18(sbuf) 26 171 173: 6(int) Load 172 174: 151(ivec4) CompositeConstruct 161 165 169 173 175: 6(int) CompositeExtract 174 1 176: 30(ptr) AccessChain 18(sbuf) 26 156 Store 176 175 - 177: 19(int) Load 128(byteAddrTemp) - 178: 19(int) IAdd 177 24 + 177: 20(int) Load 128(byteAddrTemp) + 178: 20(int) IAdd 177 24 179: 6(int) Load 11(pos) - 180: 19(int) ShiftRightLogical 179 24 + 180: 20(int) ShiftRightLogical 179 24 Store 132(byteAddrTemp) 180 - 181: 19(int) Load 132(byteAddrTemp) + 181: 20(int) Load 132(byteAddrTemp) 182: 30(ptr) AccessChain 18(sbuf) 26 181 183: 6(int) Load 182 - 184: 19(int) Load 132(byteAddrTemp) - 185: 19(int) IAdd 184 45 + 184: 20(int) Load 132(byteAddrTemp) + 185: 20(int) IAdd 184 45 186: 30(ptr) AccessChain 18(sbuf) 26 185 187: 6(int) Load 186 - 188: 19(int) Load 132(byteAddrTemp) - 189: 19(int) IAdd 188 24 + 188: 20(int) Load 132(byteAddrTemp) + 189: 20(int) IAdd 188 24 190: 30(ptr) AccessChain 18(sbuf) 26 189 191: 6(int) Load 190 - 192: 19(int) Load 132(byteAddrTemp) - 193: 19(int) IAdd 192 147 + 192: 20(int) Load 132(byteAddrTemp) + 193: 20(int) IAdd 192 147 194: 30(ptr) AccessChain 18(sbuf) 26 193 195: 6(int) Load 194 196: 151(ivec4) CompositeConstruct 183 187 191 195 197: 6(int) CompositeExtract 196 2 198: 30(ptr) AccessChain 18(sbuf) 26 178 Store 198 197 - 199: 19(int) Load 128(byteAddrTemp) - 200: 19(int) IAdd 199 147 + 199: 20(int) Load 128(byteAddrTemp) + 200: 20(int) IAdd 199 147 201: 6(int) Load 11(pos) - 202: 19(int) ShiftRightLogical 201 24 + 202: 20(int) ShiftRightLogical 201 24 Store 132(byteAddrTemp) 202 - 203: 19(int) Load 132(byteAddrTemp) + 203: 20(int) Load 132(byteAddrTemp) 204: 30(ptr) AccessChain 18(sbuf) 26 203 205: 6(int) Load 204 - 206: 19(int) Load 132(byteAddrTemp) - 207: 19(int) IAdd 206 45 + 206: 20(int) Load 132(byteAddrTemp) + 207: 20(int) IAdd 206 45 208: 30(ptr) AccessChain 18(sbuf) 26 207 209: 6(int) Load 208 - 210: 19(int) Load 132(byteAddrTemp) - 211: 19(int) IAdd 210 24 + 210: 20(int) Load 132(byteAddrTemp) + 211: 20(int) IAdd 210 24 212: 30(ptr) AccessChain 18(sbuf) 26 211 213: 6(int) Load 212 - 214: 19(int) Load 132(byteAddrTemp) - 215: 19(int) IAdd 214 147 + 214: 20(int) Load 132(byteAddrTemp) + 215: 20(int) IAdd 214 147 216: 30(ptr) AccessChain 18(sbuf) 26 215 217: 6(int) Load 216 218: 151(ivec4) CompositeConstruct 205 209 213 217 @@ -1301,7 +1297,7 @@ error: OpStore Pointer '14[size]'s type does not match Object '20's ty 221: 30(ptr) AccessChain 18(sbuf) 26 200 Store 221 220 222: 6(int) Load 11(pos) - 223: 19(int) ShiftRightLogical 222 24 + 223: 20(int) ShiftRightLogical 222 24 224: 30(ptr) AccessChain 18(sbuf) 26 223 225: 6(int) Load 224 226: 8(float) ConvertUToF 225 diff --git a/3rdparty/glslang/Test/baseResults/spv.150.geom.out b/3rdparty/glslang/Test/baseResults/spv.150.geom.out index 70dadf5de..f75979383 100644 --- a/3rdparty/glslang/Test/baseResults/spv.150.geom.out +++ b/3rdparty/glslang/Test/baseResults/spv.150.geom.out @@ -1,8 +1,4 @@ spv.150.geom -error: SPIRV-Tools Validation Errors -error: Capability GeometryStreams is not allowed by Vulkan 1.0 specification (or requires extension) - OpCapability GeometryStreams - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 71 diff --git a/3rdparty/glslang/Test/baseResults/spv.16bitstorage-int.frag.out b/3rdparty/glslang/Test/baseResults/spv.16bitstorage-int.frag.out index 1b2a16ba1..3f0fffd8e 100644 --- a/3rdparty/glslang/Test/baseResults/spv.16bitstorage-int.frag.out +++ b/3rdparty/glslang/Test/baseResults/spv.16bitstorage-int.frag.out @@ -1,7 +1,7 @@ spv.16bitstorage-int.frag // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 171 +// Id's are bound by 172 Capability Shader Capability StorageUniformBufferBlock16 @@ -204,7 +204,10 @@ spv.16bitstorage-int.frag 114: 20(int) Constant 7 115: 20(int) Constant 6 116: TypePointer Uniform 20(int) - 166: 39(ivec2) ConstantComposite 32 33 + 166: 6(int16_t) Constant 1 + 167: 6(int16_t) Constant 2 + 168: 7(i16vec2) ConstantComposite 166 167 + 170: 6(int16_t) Constant 3 4(main): 2 Function None 3 5: Label 69(x0): 68(ptr) Variable Function @@ -324,11 +327,9 @@ spv.16bitstorage-int.frag 164: 6(int16_t) Load 163 165: 28(ptr) AccessChain 19(b2) 21 Store 165 164 - 167: 7(i16vec2) SConvert 166 - 168: 42(ptr) AccessChain 19(b2) 32 - Store 168 167 - 169: 6(int16_t) SConvert 58 - 170: 28(ptr) AccessChain 19(b2) 21 - Store 170 169 + 169: 42(ptr) AccessChain 19(b2) 32 + Store 169 168 + 171: 28(ptr) AccessChain 19(b2) 21 + Store 171 170 Return FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.16bitstorage-uint.frag.out b/3rdparty/glslang/Test/baseResults/spv.16bitstorage-uint.frag.out index f935f2662..c07edaadf 100644 --- a/3rdparty/glslang/Test/baseResults/spv.16bitstorage-uint.frag.out +++ b/3rdparty/glslang/Test/baseResults/spv.16bitstorage-uint.frag.out @@ -205,8 +205,10 @@ spv.16bitstorage-uint.frag 115: 20(int) Constant 7 116: 20(int) Constant 6 117: TypePointer Uniform 9(int) - 167: 39(ivec2) ConstantComposite 82 10 - 170: 9(int) Constant 3 + 167: 6(int16_t) Constant 1 + 168: 6(int16_t) Constant 2 + 169: 7(i16vec2) ConstantComposite 167 168 + 171: 6(int16_t) Constant 3 4(main): 2 Function None 3 5: Label 69(x0): 68(ptr) Variable Function @@ -326,10 +328,8 @@ spv.16bitstorage-uint.frag 165: 6(int16_t) Load 164 166: 28(ptr) AccessChain 19(b2) 21 Store 166 165 - 168: 7(i16vec2) UConvert 167 - 169: 42(ptr) AccessChain 19(b2) 32 - Store 169 168 - 171: 6(int16_t) UConvert 170 + 170: 42(ptr) AccessChain 19(b2) 32 + Store 170 169 172: 28(ptr) AccessChain 19(b2) 21 Store 172 171 Return diff --git a/3rdparty/glslang/Test/baseResults/spv.16bitstorage.frag.out b/3rdparty/glslang/Test/baseResults/spv.16bitstorage.frag.out index d2a83ba97..2d5487fd5 100644 --- a/3rdparty/glslang/Test/baseResults/spv.16bitstorage.frag.out +++ b/3rdparty/glslang/Test/baseResults/spv.16bitstorage.frag.out @@ -1,7 +1,7 @@ spv.16bitstorage.frag // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 173 +// Id's are bound by 172 Capability Shader Capability StorageUniformBufferBlock16 @@ -204,9 +204,10 @@ spv.16bitstorage.frag 114: 20(int) Constant 7 115: 20(int) Constant 6 116: TypePointer Uniform 20(int) - 166: 37(float) Constant 1073741824 - 167: 40(fvec2) ConstantComposite 83 166 - 170: 37(float) Constant 1077936128 + 166:6(float16_t) Constant 15360 + 167:6(float16_t) Constant 16384 + 168: 7(f16vec2) ConstantComposite 166 167 + 170:6(float16_t) Constant 16896 4(main): 2 Function None 3 5: Label 70(x0): 69(ptr) Variable Function @@ -326,11 +327,9 @@ spv.16bitstorage.frag 164:6(float16_t) Load 163 165: 28(ptr) AccessChain 19(b2) 21 Store 165 164 - 168: 7(f16vec2) FConvert 167 169: 43(ptr) AccessChain 19(b2) 32 Store 169 168 - 171:6(float16_t) FConvert 170 - 172: 28(ptr) AccessChain 19(b2) 21 - Store 172 171 + 171: 28(ptr) AccessChain 19(b2) 21 + Store 171 170 Return FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.310.comp.out b/3rdparty/glslang/Test/baseResults/spv.310.comp.out index fd1309dbd..f4eaa2033 100644 --- a/3rdparty/glslang/Test/baseResults/spv.310.comp.out +++ b/3rdparty/glslang/Test/baseResults/spv.310.comp.out @@ -1,14 +1,14 @@ spv.310.comp // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 71 +// Id's are bound by 72 Capability Shader Capability DeviceGroup Extension "SPV_KHR_device_group" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "main" 53 64 + EntryPoint GLCompute 4 "main" 53 65 ExecutionMode 4 LocalSize 16 32 4 Source ESSL 310 SourceExtension "GL_EXT_device_group" @@ -30,7 +30,7 @@ spv.310.comp MemberName 48(outs) 1 "va" Name 50 "outnames" Name 53 "gl_LocalInvocationID" - Name 64 "gl_DeviceIndex" + Name 65 "gl_DeviceIndex" Decorate 11 ArrayStride 16 MemberDecorate 12(outb) 0 Offset 0 MemberDecorate 12(outb) 1 Offset 4 @@ -48,8 +48,8 @@ spv.310.comp Decorate 48(outs) BufferBlock Decorate 50(outnames) DescriptorSet 0 Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId - Decorate 64(gl_DeviceIndex) BuiltIn DeviceIndex - Decorate 70 BuiltIn WorkgroupSize + Decorate 65(gl_DeviceIndex) BuiltIn DeviceIndex + Decorate 71 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -89,15 +89,15 @@ spv.310.comp 52: TypePointer Input 51(ivec3) 53(gl_LocalInvocationID): 52(ptr) Variable Input 54: TypePointer Input 6(int) - 61: TypePointer Uniform 15(int) - 63: TypePointer Input 15(int) -64(gl_DeviceIndex): 63(ptr) Variable Input - 65: 6(int) Constant 1 - 66: 6(int) Constant 3400 - 67: 6(int) Constant 16 - 68: 6(int) Constant 32 - 69: 6(int) Constant 4 - 70: 51(ivec3) ConstantComposite 67 68 69 + 62: TypePointer Uniform 15(int) + 64: TypePointer Input 15(int) +65(gl_DeviceIndex): 64(ptr) Variable Input + 66: 6(int) Constant 1 + 67: 6(int) Constant 3400 + 68: 6(int) Constant 16 + 69: 6(int) Constant 32 + 70: 6(int) Constant 4 + 71: 51(ivec3) ConstantComposite 68 69 70 4(main): 2 Function None 3 5: Label ControlBarrier 7 7 8 @@ -124,10 +124,11 @@ spv.310.comp 58: 22(fvec4) CompositeConstruct 57 57 57 57 59: 29(ptr) AccessChain 50(outnames) 26 56 Store 59 58 - 60: 15(int) ArrayLength 14(outbname) 3 - 62: 61(ptr) AccessChain 50(outnames) 16 - Store 62 60 - MemoryBarrier 65 8 - MemoryBarrier 7 66 + 60: 6(int) ArrayLength 14(outbname) 3 + 61: 15(int) Bitcast 60 + 63: 62(ptr) AccessChain 50(outnames) 16 + Store 63 61 + MemoryBarrier 66 8 + MemoryBarrier 7 67 Return FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.420.geom.out b/3rdparty/glslang/Test/baseResults/spv.420.geom.out index 45f235f4b..74a4f0b31 100644 --- a/3rdparty/glslang/Test/baseResults/spv.420.geom.out +++ b/3rdparty/glslang/Test/baseResults/spv.420.geom.out @@ -1,8 +1,4 @@ spv.420.geom -error: SPIRV-Tools Validation Errors -error: Capability GeometryStreams is not allowed by Vulkan 1.0 specification (or requires extension) - OpCapability GeometryStreams - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 72 diff --git a/3rdparty/glslang/Test/baseResults/spv.8bitstorage-int.frag.out b/3rdparty/glslang/Test/baseResults/spv.8bitstorage-int.frag.out index 96cb2ae5d..a0af75ab3 100644 --- a/3rdparty/glslang/Test/baseResults/spv.8bitstorage-int.frag.out +++ b/3rdparty/glslang/Test/baseResults/spv.8bitstorage-int.frag.out @@ -1,7 +1,7 @@ spv.8bitstorage-int.frag // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 171 +// Id's are bound by 172 Capability Shader Capability CapabilityUniformAndStorageBuffer8BitAccess @@ -203,7 +203,10 @@ spv.8bitstorage-int.frag 114: 20(int) Constant 7 115: 20(int) Constant 6 116: TypePointer Uniform 20(int) - 166: 39(ivec2) ConstantComposite 32 33 + 166: 6(int8_t) Constant 1 + 167: 6(int8_t) Constant 2 + 168: 7(i8vec2) ConstantComposite 166 167 + 170: 6(int8_t) Constant 3 4(main): 2 Function None 3 5: Label 69(x0): 68(ptr) Variable Function @@ -323,11 +326,9 @@ spv.8bitstorage-int.frag 164: 6(int8_t) Load 163 165: 28(ptr) AccessChain 19(b2) 21 Store 165 164 - 167: 7(i8vec2) SConvert 166 - 168: 42(ptr) AccessChain 19(b2) 32 - Store 168 167 - 169: 6(int8_t) SConvert 58 - 170: 28(ptr) AccessChain 19(b2) 21 - Store 170 169 + 169: 42(ptr) AccessChain 19(b2) 32 + Store 169 168 + 171: 28(ptr) AccessChain 19(b2) 21 + Store 171 170 Return FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.8bitstorage-uint.frag.out b/3rdparty/glslang/Test/baseResults/spv.8bitstorage-uint.frag.out index 415bada43..12c390ac4 100644 --- a/3rdparty/glslang/Test/baseResults/spv.8bitstorage-uint.frag.out +++ b/3rdparty/glslang/Test/baseResults/spv.8bitstorage-uint.frag.out @@ -204,8 +204,10 @@ spv.8bitstorage-uint.frag 115: 20(int) Constant 7 116: 20(int) Constant 6 117: TypePointer Uniform 9(int) - 167: 39(ivec2) ConstantComposite 82 10 - 170: 9(int) Constant 3 + 167: 6(int8_t) Constant 1 + 168: 6(int8_t) Constant 2 + 169: 7(i8vec2) ConstantComposite 167 168 + 171: 6(int8_t) Constant 3 4(main): 2 Function None 3 5: Label 69(x0): 68(ptr) Variable Function @@ -325,10 +327,8 @@ spv.8bitstorage-uint.frag 165: 6(int8_t) Load 164 166: 28(ptr) AccessChain 19(b2) 21 Store 166 165 - 168: 7(i8vec2) UConvert 167 - 169: 42(ptr) AccessChain 19(b2) 32 - Store 169 168 - 171: 6(int8_t) UConvert 170 + 170: 42(ptr) AccessChain 19(b2) 32 + Store 170 169 172: 28(ptr) AccessChain 19(b2) 21 Store 172 171 Return diff --git a/3rdparty/glslang/Test/baseResults/spv.builtInXFB.vert.out b/3rdparty/glslang/Test/baseResults/spv.builtInXFB.vert.out index f175a19fa..556a698ca 100644 --- a/3rdparty/glslang/Test/baseResults/spv.builtInXFB.vert.out +++ b/3rdparty/glslang/Test/baseResults/spv.builtInXFB.vert.out @@ -1,8 +1,4 @@ spv.builtInXFB.vert -error: SPIRV-Tools Validation Errors -error: Capability TransformFeedback is not allowed by Vulkan 1.0 specification (or requires extension) - OpCapability TransformFeedback - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 21 diff --git a/3rdparty/glslang/Test/baseResults/spv.fragmentDensity-es.frag.out b/3rdparty/glslang/Test/baseResults/spv.fragmentDensity-es.frag.out new file mode 100644 index 000000000..01ac38336 --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.fragmentDensity-es.frag.out @@ -0,0 +1,45 @@ +spv.fragmentDensity-es.frag +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 18 + + Capability Shader + Capability FragmentDensityEXT + Extension "SPV_EXT_fragment_invocation_density" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 11 14 16 + ExecutionMode 4 OriginUpperLeft + Source ESSL 310 + SourceExtension "GL_EXT_fragment_invocation_density" + Name 4 "main" + Name 9 "FragSize" + Name 11 "gl_FragSizeEXT" + Name 14 "FragInvocationCount" + Name 16 "gl_FragInvocationCountEXT" + Decorate 9(FragSize) Location 0 + Decorate 11(gl_FragSizeEXT) Flat + Decorate 11(gl_FragSizeEXT) BuiltIn FragSizeEXT + Decorate 14(FragInvocationCount) Location 2 + Decorate 16(gl_FragInvocationCountEXT) Flat + Decorate 16(gl_FragInvocationCountEXT) BuiltIn FragInvocationCountEXT + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 2 + 8: TypePointer Output 7(ivec2) + 9(FragSize): 8(ptr) Variable Output + 10: TypePointer Input 7(ivec2) +11(gl_FragSizeEXT): 10(ptr) Variable Input + 13: TypePointer Output 6(int) +14(FragInvocationCount): 13(ptr) Variable Output + 15: TypePointer Input 6(int) +16(gl_FragInvocationCountEXT): 15(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 12: 7(ivec2) Load 11(gl_FragSizeEXT) + Store 9(FragSize) 12 + 17: 6(int) Load 16(gl_FragInvocationCountEXT) + Store 14(FragInvocationCount) 17 + Return + FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.fragmentDensity-neg.frag.out b/3rdparty/glslang/Test/baseResults/spv.fragmentDensity-neg.frag.out new file mode 100644 index 000000000..6b5078bdd --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.fragmentDensity-neg.frag.out @@ -0,0 +1,7 @@ +spv.fragmentDensity-neg.frag +ERROR: 0:10: 'gl_FragSizeEXT' : required extension not requested: GL_EXT_fragment_invocation_density +ERROR: 0:11: 'gl_FragInvocationCountEXT' : required extension not requested: GL_EXT_fragment_invocation_density +ERROR: 2 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/3rdparty/glslang/Test/baseResults/spv.fragmentDensity.frag.out b/3rdparty/glslang/Test/baseResults/spv.fragmentDensity.frag.out new file mode 100644 index 000000000..8bbc37cc5 --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.fragmentDensity.frag.out @@ -0,0 +1,48 @@ +spv.fragmentDensity.frag +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 21 + + Capability Shader + Capability FragmentDensityEXT + Extension "SPV_EXT_fragment_invocation_density" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 13 17 19 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_EXT_fragment_invocation_density" + Name 4 "main" + Name 9 "FragSize" + Name 13 "gl_FragSizeEXT" + Name 17 "FragInvocationCount" + Name 19 "gl_FragInvocationCountEXT" + Decorate 9(FragSize) Location 0 + Decorate 13(gl_FragSizeEXT) Flat + Decorate 13(gl_FragSizeEXT) BuiltIn FragSizeEXT + Decorate 17(FragInvocationCount) Location 2 + Decorate 19(gl_FragInvocationCountEXT) Flat + Decorate 19(gl_FragInvocationCountEXT) BuiltIn FragInvocationCountEXT + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypePointer Output 7(fvec2) + 9(FragSize): 8(ptr) Variable Output + 10: TypeInt 32 1 + 11: TypeVector 10(int) 2 + 12: TypePointer Input 11(ivec2) +13(gl_FragSizeEXT): 12(ptr) Variable Input + 16: TypePointer Output 10(int) +17(FragInvocationCount): 16(ptr) Variable Output + 18: TypePointer Input 10(int) +19(gl_FragInvocationCountEXT): 18(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 14: 11(ivec2) Load 13(gl_FragSizeEXT) + 15: 7(fvec2) ConvertSToF 14 + Store 9(FragSize) 15 + 20: 10(int) Load 19(gl_FragInvocationCountEXT) + Store 17(FragInvocationCount) 20 + Return + FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.fragmentDensity.vert.out b/3rdparty/glslang/Test/baseResults/spv.fragmentDensity.vert.out new file mode 100644 index 000000000..ff77a3ecc --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.fragmentDensity.vert.out @@ -0,0 +1,9 @@ +spv.fragmentDensity.vert +ERROR: 0:10: 'gl_FragSizeEXT' : undeclared identifier +ERROR: 0:10: 'assign' : cannot convert from ' temp float' to 'layout( location=0) smooth out highp 2-component vector of uint' +ERROR: 0:11: 'gl_FragInvocationCountEXT' : undeclared identifier +ERROR: 0:11: 'assign' : cannot convert from ' temp float' to 'layout( location=2) smooth out highp int' +ERROR: 4 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/3rdparty/glslang/Test/baseResults/spv.shadingRate.frag.out b/3rdparty/glslang/Test/baseResults/spv.shadingRate.frag.out index 2b6bd31df..11477769b 100644 --- a/3rdparty/glslang/Test/baseResults/spv.shadingRate.frag.out +++ b/3rdparty/glslang/Test/baseResults/spv.shadingRate.frag.out @@ -4,7 +4,7 @@ spv.shadingRate.frag // Id's are bound by 21 Capability Shader - Capability ShadingRateNV + Capability FragmentDensityEXT Extension "SPV_NV_shading_rate" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -19,10 +19,10 @@ spv.shadingRate.frag Name 19 "gl_InvocationsPerPixelNV" Decorate 9(FragmentSize) Location 0 Decorate 13(gl_FragmentSizeNV) Flat - Decorate 13(gl_FragmentSizeNV) BuiltIn FragmentSizeNV + Decorate 13(gl_FragmentSizeNV) BuiltIn FragSizeEXT Decorate 17(InvocationsPerPixel) Location 2 Decorate 19(gl_InvocationsPerPixelNV) Flat - Decorate 19(gl_InvocationsPerPixelNV) BuiltIn InvocationsPerPixelNV + Decorate 19(gl_InvocationsPerPixelNV) BuiltIn FragInvocationCountEXT 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/3rdparty/glslang/Test/baseResults/spv.xfb.vert.out b/3rdparty/glslang/Test/baseResults/spv.xfb.vert.out index 68633e1f5..3cd93d500 100644 --- a/3rdparty/glslang/Test/baseResults/spv.xfb.vert.out +++ b/3rdparty/glslang/Test/baseResults/spv.xfb.vert.out @@ -1,8 +1,4 @@ spv.xfb.vert -error: SPIRV-Tools Validation Errors -error: Capability TransformFeedback is not allowed by Vulkan 1.0 specification (or requires extension) - OpCapability TransformFeedback - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 16 diff --git a/3rdparty/glslang/Test/baseResults/spv.xfb2.vert.out b/3rdparty/glslang/Test/baseResults/spv.xfb2.vert.out index 6dc398721..a8551a1a7 100644 --- a/3rdparty/glslang/Test/baseResults/spv.xfb2.vert.out +++ b/3rdparty/glslang/Test/baseResults/spv.xfb2.vert.out @@ -1,8 +1,4 @@ spv.xfb2.vert -error: SPIRV-Tools Validation Errors -error: Capability TransformFeedback is not allowed by Vulkan 1.0 specification (or requires extension) - OpCapability TransformFeedback - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 35 diff --git a/3rdparty/glslang/Test/baseResults/spv.xfb3.vert.out b/3rdparty/glslang/Test/baseResults/spv.xfb3.vert.out index 1d526aa9f..0218847e3 100644 --- a/3rdparty/glslang/Test/baseResults/spv.xfb3.vert.out +++ b/3rdparty/glslang/Test/baseResults/spv.xfb3.vert.out @@ -1,8 +1,4 @@ spv.xfb3.vert -error: SPIRV-Tools Validation Errors -error: Capability TransformFeedback is not allowed by Vulkan 1.0 specification (or requires extension) - OpCapability TransformFeedback - // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 35 diff --git a/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out b/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out new file mode 100644 index 000000000..066aa3a08 --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out @@ -0,0 +1,76 @@ +spv.xfbOffsetOnBlockMembersAssignment.vert +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 33 + + Capability Shader + Capability TransformFeedback + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 10 27 31 32 + ExecutionMode 4 Xfb + Source GLSL 450 + Name 4 "main" + Name 8 "block2" + MemberName 8(block2) 0 "y1_out" + MemberName 8(block2) 1 "y2_out" + Name 10 "" + Name 25 "gl_PerVertex" + MemberName 25(gl_PerVertex) 0 "gl_Position" + MemberName 25(gl_PerVertex) 1 "gl_PointSize" + MemberName 25(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 25(gl_PerVertex) 3 "gl_CullDistance" + Name 27 "" + Name 31 "gl_VertexID" + Name 32 "gl_InstanceID" + MemberDecorate 8(block2) 0 Offset 0 + MemberDecorate 8(block2) 1 Offset 4 + Decorate 8(block2) Block + Decorate 10 Location 5 + Decorate 10 XfbBuffer 2 + Decorate 10 XfbStride 20 + MemberDecorate 25(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 25(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 25(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 25(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 25(gl_PerVertex) Block + Decorate 27 XfbBuffer 0 + Decorate 27 XfbStride 0 + Decorate 31(gl_VertexID) BuiltIn VertexId + Decorate 32(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(block2): TypeStruct 6(float) 7(fvec4) + 9: TypePointer Output 8(block2) + 10: 9(ptr) Variable Output + 11: TypeInt 32 1 + 12: 11(int) Constant 0 + 13: 6(float) Constant 1088421888 + 14: TypePointer Output 6(float) + 16: 11(int) Constant 1 + 17: 6(float) Constant 1065353216 + 18: 6(float) Constant 0 + 19: 7(fvec4) ConstantComposite 17 18 18 17 + 20: TypePointer Output 7(fvec4) + 22: TypeInt 32 0 + 23: 22(int) Constant 1 + 24: TypeArray 6(float) 23 +25(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 24 24 + 26: TypePointer Output 25(gl_PerVertex) + 27: 26(ptr) Variable Output + 28: 7(fvec4) ConstantComposite 18 18 18 18 + 30: TypePointer Input 11(int) + 31(gl_VertexID): 30(ptr) Variable Input +32(gl_InstanceID): 30(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 10 12 + Store 15 13 + 21: 20(ptr) AccessChain 10 16 + Store 21 19 + 29: 20(ptr) AccessChain 27 12 + Store 29 28 + Return + FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out b/3rdparty/glslang/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out new file mode 100644 index 000000000..ebc496299 --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out @@ -0,0 +1,88 @@ +spv.xfbOverlapOffsetCheckWithBlockAndMember.vert +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 39 + + Capability Shader + Capability TransformFeedback + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 10 33 37 38 + ExecutionMode 4 Xfb + Source GLSL 450 + Name 4 "main" + Name 8 "block2" + MemberName 8(block2) 0 "v" + MemberName 8(block2) 1 "u" + MemberName 8(block2) 2 "w" + MemberName 8(block2) 3 "x" + Name 10 "" + Name 31 "gl_PerVertex" + MemberName 31(gl_PerVertex) 0 "gl_Position" + MemberName 31(gl_PerVertex) 1 "gl_PointSize" + MemberName 31(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 31(gl_PerVertex) 3 "gl_CullDistance" + Name 33 "" + Name 37 "gl_VertexID" + Name 38 "gl_InstanceID" + MemberDecorate 8(block2) 0 Offset 12 + MemberDecorate 8(block2) 1 Offset 28 + MemberDecorate 8(block2) 2 Offset 40 + MemberDecorate 8(block2) 3 Offset 56 + Decorate 8(block2) Block + Decorate 10 Location 5 + Decorate 10 XfbBuffer 3 + Decorate 10 XfbStride 72 + MemberDecorate 31(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 31(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 31(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 31(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 31(gl_PerVertex) Block + Decorate 33 XfbBuffer 0 + Decorate 33 XfbStride 0 + Decorate 37(gl_VertexID) BuiltIn VertexId + Decorate 38(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(block2): TypeStruct 7(fvec4) 6(float) 7(fvec4) 7(fvec4) + 9: TypePointer Output 8(block2) + 10: 9(ptr) Variable Output + 11: TypeInt 32 1 + 12: 11(int) Constant 0 + 13: 6(float) Constant 1065353216 + 14: 6(float) Constant 0 + 15: 7(fvec4) ConstantComposite 13 14 13 14 + 16: TypePointer Output 7(fvec4) + 18: 11(int) Constant 1 + 19: 6(float) Constant 1084227584 + 20: TypePointer Output 6(float) + 22: 11(int) Constant 2 + 23: 7(fvec4) ConstantComposite 13 14 14 13 + 25: 11(int) Constant 3 + 26: 7(fvec4) ConstantComposite 19 14 14 14 + 28: TypeInt 32 0 + 29: 28(int) Constant 1 + 30: TypeArray 6(float) 29 +31(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 30 30 + 32: TypePointer Output 31(gl_PerVertex) + 33: 32(ptr) Variable Output + 34: 7(fvec4) ConstantComposite 14 14 14 14 + 36: TypePointer Input 11(int) + 37(gl_VertexID): 36(ptr) Variable Input +38(gl_InstanceID): 36(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 17: 16(ptr) AccessChain 10 12 + Store 17 15 + 21: 20(ptr) AccessChain 10 18 + Store 21 19 + 24: 16(ptr) AccessChain 10 22 + Store 24 23 + 27: 16(ptr) AccessChain 10 25 + Store 27 26 + 35: 16(ptr) AccessChain 33 12 + Store 35 34 + Return + FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.xfbStrideJustOnce.vert.out b/3rdparty/glslang/Test/baseResults/spv.xfbStrideJustOnce.vert.out new file mode 100644 index 000000000..9b459b503 --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.xfbStrideJustOnce.vert.out @@ -0,0 +1,74 @@ +spv.xfbStrideJustOnce.vert +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 33 + + Capability Shader + Capability TransformFeedback + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 10 27 31 32 + ExecutionMode 4 Xfb + Source GLSL 450 + Name 4 "main" + Name 8 "block" + MemberName 8(block) 0 "y1_out" + MemberName 8(block) 1 "y2_out" + Name 10 "" + Name 25 "gl_PerVertex" + MemberName 25(gl_PerVertex) 0 "gl_Position" + MemberName 25(gl_PerVertex) 1 "gl_PointSize" + MemberName 25(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 25(gl_PerVertex) 3 "gl_CullDistance" + Name 27 "" + Name 31 "gl_VertexID" + Name 32 "gl_InstanceID" + Decorate 8(block) Block + Decorate 10 Location 5 + Decorate 10 XfbBuffer 2 + Decorate 10 XfbStride 20 + MemberDecorate 25(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 25(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 25(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 25(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 25(gl_PerVertex) Block + Decorate 27 XfbBuffer 0 + Decorate 27 XfbStride 0 + Decorate 31(gl_VertexID) BuiltIn VertexId + Decorate 32(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(block): TypeStruct 6(float) 7(fvec4) + 9: TypePointer Output 8(block) + 10: 9(ptr) Variable Output + 11: TypeInt 32 1 + 12: 11(int) Constant 0 + 13: 6(float) Constant 1088421888 + 14: TypePointer Output 6(float) + 16: 11(int) Constant 1 + 17: 6(float) Constant 1065353216 + 18: 6(float) Constant 0 + 19: 7(fvec4) ConstantComposite 17 18 18 17 + 20: TypePointer Output 7(fvec4) + 22: TypeInt 32 0 + 23: 22(int) Constant 1 + 24: TypeArray 6(float) 23 +25(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 24 24 + 26: TypePointer Output 25(gl_PerVertex) + 27: 26(ptr) Variable Output + 28: 7(fvec4) ConstantComposite 18 18 18 18 + 30: TypePointer Input 11(int) + 31(gl_VertexID): 30(ptr) Variable Input +32(gl_InstanceID): 30(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 10 12 + Store 15 13 + 21: 20(ptr) AccessChain 10 16 + Store 21 19 + 29: 20(ptr) AccessChain 27 12 + Store 29 28 + Return + FunctionEnd diff --git a/3rdparty/glslang/Test/constantUnaryConversion.comp b/3rdparty/glslang/Test/constantUnaryConversion.comp new file mode 100644 index 000000000..467b6f6c2 --- /dev/null +++ b/3rdparty/glslang/Test/constantUnaryConversion.comp @@ -0,0 +1,48 @@ +#version 450 + +#extension GL_KHX_shader_explicit_arithmetic_types : require + +const bool bool_init = true; +const int8_t int8_t_init = int8_t(-1); +const int16_t int16_t_init = int16_t(-2); +const int32_t int32_t_init = int32_t(-3); +const int64_t int64_t_init = int64_t(-4); +const uint8_t uint8_t_init = uint8_t(1); +const uint16_t uint16_t_init = uint16_t(2); +const uint32_t uint32_t_init = uint32_t(3); +const uint64_t uint64_t_init = uint64_t(4); +const float16_t float16_t_init = float16_t(42.0); +const float32_t float32_t_init = float32_t(13.0); +const float64_t float64_t_init = float64_t(-4.0); + +#define TYPE_TO_TYPE(x, y) \ + const x y##_to_##x = x(y##_init) + +#define TYPE_TO(x) \ + TYPE_TO_TYPE(x, bool); \ + TYPE_TO_TYPE(x, int8_t); \ + TYPE_TO_TYPE(x, int16_t); \ + TYPE_TO_TYPE(x, int32_t); \ + TYPE_TO_TYPE(x, int64_t); \ + TYPE_TO_TYPE(x, uint8_t); \ + TYPE_TO_TYPE(x, uint16_t); \ + TYPE_TO_TYPE(x, uint32_t); \ + TYPE_TO_TYPE(x, uint64_t); \ + TYPE_TO_TYPE(x, float16_t); \ + TYPE_TO_TYPE(x, float32_t); \ + TYPE_TO_TYPE(x, float64_t) + +TYPE_TO(bool); +TYPE_TO(int8_t); +TYPE_TO(int16_t); +TYPE_TO(int32_t); +TYPE_TO(int64_t); +TYPE_TO(uint8_t); +TYPE_TO(uint16_t); +TYPE_TO(uint32_t); +TYPE_TO(uint64_t); +TYPE_TO(float16_t); +TYPE_TO(float32_t); +TYPE_TO(float64_t); + +void main() {} diff --git a/3rdparty/glslang/Test/spv.fragmentDensity-es.frag b/3rdparty/glslang/Test/spv.fragmentDensity-es.frag new file mode 100644 index 000000000..35fb96e74 --- /dev/null +++ b/3rdparty/glslang/Test/spv.fragmentDensity-es.frag @@ -0,0 +1,11 @@ +#version 310 es + +#extension GL_EXT_fragment_invocation_density : require + +layout (location = 0) out highp ivec2 FragSize; +layout (location = 2) out highp int FragInvocationCount; + +void main () { + FragSize = gl_FragSizeEXT; + FragInvocationCount = gl_FragInvocationCountEXT; +} diff --git a/3rdparty/glslang/Test/spv.fragmentDensity-neg.frag b/3rdparty/glslang/Test/spv.fragmentDensity-neg.frag new file mode 100644 index 000000000..68e736cd5 --- /dev/null +++ b/3rdparty/glslang/Test/spv.fragmentDensity-neg.frag @@ -0,0 +1,12 @@ +#version 450 + +//make sure the builtins don't exist if the extension isn't enabled. +//#extension GL_EXT_fragment_invocation_density : require + +layout (location = 0) out vec2 FragSize; +layout (location = 2) out int FragInvocationCount; + +void main () { + FragSize = gl_FragSizeEXT; + FragInvocationCount = gl_FragInvocationCountEXT; +} diff --git a/3rdparty/glslang/Test/spv.fragmentDensity.frag b/3rdparty/glslang/Test/spv.fragmentDensity.frag new file mode 100644 index 000000000..9b37ba4ca --- /dev/null +++ b/3rdparty/glslang/Test/spv.fragmentDensity.frag @@ -0,0 +1,11 @@ +#version 450 + +#extension GL_EXT_fragment_invocation_density : require + +layout (location = 0) out vec2 FragSize; +layout (location = 2) out int FragInvocationCount; + +void main () { + FragSize = gl_FragSizeEXT; + FragInvocationCount = gl_FragInvocationCountEXT; +} diff --git a/3rdparty/glslang/Test/spv.fragmentDensity.vert b/3rdparty/glslang/Test/spv.fragmentDensity.vert new file mode 100644 index 000000000..eaef72d7a --- /dev/null +++ b/3rdparty/glslang/Test/spv.fragmentDensity.vert @@ -0,0 +1,12 @@ +#version 450 + +// try using a fragment-only extension in a vertex shader +#extension GL_EXT_fragment_invocation_density : require + +layout (location = 0) out uvec2 FragSize; +layout (location = 2) out int FragInvocationCount; + +void main () { + FragSize = gl_FragSizeEXT; + FragInvocationCount = gl_FragInvocationCountEXT; +} diff --git a/3rdparty/glslang/Test/spv.xfbOffsetOnBlockMembersAssignment.vert b/3rdparty/glslang/Test/spv.xfbOffsetOnBlockMembersAssignment.vert new file mode 100644 index 000000000..40943f77a --- /dev/null +++ b/3rdparty/glslang/Test/spv.xfbOffsetOnBlockMembersAssignment.vert @@ -0,0 +1,13 @@ +#version 450 + +layout(xfb_buffer=2) out; +layout(location=5, xfb_offset=0) out block2 { + float y1_out; + vec4 y2_out; +}; + +void main() { + y1_out = 7.0; + y2_out = vec4(1.0, 0.0, 0.0, 1.0); + gl_Position = vec4(0.0); +} diff --git a/3rdparty/glslang/Test/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert b/3rdparty/glslang/Test/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert new file mode 100644 index 000000000..3f493dc11 --- /dev/null +++ b/3rdparty/glslang/Test/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert @@ -0,0 +1,19 @@ +#version 450 + +/* block definition from GLSL spec 4.60, section 4.4.2, Output Layout Qualifiers */ + +layout(location=5, xfb_buffer = 3, xfb_offset = 12) out block2 { + vec4 v; // v will be written to byte offsets 12 through 27 of buffer + float u; // u will be written to offset 28 + layout(xfb_offset = 40) vec4 w; + vec4 x; // x will be written to offset 56, the next available offset +}; + +void main() { + v = vec4(1.0, 0.0, 1.0, 0.0); + u = 5.0; + w = vec4(1.0, 0.0, 0.0, 1.0); + x = vec4(5.0, 0.0, 0.0, 0.0); + + gl_Position = vec4(0.0); +} diff --git a/3rdparty/glslang/Test/spv.xfbStrideJustOnce.vert b/3rdparty/glslang/Test/spv.xfbStrideJustOnce.vert new file mode 100644 index 000000000..2798c6a8e --- /dev/null +++ b/3rdparty/glslang/Test/spv.xfbStrideJustOnce.vert @@ -0,0 +1,14 @@ +#version 450 + +layout(xfb_buffer=2) out; + +layout(location=5, xfb_stride=20) out block { + float y1_out; + vec4 y2_out; +}; + +void main() { + y1_out = 7.0; + y2_out = vec4(1.0, 0.0, 0.0, 1.0); + gl_Position = vec4(0.0); +} diff --git a/3rdparty/glslang/glslang/Include/BaseTypes.h b/3rdparty/glslang/glslang/Include/BaseTypes.h index 4a7c05686..fabd6135d 100644 --- a/3rdparty/glslang/glslang/Include/BaseTypes.h +++ b/3rdparty/glslang/glslang/Include/BaseTypes.h @@ -232,6 +232,9 @@ enum TBuiltInVariable { EbvViewIndex, EbvDeviceIndex, + EbvFragSizeEXT, + EbvFragInvocationCountEXT, + #ifdef NV_EXTENSIONS EbvViewportMaskNV, EbvSecondaryPositionNV, @@ -404,6 +407,9 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvViewIndex: return "ViewIndex"; case EbvDeviceIndex: return "DeviceIndex"; + case EbvFragSizeEXT: return "FragSizeEXT"; + case EbvFragInvocationCountEXT: return "FragInvocationCountEXT"; + #ifdef NV_EXTENSIONS case EbvViewportMaskNV: return "ViewportMaskNV"; case EbvSecondaryPositionNV: return "SecondaryPositionNV"; diff --git a/3rdparty/glslang/glslang/Include/revision.h b/3rdparty/glslang/glslang/Include/revision.h index a1acb2511..e0c42c83a 100644 --- a/3rdparty/glslang/glslang/Include/revision.h +++ b/3rdparty/glslang/glslang/Include/revision.h @@ -1,3 +1,3 @@ // This header is generated by the make-revision script. -#define GLSLANG_PATCH_LEVEL 2992 +#define GLSLANG_PATCH_LEVEL 3009 diff --git a/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp b/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp old mode 100644 new mode 100755 index b33af84d4..8d4987b75 --- a/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp @@ -670,6 +670,279 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) break; } + case EOpConvInt8ToBool: + newConstArray[i].setBConst(unionArray[i].getI8Const() != 0); break; + case EOpConvUint8ToBool: + newConstArray[i].setBConst(unionArray[i].getU8Const() != 0); break; + case EOpConvInt16ToBool: + newConstArray[i].setBConst(unionArray[i].getI16Const() != 0); break; + case EOpConvUint16ToBool: + newConstArray[i].setBConst(unionArray[i].getU16Const() != 0); break; + case EOpConvIntToBool: + newConstArray[i].setBConst(unionArray[i].getIConst() != 0); break; + case EOpConvUintToBool: + newConstArray[i].setBConst(unionArray[i].getUConst() != 0); break; + case EOpConvInt64ToBool: + newConstArray[i].setBConst(unionArray[i].getI64Const() != 0); break; + case EOpConvUint64ToBool: + newConstArray[i].setBConst(unionArray[i].getI64Const() != 0); break; + case EOpConvFloat16ToBool: + newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break; + case EOpConvFloatToBool: + newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break; + case EOpConvDoubleToBool: + newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break; + + case EOpConvBoolToInt8: + newConstArray[i].setI8Const(unionArray[i].getBConst()); break; + case EOpConvBoolToUint8: + newConstArray[i].setU8Const(unionArray[i].getBConst()); break; + case EOpConvBoolToInt16: + newConstArray[i].setI16Const(unionArray[i].getBConst()); break; + case EOpConvBoolToUint16: + newConstArray[i].setU16Const(unionArray[i].getBConst()); break; + case EOpConvBoolToInt: + newConstArray[i].setIConst(unionArray[i].getBConst()); break; + case EOpConvBoolToUint: + newConstArray[i].setUConst(unionArray[i].getBConst()); break; + case EOpConvBoolToInt64: + newConstArray[i].setI64Const(unionArray[i].getBConst()); break; + case EOpConvBoolToUint64: + newConstArray[i].setU64Const(unionArray[i].getBConst()); break; + case EOpConvBoolToFloat16: + newConstArray[i].setDConst(unionArray[i].getBConst()); break; + case EOpConvBoolToFloat: + newConstArray[i].setDConst(unionArray[i].getBConst()); break; + case EOpConvBoolToDouble: + newConstArray[i].setDConst(unionArray[i].getBConst()); break; + + case EOpConvInt8ToInt16: + newConstArray[i].setI16Const(unionArray[i].getI8Const()); break; + case EOpConvInt8ToInt: + newConstArray[i].setIConst(unionArray[i].getI8Const()); break; + case EOpConvInt8ToInt64: + newConstArray[i].setI64Const(unionArray[i].getI8Const()); break; + case EOpConvInt8ToUint8: + newConstArray[i].setU8Const(unionArray[i].getI8Const()); break; + case EOpConvInt8ToUint16: + newConstArray[i].setU16Const(unionArray[i].getI8Const()); break; + case EOpConvInt8ToUint: + newConstArray[i].setUConst(unionArray[i].getI8Const()); break; + case EOpConvInt8ToUint64: + newConstArray[i].setU64Const(unionArray[i].getI8Const()); break; + case EOpConvUint8ToInt8: + newConstArray[i].setI8Const(unionArray[i].getU8Const()); break; + case EOpConvUint8ToInt16: + newConstArray[i].setI16Const(unionArray[i].getU8Const()); break; + case EOpConvUint8ToInt: + newConstArray[i].setIConst(unionArray[i].getU8Const()); break; + case EOpConvUint8ToInt64: + newConstArray[i].setI64Const(unionArray[i].getU8Const()); break; + case EOpConvUint8ToUint16: + newConstArray[i].setU16Const(unionArray[i].getU8Const()); break; + case EOpConvUint8ToUint: + newConstArray[i].setUConst(unionArray[i].getU8Const()); break; + case EOpConvUint8ToUint64: + newConstArray[i].setU64Const(unionArray[i].getU8Const()); break; + case EOpConvInt8ToFloat16: + newConstArray[i].setDConst(unionArray[i].getI8Const()); break; + case EOpConvInt8ToFloat: + newConstArray[i].setDConst(unionArray[i].getI8Const()); break; + case EOpConvInt8ToDouble: + newConstArray[i].setDConst(unionArray[i].getI8Const()); break; + case EOpConvUint8ToFloat16: + newConstArray[i].setDConst(unionArray[i].getU8Const()); break; + case EOpConvUint8ToFloat: + newConstArray[i].setDConst(unionArray[i].getU8Const()); break; + case EOpConvUint8ToDouble: + newConstArray[i].setDConst(unionArray[i].getU8Const()); break; + + case EOpConvInt16ToInt8: + newConstArray[i].setI8Const(static_cast(unionArray[i].getI16Const())); break; + case EOpConvInt16ToInt: + newConstArray[i].setIConst(unionArray[i].getI16Const()); break; + case EOpConvInt16ToInt64: + newConstArray[i].setI64Const(unionArray[i].getI16Const()); break; + case EOpConvInt16ToUint8: + newConstArray[i].setU8Const(static_cast(unionArray[i].getI16Const())); break; + case EOpConvInt16ToUint16: + newConstArray[i].setU16Const(unionArray[i].getI16Const()); break; + case EOpConvInt16ToUint: + newConstArray[i].setUConst(unionArray[i].getI16Const()); break; + case EOpConvInt16ToUint64: + newConstArray[i].setU64Const(unionArray[i].getI16Const()); break; + case EOpConvUint16ToInt8: + newConstArray[i].setI8Const(static_cast(unionArray[i].getU16Const())); break; + case EOpConvUint16ToInt16: + newConstArray[i].setI16Const(unionArray[i].getU16Const()); break; + case EOpConvUint16ToInt: + newConstArray[i].setIConst(unionArray[i].getU16Const()); break; + case EOpConvUint16ToInt64: + newConstArray[i].setI64Const(unionArray[i].getU16Const()); break; + case EOpConvUint16ToUint8: + newConstArray[i].setU8Const(static_cast(unionArray[i].getU16Const())); break; + + case EOpConvUint16ToUint: + newConstArray[i].setUConst(unionArray[i].getU16Const()); break; + case EOpConvUint16ToUint64: + newConstArray[i].setU64Const(unionArray[i].getU16Const()); break; + case EOpConvInt16ToFloat16: + newConstArray[i].setDConst(unionArray[i].getI16Const()); break; + case EOpConvInt16ToFloat: + newConstArray[i].setDConst(unionArray[i].getI16Const()); break; + case EOpConvInt16ToDouble: + newConstArray[i].setDConst(unionArray[i].getI16Const()); break; + case EOpConvUint16ToFloat16: + newConstArray[i].setDConst(unionArray[i].getU16Const()); break; + case EOpConvUint16ToFloat: + newConstArray[i].setDConst(unionArray[i].getU16Const()); break; + case EOpConvUint16ToDouble: + newConstArray[i].setDConst(unionArray[i].getU16Const()); break; + + case EOpConvIntToInt8: + newConstArray[i].setI8Const(unionArray[i].getIConst()); break; + case EOpConvIntToInt16: + newConstArray[i].setI16Const(unionArray[i].getIConst()); break; + case EOpConvIntToInt64: + newConstArray[i].setI64Const(unionArray[i].getIConst()); break; + case EOpConvIntToUint8: + newConstArray[i].setU8Const(unionArray[i].getIConst()); break; + case EOpConvIntToUint16: + newConstArray[i].setU16Const(unionArray[i].getIConst()); break; + case EOpConvIntToUint: + newConstArray[i].setUConst(unionArray[i].getIConst()); break; + case EOpConvIntToUint64: + newConstArray[i].setU64Const(unionArray[i].getIConst()); break; + + case EOpConvUintToInt8: + newConstArray[i].setI8Const(unionArray[i].getUConst()); break; + case EOpConvUintToInt16: + newConstArray[i].setI16Const(unionArray[i].getUConst()); break; + case EOpConvUintToInt: + newConstArray[i].setIConst(unionArray[i].getUConst()); break; + case EOpConvUintToInt64: + newConstArray[i].setI64Const(unionArray[i].getUConst()); break; + case EOpConvUintToUint8: + newConstArray[i].setU8Const(unionArray[i].getUConst()); break; + case EOpConvUintToUint16: + newConstArray[i].setU16Const(unionArray[i].getUConst()); break; + case EOpConvUintToUint64: + newConstArray[i].setU64Const(unionArray[i].getUConst()); break; + case EOpConvIntToFloat16: + newConstArray[i].setDConst(unionArray[i].getIConst()); break; + case EOpConvIntToFloat: + newConstArray[i].setDConst(unionArray[i].getIConst()); break; + case EOpConvIntToDouble: + newConstArray[i].setDConst(unionArray[i].getIConst()); break; + case EOpConvUintToFloat16: + newConstArray[i].setDConst(unionArray[i].getUConst()); break; + case EOpConvUintToFloat: + newConstArray[i].setDConst(unionArray[i].getUConst()); break; + case EOpConvUintToDouble: + newConstArray[i].setDConst(unionArray[i].getUConst()); break; + case EOpConvInt64ToInt8: + newConstArray[i].setI8Const(static_cast(unionArray[i].getI64Const())); break; + case EOpConvInt64ToInt16: + newConstArray[i].setI16Const(static_cast(unionArray[i].getI64Const())); break; + case EOpConvInt64ToInt: + newConstArray[i].setIConst(static_cast(unionArray[i].getI64Const())); break; + case EOpConvInt64ToUint8: + newConstArray[i].setU8Const(static_cast(unionArray[i].getI64Const())); break; + case EOpConvInt64ToUint16: + newConstArray[i].setU16Const(static_cast(unionArray[i].getI64Const())); break; + case EOpConvInt64ToUint: + newConstArray[i].setUConst(static_cast(unionArray[i].getI64Const())); break; + case EOpConvInt64ToUint64: + newConstArray[i].setU64Const(unionArray[i].getI64Const()); break; + case EOpConvUint64ToInt8: + newConstArray[i].setI8Const(static_cast(unionArray[i].getU64Const())); break; + case EOpConvUint64ToInt16: + newConstArray[i].setI16Const(static_cast(unionArray[i].getU64Const())); break; + case EOpConvUint64ToInt: + newConstArray[i].setIConst(static_cast(unionArray[i].getU64Const())); break; + case EOpConvUint64ToInt64: + newConstArray[i].setI64Const(unionArray[i].getU64Const()); break; + case EOpConvUint64ToUint8: + newConstArray[i].setU8Const(static_cast(unionArray[i].getU64Const())); break; + case EOpConvUint64ToUint16: + newConstArray[i].setU16Const(static_cast(unionArray[i].getU64Const())); break; + case EOpConvUint64ToUint: + newConstArray[i].setUConst(static_cast(unionArray[i].getU64Const())); break; + case EOpConvInt64ToFloat16: + newConstArray[i].setDConst(static_cast(unionArray[i].getI64Const())); break; + case EOpConvInt64ToFloat: + newConstArray[i].setDConst(static_cast(unionArray[i].getI64Const())); break; + case EOpConvInt64ToDouble: + newConstArray[i].setDConst(static_cast(unionArray[i].getI64Const())); break; + case EOpConvUint64ToFloat16: + newConstArray[i].setDConst(static_cast(unionArray[i].getU64Const())); break; + case EOpConvUint64ToFloat: + newConstArray[i].setDConst(static_cast(unionArray[i].getU64Const())); break; + case EOpConvUint64ToDouble: + newConstArray[i].setDConst(static_cast(unionArray[i].getU64Const())); break; + case EOpConvFloat16ToInt8: + newConstArray[i].setI8Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloat16ToInt16: + newConstArray[i].setI16Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloat16ToInt: + newConstArray[i].setIConst(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloat16ToInt64: + newConstArray[i].setI64Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloat16ToUint8: + newConstArray[i].setU8Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloat16ToUint16: + newConstArray[i].setU16Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloat16ToUint: + newConstArray[i].setUConst(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloat16ToUint64: + newConstArray[i].setU64Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloat16ToFloat: + newConstArray[i].setDConst(unionArray[i].getDConst()); break; + case EOpConvFloat16ToDouble: + newConstArray[i].setDConst(unionArray[i].getDConst()); break; + case EOpConvFloatToInt8: + newConstArray[i].setI8Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloatToInt16: + newConstArray[i].setI16Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloatToInt: + newConstArray[i].setIConst(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloatToInt64: + newConstArray[i].setI64Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloatToUint8: + newConstArray[i].setU8Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloatToUint16: + newConstArray[i].setU16Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloatToUint: + newConstArray[i].setUConst(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloatToUint64: + newConstArray[i].setU64Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvFloatToFloat16: + newConstArray[i].setDConst(unionArray[i].getDConst()); break; + case EOpConvFloatToDouble: + newConstArray[i].setDConst(unionArray[i].getDConst()); break; + case EOpConvDoubleToInt8: + newConstArray[i].setI8Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvDoubleToInt16: + newConstArray[i].setI16Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvDoubleToInt: + newConstArray[i].setIConst(static_cast(unionArray[i].getDConst())); break; + case EOpConvDoubleToInt64: + newConstArray[i].setI64Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvDoubleToUint8: + newConstArray[i].setU8Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvDoubleToUint16: + newConstArray[i].setU16Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvDoubleToUint: + newConstArray[i].setUConst(static_cast(unionArray[i].getDConst())); break; + case EOpConvDoubleToUint64: + newConstArray[i].setU64Const(static_cast(unionArray[i].getDConst())); break; + case EOpConvDoubleToFloat16: + newConstArray[i].setDConst(unionArray[i].getDConst()); break; + case EOpConvDoubleToFloat: + newConstArray[i].setDConst(unionArray[i].getDConst()); break; + + + // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out case EOpSinh: diff --git a/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp b/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp index a17ea1ae5..7118d065c 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp @@ -5939,6 +5939,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "bool gl_HelperInvocation;" // needs qualifier fixed later ); + if (version >= 450) + stageBuiltins[EShLangFragment].append( // GL_EXT_fragment_invocation_density + "flat in ivec2 gl_FragSizeEXT;" + "flat in int gl_FragInvocationCountEXT;" + ); + #ifdef AMD_EXTENSIONS if (version >= 450) stageBuiltins[EShLangFragment].append( @@ -5959,9 +5965,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV ); if (version >= 450) stageBuiltins[EShLangFragment].append( - "flat in ivec2 gl_FragmentSizeNV;" + "flat in ivec2 gl_FragmentSizeNV;" // GL_NV_shading_rate_image "flat in int gl_InvocationsPerPixelNV;" - "in vec3 gl_BaryCoordNV;" + "in vec3 gl_BaryCoordNV;" // GL_NV_fragment_shader_barycentric "in vec3 gl_BaryCoordNoPerspNV;" ); @@ -6006,13 +6012,19 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangFragment].append( "highp float gl_FragDepthEXT;" // GL_EXT_frag_depth ); + + if (version >= 310) + stageBuiltins[EShLangFragment].append( // GL_EXT_fragment_invocation_density + "flat in ivec2 gl_FragSizeEXT;" + "flat in int gl_FragInvocationCountEXT;" + ); #ifdef NV_EXTENSIONS if (version >= 320) - stageBuiltins[EShLangFragment].append( + stageBuiltins[EShLangFragment].append( // GL_NV_shading_rate_image "flat in ivec2 gl_FragmentSizeNV;" "flat in int gl_InvocationsPerPixelNV;" ); - if (version >= 320) + if (version >= 320) stageBuiltins[EShLangFragment].append( "in vec3 gl_BaryCoordNV;" "in vec3 gl_BaryCoordNoPerspNV;" @@ -8342,6 +8354,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion } #endif + if ((profile != EEsProfile && version >= 450) || + (profile == EEsProfile && version >= 310)) { + symbolTable.setVariableExtensions("gl_FragSizeEXT", 1, &E_GL_EXT_fragment_invocation_density); + symbolTable.setVariableExtensions("gl_FragInvocationCountEXT", 1, &E_GL_EXT_fragment_invocation_density); + BuiltInVariable("gl_FragSizeEXT", EbvFragSizeEXT, symbolTable); + BuiltInVariable("gl_FragInvocationCountEXT", EbvFragInvocationCountEXT, symbolTable); + } + symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth); if (profile == EEsProfile && version < 320) { diff --git a/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp b/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp index 6355f300c..46d481283 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp @@ -489,7 +489,7 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const // This is 'mechanism' here, it does any conversion told. // It is about basic type, not about shape. // The policy comes from the shader or the calling code. -TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped* node) const +TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped* node) const { // // Add a new newNode for the conversion. @@ -712,7 +712,11 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped TType newType(convertTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows()); newNode = addUnaryNode(newOp, node, node->getLoc(), newType); - // TODO: it seems that some unary folding operations should occur here, but are not + if (node->getAsConstantUnion()) { + TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType); + if (folded) + return folded; + } // Propagate specialization-constant-ness, if allowed if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode)) @@ -1021,7 +1025,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt // // Add a new newNode for the conversion. // - TIntermUnary* newNode = createConversion(promoteTo, node); + TIntermTyped* newNode = createConversion(promoteTo, node); return newNode; } diff --git a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp index 5d1ff9e8e..67a861f5b 100755 --- a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp @@ -6873,6 +6873,16 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con layoutMemberLocationArrayCheck(loc, memberWithLocation, arraySizes); + // Ensure that the block has an XfbBuffer assigned. This is needed + // because if the block has a XfbOffset assigned, then it is + // assumed that it has implicitly assigned the current global + // XfbBuffer, and because it's members need to be assigned a + // XfbOffset if they lack it. + if (currentBlockQualifier.storage == EvqVaryingOut && globalOutputDefaults.hasXfbBuffer()) { + if (!currentBlockQualifier.hasXfbBuffer() && currentBlockQualifier.hasXfbOffset()) + currentBlockQualifier.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer; + } + // Process the members fixBlockLocations(loc, currentBlockQualifier, typeList, memberWithLocation, memberWithoutLocation); fixXfbOffsets(currentBlockQualifier, typeList); diff --git a/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp b/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp index 89c033370..16265a30d 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp @@ -205,6 +205,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_nonuniform_qualifier] = EBhDisable; extensionBehavior[E_GL_EXT_samplerless_texture_functions] = EBhDisable; extensionBehavior[E_GL_EXT_scalar_block_layout] = EBhDisable; + extensionBehavior[E_GL_EXT_fragment_invocation_density] = EBhDisable; extensionBehavior[E_GL_EXT_shader_16bit_storage] = EBhDisable; extensionBehavior[E_GL_EXT_shader_8bit_storage] = EBhDisable; @@ -380,6 +381,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_shader_8bit_storage 1\n" "#define GL_EXT_samplerless_texture_functions 1\n" "#define GL_EXT_scalar_block_layout 1\n" + "#define GL_EXT_fragment_invocation_density 1\n" // GL_KHR_shader_subgroup "#define GL_KHR_shader_subgroup_basic 1\n" diff --git a/3rdparty/glslang/glslang/MachineIndependent/Versions.h b/3rdparty/glslang/glslang/MachineIndependent/Versions.h index df10f0f4a..6b513b43e 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Versions.h +++ b/3rdparty/glslang/glslang/MachineIndependent/Versions.h @@ -167,6 +167,7 @@ const char* const E_GL_EXT_control_flow_attributes = "GL_EXT_control_fl const char* const E_GL_EXT_nonuniform_qualifier = "GL_EXT_nonuniform_qualifier"; const char* const E_GL_EXT_samplerless_texture_functions = "GL_EXT_samplerless_texture_functions"; const char* const E_GL_EXT_scalar_block_layout = "GL_EXT_scalar_block_layout"; +const char* const E_GL_EXT_fragment_invocation_density = "GL_EXT_fragment_invocation_density"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h b/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h index 762b31085..ff28c0e35 100755 --- a/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h +++ b/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h @@ -732,7 +732,7 @@ protected: bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&); void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root); bool isConversionAllowed(TOperator op, TIntermTyped* node) const; - TIntermUnary* createConversion(TBasicType convertTo, TIntermTyped* node) const; + TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const; std::tuple getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const; bool extensionRequested(const char *extension) const {return requestedExtensions.find(extension) != requestedExtensions.end();} static const char* getResourceName(TResourceType); diff --git a/3rdparty/glslang/gtests/AST.FromFile.cpp b/3rdparty/glslang/gtests/AST.FromFile.cpp index b89fc5156..00bb4333f 100644 --- a/3rdparty/glslang/gtests/AST.FromFile.cpp +++ b/3rdparty/glslang/gtests/AST.FromFile.cpp @@ -231,6 +231,7 @@ INSTANTIATE_TEST_CASE_P( "precise_struct_block.vert", "maxClipDistances.vert", "findFunction.frag", + "constantUnaryConversion.comp" })), FileNameAsCustomTestSuffix ); diff --git a/3rdparty/glslang/gtests/Spv.FromFile.cpp b/3rdparty/glslang/gtests/Spv.FromFile.cpp index f686afdf3..1e17736fc 100755 --- a/3rdparty/glslang/gtests/Spv.FromFile.cpp +++ b/3rdparty/glslang/gtests/Spv.FromFile.cpp @@ -271,6 +271,10 @@ INSTANTIATE_TEST_CASE_P( "spv.flowControl.frag", "spv.forLoop.frag", "spv.forwardFun.frag", + "spv.fragmentDensity.frag", + "spv.fragmentDensity.vert", + "spv.fragmentDensity-es.frag", + "spv.fragmentDensity-neg.frag", "spv.fullyCovered.frag", "spv.functionCall.frag", "spv.functionNestedOpaque.vert", @@ -443,7 +447,10 @@ INSTANTIATE_TEST_CASE_P( "spv.rankShift.comp", "spv.specConst.vert", "spv.OVR_multiview.vert", + "spv.xfbOffsetOnBlockMembersAssignment.vert", "spv.xfbOffsetOnStructMembersAssignment.vert", + "spv.xfbOverlapOffsetCheckWithBlockAndMember.vert", + "spv.xfbStrideJustOnce.vert", })), FileNameAsCustomTestSuffix ); diff --git a/3rdparty/glslang/known_good.json b/3rdparty/glslang/known_good.json index d98550791..837255d5c 100755 --- a/3rdparty/glslang/known_good.json +++ b/3rdparty/glslang/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "8e9be303b00ba352ee25dbcd352769641637a853" + "commit" : "d543f7dfed9ba02910996121375e57fff92c3c93" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "a2c529b5dda18838ab4b52f816acfebd774eaab3" + "commit" : "282879ca34563020dbe73fd8f7d45bed6755626a" } ] } diff --git a/3rdparty/glslang/ndk_test/Android.mk b/3rdparty/glslang/ndk_test/Android.mk new file mode 100644 index 000000000..bcf82dd2e --- /dev/null +++ b/3rdparty/glslang/ndk_test/Android.mk @@ -0,0 +1,12 @@ +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_CPP_EXTENSION := .cc .cpp .cxx +LOCAL_SRC_FILES:=test.cpp +LOCAL_MODULE:=glslang_ndk_test +LOCAL_LDLIBS:=-landroid +LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti -Werror +LOCAL_STATIC_LIBRARIES:=glslang SPIRV HLSL +include $(BUILD_SHARED_LIBRARY) + +include $(LOCAL_PATH)/../Android.mk diff --git a/3rdparty/glslang/ndk_test/jni/Application.mk b/3rdparty/glslang/ndk_test/jni/Application.mk new file mode 100644 index 000000000..d7ccd349a --- /dev/null +++ b/3rdparty/glslang/ndk_test/jni/Application.mk @@ -0,0 +1,5 @@ +APP_ABI := all +APP_BUILD_SCRIPT := Android.mk +APP_STL := gnustl_static +APP_PLATFORM := android-9 +NDK_TOOLCHAIN_VERSION := 4.9 diff --git a/3rdparty/glslang/ndk_test/test.cpp b/3rdparty/glslang/ndk_test/test.cpp new file mode 100644 index 000000000..dec53d01f --- /dev/null +++ b/3rdparty/glslang/ndk_test/test.cpp @@ -0,0 +1,19 @@ +// Copyright 2018 Google LLC. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "SPIRV/GlslangToSpv.h" + +void android_main(struct android_app* state) { + int version = glslang::GetSpirvGeneratorVersion(); +}