diff options
author | Dave Airlie <[email protected]> | 2009-09-26 18:38:39 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2009-09-26 18:39:54 +1000 |
commit | 9bf85f6b95cb684d16b6035381b1f8a9c44f473f (patch) | |
tree | ccf1a1fa3294e1a8cc5f57bef53b6af876fc7f4f | |
parent | ec9c02187e698c26d7df3e408c1173acca9ccdd0 (diff) |
r300g: only pass complete texture state to hw setup function
No point passing things twice here, also allows more state
to be setup properly.
-rw-r--r-- | src/gallium/drivers/r300/r300_texture.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index e8078ea9f13..2ec07b453db 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -22,34 +22,32 @@ #include "r300_texture.h" -static void r300_setup_texture_state(struct r300_texture* tex, - unsigned width, - unsigned height, - unsigned levels) +static void r300_setup_texture_state(struct r300_texture* tex) { struct r300_texture_state* state = &tex->state; + struct pipe_texture *pt = &tex->tex; - state->format0 = R300_TX_WIDTH((width - 1) & 0x7ff) | - R300_TX_HEIGHT((height - 1) & 0x7ff) | - R300_TX_NUM_LEVELS(levels) | + state->format0 = R300_TX_WIDTH((pt->width[0] - 1) & 0x7ff) | + R300_TX_HEIGHT((pt->height[0] - 1) & 0x7ff) | + R300_TX_NUM_LEVELS(pt->last_level) | R300_TX_PITCH_EN; /* XXX */ - state->format1 = r300_translate_texformat(tex->tex.format); + state->format1 = r300_translate_texformat(pt->format); - state->format2 = (r300_texture_get_stride(tex, 0) / tex->tex.block.size) - 1; + state->format2 = (r300_texture_get_stride(tex, 0) / pt->block.size) - 1; /* Assume (somewhat foolishly) that oversized textures will * not be permitted by the state tracker. */ - if (width > 2048) { + if (pt->width[0] > 2048) { state->format2 |= R500_TXWIDTH_BIT11; } - if (height > 2048) { + if (pt->height[0] > 2048) { state->format2 |= R500_TXHEIGHT_BIT11; } debug_printf("r300: Set texture state (%dx%d, %d levels)\n", - width, height, levels); + pt->width[0], pt->height[0], pt->last_level); } /** @@ -120,8 +118,7 @@ static struct pipe_texture* r300_setup_miptree(tex); - r300_setup_texture_state(tex, template->width[0], template->height[0], - template->last_level); + r300_setup_texture_state(tex); tex->buffer = screen->buffer_create(screen, 1024, PIPE_BUFFER_USAGE_PIXEL, @@ -204,7 +201,7 @@ static struct pipe_texture* tex->stride_override = *stride; /* XXX */ - r300_setup_texture_state(tex, tex->tex.width[0], tex->tex.height[0], 0); + r300_setup_texture_state(tex); pipe_buffer_reference(&tex->buffer, buffer); |