1 #include "Context.h"
2 #include "Device.h"
3 
4 namespace android {
5 namespace hardware {
6 namespace renderscript {
7 namespace V1_0 {
8 namespace implementation {
9 
10 
11 static dispatchTable loadHAL();
12 dispatchTable Device::mDispatchHal = loadHAL();
13 
Device()14 Device::Device() {
15 }
16 
getHal()17 dispatchTable& Device::getHal() {
18     return mDispatchHal;
19 }
20 
21 
22 // Methods from ::android::hardware::renderscript::V1_0::IDevice follow.
23 
contextCreate(uint32_t sdkVersion,ContextType ct,int32_t flags)24 Return<sp<IContext>> Device::contextCreate(uint32_t sdkVersion, ContextType ct, int32_t flags) {
25     return new Context(sdkVersion, ct, flags);
26 }
27 
28 
29 // Methods from ::android::hidl::base::V1_0::IBase follow.
30 
HIDL_FETCH_IDevice(const char *)31 IDevice* HIDL_FETCH_IDevice(const char* /* name */) {
32     return new Device();
33 }
34 
35 // Helper function
loadHAL()36 dispatchTable loadHAL() {
37 
38     static_assert(sizeof(void*) <= sizeof(uint64_t), "RenderScript HIDL Error: sizeof(void*) > sizeof(uint64_t)");
39     static_assert(sizeof(size_t) <= sizeof(uint64_t), "RenderScript HIDL Error: sizeof(size_t) > sizeof(uint64_t)");
40 
41     const char* filename = "libRS_internal.so";
42     void* handle = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
43 
44     dispatchTable dispatchHal = {
45         .SetNativeLibDir = (SetNativeLibDirFnPtr) nullptr,
46 
47         .Allocation1DData =
48             (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData"),
49         .Allocation1DElementData = (Allocation1DElementDataFnPtr) nullptr,
50         .Allocation1DRead =
51             (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead"),
52         .Allocation2DData =
53             (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData"),
54         .Allocation2DRead =
55             (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead"),
56         .Allocation3DData =
57             (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData"),
58         .Allocation3DRead =
59             (Allocation3DReadFnPtr)dlsym(handle, "rsAllocation3DRead"),
60         .AllocationAdapterCreate = (AllocationAdapterCreateFnPtr)dlsym(
61             handle, "rsAllocationAdapterCreate"),
62         .AllocationAdapterOffset = (AllocationAdapterOffsetFnPtr)dlsym(
63             handle, "rsAllocationAdapterOffset"),
64         .AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(
65             handle, "rsAllocationCopy2DRange"),
66         .AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(
67             handle, "rsAllocationCopy3DRange"),
68         .AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(
69             handle, "rsAllocationCopyToBitmap"),
70         .AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(
71             handle, "rsAllocationCreateFromBitmap"),
72         .AllocationCreateStrided = (AllocationCreateStridedFnPtr)dlsym(
73             handle, "rsAllocationCreateStrided"),
74         .AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(
75             handle, "rsAllocationCreateTyped"),
76         .AllocationCubeCreateFromBitmap =
77             (AllocationCubeCreateFromBitmapFnPtr)dlsym(
78                 handle, "rsAllocationCubeCreateFromBitmap"),
79         .AllocationElementData = (AllocationElementDataFnPtr)dlsym(
80             handle, "rsAllocationElementData"),
81         .AllocationElementRead = (AllocationElementReadFnPtr)dlsym(
82             handle, "rsAllocationElementRead"),
83         .AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(
84             handle, "rsAllocationGenerateMipmaps"),
85         .AllocationGetPointer =
86             (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer"),
87         .AllocationGetSurface =
88             (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface"),
89         .AllocationGetType =
90             (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType"),
91         .AllocationIoReceive =
92             (AllocationIoReceiveFnPtr)dlsym(handle, "rsAllocationIoReceive"),
93         .AllocationIoSend =
94             (AllocationIoSendFnPtr)dlsym(handle, "rsAllocationIoSend"),
95         .AllocationRead =
96             (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead"),
97         .AllocationResize1D =
98             (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D"),
99         .AllocationSetSurface =
100             (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface"),
101         .AllocationSetupBufferQueue = (AllocationSetupBufferQueueFnPtr)dlsym(
102             handle, "rsAllocationSetupBufferQueue"),
103         .AllocationShareBufferQueue = (AllocationShareBufferQueueFnPtr)dlsym(
104             handle, "rsAllocationShareBufferQueue"),
105         .AllocationSyncAll =
106             (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll"),
107         .AssignName = (AssignNameFnPtr)dlsym(handle, "rsAssignName"),
108         .ClosureCreate = (ClosureCreateFnPtr)dlsym(handle, "rsClosureCreate"),
109         .ClosureSetArg = (ClosureSetArgFnPtr)dlsym(handle, "rsClosureSetArg"),
110         .ClosureSetGlobal =
111             (ClosureSetGlobalFnPtr)dlsym(handle, "rsClosureSetGlobal"),
112         .ContextCreateVendor =
113             (ContextCreateVendorFnPtr)dlsym(handle, "rsContextCreateVendor"),
114         .ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(
115             handle, "rsContextDeinitToClient"),
116         .ContextDestroy =
117             (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy"),
118         .ContextDump = (ContextDumpFnPtr)dlsym(handle, "rsContextDump"),
119         .ContextFinish = (ContextFinishFnPtr)dlsym(handle, "rsContextFinish"),
120         .ContextGetMessage =
121             (ContextGetMessageFnPtr)dlsym(handle, "rsContextGetMessage"),
122         .ContextInitToClient =
123             (ContextInitToClientFnPtr)dlsym(handle, "rsContextInitToClient"),
124         .ContextPeekMessage =
125             (ContextPeekMessageFnPtr)dlsym(handle, "rsContextPeekMessage"),
126         .ContextSendMessage =
127             (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage"),
128         .ContextSetCacheDir =
129             (ContextSetCacheDirFnPtr)dlsym(handle, "rsContextSetCacheDir"),
130         .ContextSetPriority =
131             (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority"),
132         .DeviceCreate = (DeviceCreateFnPtr) nullptr,
133         .DeviceDestroy = (DeviceDestroyFnPtr) nullptr,
134         .DeviceSetConfig = (DeviceSetConfigFnPtr) nullptr,
135         .ElementCreate2 =
136             (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2"),
137         .ElementCreate = (ElementCreateFnPtr)dlsym(handle, "rsElementCreate"),
138         .ElementGetNativeData =
139             (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData"),
140         .ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(
141             handle, "rsaElementGetSubElements"),
142         .GetName = (GetNameFnPtr)dlsym(handle, "rsaGetName"),
143         .InvokeClosureCreate =
144             (InvokeClosureCreateFnPtr)dlsym(handle, "rsInvokeClosureCreate"),
145         .ObjDestroy = (ObjDestroyFnPtr)dlsym(handle, "rsObjDestroy"),
146         .SamplerCreate = (SamplerCreateFnPtr)dlsym(handle, "rsSamplerCreate"),
147         .ScriptBindAllocation =
148             (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation"),
149         .ScriptCCreate = (ScriptCCreateFnPtr)dlsym(handle, "rsScriptCCreate"),
150         .ScriptFieldIDCreate =
151             (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate"),
152         .ScriptForEach = (ScriptForEachFnPtr) nullptr,
153         .ScriptForEachMulti =
154             (ScriptForEachMultiFnPtr)dlsym(handle, "rsScriptForEachMulti"),
155         .ScriptGetVarV = (ScriptGetVarVFnPtr)dlsym(handle, "rsScriptGetVarV"),
156         .ScriptGroup2Create =
157             (ScriptGroup2CreateFnPtr)dlsym(handle, "rsScriptGroup2Create"),
158         .ScriptGroupCreate =
159             (ScriptGroupCreateFnPtr)dlsym(handle, "rsScriptGroupCreate"),
160         .ScriptGroupExecute =
161             (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute"),
162         .ScriptGroupSetInput =
163             (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput"),
164         .ScriptGroupSetOutput =
165             (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput"),
166         .ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(
167             handle, "rsScriptIntrinsicCreate"),
168         .ScriptInvoke = (ScriptInvokeFnPtr)dlsym(handle, "rsScriptInvoke"),
169         .ScriptInvokeIDCreate =
170             (ScriptInvokeIDCreateFnPtr)dlsym(handle, "rsScriptInvokeIDCreate"),
171         .ScriptInvokeV = (ScriptInvokeVFnPtr)dlsym(handle, "rsScriptInvokeV"),
172         .ScriptKernelIDCreate =
173             (ScriptKernelIDCreateFnPtr)dlsym(handle, "rsScriptKernelIDCreate"),
174         .ScriptReduce = (ScriptReduceFnPtr)dlsym(handle, "rsScriptReduce"),
175         .ScriptSetTimeZone =
176             (ScriptSetTimeZoneFnPtr)dlsym(handle, "rsScriptSetTimeZone"),
177         .ScriptSetVarD = (ScriptSetVarDFnPtr)dlsym(handle, "rsScriptSetVarD"),
178         .ScriptSetVarF = (ScriptSetVarFFnPtr)dlsym(handle, "rsScriptSetVarF"),
179         .ScriptSetVarI = (ScriptSetVarIFnPtr)dlsym(handle, "rsScriptSetVarI"),
180         .ScriptSetVarJ = (ScriptSetVarJFnPtr)dlsym(handle, "rsScriptSetVarJ"),
181         .ScriptSetVarObj =
182             (ScriptSetVarObjFnPtr)dlsym(handle, "rsScriptSetVarObj"),
183         .ScriptSetVarVE =
184             (ScriptSetVarVEFnPtr)dlsym(handle, "rsScriptSetVarVE"),
185         .ScriptSetVarV = (ScriptSetVarVFnPtr)dlsym(handle, "rsScriptSetVarV"),
186         .TypeCreate = (TypeCreateFnPtr)dlsym(handle, "rsTypeCreate"),
187         .TypeGetNativeData =
188             (TypeGetNativeDataFnPtr)dlsym(handle, "rsaTypeGetNativeData"),
189     };
190 
191     return dispatchHal;
192 }
193 
194 }  // namespace implementation
195 }  // namespace V1_0
196 }  // namespace renderscript
197 }  // namespace hardware
198 }  // namespace android
199