util: simplify writemask parameters for util_blit_pixels()
authorBrian Paul <brianp@vmware.com>
Wed, 24 Sep 2014 13:27:02 +0000 (07:27 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 24 Sep 2014 21:35:11 +0000 (15:35 -0600)
Instead of separate color and Z/S writemasks, just have one writemask
parameter that takes a mask of the PIPE_MASK_[RGBAZS] flags.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
src/gallium/auxiliary/util/u_blit.c
src/gallium/auxiliary/util/u_blit.h

index eed1e40098cf262029984826ec056e0518bd052b..502ee7ae5b9207117d6884d419253e3252ec5dac 100644 (file)
@@ -337,9 +337,9 @@ formats_compatible(enum pipe_format src_format,
  * Overlapping regions are acceptable.
  * Flipping and stretching are supported.
  * \param filter  one of PIPE_TEX_FILTER_NEAREST/LINEAR
- * \param writemask  controls which channels in the dest surface are sourced
- *                   from the src surface.  Disabled channels are sourced
- *                   from (0,0,0,1).
+ * \param writemask  bitmask of PIPE_MASK_[RGBAZS].  Controls which channels
+ *                   in the dest surface are sourced from the src surface.
+ *                   Disabled color channels are sourced from (0,0,0,1).
  */
 void
 util_blit_pixels(struct blit_state *ctx,
@@ -352,7 +352,7 @@ util_blit_pixels(struct blit_state *ctx,
                  int dstX0, int dstY0,
                  int dstX1, int dstY1,
                  float z, uint filter,
-                 uint writemask, uint zs_writemask)
+                 uint writemask)
 {
    struct pipe_context *pipe = ctx->pipe;
    enum pipe_format src_format, dst_format;
@@ -383,11 +383,18 @@ util_blit_pixels(struct blit_state *ctx,
    is_depth = util_format_has_depth(src_desc);
    is_stencil = util_format_has_stencil(src_desc);
 
-   blit_depth = is_depth && (zs_writemask & BLIT_WRITEMASK_Z);
-   blit_stencil = is_stencil && (zs_writemask & BLIT_WRITEMASK_STENCIL);
+   blit_depth = is_depth && (writemask & PIPE_MASK_Z);
+   blit_stencil = is_stencil && (writemask & PIPE_MASK_S);
 
-   assert((writemask && !zs_writemask && !is_depth && !is_stencil) ||
-          (!writemask && (blit_depth || blit_stencil)));
+   if (is_depth || is_stencil) {
+      assert((writemask & PIPE_MASK_RGBA) == 0);
+      assert(blit_depth || blit_stencil);
+   }
+   else {
+      assert((writemask & PIPE_MASK_ZS) == 0);
+      assert(!blit_depth);
+      assert(!blit_stencil);
+   }
 
    /*
     * XXX: z parameter is deprecated. dst->u.tex.first_layer
@@ -447,7 +454,7 @@ util_blit_pixels(struct blit_state *ctx,
    info.src.box.height = srcY1 - srcY0;
    info.src.box.depth = 1;
    info.src.format = src_tex->format;
-   info.mask = writemask | (zs_writemask << 4);
+   info.mask = writemask;
    info.filter = filter;
    info.scissor_enable = 0;
 
index 042c48942efad525f4147e43d8e7f20583eee15d..b50edab781e4eb900212ca4a5f2f176031fc1f3e 100644 (file)
@@ -31,8 +31,6 @@
 
 
 #include "pipe/p_compiler.h"
-/* for TGSI_WRITEMASK_* specification in util_blit_pixels */
-#include "pipe/p_shader_tokens.h"
 
 
 #ifdef __cplusplus
@@ -46,9 +44,6 @@ struct pipe_resource;
 struct pipe_sampler_view;
 struct pipe_surface;
 
-#define BLIT_WRITEMASK_Z         1
-#define BLIT_WRITEMASK_STENCIL   2
-
 extern struct blit_state *
 util_create_blit(struct pipe_context *pipe, struct cso_context *cso);
 
@@ -66,7 +61,7 @@ util_blit_pixels(struct blit_state *ctx,
                  int dstX0, int dstY0,
                  int dstX1, int dstY1,
                  float z, uint filter,
-                 uint writemask, uint zs_writemask);
+                 uint writemask);
 
 extern void
 util_blit_pixels_tex(struct blit_state *ctx,