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.
This commit is contained in:
Brian Paul
2010-09-27 15:05:29 -06:00
parent 3446af0179
commit de2dfce0d9
3 changed files with 29 additions and 3 deletions
+4 -2
View File
@@ -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 );
@@ -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;
}
@@ -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 */