diff options
author | Jason Sams <rjsams@android.com> | 2010-07-20 15:09:00 -0700 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2010-07-20 15:09:00 -0700 |
commit | 181334092f78273d0da2d854ebbe7b24508d3bfc (patch) | |
tree | 549b3c6f335c9f304dd8c9e2ca888ddb586fee2e /rsScriptC.cpp | |
parent | 032f3590daa7c255a0c20decf0c3b2bee949d8b8 (diff) | |
download | rs-181334092f78273d0da2d854ebbe7b24508d3bfc.tar.gz |
Update imageprocessing to remove generated files.
Fix thread launch race condition.
Change-Id: I24d7f87ac87db6f9e3418d6a429471a71d2c9e9d
Diffstat (limited to 'rsScriptC.cpp')
-rw-r--r-- | rsScriptC.cpp | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/rsScriptC.cpp b/rsScriptC.cpp index 9693b16e..5261f57f 100644 --- a/rsScriptC.cpp +++ b/rsScriptC.cpp @@ -171,7 +171,6 @@ typedef int (*rs_t)(const void *, void *, const void *, uint32_t, uint32_t, uint static void wc_xy(void *usr, uint32_t idx) { MTLaunchStruct *mtls = (MTLaunchStruct *)usr; - LOGE("usr %p, idx %i", usr, idx); while (1) { uint32_t slice = (uint32_t)android_atomic_inc(&mtls->mSliceNum); @@ -279,32 +278,32 @@ void ScriptC::runForEach(Context *rsc, } - { - LOGE("launch 1"); - rsc->launchThreads(wc_xy, &mtls); - LOGE("launch 2"); - } + if ((rsc->getWorkerPoolSize() > 1) && + ((mtls.dimY * mtls.dimZ * mtls.dimArray) > 1)) { -/* - for (uint32_t ar = arrayStart; ar < arrayEnd; ar++) { - for (uint32_t z = zStart; z < zEnd; z++) { - for (uint32_t y = yStart; y < yEnd; y++) { - uint32_t offset = dimX * dimY * dimZ * ar + - dimX * dimY * z + - dimX * y; - uint8_t *xPtrOut = ptrOut + (eStrideOut * offset); - const uint8_t *xPtrIn = ptrIn + (eStrideIn * offset); - - for (uint32_t x = xStart; x < xEnd; x++) { - ((rs_t)mProgram.mRoot) (xPtrIn, xPtrOut, usr, x, y, z, ar); - xPtrIn += eStrideIn; - xPtrOut += eStrideOut; + //LOGE("launch 1"); + rsc->launchThreads(wc_xy, &mtls); + //LOGE("launch 2"); + } else { + for (uint32_t ar = mtls.arrayStart; ar < mtls.arrayEnd; ar++) { + for (uint32_t z = mtls.zStart; z < mtls.zEnd; z++) { + for (uint32_t y = mtls.yStart; y < mtls.yEnd; y++) { + uint32_t offset = mtls.dimX * mtls.dimY * mtls.dimZ * ar + + mtls.dimX * mtls.dimY * z + + mtls.dimX * y; + uint8_t *xPtrOut = mtls.ptrOut + (mtls.eStrideOut * offset); + const uint8_t *xPtrIn = mtls.ptrIn + (mtls.eStrideIn * offset); + + for (uint32_t x = mtls.xStart; x < mtls.xEnd; x++) { + ((rs_t)mProgram.mRoot) (xPtrIn, xPtrOut, usr, x, y, z, ar); + xPtrIn += mtls.eStrideIn; + xPtrOut += mtls.eStrideOut; + } } } } - } -*/ + setTLS(oldTLS); } @@ -394,6 +393,9 @@ void ScriptCState::runCompiler(Context *rsc, ScriptC *s) s->mEnviroment.mFieldAddress = (void **)calloc(100, sizeof(void *)); bccGetExportVars(s->mBccScript, (BCCsizei *)&s->mEnviroment.mFieldCount, 100, s->mEnviroment.mFieldAddress); + //for (int ct2=0; ct2 < s->mEnviroment.mFieldCount; ct2++ ) { + //LOGE("Script field %i = %p", ct2, s->mEnviroment.mFieldAddress[ct2]); + //} s->mEnviroment.mFragment.set(rsc->getDefaultProgramFragment()); s->mEnviroment.mVertex.set(rsc->getDefaultProgramVertex()); |