diff options
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/Uniform.h')
-rw-r--r-- | src/3rdparty/angle/src/libANGLE/Uniform.h | 100 |
1 files changed, 77 insertions, 23 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/Uniform.h b/src/3rdparty/angle/src/libANGLE/Uniform.h index e62a583f3d..14c39387a6 100644 --- a/src/3rdparty/angle/src/libANGLE/Uniform.h +++ b/src/3rdparty/angle/src/libANGLE/Uniform.h @@ -18,53 +18,107 @@ namespace gl { +struct UniformTypeInfo; + +struct StaticallyUsed +{ + StaticallyUsed(); + StaticallyUsed(const StaticallyUsed &rhs); + virtual ~StaticallyUsed(); + + StaticallyUsed &operator=(const StaticallyUsed &rhs); + + void setStaticUse(GLenum shaderType, bool used); + void unionReferencesWith(const StaticallyUsed &other); + + bool vertexStaticUse; + bool fragmentStaticUse; + bool computeStaticUse; +}; // Helper struct representing a single shader uniform -struct LinkedUniform : public sh::Uniform +struct LinkedUniform : public sh::Uniform, public StaticallyUsed { LinkedUniform(); - LinkedUniform(GLenum type, GLenum precision, const std::string &name, unsigned int arraySize, const int blockIndex, const sh::BlockMemberInfo &blockInfo); + LinkedUniform(GLenum type, + GLenum precision, + const std::string &name, + const std::vector<unsigned int> &arraySizes, + const int binding, + const int offset, + const int location, + const int bufferIndex, + const sh::BlockMemberInfo &blockInfo); LinkedUniform(const sh::Uniform &uniform); LinkedUniform(const LinkedUniform &uniform); LinkedUniform &operator=(const LinkedUniform &uniform); - ~LinkedUniform(); + ~LinkedUniform() override; - size_t dataSize() const; - uint8_t *data(); - const uint8_t *data() const; bool isSampler() const; + bool isImage() const; + bool isAtomicCounter() const; bool isInDefaultBlock() const; bool isField() const; size_t getElementSize() const; - uint8_t *getDataPtrToElement(size_t elementIndex); - const uint8_t *getDataPtrToElement(size_t elementIndex) const; + size_t getElementComponents() const; + + const UniformTypeInfo *typeInfo; - int blockIndex; + // Identifies the containing buffer backed resource -- interface block or atomic counter buffer. + int bufferIndex; sh::BlockMemberInfo blockInfo; +}; - private: - mutable rx::MemoryBuffer mLazyData; +struct BufferVariable : public sh::ShaderVariable, public StaticallyUsed +{ + BufferVariable(); + BufferVariable(GLenum type, + GLenum precision, + const std::string &name, + const std::vector<unsigned int> &arraySizes, + const int bufferIndex, + const sh::BlockMemberInfo &blockInfo); + ~BufferVariable() override; + + int bufferIndex; + sh::BlockMemberInfo blockInfo; + + int topLevelArraySize; +}; + +// Parent struct for atomic counter, uniform block, and shader storage block buffer, which all +// contain a group of shader variables, and have a GL buffer backed. +struct ShaderVariableBuffer : public StaticallyUsed +{ + ShaderVariableBuffer(); + ShaderVariableBuffer(const ShaderVariableBuffer &other); + ~ShaderVariableBuffer() override; + int numActiveVariables() const; + + int binding; + unsigned int dataSize; + std::vector<unsigned int> memberIndexes; }; -// Helper struct representing a single shader uniform block -struct UniformBlock +using AtomicCounterBuffer = ShaderVariableBuffer; + +// Helper struct representing a single shader interface block +struct InterfaceBlock : public ShaderVariableBuffer { - UniformBlock(); - UniformBlock(const std::string &nameIn, bool isArrayIn, unsigned int arrayElementIn); - UniformBlock(const UniformBlock &other) = default; - UniformBlock &operator=(const UniformBlock &other) = default; + InterfaceBlock(); + InterfaceBlock(const std::string &nameIn, + const std::string &mappedNameIn, + bool isArrayIn, + unsigned int arrayElementIn, + int bindingIn); std::string nameWithArrayIndex() const; + std::string mappedNameWithArrayIndex() const; std::string name; + std::string mappedName; bool isArray; unsigned int arrayElement; - unsigned int dataSize; - - bool vertexStaticUse; - bool fragmentStaticUse; - - std::vector<unsigned int> memberUniformIndexes; }; } |