[vlc-devel] [PATCH 1/2] direct3d11: fix the non-RGB texture creation with odd dimensions

Steve Lhomme robux4 at videolabs.io
Tue Jul 11 16:24:17 CEST 2017


This case happens when decoding when decoding in software. For example a JPEG.
---
 modules/video_output/win32/direct3d11.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index 9b6a879ef5..bf49b87e7e 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -675,6 +675,12 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned pool_size)
         surface_fmt.i_width  = (surface_fmt.i_width  + 0x7F) & ~0x7F;
         surface_fmt.i_height = (surface_fmt.i_height + 0x7F) & ~0x7F;
     }
+    else if ( sys->picQuadConfig->formatTexture != DXGI_FORMAT_R8G8B8A8_UNORM &&
+              sys->picQuadConfig->formatTexture != DXGI_FORMAT_B5G6R5_UNORM )
+    {
+        surface_fmt.i_width  = (surface_fmt.i_width  + 0x01) & ~0x01;
+        surface_fmt.i_height = (surface_fmt.i_height + 0x01) & ~0x01;
+    }
 
     if (AllocateTextures(vd, sys->picQuadConfig, &surface_fmt, pool_size, textures,
                          true))
@@ -732,6 +738,12 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned pool_size)
         video_format_Copy(&staging_fmt, &surface_fmt);
         staging_fmt.i_width = staging_fmt.i_visible_width;
         staging_fmt.i_height = staging_fmt.i_visible_height;
+        if ( sys->picQuadConfig->formatTexture != DXGI_FORMAT_R8G8B8A8_UNORM &&
+             sys->picQuadConfig->formatTexture != DXGI_FORMAT_B5G6R5_UNORM )
+        {
+            staging_fmt.i_width  = (staging_fmt.i_width  + 0x01) & ~0x01;
+            staging_fmt.i_height = (staging_fmt.i_height + 0x01) & ~0x01;
+        }
         if (AllocateTextures(vd, sys->picQuadConfig, &staging_fmt, 1, textures, true))
             goto error;
 
-- 
2.12.1



More information about the vlc-devel mailing list