blob: cb962a815dc39a7537e29f1baddeb4ac38be93fc [file] [log] [blame]
Jason Sams87fe59a2011-04-20 15:09:01 -07001/*
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 rsrDrawMesh(Context *, Script *, Mesh *);
72void rsrDrawMeshPrimitive(Context *, Script *, Mesh *, uint32_t primIndex);
73void rsrDrawMeshPrimitiveRange(Context *, Script *, Mesh *,
74 uint32_t primIndex, uint32_t start, uint32_t len);
75void rsrMeshComputeBoundingBox(Context *, Script *, Mesh *,
76 float *minX, float *minY, float *minZ,
77 float *maxX, float *maxY, float *maxZ);
78
79
80//////////////////////////////////////////////////////////////////////////////
81//
82//////////////////////////////////////////////////////////////////////////////
83
84
85void rsrColor(Context *, Script *, float r, float g, float b, float a);
86void rsrFinish(Context *, Script *);
87void rsrAllocationSyncAll(Context *, Script *, Allocation *);
Alex Sakhartchouk74a82792011-06-14 11:13:19 -070088
89void rsrAllocationCopy1DRange(Context *, Allocation *dstAlloc,
90 uint32_t dstOff,
91 uint32_t dstMip,
92 uint32_t count,
93 Allocation *srcAlloc,
94 uint32_t srcOff, uint32_t srcMip);
95void rsrAllocationCopy2DRange(Context *, Allocation *dstAlloc,
96 uint32_t dstXoff, uint32_t dstYoff,
97 uint32_t dstMip, uint32_t dstFace,
98 uint32_t width, uint32_t height,
99 Allocation *srcAlloc,
100 uint32_t srcXoff, uint32_t srcYoff,
101 uint32_t srcMip, uint32_t srcFace);
102
Jason Sams87fe59a2011-04-20 15:09:01 -0700103void rsrClearColor(Context *, Script *, float r, float g, float b, float a);
104void rsrClearDepth(Context *, Script *, float v);
105uint32_t rsrGetWidth(Context *, Script *);
106uint32_t rsrGetHeight(Context *, Script *);
107void rsrDrawTextAlloc(Context *, Script *, Allocation *, int x, int y);
108void rsrDrawText(Context *, Script *, const char *text, int x, int y);
109void rsrSetMetrics(Context *, Script *, Font::Rect *metrics,
110 int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
111void rsrMeasureTextAlloc(Context *, Script *, Allocation *,
112 int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
113void rsrMeasureText(Context *, Script *, const char *text,
114 int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
115void rsrBindFont(Context *, Script *, Font *);
116void rsrFontColor(Context *, Script *, float r, float g, float b, float a);
117
118//////////////////////////////////////////////////////////////////////////////
119// Time routines
120//////////////////////////////////////////////////////////////////////////////
121
122float rsrGetDt(Context *, Script *);
123time_t rsrTime(Context *, Script *, time_t *timer);
124tm* rsrLocalTime(Context *, Script *, tm *local, time_t *timer);
125int64_t rsrUptimeMillis(Context *, Script *);
126int64_t rsrUptimeNanos(Context *, Script *);
127
128//////////////////////////////////////////////////////////////////////////////
129// Message routines
130//////////////////////////////////////////////////////////////////////////////
131
132uint32_t rsrToClient(Context *, Script *, int cmdID, void *data, int len);
133uint32_t rsrToClientBlocking(Context *, Script *, int cmdID, void *data, int len);
134
135//////////////////////////////////////////////////////////////////////////////
136//
137//////////////////////////////////////////////////////////////////////////////
138
139void rsrSetObject(const Context *, const Script *, ObjectBase **dst, ObjectBase * src);
140void rsrClearObject(const Context *, const Script *, ObjectBase **dst);
141bool rsrIsObject(const Context *, const Script *, const ObjectBase *src);
142
Jason Samseb4fe182011-05-26 16:33:01 -0700143void rsrAllocationIncRefs(const Context *, const Allocation *, void *ptr,
144 size_t elementCount, size_t startOffset);
145void rsrAllocationDecRefs(const Context *, const Allocation *, void *ptr,
146 size_t elementCount, size_t startOffset);
147
148
Jason Sams87fe59a2011-04-20 15:09:01 -0700149uint32_t rsrToClient(Context *, Script *, int cmdID, void *data, int len);
150uint32_t rsrToClientBlocking(Context *, Script *, int cmdID, void *data, int len);
151const Allocation * rsrGetAllocation(Context *, Script *, const void *ptr);
152
153void rsrAllocationMarkDirty(Context *, Script *, RsAllocation a);
154void rsrAllocationSyncAll(Context *, Script *, Allocation *a, RsAllocationUsageType source);
155
156
157void rsrForEach(Context *, Script *, Script *target,
158 Allocation *in,
159 Allocation *out,
160 const void *usr,
161 uint32_t usrBytes,
162 const RsScriptCall *call);
163
164
165//////////////////////////////////////////////////////////////////////////////
166// Heavy math functions
167//////////////////////////////////////////////////////////////////////////////
168
169
170void rsrMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v);
171float rsrMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col);
172void rsrMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v);
173float rsrMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col);
174void rsrMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v);
175float rsrMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col);
176void rsrMatrixLoadIdentity_4x4(rs_matrix4x4 *m);
177void rsrMatrixLoadIdentity_3x3(rs_matrix3x3 *m);
178void rsrMatrixLoadIdentity_2x2(rs_matrix2x2 *m);
179void rsrMatrixLoad_4x4_f(rs_matrix4x4 *m, const float *v);
180void rsrMatrixLoad_3x3_f(rs_matrix3x3 *m, const float *v);
181void rsrMatrixLoad_2x2_f(rs_matrix2x2 *m, const float *v);
182void rsrMatrixLoad_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *v);
183void rsrMatrixLoad_4x4_3x3(rs_matrix4x4 *m, const rs_matrix3x3 *v);
184void rsrMatrixLoad_4x4_2x2(rs_matrix4x4 *m, const rs_matrix2x2 *v);
185void rsrMatrixLoad_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *v);
186void rsrMatrixLoad_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *v);
187void rsrMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
188void rsrMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z);
189void rsrMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z);
190void rsrMatrixLoadMultiply_4x4_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *lhs,
191 const rs_matrix4x4 *rhs);
192void rsrMatrixMultiply_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *rhs);
193void rsrMatrixLoadMultiply_3x3_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *lhs,
194 const rs_matrix3x3 *rhs);
195void rsrMatrixMultiply_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *rhs);
196void rsrMatrixLoadMultiply_2x2_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *lhs,
197 const rs_matrix2x2 *rhs);
198void rsrMatrixMultiply_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *rhs);
199void rsrMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
200void rsrMatrixScale(rs_matrix4x4 *m, float x, float y, float z);
201void rsrMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z);
202void rsrMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right,
203 float bottom, float top, float near, float far);
204void rsrMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right,
205 float bottom, float top, float near, float far);
206void rsrMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far);
207
208// Returns true if the matrix was successfully inversed
209bool rsrMatrixInverse_4x4(rs_matrix4x4 *m);
210// Returns true if the matrix was successfully inversed
211bool rsrMatrixInverseTranspose_4x4(rs_matrix4x4 *m);
212
213void rsrMatrixTranspose_4x4(rs_matrix4x4 *m);
214void rsrMatrixTranspose_3x3(rs_matrix3x3 *m);
215void rsrMatrixTranspose_2x2(rs_matrix2x2 *m);
216
217}
218}