diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gallium/drivers/softpipe/sp_tex_sample.c | 6 | ||||
| -rw-r--r-- | src/gallium/drivers/softpipe/sp_tex_tile_cache.c | 20 | ||||
| -rw-r--r-- | 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 96ccf1da98..088e48f81f 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 eb74f14a7b..e817c0c8cf 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 0794ffa0c5..05f25133da 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 */ | 
