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

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

Merge "Thread launch strategies."

parents bf19bce3 2cbd298f
Loading
Loading
Loading
Loading
+4 −24
Original line number Diff line number Diff line
@@ -8,43 +8,23 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32
    const uchar4 *input = (const uchar4 *)rsGetElementAt(fs->ain, 0, y);

    float3 blurredPixel = 0;
    float3 currentPixel = 0;

    const float *gPtr = fs->gaussian;
    if ((x > fs->radius) && (x < (fs->width - fs->radius))) {
        const uchar4 *i = input + (x - fs->radius);
        for(int r = -fs->radius; r <= fs->radius; r ++) {
            currentPixel.x = (float)(i->x);
            currentPixel.y = (float)(i->y);
            currentPixel.z = (float)(i->z);
            blurredPixel += currentPixel * gPtr[0];
            blurredPixel += convert_float3(i->xyz) * gPtr[0];
            gPtr++;
            i++;
        }
    } else {
        for(int r = -fs->radius; r <= fs->radius; r ++) {
            // Stepping left and right away from the pixel
            int validW = x + r;
            // Clamp to zero and width max() isn't exposed for ints yet
            if(validW < 0) {
                validW = 0;
            }
            if(validW > fs->width - 1) {
                validW = fs->width - 1;
            }
            //int validW = rsClamp(w + r, 0, width - 1);

            currentPixel.x = (float)(input[validW].x);
            currentPixel.y = (float)(input[validW].y);
            currentPixel.z = (float)(input[validW].z);

            blurredPixel += currentPixel * gPtr[0];
            int validW = rsClamp(x + r, (uint)0, (uint)(fs->width - 1));
            blurredPixel += convert_float3(input[validW].xyz) * gPtr[0];
            gPtr++;
        }
    }

    output->x = (uint8_t)blurredPixel.x;
    output->y = (uint8_t)blurredPixel.y;
    output->z = (uint8_t)blurredPixel.z;
    output->xyz = convert_uchar3(blurredPixel);
}
+2 −0
Original line number Diff line number Diff line
@@ -56,6 +56,8 @@ public:

        char * mScriptText;
        uint32_t mScriptTextLength;

        bool mIsThreadable;
    };
    Enviroment_t mEnviroment;

+5 −2
Original line number Diff line number Diff line
@@ -278,7 +278,7 @@ void ScriptC::runForEach(Context *rsc,
    }


    if ((rsc->getWorkerPoolSize() > 1) &&
    if ((rsc->getWorkerPoolSize() > 1) && mEnviroment.mIsThreadable &&
        ((mtls.dimY * mtls.dimZ * mtls.dimArray) > 1)) {

        //LOGE("launch 1");
@@ -350,10 +350,12 @@ void ScriptCState::clear()
static BCCvoid* symbolLookup(BCCvoid* pContext, const BCCchar* name)
{
    const ScriptCState::SymbolTable_t *sym;
    ScriptC *s = (ScriptC *)pContext;
    sym = ScriptCState::lookupSymbol(name);
    if (sym) {
        return sym->mPtr;
    }
    s->mEnviroment.mIsThreadable = false;
    sym = ScriptCState::lookupSymbolCL(name);
    if (sym) {
        return sym->mPtr;
@@ -371,8 +373,9 @@ void ScriptCState::runCompiler(Context *rsc, ScriptC *s)
    LOGV("ScriptCState::runCompiler ");

    s->mBccScript = bccCreateScript();
    s->mEnviroment.mIsThreadable = true;
    bccScriptBitcode(s->mBccScript, s->mEnviroment.mScriptText, s->mEnviroment.mScriptTextLength);
    bccRegisterSymbolCallback(s->mBccScript, symbolLookup, NULL);
    bccRegisterSymbolCallback(s->mBccScript, symbolLookup, s);
    bccCompileScript(s->mBccScript);
    bccGetScriptLabel(s->mBccScript, "root", (BCCvoid**) &s->mProgram.mRoot);
    bccGetScriptLabel(s->mBccScript, "init", (BCCvoid**) &s->mProgram.mInit);
+11 −1
Original line number Diff line number Diff line
@@ -112,8 +112,19 @@ extern void __attribute__((overloadable))
extern void __attribute__((overloadable))
    rsSendToClientBlocking(int cmdID, const void *data, uint len);


// Script to Script
enum rs_for_each_strategy {
    RS_FOR_EACH_STRATEGY_SERIAL,
    RS_FOR_EACH_STRATEGY_DONT_CARE,
    RS_FOR_EACH_STRATEGY_DST_LINEAR,
    RS_FOR_EACH_STRATEGY_TILE_SMALL,
    RS_FOR_EACH_STRATEGY_TILE_MEDIUM,
    RS_FOR_EACH_STRATEGY_TILE_LARGE
};

typedef struct rs_script_call {
    enum rs_for_each_strategy strategy;
    uint32_t xStart;
    uint32_t xEnd;
    uint32_t yStart;
@@ -122,7 +133,6 @@ typedef struct rs_script_call {
    uint32_t zEnd;
    uint32_t arrayStart;
    uint32_t arrayEnd;

} rs_script_call_t;

extern void __attribute__((overloadable))