[vlc-commits] [Git][videolan/vlc][master] d3d11: add support for rendering YV12 pictures

Jean-Baptiste Kempf (@jbk) gitlab at videolan.org
Thu Oct 15 10:39:28 UTC 2026



Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC


Commits:
d921342a by Steve Lhomme at 2026-10-15T12:30:19+02:00
d3d11: add support for rendering YV12 pictures

YV12 is just like I420 with the V and U planes switched.

- - - - -


2 changed files:

- modules/video_chroma/dxgi_fmt.c
- modules/video_output/win32/d3d_dynamic_shader.c


Changes:

=====================================
modules/video_chroma/dxgi_fmt.c
=====================================
@@ -84,6 +84,7 @@ static const d3d_format_t d3d_formats[] = {
     { "NV11",     DXGI_FORMAT_NV11,   DXGI_FORMAT_UNKNOWN,        VLC_CODEC_I411,          8, 4, 1,  0, 1, { DXGI_FORMAT_R8_UNORM,           DXGI_FORMAT_R8G8_UNORM} },
 #endif
     { "I420",     DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN,        VLC_CODEC_I420,          8, 2, 2,  0, 1, { DXGI_FORMAT_R8_UNORM,      DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM } },
+    { "YV12",     DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN,        VLC_CODEC_YV12,          8, 2, 2,  0, 1, { DXGI_FORMAT_R8_UNORM,      DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM } },
     { "I420_10",  DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN,        VLC_CODEC_I420_10L,     10, 2, 2,  0, 1, { DXGI_FORMAT_R16_UNORM,     DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16_UNORM } },
     { "I40A",     DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN,        VLC_CODEC_YUV420A,       8, 2, 2,  8, 1, { DXGI_FORMAT_R8_UNORM,      DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM } },
     { "I422_10",  DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN,        VLC_CODEC_I422_10L,     10, 2, 1,  0, 1 << 6, { DXGI_FORMAT_R16_UNORM,     DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16_UNORM } },


=====================================
modules/video_output/win32/d3d_dynamic_shader.c
=====================================
@@ -75,6 +75,7 @@ struct PS_INPUT\n\
 #define SAMPLE_AYUV_TO_YUVA          5\n\
 #define SAMPLE_RGBA_TO_RGBA          6\n\
 #define SAMPLE_TRIPLANAR_TO_YUVA     7\n\
+#define SAMPLE_TRIPLANARVU_TO_YUVA  18\n\
 #define SAMPLE_TRIPLANAR10_TO_YUVA   8\n\
 #define SAMPLE_PLANAR_YUVA_TO_YUVA   9\n\
 #define SAMPLE_BGRX_TO_RGBA         17\n\
@@ -207,6 +208,11 @@ inline float4 sampleTexture(SamplerState samplerState, float2 coords) {\n\
     sample.y  = shaderTexture[1].Sample(samplerState, coords).x;\n\
     sample.z  = shaderTexture[2].Sample(samplerState, coords).x;\n\
     sample.a  = 1;\n\
+#elif (SAMPLE_TEXTURES==SAMPLE_TRIPLANARVU_TO_YUVA)\n\
+    sample.x  = shaderTexture[0].Sample(samplerState, coords).x;\n\
+    sample.y  = shaderTexture[2].Sample(samplerState, coords).x;\n\
+    sample.z  = shaderTexture[1].Sample(samplerState, coords).x;\n\
+    sample.a  = 1;\n\
 #elif (SAMPLE_TEXTURES==SAMPLE_TRIPLANAR10_TO_YUVA)\n\
     sample.x  = shaderTexture[0].Sample(samplerState, coords).x;\n\
     sample.y  = shaderTexture[1].Sample(samplerState, coords).x;\n\
@@ -539,6 +545,10 @@ HRESULT (D3D_CompilePixelShader)(vlc_object_t *o,
                 psz_sampler[0] = "SAMPLE_TRIPLANAR_TO_YUVA";
                 psz_shader_resource_views[0] = "3"; shader_views[0] = 3;
                 break;
+            case VLC_CODEC_YV12:
+                psz_sampler[0] = "SAMPLE_TRIPLANARVU_TO_YUVA";
+                psz_shader_resource_views[0] = "3"; shader_views[0] = 3;
+                break;
             case VLC_CODEC_YUVA:
             case VLC_CODEC_YUV420A:
                 psz_sampler[0] = "SAMPLE_PLANAR_YUVA_TO_YUVA";



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/d921342a58297863cd3e5aa84509e42bf046bd8d

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/d921342a58297863cd3e5aa84509e42bf046bd8d
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help




More information about the vlc-commits mailing list