10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2009 The Android Open Source Project 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License. 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License. 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsContext.h" 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsScriptC.h" 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "utils/Timers.h" 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include <time.h> 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android { 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript { 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Context 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrAllocationSyncAll(Context *, Script *, Allocation *); 330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrAllocationCopy1DRange(Context *, Allocation *dstAlloc, 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t dstOff, 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t dstMip, 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t count, 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation *srcAlloc, 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t srcOff, uint32_t srcMip); 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrAllocationCopy2DRange(Context *, Allocation *dstAlloc, 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t dstXoff, uint32_t dstYoff, 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t dstMip, uint32_t dstFace, 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t width, uint32_t height, 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation *srcAlloc, 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t srcXoff, uint32_t srcYoff, 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t srcMip, uint32_t srcFace); 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Time routines 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesfloat rsrGetDt(Context *, Script *); 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestime_t rsrTime(Context *, Script *, time_t *timer); 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestm* rsrLocalTime(Context *, Script *, tm *local, time_t *timer); 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesint64_t rsrUptimeMillis(Context *, Script *); 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesint64_t rsrUptimeNanos(Context *, Script *); 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Message routines 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesuint32_t rsrToClient(Context *, Script *, int cmdID, void *data, int len); 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesuint32_t rsrToClientBlocking(Context *, Script *, int cmdID, void *data, int len); 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrSetObject(const Context *, const Script *, ObjectBase **dst, ObjectBase * src); 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrClearObject(const Context *, const Script *, ObjectBase **dst); 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesbool rsrIsObject(const Context *, const Script *, const ObjectBase *src); 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrAllocationIncRefs(const Context *, const Allocation *, void *ptr, 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t elementCount, size_t startOffset); 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrAllocationDecRefs(const Context *, const Allocation *, void *ptr, 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t elementCount, size_t startOffset); 770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesuint32_t rsrToClient(Context *, Script *, int cmdID, void *data, int len); 800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesuint32_t rsrToClientBlocking(Context *, Script *, int cmdID, void *data, int len); 810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrAllocationMarkDirty(Context *, Script *, RsAllocation a); 830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrAllocationSyncAll(Context *, Script *, Allocation *a, RsAllocationUsageType source); 840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrForEach(Context *, Script *, Script *target, 870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation *in, 880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation *out, 890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *usr, 900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t usrBytes, 910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const RsScriptCall *call); 920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Heavy math functions 960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v); 1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesfloat rsrMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col); 1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v); 1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesfloat rsrMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col); 1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v); 1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesfloat rsrMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col); 1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadIdentity_4x4(rs_matrix4x4 *m); 1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadIdentity_3x3(rs_matrix3x3 *m); 1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadIdentity_2x2(rs_matrix2x2 *m); 1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoad_4x4_f(rs_matrix4x4 *m, const float *v); 1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoad_3x3_f(rs_matrix3x3 *m, const float *v); 1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoad_2x2_f(rs_matrix2x2 *m, const float *v); 1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoad_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *v); 1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoad_4x4_3x3(rs_matrix4x4 *m, const rs_matrix3x3 *v); 1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoad_4x4_2x2(rs_matrix4x4 *m, const rs_matrix2x2 *v); 1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoad_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *v); 1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoad_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *v); 1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); 1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z); 1180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z); 1190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadMultiply_4x4_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, 1200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const rs_matrix4x4 *rhs); 1210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixMultiply_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *rhs); 1220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadMultiply_3x3_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, 1230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const rs_matrix3x3 *rhs); 1240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixMultiply_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *rhs); 1250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadMultiply_2x2_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, 1260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const rs_matrix2x2 *rhs); 1270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixMultiply_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *rhs); 1280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); 1290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixScale(rs_matrix4x4 *m, float x, float y, float z); 1300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z); 1310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right, 1320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines float bottom, float top, float near, float far); 1330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right, 1340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines float bottom, float top, float near, float far); 1350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far); 1360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Returns true if the matrix was successfully inversed 1380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesbool rsrMatrixInverse_4x4(rs_matrix4x4 *m); 1390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Returns true if the matrix was successfully inversed 1400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesbool rsrMatrixInverseTranspose_4x4(rs_matrix4x4 *m); 1410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixTranspose_4x4(rs_matrix4x4 *m); 1430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixTranspose_3x3(rs_matrix3x3 *m); 1440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsrMatrixTranspose_2x2(rs_matrix2x2 *m); 1450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 148