blob: e6a28abc9109d8a107bd1e30131933eb0059ac78 [file] [log] [blame]
Miao Wang0838b982017-01-20 15:39:17 -08001/*
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
Dan Willemsen19593012017-04-03 22:32:40 -070017#define LOG_TAG "RenderScript HIDL Adaptation"
18
Miao Wang0838b982017-01-20 15:39:17 -080019#include "cpp/rsDispatch.h"
20#include "rsHidlAdaptation.h"
21#include "rsFallbackAdaptation.h"
22
23#include <cutils/properties.h>
Dan Willemsen19593012017-04-03 22:32:40 -070024#include <log/log.h>
Miao Wang0838b982017-01-20 15:39:17 -080025
26using ::android::hardware::renderscript::V1_0::IDevice;
27using ::android::hardware::renderscript::V1_0::IContext;
28using ::android::hardware::renderscript::V1_0::Allocation;
29using ::android::hardware::renderscript::V1_0::AllocationCubemapFace;
30using ::android::hardware::renderscript::V1_0::AllocationMipmapControl;
31using ::android::hardware::renderscript::V1_0::AllocationUsageType;
32using ::android::hardware::renderscript::V1_0::Closure;
33using ::android::hardware::renderscript::V1_0::ContextType;
34using ::android::hardware::renderscript::V1_0::DataKind;
35using ::android::hardware::renderscript::V1_0::DataType;
36using ::android::hardware::renderscript::V1_0::ForEachStrategy;
37using ::android::hardware::renderscript::V1_0::MessageToClientType;
38using ::android::hardware::renderscript::V1_0::SamplerValue;
39using ::android::hardware::renderscript::V1_0::ScriptCall;
40using ::android::hardware::renderscript::V1_0::ScriptFieldID;
41using ::android::hardware::renderscript::V1_0::ScriptKernelID;
42using ::android::hardware::renderscript::V1_0::ScriptIntrinsicID;
43using ::android::hardware::renderscript::V1_0::ThreadPriorities;
44using ::android::hardware::renderscript::V1_0::Type;
45using ::android::hardware::renderscript::V1_0::YuvFormat;
46using ::android::hardware::renderscript::V1_0::Size;
47using ::android::hidl::base::V1_0::IBase;
48using ::android::hardware::hidl_array;
49using ::android::hardware::hidl_memory;
50using ::android::hardware::details::hidl_pointer;
51using ::android::hardware::hidl_string;
52using ::android::hardware::hidl_vec;
53using ::android::hardware::Return;
54using ::android::hardware::Void;
55using ::android::sp;
56
Miao Wang0838b982017-01-20 15:39:17 -080057dispatchTable RsHidlAdaptation::mEntryFuncs;
58sp<IDevice> RsHidlAdaptation::mHidl;
59std::set<sp<IContext> > RsHidlAdaptation::mContexts;
60std::mutex RsHidlAdaptation::mContextsMutex;
61
62static uint32_t getProp(const char *str) {
63 char buf[PROPERTY_VALUE_MAX];
64 property_get(str, buf, "0");
65 return atoi(buf);
66}
67
68RsHidlAdaptation::RsHidlAdaptation()
69{
70 InitializeHalDeviceContext();
71}
72
73RsHidlAdaptation& RsHidlAdaptation::GetInstance()
74{
75 // This function-local-static guarantees the instance is a singleton. The
76 // constructor of RsHidlAdaptation will only be called when GetInstance is
77 // called for the first time.
78 static RsHidlAdaptation instance;
79 return instance;
80}
81
82const dispatchTable* RsHidlAdaptation::GetEntryFuncs()
83{
84 return &mEntryFuncs;
85}
86
87
88void RsHidlAdaptation::LoadDispatchForHidl() {
89 mEntryFuncs.Allocation1DData = Allocation1DData;
90 mEntryFuncs.Allocation1DElementData = Allocation1DElementData;
91 mEntryFuncs.Allocation1DRead = Allocation1DRead;
92 mEntryFuncs.Allocation2DData = Allocation2DData;
93 mEntryFuncs.Allocation2DRead = Allocation2DRead;
94 mEntryFuncs.Allocation3DData = Allocation3DData;
95 mEntryFuncs.Allocation3DRead = Allocation3DRead;
96 mEntryFuncs.AllocationAdapterCreate = AllocationAdapterCreate;
97 mEntryFuncs.AllocationAdapterOffset = AllocationAdapterOffset;
98 mEntryFuncs.AllocationCopy2DRange = AllocationCopy2DRange;
99 mEntryFuncs.AllocationCopy3DRange = AllocationCopy3DRange;
100 mEntryFuncs.AllocationCopyToBitmap = AllocationCopyToBitmap;
101 mEntryFuncs.AllocationCreateFromBitmap = AllocationCreateFromBitmap;
102 mEntryFuncs.AllocationCreateTyped = AllocationCreateTyped;
103 mEntryFuncs.AllocationCubeCreateFromBitmap = AllocationCubeCreateFromBitmap;
104 mEntryFuncs.AllocationElementData = AllocationElementData;
105 mEntryFuncs.AllocationElementRead = AllocationElementRead;
106 mEntryFuncs.AllocationGenerateMipmaps = AllocationGenerateMipmaps;
107 mEntryFuncs.AllocationGetPointer = AllocationGetPointer;
108 mEntryFuncs.AllocationGetSurface = AllocationGetSurface;
109 mEntryFuncs.AllocationGetType = AllocationGetType;
110 mEntryFuncs.AllocationIoReceive = AllocationIoReceive;
111 mEntryFuncs.AllocationIoSend = AllocationIoSend;
112 mEntryFuncs.AllocationRead = AllocationRead;
113 mEntryFuncs.AllocationResize1D = AllocationResize1D;
114 mEntryFuncs.AllocationSetSurface = AllocationSetSurface;
115 mEntryFuncs.AllocationSetupBufferQueue = AllocationSetupBufferQueue;
116 mEntryFuncs.AllocationShareBufferQueue = AllocationShareBufferQueue;
117 mEntryFuncs.AllocationSyncAll = AllocationSyncAll;
118 mEntryFuncs.AssignName = AssignName;
119 mEntryFuncs.ClosureCreate = ClosureCreate;
120 mEntryFuncs.ClosureSetArg = ClosureSetArg;
121 mEntryFuncs.ClosureSetGlobal = ClosureSetGlobal;
122 mEntryFuncs.ContextCreate = ContextCreate;
123 mEntryFuncs.ContextDeinitToClient = ContextDeinitToClient;
124 mEntryFuncs.ContextDestroy = ContextDestroy;
125 mEntryFuncs.ContextDump = ContextDump;
126 mEntryFuncs.ContextFinish = ContextFinish;
127 mEntryFuncs.ContextGetMessage = ContextGetMessage;
128 mEntryFuncs.ContextInitToClient = ContextInitToClient;
129 mEntryFuncs.ContextPeekMessage = ContextPeekMessage;
130 mEntryFuncs.ContextSendMessage = ContextSendMessage;
131 mEntryFuncs.ContextSetCacheDir = ContextSetCacheDir;
132 mEntryFuncs.ContextSetPriority = ContextSetPriority;
133 mEntryFuncs.ElementCreate = ElementCreate;
134 mEntryFuncs.ElementCreate2 = ElementCreate2;
135 mEntryFuncs.ElementGetNativeData = ElementGetNativeData;
136 mEntryFuncs.ElementGetSubElements = ElementGetSubElements;
137 mEntryFuncs.GetName = GetName;
138 mEntryFuncs.InvokeClosureCreate = InvokeClosureCreate;
139 mEntryFuncs.ObjDestroy = ObjDestroy;
140 mEntryFuncs.SamplerCreate = SamplerCreate;
141 mEntryFuncs.ScriptBindAllocation = ScriptBindAllocation;
142 mEntryFuncs.ScriptCCreate = ScriptCCreate;
143 mEntryFuncs.ScriptFieldIDCreate = ScriptFieldIDCreate;
144 mEntryFuncs.ScriptForEach = ScriptForEach;
145 mEntryFuncs.ScriptForEachMulti = ScriptForEachMulti;
146 mEntryFuncs.ScriptGetVarV = ScriptGetVarV;
147 mEntryFuncs.ScriptGroup2Create = ScriptGroup2Create;
148 mEntryFuncs.ScriptGroupCreate = ScriptGroupCreate;
149 mEntryFuncs.ScriptGroupExecute = ScriptGroupExecute;
150 mEntryFuncs.ScriptGroupSetInput = ScriptGroupSetInput;
151 mEntryFuncs.ScriptGroupSetOutput = ScriptGroupSetOutput;
152 mEntryFuncs.ScriptIntrinsicCreate = ScriptIntrinsicCreate;
153 mEntryFuncs.ScriptInvoke = ScriptInvoke;
154 mEntryFuncs.ScriptInvokeIDCreate = ScriptInvokeIDCreate;
155 mEntryFuncs.ScriptInvokeV = ScriptInvokeV;
156 mEntryFuncs.ScriptKernelIDCreate = ScriptKernelIDCreate;
157 mEntryFuncs.ScriptReduce = ScriptReduce;
158 mEntryFuncs.ScriptSetTimeZone = ScriptSetTimeZone;
159 mEntryFuncs.ScriptSetVarD = ScriptSetVarD;
160 mEntryFuncs.ScriptSetVarF = ScriptSetVarF;
161 mEntryFuncs.ScriptSetVarI = ScriptSetVarI;
162 mEntryFuncs.ScriptSetVarJ = ScriptSetVarJ;
163 mEntryFuncs.ScriptSetVarObj = ScriptSetVarObj;
164 mEntryFuncs.ScriptSetVarV = ScriptSetVarV;
165 mEntryFuncs.ScriptSetVarVE = ScriptSetVarVE;
166 mEntryFuncs.TypeCreate = TypeCreate;
167 mEntryFuncs.TypeGetNativeData = TypeGetNativeData;
168}
169
170void RsHidlAdaptation::InitializeHalDeviceContext()
171{
172 ALOGD("IRenderScriptDevice::getService()");
173 if (getProp("debug.rs.rsov") == 0 &&
174 getProp("debug.rs.default-CPU-driver") == 0) {
175 // get HIDL service and register callback
176 mHidl = IDevice::getService();
177 }
178 ALOGD("IRenderScriptDevice::getService() returned %p", mHidl.get());
179
180 if (mHidl == NULL) {
181 ALOGD("Using Fallback Path.");
182 RsFallbackAdaptation& fallbackInstance = RsFallbackAdaptation::GetInstance();
183 mEntryFuncs = *(fallbackInstance.GetEntryFuncs());
184 } else {
185 ALOGD("HIDL successfully loaded.");
186 LoadDispatchForHidl();
187 }
188}
189
190IContext *RsHidlAdaptation::GetIContextHandle(RsContext context) {
191 return (IContext *)context;
192}
193
194RsContext RsHidlAdaptation::ContextCreate(RsDevice vdev, uint32_t version, uint32_t sdkVersion, RsContextType ct, uint32_t flags)
195{
196 // Get the handle to IContext interface object and save it to the map.
197 sp<IContext> context = mHidl->contextCreate(sdkVersion, (ContextType)ct, flags);
198 RsContext ret = (RsContext)(uintptr_t)context.get();
199
200 std::unique_lock<std::mutex> lock(mContextsMutex);
201 mContexts.insert(context);
202 return ret;
203}
204
205void RsHidlAdaptation::ContextDestroy (RsContext context)
206{
207 // Destroy the driver context and remove IContext handle from the map.
208 GetIContextHandle(context)->contextDestroy();
209
210 std::unique_lock<std::mutex> lock(mContextsMutex);
211 mContexts.erase((IContext*)context);
212}
213
214const void* RsHidlAdaptation::AllocationGetType(RsContext context, RsAllocation allocation)
215{
216 // TODO: Replace this idiom "(uint64_t)(uintptr_t)" with a rs_to_hal function?
217 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
218 uint64_t typeRet = GetIContextHandle(context)->allocationGetType(_allocation);
219 return (void *)typeRet;
220}
221
222
223void RsHidlAdaptation::TypeGetNativeData(RsContext context, RsType type, uintptr_t *typedata, uint32_t typeDataSize)
224{
225 uint64_t _type = (uint64_t)(uintptr_t)type;
226
227 GetIContextHandle(context)->typeGetNativeMetadata(_type,
228 [typedata, typeDataSize] (const hidl_vec<uint64_t> &retTypeData){
229 for (uint32_t i=0; i<typeDataSize; i++) {
230 typedata[i] = (uintptr_t)retTypeData[i];
231 }
232 });
233}
234
235
236void RsHidlAdaptation::ElementGetNativeData(RsContext context, RsElement element, uint32_t *elemData, uint32_t elemDataSize)
237{
238 uint64_t _element = (uint64_t)(uintptr_t)element;
239
240 GetIContextHandle(context)->elementGetNativeMetadata(_element,
241 [elemData, elemDataSize] (const hidl_vec<uint32_t> &retElemData){
242 for (uint32_t i=0; i<elemDataSize; i++) {
243 elemData[i] = retElemData[i];
244 }
245 });
246}
247
248void RsHidlAdaptation::ElementGetSubElements(RsContext context, RsElement element, uintptr_t *ids, const char **names, size_t *arraySizes, uint32_t dataSize)
249{
250 uint64_t _element = (uint64_t)(uintptr_t)element;
251 uint64_t _ids = (uint64_t)(uintptr_t)ids;
252 uint64_t _names = (uint64_t)(uintptr_t)names;
253 uint64_t _arraySizes = (uint64_t)(uintptr_t)arraySizes;
254
255 GetIContextHandle(context)->elementGetSubElements(_element, dataSize,
256 [ids, names, arraySizes, dataSize] (const hidl_vec<uint64_t> &retIds, const hidl_vec<hidl_string> &retNames, const hidl_vec<Size> &retArraySizes){
257 for (uint32_t i=0; i<dataSize; i++) {
258 ids[i] = static_cast<uintptr_t>(retIds[i]);
259 names[i] = static_cast<const char *>(retNames[i].c_str());
260 arraySizes[i] = static_cast<size_t>(retArraySizes[i]);
261 }
262 });
263}
264
265
266void RsHidlAdaptation::GetName(RsContext context, void * obj, const char **name) {
267 uint64_t _obj = (uint64_t)(uintptr_t)obj;
268
269 GetIContextHandle(context)->getName(_obj, [name](hidl_string ret_name) {*name = ret_name.c_str();});
270}
271
272RsClosure RsHidlAdaptation::ClosureCreate(RsContext context, RsScriptKernelID kernelID,
273 RsAllocation returnValue,
274 RsScriptFieldID* fieldIDs, size_t fieldIDs_length,
275 int64_t* values, size_t values_length,
276 int* sizes, size_t sizes_length,
277 RsClosure* depClosures, size_t depClosures_length,
278 RsScriptFieldID* depFieldIDs,
279 size_t depFieldIDs_length)
280{
281 uint64_t _kernelID = (uint64_t)(uintptr_t)kernelID;
282 uint64_t _returnValue = (uint64_t)(uintptr_t)returnValue;
283
284 std::vector<ScriptFieldID> _fieldIDs(fieldIDs_length);
285 std::vector<int64_t> _values(values_length);
286 std::vector<int32_t> _sizes(sizes_length);
287 std::vector<Closure> _depClosures(depClosures_length);
288 std::vector<ScriptFieldID> _depFieldIDs(depFieldIDs_length);
289
290 // TODO: Replace this idiom with a rs_to_hal function?
291 for (size_t i = 0; i < fieldIDs_length; i++) {
292 _fieldIDs[i] = (ScriptFieldID)(uintptr_t)fieldIDs[i];
293 }
294 for (size_t i = 0; i < values_length; i++) {
295 _values[i] = (int64_t)values[i];
296 }
297 for (size_t i = 0; i < sizes_length; i++) {
298 _sizes[i] = (int32_t)sizes[i];
299 }
300 for (size_t i = 0; i < depClosures_length; i++) {
301 _depClosures[i] = (Closure)(uintptr_t)depClosures[i];
302 }
303 for (size_t i = 0; i < depFieldIDs_length; i++) {
304 _depFieldIDs[i] = (ScriptFieldID)(uintptr_t)depFieldIDs[i];
305 }
306
307 uint64_t closure = GetIContextHandle(context)->closureCreate(_kernelID, _returnValue,
308 _fieldIDs, _values, _sizes,
309 _depClosures, _depFieldIDs);
310 return (RsClosure) closure;
311
312}
313
314RsClosure RsHidlAdaptation::InvokeClosureCreate(RsContext context, RsScriptInvokeID invokeID,
315 const void* params, const size_t paramLength,
316 const RsScriptFieldID* fieldIDs, const size_t fieldIDs_length,
317 const int64_t* values, const size_t values_length,
318 const int* sizes, const size_t sizes_length)
319{
320 uint64_t _invokeID = (uint64_t)(uintptr_t)invokeID;
321
322 hidl_vec<uint8_t> _params;
323 _params.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(params)), paramLength);
324
325 std::vector<ScriptFieldID> _fieldIDs(fieldIDs_length);
326 std::vector<int64_t> _values(values_length);
327 std::vector<int32_t> _sizes(sizes_length);
328
329 for (size_t i = 0; i < fieldIDs_length; i++) {
330 _fieldIDs[i] = (ScriptFieldID)(uintptr_t)fieldIDs[i];
331 }
332 for (size_t i = 0; i < values_length; i++) {
333 _values[i] = (int64_t)values[i];
334 }
335 for (size_t i = 0; i < sizes_length; i++) {
336 _sizes[i] = (int32_t)sizes[i];
337 }
338
339 uint64_t closure = GetIContextHandle(context)->invokeClosureCreate(_invokeID,
340 _params, _fieldIDs,
341 _values, _sizes);
342 return (RsClosure) closure;
343}
344
345void RsHidlAdaptation::ClosureSetArg(RsContext context, RsClosure closure, uint32_t index,
346 uintptr_t value, int size)
347{
348 uint64_t _closure = (uint64_t)(uintptr_t)closure;
349 void * _value = (void *)value;
350 GetIContextHandle(context)->closureSetArg(_closure, index, _value, size);
351}
352void RsHidlAdaptation::ClosureSetGlobal(RsContext context, RsClosure closure,
353 RsScriptFieldID fieldID, int64_t value,
354 int size)
355{
356 uint64_t _closure = (uint64_t)(uintptr_t)closure;
357 uint64_t _fieldID = (uint64_t)(uintptr_t)fieldID;
358 GetIContextHandle(context)->closureSetGlobal(_closure, _fieldID, value, size);
359}
360
361RsMessageToClientType RsHidlAdaptation::ContextGetMessage (RsContext context, void * data, size_t data_length,
362 size_t * receiveLen, size_t receiveLen_length,
363 uint32_t * subID, size_t subID_length)
364{
365 RsMessageToClientType msgType;
366 GetIContextHandle(context)->contextGetMessage(data, data_length,
367 [&msgType, receiveLen](MessageToClientType retMessageType, uint64_t retReceiveLen) {
368 msgType = (RsMessageToClientType) retMessageType;
369 *receiveLen = retReceiveLen;
370 });
371 return msgType;
372}
373
374RsMessageToClientType RsHidlAdaptation::ContextPeekMessage (RsContext context,
375 size_t * receiveLen, size_t receiveLen_length,
376 uint32_t * subID, size_t subID_length)
377{
378 RsMessageToClientType msgType;
379 GetIContextHandle(context)->contextPeekMessage(
380 [&msgType, receiveLen, subID](MessageToClientType retMessageType, uint64_t retReceiveLen, uint32_t retSubID) {
381 msgType = (RsMessageToClientType) retMessageType;
382 *receiveLen = retReceiveLen;
383 *subID = retSubID;
384 });
385
386 return msgType;
387
388}
389
390void RsHidlAdaptation::ContextSendMessage (RsContext context, uint32_t id, const uint8_t *data, size_t len)
391{
392 hidl_vec<uint8_t> _data;
393 _data.setToExternal(const_cast<uint8_t *>(data), len);
394 GetIContextHandle(context)->contextSendMessage(id, _data);
395}
396
397void RsHidlAdaptation::ContextInitToClient (RsContext context)
398{
399 GetIContextHandle(context)->contextInitToClient();
400}
401
402void RsHidlAdaptation::ContextDeinitToClient (RsContext context)
403{
404 GetIContextHandle(context)->contextDeinitToClient();
405}
406
407
408RsType RsHidlAdaptation::TypeCreate (RsContext context, RsElement element, uint32_t dimX,
409 uint32_t dimY, uint32_t dimZ, bool mipmaps,
410 bool faces, uint32_t yuv)
411{
412 uint64_t _element = (uint64_t)(uintptr_t)element;
413
414 uint64_t type = GetIContextHandle(context)->typeCreate(_element, dimX, dimY, dimZ, mipmaps, faces,
415 (YuvFormat) yuv);
416 return (RsType) type;
417}
418
419RsAllocation RsHidlAdaptation::AllocationCreateTyped (RsContext context, RsType type,
420 RsAllocationMipmapControl mipmaps,
421 uint32_t usages, uintptr_t ptr)
422{
423 uint64_t _type = (uint64_t)(uintptr_t)type;
424 void * _ptr = (void *)ptr;
425
426 uint64_t allocation = GetIContextHandle(context)->allocationCreateTyped(_type,
427 (AllocationMipmapControl)mipmaps, usages, _ptr);
428 return (RsAllocation) allocation;
429}
430
431
432RsAllocation RsHidlAdaptation::AllocationCreateFromBitmap (RsContext context, RsType type,
433 RsAllocationMipmapControl mipmaps,
434 const void *data, size_t sizeBytes, uint32_t usages)
435{
436 uint64_t _type = (uint64_t)(uintptr_t)type;
437
438 hidl_vec<uint8_t> _bitmap;
439 _bitmap.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(data)), sizeBytes);
440
441 uint64_t allocation = GetIContextHandle(context)->allocationCreateFromBitmap(_type,
442 (AllocationMipmapControl)mipmaps, _bitmap, usages);
443 return (RsAllocation) allocation;
444}
445
446RsAllocation RsHidlAdaptation::AllocationCubeCreateFromBitmap(RsContext context, RsType type,
447 RsAllocationMipmapControl mipmaps,
448 const void *data, size_t sizeBytes, uint32_t usages)
449{
450 uint64_t _type = (uint64_t)(uintptr_t)type;
451
452 hidl_vec<uint8_t> _bitmap;
453 _bitmap.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(data)), sizeBytes);
454
455 uint64_t allocation = GetIContextHandle(context)->allocationCubeCreateFromBitmap(_type, (AllocationMipmapControl)mipmaps, _bitmap, usages);
456 return (RsAllocation) allocation;
457}
458
459RsNativeWindow RsHidlAdaptation::AllocationGetSurface (RsContext context, RsAllocation allocation)
460{
461 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
462
463 uint64_t window = GetIContextHandle(context)->allocationGetNativeWindow(_allocation);
464 return (RsNativeWindow) window;
465}
466void RsHidlAdaptation::AllocationSetSurface (RsContext context, RsAllocation allocation, RsNativeWindow window)
467{
468 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
469 uint64_t _window = (uint64_t)(uintptr_t)window;
470
471 GetIContextHandle(context)->allocationSetNativeWindow(_allocation, _window);
472}
473
474void RsHidlAdaptation::ContextFinish (RsContext context)
475{
476 GetIContextHandle(context)->contextFinish();
477}
478
479void RsHidlAdaptation::ContextDump (RsContext context, int32_t bits)
480{
481 GetIContextHandle(context)->contextLog();
482}
483
484void RsHidlAdaptation::ContextSetPriority (RsContext context, int32_t priority)
485{
486 GetIContextHandle(context)->contextSetPriority((ThreadPriorities)priority);
487}
488
489void RsHidlAdaptation::ContextSetCacheDir (RsContext context, const char *cacheDir, size_t cacheDir_length)
490{
491 GetIContextHandle(context)->contextSetCacheDir(hidl_string(cacheDir));
492}
493
494void RsHidlAdaptation::AssignName (RsContext context, RsObjectBase obj, const char* name, size_t size)
495{
496 uint64_t _obj = (uint64_t)(uintptr_t)obj;
497
498 GetIContextHandle(context)->assignName(_obj, hidl_string(name));
499}
500
501void RsHidlAdaptation::ObjDestroy (RsContext context, RsAsyncVoidPtr obj)
502{
503 uint64_t _obj = (uint64_t)(uintptr_t)obj;
504
505 GetIContextHandle(context)->objDestroy(_obj);
506}
507
508
509RsElement RsHidlAdaptation::ElementCreate (RsContext context,
510 RsDataType dt,
511 RsDataKind dk,
512 bool norm,
513 uint32_t vecSize)
514{
515 uint64_t element = GetIContextHandle(context)->elementCreate((DataType) dt,
516 (DataKind) dk,
517 norm,
518 vecSize);
519 return (RsElement) element;
520}
521
522RsElement RsHidlAdaptation::ElementCreate2 (RsContext context,
523 const RsElement * ein,
524 size_t ein_length,
525 const char ** names,
526 size_t nameLengths_length,
527 const size_t * nameLengths,
528 const uint32_t * arraySizes,
529 size_t arraySizes_length)
530{
531 std::vector<uint64_t> _ein(ein_length);
532 std::vector<hidl_string> _names(nameLengths_length);
533 std::vector<Size> _arraySizes(arraySizes_length);
534
535 for (size_t i = 0; i < ein_length; i++) {
536 _ein[i] = (uint64_t)((uintptr_t)ein[i]);
537 }
538 for (size_t i = 0; i < ein_length; i++) {
539 _names[i] = hidl_string(names[i]);
540 }
541 for (size_t i = 0; i < arraySizes_length; i++) {
542 _arraySizes[i] = (Size)arraySizes[i];
543 }
544
545 uint64_t element = GetIContextHandle(context)->elementComplexCreate(_ein, _names, _arraySizes);
546 return (RsElement) element;
547}
548
549void RsHidlAdaptation::AllocationCopyToBitmap (RsContext context, RsAllocation allocation, void *data, size_t sizeBytes)
550{
551 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
552
553 GetIContextHandle(context)->allocationCopyToBitmap(_allocation, data, sizeBytes);
554}
555
556void RsHidlAdaptation::Allocation1DData (RsContext context, RsAllocation allocation, uint32_t xoff, uint32_t lod,
557 uint32_t count, const void *data, size_t sizeBytes)
558{
559 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
560
561 hidl_vec<uint8_t> _data;
562 _data.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(data)), sizeBytes);
563
564 GetIContextHandle(context)->allocation1DWrite(_allocation, xoff, lod, count, _data);
565}
566void RsHidlAdaptation::Allocation1DElementData (RsContext context, RsAllocation allocation, uint32_t xoff,
567 uint32_t lod, const void *data, size_t sizeBytes, size_t eoff)
568{
569 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
570
571 hidl_vec<uint8_t> _data;
572 _data.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(data)), sizeBytes);
573
574 GetIContextHandle(context)->allocationElementWrite(_allocation, xoff, 0, 0, lod, _data, eoff);
575}
576
577void RsHidlAdaptation::AllocationElementData (RsContext context, RsAllocation allocation, uint32_t x, uint32_t y, uint32_t z,
578 uint32_t lod, const void *data, size_t sizeBytes, size_t eoff)
579{
580 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
581
582 hidl_vec<uint8_t> _data;
583 _data.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(data)), sizeBytes);
584
585 GetIContextHandle(context)->allocationElementWrite(_allocation, x, y, z, lod, _data, eoff);
586}
587
588void RsHidlAdaptation::Allocation2DData (RsContext context, RsAllocation allocation, uint32_t xoff, uint32_t yoff,
589 uint32_t lod, RsAllocationCubemapFace face,
590 uint32_t w, uint32_t h, const void *data, size_t sizeBytes, size_t stride)
591{
592 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
593
594 hidl_vec<uint8_t> _data;
595 _data.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(data)), sizeBytes);
596
597 GetIContextHandle(context)->allocation2DWrite(_allocation, xoff, yoff, lod, (AllocationCubemapFace)face, w, h, _data, stride);
598}
599
600void RsHidlAdaptation::Allocation3DData (RsContext context, RsAllocation allocation, uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod,
601 uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes, size_t stride)
602{
603 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
604
605 hidl_vec<uint8_t> _data;
606 _data.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(data)), sizeBytes);
607
608 GetIContextHandle(context)->allocation3DWrite(_allocation, xoff, yoff, zoff, lod, w, h, d, _data, stride);
609}
610
611void RsHidlAdaptation::AllocationGenerateMipmaps (RsContext context, RsAllocation allocation)
612{
613 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
614
615 GetIContextHandle(context)->allocationGenerateMipmaps(_allocation);
616}
617
618void RsHidlAdaptation::AllocationRead (RsContext context, RsAllocation allocation, void *data, size_t sizeBytes)
619{
620 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
621
622 GetIContextHandle(context)->allocationRead(_allocation, data, sizeBytes);
623}
624
625void RsHidlAdaptation::Allocation1DRead (RsContext context, RsAllocation allocation, uint32_t xoff, uint32_t lod,
626 uint32_t count, void *data, size_t sizeBytes)
627{
628 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
629
630 GetIContextHandle(context)->allocation1DRead(_allocation, xoff, lod, count, data, sizeBytes);
631}
632
633void RsHidlAdaptation::AllocationElementRead (RsContext context, RsAllocation allocation, uint32_t x, uint32_t y, uint32_t z,
634 uint32_t lod, void *data, size_t sizeBytes, size_t eoff)
635{
636 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
637
638 GetIContextHandle(context)->allocationElementRead(_allocation, x, y, z, lod, data, sizeBytes, eoff);
639}
640
641void RsHidlAdaptation::Allocation2DRead (RsContext context, RsAllocation allocation, uint32_t xoff, uint32_t yoff,
642 uint32_t lod, RsAllocationCubemapFace face,
643 uint32_t w, uint32_t h, void *data, size_t sizeBytes, size_t stride)
644{
645 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
646
647 GetIContextHandle(context)->allocation2DRead(_allocation, xoff, yoff, lod, (AllocationCubemapFace)face, w, h, data, sizeBytes, stride);
648}
649
650void RsHidlAdaptation::Allocation3DRead (RsContext context, RsAllocation allocation, uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod,
651 uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes, size_t stride)
652{
653 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
654
655 GetIContextHandle(context)->allocation3DRead(_allocation, xoff, yoff, zoff, lod, w, h, d, data, sizeBytes, stride);
656}
657
658void RsHidlAdaptation::AllocationSyncAll (RsContext context, RsAllocation allocation, RsAllocationUsageType usage)
659{
660 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
661
662 GetIContextHandle(context)->allocationSyncAll(_allocation,
663 (AllocationUsageType) usage);
664}
665
666void RsHidlAdaptation::AllocationResize1D (RsContext context, RsAllocation allocation, uint32_t dimX)
667{
668 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
669
670 GetIContextHandle(context)->allocationResize1D(_allocation, dimX);
671}
672
673void RsHidlAdaptation::AllocationCopy2DRange (RsContext context,
674 RsAllocation dstAlloc,
675 uint32_t dstXoff, uint32_t dstYoff,
676 uint32_t dstMip, uint32_t dstFace,
677 uint32_t width, uint32_t height,
678 RsAllocation srcAlloc,
679 uint32_t srcXoff, uint32_t srcYoff,
680 uint32_t srcMip, uint32_t srcFace)
681{
682 uint64_t _dstAlloc = (uint64_t)(uintptr_t)dstAlloc;
683 uint64_t _srcAlloc = (uint64_t)(uintptr_t)srcAlloc;
684
685 GetIContextHandle(context)->allocationCopy2DRange(_dstAlloc, dstXoff, dstYoff, dstMip, (AllocationCubemapFace)dstFace, width, height,
686 _srcAlloc, srcXoff, srcYoff, srcMip, (AllocationCubemapFace)srcFace);
687}
688void RsHidlAdaptation::AllocationCopy3DRange (RsContext context,
689 RsAllocation dstAlloc,
690 uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff,
691 uint32_t dstMip,
692 uint32_t width, uint32_t height, uint32_t depth,
693 RsAllocation srcAlloc,
694 uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff,
695 uint32_t srcMip)
696{
697 uint64_t _dstAlloc = (uint64_t)(uintptr_t)dstAlloc;
698 uint64_t _srcAlloc = (uint64_t)(uintptr_t)srcAlloc;
699
700 GetIContextHandle(context)->allocationCopy3DRange(_dstAlloc, dstXoff, dstYoff, dstZoff, dstMip, width, height, depth,
701 _srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
702}
703
704RsSampler RsHidlAdaptation::SamplerCreate (RsContext context,
705 RsSamplerValue magFilter,
706 RsSamplerValue minFilter,
707 RsSamplerValue wrapS,
708 RsSamplerValue wrapT,
709 RsSamplerValue wrapR,
710 float aniso)
711{
712 uint64_t sampler = GetIContextHandle(context)->samplerCreate((SamplerValue) magFilter,
713 (SamplerValue)minFilter,
714 (SamplerValue)wrapS,
715 (SamplerValue)wrapT,
716 (SamplerValue)wrapR,
717 aniso);
718 return (RsSampler) sampler;
719}
720
721void RsHidlAdaptation::ScriptBindAllocation (RsContext context, RsScript script, RsAllocation allocation, uint32_t slot)
722{
723 uint64_t _script = (uint64_t)(uintptr_t)script;
724 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
725
726 GetIContextHandle(context)->scriptBindAllocation(_script, _allocation, slot);
727}
728
729void RsHidlAdaptation::ScriptSetTimeZone (RsContext context, RsScript script, const char* timezone, size_t size)
730{
731 uint64_t _script = (uint64_t)(uintptr_t)script;
732
733 GetIContextHandle(context)->scriptSetTimeZone(_script, hidl_string(timezone));
734}
735
736void RsHidlAdaptation::ScriptInvoke (RsContext context, RsScript script, uint32_t slot)
737{
738 uint64_t _script = (uint64_t)(uintptr_t)script;
739
740 GetIContextHandle(context)->scriptInvoke(_script, slot);
741}
742
743void RsHidlAdaptation::ScriptInvokeV (RsContext context, RsScript script, uint32_t slot, const void *data, size_t len)
744{
745 uint64_t _script = (uint64_t)(uintptr_t)script;
746 hidl_vec<uint8_t> _data;
747 _data.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(data)), len);
748
749 GetIContextHandle(context)->scriptInvokeV(_script, slot, _data);
750}
751
752void RsHidlAdaptation::ScriptForEach (RsContext context, RsScript script, uint32_t slot,
753 RsAllocation vain, RsAllocation vaout,
754 const void *params, size_t paramLen,
755 const RsScriptCall *sc, size_t scLen)
756{
757 RsAllocation * vains = nullptr;
758 size_t inLen = 0;
759 if (vain) {
760 vains = &vain;
761 inLen = 1;
762 }
763 ScriptForEachMulti(context, script, slot, vains, inLen, vaout, params, paramLen, sc, scLen);
764}
765
766void RsHidlAdaptation::ScriptForEachMulti (RsContext context, RsScript script, uint32_t slot,
767 RsAllocation *vains, size_t inLen,
768 RsAllocation vaout, const void *params,
769 size_t paramLen, const RsScriptCall *sc,
770 size_t scLen)
771{
772 uint64_t _script = (uint64_t)(uintptr_t)script;
773
774 std::vector<Allocation> _vains(inLen);
775 for (size_t i = 0; i < inLen; i++) {
776 _vains[i] = (Allocation)(uintptr_t)vains[i];
777 }
778
779 uint64_t _vaout = (uint64_t)(uintptr_t)vaout;
780
781 hidl_vec<uint8_t> _params;
782 _params.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(params)), paramLen);
783
784 ScriptCall * _scPtr = nullptr;
785 ScriptCall _sc;
786 if (sc) {
787 _sc.strategy = static_cast<ForEachStrategy>(sc->strategy);
788 _sc.xStart = sc->xStart;
789 _sc.xEnd = sc->xEnd;
790 _sc.yStart = sc->yStart;
791 _sc.yEnd = sc->yEnd;
792 _sc.zStart = sc->zStart;
793 _sc.zEnd = sc->zEnd;
794 _sc.arrayStart = sc->arrayStart;
795 _sc.arrayEnd = sc->arrayEnd;
796 _sc.array2Start = sc->array2Start;
797 _sc.array2End = sc->arrayEnd;
798 _sc.array3Start = sc->array3Start;
799 _sc.array3End = sc->arrayEnd;
800 _sc.array4Start = sc->array4Start;
801 _sc.array4End = sc->arrayEnd;
802
803 _scPtr = &_sc;
804 }
805 GetIContextHandle(context)->scriptForEach(_script, slot, _vains, _vaout, _params, _scPtr);
806}
807
808void RsHidlAdaptation::ScriptReduce (RsContext context, RsScript script, uint32_t slot,
809 RsAllocation *vains, size_t inLen, RsAllocation vaout,
810 const RsScriptCall *sc, size_t scLen)
811{
812 uint64_t _script = (uint64_t)(uintptr_t)script;
813
814 std::vector<Allocation> _vains(inLen);
815 for (size_t i = 0; i < inLen; i++) {
816 _vains[i] = (Allocation)(uintptr_t)vains[i];
817 }
818
819 uint64_t _vaout = (uint64_t)(uintptr_t)vaout;
820
821 ScriptCall * _scPtr = nullptr;
822 ScriptCall _sc;
823 if (sc) {
824 _sc.strategy = static_cast<ForEachStrategy>(sc->strategy);
825 _sc.xStart = sc->xStart;
826 _sc.xEnd = sc->xEnd;
827 _sc.yStart = sc->yStart;
828 _sc.yEnd = sc->yEnd;
829 _sc.zStart = sc->zStart;
830 _sc.zEnd = sc->zEnd;
831 _sc.arrayStart = sc->arrayStart;
832 _sc.arrayEnd = sc->arrayEnd;
833 _sc.array2Start = sc->array2Start;
834 _sc.array2End = sc->arrayEnd;
835 _sc.array3Start = sc->array3Start;
836 _sc.array3End = sc->arrayEnd;
837 _sc.array4Start = sc->array4Start;
838 _sc.array4End = sc->arrayEnd;
839
840 _scPtr = &_sc;
841 }
842 GetIContextHandle(context)->scriptReduce(_script, slot, _vains, _vaout, _scPtr);
843}
844
845void RsHidlAdaptation::ScriptSetVarI (RsContext context, RsScript script, uint32_t slot, int value)
846{
847 uint64_t _script = (uint64_t)(uintptr_t)script;
848
849 GetIContextHandle(context)->scriptSetVarI(_script, slot, value);
850}
851
852void RsHidlAdaptation::ScriptSetVarObj (RsContext context, RsScript script, uint32_t slot, RsObjectBase obj)
853{
854 uint64_t _script = (uint64_t)(uintptr_t)script;
855 uint64_t _obj = (uint64_t)(uintptr_t)obj;
856
857 GetIContextHandle(context)->scriptSetVarObj(_script, slot, _obj);
858}
859
860void RsHidlAdaptation::ScriptSetVarJ (RsContext context, RsScript script, uint32_t slot, int64_t value)
861{
862 uint64_t _script = (uint64_t)(uintptr_t)script;
863
864 GetIContextHandle(context)->scriptSetVarJ(_script, slot, value);
865}
866
867void RsHidlAdaptation::ScriptSetVarF (RsContext context, RsScript script, uint32_t slot, float value)
868{
869 uint64_t _script = (uint64_t)(uintptr_t)script;
870
871 GetIContextHandle(context)->scriptSetVarF(_script, slot, value);
872}
873
874void RsHidlAdaptation::ScriptSetVarD (RsContext context, RsScript script, uint32_t slot, double value)
875{
876 uint64_t _script = (uint64_t)(uintptr_t)script;
877
878 GetIContextHandle(context)->scriptSetVarD(_script, slot, value);
879}
880
881void RsHidlAdaptation::ScriptSetVarV (RsContext context, RsScript script, uint32_t slot, const void* data, size_t len)
882{
883 uint64_t _script = (uint64_t)(uintptr_t)script;
884 hidl_vec<uint8_t> _data;
885 _data.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(data)), len);
886
887 GetIContextHandle(context)->scriptSetVarV(_script, slot, _data);
888}
889
890void RsHidlAdaptation::ScriptGetVarV (RsContext context, RsScript script, uint32_t slot, void* data, size_t len)
891{
892 uint64_t _script = (uint64_t)(uintptr_t)script;
893
894 GetIContextHandle(context)->scriptGetVarV(_script, slot, len,
895 [data, len] (const hidl_vec<uint8_t> &retData) {
896 memcpy(data, retData.data(), len);
897 });
898}
899
900void RsHidlAdaptation::ScriptSetVarVE (RsContext context, RsScript script, uint32_t slot,
901 const void *data, size_t len, RsElement ve,
902 const uint32_t *dims, size_t dimLen)
903{
904 uint64_t _script = (uint64_t)(uintptr_t)script;
905
906 hidl_vec<uint8_t> _data;
907 _data.setToExternal(reinterpret_cast<uint8_t *>(const_cast<void *>(data)), len);
908
909 uint64_t _ve = (uint64_t)(uintptr_t)ve;
910
911 hidl_vec<uint32_t> _dims;
Miao Wang2c7cff72017-03-23 12:01:35 -0700912 _dims.setToExternal(const_cast<uint32_t *>(dims), dimLen / sizeof(uint32_t));
Miao Wang0838b982017-01-20 15:39:17 -0800913
914 GetIContextHandle(context)->scriptSetVarVE(_script, slot, _data, _ve, _dims);
915}
916
917RsScript RsHidlAdaptation::ScriptCCreate (RsContext context,
918 const char *resName, size_t resName_length,
919 const char *cacheDir, size_t cacheDir_length,
920 const char *text, size_t text_length)
921{
Miao Wang0838b982017-01-20 15:39:17 -0800922 hidl_vec<uint8_t> _text;
923 _text.setToExternal(reinterpret_cast<uint8_t *>(const_cast<char *>(text)), text_length);
924 uint64_t scriptc = GetIContextHandle(context)->scriptCCreate(hidl_string(resName), hidl_string(cacheDir), _text);
925 return (RsScript) scriptc;
926}
927
928RsScript RsHidlAdaptation::ScriptIntrinsicCreate (RsContext context, uint32_t id, RsElement element)
929{
930 uint64_t _element = (uint64_t)(uintptr_t)element;
931
932 uint64_t intrinsic = GetIContextHandle(context)->scriptIntrinsicCreate((ScriptIntrinsicID)id, _element);
933 return (RsScript) intrinsic;
934}
935
936RsScriptKernelID RsHidlAdaptation::ScriptKernelIDCreate (RsContext context, RsScript script, int slot, int sig)
937{
938 uint64_t _script = (uint64_t)(uintptr_t)script;
939
940 uint64_t kernelID = GetIContextHandle(context)->scriptKernelIDCreate(_script, slot, sig);
941 return (RsScriptKernelID) kernelID;
942}
943
944RsScriptInvokeID RsHidlAdaptation::ScriptInvokeIDCreate (RsContext context, RsScript script, int slot)
945{
946 uint64_t _script = (uint64_t)(uintptr_t)script;
947
948 uint64_t invokeID = GetIContextHandle(context)->scriptInvokeIDCreate(_script, slot);
949 return (RsScriptInvokeID) invokeID;
950}
951
952RsScriptFieldID RsHidlAdaptation::ScriptFieldIDCreate (RsContext context, RsScript script, int slot)
953{
954 uint64_t _script = (uint64_t)(uintptr_t)script;
955
956 uint64_t fieldID = GetIContextHandle(context)->scriptFieldIDCreate(_script, slot);
957 return (RsScriptFieldID) fieldID;
958}
959
960RsScriptGroup RsHidlAdaptation::ScriptGroupCreate (RsContext context, RsScriptKernelID * kernels, size_t kernelsSize,
961 RsScriptKernelID * src, size_t srcSize,
962 RsScriptKernelID * dstK, size_t dstKSize,
963 RsScriptFieldID * dstF, size_t dstFSize,
964 const RsType * type, size_t typeSize)
965{
Miao Wang2c7cff72017-03-23 12:01:35 -0700966 std::vector<ScriptKernelID> _kernels(kernelsSize / sizeof(RsScriptKernelID));
967 std::vector<ScriptKernelID> _src(srcSize / sizeof(RsScriptKernelID));
968 std::vector<ScriptKernelID> _dstK(dstKSize / sizeof(RsScriptKernelID));
969 std::vector<ScriptFieldID> _dstF(dstFSize / sizeof(RsScriptFieldID));
970 std::vector<Type> _type(typeSize / sizeof(RsType));
Miao Wang0838b982017-01-20 15:39:17 -0800971
Miao Wang2c7cff72017-03-23 12:01:35 -0700972 for (size_t i = 0; i < _kernels.size(); i++) {
Miao Wang0838b982017-01-20 15:39:17 -0800973 _kernels[i] = (ScriptKernelID)(uintptr_t)kernels[i];
974 }
Miao Wang2c7cff72017-03-23 12:01:35 -0700975 for (size_t i = 0; i < _src.size(); i++) {
Miao Wang0838b982017-01-20 15:39:17 -0800976 _src[i] = (ScriptKernelID)(uintptr_t)src[i];
977 }
Miao Wang2c7cff72017-03-23 12:01:35 -0700978 for (size_t i = 0; i < _dstK.size(); i++) {
Miao Wang0838b982017-01-20 15:39:17 -0800979 _dstK[i] = (ScriptKernelID)(uintptr_t)dstK[i];
980 }
Miao Wang2c7cff72017-03-23 12:01:35 -0700981 for (size_t i = 0; i < _dstF.size(); i++) {
982 _dstF[i] = (ScriptFieldID)(uintptr_t)dstF[i];
Miao Wang0838b982017-01-20 15:39:17 -0800983 }
Miao Wang2c7cff72017-03-23 12:01:35 -0700984 for (size_t i = 0; i < _type.size(); i++) {
985 _type[i] = (Type)(uintptr_t)type[i];
Miao Wang0838b982017-01-20 15:39:17 -0800986 }
987
988 uint64_t scriptGroup = GetIContextHandle(context)->scriptGroupCreate(_kernels, _src, _dstK, _dstF, _type);
989 return (RsScriptGroup) scriptGroup;
990}
991
992RsScriptGroup2 RsHidlAdaptation::ScriptGroup2Create(RsContext context, const char* name, size_t nameLength,
993 const char* cacheDir, size_t cacheDirLength,
994 RsClosure* closures, size_t numClosures)
995{
996 std::vector<Closure> _closures(numClosures);
997 for (size_t i = 0; i < numClosures; i++) {
998 _closures[i] = (Closure)(uintptr_t)closures[i];
999 }
1000
1001 uint64_t scriptGroup2 = GetIContextHandle(context)->scriptGroup2Create(hidl_string(name), hidl_string(cacheDir), _closures);
1002 return (RsScriptGroup2) scriptGroup2;
1003}
1004
1005void RsHidlAdaptation::ScriptGroupSetOutput (RsContext context, RsScriptGroup sg, RsScriptKernelID kid, RsAllocation alloc)
1006{
1007 uint64_t _sg = (uint64_t)(uintptr_t)sg;
1008 uint64_t _kid = (uint64_t)(uintptr_t)kid;
1009 uint64_t _alloc = (uint64_t)(uintptr_t)alloc;
1010
1011 GetIContextHandle(context)->scriptGroupSetOutput(_sg, _kid, _alloc);
1012}
1013
1014void RsHidlAdaptation::ScriptGroupSetInput (RsContext context, RsScriptGroup sg, RsScriptKernelID kid, RsAllocation alloc)
1015{
1016 uint64_t _sg = (uint64_t)(uintptr_t)sg;
1017 uint64_t _kid = (uint64_t)(uintptr_t)kid;
1018 uint64_t _alloc = (uint64_t)(uintptr_t)alloc;
1019
1020 GetIContextHandle(context)->scriptGroupSetInput(_sg, _kid, _alloc);
1021}
1022
1023void RsHidlAdaptation::ScriptGroupExecute (RsContext context, RsScriptGroup sg)
1024{
1025 uint64_t _sg = (uint64_t)(uintptr_t)sg;
1026
1027 GetIContextHandle(context)->scriptGroupExecute(_sg);
1028}
1029
1030void RsHidlAdaptation::AllocationIoSend (RsContext context, RsAllocation allocation)
1031{
1032 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
1033
1034 GetIContextHandle(context)->allocationIoSend(_allocation);
1035}
1036int64_t RsHidlAdaptation::AllocationIoReceive (RsContext context, RsAllocation allocation)
1037{
1038 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
1039
1040 GetIContextHandle(context)->allocationIoReceive(_allocation);
1041 // Fix me.
1042 return 0;
1043}
1044
1045void * RsHidlAdaptation::AllocationGetPointer (RsContext context, RsAllocation allocation,
1046 uint32_t lod, RsAllocationCubemapFace face,
1047 uint32_t z, uint32_t array, size_t *stride, size_t strideLen)
1048{
1049 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
1050
1051 void* ptr;
1052 GetIContextHandle(context)->allocationGetPointer(_allocation, lod,
1053 (AllocationCubemapFace)face, z,
1054 [&ptr, stride] (void* retPtr, uint64_t retStride) {
1055 ptr = retPtr;
1056 if (retStride > 0) {
1057 *stride = retStride;
1058 }
1059 });
1060 return ptr;
1061}
1062
1063void RsHidlAdaptation::AllocationSetupBufferQueue (RsContext context, RsAllocation allocation, uint32_t numAlloc)
1064{
1065 uint64_t _allocation = (uint64_t)(uintptr_t)allocation;
1066
1067 GetIContextHandle(context)->allocationSetupBufferQueue(_allocation, numAlloc);
1068}
1069
1070void RsHidlAdaptation::AllocationShareBufferQueue(RsContext context, RsAllocation valloc1, RsAllocation valloc2)
1071{
1072 uint64_t _valloc1 = (uint64_t)(uintptr_t)valloc1;
1073 uint64_t _valloc2 = (uint64_t)(uintptr_t)valloc2;
1074
1075 GetIContextHandle(context)->allocationShareBufferQueue(_valloc1, _valloc2);
1076}
1077
1078RsAllocation RsHidlAdaptation::AllocationAdapterCreate (RsContext context, RsType vtype, RsAllocation baseAlloc)
1079{
1080 uint64_t _vtype = (uint64_t)(uintptr_t)vtype;
1081 uint64_t _baseAlloc = (uint64_t)(uintptr_t)baseAlloc;
1082
1083 uint64_t allocationAdapter = GetIContextHandle(context)->allocationAdapterCreate(_vtype, _baseAlloc);
1084 return (RsAllocation) allocationAdapter;
1085}
1086
1087void RsHidlAdaptation::AllocationAdapterOffset (RsContext context, RsAllocation alloc, const uint32_t * offsets, size_t offsets_length)
1088{
1089 uint64_t _alloc = (uint64_t)(uintptr_t)alloc;
1090
1091 hidl_vec<uint32_t> _offsets;
Miao Wang2c7cff72017-03-23 12:01:35 -07001092 _offsets.setToExternal(const_cast<uint32_t *>(offsets), offsets_length / sizeof(uint32_t));
Miao Wang0838b982017-01-20 15:39:17 -08001093
1094 GetIContextHandle(context)->allocationAdapterOffset(_alloc, _offsets);
1095}