1 /*
2  * Copyright (C) 2015 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 /*
18  * rsgApiReplay.cpp
19  * This file implements the functions responsible for reading messages
20  * sent to the RS driver layer.
21  */
22 
23 #include "rsDevice.h"
24 #include "rsContext.h"
25 #include "rsThreadIO.h"
26 #include "rsgApiStructs.h"
27 #include "rsgApiFuncDecl.h"
28 
29 namespace android {
30 namespace renderscript {
31 
rsp_ContextSendMessage(Context * con,const void * vp,size_t cmdSizeBytes)32 void rsp_ContextSendMessage(Context *con, const void *vp, size_t cmdSizeBytes) {
33     const RS_CMD_ContextSendMessage *cmd = static_cast<const RS_CMD_ContextSendMessage *>(vp);
34     const uint8_t *baseData = 0;
35     if (cmdSizeBytes != sizeof(RS_CMD_ContextSendMessage)) {
36         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
37     }
38     rsi_ContextSendMessage(con,
39            cmd->id,
40            cmd->data_length == 0 ? NULL : (const uint8_t *)&baseData[(intptr_t)cmd->data],
41            cmd->data_length);
42     size_t totalSize = 0;
43     totalSize += cmd->data_length;
44     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_ContextSendMessage))) {
45         con->mIO.coreSetReturn(NULL, 0);
46     }
47 };
48 
rsp_AllocationSetupBufferQueue(Context * con,const void * vp,size_t cmdSizeBytes)49 void rsp_AllocationSetupBufferQueue(Context *con, const void *vp, size_t cmdSizeBytes) {
50     const RS_CMD_AllocationSetupBufferQueue *cmd = static_cast<const RS_CMD_AllocationSetupBufferQueue *>(vp);
51     rsi_AllocationSetupBufferQueue(con,
52            cmd->alloc,
53            cmd->numAlloc);
54     con->mIO.coreSetReturn(NULL, 0);
55 };
56 
rsp_AllocationShareBufferQueue(Context * con,const void * vp,size_t cmdSizeBytes)57 void rsp_AllocationShareBufferQueue(Context *con, const void *vp, size_t cmdSizeBytes) {
58     const RS_CMD_AllocationShareBufferQueue *cmd = static_cast<const RS_CMD_AllocationShareBufferQueue *>(vp);
59     rsi_AllocationShareBufferQueue(con,
60            cmd->alloc1,
61            cmd->alloc2);
62     con->mIO.coreSetReturn(NULL, 0);
63 };
64 
rsp_AllocationGetSurface(Context * con,const void * vp,size_t cmdSizeBytes)65 void rsp_AllocationGetSurface(Context *con, const void *vp, size_t cmdSizeBytes) {
66     const RS_CMD_AllocationGetSurface *cmd = static_cast<const RS_CMD_AllocationGetSurface *>(vp);
67 
68     RsNativeWindow ret = rsi_AllocationGetSurface(con,
69            cmd->alloc);
70     con->mIO.coreSetReturn(&ret, sizeof(ret));
71 };
72 
rsp_AllocationSetSurface(Context * con,const void * vp,size_t cmdSizeBytes)73 void rsp_AllocationSetSurface(Context *con, const void *vp, size_t cmdSizeBytes) {
74     const RS_CMD_AllocationSetSurface *cmd = static_cast<const RS_CMD_AllocationSetSurface *>(vp);
75     rsi_AllocationSetSurface(con,
76            cmd->alloc,
77            cmd->sur);
78     con->mIO.coreSetReturn(NULL, 0);
79 };
80 
rsp_AllocationAdapterOffset(Context * con,const void * vp,size_t cmdSizeBytes)81 void rsp_AllocationAdapterOffset(Context *con, const void *vp, size_t cmdSizeBytes) {
82     const RS_CMD_AllocationAdapterOffset *cmd = static_cast<const RS_CMD_AllocationAdapterOffset *>(vp);
83     const uint8_t *baseData = 0;
84     if (cmdSizeBytes != sizeof(RS_CMD_AllocationAdapterOffset)) {
85         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
86     }
87     rsi_AllocationAdapterOffset(con,
88            cmd->alloc,
89            cmd->offsets_length == 0 ? NULL : (const uint32_t *)&baseData[(intptr_t)cmd->offsets],
90            cmd->offsets_length);
91     size_t totalSize = 0;
92     totalSize += cmd->offsets_length;
93     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_AllocationAdapterOffset))) {
94         con->mIO.coreSetReturn(NULL, 0);
95     }
96 };
97 
rsp_ContextFinish(Context * con,const void * vp,size_t cmdSizeBytes)98 void rsp_ContextFinish(Context *con, const void *vp, size_t cmdSizeBytes) {
99     const RS_CMD_ContextFinish *cmd = static_cast<const RS_CMD_ContextFinish *>(vp);
100     rsi_ContextFinish(con);
101     con->mIO.coreSetReturn(NULL, 0);
102 };
103 
rsp_ContextDump(Context * con,const void * vp,size_t cmdSizeBytes)104 void rsp_ContextDump(Context *con, const void *vp, size_t cmdSizeBytes) {
105     const RS_CMD_ContextDump *cmd = static_cast<const RS_CMD_ContextDump *>(vp);
106     rsi_ContextDump(con,
107            cmd->bits);
108 };
109 
rsp_ContextSetPriority(Context * con,const void * vp,size_t cmdSizeBytes)110 void rsp_ContextSetPriority(Context *con, const void *vp, size_t cmdSizeBytes) {
111     const RS_CMD_ContextSetPriority *cmd = static_cast<const RS_CMD_ContextSetPriority *>(vp);
112     rsi_ContextSetPriority(con,
113            cmd->priority);
114 };
115 
rsp_ContextDestroyWorker(Context * con,const void * vp,size_t cmdSizeBytes)116 void rsp_ContextDestroyWorker(Context *con, const void *vp, size_t cmdSizeBytes) {
117     const RS_CMD_ContextDestroyWorker *cmd = static_cast<const RS_CMD_ContextDestroyWorker *>(vp);
118     rsi_ContextDestroyWorker(con);
119     con->mIO.coreSetReturn(NULL, 0);
120 };
121 
rsp_AssignName(Context * con,const void * vp,size_t cmdSizeBytes)122 void rsp_AssignName(Context *con, const void *vp, size_t cmdSizeBytes) {
123     const RS_CMD_AssignName *cmd = static_cast<const RS_CMD_AssignName *>(vp);
124     const uint8_t *baseData = 0;
125     if (cmdSizeBytes != sizeof(RS_CMD_AssignName)) {
126         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
127     }
128     rsi_AssignName(con,
129            cmd->obj,
130            cmd->name_length == 0 ? NULL : (const char *)&baseData[(intptr_t)cmd->name],
131            cmd->name_length);
132     size_t totalSize = 0;
133     totalSize += cmd->name_length;
134     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_AssignName))) {
135         con->mIO.coreSetReturn(NULL, 0);
136     }
137 };
138 
rsp_ObjDestroy(Context * con,const void * vp,size_t cmdSizeBytes)139 void rsp_ObjDestroy(Context *con, const void *vp, size_t cmdSizeBytes) {
140     const RS_CMD_ObjDestroy *cmd = static_cast<const RS_CMD_ObjDestroy *>(vp);
141     rsi_ObjDestroy(con,
142            cmd->objPtr);
143 };
144 
rsp_AllocationCopyToBitmap(Context * con,const void * vp,size_t cmdSizeBytes)145 void rsp_AllocationCopyToBitmap(Context *con, const void *vp, size_t cmdSizeBytes) {
146     const RS_CMD_AllocationCopyToBitmap *cmd = static_cast<const RS_CMD_AllocationCopyToBitmap *>(vp);
147     rsi_AllocationCopyToBitmap(con,
148            cmd->alloc,
149            cmd->data,
150            cmd->data_length);
151     con->mIO.coreSetReturn(NULL, 0);
152 };
153 
rsp_AllocationGetPointer(Context * con,const void * vp,size_t cmdSizeBytes)154 void rsp_AllocationGetPointer(Context *con, const void *vp, size_t cmdSizeBytes) {
155     const RS_CMD_AllocationGetPointer *cmd = static_cast<const RS_CMD_AllocationGetPointer *>(vp);
156 
157     void * ret = rsi_AllocationGetPointer(con,
158            cmd->va,
159            cmd->lod,
160            cmd->face,
161            cmd->z,
162            cmd->array,
163            cmd->stride,
164            cmd->stride_length);
165     con->mIO.coreSetReturn(&ret, sizeof(ret));
166 };
167 
rsp_Allocation1DData(Context * con,const void * vp,size_t cmdSizeBytes)168 void rsp_Allocation1DData(Context *con, const void *vp, size_t cmdSizeBytes) {
169     const RS_CMD_Allocation1DData *cmd = static_cast<const RS_CMD_Allocation1DData *>(vp);
170     const uint8_t *baseData = 0;
171     if (cmdSizeBytes != sizeof(RS_CMD_Allocation1DData)) {
172         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
173     }
174     rsi_Allocation1DData(con,
175            cmd->va,
176            cmd->xoff,
177            cmd->lod,
178            cmd->count,
179            cmd->data_length == 0 ? NULL : (const void *)&baseData[(intptr_t)cmd->data],
180            cmd->data_length);
181     size_t totalSize = 0;
182     totalSize += cmd->data_length;
183     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_Allocation1DData))) {
184         con->mIO.coreSetReturn(NULL, 0);
185     }
186 };
187 
rsp_Allocation1DElementData(Context * con,const void * vp,size_t cmdSizeBytes)188 void rsp_Allocation1DElementData(Context *con, const void *vp, size_t cmdSizeBytes) {
189     const RS_CMD_Allocation1DElementData *cmd = static_cast<const RS_CMD_Allocation1DElementData *>(vp);
190     const uint8_t *baseData = 0;
191     if (cmdSizeBytes != sizeof(RS_CMD_Allocation1DElementData)) {
192         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
193     }
194     rsi_Allocation1DElementData(con,
195            cmd->va,
196            cmd->x,
197            cmd->lod,
198            cmd->data_length == 0 ? NULL : (const void *)&baseData[(intptr_t)cmd->data],
199            cmd->data_length,
200            cmd->comp_offset);
201     size_t totalSize = 0;
202     totalSize += cmd->data_length;
203     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_Allocation1DElementData))) {
204         con->mIO.coreSetReturn(NULL, 0);
205     }
206 };
207 
rsp_AllocationElementData(Context * con,const void * vp,size_t cmdSizeBytes)208 void rsp_AllocationElementData(Context *con, const void *vp, size_t cmdSizeBytes) {
209     const RS_CMD_AllocationElementData *cmd = static_cast<const RS_CMD_AllocationElementData *>(vp);
210     const uint8_t *baseData = 0;
211     if (cmdSizeBytes != sizeof(RS_CMD_AllocationElementData)) {
212         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
213     }
214     rsi_AllocationElementData(con,
215            cmd->va,
216            cmd->x,
217            cmd->y,
218            cmd->z,
219            cmd->lod,
220            cmd->data_length == 0 ? NULL : (const void *)&baseData[(intptr_t)cmd->data],
221            cmd->data_length,
222            cmd->comp_offset);
223     size_t totalSize = 0;
224     totalSize += cmd->data_length;
225     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_AllocationElementData))) {
226         con->mIO.coreSetReturn(NULL, 0);
227     }
228 };
229 
rsp_Allocation2DData(Context * con,const void * vp,size_t cmdSizeBytes)230 void rsp_Allocation2DData(Context *con, const void *vp, size_t cmdSizeBytes) {
231     const RS_CMD_Allocation2DData *cmd = static_cast<const RS_CMD_Allocation2DData *>(vp);
232     const uint8_t *baseData = 0;
233     if (cmdSizeBytes != sizeof(RS_CMD_Allocation2DData)) {
234         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
235     }
236     rsi_Allocation2DData(con,
237            cmd->va,
238            cmd->xoff,
239            cmd->yoff,
240            cmd->lod,
241            cmd->face,
242            cmd->w,
243            cmd->h,
244            cmd->data_length == 0 ? NULL : (const void *)&baseData[(intptr_t)cmd->data],
245            cmd->data_length,
246            cmd->stride);
247     size_t totalSize = 0;
248     totalSize += cmd->data_length;
249     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_Allocation2DData))) {
250         con->mIO.coreSetReturn(NULL, 0);
251     }
252 };
253 
rsp_Allocation3DData(Context * con,const void * vp,size_t cmdSizeBytes)254 void rsp_Allocation3DData(Context *con, const void *vp, size_t cmdSizeBytes) {
255     const RS_CMD_Allocation3DData *cmd = static_cast<const RS_CMD_Allocation3DData *>(vp);
256     const uint8_t *baseData = 0;
257     if (cmdSizeBytes != sizeof(RS_CMD_Allocation3DData)) {
258         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
259     }
260     rsi_Allocation3DData(con,
261            cmd->va,
262            cmd->xoff,
263            cmd->yoff,
264            cmd->zoff,
265            cmd->lod,
266            cmd->w,
267            cmd->h,
268            cmd->d,
269            cmd->data_length == 0 ? NULL : (const void *)&baseData[(intptr_t)cmd->data],
270            cmd->data_length,
271            cmd->stride);
272     size_t totalSize = 0;
273     totalSize += cmd->data_length;
274     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_Allocation3DData))) {
275         con->mIO.coreSetReturn(NULL, 0);
276     }
277 };
278 
rsp_AllocationGenerateMipmaps(Context * con,const void * vp,size_t cmdSizeBytes)279 void rsp_AllocationGenerateMipmaps(Context *con, const void *vp, size_t cmdSizeBytes) {
280     const RS_CMD_AllocationGenerateMipmaps *cmd = static_cast<const RS_CMD_AllocationGenerateMipmaps *>(vp);
281     rsi_AllocationGenerateMipmaps(con,
282            cmd->va);
283 };
284 
rsp_AllocationRead(Context * con,const void * vp,size_t cmdSizeBytes)285 void rsp_AllocationRead(Context *con, const void *vp, size_t cmdSizeBytes) {
286     const RS_CMD_AllocationRead *cmd = static_cast<const RS_CMD_AllocationRead *>(vp);
287     rsi_AllocationRead(con,
288            cmd->va,
289            cmd->data,
290            cmd->data_length);
291     con->mIO.coreSetReturn(NULL, 0);
292 };
293 
rsp_Allocation1DRead(Context * con,const void * vp,size_t cmdSizeBytes)294 void rsp_Allocation1DRead(Context *con, const void *vp, size_t cmdSizeBytes) {
295     const RS_CMD_Allocation1DRead *cmd = static_cast<const RS_CMD_Allocation1DRead *>(vp);
296     rsi_Allocation1DRead(con,
297            cmd->va,
298            cmd->xoff,
299            cmd->lod,
300            cmd->count,
301            cmd->data,
302            cmd->data_length);
303     con->mIO.coreSetReturn(NULL, 0);
304 };
305 
rsp_AllocationElementRead(Context * con,const void * vp,size_t cmdSizeBytes)306 void rsp_AllocationElementRead(Context *con, const void *vp, size_t cmdSizeBytes) {
307     const RS_CMD_AllocationElementRead *cmd = static_cast<const RS_CMD_AllocationElementRead *>(vp);
308     rsi_AllocationElementRead(con,
309            cmd->va,
310            cmd->x,
311            cmd->y,
312            cmd->z,
313            cmd->lod,
314            cmd->data,
315            cmd->data_length,
316            cmd->comp_offset);
317     con->mIO.coreSetReturn(NULL, 0);
318 };
319 
rsp_Allocation2DRead(Context * con,const void * vp,size_t cmdSizeBytes)320 void rsp_Allocation2DRead(Context *con, const void *vp, size_t cmdSizeBytes) {
321     const RS_CMD_Allocation2DRead *cmd = static_cast<const RS_CMD_Allocation2DRead *>(vp);
322     rsi_Allocation2DRead(con,
323            cmd->va,
324            cmd->xoff,
325            cmd->yoff,
326            cmd->lod,
327            cmd->face,
328            cmd->w,
329            cmd->h,
330            cmd->data,
331            cmd->data_length,
332            cmd->stride);
333     con->mIO.coreSetReturn(NULL, 0);
334 };
335 
rsp_Allocation3DRead(Context * con,const void * vp,size_t cmdSizeBytes)336 void rsp_Allocation3DRead(Context *con, const void *vp, size_t cmdSizeBytes) {
337     const RS_CMD_Allocation3DRead *cmd = static_cast<const RS_CMD_Allocation3DRead *>(vp);
338     rsi_Allocation3DRead(con,
339            cmd->va,
340            cmd->xoff,
341            cmd->yoff,
342            cmd->zoff,
343            cmd->lod,
344            cmd->w,
345            cmd->h,
346            cmd->d,
347            cmd->data,
348            cmd->data_length,
349            cmd->stride);
350     con->mIO.coreSetReturn(NULL, 0);
351 };
352 
rsp_AllocationSyncAll(Context * con,const void * vp,size_t cmdSizeBytes)353 void rsp_AllocationSyncAll(Context *con, const void *vp, size_t cmdSizeBytes) {
354     const RS_CMD_AllocationSyncAll *cmd = static_cast<const RS_CMD_AllocationSyncAll *>(vp);
355     rsi_AllocationSyncAll(con,
356            cmd->va,
357            cmd->src);
358 };
359 
rsp_AllocationResize1D(Context * con,const void * vp,size_t cmdSizeBytes)360 void rsp_AllocationResize1D(Context *con, const void *vp, size_t cmdSizeBytes) {
361     const RS_CMD_AllocationResize1D *cmd = static_cast<const RS_CMD_AllocationResize1D *>(vp);
362     rsi_AllocationResize1D(con,
363            cmd->va,
364            cmd->dimX);
365 };
366 
rsp_AllocationCopy2DRange(Context * con,const void * vp,size_t cmdSizeBytes)367 void rsp_AllocationCopy2DRange(Context *con, const void *vp, size_t cmdSizeBytes) {
368     const RS_CMD_AllocationCopy2DRange *cmd = static_cast<const RS_CMD_AllocationCopy2DRange *>(vp);
369     rsi_AllocationCopy2DRange(con,
370            cmd->dest,
371            cmd->destXoff,
372            cmd->destYoff,
373            cmd->destMip,
374            cmd->destFace,
375            cmd->width,
376            cmd->height,
377            cmd->src,
378            cmd->srcXoff,
379            cmd->srcYoff,
380            cmd->srcMip,
381            cmd->srcFace);
382 };
383 
rsp_AllocationCopy3DRange(Context * con,const void * vp,size_t cmdSizeBytes)384 void rsp_AllocationCopy3DRange(Context *con, const void *vp, size_t cmdSizeBytes) {
385     const RS_CMD_AllocationCopy3DRange *cmd = static_cast<const RS_CMD_AllocationCopy3DRange *>(vp);
386     rsi_AllocationCopy3DRange(con,
387            cmd->dest,
388            cmd->destXoff,
389            cmd->destYoff,
390            cmd->destZoff,
391            cmd->destMip,
392            cmd->width,
393            cmd->height,
394            cmd->depth,
395            cmd->src,
396            cmd->srcXoff,
397            cmd->srcYoff,
398            cmd->srcZoff,
399            cmd->srcMip);
400 };
401 
rsp_ClosureSetArg(Context * con,const void * vp,size_t cmdSizeBytes)402 void rsp_ClosureSetArg(Context *con, const void *vp, size_t cmdSizeBytes) {
403     const RS_CMD_ClosureSetArg *cmd = static_cast<const RS_CMD_ClosureSetArg *>(vp);
404     rsi_ClosureSetArg(con,
405            cmd->closureID,
406            cmd->index,
407            cmd->value,
408            cmd->valueSize);
409 };
410 
rsp_ClosureSetGlobal(Context * con,const void * vp,size_t cmdSizeBytes)411 void rsp_ClosureSetGlobal(Context *con, const void *vp, size_t cmdSizeBytes) {
412     const RS_CMD_ClosureSetGlobal *cmd = static_cast<const RS_CMD_ClosureSetGlobal *>(vp);
413     rsi_ClosureSetGlobal(con,
414            cmd->closureID,
415            cmd->fieldID,
416            cmd->value,
417            cmd->valueSize);
418 };
419 
rsp_ScriptBindAllocation(Context * con,const void * vp,size_t cmdSizeBytes)420 void rsp_ScriptBindAllocation(Context *con, const void *vp, size_t cmdSizeBytes) {
421     const RS_CMD_ScriptBindAllocation *cmd = static_cast<const RS_CMD_ScriptBindAllocation *>(vp);
422     rsi_ScriptBindAllocation(con,
423            cmd->vtm,
424            cmd->va,
425            cmd->slot);
426 };
427 
rsp_ScriptSetTimeZone(Context * con,const void * vp,size_t cmdSizeBytes)428 void rsp_ScriptSetTimeZone(Context *con, const void *vp, size_t cmdSizeBytes) {
429     const RS_CMD_ScriptSetTimeZone *cmd = static_cast<const RS_CMD_ScriptSetTimeZone *>(vp);
430     const uint8_t *baseData = 0;
431     if (cmdSizeBytes != sizeof(RS_CMD_ScriptSetTimeZone)) {
432         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
433     }
434     rsi_ScriptSetTimeZone(con,
435            cmd->s,
436            cmd->timeZone_length == 0 ? NULL : (const char *)&baseData[(intptr_t)cmd->timeZone],
437            cmd->timeZone_length);
438     size_t totalSize = 0;
439     totalSize += cmd->timeZone_length;
440     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_ScriptSetTimeZone))) {
441         con->mIO.coreSetReturn(NULL, 0);
442     }
443 };
444 
rsp_ScriptInvokeIDCreate(Context * con,const void * vp,size_t cmdSizeBytes)445 void rsp_ScriptInvokeIDCreate(Context *con, const void *vp, size_t cmdSizeBytes) {
446     const RS_CMD_ScriptInvokeIDCreate *cmd = static_cast<const RS_CMD_ScriptInvokeIDCreate *>(vp);
447 
448     RsScriptInvokeID ret = rsi_ScriptInvokeIDCreate(con,
449            cmd->s,
450            cmd->slot);
451     con->mIO.coreSetReturn(&ret, sizeof(ret));
452 };
453 
rsp_ScriptInvoke(Context * con,const void * vp,size_t cmdSizeBytes)454 void rsp_ScriptInvoke(Context *con, const void *vp, size_t cmdSizeBytes) {
455     const RS_CMD_ScriptInvoke *cmd = static_cast<const RS_CMD_ScriptInvoke *>(vp);
456     rsi_ScriptInvoke(con,
457            cmd->s,
458            cmd->slot);
459 };
460 
rsp_ScriptInvokeV(Context * con,const void * vp,size_t cmdSizeBytes)461 void rsp_ScriptInvokeV(Context *con, const void *vp, size_t cmdSizeBytes) {
462     const RS_CMD_ScriptInvokeV *cmd = static_cast<const RS_CMD_ScriptInvokeV *>(vp);
463     const uint8_t *baseData = 0;
464     if (cmdSizeBytes != sizeof(RS_CMD_ScriptInvokeV)) {
465         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
466     }
467     rsi_ScriptInvokeV(con,
468            cmd->s,
469            cmd->slot,
470            cmd->data_length == 0 ? NULL : (const void *)&baseData[(intptr_t)cmd->data],
471            cmd->data_length);
472     size_t totalSize = 0;
473     totalSize += cmd->data_length;
474     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_ScriptInvokeV))) {
475         con->mIO.coreSetReturn(NULL, 0);
476     }
477 };
478 
rsp_ScriptForEach(Context * con,const void * vp,size_t cmdSizeBytes)479 void rsp_ScriptForEach(Context *con, const void *vp, size_t cmdSizeBytes) {
480     const RS_CMD_ScriptForEach *cmd = static_cast<const RS_CMD_ScriptForEach *>(vp);
481     const uint8_t *baseData = 0;
482     if (cmdSizeBytes != sizeof(RS_CMD_ScriptForEach)) {
483         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
484     }
485     rsi_ScriptForEach(con,
486            cmd->s,
487            cmd->slot,
488            cmd->ain,
489            cmd->aout,
490            cmd->usr_length == 0 ? NULL : (const void *)&baseData[(intptr_t)cmd->usr],
491            cmd->usr_length,
492            cmd->sc_length == 0 ? NULL : (const RsScriptCall *)&baseData[(intptr_t)cmd->sc],
493            cmd->sc_length);
494     size_t totalSize = 0;
495     totalSize += cmd->usr_length;
496     totalSize += cmd->sc_length;
497     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_ScriptForEach))) {
498         con->mIO.coreSetReturn(NULL, 0);
499     }
500 };
501 
rsp_ScriptForEachMulti(Context * con,const void * vp,size_t cmdSizeBytes)502 void rsp_ScriptForEachMulti(Context *con, const void *vp, size_t cmdSizeBytes) {
503     const RS_CMD_ScriptForEachMulti *cmd = static_cast<const RS_CMD_ScriptForEachMulti *>(vp);
504     rsi_ScriptForEachMulti(con,
505            cmd->s,
506            cmd->slot,
507            cmd->ains,
508            cmd->ains_length,
509            cmd->aout,
510            cmd->usr,
511            cmd->usr_length,
512            cmd->sc,
513            cmd->sc_length);
514     con->mIO.coreSetReturn(NULL, 0);
515 };
516 
rsp_ScriptReduce(Context * con,const void * vp,size_t cmdSizeBytes)517 void rsp_ScriptReduce(Context *con, const void *vp, size_t cmdSizeBytes) {
518     const RS_CMD_ScriptReduce *cmd = static_cast<const RS_CMD_ScriptReduce *>(vp);
519     rsi_ScriptReduce(con,
520            cmd->s,
521            cmd->slot,
522            cmd->ains,
523            cmd->ains_length,
524            cmd->aout,
525            cmd->sc,
526            cmd->sc_length);
527     con->mIO.coreSetReturn(NULL, 0);
528 };
529 
rsp_ScriptSetVarI(Context * con,const void * vp,size_t cmdSizeBytes)530 void rsp_ScriptSetVarI(Context *con, const void *vp, size_t cmdSizeBytes) {
531     const RS_CMD_ScriptSetVarI *cmd = static_cast<const RS_CMD_ScriptSetVarI *>(vp);
532     rsi_ScriptSetVarI(con,
533            cmd->s,
534            cmd->slot,
535            cmd->value);
536 };
537 
rsp_ScriptSetVarObj(Context * con,const void * vp,size_t cmdSizeBytes)538 void rsp_ScriptSetVarObj(Context *con, const void *vp, size_t cmdSizeBytes) {
539     const RS_CMD_ScriptSetVarObj *cmd = static_cast<const RS_CMD_ScriptSetVarObj *>(vp);
540     rsi_ScriptSetVarObj(con,
541            cmd->s,
542            cmd->slot,
543            cmd->value);
544 };
545 
rsp_ScriptSetVarJ(Context * con,const void * vp,size_t cmdSizeBytes)546 void rsp_ScriptSetVarJ(Context *con, const void *vp, size_t cmdSizeBytes) {
547     const RS_CMD_ScriptSetVarJ *cmd = static_cast<const RS_CMD_ScriptSetVarJ *>(vp);
548     rsi_ScriptSetVarJ(con,
549            cmd->s,
550            cmd->slot,
551            cmd->value);
552 };
553 
rsp_ScriptSetVarF(Context * con,const void * vp,size_t cmdSizeBytes)554 void rsp_ScriptSetVarF(Context *con, const void *vp, size_t cmdSizeBytes) {
555     const RS_CMD_ScriptSetVarF *cmd = static_cast<const RS_CMD_ScriptSetVarF *>(vp);
556     rsi_ScriptSetVarF(con,
557            cmd->s,
558            cmd->slot,
559            cmd->value);
560 };
561 
rsp_ScriptSetVarD(Context * con,const void * vp,size_t cmdSizeBytes)562 void rsp_ScriptSetVarD(Context *con, const void *vp, size_t cmdSizeBytes) {
563     const RS_CMD_ScriptSetVarD *cmd = static_cast<const RS_CMD_ScriptSetVarD *>(vp);
564     rsi_ScriptSetVarD(con,
565            cmd->s,
566            cmd->slot,
567            cmd->value);
568 };
569 
rsp_ScriptSetVarV(Context * con,const void * vp,size_t cmdSizeBytes)570 void rsp_ScriptSetVarV(Context *con, const void *vp, size_t cmdSizeBytes) {
571     const RS_CMD_ScriptSetVarV *cmd = static_cast<const RS_CMD_ScriptSetVarV *>(vp);
572     const uint8_t *baseData = 0;
573     if (cmdSizeBytes != sizeof(RS_CMD_ScriptSetVarV)) {
574         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
575     }
576     rsi_ScriptSetVarV(con,
577            cmd->s,
578            cmd->slot,
579            cmd->data_length == 0 ? NULL : (const void *)&baseData[(intptr_t)cmd->data],
580            cmd->data_length);
581     size_t totalSize = 0;
582     totalSize += cmd->data_length;
583     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_ScriptSetVarV))) {
584         con->mIO.coreSetReturn(NULL, 0);
585     }
586 };
587 
rsp_ScriptGetVarV(Context * con,const void * vp,size_t cmdSizeBytes)588 void rsp_ScriptGetVarV(Context *con, const void *vp, size_t cmdSizeBytes) {
589     const RS_CMD_ScriptGetVarV *cmd = static_cast<const RS_CMD_ScriptGetVarV *>(vp);
590     rsi_ScriptGetVarV(con,
591            cmd->s,
592            cmd->slot,
593            cmd->data,
594            cmd->data_length);
595     con->mIO.coreSetReturn(NULL, 0);
596 };
597 
rsp_ScriptSetVarVE(Context * con,const void * vp,size_t cmdSizeBytes)598 void rsp_ScriptSetVarVE(Context *con, const void *vp, size_t cmdSizeBytes) {
599     const RS_CMD_ScriptSetVarVE *cmd = static_cast<const RS_CMD_ScriptSetVarVE *>(vp);
600     const uint8_t *baseData = 0;
601     if (cmdSizeBytes != sizeof(RS_CMD_ScriptSetVarVE)) {
602         baseData = &((const uint8_t *)vp)[sizeof(*cmd)];
603     }
604     rsi_ScriptSetVarVE(con,
605            cmd->s,
606            cmd->slot,
607            cmd->data_length == 0 ? NULL : (const void *)&baseData[(intptr_t)cmd->data],
608            cmd->data_length,
609            cmd->e,
610            cmd->dims_length == 0 ? NULL : (const uint32_t *)&baseData[(intptr_t)cmd->dims],
611            cmd->dims_length);
612     size_t totalSize = 0;
613     totalSize += cmd->data_length;
614     totalSize += cmd->dims_length;
615     if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_ScriptSetVarVE))) {
616         con->mIO.coreSetReturn(NULL, 0);
617     }
618 };
619 
rsp_ScriptCCreate(Context * con,const void * vp,size_t cmdSizeBytes)620 void rsp_ScriptCCreate(Context *con, const void *vp, size_t cmdSizeBytes) {
621     const RS_CMD_ScriptCCreate *cmd = static_cast<const RS_CMD_ScriptCCreate *>(vp);
622 
623     RsScript ret = rsi_ScriptCCreate(con,
624            cmd->resName,
625            cmd->resName_length,
626            cmd->cacheDir,
627            cmd->cacheDir_length,
628            cmd->text,
629            cmd->text_length);
630     con->mIO.coreSetReturn(&ret, sizeof(ret));
631 };
632 
rsp_ScriptIntrinsicCreate(Context * con,const void * vp,size_t cmdSizeBytes)633 void rsp_ScriptIntrinsicCreate(Context *con, const void *vp, size_t cmdSizeBytes) {
634     const RS_CMD_ScriptIntrinsicCreate *cmd = static_cast<const RS_CMD_ScriptIntrinsicCreate *>(vp);
635 
636     RsScript ret = rsi_ScriptIntrinsicCreate(con,
637            cmd->id,
638            cmd->eid);
639     con->mIO.coreSetReturn(&ret, sizeof(ret));
640 };
641 
rsp_ScriptGroupSetOutput(Context * con,const void * vp,size_t cmdSizeBytes)642 void rsp_ScriptGroupSetOutput(Context *con, const void *vp, size_t cmdSizeBytes) {
643     const RS_CMD_ScriptGroupSetOutput *cmd = static_cast<const RS_CMD_ScriptGroupSetOutput *>(vp);
644     rsi_ScriptGroupSetOutput(con,
645            cmd->group,
646            cmd->kernel,
647            cmd->alloc);
648 };
649 
rsp_ScriptGroupSetInput(Context * con,const void * vp,size_t cmdSizeBytes)650 void rsp_ScriptGroupSetInput(Context *con, const void *vp, size_t cmdSizeBytes) {
651     const RS_CMD_ScriptGroupSetInput *cmd = static_cast<const RS_CMD_ScriptGroupSetInput *>(vp);
652     rsi_ScriptGroupSetInput(con,
653            cmd->group,
654            cmd->kernel,
655            cmd->alloc);
656 };
657 
rsp_ScriptGroupExecute(Context * con,const void * vp,size_t cmdSizeBytes)658 void rsp_ScriptGroupExecute(Context *con, const void *vp, size_t cmdSizeBytes) {
659     const RS_CMD_ScriptGroupExecute *cmd = static_cast<const RS_CMD_ScriptGroupExecute *>(vp);
660     rsi_ScriptGroupExecute(con,
661            cmd->group);
662 };
663 
rsp_AllocationIoSend(Context * con,const void * vp,size_t cmdSizeBytes)664 void rsp_AllocationIoSend(Context *con, const void *vp, size_t cmdSizeBytes) {
665     const RS_CMD_AllocationIoSend *cmd = static_cast<const RS_CMD_AllocationIoSend *>(vp);
666     rsi_AllocationIoSend(con,
667            cmd->alloc);
668 };
669 
rsp_AllocationIoReceive(Context * con,const void * vp,size_t cmdSizeBytes)670 void rsp_AllocationIoReceive(Context *con, const void *vp, size_t cmdSizeBytes) {
671     const RS_CMD_AllocationIoReceive *cmd = static_cast<const RS_CMD_AllocationIoReceive *>(vp);
672 
673     int64_t ret = rsi_AllocationIoReceive(con,
674            cmd->alloc);
675     con->mIO.coreSetReturn(&ret, sizeof(ret));
676 };
677 
rsp_ProgramBindConstants(Context * con,const void * vp,size_t cmdSizeBytes)678 void rsp_ProgramBindConstants(Context *con, const void *vp, size_t cmdSizeBytes) {
679     const RS_CMD_ProgramBindConstants *cmd = static_cast<const RS_CMD_ProgramBindConstants *>(vp);
680     rsi_ProgramBindConstants(con,
681            cmd->vp,
682            cmd->slot,
683            cmd->constants);
684 };
685 
rsp_ProgramBindTexture(Context * con,const void * vp,size_t cmdSizeBytes)686 void rsp_ProgramBindTexture(Context *con, const void *vp, size_t cmdSizeBytes) {
687     const RS_CMD_ProgramBindTexture *cmd = static_cast<const RS_CMD_ProgramBindTexture *>(vp);
688     rsi_ProgramBindTexture(con,
689            cmd->pf,
690            cmd->slot,
691            cmd->a);
692 };
693 
rsp_ProgramBindSampler(Context * con,const void * vp,size_t cmdSizeBytes)694 void rsp_ProgramBindSampler(Context *con, const void *vp, size_t cmdSizeBytes) {
695     const RS_CMD_ProgramBindSampler *cmd = static_cast<const RS_CMD_ProgramBindSampler *>(vp);
696     rsi_ProgramBindSampler(con,
697            cmd->pf,
698            cmd->slot,
699            cmd->s);
700 };
701 
rsp_FontCreateFromFile(Context * con,const void * vp,size_t cmdSizeBytes)702 void rsp_FontCreateFromFile(Context *con, const void *vp, size_t cmdSizeBytes) {
703     const RS_CMD_FontCreateFromFile *cmd = static_cast<const RS_CMD_FontCreateFromFile *>(vp);
704 
705     RsFont ret = rsi_FontCreateFromFile(con,
706            cmd->name,
707            cmd->name_length,
708            cmd->fontSize,
709            cmd->dpi);
710     con->mIO.coreSetReturn(&ret, sizeof(ret));
711 };
712 
rsp_FontCreateFromMemory(Context * con,const void * vp,size_t cmdSizeBytes)713 void rsp_FontCreateFromMemory(Context *con, const void *vp, size_t cmdSizeBytes) {
714     const RS_CMD_FontCreateFromMemory *cmd = static_cast<const RS_CMD_FontCreateFromMemory *>(vp);
715 
716     RsFont ret = rsi_FontCreateFromMemory(con,
717            cmd->name,
718            cmd->name_length,
719            cmd->fontSize,
720            cmd->dpi,
721            cmd->data,
722            cmd->data_length);
723     con->mIO.coreSetReturn(&ret, sizeof(ret));
724 };
725 
rsp_MeshCreate(Context * con,const void * vp,size_t cmdSizeBytes)726 void rsp_MeshCreate(Context *con, const void *vp, size_t cmdSizeBytes) {
727     const RS_CMD_MeshCreate *cmd = static_cast<const RS_CMD_MeshCreate *>(vp);
728 
729     RsMesh ret = rsi_MeshCreate(con,
730            cmd->vtx,
731            cmd->vtx_length,
732            cmd->idx,
733            cmd->idx_length,
734            cmd->primType,
735            cmd->primType_length);
736     con->mIO.coreSetReturn(&ret, sizeof(ret));
737 };
738 
rsp_ContextBindProgramStore(Context * con,const void * vp,size_t cmdSizeBytes)739 void rsp_ContextBindProgramStore(Context *con, const void *vp, size_t cmdSizeBytes) {
740     const RS_CMD_ContextBindProgramStore *cmd = static_cast<const RS_CMD_ContextBindProgramStore *>(vp);
741     rsi_ContextBindProgramStore(con,
742            cmd->pgm);
743 };
744 
rsp_ContextBindProgramFragment(Context * con,const void * vp,size_t cmdSizeBytes)745 void rsp_ContextBindProgramFragment(Context *con, const void *vp, size_t cmdSizeBytes) {
746     const RS_CMD_ContextBindProgramFragment *cmd = static_cast<const RS_CMD_ContextBindProgramFragment *>(vp);
747     rsi_ContextBindProgramFragment(con,
748            cmd->pgm);
749 };
750 
rsp_ContextBindProgramVertex(Context * con,const void * vp,size_t cmdSizeBytes)751 void rsp_ContextBindProgramVertex(Context *con, const void *vp, size_t cmdSizeBytes) {
752     const RS_CMD_ContextBindProgramVertex *cmd = static_cast<const RS_CMD_ContextBindProgramVertex *>(vp);
753     rsi_ContextBindProgramVertex(con,
754            cmd->pgm);
755 };
756 
rsp_ContextBindProgramRaster(Context * con,const void * vp,size_t cmdSizeBytes)757 void rsp_ContextBindProgramRaster(Context *con, const void *vp, size_t cmdSizeBytes) {
758     const RS_CMD_ContextBindProgramRaster *cmd = static_cast<const RS_CMD_ContextBindProgramRaster *>(vp);
759     rsi_ContextBindProgramRaster(con,
760            cmd->pgm);
761 };
762 
rsp_ContextBindFont(Context * con,const void * vp,size_t cmdSizeBytes)763 void rsp_ContextBindFont(Context *con, const void *vp, size_t cmdSizeBytes) {
764     const RS_CMD_ContextBindFont *cmd = static_cast<const RS_CMD_ContextBindFont *>(vp);
765     rsi_ContextBindFont(con,
766            cmd->pgm);
767 };
768 
rsp_ContextSetSurface(Context * con,const void * vp,size_t cmdSizeBytes)769 void rsp_ContextSetSurface(Context *con, const void *vp, size_t cmdSizeBytes) {
770     const RS_CMD_ContextSetSurface *cmd = static_cast<const RS_CMD_ContextSetSurface *>(vp);
771     rsi_ContextSetSurface(con,
772            cmd->width,
773            cmd->height,
774            cmd->sur);
775     con->mIO.coreSetReturn(NULL, 0);
776 };
777 
rsp_ContextBindRootScript(Context * con,const void * vp,size_t cmdSizeBytes)778 void rsp_ContextBindRootScript(Context *con, const void *vp, size_t cmdSizeBytes) {
779     const RS_CMD_ContextBindRootScript *cmd = static_cast<const RS_CMD_ContextBindRootScript *>(vp);
780     rsi_ContextBindRootScript(con,
781            cmd->sampler);
782 };
783 
rsp_ContextPause(Context * con,const void * vp,size_t cmdSizeBytes)784 void rsp_ContextPause(Context *con, const void *vp, size_t cmdSizeBytes) {
785     const RS_CMD_ContextPause *cmd = static_cast<const RS_CMD_ContextPause *>(vp);
786     rsi_ContextPause(con);
787 };
788 
rsp_ContextResume(Context * con,const void * vp,size_t cmdSizeBytes)789 void rsp_ContextResume(Context *con, const void *vp, size_t cmdSizeBytes) {
790     const RS_CMD_ContextResume *cmd = static_cast<const RS_CMD_ContextResume *>(vp);
791     rsi_ContextResume(con);
792 };
793 
794 RsPlaybackLocalFunc gPlaybackFuncs[95] = {
795     NULL,
796     NULL,
797     NULL,
798     NULL,
799     rsp_ContextSendMessage,
800     NULL,
801     NULL,
802     NULL,
803     NULL,
804     NULL,
805     NULL,
806     NULL,
807     NULL,
808     rsp_AllocationSetupBufferQueue,
809     rsp_AllocationShareBufferQueue,
810     rsp_AllocationGetSurface,
811     rsp_AllocationSetSurface,
812     NULL,
813     rsp_AllocationAdapterOffset,
814     rsp_ContextFinish,
815     rsp_ContextDump,
816     rsp_ContextSetPriority,
817     rsp_ContextDestroyWorker,
818     rsp_AssignName,
819     rsp_ObjDestroy,
820     NULL,
821     NULL,
822     rsp_AllocationCopyToBitmap,
823     rsp_AllocationGetPointer,
824     rsp_Allocation1DData,
825     rsp_Allocation1DElementData,
826     rsp_AllocationElementData,
827     rsp_Allocation2DData,
828     rsp_Allocation3DData,
829     rsp_AllocationGenerateMipmaps,
830     rsp_AllocationRead,
831     rsp_Allocation1DRead,
832     rsp_AllocationElementRead,
833     rsp_Allocation2DRead,
834     rsp_Allocation3DRead,
835     rsp_AllocationSyncAll,
836     rsp_AllocationResize1D,
837     rsp_AllocationCopy2DRange,
838     rsp_AllocationCopy3DRange,
839     NULL,
840     NULL,
841     rsp_ClosureSetArg,
842     rsp_ClosureSetGlobal,
843     NULL,
844     rsp_ScriptBindAllocation,
845     rsp_ScriptSetTimeZone,
846     rsp_ScriptInvokeIDCreate,
847     rsp_ScriptInvoke,
848     rsp_ScriptInvokeV,
849     rsp_ScriptForEach,
850     rsp_ScriptForEachMulti,
851     rsp_ScriptReduce,
852     rsp_ScriptSetVarI,
853     rsp_ScriptSetVarObj,
854     rsp_ScriptSetVarJ,
855     rsp_ScriptSetVarF,
856     rsp_ScriptSetVarD,
857     rsp_ScriptSetVarV,
858     rsp_ScriptGetVarV,
859     rsp_ScriptSetVarVE,
860     rsp_ScriptCCreate,
861     rsp_ScriptIntrinsicCreate,
862     NULL,
863     NULL,
864     NULL,
865     rsp_ScriptGroupSetOutput,
866     rsp_ScriptGroupSetInput,
867     rsp_ScriptGroupExecute,
868     NULL,
869     rsp_AllocationIoSend,
870     rsp_AllocationIoReceive,
871     NULL,
872     NULL,
873     rsp_ProgramBindConstants,
874     rsp_ProgramBindTexture,
875     rsp_ProgramBindSampler,
876     NULL,
877     NULL,
878     rsp_FontCreateFromFile,
879     rsp_FontCreateFromMemory,
880     rsp_MeshCreate,
881     rsp_ContextBindProgramStore,
882     rsp_ContextBindProgramFragment,
883     rsp_ContextBindProgramVertex,
884     rsp_ContextBindProgramRaster,
885     rsp_ContextBindFont,
886     rsp_ContextSetSurface,
887     rsp_ContextBindRootScript,
888     rsp_ContextPause,
889     rsp_ContextResume,
890 };
891 };
892 };
893