Commit ea228635 by Geoff Lang

Use SafeRelease and SafeDelete to make sure released objects are NULL and will…

Use SafeRelease and SafeDelete to make sure released objects are NULL and will cause proper errors if referenced again. TRAC #23617 Signed-off-by: Nicolas Capens Signed-off-by: Shannon Woods Author: Geoff Lang
parent 7dca1866
...@@ -42,6 +42,20 @@ void SafeRelease(T& resource) ...@@ -42,6 +42,20 @@ void SafeRelease(T& resource)
} }
} }
template <typename T>
void SafeDelete(T*& resource)
{
delete resource;
resource = NULL;
}
template <typename T>
void SafeDeleteArray(T*& resource)
{
delete[] resource;
resource = NULL;
}
#if defined(_MSC_VER) #if defined(_MSC_VER)
#define snprintf _snprintf #define snprintf _snprintf
#endif #endif
......
#define MAJOR_VERSION 2 #define MAJOR_VERSION 2
#define MINOR_VERSION 0 #define MINOR_VERSION 0
#define BUILD_VERSION 0 #define BUILD_VERSION 0
#define BUILD_REVISION 2000 #define BUILD_REVISION 2001
#define STRINGIFY(x) #x #define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x) #define MACRO_STRINGIFY(x) STRINGIFY(x)
......
...@@ -56,16 +56,13 @@ Blit9::Blit9(rx::Renderer9 *renderer) ...@@ -56,16 +56,13 @@ Blit9::Blit9(rx::Renderer9 *renderer)
Blit9::~Blit9() Blit9::~Blit9()
{ {
if (mSavedStateBlock) mSavedStateBlock->Release(); SafeRelease(mSavedStateBlock);
if (mQuadVertexBuffer) mQuadVertexBuffer->Release(); SafeRelease(mQuadVertexBuffer);
if (mQuadVertexDeclaration) mQuadVertexDeclaration->Release(); SafeRelease(mQuadVertexDeclaration);
for (int i = 0; i < SHADER_COUNT; i++) for (int i = 0; i < SHADER_COUNT; i++)
{ {
if (mCompiledShaders[i]) SafeRelease(mCompiledShaders[i]);
{
mCompiledShaders[i]->Release();
}
} }
} }
...@@ -205,7 +202,7 @@ bool Blit9::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest) ...@@ -205,7 +202,7 @@ bool Blit9::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
render(); render();
texture->Release(); SafeRelease(texture);
restoreState(); restoreState();
...@@ -241,10 +238,10 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de ...@@ -241,10 +238,10 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de
if (destSurface) if (destSurface)
{ {
result = copy(source, sourceRect, destFormat, xoffset, yoffset, destSurface); result = copy(source, sourceRect, destFormat, xoffset, yoffset, destSurface);
destSurface->Release(); SafeRelease(destSurface);
} }
source->Release(); SafeRelease(source);
return result; return result;
} }
...@@ -277,10 +274,10 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de ...@@ -277,10 +274,10 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de
if (destSurface) if (destSurface)
{ {
result = copy(source, sourceRect, destFormat, xoffset, yoffset, destSurface); result = copy(source, sourceRect, destFormat, xoffset, yoffset, destSurface);
destSurface->Release(); SafeRelease(destSurface);
} }
source->Release(); SafeRelease(source);
return result; return result;
} }
...@@ -340,7 +337,7 @@ bool Blit9::formatConvert(IDirect3DSurface9 *source, const RECT &sourceRect, GLe ...@@ -340,7 +337,7 @@ bool Blit9::formatConvert(IDirect3DSurface9 *source, const RECT &sourceRect, GLe
render(); render();
} }
texture->Release(); SafeRelease(texture);
restoreState(); restoreState();
...@@ -438,19 +435,19 @@ IDirect3DTexture9 *Blit9::copySurfaceToTexture(IDirect3DSurface9 *surface, const ...@@ -438,19 +435,19 @@ IDirect3DTexture9 *Blit9::copySurfaceToTexture(IDirect3DSurface9 *surface, const
if (FAILED(result)) if (FAILED(result))
{ {
ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY); ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
texture->Release(); SafeRelease(texture);
return gl::error(GL_OUT_OF_MEMORY, (IDirect3DTexture9*)NULL); return gl::error(GL_OUT_OF_MEMORY, (IDirect3DTexture9*)NULL);
} }
mRenderer->endScene(); mRenderer->endScene();
result = device->StretchRect(surface, &sourceRect, textureSurface, NULL, D3DTEXF_NONE); result = device->StretchRect(surface, &sourceRect, textureSurface, NULL, D3DTEXF_NONE);
textureSurface->Release(); SafeRelease(textureSurface);
if (FAILED(result)) if (FAILED(result))
{ {
ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY); ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
texture->Release(); SafeRelease(texture);
return gl::error(GL_OUT_OF_MEMORY, (IDirect3DTexture9*)NULL); return gl::error(GL_OUT_OF_MEMORY, (IDirect3DTexture9*)NULL);
} }
...@@ -572,18 +569,10 @@ void Blit9::restoreState() ...@@ -572,18 +569,10 @@ void Blit9::restoreState()
IDirect3DDevice9 *device = mRenderer->getDevice(); IDirect3DDevice9 *device = mRenderer->getDevice();
device->SetDepthStencilSurface(mSavedDepthStencil); device->SetDepthStencilSurface(mSavedDepthStencil);
if (mSavedDepthStencil != NULL) SafeRelease(mSavedDepthStencil);
{
mSavedDepthStencil->Release();
mSavedDepthStencil = NULL;
}
device->SetRenderTarget(0, mSavedRenderTarget); device->SetRenderTarget(0, mSavedRenderTarget);
if (mSavedRenderTarget != NULL) SafeRelease(mSavedRenderTarget);
{
mSavedRenderTarget->Release();
mSavedRenderTarget = NULL;
}
ASSERT(mSavedStateBlock != NULL); ASSERT(mSavedStateBlock != NULL);
......
...@@ -43,7 +43,7 @@ BufferStorage11::~BufferStorage11() ...@@ -43,7 +43,7 @@ BufferStorage11::~BufferStorage11()
for (DirectBufferList::iterator it = mDirectBuffers.begin(); it != mDirectBuffers.end(); it++) for (DirectBufferList::iterator it = mDirectBuffers.begin(); it != mDirectBuffers.end(); it++)
{ {
delete *it; SafeDelete(*it);
} }
} }
......
...@@ -22,7 +22,7 @@ BufferStorage9::BufferStorage9() ...@@ -22,7 +22,7 @@ BufferStorage9::BufferStorage9()
BufferStorage9::~BufferStorage9() BufferStorage9::~BufferStorage9()
{ {
delete[] mMemory; SafeDeleteArray(mMemory);
} }
BufferStorage9 *BufferStorage9::makeBufferStorage9(BufferStorage *bufferStorage) BufferStorage9 *BufferStorage9::makeBufferStorage9(BufferStorage *bufferStorage)
......
...@@ -22,11 +22,7 @@ Fence11::Fence11(rx::Renderer11 *renderer) ...@@ -22,11 +22,7 @@ Fence11::Fence11(rx::Renderer11 *renderer)
Fence11::~Fence11() Fence11::~Fence11()
{ {
if (mQuery) SafeRelease(mQuery);
{
mQuery->Release();
mQuery = NULL;
}
} }
bool Fence11::isSet() const bool Fence11::isSet() const
......
...@@ -23,11 +23,7 @@ Fence9::Fence9(rx::Renderer9 *renderer) ...@@ -23,11 +23,7 @@ Fence9::Fence9(rx::Renderer9 *renderer)
Fence9::~Fence9() Fence9::~Fence9()
{ {
if (mQuery) SafeRelease(mQuery);
{
mRenderer->freeEventQuery(mQuery);
mQuery = NULL;
}
} }
bool Fence9::isSet() const bool Fence9::isSet() const
......
...@@ -31,10 +31,7 @@ Image11::Image11() ...@@ -31,10 +31,7 @@ Image11::Image11()
Image11::~Image11() Image11::~Image11()
{ {
if (mStagingTexture) SafeRelease(mStagingTexture);
{
mStagingTexture->Release();
}
} }
Image11 *Image11::makeImage11(Image *img) Image11 *Image11::makeImage11(Image *img)
...@@ -132,12 +129,8 @@ bool Image11::redefine(Renderer *renderer, GLenum target, GLint internalformat, ...@@ -132,12 +129,8 @@ bool Image11::redefine(Renderer *renderer, GLenum target, GLint internalformat,
mActualFormat = d3d11_gl::GetInternalFormat(mDXGIFormat, clientVersion); mActualFormat = d3d11_gl::GetInternalFormat(mDXGIFormat, clientVersion);
mRenderable = gl_d3d11::GetRTVFormat(internalformat, clientVersion) != DXGI_FORMAT_UNKNOWN; mRenderable = gl_d3d11::GetRTVFormat(internalformat, clientVersion) != DXGI_FORMAT_UNKNOWN;
if (mStagingTexture) SafeRelease(mStagingTexture);
{
mStagingTexture->Release();
mStagingTexture = NULL;
}
return true; return true;
} }
...@@ -275,8 +268,8 @@ void Image11::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y ...@@ -275,8 +268,8 @@ void Image11::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y
deviceContext->CopySubresourceRegion(mStagingTexture, 0, xoffset, yoffset, zoffset, srcTex, subresourceIndex, &srcBox); deviceContext->CopySubresourceRegion(mStagingTexture, 0, xoffset, yoffset, zoffset, srcTex, subresourceIndex, &srcBox);
srcTex->Release(); SafeRelease(srcTex);
colorBufferTexture->Release(); SafeRelease(colorBufferTexture);
} }
} }
else else
......
...@@ -34,10 +34,7 @@ Image9::Image9() ...@@ -34,10 +34,7 @@ Image9::Image9()
Image9::~Image9() Image9::~Image9()
{ {
if (mSurface) SafeRelease(mSurface);
{
mSurface->Release();
}
} }
void Image9::generateMip(IDirect3DSurface9 *destSurface, IDirect3DSurface9 *sourceSurface) void Image9::generateMip(IDirect3DSurface9 *destSurface, IDirect3DSurface9 *sourceSurface)
...@@ -153,11 +150,7 @@ bool Image9::redefine(rx::Renderer *renderer, GLenum target, GLint internalforma ...@@ -153,11 +150,7 @@ bool Image9::redefine(rx::Renderer *renderer, GLenum target, GLint internalforma
mActualFormat = d3d9_gl::GetInternalFormat(mD3DFormat); mActualFormat = d3d9_gl::GetInternalFormat(mD3DFormat);
mRenderable = gl_d3d9::GetRenderFormat(internalformat, mRenderer) != D3DFMT_UNKNOWN; mRenderable = gl_d3d9::GetRenderFormat(internalformat, mRenderer) != D3DFMT_UNKNOWN;
if (mSurface) SafeRelease(mSurface);
{
mSurface->Release();
mSurface = NULL;
}
return true; return true;
} }
...@@ -197,7 +190,7 @@ void Image9::createSurface() ...@@ -197,7 +190,7 @@ void Image9::createSurface()
} }
newTexture->GetSurfaceLevel(levelToFetch, &newSurface); newTexture->GetSurfaceLevel(levelToFetch, &newSurface);
newTexture->Release(); SafeRelease(newTexture);
} }
mSurface = newSurface; mSurface = newSurface;
...@@ -270,7 +263,7 @@ void Image9::setManagedSurface(IDirect3DSurface9 *surface) ...@@ -270,7 +263,7 @@ void Image9::setManagedSurface(IDirect3DSurface9 *surface)
if (mSurface) if (mSurface)
{ {
copyLockableSurfaces(surface, mSurface); copyLockableSurfaces(surface, mSurface);
mSurface->Release(); SafeRelease(mSurface);
} }
mSurface = surface; mSurface = surface;
...@@ -338,7 +331,7 @@ bool Image9::updateSurface(IDirect3DSurface9 *destSurface, GLint xoffset, GLint ...@@ -338,7 +331,7 @@ bool Image9::updateSurface(IDirect3DSurface9 *destSurface, GLint xoffset, GLint
copyLockableSurfaces(surf, sourceSurface); copyLockableSurfaces(surf, sourceSurface);
result = device->UpdateSurface(surf, &rect, destSurface, &point); result = device->UpdateSurface(surf, &rect, destSurface, &point);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
surf->Release(); SafeRelease(surf);
} }
} }
else else
...@@ -349,7 +342,7 @@ bool Image9::updateSurface(IDirect3DSurface9 *destSurface, GLint xoffset, GLint ...@@ -349,7 +342,7 @@ bool Image9::updateSurface(IDirect3DSurface9 *destSurface, GLint xoffset, GLint
} }
} }
destSurface->Release(); SafeRelease(destSurface);
return true; return true;
} }
...@@ -461,7 +454,7 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -461,7 +454,7 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
if (FAILED(result)) if (FAILED(result))
{ {
ERR("Could not create matching destination surface."); ERR("Could not create matching destination surface.");
surface->Release(); SafeRelease(surface);
return gl::error(GL_OUT_OF_MEMORY); return gl::error(GL_OUT_OF_MEMORY);
} }
...@@ -470,8 +463,8 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -470,8 +463,8 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
if (FAILED(result)) if (FAILED(result))
{ {
ERR("GetRenderTargetData unexpectedly failed."); ERR("GetRenderTargetData unexpectedly failed.");
renderTargetData->Release(); SafeRelease(renderTargetData);
surface->Release(); SafeRelease(surface);
return gl::error(GL_OUT_OF_MEMORY); return gl::error(GL_OUT_OF_MEMORY);
} }
...@@ -484,8 +477,8 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -484,8 +477,8 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
if (FAILED(result)) if (FAILED(result))
{ {
ERR("Failed to lock the source surface (rectangle might be invalid)."); ERR("Failed to lock the source surface (rectangle might be invalid).");
renderTargetData->Release(); SafeRelease(renderTargetData);
surface->Release(); SafeRelease(surface);
return gl::error(GL_OUT_OF_MEMORY); return gl::error(GL_OUT_OF_MEMORY);
} }
...@@ -496,8 +489,8 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -496,8 +489,8 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
{ {
ERR("Failed to lock the destination surface (rectangle might be invalid)."); ERR("Failed to lock the destination surface (rectangle might be invalid).");
renderTargetData->UnlockRect(); renderTargetData->UnlockRect();
renderTargetData->Release(); SafeRelease(renderTargetData);
surface->Release(); SafeRelease(surface);
return gl::error(GL_OUT_OF_MEMORY); return gl::error(GL_OUT_OF_MEMORY);
} }
...@@ -671,8 +664,8 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -671,8 +664,8 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
unlock(); unlock();
renderTargetData->UnlockRect(); renderTargetData->UnlockRect();
renderTargetData->Release(); SafeRelease(renderTargetData);
surface->Release(); SafeRelease(surface);
mDirty = true; mDirty = true;
} }
......
...@@ -22,20 +22,12 @@ IndexBuffer11::IndexBuffer11(Renderer11 *const renderer) : mRenderer(renderer) ...@@ -22,20 +22,12 @@ IndexBuffer11::IndexBuffer11(Renderer11 *const renderer) : mRenderer(renderer)
IndexBuffer11::~IndexBuffer11() IndexBuffer11::~IndexBuffer11()
{ {
if (mBuffer) SafeRelease(mBuffer);
{
mBuffer->Release();
mBuffer = NULL;
}
} }
bool IndexBuffer11::initialize(unsigned int bufferSize, GLenum indexType, bool dynamic) bool IndexBuffer11::initialize(unsigned int bufferSize, GLenum indexType, bool dynamic)
{ {
if (mBuffer) SafeRelease(mBuffer);
{
mBuffer->Release();
mBuffer = NULL;
}
updateSerial(); updateSerial();
......
...@@ -23,20 +23,12 @@ IndexBuffer9::IndexBuffer9(Renderer9 *const renderer) : mRenderer(renderer) ...@@ -23,20 +23,12 @@ IndexBuffer9::IndexBuffer9(Renderer9 *const renderer) : mRenderer(renderer)
IndexBuffer9::~IndexBuffer9() IndexBuffer9::~IndexBuffer9()
{ {
if (mIndexBuffer) SafeRelease(mIndexBuffer);
{
mIndexBuffer->Release();
mIndexBuffer = NULL;
}
} }
bool IndexBuffer9::initialize(unsigned int bufferSize, GLenum indexType, bool dynamic) bool IndexBuffer9::initialize(unsigned int bufferSize, GLenum indexType, bool dynamic)
{ {
if (mIndexBuffer) SafeRelease(mIndexBuffer);
{
mIndexBuffer->Release();
mIndexBuffer = NULL;
}
updateSerial(); updateSerial();
......
...@@ -53,7 +53,7 @@ void InputLayoutCache::clear() ...@@ -53,7 +53,7 @@ void InputLayoutCache::clear()
{ {
for (InputLayoutMap::iterator i = mInputLayoutMap.begin(); i != mInputLayoutMap.end(); i++) for (InputLayoutMap::iterator i = mInputLayoutMap.begin(); i != mInputLayoutMap.end(); i++)
{ {
i->second.inputLayout->Release(); SafeRelease(i->second.inputLayout);
} }
mInputLayoutMap.clear(); mInputLayoutMap.clear();
markDirty(); markDirty();
...@@ -156,7 +156,7 @@ GLenum InputLayoutCache::applyVertexBuffers(TranslatedAttribute attributes[gl::M ...@@ -156,7 +156,7 @@ GLenum InputLayoutCache::applyVertexBuffers(TranslatedAttribute attributes[gl::M
leastRecentlyUsed = i; leastRecentlyUsed = i;
} }
} }
leastRecentlyUsed->second.inputLayout->Release(); SafeRelease(leastRecentlyUsed->second.inputLayout);
mInputLayoutMap.erase(leastRecentlyUsed); mInputLayoutMap.erase(leastRecentlyUsed);
} }
......
...@@ -22,11 +22,7 @@ Query11::Query11(rx::Renderer11 *renderer, GLenum type) : QueryImpl(type) ...@@ -22,11 +22,7 @@ Query11::Query11(rx::Renderer11 *renderer, GLenum type) : QueryImpl(type)
Query11::~Query11() Query11::~Query11()
{ {
if (mQuery) SafeRelease(mQuery);
{
mQuery->Release();
mQuery = NULL;
}
} }
void Query11::begin() void Query11::begin()
......
...@@ -24,11 +24,7 @@ Query9::Query9(rx::Renderer9 *renderer, GLenum type) : QueryImpl(type) ...@@ -24,11 +24,7 @@ Query9::Query9(rx::Renderer9 *renderer, GLenum type) : QueryImpl(type)
Query9::~Query9() Query9::~Query9()
{ {
if (mQuery) SafeRelease(mQuery);
{
mQuery->Release();
mQuery = NULL;
}
} }
void Query9::begin() void Query9::begin()
......
...@@ -17,6 +17,16 @@ ...@@ -17,6 +17,16 @@
namespace rx namespace rx
{ {
template <typename mapType>
static void ClearStateMap(mapType &map)
{
for (mapType::iterator i = map.begin(); i != map.end(); i++)
{
SafeRelease(i->second.first);
}
map.clear();
}
// MSDN's documentation of ID3D11Device::CreateBlendState, ID3D11Device::CreateRasterizerState, // MSDN's documentation of ID3D11Device::CreateBlendState, ID3D11Device::CreateRasterizerState,
// ID3D11Device::CreateDepthStencilState and ID3D11Device::CreateSamplerState claims the maximum // ID3D11Device::CreateDepthStencilState and ID3D11Device::CreateSamplerState claims the maximum
// number of unique states of each type an application can create is 4096 // number of unique states of each type an application can create is 4096
...@@ -46,29 +56,10 @@ void RenderStateCache::initialize(ID3D11Device *device) ...@@ -46,29 +56,10 @@ void RenderStateCache::initialize(ID3D11Device *device)
void RenderStateCache::clear() void RenderStateCache::clear()
{ {
for (BlendStateMap::iterator i = mBlendStateCache.begin(); i != mBlendStateCache.end(); i++) ClearStateMap(mBlendStateCache);
{ ClearStateMap(mRasterizerStateCache);
i->second.first->Release(); ClearStateMap(mDepthStencilStateCache);
} ClearStateMap(mSamplerStateCache);
mBlendStateCache.clear();
for (RasterizerStateMap::iterator i = mRasterizerStateCache.begin(); i != mRasterizerStateCache.end(); i++)
{
i->second.first->Release();
}
mRasterizerStateCache.clear();
for (DepthStencilStateMap::iterator i = mDepthStencilStateCache.begin(); i != mDepthStencilStateCache.end(); i++)
{
i->second.first->Release();
}
mDepthStencilStateCache.clear();
for (SamplerStateMap::iterator i = mSamplerStateCache.begin(); i != mSamplerStateCache.end(); i++)
{
i->second.first->Release();
}
mSamplerStateCache.clear();
} }
std::size_t RenderStateCache::hashBlendState(const gl::BlendState &blendState) std::size_t RenderStateCache::hashBlendState(const gl::BlendState &blendState)
...@@ -115,7 +106,7 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::BlendState &blendSta ...@@ -115,7 +106,7 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::BlendState &blendSta
leastRecentlyUsed = i; leastRecentlyUsed = i;
} }
} }
leastRecentlyUsed->second.first->Release(); SafeRelease(leastRecentlyUsed->second.first);
mBlendStateCache.erase(leastRecentlyUsed); mBlendStateCache.erase(leastRecentlyUsed);
} }
...@@ -210,7 +201,7 @@ ID3D11RasterizerState *RenderStateCache::getRasterizerState(const gl::Rasterizer ...@@ -210,7 +201,7 @@ ID3D11RasterizerState *RenderStateCache::getRasterizerState(const gl::Rasterizer
leastRecentlyUsed = i; leastRecentlyUsed = i;
} }
} }
leastRecentlyUsed->second.first->Release(); SafeRelease(leastRecentlyUsed->second.first);
mRasterizerStateCache.erase(leastRecentlyUsed); mRasterizerStateCache.erase(leastRecentlyUsed);
} }
...@@ -292,7 +283,7 @@ ID3D11DepthStencilState *RenderStateCache::getDepthStencilState(const gl::DepthS ...@@ -292,7 +283,7 @@ ID3D11DepthStencilState *RenderStateCache::getDepthStencilState(const gl::DepthS
leastRecentlyUsed = i; leastRecentlyUsed = i;
} }
} }
leastRecentlyUsed->second.first->Release(); SafeRelease(leastRecentlyUsed->second.first);
mDepthStencilStateCache.erase(leastRecentlyUsed); mDepthStencilStateCache.erase(leastRecentlyUsed);
} }
...@@ -370,7 +361,7 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa ...@@ -370,7 +361,7 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa
leastRecentlyUsed = i; leastRecentlyUsed = i;
} }
} }
leastRecentlyUsed->second.first->Release(); SafeRelease(leastRecentlyUsed->second.first);
mSamplerStateCache.erase(leastRecentlyUsed); mSamplerStateCache.erase(leastRecentlyUsed);
} }
...@@ -404,4 +395,4 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa ...@@ -404,4 +395,4 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa
} }
} }
} }
\ No newline at end of file
...@@ -25,7 +25,7 @@ static bool getTextureProperties(ID3D11Resource *resource, unsigned int *mipLeve ...@@ -25,7 +25,7 @@ static bool getTextureProperties(ID3D11Resource *resource, unsigned int *mipLeve
{ {
D3D11_TEXTURE1D_DESC texDesc; D3D11_TEXTURE1D_DESC texDesc;
texture1D->GetDesc(&texDesc); texture1D->GetDesc(&texDesc);
texture1D->Release(); SafeRelease(texture1D);
*mipLevels = texDesc.MipLevels; *mipLevels = texDesc.MipLevels;
*samples = 0; *samples = 0;
...@@ -38,7 +38,7 @@ static bool getTextureProperties(ID3D11Resource *resource, unsigned int *mipLeve ...@@ -38,7 +38,7 @@ static bool getTextureProperties(ID3D11Resource *resource, unsigned int *mipLeve
{ {
D3D11_TEXTURE2D_DESC texDesc; D3D11_TEXTURE2D_DESC texDesc;
texture2D->GetDesc(&texDesc); texture2D->GetDesc(&texDesc);
texture2D->Release(); SafeRelease(texture2D);
*mipLevels = texDesc.MipLevels; *mipLevels = texDesc.MipLevels;
*samples = texDesc.SampleDesc.Count > 1 ? texDesc.SampleDesc.Count : 0; *samples = texDesc.SampleDesc.Count > 1 ? texDesc.SampleDesc.Count : 0;
...@@ -51,7 +51,7 @@ static bool getTextureProperties(ID3D11Resource *resource, unsigned int *mipLeve ...@@ -51,7 +51,7 @@ static bool getTextureProperties(ID3D11Resource *resource, unsigned int *mipLeve
{ {
D3D11_TEXTURE3D_DESC texDesc; D3D11_TEXTURE3D_DESC texDesc;
texture3D->GetDesc(&texDesc); texture3D->GetDesc(&texDesc);
texture3D->Release(); SafeRelease(texture3D);
*mipLevels = texDesc.MipLevels; *mipLevels = texDesc.MipLevels;
*samples = 0; *samples = 0;
...@@ -357,29 +357,10 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height ...@@ -357,29 +357,10 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height
RenderTarget11::~RenderTarget11() RenderTarget11::~RenderTarget11()
{ {
if (mTexture) SafeRelease(mTexture);
{ SafeRelease(mRenderTarget);
mTexture->Release(); SafeRelease(mDepthStencil);
mTexture = NULL; SafeRelease(mShaderResource);
}
if (mRenderTarget)
{
mRenderTarget->Release();
mRenderTarget = NULL;
}
if (mDepthStencil)
{
mDepthStencil->Release();
mDepthStencil = NULL;
}
if (mShaderResource)
{
mShaderResource->Release();
mShaderResource = NULL;
}
} }
RenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target) RenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target)
......
...@@ -95,10 +95,7 @@ RenderTarget9::RenderTarget9(Renderer *renderer, GLsizei width, GLsizei height, ...@@ -95,10 +95,7 @@ RenderTarget9::RenderTarget9(Renderer *renderer, GLsizei width, GLsizei height,
RenderTarget9::~RenderTarget9() RenderTarget9::~RenderTarget9()
{ {
if (mRenderTarget) SafeRelease(mRenderTarget);
{
mRenderTarget->Release();
}
} }
RenderTarget9 *RenderTarget9::makeRenderTarget9(RenderTarget *target) RenderTarget9 *RenderTarget9::makeRenderTarget9(RenderTarget *target)
......
...@@ -133,8 +133,7 @@ ShaderBlob *Renderer::compileToBinary(gl::InfoLog &infoLog, const char *hlsl, co ...@@ -133,8 +133,7 @@ ShaderBlob *Renderer::compileToBinary(gl::InfoLog &infoLog, const char *hlsl, co
TRACE("\n%s", hlsl); TRACE("\n%s", hlsl);
TRACE("\n%s", message); TRACE("\n%s", message);
errorMessage->Release(); SafeRelease(errorMessage);
errorMessage = NULL;
} }
if (SUCCEEDED(result)) if (SUCCEEDED(result))
......
...@@ -208,7 +208,7 @@ EGLint Renderer11::initialize() ...@@ -208,7 +208,7 @@ EGLint Renderer11::initialize()
return EGL_NOT_INITIALIZED; return EGL_NOT_INITIALIZED;
} }
dxgiDevice->Release(); SafeRelease(dxgiDevice);
mDxgiAdapter->GetDesc(&mAdapterDescription); mDxgiAdapter->GetDesc(&mAdapterDescription);
memset(mDescription, 0, sizeof(mDescription)); memset(mDescription, 0, sizeof(mDescription));
...@@ -241,8 +241,7 @@ EGLint Renderer11::initialize() ...@@ -241,8 +241,7 @@ EGLint Renderer11::initialize()
filter.DenyList.pIDList = hideMessages; filter.DenyList.pIDList = hideMessages;
infoQueue->AddStorageFilterEntries(&filter); infoQueue->AddStorageFilterEntries(&filter);
SafeRelease(infoQueue);
infoQueue->Release();
} }
#endif #endif
...@@ -1867,20 +1866,11 @@ void Renderer11::releaseDeviceResources() ...@@ -1867,20 +1866,11 @@ void Renderer11::releaseDeviceResources()
mStateCache.clear(); mStateCache.clear();
mInputLayoutCache.clear(); mInputLayoutCache.clear();
delete mVertexDataManager; SafeDelete(mVertexDataManager);
mVertexDataManager = NULL; SafeDelete(mIndexDataManager);
SafeDelete(mLineLoopIB);
delete mIndexDataManager; SafeDelete(mTriangleFanIB);
mIndexDataManager = NULL; SafeDelete(mBlit);
delete mLineLoopIB;
mLineLoopIB = NULL;
delete mTriangleFanIB;
mTriangleFanIB = NULL;
delete mBlit;
mBlit = NULL;
SafeRelease(mClearVB); SafeRelease(mClearVB);
SafeRelease(mClearIL); SafeRelease(mClearIL);
...@@ -1981,8 +1971,8 @@ bool Renderer11::testDeviceResettable() ...@@ -1981,8 +1971,8 @@ bool Renderer11::testDeviceResettable()
return false; return false;
} }
dummyContext->Release(); SafeRelease(dummyContext);
dummyDevice->Release(); SafeRelease(dummyDevice);
return true; return true;
} }
...@@ -1991,31 +1981,17 @@ void Renderer11::release() ...@@ -1991,31 +1981,17 @@ void Renderer11::release()
{ {
releaseDeviceResources(); releaseDeviceResources();
if (mDxgiFactory) SafeRelease(mDxgiFactory);
{ SafeRelease(mDxgiAdapter);
mDxgiFactory->Release();
mDxgiFactory = NULL;
}
if (mDxgiAdapter)
{
mDxgiAdapter->Release();
mDxgiAdapter = NULL;
}
if (mDeviceContext) if (mDeviceContext)
{ {
mDeviceContext->ClearState(); mDeviceContext->ClearState();
mDeviceContext->Flush(); mDeviceContext->Flush();
mDeviceContext->Release(); SafeRelease(mDeviceContext);
mDeviceContext = NULL;
} }
if (mDevice) SafeRelease(mDevice);
{
mDevice->Release();
mDevice = NULL;
}
if (mD3d11Module) if (mD3d11Module)
{ {
...@@ -2864,7 +2840,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2864,7 +2840,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
TextureStorage11_2DArray *storage11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(storage->getStorageInstance()); TextureStorage11_2DArray *storage11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(storage->getStorageInstance());
if (!storage11) if (!storage11)
{ {
source->Release(); SafeRelease(source);
ERR("Failed to retrieve the texture storage from the destination."); ERR("Failed to retrieve the texture storage from the destination.");
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
...@@ -2872,7 +2848,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2872,7 +2848,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
RenderTarget11 *destRenderTarget = RenderTarget11::makeRenderTarget11(storage11->getRenderTargetLayer(level, zOffset)); RenderTarget11 *destRenderTarget = RenderTarget11::makeRenderTarget11(storage11->getRenderTargetLayer(level, zOffset));
if (!destRenderTarget) if (!destRenderTarget)
{ {
source->Release(); SafeRelease(source);
ERR("Failed to retrieve the render target from the destination storage."); ERR("Failed to retrieve the render target from the destination storage.");
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
...@@ -3019,10 +2995,12 @@ ShaderExecutable *Renderer11::compileToExecutable(gl::InfoLog &infoLog, const ch ...@@ -3019,10 +2995,12 @@ ShaderExecutable *Renderer11::compileToExecutable(gl::InfoLog &infoLog, const ch
ID3DBlob *binary = (ID3DBlob*)compileToBinary(infoLog, shaderHLSL, profile, D3DCOMPILE_OPTIMIZATION_LEVEL0, false); ID3DBlob *binary = (ID3DBlob*)compileToBinary(infoLog, shaderHLSL, profile, D3DCOMPILE_OPTIMIZATION_LEVEL0, false);
if (!binary) if (!binary)
{
return NULL; return NULL;
}
ShaderExecutable *executable = loadExecutable((DWORD *)binary->GetBufferPointer(), binary->GetBufferSize(), type); ShaderExecutable *executable = loadExecutable((DWORD *)binary->GetBufferPointer(), binary->GetBufferSize(), type);
binary->Release(); SafeRelease(binary);
return executable; return executable;
} }
...@@ -3070,7 +3048,7 @@ bool Renderer11::getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned ...@@ -3070,7 +3048,7 @@ bool Renderer11::getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned
if (textureResource) if (textureResource)
{ {
HRESULT result = textureResource->QueryInterface(IID_ID3D11Texture2D, (void**)resource); HRESULT result = textureResource->QueryInterface(IID_ID3D11Texture2D, (void**)resource);
textureResource->Release(); SafeRelease(textureResource);
if (SUCCEEDED(result)) if (SUCCEEDED(result))
{ {
...@@ -3175,8 +3153,7 @@ void Renderer11::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsi ...@@ -3175,8 +3153,7 @@ void Renderer11::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsi
readTextureData(colorBufferTexture, subresourceIndex, area, format, type, outputPitch, readTextureData(colorBufferTexture, subresourceIndex, area, format, type, outputPitch,
packReverseRowOrder, packAlignment, pixels); packReverseRowOrder, packAlignment, pixels);
colorBufferTexture->Release(); SafeRelease(colorBufferTexture);
colorBufferTexture = NULL;
} }
} }
...@@ -3266,7 +3243,7 @@ void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResou ...@@ -3266,7 +3243,7 @@ void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResou
if (FAILED(result)) if (FAILED(result))
{ {
ERR("Failed to create resolve texture for readPixels, HRESULT: 0x%X.", result); ERR("Failed to create resolve texture for readPixels, HRESULT: 0x%X.", result);
stagingTex->Release(); SafeRelease(stagingTex);
return; return;
} }
...@@ -3289,8 +3266,7 @@ void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResou ...@@ -3289,8 +3266,7 @@ void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResou
mDeviceContext->CopySubresourceRegion(stagingTex, 0, 0, 0, 0, srcTex, subResource, &srcBox); mDeviceContext->CopySubresourceRegion(stagingTex, 0, 0, 0, 0, srcTex, subResource, &srcBox);
srcTex->Release(); SafeRelease(srcTex);
srcTex = NULL;
D3D11_MAPPED_SUBRESOURCE mapping; D3D11_MAPPED_SUBRESOURCE mapping;
mDeviceContext->Map(stagingTex, 0, D3D11_MAP_READ, 0, &mapping); mDeviceContext->Map(stagingTex, 0, D3D11_MAP_READ, 0, &mapping);
...@@ -3373,8 +3349,7 @@ void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResou ...@@ -3373,8 +3349,7 @@ void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResou
mDeviceContext->Unmap(stagingTex, 0); mDeviceContext->Unmap(stagingTex, 0);
stagingTex->Release(); SafeRelease(stagingTex);
stagingTex = NULL;
} }
bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::Rectangle &drawRect, RenderTarget *readRenderTarget, bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::Rectangle &drawRect, RenderTarget *readRenderTarget,
...@@ -3419,12 +3394,12 @@ bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::R ...@@ -3419,12 +3394,12 @@ bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::R
readTexture = resolveMultisampledTexture(unresolvedTexture, readRenderTarget11->getSubresourceIndex()); readTexture = resolveMultisampledTexture(unresolvedTexture, readRenderTarget11->getSubresourceIndex());
readSubresource = 0; readSubresource = 0;
unresolvedTexture->Release(); SafeRelease(unresolvedTexture);
HRESULT result = mDevice->CreateShaderResourceView(readTexture, NULL, &readSRV); HRESULT result = mDevice->CreateShaderResourceView(readTexture, NULL, &readSRV);
if (FAILED(result)) if (FAILED(result))
{ {
readTexture->Release(); SafeRelease(readTexture);
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
} }
......
...@@ -139,21 +139,11 @@ Renderer9::~Renderer9() ...@@ -139,21 +139,11 @@ Renderer9::~Renderer9()
resetDevice(); resetDevice();
} }
mDevice->Release(); SafeRelease(mDevice);
mDevice = NULL;
} }
if (mDeviceEx) SafeRelease(mDeviceEx);
{ SafeRelease(mD3d9);
mDeviceEx->Release();
mDeviceEx = NULL;
}
if (mD3d9)
{
mD3d9->Release();
mD3d9 = NULL;
}
if (mDeviceWindow) if (mDeviceWindow)
{ {
...@@ -161,16 +151,9 @@ Renderer9::~Renderer9() ...@@ -161,16 +151,9 @@ Renderer9::~Renderer9()
mDeviceWindow = NULL; mDeviceWindow = NULL;
} }
if (mD3d9Ex) SafeRelease(mD3d9Ex);
{
mD3d9Ex->Release();
mD3d9Ex = NULL;
}
if (mD3d9Module) mD3d9Module = NULL;
{
mD3d9Module = NULL;
}
} }
Renderer9 *Renderer9::makeRenderer9(Renderer *renderer) Renderer9 *Renderer9::makeRenderer9(Renderer *renderer)
...@@ -352,7 +335,7 @@ EGLint Renderer9::initialize() ...@@ -352,7 +335,7 @@ EGLint Renderer9::initialize()
IDirect3DQuery9 *occlusionQuery = NULL; IDirect3DQuery9 *occlusionQuery = NULL;
if (SUCCEEDED(mDevice->CreateQuery(D3DQUERYTYPE_OCCLUSION, &occlusionQuery)) && occlusionQuery) if (SUCCEEDED(mDevice->CreateQuery(D3DQUERYTYPE_OCCLUSION, &occlusionQuery)) && occlusionQuery)
{ {
occlusionQuery->Release(); SafeRelease(occlusionQuery);
mOcclusionQuerySupport = true; mOcclusionQuerySupport = true;
} }
else else
...@@ -364,7 +347,7 @@ EGLint Renderer9::initialize() ...@@ -364,7 +347,7 @@ EGLint Renderer9::initialize()
IDirect3DQuery9 *eventQuery = NULL; IDirect3DQuery9 *eventQuery = NULL;
if (SUCCEEDED(mDevice->CreateQuery(D3DQUERYTYPE_EVENT, &eventQuery)) && eventQuery) if (SUCCEEDED(mDevice->CreateQuery(D3DQUERYTYPE_EVENT, &eventQuery)) && eventQuery)
{ {
eventQuery->Release(); SafeRelease(eventQuery);
mEventQuerySupport = true; mEventQuerySupport = true;
} }
else else
...@@ -655,7 +638,7 @@ void Renderer9::freeEventQuery(IDirect3DQuery9* query) ...@@ -655,7 +638,7 @@ void Renderer9::freeEventQuery(IDirect3DQuery9* query)
{ {
if (mEventQueryPool.size() > 1000) if (mEventQueryPool.size() > 1000)
{ {
query->Release(); SafeRelease(query);
} }
else else
{ {
...@@ -1240,7 +1223,7 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1240,7 +1223,7 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
} }
mDevice->SetRenderTarget(0, renderTargetSurface); mDevice->SetRenderTarget(0, renderTargetSurface);
renderTargetSurface->Release(); SafeRelease(renderTargetSurface);
mAppliedRenderTargetSerial = renderTargetSerial; mAppliedRenderTargetSerial = renderTargetSerial;
renderTargetChanged = true; renderTargetChanged = true;
...@@ -1297,7 +1280,7 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1297,7 +1280,7 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
} }
mDevice->SetDepthStencilSurface(depthStencilSurface); mDevice->SetDepthStencilSurface(depthStencilSurface);
depthStencilSurface->Release(); SafeRelease(depthStencilSurface);
depthSize = depthStencil->getDepthSize(); depthSize = depthStencil->getDepthSize();
stencilSize = depthStencil->getStencilSize(); stencilSize = depthStencil->getStencilSize();
...@@ -1993,42 +1976,28 @@ void Renderer9::markAllStateDirty() ...@@ -1993,42 +1976,28 @@ void Renderer9::markAllStateDirty()
void Renderer9::releaseDeviceResources() void Renderer9::releaseDeviceResources()
{ {
while (!mEventQueryPool.empty()) for (size_t i = 0; i < mEventQueryPool.size(); i++)
{ {
mEventQueryPool.back()->Release(); SafeRelease(mEventQueryPool[i]);
mEventQueryPool.pop_back();
} }
mEventQueryPool.clear();
if (mMaskedClearSavedState) SafeRelease(mMaskedClearSavedState);
{
mMaskedClearSavedState->Release();
mMaskedClearSavedState = NULL;
}
mVertexShaderCache.clear(); mVertexShaderCache.clear();
mPixelShaderCache.clear(); mPixelShaderCache.clear();
delete mBlit; SafeDelete(mBlit);
mBlit = NULL; SafeDelete(mVertexDataManager);
SafeDelete(mIndexDataManager);
delete mVertexDataManager; SafeDelete(mLineLoopIB);
mVertexDataManager = NULL;
delete mIndexDataManager;
mIndexDataManager = NULL;
delete mLineLoopIB;
mLineLoopIB = NULL;
for (int i = 0; i < NUM_NULL_COLORBUFFER_CACHE_ENTRIES; i++) for (int i = 0; i < NUM_NULL_COLORBUFFER_CACHE_ENTRIES; i++)
{ {
delete mNullColorbufferCache[i].buffer; SafeDelete(mNullColorbufferCache[i].buffer);
mNullColorbufferCache[i].buffer = NULL;
} }
} }
void Renderer9::notifyDeviceLost() void Renderer9::notifyDeviceLost()
{ {
mDeviceLost = true; mDeviceLost = true;
...@@ -2609,11 +2578,13 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterface2D *dest, TextureStora ...@@ -2609,11 +2578,13 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterface2D *dest, TextureStora
result = copyToRenderTarget(dstSurf, srcSurf, source9->isManaged()); result = copyToRenderTarget(dstSurf, srcSurf, source9->isManaged());
if (srcSurf) srcSurf->Release(); SafeRelease(srcSurf);
if (dstSurf) dstSurf->Release(); SafeRelease(dstSurf);
if (!result) if (!result)
{
return false; return false;
}
} }
} }
...@@ -2638,11 +2609,13 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterfaceCube *dest, TextureSto ...@@ -2638,11 +2609,13 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterfaceCube *dest, TextureSto
result = copyToRenderTarget(dstSurf, srcSurf, source9->isManaged()); result = copyToRenderTarget(dstSurf, srcSurf, source9->isManaged());
if (srcSurf) srcSurf->Release(); SafeRelease(srcSurf);
if (dstSurf) dstSurf->Release(); SafeRelease(dstSurf);
if (!result) if (!result)
{
return false; return false;
}
} }
} }
} }
...@@ -2775,8 +2748,8 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle & ...@@ -2775,8 +2748,8 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle &
HRESULT result = mDevice->StretchRect(readSurface, &srcRect, drawSurface, &dstRect, D3DTEXF_NONE); HRESULT result = mDevice->StretchRect(readSurface, &srcRect, drawSurface, &dstRect, D3DTEXF_NONE);
readSurface->Release(); SafeRelease(readSurface);
drawSurface->Release(); SafeRelease(drawSurface);
if (FAILED(result)) if (FAILED(result))
{ {
...@@ -2820,8 +2793,8 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle & ...@@ -2820,8 +2793,8 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle &
HRESULT result = mDevice->StretchRect(readSurface, NULL, drawSurface, NULL, D3DTEXF_NONE); HRESULT result = mDevice->StretchRect(readSurface, NULL, drawSurface, NULL, D3DTEXF_NONE);
readSurface->Release(); SafeRelease(readSurface);
drawSurface->Release(); SafeRelease(drawSurface);
if (FAILED(result)) if (FAILED(result))
{ {
...@@ -2862,7 +2835,7 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz ...@@ -2862,7 +2835,7 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz
if (desc.MultiSampleType != D3DMULTISAMPLE_NONE) if (desc.MultiSampleType != D3DMULTISAMPLE_NONE)
{ {
UNIMPLEMENTED(); // FIXME: Requires resolve using StretchRect into non-multisampled render target UNIMPLEMENTED(); // FIXME: Requires resolve using StretchRect into non-multisampled render target
surface->Release(); SafeRelease(surface);
return gl::error(GL_OUT_OF_MEMORY); return gl::error(GL_OUT_OF_MEMORY);
} }
...@@ -2890,18 +2863,17 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz ...@@ -2890,18 +2863,17 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz
if (FAILED(result)) if (FAILED(result))
{ {
ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY); ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
surface->Release(); SafeRelease(surface);
return gl::error(GL_OUT_OF_MEMORY); return gl::error(GL_OUT_OF_MEMORY);
} }
} }
result = mDevice->GetRenderTargetData(surface, systemSurface); result = mDevice->GetRenderTargetData(surface, systemSurface);
surface->Release(); SafeRelease(surface);
surface = NULL;
if (FAILED(result)) if (FAILED(result))
{ {
systemSurface->Release(); SafeRelease(systemSurface);
// It turns out that D3D will sometimes produce more error // It turns out that D3D will sometimes produce more error
// codes than those documented. // codes than those documented.
...@@ -2920,7 +2892,7 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz ...@@ -2920,7 +2892,7 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz
if (directToPixels) if (directToPixels)
{ {
systemSurface->Release(); SafeRelease(systemSurface);
return; return;
} }
...@@ -2936,7 +2908,7 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz ...@@ -2936,7 +2908,7 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz
if (FAILED(result)) if (FAILED(result))
{ {
UNREACHABLE(); UNREACHABLE();
systemSurface->Release(); SafeRelease(systemSurface);
return; // No sensible error to generate return; // No sensible error to generate
} }
...@@ -3016,8 +2988,7 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz ...@@ -3016,8 +2988,7 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz
} }
systemSurface->UnlockRect(); systemSurface->UnlockRect();
SafeRelease(systemSurface);
systemSurface->Release();
} }
RenderTarget *Renderer9::createRenderTarget(SwapChain *swapChain, bool depth) RenderTarget *Renderer9::createRenderTarget(SwapChain *swapChain, bool depth)
...@@ -3095,10 +3066,12 @@ ShaderExecutable *Renderer9::compileToExecutable(gl::InfoLog &infoLog, const cha ...@@ -3095,10 +3066,12 @@ ShaderExecutable *Renderer9::compileToExecutable(gl::InfoLog &infoLog, const cha
ID3DBlob *binary = (ID3DBlob*)compileToBinary(infoLog, shaderHLSL, profile, ANGLE_COMPILE_OPTIMIZATION_LEVEL, true); ID3DBlob *binary = (ID3DBlob*)compileToBinary(infoLog, shaderHLSL, profile, ANGLE_COMPILE_OPTIMIZATION_LEVEL, true);
if (!binary) if (!binary)
{
return NULL; return NULL;
}
ShaderExecutable *executable = loadExecutable(binary->GetBufferPointer(), binary->GetBufferSize(), type); ShaderExecutable *executable = loadExecutable(binary->GetBufferPointer(), binary->GetBufferSize(), type);
binary->Release(); SafeRelease(binary);
return executable; return executable;
} }
...@@ -3143,7 +3116,7 @@ bool Renderer9::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *s ...@@ -3143,7 +3116,7 @@ bool Renderer9::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *s
{ {
Image9::copyLockableSurfaces(surf, source); Image9::copyLockableSurfaces(surf, source);
result = mDevice->UpdateSurface(surf, NULL, dest, NULL); result = mDevice->UpdateSurface(surf, NULL, dest, NULL);
surf->Release(); SafeRelease(surf);
} }
} }
else else
......
...@@ -53,7 +53,7 @@ class ShaderCache ...@@ -53,7 +53,7 @@ class ShaderCache
// Random eviction policy. // Random eviction policy.
if (mMap.size() >= kMaxMapSize) if (mMap.size() >= kMaxMapSize)
{ {
mMap.begin()->second->Release(); SafeRelease(mMap.begin()->second);
mMap.erase(mMap.begin()); mMap.erase(mMap.begin());
} }
...@@ -67,7 +67,7 @@ class ShaderCache ...@@ -67,7 +67,7 @@ class ShaderCache
{ {
for (typename Map::iterator it = mMap.begin(); it != mMap.end(); ++it) for (typename Map::iterator it = mMap.begin(); it != mMap.end(); ++it)
{ {
it->second->Release(); SafeRelease(it->second);
} }
mMap.clear(); mMap.clear();
......
...@@ -47,23 +47,11 @@ ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D ...@@ -47,23 +47,11 @@ ShaderExecutable11::ShaderExecutable11(const void *function, size_t length, ID3D
ShaderExecutable11::~ShaderExecutable11() ShaderExecutable11::~ShaderExecutable11()
{ {
if (mVertexExecutable) SafeRelease(mVertexExecutable);
{ SafeRelease(mPixelExecutable);
mVertexExecutable->Release(); SafeRelease(mGeometryExecutable);
}
if (mPixelExecutable) SafeRelease(mConstantBuffer);
{
mPixelExecutable->Release();
}
if (mGeometryExecutable)
{
mGeometryExecutable->Release();
}
if (mConstantBuffer)
{
mConstantBuffer->Release();
}
} }
ShaderExecutable11 *ShaderExecutable11::makeShaderExecutable11(ShaderExecutable *executable) ShaderExecutable11 *ShaderExecutable11::makeShaderExecutable11(ShaderExecutable *executable)
......
...@@ -31,14 +31,8 @@ ShaderExecutable9::ShaderExecutable9(const void *function, size_t length, IDirec ...@@ -31,14 +31,8 @@ ShaderExecutable9::ShaderExecutable9(const void *function, size_t length, IDirec
ShaderExecutable9::~ShaderExecutable9() ShaderExecutable9::~ShaderExecutable9()
{ {
if (mVertexExecutable) SafeRelease(mVertexExecutable);
{ SafeRelease(mPixelExecutable);
mVertexExecutable->Release();
}
if (mPixelExecutable)
{
mPixelExecutable->Release();
}
} }
ShaderExecutable9 *ShaderExecutable9::makeShaderExecutable9(ShaderExecutable *executable) ShaderExecutable9 *ShaderExecutable9::makeShaderExecutable9(ShaderExecutable *executable)
......
...@@ -49,83 +49,19 @@ SwapChain11::~SwapChain11() ...@@ -49,83 +49,19 @@ SwapChain11::~SwapChain11()
void SwapChain11::release() void SwapChain11::release()
{ {
if (mSwapChain) SafeRelease(mSwapChain);
{ SafeRelease(mBackBufferTexture);
mSwapChain->Release(); SafeRelease(mBackBufferRTView);
mSwapChain = NULL; SafeRelease(mOffscreenTexture);
} SafeRelease(mOffscreenRTView);
SafeRelease(mOffscreenSRView);
if (mBackBufferTexture) SafeRelease(mDepthStencilTexture);
{ SafeRelease(mDepthStencilDSView);
mBackBufferTexture->Release(); SafeRelease(mQuadVB);
mBackBufferTexture = NULL; SafeRelease(mPassThroughSampler);
} SafeRelease(mPassThroughIL);
SafeRelease(mPassThroughVS);
if (mBackBufferRTView) SafeRelease(mPassThroughPS);
{
mBackBufferRTView->Release();
mBackBufferRTView = NULL;
}
if (mOffscreenTexture)
{
mOffscreenTexture->Release();
mOffscreenTexture = NULL;
}
if (mOffscreenRTView)
{
mOffscreenRTView->Release();
mOffscreenRTView = NULL;
}
if (mOffscreenSRView)
{
mOffscreenSRView->Release();
mOffscreenSRView = NULL;
}
if (mDepthStencilTexture)
{
mDepthStencilTexture->Release();
mDepthStencilTexture = NULL;
}
if (mDepthStencilDSView)
{
mDepthStencilDSView->Release();
mDepthStencilDSView = NULL;
}
if (mQuadVB)
{
mQuadVB->Release();
mQuadVB = NULL;
}
if (mPassThroughSampler)
{
mPassThroughSampler->Release();
mPassThroughSampler = NULL;
}
if (mPassThroughIL)
{
mPassThroughIL->Release();
mPassThroughIL = NULL;
}
if (mPassThroughVS)
{
mPassThroughVS->Release();
mPassThroughVS = NULL;
}
if (mPassThroughPS)
{
mPassThroughPS->Release();
mPassThroughPS = NULL;
}
if (!mAppCreatedShareHandle) if (!mAppCreatedShareHandle)
{ {
...@@ -135,35 +71,11 @@ void SwapChain11::release() ...@@ -135,35 +71,11 @@ void SwapChain11::release()
void SwapChain11::releaseOffscreenTexture() void SwapChain11::releaseOffscreenTexture()
{ {
if (mOffscreenTexture) SafeRelease(mOffscreenTexture);
{ SafeRelease(mOffscreenRTView);
mOffscreenTexture->Release(); SafeRelease(mOffscreenSRView);
mOffscreenTexture = NULL; SafeRelease(mDepthStencilTexture);
} SafeRelease(mDepthStencilDSView);
if (mOffscreenRTView)
{
mOffscreenRTView->Release();
mOffscreenRTView = NULL;
}
if (mOffscreenSRView)
{
mOffscreenSRView->Release();
mOffscreenSRView = NULL;
}
if (mDepthStencilTexture)
{
mDepthStencilTexture->Release();
mDepthStencilTexture = NULL;
}
if (mDepthStencilDSView)
{
mDepthStencilDSView->Release();
mDepthStencilDSView = NULL;
}
} }
EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHeight) EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHeight)
...@@ -202,7 +114,7 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei ...@@ -202,7 +114,7 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei
} }
result = tempResource11->QueryInterface(__uuidof(ID3D11Texture2D), (void**)&mOffscreenTexture); result = tempResource11->QueryInterface(__uuidof(ID3D11Texture2D), (void**)&mOffscreenTexture);
tempResource11->Release(); SafeRelease(tempResource11);
if (FAILED(result)) if (FAILED(result))
{ {
...@@ -366,7 +278,7 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei ...@@ -366,7 +278,7 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei
const int yoffset = std::max(mHeight - previousHeight, 0); const int yoffset = std::max(mHeight - previousHeight, 0);
deviceContext->CopySubresourceRegion(mOffscreenTexture, 0, 0, yoffset, 0, previousOffscreenTexture, 0, &sourceBox); deviceContext->CopySubresourceRegion(mOffscreenTexture, 0, 0, yoffset, 0, previousOffscreenTexture, 0, &sourceBox);
previousOffscreenTexture->Release(); SafeRelease(previousOffscreenTexture);
if (mSwapChain) if (mSwapChain)
{ {
...@@ -389,17 +301,8 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight) ...@@ -389,17 +301,8 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight)
// Can only call resize if we have already created our swap buffer and resources // Can only call resize if we have already created our swap buffer and resources
ASSERT(mSwapChain && mBackBufferTexture && mBackBufferRTView); ASSERT(mSwapChain && mBackBufferTexture && mBackBufferRTView);
if (mBackBufferTexture) SafeRelease(mBackBufferTexture);
{ SafeRelease(mBackBufferRTView);
mBackBufferTexture->Release();
mBackBufferTexture = NULL;
}
if (mBackBufferRTView)
{
mBackBufferRTView->Release();
mBackBufferRTView = NULL;
}
// Resize swap chain // Resize swap chain
DXGI_FORMAT backbufferDXGIFormat = gl_d3d11::GetTexFormat(mBackBufferFormat, mRenderer->getCurrentClientVersion()); DXGI_FORMAT backbufferDXGIFormat = gl_d3d11::GetTexFormat(mBackBufferFormat, mRenderer->getCurrentClientVersion());
...@@ -448,23 +351,9 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap ...@@ -448,23 +351,9 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
// Release specific resources to free up memory for the new render target, while the // Release specific resources to free up memory for the new render target, while the
// old render target still exists for the purpose of preserving its contents. // old render target still exists for the purpose of preserving its contents.
if (mSwapChain) SafeRelease(mSwapChain);
{ SafeRelease(mBackBufferTexture);
mSwapChain->Release(); SafeRelease(mBackBufferRTView);
mSwapChain = NULL;
}
if (mBackBufferTexture)
{
mBackBufferTexture->Release();
mBackBufferTexture = NULL;
}
if (mBackBufferRTView)
{
mBackBufferRTView->Release();
mBackBufferRTView = NULL;
}
mSwapInterval = static_cast<unsigned int>(swapInterval); mSwapInterval = static_cast<unsigned int>(swapInterval);
if (mSwapInterval > 4) if (mSwapInterval > 4)
......
...@@ -36,38 +36,16 @@ SwapChain9::~SwapChain9() ...@@ -36,38 +36,16 @@ SwapChain9::~SwapChain9()
void SwapChain9::release() void SwapChain9::release()
{ {
if (mSwapChain) SafeRelease(mSwapChain);
{ SafeRelease(mBackBuffer);
mSwapChain->Release(); SafeRelease(mDepthStencil);
mSwapChain = NULL; SafeRelease(mRenderTarget);
} SafeRelease(mOffscreenTexture);
if (mBackBuffer)
{
mBackBuffer->Release();
mBackBuffer = NULL;
}
if (mDepthStencil)
{
mDepthStencil->Release();
mDepthStencil = NULL;
}
if (mRenderTarget)
{
mRenderTarget->Release();
mRenderTarget = NULL;
}
if (mOffscreenTexture)
{
mOffscreenTexture->Release();
mOffscreenTexture = NULL;
}
if (mWindow) if (mWindow)
{
mShareHandle = NULL; mShareHandle = NULL;
}
} }
static DWORD convertInterval(EGLint interval) static DWORD convertInterval(EGLint interval)
...@@ -108,29 +86,10 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI ...@@ -108,29 +86,10 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI
// Release specific resources to free up memory for the new render target, while the // Release specific resources to free up memory for the new render target, while the
// old render target still exists for the purpose of preserving its contents. // old render target still exists for the purpose of preserving its contents.
if (mSwapChain) SafeRelease(mSwapChain);
{ SafeRelease(mBackBuffer);
mSwapChain->Release(); SafeRelease(mOffscreenTexture);
mSwapChain = NULL; SafeRelease(mDepthStencil);
}
if (mBackBuffer)
{
mBackBuffer->Release();
mBackBuffer = NULL;
}
if (mOffscreenTexture)
{
mOffscreenTexture->Release();
mOffscreenTexture = NULL;
}
if (mDepthStencil)
{
mDepthStencil->Release();
mDepthStencil = NULL;
}
HANDLE *pShareHandle = NULL; HANDLE *pShareHandle = NULL;
if (!mWindow && mRenderer->getShareHandleSupport()) if (!mWindow && mRenderer->getShareHandleSupport())
...@@ -184,7 +143,7 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI ...@@ -184,7 +143,7 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI
result = device->StretchRect(oldRenderTarget, &rect, mRenderTarget, &rect, D3DTEXF_NONE); result = device->StretchRect(oldRenderTarget, &rect, mRenderTarget, &rect, D3DTEXF_NONE);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
oldRenderTarget->Release(); SafeRelease(oldRenderTarget);
} }
if (mWindow) if (mWindow)
...@@ -424,10 +383,10 @@ void SwapChain9::recreate() ...@@ -424,10 +383,10 @@ void SwapChain9::recreate()
return; return;
} }
mSwapChain->Release(); SafeRelease(mSwapChain);
mSwapChain = newSwapChain; mSwapChain = newSwapChain;
mBackBuffer->Release(); SafeRelease(mBackBuffer);
result = mSwapChain->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &mBackBuffer); result = mSwapChain->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &mBackBuffer);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
} }
......
...@@ -187,7 +187,7 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch ...@@ -187,7 +187,7 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
offscreenRTV->GetDesc(&rtvDesc); offscreenRTV->GetDesc(&rtvDesc);
mRenderTargetFormat = rtvDesc.Format; mRenderTargetFormat = rtvDesc.Format;
offscreenRTV->Release(); SafeRelease(offscreenRTV);
mDepthStencilFormat = DXGI_FORMAT_UNKNOWN; mDepthStencilFormat = DXGI_FORMAT_UNKNOWN;
} }
...@@ -257,22 +257,12 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int levels, GLenum ...@@ -257,22 +257,12 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int levels, GLenum
TextureStorage11_2D::~TextureStorage11_2D() TextureStorage11_2D::~TextureStorage11_2D()
{ {
if (mTexture) SafeRelease(mTexture);
{ SafeRelease(mSRV);
mTexture->Release();
mTexture = NULL;
}
if (mSRV)
{
mSRV->Release();
mSRV = NULL;
}
for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++) for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{ {
delete mRenderTarget[i]; SafeDelete(mRenderTarget[i]);
mRenderTarget[i] = NULL;
} }
} }
...@@ -323,7 +313,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level) ...@@ -323,7 +313,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
if (result == E_OUTOFMEMORY) if (result == E_OUTOFMEMORY)
{ {
srv->Release(); SafeRelease(srv);
return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL)); return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL));
} }
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -350,7 +340,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level) ...@@ -350,7 +340,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
if (result == E_OUTOFMEMORY) if (result == E_OUTOFMEMORY)
{ {
srv->Release(); SafeRelease(srv);
return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL)); return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL));
} }
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -473,24 +463,14 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLe ...@@ -473,24 +463,14 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLe
TextureStorage11_Cube::~TextureStorage11_Cube() TextureStorage11_Cube::~TextureStorage11_Cube()
{ {
if (mTexture) SafeRelease(mTexture);
{ SafeRelease(mSRV);
mTexture->Release();
mTexture = NULL;
}
if (mSRV)
{
mSRV->Release();
mSRV = NULL;
}
for (unsigned int i = 0; i < 6; i++) for (unsigned int i = 0; i < 6; i++)
{ {
for (unsigned int j = 0; j < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; j++) for (unsigned int j = 0; j < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; j++)
{ {
delete mRenderTarget[i][j]; SafeDelete(mRenderTarget[i][j]);
mRenderTarget[i][j] = NULL;
} }
} }
} }
...@@ -547,7 +527,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int ...@@ -547,7 +527,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
if (result == E_OUTOFMEMORY) if (result == E_OUTOFMEMORY)
{ {
srv->Release(); SafeRelease(srv);
return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL)); return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL));
} }
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -576,7 +556,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int ...@@ -576,7 +556,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
if (result == E_OUTOFMEMORY) if (result == E_OUTOFMEMORY)
{ {
srv->Release(); SafeRelease(srv);
return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL)); return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL));
} }
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -701,29 +681,18 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int levels, GLenum ...@@ -701,29 +681,18 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int levels, GLenum
TextureStorage11_3D::~TextureStorage11_3D() TextureStorage11_3D::~TextureStorage11_3D()
{ {
if (mTexture) SafeRelease(mTexture);
{ SafeRelease(mSRV);
mTexture->Release();
mTexture = NULL;
}
if (mSRV) for (RenderTargetMap::iterator i = mLevelLayerRenderTargets.begin(); i != mLevelLayerRenderTargets.end(); i++)
{ {
mSRV->Release(); SafeDelete(i->second);
mSRV = NULL;
}
for (RenderTargetMap::const_iterator i = mLevelLayerRenderTargets.begin(); i != mLevelLayerRenderTargets.end(); i++)
{
RenderTarget11* renderTarget = i->second;
delete renderTarget;
} }
mLevelLayerRenderTargets.clear(); mLevelLayerRenderTargets.clear();
for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++) for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{ {
delete mLevelRenderTargets[i]; SafeDelete(mLevelRenderTargets[i]);
mLevelRenderTargets[i] = NULL;
} }
} }
...@@ -800,7 +769,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel) ...@@ -800,7 +769,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
if (result == E_OUTOFMEMORY) if (result == E_OUTOFMEMORY)
{ {
srv->Release(); SafeRelease(srv);
return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL)); return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL));
} }
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -855,7 +824,7 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer) ...@@ -855,7 +824,7 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
if (result == E_OUTOFMEMORY) if (result == E_OUTOFMEMORY)
{ {
srv->Release(); SafeRelease(srv);
return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL)); return gl::error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL));
} }
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -953,22 +922,12 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int level ...@@ -953,22 +922,12 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int level
TextureStorage11_2DArray::~TextureStorage11_2DArray() TextureStorage11_2DArray::~TextureStorage11_2DArray()
{ {
if (mTexture) SafeRelease(mTexture);
{ SafeRelease(mSRV);
mTexture->Release();
mTexture = NULL;
}
if (mSRV)
{
mSRV->Release();
mSRV = NULL;
}
for (RenderTargetMap::const_iterator i = mRenderTargets.begin(); i != mRenderTargets.end(); i++) for (RenderTargetMap::iterator i = mRenderTargets.begin(); i != mRenderTargets.end(); i++)
{ {
RenderTarget11* renderTarget = i->second; SafeDelete(i->second);
delete renderTarget;
} }
mRenderTargets.clear(); mRenderTargets.clear();
} }
......
...@@ -126,12 +126,8 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, int levels, GLenum in ...@@ -126,12 +126,8 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, int levels, GLenum in
TextureStorage9_2D::~TextureStorage9_2D() TextureStorage9_2D::~TextureStorage9_2D()
{ {
if (mTexture) SafeRelease(mTexture);
{ SafeDelete(mRenderTarget);
mTexture->Release();
}
delete mRenderTarget;
} }
TextureStorage9_2D *TextureStorage9_2D::makeTextureStorage9_2D(TextureStorage *storage) TextureStorage9_2D *TextureStorage9_2D::makeTextureStorage9_2D(TextureStorage *storage)
...@@ -176,8 +172,8 @@ void TextureStorage9_2D::generateMipmap(int level) ...@@ -176,8 +172,8 @@ void TextureStorage9_2D::generateMipmap(int level)
mRenderer->boxFilter(upper, lower); mRenderer->boxFilter(upper, lower);
} }
if (upper != NULL) upper->Release(); SafeRelease(upper);
if (lower != NULL) lower->Release(); SafeRelease(lower);
} }
IDirect3DBaseTexture9 *TextureStorage9_2D::getBaseTexture() const IDirect3DBaseTexture9 *TextureStorage9_2D::getBaseTexture() const
...@@ -229,14 +225,11 @@ TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, int levels, GLenu ...@@ -229,14 +225,11 @@ TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, int levels, GLenu
TextureStorage9_Cube::~TextureStorage9_Cube() TextureStorage9_Cube::~TextureStorage9_Cube()
{ {
if (mTexture) SafeRelease(mTexture);
{
mTexture->Release();
}
for (int i = 0; i < 6; ++i) for (int i = 0; i < 6; ++i)
{ {
delete mRenderTarget[i]; SafeDelete(mRenderTarget[i]);
} }
} }
...@@ -283,8 +276,8 @@ void TextureStorage9_Cube::generateMipmap(int face, int level) ...@@ -283,8 +276,8 @@ void TextureStorage9_Cube::generateMipmap(int face, int level)
mRenderer->boxFilter(upper, lower); mRenderer->boxFilter(upper, lower);
} }
if (upper != NULL) upper->Release(); SafeRelease(upper);
if (lower != NULL) lower->Release(); SafeRelease(lower);
} }
IDirect3DBaseTexture9 *TextureStorage9_Cube::getBaseTexture() const IDirect3DBaseTexture9 *TextureStorage9_Cube::getBaseTexture() const
......
...@@ -66,20 +66,12 @@ VertexBuffer11::VertexBuffer11(rx::Renderer11 *const renderer) : mRenderer(rende ...@@ -66,20 +66,12 @@ VertexBuffer11::VertexBuffer11(rx::Renderer11 *const renderer) : mRenderer(rende
VertexBuffer11::~VertexBuffer11() VertexBuffer11::~VertexBuffer11()
{ {
if (mBuffer) SafeRelease(mBuffer);
{
mBuffer->Release();
mBuffer = NULL;
}
} }
bool VertexBuffer11::initialize(unsigned int size, bool dynamicUsage) bool VertexBuffer11::initialize(unsigned int size, bool dynamicUsage)
{ {
if (mBuffer) SafeRelease(mBuffer);
{
mBuffer->Release();
mBuffer = NULL;
}
updateSerial(); updateSerial();
......
...@@ -36,20 +36,12 @@ VertexBuffer9::VertexBuffer9(rx::Renderer9 *const renderer) : mRenderer(renderer ...@@ -36,20 +36,12 @@ VertexBuffer9::VertexBuffer9(rx::Renderer9 *const renderer) : mRenderer(renderer
VertexBuffer9::~VertexBuffer9() VertexBuffer9::~VertexBuffer9()
{ {
if (mVertexBuffer) SafeRelease(mVertexBuffer);
{
mVertexBuffer->Release();
mVertexBuffer = NULL;
}
} }
bool VertexBuffer9::initialize(unsigned int size, bool dynamicUsage) bool VertexBuffer9::initialize(unsigned int size, bool dynamicUsage)
{ {
if (mVertexBuffer) SafeRelease(mVertexBuffer);
{
mVertexBuffer->Release();
mVertexBuffer = NULL;
}
updateSerial(); updateSerial();
......
...@@ -36,10 +36,7 @@ VertexDeclarationCache::~VertexDeclarationCache() ...@@ -36,10 +36,7 @@ VertexDeclarationCache::~VertexDeclarationCache()
{ {
for (int i = 0; i < NUM_VERTEX_DECL_CACHE_ENTRIES; i++) for (int i = 0; i < NUM_VERTEX_DECL_CACHE_ENTRIES; i++)
{ {
if (mVertexDeclCache[i].vertexDeclaration) SafeRelease(mVertexDeclCache[i].vertexDeclaration);
{
mVertexDeclCache[i].vertexDeclaration->Release();
}
} }
} }
...@@ -188,8 +185,7 @@ GLenum VertexDeclarationCache::applyDeclaration(IDirect3DDevice9 *device, Transl ...@@ -188,8 +185,7 @@ GLenum VertexDeclarationCache::applyDeclaration(IDirect3DDevice9 *device, Transl
if (lastCache->vertexDeclaration != NULL) if (lastCache->vertexDeclaration != NULL)
{ {
lastCache->vertexDeclaration->Release(); SafeRelease(lastCache->vertexDeclaration);
lastCache->vertexDeclaration = NULL;
// mLastSetVDecl is set to the replacement, so we don't have to worry // mLastSetVDecl is set to the replacement, so we don't have to worry
// about it. // about it.
} }
......
...@@ -76,10 +76,7 @@ outType* DynamicCastComObject(IUnknown* object) ...@@ -76,10 +76,7 @@ outType* DynamicCastComObject(IUnknown* object)
} }
else else
{ {
if (outObject) SafeRelease(outObject);
{
outObject->Release();
}
return NULL; return NULL;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment