summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/Uniform.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/Uniform.h')
-rw-r--r--src/3rdparty/angle/src/libANGLE/Uniform.h100
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;
};
}