10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License. 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License. 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef RS_HAL_H 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define RS_HAL_H 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include <rsDefines.h> 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstruct ANativeWindow; 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android { 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript { 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Context; 280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass ObjectBase; 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Element; 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Type; 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Allocation; 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Script; 33ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ScriptKernelID; 34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ScriptFieldID; 35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ScriptMethodID; 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass ScriptC; 37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ScriptGroup; 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Path; 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Program; 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass ProgramStore; 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass ProgramRaster; 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass ProgramVertex; 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass ProgramFragment; 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Mesh; 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Sampler; 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass FBOCache; 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName); 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *in; 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void *out; 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *usr; 54ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams size_t usrLen; 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t x; 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t y; 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t z; 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t lod; 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines RsAllocationCubemapFace face; 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t ar[16]; 61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t dimX; 63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t dimY; 64ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t dimZ; 65ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t dimArray; 66ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 67ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const uint8_t *ptrIn; 68ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint8_t *ptrOut; 69ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t eStrideIn; 70ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t eStrideOut; 71ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t yStrideIn; 72ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t yStrideOut; 73ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t slot; 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} RsForEachStubParamStruct; 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/** 770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Script management functions 780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { 800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*initGraphics)(const Context *); 810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*shutdownGraphics)(const Context *); 820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow); 830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*swap)(const Context *); 840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*shutdownDriver)(Context *); 860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*getVersion)(unsigned int *major, unsigned int *minor); 870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setPriority)(const Context *, int32_t priority); 880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct { 920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*init)(const Context *rsc, ScriptC *s, 930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines char const *resName, 940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines char const *cacheDir, 950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint8_t const *bitcode, 960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t bitcodeSize, 970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t flags); 98ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams bool (*initIntrinsic)(const Context *rsc, Script *s, 99ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams RsScriptIntrinsicID iid, 100ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Element *e); 1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*invokeFunction)(const Context *rsc, Script *s, 1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *params, 1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t paramLength); 1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int (*invokeRoot)(const Context *rsc, Script *s); 1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*invokeForEach)(const Context *rsc, 1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s, 1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const Allocation * ain, 1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation * aout, 1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void * usr, 1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t usrLen, 1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const RsScriptCall *sc); 1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*invokeInit)(const Context *rsc, Script *s); 1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*invokeFreeChildren)(const Context *rsc, Script *s); 1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setGlobalVar)(const Context *rsc, const Script *s, 1190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 1200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void *data, 1210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t dataLength); 1220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s, 1230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 1240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void *data, 1250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t dataLength, 1260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const Element *e, 1270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const size_t *dims, 1280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t dimLength); 1290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setGlobalBind)(const Context *rsc, const Script *s, 1300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 1310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation *data); 1320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setGlobalObj)(const Context *rsc, const Script *s, 1330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 1340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ObjectBase *data); 1350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*destroy)(const Context *rsc, Script *s); 1370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } script; 1380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct { 1400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero); 1410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*destroy)(const Context *rsc, Allocation *alloc); 1420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType, 1440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool zeroNew); 1450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src); 1460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*markDirty)(const Context *rsc, const Allocation *alloc); 1470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int32_t (*initSurfaceTexture)(const Context *rsc, const Allocation *alloc); 1490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setSurfaceTexture)(const Context *rsc, Allocation *alloc, ANativeWindow *sur); 1500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*ioSend)(const Context *rsc, Allocation *alloc); 1510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*ioReceive)(const Context *rsc, Allocation *alloc); 1520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*data1D)(const Context *rsc, const Allocation *alloc, 1540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t xoff, uint32_t lod, uint32_t count, 1550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *data, size_t sizeBytes); 1560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*data2D)(const Context *rsc, const Allocation *alloc, 1570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t xoff, uint32_t yoff, uint32_t lod, 1580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines RsAllocationCubemapFace face, uint32_t w, uint32_t h, 1590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *data, size_t sizeBytes); 1600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*data3D)(const Context *rsc, const Allocation *alloc, 1610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t xoff, uint32_t yoff, uint32_t zoff, 1620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t lod, RsAllocationCubemapFace face, 1630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes); 1640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*read1D)(const Context *rsc, const Allocation *alloc, 1660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t xoff, uint32_t lod, uint32_t count, 1670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void *data, size_t sizeBytes); 1680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*read2D)(const Context *rsc, const Allocation *alloc, 1690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t xoff, uint32_t yoff, uint32_t lod, 1700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines RsAllocationCubemapFace face, uint32_t w, uint32_t h, 1710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void *data, size_t sizeBytes); 1720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*read3D)(const Context *rsc, const Allocation *alloc, 1730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t xoff, uint32_t yoff, uint32_t zoff, 1740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t lod, RsAllocationCubemapFace face, 1750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes); 1760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // Lock and unlock make a 1D region of memory available to the CPU 1780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // for direct access by pointer. Once unlock is called control is 1790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // returned to the SOC driver. 1800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void * (*lock1D)(const Context *rsc, const Allocation *alloc); 1810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*unlock1D)(const Context *rsc, const Allocation *alloc); 1820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // Allocation to allocation copies 1840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*allocData1D)(const Context *rsc, 1850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const Allocation *dstAlloc, 1860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t dstXoff, uint32_t dstLod, uint32_t count, 1870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod); 1880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*allocData2D)(const Context *rsc, 1890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const Allocation *dstAlloc, 1900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod, 1910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h, 1920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const Allocation *srcAlloc, 1930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod, 1940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines RsAllocationCubemapFace srcFace); 1950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*allocData3D)(const Context *rsc, 1960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const Allocation *dstAlloc, 1970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff, 1980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t dstLod, RsAllocationCubemapFace dstFace, 1990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t w, uint32_t h, uint32_t d, 2000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const Allocation *srcAlloc, 2010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, 2020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t srcLod, RsAllocationCubemapFace srcFace); 2030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*elementData1D)(const Context *rsc, const Allocation *alloc, uint32_t x, 2050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *data, uint32_t elementOff, size_t sizeBytes); 2060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*elementData2D)(const Context *rsc, const Allocation *alloc, uint32_t x, uint32_t y, 2070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *data, uint32_t elementOff, size_t sizeBytes); 2080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*generateMipmaps)(const Context *rsc, const Allocation *alloc); 2100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } allocation; 2110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct { 2130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*init)(const Context *rsc, const ProgramStore *ps); 2140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setActive)(const Context *rsc, const ProgramStore *ps); 2150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*destroy)(const Context *rsc, const ProgramStore *ps); 2160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } store; 2170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct { 2190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*init)(const Context *rsc, const ProgramRaster *ps); 2200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setActive)(const Context *rsc, const ProgramRaster *ps); 2210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*destroy)(const Context *rsc, const ProgramRaster *ps); 2220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } raster; 2230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct { 2250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*init)(const Context *rsc, const ProgramVertex *pv, 2260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const char* shader, size_t shaderLen, 2270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const char** textureNames, size_t textureNamesCount, 2280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const size_t *textureNamesLength); 2290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setActive)(const Context *rsc, const ProgramVertex *pv); 2300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*destroy)(const Context *rsc, const ProgramVertex *pv); 2310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } vertex; 2320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct { 2340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*init)(const Context *rsc, const ProgramFragment *pf, 2350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const char* shader, size_t shaderLen, 2360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const char** textureNames, size_t textureNamesCount, 2370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const size_t *textureNamesLength); 2380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setActive)(const Context *rsc, const ProgramFragment *pf); 2390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*destroy)(const Context *rsc, const ProgramFragment *pf); 2400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } fragment; 2410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct { 2430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*init)(const Context *rsc, const Mesh *m); 2440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len); 2450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*destroy)(const Context *rsc, const Mesh *m); 2460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } mesh; 2470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct { 2490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*initStatic)(const Context *rsc, const Path *m, const Allocation *vtx, const Allocation *loops); 2500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*initDynamic)(const Context *rsc, const Path *m); 2510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*draw)(const Context *rsc, const Path *m); 2520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*destroy)(const Context *rsc, const Path *m); 2530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } path; 2540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct { 2560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*init)(const Context *rsc, const Sampler *m); 2570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*destroy)(const Context *rsc, const Sampler *m); 2580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } sampler; 2590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct { 2610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool (*init)(const Context *rsc, const FBOCache *fb); 2620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*setActive)(const Context *rsc, const FBOCache *fb); 2630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void (*destroy)(const Context *rsc, const FBOCache *fb); 2640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } framebuffer; 2650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 266ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams struct { 267ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams bool (*init)(const Context *rsc, const ScriptGroup *sg); 268ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void (*setInput)(const Context *rsc, const ScriptGroup *sg, 269ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const ScriptKernelID *kid, Allocation *); 270ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void (*setOutput)(const Context *rsc, const ScriptGroup *sg, 271ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const ScriptKernelID *kid, Allocation *); 272ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void (*execute)(const Context *rsc, const ScriptGroup *sg); 273ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void (*destroy)(const Context *rsc, const ScriptGroup *sg); 274ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } scriptgroup; 275ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 2760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} RsdHalFunctions; 2770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 282ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#ifdef __cplusplus 283ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" { 284ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 2850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 286ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsbool rsdHalInit(RsContext, uint32_t version_major, uint32_t version_minor); 287ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 288ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#ifdef __cplusplus 289ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 290ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 2910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif 2930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 294