Module: Mesa
Branch: master
Commit: c15e20d8f6f6d632ad55d444149c2a12d0dcc515
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c15e20d8f6f6d632ad55d444149c2a12d0dcc515

Author: Topi Pohjolainen <topi.pohjolai...@intel.com>
Date:   Thu Mar 19 11:09:54 2015 +0200

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 <kenn...@whitecape.org>
Reviewed-by: Matt Turner <matts...@gmail.com>
Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com>

---

 src/mesa/drivers/dri/i965/brw_state.h            |    5 +++
 src/mesa/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 cfa67b6..83058b9 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 d451940..25fb543 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,
 };
 
 

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to