[vlc-devel] [PATCH 10/15] direct3d11: keep a reference to the pixel shader longer
Steve Lhomme
robux4 at videolabs.io
Wed Feb 8 14:26:57 CET 2017
---
modules/video_output/win32/direct3d11.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index 35a6712..8934327 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -133,6 +133,7 @@ struct vout_display_sys_t
ID3D11DeviceContext *d3dcontext; /* D3D context */
d3d_quad_t picQuad;
const d3d_format_t *picQuadConfig;
+ ID3D11PixelShader *picQuadPixelShader;
ID3D11RenderTargetView *d3drenderTargetView;
ID3D11DepthStencilView *d3ddepthStencilView;
@@ -1565,8 +1566,7 @@ static int Direct3D11CreateResources(vout_display_t *vd, video_format_t *fmt)
vd->info.is_slow = !is_d3d11_opaque(fmt->i_chroma);
- ID3D11PixelShader *pPicQuadShader;
- hr = CompilePixelShader(vd, sys->d3dPxShader, &pPicQuadShader);
+ hr = CompilePixelShader(vd, sys->d3dPxShader, &sys->picQuadPixelShader);
if (FAILED(hr))
{
msg_Err(vd, "Failed to create the pixel shader. (hr=0x%lX)", hr);
@@ -1578,7 +1578,8 @@ static int Direct3D11CreateResources(vout_display_t *vd, video_format_t *fmt)
hr = CompilePixelShader(vd, sys->psz_rgbaPxShader, &sys->pSPUPixelShader);
if (FAILED(hr))
{
- ID3D11PixelShader_Release(pPicQuadShader);
+ ID3D11PixelShader_Release(sys->picQuadPixelShader);
+ sys->picQuadPixelShader = NULL;
msg_Err(vd, "Failed to create the SPU pixel shader. (hr=0x%lX)", hr);
return VLC_EGENERIC;
}
@@ -1629,13 +1630,12 @@ static int Direct3D11CreateResources(vout_display_t *vd, video_format_t *fmt)
}
ID3D10Blob_Release(pVSBlob);
- if (AllocQuad( vd, fmt, &sys->picQuad, sys->picQuadConfig, pPicQuadShader,
+ if (AllocQuad( vd, fmt, &sys->picQuad, sys->picQuadConfig, sys->picQuadPixelShader,
vd->fmt.projection_mode) != VLC_SUCCESS) {
- ID3D11PixelShader_Release(pPicQuadShader);
+ ID3D11PixelShader_Release(sys->picQuadPixelShader);
msg_Err(vd, "Could not Create the main quad picture. (hr=0x%lX)", hr);
return VLC_EGENERIC;
}
- ID3D11PixelShader_Release(pPicQuadShader);
ID3D11DeviceContext_IASetPrimitiveTopology(sys->d3dcontext, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
@@ -2180,6 +2180,11 @@ static void Direct3D11DestroyResources(vout_display_t *vd)
ID3D11VertexShader_Release(sys->pSPUPixelShader);
sys->pSPUPixelShader = NULL;
}
+ if (sys->picQuadPixelShader)
+ {
+ ID3D11PixelShader_Release(sys->picQuadPixelShader);
+ sys->picQuadPixelShader = NULL;
+ }
#if defined(HAVE_ID3D11VIDEODECODER)
if( sys->context_lock != INVALID_HANDLE_VALUE )
{
--
2.10.2
More information about the vlc-devel
mailing list