From c15e20d8f6f6d632ad55d444149c2a12d0dcc515 Mon Sep 17 00:00:00 2001 From: Topi Pohjolainen Date: Thu, 19 Mar 2015 11:09:54 +0200 Subject: [PATCH] i965: Expose and refactor brw_update_renderbuffer_surfaces() Note that brw_update_renderbuffer_surfaces() already had a helper variable which was used in parallel to direct access of the current draw buffer of the context. Reviewed-by: Kenneth Graunke Reviewed-by: Matt Turner Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_state.h | 5 ++ .../drivers/dri/i965/brw_wm_surface_state.c | 51 +++++++++++-------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index cfa67b694d4..83058b9ba2a 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -233,6 +233,11 @@ GLuint translate_tex_format(struct brw_context *brw, int brw_get_texture_swizzle(const struct gl_context *ctx, const struct gl_texture_object *t); +void brw_update_renderbuffer_surfaces(struct brw_context *brw, + const struct gl_framebuffer *fb, + uint32_t render_target_start, + uint32_t *surf_offset); + /* gen7_wm_surface_state.c */ uint32_t gen7_surface_tiling_mode(uint32_t tiling); uint32_t gen7_surface_msaa_bits(unsigned num_samples, enum intel_msaa_layout l); diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c index d4519400f83..25fb5430413 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -731,40 +731,49 @@ brw_update_renderbuffer_surface(struct brw_context *brw, /** * Construct SURFACE_STATE objects for renderbuffers/draw buffers. */ -static void -brw_update_renderbuffer_surfaces(struct brw_context *brw) +void +brw_update_renderbuffer_surfaces(struct brw_context *brw, + const struct gl_framebuffer *fb, + uint32_t render_target_start, + uint32_t *surf_offset) { - struct gl_context *ctx = &brw->ctx; - /* _NEW_BUFFERS */ - const struct gl_framebuffer *fb = ctx->DrawBuffer; GLuint i; - /* _NEW_BUFFERS | _NEW_COLOR */ /* Update surfaces for drawing buffers */ - if (ctx->DrawBuffer->_NumColorDrawBuffers >= 1) { - for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { - const uint32_t surf_index = - brw->wm.prog_data->binding_table.render_target_start + i; + if (fb->_NumColorDrawBuffers >= 1) { + for (i = 0; i < fb->_NumColorDrawBuffers; i++) { + const uint32_t surf_index = render_target_start + i; - if (intel_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[i])) { - brw->wm.base.surf_offset[surf_index] = + if (intel_renderbuffer(fb->_ColorDrawBuffers[i])) { + surf_offset[surf_index] = brw->vtbl.update_renderbuffer_surface( - brw, ctx->DrawBuffer->_ColorDrawBuffers[i], - ctx->DrawBuffer->MaxNumLayers > 0, i, surf_index); + brw, fb->_ColorDrawBuffers[i], + fb->MaxNumLayers > 0, i, surf_index); } else { brw->vtbl.emit_null_surface_state( brw, fb->Width, fb->Height, fb->Visual.samples, - &brw->wm.base.surf_offset[surf_index]); + &surf_offset[surf_index]); } } } else { - const uint32_t surf_index = - brw->wm.prog_data->binding_table.render_target_start; - + const uint32_t surf_index = render_target_start; brw->vtbl.emit_null_surface_state( brw, fb->Width, fb->Height, fb->Visual.samples, - &brw->wm.base.surf_offset[surf_index]); + &surf_offset[surf_index]); } +} + +static void +update_renderbuffer_surfaces(struct brw_context *brw) +{ + const struct gl_context *ctx = &brw->ctx; + + /* _NEW_BUFFERS | _NEW_COLOR */ + const struct gl_framebuffer *fb = ctx->DrawBuffer; + brw_update_renderbuffer_surfaces( + brw, fb, + brw->wm.prog_data->binding_table.render_target_start, + brw->wm.base.surf_offset); brw->ctx.NewDriverState |= BRW_NEW_SURFACES; } @@ -775,7 +784,7 @@ const struct brw_tracked_state brw_renderbuffer_surfaces = { .brw = BRW_NEW_BATCH | BRW_NEW_FS_PROG_DATA, }, - .emit = brw_update_renderbuffer_surfaces, + .emit = update_renderbuffer_surfaces, }; const struct brw_tracked_state gen6_renderbuffer_surfaces = { @@ -783,7 +792,7 @@ const struct brw_tracked_state gen6_renderbuffer_surfaces = { .mesa = _NEW_BUFFERS, .brw = BRW_NEW_BATCH, }, - .emit = brw_update_renderbuffer_surfaces, + .emit = update_renderbuffer_surfaces, }; -- 2.30.2