187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams/*
287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * Copyright (C) 2009 The Android Open Source Project
387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *
487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * you may not use this file except in compliance with the License.
687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * You may obtain a copy of the License at
787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *
887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *
1087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * Unless required by applicable law or agreed to in writing, software
1187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * See the License for the specific language governing permissions and
1487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * limitations under the License.
1587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams */
1687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
1787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsContext.h"
1887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsScriptC.h"
1987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
20b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hines#if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB)
2187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "utils/Timers.h"
220b575de8ed0b628d84d256f5846500b0385979bdTim Murray#endif
2387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include <time.h>
2587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsnamespace android {
2787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsnamespace renderscript {
2887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
3187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Context
3287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
3387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3493eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Samsvoid rsrAllocationSyncAll(Context *, Script *, Allocation *);
3593eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams
3693eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#ifndef RS_COMPATIBILITY_LIB
37709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindTexture(Context *, ProgramFragment *, uint32_t slot, Allocation *);
38709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindConstant(Context *, ProgramFragment *, uint32_t slot, Allocation *);
39709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindConstant(Context *, ProgramVertex*, uint32_t slot, Allocation *);
40709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindSampler(Context *, ProgramFragment *, uint32_t slot, Sampler *);
41709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindProgramStore(Context *, ProgramStore *);
42709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindProgramFragment(Context *, ProgramFragment *);
43709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindProgramVertex(Context *, ProgramVertex *);
44709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindProgramRaster(Context *, ProgramRaster *);
45709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindFrameBufferObjectColorTarget(Context *, Allocation *, uint32_t slot);
46709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindFrameBufferObjectDepthTarget(Context *, Allocation *);
47709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrClearFrameBufferObjectColorTarget(Context *, uint32_t slot);
48709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrClearFrameBufferObjectDepthTarget(Context *);
49709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrClearFrameBufferObjectTargets(Context *);
5087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
5187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
5287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// VP
5387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
5487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
55709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrVpLoadProjectionMatrix(Context *, const rsc_Matrix *m);
56709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrVpLoadModelMatrix(Context *, const rsc_Matrix *m);
57709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrVpLoadTextureMatrix(Context *, const rsc_Matrix *m);
58709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrPfConstantColor(Context *, ProgramFragment *, float r, float g, float b, float a);
59709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrVpGetProjectionMatrix(Context *, rsc_Matrix *m);
6087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
6187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
6287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Drawing
6387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
6487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
65709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrDrawPath(Context *, Path *);
66709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrDrawMesh(Context *, Mesh *);
67709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrDrawMeshPrimitive(Context *, Mesh *, uint32_t primIndex);
68709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrDrawMeshPrimitiveRange(Context *, Mesh *,
6987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               uint32_t primIndex, uint32_t start, uint32_t len);
70709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrMeshComputeBoundingBox(Context *, Mesh *,
7187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               float *minX, float *minY, float *minZ,
7287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               float *maxX, float *maxY, float *maxZ);
7387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
7687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//
7787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
7887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
80709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrColor(Context *, float r, float g, float b, float a);
8193eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#endif
8274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
8374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsrAllocationCopy1DRange(Context *, Allocation *dstAlloc,
8474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              uint32_t dstOff,
8574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              uint32_t dstMip,
8674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              uint32_t count,
8774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              Allocation *srcAlloc,
8874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              uint32_t srcOff, uint32_t srcMip);
8974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsrAllocationCopy2DRange(Context *, Allocation *dstAlloc,
9074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              uint32_t dstXoff, uint32_t dstYoff,
9174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              uint32_t dstMip, uint32_t dstFace,
9274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              uint32_t width, uint32_t height,
9374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              Allocation *srcAlloc,
9474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              uint32_t srcXoff, uint32_t srcYoff,
9574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                              uint32_t srcMip, uint32_t srcFace);
9674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
9793eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#ifndef RS_COMPATIBILITY_LIB
98709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrPrepareClear(Context *);
99709a0978ae141198018ca9769f8d96292a8928e6Jason Samsuint32_t rsrGetWidth(Context *);
100709a0978ae141198018ca9769f8d96292a8928e6Jason Samsuint32_t rsrGetHeight(Context *);
101709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrDrawTextAlloc(Context *, Allocation *, int x, int y);
102709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrDrawText(Context *, const char *text, int x, int y);
103709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrSetMetrics(Context *, Font::Rect *metrics,
10487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                   int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
105709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrMeasureTextAlloc(Context *, Allocation *,
10687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
107709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrMeasureText(Context *, const char *text,
10887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                    int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
109709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrBindFont(Context *, Font *);
110709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrFontColor(Context *, float r, float g, float b, float a);
111ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams
1127a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines#endif
1137a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines
114ddceab9a001f07a3395226c5e06e3b420720af0fJason Samsvoid rsrAllocationIoSend(Context *, Allocation *);
115ddceab9a001f07a3395226c5e06e3b420720af0fJason Samsvoid rsrAllocationIoReceive(Context *, Allocation *);
116ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams
11787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
11887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Time routines
11987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
12087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
121709a0978ae141198018ca9769f8d96292a8928e6Jason Samsfloat rsrGetDt(Context *, const Script *sc);
122709a0978ae141198018ca9769f8d96292a8928e6Jason Samstime_t rsrTime(Context *, time_t *timer);
123709a0978ae141198018ca9769f8d96292a8928e6Jason Samstm* rsrLocalTime(Context *, tm *local, time_t *timer);
124709a0978ae141198018ca9769f8d96292a8928e6Jason Samsint64_t rsrUptimeMillis(Context *);
125709a0978ae141198018ca9769f8d96292a8928e6Jason Samsint64_t rsrUptimeNanos(Context *);
12687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
12787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
12887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Message routines
12987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
13087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
13170537f52bdc6e8702db03cc91fe511371fb31267Stephen Hines// Keep existing routines to not break current GPU drivers.
13270537f52bdc6e8702db03cc91fe511371fb31267Stephen Hinesuint32_t __attribute((used)) rsrToClient(Context *, int cmdID, void *data, int len);
13370537f52bdc6e8702db03cc91fe511371fb31267Stephen Hinesuint32_t __attribute((used)) rsrToClientBlocking(Context *, int cmdID, void *data, int len);
13470537f52bdc6e8702db03cc91fe511371fb31267Stephen Hines
135276000a3673e639f9abc41db4709c1b0a96c1bf9Stephen Hinesuint32_t rsrToClient(Context *, int cmdID, const void *data, int len);
136276000a3673e639f9abc41db4709c1b0a96c1bf9Stephen Hinesuint32_t rsrToClientBlocking(Context *, int cmdID, const void *data, int len);
13787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
13887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
13987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//
14087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
14187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
142f29edf80510d483b8663e9d8b859959e37361aeeJason Samsvoid rsrSetObject(const Context *, rs_object_base *dst, const ObjectBase *src);
143f29edf80510d483b8663e9d8b859959e37361aeeJason Samsvoid rsrClearObject(const Context *, rs_object_base *dst);
1441aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray
145f29edf80510d483b8663e9d8b859959e37361aeeJason Samsbool rsrIsObject(const Context *, rs_object_base src);
1461aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murraybool rsrIsObject(const Context *, ObjectBase* src);
14787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
148eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsrAllocationIncRefs(const Context *, const Allocation *, void *ptr,
149eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          size_t elementCount, size_t startOffset);
150eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsrAllocationDecRefs(const Context *, const Allocation *, void *ptr,
151eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          size_t elementCount, size_t startOffset);
152eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
153eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
154709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrAllocationSyncAll(Context *, Allocation *a, RsAllocationUsageType source);
15587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
15687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
157709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrForEach(Context *, Script *target,
15887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                Allocation *in,
15987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                Allocation *out,
16087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                const void *usr,
16187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                 uint32_t usrBytes,
16287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                const RsScriptCall *call);
16387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
16687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Heavy math functions
16787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
16887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
17087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v);
17187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsfloat rsrMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col);
17287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v);
17387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsfloat rsrMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col);
17487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v);
17587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsfloat rsrMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col);
17687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadIdentity_4x4(rs_matrix4x4 *m);
17787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadIdentity_3x3(rs_matrix3x3 *m);
17887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadIdentity_2x2(rs_matrix2x2 *m);
17987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoad_4x4_f(rs_matrix4x4 *m, const float *v);
18087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoad_3x3_f(rs_matrix3x3 *m, const float *v);
18187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoad_2x2_f(rs_matrix2x2 *m, const float *v);
18287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoad_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *v);
18387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoad_4x4_3x3(rs_matrix4x4 *m, const rs_matrix3x3 *v);
18487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoad_4x4_2x2(rs_matrix4x4 *m, const rs_matrix2x2 *v);
18587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoad_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *v);
18687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoad_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *v);
18787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
18887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z);
18987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z);
19087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadMultiply_4x4_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *lhs,
19187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                       const rs_matrix4x4 *rhs);
19287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixMultiply_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *rhs);
19387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadMultiply_3x3_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *lhs,
19487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                       const rs_matrix3x3 *rhs);
19587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixMultiply_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *rhs);
19687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadMultiply_2x2_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *lhs,
19787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                       const rs_matrix2x2 *rhs);
19887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixMultiply_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *rhs);
19987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
20087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixScale(rs_matrix4x4 *m, float x, float y, float z);
20187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z);
20287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right,
20387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float bottom, float top, float near, float far);
20487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right,
20587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                          float bottom, float top, float near, float far);
20687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far);
20787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
20887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Returns true if the matrix was successfully inversed
20987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsbool rsrMatrixInverse_4x4(rs_matrix4x4 *m);
21087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Returns true if the matrix was successfully inversed
21187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsbool rsrMatrixInverseTranspose_4x4(rs_matrix4x4 *m);
21287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
21387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixTranspose_4x4(rs_matrix4x4 *m);
21487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixTranspose_3x3(rs_matrix3x3 *m);
21587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid rsrMatrixTranspose_2x2(rs_matrix2x2 *m);
21687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
21787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
21887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
219