Removing the "__DRI_ATTRIB_DOUBLE_BUFFER" case fixes it. I'm not familiar with this code. Some investigation would have to be done to know why it broke.
Marek On Thu, Jul 23, 2015 at 10:03 PM, Jose Fonseca <jfons...@vmware.com> wrote: > Sure. It's not easy to grasp the side effects of this, so it doesn't > surprise me. > > Do you know which hunk caused problems? > > Also, I wonder if it would be possible to make the relaxed matching specific > to swrast. (Because for HW renderer it's pretty much guaranteed that the X > visuals will match -- the problem is SW rendering with X servers running > something else.) > > Jose > > On 23/07/15 20:54, Marek Olšák wrote: >> >> Hi Jose, >> >> FYI, I had to revert this, because it broke glxgears on radeonsi. >> >> Marek >> >> On Wed, Jul 15, 2015 at 3:25 PM, Jose Fonseca <jfons...@vmware.com> wrote: >>> >>> From: Tom Hughes <t...@compton.nu> >>> >>> https://bugs.freedesktop.org/show_bug.cgi?id=90817 >>> >>> Signed-off-by: Jose Fonseca <jfons...@vmware.com> >>> >>> --- >>> src/glx/dri_common.c | 59 >>> +++++++++++++++++++++++++++++++++++++++++++++++++++- >>> 1 file changed, 58 insertions(+), 1 deletion(-) >>> >>> diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c >>> index 63c8de3..1a62ee2 100644 >>> --- a/src/glx/dri_common.c >>> +++ b/src/glx/dri_common.c >>> @@ -266,6 +266,36 @@ scalarEqual(struct glx_config *mode, unsigned int >>> attrib, unsigned int 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; >>> -- >>> 2.1.4 >>> >>> _______________________________________________ >>> mesa-dev mailing list >>> mesa-dev@lists.freedesktop.org >>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev