diff options
author | Brian Paul <brian.paul@tungstengraphics.com> | 2006-03-29 15:21:01 +0000 |
---|---|---|
committer | Brian Paul <brian.paul@tungstengraphics.com> | 2006-03-29 15:21:01 +0000 |
commit | c19de0b7f619e0e3677fc9b19bd63a4809e8b715 (patch) | |
tree | effce7bd20a3ae868d16d68dac356bb6bfcae39a /src/mesa/drivers/dri/r300/r300_texmem.c | |
parent | e5b6eee15d4ca3feff8c2759595b1327afa584c3 (diff) |
FP textures and fixes (Ewald Snel)
Diffstat (limited to 'src/mesa/drivers/dri/r300/r300_texmem.c')
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_texmem.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_texmem.c b/src/mesa/drivers/dri/r300/r300_texmem.c index 90d8b2fd8e..a9f64b47c4 100644 --- a/src/mesa/drivers/dri/r300/r300_texmem.c +++ b/src/mesa/drivers/dri/r300/r300_texmem.c @@ -382,7 +382,17 @@ static void uploadSubImage( r300ContextPtr rmesa, r300TexObjPtr t, /* copy (x,y,width,height,data) */ memcpy( &tmp, &t->image[face][hwlevel], sizeof(tmp) ); - if (texImage->TexFormat->TexelBytes) { + if (texImage->TexFormat->TexelBytes > 4) { + const int log2TexelBytes = (3 + (texImage->TexFormat->TexelBytes >> 4)); + tex.format = RADEON_TXFORMAT_I8; /* any 1-byte texel format */ + tex.pitch = MAX2((texImage->Width * texImage->TexFormat->TexelBytes) / 64, 1); + tex.height = imageHeight; + tex.width = imageWidth << log2TexelBytes; + tex.offset += (tmp.x << log2TexelBytes) & ~1023; + tmp.x = tmp.x % (1024 >> log2TexelBytes); + tmp.width = tmp.width << log2TexelBytes; + } + else if (texImage->TexFormat->TexelBytes) { /* use multi-byte upload scheme */ tex.height = imageHeight; tex.width = imageWidth; |