r300g: set the minimum texture stride to 64 bytes on RS600, RS690, and RS740

I hope I've done it right. No way to test it here...
This commit is contained in:
Marek Olšák 2010-06-03 03:42:03 +02:00
parent 88008dfaa4
commit e0d72814be
1 changed files with 14 additions and 2 deletions

View File

@ -696,7 +696,7 @@ static boolean r300_texture_macro_switch(struct r300_texture *tex,
unsigned r300_texture_get_stride(struct r300_screen* screen,
struct r300_texture* tex, unsigned level)
{
unsigned tile_width, width;
unsigned tile_width, width, stride;
if (tex->stride_override)
return tex->stride_override;
@ -715,7 +715,19 @@ unsigned r300_texture_get_stride(struct r300_screen* screen,
tex->mip_macrotile[level]);
width = align(width, tile_width);
return util_format_get_stride(tex->b.b.format, width);
stride = util_format_get_stride(tex->b.b.format, width);
/* Some IGPs need a minimum stride of 64 bytes, hmm...
* This doesn't seem to apply to tiled textures, according to r300c. */
if (!tex->microtile && !tex->mip_macrotile[level] &&
(screen->caps.family == CHIP_FAMILY_RS600 ||
screen->caps.family == CHIP_FAMILY_RS690 ||
screen->caps.family == CHIP_FAMILY_RS740)) {
return stride < 64 ? 64 : stride;
}
/* The alignment to 32 bytes is sort of implied by the layout... */
return stride;
} else {
return align(util_format_get_stride(tex->b.b.format, width), 32);
}