rs_hal.h revision 8feea4e0dec48ea03bd6d32706d058b86dddc5ba
125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams/* 26a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye * Copyright (C) 2011 The Android Open Source Project 325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * 425430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * you may not use this file except in compliance with the License. 625430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * You may obtain a copy of the License at 725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * 825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * http://www.apache.org/licenses/LICENSE-2.0 925430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * 1025430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * Unless required by applicable law or agreed to in writing, software 1125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * See the License for the specific language governing permissions and 1425430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * limitations under the License. 1525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams */ 1625430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams 1725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams#ifndef RS_HAL_H 1825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams#define RS_HAL_H 1925430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams 209c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines#include <RenderScriptDefines.h> 21c11e25c4e653124def1fb18e203b894f42106cbeTim Murray 2225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Samsnamespace android { 236a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayenamespace renderscript { 246a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 256a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayeclass Context; 26a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Samsclass ObjectBase; 276a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayeclass Element; 286a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayeclass Type; 296a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayeclass Allocation; 30a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Samsclass Script; 3125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Samsclass ScriptC; 3225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Samsclass ProgramStore; 336a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 346a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayetypedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName); 356a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 366cc888e77e17ac522f75bf61403307de8ace2ef3Jason Samstypedef struct ScriptTLSStructRec { 376cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams Context * mContext; 386a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye Script * mScript; 396a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye} ScriptTLSStruct; 406a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 416a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 4225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams/** 436a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye * Script management functions 446a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye */ 456a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayetypedef struct { 466a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*shutdownDriver)(Context *); 476a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*getVersion)(unsigned int *major, unsigned int *minor); 4825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams void (*setPriority)(const Context *, int32_t priority); 496a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 506a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 516a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 526a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye struct { 536a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye bool (*init)(const Context *rsc, ScriptC *s, 546a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye char const *resName, 556a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye char const *cacheDir, 566a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye uint8_t const *bitcode, 576a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye size_t bitcodeSize, 5825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams uint32_t flags, 596a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye RsHalSymbolLookupFunc lookupFunc); 606a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 616a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*invokeFunction)(const Context *rsc, Script *s, 626a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye uint32_t slot, 636a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye const void *params, 646a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye size_t paramLength); 656a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye int (*invokeRoot)(const Context *rsc, Script *s); 666a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*invokeForEach)(const Context *rsc, 676a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye Script *s, 686a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye const Allocation * ain, 696a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye Allocation * aout, 7025430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams const void * usr, 716a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye uint32_t usrLen, 726a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye const RsScriptCall *sc); 736a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*invokeInit)(const Context *rsc, Script *s); 746a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 756a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*setGlobalVar)(const Context *rsc, const Script *s, 766a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye uint32_t slot, 776a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void *data, 786a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye size_t dataLength); 796a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*setGlobalBind)(const Context *rsc, const Script *s, 806a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye uint32_t slot, 816a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void *data); 826a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*setGlobalObj)(const Context *rsc, const Script *s, 836a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye uint32_t slot, 846a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye ObjectBase *data); 856a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 866a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*destroy)(const Context *rsc, Script *s); 876a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye } script; 886a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 896a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 906a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye struct { 916a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye bool (*init)(const Context *rsc, const ProgramStore *ps); 926a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*setActive)(const Context *rsc, const ProgramStore *ps); 936a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye void (*destroy)(const Context *rsc, const ProgramStore *ps); 946a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye } store; 956a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 966a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 976a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 986a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye} RsdHalFunctions; 996a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 1006a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayevoid rsiSetObject(ObjectBase **vdst, ObjectBase * vsrc); 1016a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayevoid rsiClearObject(ObjectBase **vdst); 1026a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayebool rsiIsObject(const ObjectBase *vdst); 1036a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 1046a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye} 1056a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye} 1066a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 1076a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 1086a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahayebool rsdHalInit(android::renderscript::Context *, uint32_t version_major, uint32_t version_minor); 1096a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 1106a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye#endif 1116a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye 1126a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye