egl: Collapse a bunch of renderer queries into pipe cap queries.
Now that we can access the pipe screen through the dri_screen, we can skip some indirection. Reviewed-by: Adam Jackson <ajax@redhat.com> Acked-by: Eric Engestrom <eric@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20069>
This commit is contained in:
@@ -1926,26 +1926,14 @@ typedef struct __DRIconfigOptionsExtensionRec {
|
||||
#define __DRI2_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION 0x0008
|
||||
#define __DRI2_RENDERER_OPENGL_ES_PROFILE_VERSION 0x0009
|
||||
#define __DRI2_RENDERER_OPENGL_ES2_PROFILE_VERSION 0x000a
|
||||
#define __DRI2_RENDERER_HAS_TEXTURE_3D 0x000b
|
||||
/* Whether there is an sRGB format support for every supported 32-bit UNORM
|
||||
* color format.
|
||||
*/
|
||||
#define __DRI2_RENDERER_HAS_FRAMEBUFFER_SRGB 0x000c
|
||||
|
||||
/* Bitmaks of supported/available context priorities - must match
|
||||
* __EGL_CONTEXT_PRIORITY_LOW_BIT et al
|
||||
*/
|
||||
#define __DRI2_RENDERER_HAS_CONTEXT_PRIORITY 0x000d
|
||||
#define __DRI2_RENDERER_HAS_CONTEXT_PRIORITY_LOW (1 << 0)
|
||||
#define __DRI2_RENDERER_HAS_CONTEXT_PRIORITY_MEDIUM (1 << 1)
|
||||
#define __DRI2_RENDERER_HAS_CONTEXT_PRIORITY_HIGH (1 << 2)
|
||||
|
||||
#define __DRI2_RENDERER_HAS_PROTECTED_SURFACE 0x000e
|
||||
#define __DRI2_RENDERER_PREFER_BACK_BUFFER_REUSE 0x000f
|
||||
#define __DRI2_RENDERER_HAS_NO_ERROR_CONTEXT 0x0010
|
||||
|
||||
#define __DRI2_RENDERER_HAS_PROTECTED_CONTEXT 0x0020
|
||||
|
||||
typedef struct __DRI2rendererQueryExtensionRec __DRI2rendererQueryExtension;
|
||||
struct __DRI2rendererQueryExtensionRec {
|
||||
__DRIextension base;
|
||||
|
@@ -72,6 +72,7 @@
|
||||
#include "util/bitscan.h"
|
||||
#include "util/driconf.h"
|
||||
#include "util/u_math.h"
|
||||
#include "pipe/p_screen.h"
|
||||
|
||||
#define NUM_ATTRIBS 12
|
||||
|
||||
@@ -835,6 +836,13 @@ dri2_query_driver_config(_EGLDisplay *disp)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
get_screen_param(_EGLDisplay *disp, enum pipe_cap param)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
struct dri_screen *screen = dri_screen(dri2_dpy->dri_screen);
|
||||
return screen->base.screen->get_param(screen->base.screen, param);
|
||||
}
|
||||
|
||||
void
|
||||
dri2_setup_screen(_EGLDisplay *disp)
|
||||
@@ -875,9 +883,7 @@ dri2_setup_screen(_EGLDisplay *disp)
|
||||
}
|
||||
|
||||
/* Report back to EGL the bitmask of priorities supported */
|
||||
disp->Extensions.IMG_context_priority =
|
||||
dri2_renderer_query_integer(dri2_dpy,
|
||||
__DRI2_RENDERER_HAS_CONTEXT_PRIORITY);
|
||||
disp->Extensions.IMG_context_priority = get_screen_param(disp, PIPE_CAP_CONTEXT_PRIORITY_MASK);
|
||||
|
||||
disp->Extensions.EXT_pixel_format_float = EGL_TRUE;
|
||||
|
||||
@@ -929,9 +935,9 @@ dri2_setup_screen(_EGLDisplay *disp)
|
||||
disp->Extensions.KHR_gl_texture_2D_image = EGL_TRUE;
|
||||
disp->Extensions.KHR_gl_texture_cubemap_image = EGL_TRUE;
|
||||
|
||||
if (dri2_renderer_query_integer(dri2_dpy,
|
||||
__DRI2_RENDERER_HAS_TEXTURE_3D))
|
||||
disp->Extensions.KHR_gl_texture_3D_image = EGL_TRUE;
|
||||
if (get_screen_param(disp, PIPE_CAP_MAX_TEXTURE_3D_LEVELS) != 0)
|
||||
disp->Extensions.KHR_gl_texture_3D_image = EGL_TRUE;
|
||||
|
||||
#ifdef HAVE_LIBDRM
|
||||
if (dri2_dpy->image->base.version >= 8 &&
|
||||
dri2_dpy->image->createImageFromDmaBufs) {
|
||||
@@ -948,11 +954,9 @@ dri2_setup_screen(_EGLDisplay *disp)
|
||||
disp->Extensions.KHR_partial_update = EGL_TRUE;
|
||||
|
||||
disp->Extensions.EXT_protected_surface =
|
||||
dri2_renderer_query_integer(dri2_dpy,
|
||||
__DRI2_RENDERER_HAS_PROTECTED_SURFACE);
|
||||
get_screen_param(disp, PIPE_CAP_DEVICE_PROTECTED_SURFACE) != 0;
|
||||
disp->Extensions.EXT_protected_content =
|
||||
dri2_renderer_query_integer(dri2_dpy,
|
||||
__DRI2_RENDERER_HAS_PROTECTED_CONTEXT);
|
||||
get_screen_param(disp, PIPE_CAP_DEVICE_PROTECTED_CONTEXT) != 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -118,12 +118,6 @@ dri2_query_renderer_integer(__DRIscreen *_screen, int param,
|
||||
PIPE_CAP_UMA);
|
||||
return 0;
|
||||
|
||||
case __DRI2_RENDERER_HAS_TEXTURE_3D:
|
||||
value[0] =
|
||||
screen->base.screen->get_param(screen->base.screen,
|
||||
PIPE_CAP_MAX_TEXTURE_3D_LEVELS) != 0;
|
||||
return 0;
|
||||
|
||||
case __DRI2_RENDERER_HAS_FRAMEBUFFER_SRGB:
|
||||
value[0] =
|
||||
screen->base.screen->is_format_supported(screen->base.screen,
|
||||
@@ -131,32 +125,11 @@ dri2_query_renderer_integer(__DRIscreen *_screen, int param,
|
||||
PIPE_TEXTURE_2D, 0, 0,
|
||||
PIPE_BIND_RENDER_TARGET);
|
||||
return 0;
|
||||
case __DRI2_RENDERER_HAS_CONTEXT_PRIORITY:
|
||||
value[0] =
|
||||
screen->base.screen->get_param(screen->base.screen,
|
||||
PIPE_CAP_CONTEXT_PRIORITY_MASK);
|
||||
if (!value[0])
|
||||
return -1;
|
||||
return 0;
|
||||
case __DRI2_RENDERER_HAS_PROTECTED_SURFACE:
|
||||
value[0] =
|
||||
screen->base.screen->get_param(screen->base.screen,
|
||||
PIPE_CAP_DEVICE_PROTECTED_SURFACE);
|
||||
if (!value[0])
|
||||
return -1;
|
||||
return 0;
|
||||
case __DRI2_RENDERER_PREFER_BACK_BUFFER_REUSE:
|
||||
value[0] =
|
||||
screen->base.screen->get_param(screen->base.screen,
|
||||
PIPE_CAP_PREFER_BACK_BUFFER_REUSE);
|
||||
return 0;
|
||||
case __DRI2_RENDERER_HAS_PROTECTED_CONTEXT:
|
||||
value[0] =
|
||||
screen->base.screen->get_param(screen->base.screen,
|
||||
PIPE_CAP_DEVICE_PROTECTED_CONTEXT);
|
||||
if (!value[0])
|
||||
return -1;
|
||||
return 0;
|
||||
default:
|
||||
return driQueryRendererIntegerCommon(screen, param, value);
|
||||
}
|
||||
|
@@ -1028,7 +1028,7 @@ enum pipe_texture_transfer_mode {
|
||||
* return a bitmask of the supported priorities. If the driver does not
|
||||
* support prioritized contexts, it can return 0.
|
||||
*
|
||||
* Note that these match __DRI2_RENDERER_HAS_CONTEXT_PRIORITY_*
|
||||
* Note that these match __EGL_CONTEXT_PRIORITY_*_BIT.
|
||||
*/
|
||||
#define PIPE_CONTEXT_PRIORITY_LOW (1 << 0)
|
||||
#define PIPE_CONTEXT_PRIORITY_MEDIUM (1 << 1)
|
||||
|
Reference in New Issue
Block a user