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

Commit df224cc4 authored by Jason Sams's avatar Jason Sams Committed by Android (Google) Code Review
Browse files

Merge "Create holder inner class for pushing context state. Fix bug with...

Merge "Create holder inner class for pushing context state. Fix bug with rsForEach corrupting parent context state. Remove workaround from rsBalls."
parents ec155fcf a17af04e
Loading
Loading
Loading
Loading
+2 −12
Original line number Diff line number Diff line
@@ -33,8 +33,6 @@ public class BallsRS {
    private ProgramFragment mPFLines;
    private ProgramFragment mPFPoints;
    private ProgramVertex mPV;
    private ProgramRaster mPR;
    private ProgramStore mPS;
    private ScriptField_Point mPoints;
    private ScriptField_Point mArcs;
    private ScriptField_VpConsts mVpConsts;
@@ -48,12 +46,6 @@ public class BallsRS {
        mVpConsts.set(i, 0, true);
    }

    private void createProgramRaster() {
        ProgramRaster.Builder b = new ProgramRaster.Builder(mRS);
        mPR = b.create();
        mScript.set_gPR(mPR);
    }

    private void createProgramVertex() {
        updateProjectionMatrices();

@@ -71,7 +63,7 @@ public class BallsRS {
        sb.addInput(mPoints.getElement());
        ProgramVertex pvs = sb.create();
        pvs.bindConstants(mVpConsts.getAllocation(), 0);
        mScript.set_gPV(pvs);
        mRS.contextBindProgramVertex(pvs);
    }

    private Allocation loadTexture(int id) {
@@ -125,10 +117,8 @@ public class BallsRS {
        mScript.set_gPFLines(mPFLines);
        mScript.set_gPFPoints(mPFPoints);
        createProgramVertex();
        createProgramRaster();

        mPS = ProgramStore.BLEND_ADD_DEPTH_NO_DEPTH(mRS);
        mScript.set_gPS(mPS);
        mRS.contextBindProgramStore(ProgramStore.BLEND_ADD_DEPTH_NO_DEPTH(mRS));

        mPhysicsScript.set_gMinPos(new Float2(5, 5));
        mPhysicsScript.set_gMaxPos(new Float2(width - 5, height - 5));
+2 −7
Original line number Diff line number Diff line
@@ -4,13 +4,11 @@

#include "balls.rsh"

#pragma stateFragment(parent)
#pragma stateVertex(parent)
#pragma stateStore(parent)

rs_program_fragment gPFPoints;
rs_program_fragment gPFLines;
rs_program_vertex gPV;
rs_program_raster gPR;
rs_program_store gPS;
rs_mesh partMesh;
rs_mesh arcMesh;

@@ -95,9 +93,6 @@ int root() {

    frame++;
    rsgBindProgramFragment(gPFLines);
    rsgBindProgramVertex(gPV);
    rsgBindProgramRaster(gPR);
    rsgBindProgramStore(gPS);
    rsgDrawMesh(arcMesh, 0, 0, arcIdx);
    rsgBindProgramFragment(gPFPoints);
    rsgDrawMesh(partMesh);
+29 −23
Original line number Diff line number Diff line
@@ -262,21 +262,27 @@ void Context::deinitEGL() {
    }
}

Context::PushState::PushState(Context *con) {
    mRsc = con;
    mFragment.set(con->getProgramFragment());
    mVertex.set(con->getProgramVertex());
    mStore.set(con->getProgramStore());
    mRaster.set(con->getProgramRaster());
}

Context::PushState::~PushState() {
    mRsc->setProgramFragment(mFragment.get());
    mRsc->setProgramVertex(mVertex.get());
    mRsc->setProgramStore(mStore.get());
    mRsc->setProgramRaster(mRaster.get());
    mRsc->setFont(mFont.get());
}


uint32_t Context::runScript(Script *s) {
    ObjectBaseRef<ProgramFragment> frag(mFragment);
    ObjectBaseRef<ProgramVertex> vtx(mVertex);
    ObjectBaseRef<ProgramStore> store(mFragmentStore);
    ObjectBaseRef<ProgramRaster> raster(mRaster);
    ObjectBaseRef<Font> font(mFont);
    PushState(this);

    uint32_t ret = s->run(this);

    mFragment.set(frag);
    mVertex.set(vtx);
    mFragmentStore.set(store);
    mRaster.set(raster);
    mFont.set(font);
    return ret;
}

@@ -441,13 +447,13 @@ void * Context::threadProc(void *vrsc) {
     rsc->mScriptC.init(rsc);
     if (rsc->mIsGraphicsContext) {
         rsc->mStateRaster.init(rsc);
         rsc->setRaster(NULL);
         rsc->setProgramRaster(NULL);
         rsc->mStateVertex.init(rsc);
         rsc->setVertex(NULL);
         rsc->setProgramVertex(NULL);
         rsc->mStateFragment.init(rsc);
         rsc->setFragment(NULL);
         rsc->setProgramFragment(NULL);
         rsc->mStateFragmentStore.init(rsc);
         rsc->setFragmentStore(NULL);
         rsc->setProgramStore(NULL);
         rsc->mStateFont.init(rsc);
         rsc->setFont(NULL);
         rsc->mStateVertexArray.init(rsc);
@@ -753,7 +759,7 @@ void Context::setRootScript(Script *s) {
    mRootScript.set(s);
}

void Context::setFragmentStore(ProgramStore *pfs) {
void Context::setProgramStore(ProgramStore *pfs) {
    rsAssert(mIsGraphicsContext);
    if (pfs == NULL) {
        mFragmentStore.set(mStateFragmentStore.mDefault);
@@ -762,7 +768,7 @@ void Context::setFragmentStore(ProgramStore *pfs) {
    }
}

void Context::setFragment(ProgramFragment *pf) {
void Context::setProgramFragment(ProgramFragment *pf) {
    rsAssert(mIsGraphicsContext);
    if (pf == NULL) {
        mFragment.set(mStateFragment.mDefault);
@@ -771,7 +777,7 @@ void Context::setFragment(ProgramFragment *pf) {
    }
}

void Context::setRaster(ProgramRaster *pr) {
void Context::setProgramRaster(ProgramRaster *pr) {
    rsAssert(mIsGraphicsContext);
    if (pr == NULL) {
        mRaster.set(mStateRaster.mDefault);
@@ -780,7 +786,7 @@ void Context::setRaster(ProgramRaster *pr) {
    }
}

void Context::setVertex(ProgramVertex *pv) {
void Context::setProgramVertex(ProgramVertex *pv) {
    rsAssert(mIsGraphicsContext);
    if (pv == NULL) {
        mVertex.set(mStateVertex.mDefault);
@@ -951,22 +957,22 @@ void rsi_ContextBindSampler(Context *rsc, uint32_t slot, RsSampler vs) {

void rsi_ContextBindProgramStore(Context *rsc, RsProgramStore vpfs) {
    ProgramStore *pfs = static_cast<ProgramStore *>(vpfs);
    rsc->setFragmentStore(pfs);
    rsc->setProgramStore(pfs);
}

void rsi_ContextBindProgramFragment(Context *rsc, RsProgramFragment vpf) {
    ProgramFragment *pf = static_cast<ProgramFragment *>(vpf);
    rsc->setFragment(pf);
    rsc->setProgramFragment(pf);
}

void rsi_ContextBindProgramRaster(Context *rsc, RsProgramRaster vpr) {
    ProgramRaster *pr = static_cast<ProgramRaster *>(vpr);
    rsc->setRaster(pr);
    rsc->setProgramRaster(pr);
}

void rsi_ContextBindProgramVertex(Context *rsc, RsProgramVertex vpv) {
    ProgramVertex *pv = static_cast<ProgramVertex *>(vpv);
    rsc->setVertex(pv);
    rsc->setProgramVertex(pv);
}

void rsi_ContextBindFont(Context *rsc, RsFont vfont) {
+23 −8
Original line number Diff line number Diff line
@@ -80,6 +80,21 @@ public:
        Context * mContext;
        Script * mScript;
    };

    class PushState {
    public:
        PushState(Context *);
        ~PushState();

    private:
        ObjectBaseRef<ProgramFragment> mFragment;
        ObjectBaseRef<ProgramVertex> mVertex;
        ObjectBaseRef<ProgramStore> mStore;
        ObjectBaseRef<ProgramRaster> mRaster;
        ObjectBaseRef<Font> mFont;
        Context *mRsc;
    };

    ScriptTLSStruct *mTlsStruct;
    RsSurfaceConfig mUserSurfaceConfig;

@@ -101,18 +116,18 @@ public:

    void swapBuffers();
    void setRootScript(Script *);
    void setRaster(ProgramRaster *);
    void setVertex(ProgramVertex *);
    void setFragment(ProgramFragment *);
    void setFragmentStore(ProgramStore *);
    void setProgramRaster(ProgramRaster *);
    void setProgramVertex(ProgramVertex *);
    void setProgramFragment(ProgramFragment *);
    void setProgramStore(ProgramStore *);
    void setFont(Font *);

    void updateSurface(void *sur);

    const ProgramFragment * getFragment() {return mFragment.get();}
    const ProgramStore * getFragmentStore() {return mFragmentStore.get();}
    const ProgramRaster * getRaster() {return mRaster.get();}
    const ProgramVertex * getVertex() {return mVertex.get();}
    ProgramFragment * getProgramFragment() {return mFragment.get();}
    ProgramStore * getProgramStore() {return mFragmentStore.get();}
    ProgramRaster * getProgramRaster() {return mRaster.get();}
    ProgramVertex * getProgramVertex() {return mVertex.get();}
    Font * getFont() {return mFont.get();}

    bool setupCheck();
+5 −21
Original line number Diff line number Diff line
@@ -613,18 +613,12 @@ void FontState::checkInit() {
}

void FontState::issueDrawCommand() {
    Context::PushState ps(mRSC);

    ObjectBaseRef<const ProgramVertex> tmpV(mRSC->getVertex());
    mRSC->setVertex(mRSC->getDefaultProgramVertex());

    ObjectBaseRef<const ProgramRaster> tmpR(mRSC->getRaster());
    mRSC->setRaster(mRSC->getDefaultProgramRaster());

    ObjectBaseRef<const ProgramFragment> tmpF(mRSC->getFragment());
    mRSC->setFragment(mFontShaderF.get());

    ObjectBaseRef<const ProgramStore> tmpPS(mRSC->getFragmentStore());
    mRSC->setFragmentStore(mFontProgramStore.get());
    mRSC->setProgramVertex(mRSC->getDefaultProgramVertex());
    mRSC->setProgramRaster(mRSC->getDefaultProgramRaster());
    mRSC->setProgramFragment(mFontShaderF.get());
    mRSC->setProgramStore(mFontProgramStore.get());

    if (mConstantsDirty) {
        mFontShaderFConstant->data(mRSC, &mConstants, sizeof(mConstants));
@@ -632,10 +626,6 @@ void FontState::issueDrawCommand() {
    }

    if (!mRSC->setupCheck()) {
        mRSC->setVertex((ProgramVertex *)tmpV.get());
        mRSC->setRaster((ProgramRaster *)tmpR.get());
        mRSC->setFragment((ProgramFragment *)tmpF.get());
        mRSC->setFragmentStore((ProgramStore *)tmpPS.get());
        return;
    }

@@ -651,12 +641,6 @@ void FontState::issueDrawCommand() {
    mIndexBuffer->uploadCheck(mRSC);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer->getBufferObjectID());
    glDrawElements(GL_TRIANGLES, mCurrentQuadIndex * 6, GL_UNSIGNED_SHORT, (uint16_t *)(0));

    // Reset the state
    mRSC->setVertex((ProgramVertex *)tmpV.get());
    mRSC->setRaster((ProgramRaster *)tmpR.get());
    mRSC->setFragment((ProgramFragment *)tmpF.get());
    mRSC->setFragmentStore((ProgramStore *)tmpPS.get());
}

void FontState::appendMeshQuad(float x1, float y1, float z1,
Loading