blob: 6d45285e6d9fe36f7ded861d5001560530219e31 [file] [log] [blame]
Jason Samsfcf72312011-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 *);
88void rsrClearColor(Context *, Script *, float r, float g, float b, float a);
89void rsrClearDepth(Context *, Script *, float v);
90uint32_t rsrGetWidth(Context *, Script *);
91uint32_t rsrGetHeight(Context *, Script *);
92void rsrDrawTextAlloc(Context *, Script *, Allocation *, int x, int y);
93void rsrDrawText(Context *, Script *, const char *text, int x, int y);
94void rsrSetMetrics(Context *, Script *, Font::Rect *metrics,
95 int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
96void rsrMeasureTextAlloc(Context *, Script *, Allocation *,
97 int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
98void rsrMeasureText(Context *, Script *, const char *text,
99 int32_t *left, int32_t *right, int32_t *top, int32_t *bottom);
100void rsrBindFont(Context *, Script *, Font *);
101void rsrFontColor(Context *, Script *, float r, float g, float b, float a);
102
103//////////////////////////////////////////////////////////////////////////////
104// Time routines
105//////////////////////////////////////////////////////////////////////////////
106
107float rsrGetDt(Context *, Script *);
108time_t rsrTime(Context *, Script *, time_t *timer);
109tm* rsrLocalTime(Context *, Script *, tm *local, time_t *timer);
110int64_t rsrUptimeMillis(Context *, Script *);
111int64_t rsrUptimeNanos(Context *, Script *);
112
113//////////////////////////////////////////////////////////////////////////////
114// Message routines
115//////////////////////////////////////////////////////////////////////////////
116
117uint32_t rsrToClient(Context *, Script *, int cmdID, void *data, int len);
118uint32_t rsrToClientBlocking(Context *, Script *, int cmdID, void *data, int len);
119
120//////////////////////////////////////////////////////////////////////////////
121//
122//////////////////////////////////////////////////////////////////////////////
123
124void rsrSetObject(const Context *, const Script *, ObjectBase **dst, ObjectBase * src);
125void rsrClearObject(const Context *, const Script *, ObjectBase **dst);
126bool rsrIsObject(const Context *, const Script *, const ObjectBase *src);
127
Jason Sams7e8aae72011-05-26 16:33:01 -0700128void rsrAllocationIncRefs(const Context *, const Allocation *, void *ptr,
129 size_t elementCount, size_t startOffset);
130void rsrAllocationDecRefs(const Context *, const Allocation *, void *ptr,
131 size_t elementCount, size_t startOffset);
132
133
Jason Samsfcf72312011-04-20 15:09:01 -0700134uint32_t rsrToClient(Context *, Script *, int cmdID, void *data, int len);
135uint32_t rsrToClientBlocking(Context *, Script *, int cmdID, void *data, int len);
136const Allocation * rsrGetAllocation(Context *, Script *, const void *ptr);
137
138void rsrAllocationMarkDirty(Context *, Script *, RsAllocation a);
139void rsrAllocationSyncAll(Context *, Script *, Allocation *a, RsAllocationUsageType source);
140
141
142void rsrForEach(Context *, Script *, Script *target,
143 Allocation *in,
144 Allocation *out,
145 const void *usr,
146 uint32_t usrBytes,
147 const RsScriptCall *call);
148
149
150//////////////////////////////////////////////////////////////////////////////
151// Heavy math functions
152//////////////////////////////////////////////////////////////////////////////
153
154
155void rsrMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v);
156float rsrMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col);
157void rsrMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v);
158float rsrMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col);
159void rsrMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v);
160float rsrMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col);
161void rsrMatrixLoadIdentity_4x4(rs_matrix4x4 *m);
162void rsrMatrixLoadIdentity_3x3(rs_matrix3x3 *m);
163void rsrMatrixLoadIdentity_2x2(rs_matrix2x2 *m);
164void rsrMatrixLoad_4x4_f(rs_matrix4x4 *m, const float *v);
165void rsrMatrixLoad_3x3_f(rs_matrix3x3 *m, const float *v);
166void rsrMatrixLoad_2x2_f(rs_matrix2x2 *m, const float *v);
167void rsrMatrixLoad_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *v);
168void rsrMatrixLoad_4x4_3x3(rs_matrix4x4 *m, const rs_matrix3x3 *v);
169void rsrMatrixLoad_4x4_2x2(rs_matrix4x4 *m, const rs_matrix2x2 *v);
170void rsrMatrixLoad_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *v);
171void rsrMatrixLoad_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *v);
172void rsrMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
173void rsrMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z);
174void rsrMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z);
175void rsrMatrixLoadMultiply_4x4_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *lhs,
176 const rs_matrix4x4 *rhs);
177void rsrMatrixMultiply_4x4_4x4(rs_matrix4x4 *m, const rs_matrix4x4 *rhs);
178void rsrMatrixLoadMultiply_3x3_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *lhs,
179 const rs_matrix3x3 *rhs);
180void rsrMatrixMultiply_3x3_3x3(rs_matrix3x3 *m, const rs_matrix3x3 *rhs);
181void rsrMatrixLoadMultiply_2x2_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *lhs,
182 const rs_matrix2x2 *rhs);
183void rsrMatrixMultiply_2x2_2x2(rs_matrix2x2 *m, const rs_matrix2x2 *rhs);
184void rsrMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
185void rsrMatrixScale(rs_matrix4x4 *m, float x, float y, float z);
186void rsrMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z);
187void rsrMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right,
188 float bottom, float top, float near, float far);
189void rsrMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right,
190 float bottom, float top, float near, float far);
191void rsrMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far);
192
193// Returns true if the matrix was successfully inversed
194bool rsrMatrixInverse_4x4(rs_matrix4x4 *m);
195// Returns true if the matrix was successfully inversed
196bool rsrMatrixInverseTranspose_4x4(rs_matrix4x4 *m);
197
198void rsrMatrixTranspose_4x4(rs_matrix4x4 *m);
199void rsrMatrixTranspose_3x3(rs_matrix3x3 *m);
200void rsrMatrixTranspose_2x2(rs_matrix2x2 *m);
201
202}
203}