Mesa (master): r300g,util: remove pipe_surface from the util_blitter_fill interface and clean up

Marek Olšák mareko at kemper.freedesktop.org
Tue May 25 22:14:49 UTC 2010


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Tue May 25 21:28:19 2010 +0200

r300g,util: remove pipe_surface from the util_blitter_fill interface and clean up

---

 src/gallium/auxiliary/util/u_blitter.c  |   43 ++++++++++++++++--------------
 src/gallium/auxiliary/util/u_blitter.h  |   11 ++++---
 src/gallium/drivers/r300/r300_blit.c    |   34 ++++++------------------
 src/gallium/drivers/r300/r300_blit.h    |   12 ++++----
 src/gallium/drivers/r300/r300_context.c |    2 +-
 5 files changed, 45 insertions(+), 57 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
index c2d1af3..7c08ebc 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -715,10 +715,8 @@ static void util_blitter_do_copy(struct blitter_context *blitter,
 
    blitter_set_rectangle(ctx, dstx, dsty, dstx+width, dsty+height, dst->width, dst->height, 0);
    blitter_draw_quad(ctx);
-
 }
 
-
 void util_blitter_copy(struct blitter_context *blitter,
                        struct pipe_surface *dst,
                        unsigned dstx, unsigned dsty,
@@ -775,38 +773,41 @@ void util_blitter_copy(struct blitter_context *blitter,
    blitter_restore_CSOs(ctx);
 }
 
-void util_blitter_fill(struct blitter_context *blitter,
-                       struct pipe_surface *dst,
-                       unsigned dstx, unsigned dsty,
-                       unsigned width, unsigned height,
-                       unsigned value)
+/* Fill a region of a surface with a constant value. */
+void util_blitter_fill_region(struct blitter_context *blitter,
+                              struct pipe_resource *dst,
+                              struct pipe_subresource subdst,
+                              unsigned dstx, unsigned dsty, unsigned dstz,
+                              unsigned width, unsigned height,
+                              unsigned value)
 {
    struct blitter_context_priv *ctx = (struct blitter_context_priv*)blitter;
    struct pipe_context *pipe = ctx->pipe;
    struct pipe_screen *screen = pipe->screen;
+   struct pipe_surface *dstsurf;
    struct pipe_framebuffer_state fb_state;
    float rgba[4];
    ubyte ub_rgba[4] = {0};
    union util_color color;
    int i;
 
-   assert(dst->texture);
-   if (!dst->texture)
+   assert(dst);
+   if (!dst)
       return;
 
    /* check if we can render to the surface */
    if (util_format_is_depth_or_stencil(dst->format) || /* unlikely, but you never know */
-       !screen->is_format_supported(screen, dst->format, dst->texture->target,
-                                    dst->texture->nr_samples,
+       !screen->is_format_supported(screen, dst->format, dst->target,
+                                    dst->nr_samples,
                                     PIPE_BIND_RENDER_TARGET, 0)) {
-      struct pipe_subresource subdst;
-      subdst.face = dst->face;
-      subdst.level = dst->level;
-      util_resource_fill_region(pipe, dst->texture, subdst, dstx, dsty,
-                                dst->zslice, width, height, value);
+      util_resource_fill_region(pipe, dst, subdst, dstx, dsty, dstz,
+                                width, height, value);
       return;
    }
 
+   dstsurf = screen->get_tex_surface(screen, dst, subdst.face, subdst.level,
+                                     dstz, PIPE_BIND_RENDER_TARGET);
+
    /* unpack the color */
    color.ui = value;
    util_unpack_color_ub(dst->format, &color,
@@ -827,15 +828,17 @@ void util_blitter_fill(struct blitter_context *blitter,
    pipe->bind_vertex_elements_state(pipe, ctx->velem_state);
 
    /* set a framebuffer state */
-   fb_state.width = dst->width;
-   fb_state.height = dst->height;
+   fb_state.width = dstsurf->width;
+   fb_state.height = dstsurf->height;
    fb_state.nr_cbufs = 1;
-   fb_state.cbufs[0] = dst;
+   fb_state.cbufs[0] = dstsurf;
    fb_state.zsbuf = 0;
    pipe->set_framebuffer_state(pipe, &fb_state);
 
    blitter_set_clear_color(ctx, rgba);
-   blitter_set_rectangle(ctx, 0, 0, width, height, dst->width, dst->height, 0);
+   blitter_set_rectangle(ctx, 0, 0, width, height, dstsurf->width, dstsurf->height, 0);
    blitter_draw_quad(ctx);
    blitter_restore_CSOs(ctx);
+
+   pipe_surface_reference(&dstsurf, NULL);
 }
diff --git a/src/gallium/auxiliary/util/u_blitter.h b/src/gallium/auxiliary/util/u_blitter.h
index ab96ba2..fe4c3d4 100644
--- a/src/gallium/auxiliary/util/u_blitter.h
+++ b/src/gallium/auxiliary/util/u_blitter.h
@@ -130,11 +130,12 @@ void util_blitter_copy(struct blitter_context *blitter,
  * already required to be saved:
  * - framebuffer state
  */
-void util_blitter_fill(struct blitter_context *blitter,
-                       struct pipe_surface *dst,
-                       unsigned dstx, unsigned dsty,
-                       unsigned width, unsigned height,
-                       unsigned value);
+void util_blitter_fill_region(struct blitter_context *blitter,
+                              struct pipe_resource *dst,
+                              struct pipe_subresource subdst,
+                              unsigned dstx, unsigned dsty, unsigned dstz,
+                              unsigned width, unsigned height,
+                              unsigned value);
 
 
 /* The functions below should be used to save currently bound constant state
diff --git a/src/gallium/drivers/r300/r300_blit.c b/src/gallium/drivers/r300/r300_blit.c
index 2bf9317..5489d88 100644
--- a/src/gallium/drivers/r300/r300_blit.c
+++ b/src/gallium/drivers/r300/r300_blit.c
@@ -205,34 +205,18 @@ void r300_surface_copy(struct pipe_context* pipe,
 }
 
 /* Fill a region of a surface with a constant value. */
-void r300_surface_fill(struct pipe_context* pipe,
-                       struct pipe_resource* dst,
-                       struct pipe_subresource subdst,
-                       unsigned dstx, unsigned dsty, unsigned dstz,
-                       unsigned width, unsigned height,
-                       unsigned value)
+void r300_resource_fill_region(struct pipe_context *pipe,
+                               struct pipe_resource *dst,
+                               struct pipe_subresource subdst,
+                               unsigned dstx, unsigned dsty, unsigned dstz,
+                               unsigned width, unsigned height,
+                               unsigned value)
 {
-    struct pipe_screen *screen = pipe->screen;
-    struct r300_context* r300 = r300_context(pipe);
-    struct pipe_surface *dstsurf;
-    unsigned bind;
-
-    if (util_format_is_depth_or_stencil(dst->format))
-       bind = PIPE_BIND_DEPTH_STENCIL;
-    else
-       bind = PIPE_BIND_RENDER_TARGET;
-
-    dstsurf = screen->get_tex_surface(screen, dst,
-                                      subdst.face,
-                                      subdst.level,
-                                      dstz,
-                                      bind);
+    struct r300_context *r300 = r300_context(pipe);
 
     r300_blitter_save_states(r300);
     util_blitter_save_framebuffer(r300->blitter, r300->fb_state.state);
 
-    util_blitter_fill(r300->blitter,
-                      dstsurf, dstx, dsty, width, height, value);
-
-    pipe_surface_reference(&dstsurf, NULL);
+    util_blitter_fill_region(r300->blitter, dst, subdst,
+                             dstx, dsty, dstz, width, height, value);
 }
diff --git a/src/gallium/drivers/r300/r300_blit.h b/src/gallium/drivers/r300/r300_blit.h
index c978726..6dfb453 100644
--- a/src/gallium/drivers/r300/r300_blit.h
+++ b/src/gallium/drivers/r300/r300_blit.h
@@ -42,11 +42,11 @@ void r300_surface_copy(struct pipe_context* pipe,
                        unsigned srcx, unsigned srcy, unsigned srcz,
                        unsigned width, unsigned height);
 
-void r300_surface_fill(struct pipe_context* pipe,
-                       struct pipe_resource* dst,
-                       struct pipe_subresource subdst,
-                       unsigned dstx, unsigned dsty, unsigned dstz,
-                       unsigned width, unsigned height,
-                       unsigned value);
+void r300_resource_fill_region(struct pipe_context* pipe,
+                               struct pipe_resource* dst,
+                               struct pipe_subresource subdst,
+                               unsigned dstx, unsigned dsty, unsigned dstz,
+                               unsigned width, unsigned height,
+                               unsigned value);
 
 #endif /* R300_BLIT_H */
diff --git a/src/gallium/drivers/r300/r300_context.c b/src/gallium/drivers/r300/r300_context.c
index f771e10..406b812 100644
--- a/src/gallium/drivers/r300/r300_context.c
+++ b/src/gallium/drivers/r300/r300_context.c
@@ -187,7 +187,7 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
 
     r300->context.clear = r300_clear;
     r300->context.resource_copy_region = r300_surface_copy;
-    r300->context.resource_fill_region = r300_surface_fill;
+    r300->context.resource_fill_region = r300_resource_fill_region;
 
     if (r300screen->caps.has_tcl) {
         r300->context.draw_arrays = r300_draw_arrays;




More information about the mesa-commit mailing list