[vlc-devel] [PATCH 4/4] direct3d11: make sure there's no pending operation after leaving Prepare()
Steve Lhomme
robux4 at videolabs.io
Mon Apr 10 18:05:10 CEST 2017
--
replaces https://patches.videolan.org/patch/16348/
- do it all the time
- wrap the subpicture handling which was not protecting the context
---
modules/video_output/win32/direct3d11.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index 34b0a651e6..c014bccb9f 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -1202,15 +1202,13 @@ static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
{
vout_display_sys_t *sys = vd->sys;
+#if defined(HAVE_ID3D11VIDEODECODER)
+ if( sys->context_lock != INVALID_HANDLE_VALUE )
+ WaitForSingleObjectEx( sys->context_lock, INFINITE, FALSE );
+#endif
if (!is_d3d11_opaque(picture->format.i_chroma) || sys->legacy_shader) {
picture_sys_t *p_sys = picture->p_sys;
D3D11_TEXTURE2D_DESC texDesc;
-#if defined(HAVE_ID3D11VIDEODECODER)
- if( sys->context_lock != INVALID_HANDLE_VALUE )
- {
- WaitForSingleObjectEx( sys->context_lock, INFINITE, FALSE );
- }
-#endif
if (!is_d3d11_opaque(picture->format.i_chroma))
Direct3D11UnmapPoolTexture(picture);
ID3D11Texture2D_GetDesc(sys->stagingSys.texture[0], &texDesc);
@@ -1226,10 +1224,6 @@ static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
0, 0, 0, 0,
p_sys->resource[KNOWN_DXGI_INDEX],
p_sys->slice_index, &box);
-#if defined(HAVE_ID3D11VIDEODECODER)
- if ( sys->context_lock != INVALID_HANDLE_VALUE)
- ReleaseMutex( sys->context_lock );
-#endif
}
if (subpicture) {
@@ -1240,6 +1234,12 @@ static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
sys->d3dregion_count = subpicture_region_count;
sys->d3dregions = subpicture_regions;
}
+
+ ID3D11DeviceContext_Flush(sys->d3dcontext);
+#if defined(HAVE_ID3D11VIDEODECODER)
+ if ( sys->context_lock != INVALID_HANDLE_VALUE)
+ ReleaseMutex( sys->context_lock );
+#endif
}
static void DisplayD3DPicture(vout_display_sys_t *sys, d3d_quad_t *quad, ID3D11ShaderResourceView *resourceView[D3D11_MAX_SHADER_VIEW])
--
2.11.1
More information about the vlc-devel
mailing list