From 83e53e313695b4fb3fc83eb0a97d8a33d67b011a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 30 Jul 2024 13:43:10 -0400 Subject: [PATCH] egl/dri: move some screen accessors back to dri frontend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this is so clunky rrrrrrrrahwefawiufhweofhaf Reviewed-by: Marek Olšák Reviewed-by: Adam Jackson Part-of: --- src/egl/drivers/dri2/egl_dri2.c | 37 +++++++++------------------- src/gallium/frontends/dri/dri_util.c | 14 +++++++++++ src/gallium/frontends/dri/dri_util.h | 8 ++++++ src/gallium/targets/dri/dri.sym.in | 2 ++ 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 9630db44a7f..75623a6f616 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -638,21 +638,6 @@ dri2_query_driver_config(_EGLDisplay *disp) return ret; } -static struct pipe_screen * -get_pipe_screen(_EGLDisplay *disp) -{ - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); - struct dri_screen *screen = dri_screen(dri2_dpy->dri_screen_render_gpu); - return screen->base.screen; -} - -static int -get_screen_param(_EGLDisplay *disp, enum pipe_cap param) -{ - struct pipe_screen *screen = get_pipe_screen(disp); - return screen->get_param(screen, param); -} - void dri2_setup_screen(_EGLDisplay *disp) { @@ -666,13 +651,13 @@ dri2_setup_screen(_EGLDisplay *disp) if (disp->Platform == _EGL_PLATFORM_X11 || disp->Platform == _EGL_PLATFORM_XCB) has_modifiers = dri2_dpy->multibuffers_available; - int caps = get_screen_param(disp, PIPE_CAP_DMABUF); + int caps = dri_get_screen_param(dri2_dpy->dri_screen_render_gpu, PIPE_CAP_DMABUF); /* set if both import and export are suported */ dri2_dpy->has_modifiers = has_modifiers && util_bitcount(caps) == 2; dri2_dpy->has_dmabuf_import = has_modifiers && caps & DRM_PRIME_CAP_IMPORT; #endif #ifdef HAVE_ANDROID_PLATFORM - dri2_dpy->has_native_fence_fd = get_screen_param(disp, PIPE_CAP_NATIVE_FENCE_FD); + dri2_dpy->has_native_fence_fd = dri_get_screen_param(dri2_dpy->dri_screen_render_gpu, PIPE_CAP_NATIVE_FENCE_FD); #endif dri2_dpy->has_compression_modifiers = pscreen->query_compression_rates && pscreen->query_compression_modifiers; @@ -709,7 +694,7 @@ dri2_setup_screen(_EGLDisplay *disp) /* Report back to EGL the bitmask of priorities supported */ disp->Extensions.IMG_context_priority = - get_screen_param(disp, PIPE_CAP_CONTEXT_PRIORITY_MASK); + dri_get_screen_param(dri2_dpy->dri_screen_render_gpu, PIPE_CAP_CONTEXT_PRIORITY_MASK); disp->Extensions.EXT_pixel_format_float = EGL_TRUE; @@ -722,9 +707,9 @@ dri2_setup_screen(_EGLDisplay *disp) disp->Extensions.EXT_config_select_group = EGL_TRUE; disp->Extensions.EXT_create_context_robustness = - get_screen_param(disp, PIPE_CAP_DEVICE_RESET_STATUS_QUERY); + dri_get_screen_param(dri2_dpy->dri_screen_render_gpu, PIPE_CAP_DEVICE_RESET_STATUS_QUERY); disp->RobustBufferAccess = - get_screen_param(disp, PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR); + dri_get_screen_param(dri2_dpy->dri_screen_render_gpu, PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR); /* EXT_query_reset_notification_strategy complements and requires * EXT_create_context_robustness. */ @@ -738,7 +723,7 @@ dri2_setup_screen(_EGLDisplay *disp) & __DRI_FENCE_CAP_NATIVE_FD) disp->Extensions.ANDROID_native_fence_sync = EGL_TRUE; - if (get_pipe_screen(disp)->get_disk_shader_cache) + if (dri_get_pipe_screen(dri2_dpy->dri_screen_render_gpu)->get_disk_shader_cache) disp->Extensions.ANDROID_blob_cache = EGL_TRUE; disp->Extensions.KHR_reusable_sync = EGL_TRUE; @@ -748,7 +733,7 @@ dri2_setup_screen(_EGLDisplay *disp) disp->Extensions.MESA_drm_image = (capabilities & __DRI_IMAGE_CAP_GLOBAL_NAMES) != 0; #ifdef HAVE_LIBDRM - if (get_screen_param(disp, PIPE_CAP_DMABUF) & DRM_PRIME_CAP_EXPORT) + if (dri_get_screen_param(dri2_dpy->dri_screen_render_gpu, PIPE_CAP_DMABUF) & DRM_PRIME_CAP_EXPORT) disp->Extensions.MESA_image_dma_buf_export = true; if (dri2_dpy->has_dmabuf_import) { @@ -763,18 +748,18 @@ dri2_setup_screen(_EGLDisplay *disp) disp->Extensions.KHR_gl_texture_2D_image = EGL_TRUE; disp->Extensions.KHR_gl_texture_cubemap_image = EGL_TRUE; - if (get_screen_param(disp, PIPE_CAP_MAX_TEXTURE_3D_LEVELS) != 0) + if (dri_get_screen_param(dri2_dpy->dri_screen_render_gpu, PIPE_CAP_MAX_TEXTURE_3D_LEVELS) != 0) disp->Extensions.KHR_gl_texture_3D_image = EGL_TRUE; disp->Extensions.KHR_context_flush_control = EGL_TRUE; - if (get_pipe_screen(disp)->set_damage_region) + if (dri_get_pipe_screen(dri2_dpy->dri_screen_render_gpu)->set_damage_region) disp->Extensions.KHR_partial_update = EGL_TRUE; disp->Extensions.EXT_protected_surface = - get_screen_param(disp, PIPE_CAP_DEVICE_PROTECTED_SURFACE) != 0; + dri_get_screen_param(dri2_dpy->dri_screen_render_gpu, PIPE_CAP_DEVICE_PROTECTED_SURFACE) != 0; disp->Extensions.EXT_protected_content = - get_screen_param(disp, PIPE_CAP_DEVICE_PROTECTED_CONTEXT) != 0; + dri_get_screen_param(dri2_dpy->dri_screen_render_gpu, PIPE_CAP_DEVICE_PROTECTED_CONTEXT) != 0; } void diff --git a/src/gallium/frontends/dri/dri_util.c b/src/gallium/frontends/dri/dri_util.c index 1bdb958561f..0ac1bb9b6bb 100644 --- a/src/gallium/frontends/dri/dri_util.c +++ b/src/gallium/frontends/dri/dri_util.c @@ -1176,3 +1176,17 @@ bool dri_valid_swap_interval(__DRIscreen *driScreen, int interval) return true; } + +struct pipe_screen * +dri_get_pipe_screen(__DRIscreen *driScreen) +{ + struct dri_screen *screen = dri_screen(driScreen); + return screen->base.screen; +} + +int +dri_get_screen_param(__DRIscreen *driScreen, enum pipe_cap param) +{ + struct pipe_screen *screen = dri_get_pipe_screen(driScreen); + return screen->get_param(screen, param); +} diff --git a/src/gallium/frontends/dri/dri_util.h b/src/gallium/frontends/dri/dri_util.h index dcaee366034..83e63868b24 100644 --- a/src/gallium/frontends/dri/dri_util.h +++ b/src/gallium/frontends/dri/dri_util.h @@ -41,8 +41,11 @@ #include "main/glconfig.h" #include "main/menums.h" #include "util/xmlconfig.h" +#include "pipe/p_defines.h" #include +struct pipe_screen; + struct dri_screen; #define __DRI_BACKEND_VTABLE "DRI_DriverVtable" @@ -328,4 +331,9 @@ dri_server_wait_sync(__DRIcontext *_ctx, void *_fence, unsigned flags); PUBLIC void dri_set_blob_cache_funcs(__DRIscreen *sPriv, __DRIblobCacheSet set, __DRIblobCacheGet get); + +PUBLIC struct pipe_screen * +dri_get_pipe_screen(__DRIscreen *driScreen); +PUBLIC int +dri_get_screen_param(__DRIscreen *driScreen, enum pipe_cap param); #endif /* _DRI_UTIL_H_ */ diff --git a/src/gallium/targets/dri/dri.sym.in b/src/gallium/targets/dri/dri.sym.in index b4d65a6a8a0..b552520bff4 100644 --- a/src/gallium/targets/dri/dri.sym.in +++ b/src/gallium/targets/dri/dri.sym.in @@ -61,6 +61,8 @@ dri_client_wait_sync; dri_server_wait_sync; dri_set_blob_cache_funcs; + dri_get_pipe_screen; + dri_get_screen_param; @nouveau_drm_screen_create@ @radeon_drm_winsys_create@ @amdgpu_winsys_create@