Moving attrib creation to Mesh. Adding arrays as shader inputs.
Removing fixed size arrays.
Change-Id: I0213e403a2f1283dd43f21bea770aeb059561903
diff --git a/libs/rs/rsProgram.h b/libs/rs/rsProgram.h
index c93033b..46692fd 100644
--- a/libs/rs/rsProgram.h
+++ b/libs/rs/rsProgram.h
@@ -32,8 +32,6 @@
class Program : public ObjectBase
{
public:
- const static uint32_t MAX_ATTRIBS = 8;
- const static uint32_t MAX_UNIFORMS = 16;
Program(Context *);
Program(Context *, const char * shaderText, uint32_t shaderLength,
@@ -55,12 +53,14 @@
uint32_t getUniformCount() const {return mUniformCount;}
const String8 & getAttribName(uint32_t i) const {return mAttribNames[i];}
const String8 & getUniformName(uint32_t i) const {return mUniformNames[i];}
+ uint32_t getUniformArraySize(uint32_t i) const {return mUniformArraySizes[i];}
String8 getGLSLInputString() const;
String8 getGLSLOutputString() const;
String8 getGLSLConstantString() const;
bool isValid() const {return mIsValid;}
+ void forceDirty() const {mDirty = true;}
protected:
// Components not listed in "in" will be passed though
@@ -68,6 +68,7 @@
ObjectBaseRef<Element> *mInputElements;
ObjectBaseRef<Element> *mOutputElements;
ObjectBaseRef<Type> *mConstantTypes;
+ ObjectBaseRef<Allocation> *mConstants;
uint32_t mInputCount;
uint32_t mOutputCount;
uint32_t mConstantCount;
@@ -77,9 +78,9 @@
// Applies to vertex and fragment shaders only
void appendUserConstants();
void setupUserConstants(Context *rsc, ShaderCache *sc, bool isFragment);
- void initAddUserElement(const Element *e, String8 *names, uint32_t *count, const char *prefix);
+ void initAddUserElement(const Element *e, String8 *names, uint32_t *arrayLengths, uint32_t *count, const char *prefix);
- ObjectBaseRef<Allocation> mConstants[MAX_UNIFORMS];
+ void initAttribAndUniformArray();
mutable bool mDirty;
String8 mShader;
@@ -89,8 +90,13 @@
uint32_t mTextureCount;
uint32_t mAttribCount;
uint32_t mUniformCount;
- String8 mAttribNames[MAX_ATTRIBS];
- String8 mUniformNames[MAX_UNIFORMS];
+ String8 *mAttribNames;
+ String8 *mUniformNames;
+ uint32_t *mUniformArraySizes;
+
+ void logUniform(const Element *field, const float *fd, uint32_t arraySize );
+ void setUniform(Context *rsc, const Element *field, const float *fd, int32_t slot, uint32_t arraySize );
+ void initMemberVars();
// The difference between Textures and Constants is how they are accessed
// Texture lookups go though a sampler which in effect converts normalized
@@ -102,9 +108,6 @@
ObjectBaseRef<Sampler> *mSamplers;
bool loadShader(Context *, uint32_t type);
-
-public:
- void forceDirty() const {mDirty = true;}
};