Mesa (master): softpipe: fix swizzling of texture border color

Brian Paul brianp at kemper.freedesktop.org
Mon Sep 27 21:07:20 UTC 2010


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

Author: Brian Paul <brianp at vmware.com>
Date:   Mon Sep 27 15:05:29 2010 -0600

softpipe: fix swizzling of texture border color

We ask the texture tile cache to swizzle the color for us since that's
where the view/swizzling info is available.

---

 src/gallium/drivers/softpipe/sp_tex_sample.c     |    6 ++++--
 src/gallium/drivers/softpipe/sp_tex_tile_cache.c |   20 ++++++++++++++++++++
 src/gallium/drivers/softpipe/sp_tex_tile_cache.h |    6 +++++-
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c b/src/gallium/drivers/softpipe/sp_tex_sample.c
index 96ccf1d..088e48f 100644
--- a/src/gallium/drivers/softpipe/sp_tex_sample.c
+++ b/src/gallium/drivers/softpipe/sp_tex_sample.c
@@ -656,7 +656,8 @@ get_texel_2d(const struct sp_sampler_varient *samp,
 
    if (x < 0 || x >= (int) u_minify(texture->width0, level) ||
        y < 0 || y >= (int) u_minify(texture->height0, level)) {
-      return samp->sampler->border_color;
+      return sp_tex_tile_cache_border_color(samp->cache,
+                                            samp->sampler->border_color);
    }
    else {
       return get_texel_2d_no_border( samp, addr, x, y );
@@ -750,7 +751,8 @@ get_texel_3d(const struct sp_sampler_varient *samp,
    if (x < 0 || x >= (int) u_minify(texture->width0, level) ||
        y < 0 || y >= (int) u_minify(texture->height0, level) ||
        z < 0 || z >= (int) u_minify(texture->depth0, level)) {
-      return samp->sampler->border_color;
+      return sp_tex_tile_cache_border_color(samp->cache,
+                                            samp->sampler->border_color);
    }
    else {
       return get_texel_3d_no_border( samp, addr, x, y, z );
diff --git a/src/gallium/drivers/softpipe/sp_tex_tile_cache.c b/src/gallium/drivers/softpipe/sp_tex_tile_cache.c
index eb74f14..e817c0c 100644
--- a/src/gallium/drivers/softpipe/sp_tex_tile_cache.c
+++ b/src/gallium/drivers/softpipe/sp_tex_tile_cache.c
@@ -298,3 +298,23 @@ sp_find_cached_tile_tex(struct softpipe_tex_tile_cache *tc,
 
 
 
+/**
+ * Return the swizzled border color.
+ */
+const float *
+sp_tex_tile_cache_border_color(struct softpipe_tex_tile_cache *tc,
+                               const float border_color[4])
+{
+   float rgba01[6];
+
+   COPY_4V(rgba01, border_color);
+   rgba01[PIPE_SWIZZLE_ZERO] = 0.0f;
+   rgba01[PIPE_SWIZZLE_ONE] = 1.0f;
+
+   tc->swz_border_color[0] = rgba01[tc->swizzle_r];
+   tc->swz_border_color[1] = rgba01[tc->swizzle_g];
+   tc->swz_border_color[2] = rgba01[tc->swizzle_b];
+   tc->swz_border_color[3] = rgba01[tc->swizzle_a];
+
+   return tc->swz_border_color;
+}
diff --git a/src/gallium/drivers/softpipe/sp_tex_tile_cache.h b/src/gallium/drivers/softpipe/sp_tex_tile_cache.h
index 0794ffa..05f2513 100644
--- a/src/gallium/drivers/softpipe/sp_tex_tile_cache.h
+++ b/src/gallium/drivers/softpipe/sp_tex_tile_cache.h
@@ -90,6 +90,8 @@ struct softpipe_tex_tile_cache
    unsigned format;
 
    struct softpipe_tex_cached_tile *last_tile;  /**< most recently retrieved tile */
+
+   float swz_border_color[4]; /**< swizzled border color */
 };
 
 
@@ -154,7 +156,9 @@ sp_get_cached_tile_tex(struct softpipe_tex_tile_cache *tc,
 }
 
 
-
+const float *
+sp_tex_tile_cache_border_color(struct softpipe_tex_tile_cache *tc,
+                               const float border_color[4]);
 
 
 #endif /* SP_TEX_TILE_CACHE_H */




More information about the mesa-commit mailing list