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:
parent
23cce73221
commit
e21de4bf3c
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue