From fa24288b9a0c605abe08aa12a397e2d3f5276af3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Wed, 2 May 2012 13:13:48 +0100 Subject: [PATCH] Fix compressed texture size computation. --- dispatch/d3d9imports.hpp | 8 ++++---- helpers/d3dsize.hpp | 17 ++++++++++++----- specs/d3d9types.py | 4 ++-- wrappers/d3d9trace.py | 2 +- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/dispatch/d3d9imports.hpp b/dispatch/d3d9imports.hpp index 0d64f75..1ecf293 100644 --- a/dispatch/d3d9imports.hpp +++ b/dispatch/d3d9imports.hpp @@ -42,12 +42,12 @@ #define D3DFMT_A2B10G10R10_XR_BIAS 119 #endif -#ifndef D3DFMT_ATI1 -#define D3DFMT_ATI1 ((D3DFORMAT)MAKEFOURCC('A','T','I','1')) +#ifndef D3DFMT_ATI1N +#define D3DFMT_ATI1N ((D3DFORMAT)MAKEFOURCC('A','T','I','1')) #endif -#ifndef D3DFMT_ATI2 -#define D3DFMT_ATI2 ((D3DFORMAT)MAKEFOURCC('A','T','I','2')) +#ifndef D3DFMT_ATI2N +#define D3DFMT_ATI2N ((D3DFORMAT)MAKEFOURCC('A','T','I','2')) #endif #ifndef D3DFMT_AYUV diff --git a/helpers/d3dsize.hpp b/helpers/d3dsize.hpp index 31fcd74..9f66297 100644 --- a/helpers/d3dsize.hpp +++ b/helpers/d3dsize.hpp @@ -139,17 +139,24 @@ _getLockSize(D3DFORMAT Format, UINT Width, UINT Height, INT RowPitch, UINT Depth case D3DFMT_DXT3: case D3DFMT_DXT4: case D3DFMT_DXT5: - case D3DFMT_ATI1: - case D3DFMT_ATI2: - Width /= 4; - Height /= 4; + Width = (Width + 3) / 4; + Height = (Height + 3) / 4; + break; + + case D3DFMT_ATI1N: + case D3DFMT_ATI2N: + /* + * Because these are unsupported formats, RowPitch is not set to the + * number of bytes between row of blocks, but instead in such way that + * Height * RowPitch will match the expected size. + */ break; case D3DFMT_UYVY: case D3DFMT_R8G8_B8G8: case D3DFMT_YUY2: case D3DFMT_G8R8_G8B8: - Width /= 2; + Width = (Width + 1) / 2; break; case D3DFMT_NV12: diff --git a/specs/d3d9types.py b/specs/d3d9types.py index 6622e73..47bed86 100644 --- a/specs/d3d9types.py +++ b/specs/d3d9types.py @@ -729,8 +729,8 @@ D3DFORMAT = Enum("D3DFORMAT", [ "D3DFMT_BINARYBUFFER", # Unofficial formats - "D3DFMT_ATI1", - "D3DFMT_ATI2", + "D3DFMT_ATI1N", + "D3DFMT_ATI2N", "D3DFMT_AYUV", "D3DFMT_DF16", "D3DFMT_DF24", diff --git a/wrappers/d3d9trace.py b/wrappers/d3d9trace.py index 9185f03..d3f2e02 100644 --- a/wrappers/d3d9trace.py +++ b/wrappers/d3d9trace.py @@ -53,7 +53,7 @@ class D3D9Tracer(DllTracer): def implementWrapperInterfaceMethodBody(self, interface, base, method): if method.name in ('Unlock', 'UnlockRect', 'UnlockBox'): - print ' if (m_pbData) {' + print ' if (_LockedSize && m_pbData) {' self.emit_memcpy('(LPBYTE)m_pbData', '(LPBYTE)m_pbData', '_LockedSize') print ' }' -- 2.43.0