diff options
| author | Marek Olšák <maraeo@gmail.com> | 2010-07-24 22:52:01 +0200 | 
|---|---|---|
| committer | Marek Olšák <maraeo@gmail.com> | 2010-07-25 10:25:21 +0200 | 
| commit | c92d232061c1aef6f5f56cbd815625778db2fd8c (patch) | |
| tree | abae5bb8dc9da1d8877cf920d99e8dbef59f99fc | |
| parent | d779a5d16ae6a17b3fc0c097f4eb477a80e54566 (diff) | |
r300g: do not use TXPITCH_EN for power-of-two textures from the DDX
We were using TXPITCH_EN for textures from the DDX since ever, for nothing.
| -rw-r--r-- | src/gallium/drivers/r300/r300_texture_desc.c | 20 | 
1 files changed, 14 insertions, 6 deletions
| diff --git a/src/gallium/drivers/r300/r300_texture_desc.c b/src/gallium/drivers/r300/r300_texture_desc.c index 18a2bd31fd..becaa59bea 100644 --- a/src/gallium/drivers/r300/r300_texture_desc.c +++ b/src/gallium/drivers/r300/r300_texture_desc.c @@ -210,6 +210,14 @@ static void r300_texture_3d_fix_mipmapping(struct r300_screen *screen,      }  } +/* Get a width in pixels from a stride in bytes. */ +static unsigned stride_to_width(enum pipe_format format, +                                unsigned stride_in_bytes) +{ +    return (stride_in_bytes / util_format_get_blocksize(format)) * +            util_format_get_blockwidth(format); +} +  static void r300_setup_miptree(struct r300_screen *screen,                                 struct r300_texture_desc *desc)  { @@ -246,9 +254,7 @@ static void r300_setup_miptree(struct r300_screen *screen,          desc->size_in_bytes = desc->offset_in_bytes[i] + size;          desc->layer_size_in_bytes[i] = layer_size;          desc->stride_in_bytes[i] = stride; -        desc->stride_in_pixels[i] = -                (stride / util_format_get_blocksize(base->format)) * -                util_format_get_blockwidth(base->format); +        desc->stride_in_pixels[i] = stride_to_width(desc->b.b.format, stride);          SCREEN_DBG(screen, DBG_TEXALLOC, "r300: Texture miptree: Level %d "                  "(%dx%dx%d px, pitch %d bytes) %d bytes total, macrotiled %s\n", @@ -261,9 +267,11 @@ static void r300_setup_miptree(struct r300_screen *screen,  static void r300_setup_flags(struct r300_texture_desc *desc)  {      desc->uses_stride_addressing = -            !util_is_power_of_two(desc->b.b.width0) || -            !util_is_power_of_two(desc->b.b.height0) || -            desc->stride_in_bytes_override; +        !util_is_power_of_two(desc->b.b.width0) || +        !util_is_power_of_two(desc->b.b.height0) || +        (desc->stride_in_bytes_override && +         stride_to_width(desc->b.b.format, +                         desc->stride_in_bytes_override) != desc->b.b.width0);  }  static void r300_setup_cbzb_flags(struct r300_screen *rscreen, | 
