glx: Move glx_enable_bits up to the GLX screen base class

Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Adam Jackson 2016-03-23 15:36:52 -04:00
parent 23cce73221
commit e21de4bf3c
5 changed files with 36 additions and 39 deletions

View File

@ -75,8 +75,6 @@ struct __GLXDRIscreen {
const __DRIswapControlExtension *swapControl; const __DRIswapControlExtension *swapControl;
const __DRItexBufferExtension *texBuffer; const __DRItexBufferExtension *texBuffer;
const __DRIconfig **driConfigs; const __DRIconfig **driConfigs;
unsigned char glx_enable_bits[__GLX_EXT_BYTES];
}; };
struct __GLXDRIcontext { struct __GLXDRIcontext {
@ -847,18 +845,19 @@ glxDRILeaveVT(ScrnInfoPtr scrn)
* @param screen The screen where glx_enable_bits are to be set. * @param screen The screen where glx_enable_bits are to be set.
*/ */
static void static void
initializeExtensions(__GLXDRIscreen * screen) initializeExtensions(__GLXscreen * screen)
{ {
ScreenPtr pScreen = screen->base.pScreen; ScreenPtr pScreen = screen->pScreen;
__GLXDRIscreen *dri = (__GLXDRIscreen *)screen;
const __DRIextension **extensions; const __DRIextension **extensions;
int i; int i;
extensions = screen->core->getExtensions(screen->driScreen); extensions = dri->core->getExtensions(dri->driScreen);
__glXEnableExtension(screen->glx_enable_bits, "GLX_MESA_copy_sub_buffer"); __glXEnableExtension(screen->glx_enable_bits, "GLX_MESA_copy_sub_buffer");
LogMessage(X_INFO, "AIGLX: enabled GLX_MESA_copy_sub_buffer\n"); LogMessage(X_INFO, "AIGLX: enabled GLX_MESA_copy_sub_buffer\n");
if (screen->dri2->base.version >= 3) { if (dri->dri2->base.version >= 3) {
__glXEnableExtension(screen->glx_enable_bits, __glXEnableExtension(screen->glx_enable_bits,
"GLX_ARB_create_context"); "GLX_ARB_create_context");
__glXEnableExtension(screen->glx_enable_bits, __glXEnableExtension(screen->glx_enable_bits,
@ -901,7 +900,7 @@ initializeExtensions(__GLXDRIscreen * screen)
for (i = 0; extensions[i]; i++) { for (i = 0; extensions[i]; i++) {
if (strcmp(extensions[i]->name, __DRI_TEX_BUFFER) == 0) { if (strcmp(extensions[i]->name, __DRI_TEX_BUFFER) == 0) {
screen->texBuffer = (const __DRItexBufferExtension *) extensions[i]; dri->texBuffer = (const __DRItexBufferExtension *) extensions[i];
__glXEnableExtension(screen->glx_enable_bits, __glXEnableExtension(screen->glx_enable_bits,
"GLX_EXT_texture_from_pixmap"); "GLX_EXT_texture_from_pixmap");
LogMessage(X_INFO, LogMessage(X_INFO,
@ -910,11 +909,11 @@ initializeExtensions(__GLXDRIscreen * screen)
if (strcmp(extensions[i]->name, __DRI2_FLUSH) == 0 && if (strcmp(extensions[i]->name, __DRI2_FLUSH) == 0 &&
extensions[i]->version >= 3) { extensions[i]->version >= 3) {
screen->flush = (__DRI2flushExtension *) extensions[i]; dri->flush = (__DRI2flushExtension *) extensions[i];
} }
if (strcmp(extensions[i]->name, __DRI2_ROBUSTNESS) == 0 && if (strcmp(extensions[i]->name, __DRI2_ROBUSTNESS) == 0 &&
screen->dri2->base.version >= 3) { dri->dri2->base.version >= 3) {
__glXEnableExtension(screen->glx_enable_bits, __glXEnableExtension(screen->glx_enable_bits,
"GLX_ARB_create_context_robustness"); "GLX_ARB_create_context_robustness");
LogMessage(X_INFO, LogMessage(X_INFO,
@ -960,7 +959,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
screen->base.swapInterval = __glXDRIdrawableSwapInterval; screen->base.swapInterval = __glXDRIdrawableSwapInterval;
screen->base.pScreen = pScreen; screen->base.pScreen = pScreen;
__glXInitExtensionEnableBits(screen->glx_enable_bits); __glXInitExtensionEnableBits(screen->base.glx_enable_bits);
screen->driver = screen->driver =
glxProbeDriver(driverName, (void **) &screen->core, __DRI_CORE, 1, glxProbeDriver(driverName, (void **) &screen->core, __DRI_CORE, 1,
@ -980,7 +979,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
goto handle_error; goto handle_error;
} }
initializeExtensions(screen); initializeExtensions(&screen->base);
screen->base.fbconfigs = glxConvertConfigs(screen->core, screen->driConfigs, screen->base.fbconfigs = glxConvertConfigs(screen->core, screen->driConfigs,
GLX_WINDOW_BIT | GLX_WINDOW_BIT |
@ -993,10 +992,10 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
* This allows us to allocate some memory to hold the extension string, * This allows us to allocate some memory to hold the extension string,
* but it requires that we call __glXGetExtensionString a second time. * but it requires that we call __glXGetExtensionString a second time.
*/ */
buffer_size = __glXGetExtensionString(screen->glx_enable_bits, NULL); buffer_size = __glXGetExtensionString(screen->base.glx_enable_bits, NULL);
if (buffer_size > 0) { if (buffer_size > 0) {
screen->base.GLXextensions = xnfalloc(buffer_size); screen->base.GLXextensions = xnfalloc(buffer_size);
(void) __glXGetExtensionString(screen->glx_enable_bits, (void) __glXGetExtensionString(screen->base.glx_enable_bits,
screen->base.GLXextensions); screen->base.GLXextensions);
} }

View File

@ -391,15 +391,16 @@ static const __DRIextension *loader_extensions[] = {
}; };
static void static void
initializeExtensions(__GLXDRIscreen * screen) initializeExtensions(__GLXscreen * screen)
{ {
const __DRIextension **extensions; const __DRIextension **extensions;
__GLXDRIscreen *dri = (__GLXDRIscreen *)screen;
int i; int i;
__glXEnableExtension(screen->glx_enable_bits, "GLX_MESA_copy_sub_buffer"); __glXEnableExtension(screen->glx_enable_bits, "GLX_MESA_copy_sub_buffer");
LogMessage(X_INFO, "AIGLX: enabled GLX_MESA_copy_sub_buffer\n"); LogMessage(X_INFO, "AIGLX: enabled GLX_MESA_copy_sub_buffer\n");
if (screen->swrast->base.version >= 3) { if (dri->swrast->base.version >= 3) {
__glXEnableExtension(screen->glx_enable_bits, __glXEnableExtension(screen->glx_enable_bits,
"GLX_ARB_create_context"); "GLX_ARB_create_context");
__glXEnableExtension(screen->glx_enable_bits, __glXEnableExtension(screen->glx_enable_bits,
@ -415,16 +416,16 @@ initializeExtensions(__GLXDRIscreen * screen)
__glXEnableExtension(screen->glx_enable_bits, "GLX_ARB_fbconfig_float"); __glXEnableExtension(screen->glx_enable_bits, "GLX_ARB_fbconfig_float");
__glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_fbconfig_packed_float"); __glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_fbconfig_packed_float");
extensions = screen->core->getExtensions(screen->driScreen); extensions = dri->core->getExtensions(dri->driScreen);
for (i = 0; extensions[i]; i++) { for (i = 0; extensions[i]; i++) {
if (strcmp(extensions[i]->name, __DRI_COPY_SUB_BUFFER) == 0) { if (strcmp(extensions[i]->name, __DRI_COPY_SUB_BUFFER) == 0) {
screen->copySubBuffer = dri->copySubBuffer =
(const __DRIcopySubBufferExtension *) extensions[i]; (const __DRIcopySubBufferExtension *) extensions[i];
} }
if (strcmp(extensions[i]->name, __DRI_TEX_BUFFER) == 0) { if (strcmp(extensions[i]->name, __DRI_TEX_BUFFER) == 0) {
screen->texBuffer = (const __DRItexBufferExtension *) extensions[i]; dri->texBuffer = (const __DRItexBufferExtension *) extensions[i];
__glXEnableExtension(screen->glx_enable_bits, __glXEnableExtension(screen->glx_enable_bits,
"GLX_EXT_texture_from_pixmap\n"); "GLX_EXT_texture_from_pixmap\n");
} }
@ -459,7 +460,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
screen->base.swapInterval = NULL; screen->base.swapInterval = NULL;
screen->base.pScreen = pScreen; screen->base.pScreen = pScreen;
__glXInitExtensionEnableBits(screen->glx_enable_bits); __glXInitExtensionEnableBits(screen->base.glx_enable_bits);
screen->driver = glxProbeDriver(driverName, screen->driver = glxProbeDriver(driverName,
(void **) &screen->core, (void **) &screen->core,
@ -480,7 +481,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
goto handle_error; goto handle_error;
} }
initializeExtensions(screen); initializeExtensions(&screen->base);
screen->base.fbconfigs = glxConvertConfigs(screen->core, screen->driConfigs, screen->base.fbconfigs = glxConvertConfigs(screen->core, screen->driConfigs,
GLX_WINDOW_BIT | GLX_WINDOW_BIT |
@ -493,10 +494,10 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
* This allows us to allocate some memory to hold the extension string, * This allows us to allocate some memory to hold the extension string,
* but it requires that we call __glXGetExtensionString a second time. * but it requires that we call __glXGetExtensionString a second time.
*/ */
buffer_size = __glXGetExtensionString(screen->glx_enable_bits, NULL); buffer_size = __glXGetExtensionString(screen->base.glx_enable_bits, NULL);
if (buffer_size > 0) { if (buffer_size > 0) {
screen->base.GLXextensions = xnfalloc(buffer_size); screen->base.GLXextensions = xnfalloc(buffer_size);
(void) __glXGetExtensionString(screen->glx_enable_bits, (void) __glXGetExtensionString(screen->base.glx_enable_bits,
screen->base.GLXextensions); screen->base.GLXextensions);
} }

View File

@ -35,6 +35,8 @@
* Silicon Graphics, Inc. * Silicon Graphics, Inc.
*/ */
#include "extension_string.h"
typedef struct __GLXconfig __GLXconfig; typedef struct __GLXconfig __GLXconfig;
struct __GLXconfig { struct __GLXconfig {
__GLXconfig *next; __GLXconfig *next;
@ -141,6 +143,7 @@ struct __GLXscreen {
char *GLextensions; char *GLextensions;
char *GLXextensions; char *GLXextensions;
unsigned char glx_enable_bits[__GLX_EXT_BYTES];
Bool (*CloseScreen) (ScreenPtr pScreen); Bool (*CloseScreen) (ScreenPtr pScreen);
}; };

View File

@ -112,9 +112,6 @@ typedef struct __GLXAquaDrawable __GLXAquaDrawable;
*/ */
struct __GLXAquaScreen { struct __GLXAquaScreen {
__GLXscreen base; __GLXscreen base;
/* Supported GLX extensions */
unsigned char glx_enable_bits[__GLX_EXT_BYTES];
}; };
struct __GLXAquaContext { struct __GLXAquaContext {
@ -542,19 +539,19 @@ __glXAquaScreenProbe(ScreenPtr pScreen)
screen->base.fbconfigs = __glXAquaCreateVisualConfigs( screen->base.fbconfigs = __glXAquaCreateVisualConfigs(
&screen->base.numFBConfigs, pScreen->myNum); &screen->base.numFBConfigs, pScreen->myNum);
__glXInitExtensionEnableBits(screen->glx_enable_bits); __glXInitExtensionEnableBits(screen->base.glx_enable_bits);
__glXScreenInit(&screen->base, pScreen); __glXScreenInit(&screen->base, pScreen);
//__glXEnableExtension(screen->glx_enable_bits, "GLX_ARB_create_context"); //__glXEnableExtension(screen->base.glx_enable_bits, "GLX_ARB_create_context");
//__glXEnableExtension(screen->glx_enable_bits, "GLX_ARB_create_context_profile"); //__glXEnableExtension(screen->base.glx_enable_bits, "GLX_ARB_create_context_profile");
// Generate the GLX extensions string (overrides that set by __glXScreenInit()) // Generate the GLX extensions string (overrides that set by __glXScreenInit())
{ {
unsigned int buffer_size = unsigned int buffer_size =
__glXGetExtensionString(screen->glx_enable_bits, NULL); __glXGetExtensionString(screen->base.glx_enable_bits, NULL);
if (buffer_size > 0) { if (buffer_size > 0) {
screen->base.GLXextensions = xnfalloc(buffer_size); screen->base.GLXextensions = xnfalloc(buffer_size);
__glXGetExtensionString(screen->glx_enable_bits, __glXGetExtensionString(screen->base.glx_enable_bits,
screen->base.GLXextensions); screen->base.GLXextensions);
} }
} }

View File

@ -136,9 +136,6 @@ struct __GLXWinDrawable {
struct __GLXWinScreen { struct __GLXWinScreen {
__GLXscreen base; __GLXscreen base;
/* Supported GLX extensions */
unsigned char glx_enable_bits[__GLX_EXT_BYTES];
Bool has_WGL_ARB_multisample; Bool has_WGL_ARB_multisample;
Bool has_WGL_ARB_pixel_format; Bool has_WGL_ARB_pixel_format;
Bool has_WGL_ARB_pbuffer; Bool has_WGL_ARB_pbuffer;
@ -632,7 +629,7 @@ glxWinScreenProbe(ScreenPtr pScreen)
// Based on the WGL extensions available, enable various GLX extensions // Based on the WGL extensions available, enable various GLX extensions
// XXX: make this table-driven ? // XXX: make this table-driven ?
// //
__glXInitExtensionEnableBits(screen->glx_enable_bits); __glXInitExtensionEnableBits(screen->base.glx_enable_bits);
if (strstr(wgl_extensions, "WGL_ARB_make_current_read")) if (strstr(wgl_extensions, "WGL_ARB_make_current_read"))
screen->has_WGL_ARB_make_current_read = TRUE; screen->has_WGL_ARB_make_current_read = TRUE;
@ -640,13 +637,13 @@ glxWinScreenProbe(ScreenPtr pScreen)
LogMessage(X_WARNING, "AIGLX: missing WGL_ARB_make_current_read\n") LogMessage(X_WARNING, "AIGLX: missing WGL_ARB_make_current_read\n")
if (strstr(gl_extensions, "GL_WIN_swap_hint")) { if (strstr(gl_extensions, "GL_WIN_swap_hint")) {
__glXEnableExtension(screen->glx_enable_bits, __glXEnableExtension(screen->base.glx_enable_bits,
"GLX_MESA_copy_sub_buffer"); "GLX_MESA_copy_sub_buffer");
LogMessage(X_INFO, "AIGLX: enabled GLX_MESA_copy_sub_buffer\n"); LogMessage(X_INFO, "AIGLX: enabled GLX_MESA_copy_sub_buffer\n");
} }
if (strstr(wgl_extensions, "WGL_EXT_swap_control")) { if (strstr(wgl_extensions, "WGL_EXT_swap_control")) {
__glXEnableExtension(screen->glx_enable_bits, __glXEnableExtension(screen->base.glx_enable_bits,
"GLX_SGI_swap_control"); "GLX_SGI_swap_control");
LogMessage(X_INFO, "AIGLX: enabled GLX_SGI_swap_control\n"); LogMessage(X_INFO, "AIGLX: enabled GLX_SGI_swap_control\n");
} }
@ -654,7 +651,7 @@ glxWinScreenProbe(ScreenPtr pScreen)
/* // Hmm? screen->texOffset */ /* // Hmm? screen->texOffset */
/* if (strstr(wgl_extensions, "WGL_ARB_render_texture")) */ /* if (strstr(wgl_extensions, "WGL_ARB_render_texture")) */
/* { */ /* { */
/* __glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_texture_from_pixmap"); */ /* __glXEnableExtension(screen->base.glx_enable_bits, "GLX_EXT_texture_from_pixmap"); */
/* LogMessage(X_INFO, "AIGLX: GLX_EXT_texture_from_pixmap backed by buffer objects\n"); */ /* LogMessage(X_INFO, "AIGLX: GLX_EXT_texture_from_pixmap backed by buffer objects\n"); */
/* screen->has_WGL_ARB_render_texture = TRUE; */ /* screen->has_WGL_ARB_render_texture = TRUE; */
/* } */ /* } */
@ -713,10 +710,10 @@ glxWinScreenProbe(ScreenPtr pScreen)
// Generate the GLX extensions string (overrides that set by __glXScreenInit()) // Generate the GLX extensions string (overrides that set by __glXScreenInit())
{ {
unsigned int buffer_size = unsigned int buffer_size =
__glXGetExtensionString(screen->glx_enable_bits, NULL); __glXGetExtensionString(screen->base.glx_enable_bits, NULL);
if (buffer_size > 0) { if (buffer_size > 0) {
screen->base.GLXextensions = xnfalloc(buffer_size); screen->base.GLXextensions = xnfalloc(buffer_size);
__glXGetExtensionString(screen->glx_enable_bits, __glXGetExtensionString(screen->base.glx_enable_bits,
screen->base.GLXextensions); screen->base.GLXextensions);
} }
} }