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 <marek.olsak@amd.com>
This commit is contained in:
Brian Paul 2017-04-10 21:09:41 -06:00
parent fbcd709a34
commit c36d224921
1 changed files with 16 additions and 8 deletions

View File

@ -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)