From c36d224921da0846b808a317d5b71a78b31bfd3d Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 10 Apr 2017 21:09:41 -0600 Subject: st/mesa: minor optimization in st_DrawBuffers() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We only do on-demand renderbuffer allocation for window-system FBOs, not user-created FBOs. So put the loop inside a conditional. Plus, add some comments. No piglit regressions. Reviewed-by: Marek Olšák --- src/mesa/state_tracker/st_cb_fbo.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index dce4239438a..21fc5420d58 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -690,31 +690,39 @@ st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb) /** - * Called via glDrawBuffer. + * Called via glDrawBuffer. We only provide this driver function so that we + * can check if we need to allocate a new renderbuffer. Specifically, we + * don't usually allocate a front color buffer when using a double-buffered + * visual. But if the app calls glDrawBuffer(GL_FRONT) we need to allocate + * that buffer. Note, this is only for window system buffers, not user- + * created FBOs. */ static void st_DrawBuffers(struct gl_context *ctx, GLsizei count, const GLenum *buffers) { struct st_context *st = st_context(ctx); struct gl_framebuffer *fb = ctx->DrawBuffer; - GLuint i; (void) count; (void) buffers; - /* add the renderbuffers on demand */ - for (i = 0; i < fb->_NumColorDrawBuffers; i++) { - GLint idx = fb->_ColorDrawBufferIndexes[i]; + if (_mesa_is_winsys_fbo(fb)) { + GLuint i; + /* add the renderbuffers on demand */ + for (i = 0; i < fb->_NumColorDrawBuffers; i++) { + GLint idx = fb->_ColorDrawBufferIndexes[i]; - if (idx >= 0) { - st_manager_add_color_renderbuffer(st, fb, idx); + if (idx >= 0) { + st_manager_add_color_renderbuffer(st, fb, idx); + } } } } /** - * Called via glReadBuffer. + * Called via glReadBuffer. As with st_DrawBuffers, we use this function + * to check if we need to allocate a renderbuffer on demand. */ static void st_ReadBuffer(struct gl_context *ctx, GLenum buffer) -- cgit v1.2.3