void rsi_Adapter1DSetConstraint(Context *rsc, RsAdapter1D va, RsDimension dim, uint32_t value) { Adapter1D * a = static_cast<Adapter1D *>(va); switch (dim) { case RS_DIMENSION_X: rsAssert(!"Cannot contrain X in an 1D adapter"); return; case RS_DIMENSION_Y: a->setY(value); break; case RS_DIMENSION_Z: a->setZ(value); break; case RS_DIMENSION_LOD: a->setLOD(value); break; case RS_DIMENSION_FACE: a->setFace(value); break; default: rsAssert(!"Unimplemented constraint"); return; } }
void RsdCpuScriptImpl::setGlobalVarWithElemDims(uint32_t slot, const void *data, size_t dataLength, const Element *elem, const size_t *dims, size_t dimLength) { #ifndef RS_COMPATIBILITY_LIB int32_t *destPtr = reinterpret_cast<int32_t *>( mExecutable->getExportVarAddrs()[slot]); #else int32_t *destPtr = reinterpret_cast<int32_t *>(mFieldAddress[slot]); #endif if (!destPtr) { //ALOGV("Calling setVar on slot = %i which is null", slot); return; } // We want to look at dimension in terms of integer components, // but dimLength is given in terms of bytes. dimLength /= sizeof(int); // Only a single dimension is currently supported. rsAssert(dimLength == 1); if (dimLength == 1) { // First do the increment loop. size_t stride = elem->getSizeBytes(); const char *cVal = reinterpret_cast<const char *>(data); for (size_t i = 0; i < dims[0]; i++) { elem->incRefs(cVal); cVal += stride; } // Decrement loop comes after (to prevent race conditions). char *oldVal = reinterpret_cast<char *>(destPtr); for (size_t i = 0; i < dims[0]; i++) { elem->decRefs(oldVal); oldVal += stride; } } memcpy(destPtr, data, dataLength); }
void RsdCpuScriptImpl::forEachMtlsSetup(const Allocation * ain, Allocation * aout, const void * usr, uint32_t usrLen, const RsScriptCall *sc, MTLaunchStruct *mtls) { memset(mtls, 0, sizeof(MTLaunchStruct)); // possible for this to occur if IO_OUTPUT/IO_INPUT with no bound surface if (ain && (const uint8_t *)ain->mHal.drvState.lod[0].mallocPtr == NULL) { mCtx->getContext()->setError(RS_ERROR_BAD_SCRIPT, "rsForEach called with null in allocations"); return; } if (aout && (const uint8_t *)aout->mHal.drvState.lod[0].mallocPtr == NULL) { mCtx->getContext()->setError(RS_ERROR_BAD_SCRIPT, "rsForEach called with null out allocations"); return; } if (ain) { mtls->fep.dimX = ain->getType()->getDimX(); mtls->fep.dimY = ain->getType()->getDimY(); mtls->fep.dimZ = ain->getType()->getDimZ(); //mtls->dimArray = ain->getType()->getDimArray(); } else if (aout) { mtls->fep.dimX = aout->getType()->getDimX(); mtls->fep.dimY = aout->getType()->getDimY(); mtls->fep.dimZ = aout->getType()->getDimZ(); //mtls->dimArray = aout->getType()->getDimArray(); } else { mCtx->getContext()->setError(RS_ERROR_BAD_SCRIPT, "rsForEach called with null allocations"); return; } if (!sc || (sc->xEnd == 0)) { mtls->xEnd = mtls->fep.dimX; } else { rsAssert(sc->xStart < mtls->fep.dimX); rsAssert(sc->xEnd <= mtls->fep.dimX); rsAssert(sc->xStart < sc->xEnd); mtls->xStart = rsMin(mtls->fep.dimX, sc->xStart); mtls->xEnd = rsMin(mtls->fep.dimX, sc->xEnd); if (mtls->xStart >= mtls->xEnd) return; } if (!sc || (sc->yEnd == 0)) { mtls->yEnd = mtls->fep.dimY; } else { rsAssert(sc->yStart < mtls->fep.dimY); rsAssert(sc->yEnd <= mtls->fep.dimY); rsAssert(sc->yStart < sc->yEnd); mtls->yStart = rsMin(mtls->fep.dimY, sc->yStart); mtls->yEnd = rsMin(mtls->fep.dimY, sc->yEnd); if (mtls->yStart >= mtls->yEnd) return; } if (!sc || (sc->zEnd == 0)) { mtls->zEnd = mtls->fep.dimZ; } else { rsAssert(sc->zStart < mtls->fep.dimZ); rsAssert(sc->zEnd <= mtls->fep.dimZ); rsAssert(sc->zStart < sc->zEnd); mtls->zStart = rsMin(mtls->fep.dimZ, sc->zStart); mtls->zEnd = rsMin(mtls->fep.dimZ, sc->zEnd); if (mtls->zStart >= mtls->zEnd) return; } mtls->xEnd = rsMax((uint32_t)1, mtls->xEnd); mtls->yEnd = rsMax((uint32_t)1, mtls->yEnd); mtls->zEnd = rsMax((uint32_t)1, mtls->zEnd); mtls->arrayEnd = rsMax((uint32_t)1, mtls->arrayEnd); rsAssert(!ain || (ain->getType()->getDimZ() == 0)); mtls->rsc = mCtx; mtls->ain = ain; mtls->aout = aout; mtls->fep.usr = usr; mtls->fep.usrLen = usrLen; mtls->mSliceSize = 1; mtls->mSliceNum = 0; mtls->fep.ptrIn = NULL; mtls->fep.eStrideIn = 0; mtls->isThreadable = mIsThreadable; if (ain) { mtls->fep.ptrIn = (const uint8_t *)ain->mHal.drvState.lod[0].mallocPtr; mtls->fep.eStrideIn = ain->getType()->getElementSizeBytes(); mtls->fep.yStrideIn = ain->mHal.drvState.lod[0].stride; } mtls->fep.ptrOut = NULL; mtls->fep.eStrideOut = 0; if (aout) { mtls->fep.ptrOut = (uint8_t *)aout->mHal.drvState.lod[0].mallocPtr; mtls->fep.eStrideOut = aout->getType()->getElementSizeBytes(); mtls->fep.yStrideOut = aout->mHal.drvState.lod[0].stride; } }