summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/common/meta_blit.c9
-rw-r--r--src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c14
2 files changed, 18 insertions, 5 deletions
diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c
index fc9848a7acd..3cd06a5f527 100644
--- a/src/mesa/drivers/common/meta_blit.c
+++ b/src/mesa/drivers/common/meta_blit.c
@@ -624,13 +624,20 @@ _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 0b4742693db..b9b481b90eb 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);
@@ -445,6 +450,7 @@ brw_meta_stencil_blit(struct brw_context *brw,
_mesa_DrawArrays(GL_TRIANGLE_FAN, 0, 4);
+error:
_mesa_meta_fb_tex_blit_end(ctx, target, &blit);
_mesa_meta_end(ctx);