diff --git a/renderdoc/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp b/renderdoc/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp index 9406d76d3..b8d0707e6 100644 --- a/renderdoc/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp +++ b/renderdoc/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp @@ -1859,6 +1859,10 @@ void TShader::setUniformLocationBase(int base) { intermediate->setUniformLocationBase(base); } +void TShader::setIOLocationBase(int base) +{ + intermediate->setIOLocationBase(base); +} void TShader::setBindingsPerResourceType() { intermediate->setBindingsPerResourceType(); } void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); } void TShader::setResourceSetBinding(const std::vector& base) { intermediate->setResourceSetBinding(base); } diff --git a/renderdoc/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp b/renderdoc/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp index f7ab245dd..39b13cbbd 100644 --- a/renderdoc/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp +++ b/renderdoc/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp @@ -866,8 +866,8 @@ private: TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate) : referenceIntermediate(intermediate) , nextUniformLocation(intermediate.getUniformLocationBase()) - , nextInputLocation(0) - , nextOutputLocation(0) + , nextInputLocation(intermediate.getIOLocationBase()) + , nextOutputLocation(intermediate.getIOLocationBase()) { memset(stageMask, false, sizeof(bool) * (EShLangCount + 1)); memset(stageIntermediates, 0, sizeof(TIntermediate*) * (EShLangCount)); diff --git a/renderdoc/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h b/renderdoc/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h index 209a72458..2073476e6 100644 --- a/renderdoc/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h +++ b/renderdoc/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h @@ -362,6 +362,7 @@ public: spirvRequirement(nullptr), spirvExecutionMode(nullptr), uniformLocationBase(0), + ioLocationBase(0), quadDerivMode(false), reqFullQuadsMode(false) { localSize[0] = 1; @@ -1019,6 +1020,9 @@ public: void setUniformLocationBase(int base) { uniformLocationBase = base; } int getUniformLocationBase() const { return uniformLocationBase; } + + void setIOLocationBase(int base) { ioLocationBase = base; } + int getIOLocationBase() const { return ioLocationBase; } void setNeedsLegalization() { needToLegalize = true; } bool needsLegalization() const { return needToLegalize; } @@ -1331,6 +1335,7 @@ protected: std::map bindlessImageModeCaller; std::unordered_map uniformLocationOverrides; int uniformLocationBase; + int ioLocationBase; bool quadDerivMode; bool reqFullQuadsMode; TNumericFeatures numericFeatures; diff --git a/renderdoc/3rdparty/glslang/glslang/Public/ShaderLang.h b/renderdoc/3rdparty/glslang/glslang/Public/ShaderLang.h index 07e4ca5c7..ee982d68d 100644 --- a/renderdoc/3rdparty/glslang/glslang/Public/ShaderLang.h +++ b/renderdoc/3rdparty/glslang/glslang/Public/ShaderLang.h @@ -499,6 +499,7 @@ public: void setBindingsPerResourceType(); void addUniformLocationOverride(const char* name, int loc); void setUniformLocationBase(int base); + void setIOLocationBase(int base); void setInvertY(bool invert); void setDxPositionW(bool dxPosW); void setEnhancedMsgs();