diff options
author | Adam Jackson <ajax@redhat.com> | 2021-03-26 15:52:26 -0400 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2021-03-30 20:33:51 +0000 |
commit | 49fb7f9e5cef05182a72b39dea17b43c77f0240b (patch) | |
tree | ef508fb0fe08de339e1a824b1b279d299823b216 | |
parent | b58fbfa828254f893a6862ce3705f35fe3235874 (diff) |
dri: Explicitly handle all the config attributes
The code is broken elsewhere and requires that the attrib map actually
be large enough.
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9817>
-rw-r--r-- | src/mesa/drivers/dri/common/utils.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c index 58671d6935a..93b621c56b5 100644 --- a/src/mesa/drivers/dri/common/utils.c +++ b/src/mesa/drivers/dri/common/utils.c @@ -449,13 +449,9 @@ static const struct { unsigned int attrib, offset; } attribMap[] = { __ATTRIB(__DRI_ATTRIB_TRANSPARENT_BLUE_VALUE, transparentBlue), __ATTRIB(__DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE, transparentAlpha), __ATTRIB(__DRI_ATTRIB_RED_MASK, redMask), - __ATTRIB(__DRI_ATTRIB_RED_SHIFT, redShift), __ATTRIB(__DRI_ATTRIB_GREEN_MASK, greenMask), - __ATTRIB(__DRI_ATTRIB_GREEN_SHIFT, greenShift), __ATTRIB(__DRI_ATTRIB_BLUE_MASK, blueMask), - __ATTRIB(__DRI_ATTRIB_BLUE_SHIFT, blueShift), __ATTRIB(__DRI_ATTRIB_ALPHA_MASK, alphaMask), - __ATTRIB(__DRI_ATTRIB_ALPHA_SHIFT, alphaShift), __ATTRIB(__DRI_ATTRIB_MAX_PBUFFER_WIDTH, maxPbufferWidth), __ATTRIB(__DRI_ATTRIB_MAX_PBUFFER_HEIGHT, maxPbufferHeight), __ATTRIB(__DRI_ATTRIB_MAX_PBUFFER_PIXELS, maxPbufferPixels), @@ -469,12 +465,23 @@ static const struct { unsigned int attrib, offset; } attribMap[] = { __ATTRIB(__DRI_ATTRIB_YINVERTED, yInverted), __ATTRIB(__DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE, sRGBCapable), __ATTRIB(__DRI_ATTRIB_MUTABLE_RENDER_BUFFER, mutableRenderBuffer), + __ATTRIB(__DRI_ATTRIB_RED_SHIFT, redShift), + __ATTRIB(__DRI_ATTRIB_GREEN_SHIFT, greenShift), + __ATTRIB(__DRI_ATTRIB_BLUE_SHIFT, blueShift), + __ATTRIB(__DRI_ATTRIB_ALPHA_SHIFT, alphaShift), /* The struct field doesn't matter here, these are handled by the * switch in driGetConfigAttribIndex. We need them in the array * so the iterator includes them though.*/ + __ATTRIB(__DRI_ATTRIB_LUMINANCE_SIZE, level), __ATTRIB(__DRI_ATTRIB_RENDER_TYPE, level), __ATTRIB(__DRI_ATTRIB_CONFIG_CAVEAT, level), + __ATTRIB(__DRI_ATTRIB_CONFORMANT, level), + __ATTRIB(__DRI_ATTRIB_FLOAT_MODE, level), + __ATTRIB(__DRI_ATTRIB_VISUAL_SELECT_GROUP, level), + __ATTRIB(__DRI_ATTRIB_MAX_SWAP_INTERVAL, level), + __ATTRIB(__DRI_ATTRIB_MIN_SWAP_INTERVAL, level), + }; @@ -487,6 +494,9 @@ driGetConfigAttribIndex(const __DRIconfig *config, unsigned int index, unsigned int *value) { switch (attribMap[index].attrib) { + case __DRI_ATTRIB_LUMINANCE_SIZE: + *value = 0; + break; case __DRI_ATTRIB_RENDER_TYPE: /* no support for color index mode */ *value = __DRI_ATTRIB_RGBA_BIT; @@ -501,6 +511,21 @@ driGetConfigAttribIndex(const __DRIconfig *config, else *value = 0; break; + case __DRI_ATTRIB_CONFORMANT: + *value = GL_TRUE; + break; + case __DRI_ATTRIB_FLOAT_MODE: + *value = config->modes.floatMode; + break; + case __DRI_ATTRIB_VISUAL_SELECT_GROUP: + *value = 0; + break; + case __DRI_ATTRIB_MAX_SWAP_INTERVAL: + *value = INT_MAX; + break; + case __DRI_ATTRIB_MIN_SWAP_INTERVAL: + *value = 0; + break; default: /* any other int-sized field */ *value = *(unsigned int *) |