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 48a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams/** 49a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * Define the internal object types. This ia a mirror of the 50a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * definition in rs_types.rsh except with the p value typed 51a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * correctly. 52a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * 53a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * p = pointer to internal object implementation 54a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * r = reserved by libRS runtime 55a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * v1 = Mirror of p->mHal.drv 56a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * v2 = reserved for use by vendor drivers 57a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams */ 58a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 59a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#ifndef __LP64__ 60a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#define RS_BASE_OBJ(_t_) typedef struct { const _t_* p; } __attribute__((packed, aligned(4))) 61a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#else 62a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#define RS_BASE_OBJ(_t_) typedef struct { const _t_* p; const void* r; const void* v1; const void* v2; } 63a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#endif 64a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 65f29edf80510d483b8663e9d8b859959e37361aeeJason SamsRS_BASE_OBJ(ObjectBase) rs_object_base; 66a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Element) rs_element; 67a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Type) rs_type; 68a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Allocation) rs_allocation; 69a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Sampler) rs_sampler; 70a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Script) rs_script; 71a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(ScriptGroup) rs_script_group; 72a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 73a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#ifndef __LP64__ 74a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_mesh; 75a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_path; 76a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_fragment; 77a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_vertex; 78a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_raster; 79a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_store; 80a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_font; 81a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#endif // __LP64__ 82a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 83a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 84bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName); 85bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 86bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/** 87bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Script management functions 88bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */ 89bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef struct { 904b3de47071d875faaa7d419d050a464b09538797Jason Sams bool (*initGraphics)(const Context *); 914b3de47071d875faaa7d419d050a464b09538797Jason Sams void (*shutdownGraphics)(const Context *); 927257c7ee4b66f00c43d9235f3ac600061ae79968Alex Sakhartchouk bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow); 934b3de47071d875faaa7d419d050a464b09538797Jason Sams void (*swap)(const Context *); 944b3de47071d875faaa7d419d050a464b09538797Jason Sams 95cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*shutdownDriver)(Context *); 96bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*getVersion)(unsigned int *major, unsigned int *minor); 97cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*setPriority)(const Context *, int32_t priority); 98bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 9934689388556747b52c3c2f1c894929fb44580898Tim Murray void* (*allocRuntimeMem)(size_t size, uint32_t flags); 10034689388556747b52c3c2f1c894929fb44580898Tim Murray void (*freeRuntimeMem)(void* ptr); 101bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 102bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams struct { 1038feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, ScriptC *s, 1048feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams char const *resName, 1058feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams char const *cacheDir, 1068feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams uint8_t const *bitcode, 1078feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams size_t bitcodeSize, 10887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams uint32_t flags); 1098eaba4fee0c7b5325742c87187622fdff51d5effJason Sams bool (*initIntrinsic)(const Context *rsc, Script *s, 11041d6c769f5fa21da3cbc116af95d88949a4a5c76Stephen Hines RsScriptIntrinsicID iid, 1118eaba4fee0c7b5325742c87187622fdff51d5effJason Sams Element *e); 112bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 113cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeFunction)(const Context *rsc, Script *s, 114bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 115bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const void *params, 116bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t paramLength); 117cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams int (*invokeRoot)(const Context *rsc, Script *s); 118cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeForEach)(const Context *rsc, 119cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Script *s, 12035e429ebf817130d8590d11d441a77aa697bd7d4Jason Sams uint32_t slot, 121cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const Allocation * ain, 122cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Allocation * aout, 123cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const void * usr, 124099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray size_t usrLen, 125cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const RsScriptCall *sc); 126cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeInit)(const Context *rsc, Script *s); 1274ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines void (*invokeFreeChildren)(const Context *rsc, Script *s); 128bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 129bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalVar)(const Context *rsc, const Script *s, 130bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 1319c64239ebbfa4170190ede812e69150035e008e0Tim Murray void *data, 1329c64239ebbfa4170190ede812e69150035e008e0Tim Murray size_t dataLength); 1339c64239ebbfa4170190ede812e69150035e008e0Tim Murray void (*getGlobalVar)(const Context *rsc, const Script *s, 1349c64239ebbfa4170190ede812e69150035e008e0Tim Murray uint32_t slot, 135bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void *data, 136bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t dataLength); 1372980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s, 1382980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines uint32_t slot, 1392980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines void *data, 1402980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines size_t dataLength, 1412980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines const Element *e, 142ac8d146a41f18afad5314ac8af440d6aedbe20bfStephen Hines const uint32_t *dims, 1432980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines size_t dimLength); 144bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalBind)(const Context *rsc, const Script *s, 145bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 146807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams Allocation *data); 147bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalObj)(const Context *rsc, const Script *s, 148bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 149bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams ObjectBase *data); 150bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 151bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*destroy)(const Context *rsc, Script *s); 1524b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes void (*invokeForEachMulti)(const Context *rsc, 1534b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes Script *s, 1544b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes uint32_t slot, 1554b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const Allocation ** ains, 1564b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes size_t inLen, 1574b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes Allocation * aout, 1584b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const void * usr, 1594b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes size_t usrLen, 1604b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const RsScriptCall *sc); 161a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Script *, rs_script *obj); 162bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams } script; 163bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 1648feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams struct { 165eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero); 166eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*destroy)(const Context *rsc, Allocation *alloc); 167ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams uint32_t (*grallocBits)(const Context *rsc, Allocation *alloc); 168eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 169eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType, 170eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams bool zeroNew); 171eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src); 172eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*markDirty)(const Context *rsc, const Allocation *alloc); 1737ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams 174733396b67724162844ea2785c7495115dc5ee8d8Jason Sams void (*setSurface)(const Context *rsc, Allocation *alloc, ANativeWindow *sur); 1757ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams void (*ioSend)(const Context *rsc, Allocation *alloc); 176ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 177ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams /** 178ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * A new gralloc buffer is in use. The pointers and strides in 179ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * mHal.drvState.lod[0-2] will be updated with the new values. 180ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * 181ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * The new gralloc handle is provided in mHal.state.nativeBuffer 182ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * 183ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams */ 1847ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams void (*ioReceive)(const Context *rsc, Allocation *alloc); 185eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 186eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data1D)(const Context *rsc, const Allocation *alloc, 187099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray uint32_t xoff, uint32_t lod, size_t count, 188c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk const void *data, size_t sizeBytes); 189eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data2D)(const Context *rsc, const Allocation *alloc, 190eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t xoff, uint32_t yoff, uint32_t lod, 191eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams RsAllocationCubemapFace face, uint32_t w, uint32_t h, 192358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray const void *data, size_t sizeBytes, size_t stride); 193eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data3D)(const Context *rsc, const Allocation *alloc, 1943bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, 1953bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes, 1963bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams size_t stride); 197eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 198807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read1D)(const Context *rsc, const Allocation *alloc, 199099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray uint32_t xoff, uint32_t lod, size_t count, 200807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void *data, size_t sizeBytes); 201807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read2D)(const Context *rsc, const Allocation *alloc, 202807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams uint32_t xoff, uint32_t yoff, uint32_t lod, 203807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams RsAllocationCubemapFace face, uint32_t w, uint32_t h, 204358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray void *data, size_t sizeBytes, size_t stride); 205807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read3D)(const Context *rsc, const Allocation *alloc, 2063bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, 2073bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes, 2083bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams size_t stride); 209807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams 210807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // Lock and unlock make a 1D region of memory available to the CPU 211807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // for direct access by pointer. Once unlock is called control is 212807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // returned to the SOC driver. 213807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void * (*lock1D)(const Context *rsc, const Allocation *alloc); 214807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*unlock1D)(const Context *rsc, const Allocation *alloc); 215807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams 21674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk // Allocation to allocation copies 21774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData1D)(const Context *rsc, 21874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 219099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray uint32_t dstXoff, uint32_t dstLod, size_t count, 22074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod); 22174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData2D)(const Context *rsc, 22274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 22374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod, 22474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h, 22574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, 22674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod, 22774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk RsAllocationCubemapFace srcFace); 22874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData3D)(const Context *rsc, 22974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 23074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff, 2313bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t dstLod, 23274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t w, uint32_t h, uint32_t d, 23374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, 23474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, 2353bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t srcLod); 23674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 237eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*elementData1D)(const Context *rsc, const Allocation *alloc, uint32_t x, 238c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk const void *data, uint32_t elementOff, size_t sizeBytes); 239eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*elementData2D)(const Context *rsc, const Allocation *alloc, uint32_t x, uint32_t y, 240c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk const void *data, uint32_t elementOff, size_t sizeBytes); 241eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 24261a4bb734b91ced09fbfee4214c6f253cb66e5f0Jason Sams void (*generateMipmaps)(const Context *rsc, const Allocation *alloc); 243a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 244a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Allocation *alloc, rs_allocation *obj); 245eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams } allocation; 246eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 247eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams struct { 2488feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, const ProgramStore *ps); 2498feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*setActive)(const Context *rsc, const ProgramStore *ps); 2508feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*destroy)(const Context *rsc, const ProgramStore *ps); 2518feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams } store; 2528feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 253721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams struct { 254721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams bool (*init)(const Context *rsc, const ProgramRaster *ps); 255721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*setActive)(const Context *rsc, const ProgramRaster *ps); 256721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*destroy)(const Context *rsc, const ProgramRaster *ps); 257721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams } raster; 2588feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 259a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 260a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramVertex *pv, 261748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char* shader, size_t shaderLen, 262748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char** textureNames, size_t textureNamesCount, 263748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const size_t *textureNamesLength); 264a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramVertex *pv); 265a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramVertex *pv); 266a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } vertex; 267a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 268a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 269a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramFragment *pf, 270748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char* shader, size_t shaderLen, 271748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char** textureNames, size_t textureNamesCount, 272748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const size_t *textureNamesLength); 273a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramFragment *pf); 274a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramFragment *pf); 275a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } fragment; 276a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 277a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 278a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const Mesh *m); 279a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len); 280a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const Mesh *m); 281a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } mesh; 282bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 2837f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk struct { 2849e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams bool (*initStatic)(const Context *rsc, const Path *m, const Allocation *vtx, const Allocation *loops); 2859e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams bool (*initDynamic)(const Context *rsc, const Path *m); 2869e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams void (*draw)(const Context *rsc, const Path *m); 2879e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams void (*destroy)(const Context *rsc, const Path *m); 2889e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams } path; 2899e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams 2909e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams struct { 2917f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk bool (*init)(const Context *rsc, const Sampler *m); 2927f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk void (*destroy)(const Context *rsc, const Sampler *m); 293a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Sampler *s, rs_sampler *obj); 2947f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk } sampler; 2957f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk 296da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk struct { 297da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk bool (*init)(const Context *rsc, const FBOCache *fb); 298da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*setActive)(const Context *rsc, const FBOCache *fb); 299da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*destroy)(const Context *rsc, const FBOCache *fb); 300da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk } framebuffer; 301da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk 302dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams struct { 303709a0978ae141198018ca9769f8d96292a8928e6Jason Sams bool (*init)(const Context *rsc, ScriptGroup *sg); 304dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*setInput)(const Context *rsc, const ScriptGroup *sg, 305dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const ScriptKernelID *kid, Allocation *); 306dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*setOutput)(const Context *rsc, const ScriptGroup *sg, 307dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const ScriptKernelID *kid, Allocation *); 308dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*execute)(const Context *rsc, const ScriptGroup *sg); 309dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*destroy)(const Context *rsc, const ScriptGroup *sg); 310a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const ScriptGroup *sg, rs_script_group *obj); 311dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams } scriptgroup; 312dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 313a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams struct { 314a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams bool (*init)(const Context *rsc, const Type *m); 315a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*destroy)(const Context *rsc, const Type *m); 316a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Type *s, rs_type *obj); 317a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams } type; 318a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 319a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams struct { 320a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams bool (*init)(const Context *rsc, const Element *m); 321a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*destroy)(const Context *rsc, const Element *m); 322a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Element *s, rs_element *obj); 323a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams } element; 324a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 3259761c3fcb8cf2ce89a29cb9202e4282d94f33d9dJason Sams void (*finish)(const Context *rsc); 326bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} RsdHalFunctions; 327bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 328bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 329bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 330bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 331bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 332414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#ifdef __cplusplus 333414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesextern "C" { 334414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#endif 335414a46166126da6864258bd25ff183f9a3c6261dStephen Hines 336414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesbool rsdHalInit(RsContext, uint32_t version_major, uint32_t version_minor); 337bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 338414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#ifdef __cplusplus 339414a46166126da6864258bd25ff183f9a3c6261dStephen Hines} 340414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#endif 341bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 342bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif 343