mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
Match swrast modes more loosely.
https://bugs.freedesktop.org/show_bug.cgi?id=90817 Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
b469cf10ef
commit
f3728a16c9
1 changed files with 58 additions and 1 deletions
|
|
@ -265,6 +265,36 @@ scalarEqual(struct glx_config *mode, unsigned int attrib, unsigned int value)
|
|||
return GL_TRUE; /* Is a non-existing attribute equal to value? */
|
||||
}
|
||||
|
||||
static int
|
||||
scalarGreaterEqual(struct glx_config *mode, unsigned int attrib, unsigned int value)
|
||||
{
|
||||
unsigned int glxValue;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(attribMap); i++)
|
||||
if (attribMap[i].attrib == attrib) {
|
||||
glxValue = *(unsigned int *) ((char *) mode + attribMap[i].offset);
|
||||
return glxValue == GLX_DONT_CARE || glxValue >= value;
|
||||
}
|
||||
|
||||
return GL_TRUE; /* Is a non-existing attribute greater than or equal to value? */
|
||||
}
|
||||
|
||||
static int
|
||||
booleanSupported(struct glx_config *mode, unsigned int attrib, unsigned int value)
|
||||
{
|
||||
unsigned int glxValue;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(attribMap); i++)
|
||||
if (attribMap[i].attrib == attrib) {
|
||||
glxValue = *(unsigned int *) ((char *) mode + attribMap[i].offset);
|
||||
return glxValue == GLX_DONT_CARE || glxValue;
|
||||
}
|
||||
|
||||
return GL_TRUE; /* Is a non-existing attribute supported? */
|
||||
}
|
||||
|
||||
static int
|
||||
driConfigEqual(const __DRIcoreExtension *core,
|
||||
struct glx_config *config, const __DRIconfig *driConfig)
|
||||
|
|
@ -313,10 +343,37 @@ driConfigEqual(const __DRIcoreExtension *core,
|
|||
if (value & __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT)
|
||||
glxValue |= GLX_TEXTURE_RECTANGLE_BIT_EXT;
|
||||
if (config->bindToTextureTargets != GLX_DONT_CARE &&
|
||||
glxValue != config->bindToTextureTargets)
|
||||
glxValue != (config->bindToTextureTargets & glxValue))
|
||||
return GL_FALSE;
|
||||
break;
|
||||
|
||||
case __DRI_ATTRIB_STENCIL_SIZE:
|
||||
case __DRI_ATTRIB_ACCUM_RED_SIZE:
|
||||
case __DRI_ATTRIB_ACCUM_GREEN_SIZE:
|
||||
case __DRI_ATTRIB_ACCUM_BLUE_SIZE:
|
||||
case __DRI_ATTRIB_ACCUM_ALPHA_SIZE:
|
||||
if (value != 0 && !scalarEqual(config, attrib, value))
|
||||
return GL_FALSE;
|
||||
break;
|
||||
|
||||
case __DRI_ATTRIB_DOUBLE_BUFFER:
|
||||
case __DRI_ATTRIB_BIND_TO_TEXTURE_RGB:
|
||||
case __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA:
|
||||
case __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE:
|
||||
case __DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE:
|
||||
if (value && !booleanSupported(config, attrib, value))
|
||||
return GL_FALSE;
|
||||
break;
|
||||
|
||||
case __DRI_ATTRIB_SAMPLE_BUFFERS:
|
||||
case __DRI_ATTRIB_SAMPLES:
|
||||
case __DRI_ATTRIB_AUX_BUFFERS:
|
||||
case __DRI_ATTRIB_MAX_PBUFFER_WIDTH:
|
||||
case __DRI_ATTRIB_MAX_PBUFFER_HEIGHT:
|
||||
case __DRI_ATTRIB_MAX_PBUFFER_PIXELS:
|
||||
if (!scalarGreaterEqual(config, attrib, value))
|
||||
return GL_FALSE;
|
||||
|
||||
default:
|
||||
if (!scalarEqual(config, attrib, value))
|
||||
return GL_FALSE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue