X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=helpers%2Fd3d9size.hpp;h=04f5e593768bd45e4f3cd143c6207f48fedbf3b7;hb=HEAD;hp=0041e256103816c343e6ca9c7163f0b765b88ede;hpb=1f94577d8c4b1c1a2a1a8f3dceb0daac02dd72b7;p=apitrace diff --git a/helpers/d3d9size.hpp b/helpers/d3d9size.hpp index 0041e25..04f5e59 100644 --- a/helpers/d3d9size.hpp +++ b/helpers/d3d9size.hpp @@ -34,164 +34,24 @@ #define _D3D9SIZE_HPP_ -/* We purposedly don't include any D3D header, so that this header can be used - * with all D3D versions. */ - -#include - -#include "os.hpp" - - -static inline size_t -_vertexCount(D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount) -{ - switch (PrimitiveType) { - case D3DPT_POINTLIST: - return PrimitiveCount; - case D3DPT_LINELIST: - return PrimitiveCount*2; - case D3DPT_LINESTRIP: - return PrimitiveCount + 1; - case D3DPT_TRIANGLELIST: - return PrimitiveCount * 3; - case D3DPT_TRIANGLESTRIP: - return PrimitiveCount + 2; - case D3DPT_TRIANGLEFAN: - return PrimitiveCount + 1; - default: - os::log("apitrace: warning: %s: unknown D3DPRIMITIVETYPE %u\n", __FUNCTION__, PrimitiveType); - return 0; - } -} - - -static inline size_t -_vertexDataSize(D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, UINT VertexStride) { - return _vertexCount(PrimitiveType, PrimitiveCount) * VertexStride; -} +#include "d3dcommonsize.hpp" static inline size_t -_indexDataSize(D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, D3DFORMAT IndexDataFormat) { - UINT IndexStride; - switch (IndexDataFormat) { - case D3DFMT_INDEX16: - IndexStride = 2; - break; - case D3DFMT_INDEX32: - IndexStride = 4; - break; - default: - os::log("apitrace: warning: %s: unexpected index D3DFORMAT %u\n", __FUNCTION__, IndexDataFormat); - return 0; - } - return _vertexCount(PrimitiveType, PrimitiveCount) * IndexStride; -} - - -#if DIRECT3D_VERSION >= 0x0800 - -/* - * Return the number of tokens for a given shader. - */ -static inline size_t -_shaderSize(const DWORD *pFunction) -{ - DWORD dwLength = 0; - - while (true) { - DWORD dwToken = pFunction[dwLength++]; - - switch (dwToken & D3DSI_OPCODE_MASK) { - case D3DSIO_COMMENT: - dwLength += (dwToken & D3DSI_COMMENTSIZE_MASK) >> D3DSI_COMMENTSIZE_SHIFT; - break; - - case D3DSIO_END: - if (dwToken != D3DSIO_END) { - os::log("apitrace: warning: %s: malformed END token\n", __FUNCTION__); - } - return dwLength * sizeof *pFunction; - } - } -} - - -static size_t -_getLockSize(D3DFORMAT Format, UINT Width, UINT Height, INT RowPitch, UINT Depth = 1, INT SlicePitch = 0) { - if (Width == 0 || Height == 0 || Depth == 0) { - return 0; +_declCount(const D3DVERTEXELEMENT9 *pVertexElements) { + size_t count = 0; + if (pVertexElements) { + while (pVertexElements[count++].Stream != 0xff) + ; } - - if (RowPitch < 0) { - os::log("apitrace: warning: %s: negative row pitch %i\n", __FUNCTION__, RowPitch); - return 0; - } - - if (SlicePitch < 0) { - os::log("apitrace: warning: %s: negative slice pitch %i\n", __FUNCTION__, SlicePitch); - return 0; - } - - switch ((DWORD)Format) { - case D3DFMT_DXT1: - case D3DFMT_DXT2: - case D3DFMT_DXT3: - case D3DFMT_DXT4: - case D3DFMT_DXT5: - 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 = (Width + 1) / 2; - break; - - case D3DFMT_NV12: - return (Height + ((Height + 1) / 2)) * RowPitch; - - case D3DFMT_NULL: - return 0; - - default: - break; - } - - (void)Width; - - size_t size = Height * RowPitch; - - if (Depth > 1) { - size += (Depth - 1) * SlicePitch; - } - - return size; + return count; } - -#endif /* DIRECT3D_VERSION >= 0x0800 */ - - -#if DIRECT3D_VERSION >= 0x0900 - - static inline void -_getLockInfo(IDirect3DVertexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData, - void * & pLockedData, size_t & LockedSize) { +_getMapInfo(IDirect3DVertexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData, + void * & pLockedData, size_t & MappedSize) { pLockedData = *ppbData; - LockedSize = 0; + MappedSize = 0; if (SizeToLock == 0) { D3DVERTEXBUFFER_DESC Desc; @@ -199,18 +59,18 @@ _getLockInfo(IDirect3DVertexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock if (FAILED(hr)) { return; } - LockedSize = Desc.Size; + MappedSize = Desc.Size; } else { - LockedSize = SizeToLock; + MappedSize = SizeToLock; } } static inline void -_getLockInfo(IDirect3DIndexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData, - void * & pLockedData, size_t & LockedSize) { +_getMapInfo(IDirect3DIndexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData, + void * & pLockedData, size_t & MappedSize) { pLockedData = *ppbData; - LockedSize = 0; + MappedSize = 0; if (SizeToLock == 0) { D3DINDEXBUFFER_DESC Desc; @@ -218,18 +78,18 @@ _getLockInfo(IDirect3DIndexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, if (FAILED(hr)) { return; } - LockedSize = Desc.Size; + MappedSize = Desc.Size; } else { - LockedSize = SizeToLock; + MappedSize = SizeToLock; } } static inline void -_getLockInfo(IDirect3DSurface9 *pSurface, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, - void * & pLockedData, size_t & LockedSize) { +_getMapInfo(IDirect3DSurface9 *pSurface, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, + void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedRect->pBits; - LockedSize = 0; + MappedSize = 0; HRESULT hr; @@ -249,15 +109,15 @@ _getLockInfo(IDirect3DSurface9 *pSurface, const D3DLOCKED_RECT *pLockedRect, con Height = Desc.Height; } - LockedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); + MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); } static inline void -_getLockInfo(IDirect3DTexture9 *pTexture, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, - void * & pLockedData, size_t & LockedSize) { +_getMapInfo(IDirect3DTexture9 *pTexture, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, + void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedRect->pBits; - LockedSize = 0; + MappedSize = 0; HRESULT hr; @@ -277,15 +137,15 @@ _getLockInfo(IDirect3DTexture9 *pTexture, UINT Level, const D3DLOCKED_RECT *pLoc Height = Desc.Height; } - LockedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); + MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); } static inline void -_getLockInfo(IDirect3DCubeTexture9 *pTexture, D3DCUBEMAP_FACES FaceType, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, - void * & pLockedData, size_t & LockedSize) { +_getMapInfo(IDirect3DCubeTexture9 *pTexture, D3DCUBEMAP_FACES FaceType, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, + void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedRect->pBits; - LockedSize = 0; + MappedSize = 0; HRESULT hr; @@ -307,15 +167,15 @@ _getLockInfo(IDirect3DCubeTexture9 *pTexture, D3DCUBEMAP_FACES FaceType, UINT Le Height = Desc.Height; } - LockedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); + MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); } static inline void -_getLockInfo(IDirect3DVolume9 *pVolume, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox, - void * & pLockedData, size_t & LockedSize) { +_getMapInfo(IDirect3DVolume9 *pVolume, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox, + void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedVolume->pBits; - LockedSize = 0; + MappedSize = 0; HRESULT hr; @@ -338,15 +198,15 @@ _getLockInfo(IDirect3DVolume9 *pVolume, const D3DLOCKED_BOX *pLockedVolume, cons Depth = Desc.Depth; } - LockedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch); + MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch); } static inline void -_getLockInfo(IDirect3DVolumeTexture9 *pTexture, UINT Level, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox, - void * & pLockedData, size_t & LockedSize) { +_getMapInfo(IDirect3DVolumeTexture9 *pTexture, UINT Level, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox, + void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedVolume->pBits; - LockedSize = 0; + MappedSize = 0; HRESULT hr; @@ -369,11 +229,8 @@ _getLockInfo(IDirect3DVolumeTexture9 *pTexture, UINT Level, const D3DLOCKED_BOX Depth = Desc.Depth; } - LockedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch); + MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch); } -#endif /* DIRECT3D_VERSION >= 0x0900 */ - - #endif /* _D3D9SIZE_HPP_ */