From b6f7a4836ab273eaec5d030457e8d433dd9baed3 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Wed, 30 Mar 2022 10:11:04 -0400 Subject: [PATCH] dri: Fill in the driver extensions for the legacy createNewScreen paths The inner routine is going to want access to the driver extensions, but the legacy paths only give you the loader extensions. Reviewed-by: Emma Anholt Part-of: --- src/gallium/frontends/dri/dri_util.c | 35 ++++++++++++++++++++++++---- src/gallium/frontends/dri/dri_util.h | 1 + 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/gallium/frontends/dri/dri_util.c b/src/gallium/frontends/dri/dri_util.c index 6365e7038a7..92012d783e0 100644 --- a/src/gallium/frontends/dri/dri_util.c +++ b/src/gallium/frontends/dri/dri_util.c @@ -42,6 +42,7 @@ #include #include "dri_util.h" #include "dri_context.h" +#include "dri_screen.h" #include "utils.h" #include "util/u_endian.h" #include "util/driconf.h" @@ -197,8 +198,19 @@ dri2CreateNewScreen(int scrn, int fd, const __DRIextension **extensions, const __DRIconfig ***driver_configs, void *data) { - return driCreateNewScreen2(scrn, fd, extensions, NULL, - driver_configs, data); + return driCreateNewScreen2(scrn, fd, extensions, + galliumdrm_driver_extensions, + driver_configs, data); +} + +static __DRIscreen * +swkmsCreateNewScreen(int scrn, int fd, + const __DRIextension **extensions, + const __DRIconfig ***driver_configs, void *data) +{ + return driCreateNewScreen2(scrn, fd, extensions, + dri_kms_driver_extensions, + driver_configs, data); } /** swrast driver createNewScreen entrypoint. */ @@ -206,8 +218,9 @@ static __DRIscreen * driSWRastCreateNewScreen(int scrn, const __DRIextension **extensions, const __DRIconfig ***driver_configs, void *data) { - return driCreateNewScreen2(scrn, -1, extensions, NULL, - driver_configs, data); + return driCreateNewScreen2(scrn, -1, extensions, + galliumsw_driver_extensions, + driver_configs, data); } static __DRIscreen * @@ -832,6 +845,20 @@ const __DRIdri2Extension driDRI2Extension = { .createNewScreen2 = driCreateNewScreen2, }; +const __DRIdri2Extension swkmsDRI2Extension = { + .base = { __DRI_DRI2, 4 }, + + .createNewScreen = swkmsCreateNewScreen, + .createNewDrawable = driCreateNewDrawable, + .createNewContext = driCreateNewContext, + .getAPIMask = driGetAPIMask, + .createNewContextForAPI = driCreateNewContextForAPI, + .allocateBuffer = dri2AllocateBuffer, + .releaseBuffer = dri2ReleaseBuffer, + .createContextAttribs = driCreateContextAttribs, + .createNewScreen2 = driCreateNewScreen2, +}; + const __DRIswrastExtension driSWRastExtension = { .base = { __DRI_SWRAST, 4 }, diff --git a/src/gallium/frontends/dri/dri_util.h b/src/gallium/frontends/dri/dri_util.h index c43f269f7d9..c6e68809637 100644 --- a/src/gallium/frontends/dri/dri_util.h +++ b/src/gallium/frontends/dri/dri_util.h @@ -69,6 +69,7 @@ struct gl_context; extern const __DRIcoreExtension driCoreExtension; extern const __DRIswrastExtension driSWRastExtension; extern const __DRIdri2Extension driDRI2Extension; +extern const __DRIdri2Extension swkmsDRI2Extension; extern const __DRI2configQueryExtension dri2ConfigQueryExtension; extern const __DRIcopySubBufferExtension driCopySubBufferExtension; extern const __DRI2flushControlExtension dri2FlushControlExtension;