X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=helpers%2Fd3dsize.hpp;h=1697dd6364153b5cfabc16bb70556091502908a9;hb=a0e97860386786fcdb106471a3908b4ba66242e6;hp=ef3bdff85e69f6f5b1e9ae6c260aa85652bec186;hpb=74ec9ff836f6550ab9d0097cce50eefdeb223381;p=apitrace diff --git a/helpers/d3dsize.hpp b/helpers/d3dsize.hpp index ef3bdff..1697dd6 100644 --- a/helpers/d3dsize.hpp +++ b/helpers/d3dsize.hpp @@ -116,7 +116,69 @@ _shaderSize(const DWORD *pFunction) } } + +static size_t +_formatSize(D3DFORMAT Format, UINT Width, UINT Height, INT Pitch) { + switch ((DWORD)Format) { + case D3DFMT_DXT1: + case D3DFMT_DXT2: + case D3DFMT_DXT3: + case D3DFMT_DXT4: + case D3DFMT_DXT5: + case D3DFMT_ATI1: + case D3DFMT_ATI2: + Width /= 4; + Height /= 4; + break; + + case D3DFMT_UYVY: + case D3DFMT_R8G8_B8G8: + case D3DFMT_YUY2: + case D3DFMT_G8R8_G8B8: + Width /= 2; + break; + + case D3DFMT_NV12: + return (Height + ((Height + 1) / 2)) * Pitch; + + case D3DFMT_NULL: + return 0; + + default: + break; + } + + (void)Width; + + return Height * Pitch; +} + + #endif /* DIRECT3D_VERSION >= 0x0800 */ +#if DIRECT3D_VERSION >= 0x0900 + +static inline size_t +_lockSize(IDirect3DSurface9 *pSurface, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect) { + D3DSURFACE_DESC Desc; + pSurface->GetDesc(&Desc); + + UINT Width; + UINT Height; + if (pRect) { + Width = pRect->right - pRect->left; + Height = pRect->bottom - pRect->top; + } else { + Width = Desc.Width; + Height = Desc.Height; + } + + return _formatSize(Desc.Format, Width, Height, pLockedRect->Pitch); +} + + +#endif /* DIRECT3D_VERSION >= 0x0900 */ + + #endif /* _D3D_SIZE_HPP_ */