From: Brian Paul Date: Sat, 11 Feb 2012 01:57:15 +0000 (-0700) Subject: st/mesa: don't set PIPE_BIND_DISPLAY_TARGET for user-created renderbuffers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5a70e12fc0897a3178c73b20d99fc0f11b180374;p=mesa.git 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 --- diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 19bbdc5bb42..5a3186dea87 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;