[Mesa-dev] [PATCH 2/2] i965: in set_read_rb_tex_image() check _mesa_meta_bind_rb_as_tex_image() did succeed

Juha-Pekka Heikkila juhapekka.heikkila at gmail.com
Fri May 30 03:54:48 PDT 2014


Check if _mesa_meta_bind_rb_as_tex_image() did give the texture.
If no texture was given there is already either
GL_INVALID_VALUE or GL_OUT_OF_MEMORY error set in context.

Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
---
 src/mesa/drivers/common/meta_blit.c               | 10 +++++++++-
 src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c |  6 ++++--
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c
index f26ef93..eeaaedd 100644
--- a/src/mesa/drivers/common/meta_blit.c
+++ b/src/mesa/drivers/common/meta_blit.c
@@ -615,13 +615,21 @@ _mesa_meta_bind_rb_as_tex_image(struct gl_context *ctx,
                                 GLenum *target)
 {
    struct gl_texture_image *texImage;
+   GLuint tempTex;
 
    if (rb->NumSamples > 1)
       *target = GL_TEXTURE_2D_MULTISAMPLE;
    else
       *target = GL_TEXTURE_2D;
 
-   _mesa_GenTextures(1, tex);
+   tempTex = 0;
+   _mesa_GenTextures(1, &tempTex);
+   if (tempTex == 0) {
+      return false;
+   } else {
+      *tex = tempTex;
+   }
+
    _mesa_BindTexture(*target, *tex);
    *texObj = _mesa_lookup_texture(ctx, *tex);
    texImage = _mesa_get_tex_image(ctx, *texObj, *target, 0);
diff --git a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c
index 5d132b7..6da2ba6 100644
--- a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c
+++ b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c
@@ -385,8 +385,10 @@ set_read_rb_tex_image(struct gl_context *ctx, struct fb_tex_blit_state *blit,
       *target = tex_obj->Target;
       level = att->TextureLevel;
    } else {
-      _mesa_meta_bind_rb_as_tex_image(ctx, rb, &blit->tempTex, &tex_obj,
-                                      target);
+      if (_mesa_meta_bind_rb_as_tex_image(ctx, rb, &blit->tempTex, &tex_obj,
+                                          target) == false ) {
+         return;
+      }
    }
 
    blit->baseLevelSave = tex_obj->BaseLevel;
-- 
1.8.1.2



More information about the mesa-dev mailing list