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 2066f0a168c4227d4e302f4ffb21ec7e9d7b9ca828Jason Sams#include <rsInternalDefines.h> 21bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 228e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross/* 238e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 248e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! Major version number of the driver. This is used to ensure that 258e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! the driver (e.g., libRSDriver) is compatible with the shell 268e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! (i.e., libRS_internal) responsible for loading the driver. 278e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! There is no notion of backwards compatibility -- the driver and 288e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! the shell must agree on the major version number. 298e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! 308e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! The version number must change whenever there is a semantic change 318e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! to the HAL such as adding or removing an entry point or changing 328e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! the meaning of an entry point. By convention it is monotonically 338e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! increasing across all branches (e.g., aosp/master and all internal 348e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! branches). 358e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! 368e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !! Be very careful when merging or cherry picking between branches! 378e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 388e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross */ 398e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross#define RS_HAL_VERSION 100 408e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross 410ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams/** 420ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * The interface for loading RenderScript drivers 430ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 440ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * The startup sequence is 450ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 460ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 1: dlopen driver 478e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * 2: Query driver version with rsdHalQueryVersion() and verify 488e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * that the driver (e.g., libRSDriver) is compatible with the shell 498e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * (i.e., libRS_internal) responsible for loading the driver 500ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 3: Fill in HAL pointer table with calls to rsdHalQueryHAL() 510ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 4: Initialize the context with rsdHalInit() 520ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 530ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * If any of these functions return false, the loading of the 540ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * driver will abort and the reference driver will be used. 550ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * rsdHalAbort() will be called to clean up any partially 560ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * allocated state. 570ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 58b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * A driver should return FALSE for any conditions that will 59b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * prevent the driver from working normally. 60b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * 61b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * 620ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * If these are successful, the driver will be loaded and used 630ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * normally. Teardown will use the normal 640ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * context->mHal.funcs.shutdown() path. There will be no call 650ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * to rsdHalAbort(). 660ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 670ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 680ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams */ 690ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 700ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 717ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsstruct ANativeWindow; 727ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams 73bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace android { 74bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace renderscript { 75bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 76bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Context; 77bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ObjectBase; 78bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Element; 79bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Type; 80bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Allocation; 81bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Script; 82dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ScriptKernelID; 83dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ScriptFieldID; 84dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ScriptMethodID; 85bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ScriptC; 86dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ScriptGroup; 871ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass ScriptGroupBase; 889e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Samsclass Path; 897f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass Program; 908feea4e0dec48ea03bd6d32706d058b86dddc5baJason Samsclass ProgramStore; 91721acc495b859c6d884725a4f9b5523583dd11c7Jason Samsclass ProgramRaster; 92a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass ProgramVertex; 93a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass ProgramFragment; 94a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass Mesh; 957f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass Sampler; 96da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchoukclass FBOCache; 97bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 98a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams/** 99a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * Define the internal object types. This ia a mirror of the 100a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * definition in rs_types.rsh except with the p value typed 101a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * correctly. 102a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * 103a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * p = pointer to internal object implementation 104a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * r = reserved by libRS runtime 105a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * v1 = Mirror of p->mHal.drv 106a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams * v2 = reserved for use by vendor drivers 107a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams */ 108a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 109a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#ifndef __LP64__ 110a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#define RS_BASE_OBJ(_t_) typedef struct { const _t_* p; } __attribute__((packed, aligned(4))) 111a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#else 112a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#define RS_BASE_OBJ(_t_) typedef struct { const _t_* p; const void* r; const void* v1; const void* v2; } 113a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#endif 114a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 11505ef73f2d934f1083cc3b8aeb33fe21de9d6e88fJason SamsRS_BASE_OBJ(ObjectBase) rs_object_base; 116a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Element) rs_element; 117a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Type) rs_type; 118a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Allocation) rs_allocation; 119a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Sampler) rs_sampler; 120a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Script) rs_script; 121a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(ScriptGroup) rs_script_group; 122a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 123a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#ifndef __LP64__ 124a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_mesh; 125a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_fragment; 126a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_vertex; 127a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_raster; 128a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_store; 129a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_font; 130a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#endif // __LP64__ 131a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 132a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 133bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName); 134bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 135bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/** 136bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Script management functions 137bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */ 138bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef struct { 1394b3de47071d875faaa7d419d050a464b09538797Jason Sams bool (*initGraphics)(const Context *); 1404b3de47071d875faaa7d419d050a464b09538797Jason Sams void (*shutdownGraphics)(const Context *); 1417257c7ee4b66f00c43d9235f3ac600061ae79968Alex Sakhartchouk bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow); 1424b3de47071d875faaa7d419d050a464b09538797Jason Sams void (*swap)(const Context *); 1434b3de47071d875faaa7d419d050a464b09538797Jason Sams 144cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*shutdownDriver)(Context *); 145cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*setPriority)(const Context *, int32_t priority); 146bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 14734689388556747b52c3c2f1c894929fb44580898Tim Murray void* (*allocRuntimeMem)(size_t size, uint32_t flags); 14834689388556747b52c3c2f1c894929fb44580898Tim Murray void (*freeRuntimeMem)(void* ptr); 149bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 150bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams struct { 1518feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, ScriptC *s, 1528feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams char const *resName, 1538feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams char const *cacheDir, 1548feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams uint8_t const *bitcode, 1558feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams size_t bitcodeSize, 15687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams uint32_t flags); 1578eaba4fee0c7b5325742c87187622fdff51d5effJason Sams bool (*initIntrinsic)(const Context *rsc, Script *s, 15841d6c769f5fa21da3cbc116af95d88949a4a5c76Stephen Hines RsScriptIntrinsicID iid, 1598eaba4fee0c7b5325742c87187622fdff51d5effJason Sams Element *e); 160bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 161cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeFunction)(const Context *rsc, Script *s, 162bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 163bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const void *params, 164bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t paramLength); 165cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams int (*invokeRoot)(const Context *rsc, Script *s); 166cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeForEach)(const Context *rsc, 167cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Script *s, 16835e429ebf817130d8590d11d441a77aa697bd7d4Jason Sams uint32_t slot, 169cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const Allocation * ain, 170cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Allocation * aout, 171cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const void * usr, 172099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray size_t usrLen, 173cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const RsScriptCall *sc); 17414ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala void (*invokeReduce)(const Context *rsc, Script *s, 175ae2ec3febedfc29376b9104413fb4042028f1265David Gross uint32_t slot, 176ae2ec3febedfc29376b9104413fb4042028f1265David Gross const Allocation ** ains, size_t inLen, 17714ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala Allocation *aout, 17814ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala const RsScriptCall *sc); 179cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeInit)(const Context *rsc, Script *s); 1804ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines void (*invokeFreeChildren)(const Context *rsc, Script *s); 181bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 182bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalVar)(const Context *rsc, const Script *s, 183bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 1849c64239ebbfa4170190ede812e69150035e008e0Tim Murray void *data, 1859c64239ebbfa4170190ede812e69150035e008e0Tim Murray size_t dataLength); 1869c64239ebbfa4170190ede812e69150035e008e0Tim Murray void (*getGlobalVar)(const Context *rsc, const Script *s, 1879c64239ebbfa4170190ede812e69150035e008e0Tim Murray uint32_t slot, 188bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void *data, 189bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t dataLength); 1902980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s, 1912980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines uint32_t slot, 1922980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines void *data, 1932980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines size_t dataLength, 1942980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines const Element *e, 195ac8d146a41f18afad5314ac8af440d6aedbe20bfStephen Hines const uint32_t *dims, 1962980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines size_t dimLength); 197bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalBind)(const Context *rsc, const Script *s, 198bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 199807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams Allocation *data); 200bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalObj)(const Context *rsc, const Script *s, 201bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 202bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams ObjectBase *data); 203bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 204bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*destroy)(const Context *rsc, Script *s); 2054b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes void (*invokeForEachMulti)(const Context *rsc, 2064b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes Script *s, 2074b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes uint32_t slot, 2084b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const Allocation ** ains, 2094b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes size_t inLen, 2104b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes Allocation * aout, 2114b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const void * usr, 2124b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes size_t usrLen, 2134b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const RsScriptCall *sc); 214a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Script *, rs_script *obj); 215bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams } script; 216bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 2178feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams struct { 218eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero); 219f82b626e0479ce4a23ebff1fc088e073dcabaa30Jason Sams bool (*initOem)(const Context *rsc, Allocation *alloc, bool forceZero, void *usrPtr); 220bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Sams bool (*initAdapter)(const Context *rsc, Allocation *alloc); 221eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*destroy)(const Context *rsc, Allocation *alloc); 222ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams uint32_t (*grallocBits)(const Context *rsc, Allocation *alloc); 223eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 224eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType, 225eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams bool zeroNew); 226eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src); 227eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*markDirty)(const Context *rsc, const Allocation *alloc); 2287ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams 229733396b67724162844ea2785c7495115dc5ee8d8Jason Sams void (*setSurface)(const Context *rsc, Allocation *alloc, ANativeWindow *sur); 2307ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams void (*ioSend)(const Context *rsc, Allocation *alloc); 231ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 232ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams /** 233ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * A new gralloc buffer is in use. The pointers and strides in 234ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * mHal.drvState.lod[0-2] will be updated with the new values. 235ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * 236ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * The new gralloc handle is provided in mHal.state.nativeBuffer 237ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * 238ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams */ 2397ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams void (*ioReceive)(const Context *rsc, Allocation *alloc); 240eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 241eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data1D)(const Context *rsc, const Allocation *alloc, 242099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray uint32_t xoff, uint32_t lod, size_t count, 243c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk const void *data, size_t sizeBytes); 244eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data2D)(const Context *rsc, const Allocation *alloc, 245eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t xoff, uint32_t yoff, uint32_t lod, 246eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams RsAllocationCubemapFace face, uint32_t w, uint32_t h, 247358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray const void *data, size_t sizeBytes, size_t stride); 248eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data3D)(const Context *rsc, const Allocation *alloc, 2493bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, 2503bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes, 2513bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams size_t stride); 252eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 253807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read1D)(const Context *rsc, const Allocation *alloc, 254099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray uint32_t xoff, uint32_t lod, size_t count, 255807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void *data, size_t sizeBytes); 256807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read2D)(const Context *rsc, const Allocation *alloc, 257807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams uint32_t xoff, uint32_t yoff, uint32_t lod, 258807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams RsAllocationCubemapFace face, uint32_t w, uint32_t h, 259358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray void *data, size_t sizeBytes, size_t stride); 260807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read3D)(const Context *rsc, const Allocation *alloc, 2613bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, 2623bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes, 2633bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams size_t stride); 264807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams 265807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // Lock and unlock make a 1D region of memory available to the CPU 266807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // for direct access by pointer. Once unlock is called control is 267807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // returned to the SOC driver. 268807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void * (*lock1D)(const Context *rsc, const Allocation *alloc); 269807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*unlock1D)(const Context *rsc, const Allocation *alloc); 270807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams 27174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk // Allocation to allocation copies 27274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData1D)(const Context *rsc, 27374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 274099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray uint32_t dstXoff, uint32_t dstLod, size_t count, 27574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod); 27674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData2D)(const Context *rsc, 27774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 27874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod, 27974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h, 28074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, 28174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod, 28274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk RsAllocationCubemapFace srcFace); 28374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData3D)(const Context *rsc, 28474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 28574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff, 2863bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t dstLod, 28774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t w, uint32_t h, uint32_t d, 28874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, 28974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, 2903bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t srcLod); 29174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 292cc8cea7477352898921044483a6c803e25d02665Miao Wang void (*elementData)(const Context *rsc, const Allocation *alloc, 293cc8cea7477352898921044483a6c803e25d02665Miao Wang uint32_t x, uint32_t y, uint32_t z, 294cc8cea7477352898921044483a6c803e25d02665Miao Wang const void *data, uint32_t elementOff, size_t sizeBytes); 295cc8cea7477352898921044483a6c803e25d02665Miao Wang void (*elementRead)(const Context *rsc, const Allocation *alloc, 296cc8cea7477352898921044483a6c803e25d02665Miao Wang uint32_t x, uint32_t y, uint32_t z, 297cc8cea7477352898921044483a6c803e25d02665Miao Wang void *data, uint32_t elementOff, size_t sizeBytes); 298eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 29961a4bb734b91ced09fbfee4214c6f253cb66e5f0Jason Sams void (*generateMipmaps)(const Context *rsc, const Allocation *alloc); 300a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 301a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Allocation *alloc, rs_allocation *obj); 302bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Sams 303bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Sams void (*adapterOffset)(const Context *rsc, const Allocation *alloc); 3048ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams 3058ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams void (*getPointer)(const Context *rsc, const Allocation *alloc, 3068ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams uint32_t lod, RsAllocationCubemapFace face, 3078ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams uint32_t z, uint32_t array); 30847a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#ifdef RS_COMPATIBILITY_LIB 30947a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang bool (*initStrided)(const Context *rsc, Allocation *alloc, bool forceZero, size_t requiredAlignment); 31047a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#endif 311eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams } allocation; 312eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 313eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams struct { 3148feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, const ProgramStore *ps); 3158feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*setActive)(const Context *rsc, const ProgramStore *ps); 3168feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*destroy)(const Context *rsc, const ProgramStore *ps); 3178feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams } store; 3188feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 319721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams struct { 320721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams bool (*init)(const Context *rsc, const ProgramRaster *ps); 321721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*setActive)(const Context *rsc, const ProgramRaster *ps); 322721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*destroy)(const Context *rsc, const ProgramRaster *ps); 323721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams } raster; 3248feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 325a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 326a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramVertex *pv, 327748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char* shader, size_t shaderLen, 328748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char** textureNames, size_t textureNamesCount, 329748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const size_t *textureNamesLength); 330a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramVertex *pv); 331a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramVertex *pv); 332a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } vertex; 333a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 334a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 335a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramFragment *pf, 336748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char* shader, size_t shaderLen, 337748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char** textureNames, size_t textureNamesCount, 338748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const size_t *textureNamesLength); 339a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramFragment *pf); 340a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramFragment *pf); 341a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } fragment; 342a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 343a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 344a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const Mesh *m); 345a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len); 346a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const Mesh *m); 347a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } mesh; 348bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 3497f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk struct { 3507f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk bool (*init)(const Context *rsc, const Sampler *m); 3517f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk void (*destroy)(const Context *rsc, const Sampler *m); 352a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Sampler *s, rs_sampler *obj); 3537f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk } sampler; 3547f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk 355da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk struct { 356da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk bool (*init)(const Context *rsc, const FBOCache *fb); 357da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*setActive)(const Context *rsc, const FBOCache *fb); 358da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*destroy)(const Context *rsc, const FBOCache *fb); 359da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk } framebuffer; 360da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk 361dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams struct { 3621ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni bool (*init)(const Context *rsc, ScriptGroupBase *sg); 363dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*setInput)(const Context *rsc, const ScriptGroup *sg, 364dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const ScriptKernelID *kid, Allocation *); 365dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*setOutput)(const Context *rsc, const ScriptGroup *sg, 366dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const ScriptKernelID *kid, Allocation *); 3671ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni void (*execute)(const Context *rsc, const ScriptGroupBase *sg); 3681ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni void (*destroy)(const Context *rsc, const ScriptGroupBase *sg); 369a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const ScriptGroup *sg, rs_script_group *obj); 370dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams } scriptgroup; 371dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 372a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams struct { 373a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams bool (*init)(const Context *rsc, const Type *m); 374a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*destroy)(const Context *rsc, const Type *m); 375a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Type *s, rs_type *obj); 376a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams } type; 377a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 378a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams struct { 379a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams bool (*init)(const Context *rsc, const Element *m); 380a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*destroy)(const Context *rsc, const Element *m); 381a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Element *s, rs_element *obj); 382a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams } element; 383a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 3849761c3fcb8cf2ce89a29cb9202e4282d94f33d9dJason Sams void (*finish)(const Context *rsc); 385bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} RsdHalFunctions; 386bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 387bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 3880ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsenum RsHalInitEnums { 3890ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_CORE_SHUTDOWN = 1, 3900ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_CORE_SET_PRIORITY = 2, 3910ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_CORE_ALLOC_RUNTIME_MEM = 3, 3920ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_CORE_FREE_RUNTIME_MEM = 4, 3930ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_CORE_FINISH = 5, 3940ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 3950ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INIT = 1000, 3960ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INIT_INTRINSIC = 1001, 3970ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_FUNCTION = 1002, 3980ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_ROOT = 1003, 3990ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_FOR_EACH = 1004, 4000ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_INIT = 1005, 4010ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_FREE_CHILDREN = 1006, 4020ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_SET_GLOBAL_VAR = 1007, 4030ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GET_GLOBAL_VAR = 1008, 4040ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_SET_GLOBAL_VAR_WITH_ELEMENT_DIM = 1009, 4050ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_SET_GLOBAL_BIND = 1010, 4060ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_SET_GLOBAL_OBJECT = 1011, 4070ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_DESTROY = 1012, 4080ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_FOR_EACH_MULTI = 1013, 4090ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_UPDATE_CACHED_OBJECT = 1014, 41014ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala RS_HAL_SCRIPT_INVOKE_REDUCE = 1015, 4110ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4120ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_INIT = 2000, 4130ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_INIT_ADAPTER = 2001, 4140ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_DESTROY = 2002, 4150ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_GET_GRALLOC_BITS = 2003, 4160ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_RESIZE = 2004, 4170ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_SYNC_ALL = 2005, 4180ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_MARK_DIRTY = 2006, 4190ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_SET_SURFACE = 2007, 4200ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_IO_SEND = 2008, 4210ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_IO_RECEIVE = 2009, 4220ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_DATA_1D = 2010, 4230ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_DATA_2D = 2011, 4240ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_DATA_3D = 2012, 4250ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_READ_1D = 2013, 4260ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_READ_2D = 2014, 4270ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_READ_3D = 2015, 4280ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_LOCK_1D = 2016, 4290ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_UNLOCK_1D = 2017, 4300ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_COPY_1D = 2018, 4310ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_COPY_2D = 2019, 4320ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_COPY_3D = 2020, 4330ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_ELEMENT_DATA = 2021, 4340ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_ELEMENT_READ = 2022, 4350ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_GENERATE_MIPMAPS = 2023, 4360ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_UPDATE_CACHED_OBJECT = 2024, 4370ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_ADAPTER_OFFSET = 2025, 438f82b626e0479ce4a23ebff1fc088e073dcabaa30Jason Sams RS_HAL_ALLOCATION_INIT_OEM = 2026, 4398ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams RS_HAL_ALLOCATION_GET_POINTER = 2027, 44047a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#ifdef RS_COMPATIBILITY_LIB 44147a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang RS_HAL_ALLOCATION_INIT_STRIDED = 2999, 44247a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#endif 4430ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4440ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SAMPLER_INIT = 3000, 4450ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SAMPLER_DESTROY = 3001, 4460ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SAMPLER_UPDATE_CACHED_OBJECT = 3002, 4470ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4480ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_TYPE_INIT = 4000, 4490ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_TYPE_DESTROY = 4001, 4500ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_TYPE_UPDATE_CACHED_OBJECT = 4002, 4510ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4520ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ELEMENT_INIT = 5000, 4530ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ELEMENT_DESTROY = 5001, 4540ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ELEMENT_UPDATE_CACHED_OBJECT = 5002, 4550ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4560ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_INIT = 6000, 4570ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_DESTROY = 6001, 4580ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_UPDATE_CACHED_OBJECT = 6002, 4590ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_SET_INPUT = 6003, 4600ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_SET_OUTPUT = 6004, 4610ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_EXECUTE = 6005, 4620ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4630ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4640ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4650ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_INIT = 100001, 4660ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_SHUTDOWN = 100002, 4670ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_SWAP = 100003, 4680ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_SET_SURFACE = 100004, 4690ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_RASTER_INIT = 101000, 4700ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_RASTER_SET_ACTIVE = 101001, 4710ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_RASTER_DESTROY = 101002, 4720ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_VERTEX_INIT = 102000, 4730ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_VERTEX_SET_ACTIVE = 102001, 4740ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_VERTEX_DESTROY = 102002, 4750ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FRAGMENT_INIT = 103000, 4760ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FRAGMENT_SET_ACTIVE = 103001, 4770ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FRAGMENT_DESTROY = 103002, 4780ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_MESH_INIT = 104000, 4790ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_MESH_DRAW = 104001, 4800ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_MESH_DESTROY = 104002, 4810ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FB_INIT = 105000, 4820ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FB_SET_ACTIVE = 105001, 4830ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FB_DESTROY = 105002, 4840ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_STORE_INIT = 106000, 4850ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_STORE_SET_ACTIVE = 106001, 4860ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_STORE_DESTROY = 106002, 4870ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams}; 4880ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 489bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 490bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 491bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 492414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#ifdef __cplusplus 493414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesextern "C" { 494414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#endif 495414a46166126da6864258bd25ff183f9a3c6261dStephen Hines 4960ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams/** 4970ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * Get the major version number of the driver. The major 4988e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * version should be the RS_HAL_VERSION against which the 4998e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * driver was built 5000ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 5010ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * The Minor version number is vendor specific 5020ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 5038e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * The caller should ensure that *version_major is the same as 5048e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * RS_HAL_VERSION -- i.e., that the driver (e.g., libRSDriver) 5058e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * is compatible with the shell (i.e., libRS_internal) responsible 5068e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * for loading the driver 5078e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * 5080ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * return: False will abort loading the driver, true indicates 5090ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * success 5100ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams */ 5110ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsbool rsdHalQueryVersion(uint32_t *version_major, uint32_t *version_minor); 5120ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 5130ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 5140ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams/** 5150ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * Get an entry point in the driver HAL 5160ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 5170ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * The driver should set the function pointer to its 5180ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * implementation of the function. If it does not have an entry 5190ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * for an enum, its should set the function pointer to NULL 5200ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 521b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * Returning NULL is expected in cases during development as new 522b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * entry points are added that a driver may not understand. If 523b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * the runtime receives a NULL it will decide if the function is 524b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * required and will either continue loading or abort as needed. 525b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * 526b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * 5270ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * return: False will abort loading the driver, true indicates 5280ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * success 529b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * 5300ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams */ 5310ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsbool rsdHalQueryHal(android::renderscript::RsHalInitEnums entry, void **fnPtr); 5320ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 5330ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 5340ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams/** 5350ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * Called to initialize the context for use with a driver. 5360ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 5370ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * return: False will abort loading the driver, true indicates 5380ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * success 5390ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams */ 540414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesbool rsdHalInit(RsContext, uint32_t version_major, uint32_t version_minor); 541bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 5420ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams/** 5430ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * Called if one of the loading functions above returns false. 5440ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * This is to clean up any resources allocated during an error 5450ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * condition. If this path is called it means the normal 5460ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * context->mHal.funcs.shutdown() will not be called. 5470ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams */ 5480ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsvoid rsdHalAbort(RsContext); 5490ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 550414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#ifdef __cplusplus 551414a46166126da6864258bd25ff183f9a3c6261dStephen Hines} 552414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#endif 553bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 554bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif 555