#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
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:
"D3DFMT_BINARYBUFFER",
# Unofficial formats
- "D3DFMT_ATI1",
- "D3DFMT_ATI2",
+ "D3DFMT_ATI1N",
+ "D3DFMT_ATI2N",
"D3DFMT_AYUV",
"D3DFMT_DF16",
"D3DFMT_DF24",
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 ' }'