diff options
author | Brian Paul <[email protected]> | 2017-04-10 21:09:41 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2017-04-12 21:13:23 -0600 |
commit | c36d224921da0846b808a317d5b71a78b31bfd3d (patch) | |
tree | 772c46fbddbc52d3d9b7a3b58dda0fb23c3b9048 | |
parent | fbcd709a34ccccf16796b926a3b25d6044fb614b (diff) |
st/mesa: minor optimization in st_DrawBuffers()
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 <[email protected]>
-rw-r--r-- | src/mesa/state_tracker/st_cb_fbo.c | 24 |
1 files changed, 16 insertions, 8 deletions
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) |