From 5519dd0bd1a5a4a2c2ca7d41d2063632aaa7ec58 Mon Sep 17 00:00:00 2001 From: Yogesh Mohanmarimuthu Date: Mon, 18 Oct 2021 09:52:16 +0530 Subject: [PATCH] egl: create DRI screen for display GPU in case of prime MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The created DRI screen can be used to allocate VRAM memory from display GPU in case of prime. v2: remove extra whitespace (Marek Olšák) Signed-off-by: Yogesh Mohanmarimuthu Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/egl/drivers/dri2/egl_dri2.c | 23 +++++++++++++++++++++++ src/egl/drivers/dri2/egl_dri2.h | 1 + 2 files changed, 24 insertions(+) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index d82eb29..dcdf0b3 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -980,6 +980,25 @@ EGLBoolean dri2_create_screen(_EGLDisplay *disp) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); + char *driver_name_display_gpu; + + if (dri2_dpy->fd_display_gpu >= 0) { + driver_name_display_gpu = loader_get_driver_for_fd(dri2_dpy->fd_display_gpu); + if (driver_name_display_gpu) { + /* check if driver name is matching so that non mesa drivers + * will not crash. + */ + if (strcmp(dri2_dpy->driver_name, driver_name_display_gpu) == 0) { + dri2_dpy->dri_screen_display_gpu = + dri2_dpy->mesa->createNewScreen(0, dri2_dpy->fd_display_gpu, + dri2_dpy->loader_extensions, + dri2_dpy->driver_extensions, + &dri2_dpy->driver_configs, + disp); + } + free(driver_name_display_gpu); + } + } int screen_fd = dri2_dpy->swrast ? -1 : dri2_dpy->fd; dri2_dpy->dri_screen = dri2_dpy->mesa->createNewScreen(0, screen_fd, @@ -1123,7 +1142,11 @@ dri2_display_destroy(_EGLDisplay *disp) if (dri2_dpy->own_dri_screen) { if (dri2_dpy->vtbl && dri2_dpy->vtbl->close_screen_notify) dri2_dpy->vtbl->close_screen_notify(disp); + dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen); + + if (dri2_dpy->dri_screen_display_gpu) + dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen_display_gpu); } if (dri2_dpy->fd >= 0) close(dri2_dpy->fd); diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index a1d77f5..31c0d40 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -223,6 +223,7 @@ struct dri2_egl_display int dri2_major; int dri2_minor; __DRIscreen *dri_screen; + __DRIscreen *dri_screen_display_gpu; bool own_dri_screen; const __DRIconfig **driver_configs; void *driver; -- 2.7.4