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