13df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni/*
23df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni * Copyright (C) 2016 The Android Open Source Project
33df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni *
43df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni * Licensed under the Apache License, Version 2.0 (the "License");
53df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni * you may not use this file except in compliance with the License.
63df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni * You may obtain a copy of the License at
73df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni *
83df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni *      http://www.apache.org/licenses/LICENSE-2.0
93df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni *
103df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni * Unless required by applicable law or agreed to in writing, software
113df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni * distributed under the License is distributed on an "AS IS" BASIS,
123df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni * See the License for the specific language governing permissions and
143df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni * limitations under the License.
153df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni */
163df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni
173df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni#include "rsDevice.h"
183df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni#include "rsContext.h"
193df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni#include "rsThreadIO.h"
203df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni#include "rsgApiStructs.h"
213df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni#include "rsgApiFuncDecl.h"
223df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni#include "rsFifo.h"
233df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni
2411496ac131bb691edf5bdcab3029dceef5c1e4e1Chih-Hung Hsiehusing android::renderscript::Context;
2511496ac131bb691edf5bdcab3029dceef5c1e4e1Chih-Hung Hsiehusing android::renderscript::Device;
2611496ac131bb691edf5bdcab3029dceef5c1e4e1Chih-Hung Hsiehusing android::renderscript::ObjectBase;
273df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni
285fccd07875424d16622e535c3931601d1aac944cMiao Wangextern "C" RsContext rsContextCreateVendor(RsDevice vdev, uint32_t version, uint32_t sdkVersion,
295fccd07875424d16622e535c3931601d1aac944cMiao Wang                                           RsContextType ct, uint32_t flags,
305fccd07875424d16622e535c3931601d1aac944cMiao Wang                                           const char* vendorDriverName) {
313df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    Device * dev = static_cast<Device *>(vdev);
325fccd07875424d16622e535c3931601d1aac944cMiao Wang    Context *rsc = Context::createContext(dev, nullptr, ct, flags, vendorDriverName);
333df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    if (rsc) {
343df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni        rsc->setTargetSdkVersion(sdkVersion);
353df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    }
363df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    return rsc;
373df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni}
383df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni
395fccd07875424d16622e535c3931601d1aac944cMiao Wangextern "C" RsContext rsContextCreate(RsDevice vdev, uint32_t version, uint32_t sdkVersion,
405fccd07875424d16622e535c3931601d1aac944cMiao Wang                                      RsContextType ct, uint32_t flags) {
415fccd07875424d16622e535c3931601d1aac944cMiao Wang    return rsContextCreateVendor(vdev, version, sdkVersion, ct, flags, nullptr);
425fccd07875424d16622e535c3931601d1aac944cMiao Wang}
435fccd07875424d16622e535c3931601d1aac944cMiao Wang
443df9bb0bd784bd9d01653de4de13af0982528a44Yang Niextern "C" void rsaContextSetNativeLibDir(RsContext con, char *libDir, size_t length) {
453df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni#ifdef RS_COMPATIBILITY_LIB
463df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    Context *rsc = static_cast<Context *>(con);
473df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    rsc->setNativeLibDir(libDir, length);
483df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni#endif
493df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni}
503df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni
51dd4c8f195233eeebc55c94da082da17973e6ca61Miao Wang// TODO: Figure out better naming schemes for all the rs* functions.
52dd4c8f195233eeebc55c94da082da17973e6ca61Miao Wang// Currently they share the same names as the NDK counterparts, and that is
53dd4c8f195233eeebc55c94da082da17973e6ca61Miao Wang// causing lots of confusion.
5459f6142d7657e43b4d21e077a28387431db02edfMiao Wang#if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB)
55dd4c8f195233eeebc55c94da082da17973e6ca61Miao Wangextern "C" RsContext rsContextCreateGL(RsDevice vdev, uint32_t version,
56dd4c8f195233eeebc55c94da082da17973e6ca61Miao Wang                                       uint32_t sdkVersion, RsSurfaceConfig sc,
57dd4c8f195233eeebc55c94da082da17973e6ca61Miao Wang                                       uint32_t dpi) {
583df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    //ALOGV("rsContextCreateGL dev=%p", vdev);
593df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    Device * dev = static_cast<Device *>(vdev);
603df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    Context *rsc = Context::createContext(dev, &sc);
613df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    if (rsc) {
623df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni        rsc->setTargetSdkVersion(sdkVersion);
633df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni        rsc->setDPI(dpi);
643df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    }
653df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    //ALOGV("%p rsContextCreateGL ret", rsc);
663df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    return rsc;
673df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni}
683df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni#endif
693df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni
703df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni// Only to be called at a3d load time, before object is visible to user
713df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni// not thread safe
723df9bb0bd784bd9d01653de4de13af0982528a44Yang Niextern "C" void rsaGetName(RsContext con, void * obj, const char **name) {
733df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    ObjectBase *ob = static_cast<ObjectBase *>(obj);
743df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni    (*name) = ob->getName();
753df9bb0bd784bd9d01653de4de13af0982528a44Yang Ni}
76