rs_hal.h revision 748eb07e805b93c2bf79340d4937963ab739d17c
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>
21bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
22bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace android {
23bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace renderscript {
24bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
25bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Context;
26bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ObjectBase;
27bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Element;
28bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Type;
29bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Allocation;
30bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Script;
31bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ScriptC;
329e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Samsclass Path;
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
44451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Samstypedef struct {
45451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    const void *in;
46451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    void *out;
47451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    const void *usr;
48451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    size_t usr_len;
49451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    uint32_t x;
50451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    uint32_t y;
51451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    uint32_t z;
52451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    uint32_t lod;
53451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    RsAllocationCubemapFace face;
54451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    uint32_t ar[16];
55451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams} RsForEachStubParamStruct;
56451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams
57bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/**
58bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Script management functions
59bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */
60bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef struct {
614b3de47071d875faaa7d419d050a464b09538797Jason Sams    bool (*initGraphics)(const Context *);
624b3de47071d875faaa7d419d050a464b09538797Jason Sams    void (*shutdownGraphics)(const Context *);
637257c7ee4b66f00c43d9235f3ac600061ae79968Alex Sakhartchouk    bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow);
644b3de47071d875faaa7d419d050a464b09538797Jason Sams    void (*swap)(const Context *);
654b3de47071d875faaa7d419d050a464b09538797Jason Sams
66cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams    void (*shutdownDriver)(Context *);
67bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams    void (*getVersion)(unsigned int *major, unsigned int *minor);
68cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams    void (*setPriority)(const Context *, int32_t priority);
69bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
70bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
71bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
72bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams    struct {
738feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        bool (*init)(const Context *rsc, ScriptC *s,
748feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     char const *resName,
758feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     char const *cacheDir,
768feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     uint8_t const *bitcode,
778feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     size_t bitcodeSize,
7887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                     uint32_t flags);
79bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
80cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        void (*invokeFunction)(const Context *rsc, Script *s,
81bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                               uint32_t slot,
82bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                               const void *params,
83bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                               size_t paramLength);
84cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        int (*invokeRoot)(const Context *rsc, Script *s);
85cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        void (*invokeForEach)(const Context *rsc,
86cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              Script *s,
8735e429ebf817130d8590d11d441a77aa697bd7d4Jason Sams                              uint32_t slot,
88cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              const Allocation * ain,
89cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              Allocation * aout,
90cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              const void * usr,
91cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              uint32_t usrLen,
92cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              const RsScriptCall *sc);
93cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        void (*invokeInit)(const Context *rsc, Script *s);
944ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines        void (*invokeFreeChildren)(const Context *rsc, Script *s);
95bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
96bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*setGlobalVar)(const Context *rsc, const Script *s,
97bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             uint32_t slot,
98bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             void *data,
99bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             size_t dataLength);
100bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*setGlobalBind)(const Context *rsc, const Script *s,
101bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                              uint32_t slot,
102bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                              void *data);
103bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*setGlobalObj)(const Context *rsc, const Script *s,
104bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             uint32_t slot,
105bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             ObjectBase *data);
106bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
107bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*destroy)(const Context *rsc, Script *s);
108bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams    } script;
109bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
1108feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams    struct {
111eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero);
112eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*destroy)(const Context *rsc, Allocation *alloc);
113eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
114eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType,
115eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       bool zeroNew);
116eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src);
117eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*markDirty)(const Context *rsc, const Allocation *alloc);
11841e373d91a60043afa0f9abd026218b49cbc1201Jason Sams        int32_t (*initSurfaceTexture)(const Context *rsc, const Allocation *alloc);
119eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
120eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*data1D)(const Context *rsc, const Allocation *alloc,
121eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       uint32_t xoff, uint32_t lod, uint32_t count,
122c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk                       const void *data, size_t sizeBytes);
123eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*data2D)(const Context *rsc, const Allocation *alloc,
124eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       uint32_t xoff, uint32_t yoff, uint32_t lod,
125eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       RsAllocationCubemapFace face, uint32_t w, uint32_t h,
126c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk                       const void *data, size_t sizeBytes);
127eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*data3D)(const Context *rsc, const Allocation *alloc,
128eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       uint32_t xoff, uint32_t yoff, uint32_t zoff,
129eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       uint32_t lod, RsAllocationCubemapFace face,
130c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk                       uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes);
131eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
13274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk        // Allocation to allocation copies
13374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk        void (*allocData1D)(const Context *rsc,
13474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *dstAlloc,
13574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t dstXoff, uint32_t dstLod, uint32_t count,
13674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod);
13774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk        void (*allocData2D)(const Context *rsc,
13874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *dstAlloc,
13974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod,
14074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h,
14174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *srcAlloc,
14274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
14374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            RsAllocationCubemapFace srcFace);
14474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk        void (*allocData3D)(const Context *rsc,
14574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *dstAlloc,
14674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff,
14774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t dstLod, RsAllocationCubemapFace dstFace,
14874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t w, uint32_t h, uint32_t d,
14974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *srcAlloc,
15074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff,
15174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t srcLod, RsAllocationCubemapFace srcFace);
15274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
153eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*elementData1D)(const Context *rsc, const Allocation *alloc, uint32_t x,
154c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk                              const void *data, uint32_t elementOff, size_t sizeBytes);
155eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*elementData2D)(const Context *rsc, const Allocation *alloc, uint32_t x, uint32_t y,
156c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk                              const void *data, uint32_t elementOff, size_t sizeBytes);
157eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
158eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
159eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    } allocation;
160eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
161eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    struct {
1628feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        bool (*init)(const Context *rsc, const ProgramStore *ps);
1638feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        void (*setActive)(const Context *rsc, const ProgramStore *ps);
1648feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        void (*destroy)(const Context *rsc, const ProgramStore *ps);
1658feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams    } store;
1668feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams
167721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams    struct {
168721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        bool (*init)(const Context *rsc, const ProgramRaster *ps);
169721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        void (*setActive)(const Context *rsc, const ProgramRaster *ps);
170721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        void (*destroy)(const Context *rsc, const ProgramRaster *ps);
171721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams    } raster;
1728feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams
173a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    struct {
174a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        bool (*init)(const Context *rsc, const ProgramVertex *pv,
175748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const char* shader, size_t shaderLen,
176748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const char** textureNames, size_t textureNamesCount,
177748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const size_t *textureNamesLength);
178a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*setActive)(const Context *rsc, const ProgramVertex *pv);
179a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*destroy)(const Context *rsc, const ProgramVertex *pv);
180a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    } vertex;
181a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk
182a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    struct {
183a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        bool (*init)(const Context *rsc, const ProgramFragment *pf,
184748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const char* shader, size_t shaderLen,
185748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const char** textureNames, size_t textureNamesCount,
186748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const size_t *textureNamesLength);
187a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*setActive)(const Context *rsc, const ProgramFragment *pf);
188a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*destroy)(const Context *rsc, const ProgramFragment *pf);
189a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    } fragment;
190a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk
191a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    struct {
192a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        bool (*init)(const Context *rsc, const Mesh *m);
193a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len);
194a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*destroy)(const Context *rsc, const Mesh *m);
195a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    } mesh;
196bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
1977f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk    struct {
1989e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams        bool (*initStatic)(const Context *rsc, const Path *m, const Allocation *vtx, const Allocation *loops);
1999e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams        bool (*initDynamic)(const Context *rsc, const Path *m);
2009e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams        void (*draw)(const Context *rsc, const Path *m);
2019e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams        void (*destroy)(const Context *rsc, const Path *m);
2029e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    } path;
2039e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
2049e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    struct {
2057f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk        bool (*init)(const Context *rsc, const Sampler *m);
2067f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk        void (*destroy)(const Context *rsc, const Sampler *m);
2077f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk    } sampler;
2087f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk
209da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    struct {
210da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        bool (*init)(const Context *rsc, const FBOCache *fb);
211da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        void (*setActive)(const Context *rsc, const FBOCache *fb);
212da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        void (*destroy)(const Context *rsc, const FBOCache *fb);
213da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    } framebuffer;
214da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk
215bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} RsdHalFunctions;
216bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
217bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
218bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams}
219bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams}
220bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
221bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
222bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsbool rsdHalInit(android::renderscript::Context *, uint32_t version_major, uint32_t version_minor);
223bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
224bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif
225bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
226