[cogl/cogl-1.14: 94/174] Fix handling of binding errors when uploading a full texture



commit 6bcfc8342a0281d8458fb9e18e62234fcab19c4d
Author: Neil Roberts <neil linux intel com>
Date:   Tue Nov 27 20:07:47 2012 +0000

    Fix handling of binding errors when uploading a full texture
    
    Both the texture drivers weren't handling errors correctly when a
    CoglPixelBuffer was used to set the contents of an entire texture.
    This was causing it to hit an assertion failure in the pixel buffer
    tests.
    
    Reviewed-by: Robert Bragg <robert linux intel com>
    
    (cherry picked from commit 888733d3c3b24080d2f136cedb3876a41312e4cf)

 cogl/driver/gl/gl/cogl-texture-driver-gl.c     |   17 ++++++++++++++---
 cogl/driver/gl/gles/cogl-texture-driver-gles.c |   13 +++++++++++--
 tests/conform/test-conform-main.c              |    4 ++--
 tests/conform/test-pixel-buffer.c              |    4 ++--
 4 files changed, 29 insertions(+), 9 deletions(-)
---
diff --git a/cogl/driver/gl/gl/cogl-texture-driver-gl.c b/cogl/driver/gl/gl/cogl-texture-driver-gl.c
index ca0ea40..7d3f97d 100644
--- a/cogl/driver/gl/gl/cogl-texture-driver-gl.c
+++ b/cogl/driver/gl/gl/cogl-texture-driver-gl.c
@@ -307,10 +307,21 @@ _cogl_texture_driver_upload_to_gl (CoglContext *ctx,
   int bpp = _cogl_pixel_format_get_bytes_per_pixel (source_format);
   GLenum gl_error;
   CoglBool status = TRUE;
+  CoglError *internal_error = NULL;
 
-  data = _cogl_bitmap_gl_bind (source_bmp, COGL_BUFFER_ACCESS_READ, 0, error);
-  if (!data)
-    return FALSE;
+  data = _cogl_bitmap_gl_bind (source_bmp,
+                               COGL_BUFFER_ACCESS_READ,
+                               0, /* hints */
+                               &internal_error);
+
+  /* NB: _cogl_bitmap_gl_bind() may return NULL when successful so we
+   * have to explicitly check the cogl error pointer to catch
+   * problems... */
+  if (internal_error)
+    {
+      _cogl_propagate_error (error, internal_error);
+      return FALSE;
+    }
 
   /* Setup gl alignment to match rowstride and top-left corner */
   prep_gl_for_pixels_upload_full (ctx,
diff --git a/cogl/driver/gl/gles/cogl-texture-driver-gles.c b/cogl/driver/gl/gles/cogl-texture-driver-gles.c
index 20b4192..fe49715 100644
--- a/cogl/driver/gl/gles/cogl-texture-driver-gles.c
+++ b/cogl/driver/gl/gles/cogl-texture-driver-gles.c
@@ -350,6 +350,7 @@ _cogl_texture_driver_upload_to_gl (CoglContext *ctx,
   CoglBitmap *bmp;
   uint8_t *data;
   GLenum gl_error;
+  CoglError *internal_error = NULL;
   CoglBool status = TRUE;
 
   bmp = prepare_bitmap_alignment_for_upload (ctx, source_bmp, error);
@@ -363,10 +364,18 @@ _cogl_texture_driver_upload_to_gl (CoglContext *ctx,
 
   _cogl_bind_gl_texture_transient (gl_target, gl_handle, is_foreign);
 
-  data = _cogl_bitmap_gl_bind (bmp, COGL_BUFFER_ACCESS_READ, 0, error);
-  if (!data)
+  data = _cogl_bitmap_gl_bind (bmp,
+                               COGL_BUFFER_ACCESS_READ,
+                               0, /* hints */
+                               &internal_error);
+
+  /* NB: _cogl_bitmap_gl_bind() may return NULL when successful so we
+   * have to explicitly check the cogl error pointer to catch
+   * problems... */
+  if (internal_error)
     {
       cogl_object_unref (bmp);
+      _cogl_propagate_error (error, internal_error);
       return FALSE;
     }
 
diff --git a/tests/conform/test-conform-main.c b/tests/conform/test-conform-main.c
index 2ebc31b..fc566c1 100644
--- a/tests/conform/test-conform-main.c
+++ b/tests/conform/test-conform-main.c
@@ -68,8 +68,8 @@ main (int argc, char **argv)
   UNPORTED_TEST (test_multitexture);
   UNPORTED_TEST (test_texture_mipmaps);
   ADD_TEST (test_sub_texture, 0, 0);
-  ADD_TEST (test_pixel_buffer_map, 0, TEST_KNOWN_FAILURE);
-  ADD_TEST (test_pixel_buffer_set_data, 0, TEST_KNOWN_FAILURE);
+  ADD_TEST (test_pixel_buffer_map, 0, 0);
+  ADD_TEST (test_pixel_buffer_set_data, 0, 0);
   ADD_TEST (test_pixel_buffer_sub_region, 0, 0);
   UNPORTED_TEST (test_texture_rectangle);
   ADD_TEST (test_texture_3d, TEST_REQUIREMENT_TEXTURE_3D, 0);
diff --git a/tests/conform/test-pixel-buffer.c b/tests/conform/test-pixel-buffer.c
index 3d08f1c..24de2e4 100644
--- a/tests/conform/test-pixel-buffer.c
+++ b/tests/conform/test-pixel-buffer.c
@@ -247,8 +247,8 @@ test_pixel_buffer_sub_region (void)
                                        BITMAP_SIZE / 2, /* src_y */
                                        BITMAP_SIZE / 2, /* dst_x */
                                        0, /* dst_y */
-                                       BITMAP_SIZE / 2, /* dst_width */
-                                       BITMAP_SIZE / 2, /* dst_height */
+                                       BITMAP_SIZE / 2, /* width */
+                                       BITMAP_SIZE / 2, /* height */
                                        bitmap);
 
   pipeline = create_pipeline_from_texture (texture);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]