From a2b71902e2d9326f8bbb362a541a718f6cfac74e Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 20 Jul 2017 16:44:17 -0600 Subject: [PATCH] Reflection: Fix #977: Expose getBinding(), use in new getUniformBinding(). --- glslang/MachineIndependent/ShaderLang.cpp | 1 + glslang/MachineIndependent/reflection.h | 21 ++++++++++----------- glslang/Public/ShaderLang.h | 1 + 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 26f81bd9..93f1568f 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -1836,6 +1836,7 @@ const char* TProgram::getUniformName(int index) const { return reflection const char* TProgram::getUniformBlockName(int index) const { return reflection->getUniformBlock(index).name.c_str(); } int TProgram::getUniformBlockSize(int index) const { return reflection->getUniformBlock(index).size; } int TProgram::getUniformIndex(const char* name) const { return reflection->getIndex(name); } +int TProgram::getUniformBinding(int index) const { return reflection->getUniform(index).getBinding(); } int TProgram::getUniformBlockIndex(int index) const { return reflection->getUniform(index).index; } int TProgram::getUniformBlockCounterIndex(int index) const { return reflection->getUniformBlock(index).counterIndex; } int TProgram::getUniformType(int index) const { return reflection->getUniform(index).glDefineType; } diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h index 7a1cc8ed..fedfbe8d 100644 --- a/glslang/MachineIndependent/reflection.h +++ b/glslang/MachineIndependent/reflection.h @@ -59,7 +59,15 @@ public: name(pName), offset(pOffset), glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1), type(pType.clone()) { } - void dump() const { + const TType* const getType() const { return type; } + int getBinding() const + { + if (type == nullptr || !type->getQualifier().hasBinding()) + return -1; + return type->getQualifier().layoutBinding; + } + void dump() const + { printf("%s: offset %d, type %x, size %d, index %d, binding %d", name.c_str(), offset, glDefineType, size, index, getBinding() ); @@ -68,8 +76,7 @@ public: printf("\n"); } - - const TType* const getType() const { return type; } + static TObjectReflection badReflection() { return TObjectReflection(); } TString name; int offset; @@ -78,15 +85,7 @@ public: int index; int counterIndex; - static TObjectReflection badReflection() { return TObjectReflection(); } - protected: - int getBinding() const { - if (type == nullptr || type->getQualifier().layoutBinding == TQualifier::layoutBindingEnd) - return -1; - return type->getQualifier().layoutBinding; - } - TObjectReflection() : offset(-1), glDefineType(-1), size(-1), index(-1), type(nullptr) { } const TType* type; diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 2a024787..12672eee 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -619,6 +619,7 @@ public: const char* getUniformBlockName(int blockIndex) const; // can be used for glGetActiveUniformBlockName() int getUniformBlockSize(int blockIndex) const; // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE) int getUniformIndex(const char* name) const; // can be used for glGetUniformIndices() + int getUniformBinding(int index) const; // returns the binding number int getUniformBlockIndex(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX) int getUniformBlockCounterIndex(int index) const; // returns block index of associated counter. int getUniformType(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)