1ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/* 2ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Copyright (C) 2012 The Android Open Source Project 3ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 4ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * you may not use this file except in compliance with the License. 6ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * You may obtain a copy of the License at 7ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 8ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 10ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Unless required by applicable law or agreed to in writing, software 11ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * See the License for the specific language governing permissions and 14ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * limitations under the License. 15ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 16ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 17ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 18ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include "rsdCore.h" 19ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include "rsdIntrinsics.h" 20ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include "rsdAllocation.h" 21ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 22ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include "rsdIntrinsicInlines.h" 23ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 24ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsusing namespace android; 25ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsusing namespace android::renderscript; 26ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 27ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstruct ConvolveParams { 28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ObjectBaseRef<Allocation> lut; 29ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams}; 30ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic void LUT_Bind(const Context *dc, const Script *script, 32ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void * intrinsicData, uint32_t slot, Allocation *data) { 33ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ConvolveParams *cp = (ConvolveParams *)intrinsicData; 34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(slot == 0); 35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams cp->lut.set(data); 36ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 38ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic void LUT_uchar4(const RsForEachStubParamStruct *p, 39ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t xstart, uint32_t xend, 40ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t instep, uint32_t outstep) { 41ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ConvolveParams *cp = (ConvolveParams *)p->usr; 42ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uchar4 *out = (uchar4 *)p->out; 43ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uchar4 *in = (uchar4 *)p->in; 44ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t x1 = xstart; 45ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t x2 = xend; 46ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 47ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += xstart; 48ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += xstart; 49ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 50ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams DrvAllocation *din = (DrvAllocation *)cp->lut->mHal.drv; 51ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const uchar *tr = (const uchar *)din->lod[0].mallocPtr; 52ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const uchar *tg = &tr[256]; 53ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const uchar *tb = &tg[256]; 54ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const uchar *ta = &tb[256]; 55ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 56ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams while (x1 < x2) { 57ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uchar4 p = *in; 58ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uchar4 o = {tr[p.x], tg[p.y], tb[p.z], ta[p.w]}; 59ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = o; 60ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in++; 61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out++; 62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1++; 63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 64ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 65ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 66ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsvoid * rsdIntrinsic_InitLUT(const android::renderscript::Context *dc, 67ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Script *script, 68ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams RsdIntriniscFuncs_t *funcs) { 69ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 70ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams script->mHal.info.exportedVariableCount = 1; 71ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams funcs->bind = LUT_Bind; 72ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams funcs->root = LUT_uchar4; 73ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ConvolveParams *cp = (ConvolveParams *)calloc(1, sizeof(ConvolveParams)); 74ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return cp; 75ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 76ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 77ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 78