Mesa (master): Match swrast modes more loosely.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Thu Jul 23 15:00:02 UTC 2015


Module: Mesa
Branch: master
Commit: f3728a16c9c6a02fc1f44b8069b0060e2358f22e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f3728a16c9c6a02fc1f44b8069b0060e2358f22e

Author: Tom Hughes <tom at compton.nu>
Date:   Tue Jun  2 13:40:37 2015 +0100

Match swrast modes more loosely.

https://bugs.freedesktop.org/show_bug.cgi?id=90817

Reviewed-by: Jose Fonseca <jfonseca at 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;




More information about the mesa-commit mailing list