From 77425ef83b70f51a113b4dceee729e875fd7e418 Mon Sep 17 00:00:00 2001 From: Silent Date: Sun, 21 Jul 2019 15:57:15 +0200 Subject: [PATCH] D3D11: Ownership fixes for objects in D3DState --- Source/Core/VideoBackends/D3D/D3DState.cpp | 27 +++++++++------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/D3DState.cpp b/Source/Core/VideoBackends/D3D/D3DState.cpp index 15e84f2018..a7b56145da 100644 --- a/Source/Core/VideoBackends/D3D/D3DState.cpp +++ b/Source/Core/VideoBackends/D3D/D3DState.cpp @@ -347,10 +347,9 @@ ID3D11SamplerState* StateCache::Get(SamplerState state) } ComPtr res; - HRESULT hr = D3D::device->CreateSamplerState(&sampdc, &res); + HRESULT hr = D3D::device->CreateSamplerState(&sampdc, res.GetAddressOf()); CHECK(SUCCEEDED(hr), "Creating D3D sampler state failed"); - m_sampler.emplace(state.hex, res); - return res.Get(); + return m_sampler.emplace(state.hex, std::move(res)).first->second.Get(); } ID3D11BlendState* StateCache::Get(BlendingState state) @@ -381,12 +380,11 @@ ID3D11BlendState* StateCache::Get(BlendingState state) tdesc.LogicOpEnable = TRUE; tdesc.LogicOp = logic_ops[state.logicmode]; - ID3D11BlendState1* res; - HRESULT hr = D3D::device1->CreateBlendState1(&desc, &res); + ComPtr res; + HRESULT hr = D3D::device1->CreateBlendState1(&desc, res.GetAddressOf()); if (SUCCEEDED(hr)) { - m_blend.emplace(state.hex, res); - return res; + return m_blend.emplace(state.hex, std::move(res)).first->second.Get(); } } @@ -425,10 +423,9 @@ ID3D11BlendState* StateCache::Get(BlendingState state) tdesc.BlendOpAlpha = state.subtractAlpha ? D3D11_BLEND_OP_REV_SUBTRACT : D3D11_BLEND_OP_ADD; ComPtr res; - HRESULT hr = D3D::device->CreateBlendState(&desc, &res); + HRESULT hr = D3D::device->CreateBlendState(&desc, res.GetAddressOf()); CHECK(SUCCEEDED(hr), "Creating D3D blend state failed"); - m_blend.emplace(state.hex, res); - return res.Get(); + return m_blend.emplace(state.hex, std::move(res)).first->second.Get(); } ID3D11RasterizerState* StateCache::Get(RasterizationState state) @@ -447,10 +444,9 @@ ID3D11RasterizerState* StateCache::Get(RasterizationState state) desc.ScissorEnable = TRUE; ComPtr res; - HRESULT hr = D3D::device->CreateRasterizerState(&desc, &res); + HRESULT hr = D3D::device->CreateRasterizerState(&desc, res.GetAddressOf()); CHECK(SUCCEEDED(hr), "Creating D3D rasterizer state failed"); - m_raster.emplace(state.hex, res); - return res.Get(); + return m_raster.emplace(state.hex, std::move(res)).first->second.Get(); } ID3D11DepthStencilState* StateCache::Get(DepthState state) @@ -490,10 +486,9 @@ ID3D11DepthStencilState* StateCache::Get(DepthState state) } ComPtr res; - HRESULT hr = D3D::device->CreateDepthStencilState(&depthdc, &res); + HRESULT hr = D3D::device->CreateDepthStencilState(&depthdc, res.GetAddressOf()); CHECK(SUCCEEDED(hr), "Creating D3D depth stencil state failed"); - m_depth.emplace(state.hex, res); - return res.Get(); + return m_depth.emplace(state.hex, std::move(res)).first->second.Get(); } D3D11_PRIMITIVE_TOPOLOGY StateCache::GetPrimitiveTopology(PrimitiveType primitive)