GLX/DRI2: expose swap control extensions if DDX support is present
Export DDX swap control status from the DRI2 module and check for it in GLX when initializing extensions. Reviewed-by: Mario Kleiner <mario.kleiner@tuebingen.mpg.de> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
5933b0abc6
commit
165a4a9c7d
|
@ -616,6 +616,7 @@ glxDRILeaveVT (int index, int flags)
|
|||
static void
|
||||
initializeExtensions(__GLXDRIscreen *screen)
|
||||
{
|
||||
ScreenPtr pScreen = screen->base.pScreen;
|
||||
const __DRIextension **extensions;
|
||||
int i;
|
||||
|
||||
|
@ -625,10 +626,17 @@ initializeExtensions(__GLXDRIscreen *screen)
|
|||
"GLX_MESA_copy_sub_buffer");
|
||||
LogMessage(X_INFO, "AIGLX: enabled GLX_MESA_copy_sub_buffer\n");
|
||||
|
||||
/* FIXME: only if DDX supports it */
|
||||
__glXEnableExtension(screen->glx_enable_bits, "GLX_INTEL_swap_event");
|
||||
LogMessage(X_INFO, "AIGLX: enabled GLX_INTEL_swap_event\n");
|
||||
|
||||
if (DRI2HasSwapControl(pScreen)) {
|
||||
__glXEnableExtension(screen->glx_enable_bits,
|
||||
"GLX_SGI_swap_control");
|
||||
__glXEnableExtension(screen->glx_enable_bits,
|
||||
"GLX_MESA_swap_control");
|
||||
LogMessage(X_INFO, "AIGLX: enabled GLX_SGI_swap_control and GLX_MESA_swap_control\n");
|
||||
}
|
||||
|
||||
for (i = 0; extensions[i]; i++) {
|
||||
#ifdef __DRI_READ_DRAWABLE
|
||||
if (strcmp(extensions[i]->name, __DRI_READ_DRAWABLE) == 0) {
|
||||
|
@ -639,19 +647,6 @@ initializeExtensions(__GLXDRIscreen *screen)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef __DRI_SWAP_CONTROL
|
||||
if (strcmp(extensions[i]->name, __DRI_SWAP_CONTROL) == 0) {
|
||||
screen->swapControl =
|
||||
(const __DRIswapControlExtension *) extensions[i];
|
||||
__glXEnableExtension(screen->glx_enable_bits,
|
||||
"GLX_SGI_swap_control");
|
||||
__glXEnableExtension(screen->glx_enable_bits,
|
||||
"GLX_MESA_swap_control");
|
||||
|
||||
LogMessage(X_INFO, "AIGLX: enabled GLX_SGI_swap_control and GLX_MESA_swap_control\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __DRI_TEX_BUFFER
|
||||
if (strcmp(extensions[i]->name, __DRI_TEX_BUFFER) == 0) {
|
||||
screen->texBuffer =
|
||||
|
|
|
@ -830,6 +830,14 @@ DRI2DestroyDrawable(DrawablePtr pDraw)
|
|||
DRI2FreeDrawable(pDraw);
|
||||
}
|
||||
|
||||
Bool
|
||||
DRI2HasSwapControl(ScreenPtr pScreen)
|
||||
{
|
||||
DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
|
||||
|
||||
return (ds->ScheduleSwap && ds->GetMSC);
|
||||
}
|
||||
|
||||
Bool
|
||||
DRI2Connect(ScreenPtr pScreen, unsigned int driverType, int *fd,
|
||||
const char **driverName, const char **deviceName)
|
||||
|
|
|
@ -188,6 +188,8 @@ extern _X_EXPORT Bool DRI2ScreenInit(ScreenPtr pScreen,
|
|||
|
||||
extern _X_EXPORT void DRI2CloseScreen(ScreenPtr pScreen);
|
||||
|
||||
extern _X_EXPORT Bool DRI2HasSwapControl(ScreenPtr pScreen);
|
||||
|
||||
extern _X_EXPORT Bool DRI2Connect(ScreenPtr pScreen,
|
||||
unsigned int driverType,
|
||||
int *fd,
|
||||
|
|
Loading…
Reference in New Issue
Block a user