[Mesa-dev] [PATCH 4/7] main: rework the compatibility check of visuals in glXMakeCurrent

Miklós Máté mtmkls at gmail.com
Thu Feb 25 15:26:35 UTC 2016


On 02/25/2016 02:37 AM, Brian Paul wrote:
> On 02/24/2016 04:35 PM, Miklós Máté wrote:
>> Now it follows the GLX 1.4 specification.
>
> Can you elaborate on that a bit?
Section 2.1 of the GLX spec lists a few criteria for a context and a 
drawable to be compatible.

>
>
>> This fixes post-processing in SW:KotOR.
>>
>> Signed-off-by: Miklós Máté <mtmkls at gmail.com>
>> ---
>>   src/mesa/main/context.c | 42 
>> ++++++++++++------------------------------
>>   1 file changed, 12 insertions(+), 30 deletions(-)
>>
>> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
>> index 26eee28..6c16229 100644
>> --- a/src/mesa/main/context.c
>> +++ b/src/mesa/main/context.c
>> @@ -1525,10 +1525,6 @@ _mesa_copy_context( const struct gl_context 
>> *src, struct gl_context *dst,
>>    * Check if the given context can render into the given framebuffer
>>    * by checking visual attributes.
>>    *
>> - * Most of these tests could go away because Mesa is now pretty 
>> flexible
>> - * in terms of mixing rendering contexts with framebuffers.  As long
>> - * as RGB vs. CI mode agree, we're probably good.
>> - *
>>    * \return GL_TRUE if compatible, GL_FALSE otherwise.
>>    */
>>   static GLboolean
>> @@ -1541,32 +1537,18 @@ check_compatible(const struct gl_context *ctx,
>>      if (buffer == _mesa_get_incomplete_framebuffer())
>>         return GL_TRUE;
>>
>> -#if 0
>> -   /* disabling this fixes the fgl_glxgears pbuffer demo */
>> -   if (ctxvis->doubleBufferMode && !bufvis->doubleBufferMode)
>> -      return GL_FALSE;
>> -#endif
>> -   if (ctxvis->stereoMode && !bufvis->stereoMode)
>> -      return GL_FALSE;
>> -   if (ctxvis->haveAccumBuffer && !bufvis->haveAccumBuffer)
>> -      return GL_FALSE;
>> -   if (ctxvis->haveDepthBuffer && !bufvis->haveDepthBuffer)
>> -      return GL_FALSE;
>> -   if (ctxvis->haveStencilBuffer && !bufvis->haveStencilBuffer)
>> -      return GL_FALSE;
>> -   if (ctxvis->redMask && ctxvis->redMask != bufvis->redMask)
>> -      return GL_FALSE;
>> -   if (ctxvis->greenMask && ctxvis->greenMask != bufvis->greenMask)
>> -      return GL_FALSE;
>> -   if (ctxvis->blueMask && ctxvis->blueMask != bufvis->blueMask)
>> -      return GL_FALSE;
>> -#if 0
>> -   /* disabled (see bug 11161) */
>> -   if (ctxvis->depthBits && ctxvis->depthBits != bufvis->depthBits)
>> -      return GL_FALSE;
>> -#endif
>> -   if (ctxvis->stencilBits && ctxvis->stencilBits != 
>> bufvis->stencilBits)
>> -      return GL_FALSE;
>> +#define check_component(foo)           \
>> +   if (ctxvis->foo && bufvis->foo &&   \
>> +       ctxvis->foo != bufvis->foo)     \
>> +      return GL_FALSE
>> +
>> +   check_component(redMask);
>> +   check_component(greenMask);
>> +   check_component(blueMask);
>> +   check_component(depthBits);
>> +   check_component(stencilBits);
>> +
>> +#undef check_component
>
> IIRC, Ian had some comments on this so he should re-review.  But since 
> Mesa doesn't actually used the red/green/blueMask fields (AFAIK), I'm 
> not sure what those checks are good for.
Yes, my original intention was to remove this function entirely, but Ian 
convinced me that GLX mandates at least these checks.

MM

>
> Nowadays, we should be flexible enough that a single context can 
> render to any variety of 16 or 24 or 32bpp surfaces.  If we don't care 
> about the bits/channel, we shouldn't care about the masks either.
>
> -Brian
>
>
>>
>>      return GL_TRUE;
>>   }
>>
>



More information about the mesa-dev mailing list