}
static inline void
-_getMapInfo(ID3D10Buffer *pResource, D3D10_MAP MapType, UINT MapFlags, void * * ppData,
- void * & pMappedData, size_t & MappedSize) {
- pMappedData = 0;
- MappedSize = 0;
+_getMapDesc(ID3D10Buffer *pResource, D3D10_MAP MapType, UINT MapFlags, void * * ppData,
+ _MAP_DESC & MapDesc) {
+ MapDesc.pData = 0;
+ MapDesc.Size = 0;
if (MapType == D3D10_MAP_READ) {
return;
D3D10_BUFFER_DESC Desc;
pResource->GetDesc(&Desc);
- pMappedData = *ppData;
- MappedSize = Desc.ByteWidth;
+ MapDesc.pData = *ppData;
+ MapDesc.Size = Desc.ByteWidth;
}
static inline void
-_getMapInfo(ID3D10Texture1D *pResource, UINT Subresource, D3D10_MAP MapType, UINT MapFlags, void * * ppData,
- void * & pMappedData, size_t & MappedSize) {
- pMappedData = 0;
- MappedSize = 0;
+_getMapDesc(ID3D10Texture1D *pResource, UINT Subresource, D3D10_MAP MapType, UINT MapFlags, void * * ppData,
+ _MAP_DESC & MapDesc) {
+ MapDesc.pData = 0;
+ MapDesc.Size = 0;
if (MapType == D3D10_MAP_READ) {
return;
D3D10_TEXTURE1D_DESC Desc;
pResource->GetDesc(&Desc);
- pMappedData = *ppData;
- MappedSize = _calcSubresourceSize(&Desc, Subresource);
+ MapDesc.pData = *ppData;
+ MapDesc.Size = _calcSubresourceSize(&Desc, Subresource);
}
static inline void
-_getMapInfo(ID3D10Texture2D *pResource, UINT Subresource, D3D10_MAP MapType, UINT MapFlags, D3D10_MAPPED_TEXTURE2D * pMappedTex2D,
- void * & pMappedData, size_t & MappedSize) {
- pMappedData = 0;
- MappedSize = 0;
+_getMapDesc(ID3D10Texture2D *pResource, UINT Subresource, D3D10_MAP MapType, UINT MapFlags, D3D10_MAPPED_TEXTURE2D * pMappedTex2D,
+ _MAP_DESC & MapDesc) {
+ MapDesc.pData = 0;
+ MapDesc.Size = 0;
if (MapType == D3D10_MAP_READ) {
return;
D3D10_TEXTURE2D_DESC Desc;
pResource->GetDesc(&Desc);
- pMappedData = pMappedTex2D->pData;
- MappedSize = _calcSubresourceSize(&Desc, Subresource, pMappedTex2D->RowPitch);
+ MapDesc.pData = pMappedTex2D->pData;
+ MapDesc.Size = _calcSubresourceSize(&Desc, Subresource, pMappedTex2D->RowPitch);
}
static inline void
-_getMapInfo(ID3D10Texture3D *pResource, UINT Subresource, D3D10_MAP MapType, UINT MapFlags, D3D10_MAPPED_TEXTURE3D * pMappedTex3D,
- void * & pMappedData, size_t & MappedSize) {
- pMappedData = 0;
- MappedSize = 0;
+_getMapDesc(ID3D10Texture3D *pResource, UINT Subresource, D3D10_MAP MapType, UINT MapFlags, D3D10_MAPPED_TEXTURE3D * pMappedTex3D,
+ _MAP_DESC & MapDesc) {
+ MapDesc.pData = 0;
+ MapDesc.Size = 0;
if (MapType == D3D10_MAP_READ) {
return;
D3D10_TEXTURE3D_DESC Desc;
pResource->GetDesc(&Desc);
- pMappedData = pMappedTex3D->pData;
- MappedSize = _calcSubresourceSize(&Desc, Subresource, pMappedTex3D->RowPitch, pMappedTex3D->DepthPitch);
+ MapDesc.pData = pMappedTex3D->pData;
+ MapDesc.Size = _calcSubresourceSize(&Desc, Subresource, pMappedTex3D->RowPitch, pMappedTex3D->DepthPitch);
}
static inline void
-_getMapInfo(ID3D11DeviceContext* pContext, ID3D11Resource * pResource, UINT Subresource, D3D11_MAP MapType, UINT MapFlags, D3D11_MAPPED_SUBRESOURCE * pMappedResource,
- void * & pMappedData, size_t & MappedSize) {
- pMappedData = 0;
- MappedSize = 0;
+_getMapDesc(ID3D11DeviceContext* pContext, ID3D11Resource * pResource, UINT Subresource, D3D11_MAP MapType, UINT MapFlags, D3D11_MAPPED_SUBRESOURCE * pMappedResource,
+ _MAP_DESC & MapDesc) {
+ MapDesc.pData = 0;
+ MapDesc.Size = 0;
if (MapType == D3D11_MAP_READ) {
return;
}
- pMappedData = pMappedResource->pData;
- MappedSize = _calcSubresourceSize(pResource, Subresource, NULL, pMappedResource->RowPitch, pMappedResource->DepthPitch);
+ MapDesc.pData = pMappedResource->pData;
+ MapDesc.Size = _calcSubresourceSize(pResource, Subresource, NULL, pMappedResource->RowPitch, pMappedResource->DepthPitch);
}
#include "os.hpp"
+/**
+ * Information about active sub-resource maps
+ */
+struct _MAP_DESC
+{
+ VOID * pData;
+ size_t Size;
+
+ _MAP_DESC(void) :
+ pData(0),
+ Size(0)
+ {}
+};
+
+
static size_t
_calcDataSize(DXGI_FORMAT Format, UINT Width, UINT Height, UINT RowPitch, UINT Depth = 1, UINT DepthPitch = 0) {
if (Width == 0 || Height == 0 || Depth == 0) {
static inline void
-_getMapInfo(IDXGISurface *pResource, DXGI_MAPPED_RECT * pLockedRect, UINT MapFlags,
- void * & pMappedData, size_t & MappedSize) {
- pMappedData = 0;
- MappedSize = 0;
+_getMapDesc(IDXGISurface *pResource, DXGI_MAPPED_RECT * pLockedRect, UINT MapFlags,
+ _MAP_DESC & MapDesc) {
+ MapDesc.pData = 0;
+ MapDesc.Size = 0;
if (!(MapFlags & DXGI_MAP_WRITE)) {
return;
return;
}
- pMappedData = pLockedRect->pBits;
- MappedSize = _calcDataSize(Desc.Format, Desc.Width, Desc.Height, pLockedRect->Pitch);
+ MapDesc.pData = pLockedRect->pBits;
+ MapDesc.Size = _calcDataSize(Desc.Format, Desc.Width, Desc.Height, pLockedRect->Pitch);
}
print r' d3dretrace::processEvents();'
if method.name == 'Map':
- print ' VOID *_pbData = NULL;'
- print ' size_t _MappedSize = 0;'
- print ' _getMapInfo(_this, %s, _pbData, _MappedSize);' % ', '.join(method.argNames())
- print ' if (_MappedSize) {'
- print ' _maps[_this] = _pbData;'
+ print ' _MAP_DESC _MapDesc;'
+ print ' _getMapDesc(_this, %s, _MapDesc);' % ', '.join(method.argNames())
+ print ' size_t _MappedSize = _MapDesc.Size;'
+ print ' if (_MapDesc.Size) {'
+ print ' _maps[_this] = _MapDesc.pData;'
print ' } else {'
print ' return;'
print ' }'
# Add additional members to track maps
if interface.getMethodByName('Map') is not None:
variables += [
- ('VOID *', '_pMappedData', '0'),
- ('size_t', '_MappedSize', '0'),
+ ('_MAP_DESC', '_MapDesc', None),
]
return variables
def implementWrapperInterfaceMethodBody(self, interface, base, method):
if method.name == 'Unmap':
- print ' if (_MappedSize && _pMappedData) {'
- self.emit_memcpy('_pMappedData', '_pMappedData', '_MappedSize')
+ print ' if (_MapDesc.Size && _MapDesc.pData) {'
+ self.emit_memcpy('_MapDesc.pData', '_MapDesc.pData', '_MapDesc.Size')
print ' }'
DllTracer.implementWrapperInterfaceMethodBody(self, interface, base, method)
if method.name == 'Map':
# NOTE: recursive locks are explicitely forbidden
print ' if (SUCCEEDED(_result)) {'
- print ' _getMapInfo(_this, %s, _pMappedData, _MappedSize);' % ', '.join(method.argNames())
+ print ' _getMapDesc(_this, %s, _MapDesc);' % ', '.join(method.argNames())
print ' } else {'
- print ' _pMappedData = NULL;'
- print ' _MappedSize = 0;'
+ print ' _MapDesc.pData = NULL;'
+ print ' _MapDesc.Size = 0;'
print ' }'
# Private constructor
print '%s::%s(%s * pInstance) {' % (getWrapperInterfaceName(interface), getWrapperInterfaceName(interface), interface.name)
for type, name, value in self.enumWrapperInterfaceVariables(interface):
- print ' %s = %s;' % (name, value)
+ if value is not None:
+ print ' %s = %s;' % (name, value)
print '}'
print