X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=helpers%2Fd3d9size.hpp;h=04f5e593768bd45e4f3cd143c6207f48fedbf3b7;hb=cccdffb093041c7dd507e3d523103a0c623c6ddd;hp=69b2222c067effa030b81d598677a1b7f2860bb1;hpb=ebb75cb923eafe61a1a6dc585a5d7384ee0083c7;p=apitrace diff --git a/helpers/d3d9size.hpp b/helpers/d3d9size.hpp index 69b2222..04f5e59 100644 --- a/helpers/d3d9size.hpp +++ b/helpers/d3d9size.hpp @@ -34,159 +34,19 @@ #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 _getMapInfo(IDirect3DVertexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData, void * & pLockedData, size_t & MappedSize) { @@ -373,7 +233,4 @@ _getMapInfo(IDirect3DVolumeTexture9 *pTexture, UINT Level, const D3DLOCKED_BOX * } -#endif /* DIRECT3D_VERSION >= 0x0900 */ - - #endif /* _D3D9SIZE_HPP_ */