rs_hal.h revision da6d34a5a6ece8c30d20673b9b6ff07d8c91768b
1bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/*
2bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Copyright (C) 2011 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 RS_HAL_H
18bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#define RS_HAL_H
19bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
20bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#include <RenderScriptDefines.h>
214b3de47071d875faaa7d419d050a464b09538797Jason Sams#include <ui/egl/android_natives.h>
22bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
23bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace android {
24bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace renderscript {
25bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
26bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Context;
27bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ObjectBase;
28bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Element;
29bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Type;
30bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Allocation;
31bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Script;
32bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ScriptC;
337f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass Program;
348feea4e0dec48ea03bd6d32706d058b86dddc5baJason Samsclass ProgramStore;
35721acc495b859c6d884725a4f9b5523583dd11c7Jason Samsclass ProgramRaster;
36a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass ProgramVertex;
37a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass ProgramFragment;
38a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass Mesh;
397f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass Sampler;
40da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchoukclass FBOCache;
41bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
42bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName);
43bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
44bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/**
45bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Script management functions
46bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */
47bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef struct {
484b3de47071d875faaa7d419d050a464b09538797Jason Sams    bool (*initGraphics)(const Context *);
494b3de47071d875faaa7d419d050a464b09538797Jason Sams    void (*shutdownGraphics)(const Context *);
504b3de47071d875faaa7d419d050a464b09538797Jason Sams    bool (*setSurface)(const Context *, uint32_t w, uint32_t h, ANativeWindow *);
514b3de47071d875faaa7d419d050a464b09538797Jason Sams    void (*swap)(const Context *);
524b3de47071d875faaa7d419d050a464b09538797Jason Sams
53cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams    void (*shutdownDriver)(Context *);
54bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams    void (*getVersion)(unsigned int *major, unsigned int *minor);
55cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams    void (*setPriority)(const Context *, int32_t priority);
56bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
57bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
58bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
59bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams    struct {
608feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        bool (*init)(const Context *rsc, ScriptC *s,
618feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     char const *resName,
628feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     char const *cacheDir,
638feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     uint8_t const *bitcode,
648feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     size_t bitcodeSize,
6587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                     uint32_t flags);
66bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
67cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        void (*invokeFunction)(const Context *rsc, Script *s,
68bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                               uint32_t slot,
69bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                               const void *params,
70bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                               size_t paramLength);
71cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        int (*invokeRoot)(const Context *rsc, Script *s);
72cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        void (*invokeForEach)(const Context *rsc,
73cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              Script *s,
74cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              const Allocation * ain,
75cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              Allocation * aout,
76cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              const void * usr,
77cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              uint32_t usrLen,
78cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              const RsScriptCall *sc);
79cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        void (*invokeInit)(const Context *rsc, Script *s);
80bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
81bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*setGlobalVar)(const Context *rsc, const Script *s,
82bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             uint32_t slot,
83bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             void *data,
84bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             size_t dataLength);
85bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*setGlobalBind)(const Context *rsc, const Script *s,
86bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                              uint32_t slot,
87bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                              void *data);
88bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*setGlobalObj)(const Context *rsc, const Script *s,
89bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             uint32_t slot,
90bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             ObjectBase *data);
91bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
92bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*destroy)(const Context *rsc, Script *s);
93bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams    } script;
94bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
958feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams    struct {
968feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        bool (*init)(const Context *rsc, const ProgramStore *ps);
978feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        void (*setActive)(const Context *rsc, const ProgramStore *ps);
988feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        void (*destroy)(const Context *rsc, const ProgramStore *ps);
998feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams    } store;
1008feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams
101721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams    struct {
102721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        bool (*init)(const Context *rsc, const ProgramRaster *ps);
103721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        void (*setActive)(const Context *rsc, const ProgramRaster *ps);
104721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        void (*destroy)(const Context *rsc, const ProgramRaster *ps);
105721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams    } raster;
1068feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams
107a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    struct {
108a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        bool (*init)(const Context *rsc, const ProgramVertex *pv,
109a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk                     const char* shader, uint32_t shaderLen);
110a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*setActive)(const Context *rsc, const ProgramVertex *pv);
111a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*destroy)(const Context *rsc, const ProgramVertex *pv);
112a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    } vertex;
113a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk
114a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    struct {
115a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        bool (*init)(const Context *rsc, const ProgramFragment *pf,
116a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk                     const char* shader, uint32_t shaderLen);
117a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*setActive)(const Context *rsc, const ProgramFragment *pf);
118a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*destroy)(const Context *rsc, const ProgramFragment *pf);
119a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    } fragment;
120a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk
121a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    struct {
122a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        bool (*init)(const Context *rsc, const Mesh *m);
123a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len);
124a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*destroy)(const Context *rsc, const Mesh *m);
125a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    } mesh;
126bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
1277f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk    struct {
1287f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk        bool (*init)(const Context *rsc, const Sampler *m);
1297f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk        void (*destroy)(const Context *rsc, const Sampler *m);
1307f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk    } sampler;
1317f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk
132da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    struct {
133da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        bool (*init)(const Context *rsc, const FBOCache *fb);
134da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        void (*setActive)(const Context *rsc, const FBOCache *fb);
135da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        void (*destroy)(const Context *rsc, const FBOCache *fb);
136da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    } framebuffer;
137da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk
138bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} RsdHalFunctions;
139bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
140bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
141bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams}
142bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams}
143bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
144bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
145bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsbool rsdHalInit(android::renderscript::Context *, uint32_t version_major, uint32_t version_minor);
146bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
147bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif
148bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
149