dri: Move dri{Get,Index}ConfigAttrib near their vtable

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16377>
This commit is contained in:
Adam Jackson 2022-05-06 15:21:53 -04:00 committed by Marge Bot
parent 66d25f96db
commit 5eccb228ba
3 changed files with 151 additions and 168 deletions

View File

@ -241,6 +241,157 @@ static const __DRIextension **driGetExtensions(__DRIscreen *psp)
/*@}*/
/* WARNING: HACK: Local defines to avoid pulling glx.h.
*/
#define GLX_NONE 0x8000
#define GLX_DONT_CARE 0xFFFFFFFF
#define __ATTRIB(attrib, field) case attrib: *value = config->modes.field; break
/**
* Return the value of a configuration attribute. The attribute is
* indicated by the index.
*/
static int
driGetConfigAttribIndex(const __DRIconfig *config,
unsigned int index, unsigned int *value)
{
switch (index + 1) {
__ATTRIB(__DRI_ATTRIB_BUFFER_SIZE, rgbBits);
__ATTRIB(__DRI_ATTRIB_RED_SIZE, redBits);
__ATTRIB(__DRI_ATTRIB_GREEN_SIZE, greenBits);
__ATTRIB(__DRI_ATTRIB_BLUE_SIZE, blueBits);
case __DRI_ATTRIB_LEVEL:
case __DRI_ATTRIB_LUMINANCE_SIZE:
case __DRI_ATTRIB_AUX_BUFFERS:
*value = 0;
break;
__ATTRIB(__DRI_ATTRIB_ALPHA_SIZE, alphaBits);
case __DRI_ATTRIB_ALPHA_MASK_SIZE:
/* I have no idea what this value was ever meant to mean, it's
* never been set to anything, just say 0.
*/
*value = 0;
break;
__ATTRIB(__DRI_ATTRIB_DEPTH_SIZE, depthBits);
__ATTRIB(__DRI_ATTRIB_STENCIL_SIZE, stencilBits);
__ATTRIB(__DRI_ATTRIB_ACCUM_RED_SIZE, accumRedBits);
__ATTRIB(__DRI_ATTRIB_ACCUM_GREEN_SIZE, accumGreenBits);
__ATTRIB(__DRI_ATTRIB_ACCUM_BLUE_SIZE, accumBlueBits);
__ATTRIB(__DRI_ATTRIB_ACCUM_ALPHA_SIZE, accumAlphaBits);
case __DRI_ATTRIB_SAMPLE_BUFFERS:
*value = !!config->modes.samples;
break;
__ATTRIB(__DRI_ATTRIB_SAMPLES, samples);
case __DRI_ATTRIB_RENDER_TYPE:
/* no support for color index mode */
*value = __DRI_ATTRIB_RGBA_BIT;
if (config->modes.floatMode)
*value |= __DRI_ATTRIB_FLOAT_BIT;
break;
case __DRI_ATTRIB_CONFIG_CAVEAT:
if (config->modes.accumRedBits != 0)
*value = __DRI_ATTRIB_SLOW_BIT;
else
*value = 0;
break;
case __DRI_ATTRIB_CONFORMANT:
*value = GL_TRUE;
break;
__ATTRIB(__DRI_ATTRIB_DOUBLE_BUFFER, doubleBufferMode);
__ATTRIB(__DRI_ATTRIB_STEREO, stereoMode);
case __DRI_ATTRIB_TRANSPARENT_TYPE:
case __DRI_ATTRIB_TRANSPARENT_INDEX_VALUE: /* horrible bc hack */
*value = GLX_NONE;
break;
case __DRI_ATTRIB_TRANSPARENT_RED_VALUE:
case __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE:
case __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE:
case __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE:
*value = GLX_DONT_CARE;
break;
case __DRI_ATTRIB_FLOAT_MODE:
*value = config->modes.floatMode;
break;
__ATTRIB(__DRI_ATTRIB_RED_MASK, redMask);
__ATTRIB(__DRI_ATTRIB_GREEN_MASK, greenMask);
__ATTRIB(__DRI_ATTRIB_BLUE_MASK, blueMask);
__ATTRIB(__DRI_ATTRIB_ALPHA_MASK, alphaMask);
case __DRI_ATTRIB_MAX_PBUFFER_WIDTH:
case __DRI_ATTRIB_MAX_PBUFFER_HEIGHT:
case __DRI_ATTRIB_MAX_PBUFFER_PIXELS:
case __DRI_ATTRIB_OPTIMAL_PBUFFER_WIDTH:
case __DRI_ATTRIB_OPTIMAL_PBUFFER_HEIGHT:
case __DRI_ATTRIB_VISUAL_SELECT_GROUP:
*value = 0;
break;
__ATTRIB(__DRI_ATTRIB_SWAP_METHOD, swapMethod);
case __DRI_ATTRIB_MAX_SWAP_INTERVAL:
*value = INT_MAX;
break;
case __DRI_ATTRIB_MIN_SWAP_INTERVAL:
*value = 0;
break;
case __DRI_ATTRIB_BIND_TO_TEXTURE_RGB:
case __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA:
case __DRI_ATTRIB_YINVERTED:
*value = GL_TRUE;
break;
case __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE:
*value = GL_FALSE;
break;
case __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS:
*value = __DRI_ATTRIB_TEXTURE_1D_BIT |
__DRI_ATTRIB_TEXTURE_2D_BIT |
__DRI_ATTRIB_TEXTURE_RECTANGLE_BIT;
break;
__ATTRIB(__DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE, sRGBCapable);
case __DRI_ATTRIB_MUTABLE_RENDER_BUFFER:
*value = GL_FALSE;
break;
__ATTRIB(__DRI_ATTRIB_RED_SHIFT, redShift);
__ATTRIB(__DRI_ATTRIB_GREEN_SHIFT, greenShift);
__ATTRIB(__DRI_ATTRIB_BLUE_SHIFT, blueShift);
__ATTRIB(__DRI_ATTRIB_ALPHA_SHIFT, alphaShift);
default:
/* XXX log an error or smth */
return GL_FALSE;
}
return GL_TRUE;
}
/**
* Get the value of a configuration attribute.
* \param attrib the attribute (one of the _DRI_ATTRIB_x tokens)
* \param value returns the attribute's value
* \return 1 for success, 0 for failure
*/
static int
driGetConfigAttrib(const __DRIconfig *config,
unsigned int attrib, unsigned int *value)
{
return driGetConfigAttribIndex(config, attrib - 1, value);
}
/**
* Get a configuration attribute name and value, given an index.
* \param index which field of the __DRIconfig to query
* \param attrib returns the attribute name (one of the _DRI_ATTRIB_x tokens)
* \param value returns the attribute's value
* \return 1 for success, 0 for failure
*/
static int
driIndexConfigAttrib(const __DRIconfig *config, int index,
unsigned int *attrib, unsigned int *value)
{
if (driGetConfigAttribIndex(config, index, value)) {
*attrib = index + 1;
return GL_TRUE;
}
return GL_FALSE;
}
static bool
validate_context_version(__DRIscreen *screen,

View File

@ -39,165 +39,4 @@
#include "utils.h"
#include "dri_util.h"
/* WARNING: HACK: Local defines to avoid pulling glx.h.
*
* Any parts of this file that use the following defines are either partial or
* entirely broken wrt EGL.
*
* For example any getConfigAttrib() or indexConfigAttrib() query from EGL for
* SLOW or NON_CONFORMANT_CONFIG will not work as expected since the EGL tokens
* are different from the GLX ones.
*/
#define GLX_NONE 0x8000
#define GLX_SLOW_CONFIG 0x8001
#define GLX_NON_CONFORMANT_CONFIG 0x800D
#define GLX_DONT_CARE 0xFFFFFFFF
#define __ATTRIB(attrib, field) case attrib: *value = config->modes.field; break
/**
* Return the value of a configuration attribute. The attribute is
* indicated by the index.
*/
static int
driGetConfigAttribIndex(const __DRIconfig *config,
unsigned int index, unsigned int *value)
{
switch (index + 1) {
__ATTRIB(__DRI_ATTRIB_BUFFER_SIZE, rgbBits);
__ATTRIB(__DRI_ATTRIB_RED_SIZE, redBits);
__ATTRIB(__DRI_ATTRIB_GREEN_SIZE, greenBits);
__ATTRIB(__DRI_ATTRIB_BLUE_SIZE, blueBits);
case __DRI_ATTRIB_LEVEL:
case __DRI_ATTRIB_LUMINANCE_SIZE:
case __DRI_ATTRIB_AUX_BUFFERS:
*value = 0;
break;
__ATTRIB(__DRI_ATTRIB_ALPHA_SIZE, alphaBits);
case __DRI_ATTRIB_ALPHA_MASK_SIZE:
/* I have no idea what this value was ever meant to mean, it's
* never been set to anything, just say 0.
*/
*value = 0;
break;
__ATTRIB(__DRI_ATTRIB_DEPTH_SIZE, depthBits);
__ATTRIB(__DRI_ATTRIB_STENCIL_SIZE, stencilBits);
__ATTRIB(__DRI_ATTRIB_ACCUM_RED_SIZE, accumRedBits);
__ATTRIB(__DRI_ATTRIB_ACCUM_GREEN_SIZE, accumGreenBits);
__ATTRIB(__DRI_ATTRIB_ACCUM_BLUE_SIZE, accumBlueBits);
__ATTRIB(__DRI_ATTRIB_ACCUM_ALPHA_SIZE, accumAlphaBits);
case __DRI_ATTRIB_SAMPLE_BUFFERS:
*value = !!config->modes.samples;
break;
__ATTRIB(__DRI_ATTRIB_SAMPLES, samples);
case __DRI_ATTRIB_RENDER_TYPE:
/* no support for color index mode */
*value = __DRI_ATTRIB_RGBA_BIT;
if (config->modes.floatMode)
*value |= __DRI_ATTRIB_FLOAT_BIT;
break;
case __DRI_ATTRIB_CONFIG_CAVEAT:
if (config->modes.accumRedBits != 0)
*value = __DRI_ATTRIB_SLOW_BIT;
else
*value = 0;
break;
case __DRI_ATTRIB_CONFORMANT:
*value = GL_TRUE;
break;
__ATTRIB(__DRI_ATTRIB_DOUBLE_BUFFER, doubleBufferMode);
__ATTRIB(__DRI_ATTRIB_STEREO, stereoMode);
case __DRI_ATTRIB_TRANSPARENT_TYPE:
case __DRI_ATTRIB_TRANSPARENT_INDEX_VALUE: /* horrible bc hack */
*value = GLX_NONE;
break;
case __DRI_ATTRIB_TRANSPARENT_RED_VALUE:
case __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE:
case __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE:
case __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE:
*value = GLX_DONT_CARE;
break;
case __DRI_ATTRIB_FLOAT_MODE:
*value = config->modes.floatMode;
break;
__ATTRIB(__DRI_ATTRIB_RED_MASK, redMask);
__ATTRIB(__DRI_ATTRIB_GREEN_MASK, greenMask);
__ATTRIB(__DRI_ATTRIB_BLUE_MASK, blueMask);
__ATTRIB(__DRI_ATTRIB_ALPHA_MASK, alphaMask);
case __DRI_ATTRIB_MAX_PBUFFER_WIDTH:
case __DRI_ATTRIB_MAX_PBUFFER_HEIGHT:
case __DRI_ATTRIB_MAX_PBUFFER_PIXELS:
case __DRI_ATTRIB_OPTIMAL_PBUFFER_WIDTH:
case __DRI_ATTRIB_OPTIMAL_PBUFFER_HEIGHT:
case __DRI_ATTRIB_VISUAL_SELECT_GROUP:
*value = 0;
break;
__ATTRIB(__DRI_ATTRIB_SWAP_METHOD, swapMethod);
case __DRI_ATTRIB_MAX_SWAP_INTERVAL:
*value = INT_MAX;
break;
case __DRI_ATTRIB_MIN_SWAP_INTERVAL:
*value = 0;
break;
case __DRI_ATTRIB_BIND_TO_TEXTURE_RGB:
case __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA:
case __DRI_ATTRIB_YINVERTED:
*value = GL_TRUE;
break;
case __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE:
*value = GL_FALSE;
break;
case __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS:
*value = __DRI_ATTRIB_TEXTURE_1D_BIT |
__DRI_ATTRIB_TEXTURE_2D_BIT |
__DRI_ATTRIB_TEXTURE_RECTANGLE_BIT;
break;
__ATTRIB(__DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE, sRGBCapable);
case __DRI_ATTRIB_MUTABLE_RENDER_BUFFER:
*value = GL_FALSE;
break;
__ATTRIB(__DRI_ATTRIB_RED_SHIFT, redShift);
__ATTRIB(__DRI_ATTRIB_GREEN_SHIFT, greenShift);
__ATTRIB(__DRI_ATTRIB_BLUE_SHIFT, blueShift);
__ATTRIB(__DRI_ATTRIB_ALPHA_SHIFT, alphaShift);
default:
/* XXX log an error or smth */
return GL_FALSE;
}
return GL_TRUE;
}
/**
* Get the value of a configuration attribute.
* \param attrib the attribute (one of the _DRI_ATTRIB_x tokens)
* \param value returns the attribute's value
* \return 1 for success, 0 for failure
*/
int
driGetConfigAttrib(const __DRIconfig *config,
unsigned int attrib, unsigned int *value)
{
return driGetConfigAttribIndex(config, attrib - 1, value);
}
/**
* Get a configuration attribute name and value, given an index.
* \param index which field of the __DRIconfig to query
* \param attrib returns the attribute name (one of the _DRI_ATTRIB_x tokens)
* \param value returns the attribute's value
* \return 1 for success, 0 for failure
*/
int
driIndexConfigAttrib(const __DRIconfig *config, int index,
unsigned int *attrib, unsigned int *value)
{
if (driGetConfigAttribIndex(config, index, value)) {
*attrib = index + 1;
return GL_TRUE;
}
return GL_FALSE;
}

View File

@ -37,11 +37,4 @@ struct __DRIconfigRec {
struct gl_config modes;
};
int
driGetConfigAttrib(const __DRIconfig *config,
unsigned int attrib, unsigned int *value);
int
driIndexConfigAttrib(const __DRIconfig *config, int index,
unsigned int *attrib, unsigned int *value);
#endif /* DRI_DEBUG_H */