rs_hal.h revision 34689388556747b52c3c2f1c894929fb44580898
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, 115cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams uint32_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, 122bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void *data, 123bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t dataLength); 1242980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s, 1252980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines uint32_t slot, 1262980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines void *data, 1272980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines size_t dataLength, 1282980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines const Element *e, 1292980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines const size_t *dims, 1302980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines size_t dimLength); 131bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalBind)(const Context *rsc, const Script *s, 132bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 133807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams Allocation *data); 134bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalObj)(const Context *rsc, const Script *s, 135bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 136bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams ObjectBase *data); 137bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 138bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*destroy)(const Context *rsc, Script *s); 139bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams } script; 140bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 1418feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams struct { 142eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero); 143eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*destroy)(const Context *rsc, Allocation *alloc); 144eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 145eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType, 146eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams bool zeroNew); 147eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src); 148eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*markDirty)(const Context *rsc, const Allocation *alloc); 1497ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams 150733396b67724162844ea2785c7495115dc5ee8d8Jason Sams void * (*getSurface)(const Context *rsc, const Allocation *alloc); 151733396b67724162844ea2785c7495115dc5ee8d8Jason Sams void (*setSurface)(const Context *rsc, Allocation *alloc, ANativeWindow *sur); 1527ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams void (*ioSend)(const Context *rsc, Allocation *alloc); 1537ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams void (*ioReceive)(const Context *rsc, Allocation *alloc); 154eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 155eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data1D)(const Context *rsc, const Allocation *alloc, 156eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t xoff, uint32_t lod, uint32_t count, 157c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk const void *data, size_t sizeBytes); 158eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data2D)(const Context *rsc, const Allocation *alloc, 159eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t xoff, uint32_t yoff, uint32_t lod, 160eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams RsAllocationCubemapFace face, uint32_t w, uint32_t h, 161358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray const void *data, size_t sizeBytes, size_t stride); 162eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data3D)(const Context *rsc, const Allocation *alloc, 163eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t xoff, uint32_t yoff, uint32_t zoff, 164eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t lod, RsAllocationCubemapFace face, 165c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes); 166eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 167807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read1D)(const Context *rsc, const Allocation *alloc, 168807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams uint32_t xoff, uint32_t lod, uint32_t count, 169807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void *data, size_t sizeBytes); 170807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read2D)(const Context *rsc, const Allocation *alloc, 171807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams uint32_t xoff, uint32_t yoff, uint32_t lod, 172807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams RsAllocationCubemapFace face, uint32_t w, uint32_t h, 173358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray void *data, size_t sizeBytes, size_t stride); 174807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read3D)(const Context *rsc, const Allocation *alloc, 175807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams uint32_t xoff, uint32_t yoff, uint32_t zoff, 176807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams uint32_t lod, RsAllocationCubemapFace face, 177807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes); 178807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams 179807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // Lock and unlock make a 1D region of memory available to the CPU 180807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // for direct access by pointer. Once unlock is called control is 181807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // returned to the SOC driver. 182807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void * (*lock1D)(const Context *rsc, const Allocation *alloc); 183807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*unlock1D)(const Context *rsc, const Allocation *alloc); 184807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams 18574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk // Allocation to allocation copies 18674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData1D)(const Context *rsc, 18774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 18874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstLod, uint32_t count, 18974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod); 19074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData2D)(const Context *rsc, 19174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 19274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod, 19374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h, 19474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, 19574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod, 19674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk RsAllocationCubemapFace srcFace); 19774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData3D)(const Context *rsc, 19874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 19974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff, 20074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstLod, RsAllocationCubemapFace dstFace, 20174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t w, uint32_t h, uint32_t d, 20274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, 20374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, 20474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcLod, RsAllocationCubemapFace srcFace); 20574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 206eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*elementData1D)(const Context *rsc, const Allocation *alloc, uint32_t x, 207c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk const void *data, uint32_t elementOff, size_t sizeBytes); 208eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*elementData2D)(const Context *rsc, const Allocation *alloc, uint32_t x, uint32_t y, 209c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk const void *data, uint32_t elementOff, size_t sizeBytes); 210eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 21161a4bb734b91ced09fbfee4214c6f253cb66e5f0Jason Sams void (*generateMipmaps)(const Context *rsc, const Allocation *alloc); 212eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams } allocation; 213eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 214eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams struct { 2158feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, const ProgramStore *ps); 2168feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*setActive)(const Context *rsc, const ProgramStore *ps); 2178feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*destroy)(const Context *rsc, const ProgramStore *ps); 2188feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams } store; 2198feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 220721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams struct { 221721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams bool (*init)(const Context *rsc, const ProgramRaster *ps); 222721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*setActive)(const Context *rsc, const ProgramRaster *ps); 223721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*destroy)(const Context *rsc, const ProgramRaster *ps); 224721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams } raster; 2258feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 226a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 227a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramVertex *pv, 228748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char* shader, size_t shaderLen, 229748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char** textureNames, size_t textureNamesCount, 230748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const size_t *textureNamesLength); 231a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramVertex *pv); 232a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramVertex *pv); 233a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } vertex; 234a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 235a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 236a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramFragment *pf, 237748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char* shader, size_t shaderLen, 238748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char** textureNames, size_t textureNamesCount, 239748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const size_t *textureNamesLength); 240a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramFragment *pf); 241a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramFragment *pf); 242a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } fragment; 243a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 244a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 245a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const Mesh *m); 246a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len); 247a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const Mesh *m); 248a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } mesh; 249bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 2507f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk struct { 2519e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams bool (*initStatic)(const Context *rsc, const Path *m, const Allocation *vtx, const Allocation *loops); 2529e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams bool (*initDynamic)(const Context *rsc, const Path *m); 2539e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams void (*draw)(const Context *rsc, const Path *m); 2549e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams void (*destroy)(const Context *rsc, const Path *m); 2559e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams } path; 2569e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams 2579e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams struct { 2587f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk bool (*init)(const Context *rsc, const Sampler *m); 2597f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk void (*destroy)(const Context *rsc, const Sampler *m); 2607f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk } sampler; 2617f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk 262da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk struct { 263da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk bool (*init)(const Context *rsc, const FBOCache *fb); 264da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*setActive)(const Context *rsc, const FBOCache *fb); 265da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*destroy)(const Context *rsc, const FBOCache *fb); 266da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk } framebuffer; 267da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk 268dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams struct { 269709a0978ae141198018ca9769f8d96292a8928e6Jason Sams bool (*init)(const Context *rsc, ScriptGroup *sg); 270dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*setInput)(const Context *rsc, const ScriptGroup *sg, 271dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const ScriptKernelID *kid, Allocation *); 272dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*setOutput)(const Context *rsc, const ScriptGroup *sg, 273dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const ScriptKernelID *kid, Allocation *); 274dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*execute)(const Context *rsc, const ScriptGroup *sg); 275dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*destroy)(const Context *rsc, const ScriptGroup *sg); 276dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams } scriptgroup; 277dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 278bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} RsdHalFunctions; 279bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 280bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 281bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 282bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 283bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 284414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#ifdef __cplusplus 285414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesextern "C" { 286414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#endif 287414a46166126da6864258bd25ff183f9a3c6261dStephen Hines 288414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesbool rsdHalInit(RsContext, uint32_t version_major, uint32_t version_minor); 289bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 290414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#ifdef __cplusplus 291414a46166126da6864258bd25ff183f9a3c6261dStephen Hines} 292414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#endif 293bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 294bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif 295bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 296