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 */ 39f750c530392a2895cb4b7e5b5e5e5259925b2015Miao Wang#define RS_HAL_VERSION 200 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 104700e68883c4324c15b380ff6724249f39d4f498cI-Jui (Ray) Sung * unused1, unused2, unused3 = reserved for ABI compatibility 105a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams */ 106a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 107863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet// RS_BASE_OBJ must have the same layout as _RS_OBJECT_DECL defined in 108863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet// script_api/rs_object_types.spec. 109863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet// TODO(jeanluc) Look at unifying. 110a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#ifndef __LP64__ 111a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#define RS_BASE_OBJ(_t_) typedef struct { const _t_* p; } __attribute__((packed, aligned(4))) 112863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet#define RS_BASE_NULL_OBJ {0} 113a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#else 114700e68883c4324c15b380ff6724249f39d4f498cI-Jui (Ray) Sung#define RS_BASE_OBJ(_t_) typedef struct { const _t_* p; const void* unused1; const void* unused2; const void* unused3; } 115863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet#define RS_BASE_NULL_OBJ {0, 0, 0, 0} 116a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#endif 117a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 11805ef73f2d934f1083cc3b8aeb33fe21de9d6e88fJason SamsRS_BASE_OBJ(ObjectBase) rs_object_base; 119a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Element) rs_element; 120a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Type) rs_type; 121a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Allocation) rs_allocation; 122a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Sampler) rs_sampler; 123a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(Script) rs_script; 124a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason SamsRS_BASE_OBJ(ScriptGroup) rs_script_group; 125a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 126a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#ifndef __LP64__ 127a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_mesh; 128a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_fragment; 129a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_vertex; 130a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_raster; 131a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_store; 132a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samstypedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_font; 133a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#endif // __LP64__ 134a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 135a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 136bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName); 137bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 138bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/** 139bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Script management functions 140bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */ 141bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef struct { 142025a1f48df53a3bd13dd3a5d765a7a78de3a1bf5Miao Wang int (*initGraphics)(const Context *); 1434b3de47071d875faaa7d419d050a464b09538797Jason Sams void (*shutdownGraphics)(const Context *); 1447257c7ee4b66f00c43d9235f3ac600061ae79968Alex Sakhartchouk bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow); 1454b3de47071d875faaa7d419d050a464b09538797Jason Sams void (*swap)(const Context *); 1464b3de47071d875faaa7d419d050a464b09538797Jason Sams 147cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*shutdownDriver)(Context *); 148cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*setPriority)(const Context *, int32_t priority); 149bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 15034689388556747b52c3c2f1c894929fb44580898Tim Murray void* (*allocRuntimeMem)(size_t size, uint32_t flags); 15134689388556747b52c3c2f1c894929fb44580898Tim Murray void (*freeRuntimeMem)(void* ptr); 152bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 153bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams struct { 1548feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, ScriptC *s, 1558feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams char const *resName, 1568feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams char const *cacheDir, 1578feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams uint8_t const *bitcode, 1588feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams size_t bitcodeSize, 15987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams uint32_t flags); 1608eaba4fee0c7b5325742c87187622fdff51d5effJason Sams bool (*initIntrinsic)(const Context *rsc, Script *s, 16141d6c769f5fa21da3cbc116af95d88949a4a5c76Stephen Hines RsScriptIntrinsicID iid, 1628eaba4fee0c7b5325742c87187622fdff51d5effJason Sams Element *e); 163bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 164cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeFunction)(const Context *rsc, Script *s, 165bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 166bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const void *params, 167bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t paramLength); 168cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams int (*invokeRoot)(const Context *rsc, Script *s); 169cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeForEach)(const Context *rsc, 170cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Script *s, 17135e429ebf817130d8590d11d441a77aa697bd7d4Jason Sams uint32_t slot, 172cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const Allocation * ain, 173cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Allocation * aout, 174cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const void * usr, 175099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray size_t usrLen, 176cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const RsScriptCall *sc); 17714ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala void (*invokeReduce)(const Context *rsc, Script *s, 178ae2ec3febedfc29376b9104413fb4042028f1265David Gross uint32_t slot, 179ae2ec3febedfc29376b9104413fb4042028f1265David Gross const Allocation ** ains, size_t inLen, 18014ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala Allocation *aout, 18114ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala const RsScriptCall *sc); 182cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeInit)(const Context *rsc, Script *s); 1834ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines void (*invokeFreeChildren)(const Context *rsc, Script *s); 184bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 185bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalVar)(const Context *rsc, const Script *s, 186bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 1879c64239ebbfa4170190ede812e69150035e008e0Tim Murray void *data, 1889c64239ebbfa4170190ede812e69150035e008e0Tim Murray size_t dataLength); 1899c64239ebbfa4170190ede812e69150035e008e0Tim Murray void (*getGlobalVar)(const Context *rsc, const Script *s, 1909c64239ebbfa4170190ede812e69150035e008e0Tim Murray uint32_t slot, 191bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void *data, 192bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t dataLength); 1932980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s, 1942980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines uint32_t slot, 1952980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines void *data, 1962980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines size_t dataLength, 1972980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines const Element *e, 198ac8d146a41f18afad5314ac8af440d6aedbe20bfStephen Hines const uint32_t *dims, 1992980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines size_t dimLength); 200bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalBind)(const Context *rsc, const Script *s, 201bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 202807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams Allocation *data); 203bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalObj)(const Context *rsc, const Script *s, 204bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 205bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams ObjectBase *data); 206bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 207bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*destroy)(const Context *rsc, Script *s); 2084b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes void (*invokeForEachMulti)(const Context *rsc, 2094b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes Script *s, 2104b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes uint32_t slot, 2114b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const Allocation ** ains, 2124b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes size_t inLen, 2134b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes Allocation * aout, 2144b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const void * usr, 2154b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes size_t usrLen, 2164b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const RsScriptCall *sc); 217a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Script *, rs_script *obj); 218bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams } script; 219bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 2208feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams struct { 221eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero); 222f82b626e0479ce4a23ebff1fc088e073dcabaa30Jason Sams bool (*initOem)(const Context *rsc, Allocation *alloc, bool forceZero, void *usrPtr); 223bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Sams bool (*initAdapter)(const Context *rsc, Allocation *alloc); 224eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*destroy)(const Context *rsc, Allocation *alloc); 225ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams uint32_t (*grallocBits)(const Context *rsc, Allocation *alloc); 226eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 227eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType, 228eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams bool zeroNew); 229eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src); 230eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*markDirty)(const Context *rsc, const Allocation *alloc); 2317ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams 232733396b67724162844ea2785c7495115dc5ee8d8Jason Sams void (*setSurface)(const Context *rsc, Allocation *alloc, ANativeWindow *sur); 2337ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams void (*ioSend)(const Context *rsc, Allocation *alloc); 234ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 235ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams /** 236ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * A new gralloc buffer is in use. The pointers and strides in 237ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * mHal.drvState.lod[0-2] will be updated with the new values. 238ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * 239ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * The new gralloc handle is provided in mHal.state.nativeBuffer 240ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * 241ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams */ 2427ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams void (*ioReceive)(const Context *rsc, Allocation *alloc); 243eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 244eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data1D)(const Context *rsc, const Allocation *alloc, 245099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray uint32_t xoff, uint32_t lod, size_t count, 246c794cd56e46408e08862c42a022090e323684197Alex Sakhartchouk const void *data, size_t sizeBytes); 247eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data2D)(const Context *rsc, const Allocation *alloc, 248eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t xoff, uint32_t yoff, uint32_t lod, 249eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams RsAllocationCubemapFace face, uint32_t w, uint32_t h, 250358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray const void *data, size_t sizeBytes, size_t stride); 251eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data3D)(const Context *rsc, const Allocation *alloc, 2523bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, 2533bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes, 2543bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams size_t stride); 255eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 256807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read1D)(const Context *rsc, const Allocation *alloc, 257099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray uint32_t xoff, uint32_t lod, size_t count, 258807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void *data, size_t sizeBytes); 259807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read2D)(const Context *rsc, const Allocation *alloc, 260807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams uint32_t xoff, uint32_t yoff, uint32_t lod, 261807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams RsAllocationCubemapFace face, uint32_t w, uint32_t h, 262358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray void *data, size_t sizeBytes, size_t stride); 263807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*read3D)(const Context *rsc, const Allocation *alloc, 2643bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, 2653bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes, 2663bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams size_t stride); 267807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams 268807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // Lock and unlock make a 1D region of memory available to the CPU 269807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // for direct access by pointer. Once unlock is called control is 270807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams // returned to the SOC driver. 271807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void * (*lock1D)(const Context *rsc, const Allocation *alloc); 272807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams void (*unlock1D)(const Context *rsc, const Allocation *alloc); 273807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams 27474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk // Allocation to allocation copies 27574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData1D)(const Context *rsc, 27674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 277099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray uint32_t dstXoff, uint32_t dstLod, size_t count, 27874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod); 27974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData2D)(const Context *rsc, 28074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 28174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod, 28274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h, 28374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, 28474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod, 28574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk RsAllocationCubemapFace srcFace); 28674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData3D)(const Context *rsc, 28774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 28874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff, 2893bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t dstLod, 29074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t w, uint32_t h, uint32_t d, 29174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, 29274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, 2933bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams uint32_t srcLod); 29474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 295cc8cea7477352898921044483a6c803e25d02665Miao Wang void (*elementData)(const Context *rsc, const Allocation *alloc, 296cc8cea7477352898921044483a6c803e25d02665Miao Wang uint32_t x, uint32_t y, uint32_t z, 297cc8cea7477352898921044483a6c803e25d02665Miao Wang const void *data, uint32_t elementOff, size_t sizeBytes); 298cc8cea7477352898921044483a6c803e25d02665Miao Wang void (*elementRead)(const Context *rsc, const Allocation *alloc, 299cc8cea7477352898921044483a6c803e25d02665Miao Wang uint32_t x, uint32_t y, uint32_t z, 300cc8cea7477352898921044483a6c803e25d02665Miao Wang void *data, uint32_t elementOff, size_t sizeBytes); 301eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 30261a4bb734b91ced09fbfee4214c6f253cb66e5f0Jason Sams void (*generateMipmaps)(const Context *rsc, const Allocation *alloc); 303a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 304a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Allocation *alloc, rs_allocation *obj); 305bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Sams 306bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Sams void (*adapterOffset)(const Context *rsc, const Allocation *alloc); 3078ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams 3088ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams void (*getPointer)(const Context *rsc, const Allocation *alloc, 3098ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams uint32_t lod, RsAllocationCubemapFace face, 3108ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams uint32_t z, uint32_t array); 31147a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#ifdef RS_COMPATIBILITY_LIB 31247a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang bool (*initStrided)(const Context *rsc, Allocation *alloc, bool forceZero, size_t requiredAlignment); 31347a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#endif 314eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams } allocation; 315eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 316eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams struct { 3178feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, const ProgramStore *ps); 3188feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*setActive)(const Context *rsc, const ProgramStore *ps); 3198feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*destroy)(const Context *rsc, const ProgramStore *ps); 3208feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams } store; 3218feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 322721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams struct { 323721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams bool (*init)(const Context *rsc, const ProgramRaster *ps); 324721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*setActive)(const Context *rsc, const ProgramRaster *ps); 325721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*destroy)(const Context *rsc, const ProgramRaster *ps); 326721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams } raster; 3278feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 328a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 329a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramVertex *pv, 330748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char* shader, size_t shaderLen, 331748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char** textureNames, size_t textureNamesCount, 332748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const size_t *textureNamesLength); 333a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramVertex *pv); 334a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramVertex *pv); 335a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } vertex; 336a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 337a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 338a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramFragment *pf, 339748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char* shader, size_t shaderLen, 340748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const char** textureNames, size_t textureNamesCount, 341748eb07e805b93c2bf79340d4937963ab739d17cAlex Sakhartchouk const size_t *textureNamesLength); 342a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramFragment *pf); 343a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramFragment *pf); 344a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } fragment; 345a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 346a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 347a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const Mesh *m); 348a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len); 349a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const Mesh *m); 350a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } mesh; 351bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 3527f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk struct { 3537f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk bool (*init)(const Context *rsc, const Sampler *m); 3547f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk void (*destroy)(const Context *rsc, const Sampler *m); 355a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Sampler *s, rs_sampler *obj); 3567f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk } sampler; 3577f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk 358da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk struct { 359da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk bool (*init)(const Context *rsc, const FBOCache *fb); 360da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*setActive)(const Context *rsc, const FBOCache *fb); 361da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*destroy)(const Context *rsc, const FBOCache *fb); 362da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk } framebuffer; 363da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk 364dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams struct { 3651ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni bool (*init)(const Context *rsc, ScriptGroupBase *sg); 366dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*setInput)(const Context *rsc, const ScriptGroup *sg, 367dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const ScriptKernelID *kid, Allocation *); 368dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*setOutput)(const Context *rsc, const ScriptGroup *sg, 369dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const ScriptKernelID *kid, Allocation *); 3701ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni void (*execute)(const Context *rsc, const ScriptGroupBase *sg); 3711ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni void (*destroy)(const Context *rsc, const ScriptGroupBase *sg); 372a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const ScriptGroup *sg, rs_script_group *obj); 373dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams } scriptgroup; 374dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 375a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams struct { 376a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams bool (*init)(const Context *rsc, const Type *m); 377a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*destroy)(const Context *rsc, const Type *m); 378a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Type *s, rs_type *obj); 379a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams } type; 380a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 381a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams struct { 382a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams bool (*init)(const Context *rsc, const Element *m); 383a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*destroy)(const Context *rsc, const Element *m); 384a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams void (*updateCachedObject)(const Context *rsc, const Element *s, rs_element *obj); 385a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams } element; 386a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 3879761c3fcb8cf2ce89a29cb9202e4282d94f33d9dJason Sams void (*finish)(const Context *rsc); 388bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} RsdHalFunctions; 389bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 390bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 3910ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsenum RsHalInitEnums { 3920ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_CORE_SHUTDOWN = 1, 3930ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_CORE_SET_PRIORITY = 2, 3940ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_CORE_ALLOC_RUNTIME_MEM = 3, 3950ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_CORE_FREE_RUNTIME_MEM = 4, 3960ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_CORE_FINISH = 5, 3970ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 3980ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INIT = 1000, 3990ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INIT_INTRINSIC = 1001, 4000ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_FUNCTION = 1002, 4010ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_ROOT = 1003, 4020ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_FOR_EACH = 1004, 4030ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_INIT = 1005, 4040ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_FREE_CHILDREN = 1006, 4050ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_SET_GLOBAL_VAR = 1007, 4060ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GET_GLOBAL_VAR = 1008, 4070ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_SET_GLOBAL_VAR_WITH_ELEMENT_DIM = 1009, 4080ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_SET_GLOBAL_BIND = 1010, 4090ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_SET_GLOBAL_OBJECT = 1011, 4100ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_DESTROY = 1012, 4110ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_INVOKE_FOR_EACH_MULTI = 1013, 4120ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_UPDATE_CACHED_OBJECT = 1014, 41314ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala RS_HAL_SCRIPT_INVOKE_REDUCE = 1015, 4140ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4150ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_INIT = 2000, 4160ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_INIT_ADAPTER = 2001, 4170ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_DESTROY = 2002, 4180ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_GET_GRALLOC_BITS = 2003, 4190ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_RESIZE = 2004, 4200ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_SYNC_ALL = 2005, 4210ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_MARK_DIRTY = 2006, 4220ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_SET_SURFACE = 2007, 4230ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_IO_SEND = 2008, 4240ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_IO_RECEIVE = 2009, 4250ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_DATA_1D = 2010, 4260ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_DATA_2D = 2011, 4270ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_DATA_3D = 2012, 4280ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_READ_1D = 2013, 4290ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_READ_2D = 2014, 4300ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_READ_3D = 2015, 4310ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_LOCK_1D = 2016, 4320ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_UNLOCK_1D = 2017, 4330ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_COPY_1D = 2018, 4340ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_COPY_2D = 2019, 4350ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_COPY_3D = 2020, 4360ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_ELEMENT_DATA = 2021, 4370ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_ELEMENT_READ = 2022, 4380ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_GENERATE_MIPMAPS = 2023, 4390ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_UPDATE_CACHED_OBJECT = 2024, 4400ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ALLOCATION_ADAPTER_OFFSET = 2025, 441f82b626e0479ce4a23ebff1fc088e073dcabaa30Jason Sams RS_HAL_ALLOCATION_INIT_OEM = 2026, 4428ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams RS_HAL_ALLOCATION_GET_POINTER = 2027, 44347a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#ifdef RS_COMPATIBILITY_LIB 44447a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang RS_HAL_ALLOCATION_INIT_STRIDED = 2999, 44547a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#endif 4460ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4470ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SAMPLER_INIT = 3000, 4480ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SAMPLER_DESTROY = 3001, 4490ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SAMPLER_UPDATE_CACHED_OBJECT = 3002, 4500ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4510ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_TYPE_INIT = 4000, 4520ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_TYPE_DESTROY = 4001, 4530ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_TYPE_UPDATE_CACHED_OBJECT = 4002, 4540ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4550ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ELEMENT_INIT = 5000, 4560ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ELEMENT_DESTROY = 5001, 4570ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_ELEMENT_UPDATE_CACHED_OBJECT = 5002, 4580ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4590ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_INIT = 6000, 4600ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_DESTROY = 6001, 4610ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_UPDATE_CACHED_OBJECT = 6002, 4620ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_SET_INPUT = 6003, 4630ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_SET_OUTPUT = 6004, 4640ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_SCRIPT_GROUP_EXECUTE = 6005, 4650ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4660ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4670ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4680ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_INIT = 100001, 4690ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_SHUTDOWN = 100002, 4700ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_SWAP = 100003, 4710ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_SET_SURFACE = 100004, 4720ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_RASTER_INIT = 101000, 4730ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_RASTER_SET_ACTIVE = 101001, 4740ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_RASTER_DESTROY = 101002, 4750ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_VERTEX_INIT = 102000, 4760ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_VERTEX_SET_ACTIVE = 102001, 4770ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_VERTEX_DESTROY = 102002, 4780ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FRAGMENT_INIT = 103000, 4790ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FRAGMENT_SET_ACTIVE = 103001, 4800ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FRAGMENT_DESTROY = 103002, 4810ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_MESH_INIT = 104000, 4820ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_MESH_DRAW = 104001, 4830ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_MESH_DESTROY = 104002, 4840ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FB_INIT = 105000, 4850ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FB_SET_ACTIVE = 105001, 4860ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_FB_DESTROY = 105002, 4870ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_STORE_INIT = 106000, 4880ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_STORE_SET_ACTIVE = 106001, 4890ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams RS_HAL_GRAPHICS_STORE_DESTROY = 106002, 4900ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams}; 4910ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 4927974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace renderscript 4937974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace android 494bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 495414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#ifdef __cplusplus 496414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesextern "C" { 497414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#endif 498414a46166126da6864258bd25ff183f9a3c6261dStephen Hines 4990ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams/** 5000ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * Get the major version number of the driver. The major 5018e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * version should be the RS_HAL_VERSION against which the 5028e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * driver was built 5030ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 5040ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * The Minor version number is vendor specific 5050ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 5068e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * The caller should ensure that *version_major is the same as 5078e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * RS_HAL_VERSION -- i.e., that the driver (e.g., libRSDriver) 5088e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * is compatible with the shell (i.e., libRS_internal) responsible 5098e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * for loading the driver 5108e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross * 5110ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * return: False will abort loading the driver, true indicates 5120ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * success 5130ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams */ 5140ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsbool rsdHalQueryVersion(uint32_t *version_major, uint32_t *version_minor); 5150ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 5160ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 5170ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams/** 5180ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * Get an entry point in the driver HAL 5190ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 5200ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * The driver should set the function pointer to its 5210ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * implementation of the function. If it does not have an entry 5220ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * for an enum, its should set the function pointer to NULL 5230ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 524b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * Returning NULL is expected in cases during development as new 525b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * entry points are added that a driver may not understand. If 526b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * the runtime receives a NULL it will decide if the function is 527b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * required and will either continue loading or abort as needed. 528b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * 529b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * 5300ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * return: False will abort loading the driver, true indicates 5310ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * success 532b9276ce624182bb72ff18e430872be5c918ba7ceJason Sams * 5330ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams */ 5340ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsbool rsdHalQueryHal(android::renderscript::RsHalInitEnums entry, void **fnPtr); 5350ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 5360ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 5370ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams/** 5380ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * Called to initialize the context for use with a driver. 5390ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * 5400ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * return: False will abort loading the driver, true indicates 5410ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * success 5420ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams */ 543414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesbool rsdHalInit(RsContext, uint32_t version_major, uint32_t version_minor); 544bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 5450ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams/** 5460ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * Called if one of the loading functions above returns false. 5470ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * This is to clean up any resources allocated during an error 5480ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * condition. If this path is called it means the normal 5490ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams * context->mHal.funcs.shutdown() will not be called. 5500ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams */ 5510ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsvoid rsdHalAbort(RsContext); 5520ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 553414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#ifdef __cplusplus 554414a46166126da6864258bd25ff183f9a3c6261dStephen Hines} 555414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#endif 556bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 557bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif 558