On 01/18/2013 11:16 AM, Kenneth Graunke wrote:
On 01/18/2013 10:54 AM, Ian Romanick wrote:
From: Ian Romanick <ian.d.roman...@intel.com>

Fixes gles3conform test CoverageES30.  It temporarily regresses some
framebuffer_blit tests, but the failing subcases have been determined to
be invalid for OpenGL ES 3.0.

Signed-off-by: Ian Romanick <ian.d.roman...@intel.com>
---
  src/mesa/main/fbobject.c | 31 +++++++++++++++++++++++++++++++
  1 file changed, 31 insertions(+)

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 9db5035..721ecea 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -2856,6 +2856,23 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0,
GLint srcX1, GLint srcY1,
              if (!colorDrawRb)
                 continue;

+            /* Page 193 (page 205 of the PDF) in section 4.3.2 of the
OpenGL
+             * ES 3.0.1 spec says:
+             *
+             *     "If the source and destination buffers are
identical, an
+             *     INVALID_OPERATION error is generated. Different
mipmap
+             *     levels of a texture, different layers of a three-
+             *     dimensional texture or two-dimensional array
texture, and
+             *     different faces of a cube map texture do not
constitute
+             *     identical buffers."
+             */
+            if (_mesa_is_gles3(ctx) && (colorDrawRb == colorReadRb)) {
+               _mesa_error(ctx, GL_INVALID_OPERATION,
+                           "glBlitFramebuffer(source and destination
color "
+                           "buffer cannot be the same)");
+               return;
+            }
+
              if (!compatible_color_datatypes(colorReadRb->Format,
                                              colorDrawRb->Format)) {
                 _mesa_error(ctx, GL_INVALID_OPERATION,
@@ -2905,6 +2922,13 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0,
GLint srcX1, GLint srcY1,
        else {
           int read_z_bits, draw_z_bits;

+         if (_mesa_is_gles3(ctx) && (drawFb == readFb)) {

Don't you want drawRb == readRb here?

Yes, of course.


+            _mesa_error(ctx, GL_INVALID_OPERATION,
+                        "glBlitFramebuffer(source and destination
stencil "
+                        "buffer cannot be the same)");
+            return;
+         }
+
           if (_mesa_get_format_bits(readRb->Format, GL_STENCIL_BITS) !=
               _mesa_get_format_bits(drawRb->Format, GL_STENCIL_BITS)) {
              /* There is no need to check the stencil datatype here,
because
@@ -2952,6 +2976,13 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0,
GLint srcX1, GLint srcY1,
        else {
           int read_s_bit, draw_s_bit;

+         if (_mesa_is_gles3(ctx) && (drawFb == readFb)) {

Ditto.

+            _mesa_error(ctx, GL_INVALID_OPERATION,
+                        "glBlitFramebuffer(source and destination
depth "
+                        "buffer cannot be the same)");
+            return;
+         }
+
           if ((_mesa_get_format_bits(readRb->Format, GL_DEPTH_BITS) !=
                _mesa_get_format_bits(drawRb->Format, GL_DEPTH_BITS)) ||
               (_mesa_get_format_datatype(readRb->Format) !=


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

Reply via email to