aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2018-04-24 14:19:48 +1000
committerTimothy Arceri <[email protected]>2018-04-25 09:08:26 +1000
commit6ca09f3a608c10f6d2a9f80d2497ac1628188ac9 (patch)
tree598e55a1671070088eb099cb893b9db5a498248a
parent2554b8cb006d5466736333ab7b75aa34501278bb (diff)
st/mesa: add new driver function DrawBufferAllocate
Unlike some of the classic drivers the st was only using DrawBuffer() to allocated some buffers on-demand. Creating a separate function will allow us to call it from update_framebuffer() in the following patch without regressing some of the older classic drivers. Reviewed-by: Marek Olšák <[email protected]>
-rw-r--r--src/mesa/main/buffers.c4
-rw-r--r--src/mesa/main/dd.h4
-rw-r--r--src/mesa/state_tracker/st_cb_fbo.c10
3 files changed, 11 insertions, 7 deletions
diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
index 7bb5725d085..ba970d87dad 100644
--- a/src/mesa/main/buffers.c
+++ b/src/mesa/main/buffers.c
@@ -306,6 +306,8 @@ draw_buffer(struct gl_context *ctx, struct gl_framebuffer *fb,
if (fb == ctx->DrawBuffer) {
if (ctx->Driver.DrawBuffer)
ctx->Driver.DrawBuffer(ctx, buffer);
+ if (ctx->Driver.DrawBufferAllocate)
+ ctx->Driver.DrawBufferAllocate(ctx);
}
}
@@ -587,6 +589,8 @@ draw_buffers(struct gl_context *ctx, struct gl_framebuffer *fb, GLsizei n,
if (fb == ctx->DrawBuffer) {
if (ctx->Driver.DrawBuffer)
ctx->Driver.DrawBuffer(ctx, n > 0 ? buffers[0] : GL_NONE);
+ if (ctx->Driver.DrawBufferAllocate)
+ ctx->Driver.DrawBufferAllocate(ctx);
}
}
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index d85d89ef50c..5ee6902d3fb 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -611,7 +611,9 @@ struct dd_function_table {
/** Specify mapping of depth values from NDC to window coordinates */
void (*DepthRange)(struct gl_context *ctx);
/** Specify the current buffer for writing */
- void (*DrawBuffer)( struct gl_context *ctx, GLenum buffer );
+ void (*DrawBuffer)(struct gl_context *ctx, GLenum buffer);
+ /** Used to allocated any buffers with on-demand creation */
+ void (*DrawBufferAllocate)(struct gl_context *ctx);
/** Enable or disable server-side gl capabilities */
void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state);
/** Specify fog parameters */
diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index 696a08fd65b..5eeec08655d 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -714,13 +714,11 @@ st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
* created FBOs.
*/
static void
-st_DrawBuffer(struct gl_context *ctx, GLenum buffer)
+st_DrawBufferAllocate(struct gl_context *ctx)
{
struct st_context *st = st_context(ctx);
struct gl_framebuffer *fb = ctx->DrawBuffer;
- (void) buffer;
-
if (_mesa_is_winsys_fbo(fb)) {
GLuint i;
/* add the renderbuffers on demand */
@@ -736,8 +734,8 @@ st_DrawBuffer(struct gl_context *ctx, GLenum buffer)
/**
- * Called via glReadBuffer. As with st_DrawBuffer, we use this function
- * to check if we need to allocate a renderbuffer on demand.
+ * Called via glReadBuffer. As with st_DrawBufferAllocate, 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)
@@ -868,7 +866,7 @@ st_init_fbo_functions(struct dd_function_table *functions)
functions->FinishRenderTexture = st_finish_render_texture;
functions->ValidateFramebuffer = st_validate_framebuffer;
- functions->DrawBuffer = st_DrawBuffer;
+ functions->DrawBufferAllocate = st_DrawBufferAllocate;
functions->ReadBuffer = st_ReadBuffer;
functions->MapRenderbuffer = st_MapRenderbuffer;