gallium: move surface utility functions into u_surface.c
authorBrian Paul <brianp@vmware.com>
Mon, 3 May 2010 23:28:32 +0000 (17:28 -0600)
committerBrian Paul <brianp@vmware.com>
Mon, 3 May 2010 23:28:32 +0000 (17:28 -0600)
This is a better place than in u_rect.c

14 files changed:
src/gallium/auxiliary/util/u_blitter.c
src/gallium/auxiliary/util/u_clear.h
src/gallium/auxiliary/util/u_rect.c
src/gallium/auxiliary/util/u_rect.h
src/gallium/auxiliary/util/u_surface.c
src/gallium/auxiliary/util/u_surface.h
src/gallium/drivers/cell/ppu/cell_surface.c
src/gallium/drivers/llvmpipe/lp_surface.c
src/gallium/drivers/softpipe/sp_surface.c
src/gallium/state_trackers/dri/drm/dri1.c
src/gallium/state_trackers/vega/renderer.c
src/gallium/state_trackers/xorg/xorg_exa.c
src/gallium/state_trackers/xorg/xorg_renderer.c
src/mesa/state_tracker/st_context.c

index 956aedc8a15a66af726912450a9a894d80d6e9c3..1abe31db4660fd2cad7fba66d24906925c5a4848 100644 (file)
@@ -47,6 +47,7 @@
 #include "util/u_rect.h"
 #include "util/u_sampler.h"
 #include "util/u_simple_shaders.h"
+#include "util/u_surface.h"
 #include "util/u_texture.h"
 
 #define INVALID_PTR ((void*)~0)
index 2c32db61756035aae298daf777c062acd2f31982..40da2d75a724405a85b9d6cce944172e6cac819f 100644 (file)
@@ -33,6 +33,7 @@
 #include "pipe/p_state.h"
 #include "util/u_pack_color.h"
 #include "util/u_rect.h"
+#include "util/u_surface.h"
 
 
 /**
index 098cdfd58b12e08a796a822b365d0214911e7484..9bbcf1c8c49ae1d636b46facb9534ff6993f67c3 100644 (file)
  */
 
 
-#include "pipe/p_defines.h"
-#include "pipe/p_format.h"
-#include "pipe/p_context.h"
-#include "pipe/p_screen.h"
 #include "util/u_format.h"
-#include "util/u_inlines.h"
 #include "util/u_rect.h"
 
 
@@ -152,156 +147,3 @@ util_fill_rect(ubyte * dst,
         break;
    }
 }
-
-
-
-/**
- * Fallback function for pipe->surface_copy().
- * Note: (X,Y)=(0,0) is always the upper-left corner.
- * if do_flip, flip the image vertically on its way from src rect to dst rect.
- * XXX should probably put this in new u_surface.c file...
- */
-void
-util_surface_copy(struct pipe_context *pipe,
-                  boolean do_flip,
-                  struct pipe_surface *dst,
-                  unsigned dst_x, unsigned dst_y,
-                  struct pipe_surface *src,
-                  unsigned src_x, unsigned src_y, 
-                  unsigned w, unsigned h)
-{
-   struct pipe_transfer *src_trans, *dst_trans;
-   void *dst_map;
-   const void *src_map;
-   enum pipe_format src_format, dst_format;
-
-   assert(src->texture && dst->texture);
-   if (!src->texture || !dst->texture)
-      return;
-
-   src_format = src->texture->format;
-   dst_format = dst->texture->format;
-
-   src_trans = pipe_get_transfer(pipe,
-                                src->texture,
-                                src->face,
-                                src->level,
-                                src->zslice,
-                                PIPE_TRANSFER_READ,
-                                src_x, src_y, w, h);
-
-   dst_trans = pipe_get_transfer(pipe,
-                                dst->texture,
-                                dst->face,
-                                dst->level,
-                                dst->zslice,
-                                PIPE_TRANSFER_WRITE,
-                                dst_x, dst_y, w, h);
-
-   assert(util_format_get_blocksize(dst_format) == util_format_get_blocksize(src_format));
-   assert(util_format_get_blockwidth(dst_format) == util_format_get_blockwidth(src_format));
-   assert(util_format_get_blockheight(dst_format) == util_format_get_blockheight(src_format));
-
-   src_map = pipe->transfer_map(pipe, src_trans);
-   dst_map = pipe->transfer_map(pipe, dst_trans);
-
-   assert(src_map);
-   assert(dst_map);
-
-   if (src_map && dst_map) {
-      /* If do_flip, invert src_y position and pass negative src stride */
-      util_copy_rect(dst_map,
-                     dst_format,
-                     dst_trans->stride,
-                     0, 0,
-                     w, h,
-                     src_map,
-                     do_flip ? -(int) src_trans->stride : src_trans->stride,
-                     0,
-                     do_flip ? h - 1 : 0);
-   }
-
-   pipe->transfer_unmap(pipe, src_trans);
-   pipe->transfer_unmap(pipe, dst_trans);
-
-   pipe->transfer_destroy(pipe, src_trans);
-   pipe->transfer_destroy(pipe, dst_trans);
-}
-
-
-
-#define UBYTE_TO_USHORT(B) ((B) | ((B) << 8))
-
-
-/**
- * Fallback for pipe->surface_fill() function.
- * XXX should probably put this in new u_surface.c file...
- */
-void
-util_surface_fill(struct pipe_context *pipe,
-                  struct pipe_surface *dst,
-                  unsigned dstx, unsigned dsty,
-                  unsigned width, unsigned height, unsigned value)
-{
-   struct pipe_transfer *dst_trans;
-   void *dst_map;
-
-   assert(dst->texture);
-   if (!dst->texture)
-      return;
-   dst_trans = pipe_get_transfer(pipe,
-                                dst->texture,
-                                dst->face,
-                                dst->level,
-                                dst->zslice,
-                                PIPE_TRANSFER_WRITE,
-                                dstx, dsty, width, height);
-
-   dst_map = pipe->transfer_map(pipe, dst_trans);
-
-   assert(dst_map);
-
-   if (dst_map) {
-      assert(dst_trans->stride > 0);
-
-      switch (util_format_get_blocksize(dst->texture->format)) {
-      case 1:
-      case 2:
-      case 4:
-         util_fill_rect(dst_map, dst->texture->format,
-                       dst_trans->stride,
-                        0, 0, width, height, value);
-         break;
-      case 8:
-      {
-        /* expand the 4-byte clear value to an 8-byte value */
-        ushort *row = (ushort *) dst_map;
-        ushort val0 = UBYTE_TO_USHORT((value >>  0) & 0xff);
-        ushort val1 = UBYTE_TO_USHORT((value >>  8) & 0xff);
-        ushort val2 = UBYTE_TO_USHORT((value >> 16) & 0xff);
-        ushort val3 = UBYTE_TO_USHORT((value >> 24) & 0xff);
-        unsigned i, j;
-        val0 = (val0 << 8) | val0;
-        val1 = (val1 << 8) | val1;
-        val2 = (val2 << 8) | val2;
-        val3 = (val3 << 8) | val3;
-        for (i = 0; i < height; i++) {
-           for (j = 0; j < width; j++) {
-              row[j*4+0] = val0;
-              row[j*4+1] = val1;
-              row[j*4+2] = val2;
-              row[j*4+3] = val3;
-           }
-           row += dst_trans->stride/2;
-        }
-      }
-      break;
-      default:
-         assert(0);
-         break;
-      }
-   }
-
-   pipe->transfer_unmap(pipe, dst_trans);
-   pipe->transfer_destroy(pipe, dst_trans);
-}
index b44d821904b06d83a66daa42032d2079c3413a84..40d57e662d7e3ec1a7ebe96e2e1981ec7e31b899 100644 (file)
@@ -37,9 +37,6 @@
 
 #include "pipe/p_format.h"
 
-struct pipe_context;
-struct pipe_surface;
-
 
 extern void
 util_copy_rect(ubyte * dst, enum pipe_format format,
@@ -53,20 +50,4 @@ util_fill_rect(ubyte * dst, enum pipe_format format,
                unsigned width, unsigned height, uint32_t value);
 
 
-extern void
-util_surface_copy(struct pipe_context *pipe,
-                  boolean do_flip,
-                  struct pipe_surface *dst,
-                  unsigned dst_x, unsigned dst_y,
-                  struct pipe_surface *src,
-                  unsigned src_x, unsigned src_y, 
-                  unsigned w, unsigned h);
-
-extern void
-util_surface_fill(struct pipe_context *pipe,
-                  struct pipe_surface *dst,
-                  unsigned dstx, unsigned dsty,
-                  unsigned width, unsigned height, unsigned value);
-
-
 #endif /* U_RECT_H */
index 35a9b484fc68f61747d54bc14e99b4af231fb5eb..b47c92ca28fd1cff26f3fabb6f2726e3e0104b9b 100644 (file)
  */
 
 
+#include "pipe/p_defines.h"
 #include "pipe/p_screen.h"
 #include "pipe/p_state.h"
-#include "pipe/p_defines.h"
-#include "util/u_inlines.h"
 
+#include "util/u_format.h"
+#include "util/u_inlines.h"
 #include "util/u_memory.h"
+#include "util/u_rect.h"
 #include "util/u_surface.h"
 
 
@@ -114,3 +116,154 @@ util_destroy_rgba_surface(struct pipe_resource *texture,
    pipe_surface_reference(&surface, NULL);
    pipe_resource_reference(&texture, NULL);
 }
+
+
+
+/**
+ * Fallback function for pipe->surface_copy().
+ * Note: (X,Y)=(0,0) is always the upper-left corner.
+ * if do_flip, flip the image vertically on its way from src rect to dst rect.
+ */
+void
+util_surface_copy(struct pipe_context *pipe,
+                  boolean do_flip,
+                  struct pipe_surface *dst,
+                  unsigned dst_x, unsigned dst_y,
+                  struct pipe_surface *src,
+                  unsigned src_x, unsigned src_y, 
+                  unsigned w, unsigned h)
+{
+   struct pipe_transfer *src_trans, *dst_trans;
+   void *dst_map;
+   const void *src_map;
+   enum pipe_format src_format, dst_format;
+
+   assert(src->texture && dst->texture);
+   if (!src->texture || !dst->texture)
+      return;
+
+   src_format = src->texture->format;
+   dst_format = dst->texture->format;
+
+   src_trans = pipe_get_transfer(pipe,
+                                src->texture,
+                                src->face,
+                                src->level,
+                                src->zslice,
+                                PIPE_TRANSFER_READ,
+                                src_x, src_y, w, h);
+
+   dst_trans = pipe_get_transfer(pipe,
+                                dst->texture,
+                                dst->face,
+                                dst->level,
+                                dst->zslice,
+                                PIPE_TRANSFER_WRITE,
+                                dst_x, dst_y, w, h);
+
+   assert(util_format_get_blocksize(dst_format) == util_format_get_blocksize(src_format));
+   assert(util_format_get_blockwidth(dst_format) == util_format_get_blockwidth(src_format));
+   assert(util_format_get_blockheight(dst_format) == util_format_get_blockheight(src_format));
+
+   src_map = pipe->transfer_map(pipe, src_trans);
+   dst_map = pipe->transfer_map(pipe, dst_trans);
+
+   assert(src_map);
+   assert(dst_map);
+
+   if (src_map && dst_map) {
+      /* If do_flip, invert src_y position and pass negative src stride */
+      util_copy_rect(dst_map,
+                     dst_format,
+                     dst_trans->stride,
+                     0, 0,
+                     w, h,
+                     src_map,
+                     do_flip ? -(int) src_trans->stride : src_trans->stride,
+                     0,
+                     do_flip ? h - 1 : 0);
+   }
+
+   pipe->transfer_unmap(pipe, src_trans);
+   pipe->transfer_unmap(pipe, dst_trans);
+
+   pipe->transfer_destroy(pipe, src_trans);
+   pipe->transfer_destroy(pipe, dst_trans);
+}
+
+
+
+#define UBYTE_TO_USHORT(B) ((B) | ((B) << 8))
+
+
+/**
+ * Fallback for pipe->surface_fill() function.
+ */
+void
+util_surface_fill(struct pipe_context *pipe,
+                  struct pipe_surface *dst,
+                  unsigned dstx, unsigned dsty,
+                  unsigned width, unsigned height, unsigned value)
+{
+   struct pipe_transfer *dst_trans;
+   void *dst_map;
+
+   assert(dst->texture);
+   if (!dst->texture)
+      return;
+   dst_trans = pipe_get_transfer(pipe,
+                                dst->texture,
+                                dst->face,
+                                dst->level,
+                                dst->zslice,
+                                PIPE_TRANSFER_WRITE,
+                                dstx, dsty, width, height);
+
+   dst_map = pipe->transfer_map(pipe, dst_trans);
+
+   assert(dst_map);
+
+   if (dst_map) {
+      assert(dst_trans->stride > 0);
+
+      switch (util_format_get_blocksize(dst->texture->format)) {
+      case 1:
+      case 2:
+      case 4:
+         util_fill_rect(dst_map, dst->texture->format,
+                       dst_trans->stride,
+                        0, 0, width, height, value);
+         break;
+      case 8:
+      {
+        /* expand the 4-byte clear value to an 8-byte value */
+        ushort *row = (ushort *) dst_map;
+        ushort val0 = UBYTE_TO_USHORT((value >>  0) & 0xff);
+        ushort val1 = UBYTE_TO_USHORT((value >>  8) & 0xff);
+        ushort val2 = UBYTE_TO_USHORT((value >> 16) & 0xff);
+        ushort val3 = UBYTE_TO_USHORT((value >> 24) & 0xff);
+        unsigned i, j;
+        val0 = (val0 << 8) | val0;
+        val1 = (val1 << 8) | val1;
+        val2 = (val2 << 8) | val2;
+        val3 = (val3 << 8) | val3;
+        for (i = 0; i < height; i++) {
+           for (j = 0; j < width; j++) {
+              row[j*4+0] = val0;
+              row[j*4+1] = val1;
+              row[j*4+2] = val2;
+              row[j*4+3] = val3;
+           }
+           row += dst_trans->stride/2;
+        }
+      }
+      break;
+      default:
+         assert(0);
+         break;
+      }
+   }
+
+   pipe->transfer_unmap(pipe, dst_trans);
+   pipe->transfer_destroy(pipe, dst_trans);
+}
index a61bb291718d2e711e02e36f49caa474cfb1a424..c43169b5278552ddc2b19ff81b28288f0e068710 100644 (file)
@@ -62,4 +62,22 @@ util_destroy_rgba_surface(struct pipe_resource *texture,
                           struct pipe_surface *surface);
 
 
+
+extern void
+util_surface_copy(struct pipe_context *pipe,
+                  boolean do_flip,
+                  struct pipe_surface *dst,
+                  unsigned dst_x, unsigned dst_y,
+                  struct pipe_surface *src,
+                  unsigned src_x, unsigned src_y, 
+                  unsigned w, unsigned h);
+
+extern void
+util_surface_fill(struct pipe_context *pipe,
+                  struct pipe_surface *dst,
+                  unsigned dstx, unsigned dsty,
+                  unsigned width, unsigned height, unsigned value);
+
+
+
 #endif /* U_SURFACE_H */
index ffb8595d828ed327ce12de8d001bee2e704dd863..6696a4591c1adb5fddeaf097aca23688bd8ff338 100644 (file)
@@ -25,7 +25,7 @@
  * 
  **************************************************************************/
 
-#include "util/u_rect.h"
+#include "util/u_surface.h"
 #include "cell_context.h"
 #include "cell_surface.h"
 
index 8bd83f576f470f7c0ffec13859ba0dd910c08488..245171120dd09b5f58a5c7c4d852a1888f9c1622 100644 (file)
@@ -26,6 +26,7 @@
  **************************************************************************/
 
 #include "util/u_rect.h"
+#include "util/u_surface.h"
 #include "lp_context.h"
 #include "lp_flush.h"
 #include "lp_limits.h"
index b04c2a63ad606a7dfd4f919db2564bc4f15acca8..32cab06004f0342a36cddecf65a18ca86df247c8 100644 (file)
@@ -25,7 +25,7 @@
  * 
  **************************************************************************/
 
-#include "util/u_rect.h"
+#include "util/u_surface.h"
 #include "sp_context.h"
 #include "sp_surface.h"
 
index 23c21ed8398525a1aa539fd1abad9280521b023b..326ff8bcadaa60c0ca9cd22307e39f5345c62cb9 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "util/u_memory.h"
 #include "util/u_rect.h"
+#include "util/u_surface.h"
 #include "util/u_inlines.h"
 #include "pipe/p_context.h"
 #include "state_tracker/dri1_api.h"
index 48fbc3b330ee5ae14b8b4ae1323a6eae7192403e..e6aea482a761ca4b5ecea8d02a7a426516ba1e9b 100644 (file)
@@ -40,6 +40,7 @@
 #include "util/u_memory.h"
 #include "util/u_rect.h"
 #include "util/u_sampler.h"
+#include "util/u_surface.h"
 
 #include "cso_cache/cso_context.h"
 
index d5a1be81747a4c78da8f20b8b6a40250ed40931b..65be8c332a5da8b4f3180562d1efaf0f524cfc8c 100644 (file)
@@ -46,6 +46,7 @@
 #include "util/u_math.h"
 #include "util/u_debug.h"
 #include "util/u_format.h"
+#include "util/u_surface.h"
 
 #define DEBUG_PRINT 0
 #define ROUND_UP_TEXTURES 1
index 13fa561390fbbc792a1b47b5de6dbd1bc6027287..583493116d50405b1b1af0d91586fd186166d63d 100644 (file)
@@ -9,6 +9,7 @@
 #include "util/u_memory.h"
 #include "util/u_rect.h"
 #include "util/u_sampler.h"
+#include "util/u_surface.h"
 
 #include "util/u_inlines.h"
 
index 2b1174a504d6c8a55a664f2594bc436f1da0c753..e8a3926e6dbd6f447def0d5768bd5f936c5390a8 100644 (file)
@@ -64,6 +64,7 @@
 #include "pipe/p_context.h"
 #include "util/u_inlines.h"
 #include "util/u_rect.h"
+#include "util/u_surface.h"
 #include "draw/draw_context.h"
 #include "cso_cache/cso_context.h"