From 0d83c570afa930f591a568f9a361708be845f5b8 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 25 Jul 2024 12:32:19 -0400 Subject: [PATCH] dri: move swapinterval functions from loader to dri frontend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák Reviewed-by: Adam Jackson Part-of: --- src/gallium/frontends/dri/dri_util.c | 48 ++++++++++++++++++++++++++++ src/gallium/frontends/dri/dri_util.h | 5 +++ src/gallium/targets/dri/dri.sym.in | 2 ++ src/loader/loader_dri_helper.c | 47 --------------------------- src/loader/loader_dri_helper.h | 6 ---- 5 files changed, 55 insertions(+), 53 deletions(-) diff --git a/src/gallium/frontends/dri/dri_util.c b/src/gallium/frontends/dri/dri_util.c index a7d468614a2..bc310435eb1 100644 --- a/src/gallium/frontends/dri/dri_util.c +++ b/src/gallium/frontends/dri/dri_util.c @@ -1180,3 +1180,51 @@ const __DRIimageDriverExtension driImageDriverExtension = { .createContextAttribs = driCreateContextAttribs, .createNewScreen3 = driCreateNewScreen3, }; + + +static int dri_vblank_mode(__DRIscreen *driScreen, const __DRI2configQueryExtension *config) +{ + GLint vblank_mode = DRI_CONF_VBLANK_DEF_INTERVAL_1; + + if (config) + config->configQueryi(driScreen, "vblank_mode", &vblank_mode); + + return vblank_mode; +} + +int dri_get_initial_swap_interval(__DRIscreen *driScreen, + const __DRI2configQueryExtension *config) +{ + int vblank_mode = dri_vblank_mode(driScreen, config); + + switch (vblank_mode) { + case DRI_CONF_VBLANK_NEVER: + case DRI_CONF_VBLANK_DEF_INTERVAL_0: + return 0; + case DRI_CONF_VBLANK_DEF_INTERVAL_1: + case DRI_CONF_VBLANK_ALWAYS_SYNC: + default: + return 1; + } +} + +bool dri_valid_swap_interval(__DRIscreen *driScreen, + const __DRI2configQueryExtension *config, int interval) +{ + int vblank_mode = dri_vblank_mode(driScreen, config); + + switch (vblank_mode) { + case DRI_CONF_VBLANK_NEVER: + if (interval != 0) + return false; + break; + case DRI_CONF_VBLANK_ALWAYS_SYNC: + if (interval <= 0) + return false; + break; + default: + break; + } + + return true; +} diff --git a/src/gallium/frontends/dri/dri_util.h b/src/gallium/frontends/dri/dri_util.h index 643f7df1c35..8709e6fe46c 100644 --- a/src/gallium/frontends/dri/dri_util.h +++ b/src/gallium/frontends/dri/dri_util.h @@ -193,4 +193,9 @@ PUBLIC int dri2GalliumConfigQueryf(__DRIscreen *sPriv, const char *var, float *val); PUBLIC int dri2GalliumConfigQuerys(__DRIscreen *sPriv, const char *var, char **val); + +PUBLIC int dri_get_initial_swap_interval(__DRIscreen *driScreen, + const __DRI2configQueryExtension *config); +PUBLIC bool dri_valid_swap_interval(__DRIscreen *driScreen, + const __DRI2configQueryExtension *config, int interval); #endif /* _DRI_UTIL_H_ */ diff --git a/src/gallium/targets/dri/dri.sym.in b/src/gallium/targets/dri/dri.sym.in index a2af897e019..e49209911b4 100644 --- a/src/gallium/targets/dri/dri.sym.in +++ b/src/gallium/targets/dri/dri.sym.in @@ -17,6 +17,8 @@ dri_flush; dri_invalidate_drawable; dri2GalliumConfigQuery*; + dri_get_initial_swap_interval; + dri_valid_swap_interval; dri_loader_get_extensions; @nouveau_drm_screen_create@ @radeon_drm_winsys_create@ diff --git a/src/loader/loader_dri_helper.c b/src/loader/loader_dri_helper.c index d05c6971bf1..89ca23ec298 100644 --- a/src/loader/loader_dri_helper.c +++ b/src/loader/loader_dri_helper.c @@ -63,53 +63,6 @@ __DRIimage *loader_dri_create_image(__DRIscreen *screen, loaderPrivate); } -static int dri_vblank_mode(__DRIscreen *driScreen, const __DRI2configQueryExtension *config) -{ - GLint vblank_mode = DRI_CONF_VBLANK_DEF_INTERVAL_1; - - if (config) - config->configQueryi(driScreen, "vblank_mode", &vblank_mode); - - return vblank_mode; -} - -int dri_get_initial_swap_interval(__DRIscreen *driScreen, - const __DRI2configQueryExtension *config) -{ - int vblank_mode = dri_vblank_mode(driScreen, config); - - switch (vblank_mode) { - case DRI_CONF_VBLANK_NEVER: - case DRI_CONF_VBLANK_DEF_INTERVAL_0: - return 0; - case DRI_CONF_VBLANK_DEF_INTERVAL_1: - case DRI_CONF_VBLANK_ALWAYS_SYNC: - default: - return 1; - } -} - -bool dri_valid_swap_interval(__DRIscreen *driScreen, - const __DRI2configQueryExtension *config, int interval) -{ - int vblank_mode = dri_vblank_mode(driScreen, config); - - switch (vblank_mode) { - case DRI_CONF_VBLANK_NEVER: - if (interval != 0) - return false; - break; - case DRI_CONF_VBLANK_ALWAYS_SYNC: - if (interval <= 0) - return false; - break; - default: - break; - } - - return true; -} - /* the DRIimage createImage function takes __DRI_IMAGE_FORMAT codes, while * the createImageFromDmaBufs call takes DRM_FORMAT codes. To avoid * complete confusion, just deal in __DRI_IMAGE_FORMAT codes for now and diff --git a/src/loader/loader_dri_helper.h b/src/loader/loader_dri_helper.h index b661ffeaedc..794049eea1a 100644 --- a/src/loader/loader_dri_helper.h +++ b/src/loader/loader_dri_helper.h @@ -112,12 +112,6 @@ __DRIimage *loader_dri_create_image(__DRIscreen *screen, unsigned int modifiers_count, void *loaderPrivate); -int dri_get_initial_swap_interval(__DRIscreen *driScreen, - const __DRI2configQueryExtension *config); - -bool dri_valid_swap_interval(__DRIscreen *driScreen, - const __DRI2configQueryExtension *config, int interval); - int loader_image_format_to_fourcc(int format);