summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2017-04-10 21:09:41 -0600
committerBrian Paul <[email protected]>2017-04-12 21:13:23 -0600
commitc36d224921da0846b808a317d5b71a78b31bfd3d (patch)
tree772c46fbddbc52d3d9b7a3b58dda0fb23c3b9048
parentfbcd709a34ccccf16796b926a3b25d6044fb614b (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.c24
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)