blob: 37c97557bad8cda2123081b104719705fcbb9347 [file] [log] [blame]
Jason Samsbad80742011-03-16 16:29:28 -07001/*
Stephen Hinesee7aa2e2012-01-12 18:56:23 -08002 * Copyright (C) 2011-2012 The Android Open Source Project
Jason Samsbad80742011-03-16 16:29:28 -07003 *
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
Jason Sams709a0972012-11-15 18:18:04 -080017#include "../cpu_ref/rsd_cpu.h"
18
Jason Samsbad80742011-03-16 16:29:28 -070019#include "rsdCore.h"
Jason Samseb4fe182011-05-26 16:33:01 -070020#include "rsdAllocation.h"
Jason Samsbad80742011-03-16 16:29:28 -070021#include "rsdBcc.h"
Jason Samsa36c50a2014-06-17 12:06:06 -070022#include "rsdElement.h"
23#include "rsdType.h"
Jason Sams110f1812013-03-14 16:02:18 -070024#ifndef RS_COMPATIBILITY_LIB
Stephen Hinesa221f562013-07-10 17:59:47 -070025 #include "MemChunk.h"
Jason Sams110f1812013-03-14 16:02:18 -070026 #include "rsdGL.h"
27 #include "rsdPath.h"
28 #include "rsdProgramStore.h"
29 #include "rsdProgramRaster.h"
30 #include "rsdProgramVertex.h"
31 #include "rsdProgramFragment.h"
32 #include "rsdMesh.h"
33 #include "rsdFrameBuffer.h"
34#endif
Alex Sakhartchouk7f126c72011-05-05 16:56:27 -070035#include "rsdSampler.h"
Jason Samsdbe66d62012-09-17 13:54:41 -070036#include "rsdScriptGroup.h"
Jason Samsbad80742011-03-16 16:29:28 -070037
38#include <malloc.h>
39#include "rsContext.h"
40
Jason Samscdfdb8f2011-03-17 16:12:47 -070041#include <sys/types.h>
42#include <sys/resource.h>
43#include <sched.h>
Jason Samscdfdb8f2011-03-17 16:12:47 -070044#include <sys/syscall.h>
45#include <string.h>
46
Jason Samsbad80742011-03-16 16:29:28 -070047using namespace android;
48using namespace android::renderscript;
49
Jason Samscdfdb8f2011-03-17 16:12:47 -070050static void Shutdown(Context *rsc);
51static void SetPriority(const Context *rsc, int32_t priority);
52
Jason Sams110f1812013-03-14 16:02:18 -070053#ifndef RS_COMPATIBILITY_LIB
54 #define NATIVE_FUNC(a) a
55#else
56 #define NATIVE_FUNC(a) NULL
57#endif
58
59
Jason Samsbad80742011-03-16 16:29:28 -070060static RsdHalFunctions FunctionTable = {
Jason Sams110f1812013-03-14 16:02:18 -070061 NATIVE_FUNC(rsdGLInit),
62 NATIVE_FUNC(rsdGLShutdown),
63 NATIVE_FUNC(rsdGLSetSurface),
64 NATIVE_FUNC(rsdGLSwap),
Jason Sams4b3de472011-04-06 17:52:23 -070065
Jason Samscdfdb8f2011-03-17 16:12:47 -070066 Shutdown,
Jason Samsbad80742011-03-16 16:29:28 -070067 NULL,
Jason Samscdfdb8f2011-03-17 16:12:47 -070068 SetPriority,
Tim Murray34689382013-03-11 12:12:03 -070069 rsdAllocRuntimeMem,
70 rsdFreeRuntimeMem,
Jason Samsbad80742011-03-16 16:29:28 -070071 {
72 rsdScriptInit,
Jason Sams8eaba4f2012-08-14 14:38:05 -070073 rsdInitIntrinsic,
Jason Samsbad80742011-03-16 16:29:28 -070074 rsdScriptInvokeFunction,
75 rsdScriptInvokeRoot,
Jason Samscdfdb8f2011-03-17 16:12:47 -070076 rsdScriptInvokeForEach,
Jason Samsbad80742011-03-16 16:29:28 -070077 rsdScriptInvokeInit,
Stephen Hines4ee16ff2011-08-31 17:41:39 -070078 rsdScriptInvokeFreeChildren,
Jason Samsbad80742011-03-16 16:29:28 -070079 rsdScriptSetGlobalVar,
Tim Murray9c642392013-04-11 13:29:59 -070080 rsdScriptGetGlobalVar,
Stephen Hines2980f072012-04-09 18:26:29 -070081 rsdScriptSetGlobalVarWithElemDims,
Jason Samsbad80742011-03-16 16:29:28 -070082 rsdScriptSetGlobalBind,
83 rsdScriptSetGlobalObj,
Chris Wailes4b3c34e2014-06-11 12:00:29 -070084 rsdScriptDestroy,
Jason Samsa36c50a2014-06-17 12:06:06 -070085 rsdScriptInvokeForEachMulti,
86 rsdScriptUpdateCachedObject
Jason Sams8feea4e2011-03-18 15:03:25 -070087 },
88
Jason Samseb4fe182011-05-26 16:33:01 -070089 {
90 rsdAllocationInit,
91 rsdAllocationDestroy,
Jason Samsddceab92013-08-07 13:02:32 -070092 rsdAllocationGrallocBits,
Jason Samseb4fe182011-05-26 16:33:01 -070093 rsdAllocationResize,
94 rsdAllocationSyncAll,
95 rsdAllocationMarkDirty,
Jason Sams110f1812013-03-14 16:02:18 -070096 NATIVE_FUNC(rsdAllocationSetSurface),
97 NATIVE_FUNC(rsdAllocationIoSend),
98 NATIVE_FUNC(rsdAllocationIoReceive),
Jason Samseb4fe182011-05-26 16:33:01 -070099 rsdAllocationData1D,
100 rsdAllocationData2D,
101 rsdAllocationData3D,
Jason Sams807fdc42012-07-25 17:55:39 -0700102 rsdAllocationRead1D,
103 rsdAllocationRead2D,
104 rsdAllocationRead3D,
105 rsdAllocationLock1D,
106 rsdAllocationUnlock1D,
Alex Sakhartchouk74a82792011-06-14 11:13:19 -0700107 rsdAllocationData1D_alloc,
108 rsdAllocationData2D_alloc,
109 rsdAllocationData3D_alloc,
Jason Samseb4fe182011-05-26 16:33:01 -0700110 rsdAllocationElementData1D,
Jason Sams61a4bb72012-07-25 19:33:43 -0700111 rsdAllocationElementData2D,
Jason Samsa36c50a2014-06-17 12:06:06 -0700112 rsdAllocationGenerateMipmaps,
113 rsdAllocationUpdateCachedObject
Jason Samseb4fe182011-05-26 16:33:01 -0700114 },
115
Jason Sams8feea4e2011-03-18 15:03:25 -0700116
117 {
Jason Sams110f1812013-03-14 16:02:18 -0700118 NATIVE_FUNC(rsdProgramStoreInit),
119 NATIVE_FUNC(rsdProgramStoreSetActive),
120 NATIVE_FUNC(rsdProgramStoreDestroy)
Jason Sams721acc42011-04-06 11:23:54 -0700121 },
122
123 {
Jason Sams110f1812013-03-14 16:02:18 -0700124 NATIVE_FUNC(rsdProgramRasterInit),
125 NATIVE_FUNC(rsdProgramRasterSetActive),
126 NATIVE_FUNC(rsdProgramRasterDestroy)
Alex Sakhartchouka04e30d2011-04-29 16:49:08 -0700127 },
128
129 {
Jason Sams110f1812013-03-14 16:02:18 -0700130 NATIVE_FUNC(rsdProgramVertexInit),
131 NATIVE_FUNC(rsdProgramVertexSetActive),
132 NATIVE_FUNC(rsdProgramVertexDestroy)
Alex Sakhartchouka04e30d2011-04-29 16:49:08 -0700133 },
134
135 {
Jason Sams110f1812013-03-14 16:02:18 -0700136 NATIVE_FUNC(rsdProgramFragmentInit),
137 NATIVE_FUNC(rsdProgramFragmentSetActive),
138 NATIVE_FUNC(rsdProgramFragmentDestroy)
Alex Sakhartchouka04e30d2011-04-29 16:49:08 -0700139 },
140
141 {
Jason Sams110f1812013-03-14 16:02:18 -0700142 NATIVE_FUNC(rsdMeshInit),
143 NATIVE_FUNC(rsdMeshDraw),
144 NATIVE_FUNC(rsdMeshDestroy)
Alex Sakhartchouk7f126c72011-05-05 16:56:27 -0700145 },
146
147 {
Jason Sams110f1812013-03-14 16:02:18 -0700148 NATIVE_FUNC(rsdPathInitStatic),
149 NATIVE_FUNC(rsdPathInitDynamic),
150 NATIVE_FUNC(rsdPathDraw),
151 NATIVE_FUNC(rsdPathDestroy)
Jason Sams9e0afb52011-10-31 13:23:43 -0700152 },
153
154 {
Alex Sakhartchouk7f126c72011-05-05 16:56:27 -0700155 rsdSamplerInit,
Jason Samsa36c50a2014-06-17 12:06:06 -0700156 rsdSamplerDestroy,
157 rsdSamplerUpdateCachedObject
Alex Sakhartchouk7f126c72011-05-05 16:56:27 -0700158 },
Jason Sams8feea4e2011-03-18 15:03:25 -0700159
Alex Sakhartchoukda6d34a2011-05-13 14:53:34 -0700160 {
Jason Sams110f1812013-03-14 16:02:18 -0700161 NATIVE_FUNC(rsdFrameBufferInit),
162 NATIVE_FUNC(rsdFrameBufferSetActive),
163 NATIVE_FUNC(rsdFrameBufferDestroy)
Alex Sakhartchoukda6d34a2011-05-13 14:53:34 -0700164 },
165
Jason Samsdbe66d62012-09-17 13:54:41 -0700166 {
167 rsdScriptGroupInit,
168 rsdScriptGroupSetInput,
169 rsdScriptGroupSetOutput,
170 rsdScriptGroupExecute,
Jason Samsa36c50a2014-06-17 12:06:06 -0700171 rsdScriptGroupDestroy,
172 NULL
173 },
174
175 {
176 rsdTypeInit,
177 rsdTypeDestroy,
178 rsdTypeUpdateCachedObject
179 },
180
181 {
182 rsdElementInit,
183 rsdElementDestroy,
184 rsdElementUpdateCachedObject
Jason Sams9761c3f2013-11-26 18:10:59 -0800185 },
Jason Samsdbe66d62012-09-17 13:54:41 -0700186
Jason Sams9761c3f2013-11-26 18:10:59 -0800187 NULL // finish
Jason Samsbad80742011-03-16 16:29:28 -0700188};
189
Jason Sams709a0972012-11-15 18:18:04 -0800190extern const RsdCpuReference::CpuSymbol * rsdLookupRuntimeStub(Context * pContext, char const* name);
Jason Samsbad80742011-03-16 16:29:28 -0700191
Jason Sams709a0972012-11-15 18:18:04 -0800192static RsdCpuReference::CpuScript * LookupScript(Context *, const Script *s) {
193 return (RsdCpuReference::CpuScript *)s->mHal.drv;
Jason Samscdfdb8f2011-03-17 16:12:47 -0700194}
195
Stephen Hines414a4612012-09-05 18:05:08 -0700196extern "C" bool rsdHalInit(RsContext c, uint32_t version_major,
197 uint32_t version_minor) {
198 Context *rsc = (Context*) c;
Jason Samsbad80742011-03-16 16:29:28 -0700199 rsc->mHal.funcs = FunctionTable;
200
Jason Sams87fe59a2011-04-20 15:09:01 -0700201 RsdHal *dc = (RsdHal *)calloc(1, sizeof(RsdHal));
Jason Sams2cfe51e2011-03-18 17:08:54 -0700202 if (!dc) {
Steve Blockaf12ac62012-01-06 19:20:56 +0000203 ALOGE("Calloc for driver hal failed.");
Jason Samsbad80742011-03-16 16:29:28 -0700204 return false;
205 }
Jason Samscdfdb8f2011-03-17 16:12:47 -0700206 rsc->mHal.drv = dc;
Jason Samsbad80742011-03-16 16:29:28 -0700207
Stephen Hinesa221f562013-07-10 17:59:47 -0700208 dc->mCpuRef = RsdCpuReference::create(rsc, version_major, version_minor,
Jason Sams709a0972012-11-15 18:18:04 -0800209 &rsdLookupRuntimeStub, &LookupScript);
210 if (!dc->mCpuRef) {
211 ALOGE("RsdCpuReference::create for driver hal failed.");
Jens Gulin07ef7042014-02-19 18:16:01 +0100212 rsc->mHal.drv = NULL;
Jason Sams709a0972012-11-15 18:18:04 -0800213 free(dc);
Jason Samscdfdb8f2011-03-17 16:12:47 -0700214 return false;
215 }
216
Stephen Hinesb7d9c802013-04-29 19:13:09 -0700217#ifndef RS_COMPATIBILITY_LIB
218 // Set a callback for compiler setup here.
219 if (false) {
220 dc->mCpuRef->setSetupCompilerCallback(NULL);
221 }
Stephen Hinesa221f562013-07-10 17:59:47 -0700222
223 // Set a callback for switching MemChunk's allocator here.
224 // Note that the allocation function must return page-aligned memory, so
225 // that it can be mprotected properly (i.e. code should be written and
226 // later switched to read+execute only).
227 if (false) {
228 MemChunk::registerAllocFreeCallbacks(
229 rsc->mHal.funcs.allocRuntimeMem,
230 rsc->mHal.funcs.freeRuntimeMem);
231 }
Stephen Hinesb7d9c802013-04-29 19:13:09 -0700232#endif
233
Jason Samsbad80742011-03-16 16:29:28 -0700234 return true;
235}
236
Jason Samscdfdb8f2011-03-17 16:12:47 -0700237
238void SetPriority(const Context *rsc, int32_t priority) {
Jason Sams87fe59a2011-04-20 15:09:01 -0700239 RsdHal *dc = (RsdHal *)rsc->mHal.drv;
Jason Sams709a0972012-11-15 18:18:04 -0800240
241 dc->mCpuRef->setPriority(priority);
242
Jason Sams110f1812013-03-14 16:02:18 -0700243#ifndef RS_COMPATIBILITY_LIB
Jason Sams9719bd42012-01-12 14:22:21 -0800244 if (dc->mHasGraphics) {
245 rsdGLSetPriority(rsc, priority);
246 }
Jason Sams110f1812013-03-14 16:02:18 -0700247#endif
Jason Samscdfdb8f2011-03-17 16:12:47 -0700248}
249
250void Shutdown(Context *rsc) {
Jason Sams87fe59a2011-04-20 15:09:01 -0700251 RsdHal *dc = (RsdHal *)rsc->mHal.drv;
Jason Sams709a0972012-11-15 18:18:04 -0800252 delete dc->mCpuRef;
Jens Gulin07ef7042014-02-19 18:16:01 +0100253 free(dc);
Jason Sams709a0972012-11-15 18:18:04 -0800254 rsc->mHal.drv = NULL;
Jason Samscdfdb8f2011-03-17 16:12:47 -0700255}
256
Tim Murray34689382013-03-11 12:12:03 -0700257void* rsdAllocRuntimeMem(size_t size, uint32_t flags) {
258 void* buffer = calloc(size, sizeof(char));
259 return buffer;
260}
261
262void rsdFreeRuntimeMem(void* ptr) {
263 free(ptr);
264}