Assorted fixes for memory leaks etc

This commit is contained in:
Henrik Rydgård 2017-02-10 14:41:32 +01:00
parent 7750ee9f7b
commit f7717063a8
8 changed files with 21 additions and 22 deletions

View file

@ -120,6 +120,9 @@ FramebufferManagerD3D11::FramebufferManagerD3D11(Draw::DrawContext *draw)
FramebufferManagerD3D11::~FramebufferManagerD3D11() {
// Drawing cleanup
if (vbFullScreenRect_) {
vbFullScreenRect_->Release();
}
if (pFramebufferVertexShader_) {
pFramebufferVertexShader_->Release();
pFramebufferVertexShader_ = nullptr;
@ -132,6 +135,9 @@ FramebufferManagerD3D11::~FramebufferManagerD3D11() {
if (drawPixelsTex_) {
drawPixelsTex_->Release();
}
if (drawPixelsTexView_) {
drawPixelsTexView_->Release();
}
// FBO cleanup
for (auto it = tempFBOs_.begin(), end = tempFBOs_.end(); it != end; ++it) {

View file

@ -127,7 +127,7 @@ private:
ShaderManagerD3D11 *shaderManager_;
DrawEngineD3D11 *drawEngine_;
ID3D11Buffer *vbFullScreenRect_;
ID3D11Buffer *vbFullScreenRect_ = nullptr;
UINT vbFullScreenStride_ = 20;
UINT vbFullScreenOffset_ = 0;

View file

@ -479,9 +479,11 @@ GPU_D3D11::GPU_D3D11(GraphicsContext *gfxCtx, Draw::DrawContext *draw)
GPU_D3D11::~GPU_D3D11() {
delete depalShaderCache_;
framebufferManagerD3D11_->DestroyAllFBOs(true);
delete framebufferManagerD3D11_;
shaderManagerD3D11_->ClearShaders();
draw_->BindPipeline(nullptr);
delete shaderManagerD3D11_;
delete textureCacheD3D11_;
draw_->BindPipeline(nullptr);
stockD3D11.Destroy();
}

View file

@ -1110,8 +1110,9 @@ void TextureCacheD3D11::LoadTextureLevel(TexCacheEntry &entry, ReplacedTexture &
tfmt = DXGI_FORMAT_R8G8B8A8_UNORM;
}
}
D3D11_TEXTURE2D_DESC desc{};
// TODO: Make it immutable, will requires some code restructuring though.
// TODO: Make it DEFAULT or immutable, required for multiple mip levels. Will require some code restructuring though.
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.ArraySize = 1;

View file

@ -513,6 +513,8 @@ void GPU_DX9::CheckGPUFeatures() {
GPU_DX9::~GPU_DX9() {
framebufferManagerDX9_->DestroyAllFBOs(true);
delete framebufferManagerDX9_;
delete textureCache_;
shaderManagerDX9_->ClearCache(true);
delete shaderManagerDX9_;
}

View file

@ -495,7 +495,8 @@ GPU_GLES::~GPU_GLES() {
}
delete shaderManagerGL_;
shaderManagerGL_ = nullptr;
delete framebufferManagerGL_;
delete textureCacheGL_;
#ifdef _WIN32
gfxCtx_->SwapInterval(0);
#endif

View file

@ -54,7 +54,6 @@ GPUCommon::GPUCommon(GraphicsContext *gfxCtx, Draw::DrawContext *draw) :
}
GPUCommon::~GPUCommon() {
delete framebufferManager_;
}
void GPUCommon::BeginHostFrame() {

View file

@ -111,6 +111,11 @@ void D3D11Context::Resize() {
}
void D3D11Context::Shutdown() {
delete draw_;
draw_ = nullptr;
context_->ClearState();
context_->Flush();
#ifdef _DEBUG
d3dInfoQueue_->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_CORRUPTION, false);
d3dInfoQueue_->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_ERROR, false);
@ -121,27 +126,10 @@ void D3D11Context::Shutdown() {
#endif
d3dDebug_->Release();
d3dInfoQueue_->Release();
context_->ClearState();
context_->Flush();
delete draw_;
draw_ = nullptr;
context_->Release();
context_ = nullptr;
device_->Release();
device_ = nullptr;
/*
DX9::DestroyShaders();
device->EndScene();
device->Release();
d3d->Release();
UnloadD3DXDynamic();
DX9::pD3Ddevice = nullptr;
DX9::pD3DdeviceEx = nullptr;
DX9::pD3D = nullptr;
*/
hWnd_ = nullptr;
// FreeLibrary(hD3D11);
// hD3D11 = nullptr;
}