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