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