summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/r300/r300_texstate.c
diff options
context:
space:
mode:
authorDave Airlie <airliedfreedesktop.org>2005-12-04 00:37:35 +0000
committerDave Airlie <airliedfreedesktop.org>2005-12-04 00:37:35 +0000
commitf93feb7aedc194f3fa04fa2216b2a215548b2e4e (patch)
tree2034e1249342b8f403d4d3b2b15e3f4331242827 /src/mesa/drivers/dri/r300/r300_texstate.c
parenteb06704a7c0027136d5ced74d67a83ddaf1f82aa (diff)
Fix r300 rectangular texture upload and swtcl coordinate fixing same as radeon
sw tcl
Diffstat (limited to 'src/mesa/drivers/dri/r300/r300_texstate.c')
-rw-r--r--src/mesa/drivers/dri/r300/r300_texstate.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_texstate.c b/src/mesa/drivers/dri/r300/r300_texstate.c
index c06fadaa5e..9cbef9b800 100644
--- a/src/mesa/drivers/dri/r300/r300_texstate.c
+++ b/src/mesa/drivers/dri/r300/r300_texstate.c
@@ -243,6 +243,7 @@ static void r300SetTexImages(r300ContextPtr rmesa,
} else if (tObj->Target == GL_TEXTURE_RECTANGLE_NV) {
size = ((texImage->Width * texelBytes + 63) & ~63) * texImage->Height;
+ blitWidth = 64 / texelBytes;
} else {
int w = (texImage->Width * texelBytes + 31) & ~31;
size = w * texImage->Height * texImage->Depth;
@@ -363,8 +364,7 @@ static void r300SetTexImages(r300ContextPtr rmesa,
}
t->size = (((tObj->Image[0][t->base.firstLevel]->Width - 1) << R300_TX_WIDTHMASK_SHIFT)
- |((tObj->Image[0][t->base.firstLevel]->Height - 1) << R300_TX_HEIGHTMASK_SHIFT)
- |((log2Width>log2Height)?log2Width:log2Height)<<R300_TX_SIZE_SHIFT);
+ |((tObj->Image[0][t->base.firstLevel]->Height - 1) << R300_TX_HEIGHTMASK_SHIFT));
/* Only need to round to nearest 32 for textures, but the blitter
* requires 64-byte aligned pitches, and we may/may not need the
@@ -373,11 +373,19 @@ static void r300SetTexImages(r300ContextPtr rmesa,
if (baseImage->IsCompressed)
t->pitch =
(tObj->Image[0][t->base.firstLevel]->Width + 63) & ~(63);
- else
+ else if (tObj->Target == GL_TEXTURE_RECTANGLE_NV) {
+ unsigned int align = blitWidth - 1;
+ t->pitch = ((tObj->Image[0][t->base.firstLevel]->Width *
+ texelBytes) + 63) & ~(63);
+ t->size |= R300_TX_SIZE_TXPITCH_EN;
+ t->pitch_reg = (((tObj->Image[0][t->base.firstLevel]->Width) + align) & ~align) - 1;
+ }
+ else {
+ t->size |= ((log2Width>log2Height)?log2Width:log2Height)<<R300_TX_SIZE_SHIFT;
t->pitch =
((tObj->Image[0][t->base.firstLevel]->Width *
texelBytes) + 63) & ~(63);
- t->pitch -= 32;
+ }
t->dirty_state = TEX_ALL;