[Mesa-dev] [PATCH] Match swrast modes more loosely.

Marek Olšák maraeo at gmail.com
Thu Jul 23 12:54:51 PDT 2015


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 <jfonseca at vmware.com> wrote:
> From: Tom Hughes <tom at compton.nu>
>
> https://bugs.freedesktop.org/show_bug.cgi?id=90817
>
> Signed-off-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;
> --
> 2.1.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list