Loading graphics/java/android/renderscript/Program.java +8 −6 Original line number Diff line number Diff line Loading @@ -29,10 +29,12 @@ public class Program extends BaseObj { public static final int MAX_INPUT = 8; public static final int MAX_OUTPUT = 8; public static final int MAX_CONSTANT = 8; public static final int MAX_TEXTURE = 8; Element mInputs[]; Element mOutputs[]; Type mConstants[]; int mTextureCount; String mShader; Program(int id, RenderScript rs) { Loading Loading @@ -65,6 +67,7 @@ public class Program extends BaseObj { mInputCount = 0; mOutputCount = 0; mConstantCount = 0; mTextureCount = 0; } public void setShader(String s) { Loading Loading @@ -95,12 +98,12 @@ public class Program extends BaseObj { mConstants[mConstantCount++] = t; } public void addTexture(Type t) throws IllegalStateException { public void setTextureCount(int count) throws IllegalArgumentException { // Should check for consistant and non-conflicting names... if(mTextureCount >= MAX_CONSTANT) { throw new IllegalArgumentException("Max input count exceeded."); if(count >= MAX_CONSTANT) { throw new IllegalArgumentException("Max texture count exceeded."); } mTextures[mTextureCount++] = t; mTextureCount = count; } protected void initProgram(Program p) { Loading @@ -110,8 +113,7 @@ public class Program extends BaseObj { System.arraycopy(mOutputs, 0, p.mOutputs, 0, mOutputCount); p.mConstants = new Type[mConstantCount]; System.arraycopy(mConstants, 0, p.mConstants, 0, mConstantCount); p.mTextures = new Type[mTextureCount]; System.arraycopy(mTextures, 0, p.mTextures, 0, mTextureCount); p.mTextureCount = mTextureCount; } } Loading graphics/java/android/renderscript/ProgramFragment.java +33 −3 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import android.util.Log; * @hide * **/ public class ProgramFragment extends BaseObj { public class ProgramFragment extends Program { public static final int MAX_SLOT = 2; public enum EnvMode { Loading @@ -41,8 +41,7 @@ public class ProgramFragment extends BaseObj { ProgramFragment(int id, RenderScript rs) { super(rs); mID = id; super(id, rs); } public void bindTexture(Allocation va, int slot) Loading @@ -65,6 +64,37 @@ public class ProgramFragment extends BaseObj { mRS.nProgramFragmentBindSampler(mID, slot, vs.mID); } public static class ShaderBuilder extends BaseProgramBuilder { public ShaderBuilder(RenderScript rs) { super(rs); } public ProgramFragment create() { mRS.validate(); int[] tmp = new int[(mInputCount + mOutputCount + mConstantCount + 1) * 2]; int idx = 0; for (int i=0; i < mInputCount; i++) { tmp[idx++] = 0; tmp[idx++] = mInputs[i].mID; } for (int i=0; i < mOutputCount; i++) { tmp[idx++] = 1; tmp[idx++] = mOutputs[i].mID; } for (int i=0; i < mConstantCount; i++) { tmp[idx++] = 2; tmp[idx++] = mConstants[i].mID; } tmp[idx++] = 3; tmp[idx++] = mTextureCount; int id = mRS.nProgramFragmentCreate2(mShader, tmp); ProgramFragment pf = new ProgramFragment(id, mRS); initProgram(pf); return pf; } } public static class Builder { RenderScript mRS; Loading graphics/java/android/renderscript/ProgramVertex.java +2 −4 Original line number Diff line number Diff line Loading @@ -79,10 +79,8 @@ public class ProgramVertex extends Program { tmp[idx++] = 2; tmp[idx++] = mConstants[i].mID; } for (int i=0; i < mTextureCount; i++) { tmp[idx++] = 3; tmp[idx++] = mTextures[i].mID; } tmp[idx++] = mTextureCount; int id = mRS.nProgramVertexCreate2(mShader, tmp); ProgramVertex pv = new ProgramVertex(id, mRS); Loading graphics/java/android/renderscript/RenderScript.java +1 −0 Original line number Diff line number Diff line Loading @@ -175,6 +175,7 @@ public class RenderScript { native void nProgramFragmentSetSlot(int slot, boolean enable, int env, int vt); native void nProgramFragmentSetShader(String txt); native int nProgramFragmentCreate(); native int nProgramFragmentCreate2(String shader, int[] params); native int nProgramVertexCreate(boolean texMat); native int nProgramVertexCreate2(String shader, int[] params); Loading graphics/jni/android_renderscript_RenderScript.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -1115,6 +1115,24 @@ nProgramFragmentCreate(JNIEnv *_env, jobject _this, jint slot, jboolean enable) return (jint)rsProgramFragmentCreate(con); } static jint nProgramFragmentCreate2(JNIEnv *_env, jobject _this, jstring shader, jintArray params) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); const char* shaderUTF = _env->GetStringUTFChars(shader, NULL); jint shaderLen = _env->GetStringUTFLength(shader); jint *paramPtr = _env->GetIntArrayElements(params, NULL); jint paramLen = _env->GetArrayLength(params); LOG_API("nProgramFragmentCreate2, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen); jint ret = (jint)rsProgramFragmentCreate2(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen); _env->ReleaseStringUTFChars(shader, shaderUTF); _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT); return ret; } // --------------------------------------------------------------------------- static jint Loading Loading @@ -1444,6 +1462,7 @@ static JNINativeMethod methods[] = { {"nProgramFragmentSetSlot", "(IZII)V", (void*)nProgramFragmentSetSlot }, {"nProgramFragmentSetShader", "(Ljava/lang/String;)V", (void*)nProgramFragmentSetShader }, {"nProgramFragmentCreate", "()I", (void*)nProgramFragmentCreate }, {"nProgramFragmentCreate2", "(Ljava/lang/String;[I)I", (void*)nProgramFragmentCreate2 }, {"nProgramRasterCreate", "(IIZZZ)I", (void*)nProgramRasterCreate }, {"nProgramRasterSetPointSize", "(IF)V", (void*)nProgramRasterSetPointSize }, Loading Loading
graphics/java/android/renderscript/Program.java +8 −6 Original line number Diff line number Diff line Loading @@ -29,10 +29,12 @@ public class Program extends BaseObj { public static final int MAX_INPUT = 8; public static final int MAX_OUTPUT = 8; public static final int MAX_CONSTANT = 8; public static final int MAX_TEXTURE = 8; Element mInputs[]; Element mOutputs[]; Type mConstants[]; int mTextureCount; String mShader; Program(int id, RenderScript rs) { Loading Loading @@ -65,6 +67,7 @@ public class Program extends BaseObj { mInputCount = 0; mOutputCount = 0; mConstantCount = 0; mTextureCount = 0; } public void setShader(String s) { Loading Loading @@ -95,12 +98,12 @@ public class Program extends BaseObj { mConstants[mConstantCount++] = t; } public void addTexture(Type t) throws IllegalStateException { public void setTextureCount(int count) throws IllegalArgumentException { // Should check for consistant and non-conflicting names... if(mTextureCount >= MAX_CONSTANT) { throw new IllegalArgumentException("Max input count exceeded."); if(count >= MAX_CONSTANT) { throw new IllegalArgumentException("Max texture count exceeded."); } mTextures[mTextureCount++] = t; mTextureCount = count; } protected void initProgram(Program p) { Loading @@ -110,8 +113,7 @@ public class Program extends BaseObj { System.arraycopy(mOutputs, 0, p.mOutputs, 0, mOutputCount); p.mConstants = new Type[mConstantCount]; System.arraycopy(mConstants, 0, p.mConstants, 0, mConstantCount); p.mTextures = new Type[mTextureCount]; System.arraycopy(mTextures, 0, p.mTextures, 0, mTextureCount); p.mTextureCount = mTextureCount; } } Loading
graphics/java/android/renderscript/ProgramFragment.java +33 −3 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import android.util.Log; * @hide * **/ public class ProgramFragment extends BaseObj { public class ProgramFragment extends Program { public static final int MAX_SLOT = 2; public enum EnvMode { Loading @@ -41,8 +41,7 @@ public class ProgramFragment extends BaseObj { ProgramFragment(int id, RenderScript rs) { super(rs); mID = id; super(id, rs); } public void bindTexture(Allocation va, int slot) Loading @@ -65,6 +64,37 @@ public class ProgramFragment extends BaseObj { mRS.nProgramFragmentBindSampler(mID, slot, vs.mID); } public static class ShaderBuilder extends BaseProgramBuilder { public ShaderBuilder(RenderScript rs) { super(rs); } public ProgramFragment create() { mRS.validate(); int[] tmp = new int[(mInputCount + mOutputCount + mConstantCount + 1) * 2]; int idx = 0; for (int i=0; i < mInputCount; i++) { tmp[idx++] = 0; tmp[idx++] = mInputs[i].mID; } for (int i=0; i < mOutputCount; i++) { tmp[idx++] = 1; tmp[idx++] = mOutputs[i].mID; } for (int i=0; i < mConstantCount; i++) { tmp[idx++] = 2; tmp[idx++] = mConstants[i].mID; } tmp[idx++] = 3; tmp[idx++] = mTextureCount; int id = mRS.nProgramFragmentCreate2(mShader, tmp); ProgramFragment pf = new ProgramFragment(id, mRS); initProgram(pf); return pf; } } public static class Builder { RenderScript mRS; Loading
graphics/java/android/renderscript/ProgramVertex.java +2 −4 Original line number Diff line number Diff line Loading @@ -79,10 +79,8 @@ public class ProgramVertex extends Program { tmp[idx++] = 2; tmp[idx++] = mConstants[i].mID; } for (int i=0; i < mTextureCount; i++) { tmp[idx++] = 3; tmp[idx++] = mTextures[i].mID; } tmp[idx++] = mTextureCount; int id = mRS.nProgramVertexCreate2(mShader, tmp); ProgramVertex pv = new ProgramVertex(id, mRS); Loading
graphics/java/android/renderscript/RenderScript.java +1 −0 Original line number Diff line number Diff line Loading @@ -175,6 +175,7 @@ public class RenderScript { native void nProgramFragmentSetSlot(int slot, boolean enable, int env, int vt); native void nProgramFragmentSetShader(String txt); native int nProgramFragmentCreate(); native int nProgramFragmentCreate2(String shader, int[] params); native int nProgramVertexCreate(boolean texMat); native int nProgramVertexCreate2(String shader, int[] params); Loading
graphics/jni/android_renderscript_RenderScript.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -1115,6 +1115,24 @@ nProgramFragmentCreate(JNIEnv *_env, jobject _this, jint slot, jboolean enable) return (jint)rsProgramFragmentCreate(con); } static jint nProgramFragmentCreate2(JNIEnv *_env, jobject _this, jstring shader, jintArray params) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); const char* shaderUTF = _env->GetStringUTFChars(shader, NULL); jint shaderLen = _env->GetStringUTFLength(shader); jint *paramPtr = _env->GetIntArrayElements(params, NULL); jint paramLen = _env->GetArrayLength(params); LOG_API("nProgramFragmentCreate2, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen); jint ret = (jint)rsProgramFragmentCreate2(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen); _env->ReleaseStringUTFChars(shader, shaderUTF); _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT); return ret; } // --------------------------------------------------------------------------- static jint Loading Loading @@ -1444,6 +1462,7 @@ static JNINativeMethod methods[] = { {"nProgramFragmentSetSlot", "(IZII)V", (void*)nProgramFragmentSetSlot }, {"nProgramFragmentSetShader", "(Ljava/lang/String;)V", (void*)nProgramFragmentSetShader }, {"nProgramFragmentCreate", "()I", (void*)nProgramFragmentCreate }, {"nProgramFragmentCreate2", "(Ljava/lang/String;[I)I", (void*)nProgramFragmentCreate2 }, {"nProgramRasterCreate", "(IIZZZ)I", (void*)nProgramRasterCreate }, {"nProgramRasterSetPointSize", "(IF)V", (void*)nProgramRasterSetPointSize }, Loading