Loader.h revision 993814255fc248454368ed9fe34b4703a05eaf99
1de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian/* 2de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** Copyright 2009, The Android Open Source Project 3de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** 4de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** Licensed under the Apache License, Version 2.0 (the "License"); 5de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** you may not use this file except in compliance with the License. 6de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** You may obtain a copy of the License at 7de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** 8de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** http://www.apache.org/licenses/LICENSE-2.0 9de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** 10de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** Unless required by applicable law or agreed to in writing, software 11de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** distributed under the License is distributed on an "AS IS" BASIS, 12de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** See the License for the specific language governing permissions and 14de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ** limitations under the License. 15de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian */ 16de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 17de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian#ifndef ANDROID_EGL_LOADER_H 18de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian#define ANDROID_EGL_LOADER_H 19de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 20de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian#include <ctype.h> 21de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian#include <string.h> 22de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian#include <errno.h> 23de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 24de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian#include <utils/Errors.h> 25de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian#include <utils/Singleton.h> 26de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian#include <utils/String8.h> 27de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 28de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian#include <EGL/egl.h> 29de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 30de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian// ---------------------------------------------------------------------------- 31de58697644a52a614ad9498aa087e95d4a223673Mathias Agopiannamespace android { 32de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian// ---------------------------------------------------------------------------- 33de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 34618fa10949c42eb83fa5fe105fe542bcff833ddaMathias Agopianstruct egl_connection_t; 35de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 36de58697644a52a614ad9498aa087e95d4a223673Mathias Agopianclass Loader : public Singleton<Loader> 37de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian{ 38de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian friend class Singleton<Loader>; 39de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 40de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian typedef __eglMustCastToProperFunctionPointerType (*getProcAddressType)( 41de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian const char*); 42de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 43de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian enum { 44de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian EGL = 0x01, 45de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian GLESv1_CM = 0x02, 46de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian GLESv2 = 0x04 47de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian }; 48de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian struct driver_t { 49de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian driver_t(void* gles); 50de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ~driver_t(); 51de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian status_t set(void* hnd, int32_t api); 52de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian void* dso[3]; 53de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian }; 54de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 55de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian getProcAddressType getProcAddress; 56de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 57de58697644a52a614ad9498aa087e95d4a223673Mathias Agopianpublic: 58de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian ~Loader(); 59de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 60ada798b7ca7cabc255aa159964b64975e7fdb2dfMathias Agopian void* open(egl_connection_t* cnx); 61de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian status_t close(void* driver); 62de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 63de58697644a52a614ad9498aa087e95d4a223673Mathias Agopianprivate: 64de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian Loader(); 65993814255fc248454368ed9fe34b4703a05eaf99Mathias Agopian void *load_driver(const char* kind, egl_connection_t* cnx, uint32_t mask); 66de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 67de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian static __attribute__((noinline)) 68de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian void init_api(void* dso, 69de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian char const * const * api, 70de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian __eglMustCastToProperFunctionPointerType* curr, 71de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian getProcAddressType getProcAddress); 72de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian}; 73de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 74de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian// ---------------------------------------------------------------------------- 75de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian}; // namespace android 76de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian// ---------------------------------------------------------------------------- 77de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian 78de58697644a52a614ad9498aa087e95d4a223673Mathias Agopian#endif /* ANDROID_EGL_LOADER_H */ 79