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

Jose Fonseca jfonseca at vmware.com
Thu Jul 23 13:03:41 PDT 2015


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 <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