diff --git a/3rdparty/glslang/SPIRV/GLSL.ext.NV.h b/3rdparty/glslang/SPIRV/GLSL.ext.NV.h index 89f0a5c03..e93c9f7e1 100644 --- a/3rdparty/glslang/SPIRV/GLSL.ext.NV.h +++ b/3rdparty/glslang/SPIRV/GLSL.ext.NV.h @@ -1,5 +1,5 @@ /* -** Copyright (c) 2014-2016 The Khronos Group Inc. +** Copyright (c) 2014-2017 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a copy ** of this software and/or associated documentation files (the "Materials"), @@ -33,7 +33,7 @@ enum Op; enum Capability; static const int GLSLextNVVersion = 100; -static const int GLSLextNVRevision = 4; +static const int GLSLextNVRevision = 5; //SPV_NV_sample_mask_override_coverage const char* const E_SPV_NV_sample_mask_override_coverage = "SPV_NV_sample_mask_override_coverage"; @@ -71,4 +71,13 @@ static const BuiltIn BuiltInSecondaryViewportMaskNV = static_cast(5258) static const Capability CapabilityShaderStereoViewNV = static_cast(5259); + +//SPV_NVX_multiview_per_view_attributes +const char* const E_SPV_NVX_multiview_per_view_attributes = "SPV_NVX_multiview_per_view_attributes"; + +static const BuiltIn BuiltInPositionPerViewNV = static_cast(5260); +static const BuiltIn BuiltInViewportMaskPerViewNV = static_cast(5261); + +static const Capability CapabilityPerViewAttributesNV = static_cast(5262); + #endif // #ifndef GLSLextNV_H \ No newline at end of file diff --git a/3rdparty/glslang/SPIRV/GlslangToSpv.cpp b/3rdparty/glslang/SPIRV/GlslangToSpv.cpp index 02609d01e..5b1240cef 100755 --- a/3rdparty/glslang/SPIRV/GlslangToSpv.cpp +++ b/3rdparty/glslang/SPIRV/GlslangToSpv.cpp @@ -642,6 +642,14 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); builder.addCapability(spv::CapabilityShaderStereoViewNV); return spv::BuiltInSecondaryViewportMaskNV; + case glslang::EbvPositionPerViewNV: + builder.addExtension(spv::E_SPV_NVX_multiview_per_view_attributes); + builder.addCapability(spv::CapabilityPerViewAttributesNV); + return spv::BuiltInPositionPerViewNV; + case glslang::EbvViewportMaskPerViewNV: + builder.addExtension(spv::E_SPV_NVX_multiview_per_view_attributes); + builder.addCapability(spv::CapabilityPerViewAttributesNV); + return spv::BuiltInViewportMaskPerViewNV; #endif default: return spv::BuiltInMax; } @@ -2384,6 +2392,11 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); } } + if (glslangMember.getQualifier().layoutPassthrough) { + addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationPassthroughNV); + builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV); + builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough); + } #endif } } @@ -2661,6 +2674,8 @@ void TGlslangToSpvTraverser::declareUseOfStructMember(const glslang::TTypeList& case glslang::EbvViewportMaskNV: case glslang::EbvSecondaryPositionNV: case glslang::EbvSecondaryViewportMaskNV: + case glslang::EbvPositionPerViewNV: + case glslang::EbvViewportMaskPerViewNV: #endif // Generate the associated capability. Delegate to TranslateBuiltInDecoration. // Alternately, we could just call this for any glslang built-in, since the @@ -5312,11 +5327,15 @@ void OutputSpvBin(const std::vector& spirv, const char* baseName) } // Write SPIR-V out to a text file with 32-bit hexadecimal words -void OutputSpvHex(const std::vector& spirv, const char* baseName) +void OutputSpvHex(const std::vector& spirv, const char* baseName, const char* varName) { std::ofstream out; out.open(baseName, std::ios::binary | std::ios::out); out << "\t// " GLSLANG_REVISION " " GLSLANG_DATE << std::endl; + if (varName != nullptr) { + out << "\t #pragma once" << std::endl; + out << "const uint32_t " << varName << "[] = {" << std::endl; + } const int WORDS_PER_LINE = 8; for (int i = 0; i < (int)spirv.size(); i += WORDS_PER_LINE) { out << "\t"; @@ -5329,6 +5348,9 @@ void OutputSpvHex(const std::vector& spirv, const char* baseName) } out << std::endl; } + if (varName != nullptr) { + out << "};"; + } out.close(); } diff --git a/3rdparty/glslang/SPIRV/GlslangToSpv.h b/3rdparty/glslang/SPIRV/GlslangToSpv.h index ceb23b5a5..11e22f588 100644 --- a/3rdparty/glslang/SPIRV/GlslangToSpv.h +++ b/3rdparty/glslang/SPIRV/GlslangToSpv.h @@ -49,6 +49,6 @@ void GetSpirvVersion(std::string&); void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv); void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, spv::SpvBuildLogger* logger); void OutputSpvBin(const std::vector& spirv, const char* baseName); -void OutputSpvHex(const std::vector& spirv, const char* baseName); +void OutputSpvHex(const std::vector& spirv, const char* baseName, const char* varName); } diff --git a/3rdparty/glslang/SPIRV/SpvBuilder.cpp b/3rdparty/glslang/SPIRV/SpvBuilder.cpp index c0ca970ff..3c23cffd5 100644 --- a/3rdparty/glslang/SPIRV/SpvBuilder.cpp +++ b/3rdparty/glslang/SPIRV/SpvBuilder.cpp @@ -1832,34 +1832,72 @@ Id Builder::createConstructor(Decoration precision, const std::vector& sourc if (sources.size() == 1 && isScalar(sources[0]) && numTargetComponents > 1) return smearScalar(precision, sources[0], resultTypeId); + // accumulate the arguments for OpCompositeConstruct + std::vector constituents; Id scalarTypeId = getScalarTypeId(resultTypeId); - std::vector constituents; // accumulate the arguments for OpCompositeConstruct - for (unsigned int i = 0; i < sources.size(); ++i) { - assert(! isAggregate(sources[i])); - unsigned int sourceSize = getNumComponents(sources[i]); + + // lambda to store the result of visiting an argument component + const auto latchResult = [&](Id comp) { + if (numTargetComponents > 1) + constituents.push_back(comp); + else + result = comp; + ++targetComponent; + }; + + // lambda to visit a vector argument's components + const auto accumulateVectorConstituents = [&](Id sourceArg) { + unsigned int sourceSize = getNumComponents(sourceArg); unsigned int sourcesToUse = sourceSize; if (sourcesToUse + targetComponent > numTargetComponents) sourcesToUse = numTargetComponents - targetComponent; for (unsigned int s = 0; s < sourcesToUse; ++s) { - Id arg = sources[i]; - if (sourceSize > 1) { - std::vector swiz; - swiz.push_back(s); - arg = createRvalueSwizzle(precision, scalarTypeId, arg, swiz); - } - - if (numTargetComponents > 1) - constituents.push_back(arg); - else - result = arg; - ++targetComponent; + std::vector swiz; + swiz.push_back(s); + latchResult(createRvalueSwizzle(precision, scalarTypeId, sourceArg, swiz)); } + }; + + // lambda to visit a matrix argument's components + const auto accumulateMatrixConstituents = [&](Id sourceArg) { + unsigned int sourceSize = getNumColumns(sourceArg) * getNumRows(sourceArg); + unsigned int sourcesToUse = sourceSize; + if (sourcesToUse + targetComponent > numTargetComponents) + sourcesToUse = numTargetComponents - targetComponent; + + int col = 0; + int row = 0; + for (unsigned int s = 0; s < sourcesToUse; ++s) { + if (row >= getNumRows(sourceArg)) { + row = 0; + col++; + } + std::vector indexes; + indexes.push_back(col); + indexes.push_back(row); + latchResult(createCompositeExtract(sourceArg, scalarTypeId, indexes)); + row++; + } + }; + + // Go through the source arguments, each one could have either + // a single or multiple components to contribute. + for (unsigned int i = 0; i < sources.size(); ++i) { + if (isScalar(sources[i])) + latchResult(sources[i]); + else if (isVector(sources[i])) + accumulateVectorConstituents(sources[i]); + else if (isMatrix(sources[i])) + accumulateMatrixConstituents(sources[i]); + else + assert(0); if (targetComponent >= numTargetComponents) break; } + // If the result is a vector, make it from the gathered constituents. if (constituents.size() > 0) result = createCompositeConstruct(resultTypeId, constituents); diff --git a/3rdparty/glslang/SPIRV/disassemble.cpp b/3rdparty/glslang/SPIRV/disassemble.cpp index 74ae40767..c950a66a0 100644 --- a/3rdparty/glslang/SPIRV/disassemble.cpp +++ b/3rdparty/glslang/SPIRV/disassemble.cpp @@ -483,7 +483,8 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, #ifdef NV_EXTENSIONS }else if (strcmp(spv::E_SPV_NV_sample_mask_override_coverage, name) == 0 || strcmp(spv::E_SPV_NV_geometry_shader_passthrough, name) == 0 || - strcmp(spv::E_SPV_NV_viewport_array2, name) == 0) { + strcmp(spv::E_SPV_NV_viewport_array2, name) == 0 || + strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0) { extInstSet = GLSLextNVInst; #endif } @@ -659,7 +660,8 @@ static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint) if (strcmp(name, spv::E_SPV_NV_sample_mask_override_coverage) == 0 || strcmp(name, spv::E_SPV_NV_geometry_shader_passthrough) == 0 || strcmp(name, spv::E_ARB_shader_viewport_layer_array) == 0 || - strcmp(name, spv::E_SPV_NV_viewport_array2) == 0){ + strcmp(name, spv::E_SPV_NV_viewport_array2) == 0 || + strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0) { switch (entrypoint) { case DecorationOverrideCoverageNV: return "OverrideCoverageNV"; case DecorationPassthroughNV: return "PassthroughNV"; @@ -671,6 +673,9 @@ static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint) case BuiltInSecondaryPositionNV: return "SecondaryPositionNV"; case BuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; case CapabilityShaderStereoViewNV: return "ShaderStereoViewNV"; + case BuiltInPositionPerViewNV: return "PositionPerViewNV"; + case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; + case CapabilityPerViewAttributesNV: return "PerViewAttributesNV"; default: return "Bad"; } } diff --git a/3rdparty/glslang/SPIRV/doc.cpp b/3rdparty/glslang/SPIRV/doc.cpp index 871809978..b497bba7e 100755 --- a/3rdparty/glslang/SPIRV/doc.cpp +++ b/3rdparty/glslang/SPIRV/doc.cpp @@ -344,6 +344,8 @@ const char* BuiltInString(int builtIn) case 5253: return "ViewportMaskNV"; case 5257: return "SecondaryPositionNV"; case 5258: return "SecondaryViewportMaskNV"; + case 5260: return "PositionPerViewNV"; + case 5261: return "ViewportMaskPerViewNV"; #endif } } @@ -1169,8 +1171,8 @@ const char* OpcodeString(int op) case 4421: return "OpSubgroupBallotKHR"; case 4422: return "OpSubgroupFirstInvocationKHR"; - case 4428: return "OpSubgroupAnyKHR"; - case 4429: return "OpSubgroupAllKHR"; + case 4428: return "OpSubgroupAllKHR"; + case 4429: return "OpSubgroupAnyKHR"; case 4430: return "OpSubgroupAllEqualKHR"; case 4432: return "OpSubgroupReadInvocationKHR"; diff --git a/3rdparty/glslang/StandAlone/StandAlone.cpp b/3rdparty/glslang/StandAlone/StandAlone.cpp index d133b5948..26f4b6c7d 100644 --- a/3rdparty/glslang/StandAlone/StandAlone.cpp +++ b/3rdparty/glslang/StandAlone/StandAlone.cpp @@ -163,6 +163,7 @@ const char* binaryFileName = nullptr; const char* entryPointName = nullptr; const char* sourceEntryPointName = nullptr; const char* shaderStageName = nullptr; +const char* variableName = nullptr; std::array baseSamplerBinding; std::array baseTextureBinding; @@ -302,7 +303,18 @@ void ProcessArguments(int argc, char* argv[]) } else if (lowerword == "no-storage-format" || // synonyms lowerword == "nsf") { Options |= EOptionNoStorageFormat; - } else if (lowerword == "source-entrypoint" || // synonyms + } else if (lowerword == "variable-name" || // synonyms + lowerword == "vn") { + Options |= EOptionOutputHexadecimal; + variableName = argv[1]; + if (argc > 0) { + argc--; + argv++; + } else + Error("no provided for --variable-name"); + break; + } + else if (lowerword == "source-entrypoint" || // synonyms lowerword == "sep") { sourceEntryPointName = argv[1]; if (argc > 0) { @@ -650,7 +662,7 @@ void CompileAndLinkShaderUnits(std::vector compUnits) if (! (Options & EOptionMemoryLeakMode)) { printf("%s", logger.getAllMessages().c_str()); if (Options & EOptionOutputHexadecimal) { - glslang::OutputSpvHex(spirv, GetBinaryName((EShLanguage)stage)); + glslang::OutputSpvHex(spirv, GetBinaryName((EShLanguage)stage), variableName); } else { glslang::OutputSpvBin(spirv, GetBinaryName((EShLanguage)stage)); } @@ -987,6 +999,8 @@ void usage() "\n" " --keep-uncalled don't eliminate uncalled functions when linking\n" " --ku synonym for --keep-uncalled\n" + " --variable-name Creates a C header file that contains a uint32_t array named initialized with the shader binary code.\n" + " --vn synonym for --variable-name .\n" ); exit(EFailUsage); diff --git a/3rdparty/glslang/Test/baseResults/310.comp.out b/3rdparty/glslang/Test/baseResults/310.comp.out index a5be10e13..e063626dd 100644 --- a/3rdparty/glslang/Test/baseResults/310.comp.out +++ b/3rdparty/glslang/Test/baseResults/310.comp.out @@ -16,7 +16,7 @@ ERROR: 0:47: 'local_size' : can only apply to 'in' ERROR: 0:61: 'assign' : l-value required "ro" (can't modify a readonly buffer) ERROR: 0:66: 'buffer' : buffers can be declared only as blocks ERROR: 0:68: 'sampler/image' : type requires declaration of default precision qualifier -ERROR: 0:76: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:76: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es ERROR: 0:81: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:82: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:87: 'imageAtomicCompSwap' : required extension not requested: GL_OES_shader_image_atomic @@ -54,12 +54,12 @@ ERROR: 0:171: 'samplerCubeArray' : Reserved word. ERROR: 0:171: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:172: 'iimage2DRect' : Reserved word. ERROR: 0:172: 'sampler/image' : type requires declaration of default precision qualifier -ERROR: 0:172: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:172: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es ERROR: 0:173: 'image2DMS' : Reserved word. -ERROR: 0:173: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:173: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es ERROR: 0:174: 'uimage2DMSArray' : Reserved word. ERROR: 0:174: 'sampler/image' : type requires declaration of default precision qualifier -ERROR: 0:174: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:174: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es ERROR: 0:181: 'rgba32f' : format requires readonly or writeonly memory qualifier ERROR: 0:182: 'rgba8i' : format requires readonly or writeonly memory qualifier ERROR: 0:183: 'rgba16ui' : format requires readonly or writeonly memory qualifier diff --git a/3rdparty/glslang/Test/baseResults/310.frag.out b/3rdparty/glslang/Test/baseResults/310.frag.out index 34cae953b..7033d4f3f 100644 --- a/3rdparty/glslang/Test/baseResults/310.frag.out +++ b/3rdparty/glslang/Test/baseResults/310.frag.out @@ -19,13 +19,13 @@ ERROR: 0:44: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, ERROR: 0:45: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] ERROR: 0:45: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] ERROR: 0:66: 'sampler/image' : type requires declaration of default precision qualifier -ERROR: 0:66: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:66: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es ERROR: 0:67: 'sampler/image' : type requires declaration of default precision qualifier -ERROR: 0:67: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:67: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es ERROR: 0:68: 'sampler/image' : type requires declaration of default precision qualifier -ERROR: 0:68: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:68: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es ERROR: 0:69: 'sampler/image' : type requires declaration of default precision qualifier -ERROR: 0:69: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:69: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es ERROR: 0:73: 'binding' : requires block, or sampler/image, or atomic-counter type ERROR: 0:77: 'location' : location is too large ERROR: 0:81: 'location' : too large for fragment output @@ -36,7 +36,7 @@ ERROR: 0:83: 'layout-id value' : cannot be negative ERROR: 0:96: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:110: 'out' : cannot be bool ERROR: 0:111: 'image2D' : sampler/image types can only be used in uniform variables or function parameters: imageOut -ERROR: 0:111: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:111: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es ERROR: 0:112: 'out' : cannot be a matrix ERROR: 0:114: 'in' : cannot be bool ERROR: 0:115: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: ino diff --git a/3rdparty/glslang/Test/baseResults/310.tesc.out b/3rdparty/glslang/Test/baseResults/310.tesc.out index d004fa166..89be51e6a 100644 --- a/3rdparty/glslang/Test/baseResults/310.tesc.out +++ b/3rdparty/glslang/Test/baseResults/310.tesc.out @@ -71,8 +71,8 @@ ERROR: node is still EOpNull! 0:25 move second child to first child (temp highp 4-component vector of float) 0:25 'p' (temp highp 4-component vector of float) 0:25 gl_Position: direct index for structure (in highp 4-component vector of float Position) -0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) -0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) +0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV}) +0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV}) 0:25 Constant: 0:25 1 (const int) 0:25 Constant: @@ -81,8 +81,8 @@ ERROR: node is still EOpNull! 0:26 move second child to first child (temp highp float) 0:26 'ps' (temp highp float) 0:26 gl_PointSize: direct index for structure (in highp float PointSize) -0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) -0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) +0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV}) +0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV}) 0:26 Constant: 0:26 1 (const int) 0:26 Constant: @@ -210,8 +210,8 @@ ERROR: node is still EOpNull! 0:114 move second child to first child (temp highp float) 0:114 'ps' (temp highp float) 0:114 gl_PointSize: direct index for structure (in highp float PointSize) -0:114 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) -0:114 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) +0:114 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV}) +0:114 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV}) 0:114 Constant: 0:114 1 (const int) 0:114 Constant: @@ -402,8 +402,8 @@ ERROR: node is still EOpNull! 0:25 move second child to first child (temp highp 4-component vector of float) 0:25 'p' (temp highp 4-component vector of float) 0:25 gl_Position: direct index for structure (in highp 4-component vector of float Position) -0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) -0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) +0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) 0:25 Constant: 0:25 1 (const int) 0:25 Constant: @@ -412,8 +412,8 @@ ERROR: node is still EOpNull! 0:26 move second child to first child (temp highp float) 0:26 'ps' (temp highp float) 0:26 gl_PointSize: direct index for structure (in highp float PointSize) -0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) -0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) +0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) 0:26 Constant: 0:26 1 (const int) 0:26 Constant: diff --git a/3rdparty/glslang/Test/baseResults/310.tese.out b/3rdparty/glslang/Test/baseResults/310.tese.out index c6ce6650b..aa0d8b126 100644 --- a/3rdparty/glslang/Test/baseResults/310.tese.out +++ b/3rdparty/glslang/Test/baseResults/310.tese.out @@ -78,8 +78,8 @@ ERROR: node is still EOpNull! 0:36 move second child to first child (temp highp 4-component vector of float) 0:36 'p' (temp highp 4-component vector of float) 0:36 gl_Position: direct index for structure (in highp 4-component vector of float Position) -0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) -0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) +0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV}) +0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV}) 0:36 Constant: 0:36 1 (const int) 0:36 Constant: @@ -88,8 +88,8 @@ ERROR: node is still EOpNull! 0:37 move second child to first child (temp highp float) 0:37 'ps' (temp highp float) 0:37 gl_PointSize: direct index for structure (in highp float PointSize) -0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) -0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) +0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV}) +0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV}) 0:37 Constant: 0:37 1 (const int) 0:37 Constant: @@ -211,8 +211,8 @@ ERROR: node is still EOpNull! 0:36 move second child to first child (temp highp 4-component vector of float) 0:36 'p' (temp highp 4-component vector of float) 0:36 gl_Position: direct index for structure (in highp 4-component vector of float Position) -0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) -0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) +0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) 0:36 Constant: 0:36 1 (const int) 0:36 Constant: @@ -221,8 +221,8 @@ ERROR: node is still EOpNull! 0:37 move second child to first child (temp highp float) 0:37 'ps' (temp highp float) 0:37 gl_PointSize: direct index for structure (in highp float PointSize) -0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) -0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV}) +0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) 0:37 Constant: 0:37 1 (const int) 0:37 Constant: diff --git a/3rdparty/glslang/Test/baseResults/420.vert.out b/3rdparty/glslang/Test/baseResults/420.vert.out index b8e1306d7..cc6b13fea 100644 --- a/3rdparty/glslang/Test/baseResults/420.vert.out +++ b/3rdparty/glslang/Test/baseResults/420.vert.out @@ -33,7 +33,7 @@ ERROR: 0:85: '' : vertex input cannot be further qualified ERROR: 0:86: 'patch' : not supported in this stage: vertex ERROR: 0:100: '=' : global const initializers must be constant 'const int' ERROR: 0:101: '' : array size must be a constant integer expression -ERROR: 0:107: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:107: 'image variables declared 'writeonly' without a format layout qualifier' : not supported for this version or the enabled extensions ERROR: 0:114: 'imageAtomicMin' : only supported on image with format r32i or r32ui ERROR: 0:115: 'imageAtomicMax' : no matching overloaded function found ERROR: 0:119: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter diff --git a/3rdparty/glslang/Test/baseResults/spv.140.frag.out b/3rdparty/glslang/Test/baseResults/spv.140.frag.out index d8ec8cfbf..324cc0c5c 100755 --- a/3rdparty/glslang/Test/baseResults/spv.140.frag.out +++ b/3rdparty/glslang/Test/baseResults/spv.140.frag.out @@ -54,7 +54,7 @@ spv.140.frag MemberDecorate 87(bn) 3 Offset 576 MemberDecorate 87(bn) 3 MatrixStride 16 MemberDecorate 87(bn) 4 RowMajor - MemberDecorate 87(bn) 4 Offset 640 + MemberDecorate 87(bn) 4 Offset 1024 MemberDecorate 87(bn) 4 MatrixStride 16 Decorate 87(bn) Block Decorate 89 DescriptorSet 0 diff --git a/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out b/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out index 20eb8e7d5..69f66b6a3 100644 --- a/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out +++ b/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out @@ -61,7 +61,7 @@ Warning, version 310 is not yet complete; most version-specific features are pre MemberDecorate 45(T3) 2 ColMajor MemberDecorate 45(T3) 2 Offset 128 MemberDecorate 45(T3) 2 MatrixStride 16 - MemberDecorate 45(T3) 3 Offset 160 + MemberDecorate 45(T3) 3 Offset 2048 Decorate 45(T3) Block Decorate 47 DescriptorSet 0 MemberDecorate 78(T2) 0 Offset 0 diff --git a/3rdparty/glslang/Test/baseResults/spv.image.load-formatted.frag.out b/3rdparty/glslang/Test/baseResults/spv.image.load-formatted.frag.out new file mode 100644 index 000000000..172a3a178 --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.image.load-formatted.frag.out @@ -0,0 +1,352 @@ +spv.image.load-formatted.frag +Warning, version 450 is not yet complete; most version-specific features are present, but some are missing. + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 240 + + Capability Shader + Capability SampledRect + Capability Sampled1D + Capability SampledCubeArray + Capability SampledBuffer + Capability ImageMSArray + Capability ImageQuery + Capability StorageImageReadWithoutFormat + Capability StorageImageWriteWithoutFormat + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 132 142 152 233 237 239 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_EXT_shader_image_load_formatted" + Name 4 "main" + Name 9 "iv" + Name 15 "i1D" + Name 27 "i2D" + Name 38 "i3D" + Name 45 "iCube" + Name 55 "iCubeArray" + Name 62 "i2DRect" + Name 72 "i1DArray" + Name 82 "i2DArray" + Name 89 "iBuffer" + Name 98 "i2DMS" + Name 108 "i2DMSArray" + Name 127 "v" + Name 132 "ic1D" + Name 142 "ic2D" + Name 152 "ic3D" + Name 228 "wo2D" + Name 233 "fragData" + Name 237 "ic4D" + Name 239 "value" + Decorate 15(i1D) DescriptorSet 0 + Decorate 15(i1D) Binding 0 + Decorate 27(i2D) DescriptorSet 0 + Decorate 27(i2D) Binding 1 + Decorate 38(i3D) DescriptorSet 0 + Decorate 38(i3D) Binding 2 + Decorate 45(iCube) DescriptorSet 0 + Decorate 45(iCube) Binding 3 + Decorate 55(iCubeArray) DescriptorSet 0 + Decorate 55(iCubeArray) Binding 4 + Decorate 62(i2DRect) DescriptorSet 0 + Decorate 62(i2DRect) Binding 5 + Decorate 72(i1DArray) DescriptorSet 0 + Decorate 72(i1DArray) Binding 6 + Decorate 82(i2DArray) DescriptorSet 0 + Decorate 82(i2DArray) Binding 7 + Decorate 89(iBuffer) DescriptorSet 0 + Decorate 89(iBuffer) Binding 8 + Decorate 98(i2DMS) DescriptorSet 0 + Decorate 98(i2DMS) Binding 9 + Decorate 108(i2DMSArray) DescriptorSet 0 + Decorate 108(i2DMSArray) Binding 10 + Decorate 132(ic1D) Flat + Decorate 142(ic2D) Flat + Decorate 152(ic3D) Flat + Decorate 228(wo2D) DescriptorSet 0 + Decorate 228(wo2D) Binding 1 + Decorate 228(wo2D) NonReadable + Decorate 237(ic4D) Flat + Decorate 239(value) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 3 + 8: TypePointer Function 7(ivec3) + 10: 6(int) Constant 0 + 11: 7(ivec3) ConstantComposite 10 10 10 + 12: TypeFloat 32 + 13: TypeImage 12(float) 1D nonsampled format:Unknown + 14: TypePointer UniformConstant 13 + 15(i1D): 14(ptr) Variable UniformConstant + 18: TypeInt 32 0 + 19: 18(int) Constant 0 + 20: TypePointer Function 6(int) + 25: TypeImage 12(float) 2D nonsampled format:Unknown + 26: TypePointer UniformConstant 25 + 27(i2D): 26(ptr) Variable UniformConstant + 29: TypeVector 6(int) 2 + 36: TypeImage 12(float) 3D nonsampled format:Unknown + 37: TypePointer UniformConstant 36 + 38(i3D): 37(ptr) Variable UniformConstant + 43: TypeImage 12(float) Cube nonsampled format:Unknown + 44: TypePointer UniformConstant 43 + 45(iCube): 44(ptr) Variable UniformConstant + 53: TypeImage 12(float) Cube array nonsampled format:Unknown + 54: TypePointer UniformConstant 53 + 55(iCubeArray): 54(ptr) Variable UniformConstant + 60: TypeImage 12(float) Rect nonsampled format:Unknown + 61: TypePointer UniformConstant 60 + 62(i2DRect): 61(ptr) Variable UniformConstant + 70: TypeImage 12(float) 1D array nonsampled format:Unknown + 71: TypePointer UniformConstant 70 + 72(i1DArray): 71(ptr) Variable UniformConstant + 80: TypeImage 12(float) 2D array nonsampled format:Unknown + 81: TypePointer UniformConstant 80 + 82(i2DArray): 81(ptr) Variable UniformConstant + 87: TypeImage 12(float) Buffer nonsampled format:Unknown + 88: TypePointer UniformConstant 87 + 89(iBuffer): 88(ptr) Variable UniformConstant + 96: TypeImage 12(float) 2D multi-sampled nonsampled format:Unknown + 97: TypePointer UniformConstant 96 + 98(i2DMS): 97(ptr) Variable UniformConstant + 106: TypeImage 12(float) 2D array multi-sampled nonsampled format:Unknown + 107: TypePointer UniformConstant 106 + 108(i2DMSArray): 107(ptr) Variable UniformConstant + 125: TypeVector 12(float) 4 + 126: TypePointer Function 125(fvec4) + 128: 12(float) Constant 0 + 129: 125(fvec4) ConstantComposite 128 128 128 128 + 131: TypePointer Input 6(int) + 132(ic1D): 131(ptr) Variable Input + 141: TypePointer Input 29(ivec2) + 142(ic2D): 141(ptr) Variable Input + 151: TypePointer Input 7(ivec3) + 152(ic3D): 151(ptr) Variable Input + 210: 6(int) Constant 1 + 216: 6(int) Constant 2 + 220: 6(int) Constant 3 + 226: 6(int) Constant 4 + 228(wo2D): 26(ptr) Variable UniformConstant + 232: TypePointer Output 125(fvec4) + 233(fragData): 232(ptr) Variable Output + 235: TypeVector 6(int) 4 + 236: TypePointer Input 235(ivec4) + 237(ic4D): 236(ptr) Variable Input + 238: TypePointer Input 18(int) + 239(value): 238(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 9(iv): 8(ptr) Variable Function + 127(v): 126(ptr) Variable Function + Store 9(iv) 11 + 16: 13 Load 15(i1D) + 17: 6(int) ImageQuerySize 16 + 21: 20(ptr) AccessChain 9(iv) 19 + 22: 6(int) Load 21 + 23: 6(int) IAdd 22 17 + 24: 20(ptr) AccessChain 9(iv) 19 + Store 24 23 + 28: 25 Load 27(i2D) + 30: 29(ivec2) ImageQuerySize 28 + 31: 7(ivec3) Load 9(iv) + 32: 29(ivec2) VectorShuffle 31 31 0 1 + 33: 29(ivec2) IAdd 32 30 + 34: 7(ivec3) Load 9(iv) + 35: 7(ivec3) VectorShuffle 34 33 3 4 2 + Store 9(iv) 35 + 39: 36 Load 38(i3D) + 40: 7(ivec3) ImageQuerySize 39 + 41: 7(ivec3) Load 9(iv) + 42: 7(ivec3) IAdd 41 40 + Store 9(iv) 42 + 46: 43 Load 45(iCube) + 47: 29(ivec2) ImageQuerySize 46 + 48: 7(ivec3) Load 9(iv) + 49: 29(ivec2) VectorShuffle 48 48 0 1 + 50: 29(ivec2) IAdd 49 47 + 51: 7(ivec3) Load 9(iv) + 52: 7(ivec3) VectorShuffle 51 50 3 4 2 + Store 9(iv) 52 + 56: 53 Load 55(iCubeArray) + 57: 7(ivec3) ImageQuerySize 56 + 58: 7(ivec3) Load 9(iv) + 59: 7(ivec3) IAdd 58 57 + Store 9(iv) 59 + 63: 60 Load 62(i2DRect) + 64: 29(ivec2) ImageQuerySize 63 + 65: 7(ivec3) Load 9(iv) + 66: 29(ivec2) VectorShuffle 65 65 0 1 + 67: 29(ivec2) IAdd 66 64 + 68: 7(ivec3) Load 9(iv) + 69: 7(ivec3) VectorShuffle 68 67 3 4 2 + Store 9(iv) 69 + 73: 70 Load 72(i1DArray) + 74: 29(ivec2) ImageQuerySize 73 + 75: 7(ivec3) Load 9(iv) + 76: 29(ivec2) VectorShuffle 75 75 0 1 + 77: 29(ivec2) IAdd 76 74 + 78: 7(ivec3) Load 9(iv) + 79: 7(ivec3) VectorShuffle 78 77 3 4 2 + Store 9(iv) 79 + 83: 80 Load 82(i2DArray) + 84: 7(ivec3) ImageQuerySize 83 + 85: 7(ivec3) Load 9(iv) + 86: 7(ivec3) IAdd 85 84 + Store 9(iv) 86 + 90: 87 Load 89(iBuffer) + 91: 6(int) ImageQuerySize 90 + 92: 20(ptr) AccessChain 9(iv) 19 + 93: 6(int) Load 92 + 94: 6(int) IAdd 93 91 + 95: 20(ptr) AccessChain 9(iv) 19 + Store 95 94 + 99: 96 Load 98(i2DMS) + 100: 29(ivec2) ImageQuerySize 99 + 101: 7(ivec3) Load 9(iv) + 102: 29(ivec2) VectorShuffle 101 101 0 1 + 103: 29(ivec2) IAdd 102 100 + 104: 7(ivec3) Load 9(iv) + 105: 7(ivec3) VectorShuffle 104 103 3 4 2 + Store 9(iv) 105 + 109: 106 Load 108(i2DMSArray) + 110: 7(ivec3) ImageQuerySize 109 + 111: 7(ivec3) Load 9(iv) + 112: 7(ivec3) IAdd 111 110 + Store 9(iv) 112 + 113: 96 Load 98(i2DMS) + 114: 6(int) ImageQuerySamples 113 + 115: 20(ptr) AccessChain 9(iv) 19 + 116: 6(int) Load 115 + 117: 6(int) IAdd 116 114 + 118: 20(ptr) AccessChain 9(iv) 19 + Store 118 117 + 119: 106 Load 108(i2DMSArray) + 120: 6(int) ImageQuerySamples 119 + 121: 20(ptr) AccessChain 9(iv) 19 + 122: 6(int) Load 121 + 123: 6(int) IAdd 122 120 + 124: 20(ptr) AccessChain 9(iv) 19 + Store 124 123 + Store 127(v) 129 + 130: 13 Load 15(i1D) + 133: 6(int) Load 132(ic1D) + 134: 125(fvec4) ImageRead 130 133 + 135: 125(fvec4) Load 127(v) + 136: 125(fvec4) FAdd 135 134 + Store 127(v) 136 + 137: 13 Load 15(i1D) + 138: 6(int) Load 132(ic1D) + 139: 125(fvec4) Load 127(v) + ImageWrite 137 138 139 + 140: 25 Load 27(i2D) + 143: 29(ivec2) Load 142(ic2D) + 144: 125(fvec4) ImageRead 140 143 + 145: 125(fvec4) Load 127(v) + 146: 125(fvec4) FAdd 145 144 + Store 127(v) 146 + 147: 25 Load 27(i2D) + 148: 29(ivec2) Load 142(ic2D) + 149: 125(fvec4) Load 127(v) + ImageWrite 147 148 149 + 150: 36 Load 38(i3D) + 153: 7(ivec3) Load 152(ic3D) + 154: 125(fvec4) ImageRead 150 153 + 155: 125(fvec4) Load 127(v) + 156: 125(fvec4) FAdd 155 154 + Store 127(v) 156 + 157: 36 Load 38(i3D) + 158: 7(ivec3) Load 152(ic3D) + 159: 125(fvec4) Load 127(v) + ImageWrite 157 158 159 + 160: 43 Load 45(iCube) + 161: 7(ivec3) Load 152(ic3D) + 162: 125(fvec4) ImageRead 160 161 + 163: 125(fvec4) Load 127(v) + 164: 125(fvec4) FAdd 163 162 + Store 127(v) 164 + 165: 43 Load 45(iCube) + 166: 7(ivec3) Load 152(ic3D) + 167: 125(fvec4) Load 127(v) + ImageWrite 165 166 167 + 168: 53 Load 55(iCubeArray) + 169: 7(ivec3) Load 152(ic3D) + 170: 125(fvec4) ImageRead 168 169 + 171: 125(fvec4) Load 127(v) + 172: 125(fvec4) FAdd 171 170 + Store 127(v) 172 + 173: 53 Load 55(iCubeArray) + 174: 7(ivec3) Load 152(ic3D) + 175: 125(fvec4) Load 127(v) + ImageWrite 173 174 175 + 176: 60 Load 62(i2DRect) + 177: 29(ivec2) Load 142(ic2D) + 178: 125(fvec4) ImageRead 176 177 + 179: 125(fvec4) Load 127(v) + 180: 125(fvec4) FAdd 179 178 + Store 127(v) 180 + 181: 60 Load 62(i2DRect) + 182: 29(ivec2) Load 142(ic2D) + 183: 125(fvec4) Load 127(v) + ImageWrite 181 182 183 + 184: 70 Load 72(i1DArray) + 185: 29(ivec2) Load 142(ic2D) + 186: 125(fvec4) ImageRead 184 185 + 187: 125(fvec4) Load 127(v) + 188: 125(fvec4) FAdd 187 186 + Store 127(v) 188 + 189: 70 Load 72(i1DArray) + 190: 29(ivec2) Load 142(ic2D) + 191: 125(fvec4) Load 127(v) + ImageWrite 189 190 191 + 192: 80 Load 82(i2DArray) + 193: 7(ivec3) Load 152(ic3D) + 194: 125(fvec4) ImageRead 192 193 + 195: 125(fvec4) Load 127(v) + 196: 125(fvec4) FAdd 195 194 + Store 127(v) 196 + 197: 80 Load 82(i2DArray) + 198: 7(ivec3) Load 152(ic3D) + 199: 125(fvec4) Load 127(v) + ImageWrite 197 198 199 + 200: 87 Load 89(iBuffer) + 201: 6(int) Load 132(ic1D) + 202: 125(fvec4) ImageRead 200 201 + 203: 125(fvec4) Load 127(v) + 204: 125(fvec4) FAdd 203 202 + Store 127(v) 204 + 205: 87 Load 89(iBuffer) + 206: 6(int) Load 132(ic1D) + 207: 125(fvec4) Load 127(v) + ImageWrite 205 206 207 + 208: 96 Load 98(i2DMS) + 209: 29(ivec2) Load 142(ic2D) + 211: 125(fvec4) ImageRead 208 209 Sample 210 + 212: 125(fvec4) Load 127(v) + 213: 125(fvec4) FAdd 212 211 + Store 127(v) 213 + 214: 96 Load 98(i2DMS) + 215: 29(ivec2) Load 142(ic2D) + 217: 125(fvec4) Load 127(v) + ImageWrite 214 215 217 Sample 216 + 218: 106 Load 108(i2DMSArray) + 219: 7(ivec3) Load 152(ic3D) + 221: 125(fvec4) ImageRead 218 219 Sample 220 + 222: 125(fvec4) Load 127(v) + 223: 125(fvec4) FAdd 222 221 + Store 127(v) 223 + 224: 106 Load 108(i2DMSArray) + 225: 7(ivec3) Load 152(ic3D) + 227: 125(fvec4) Load 127(v) + ImageWrite 224 225 227 Sample 226 + 229: 25 Load 228(wo2D) + 230: 29(ivec2) Load 142(ic2D) + 231: 125(fvec4) Load 127(v) + ImageWrite 229 230 231 + 234: 125(fvec4) Load 127(v) + Store 233(fragData) 234 + Return + FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out b/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out index 700e90ebc..c7077b9a0 100644 --- a/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out +++ b/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out @@ -3,7 +3,7 @@ Warning, version 420 is not yet complete; most version-specific features are pre // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 261 +// Id's are bound by 286 Capability Shader Capability Float64 @@ -55,6 +55,9 @@ Warning, version 420 is not yet complete; most version-specific features are pre 186: TypePointer Output 7(fvec4) 187(color): 186(ptr) Variable Output 208: 6(float) Constant 0 + 270: TypeVector 6(float) 2 + 271: TypeMatrix 270(fvec2) 2 + 279: 6(float) Constant 1088841318 4(main): 2 Function None 3 5: Label 10(sum34): 9(ptr) Variable Function @@ -305,5 +308,29 @@ Warning, version 420 is not yet complete; most version-specific features are pre 259: 7(fvec4) Load 187(color) 260: 7(fvec4) FAdd 259 258 Store 187(color) 260 + 261: 172 Load 174(m43) + 262: 6(float) CompositeExtract 261 0 0 + 263: 6(float) CompositeExtract 261 0 1 + 264: 6(float) CompositeExtract 261 0 2 + 265: 6(float) CompositeExtract 261 1 0 + 266: 7(fvec4) CompositeConstruct 262 263 264 265 + 267: 7(fvec4) Load 187(color) + 268: 7(fvec4) FAdd 267 266 + Store 187(color) 268 + 269: 6(float) Load 28(f) + 272: 270(fvec2) CompositeConstruct 269 208 + 273: 270(fvec2) CompositeConstruct 208 269 + 274: 271 CompositeConstruct 272 273 + 275: 6(float) CompositeExtract 274 0 0 + 276: 6(float) CompositeExtract 274 0 1 + 277: 6(float) CompositeExtract 274 1 0 + 278: 157(fvec3) CompositeConstruct 275 276 277 + 280: 6(float) CompositeExtract 278 0 + 281: 6(float) CompositeExtract 278 1 + 282: 6(float) CompositeExtract 278 2 + 283: 7(fvec4) CompositeConstruct 280 281 282 279 + 284: 7(fvec4) Load 187(color) + 285: 7(fvec4) FAdd 284 283 + Store 187(color) 285 Return FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out new file mode 100644 index 000000000..61b38c8bc --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out @@ -0,0 +1,78 @@ +spv.multiviewPerViewAttributes.tesc +Warning, version 450 is not yet complete; most version-specific features are present, but some are missing. + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 37 + + Capability Tessellation + Capability Bad + Extension "SPV_NVX_multiview_per_view_attributes" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationControl 4 "main" 17 19 31 + ExecutionMode 4 OutputVertices 4 + Source GLSL 450 + SourceExtension "GL_NVX_multiview_per_view_attributes" + Name 4 "main" + Name 13 "gl_PerVertex" + MemberName 13(gl_PerVertex) 0 "gl_PositionPerViewNV" + MemberName 13(gl_PerVertex) 1 "gl_ViewportMaskPerViewNV" + Name 17 "gl_out" + Name 19 "gl_InvocationID" + Name 27 "gl_PerVertex" + MemberName 27(gl_PerVertex) 0 "gl_Position" + MemberName 27(gl_PerVertex) 1 "gl_PointSize" + MemberName 27(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 27(gl_PerVertex) 3 "gl_CullDistance" + MemberName 27(gl_PerVertex) 4 "gl_SecondaryPositionNV" + MemberName 27(gl_PerVertex) 5 "gl_PositionPerViewNV" + Name 31 "gl_in" + MemberDecorate 13(gl_PerVertex) 0 BuiltIn PositionPerViewNV + MemberDecorate 13(gl_PerVertex) 1 BuiltIn ViewportMaskPerViewNV + Decorate 13(gl_PerVertex) Block + Decorate 19(gl_InvocationID) BuiltIn InvocationId + MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 27(gl_PerVertex) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 0 + 9: 8(int) Constant 1 + 10: TypeArray 7(fvec4) 9 + 11: TypeInt 32 1 + 12: TypeArray 11(int) 9 +13(gl_PerVertex): TypeStruct 10 12 + 14: 8(int) Constant 4 + 15: TypeArray 13(gl_PerVertex) 14 + 16: TypePointer Output 15 + 17(gl_out): 16(ptr) Variable Output + 18: TypePointer Input 11(int) +19(gl_InvocationID): 18(ptr) Variable Input + 21: 11(int) Constant 1 + 22: 11(int) Constant 0 + 23: TypePointer Output 11(int) + 26: TypeArray 6(float) 9 +27(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 26 26 7(fvec4) 10 + 28: 8(int) Constant 32 + 29: TypeArray 27(gl_PerVertex) 28 + 30: TypePointer Input 29 + 31(gl_in): 30(ptr) Variable Input + 32: TypePointer Input 7(fvec4) + 35: TypePointer Output 7(fvec4) + 4(main): 2 Function None 3 + 5: Label + 20: 11(int) Load 19(gl_InvocationID) + 24: 23(ptr) AccessChain 17(gl_out) 20 21 22 + Store 24 21 + 25: 11(int) Load 19(gl_InvocationID) + 33: 32(ptr) AccessChain 31(gl_in) 21 22 + 34: 7(fvec4) Load 33 + 36: 35(ptr) AccessChain 17(gl_out) 25 22 22 + Store 36 34 + Return + FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out b/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out new file mode 100644 index 000000000..2f3df9b54 --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out @@ -0,0 +1,62 @@ +spv.multiviewPerViewAttributes.vert +Warning, version 450 is not yet complete; most version-specific features are present, but some are missing. + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 29 + + Capability Shader + Capability Bad + Extension "SPV_NVX_multiview_per_view_attributes" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 11 20 24 + Source GLSL 450 + SourceExtension "GL_NVX_multiview_per_view_attributes" + Name 4 "main" + Name 11 "gl_ViewportMaskPerViewNV" + Name 20 "gl_PositionPerViewNV" + Name 22 "gl_PerVertex" + MemberName 22(gl_PerVertex) 0 "gl_Position" + MemberName 22(gl_PerVertex) 1 "gl_PointSize" + MemberName 22(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 22(gl_PerVertex) 3 "gl_CullDistance" + Name 24 "" + Decorate 11(gl_ViewportMaskPerViewNV) BuiltIn ViewportMaskPerViewNV + Decorate 20(gl_PositionPerViewNV) BuiltIn PositionPerViewNV + MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 22(gl_PerVertex) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeInt 32 0 + 8: 7(int) Constant 1 + 9: TypeArray 6(int) 8 + 10: TypePointer Output 9 +11(gl_ViewportMaskPerViewNV): 10(ptr) Variable Output + 12: 6(int) Constant 0 + 13: 6(int) Constant 1 + 14: TypePointer Output 6(int) + 16: TypeFloat 32 + 17: TypeVector 16(float) 4 + 18: TypeArray 17(fvec4) 8 + 19: TypePointer Output 18 +20(gl_PositionPerViewNV): 19(ptr) Variable Output + 21: TypeArray 16(float) 8 +22(gl_PerVertex): TypeStruct 17(fvec4) 16(float) 21 21 + 23: TypePointer Output 22(gl_PerVertex) + 24: 23(ptr) Variable Output + 25: TypePointer Output 17(fvec4) + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 11(gl_ViewportMaskPerViewNV) 12 + Store 15 13 + 26: 25(ptr) AccessChain 24 12 + 27: 17(fvec4) Load 26 + 28: 25(ptr) AccessChain 20(gl_PositionPerViewNV) 12 + Store 28 27 + Return + FunctionEnd diff --git a/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out b/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out index 464787f6d..027714941 100644 --- a/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out +++ b/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out @@ -48,10 +48,10 @@ Warning, version 450 is not yet complete; most version-specific features are pre 19: 6(bool) INotEqual 17 18 Store 8(b1) 19 20: 6(bool) Load 8(b1) - 21: 6(bool) SubgroupAllKHR 20 + 21: 6(bool) SubgroupAnyKHR 20 Store 8(b1) 21 22: 6(bool) Load 8(b1) - 23: 6(bool) SubgroupAnyKHR 22 + 23: 6(bool) SubgroupAllKHR 22 Store 8(b1) 23 24: 6(bool) Load 8(b1) 25: 6(bool) SubgroupAllEqualKHR 24 diff --git a/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out b/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out index c8f9642c1..5d5a3d0ba 100644 --- a/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out +++ b/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out @@ -3,7 +3,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 38 +// Id's are bound by 39 Capability Geometry Capability Tessellation @@ -13,7 +13,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre Extension "SPV_NV_viewport_array2" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint TessellationControl 4 "main" 16 18 32 + EntryPoint TessellationControl 4 "main" 16 18 33 ExecutionMode 4 OutputVertices 4 Source GLSL 450 SourceExtension "GL_NV_stereo_view_rendering" @@ -25,13 +25,14 @@ Warning, version 450 is not yet complete; most version-specific features are pre MemberName 12(gl_PerVertex) 2 "gl_SecondaryViewportMaskNV" Name 16 "gl_out" Name 18 "gl_InvocationID" - Name 28 "gl_PerVertex" - MemberName 28(gl_PerVertex) 0 "gl_Position" - MemberName 28(gl_PerVertex) 1 "gl_PointSize" - MemberName 28(gl_PerVertex) 2 "gl_ClipDistance" - MemberName 28(gl_PerVertex) 3 "gl_CullDistance" - MemberName 28(gl_PerVertex) 4 "gl_SecondaryPositionNV" - Name 32 "gl_in" + Name 29 "gl_PerVertex" + MemberName 29(gl_PerVertex) 0 "gl_Position" + MemberName 29(gl_PerVertex) 1 "gl_PointSize" + MemberName 29(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 29(gl_PerVertex) 3 "gl_CullDistance" + MemberName 29(gl_PerVertex) 4 "gl_SecondaryPositionNV" + MemberName 29(gl_PerVertex) 5 "gl_PositionPerViewNV" + Name 33 "gl_in" MemberDecorate 12(gl_PerVertex) 0 BuiltIn Layer MemberDecorate 12(gl_PerVertex) 0 ViewportRelativeNV MemberDecorate 12(gl_PerVertex) 0 SecondaryViewportRelativeNV 1 @@ -39,11 +40,11 @@ Warning, version 450 is not yet complete; most version-specific features are pre MemberDecorate 12(gl_PerVertex) 2 BuiltIn SecondaryViewportMaskNV Decorate 12(gl_PerVertex) Block Decorate 18(gl_InvocationID) BuiltIn InvocationId - MemberDecorate 28(gl_PerVertex) 0 BuiltIn Position - MemberDecorate 28(gl_PerVertex) 1 BuiltIn PointSize - MemberDecorate 28(gl_PerVertex) 2 BuiltIn ClipDistance - MemberDecorate 28(gl_PerVertex) 3 BuiltIn CullDistance - Decorate 28(gl_PerVertex) Block + MemberDecorate 29(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 29(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 29(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 29(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 29(gl_PerVertex) Block 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -65,22 +66,23 @@ Warning, version 450 is not yet complete; most version-specific features are pre 23: TypePointer Output 6(int) 26: 9(int) Constant 1 27: TypeArray 7(float) 26 -28(gl_PerVertex): TypeStruct 8(fvec4) 7(float) 27 27 8(fvec4) - 29: 9(int) Constant 32 - 30: TypeArray 28(gl_PerVertex) 29 - 31: TypePointer Input 30 - 32(gl_in): 31(ptr) Variable Input - 33: TypePointer Input 8(fvec4) - 36: TypePointer Output 8(fvec4) + 28: TypeArray 8(fvec4) 26 +29(gl_PerVertex): TypeStruct 8(fvec4) 7(float) 27 27 8(fvec4) 28 + 30: 9(int) Constant 32 + 31: TypeArray 29(gl_PerVertex) 30 + 32: TypePointer Input 31 + 33(gl_in): 32(ptr) Variable Input + 34: TypePointer Input 8(fvec4) + 37: TypePointer Output 8(fvec4) 4(main): 2 Function None 3 5: Label 19: 6(int) Load 18(gl_InvocationID) 24: 23(ptr) AccessChain 16(gl_out) 19 20 21 Store 24 22 25: 6(int) Load 18(gl_InvocationID) - 34: 33(ptr) AccessChain 32(gl_in) 22 21 - 35: 8(fvec4) Load 34 - 37: 36(ptr) AccessChain 16(gl_out) 25 22 - Store 37 35 + 35: 34(ptr) AccessChain 33(gl_in) 22 21 + 36: 8(fvec4) Load 35 + 38: 37(ptr) AccessChain 16(gl_out) 25 22 + Store 38 36 Return FunctionEnd diff --git a/3rdparty/glslang/Test/spv.140.frag b/3rdparty/glslang/Test/spv.140.frag index 61ad1a6fb..ceeac47bf 100644 --- a/3rdparty/glslang/Test/spv.140.frag +++ b/3rdparty/glslang/Test/spv.140.frag @@ -14,7 +14,7 @@ layout(std140) uniform bn { layout(column_major) mat4 matca[4]; layout(row_major) mat4 matr; layout(column_major) mat4 matc; - mat4 matrdef; + layout(align=512, offset=1024) mat4 matrdef; }; uniform sampler2DRect sampR; diff --git a/3rdparty/glslang/Test/spv.300layout.vert b/3rdparty/glslang/Test/spv.300layout.vert index 81218b5d3..a32a95de7 100644 --- a/3rdparty/glslang/Test/spv.300layout.vert +++ b/3rdparty/glslang/Test/spv.300layout.vert @@ -25,7 +25,7 @@ layout(column_major) uniform T3 { // shared and column_major mat4 M3; // column_major layout(row_major) mat4 M4; // row major mat2x3 N2; // column_major - uvec3 uv3a[4]; + layout(align=16, offset=2048) uvec3 uv3a[4]; }; in uint uiuin; diff --git a/3rdparty/glslang/Test/spv.image.load-formatted.frag b/3rdparty/glslang/Test/spv.image.load-formatted.frag new file mode 100644 index 000000000..b0adc73bf --- /dev/null +++ b/3rdparty/glslang/Test/spv.image.load-formatted.frag @@ -0,0 +1,74 @@ +#version 450 + +#extension GL_EXT_shader_image_load_formatted : require + +layout(binding = 0) uniform image1D i1D; +layout(binding = 1) uniform image2D i2D; +layout(binding = 2) uniform image3D i3D; +layout(binding = 3) uniform imageCube iCube; +layout(binding = 4) uniform imageCubeArray iCubeArray; +layout(binding = 5) uniform image2DRect i2DRect; +layout(binding = 6) uniform image1DArray i1DArray; +layout(binding = 7) uniform image2DArray i2DArray; +layout(binding = 8) uniform imageBuffer iBuffer; +layout(binding = 9) uniform image2DMS i2DMS; +layout(binding = 10) uniform image2DMSArray i2DMSArray; + +flat in int ic1D; +flat in ivec2 ic2D; +flat in ivec3 ic3D; +flat in ivec4 ic4D; + +writeonly layout(binding = 1) uniform image2D wo2D; + +flat in uint value; + +out vec4 fragData; + +void main() +{ + ivec3 iv = ivec3(0); + iv.x += imageSize(i1D); + iv.xy += imageSize(i2D); + iv.xyz += imageSize(i3D); + iv.xy += imageSize(iCube); + iv.xyz += imageSize(iCubeArray); + iv.xy += imageSize(i2DRect); + iv.xy += imageSize(i1DArray); + iv.xyz += imageSize(i2DArray); + iv.x += imageSize(iBuffer); + iv.xy += imageSize(i2DMS); + iv.xyz += imageSize(i2DMSArray); + + iv.x += imageSamples(i2DMS); + iv.x += imageSamples(i2DMSArray); + + vec4 v = vec4(0.0); + v += imageLoad(i1D, ic1D); + imageStore(i1D, ic1D, v); + v += imageLoad(i2D, ic2D); + imageStore(i2D, ic2D, v); + v += imageLoad(i3D, ic3D); + imageStore(i3D, ic3D, v); + v += imageLoad(iCube, ic3D); + imageStore(iCube, ic3D, v); + v += imageLoad(iCubeArray, ic3D); + imageStore(iCubeArray, ic3D, v); + v += imageLoad(i2DRect, ic2D); + imageStore(i2DRect, ic2D, v); + v += imageLoad(i1DArray, ic2D); + imageStore(i1DArray, ic2D, v); + v += imageLoad(i2DArray, ic3D); + imageStore(i2DArray, ic3D, v); + v += imageLoad(iBuffer, ic1D); + imageStore(iBuffer, ic1D, v); + v += imageLoad(i2DMS, ic2D, 1); + imageStore(i2DMS, ic2D, 2, v); + v += imageLoad(i2DMSArray, ic3D, 3); + imageStore(i2DMSArray, ic3D, 4, v); + + imageStore(wo2D, ic2D, v); + + fragData = v; +} + diff --git a/3rdparty/glslang/Test/spv.matrix.frag b/3rdparty/glslang/Test/spv.matrix.frag index 10a52566f..315717378 100644 --- a/3rdparty/glslang/Test/spv.matrix.frag +++ b/3rdparty/glslang/Test/spv.matrix.frag @@ -43,4 +43,7 @@ void main() sum34 += mat3x4(v3, f, v3, f, v3, f); color += sum3 * m43 + sum4; + + color += vec4(m43); + color += vec4(vec3(mat2(f)), 7.2); } diff --git a/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc b/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc new file mode 100644 index 000000000..a0dd64dfb --- /dev/null +++ b/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc @@ -0,0 +1,14 @@ +#version 450 + +#extension GL_NVX_multiview_per_view_attributes :require + +layout(vertices = 4) out; +out gl_PerVertex { + int gl_ViewportMaskPerViewNV[]; + vec4 gl_PositionPerViewNV[]; + } gl_out[]; +void main() +{ + gl_out[gl_InvocationID].gl_ViewportMaskPerViewNV[0] = 1; + gl_out[gl_InvocationID].gl_PositionPerViewNV[0] = gl_in[1].gl_Position; +} diff --git a/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.vert b/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.vert new file mode 100644 index 000000000..dd64a16c3 --- /dev/null +++ b/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.vert @@ -0,0 +1,10 @@ +#version 450 + +#extension GL_NVX_multiview_per_view_attributes :require + +void main() +{ + gl_ViewportMaskPerViewNV[0] = 1; + gl_PositionPerViewNV[0] = gl_Position; +} + diff --git a/3rdparty/glslang/glslang/Include/BaseTypes.h b/3rdparty/glslang/glslang/Include/BaseTypes.h index 449e3aeac..f0e3c3781 100644 --- a/3rdparty/glslang/glslang/Include/BaseTypes.h +++ b/3rdparty/glslang/glslang/Include/BaseTypes.h @@ -207,6 +207,8 @@ enum TBuiltInVariable { EbvViewportMaskNV, EbvSecondaryPositionNV, EbvSecondaryViewportMaskNV, + EbvPositionPerViewNV, + EbvViewportMaskPerViewNV, #endif // HLSL built-ins that live only temporarily, until they get remapped // to one of the above. @@ -325,6 +327,8 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvViewportMaskNV: return "ViewportMaskNV"; case EbvSecondaryPositionNV: return "SecondaryPositionNV"; case EbvSecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; + case EbvPositionPerViewNV: return "PositionPerViewNV"; + case EbvViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; #endif default: return "unknown built-in variable"; } diff --git a/3rdparty/glslang/glslang/Include/Types.h b/3rdparty/glslang/glslang/Include/Types.h index 605f5f163..4a14843dc 100644 --- a/3rdparty/glslang/glslang/Include/Types.h +++ b/3rdparty/glslang/glslang/Include/Types.h @@ -1360,6 +1360,8 @@ public: case EbvViewportMaskNV: case EbvSecondaryPositionNV: case EbvSecondaryViewportMaskNV: + case EbvPositionPerViewNV: + case EbvViewportMaskPerViewNV: #endif return true; default: diff --git a/3rdparty/glslang/glslang/Include/revision.h b/3rdparty/glslang/glslang/Include/revision.h index 18a062550..0b08d2210 100644 --- a/3rdparty/glslang/glslang/Include/revision.h +++ b/3rdparty/glslang/glslang/Include/revision.h @@ -2,5 +2,5 @@ // For the version, it uses the latest git tag followed by the number of commits. // For the date, it uses the current date (when then script is run). -#define GLSLANG_REVISION "Overload400-PrecQual.1825" -#define GLSLANG_DATE "10-Feb-2017" +#define GLSLANG_REVISION "Overload400-PrecQual.1842" +#define GLSLANG_DATE "17-Feb-2017" diff --git a/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp b/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp index 287d6d69a..b9fa08255 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp @@ -3249,6 +3249,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "out int gl_ViewportMask[];" "out int gl_SecondaryViewportMaskNV[];" "out vec4 gl_SecondaryPositionNV;" + "out vec4 gl_PositionPerViewNV[];" + "out int gl_ViewportMaskPerViewNV[];" ); #endif @@ -3313,6 +3315,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "float gl_CullDistance[];" #ifdef NV_EXTENSIONS "vec4 gl_SecondaryPositionNV;" + "vec4 gl_PositionPerViewNV[];" #endif ); stageBuiltins[EShLangGeometry].append( @@ -3362,9 +3365,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV #ifdef NV_EXTENSIONS if (version >= 450) stageBuiltins[EShLangGeometry].append( - "out int gl_ViewportMask[];" - "out int gl_SecondaryViewportMaskNV[];" - "out vec4 gl_SecondaryPositionNV;" + "out int gl_ViewportMask[];" + "out int gl_SecondaryViewportMaskNV[];" + "out vec4 gl_SecondaryPositionNV;" + "out vec4 gl_PositionPerViewNV[];" + "out int gl_ViewportMaskPerViewNV[];" ); #endif @@ -3424,11 +3429,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangTessControl].append( "float gl_CullDistance[];" #ifdef NV_EXTENSIONS - "int gl_ViewportIndex;" - "int gl_Layer;" - "int gl_ViewportMask[];" + "int gl_ViewportIndex;" + "int gl_Layer;" + "int gl_ViewportMask[];" "vec4 gl_SecondaryPositionNV;" - "int gl_SecondaryViewportMaskNV[];" + "int gl_SecondaryViewportMaskNV[];" + "vec4 gl_PositionPerViewNV[];" + "int gl_ViewportMaskPerViewNV[];" #endif ); stageBuiltins[EShLangTessControl].append( @@ -3503,11 +3510,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV #ifdef NV_EXTENSIONS if (version >= 450) stageBuiltins[EShLangTessEvaluation].append( - "out int gl_ViewportIndex;" - "out int gl_Layer;" - "out int gl_ViewportMask[];" + "out int gl_ViewportIndex;" + "out int gl_Layer;" + "out int gl_ViewportMask[];" "out vec4 gl_SecondaryPositionNV;" - "out int gl_SecondaryViewportMaskNV[];" + "out int gl_SecondaryViewportMaskNV[];" + "out vec4 gl_PositionPerViewNV[];" + "out int gl_ViewportMaskPerViewNV[];" ); #endif @@ -4446,6 +4455,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf "highp float gl_PointSize;" #ifdef NV_EXTENSIONS "highp vec4 gl_SecondaryPositionNV;" + "highp vec4 gl_PositionPerViewNV[];" #endif "} gl_in[gl_MaxPatchVertices];" "\n"); @@ -4635,6 +4645,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf "float gl_CullDistance[];" #ifdef NV_EXTENSIONS "vec4 gl_SecondaryPositionNV;" + "vec4 gl_PositionPerViewNV[];" #endif ); s.append( @@ -5033,19 +5044,26 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_ViewportMask", 1, &E_GL_NV_viewport_array2); symbolTable.setVariableExtensions("gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering); symbolTable.setVariableExtensions("gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering); + symbolTable.setVariableExtensions("gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes); + symbolTable.setVariableExtensions("gl_ViewportMaskPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes); BuiltInVariable("gl_ViewportMask", EbvViewportMaskNV, symbolTable); BuiltInVariable("gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable); BuiltInVariable("gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable); + BuiltInVariable("gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable); + BuiltInVariable("gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable); - if (language != EShLangVertex) + if (language != EShLangVertex) { BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable); - + BuiltInVariable("gl_in", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable); + } BuiltInVariable("gl_out", "gl_Layer", EbvLayer, symbolTable); BuiltInVariable("gl_out", "gl_ViewportIndex", EbvViewportIndex, symbolTable); BuiltInVariable("gl_out", "gl_ViewportMask", EbvViewportMaskNV, symbolTable); BuiltInVariable("gl_out", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable); BuiltInVariable("gl_out", "gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable); + BuiltInVariable("gl_out", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable); + BuiltInVariable("gl_out", "gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable); #endif BuiltInVariable("gl_PatchVerticesIn", EbvPatchVertices, symbolTable); diff --git a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp index c659604c7..db77b41d5 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp @@ -4008,16 +4008,20 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi // - uniform offsets // - atomic_uint offsets const char* feature = "offset"; - requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature); - const char* exts[2] = { E_GL_ARB_enhanced_layouts, E_GL_ARB_shader_atomic_counters }; - profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, 2, exts, feature); - profileRequires(loc, EEsProfile, 310, nullptr, feature); + if (spvVersion.spv == 0) { + requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature); + const char* exts[2] = { E_GL_ARB_enhanced_layouts, E_GL_ARB_shader_atomic_counters }; + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, 2, exts, feature); + profileRequires(loc, EEsProfile, 310, nullptr, feature); + } publicType.qualifier.layoutOffset = value; return; } else if (id == "align") { const char* feature = "uniform buffer-member align"; - requireProfile(loc, ECoreProfile | ECompatibilityProfile, feature); - profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature); + if (spvVersion.spv == 0) { + requireProfile(loc, ECoreProfile | ECompatibilityProfile, feature); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature); + } // "The specified alignment must be a power of 2, or a compile-time error results." if (! IsPow2(value)) error(loc, "must be a power of 2", "align", ""); @@ -4495,8 +4499,11 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) } } } - } else if (type.isImage() && ! qualifier.writeonly) - error(loc, "image variables not declared 'writeonly' must have a format layout qualifier", "", ""); + } else if (type.isImage() && ! qualifier.writeonly) { + const char *explanation = "image variables declared 'writeonly' without a format layout qualifier"; + requireProfile(loc, ECoreProfile | ECompatibilityProfile, explanation); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation); + } if (qualifier.layoutPushConstant && type.getBasicType() != EbtBlock) error(loc, "can only be used with a block", "push_constant", ""); @@ -5546,8 +5553,10 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con if (memberType.isArray()) arrayUnsizedCheck(memberLoc, currentBlockQualifier, &memberType.getArraySizes(), false, member == typeList.size() - 1); if (memberQualifier.hasOffset()) { - requireProfile(memberLoc, ~EEsProfile, "offset on block member"); - profileRequires(memberLoc, ~EEsProfile, 440, E_GL_ARB_enhanced_layouts, "offset on block member"); + if (spvVersion.spv == 0) { + requireProfile(memberLoc, ~EEsProfile, "offset on block member"); + profileRequires(memberLoc, ~EEsProfile, 440, E_GL_ARB_enhanced_layouts, "offset on block member"); + } } if (memberType.containsOpaque()) diff --git a/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp b/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp index 9025e7612..0bcd3af58 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp @@ -182,6 +182,7 @@ void TParseVersions::initializeExtensionBehavior() // extensionBehavior[E_GL_ARB_cull_distance] = EBhDisable; // present for 4.5, but need extension control over block members extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable; + extensionBehavior[E_GL_EXT_shader_image_load_formatted] = EBhDisable; // #line and #include extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhDisable; @@ -201,6 +202,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_ARB_shader_viewport_layer_array] = EBhDisable; extensionBehavior[E_GL_NV_viewport_array2] = EBhDisable; extensionBehavior[E_GL_NV_stereo_view_rendering] = EBhDisable; + extensionBehavior[E_GL_NVX_multiview_per_view_attributes] = EBhDisable; #endif // AEP @@ -302,6 +304,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_ARB_sparse_texture_clamp 1\n" // "#define GL_ARB_cull_distance 1\n" // present for 4.5, but need extension control over block members "#define GL_EXT_shader_non_constant_global_initializers 1\n" + "#define GL_EXT_shader_image_load_formatted 1\n" #ifdef AMD_EXTENSIONS "#define GL_AMD_shader_ballot 1\n" diff --git a/3rdparty/glslang/glslang/MachineIndependent/Versions.h b/3rdparty/glslang/glslang/MachineIndependent/Versions.h index cf8f5e23d..b99033f8b 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Versions.h +++ b/3rdparty/glslang/glslang/MachineIndependent/Versions.h @@ -130,6 +130,7 @@ const char* const E_GL_ARB_sparse_texture_clamp = "GL_ARB_sparse_texture // const char* const E_GL_ARB_cull_distance = "GL_ARB_cull_distance"; // present for 4.5, but need extension control over block members const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers"; +const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_load_formatted"; // #line and #include const char* const E_GL_GOOGLE_cpp_style_line_directive = "GL_GOOGLE_cpp_style_line_directive"; @@ -149,6 +150,7 @@ const char* const E_SPV_NV_geometry_shader_passthrough = "GL_NV_geometr const char* const E_GL_ARB_shader_viewport_layer_array = "GL_ARB_shader_viewport_layer_array"; const char* const E_GL_NV_viewport_array2 = "GL_NV_viewport_array2"; const char* const E_GL_NV_stereo_view_rendering = "GL_NV_stereo_view_rendering"; +const char* const E_GL_NVX_multiview_per_view_attributes = "GL_NVX_multiview_per_view_attributes"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/3rdparty/glslang/gtests/Spv.FromFile.cpp b/3rdparty/glslang/gtests/Spv.FromFile.cpp index fc0ba06a6..dabd02180 100644 --- a/3rdparty/glslang/gtests/Spv.FromFile.cpp +++ b/3rdparty/glslang/gtests/Spv.FromFile.cpp @@ -386,6 +386,8 @@ INSTANTIATE_TEST_CASE_P( "spv.viewportArray2.tesc", "spv.stereoViewRendering.vert", "spv.stereoViewRendering.tesc", + "spv.multiviewPerViewAttributes.vert", + "spv.multiviewPerViewAttributes.tesc", })), FileNameAsCustomTestSuffix ); diff --git a/3rdparty/glslang/hlsl/hlslParseHelper.cpp b/3rdparty/glslang/hlsl/hlslParseHelper.cpp index 272632ba8..5ff54d482 100755 --- a/3rdparty/glslang/hlsl/hlslParseHelper.cpp +++ b/3rdparty/glslang/hlsl/hlslParseHelper.cpp @@ -543,7 +543,7 @@ bool HlslParseContext::parseMatrixSwizzleSelector(const TSourceLoc& loc, const T error(loc, "matrix component swizzle missing", compString.c_str(), ""); return false; } - startPos[numComps++] = c + 1; + startPos[numComps++] = (int)c + 1; } } @@ -2153,7 +2153,7 @@ TIntermTyped* HlslParseContext::handleAssignToMatrixSwizzle(const TSourceLoc& lo TIntermTyped* vectorAssign = nullptr; if (vector == nullptr) { // create a new intermediate vector variable to assign to - TType vectorType(matrix->getBasicType(), EvqTemporary, matrix->getQualifier().precision, swizzle.size()/2); + TType vectorType(matrix->getBasicType(), EvqTemporary, matrix->getQualifier().precision, (int)swizzle.size()/2); vector = intermediate.addSymbol(*makeInternalVariable("intermVec", vectorType), loc); // assign the right to the new vector @@ -3887,6 +3887,8 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con qualifier.builtIn = EbvGlobalInvocationId; else if (semanticUpperCase == "SV_GROUPTHREADID") qualifier.builtIn = EbvLocalInvocationId; + else if (semanticUpperCase == "SV_GROUPINDEX") + qualifier.builtIn = EbvLocalInvocationIndex; else if (semanticUpperCase == "SV_GROUPID") qualifier.builtIn = EbvWorkGroupId; else if (semanticUpperCase == "SV_DOMAINLOCATION") @@ -3903,8 +3905,6 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con qualifier.builtIn = EbvFragDepthLesser; else if( semanticUpperCase == "SV_STENCILREF") error(loc, "unimplemented; need ARB_shader_stencil_export", "SV_STENCILREF", ""); - else if( semanticUpperCase == "SV_GROUPINDEX") - error(loc, "unimplemented", "SV_GROUPINDEX", ""); } //