19d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian/* 29d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** Copyright 2009, The Android Open Source Project 39d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** 49d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** Licensed under the Apache License, Version 2.0 (the "License"); 59d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** you may not use this file except in compliance with the License. 69d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** You may obtain a copy of the License at 79d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** 89d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** http://www.apache.org/licenses/LICENSE-2.0 99d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** 109d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** Unless required by applicable law or agreed to in writing, software 119d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** distributed under the License is distributed on an "AS IS" BASIS, 129d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** See the License for the specific language governing permissions and 149d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ** limitations under the License. 159d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian */ 169d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 179d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#ifndef ANDROID_EGL_LOADER_H 189d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#define ANDROID_EGL_LOADER_H 199d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 209d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#include <ctype.h> 219d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#include <string.h> 229d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#include <errno.h> 239d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 249d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#include <utils/Errors.h> 259d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#include <utils/Singleton.h> 269d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#include <utils/String8.h> 279d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#include <utils/Vector.h> 289d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 299d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#include <EGL/egl.h> 309d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 319d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian// ---------------------------------------------------------------------------- 329d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopiannamespace android { 339d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian// ---------------------------------------------------------------------------- 349d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 356fc569971faa342b2e2da46c55fbfbba3a2a7814Mathias Agopianstruct egl_connection_t; 369d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 379d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopianclass Loader : public Singleton<Loader> 389d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian{ 399d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian friend class Singleton<Loader>; 409d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 419d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian typedef __eglMustCastToProperFunctionPointerType (*getProcAddressType)( 429d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian const char*); 439d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 449d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian enum { 459d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian EGL = 0x01, 469d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian GLESv1_CM = 0x02, 479d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian GLESv2 = 0x04 489d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian }; 499d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian struct driver_t { 509d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian driver_t(void* gles); 519d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ~driver_t(); 529d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian status_t set(void* hnd, int32_t api); 539d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian void* dso[3]; 549d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian }; 559d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 569d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian struct entry_t { 579d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian entry_t() { } 589d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian entry_t(int dpy, int impl, const char* tag); 599d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian int dpy; 609d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian int impl; 619d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian String8 tag; 629d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian }; 639d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 649d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian Vector<entry_t> gConfig; 659d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian getProcAddressType getProcAddress; 669d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 679d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian const char* getTag(int dpy, int impl); 689d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 699d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopianpublic: 709d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian ~Loader(); 719d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 726fc569971faa342b2e2da46c55fbfbba3a2a7814Mathias Agopian void* open(EGLNativeDisplayType display, int impl, egl_connection_t* cnx); 739d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian status_t close(void* driver); 749d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 759d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopianprivate: 769d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian Loader(); 77a21c2009f1deceef0fd22a4134e35040a13fb039Brian Swetland void *load_driver(const char* kind, const char *tag, egl_connection_t* cnx, uint32_t mask); 789d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 799d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian static __attribute__((noinline)) 809d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian void init_api(void* dso, 819d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian char const * const * api, 829d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian __eglMustCastToProperFunctionPointerType* curr, 839d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian getProcAddressType getProcAddress); 849d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian}; 859d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 869d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian// ---------------------------------------------------------------------------- 879d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian}; // namespace android 889d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian// ---------------------------------------------------------------------------- 899d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian 909d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#endif /* ANDROID_EGL_LOADER_H */ 91