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.heikk...@gmail.com> --- src/mesa/drivers/common/meta_blit.c | 10 +++++++++- src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c | 14 ++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c index bbf0c3c..1fd4d1b 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; + } + + *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 bdd642b..11ac92b 100644 --- a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c +++ b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c @@ -371,7 +371,7 @@ prepare_vertex_data(void) _mesa_BufferSubData(GL_ARRAY_BUFFER_ARB, 0, sizeof(verts), verts); } -static void +static bool set_read_rb_tex_image(struct gl_context *ctx, struct fb_tex_blit_state *blit, GLenum *target) { @@ -387,8 +387,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)) { + return false; + } } blit->baseLevelSave = tex_obj->BaseLevel; @@ -396,6 +398,7 @@ set_read_rb_tex_image(struct gl_context *ctx, struct fb_tex_blit_state *blit, blit->stencilSamplingSave = tex_obj->StencilSampling; blit->sampler = _mesa_meta_setup_sampler(ctx, tex_obj, *target, GL_NEAREST, level); + return true; } static void @@ -424,7 +427,9 @@ brw_meta_stencil_blit(struct brw_context *brw, _mesa_DrawBuffer(GL_COLOR_ATTACHMENT0); ctx->DrawBuffer->_Status = GL_FRAMEBUFFER_COMPLETE; - set_read_rb_tex_image(ctx, &blit, &target); + if (!set_read_rb_tex_image(ctx, &blit, &target)) { + goto error; + } _mesa_TexParameteri(target, GL_DEPTH_STENCIL_TEXTURE_MODE, GL_STENCIL_INDEX); @@ -446,6 +451,7 @@ brw_meta_stencil_blit(struct brw_context *brw, _mesa_DrawArrays(GL_TRIANGLE_FAN, 0, 4); _mesa_meta_fb_tex_blit_end(ctx, target, &blit); +error:; _mesa_meta_end(ctx); _mesa_DeleteRenderbuffers(1, &rbo); -- 1.8.1.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev