egl/dri: move some screen accessors back to dri frontend

this is so clunky rrrrrrrrahwefawiufhweofhaf

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30524>
This commit is contained in:
Mike Blumenkrantz 2024-07-30 13:43:10 -04:00 committed by Marge Bot
parent 9f461400eb
commit 83e53e3136
4 changed files with 35 additions and 26 deletions

View file

@ -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

View file

@ -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);
}

View file

@ -41,8 +41,11 @@
#include "main/glconfig.h"
#include "main/menums.h"
#include "util/xmlconfig.h"
#include "pipe/p_defines.h"
#include <stdbool.h>
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_ */

View file

@ -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@