On 01/23/2014 06:04 PM, Brian Paul wrote:
On 01/23/2014 07:31 AM, Ahmed Allam wrote:
From: Ahmed Allam <ahmabd...@hotmail.com>


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

Signed-off-by: Ahmed Allam <ahmabd...@hotmail.com>
---
  src/mesa/main/buffers.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
index 2bdbf41..6c846cb 100644
--- a/src/mesa/main/buffers.c
+++ b/src/mesa/main/buffers.c
@@ -623,7 +623,9 @@ _mesa_ReadBuffer(GLenum buffer)

     if (buffer == GL_NONE) {
        /* This is legal--it means that no buffer should be bound for
reading. */
-      srcBuffer = -1;
+      _mesa_error(ctx, GL_INVALID_ENUM,
+                           "glReadBuffer(buffer=0x%x)", buffer);
+     return;
     }
     else {
        /* general case / window-system framebuffer */


According to the GL 3.2 spec, GL_NONE is a legal value for glReadBuffer() and should not generate an error (as the comment says.) And I just verified it with NVIDIA's driver.

The spec says "ReadPixels generates an INVALID_OPERATION error if it attempts to select a color buffer while READ_BUFFER is NONE". That's what we do. However, it looks like NVIDIA's driver is doing something else. It's actually doing glRead/CopyPixels w/out raising an error.

Anyway, can you try this patch:

diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index 637f7ee..eca04b8 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -700,7 +700,8 @@ st_ReadBuffer(struct gl_context *ctx, GLenum buffer)
    (void) buffer;

    /* add the renderbuffer on demand */
-   st_manager_add_color_renderbuffer(st, fb, fb->_ColorReadBufferIndex);
+   if (fb->_ColorReadBufferIndex >= 0)
+ st_manager_add_color_renderbuffer(st, fb, fb->_ColorReadBufferIndex);
 }


-Brian


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


Patch worked without any visible problems and without glReadBuffer(GL_NONE) producing any errors. I am starting to believe that this is the expected behavior as opposed to generating INVALID_OPERATION. Thanks.

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

Reply via email to