diff options
Diffstat (limited to 'libs/rs/rsProgram.h')
-rw-r--r-- | libs/rs/rsProgram.h | 65 |
1 files changed, 57 insertions, 8 deletions
diff --git a/libs/rs/rsProgram.h b/libs/rs/rsProgram.h index 57c654f..238ee7f 100644 --- a/libs/rs/rsProgram.h +++ b/libs/rs/rsProgram.h @@ -25,29 +25,78 @@ namespace android { namespace renderscript { +class ShaderCache; class Program : public ObjectBase { public: - Program(Context *, Element *in, Element *out); + const static uint32_t MAX_ATTRIBS = 8; + const static uint32_t MAX_UNIFORMS = 16; + const static uint32_t MAX_TEXTURE = 2; + + Program(Context *); + Program(Context *, const char * shaderText, uint32_t shaderLength, + const uint32_t * params, uint32_t paramLength); virtual ~Program(); - void bindAllocation(Allocation *); - void checkUpdatedAllocation(const Allocation *); + void bindAllocation(Allocation *, uint32_t slot); + virtual void createShader(); + + bool isUserProgram() const {return mUserShader.size() > 0;} + + void bindTexture(uint32_t slot, Allocation *); + void bindSampler(uint32_t slot, Sampler *); + + uint32_t getShaderID() const {return mShaderID;} + void setShader(const char *, uint32_t len); + + uint32_t getAttribCount() const {return mAttribCount;} + 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];} + + String8 getGLSLInputString() const; + String8 getGLSLOutputString() const; + String8 getGLSLConstantString() const; + + const Allocation * getTexture(uint32_t i) const {return mTextures[i].get();} protected: // Components not listed in "in" will be passed though // unless overwritten by components in out. - ObjectBaseRef<Element> mElementIn; - ObjectBaseRef<Element> mElementOut; + ObjectBaseRef<Element> *mInputElements; + ObjectBaseRef<Element> *mOutputElements; + ObjectBaseRef<Type> *mConstantTypes; + uint32_t mInputCount; + uint32_t mOutputCount; + uint32_t mConstantCount; - ObjectBaseRef<Allocation> mConstants; + ObjectBaseRef<Allocation> mConstants[MAX_UNIFORMS]; mutable bool mDirty; - + String8 mShader; + String8 mUserShader; + uint32_t mShaderID; + + uint32_t mTextureCount; + uint32_t mAttribCount; + uint32_t mUniformCount; + String8 mAttribNames[MAX_ATTRIBS]; + String8 mUniformNames[MAX_UNIFORMS]; + + // The difference between Textures and Constants is how they are accessed + // Texture lookups go though a sampler which in effect converts normalized + // coordinates into type specific. Multiple samples may also be taken + // and filtered. + // + // Constants are strictly accessed by programetic loads. + ObjectBaseRef<Allocation> mTextures[MAX_TEXTURE]; + ObjectBaseRef<Sampler> mSamplers[MAX_TEXTURE]; + + bool loadShader(Context *, uint32_t type); public: - void forceDirty() {mDirty = true;} + void forceDirty() const {mDirty = true;} }; |