mirror of
https://github.com/brl/mutter.git
synced 2025-01-23 09:59:03 +00:00
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)
This commit is contained in:
parent
c72ede0560
commit
6bcfc8342a
@ -307,10 +307,21 @@ _cogl_texture_driver_upload_to_gl (CoglContext *ctx,
|
|||||||
int bpp = _cogl_pixel_format_get_bytes_per_pixel (source_format);
|
int bpp = _cogl_pixel_format_get_bytes_per_pixel (source_format);
|
||||||
GLenum gl_error;
|
GLenum gl_error;
|
||||||
CoglBool status = TRUE;
|
CoglBool status = TRUE;
|
||||||
|
CoglError *internal_error = NULL;
|
||||||
|
|
||||||
data = _cogl_bitmap_gl_bind (source_bmp, COGL_BUFFER_ACCESS_READ, 0, error);
|
data = _cogl_bitmap_gl_bind (source_bmp,
|
||||||
if (!data)
|
COGL_BUFFER_ACCESS_READ,
|
||||||
return FALSE;
|
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 */
|
/* Setup gl alignment to match rowstride and top-left corner */
|
||||||
prep_gl_for_pixels_upload_full (ctx,
|
prep_gl_for_pixels_upload_full (ctx,
|
||||||
|
@ -350,6 +350,7 @@ _cogl_texture_driver_upload_to_gl (CoglContext *ctx,
|
|||||||
CoglBitmap *bmp;
|
CoglBitmap *bmp;
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
GLenum gl_error;
|
GLenum gl_error;
|
||||||
|
CoglError *internal_error = NULL;
|
||||||
CoglBool status = TRUE;
|
CoglBool status = TRUE;
|
||||||
|
|
||||||
bmp = prepare_bitmap_alignment_for_upload (ctx, source_bmp, error);
|
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);
|
_cogl_bind_gl_texture_transient (gl_target, gl_handle, is_foreign);
|
||||||
|
|
||||||
data = _cogl_bitmap_gl_bind (bmp, COGL_BUFFER_ACCESS_READ, 0, error);
|
data = _cogl_bitmap_gl_bind (bmp,
|
||||||
if (!data)
|
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_object_unref (bmp);
|
||||||
|
_cogl_propagate_error (error, internal_error);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,8 +68,8 @@ main (int argc, char **argv)
|
|||||||
UNPORTED_TEST (test_multitexture);
|
UNPORTED_TEST (test_multitexture);
|
||||||
UNPORTED_TEST (test_texture_mipmaps);
|
UNPORTED_TEST (test_texture_mipmaps);
|
||||||
ADD_TEST (test_sub_texture, 0, 0);
|
ADD_TEST (test_sub_texture, 0, 0);
|
||||||
ADD_TEST (test_pixel_buffer_map, 0, TEST_KNOWN_FAILURE);
|
ADD_TEST (test_pixel_buffer_map, 0, 0);
|
||||||
ADD_TEST (test_pixel_buffer_set_data, 0, TEST_KNOWN_FAILURE);
|
ADD_TEST (test_pixel_buffer_set_data, 0, 0);
|
||||||
ADD_TEST (test_pixel_buffer_sub_region, 0, 0);
|
ADD_TEST (test_pixel_buffer_sub_region, 0, 0);
|
||||||
UNPORTED_TEST (test_texture_rectangle);
|
UNPORTED_TEST (test_texture_rectangle);
|
||||||
ADD_TEST (test_texture_3d, TEST_REQUIREMENT_TEXTURE_3D, 0);
|
ADD_TEST (test_texture_3d, TEST_REQUIREMENT_TEXTURE_3D, 0);
|
||||||
|
@ -247,8 +247,8 @@ test_pixel_buffer_sub_region (void)
|
|||||||
BITMAP_SIZE / 2, /* src_y */
|
BITMAP_SIZE / 2, /* src_y */
|
||||||
BITMAP_SIZE / 2, /* dst_x */
|
BITMAP_SIZE / 2, /* dst_x */
|
||||||
0, /* dst_y */
|
0, /* dst_y */
|
||||||
BITMAP_SIZE / 2, /* dst_width */
|
BITMAP_SIZE / 2, /* width */
|
||||||
BITMAP_SIZE / 2, /* dst_height */
|
BITMAP_SIZE / 2, /* height */
|
||||||
bitmap);
|
bitmap);
|
||||||
|
|
||||||
pipeline = create_pipeline_from_texture (texture);
|
pipeline = create_pipeline_from_texture (texture);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user