[dx79] dxtn and mipmaps
Jason Edmeades
us at the-edmeades.demon.co.uk
Thu Sep 18 17:41:00 CDT 2003
This patch makes Mafia work a lot better as long as w-buffering is
turned off (Game setup, advanced option).
Changelog
DXTn format has odd mipmap levels in that the space allocated for small
levels needs a lot of padding
Jason
-------------- next part --------------
diff -u3 dlls/d3d8/dx78/device.c dlls/d3d8/device.c
--- dlls/d3d8/dx78/device.c 2003-09-18 22:52:51.000000000 +0100
+++ dlls/d3d8/device.c 2003-09-19 00:28:48.000000000 +0100
@@ -853,8 +853,14 @@
object->myDesc.Usage = 0;
object->myDesc.Pool = D3DPOOL_SYSTEMMEM;
object->bytesPerPixel = D3DFmtGetBpp(This, Format);
+ /* DXTn mipmaps use the same number of 'levels' down to eg. 8x1, but since
+ it is based around 4x4 pixel blocks it requires padding, so allocate enough
+ space! */
if (Format == D3DFMT_DXT1) {
- object->myDesc.Size = ((Width * object->bytesPerPixel) * Height) / 2; /* DXT1 is half byte per pixel */
+ object->myDesc.Size = ((max(Width,4) * object->bytesPerPixel) * max(Height,4)) / 2; /* DXT1 is half byte per pixel */
+ } else if (Format == D3DFMT_DXT2 || Format == D3DFMT_DXT3 ||
+ Format == D3DFMT_DXT4 || Format == D3DFMT_DXT5) {
+ object->myDesc.Size = ((max(Width,4) * object->bytesPerPixel) * max(Height,4));
} else {
object->myDesc.Size = (Width * object->bytesPerPixel) * Height;
}
More information about the wine-patches
mailing list