Module: Mesa Branch: main Commit: 5eccb228bad3f493b78b31b2ff5ef251fc33a488 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5eccb228bad3f493b78b31b2ff5ef251fc33a488
Author: Adam Jackson <[email protected]> Date: Fri May 6 15:21:53 2022 -0400 dri: Move dri{Get,Index}ConfigAttrib near their vtable Reviewed-by: Marek Olšák <[email protected]> Reviewed-by: Mike Blumenkrantz <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16377> --- src/gallium/frontends/dri/dri_util.c | 151 ++++++++++++++++++++++++++++++++ src/gallium/frontends/dri/utils.c | 161 ----------------------------------- src/gallium/frontends/dri/utils.h | 7 -- 3 files changed, 151 insertions(+), 168 deletions(-) diff --git a/src/gallium/frontends/dri/dri_util.c b/src/gallium/frontends/dri/dri_util.c index e05590b2b5d..0a60e9cc8d8 100644 --- a/src/gallium/frontends/dri/dri_util.c +++ b/src/gallium/frontends/dri/dri_util.c @@ -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, diff --git a/src/gallium/frontends/dri/utils.c b/src/gallium/frontends/dri/utils.c index eb2c2be431f..6fa407907ad 100644 --- a/src/gallium/frontends/dri/utils.c +++ b/src/gallium/frontends/dri/utils.c @@ -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; -} diff --git a/src/gallium/frontends/dri/utils.h b/src/gallium/frontends/dri/utils.h index a3c9b90fac5..44e16ed1c41 100644 --- a/src/gallium/frontends/dri/utils.h +++ b/src/gallium/frontends/dri/utils.h @@ -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 */
