1*e1eccf28SAndroid Build Coastguard Worker /* 2*e1eccf28SAndroid Build Coastguard Worker * Copyright (C) 2009 The Android Open Source Project 3*e1eccf28SAndroid Build Coastguard Worker * 4*e1eccf28SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*e1eccf28SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*e1eccf28SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*e1eccf28SAndroid Build Coastguard Worker * 8*e1eccf28SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*e1eccf28SAndroid Build Coastguard Worker * 10*e1eccf28SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*e1eccf28SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*e1eccf28SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*e1eccf28SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*e1eccf28SAndroid Build Coastguard Worker * limitations under the License. 15*e1eccf28SAndroid Build Coastguard Worker */ 16*e1eccf28SAndroid Build Coastguard Worker 17*e1eccf28SAndroid Build Coastguard Worker #include "rsContext.h" 18*e1eccf28SAndroid Build Coastguard Worker #include "rsScriptC.h" 19*e1eccf28SAndroid Build Coastguard Worker 20*e1eccf28SAndroid Build Coastguard Worker #include <time.h> 21*e1eccf28SAndroid Build Coastguard Worker 22*e1eccf28SAndroid Build Coastguard Worker namespace android { 23*e1eccf28SAndroid Build Coastguard Worker namespace renderscript { 24*e1eccf28SAndroid Build Coastguard Worker 25*e1eccf28SAndroid Build Coastguard Worker 26*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 27*e1eccf28SAndroid Build Coastguard Worker // Context 28*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 29*e1eccf28SAndroid Build Coastguard Worker 30*e1eccf28SAndroid Build Coastguard Worker void rsrAllocationSyncAll(Context *, Script *, Allocation *); 31*e1eccf28SAndroid Build Coastguard Worker 32*e1eccf28SAndroid Build Coastguard Worker #ifndef RS_COMPATIBILITY_LIB 33*e1eccf28SAndroid Build Coastguard Worker void rsrBindTexture(Context *, ProgramFragment *, uint32_t slot, Allocation *); 34*e1eccf28SAndroid Build Coastguard Worker void rsrBindConstant(Context *, ProgramFragment *, uint32_t slot, Allocation *); 35*e1eccf28SAndroid Build Coastguard Worker void rsrBindConstant(Context *, ProgramVertex*, uint32_t slot, Allocation *); 36*e1eccf28SAndroid Build Coastguard Worker void rsrBindSampler(Context *, ProgramFragment *, uint32_t slot, Sampler *); 37*e1eccf28SAndroid Build Coastguard Worker void rsrBindProgramStore(Context *, ProgramStore *); 38*e1eccf28SAndroid Build Coastguard Worker void rsrBindProgramFragment(Context *, ProgramFragment *); 39*e1eccf28SAndroid Build Coastguard Worker void rsrBindProgramVertex(Context *, ProgramVertex *); 40*e1eccf28SAndroid Build Coastguard Worker void rsrBindProgramRaster(Context *, ProgramRaster *); 41*e1eccf28SAndroid Build Coastguard Worker void rsrBindFrameBufferObjectColorTarget(Context *, Allocation *, uint32_t slot); 42*e1eccf28SAndroid Build Coastguard Worker void rsrBindFrameBufferObjectDepthTarget(Context *, Allocation *); 43*e1eccf28SAndroid Build Coastguard Worker void rsrClearFrameBufferObjectColorTarget(Context *, uint32_t slot); 44*e1eccf28SAndroid Build Coastguard Worker void rsrClearFrameBufferObjectDepthTarget(Context *); 45*e1eccf28SAndroid Build Coastguard Worker void rsrClearFrameBufferObjectTargets(Context *); 46*e1eccf28SAndroid Build Coastguard Worker 47*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 48*e1eccf28SAndroid Build Coastguard Worker // VP 49*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 50*e1eccf28SAndroid Build Coastguard Worker 51*e1eccf28SAndroid Build Coastguard Worker void rsrVpLoadProjectionMatrix(Context *, const rsc_Matrix *m); 52*e1eccf28SAndroid Build Coastguard Worker void rsrVpLoadModelMatrix(Context *, const rsc_Matrix *m); 53*e1eccf28SAndroid Build Coastguard Worker void rsrVpLoadTextureMatrix(Context *, const rsc_Matrix *m); 54*e1eccf28SAndroid Build Coastguard Worker void rsrPfConstantColor(Context *, ProgramFragment *, float r, float g, float b, float a); 55*e1eccf28SAndroid Build Coastguard Worker void rsrVpGetProjectionMatrix(Context *, rsc_Matrix *m); 56*e1eccf28SAndroid Build Coastguard Worker 57*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 58*e1eccf28SAndroid Build Coastguard Worker // Drawing 59*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 60*e1eccf28SAndroid Build Coastguard Worker 61*e1eccf28SAndroid Build Coastguard Worker void rsrDrawPath(Context *, Path *); 62*e1eccf28SAndroid Build Coastguard Worker void rsrDrawMesh(Context *, Mesh *); 63*e1eccf28SAndroid Build Coastguard Worker void rsrDrawMeshPrimitive(Context *, Mesh *, uint32_t primIndex); 64*e1eccf28SAndroid Build Coastguard Worker void rsrDrawMeshPrimitiveRange(Context *, Mesh *, 65*e1eccf28SAndroid Build Coastguard Worker uint32_t primIndex, uint32_t start, uint32_t len); 66*e1eccf28SAndroid Build Coastguard Worker void rsrMeshComputeBoundingBox(Context *, Mesh *, 67*e1eccf28SAndroid Build Coastguard Worker float *minX, float *minY, float *minZ, 68*e1eccf28SAndroid Build Coastguard Worker float *maxX, float *maxY, float *maxZ); 69*e1eccf28SAndroid Build Coastguard Worker 70*e1eccf28SAndroid Build Coastguard Worker 71*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 72*e1eccf28SAndroid Build Coastguard Worker // 73*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 74*e1eccf28SAndroid Build Coastguard Worker 75*e1eccf28SAndroid Build Coastguard Worker 76*e1eccf28SAndroid Build Coastguard Worker void rsrColor(Context *, float r, float g, float b, float a); 77*e1eccf28SAndroid Build Coastguard Worker #endif 78*e1eccf28SAndroid Build Coastguard Worker 79*e1eccf28SAndroid Build Coastguard Worker void rsrAllocationCopy1DRange(Context *, Allocation *dstAlloc, 80*e1eccf28SAndroid Build Coastguard Worker uint32_t dstOff, 81*e1eccf28SAndroid Build Coastguard Worker uint32_t dstMip, 82*e1eccf28SAndroid Build Coastguard Worker uint32_t count, 83*e1eccf28SAndroid Build Coastguard Worker Allocation *srcAlloc, 84*e1eccf28SAndroid Build Coastguard Worker uint32_t srcOff, uint32_t srcMip); 85*e1eccf28SAndroid Build Coastguard Worker void rsrAllocationCopy2DRange(Context *, Allocation *dstAlloc, 86*e1eccf28SAndroid Build Coastguard Worker uint32_t dstXoff, uint32_t dstYoff, 87*e1eccf28SAndroid Build Coastguard Worker uint32_t dstMip, uint32_t dstFace, 88*e1eccf28SAndroid Build Coastguard Worker uint32_t width, uint32_t height, 89*e1eccf28SAndroid Build Coastguard Worker Allocation *srcAlloc, 90*e1eccf28SAndroid Build Coastguard Worker uint32_t srcXoff, uint32_t srcYoff, 91*e1eccf28SAndroid Build Coastguard Worker uint32_t srcMip, uint32_t srcFace); 92*e1eccf28SAndroid Build Coastguard Worker 93*e1eccf28SAndroid Build Coastguard Worker #ifndef RS_COMPATIBILITY_LIB 94*e1eccf28SAndroid Build Coastguard Worker void rsrPrepareClear(Context *); 95*e1eccf28SAndroid Build Coastguard Worker uint32_t rsrGetWidth(Context *); 96*e1eccf28SAndroid Build Coastguard Worker uint32_t rsrGetHeight(Context *); 97*e1eccf28SAndroid Build Coastguard Worker void rsrDrawTextAlloc(Context *, Allocation *, int x, int y); 98*e1eccf28SAndroid Build Coastguard Worker void rsrDrawText(Context *, const char *text, int x, int y); 99*e1eccf28SAndroid Build Coastguard Worker void rsrSetMetrics(Context *, Font::Rect *metrics, 100*e1eccf28SAndroid Build Coastguard Worker int32_t *left, int32_t *right, int32_t *top, int32_t *bottom); 101*e1eccf28SAndroid Build Coastguard Worker void rsrMeasureTextAlloc(Context *, Allocation *, 102*e1eccf28SAndroid Build Coastguard Worker int32_t *left, int32_t *right, int32_t *top, int32_t *bottom); 103*e1eccf28SAndroid Build Coastguard Worker void rsrMeasureText(Context *, const char *text, 104*e1eccf28SAndroid Build Coastguard Worker int32_t *left, int32_t *right, int32_t *top, int32_t *bottom); 105*e1eccf28SAndroid Build Coastguard Worker void rsrBindFont(Context *, Font *); 106*e1eccf28SAndroid Build Coastguard Worker void rsrFontColor(Context *, float r, float g, float b, float a); 107*e1eccf28SAndroid Build Coastguard Worker 108*e1eccf28SAndroid Build Coastguard Worker #endif 109*e1eccf28SAndroid Build Coastguard Worker 110*e1eccf28SAndroid Build Coastguard Worker void rsrAllocationIoSend(Context *, Allocation *); 111*e1eccf28SAndroid Build Coastguard Worker void rsrAllocationIoReceive(Context *, Allocation *); 112*e1eccf28SAndroid Build Coastguard Worker 113*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 114*e1eccf28SAndroid Build Coastguard Worker // Time routines 115*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 116*e1eccf28SAndroid Build Coastguard Worker 117*e1eccf28SAndroid Build Coastguard Worker float rsrGetDt(Context *, const Script *sc); 118*e1eccf28SAndroid Build Coastguard Worker time_t rsrTime(Context *, time_t *timer); 119*e1eccf28SAndroid Build Coastguard Worker tm* rsrLocalTime(Context *, tm *local, time_t *timer); 120*e1eccf28SAndroid Build Coastguard Worker int64_t rsrUptimeMillis(Context *); 121*e1eccf28SAndroid Build Coastguard Worker int64_t rsrUptimeNanos(Context *); 122*e1eccf28SAndroid Build Coastguard Worker 123*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 124*e1eccf28SAndroid Build Coastguard Worker // Message routines 125*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 126*e1eccf28SAndroid Build Coastguard Worker 127*e1eccf28SAndroid Build Coastguard Worker // Keep existing routines to not break current GPU drivers. 128*e1eccf28SAndroid Build Coastguard Worker uint32_t __attribute((used)) rsrToClient(Context *, int cmdID, void *data, int len); 129*e1eccf28SAndroid Build Coastguard Worker uint32_t __attribute((used)) rsrToClientBlocking(Context *, int cmdID, void *data, int len); 130*e1eccf28SAndroid Build Coastguard Worker 131*e1eccf28SAndroid Build Coastguard Worker uint32_t rsrToClient(Context *, int cmdID, const void *data, int len); 132*e1eccf28SAndroid Build Coastguard Worker uint32_t rsrToClientBlocking(Context *, int cmdID, const void *data, int len); 133*e1eccf28SAndroid Build Coastguard Worker 134*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 135*e1eccf28SAndroid Build Coastguard Worker // 136*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 137*e1eccf28SAndroid Build Coastguard Worker 138*e1eccf28SAndroid Build Coastguard Worker void rsrSetObject(const Context *, rs_object_base *dst, const ObjectBase *src); 139*e1eccf28SAndroid Build Coastguard Worker void rsrClearObject(rs_object_base *dst); 140*e1eccf28SAndroid Build Coastguard Worker 141*e1eccf28SAndroid Build Coastguard Worker bool rsrIsObject(const Context *, rs_object_base src); 142*e1eccf28SAndroid Build Coastguard Worker bool rsrIsObject(const Context *, ObjectBase* src); 143*e1eccf28SAndroid Build Coastguard Worker 144*e1eccf28SAndroid Build Coastguard Worker void rsrAllocationIncRefs(const Context *, const Allocation *, void *ptr, 145*e1eccf28SAndroid Build Coastguard Worker size_t elementCount, size_t startOffset); 146*e1eccf28SAndroid Build Coastguard Worker void rsrAllocationDecRefs(const Context *, const Allocation *, void *ptr, 147*e1eccf28SAndroid Build Coastguard Worker size_t elementCount, size_t startOffset); 148*e1eccf28SAndroid Build Coastguard Worker 149*e1eccf28SAndroid Build Coastguard Worker 150*e1eccf28SAndroid Build Coastguard Worker void rsrAllocationSyncAll(Context *, Allocation *a, RsAllocationUsageType source); 151*e1eccf28SAndroid Build Coastguard Worker 152*e1eccf28SAndroid Build Coastguard Worker 153*e1eccf28SAndroid Build Coastguard Worker void rsrForEach(Context *, Script *target, 154*e1eccf28SAndroid Build Coastguard Worker uint32_t slot, 155*e1eccf28SAndroid Build Coastguard Worker uint32_t numInputs, 156*e1eccf28SAndroid Build Coastguard Worker Allocation **in, 157*e1eccf28SAndroid Build Coastguard Worker Allocation *out, 158*e1eccf28SAndroid Build Coastguard Worker const void *usr, 159*e1eccf28SAndroid Build Coastguard Worker uint32_t usrBytes, 160*e1eccf28SAndroid Build Coastguard Worker const RsScriptCall *call); 161*e1eccf28SAndroid Build Coastguard Worker 162*e1eccf28SAndroid Build Coastguard Worker RsElement rsrElementCreate(Context *rsc, RsDataType dt, RsDataKind dk, 163*e1eccf28SAndroid Build Coastguard Worker bool norm, uint32_t vecSize); 164*e1eccf28SAndroid Build Coastguard Worker 165*e1eccf28SAndroid Build Coastguard Worker RsType rsrTypeCreate(Context *, const RsElement element, uint32_t dimX, 166*e1eccf28SAndroid Build Coastguard Worker uint32_t dimY, uint32_t dimZ, bool mipmaps, bool faces, 167*e1eccf28SAndroid Build Coastguard Worker uint32_t yuv); 168*e1eccf28SAndroid Build Coastguard Worker 169*e1eccf28SAndroid Build Coastguard Worker RsAllocation rsrAllocationCreateTyped(Context *, const RsType type, 170*e1eccf28SAndroid Build Coastguard Worker RsAllocationMipmapControl mipmaps, 171*e1eccf28SAndroid Build Coastguard Worker uint32_t usages, uintptr_t ptr); 172*e1eccf28SAndroid Build Coastguard Worker 173*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 174*e1eccf28SAndroid Build Coastguard Worker // Heavy math functions 175*e1eccf28SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 176*e1eccf28SAndroid Build Coastguard Worker 177*e1eccf28SAndroid Build Coastguard Worker 178*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v); 179*e1eccf28SAndroid Build Coastguard Worker float rsrMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col); 180*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v); 181*e1eccf28SAndroid Build Coastguard Worker float rsrMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col); 182*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v); 183*e1eccf28SAndroid Build Coastguard Worker float rsrMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col); 184*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadIdentity_4x4(rs_matrix4x4 *m); 185*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadIdentity_3x3(rs_matrix3x3 *m); 186*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadIdentity_2x2(rs_matrix2x2 *m); 187*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoad_4x4_f(rs_matrix4x4 *m, const float *v); 188*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoad_3x3_f(rs_matrix3x3 *m, const float *v); 189*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoad_2x2_f(rs_matrix2x2 *m, const float *v); 190*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoad_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *v); 191*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoad_4x4_3x3(rs_matrix4x4 *m, const rs_matrix3x3 *v); 192*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoad_4x4_2x2(rs_matrix4x4 *m, const rs_matrix2x2 *v); 193*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoad_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *v); 194*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoad_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *v); 195*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); 196*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z); 197*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z); 198*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadMultiply_4x4_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, 199*e1eccf28SAndroid Build Coastguard Worker const rs_matrix4x4 *rhs); 200*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixMultiply_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *rhs); 201*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadMultiply_3x3_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, 202*e1eccf28SAndroid Build Coastguard Worker const rs_matrix3x3 *rhs); 203*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixMultiply_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *rhs); 204*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadMultiply_2x2_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, 205*e1eccf28SAndroid Build Coastguard Worker const rs_matrix2x2 *rhs); 206*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixMultiply_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *rhs); 207*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); 208*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixScale(rs_matrix4x4 *m, float x, float y, float z); 209*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z); 210*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right, 211*e1eccf28SAndroid Build Coastguard Worker float bottom, float top, float near, float far); 212*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right, 213*e1eccf28SAndroid Build Coastguard Worker float bottom, float top, float near, float far); 214*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far); 215*e1eccf28SAndroid Build Coastguard Worker 216*e1eccf28SAndroid Build Coastguard Worker // Returns true if the matrix was successfully inversed 217*e1eccf28SAndroid Build Coastguard Worker bool rsrMatrixInverse_4x4(rs_matrix4x4 *m); 218*e1eccf28SAndroid Build Coastguard Worker // Returns true if the matrix was successfully inversed 219*e1eccf28SAndroid Build Coastguard Worker bool rsrMatrixInverseTranspose_4x4(rs_matrix4x4 *m); 220*e1eccf28SAndroid Build Coastguard Worker 221*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixTranspose_4x4(rs_matrix4x4 *m); 222*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixTranspose_3x3(rs_matrix3x3 *m); 223*e1eccf28SAndroid Build Coastguard Worker void rsrMatrixTranspose_2x2(rs_matrix2x2 *m); 224*e1eccf28SAndroid Build Coastguard Worker 225*e1eccf28SAndroid Build Coastguard Worker } // namespace renderscript 226*e1eccf28SAndroid Build Coastguard Worker } // namespace android 227