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