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é <mtm...@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;
  }



_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to