dri: move swapinterval functions from loader to dri frontend

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/30450>
This commit is contained in:
Mike Blumenkrantz 2024-07-25 12:32:19 -04:00 committed by Marge Bot
parent 98b62ee57f
commit 0d83c570af
5 changed files with 55 additions and 53 deletions

View file

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

View file

@ -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_ */

View file

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

View file

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

View file

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