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