meson: delete dri3 build option
this existed for historical reasons, but realistically now it should be possible to build mesa with dri3 always enabled. additionally, this check was often used as a substitute for having drm functionality, which is sort of similar but also not really a direct match this simplifies a bunch of conditionals and prevents users from footgunnning themselves into orbit Reviewed-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Eric Engestrom <eric@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30952>
This commit is contained in:

committed by
Marge Bot

parent
56ac378454
commit
8f6fca89aa
@@ -96,7 +96,6 @@ debian-testing:
|
||||
-D glvnd=disabled
|
||||
-D platforms=x11,wayland
|
||||
GALLIUM_ST: >
|
||||
-D dri3=enabled
|
||||
-D gallium-nine=true
|
||||
-D gallium-va=enabled
|
||||
-D gallium-rusticl=true
|
||||
@@ -196,7 +195,6 @@ debian-testing-msan:
|
||||
-D glvnd=disabled
|
||||
-D platforms=x11,wayland
|
||||
GALLIUM_ST: >
|
||||
-D dri3=enabled
|
||||
-D gallium-extra-hud=true
|
||||
-D gallium-vdpau=enabled
|
||||
-D gallium-omx=bellagio
|
||||
@@ -262,7 +260,6 @@ debian-release:
|
||||
-D glvnd=disabled
|
||||
-D platforms=x11,wayland
|
||||
GALLIUM_ST: >
|
||||
-D dri3=enabled
|
||||
-D gallium-extra-hud=true
|
||||
-D gallium-vdpau=enabled
|
||||
-D gallium-omx=disabled
|
||||
@@ -307,7 +304,6 @@ alpine-build-testing:
|
||||
-D platforms=wayland
|
||||
GALLIUM_DRIVERS: "crocus,etnaviv,freedreno,iris,lima,nouveau,panfrost,r300,r600,radeonsi,svga,llvmpipe,softpipe,tegra,v3d,vc4,virgl,zink"
|
||||
GALLIUM_ST: >
|
||||
-D dri3=enabled
|
||||
-D gallium-extra-hud=true
|
||||
-D gallium-vdpau=disabled
|
||||
-D gallium-omx=disabled
|
||||
@@ -359,7 +355,6 @@ fedora-release:
|
||||
-D teflon=true
|
||||
GALLIUM_DRIVERS: "crocus,etnaviv,freedreno,i915,iris,lima,nouveau,panfrost,r300,r600,radeonsi,svga,llvmpipe,softpipe,tegra,v3d,vc4,virgl,zink"
|
||||
GALLIUM_ST: >
|
||||
-D dri3=enabled
|
||||
-D gallium-extra-hud=true
|
||||
-D gallium-vdpau=enabled
|
||||
-D gallium-omx=disabled
|
||||
@@ -412,7 +407,6 @@ debian-android:
|
||||
-D android-libbacktrace=disabled
|
||||
-D intel-clc=system
|
||||
GALLIUM_ST: >
|
||||
-D dri3=disabled
|
||||
-D gallium-vdpau=disabled
|
||||
-D gallium-omx=disabled
|
||||
-D gallium-va=disabled
|
||||
@@ -456,7 +450,6 @@ debian-android:
|
||||
-D platforms=x11,wayland
|
||||
-D osmesa=false
|
||||
GALLIUM_ST: >
|
||||
-D dri3=enabled
|
||||
-D gallium-vdpau=disabled
|
||||
-D gallium-omx=disabled
|
||||
-D gallium-va=disabled
|
||||
@@ -614,7 +607,6 @@ debian-clang:
|
||||
-D glvnd=enabled
|
||||
-D platforms=x11,wayland
|
||||
GALLIUM_ST: >
|
||||
-D dri3=enabled
|
||||
-D gallium-extra-hud=true
|
||||
-D gallium-vdpau=enabled
|
||||
-D gallium-omx=bellagio
|
||||
@@ -653,7 +645,6 @@ debian-clang-release:
|
||||
-D glx=xlib
|
||||
-D platforms=x11,wayland
|
||||
GALLIUM_ST: >
|
||||
-D dri3=enabled
|
||||
-D gallium-extra-hud=true
|
||||
-D gallium-vdpau=enabled
|
||||
-D gallium-omx=bellagio
|
||||
@@ -701,7 +692,6 @@ debian-vulkan:
|
||||
-D platforms=x11,wayland
|
||||
-D osmesa=false
|
||||
GALLIUM_ST: >
|
||||
-D dri3=enabled
|
||||
-D gallium-vdpau=disabled
|
||||
-D gallium-omx=disabled
|
||||
-D gallium-va=disabled
|
||||
|
53
meson.build
53
meson.build
@@ -566,23 +566,15 @@ if with_vulkan_icd_dir == ''
|
||||
endif
|
||||
|
||||
with_dri2 = (with_dri or with_any_vk) and (with_dri_platform == 'drm' or with_dri_platform == 'apple')
|
||||
with_dri3 = get_option('dri3').disable_auto_if(not (system_has_kms_drm and with_dri2)).allowed()
|
||||
|
||||
with_x11_dri2 = with_dri2 and get_option('legacy-x11').contains('dri2')
|
||||
|
||||
if with_any_vk and (with_platform_x11 and not with_dri3)
|
||||
error('Vulkan drivers require dri3 for X11 support')
|
||||
endif
|
||||
if with_dri
|
||||
if with_glx == 'disabled' and not with_egl and not with_gbm
|
||||
error('building dri drivers require at least one windowing system')
|
||||
endif
|
||||
endif
|
||||
|
||||
if with_gallium_kmsro and (with_platform_x11 and not with_dri3)
|
||||
error('kmsro requires dri3 for X11 support')
|
||||
endif
|
||||
|
||||
dep_dxheaders = null_dep
|
||||
if with_gallium_d3d12 or with_microsoft_clc or with_microsoft_vk
|
||||
dep_dxheaders = dependency('directx-headers', required : false)
|
||||
@@ -786,9 +778,6 @@ if with_gallium_st_nine
|
||||
].contains(true)
|
||||
error('The nine state tracker requires at least one non-swrast gallium driver.')
|
||||
endif
|
||||
if not with_dri3
|
||||
error('Using nine with wine requires dri3')
|
||||
endif
|
||||
endif
|
||||
with_gallium_st_d3d10umd = get_option('gallium-d3d10umd')
|
||||
if with_gallium_st_d3d10umd
|
||||
@@ -1749,7 +1738,7 @@ with_gallium_drisw_kms = false
|
||||
if system_has_kms_drm
|
||||
dep_libdrm = dependency(
|
||||
'libdrm', version : '>=' + _drm_ver,
|
||||
required : with_dri2 or with_dri3
|
||||
required : with_dri2 or with_dri
|
||||
)
|
||||
else
|
||||
# We should prevent libdrm from being available when the target doesn't have it to avoid transitive
|
||||
@@ -2190,25 +2179,24 @@ if with_platform_x11
|
||||
error('libdrm required for gallium video statetrackers when using x11')
|
||||
endif
|
||||
endif
|
||||
if with_any_vk or with_egl or (with_glx == 'dri' and with_dri_platform == 'drm')
|
||||
if with_dri_platform == 'drm'
|
||||
dep_xcb_dri2 = dependency('xcb-dri2', version : '>= 1.8', required : with_x11_dri2)
|
||||
|
||||
if with_dri3
|
||||
dep_xcb_dri3 = dependency('xcb-dri3')
|
||||
dep_xcb_present = dependency('xcb-present')
|
||||
# until xcb-dri3 has been around long enough to make a hard-dependency:
|
||||
if (dep_xcb_dri3.version().version_compare('>= 1.13') and
|
||||
dep_xcb_present.version().version_compare('>= 1.13'))
|
||||
with_dri3_modifiers = true
|
||||
endif
|
||||
if (dep_xcb_dri3.version().version_compare('>= 1.17') and
|
||||
dep_xcb_present.version().version_compare('>= 1.17'))
|
||||
with_dri3_explicit_sync = true
|
||||
endif
|
||||
dep_xcb_shm = dependency('xcb-shm')
|
||||
dep_xcb_sync = dependency('xcb-sync')
|
||||
dep_xshmfence = dependency('xshmfence', version : '>= 1.1')
|
||||
dep_xcb_dri3 = dependency('xcb-dri3')
|
||||
dep_xcb_present = dependency('xcb-present')
|
||||
# until xcb-dri3 has been around long enough to make a hard-dependency:
|
||||
if (dep_xcb_dri3.version().version_compare('>= 1.13') and
|
||||
dep_xcb_present.version().version_compare('>= 1.13'))
|
||||
with_dri3_modifiers = true
|
||||
endif
|
||||
if (dep_xcb_dri3.version().version_compare('>= 1.17') and
|
||||
dep_xcb_present.version().version_compare('>= 1.17'))
|
||||
with_dri3_explicit_sync = true
|
||||
endif
|
||||
dep_xcb_shm = dependency('xcb-shm')
|
||||
dep_xcb_sync = dependency('xcb-sync')
|
||||
dep_xshmfence = dependency('xshmfence', version : '>= 1.1')
|
||||
pre_args += '-DHAVE_X11_DRM'
|
||||
endif
|
||||
if with_glx == 'dri' or with_glx == 'xlib'
|
||||
dep_glproto = dependency('glproto', version : '>= 1.4.14')
|
||||
@@ -2222,9 +2210,9 @@ if with_platform_x11
|
||||
endif
|
||||
endif
|
||||
if (with_egl or
|
||||
with_dri3 or (
|
||||
with_any_vk or
|
||||
with_gallium_vdpau or with_gallium_xa or
|
||||
with_gallium_omx != 'disabled'))
|
||||
with_gallium_omx != 'disabled')
|
||||
dep_xcb_xfixes = dependency('xcb-xfixes')
|
||||
endif
|
||||
if with_xlib_lease or with_any_vk
|
||||
@@ -2244,9 +2232,6 @@ endif
|
||||
if with_x11_dri2
|
||||
pre_args += '-DHAVE_X11_DRI2'
|
||||
endif
|
||||
if with_dri3
|
||||
pre_args += '-DHAVE_DRI3'
|
||||
endif
|
||||
if with_dri3_modifiers
|
||||
pre_args += '-DHAVE_DRI3_MODIFIERS'
|
||||
endif
|
||||
@@ -2419,7 +2404,7 @@ if with_egl
|
||||
if with_dri
|
||||
egl_drivers += 'builtin:egl_dri2'
|
||||
endif
|
||||
if with_dri3
|
||||
if with_dri_platform == 'drm'
|
||||
egl_drivers += 'builtin:egl_dri3'
|
||||
endif
|
||||
if with_platform_windows
|
||||
|
@@ -51,13 +51,6 @@ option(
|
||||
description : 'Use Android\'s libbacktrace',
|
||||
)
|
||||
|
||||
option(
|
||||
'dri3',
|
||||
type : 'feature',
|
||||
deprecated: {'true': 'enabled', 'false': 'disabled'},
|
||||
description : 'enable support for dri3'
|
||||
)
|
||||
|
||||
option(
|
||||
'dri-drivers-path',
|
||||
type : 'string',
|
||||
|
@@ -41,7 +41,7 @@
|
||||
#include <xcb/xfixes.h>
|
||||
|
||||
#include "loader_dri_helper.h"
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
#include "loader_dri3_helper.h"
|
||||
#endif
|
||||
#endif
|
||||
@@ -280,7 +280,7 @@ struct dri2_egl_display {
|
||||
xcb_connection_t *conn;
|
||||
xcb_screen_t *screen;
|
||||
bool swap_available;
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
struct loader_screen_resources screen_resources;
|
||||
#endif
|
||||
#endif
|
||||
|
@@ -43,6 +43,7 @@
|
||||
/* clang-format on */
|
||||
#ifdef HAVE_LIBDRM
|
||||
#include <xf86drm.h>
|
||||
#include "platform_x11_dri3.h"
|
||||
#endif
|
||||
#include "util/bitscan.h"
|
||||
#include "util/macros.h"
|
||||
@@ -57,9 +58,6 @@
|
||||
#include "drm-uapi/drm_fourcc.h"
|
||||
#include "dri_util.h"
|
||||
|
||||
#ifdef HAVE_DRI3
|
||||
#include "platform_x11_dri3.h"
|
||||
#endif
|
||||
|
||||
static EGLBoolean
|
||||
dri2_x11_swap_interval(_EGLDisplay *disp, _EGLSurface *surf, EGLint interval);
|
||||
@@ -1412,7 +1410,7 @@ dri2_x11_get_msc_rate(_EGLDisplay *display, _EGLSurface *surface,
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(display);
|
||||
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
loader_update_screen_resources(&dri2_dpy->screen_resources);
|
||||
|
||||
if (dri2_dpy->screen_resources.num_crtcs == 0) {
|
||||
@@ -1434,6 +1432,7 @@ dri2_x11_get_msc_rate(_EGLDisplay *display, _EGLSurface *surface,
|
||||
*denominator = 1;
|
||||
#endif
|
||||
|
||||
|
||||
/* In a multi-monitor setup, look at each CRTC and perform a box
|
||||
* intersection between the CRTC and surface. Use the CRTC whose
|
||||
* box intersection has the largest area.
|
||||
@@ -1455,7 +1454,7 @@ dri2_x11_get_msc_rate(_EGLDisplay *display, _EGLSurface *surface,
|
||||
return EGL_FALSE;
|
||||
}
|
||||
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
int area = 0;
|
||||
|
||||
for (unsigned c = 0; c < dri2_dpy->screen_resources.num_crtcs; c++) {
|
||||
@@ -1471,7 +1470,6 @@ dri2_x11_get_msc_rate(_EGLDisplay *display, _EGLSurface *surface,
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If the window is entirely off-screen, then area will still be 0.
|
||||
* We defaulted to the first CRTC in the list's refresh rate, earlier.
|
||||
*/
|
||||
@@ -1817,12 +1815,14 @@ dri2_initialize_x11_swrast(_EGLDisplay *disp)
|
||||
* here will allow is to simply free the memory at dri2_terminate().
|
||||
*/
|
||||
dri2_dpy->driver_name = strdup(disp->Options.Zink ? "zink" : "swrast");
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
|
||||
if (disp->Options.Zink &&
|
||||
!debug_get_bool_option("LIBGL_DRI3_DISABLE", false) &&
|
||||
!dri2_dpy->kopper_without_modifiers)
|
||||
dri3_x11_connect(dri2_dpy, disp->Options.Zink, disp->Options.ForceSoftware);
|
||||
#endif
|
||||
|
||||
if (!dri2_load_driver(disp))
|
||||
goto cleanup;
|
||||
|
||||
@@ -1860,7 +1860,7 @@ dri2_initialize_x11_swrast(_EGLDisplay *disp)
|
||||
disp->Extensions.CHROMIUM_sync_control = EGL_TRUE;
|
||||
disp->Extensions.EXT_swap_buffers_with_damage = !!dri2_dpy->kopper;
|
||||
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
if (dri2_dpy->multibuffers_available)
|
||||
dri2_set_WL_bind_wayland_display(disp);
|
||||
#endif
|
||||
@@ -1887,8 +1887,7 @@ cleanup:
|
||||
return EGL_FALSE;
|
||||
}
|
||||
|
||||
#ifdef HAVE_DRI3
|
||||
|
||||
#ifdef HAVE_LIBDRM
|
||||
static const __DRIextension *dri3_image_loader_extensions[] = {
|
||||
&dri3_image_loader_extension.base,
|
||||
&image_lookup_extension.base,
|
||||
@@ -2072,7 +2071,7 @@ dri2_initialize_x11(_EGLDisplay *disp)
|
||||
(disp->Options.Zink && !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false)))
|
||||
return dri2_initialize_x11_swrast(disp);
|
||||
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
if (!debug_get_bool_option("LIBGL_DRI3_DISABLE", false)) {
|
||||
status = dri2_initialize_x11_dri3(disp);
|
||||
if (status == DRI2_EGL_DRIVER_LOADED)
|
||||
@@ -2093,7 +2092,7 @@ dri2_initialize_x11(_EGLDisplay *disp)
|
||||
void
|
||||
dri2_teardown_x11(struct dri2_egl_display *dri2_dpy)
|
||||
{
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
if (dri2_dpy->dri2_major >= 3)
|
||||
loader_destroy_screen_resources(&dri2_dpy->screen_resources);
|
||||
#endif
|
||||
|
@@ -98,7 +98,7 @@ if with_dri
|
||||
|
||||
if with_platform_x11
|
||||
files_egl += files('drivers/dri2/platform_x11.c')
|
||||
if with_dri3
|
||||
if with_dri_platform == 'drm'
|
||||
files_egl += files('drivers/dri2/platform_x11_dri3.c')
|
||||
link_for_egl += [libloader_x11]
|
||||
endif
|
||||
|
@@ -437,9 +437,9 @@ if host_machine.system() == 'windows'
|
||||
else
|
||||
files_libgalliumvlwinsys += files('vl/vl_winsys_drm.c')
|
||||
endif
|
||||
if with_dri2 and with_platform_x11
|
||||
if with_platform_x11
|
||||
files_libgalliumvlwinsys += files('vl/vl_winsys_dri.c')
|
||||
if with_dri3
|
||||
if with_dri_platform == 'drm'
|
||||
vlwinsys_deps += [
|
||||
dep_xcb_sync, dep_xcb_present, dep_xshmfence, dep_xcb_xfixes,
|
||||
dep_xcb_dri3,
|
||||
|
@@ -92,7 +92,7 @@ static inline struct vl_screen *
|
||||
vl_dri2_screen_create(void *display, int screen) { return NULL; };
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_X11_PLATFORM) && defined(HAVE_DRI3)
|
||||
#if defined(HAVE_X11_PLATFORM) && defined(HAVE_LIBDRM)
|
||||
struct vl_screen *
|
||||
vl_dri3_screen_create(Display *display, int screen);
|
||||
#else
|
||||
@@ -124,4 +124,4 @@ vl_xlib_swrast_screen_create(void *display, int screen) { return NULL; }
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@@ -21,7 +21,7 @@ files_libdri = files(
|
||||
|
||||
if with_platform_x11
|
||||
deps_for_libdri += dep_xcb
|
||||
if with_dri3
|
||||
if with_dri_platform == 'drm'
|
||||
deps_for_libdri += [dep_xcb_dri3, dep_xcb_present, dep_xcb_sync,
|
||||
dep_xshmfence, dep_xcb_xfixes]
|
||||
files_libdri += files('loader_dri3_helper.c')
|
||||
|
@@ -1207,7 +1207,7 @@ dri_device_create(int fd, uint32_t gbm_backend_version)
|
||||
|
||||
struct dri_screen *screen = dri_screen(dri->screen);
|
||||
struct pipe_screen *pscreen = screen->base.screen;
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
if (pscreen->get_param(pscreen, PIPE_CAP_DMABUF) & DRM_PRIME_CAP_IMPORT)
|
||||
dri->has_dmabuf_import = true;
|
||||
if (pscreen->get_param(pscreen, PIPE_CAP_DMABUF) & DRM_PRIME_CAP_EXPORT)
|
||||
|
@@ -42,7 +42,7 @@
|
||||
#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
|
||||
#define VER_MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
|
||||
#if defined(HAVE_DRI) || defined(HAVE_DRI2) || defined(HAVE_DRI3)
|
||||
#ifdef HAVE_DRI
|
||||
extern const struct gbm_backend gbm_dri_backend;
|
||||
#endif
|
||||
|
||||
@@ -53,7 +53,7 @@ struct gbm_backend_desc {
|
||||
};
|
||||
|
||||
static const struct gbm_backend_desc builtin_backends[] = {
|
||||
#if defined(HAVE_DRI) || defined(HAVE_DRI2) || defined(HAVE_DRI3)
|
||||
#ifdef HAVE_DRI
|
||||
{ "dri", &gbm_dri_backend },
|
||||
#endif
|
||||
};
|
||||
|
@@ -26,11 +26,6 @@
|
||||
#include "glxclient.h"
|
||||
#include "glx_error.h"
|
||||
#include "mesa_interface.h"
|
||||
#include "dri2_priv.h"
|
||||
#if defined(HAVE_DRI3)
|
||||
#include "dri3_priv.h"
|
||||
#endif
|
||||
#include "drisw_priv.h"
|
||||
#include "dri_util.h"
|
||||
#include "dri_common.h"
|
||||
|
||||
|
@@ -32,7 +32,7 @@
|
||||
#include <dlfcn.h>
|
||||
#include "dri_common.h"
|
||||
#include "drisw_priv.h"
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
#include "dri3_priv.h"
|
||||
#endif
|
||||
#include <X11/extensions/shmproto.h>
|
||||
|
@@ -143,7 +143,7 @@ extern __GLXDRIdisplay *driwindowsCreateDisplay(Display * dpy);
|
||||
|
||||
|
||||
#if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE))
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
struct glx_screen *dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_inferred, bool *return_zink);
|
||||
void dri3_destroy_display(__GLXDRIdisplay * dpy);
|
||||
#endif
|
||||
|
@@ -33,7 +33,7 @@
|
||||
#endif
|
||||
|
||||
#include "loader_x11.h"
|
||||
#ifdef HAVE_DRI3
|
||||
#ifdef HAVE_LIBDRM
|
||||
#include "loader_dri3_helper.h"
|
||||
#endif
|
||||
|
||||
@@ -870,7 +870,6 @@ AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, enum glx_dr
|
||||
psc = NULL;
|
||||
#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
|
||||
#if defined(GLX_USE_DRM)
|
||||
#if defined(HAVE_DRI3)
|
||||
if (glx_driver & GLX_DRIVER_DRI3) {
|
||||
bool use_zink;
|
||||
psc = dri3_create_screen(i, priv, driver_name_is_inferred, &use_zink);
|
||||
@@ -880,7 +879,6 @@ AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, enum glx_dr
|
||||
driver_name_is_inferred = false;
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_DRI3 */
|
||||
#if defined(HAVE_X11_DRI2)
|
||||
if (psc == NULL && glx_driver & GLX_DRIVER_DRI2 && dri2CheckSupport(dpy)) {
|
||||
psc = dri2CreateScreen(i, priv, driver_name_is_inferred);
|
||||
@@ -1015,7 +1013,6 @@ __glXInitialize(Display * dpy)
|
||||
dpyPriv->has_multibuffer = x11_dri3_check_multibuffer(XGetXCBConnection(dpy), &dri3_err, &dpyPriv->has_explicit_modifiers);
|
||||
if (glx_direct && glx_accel &&
|
||||
(!(glx_driver & GLX_DRIVER_ZINK_YES) || !kopper)) {
|
||||
#if defined(HAVE_DRI3)
|
||||
if (dri3) {
|
||||
/* dri3 is tried as long as this doesn't error; whether modifiers work is not relevant */
|
||||
if (!dri3_err) {
|
||||
@@ -1025,7 +1022,6 @@ __glXInitialize(Display * dpy)
|
||||
glx_driver |= GLX_DRIVER_ZINK_INFER;
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_DRI3 */
|
||||
#if defined(HAVE_X11_DRI2)
|
||||
if (!debug_get_bool_option("LIBGL_DRI2_DISABLE", false))
|
||||
glx_driver |= GLX_DRIVER_DRI2;
|
||||
|
@@ -69,7 +69,7 @@ if with_x11_dri2
|
||||
)
|
||||
endif
|
||||
|
||||
if with_dri3
|
||||
if with_dri_platform == 'drm'
|
||||
files_libglx += files('dri3_glx.c', 'dri3_priv.h')
|
||||
endif
|
||||
|
||||
|
@@ -210,7 +210,7 @@ wsi_device_init(struct wsi_device *wsi,
|
||||
WSI_GET_CB(WaitSemaphores);
|
||||
#undef WSI_GET_CB
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
#if defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
result = wsi_x11_init_wsi(wsi, alloc, dri_options);
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail;
|
||||
@@ -311,7 +311,7 @@ wsi_device_finish(struct wsi_device *wsi,
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
wsi_win32_finish_wsi(wsi, alloc);
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
#if defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
wsi_x11_finish_wsi(wsi, alloc);
|
||||
#endif
|
||||
}
|
||||
|
@@ -104,7 +104,7 @@ struct wsi_x11_vk_surface {
|
||||
};
|
||||
bool has_alpha;
|
||||
};
|
||||
|
||||
#ifdef HAVE_X11_DRM
|
||||
/**
|
||||
* Wrapper around xcb_dri3_open. Returns the opened fd or -1 on error.
|
||||
*/
|
||||
@@ -137,7 +137,6 @@ wsi_dri3_open(xcb_connection_t *conn,
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks compatibility of the device wsi_dev with the device the X server
|
||||
* provides via DRI3.
|
||||
@@ -166,6 +165,7 @@ wsi_x11_check_dri3_compatible(const struct wsi_device *wsi_dev,
|
||||
|
||||
return match;
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool
|
||||
wsi_x11_detect_xwayland(xcb_connection_t *conn,
|
||||
@@ -347,6 +347,7 @@ wsi_x11_connection_create(struct wsi_device *wsi_dev,
|
||||
wsi_conn->is_proprietary_x11 = true;
|
||||
|
||||
wsi_conn->has_mit_shm = false;
|
||||
#ifdef HAVE_X11_DRM
|
||||
if (wsi_conn->has_dri3 && wsi_conn->has_present && wants_shm) {
|
||||
bool has_mit_shm = shm_reply->present != 0;
|
||||
|
||||
@@ -370,6 +371,7 @@ wsi_x11_connection_create(struct wsi_device *wsi_dev,
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
free(dri3_reply);
|
||||
free(pres_reply);
|
||||
@@ -1234,10 +1236,10 @@ x11_get_wsi_image(struct wsi_swapchain *wsi_chain, uint32_t image_index)
|
||||
struct x11_swapchain *chain = (struct x11_swapchain *)wsi_chain;
|
||||
return &chain->images[image_index].base;
|
||||
}
|
||||
|
||||
#ifdef HAVE_DRI3_MODIFIERS
|
||||
static bool
|
||||
wsi_x11_swapchain_query_dri3_modifiers_changed(struct x11_swapchain *chain);
|
||||
|
||||
#endif
|
||||
static VkResult
|
||||
x11_wait_for_explicit_sync_release_submission(struct x11_swapchain *chain,
|
||||
uint64_t rel_timeout_ns,
|
||||
@@ -1365,7 +1367,7 @@ x11_handle_dri3_present_event(struct x11_swapchain *chain,
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
#ifdef HAVE_X11_DRM
|
||||
/**
|
||||
* Send image to X server via Present extension.
|
||||
*/
|
||||
@@ -1465,7 +1467,7 @@ x11_present_to_x11_dri3(struct x11_swapchain *chain, uint32_t image_index,
|
||||
xcb_flush(chain->conn);
|
||||
return x11_swapchain_result(chain, VK_SUCCESS);
|
||||
}
|
||||
|
||||
#endif
|
||||
/**
|
||||
* Send image to X server unaccelerated (software drivers).
|
||||
*/
|
||||
@@ -1691,7 +1693,11 @@ x11_present_to_x11(struct x11_swapchain *chain, uint32_t image_index,
|
||||
if (chain->base.wsi->sw && !chain->has_mit_shm)
|
||||
result = x11_present_to_x11_sw(chain, image_index);
|
||||
else
|
||||
#ifdef HAVE_X11_DRM
|
||||
result = x11_present_to_x11_dri3(chain, image_index, target_msc, present_mode);
|
||||
#else
|
||||
unreachable("X11 missing DRI3 support!");
|
||||
#endif
|
||||
|
||||
if (result < 0)
|
||||
x11_swapchain_notify_error(chain, result);
|
||||
@@ -1771,9 +1777,11 @@ x11_acquire_next_image(struct wsi_swapchain *anv_chain,
|
||||
return result;
|
||||
|
||||
assert(*image_index < chain->base.image_count);
|
||||
#ifdef HAVE_X11_DRM
|
||||
if (chain->images[*image_index].shm_fence &&
|
||||
!chain->base.image_info.explicit_sync)
|
||||
xshmfence_await(chain->images[*image_index].shm_fence);
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -2055,25 +2063,25 @@ x11_image_init(VkDevice device_h, struct x11_swapchain *chain,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
struct x11_image *image)
|
||||
{
|
||||
xcb_void_cookie_t cookie;
|
||||
xcb_generic_error_t *error = NULL;
|
||||
VkResult result;
|
||||
uint32_t bpp = 32;
|
||||
int fence_fd;
|
||||
|
||||
result = wsi_create_image(&chain->base, &chain->base.image_info,
|
||||
&image->base);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
if (chain->base.wsi->sw && !chain->has_mit_shm)
|
||||
return VK_SUCCESS;
|
||||
|
||||
#ifdef HAVE_X11_DRM
|
||||
xcb_void_cookie_t cookie;
|
||||
xcb_generic_error_t *error = NULL;
|
||||
uint32_t bpp = 32;
|
||||
int fence_fd;
|
||||
image->update_region = xcb_generate_id(chain->conn);
|
||||
xcb_xfixes_create_region(chain->conn, image->update_region, 0, NULL);
|
||||
|
||||
if (chain->base.wsi->sw) {
|
||||
if (!chain->has_mit_shm) {
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
image->shmseg = xcb_generate_id(chain->conn);
|
||||
|
||||
xcb_shm_attach(chain->conn,
|
||||
@@ -2194,7 +2202,6 @@ out_fence:
|
||||
fence_fd);
|
||||
|
||||
xshmfence_trigger(image->shm_fence);
|
||||
|
||||
return VK_SUCCESS;
|
||||
|
||||
fail_shmfence_alloc:
|
||||
@@ -2207,6 +2214,9 @@ fail_pixmap:
|
||||
fail_image:
|
||||
wsi_destroy_image(&chain->base, &image->base);
|
||||
|
||||
#else
|
||||
unreachable("SHM support not compiled in");
|
||||
#endif
|
||||
return VK_ERROR_INITIALIZATION_FAILED;
|
||||
}
|
||||
|
||||
@@ -2216,18 +2226,19 @@ x11_image_finish(struct x11_swapchain *chain,
|
||||
struct x11_image *image)
|
||||
{
|
||||
xcb_void_cookie_t cookie;
|
||||
|
||||
if (!chain->base.wsi->sw || chain->has_mit_shm) {
|
||||
#ifdef HAVE_X11_DRM
|
||||
cookie = xcb_sync_destroy_fence(chain->conn, image->sync_fence);
|
||||
xcb_discard_reply(chain->conn, cookie.sequence);
|
||||
xshmfence_unmap_shm(image->shm_fence);
|
||||
#endif
|
||||
|
||||
cookie = xcb_free_pixmap(chain->conn, image->pixmap);
|
||||
xcb_discard_reply(chain->conn, cookie.sequence);
|
||||
|
||||
#ifdef HAVE_X11_DRM
|
||||
cookie = xcb_xfixes_destroy_region(chain->conn, image->update_region);
|
||||
xcb_discard_reply(chain->conn, cookie.sequence);
|
||||
|
||||
#endif
|
||||
#ifdef HAVE_DRI3_EXPLICIT_SYNC
|
||||
if (chain->base.image_info.explicit_sync) {
|
||||
for (uint32_t i = 0; i < WSI_ES_COUNT; i++) {
|
||||
@@ -2335,7 +2346,7 @@ wsi_x11_get_dri3_modifiers(struct wsi_x11_connection *wsi_conn,
|
||||
out:
|
||||
*num_tranches_in = 0;
|
||||
}
|
||||
|
||||
#ifdef HAVE_DRI3_MODIFIERS
|
||||
static bool
|
||||
wsi_x11_swapchain_query_dri3_modifiers_changed(struct x11_swapchain *chain)
|
||||
{
|
||||
@@ -2380,13 +2391,12 @@ wsi_x11_swapchain_query_dri3_modifiers_changed(struct x11_swapchain *chain)
|
||||
|
||||
return memcmp(hash, chain->dri3_modifier_hash, sizeof(hash)) != 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
static VkResult
|
||||
x11_swapchain_destroy(struct wsi_swapchain *anv_chain,
|
||||
const VkAllocationCallbacks *pAllocator)
|
||||
{
|
||||
struct x11_swapchain *chain = (struct x11_swapchain *)anv_chain;
|
||||
xcb_void_cookie_t cookie;
|
||||
|
||||
mtx_lock(&chain->thread_state_lock);
|
||||
chain->status = VK_ERROR_OUT_OF_DATE_KHR;
|
||||
@@ -2404,13 +2414,14 @@ x11_swapchain_destroy(struct wsi_swapchain *anv_chain,
|
||||
|
||||
for (uint32_t i = 0; i < chain->base.image_count; i++)
|
||||
x11_image_finish(chain, pAllocator, &chain->images[i]);
|
||||
|
||||
#ifdef HAVE_X11_DRM
|
||||
xcb_void_cookie_t cookie;
|
||||
xcb_unregister_for_special_event(chain->conn, chain->special_event);
|
||||
cookie = xcb_present_select_input_checked(chain->conn, chain->event_id,
|
||||
chain->window,
|
||||
XCB_PRESENT_EVENT_MASK_NO_EVENT);
|
||||
xcb_discard_reply(chain->conn, cookie.sequence);
|
||||
|
||||
#endif
|
||||
mtx_destroy(&chain->present_progress_mutex);
|
||||
u_cnd_monotonic_destroy(&chain->present_progress_cond);
|
||||
mtx_destroy(&chain->thread_state_lock);
|
||||
@@ -2598,6 +2609,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
|
||||
}
|
||||
|
||||
uint32_t present_caps = 0;
|
||||
#ifdef HAVE_X11_DRM
|
||||
xcb_present_query_capabilities_cookie_t present_query_cookie;
|
||||
xcb_present_query_capabilities_reply_t *present_query_reply;
|
||||
present_query_cookie = xcb_present_query_capabilities(conn, window);
|
||||
@@ -2606,12 +2618,11 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
|
||||
present_caps = present_query_reply->capabilities;
|
||||
free(present_query_reply);
|
||||
}
|
||||
#endif
|
||||
|
||||
struct wsi_base_image_params *image_params = NULL;
|
||||
struct wsi_cpu_image_params cpu_image_params;
|
||||
struct wsi_drm_image_params drm_image_params;
|
||||
uint64_t *modifiers[2] = {NULL, NULL};
|
||||
uint32_t num_modifiers[2] = {0, 0};
|
||||
if (wsi_device->sw) {
|
||||
cpu_image_params = (struct wsi_cpu_image_params) {
|
||||
.base.image_type = WSI_IMAGE_TYPE_CPU,
|
||||
@@ -2619,7 +2630,9 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
|
||||
};
|
||||
image_params = &cpu_image_params.base;
|
||||
} else {
|
||||
drm_image_params = (struct wsi_drm_image_params) {
|
||||
#ifdef HAVE_X11_DRM
|
||||
uint32_t num_modifiers[2] = {0, 0};
|
||||
struct wsi_drm_image_params drm_image_params = {
|
||||
.base.image_type = WSI_IMAGE_TYPE_DRM,
|
||||
.same_gpu = wsi_x11_check_dri3_compatible(wsi_device, conn),
|
||||
.explicit_sync =
|
||||
@@ -2642,6 +2655,9 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
|
||||
wsi_x11_recompute_dri3_modifier_hash(&chain->dri3_modifier_hash, &drm_image_params);
|
||||
}
|
||||
image_params = &drm_image_params.base;
|
||||
#else
|
||||
unreachable("X11 DRM support missing!");
|
||||
#endif
|
||||
}
|
||||
|
||||
result = wsi_swapchain_init(wsi_device, &chain->base, device, pCreateInfo,
|
||||
@@ -2701,7 +2717,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
|
||||
* 'PresentOptionSuboptimal' complete mode.
|
||||
*/
|
||||
chain->copy_is_suboptimal = false;
|
||||
|
||||
#ifdef HAVE_X11_DRM
|
||||
/* For our swapchain we need to listen to following Present extension events:
|
||||
* - Configure: Window dimensions changed. Images in the swapchain might need
|
||||
* to be reallocated.
|
||||
@@ -2722,7 +2738,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
|
||||
chain->special_event =
|
||||
xcb_register_for_special_xge(chain->conn, &xcb_present_id,
|
||||
chain->event_id, NULL);
|
||||
|
||||
#endif
|
||||
/* Create the graphics context. */
|
||||
chain->gc = xcb_generate_id(chain->conn);
|
||||
if (!chain->gc) {
|
||||
@@ -2802,8 +2818,9 @@ fail_init_images:
|
||||
x11_image_finish(chain, pAllocator, &chain->images[j]);
|
||||
|
||||
fail_register:
|
||||
#ifdef HAVE_X11_DRM
|
||||
xcb_unregister_for_special_event(chain->conn, chain->special_event);
|
||||
|
||||
#endif
|
||||
wsi_swapchain_finish(&chain->base);
|
||||
|
||||
fail_alloc:
|
||||
|
@@ -3,7 +3,7 @@
|
||||
|
||||
inc_loader_x11 = include_directories('.')
|
||||
|
||||
if with_platform_x11 and with_dri3
|
||||
if with_platform_x11 and with_dri_platform == 'drm'
|
||||
libloader_x11 = static_library(
|
||||
'loader_x11',
|
||||
'loader_x11.c',
|
||||
|
Reference in New Issue
Block a user