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 | e7ae69f4a70f1813cf8086ebd9714192c635300a (patch) | |
| tree | a9113aa8ae83ba654654eeef1de86baaa790c0dd /rsProgram.cpp | |
| parent | d405c494a2075e5f0fb801db7df89104ba28d8fb (diff) | |
| download | android_frameworks_rs-e7ae69f4a70f1813cf8086ebd9714192c635300a.tar.gz android_frameworks_rs-e7ae69f4a70f1813cf8086ebd9714192c635300a.tar.bz2 android_frameworks_rs-e7ae69f4a70f1813cf8086ebd9714192c635300a.zip | |
Shader changes to allow for more flexible constant binding.
Change-Id: Ic66e6e2a371c6e3d5dce1b00f63acab8c09bd110
Diffstat (limited to 'rsProgram.cpp')
| -rw-r--r-- | rsProgram.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/rsProgram.cpp b/rsProgram.cpp index 6041db80..24414912 100644 --- a/rsProgram.cpp +++ b/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); |
