rsdBcc.h revision dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48
1bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/*
22980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines * Copyright (C) 2011-2012 The Android Open Source Project
3bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams *
4bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * you may not use this file except in compliance with the License.
6bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * You may obtain a copy of the License at
7bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams *
8bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams *
10bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Unless required by applicable law or agreed to in writing, software
11bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * See the License for the specific language governing permissions and
14bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * limitations under the License.
15bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */
16bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
17bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#ifndef RSD_BCC_H
18bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#define RSD_BCC_H
19bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
20bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#include <rs_hal.h>
2187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include <rsRuntime.h>
22bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
23dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsnamespace bcc {
24dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    class BCCContext;
25dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    class RSCompilerDriver;
26dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    class RSExecutable;
27dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams}
28bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
29bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsbool rsdScriptInit(const android::renderscript::Context *, android::renderscript::ScriptC *,
30bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                   char const *resName, char const *cacheDir,
3187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                   uint8_t const *bitcode, size_t bitcodeSize, uint32_t flags);
328eaba4fee0c7b5325742c87187622fdff51d5effJason Samsbool rsdInitIntrinsic(const android::renderscript::Context *rsc,
338eaba4fee0c7b5325742c87187622fdff51d5effJason Sams                      android::renderscript::Script *s,
3441d6c769f5fa21da3cbc116af95d88949a4a5c76Stephen Hines                      RsScriptIntrinsicID iid,
358eaba4fee0c7b5325742c87187622fdff51d5effJason Sams                      android::renderscript::Element *e);
368eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
37bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptInvokeFunction(const android::renderscript::Context *dc,
38cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                             android::renderscript::Script *script,
39bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             uint32_t slot,
40bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             const void *params,
41bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             size_t paramLength);
42cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams
43cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Samsvoid rsdScriptInvokeForEach(const android::renderscript::Context *rsc,
44cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                            android::renderscript::Script *s,
4535e429ebf817130d8590d11d441a77aa697bd7d4Jason Sams                            uint32_t slot,
46cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                            const android::renderscript::Allocation * ain,
47cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                            android::renderscript::Allocation * aout,
48cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                            const void * usr,
49cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                            uint32_t usrLen,
50cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                            const RsScriptCall *sc);
51cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams
52bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsint rsdScriptInvokeRoot(const android::renderscript::Context *dc,
53cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                        android::renderscript::Script *script);
54bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptInvokeInit(const android::renderscript::Context *dc,
55cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                         android::renderscript::Script *script);
564ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hinesvoid rsdScriptInvokeFreeChildren(const android::renderscript::Context *dc,
574ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines                                 android::renderscript::Script *script);
58bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
59bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptSetGlobalVar(const android::renderscript::Context *,
60bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                           const android::renderscript::Script *,
61bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                           uint32_t slot, void *data, size_t dataLen);
622980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hinesvoid rsdScriptSetGlobalVarWithElemDims(const android::renderscript::Context *,
632980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                       const android::renderscript::Script *,
642980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                       uint32_t slot, void *data,
652980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                       size_t dataLength,
662980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                       const android::renderscript::Element *,
672980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                       const size_t *dims,
682980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                       size_t dimLength);
69bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptSetGlobalBind(const android::renderscript::Context *,
70bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                            const android::renderscript::Script *,
71807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                            uint32_t slot, android::renderscript::Allocation *data);
72bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptSetGlobalObj(const android::renderscript::Context *,
73bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                           const android::renderscript::Script *,
74bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                           uint32_t slot, android::renderscript::ObjectBase *data);
75bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
76bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptSetGlobal(const android::renderscript::Context *dc,
77bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                        const android::renderscript::Script *script,
78bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                        uint32_t slot,
79bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                        void *data,
80bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                        size_t dataLength);
81bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptGetGlobal(const android::renderscript::Context *dc,
82bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                        const android::renderscript::Script *script,
83bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                        uint32_t slot,
84bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                        void *data,
85bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                        size_t dataLength);
86bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptDestroy(const android::renderscript::Context *dc,
87bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                      android::renderscript::Script *script);
88bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
89807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsandroid::renderscript::Allocation * rsdScriptGetAllocationForPointer(
90807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                        const android::renderscript::Context *dc,
91807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                        const android::renderscript::Script *script,
92807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                        const void *);
93bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
94dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
95dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samstypedef void (*outer_foreach_t)(
96dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    const android::renderscript::RsForEachStubParamStruct *,
97dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t x1, uint32_t x2,
98dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t instep, uint32_t outstep);
99dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
100dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samstypedef struct RsdIntriniscFuncs_rec {
101dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
102dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    void (*bind)(const android::renderscript::Context *dc,
103dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                 const android::renderscript::Script *script,
104dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                 void * intrinsicData,
105dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                 uint32_t slot, android::renderscript::Allocation *data);
106dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    void (*setVar)(const android::renderscript::Context *dc,
107dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                   const android::renderscript::Script *script,
108dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                   void * intrinsicData,
109dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                   uint32_t slot, void *data, size_t dataLength);
110dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    void (*root)(const android::renderscript::RsForEachStubParamStruct *,
111dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                 uint32_t x1, uint32_t x2, uint32_t instep, uint32_t outstep);
112dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
113dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    void (*destroy)(const android::renderscript::Context *dc,
114dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                    const android::renderscript::Script *script,
115dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                    void * intrinsicData);
116dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams} RsdIntriniscFuncs_t;
117dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
118dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsstruct DrvScript {
119dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    RsScriptIntrinsicID mIntrinsicID;
120dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    int (*mRoot)();
121dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    int (*mRootExpand)();
122dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    void (*mInit)();
123dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    void (*mFreeChildren)();
124dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
125dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    bcc::BCCContext *mCompilerContext;
126dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    bcc::RSCompilerDriver *mCompilerDriver;
127dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    bcc::RSExecutable *mExecutable;
128dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
129dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    android::renderscript::Allocation **mBoundAllocs;
130dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    RsdIntriniscFuncs_t mIntrinsicFuncs;
131dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    void * mIntrinsicData;
132dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams};
133dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
134dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samstypedef struct {
135dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    android::renderscript::RsForEachStubParamStruct fep;
136dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t cpuIdx;
137dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
138dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams} MTThreadStuct;
139dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
140dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samstypedef struct {
141dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    android::renderscript::RsForEachStubParamStruct fep;
142dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
143dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    android::renderscript::Context *rsc;
144dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    android::renderscript::Script *script;
145dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    ForEachFunc_t kernel;
146dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t sig;
147dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    const android::renderscript::Allocation * ain;
148dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    android::renderscript::Allocation * aout;
149dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
150dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t mSliceSize;
151dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    volatile int mSliceNum;
152dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
153dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t xStart;
154dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t xEnd;
155dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t yStart;
156dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t yEnd;
157dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t zStart;
158dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t zEnd;
159dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t arrayStart;
160dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    uint32_t arrayEnd;
161dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams} MTLaunchStruct;
162dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
163dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsvoid rsdScriptLaunchThreads(const android::renderscript::Context *rsc,
164dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                            android::renderscript::Script *s,
165dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                            uint32_t slot,
166dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                            const android::renderscript::Allocation * ain,
167dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                            android::renderscript::Allocation * aout,
168dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                            const void * usr,
169dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                            uint32_t usrLen,
170dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                            const RsScriptCall *sc,
171dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                            MTLaunchStruct *mtls);
172dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
173dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsvoid rsdScriptInvokeForEachMtlsSetup(const android::renderscript::Context *rsc,
174dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                                     const android::renderscript::Allocation * ain,
175dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                                     android::renderscript::Allocation * aout,
176dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                                     const void * usr,
177dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                                     uint32_t usrLen,
178dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                                     const RsScriptCall *sc,
179dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                                     MTLaunchStruct *mtls);
180dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
181dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
182dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
183dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
184bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif
185