eglapi.c revision 1c606a9aa1d1fa79fe5c92f42651385917322d5f
1adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 2adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Public EGL API entrypoints 3adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 4adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Generally, we use the EGLDisplay parameter as a key to lookup the 5adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * appropriate device driver handle, then jump though the driver's 6adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * dispatch table to handle the function. 7adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 8adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * That allows us the option of supporting multiple, simultaneous, 9adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * heterogeneous hardware devices in the future. 10adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 11adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * The EGLDisplay, EGLConfig, EGLContext and EGLSurface types are 12adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * opaque handles implemented with 32-bit unsigned integers. 13adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * It's up to the driver function or fallback function to look up the 14adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * handle and get an object. 15adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * By using opaque handles, we leave open the possibility of having 16adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * indirect rendering in the future, like GLX. 17adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 18adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 19adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Notes on naming conventions: 20adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 21adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * eglFooBar - public EGL function 22adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_FOO_BAR - public EGL token 23adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGLDatatype - public EGL datatype 24adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 25adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _eglFooBar - private EGL function 26adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _EGLDatatype - private EGL datatype, typedef'd struct 27adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _egl_struct - private EGL struct, non-typedef'd 28adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 29adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 30adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 31adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 32adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 33adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include <stdio.h> 34adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include <string.h> 35adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/**#include "glapi.h"**/ 36adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglcontext.h" 37adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldisplay.h" 38adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 39adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglglobals.h" 40adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldriver.h" 41adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglsurface.h" 42adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 43adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 44adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 45adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 46adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * NOTE: displayName is treated as a string in _eglChooseDriver()!!! 47adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * This will probably change! 48adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * See _eglChooseDriver() for details! 49adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 50adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLDisplay APIENTRY 51adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetDisplay(NativeDisplayType displayName) 52adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 53adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *dpy; 54adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _eglInitGlobals(); 55adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul dpy = _eglNewDisplay(displayName); 56adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (dpy) 57adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return dpy->Handle; 58adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 59adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_NO_DISPLAY; 60adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 61adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 64adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 65adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 66adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (dpy) { 67adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglChooseDriver(dpy); 68adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 69adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->Initialize(drv, dpy, major, minor); 70adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 71adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 72adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 74adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 75adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 76adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy) 77adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 78adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 79adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 80adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return _eglCloseDriver(drv, dpy); 81adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 82adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 83adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 84adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 85adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 86adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulconst char * APIENTRY 87adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name) 88adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 89adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 90adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 91adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->QueryString(drv, dpy, name); 92adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 93adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return NULL; 94adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 95adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 96adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 97adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 98adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config) 99adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 100adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 101adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* XXX check drv for null in remaining functions */ 102adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->GetConfigs(drv, dpy, configs, config_size, num_config); 103adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 104adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 105adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 106adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 107adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config) 108adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 109adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 110adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->ChooseConfig(drv, dpy, attrib_list, configs, config_size, num_config); 111adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 112adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 113adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 114adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 115adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value) 116adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 117adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 118adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->GetConfigAttrib(drv, dpy, config, attribute, value); 119adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 120adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 121adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 122adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLContext APIENTRY 123adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, const EGLint *attrib_list) 124adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 125adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 126adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->CreateContext(drv, dpy, config, share_list, attrib_list); 127adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 128adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 129adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 130adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 131adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx) 132adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 133adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 134adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->DestroyContext(drv, dpy, ctx); 135adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 136adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 137adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 138adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 139adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx) 140adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 141adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 142adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->MakeCurrent(drv, dpy, draw, read, ctx); 143adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 144adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 145adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 146adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 147adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value) 148adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 149adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 150adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->QueryContext(drv, dpy, ctx, attribute, value); 151adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 152adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 153adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 154adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLSurface APIENTRY 155adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, NativeWindowType window, const EGLint *attrib_list) 156adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 157adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 158adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->CreateWindowSurface(drv, dpy, config, window, attrib_list); 159adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 160adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 161adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 162adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLSurface APIENTRY 163adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, NativePixmapType pixmap, const EGLint *attrib_list) 164adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 165adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 166adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->CreatePixmapSurface(drv, dpy, config, pixmap, attrib_list); 167adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 168adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 169adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 170adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLSurface APIENTRY 171adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list) 172adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 173adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 174adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->CreatePbufferSurface(drv, dpy, config, attrib_list); 175adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 176adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 177adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 178adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 179adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface) 180adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 181adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 182adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->DestroySurface(drv, dpy, surface); 183adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 184adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 185adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 186adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 187adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value) 188adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 189adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 190adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->QuerySurface(drv, dpy, surface, attribute, value); 191adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 192adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 193adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 194adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 195adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value) 196adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 197adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 198adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->SurfaceAttrib(drv, dpy, surface, attribute, value); 199adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 200adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 201adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 202adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 203adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 204adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 205adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 206adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->BindTexImage(drv, dpy, surface, buffer); 207adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 208adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 209adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 210adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 211adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 212adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 213adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 214adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->ReleaseTexImage(drv, dpy, surface, buffer); 215adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 216adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 217adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 218adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 219adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval) 220adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 221adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 222adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->SwapInterval(drv, dpy, interval); 223adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 224adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 225adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 226adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 227adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapBuffers(EGLDisplay dpy, EGLSurface draw) 228adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 229adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 230adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->SwapBuffers(drv, dpy, draw); 231adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 232adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 233adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 234adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 235adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCopyBuffers(EGLDisplay dpy, EGLSurface surface, NativePixmapType target) 236adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 237adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 238adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->CopyBuffers(drv, dpy, surface, target); 239adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 240adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 241adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 242adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 243adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitGL(void) 244adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 245adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLDisplay dpy = eglGetCurrentDisplay(); 246adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (dpy != EGL_NO_DISPLAY) { 247adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 248adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->WaitGL(drv, dpy); 249adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 250adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 251adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 252adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 253adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 254adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 255adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 256adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine) 257adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 258adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLDisplay dpy = eglGetCurrentDisplay(); 259adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (dpy != EGL_NO_DISPLAY) { 260adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 261adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->WaitNative(drv, dpy, engine); 262adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 263adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 264adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 265adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 266adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 267adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 268adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLDisplay APIENTRY 269adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void) 270adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 271adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *dpy = _eglGetCurrentDisplay(); 272adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (dpy) 273adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return dpy->Handle; 274adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 275adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_NO_DISPLAY; 276adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 277adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 278adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 279adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLContext APIENTRY 280adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void) 281adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 282adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 283adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (ctx) 284adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return ctx->Handle; 285adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 286adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_NO_CONTEXT; 287adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 288adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 289adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 290adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLSurface APIENTRY 291adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw) 292adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 293adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLSurface *s = _eglGetCurrentSurface(readdraw); 294adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (s) 295adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return s->Handle; 296adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 297adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_NO_SURFACE; 298adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 299adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 300adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 301adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLint APIENTRY 302adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void) 303adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 304adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint e = _eglGlobal.LastError; 305adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _eglGlobal.LastError = EGL_SUCCESS; 306adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return e; 307adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 308adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 309adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 310adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulvoid (* APIENTRY eglGetProcAddress(const char *procname))() 311adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul typedef void (*genericFunc)(); 313adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul struct name_function { 314adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const char *name; 315adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLProc function; 316adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 317adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul static struct name_function egl_functions[] = { 318adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* alphabetical order */ 319adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglBindTexImage", (_EGLProc) eglBindTexImage }, 320adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglChooseConfig", (_EGLProc) eglChooseConfig }, 321adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCopyBuffers", (_EGLProc) eglCopyBuffers }, 322adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreateContext", (_EGLProc) eglCreateContext }, 323adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface }, 324adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface }, 325adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface }, 326adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglDestroyContext", (_EGLProc) eglDestroyContext }, 327adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglDestroySurface", (_EGLProc) eglDestroySurface }, 328adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib }, 329adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetConfigs", (_EGLProc) eglGetConfigs }, 330adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext }, 331adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay }, 332adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface }, 333adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetDisplay", (_EGLProc) eglGetDisplay }, 334adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetError", (_EGLProc) eglGetError }, 335adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetProcAddress", (_EGLProc) eglGetProcAddress }, 336adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglInitialize", (_EGLProc) eglInitialize }, 337adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglMakeCurrent", (_EGLProc) eglMakeCurrent }, 338adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQueryContext", (_EGLProc) eglQueryContext }, 339adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQueryString", (_EGLProc) eglQueryString }, 340adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQuerySurface", (_EGLProc) eglQuerySurface }, 341adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage }, 342adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib }, 343adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglSwapBuffers", (_EGLProc) eglSwapBuffers }, 344adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglSwapInterval", (_EGLProc) eglSwapInterval }, 345adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglTerminate", (_EGLProc) eglTerminate }, 346adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglWaitGL", (_EGLProc) eglWaitGL }, 347adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglWaitNative", (_EGLProc) eglWaitNative }, 348adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* Extensions */ 3497012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 3507012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 3517012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 3521c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 3537012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 3547012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 3557012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglShowSurfaceMESA", (_EGLProc) eglShowSurfaceMESA }, 3567012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 3577012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryDisplayMESA", (_EGLProc) eglQueryDisplayMESA }, 3587012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 3597012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 3607012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 3617012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 362adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { NULL, NULL } 363adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 364adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint i; 365adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul for (i = 0; egl_functions[i].name; i++) { 366adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (strcmp(egl_functions[i].name, procname) == 0) { 367adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return (genericFunc) egl_functions[i].function; 368adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 369adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 370adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#if 0 371adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* XXX enable this code someday */ 372adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return (genericFunc) _glapi_get_proc_address(procname); 373adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#else 374adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return NULL; 375adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif 376adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 377adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 378adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 379adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* 380adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension 381adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 382adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 383adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 384c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 385adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const EGLint *attrib_list, EGLModeMESA *modes, 386adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint modes_size, EGLint *num_modes) 387adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 388adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 389adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 390c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul return drv->ChooseModeMESA(drv, dpy, screen, attrib_list, modes, modes_size, num_modes); 391adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 392adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 393adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 394adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 395adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 396adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 397c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, EGLint mode_size, EGLint *num_mode) 398adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 399adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 400adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 401c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul return drv->GetModesMESA(drv, dpy, screen, modes, mode_size, num_mode); 402adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 403adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 404adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 405adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 406adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 407adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY 408adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, EGLint attribute, EGLint *value) 409adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 410adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 411adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 412adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return drv->GetModeAttribMESA(drv, dpy, mode, attribute, value); 413adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 414adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 415adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 416adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 417adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4181c606a9aa1d1fa79fe5c92f42651385917322d5fJon SmirlEGLBoolean APIENTRY 4191c606a9aa1d1fa79fe5c92f42651385917322d5fJon SmirleglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, unsigned long mask) 4201c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl{ 4211c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 4221c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl if (drv) 4231c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl return drv->CopyContextMESA(drv, dpy, source, dest, mask); 4241c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl else 4251c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl return EGL_FALSE; 4261c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl} 4271c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 4281c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 429adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 430c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, EGLint max_screens, EGLint *num_screens) 431adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 432c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 433c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul if (drv) 434c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul return drv->GetScreensMESA(drv, dpy, screens, max_screens, num_screens); 435c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul else 436c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul return EGL_FALSE; 437adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 438adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 439adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 440c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PaulEGLSurface 441c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list) 442adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4437012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 4447012d01d888d482f2c6ad1180231a482026d213aJon Smirl return drv->CreateScreenSurfaceMESA(drv, dpy, config, attrib_list); 445adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 446adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 447adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 448adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 4497012d01d888d482f2c6ad1180231a482026d213aJon SmirleglShowSurfaceMESA(EGLDisplay dpy, EGLint screen, EGLSurface surface, EGLModeMESA mode) 450adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4517012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 4527012d01d888d482f2c6ad1180231a482026d213aJon Smirl return drv->ShowSurfaceMESA(drv, dpy, screen, surface, mode); 453adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 454adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 455adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 456adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 4577012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 458adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4597012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 4607012d01d888d482f2c6ad1180231a482026d213aJon Smirl return drv->ScreenPositionMESA(drv, dpy, screen, x, y); 4617012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 4627012d01d888d482f2c6ad1180231a482026d213aJon Smirl 4637012d01d888d482f2c6ad1180231a482026d213aJon Smirl 4647012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean 4657012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryDisplayMESA(EGLDisplay dpy, EGLint attrib, EGLint *value) 4667012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 4677012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 4687012d01d888d482f2c6ad1180231a482026d213aJon Smirl return drv->QueryDisplayMESA(drv, dpy, attrib, value); 4697012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 4707012d01d888d482f2c6ad1180231a482026d213aJon Smirl 4717012d01d888d482f2c6ad1180231a482026d213aJon Smirl 4727012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean 4737012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenMESA( EGLDisplay dpy, EGLScreenMESA screen, EGLint attribute, EGLint *value) 4747012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 4757012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 4767012d01d888d482f2c6ad1180231a482026d213aJon Smirl return drv->QueryScreenMESA(drv, dpy, screen, attribute, value); 477adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 478adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 479adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 480adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 481c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLSurface *surface) 482adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4837012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 4847012d01d888d482f2c6ad1180231a482026d213aJon Smirl return drv->QueryScreenSurfaceMESA(drv, dpy, screen, surface); 485adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 486adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 487adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 488adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 4897012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 490adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4917012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 4927012d01d888d482f2c6ad1180231a482026d213aJon Smirl return drv->QueryScreenModeMESA(drv, dpy, screen, mode); 493adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 494adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 495adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4967012d01d888d482f2c6ad1180231a482026d213aJon Smirlconst char * 4977012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 4987012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 4997012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 5007012d01d888d482f2c6ad1180231a482026d213aJon Smirl return drv->QueryModeStringMESA(drv, dpy, mode); 5017012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 5027012d01d888d482f2c6ad1180231a482026d213aJon Smirl 5037012d01d888d482f2c6ad1180231a482026d213aJon Smirl 5047012d01d888d482f2c6ad1180231a482026d213aJon Smirl 5057012d01d888d482f2c6ad1180231a482026d213aJon Smirl 5067012d01d888d482f2c6ad1180231a482026d213aJon Smirl 507