rs_hal.h revision 9c64239ebbfa4170190ede812e69150035e008e0
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 RS_HAL_H
18bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#define RS_HAL_H
19bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
203715b00e7b10a2624c1d5c696186c7a2f4a75a91Jason Sams#include <rsDefines.h>
21bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
227ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsstruct ANativeWindow;
237ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams
24bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace android {
25bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace renderscript {
26bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
27bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Context;
28bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ObjectBase;
29bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Element;
30bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Type;
31bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Allocation;
32bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Script;
33dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ScriptKernelID;
34dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ScriptFieldID;
35dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ScriptMethodID;
36bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ScriptC;
37dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ScriptGroup;
389e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Samsclass Path;
397f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass Program;
408feea4e0dec48ea03bd6d32706d058b86dddc5baJason Samsclass ProgramStore;
41721acc495b859c6d884725a4f9b5523583dd11c7Jason Samsclass ProgramRaster;
42a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass ProgramVertex;
43a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass ProgramFragment;
44a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass Mesh;
457f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass Sampler;
46da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchoukclass FBOCache;
47bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
48bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName);
49bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
50451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Samstypedef struct {
51451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    const void *in;
52451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    void *out;
53451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    const void *usr;
548eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    size_t usrLen;
55451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    uint32_t x;
56451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    uint32_t y;
57451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    uint32_t z;
58451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    uint32_t lod;
59451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    RsAllocationCubemapFace face;
60451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams    uint32_t ar[16];
61bee28c6b56d0c399402014cd58cea426da2b98c1Jason Sams    uint32_t lid;
628eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
638eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    uint32_t dimX;
648eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    uint32_t dimY;
658eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    uint32_t dimZ;
668eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    uint32_t dimArray;
678eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
688eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    const uint8_t *ptrIn;
698eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    uint8_t *ptrOut;
708eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    uint32_t eStrideIn;
718eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    uint32_t eStrideOut;
728eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    uint32_t yStrideIn;
738eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    uint32_t yStrideOut;
74cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    uint32_t slot;
75451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams} RsForEachStubParamStruct;
76451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams
77bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/**
78bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Script management functions
79bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */
80bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef struct {
814b3de47071d875faaa7d419d050a464b09538797Jason Sams    bool (*initGraphics)(const Context *);
824b3de47071d875faaa7d419d050a464b09538797Jason Sams    void (*shutdownGraphics)(const Context *);
837257c7ee4b66f00c43d9235f3ac600061ae79968Alex Sakhartchouk    bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow);
844b3de47071d875faaa7d419d050a464b09538797Jason Sams    void (*swap)(const Context *);
854b3de47071d875faaa7d419d050a464b09538797Jason Sams
86cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams    void (*shutdownDriver)(Context *);
87bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams    void (*getVersion)(unsigned int *major, unsigned int *minor);
88cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams    void (*setPriority)(const Context *, int32_t priority);
89bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
9034689388556747b52c3c2f1c894929fb44580898Tim Murray    void* (*allocRuntimeMem)(size_t size, uint32_t flags);
9134689388556747b52c3c2f1c894929fb44580898Tim Murray    void (*freeRuntimeMem)(void* ptr);
92bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
93bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams    struct {
948feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        bool (*init)(const Context *rsc, ScriptC *s,
958feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     char const *resName,
968feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     char const *cacheDir,
978feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     uint8_t const *bitcode,
988feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams                     size_t bitcodeSize,
9987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                     uint32_t flags);
1008eaba4fee0c7b5325742c87187622fdff51d5effJason Sams        bool (*initIntrinsic)(const Context *rsc, Script *s,
10141d6c769f5fa21da3cbc116af95d88949a4a5c76Stephen Hines                              RsScriptIntrinsicID iid,
1028eaba4fee0c7b5325742c87187622fdff51d5effJason Sams                              Element *e);
103bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
104cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        void (*invokeFunction)(const Context *rsc, Script *s,
105bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                               uint32_t slot,
106bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                               const void *params,
107bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                               size_t paramLength);
108cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        int (*invokeRoot)(const Context *rsc, Script *s);
109cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        void (*invokeForEach)(const Context *rsc,
110cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              Script *s,
11135e429ebf817130d8590d11d441a77aa697bd7d4Jason Sams                              uint32_t slot,
112cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              const Allocation * ain,
113cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              Allocation * aout,
114cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              const void * usr,
115099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                              size_t usrLen,
116cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams                              const RsScriptCall *sc);
117cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams        void (*invokeInit)(const Context *rsc, Script *s);
1184ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines        void (*invokeFreeChildren)(const Context *rsc, Script *s);
119bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
120bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*setGlobalVar)(const Context *rsc, const Script *s,
121bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             uint32_t slot,
1229c64239ebbfa4170190ede812e69150035e008e0Tim Murray                             void *data,
1239c64239ebbfa4170190ede812e69150035e008e0Tim Murray                             size_t dataLength);
1249c64239ebbfa4170190ede812e69150035e008e0Tim Murray        void (*getGlobalVar)(const Context *rsc, const Script *s,
1259c64239ebbfa4170190ede812e69150035e008e0Tim Murray                             uint32_t slot,
126bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             void *data,
127bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             size_t dataLength);
1282980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines        void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s,
1292980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                         uint32_t slot,
1302980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                         void *data,
1312980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                         size_t dataLength,
1322980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                         const Element *e,
1332980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                         const size_t *dims,
1342980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines                                         size_t dimLength);
135bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*setGlobalBind)(const Context *rsc, const Script *s,
136bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                              uint32_t slot,
137807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                              Allocation *data);
138bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*setGlobalObj)(const Context *rsc, const Script *s,
139bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             uint32_t slot,
140bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams                             ObjectBase *data);
141bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
142bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams        void (*destroy)(const Context *rsc, Script *s);
143bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams    } script;
144bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
1458feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams    struct {
146eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero);
147eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*destroy)(const Context *rsc, Allocation *alloc);
148eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
149eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType,
150eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       bool zeroNew);
151eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src);
152eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*markDirty)(const Context *rsc, const Allocation *alloc);
1537ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams
154733396b67724162844ea2785c7495115dc5ee8d8Jason Sams        void * (*getSurface)(const Context *rsc, const Allocation *alloc);
155733396b67724162844ea2785c7495115dc5ee8d8Jason Sams        void (*setSurface)(const Context *rsc, Allocation *alloc, ANativeWindow *sur);
1567ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams        void (*ioSend)(const Context *rsc, Allocation *alloc);
1577ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams        void (*ioReceive)(const Context *rsc, Allocation *alloc);
158eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
159eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*data1D)(const Context *rsc, const Allocation *alloc,
160099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                       uint32_t xoff, uint32_t lod, size_t count,
161c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk                       const void *data, size_t sizeBytes);
162eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*data2D)(const Context *rsc, const Allocation *alloc,
163eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       uint32_t xoff, uint32_t yoff, uint32_t lod,
164eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       RsAllocationCubemapFace face, uint32_t w, uint32_t h,
165358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray                       const void *data, size_t sizeBytes, size_t stride);
166eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*data3D)(const Context *rsc, const Allocation *alloc,
1673bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                       uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod,
1683bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                       uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes,
1693bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                       size_t stride);
170eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
171807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        void (*read1D)(const Context *rsc, const Allocation *alloc,
172099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                       uint32_t xoff, uint32_t lod, size_t count,
173807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                       void *data, size_t sizeBytes);
174807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        void (*read2D)(const Context *rsc, const Allocation *alloc,
175807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                       uint32_t xoff, uint32_t yoff, uint32_t lod,
176807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                       RsAllocationCubemapFace face, uint32_t w, uint32_t h,
177358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray                       void *data, size_t sizeBytes, size_t stride);
178807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        void (*read3D)(const Context *rsc, const Allocation *alloc,
1793bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                       uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod,
1803bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                       uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes,
1813bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                       size_t stride);
182807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
183807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        // Lock and unlock make a 1D region of memory available to the CPU
184807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        // for direct access by pointer.  Once unlock is called control is
185807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        // returned to the SOC driver.
186807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        void * (*lock1D)(const Context *rsc, const Allocation *alloc);
187807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        void (*unlock1D)(const Context *rsc, const Allocation *alloc);
188807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
18974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk        // Allocation to allocation copies
19074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk        void (*allocData1D)(const Context *rsc,
19174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *dstAlloc,
192099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                            uint32_t dstXoff, uint32_t dstLod, size_t count,
19374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod);
19474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk        void (*allocData2D)(const Context *rsc,
19574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *dstAlloc,
19674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod,
19774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h,
19874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *srcAlloc,
19974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
20074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            RsAllocationCubemapFace srcFace);
20174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk        void (*allocData3D)(const Context *rsc,
20274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *dstAlloc,
20374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff,
2043bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                            uint32_t dstLod,
20574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t w, uint32_t h, uint32_t d,
20674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            const Allocation *srcAlloc,
20774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                            uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff,
2083bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                            uint32_t srcLod);
20974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
210eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*elementData1D)(const Context *rsc, const Allocation *alloc, uint32_t x,
211c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk                              const void *data, uint32_t elementOff, size_t sizeBytes);
212eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams        void (*elementData2D)(const Context *rsc, const Allocation *alloc, uint32_t x, uint32_t y,
213c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk                              const void *data, uint32_t elementOff, size_t sizeBytes);
214eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
21561a4bb734b91ced09fbfee4214c6f253cb66e5f0Jason Sams        void (*generateMipmaps)(const Context *rsc, const Allocation *alloc);
216eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    } allocation;
217eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
218eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    struct {
2198feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        bool (*init)(const Context *rsc, const ProgramStore *ps);
2208feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        void (*setActive)(const Context *rsc, const ProgramStore *ps);
2218feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams        void (*destroy)(const Context *rsc, const ProgramStore *ps);
2228feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams    } store;
2238feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams
224721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams    struct {
225721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        bool (*init)(const Context *rsc, const ProgramRaster *ps);
226721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        void (*setActive)(const Context *rsc, const ProgramRaster *ps);
227721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        void (*destroy)(const Context *rsc, const ProgramRaster *ps);
228721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams    } raster;
2298feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams
230a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    struct {
231a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        bool (*init)(const Context *rsc, const ProgramVertex *pv,
232748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const char* shader, size_t shaderLen,
233748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const char** textureNames, size_t textureNamesCount,
234748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const size_t *textureNamesLength);
235a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*setActive)(const Context *rsc, const ProgramVertex *pv);
236a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*destroy)(const Context *rsc, const ProgramVertex *pv);
237a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    } vertex;
238a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk
239a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    struct {
240a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        bool (*init)(const Context *rsc, const ProgramFragment *pf,
241748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const char* shader, size_t shaderLen,
242748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const char** textureNames, size_t textureNamesCount,
243748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk                     const size_t *textureNamesLength);
244a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*setActive)(const Context *rsc, const ProgramFragment *pf);
245a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*destroy)(const Context *rsc, const ProgramFragment *pf);
246a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    } fragment;
247a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk
248a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    struct {
249a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        bool (*init)(const Context *rsc, const Mesh *m);
250a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len);
251a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        void (*destroy)(const Context *rsc, const Mesh *m);
252a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    } mesh;
253bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
2547f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk    struct {
2559e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams        bool (*initStatic)(const Context *rsc, const Path *m, const Allocation *vtx, const Allocation *loops);
2569e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams        bool (*initDynamic)(const Context *rsc, const Path *m);
2579e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams        void (*draw)(const Context *rsc, const Path *m);
2589e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams        void (*destroy)(const Context *rsc, const Path *m);
2599e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    } path;
2609e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
2619e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    struct {
2627f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk        bool (*init)(const Context *rsc, const Sampler *m);
2637f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk        void (*destroy)(const Context *rsc, const Sampler *m);
2647f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk    } sampler;
2657f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk
266da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    struct {
267da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        bool (*init)(const Context *rsc, const FBOCache *fb);
268da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        void (*setActive)(const Context *rsc, const FBOCache *fb);
269da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        void (*destroy)(const Context *rsc, const FBOCache *fb);
270da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    } framebuffer;
271da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk
272dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    struct {
273709a0978ae141198018ca9769f8d96292a8928e6Jason Sams        bool (*init)(const Context *rsc, ScriptGroup *sg);
274dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams        void (*setInput)(const Context *rsc, const ScriptGroup *sg,
275dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                         const ScriptKernelID *kid, Allocation *);
276dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams        void (*setOutput)(const Context *rsc, const ScriptGroup *sg,
277dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams                          const ScriptKernelID *kid, Allocation *);
278dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams        void (*execute)(const Context *rsc, const ScriptGroup *sg);
279dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams        void (*destroy)(const Context *rsc, const ScriptGroup *sg);
280dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams    } scriptgroup;
281dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams
282bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} RsdHalFunctions;
283bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
284bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
285bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams}
286bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams}
287bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
288414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#ifdef __cplusplus
289414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesextern "C" {
290414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#endif
291414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
292414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesbool rsdHalInit(RsContext, uint32_t version_major, uint32_t version_minor);
293bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
294414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#ifdef __cplusplus
295414a46166126da6864258bd25ff183f9a3c6261dStephen Hines}
296414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#endif
297bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
298bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif
299bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams
300