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