1 /*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "rsApiStubs.h"
18 #include "rsHidlAdaptation.h"
19 #include "rsFallbackAdaptation.h"
20 #include "cpp/rsDispatch.h"
21
22 #include <android_runtime/AndroidRuntime.h>
23
24 #include <mutex>
25 #include <map>
26
27 #undef LOG_TAG
28 #define LOG_TAG "RenderScript"
29
30 // TODO: Figure out how to use different declared types for the two interfaces
31 // to avoid the confusion. Currently, RsContext is used as the API type for
32 // both the client interface and the dispatch table interface, but at the
33 // client interface it's really RsContextWrapper* instead.
34 // TODO: Figure out how to better design class hierarchy for all these Contexts.
35 // RsContextWrapper wraps the RsContext and corresponding dispatchTable pointer.
36 // The wrapper object is created during ContextCreate, and the address of the
37 // object is returned to Java / C++, instead of the RsContext handle.
38 // The wrapper object is destroyed during ContextDestroy to release the memory.
39 struct RsContextWrapper {
40 RsContext context;
41 const dispatchTable* dispatch;
42 };
43
44 #define RS_DISPATCH(opaqueWrapper, func, ...) \
45 [&]() { \
46 const RsContextWrapper *wrapper = reinterpret_cast<RsContextWrapper *>(opaqueWrapper); \
47 RsContext context = wrapper->context; \
48 return wrapper->dispatch->func(context, ##__VA_ARGS__); \
49 }()
50
51
52 // contextMap maps RsContext to the corresponding RsContextWrapper pointer.
53 static std::map<RsContext, RsContextWrapper* > contextMap;
54
55 // contextMapMutex is used to protect concurrent access of the contextMap.
56 // std::mutex is safe for pthreads on Android. Since other threading model
57 // supported on Android are built on top of pthread, std::mutex is safe for them.
58 static std::mutex contextMapMutex;
59
60 // globalObjAlive is a global flag indicating whether the global objects,
61 // contextMap & contextMapMutex, are still alive.
62 // For the protected functions during application teardown, this
63 // flag will be checked before accessing the global objects.
64 static bool globalObjAlive;
65
66 // GlobalObjGuard manipulates the globalObjAlive flag during construction and
67 // destruction. If the guard object is destroyed, globalObjAlive will be set
68 // to false, which will make the protected functions NO-OP.
69 // https://goto.google.com/rs-static-destructor
70 class GlobalObjGuard {
71 public:
GlobalObjGuard()72 GlobalObjGuard() {
73 globalObjAlive = true;
74 }
75
~GlobalObjGuard()76 ~GlobalObjGuard() {
77 globalObjAlive = false;
78 }
79 };
80 static GlobalObjGuard guard;
81
82 // API to find high-level context (RsContextWrapper) given a low level context.
83 // This API is only intended to be used by RenderScript debugger.
rsDebugGetHighLevelContext(RsContext context)84 extern "C" RsContext rsDebugGetHighLevelContext(RsContext context) {
85 std::unique_lock<std::mutex> lock(contextMapMutex);
86 return contextMap.at(context);
87 }
88
89 // Device
90 // These API stubs are kept here to maintain backward compatibility,
91 // but they are not actually doing anything.
92
rsDeviceCreate()93 extern "C" RsDevice rsDeviceCreate()
94 {
95 return (void *) 1;
96 }
rsDeviceDestroy(RsDevice dev)97 extern "C" void rsDeviceDestroy(RsDevice dev)
98 {
99 }
rsDeviceSetConfig(RsDevice dev,RsDeviceParam p,int32_t value)100 extern "C" void rsDeviceSetConfig(RsDevice dev, RsDeviceParam p, int32_t value)
101 {
102 }
103
104 /*
105 * This global will be found by the debugger and will have its value flipped.
106 * It's independent of the Context class to allow the debugger to do the above
107 * without knowing the type makeup. This allows the debugger to be attached at
108 * an earlier stage.
109 */
110 extern "C" int gDebuggerPresent = 0;
111
112 namespace{
113 // Use reflection to query the default cache dir.
queryCacheDir()114 std::string queryCacheDir() {
115 std::string cacheDir;
116 // First check if we have JavaVM running in this process.
117 if (android::AndroidRuntime::getJavaVM()) {
118 JNIEnv* env = android::AndroidRuntime::getJNIEnv();
119 if (env) {
120 jclass cacheDirClass = env->FindClass("android/renderscript/RenderScriptCacheDir");
121 jfieldID cacheDirID = env->GetStaticFieldID(cacheDirClass, "mCacheDir", "Ljava/io/File;");
122 jobject cache_dir = env->GetStaticObjectField(cacheDirClass, cacheDirID);
123
124 if (cache_dir) {
125 jclass fileClass = env->FindClass("java/io/File");
126 jmethodID getPath = env->GetMethodID(fileClass, "getPath", "()Ljava/lang/String;");
127 jstring path_string = (jstring)env->CallObjectMethod(cache_dir, getPath);
128 const char *path_chars = env->GetStringUTFChars(path_string, NULL);
129
130 ALOGD("Successfully queried cache dir: %s", path_chars);
131 cacheDir = std::string(path_chars);
132 env->ReleaseStringUTFChars(path_string, path_chars);
133 } else {
134 ALOGD("Cache dir not initialized");
135 }
136 } else {
137 ALOGD("Failed to query the default cache dir.");
138 }
139 } else {
140 ALOGD("Non JavaVM found in the process.");
141 }
142
143 return cacheDir;
144 }
145 }
146
147
148 // Context
rsContextCreate(RsDevice vdev,uint32_t version,uint32_t sdkVersion,RsContextType ct,uint32_t flags)149 extern "C" RsContext rsContextCreate(RsDevice vdev, uint32_t version, uint32_t sdkVersion,
150 RsContextType ct, uint32_t flags)
151 {
152 if (!globalObjAlive) {
153 ALOGE("rsContextCreate is not allowed during process teardown.");
154 return nullptr;
155 }
156
157 RsContext context;
158 RsContextWrapper *ctxWrapper;
159
160 if (flags & RS_CONTEXT_LOW_LATENCY) {
161 // Use CPU path for LOW_LATENCY context.
162 RsFallbackAdaptation& instance = RsFallbackAdaptation::GetInstance();
163 context = instance.GetEntryFuncs()->ContextCreate(vdev, version, sdkVersion, ct, flags);
164 ctxWrapper = new RsContextWrapper{context, instance.GetEntryFuncs()};
165 } else {
166 RsHidlAdaptation& instance = RsHidlAdaptation::GetInstance();
167 context = instance.GetEntryFuncs()->ContextCreate(vdev, version, sdkVersion, ct, flags);
168 ctxWrapper = new RsContextWrapper{context, instance.GetEntryFuncs()};
169
170 static std::string defaultCacheDir = queryCacheDir();
171 if (defaultCacheDir.size() > 0) {
172 ALOGD("Setting cache dir: %s", defaultCacheDir.c_str());
173 rsContextSetCacheDir(ctxWrapper,
174 defaultCacheDir.c_str(),
175 defaultCacheDir.size());
176 }
177 }
178
179
180 // Wait for debugger to attach if RS_CONTEXT_WAIT_FOR_ATTACH flag set.
181 if (flags & RS_CONTEXT_WAIT_FOR_ATTACH) {
182 while (!gDebuggerPresent) {
183 sleep(0);
184 }
185 }
186
187 // Lock contextMap when adding new entries.
188 std::unique_lock<std::mutex> lock(contextMapMutex);
189 contextMap.insert(std::make_pair(context, ctxWrapper));
190
191 return (RsContext) ctxWrapper;
192 }
193
rsContextDestroy(RsContext ctxWrapper)194 extern "C" void rsContextDestroy (RsContext ctxWrapper)
195 {
196 if (!globalObjAlive) {
197 return;
198 }
199
200 RS_DISPATCH(ctxWrapper, ContextDestroy);
201
202 // Lock contextMap when deleting an existing entry.
203 std::unique_lock<std::mutex> lock(contextMapMutex);
204 contextMap.erase(reinterpret_cast< RsContextWrapper* >(ctxWrapper)->context);
205
206 delete (RsContextWrapper *)ctxWrapper;
207 }
208
rsContextFinish(RsContext ctxWrapper)209 extern "C" void rsContextFinish (RsContext ctxWrapper)
210 {
211 RS_DISPATCH(ctxWrapper, ContextFinish);
212 }
213
rsContextDump(RsContext ctxWrapper,int32_t bits)214 extern "C" void rsContextDump (RsContext ctxWrapper, int32_t bits)
215 {
216 RS_DISPATCH(ctxWrapper, ContextDump, bits);
217 }
218
rsContextSetPriority(RsContext ctxWrapper,int32_t priority)219 extern "C" void rsContextSetPriority (RsContext ctxWrapper, int32_t priority)
220 {
221 RS_DISPATCH(ctxWrapper, ContextSetPriority, priority);
222 }
223
rsContextDestroyWorker(RsContext ctxWrapper)224 extern "C" void rsContextDestroyWorker (RsContext ctxWrapper)
225 {
226 }
227
rsContextGetMessage(RsContext ctxWrapper,void * data,size_t data_length,size_t * receiveLen,size_t receiveLen_length,uint32_t * usrID,size_t usrID_length)228 extern "C" RsMessageToClientType rsContextGetMessage (RsContext ctxWrapper, void * data, size_t data_length,
229 size_t * receiveLen, size_t receiveLen_length,
230 uint32_t * usrID, size_t usrID_length)
231 {
232 return RS_DISPATCH(ctxWrapper, ContextGetMessage, data, data_length,
233 receiveLen, receiveLen_length,
234 usrID, usrID_length);
235 }
236
rsContextPeekMessage(RsContext ctxWrapper,size_t * receiveLen,size_t receiveLen_length,uint32_t * usrID,size_t usrID_length)237 extern "C" RsMessageToClientType rsContextPeekMessage (RsContext ctxWrapper,
238 size_t * receiveLen, size_t receiveLen_length,
239 uint32_t * usrID, size_t usrID_length)
240 {
241 return RS_DISPATCH(ctxWrapper, ContextPeekMessage,
242 receiveLen, receiveLen_length,
243 usrID, usrID_length);
244 }
245
rsContextSendMessage(RsContext ctxWrapper,uint32_t id,const uint8_t * data,size_t data_length)246 extern "C" void rsContextSendMessage (RsContext ctxWrapper, uint32_t id, const uint8_t * data, size_t data_length)
247 {
248 RS_DISPATCH(ctxWrapper, ContextSendMessage, id, data, data_length);
249 }
250
rsContextInitToClient(RsContext ctxWrapper)251 extern "C" void rsContextInitToClient (RsContext ctxWrapper)
252 {
253 RS_DISPATCH(ctxWrapper, ContextInitToClient);
254 }
255
rsContextDeinitToClient(RsContext ctxWrapper)256 extern "C" void rsContextDeinitToClient (RsContext ctxWrapper)
257 {
258 RS_DISPATCH(ctxWrapper, ContextDeinitToClient);
259 }
260
rsContextSetCacheDir(RsContext ctxWrapper,const char * cacheDir,size_t cacheDir_length)261 extern "C" void rsContextSetCacheDir (RsContext ctxWrapper, const char * cacheDir, size_t cacheDir_length)
262 {
263 RS_DISPATCH(ctxWrapper, ContextSetCacheDir, cacheDir, cacheDir_length);
264 }
265
rsaContextSetNativeLibDir(RsContext ctxWrapper,char * libDir,size_t length)266 extern "C" void rsaContextSetNativeLibDir(RsContext ctxWrapper, char *libDir, size_t length)
267 {
268 }
269
270 // BaseObject
271
rsAssignName(RsContext ctxWrapper,RsObjectBase obj,const char * name,size_t name_length)272 extern "C" void rsAssignName (RsContext ctxWrapper, RsObjectBase obj, const char * name, size_t name_length)
273 {
274 RS_DISPATCH(ctxWrapper, AssignName, obj, name, name_length);
275 }
276
rsaGetName(RsContext ctxWrapper,void * obj,const char ** name)277 extern "C" void rsaGetName(RsContext ctxWrapper, void * obj, const char **name)
278 {
279 RS_DISPATCH(ctxWrapper, GetName, obj, name);
280 }
281
rsObjDestroy(RsContext ctxWrapper,RsAsyncVoidPtr objPtr)282 extern "C" void rsObjDestroy (RsContext ctxWrapper, RsAsyncVoidPtr objPtr)
283 {
284 RS_DISPATCH(ctxWrapper, ObjDestroy, objPtr);
285 }
286
287 // Element
288
rsElementCreate(RsContext ctxWrapper,RsDataType mType,RsDataKind mKind,bool mNormalized,uint32_t mVectorSize)289 extern "C" RsElement rsElementCreate (RsContext ctxWrapper, RsDataType mType, RsDataKind mKind,
290 bool mNormalized, uint32_t mVectorSize)
291 {
292 return RS_DISPATCH(ctxWrapper, ElementCreate, mType, mKind, mNormalized, mVectorSize);
293 }
294
rsElementCreate2(RsContext ctxWrapper,const RsElement * elements,size_t elements_length,const char ** names,size_t names_length_length,const size_t * names_length,const uint32_t * arraySize,size_t arraySize_length)295 extern "C" RsElement rsElementCreate2 (RsContext ctxWrapper, const RsElement * elements, size_t elements_length,
296 const char ** names, size_t names_length_length, const size_t * names_length,
297 const uint32_t * arraySize, size_t arraySize_length)
298 {
299 return RS_DISPATCH(ctxWrapper, ElementCreate2,
300 elements, elements_length,
301 names, names_length_length, names_length,
302 arraySize, arraySize_length);
303 }
304
rsaElementGetNativeData(RsContext ctxWrapper,RsElement elem,uint32_t * elemData,uint32_t elemDataSize)305 extern "C" void rsaElementGetNativeData(RsContext ctxWrapper, RsElement elem, uint32_t *elemData, uint32_t elemDataSize)
306 {
307 RS_DISPATCH(ctxWrapper, ElementGetNativeData, elem, elemData, elemDataSize);
308 }
309
rsaElementGetSubElements(RsContext ctxWrapper,RsElement elem,uintptr_t * ids,const char ** names,size_t * arraySizes,uint32_t dataSize)310 extern "C" void rsaElementGetSubElements(RsContext ctxWrapper, RsElement elem, uintptr_t *ids, const char **names,
311 size_t *arraySizes, uint32_t dataSize)
312 {
313 RS_DISPATCH(ctxWrapper, ElementGetSubElements, elem, ids, names, arraySizes, dataSize);
314 }
315
316 // Type
317
rsTypeCreate(RsContext ctxWrapper,RsElement e,uint32_t dimX,uint32_t dimY,uint32_t dimZ,bool mipmaps,bool faces,uint32_t yuv)318 extern "C" RsType rsTypeCreate (RsContext ctxWrapper, RsElement e, uint32_t dimX, uint32_t dimY, uint32_t dimZ,
319 bool mipmaps, bool faces, uint32_t yuv)
320 {
321 return RS_DISPATCH(ctxWrapper, TypeCreate, e, dimX, dimY, dimZ, mipmaps, faces, yuv);
322 }
323
rsTypeCreate2(RsContext ctxWrapper,const RsTypeCreateParams * dat,size_t dat_length)324 extern "C" RsType rsTypeCreate2 (RsContext ctxWrapper, const RsTypeCreateParams * dat, size_t dat_length)
325 {
326 return nullptr;
327 }
328
rsaTypeGetNativeData(RsContext ctxWrapper,RsType type,uintptr_t * typeData,uint32_t typeDataSize)329 extern "C" void rsaTypeGetNativeData(RsContext ctxWrapper, RsType type, uintptr_t *typeData, uint32_t typeDataSize)
330 {
331 RS_DISPATCH(ctxWrapper, TypeGetNativeData, type, typeData, typeDataSize);
332 }
333
334
335 // Allocation
336
rsAllocationCreateTyped(RsContext ctxWrapper,RsType vtype,RsAllocationMipmapControl mipmaps,uint32_t usages,uintptr_t ptr)337 extern "C" RsAllocation rsAllocationCreateTyped (RsContext ctxWrapper, RsType vtype, RsAllocationMipmapControl mipmaps,
338 uint32_t usages, uintptr_t ptr)
339 {
340 return RS_DISPATCH(ctxWrapper, AllocationCreateTyped, vtype, mipmaps, usages, ptr);
341 }
342
rsAllocationCreateFromBitmap(RsContext ctxWrapper,RsType vtype,RsAllocationMipmapControl mipmaps,const void * data,size_t data_length,uint32_t usages)343 extern "C" RsAllocation rsAllocationCreateFromBitmap (RsContext ctxWrapper, RsType vtype, RsAllocationMipmapControl mipmaps,
344 const void * data, size_t data_length, uint32_t usages)
345 {
346 return RS_DISPATCH(ctxWrapper, AllocationCreateFromBitmap, vtype, mipmaps, data, data_length, usages);
347 }
348
rsAllocationCubeCreateFromBitmap(RsContext ctxWrapper,RsType vtype,RsAllocationMipmapControl mipmaps,const void * data,size_t data_length,uint32_t usages)349 extern "C" RsAllocation rsAllocationCubeCreateFromBitmap (RsContext ctxWrapper, RsType vtype, RsAllocationMipmapControl mipmaps,
350 const void * data, size_t data_length, uint32_t usages)
351 {
352 return RS_DISPATCH(ctxWrapper, AllocationCubeCreateFromBitmap, vtype, mipmaps, data, data_length, usages);
353 }
354
rsAllocationAdapterCreate(RsContext ctxWrapper,RsType vtype,RsAllocation baseAlloc)355 extern "C" RsAllocation rsAllocationAdapterCreate (RsContext ctxWrapper, RsType vtype, RsAllocation baseAlloc)
356 {
357 return RS_DISPATCH(ctxWrapper, AllocationAdapterCreate, vtype, baseAlloc);
358 }
359
rsaAllocationGetType(RsContext ctxWrapper,RsAllocation va)360 extern "C" const void * rsaAllocationGetType(RsContext ctxWrapper, RsAllocation va)
361 {
362 return RS_DISPATCH(ctxWrapper, AllocationGetType, va);
363 }
364
rsAllocationGetSurface(RsContext ctxWrapper,RsAllocation alloc)365 extern "C" RsNativeWindow rsAllocationGetSurface (RsContext ctxWrapper, RsAllocation alloc)
366 {
367 return RS_DISPATCH(ctxWrapper, AllocationGetSurface, alloc);
368 }
369
rsAllocationSetupBufferQueue(RsContext ctxWrapper,RsAllocation alloc,uint32_t numAlloc)370 extern "C" void rsAllocationSetupBufferQueue (RsContext ctxWrapper, RsAllocation alloc, uint32_t numAlloc)
371 {
372 RS_DISPATCH(ctxWrapper, AllocationSetupBufferQueue, alloc, numAlloc);
373 }
374
rsAllocationShareBufferQueue(RsContext ctxWrapper,RsAllocation alloc1,RsAllocation alloc2)375 extern "C" void rsAllocationShareBufferQueue (RsContext ctxWrapper, RsAllocation alloc1, RsAllocation alloc2)
376 {
377 RS_DISPATCH(ctxWrapper, AllocationShareBufferQueue, alloc1, alloc2);
378 }
379
rsAllocationSetSurface(RsContext ctxWrapper,RsAllocation alloc,RsNativeWindow sur)380 extern "C" void rsAllocationSetSurface (RsContext ctxWrapper, RsAllocation alloc, RsNativeWindow sur)
381 {
382 RS_DISPATCH(ctxWrapper, AllocationSetSurface, alloc, sur);
383 }
384
rsAllocationAdapterOffset(RsContext ctxWrapper,RsAllocation alloc,const uint32_t * offsets,size_t offsets_length)385 extern "C" void rsAllocationAdapterOffset (RsContext ctxWrapper, RsAllocation alloc,
386 const uint32_t * offsets, size_t offsets_length)
387 {
388 RS_DISPATCH(ctxWrapper, AllocationAdapterOffset, alloc, offsets, offsets_length);
389 }
390
rsAllocationCopyToBitmap(RsContext ctxWrapper,RsAllocation alloc,void * data,size_t data_length)391 extern "C" void rsAllocationCopyToBitmap (RsContext ctxWrapper, RsAllocation alloc, void * data, size_t data_length)
392 {
393 RS_DISPATCH(ctxWrapper, AllocationCopyToBitmap, alloc, data, data_length);
394 }
395
rsAllocationGetPointer(RsContext ctxWrapper,RsAllocation va,uint32_t lod,RsAllocationCubemapFace face,uint32_t z,uint32_t array,size_t * stride,size_t stride_length)396 extern "C" void * rsAllocationGetPointer (RsContext ctxWrapper, RsAllocation va, uint32_t lod, RsAllocationCubemapFace face,
397 uint32_t z, uint32_t array, size_t * stride, size_t stride_length)
398 {
399 return RS_DISPATCH(ctxWrapper, AllocationGetPointer, va, lod, face, z, array, stride, stride_length);
400 }
401
rsAllocation1DData(RsContext ctxWrapper,RsAllocation va,uint32_t xoff,uint32_t lod,uint32_t count,const void * data,size_t data_length)402 extern "C" void rsAllocation1DData (RsContext ctxWrapper, RsAllocation va, uint32_t xoff, uint32_t lod, uint32_t count,
403 const void * data, size_t data_length)
404 {
405 RS_DISPATCH(ctxWrapper, Allocation1DData, va, xoff, lod, count, data, data_length);
406 }
407
rsAllocation1DElementData(RsContext ctxWrapper,RsAllocation va,uint32_t x,uint32_t lod,const void * data,size_t data_length,size_t comp_offset)408 extern "C" void rsAllocation1DElementData (RsContext ctxWrapper, RsAllocation va, uint32_t x, uint32_t lod,
409 const void * data, size_t data_length, size_t comp_offset)
410 {
411 RS_DISPATCH(ctxWrapper, Allocation1DElementData, va, x, lod, data, data_length, comp_offset);
412 }
413
rsAllocationElementData(RsContext ctxWrapper,RsAllocation va,uint32_t x,uint32_t y,uint32_t z,uint32_t lod,const void * data,size_t data_length,size_t comp_offset)414 extern "C" void rsAllocationElementData (RsContext ctxWrapper, RsAllocation va, uint32_t x, uint32_t y, uint32_t z,
415 uint32_t lod, const void * data, size_t data_length, size_t comp_offset)
416 {
417 RS_DISPATCH(ctxWrapper, AllocationElementData, va, x, y, z, lod, data, data_length, comp_offset);
418 }
419
rsAllocation2DData(RsContext ctxWrapper,RsAllocation va,uint32_t xoff,uint32_t yoff,uint32_t lod,RsAllocationCubemapFace face,uint32_t w,uint32_t h,const void * data,size_t data_length,size_t stride)420 extern "C" void rsAllocation2DData (RsContext ctxWrapper, RsAllocation va, uint32_t xoff, uint32_t yoff, uint32_t lod,
421 RsAllocationCubemapFace face, uint32_t w, uint32_t h,
422 const void * data, size_t data_length, size_t stride)
423 {
424 RS_DISPATCH(ctxWrapper, Allocation2DData, va, xoff, yoff, lod, face, w, h, data, data_length, stride);
425 }
426
rsAllocation3DData(RsContext ctxWrapper,RsAllocation va,uint32_t xoff,uint32_t yoff,uint32_t zoff,uint32_t lod,uint32_t w,uint32_t h,uint32_t d,const void * data,size_t data_length,size_t stride)427 extern "C" void rsAllocation3DData (RsContext ctxWrapper, RsAllocation va, uint32_t xoff, uint32_t yoff, uint32_t zoff,
428 uint32_t lod, uint32_t w, uint32_t h, uint32_t d,
429 const void * data, size_t data_length, size_t stride)
430 {
431 RS_DISPATCH(ctxWrapper, Allocation3DData, va, xoff, yoff, zoff, lod, w, h, d, data, data_length, stride);
432 }
433
rsAllocationGenerateMipmaps(RsContext ctxWrapper,RsAllocation va)434 extern "C" void rsAllocationGenerateMipmaps (RsContext ctxWrapper, RsAllocation va)
435 {
436 RS_DISPATCH(ctxWrapper, AllocationGenerateMipmaps, va);
437 }
438
rsAllocationRead(RsContext ctxWrapper,RsAllocation va,void * data,size_t data_length)439 extern "C" void rsAllocationRead (RsContext ctxWrapper, RsAllocation va, void * data, size_t data_length)
440 {
441 RS_DISPATCH(ctxWrapper, AllocationRead, va, data, data_length);
442 }
443
rsAllocation1DRead(RsContext ctxWrapper,RsAllocation va,uint32_t xoff,uint32_t lod,uint32_t count,void * data,size_t data_length)444 extern "C" void rsAllocation1DRead (RsContext ctxWrapper, RsAllocation va, uint32_t xoff, uint32_t lod, uint32_t count,
445 void * data, size_t data_length)
446 {
447 RS_DISPATCH(ctxWrapper, Allocation1DRead, va, xoff, lod, count, data, data_length);
448 }
449
rsAllocationElementRead(RsContext ctxWrapper,RsAllocation va,uint32_t x,uint32_t y,uint32_t z,uint32_t lod,void * data,size_t data_length,size_t comp_offset)450 extern "C" void rsAllocationElementRead (RsContext ctxWrapper, RsAllocation va, uint32_t x, uint32_t y, uint32_t z,
451 uint32_t lod, void * data, size_t data_length, size_t comp_offset)
452 {
453 RS_DISPATCH(ctxWrapper, AllocationElementRead, va, x, y, z, lod, data, data_length, comp_offset);
454 }
455
rsAllocation2DRead(RsContext ctxWrapper,RsAllocation va,uint32_t xoff,uint32_t yoff,uint32_t lod,RsAllocationCubemapFace face,uint32_t w,uint32_t h,void * data,size_t data_length,size_t stride)456 extern "C" void rsAllocation2DRead (RsContext ctxWrapper, RsAllocation va, uint32_t xoff, uint32_t yoff, uint32_t lod,
457 RsAllocationCubemapFace face, uint32_t w, uint32_t h,
458 void * data, size_t data_length, size_t stride)
459 {
460 RS_DISPATCH(ctxWrapper, Allocation2DRead, va, xoff, yoff, lod, face, w, h, data, data_length, stride);
461 }
462
rsAllocation3DRead(RsContext ctxWrapper,RsAllocation va,uint32_t xoff,uint32_t yoff,uint32_t zoff,uint32_t lod,uint32_t w,uint32_t h,uint32_t d,void * data,size_t data_length,size_t stride)463 extern "C" void rsAllocation3DRead (RsContext ctxWrapper, RsAllocation va, uint32_t xoff, uint32_t yoff, uint32_t zoff,
464 uint32_t lod, uint32_t w, uint32_t h, uint32_t d,
465 void * data, size_t data_length, size_t stride)
466 {
467 RS_DISPATCH(ctxWrapper, Allocation3DRead, va, xoff, yoff, zoff, lod, w, h, d, data, data_length, stride);
468 }
469
rsAllocationSyncAll(RsContext ctxWrapper,RsAllocation va,RsAllocationUsageType src)470 extern "C" void rsAllocationSyncAll (RsContext ctxWrapper, RsAllocation va, RsAllocationUsageType src)
471 {
472 RS_DISPATCH(ctxWrapper, AllocationSyncAll, va, src);
473 }
474
rsAllocationResize1D(RsContext ctxWrapper,RsAllocation va,uint32_t dimX)475 extern "C" void rsAllocationResize1D (RsContext ctxWrapper, RsAllocation va, uint32_t dimX)
476 {
477 RS_DISPATCH(ctxWrapper, AllocationResize1D, va, dimX);
478 }
479
rsAllocationCopy2DRange(RsContext ctxWrapper,RsAllocation dest,uint32_t destXoff,uint32_t destYoff,uint32_t destMip,uint32_t destFace,uint32_t width,uint32_t height,RsAllocation src,uint32_t srcXoff,uint32_t srcYoff,uint32_t srcMip,uint32_t srcFace)480 extern "C" void rsAllocationCopy2DRange (RsContext ctxWrapper,
481 RsAllocation dest,
482 uint32_t destXoff, uint32_t destYoff,
483 uint32_t destMip, uint32_t destFace,
484 uint32_t width, uint32_t height,
485 RsAllocation src,
486 uint32_t srcXoff, uint32_t srcYoff,
487 uint32_t srcMip, uint32_t srcFace)
488 {
489 RS_DISPATCH(ctxWrapper, AllocationCopy2DRange, dest, destXoff, destYoff, destMip, destFace,
490 width, height, src, srcXoff, srcYoff, srcMip, srcFace);
491 }
492
rsAllocationCopy3DRange(RsContext ctxWrapper,RsAllocation dest,uint32_t destXoff,uint32_t destYoff,uint32_t destZoff,uint32_t destMip,uint32_t width,uint32_t height,uint32_t depth,RsAllocation src,uint32_t srcXoff,uint32_t srcYoff,uint32_t srcZoff,uint32_t srcMip)493 extern "C" void rsAllocationCopy3DRange (RsContext ctxWrapper,
494 RsAllocation dest,
495 uint32_t destXoff, uint32_t destYoff, uint32_t destZoff,
496 uint32_t destMip,
497 uint32_t width, uint32_t height, uint32_t depth,
498 RsAllocation src,
499 uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff,
500 uint32_t srcMip)
501 {
502 RS_DISPATCH(ctxWrapper, AllocationCopy3DRange,
503 dest, destXoff, destYoff, destZoff, destMip,
504 width, height, depth, src, srcXoff, srcYoff, srcZoff, srcMip);
505 }
506
rsAllocationIoSend(RsContext ctxWrapper,RsAllocation alloc)507 extern "C" void rsAllocationIoSend (RsContext ctxWrapper, RsAllocation alloc)
508 {
509 RS_DISPATCH(ctxWrapper, AllocationIoSend, alloc);
510 }
511
rsAllocationIoReceive(RsContext ctxWrapper,RsAllocation alloc)512 extern "C" int64_t rsAllocationIoReceive (RsContext ctxWrapper, RsAllocation alloc)
513 {
514 return RS_DISPATCH(ctxWrapper, AllocationIoReceive, alloc);
515 }
516
517 // ScriptGroup
518
rsScriptGroupExecute(RsContext ctxWrapper,RsScriptGroup group)519 extern "C" void rsScriptGroupExecute (RsContext ctxWrapper, RsScriptGroup group)
520 {
521 RS_DISPATCH(ctxWrapper, ScriptGroupExecute, group);
522 }
523
rsScriptGroup2Create(RsContext ctxWrapper,const char * name,size_t name_length,const char * cacheDir,size_t cacheDir_length,RsClosure * closures,size_t closures_length)524 extern "C" RsScriptGroup2 rsScriptGroup2Create (RsContext ctxWrapper, const char * name, size_t name_length,
525 const char * cacheDir, size_t cacheDir_length,
526 RsClosure * closures, size_t closures_length)
527 {
528 return RS_DISPATCH(ctxWrapper, ScriptGroup2Create,
529 name, name_length,
530 cacheDir, cacheDir_length,
531 closures, closures_length);
532 }
533
rsClosureCreate(RsContext ctxWrapper,RsScriptKernelID kernelID,RsAllocation returnValue,RsScriptFieldID * fieldIDs,size_t fieldIDs_length,const int64_t * values,size_t values_length,const int * sizes,size_t sizes_length,RsClosure * depClosures,size_t depClosures_length,RsScriptFieldID * depFieldIDs,size_t depFieldIDs_length)534 extern "C" RsClosure rsClosureCreate (RsContext ctxWrapper, RsScriptKernelID kernelID, RsAllocation returnValue,
535 RsScriptFieldID * fieldIDs, size_t fieldIDs_length,
536 const int64_t * values, size_t values_length,
537 const int * sizes, size_t sizes_length,
538 RsClosure * depClosures, size_t depClosures_length,
539 RsScriptFieldID * depFieldIDs, size_t depFieldIDs_length)
540 {
541 return RS_DISPATCH(ctxWrapper, ClosureCreate, kernelID, returnValue, fieldIDs, fieldIDs_length,
542 const_cast<int64_t *>(values), values_length,
543 const_cast<int *>(sizes), sizes_length,
544 depClosures, depClosures_length, depFieldIDs, depFieldIDs_length);
545 }
546
rsInvokeClosureCreate(RsContext ctxWrapper,RsScriptInvokeID invokeID,const void * params,size_t params_length,const RsScriptFieldID * fieldIDs,size_t fieldIDs_length,const int64_t * values,size_t values_length,const int * sizes,size_t sizes_length)547 extern "C" RsClosure rsInvokeClosureCreate (RsContext ctxWrapper, RsScriptInvokeID invokeID,
548 const void * params, size_t params_length,
549 const RsScriptFieldID * fieldIDs, size_t fieldIDs_length,
550 const int64_t * values, size_t values_length,
551 const int * sizes, size_t sizes_length)
552 {
553 return RS_DISPATCH(ctxWrapper, InvokeClosureCreate, invokeID,
554 params, params_length,
555 fieldIDs, fieldIDs_length,
556 values, values_length,
557 sizes, sizes_length);
558 }
559
rsClosureSetArg(RsContext ctxWrapper,RsClosure closureID,uint32_t index,uintptr_t value,int valueSize)560 extern "C" void rsClosureSetArg (RsContext ctxWrapper, RsClosure closureID, uint32_t index,
561 uintptr_t value, int valueSize)
562 {
563 RS_DISPATCH(ctxWrapper, ClosureSetArg, closureID, index, value, valueSize);
564 }
565
rsClosureSetGlobal(RsContext ctxWrapper,RsClosure closureID,RsScriptFieldID fieldID,int64_t value,int valueSize)566 extern "C" void rsClosureSetGlobal (RsContext ctxWrapper, RsClosure closureID, RsScriptFieldID fieldID,
567 int64_t value, int valueSize)
568 {
569 RS_DISPATCH(ctxWrapper, ClosureSetGlobal, closureID, fieldID, value, valueSize);
570 }
571
rsScriptKernelIDCreate(RsContext ctxWrapper,RsScript sid,int slot,int sig)572 extern "C" RsScriptKernelID rsScriptKernelIDCreate (RsContext ctxWrapper, RsScript sid, int slot, int sig)
573 {
574 return RS_DISPATCH(ctxWrapper, ScriptKernelIDCreate, sid, slot, sig);
575 }
576
rsScriptFieldIDCreate(RsContext ctxWrapper,RsScript sid,int slot)577 extern "C" RsScriptFieldID rsScriptFieldIDCreate (RsContext ctxWrapper, RsScript sid, int slot)
578 {
579 return RS_DISPATCH(ctxWrapper, ScriptFieldIDCreate, sid, slot);
580 }
581
rsScriptGroupCreate(RsContext ctxWrapper,RsScriptKernelID * kernels,size_t kernels_length,RsScriptKernelID * src,size_t src_length,RsScriptKernelID * dstK,size_t dstK_length,RsScriptFieldID * dstF,size_t dstF_length,const RsType * type,size_t type_length)582 extern "C" RsScriptGroup rsScriptGroupCreate (RsContext ctxWrapper, RsScriptKernelID * kernels, size_t kernels_length,
583 RsScriptKernelID * src, size_t src_length,
584 RsScriptKernelID * dstK, size_t dstK_length,
585 RsScriptFieldID * dstF, size_t dstF_length,
586 const RsType * type, size_t type_length)
587 {
588 return RS_DISPATCH(ctxWrapper, ScriptGroupCreate,
589 kernels, kernels_length,
590 src, src_length, dstK, dstK_length,
591 dstF, dstF_length, type, type_length);
592 }
593
rsScriptGroupSetOutput(RsContext ctxWrapper,RsScriptGroup group,RsScriptKernelID kernel,RsAllocation alloc)594 extern "C" void rsScriptGroupSetOutput (RsContext ctxWrapper, RsScriptGroup group,
595 RsScriptKernelID kernel, RsAllocation alloc)
596 {
597 RS_DISPATCH(ctxWrapper, ScriptGroupSetOutput, group, kernel, alloc);
598 }
599
rsScriptGroupSetInput(RsContext ctxWrapper,RsScriptGroup group,RsScriptKernelID kernel,RsAllocation alloc)600 extern "C" void rsScriptGroupSetInput (RsContext ctxWrapper, RsScriptGroup group,
601 RsScriptKernelID kernel, RsAllocation alloc)
602 {
603 RS_DISPATCH(ctxWrapper, ScriptGroupSetInput, group, kernel, alloc);
604 }
605
606
607 // Sampler
rsSamplerCreate(RsContext ctxWrapper,RsSamplerValue magFilter,RsSamplerValue minFilter,RsSamplerValue wrapS,RsSamplerValue wrapT,RsSamplerValue wrapR,float mAniso)608 extern "C" RsSampler rsSamplerCreate (RsContext ctxWrapper, RsSamplerValue magFilter, RsSamplerValue minFilter,
609 RsSamplerValue wrapS, RsSamplerValue wrapT, RsSamplerValue wrapR,
610 float mAniso)
611 {
612 return RS_DISPATCH(ctxWrapper, SamplerCreate, magFilter, minFilter, wrapS, wrapT, wrapR, mAniso);
613 }
614
615 // Script
616
rsScriptCCreate(RsContext ctxWrapper,const char * resName,size_t resName_length,const char * cacheDir,size_t cacheDir_length,const char * text,size_t text_length)617 extern "C" RsScript rsScriptCCreate (RsContext ctxWrapper, const char * resName, size_t resName_length,
618 const char * cacheDir, size_t cacheDir_length,
619 const char * text, size_t text_length)
620 {
621 return RS_DISPATCH(ctxWrapper, ScriptCCreate, resName, resName_length, cacheDir, cacheDir_length, text, text_length);
622 }
623
rsScriptIntrinsicCreate(RsContext ctxWrapper,uint32_t id,RsElement eid)624 extern "C" RsScript rsScriptIntrinsicCreate (RsContext ctxWrapper, uint32_t id, RsElement eid)
625 {
626 return RS_DISPATCH(ctxWrapper, ScriptIntrinsicCreate, id, eid);
627 }
628
rsScriptBindAllocation(RsContext ctxWrapper,RsScript vtm,RsAllocation va,uint32_t slot)629 extern "C" void rsScriptBindAllocation (RsContext ctxWrapper, RsScript vtm, RsAllocation va, uint32_t slot)
630 {
631 RS_DISPATCH(ctxWrapper, ScriptBindAllocation, vtm, va, slot);
632 }
633
rsScriptSetTimeZone(RsContext ctxWrapper,RsScript s,const char * timeZone,size_t timeZone_length)634 extern "C" void rsScriptSetTimeZone (RsContext ctxWrapper, RsScript s, const char * timeZone, size_t timeZone_length)
635 {
636 RS_DISPATCH(ctxWrapper, ScriptSetTimeZone, s, timeZone, timeZone_length);
637 }
638
rsScriptInvokeIDCreate(RsContext ctxWrapper,RsScript s,uint32_t slot)639 extern "C" RsScriptInvokeID rsScriptInvokeIDCreate (RsContext ctxWrapper, RsScript s, uint32_t slot)
640 {
641 return RS_DISPATCH(ctxWrapper, ScriptInvokeIDCreate, s, slot);
642 }
643
rsScriptInvoke(RsContext ctxWrapper,RsScript s,uint32_t slot)644 extern "C" void rsScriptInvoke (RsContext ctxWrapper, RsScript s, uint32_t slot)
645 {
646 RS_DISPATCH(ctxWrapper, ScriptInvoke, s, slot);
647 }
648
rsScriptInvokeV(RsContext ctxWrapper,RsScript s,uint32_t slot,const void * data,size_t data_length)649 extern "C" void rsScriptInvokeV (RsContext ctxWrapper, RsScript s, uint32_t slot, const void * data, size_t data_length)
650 {
651 RS_DISPATCH(ctxWrapper, ScriptInvokeV, s, slot, data, data_length);
652 }
653
rsScriptForEach(RsContext ctxWrapper,RsScript s,uint32_t slot,RsAllocation ain,RsAllocation aout,const void * usr,size_t usr_length,const RsScriptCall * sc,size_t sc_length)654 extern "C" void rsScriptForEach (RsContext ctxWrapper, RsScript s, uint32_t slot,
655 RsAllocation ain, RsAllocation aout,
656 const void * usr, size_t usr_length,
657 const RsScriptCall * sc, size_t sc_length)
658 {
659 RS_DISPATCH(ctxWrapper, ScriptForEach, s, slot, ain, aout, usr, usr_length, sc, sc_length);
660 }
661
rsScriptForEachMulti(RsContext ctxWrapper,RsScript s,uint32_t slot,RsAllocation * ains,size_t ains_length,RsAllocation aout,const void * usr,size_t usr_length,const RsScriptCall * sc,size_t sc_length)662 extern "C" void rsScriptForEachMulti (RsContext ctxWrapper, RsScript s, uint32_t slot,
663 RsAllocation * ains, size_t ains_length, RsAllocation aout,
664 const void * usr, size_t usr_length,
665 const RsScriptCall * sc, size_t sc_length)
666 {
667 RS_DISPATCH(ctxWrapper, ScriptForEachMulti, s, slot, ains, ains_length, aout, usr, usr_length, sc, sc_length);
668 }
669
rsScriptReduce(RsContext ctxWrapper,RsScript s,uint32_t slot,RsAllocation * ains,size_t ains_length,RsAllocation aout,const RsScriptCall * sc,size_t sc_length)670 extern "C" void rsScriptReduce (RsContext ctxWrapper, RsScript s, uint32_t slot,
671 RsAllocation * ains, size_t ains_length, RsAllocation aout,
672 const RsScriptCall * sc, size_t sc_length)
673 {
674 RS_DISPATCH(ctxWrapper, ScriptReduce, s, slot, ains, ains_length, aout, sc, sc_length);
675 }
676
rsScriptSetVarI(RsContext ctxWrapper,RsScript s,uint32_t slot,int value)677 extern "C" void rsScriptSetVarI (RsContext ctxWrapper, RsScript s, uint32_t slot, int value)
678 {
679 RS_DISPATCH(ctxWrapper, ScriptSetVarI, s, slot, value);
680 }
681
rsScriptSetVarObj(RsContext ctxWrapper,RsScript s,uint32_t slot,RsObjectBase value)682 extern "C" void rsScriptSetVarObj (RsContext ctxWrapper, RsScript s, uint32_t slot, RsObjectBase value)
683 {
684 RS_DISPATCH(ctxWrapper, ScriptSetVarObj, s, slot, value);
685 }
686
rsScriptSetVarJ(RsContext ctxWrapper,RsScript s,uint32_t slot,int64_t value)687 extern "C" void rsScriptSetVarJ (RsContext ctxWrapper, RsScript s, uint32_t slot, int64_t value)
688 {
689 RS_DISPATCH(ctxWrapper, ScriptSetVarJ, s, slot, value);
690 }
691
rsScriptSetVarF(RsContext ctxWrapper,RsScript s,uint32_t slot,float value)692 extern "C" void rsScriptSetVarF (RsContext ctxWrapper, RsScript s, uint32_t slot, float value)
693 {
694 RS_DISPATCH(ctxWrapper, ScriptSetVarF, s, slot, value);
695 }
696
rsScriptSetVarD(RsContext ctxWrapper,RsScript s,uint32_t slot,double value)697 extern "C" void rsScriptSetVarD (RsContext ctxWrapper, RsScript s, uint32_t slot, double value)
698 {
699 RS_DISPATCH(ctxWrapper, ScriptSetVarD, s, slot, value);
700 }
701
rsScriptSetVarV(RsContext ctxWrapper,RsScript s,uint32_t slot,const void * data,size_t data_length)702 extern "C" void rsScriptSetVarV (RsContext ctxWrapper, RsScript s, uint32_t slot,
703 const void * data, size_t data_length)
704 {
705 RS_DISPATCH(ctxWrapper, ScriptSetVarV, s, slot, data, data_length);
706 }
707
rsScriptGetVarV(RsContext ctxWrapper,RsScript s,uint32_t slot,void * data,size_t data_length)708 extern "C" void rsScriptGetVarV (RsContext ctxWrapper, RsScript s, uint32_t slot,
709 void * data, size_t data_length)
710 {
711 RS_DISPATCH(ctxWrapper, ScriptGetVarV, s, slot, data, data_length);
712 }
713
rsScriptSetVarVE(RsContext ctxWrapper,RsScript s,uint32_t slot,const void * data,size_t data_length,RsElement e,const uint32_t * dims,size_t dims_length)714 extern "C" void rsScriptSetVarVE (RsContext ctxWrapper, RsScript s, uint32_t slot,
715 const void * data, size_t data_length,
716 RsElement e, const uint32_t * dims, size_t dims_length)
717 {
718 RS_DISPATCH(ctxWrapper, ScriptSetVarVE, s, slot, data, data_length, e, dims, dims_length);
719 }
720
721
722 // Graphics
723 /* The following API are deprecated. */
724
rsContextCreateGL(RsDevice vdev,uint32_t version,uint32_t sdkVersion,RsSurfaceConfig sc,uint32_t dpi)725 RsContext rsContextCreateGL(RsDevice vdev, uint32_t version, uint32_t sdkVersion,
726 RsSurfaceConfig sc, uint32_t dpi)
727 {
728 if (!globalObjAlive) {
729 ALOGE("rsContextCreateGL is not allowed during process teardown.");
730 return nullptr;
731 }
732
733 RsFallbackAdaptation& instance = RsFallbackAdaptation::GetInstance();
734 RsContext context = instance.GetEntryFuncs()->ContextCreateGL(vdev, version, sdkVersion, sc, dpi);
735
736 RsContextWrapper *ctxWrapper = new RsContextWrapper{context, instance.GetEntryFuncs()};
737
738 // Lock contextMap when adding new entries.
739 std::unique_lock<std::mutex> lock(contextMapMutex);
740 contextMap.insert(std::make_pair(context, ctxWrapper));
741
742 return (RsContext) ctxWrapper;
743 }
744
rsContextBindProgramStore(RsContext ctxWrapper,RsProgramStore pgm)745 extern "C" void rsContextBindProgramStore (RsContext ctxWrapper, RsProgramStore pgm)
746 {
747 RS_DISPATCH(ctxWrapper, ContextBindProgramStore, pgm);
748 }
749
rsContextBindProgramFragment(RsContext ctxWrapper,RsProgramFragment pgm)750 extern "C" void rsContextBindProgramFragment (RsContext ctxWrapper, RsProgramFragment pgm)
751 {
752 RS_DISPATCH(ctxWrapper, ContextBindProgramFragment, pgm);
753 }
754
rsContextBindProgramVertex(RsContext ctxWrapper,RsProgramVertex pgm)755 extern "C" void rsContextBindProgramVertex (RsContext ctxWrapper, RsProgramVertex pgm)
756 {
757 RS_DISPATCH(ctxWrapper, ContextBindProgramVertex, pgm);
758 }
759
rsContextBindProgramRaster(RsContext ctxWrapper,RsProgramRaster pgm)760 extern "C" void rsContextBindProgramRaster (RsContext ctxWrapper, RsProgramRaster pgm)
761 {
762 RS_DISPATCH(ctxWrapper, ContextBindProgramRaster, pgm);
763 }
764
rsContextBindFont(RsContext ctxWrapper,RsFont pgm)765 extern "C" void rsContextBindFont (RsContext ctxWrapper, RsFont pgm)
766 {
767 RS_DISPATCH(ctxWrapper, ContextBindFont, pgm);
768 }
769
rsContextSetSurface(RsContext ctxWrapper,uint32_t width,uint32_t height,RsNativeWindow sur)770 extern "C" void rsContextSetSurface (RsContext ctxWrapper, uint32_t width, uint32_t height,
771 RsNativeWindow sur)
772 {
773 RS_DISPATCH(ctxWrapper, ContextSetSurface, width, height, sur);
774 }
775
rsContextBindRootScript(RsContext ctxWrapper,RsScript sampler)776 extern "C" void rsContextBindRootScript (RsContext ctxWrapper, RsScript sampler)
777 {
778 RS_DISPATCH(ctxWrapper, ContextBindRootScript, sampler);
779 }
780
rsContextPause(RsContext ctxWrapper)781 extern "C" void rsContextPause (RsContext ctxWrapper)
782 {
783 RS_DISPATCH(ctxWrapper, ContextPause);
784 }
785
rsContextResume(RsContext ctxWrapper)786 extern "C" void rsContextResume (RsContext ctxWrapper)
787 {
788 RS_DISPATCH(ctxWrapper, ContextResume);
789 }
790
rsProgramStoreCreate(RsContext ctxWrapper,bool colorMaskR,bool colorMaskG,bool colorMaskB,bool colorMaskA,bool depthMask,bool ditherEnable,RsBlendSrcFunc srcFunc,RsBlendDstFunc destFunc,RsDepthFunc depthFunc)791 extern "C" RsProgramStore rsProgramStoreCreate (RsContext ctxWrapper,
792 bool colorMaskR, bool colorMaskG,
793 bool colorMaskB, bool colorMaskA,
794 bool depthMask, bool ditherEnable,
795 RsBlendSrcFunc srcFunc,
796 RsBlendDstFunc destFunc,
797 RsDepthFunc depthFunc)
798 {
799 return RS_DISPATCH(ctxWrapper, ProgramStoreCreate,
800 colorMaskR, colorMaskG, colorMaskB, colorMaskA,
801 depthMask, ditherEnable, srcFunc, destFunc, depthFunc);
802 }
803
rsProgramRasterCreate(RsContext ctxWrapper,bool pointSprite,RsCullMode cull)804 extern "C" RsProgramRaster rsProgramRasterCreate (RsContext ctxWrapper, bool pointSprite, RsCullMode cull)
805 {
806 return RS_DISPATCH(ctxWrapper, ProgramRasterCreate, pointSprite, cull);
807 }
808
rsProgramFragmentCreate(RsContext ctxWrapper,const char * shaderText,size_t shaderText_length,const char ** textureNames,size_t textureNames_length_length,const size_t * textureNames_length,const uintptr_t * params,size_t params_length)809 extern "C" RsProgramFragment rsProgramFragmentCreate (RsContext ctxWrapper,
810 const char * shaderText, size_t shaderText_length,
811 const char ** textureNames, size_t textureNames_length_length,
812 const size_t * textureNames_length,
813 const uintptr_t * params, size_t params_length)
814 {
815 return RS_DISPATCH(ctxWrapper, ProgramFragmentCreate,
816 shaderText, shaderText_length,
817 textureNames, textureNames_length_length, textureNames_length,
818 params, params_length);
819 }
820
rsProgramVertexCreate(RsContext ctxWrapper,const char * shaderText,size_t shaderText_length,const char ** textureNames,size_t textureNames_length_length,const size_t * textureNames_length,const uintptr_t * params,size_t params_length)821 extern "C" RsProgramVertex rsProgramVertexCreate (RsContext ctxWrapper,
822 const char * shaderText, size_t shaderText_length,
823 const char ** textureNames, size_t textureNames_length_length,
824 const size_t * textureNames_length,
825 const uintptr_t * params, size_t params_length)
826 {
827 return RS_DISPATCH(ctxWrapper, ProgramVertexCreate,
828 shaderText, shaderText_length,
829 textureNames, textureNames_length_length, textureNames_length,
830 params, params_length);
831 }
832
rsFontCreateFromFile(RsContext ctxWrapper,const char * name,size_t name_length,float fontSize,uint32_t dpi)833 extern "C" RsFont rsFontCreateFromFile (RsContext ctxWrapper, const char * name, size_t name_length,
834 float fontSize, uint32_t dpi)
835 {
836 return RS_DISPATCH(ctxWrapper, FontCreateFromFile, name, name_length, fontSize, dpi);
837 }
838
rsFontCreateFromMemory(RsContext ctxWrapper,const char * name,size_t name_length,float fontSize,uint32_t dpi,const void * data,size_t data_length)839 extern "C" RsFont rsFontCreateFromMemory (RsContext ctxWrapper, const char * name, size_t name_length,
840 float fontSize, uint32_t dpi,
841 const void * data, size_t data_length)
842 {
843 return RS_DISPATCH(ctxWrapper, FontCreateFromMemory, name, name_length, fontSize, dpi, data, data_length);
844 }
845
rsMeshCreate(RsContext ctxWrapper,RsAllocation * vtx,size_t vtx_length,RsAllocation * idx,size_t idx_length,uint32_t * primType,size_t primType_length)846 extern "C" RsMesh rsMeshCreate (RsContext ctxWrapper, RsAllocation * vtx, size_t vtx_length,
847 RsAllocation * idx, size_t idx_length,
848 uint32_t * primType, size_t primType_length)
849 {
850 return RS_DISPATCH(ctxWrapper, MeshCreate, vtx, vtx_length, idx, idx_length, primType, primType_length);
851 }
852
rsProgramBindConstants(RsContext ctxWrapper,RsProgram vp,uint32_t slot,RsAllocation constants)853 extern "C" void rsProgramBindConstants (RsContext ctxWrapper, RsProgram vp, uint32_t slot, RsAllocation constants)
854 {
855 RS_DISPATCH(ctxWrapper, ProgramBindConstants, vp, slot, constants);
856 }
857
rsProgramBindTexture(RsContext ctxWrapper,RsProgramFragment pf,uint32_t slot,RsAllocation a)858 extern "C" void rsProgramBindTexture (RsContext ctxWrapper, RsProgramFragment pf, uint32_t slot, RsAllocation a)
859 {
860 RS_DISPATCH(ctxWrapper, ProgramBindTexture, pf, slot,a);
861 }
862
rsProgramBindSampler(RsContext ctxWrapper,RsProgramFragment pf,uint32_t slot,RsSampler s)863 extern "C" void rsProgramBindSampler (RsContext ctxWrapper, RsProgramFragment pf, uint32_t slot, RsSampler s)
864 {
865 RS_DISPATCH(ctxWrapper, ProgramBindSampler, pf, slot, s);
866 }
867
rsaFileA3DGetEntryByIndex(RsContext ctxWrapper,uint32_t index,RsFile file)868 RsObjectBase rsaFileA3DGetEntryByIndex(RsContext ctxWrapper, uint32_t index, RsFile file)
869 {
870 return RS_DISPATCH(ctxWrapper, FileA3DGetEntryByIndex, index, file);
871 }
872
rsaFileA3DCreateFromMemory(RsContext ctxWrapper,const void * data,uint32_t len)873 RsFile rsaFileA3DCreateFromMemory(RsContext ctxWrapper, const void *data, uint32_t len)
874 {
875 return RS_DISPATCH(ctxWrapper, FileA3DCreateFromMemory, data, len);
876 }
877
rsaFileA3DCreateFromAsset(RsContext ctxWrapper,void * _asset)878 RsFile rsaFileA3DCreateFromAsset(RsContext ctxWrapper, void *_asset)
879 {
880 return RS_DISPATCH(ctxWrapper, FileA3DCreateFromAsset, _asset);
881 }
882
rsaFileA3DCreateFromFile(RsContext ctxWrapper,const char * path)883 RsFile rsaFileA3DCreateFromFile(RsContext ctxWrapper, const char *path)
884 {
885 return RS_DISPATCH(ctxWrapper, FileA3DCreateFromFile, path);
886 }
887
rsaFileA3DGetNumIndexEntries(RsContext ctxWrapper,int32_t * numEntries,RsFile file)888 void rsaFileA3DGetNumIndexEntries(RsContext ctxWrapper, int32_t *numEntries, RsFile file)
889 {
890 RS_DISPATCH(ctxWrapper, FileA3DGetNumIndexEntries, numEntries, file);
891 }
892
rsaFileA3DGetIndexEntries(RsContext ctxWrapper,RsFileIndexEntry * fileEntries,uint32_t numEntries,RsFile file)893 void rsaFileA3DGetIndexEntries(RsContext ctxWrapper, RsFileIndexEntry *fileEntries, uint32_t numEntries, RsFile file)
894 {
895 RS_DISPATCH(ctxWrapper, FileA3DGetIndexEntries, fileEntries, numEntries, file);
896 }
897
rsaMeshGetVertexBufferCount(RsContext ctxWrapper,RsMesh mv,int32_t * numVtx)898 void rsaMeshGetVertexBufferCount(RsContext ctxWrapper, RsMesh mv, int32_t *numVtx)
899 {
900 RS_DISPATCH(ctxWrapper, MeshGetVertexBufferCount, mv, numVtx);
901 }
902
rsaMeshGetIndexCount(RsContext ctxWrapper,RsMesh mv,int32_t * numIdx)903 void rsaMeshGetIndexCount(RsContext ctxWrapper, RsMesh mv, int32_t *numIdx)
904 {
905 RS_DISPATCH(ctxWrapper, MeshGetIndexCount, mv, numIdx);
906 }
907
rsaMeshGetVertices(RsContext ctxWrapper,RsMesh mv,RsAllocation * vtxData,uint32_t vtxDataCount)908 void rsaMeshGetVertices(RsContext ctxWrapper, RsMesh mv, RsAllocation *vtxData, uint32_t vtxDataCount)
909 {
910 RS_DISPATCH(ctxWrapper, MeshGetVertices, mv, vtxData, vtxDataCount);
911 }
912
rsaMeshGetIndices(RsContext ctxWrapper,RsMesh mv,RsAllocation * va,uint32_t * primType,uint32_t idxDataCount)913 void rsaMeshGetIndices(RsContext ctxWrapper, RsMesh mv, RsAllocation *va, uint32_t *primType, uint32_t idxDataCount)
914 {
915 RS_DISPATCH(ctxWrapper, MeshGetIndices, mv, va, primType, idxDataCount);
916 }
917