Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6542507 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change I7e5ab3b1

* changes:
  Continue es2 shader dev
parents 1890be79 7e5ab3b1
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -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) {
@@ -65,6 +67,7 @@ public class Program extends BaseObj {
            mInputCount = 0;
            mOutputCount = 0;
            mConstantCount = 0;
            mTextureCount = 0;
        }

        public void setShader(String s) {
@@ -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) {
@@ -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;
        }
    }

+33 −3
Original line number Diff line number Diff line
@@ -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 {
@@ -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)
@@ -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;
+2 −4
Original line number Diff line number Diff line
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -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);
+19 −0
Original line number Diff line number Diff line
@@ -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
@@ -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