From 5a70e12fc0897a3178c73b20d99fc0f11b180374 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 10 Feb 2012 18:57:15 -0700 Subject: [PATCH] st/mesa: don't set PIPE_BIND_DISPLAY_TARGET for user-created renderbuffers The st_renderbuffer_alloc_storage() function is used to allocate both window-system buffers and user-created renderbuffers. The later kind are never directly displayed so don't set PIPE_BIND_DISPLAY_TARGET for those surfaces. NOTE: This is a candidate for the 8.0 branch. Reviewed-by: Jose Fonseca --- src/mesa/state_tracker/st_cb_fbo.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 19bbdc5..5a3186d 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -138,7 +138,12 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx, if (util_format_is_depth_or_stencil(format)) { template.bind = PIPE_BIND_DEPTH_STENCIL; } + else if (strb->Base.Name != 0) { + /* this is a user-created renderbuffer */ + template.bind = PIPE_BIND_RENDER_TARGET; + } else { + /* this is a window-system buffer */ template.bind = (PIPE_BIND_DISPLAY_TARGET | PIPE_BIND_RENDER_TARGET); } @@ -198,6 +203,7 @@ st_new_renderbuffer(struct gl_context *ctx, GLuint name) { struct st_renderbuffer *strb = ST_CALLOC_STRUCT(st_renderbuffer); if (strb) { + assert(name != 0); _mesa_init_renderbuffer(&strb->Base, name); strb->Base.Delete = st_renderbuffer_delete; strb->Base.AllocStorage = st_renderbuffer_alloc_storage; -- 2.7.4