diff options
author | Alex Sakhartchouk <alexst@google.com> | 2010-09-14 09:50:43 -0700 |
---|---|---|
committer | Alex Sakhartchouk <alexst@google.com> | 2010-09-14 09:50:43 -0700 |
commit | c984dd73c6f96d16e11813ae433ef70f7648ae77 (patch) | |
tree | a40cb9dc5d1b3020e4cf33f575714e72ef3e805f /libs/rs/rsProgram.cpp | |
parent | bcd3387eed8910c540d92f26fb6680e9e0ce0588 (diff) |
Shader changes to allow for more flexible constant binding.
Change-Id: Ic66e6e2a371c6e3d5dce1b00f63acab8c09bd110
Diffstat (limited to 'libs/rs/rsProgram.cpp')
-rw-r--r-- | libs/rs/rsProgram.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/libs/rs/rsProgram.cpp b/libs/rs/rsProgram.cpp index 6041db80b279..24414912fbc8 100644 --- a/libs/rs/rsProgram.cpp +++ b/libs/rs/rsProgram.cpp @@ -46,6 +46,7 @@ Program::Program(Context *rsc) : ObjectBase(rsc) mOutputCount = 0; mConstantCount = 0; mIsValid = false; + mIsInternal = false; } Program::Program(Context *rsc, const char * shaderText, uint32_t shaderLength, @@ -97,6 +98,14 @@ Program::Program(Context *rsc, const char * shaderText, uint32_t shaderLength, mConstantTypes[constant++].set(reinterpret_cast<Type *>(params[ct+1])); } } + mIsInternal = false; + uint32_t internalTokenLen = strlen(RS_SHADER_INTERNAL); + if(shaderLength > internalTokenLen && + strncmp(RS_SHADER_INTERNAL, shaderText, internalTokenLen) == 0) { + mIsInternal = true; + shaderText += internalTokenLen; + shaderLength -= internalTokenLen; + } mUserShader.setTo(shaderText, shaderLength); } @@ -281,9 +290,9 @@ void Program::appendUserConstants() { } void Program::setupUserConstants(ShaderCache *sc, bool isFragment) { - uint32_t uidx = 1; + uint32_t uidx = 0; for (uint32_t ct=0; ct < mConstantCount; ct++) { - Allocation *alloc = mConstants[ct+1].get(); + Allocation *alloc = mConstants[ct].get(); if (!alloc) { continue; } @@ -313,6 +322,9 @@ void Program::setupUserConstants(ShaderCache *sc, bool isFragment) { if (slot >= 0) { if(f->getType() == RS_TYPE_MATRIX_4X4) { glUniformMatrix4fv(slot, 1, GL_FALSE, fd); + /*for(int i = 0; i < 4; i++) { + LOGE("Mat = %f %f %f %f", fd[i*4 + 0], fd[i*4 + 1], fd[i*4 + 2], fd[i*4 + 3]); + }*/ } else if(f->getType() == RS_TYPE_MATRIX_3X3) { glUniformMatrix3fv(slot, 1, GL_FALSE, fd); |