rsRuntime.h revision 9e0afb5a2b3e476c42a373e7cd89cef4a34f8195
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 rsrBindSampler(Context *, Script *, ProgramFragment *, uint32_t slot, Sampler *);
34void rsrBindProgramStore(Context *, Script *, ProgramStore *);
35void rsrBindProgramFragment(Context *, Script *, ProgramFragment *);
36void rsrBindProgramVertex(Context *, Script *, ProgramVertex *);
37void rsrBindProgramRaster(Context *, Script *, ProgramRaster *);
38void rsrBindFrameBufferObjectColorTarget(Context *, Script *, Allocation *, uint32_t slot);
39void rsrBindFrameBufferObjectDepthTarget(Context *, Script *, Allocation *);
40void rsrClearFrameBufferObjectColorTarget(Context *, Script *, uint32_t slot);
41void rsrClearFrameBufferObjectDepthTarget(Context *, Script *);
42void rsrClearFrameBufferObjectTargets(Context *, Script *);
43
44//////////////////////////////////////////////////////////////////////////////
45// VP
46//////////////////////////////////////////////////////////////////////////////
47
48void rsrVpLoadProjectionMatrix(Context *, Script *, const rsc_Matrix *m);
49void rsrVpLoadModelMatrix(Context *, Script *, const rsc_Matrix *m);
50void rsrVpLoadTextureMatrix(Context *, Script *, const rsc_Matrix *m);
51void rsrPfConstantColor(Context *, Script *, ProgramFragment *, float r, float g, float b, float a);
52void rsrVpGetProjectionMatrix(Context *, Script *, rsc_Matrix *m);
53
54//////////////////////////////////////////////////////////////////////////////
55// Drawing
56//////////////////////////////////////////////////////////////////////////////
57
58void rsrDrawQuadTexCoords(Context *, Script *,
59                          float x1, float y1, float z1, float u1, float v1,
60                          float x2, float y2, float z2, float u2, float v2,
61                          float x3, float y3, float z3, float u3, float v3,
62                          float x4, float y4, float z4, float u4, float v4);
63void rsrDrawQuad(Context *, Script *,
64                 float x1, float y1, float z1,
65                 float x2, float y2, float z2,
66                 float x3, float y3, float z3,
67                 float x4, float y4, float z4);
68void rsrDrawSpriteScreenspace(Context *, Script *,
69                              float x, float y, float z, float w, float h);
70void rsrDrawRect(Context *, Script *, float x1, float y1, float x2, float y2, float z);
71void rsrDrawPath(Context *, Script *, Path *);
72void rsrDrawMesh(Context *, Script *, Mesh *);
73void rsrDrawMeshPrimitive(Context *, Script *, Mesh *, uint32_t primIndex);
74void rsrDrawMeshPrimitiveRange(Context *, Script *, Mesh *,
75                               uint32_t primIndex, uint32_t start, uint32_t len);
76void rsrMeshComputeBoundingBox(Context *, Script *, Mesh *,
77                               float *minX, float *minY, float *minZ,
78                               float *maxX, float *maxY, float *maxZ);
79
80
81//////////////////////////////////////////////////////////////////////////////
82//
83//////////////////////////////////////////////////////////////////////////////
84
85
86void rsrColor(Context *, Script *, float r, float g, float b, float a);
87void rsrFinish(Context *, Script *);
88void rsrAllocationSyncAll(Context *, Script *, Allocation *);
89
90void rsrAllocationCopy1DRange(Context *, Allocation *dstAlloc,
91                              uint32_t dstOff,
92                              uint32_t dstMip,
93                              uint32_t count,
94                              Allocation *srcAlloc,
95                              uint32_t srcOff, uint32_t srcMip);
96void rsrAllocationCopy2DRange(Context *, Allocation *dstAlloc,
97                              uint32_t dstXoff, uint32_t dstYoff,
98                              uint32_t dstMip, uint32_t dstFace,
99                              uint32_t width, uint32_t height,
100                              Allocation *srcAlloc,
101                              uint32_t srcXoff, uint32_t srcYoff,
102                              uint32_t srcMip, uint32_t srcFace);
103
104void rsrClearColor(Context *, Script *, float r, float g, float b, float a);
105void rsrClearDepth(Context *, Script *, float v);
106uint32_t rsrGetWidth(Context *, Script *);
107uint32_t rsrGetHeight(Context *, Script *);
108void rsrDrawTextAlloc(Context *, Script *, Allocation *, int x, int y);
109void rsrDrawText(Context *, Script *, const char *text, int x, int y);
110void rsrSetMetrics(Context *, Script *, Font::Rect *metrics,
111                   int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
112void rsrMeasureTextAlloc(Context *, Script *, Allocation *,
113                         int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
114void rsrMeasureText(Context *, Script *, const char *text,
115                    int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
116void rsrBindFont(Context *, Script *, Font *);
117void rsrFontColor(Context *, Script *, float r, float g, float b, float a);
118
119//////////////////////////////////////////////////////////////////////////////
120// Time routines
121//////////////////////////////////////////////////////////////////////////////
122
123float rsrGetDt(Context *, Script *);
124time_t rsrTime(Context *, Script *, time_t *timer);
125tm* rsrLocalTime(Context *, Script *, tm *local, time_t *timer);
126int64_t rsrUptimeMillis(Context *, Script *);
127int64_t rsrUptimeNanos(Context *, Script *);
128
129//////////////////////////////////////////////////////////////////////////////
130// Message routines
131//////////////////////////////////////////////////////////////////////////////
132
133uint32_t rsrToClient(Context *, Script *, int cmdID, void *data, int len);
134uint32_t rsrToClientBlocking(Context *, Script *, int cmdID, void *data, int len);
135
136//////////////////////////////////////////////////////////////////////////////
137//
138//////////////////////////////////////////////////////////////////////////////
139
140void rsrSetObject(const Context *, const Script *, ObjectBase **dst, ObjectBase * src);
141void rsrClearObject(const Context *, const Script *, ObjectBase **dst);
142bool rsrIsObject(const Context *, const Script *, const ObjectBase *src);
143
144void rsrAllocationIncRefs(const Context *, const Allocation *, void *ptr,
145                          size_t elementCount, size_t startOffset);
146void rsrAllocationDecRefs(const Context *, const Allocation *, void *ptr,
147                          size_t elementCount, size_t startOffset);
148
149
150uint32_t rsrToClient(Context *, Script *, int cmdID, void *data, int len);
151uint32_t rsrToClientBlocking(Context *, Script *, int cmdID, void *data, int len);
152const Allocation * rsrGetAllocation(Context *, Script *, const void *ptr);
153
154void rsrAllocationMarkDirty(Context *, Script *, RsAllocation a);
155void rsrAllocationSyncAll(Context *, Script *, Allocation *a, RsAllocationUsageType source);
156
157
158void rsrForEach(Context *, Script *, Script *target,
159                Allocation *in,
160                Allocation *out,
161                const void *usr,
162                 uint32_t usrBytes,
163                const RsScriptCall *call);
164
165
166//////////////////////////////////////////////////////////////////////////////
167// Heavy math functions
168//////////////////////////////////////////////////////////////////////////////
169
170
171void rsrMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v);
172float rsrMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col);
173void rsrMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v);
174float rsrMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col);
175void rsrMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v);
176float rsrMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col);
177void rsrMatrixLoadIdentity_4x4(rs_matrix4x4 *m);
178void rsrMatrixLoadIdentity_3x3(rs_matrix3x3 *m);
179void rsrMatrixLoadIdentity_2x2(rs_matrix2x2 *m);
180void rsrMatrixLoad_4x4_f(rs_matrix4x4 *m, const float *v);
181void rsrMatrixLoad_3x3_f(rs_matrix3x3 *m, const float *v);
182void rsrMatrixLoad_2x2_f(rs_matrix2x2 *m, const float *v);
183void rsrMatrixLoad_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *v);
184void rsrMatrixLoad_4x4_3x3(rs_matrix4x4 *m, const rs_matrix3x3 *v);
185void rsrMatrixLoad_4x4_2x2(rs_matrix4x4 *m, const rs_matrix2x2 *v);
186void rsrMatrixLoad_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *v);
187void rsrMatrixLoad_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *v);
188void rsrMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
189void rsrMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z);
190void rsrMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z);
191void rsrMatrixLoadMultiply_4x4_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *lhs,
192                                       const rs_matrix4x4 *rhs);
193void rsrMatrixMultiply_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *rhs);
194void rsrMatrixLoadMultiply_3x3_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *lhs,
195                                       const rs_matrix3x3 *rhs);
196void rsrMatrixMultiply_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *rhs);
197void rsrMatrixLoadMultiply_2x2_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *lhs,
198                                       const rs_matrix2x2 *rhs);
199void rsrMatrixMultiply_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *rhs);
200void rsrMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
201void rsrMatrixScale(rs_matrix4x4 *m, float x, float y, float z);
202void rsrMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z);
203void rsrMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right,
204                        float bottom, float top, float near, float far);
205void rsrMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right,
206                          float bottom, float top, float near, float far);
207void rsrMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far);
208
209// Returns true if the matrix was successfully inversed
210bool rsrMatrixInverse_4x4(rs_matrix4x4 *m);
211// Returns true if the matrix was successfully inversed
212bool rsrMatrixInverseTranspose_4x4(rs_matrix4x4 *m);
213
214void rsrMatrixTranspose_4x4(rs_matrix4x4 *m);
215void rsrMatrixTranspose_3x3(rs_matrix3x3 *m);
216void rsrMatrixTranspose_2x2(rs_matrix2x2 *m);
217
218}
219}
220