• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011-2012 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 #ifndef RSD_BCC_H
18 #define RSD_BCC_H
19 
20 #include <rs_hal.h>
21 #include <rsRuntime.h>
22 
23 
24 bool rsdScriptInit(const android::renderscript::Context *, android::renderscript::ScriptC *,
25                    char const *resName, char const *cacheDir,
26                    uint8_t const *bitcode, size_t bitcodeSize, uint32_t flags);
27 bool rsdInitIntrinsic(const android::renderscript::Context *rsc,
28                       android::renderscript::Script *s,
29                       RsScriptIntrinsicID iid,
30                       android::renderscript::Element *e);
31 
32 void rsdScriptInvokeFunction(const android::renderscript::Context *dc,
33                              android::renderscript::Script *script,
34                              uint32_t slot,
35                              const void *params,
36                              size_t paramLength);
37 
38 void rsdScriptInvokeForEach(const android::renderscript::Context *rsc,
39                             android::renderscript::Script *s,
40                             uint32_t slot,
41                             const android::renderscript::Allocation * ain,
42                             android::renderscript::Allocation * aout,
43                             const void * usr,
44                             uint32_t usrLen,
45                             const RsScriptCall *sc);
46 
47 int rsdScriptInvokeRoot(const android::renderscript::Context *dc,
48                         android::renderscript::Script *script);
49 void rsdScriptInvokeInit(const android::renderscript::Context *dc,
50                          android::renderscript::Script *script);
51 void rsdScriptInvokeFreeChildren(const android::renderscript::Context *dc,
52                                  android::renderscript::Script *script);
53 
54 void rsdScriptSetGlobalVar(const android::renderscript::Context *,
55                            const android::renderscript::Script *,
56                            uint32_t slot, void *data, size_t dataLen);
57 void rsdScriptSetGlobalVarWithElemDims(const android::renderscript::Context *,
58                                        const android::renderscript::Script *,
59                                        uint32_t slot, void *data,
60                                        size_t dataLength,
61                                        const android::renderscript::Element *,
62                                        const size_t *dims,
63                                        size_t dimLength);
64 void rsdScriptSetGlobalBind(const android::renderscript::Context *,
65                             const android::renderscript::Script *,
66                             uint32_t slot, android::renderscript::Allocation *data);
67 void rsdScriptSetGlobalObj(const android::renderscript::Context *,
68                            const android::renderscript::Script *,
69                            uint32_t slot, android::renderscript::ObjectBase *data);
70 
71 void rsdScriptSetGlobal(const android::renderscript::Context *dc,
72                         const android::renderscript::Script *script,
73                         uint32_t slot,
74                         void *data,
75                         size_t dataLength);
76 void rsdScriptGetGlobal(const android::renderscript::Context *dc,
77                         const android::renderscript::Script *script,
78                         uint32_t slot,
79                         void *data,
80                         size_t dataLength);
81 void rsdScriptDestroy(const android::renderscript::Context *dc,
82                       android::renderscript::Script *script);
83 
84 android::renderscript::Allocation * rsdScriptGetAllocationForPointer(
85                         const android::renderscript::Context *dc,
86                         const android::renderscript::Script *script,
87                         const void *);
88 
89 
90 typedef void (*outer_foreach_t)(
91     const android::renderscript::RsForEachStubParamStruct *,
92     uint32_t x1, uint32_t x2,
93     uint32_t instep, uint32_t outstep);
94 
95 typedef struct RsdIntriniscFuncs_rec {
96 
97     void (*bind)(const android::renderscript::Context *dc,
98                  const android::renderscript::Script *script,
99                  void * intrinsicData,
100                  uint32_t slot, android::renderscript::Allocation *data);
101     void (*setVar)(const android::renderscript::Context *dc,
102                    const android::renderscript::Script *script,
103                    void * intrinsicData,
104                    uint32_t slot, void *data, size_t dataLength);
105     void (*root)(const android::renderscript::RsForEachStubParamStruct *,
106                  uint32_t x1, uint32_t x2, uint32_t instep, uint32_t outstep);
107 
108     void (*destroy)(const android::renderscript::Context *dc,
109                     const android::renderscript::Script *script,
110                     void * intrinsicData);
111 } RsdIntriniscFuncs_t;
112 
113 struct DrvScript {
114     RsScriptIntrinsicID mIntrinsicID;
115     void *mScriptSO;
116     RootFunc_t mRoot;
117     RootFunc_t mRootExpand;
118     InvokeFunc_t mInit;
119     InvokeFunc_t mFreeChildren;
120 
121     InvokeFunc_t *mInvokeFunctions;
122     ForEachFunc_t *mForEachFunctions;
123     void **mFieldAddress;
124     bool *mFieldIsObject;
125     uint32_t *mForEachSignatures;
126 
127     android::renderscript::Allocation **mBoundAllocs;
128     RsdIntriniscFuncs_t mIntrinsicFuncs;
129     void * mIntrinsicData;
130 };
131 
132 typedef struct {
133     android::renderscript::RsForEachStubParamStruct fep;
134     uint32_t cpuIdx;
135 
136 } MTThreadStuct;
137 
138 typedef struct {
139     android::renderscript::RsForEachStubParamStruct fep;
140 
141     android::renderscript::Context *rsc;
142     android::renderscript::Script *script;
143     ForEachFunc_t kernel;
144     uint32_t sig;
145     const android::renderscript::Allocation * ain;
146     android::renderscript::Allocation * aout;
147 
148     uint32_t mSliceSize;
149     volatile int mSliceNum;
150 
151     uint32_t xStart;
152     uint32_t xEnd;
153     uint32_t yStart;
154     uint32_t yEnd;
155     uint32_t zStart;
156     uint32_t zEnd;
157     uint32_t arrayStart;
158     uint32_t arrayEnd;
159 } MTLaunchStruct;
160 
161 void rsdScriptLaunchThreads(const android::renderscript::Context *rsc,
162                             android::renderscript::Script *s,
163                             uint32_t slot,
164                             const android::renderscript::Allocation * ain,
165                             android::renderscript::Allocation * aout,
166                             const void * usr,
167                             uint32_t usrLen,
168                             const RsScriptCall *sc,
169                             MTLaunchStruct *mtls);
170 
171 void rsdScriptInvokeForEachMtlsSetup(const android::renderscript::Context *rsc,
172                                      const android::renderscript::Allocation * ain,
173                                      android::renderscript::Allocation * aout,
174                                      const void * usr,
175                                      uint32_t usrLen,
176                                      const RsScriptCall *sc,
177                                      MTLaunchStruct *mtls);
178 
179 
180 
181 
182 #endif
183