/**
 * The bootstrap function.  Return a new drm_driver object and
 * plug in API functions.
 * libEGL finds this function with dlopen()/dlsym() and calls it from
 * "load driver" function.
 */
_EGLDriver *
_eglMain(const char *args)
{
	_EGLDriver *drv;

	drv = (_EGLDriver *) calloc(1, sizeof(_EGLDriver));
	if (!drv) {
		return NULL;
	}

	/* First fill in the dispatch table with defaults */
	_eglInitDriverFallbacks(drv);
	/* then plug in our Drm-specific functions */
	drv->API.Initialize = drm_initialize;
	drv->API.Terminate = drm_terminate;
	drv->API.CreateContext = drm_create_context;
	drv->API.MakeCurrent = drm_make_current;
	drv->API.CreateWindowSurface = drm_create_window_surface;
	drv->API.CreatePixmapSurface = drm_create_pixmap_surface;
	drv->API.CreatePbufferSurface = drm_create_pbuffer_surface;
	drv->API.DestroySurface = drm_destroy_surface;
	drv->API.DestroyContext = drm_destroy_context;
	drv->API.CreateScreenSurfaceMESA = drm_create_screen_surface_mesa;
	drv->API.ShowScreenSurfaceMESA = drm_show_screen_surface_mesa;
	drv->API.SwapBuffers = drm_swap_buffers;

	drv->Name = "DRM/Gallium/Win";
	drv->Unload = drm_unload;

	return drv;
}
/**
 * The bootstrap function.  Return a new fbDriver object and
 * plug in API functions.
 */
_EGLDriver *
_eglMain(_EGLDisplay *dpy)
{
   fbDriver *fb;

   fb = (fbDriver *) calloc(1, sizeof(fbDriver));
   if (!fb) {
      return NULL;
   }

   /* First fill in the dispatch table with defaults */
   _eglInitDriverFallbacks(&fb->Base);
   
   /* then plug in our fb-specific functions */
   fb->Base.Initialize = fbInitialize;
   fb->Base.Terminate = fbTerminate;
   fb->Base.CreateContext = fbCreateContext;
   fb->Base.MakeCurrent = fbMakeCurrent;
   fb->Base.CreateWindowSurface = fbCreateWindowSurface;
   fb->Base.CreatePixmapSurface = fbCreatePixmapSurface;
   fb->Base.CreatePbufferSurface = fbCreatePbufferSurface;
   fb->Base.DestroySurface = fbDestroySurface;
   fb->Base.DestroyContext = fbDestroyContext;
   fb->Base.CreateScreenSurfaceMESA = fbCreateScreenSurfaceMESA;
   fb->Base.ShowSurfaceMESA = fbShowSurfaceMESA;
   fb->Base.SwapBuffers = fbSwapBuffers;
   
   /* enable supported extensions */
   fb->Base.MESA_screen_surface = EGL_TRUE;
   fb->Base.MESA_copy_context = EGL_TRUE;

   return &fb->Base;
}
Exemple #3
0
/**
 * This is the main entrypoint into the driver, called by libEGL.
 * Create a new _EGLDriver object and init its dispatch table.
 */
_EGLDriver *
_eglMain(const char *args)
{
   struct xdri_egl_driver *xdri_drv = CALLOC_STRUCT(xdri_egl_driver);
   if (!xdri_drv)
      return NULL;

   _eglInitDriverFallbacks(&xdri_drv->Base);
   xdri_drv->Base.API.Initialize = xdri_eglInitialize;
   xdri_drv->Base.API.Terminate = xdri_eglTerminate;

   xdri_drv->Base.API.GetProcAddress = xdri_eglGetProcAddress;

   xdri_drv->Base.API.CreateContext = xdri_eglCreateContext;
   xdri_drv->Base.API.DestroyContext = xdri_eglDestroyContext;
   xdri_drv->Base.API.MakeCurrent = xdri_eglMakeCurrent;
   xdri_drv->Base.API.CreateWindowSurface = xdri_eglCreateWindowSurface;
   xdri_drv->Base.API.CreatePbufferSurface = xdri_eglCreatePbufferSurface;
   xdri_drv->Base.API.DestroySurface = xdri_eglDestroySurface;
   xdri_drv->Base.API.BindTexImage = xdri_eglBindTexImage;
   xdri_drv->Base.API.ReleaseTexImage = xdri_eglReleaseTexImage;
   xdri_drv->Base.API.SwapBuffers = xdri_eglSwapBuffers;

   xdri_drv->Base.Name = "X/DRI";
   xdri_drv->Base.Unload = xdri_Unload;

   return &xdri_drv->Base;
}
void
egl_g3d_init_driver_api(_EGLDriver *drv)
{
   _eglInitDriverFallbacks(drv);

   drv->API.ChooseConfig = egl_g3d_choose_config;

   drv->API.CreateContext = egl_g3d_create_context;
   drv->API.DestroyContext = egl_g3d_destroy_context;
   drv->API.CreateWindowSurface = egl_g3d_create_window_surface;
   drv->API.CreatePixmapSurface = egl_g3d_create_pixmap_surface;
   drv->API.CreatePbufferSurface = egl_g3d_create_pbuffer_surface;
   drv->API.CreatePbufferFromClientBuffer = egl_g3d_create_pbuffer_from_client_buffer;
   drv->API.DestroySurface = egl_g3d_destroy_surface;
   drv->API.MakeCurrent = egl_g3d_make_current;
   drv->API.SwapBuffers = egl_g3d_swap_buffers;
   drv->API.CopyBuffers = egl_g3d_copy_buffers;
   drv->API.WaitClient = egl_g3d_wait_client;
   drv->API.WaitNative = egl_g3d_wait_native;

   drv->API.BindTexImage = egl_g3d_bind_tex_image;
   drv->API.ReleaseTexImage = egl_g3d_release_tex_image;

   drv->API.CreateImageKHR = egl_g3d_create_image;
   drv->API.DestroyImageKHR = egl_g3d_destroy_image;
#ifdef EGL_MESA_drm_image
   drv->API.CreateDRMImageMESA = egl_g3d_create_drm_image;
   drv->API.ExportDRMImageMESA = egl_g3d_export_drm_image;
#endif
#ifdef EGL_WL_bind_wayland_display
   drv->API.BindWaylandDisplayWL = egl_g3d_bind_wayland_display_wl;
   drv->API.UnbindWaylandDisplayWL = egl_g3d_unbind_wayland_display_wl;
   drv->API.QueryWaylandBufferWL = egl_g3d_query_wayland_buffer_wl;
#endif

   drv->API.CreateSyncKHR = egl_g3d_create_sync;
   drv->API.DestroySyncKHR = egl_g3d_destroy_sync;
   drv->API.ClientWaitSyncKHR = egl_g3d_client_wait_sync;
   drv->API.SignalSyncKHR = egl_g3d_signal_sync;

#ifdef EGL_MESA_screen_surface
   drv->API.CreateScreenSurfaceMESA = egl_g3d_create_screen_surface;
   drv->API.ShowScreenSurfaceMESA = egl_g3d_show_screen_surface;
#endif

#ifdef EGL_NOK_swap_region
   drv->API.SwapBuffersRegionNOK = egl_g3d_swap_buffers_region;
#endif

   drv->API.PostSubBufferNV = egl_g3d_post_sub_buffer;
}
Exemple #5
0
_EGLDriver*
_eglBuiltInDriverHaiku(const char *args)
{
	_eglLog(_EGL_DEBUG,"Driver loaded");
	struct haiku_egl_driver* driver;
	driver=(struct haiku_egl_driver*)calloc(1,sizeof(*driver));
	_eglInitDriverFallbacks(&driver->base);
	driver->base.API.Initialize = init_haiku;
	driver->base.API.Terminate = haiku_terminate;
	driver->base.API.CreateContext = haiku_create_context;
	driver->base.API.DestroyContext = haiku_destroy_context;
	driver->base.API.MakeCurrent = haiku_make_current;
	driver->base.API.CreateWindowSurface = haiku_create_window_surface;
	driver->base.API.CreatePixmapSurface = haiku_create_pixmap_surface;
	driver->base.API.CreatePbufferSurface = haiku_create_pbuffer_surface;
	driver->base.API.DestroySurface = haiku_destroy_surface;
	/*
	driver->API.GetProcAddress = dri2_get_proc_address;
	driver->API.WaitClient = dri2_wait_client;
	driver->API.WaitNative = dri2_wait_native;
	driver->API.BindTexImage = dri2_bind_tex_image;
	driver->API.ReleaseTexImage = dri2_release_tex_image;
	driver->API.SwapInterval = dri2_swap_interval;
	*/

	driver->base.API.SwapBuffers = haiku_swap_buffers;
	/*
	driver->API.SwapBuffersWithDamageEXT = dri2_swap_buffers_with_damage;
	driver->API.SwapBuffersRegionNOK = dri2_swap_buffers_region;
	driver->API.PostSubBufferNV = dri2_post_sub_buffer;
	driver->API.CopyBuffers = dri2_copy_buffers,
	driver->API.QueryBufferAge = dri2_query_buffer_age;
	driver->API.CreateImageKHR = dri2_create_image;
	driver->API.DestroyImageKHR = dri2_destroy_image_khr;
	driver->API.CreateWaylandBufferFromImageWL = dri2_create_wayland_buffer_from_image;
	driver->API.GetSyncValuesCHROMIUM = dri2_get_sync_values_chromium;
	*/

	driver->base.Name = "Haiku";
	driver->base.Unload = haiku_unload;

	_eglLog(_EGL_DEBUG, "API Calls defined");
	
	return &driver->base;
}
Exemple #6
0
/**
 * This is the main entrypoint into the driver.
 * Called by libEGL to instantiate an _EGLDriver object.
 */
_EGLDriver *
_eglMain(_EGLDisplay *dpy, const char *args)
{
   struct xlib_egl_driver *xdrv;

   _eglLog(_EGL_INFO, "Entering EGL/Xlib _eglMain(%s)", args);

   xdrv = CALLOC_STRUCT(xlib_egl_driver);
   if (!xdrv)
      return NULL;

   if (!dpy->Xdpy) {
      dpy->Xdpy = XOpenDisplay(NULL);
   }

   _eglInitDriverFallbacks(&xdrv->Base);
   xdrv->Base.API.Initialize = xlib_eglInitialize;
   xdrv->Base.API.Terminate = xlib_eglTerminate;
   xdrv->Base.API.GetProcAddress = xlib_eglGetProcAddress;
   xdrv->Base.API.CreateContext = xlib_eglCreateContext;
   xdrv->Base.API.DestroyContext = xlib_eglDestroyContext;
   xdrv->Base.API.CreateWindowSurface = xlib_eglCreateWindowSurface;
   xdrv->Base.API.DestroySurface = xlib_eglDestroySurface;
   xdrv->Base.API.MakeCurrent = xlib_eglMakeCurrent;
   xdrv->Base.API.SwapBuffers = xlib_eglSwapBuffers;

   xdrv->Base.ClientAPIsMask = find_supported_apis();
   if (xdrv->Base.ClientAPIsMask == 0x0) {
      /* the app isn't directly linked with any EGL-supprted APIs
       * (such as libGLESv2.so) so use an EGL utility to see what
       * APIs might be loaded dynamically on this system.
       */
      xdrv->Base.ClientAPIsMask = _eglFindAPIs();
   }      

   xdrv->Base.Name = "Xlib/softpipe";

   /* create one winsys and use it for all contexts/surfaces */
   xdrv->winsys = create_sw_winsys();
   xdrv->winsys->flush_frontbuffer = flush_frontbuffer;

   xdrv->screen = softpipe_create_screen(xdrv->winsys);

   return &xdrv->Base;
}
Exemple #7
0
/**
 * This is the main entrypoint into the driver, called by egl dispatch API.
 * Create a new _EGLDriver object and init its dispatch table.
 */
_EGLDriver* _eglMain(const char *args)
{
   _EGLDriverPPAPI *drv = (_EGLDriverPPAPI *)
       calloc(1, sizeof(_EGLDriverPPAPI));

   if (!drv)
      return NULL;

   _eglInitDriverFallbacks(&drv->Base);
   drv->Base.API.Initialize = _eglInitializePPAPI;
   drv->Base.API.Terminate = _eglTerminatePPAPI;
   drv->Base.API.CreateContext = _eglCreateContextPPAPI;
   drv->Base.API.DestroyContext = _eglDestroyContextPPAPI;
   drv->Base.API.CreateWindowSurface = _eglCreateWindowSurfacePPAPI;
   drv->Base.API.CreatePbufferSurface = _eglCreatePbufferSurfacePPAPI;
   drv->Base.API.DestroySurface = _eglDestroySurfacePPAPI;
   drv->Base.API.SwapBuffers = _eglSwapBuffersPPAPI;

   drv->Base.Name = "PPAPI";
   drv->Base.Unload = _unloadPPAPI;

   return &drv->Base;
}