diff --git a/3rdparty/glslang/CMakeLists.txt b/3rdparty/glslang/CMakeLists.txt index 9aa72315e..886f694dd 100644 --- a/3rdparty/glslang/CMakeLists.txt +++ b/3rdparty/glslang/CMakeLists.txt @@ -45,7 +45,7 @@ if(USE_CCACHE) endif() # Precompiled header macro. Parameters are source file list and filename for pch cpp file. -macro(PCH SRCS PCHCPP) +macro(glslang_pch SRCS PCHCPP) if(MSVC) if (CMAKE_GENERATOR MATCHES "^Visual Studio") set(PCH_NAME "$(IntDir)\\pch.pch") @@ -58,7 +58,7 @@ macro(PCH SRCS PCHCPP) set_source_files_properties(${PCHCPP} PROPERTIES COMPILE_FLAGS "/Ycpch.h /Fp${PCH_NAME} /Zm300" OBJECT_OUTPUTS "${PCH_NAME}") list(APPEND ${SRCS} "${PCHCPP}") endif() -endmacro(PCH) +endmacro(glslang_pch) project(glslang) # make testing optional diff --git a/3rdparty/glslang/SPIRV/SpvTools.cpp b/3rdparty/glslang/SPIRV/SpvTools.cpp index bc9bf9e08..05f234cc1 100755 --- a/3rdparty/glslang/SPIRV/SpvTools.cpp +++ b/3rdparty/glslang/SPIRV/SpvTools.cpp @@ -152,6 +152,7 @@ void SpirvToolsLegalize(const glslang::TIntermediate&, std::vector out << std::endl; }); + optimizer.RegisterPass(spvtools::CreateDeadBranchElimPass()); optimizer.RegisterPass(spvtools::CreateMergeReturnPass()); optimizer.RegisterPass(spvtools::CreateInlineExhaustivePass()); optimizer.RegisterPass(spvtools::CreateEliminateDeadFunctionsPass()); diff --git a/3rdparty/glslang/Test/baseResults/cppBad.vert.out b/3rdparty/glslang/Test/baseResults/cppBad.vert.out index 1a2286aa9..a5267ff64 100644 --- a/3rdparty/glslang/Test/baseResults/cppBad.vert.out +++ b/3rdparty/glslang/Test/baseResults/cppBad.vert.out @@ -10,6 +10,7 @@ ERROR: 5 compilation errors. No code generated. Shader version: 100 ERROR: node is still EOpNull! 0:? Linker Objects +0:? 'n' ( global highp int) Linked vertex stage: @@ -19,4 +20,5 @@ ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry Shader version: 100 ERROR: node is still EOpNull! 0:? Linker Objects +0:? 'n' ( global highp int) diff --git a/3rdparty/glslang/Test/baseResults/cppSimple.vert.out b/3rdparty/glslang/Test/baseResults/cppSimple.vert.out index 8da3ae67a..85beb4eb5 100644 --- a/3rdparty/glslang/Test/baseResults/cppSimple.vert.out +++ b/3rdparty/glslang/Test/baseResults/cppSimple.vert.out @@ -35,9 +35,9 @@ ERROR: 0:155: '#else' : unexpected tokens following directive ERROR: 0:158: '#else' : #else after #else ERROR: 0:160: '#endif' : unexpected tokens following directive ERROR: 0:164: '#define' : duplicate macro parameter -ERROR: 0:173: '#define' : Macro redefined; different number of arguments: m4 -ERROR: 0:178: '#define' : Macro redefined; different number of arguments: m5 -ERROR: 0:182: '#define' : Macro redefined; different number of arguments: m6 +ERROR: 0:173: '#define' : Macro redefined; function-like versus object-like: m4 +ERROR: 0:177: '#define' : Macro redefined; function-like versus object-like: m5 +ERROR: 0:181: '#define' : Macro redefined; different number of arguments: m6 ERROR: 0:185: '#define' : Macro redefined; different substitutions: m7 ERROR: 0:192: '#define' : Macro redefined; different substitutions: m8 ERROR: 0:196: '#define' : Macro redefined; different argument names: m9 @@ -77,7 +77,7 @@ ERROR: 12:9000: 'preprocessor evaluation' : expected ')' ERROR: 12:9002: '#if' : unexpected tokens following directive ERROR: 12:9014: 'FOOOM' : undeclared identifier ERROR: 12:9014: '=' : cannot convert from ' temp float' to ' global int' -ERROR: 12:9016: 'preprocessor evaluation' : can't evaluate expression +ERROR: 12:9015: 'preprocessor evaluation' : can't evaluate expression ERROR: 12:9016: 'preprocessor evaluation' : bad expression ERROR: 12:9500: 'preprocessor evaluation' : bad expression ERROR: 12:9500: '#if' : unexpected tokens following directive diff --git a/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.out b/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.out index 56bfe010f..57b020c67 100644 --- a/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.out +++ b/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.out @@ -28,3 +28,39 @@ int main(){ 1.2 2E10 5u - 5l f } +struct S { + int member1; + float member2; + vec4 member3; +}; + + + + + + + + + + + + + +void foo() +{ + S s; + s . member2 + s . member1; + s . member3 . zyx; + s . member2 . xxyz; + s . member2 . yyz; + s . member2 . xxyz(); + s . member2 . yzy; + vec3 a = vec3(0);vec3 b = a . zxyz;vec3 b = a . xxyz;vec3 b = a . yyz;vec3 b = a . xxyz();vec3 b = a . yzy;vec3 b = a . z; + + + yyz; + yzy + + +} + diff --git a/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out b/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out new file mode 100644 index 000000000..7eb459342 --- /dev/null +++ b/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out @@ -0,0 +1,93 @@ +spv.xfbOffsetOnStructMembersAssignment.vert +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 40 + + Capability Shader + Capability TransformFeedback + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 21 34 38 39 + ExecutionMode 4 Xfb + Source GLSL 450 + Name 4 "main" + Name 7 "S" + MemberName 7(S) 0 "x1_out" + MemberName 7(S) 1 "x2_out" + Name 9 "s1" + Name 19 "S2" + MemberName 19(S2) 0 "y1_out" + MemberName 19(S2) 1 "y2_out" + Name 21 "s2" + Name 32 "gl_PerVertex" + MemberName 32(gl_PerVertex) 0 "gl_Position" + MemberName 32(gl_PerVertex) 1 "gl_PointSize" + MemberName 32(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 32(gl_PerVertex) 3 "gl_CullDistance" + Name 34 "" + Name 38 "gl_VertexID" + Name 39 "gl_InstanceID" + MemberDecorate 7(S) 0 Offset 16 + MemberDecorate 7(S) 1 Offset 20 + Decorate 9(s1) Location 0 + Decorate 9(s1) XfbBuffer 2 + Decorate 9(s1) XfbStride 24 + MemberDecorate 19(S2) 0 Offset 8 + MemberDecorate 19(S2) 1 Offset 12 + Decorate 21(s2) Location 5 + Decorate 21(s2) XfbBuffer 1 + Decorate 21(s2) XfbStride 28 + MemberDecorate 32(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 32(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 32(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 32(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 32(gl_PerVertex) Block + Decorate 34 XfbBuffer 0 + Decorate 34 XfbStride 0 + Decorate 38(gl_VertexID) BuiltIn VertexId + Decorate 39(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7(S): TypeStruct 6(float) 6(float) + 8: TypePointer Output 7(S) + 9(s1): 8(ptr) Variable Output + 10: TypeInt 32 1 + 11: 10(int) Constant 0 + 12: 6(float) Constant 1084227584 + 13: TypePointer Output 6(float) + 15: 10(int) Constant 1 + 16: 6(float) Constant 1086324736 + 18: TypeVector 6(float) 4 + 19(S2): TypeStruct 6(float) 18(fvec4) + 20: TypePointer Output 19(S2) + 21(s2): 20(ptr) Variable Output + 22: 6(float) Constant 1088421888 + 24: 6(float) Constant 1065353216 + 25: 6(float) Constant 0 + 26: 18(fvec4) ConstantComposite 24 25 25 24 + 27: TypePointer Output 18(fvec4) + 29: TypeInt 32 0 + 30: 29(int) Constant 1 + 31: TypeArray 6(float) 30 +32(gl_PerVertex): TypeStruct 18(fvec4) 6(float) 31 31 + 33: TypePointer Output 32(gl_PerVertex) + 34: 33(ptr) Variable Output + 35: 18(fvec4) ConstantComposite 25 25 25 25 + 37: TypePointer Input 10(int) + 38(gl_VertexID): 37(ptr) Variable Input +39(gl_InstanceID): 37(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 14: 13(ptr) AccessChain 9(s1) 11 + Store 14 12 + 17: 13(ptr) AccessChain 9(s1) 15 + Store 17 16 + 23: 13(ptr) AccessChain 21(s2) 11 + Store 23 22 + 28: 27(ptr) AccessChain 21(s2) 15 + Store 28 26 + 36: 27(ptr) AccessChain 34 11 + Store 36 35 + Return + FunctionEnd diff --git a/3rdparty/glslang/Test/cppSimple.vert b/3rdparty/glslang/Test/cppSimple.vert old mode 100644 new mode 100755 index fdd14221b..2f7de30f7 --- a/3rdparty/glslang/Test/cppSimple.vert +++ b/3rdparty/glslang/Test/cppSimple.vert @@ -170,7 +170,7 @@ int a = length("aoenatuh"); // ERROR // ERROR #define m4(b) -#define m4 (b) +#define m4 // ERROR #define m5 (b) @@ -178,7 +178,7 @@ int a = length("aoenatuh"); // ERROR // ERROR #define m6(a) -#define m6 +#define m6(a,b) // ERROR (whitespace) #define m7 (a) diff --git a/3rdparty/glslang/Test/preprocessor.simple.vert b/3rdparty/glslang/Test/preprocessor.simple.vert old mode 100644 new mode 100755 index 352227192..788df76ce --- a/3rdparty/glslang/Test/preprocessor.simple.vert +++ b/3rdparty/glslang/Test/preprocessor.simple.vert @@ -27,3 +27,39 @@ int main() { += -= *= /= %= <<= >>= &= |= ^= 1.2 2E10 5u -5lf } + +struct S { + int member1; + float member2; + vec4 member3; +}; + +#define xyz xxyz +#define yzy() yyz + +#define FUN_MAC() \ + vec3 a = vec3(0); \ + vec3 b = a.zxyz; \ + vec3 b = a.xyz; \ + vec3 b = a.yzy(); \ + vec3 b = a.xyz(); \ + vec3 b = a.yzy; \ + vec3 b = a.z; + +void foo() +{ + S s; + s.member2 + s.member1; + s.member3.zyx; + s.member2.xyz; + s.member2.yzy(); + s.member2.xyz(); + s.member2.yzy; + FUN_MAC() + yzy + + (); + yzy + + +} diff --git a/3rdparty/glslang/Test/spv.xfbOffsetOnStructMembersAssignment.vert b/3rdparty/glslang/Test/spv.xfbOffsetOnStructMembersAssignment.vert new file mode 100644 index 000000000..e6619c582 --- /dev/null +++ b/3rdparty/glslang/Test/spv.xfbOffsetOnStructMembersAssignment.vert @@ -0,0 +1,23 @@ +#version 450 + +layout(xfb_buffer=2) out; + +struct S { + float x1_out; + float x2_out; +}; + +layout(location=0, xfb_offset = 16) out S s1; + +layout(location=5, xfb_buffer=1, xfb_offset=8) out struct S2 { + float y1_out; + vec4 y2_out; +}s2; + +void main() { + s1.x1_out = 5.0; + s1.x2_out = 6.0; + s2.y1_out = 7.0; + s2.y2_out = vec4(1.0, 0.0, 0.0, 1.0); + gl_Position = vec4(0.0); +} diff --git a/3rdparty/glslang/glslang/CMakeLists.txt b/3rdparty/glslang/glslang/CMakeLists.txt index 32fadcdd8..5f51476ba 100644 --- a/3rdparty/glslang/glslang/CMakeLists.txt +++ b/3rdparty/glslang/glslang/CMakeLists.txt @@ -80,7 +80,7 @@ set(HEADERS # WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) # set(BISON_GLSLParser_OUTPUT_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp) -PCH(SOURCES MachineIndependent/pch.cpp) +glslang_pch(SOURCES MachineIndependent/pch.cpp) add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS}) set_property(TARGET glslang PROPERTY FOLDER glslang) diff --git a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp index 74cd5ce5e..fba75dda2 100755 --- a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp @@ -4041,7 +4041,7 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT if (currentBlockQualifier.storage == EvqVaryingOut && globalOutputDefaults.hasXfbBuffer()) { if (!currentBlockQualifier.hasXfbBuffer()) currentBlockQualifier.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer; - fixBlockXfbOffsets(currentBlockQualifier, newTypeList); + fixXfbOffsets(currentBlockQualifier, newTypeList); } // Edit and error check the container against the redeclaration @@ -6116,6 +6116,11 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden // fix up fixOffset(loc, *symbol); + if (symbol->getType().getBasicType() == EbtStruct) { + fixXfbOffsets(symbol->getWritableType().getQualifier(), + *(symbol->getWritableType().getWritableStruct())); + } + return initNode; } @@ -6840,7 +6845,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con // Process the members fixBlockLocations(loc, currentBlockQualifier, typeList, memberWithLocation, memberWithoutLocation); - fixBlockXfbOffsets(currentBlockQualifier, typeList); + fixXfbOffsets(currentBlockQualifier, typeList); fixBlockUniformOffsets(currentBlockQualifier, typeList); for (unsigned int member = 0; member < typeList.size(); ++member) layoutTypeCheck(typeList[member].loc, *typeList[member].type); @@ -7091,7 +7096,7 @@ void TParseContext::fixBlockLocations(const TSourceLoc& loc, TQualifier& qualifi } } -void TParseContext::fixBlockXfbOffsets(TQualifier& qualifier, TTypeList& typeList) +void TParseContext::fixXfbOffsets(TQualifier& qualifier, TTypeList& typeList) { // "If a block is qualified with xfb_offset, all its // members are assigned transform feedback buffer offsets. If a block is not qualified with xfb_offset, any diff --git a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h index b513f4978..14421a267 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h +++ b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h @@ -403,7 +403,7 @@ public: void blockStageIoCheck(const TSourceLoc&, const TQualifier&); void blockQualifierCheck(const TSourceLoc&, const TQualifier&, bool instanceName); void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation); - void fixBlockXfbOffsets(TQualifier&, TTypeList&); + void fixXfbOffsets(TQualifier&, TTypeList&); void fixBlockUniformOffsets(TQualifier&, TTypeList&); void addQualifierToExisting(const TSourceLoc&, TQualifier, const TString& identifier); void addQualifierToExisting(const TSourceLoc&, TQualifier, TIdentifierList&); diff --git a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp old mode 100644 new mode 100755 index 12353550d..2000b7774 --- a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp @@ -109,11 +109,12 @@ int TPpContext::CPPdefine(TPpToken* ppToken) // save the macro name const int defAtom = atomStrings.getAddAtom(ppToken->name); + TSourceLoc defineLoc = ppToken->loc; // because ppToken might go to the next line before we report errors // gather parameters to the macro, between (...) token = scanToken(ppToken); - if (token == '(' && ! ppToken->space) { - mac.emptyArgs = 1; + if (token == '(' && !ppToken->space) { + mac.functionLike = 1; do { token = scanToken(ppToken); if (mac.args.size() == 0 && token == ')') @@ -123,7 +124,6 @@ int TPpContext::CPPdefine(TPpToken* ppToken) return token; } - mac.emptyArgs = 0; const int argAtom = atomStrings.getAddAtom(ppToken->name); // check for duplication of parameter name @@ -149,7 +149,6 @@ int TPpContext::CPPdefine(TPpToken* ppToken) } // record the definition of the macro - TSourceLoc defineLoc = ppToken->loc; // because ppToken is going to go to the next line before we report errors while (token != '\n' && token != EndOfInput) { mac.body.putToken(token, ppToken); token = scanToken(ppToken); @@ -164,7 +163,9 @@ int TPpContext::CPPdefine(TPpToken* ppToken) // Already defined -- need to make sure they are identical: // "Two replacement lists are identical if and only if the preprocessing tokens in both have the same number, // ordering, spelling, and white-space separation, where all white-space separations are considered identical." - if (existing->args.size() != mac.args.size() || existing->emptyArgs != mac.emptyArgs) + if (existing->functionLike != mac.functionLike) + parseContext.ppError(defineLoc, "Macro redefined; function-like versus object-like:", "#define", atomStrings.getString(defAtom)); + else if (existing->args.size() != mac.args.size()) parseContext.ppError(defineLoc, "Macro redefined; different number of arguments:", "#define", atomStrings.getString(defAtom)); else { if (existing->args != mac.args) @@ -1190,14 +1191,20 @@ MacroExpandResult TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, b TSourceLoc loc = ppToken->loc; // in case we go to the next line before discovering the error in->mac = macro; - if (macro->args.size() > 0 || macro->emptyArgs) { - int token = scanToken(ppToken); + if (macro->functionLike) { + // We don't know yet if this will be a successful call of a + // function-like macro; need to look for a '(', but without trashing + // the passed in ppToken, until we know we are no longer speculative. + TPpToken parenToken; + int token = scanToken(&parenToken); if (newLineOkay) { while (token == '\n') - token = scanToken(ppToken); + token = scanToken(&parenToken); } if (token != '(') { - UngetToken(token, ppToken); + // Function-like macro called with object-like syntax: okay, don't expand. + // (We ate exactly one token that might not be white space; put it back. + UngetToken(token, &parenToken); delete in; return MacroExpandNotStarted; } diff --git a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h index 5c2608161..64681fc33 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h +++ b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h @@ -267,12 +267,12 @@ public: // struct MacroSymbol { - MacroSymbol() : emptyArgs(0), busy(0), undef(0) { } + MacroSymbol() : functionLike(0), busy(0), undef(0) { } TVector args; TokenStream body; - unsigned emptyArgs : 1; - unsigned busy : 1; - unsigned undef : 1; + unsigned functionLike : 1; // 0 means object-like, 1 means function-like + unsigned busy : 1; + unsigned undef : 1; }; typedef TMap TSymbolMap; diff --git a/3rdparty/glslang/gtests/CMakeLists.txt b/3rdparty/glslang/gtests/CMakeLists.txt index 4832baac4..f678cb6ea 100644 --- a/3rdparty/glslang/gtests/CMakeLists.txt +++ b/3rdparty/glslang/gtests/CMakeLists.txt @@ -25,7 +25,7 @@ if(BUILD_TESTING) # -- Remapper tests ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp) - PCH(TEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/pch.cpp) + glslang_pch(TEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/pch.cpp) add_executable(glslangtests ${TEST_SOURCES}) set_property(TARGET glslangtests PROPERTY FOLDER tests) diff --git a/3rdparty/glslang/gtests/Spv.FromFile.cpp b/3rdparty/glslang/gtests/Spv.FromFile.cpp index ca558cd8b..bc05eede9 100644 --- a/3rdparty/glslang/gtests/Spv.FromFile.cpp +++ b/3rdparty/glslang/gtests/Spv.FromFile.cpp @@ -440,6 +440,7 @@ INSTANTIATE_TEST_CASE_P( "spv.rankShift.comp", "spv.specConst.vert", "spv.OVR_multiview.vert", + "spv.xfbOffsetOnStructMembersAssignment.vert", })), FileNameAsCustomTestSuffix ); diff --git a/3rdparty/glslang/hlsl/CMakeLists.txt b/3rdparty/glslang/hlsl/CMakeLists.txt index cf2f8f321..f918d7a13 100644 --- a/3rdparty/glslang/hlsl/CMakeLists.txt +++ b/3rdparty/glslang/hlsl/CMakeLists.txt @@ -17,7 +17,7 @@ set(HEADERS hlslGrammar.h hlslParseables.h) -PCH(SOURCES pch.cpp) +glslang_pch(SOURCES pch.cpp) add_library(HLSL ${LIB_TYPE} ${SOURCES} ${HEADERS}) set_property(TARGET HLSL PROPERTY FOLDER hlsl) diff --git a/3rdparty/glslang/hlsl/hlslParseHelper.cpp b/3rdparty/glslang/hlsl/hlslParseHelper.cpp index 135e1d288..ac2943284 100755 --- a/3rdparty/glslang/hlsl/hlslParseHelper.cpp +++ b/3rdparty/glslang/hlsl/hlslParseHelper.cpp @@ -8555,7 +8555,7 @@ void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TS // Process the members fixBlockLocations(loc, type.getQualifier(), typeList, memberWithLocation, memberWithoutLocation); - fixBlockXfbOffsets(type.getQualifier(), typeList); + fixXfbOffsets(type.getQualifier(), typeList); fixBlockUniformOffsets(type.getQualifier(), typeList); // reverse merge, so that currentBlockQualifier now has all layout information @@ -8638,7 +8638,7 @@ void HlslParseContext::fixBlockLocations(const TSourceLoc& loc, TQualifier& qual } } -void HlslParseContext::fixBlockXfbOffsets(TQualifier& qualifier, TTypeList& typeList) +void HlslParseContext::fixXfbOffsets(TQualifier& qualifier, TTypeList& typeList) { // "If a block is qualified with xfb_offset, all its // members are assigned transform feedback buffer offsets. If a block is not qualified with xfb_offset, any diff --git a/3rdparty/glslang/hlsl/hlslParseHelper.h b/3rdparty/glslang/hlsl/hlslParseHelper.h index 7cb898cf4..f99d5c73f 100644 --- a/3rdparty/glslang/hlsl/hlslParseHelper.h +++ b/3rdparty/glslang/hlsl/hlslParseHelper.h @@ -155,7 +155,7 @@ public: void declareBlock(const TSourceLoc&, TType&, const TString* instanceName = 0); void declareStructBufferCounter(const TSourceLoc& loc, const TType& bufferType, const TString& name); void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation); - void fixBlockXfbOffsets(TQualifier&, TTypeList&); + void fixXfbOffsets(TQualifier&, TTypeList&); void fixBlockUniformOffsets(const TQualifier&, TTypeList&); void addQualifierToExisting(const TSourceLoc&, TQualifier, const TString& identifier); void addQualifierToExisting(const TSourceLoc&, TQualifier, TIdentifierList&); diff --git a/3rdparty/glslang/known_good.json b/3rdparty/glslang/known_good.json index ee8288568..28aafdc9a 100755 --- a/3rdparty/glslang/known_good.json +++ b/3rdparty/glslang/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "fb996dce752507132c40c255898154cce6c072c5" + "commit" : "9d699f6d4038f432c55310d5d0b4a6d507c1b686" }, { "name" : "spirv-tools/external/spirv-headers",