X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fegl%2Fdrivers%2Fdri2%2Fplatform_drm.c;h=a0760dfebbb0b81f4d11e4d0791bbc78ec295042;hb=HEAD;hp=551b939212539786ced19db872d200b7d10006db;hpb=075a96aa926e6e89795f95a6a59693f44d9ac970;p=mesa.git diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c index 551b9392125..a0760dfebbb 100644 --- a/src/egl/drivers/dri2/platform_drm.c +++ b/src/egl/drivers/dri2/platform_drm.c @@ -36,8 +36,9 @@ #include #include +#include "util/os_file.h" + #include "egl_dri2.h" -#include "egl_dri2_fallbacks.h" #include "loader.h" static struct gbm_bo * @@ -137,9 +138,8 @@ dri2_drm_config_is_compatible(struct dri2_egl_display *dri2_dpy, } static _EGLSurface * -dri2_drm_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, - _EGLConfig *conf, void *native_surface, - const EGLint *attrib_list) +dri2_drm_create_window_surface(_EGLDisplay *disp, _EGLConfig *conf, + void *native_surface, const EGLint *attrib_list) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_config *dri2_conf = dri2_egl_config(conf); @@ -148,8 +148,6 @@ dri2_drm_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, struct gbm_dri_surface *surf; const __DRIconfig *config; - (void) drv; - dri2_surf = calloc(1, sizeof *dri2_surf); if (!dri2_surf) { _eglError(EGL_BAD_ALLOC, "dri2_create_surface"); @@ -191,9 +189,8 @@ dri2_drm_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, } static _EGLSurface * -dri2_drm_create_pixmap_surface(_EGLDriver *drv, _EGLDisplay *disp, - _EGLConfig *conf, void *native_window, - const EGLint *attrib_list) +dri2_drm_create_pixmap_surface(_EGLDisplay *disp, _EGLConfig *conf, + void *native_window, const EGLint *attrib_list) { /* From the EGL_MESA_platform_gbm spec, version 5: * @@ -206,7 +203,7 @@ dri2_drm_create_pixmap_surface(_EGLDriver *drv, _EGLDisplay *disp, } static EGLBoolean -dri2_drm_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf) +dri2_drm_destroy_surface(_EGLDisplay *disp, _EGLSurface *surf) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); @@ -417,7 +414,7 @@ dri2_drm_flush_front_buffer(__DRIdrawable * driDrawable, void *loaderPrivate) } static EGLBoolean -dri2_drm_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw) +dri2_drm_swap_buffers(_EGLDisplay *disp, _EGLSurface *draw) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw); @@ -449,8 +446,7 @@ dri2_drm_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw) } static EGLint -dri2_drm_query_buffer_age(_EGLDriver *drv, - _EGLDisplay *disp, _EGLSurface *surface) +dri2_drm_query_buffer_age(_EGLDisplay *disp, _EGLSurface *surface) { struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surface); @@ -489,17 +485,14 @@ dri2_drm_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx, } static _EGLImage * -dri2_drm_create_image_khr(_EGLDriver *drv, _EGLDisplay *disp, - _EGLContext *ctx, EGLenum target, +dri2_drm_create_image_khr(_EGLDisplay *disp, _EGLContext *ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attr_list) { - (void) drv; - switch (target) { case EGL_NATIVE_PIXMAP_KHR: return dri2_drm_create_image_khr_pixmap(disp, ctx, buffer, attr_list); default: - return dri2_create_image_khr(drv, disp, ctx, target, buffer, attr_list); + return dri2_create_image_khr(disp, ctx, target, buffer, attr_list); } } @@ -609,7 +602,7 @@ swrast_get_image(__DRIdrawable *driDrawable, } static EGLBoolean -drm_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) +drm_add_configs_for_visuals(_EGLDisplay *disp) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); const struct gbm_dri_visual *visuals = dri2_dpy->gbm_dri->visual_table; @@ -658,8 +651,6 @@ drm_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) } } - dri2_finalize_config_surface_types(disp); - for (unsigned i = 0; i < ARRAY_SIZE(format_count); i++) { if (!format_count[i]) { struct gbm_format_name_desc desc; @@ -675,32 +666,21 @@ static const struct dri2_egl_display_vtbl dri2_drm_display_vtbl = { .authenticate = dri2_drm_authenticate, .create_window_surface = dri2_drm_create_window_surface, .create_pixmap_surface = dri2_drm_create_pixmap_surface, - .create_pbuffer_surface = dri2_fallback_create_pbuffer_surface, .destroy_surface = dri2_drm_destroy_surface, .create_image = dri2_drm_create_image_khr, .swap_buffers = dri2_drm_swap_buffers, - .swap_buffers_with_damage = dri2_fallback_swap_buffers_with_damage, - .swap_buffers_region = dri2_fallback_swap_buffers_region, - .post_sub_buffer = dri2_fallback_post_sub_buffer, - .copy_buffers = dri2_fallback_copy_buffers, .query_buffer_age = dri2_drm_query_buffer_age, - .create_wayland_buffer_from_image = dri2_fallback_create_wayland_buffer_from_image, - .get_sync_values = dri2_fallback_get_sync_values, .get_dri_drawable = dri2_surface_get_dri_drawable, }; EGLBoolean -dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) +dri2_initialize_drm(_EGLDisplay *disp) { _EGLDevice *dev; struct dri2_egl_display *dri2_dpy; struct gbm_device *gbm; const char *err; - /* Not supported yet */ - if (disp->Options.ForceSoftware) - return EGL_FALSE; - dri2_dpy = calloc(1, sizeof *dri2_dpy); if (!dri2_dpy) return _eglError(EGL_BAD_ALLOC, "eglInitialize"); @@ -721,7 +701,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) } dri2_dpy->own_device = true; } else { - dri2_dpy->fd = fcntl(gbm_device_get_fd(gbm), F_DUPFD_CLOEXEC, 3); + dri2_dpy->fd = os_dupfd_cloexec(gbm_device_get_fd(gbm)); if (dri2_dpy->fd < 0) { err = "DRI2: failed to fcntl() existing gbm device"; goto cleanup; @@ -734,7 +714,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) goto cleanup; } - dev = _eglAddDevice(dri2_dpy->fd, false); + dev = _eglAddDevice(dri2_dpy->fd, disp->Options.ForceSoftware); if (!dev) { err = "DRI2: failed to find EGLDevice"; goto cleanup; @@ -786,7 +766,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) dri2_setup_screen(disp); - if (!drm_add_configs_for_visuals(drv, disp)) { + if (!drm_add_configs_for_visuals(disp)) { err = "DRI2: failed to add configs"; goto cleanup; } @@ -798,7 +778,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) #ifdef HAVE_WAYLAND_PLATFORM dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd); #endif - dri2_set_WL_bind_wayland_display(drv, disp); + dri2_set_WL_bind_wayland_display(disp); /* Fill vtbl last to prevent accidentally calling virtual function during * initialization.