[vlc-commits] direct3d11: move the shader compiler handling in a separate file

Steve Lhomme git at videolan.org
Wed Feb 10 11:06:48 UTC 2021


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Tue Feb  9 15:48:45 2021 +0100| [6c312eba4f0d8a7353f87749a47d3b07f9adf9ce] | committer: Steve Lhomme

direct3d11: move the shader compiler handling in a separate file

The shader compiler doesn't depend on the D3D version.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6c312eba4f0d8a7353f87749a47d3b07f9adf9ce
---

 modules/video_output/Makefile.am           |  1 +
 modules/video_output/win32/d3d11_shaders.c | 47 ------------------
 modules/video_output/win32/d3d11_shaders.h | 12 +----
 modules/video_output/win32/d3d_shaders.c   | 76 ++++++++++++++++++++++++++++++
 modules/video_output/win32/d3d_shaders.h   | 37 +++++++++++++++
 modules/video_output/win32/direct3d11.c    |  4 +-
 6 files changed, 118 insertions(+), 59 deletions(-)

diff --git a/modules/video_output/Makefile.am b/modules/video_output/Makefile.am
index 36658aa4d7..5900db1c19 100644
--- a/modules/video_output/Makefile.am
+++ b/modules/video_output/Makefile.am
@@ -134,6 +134,7 @@ endif
 libdirect3d11_plugin_la_SOURCES = video_output/win32/direct3d11.c \
  video_output/win32/d3d11_quad.c video_output/win32/d3d11_quad.h \
  video_output/win32/d3d11_shaders.c video_output/win32/d3d11_shaders.h \
+ video_output/win32/d3d_shaders.c video_output/win32/d3d_shaders.h \
  video_output/win32/d3d11_swapchain.c video_output/win32/d3d11_swapchain.h \
  video_output/win32/dxgi_swapchain.c video_output/win32/dxgi_swapchain.h \
  video_output/win32/common.c video_output/win32/common.h
diff --git a/modules/video_output/win32/d3d11_shaders.c b/modules/video_output/win32/d3d11_shaders.c
index 42e4dc1d77..11d6c979da 100644
--- a/modules/video_output/win32/d3d11_shaders.c
+++ b/modules/video_output/win32/d3d11_shaders.c
@@ -840,50 +840,3 @@ HRESULT (D3D11_CompileProjectionVertexShader)(vlc_object_t *obj, const d3d_shade
 {
     return D3D11_CompileVertexShader(obj, compiler, d3d_dev, globVertexShaderProjection, output);
 }
-
-#if !VLC_WINSTORE_APP
-static HINSTANCE Direct3D11LoadShaderLibrary(void)
-{
-    HINSTANCE instance = NULL;
-    /* d3dcompiler_47 is the latest on windows 8.1 */
-    for (int i = 47; i > 41; --i) {
-        WCHAR filename[19];
-        _snwprintf(filename, 19, TEXT("D3DCOMPILER_%d.dll"), i);
-        instance = LoadLibrary(filename);
-        if (instance) break;
-    }
-    return instance;
-}
-#endif // !VLC_WINSTORE_APP
-
-int (D3D11_InitShaders)(vlc_object_t *obj, d3d_shader_compiler_t *compiler)
-{
-#if !VLC_WINSTORE_APP
-    compiler->compiler_dll = Direct3D11LoadShaderLibrary();
-    if (!compiler->compiler_dll) {
-        msg_Err(obj, "cannot load d3dcompiler.dll, aborting");
-        return VLC_EGENERIC;
-    }
-
-    compiler->OurD3DCompile = (void *)GetProcAddress(compiler->compiler_dll, "D3DCompile");
-    if (!compiler->OurD3DCompile) {
-        msg_Err(obj, "Cannot locate reference to D3DCompile in d3dcompiler DLL");
-        FreeLibrary(compiler->compiler_dll);
-        return VLC_EGENERIC;
-    }
-#endif // !VLC_WINSTORE_APP
-
-    return VLC_SUCCESS;
-}
-
-void D3D11_ReleaseShaders(d3d_shader_compiler_t *compiler)
-{
-#if !VLC_WINSTORE_APP
-    if (compiler->compiler_dll)
-    {
-        FreeLibrary(compiler->compiler_dll);
-        compiler->compiler_dll = NULL;
-    }
-    compiler->OurD3DCompile = NULL;
-#endif // !VLC_WINSTORE_APP
-}
diff --git a/modules/video_output/win32/d3d11_shaders.h b/modules/video_output/win32/d3d11_shaders.h
index dc0f89b7f3..e019efc19e 100644
--- a/modules/video_output/win32/d3d11_shaders.h
+++ b/modules/video_output/win32/d3d11_shaders.h
@@ -23,17 +23,12 @@
 #ifndef VLC_D3D11_SHADERS_H
 #define VLC_D3D11_SHADERS_H
 
-#include <d3dcompiler.h>
 #include "../../video_chroma/d3d11_fmt.h"
 
-typedef struct
-{
-    HINSTANCE                 compiler_dll; /* handle of the opened d3dcompiler dll */
-    pD3DCompile               OurD3DCompile;
-} d3d_shader_compiler_t;
-
 #include <vlc_es.h>
 
+#include "d3d_shaders.h"
+
 #define DEFAULT_BRIGHTNESS         100
 #define DEFAULT_SRGB_BRIGHTNESS    100
 #define MAX_HLG_BRIGHTNESS        1000
@@ -102,9 +97,6 @@ typedef struct
     VS_PROJECTION_CONST       vertexConstants;
 } d3d11_quad_t;
 
-int D3D11_InitShaders(vlc_object_t *, d3d_shader_compiler_t *);
-void D3D11_ReleaseShaders(d3d_shader_compiler_t *);
-
 HRESULT D3D11_CompilePixelShader(vlc_object_t *, const d3d_shader_compiler_t *,
                                  d3d11_device_t *, bool texture_array, size_t texture_count,
                                  const display_info_t *, bool sharp,
diff --git a/modules/video_output/win32/d3d_shaders.c b/modules/video_output/win32/d3d_shaders.c
new file mode 100644
index 0000000000..5d8ac4adc3
--- /dev/null
+++ b/modules/video_output/win32/d3d_shaders.c
@@ -0,0 +1,76 @@
+/*****************************************************************************
+ * d3d_shaders.c: Direct3D Shader APIs
+ *****************************************************************************
+ * Copyright (C) 2017-2021 VLC authors and VideoLAN
+ *
+ * Authors: Steve Lhomme <robux4 at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+
+#include "d3d_shaders.h"
+
+#if !VLC_WINSTORE_APP
+static HINSTANCE Direct3D11LoadShaderLibrary(void)
+{
+    HINSTANCE instance = NULL;
+    /* d3dcompiler_47 is the latest on windows 8.1 */
+    for (int i = 47; i > 41; --i) {
+        WCHAR filename[19];
+        _snwprintf(filename, 19, TEXT("D3DCOMPILER_%d.dll"), i);
+        instance = LoadLibrary(filename);
+        if (instance) break;
+    }
+    return instance;
+}
+#endif // !VLC_WINSTORE_APP
+
+int (D3D_InitShaders)(vlc_object_t *obj, d3d_shader_compiler_t *compiler)
+{
+#if !VLC_WINSTORE_APP
+    compiler->compiler_dll = Direct3D11LoadShaderLibrary();
+    if (!compiler->compiler_dll) {
+        msg_Err(obj, "cannot load d3dcompiler.dll, aborting");
+        return VLC_EGENERIC;
+    }
+
+    compiler->OurD3DCompile = (void *)GetProcAddress(compiler->compiler_dll, "D3DCompile");
+    if (!compiler->OurD3DCompile) {
+        msg_Err(obj, "Cannot locate reference to D3DCompile in d3dcompiler DLL");
+        FreeLibrary(compiler->compiler_dll);
+        return VLC_EGENERIC;
+    }
+#endif // !VLC_WINSTORE_APP
+
+    return VLC_SUCCESS;
+}
+
+void D3D_ReleaseShaders(d3d_shader_compiler_t *compiler)
+{
+#if !VLC_WINSTORE_APP
+    if (compiler->compiler_dll)
+    {
+        FreeLibrary(compiler->compiler_dll);
+        compiler->compiler_dll = NULL;
+    }
+    compiler->OurD3DCompile = NULL;
+#endif // !VLC_WINSTORE_APP
+}
diff --git a/modules/video_output/win32/d3d_shaders.h b/modules/video_output/win32/d3d_shaders.h
new file mode 100644
index 0000000000..227859d1db
--- /dev/null
+++ b/modules/video_output/win32/d3d_shaders.h
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * d3d_shaders.h: Direct3D Shaders
+ *****************************************************************************
+ * Copyright (C) 2017-2021 VLC authors and VideoLAN
+ *
+ * Authors: Steve Lhomme <robux4 at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifndef VLC_D3D_SHADERS_H
+#define VLC_D3D_SHADERS_H
+
+#include <d3dcompiler.h> // for pD3DCompile
+
+typedef struct
+{
+    HINSTANCE                 compiler_dll; /* handle of the opened d3dcompiler dll */
+    pD3DCompile               OurD3DCompile;
+} d3d_shader_compiler_t;
+
+int D3D_InitShaders(vlc_object_t *, d3d_shader_compiler_t *);
+void D3D_ReleaseShaders(d3d_shader_compiler_t *);
+
+#endif /* VLC_D3D_SHADERS_H */
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index f34602cde4..24ab12d7c2 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -358,7 +358,7 @@ static int Open(vout_display_t *vd, const vout_display_cfg_t *cfg,
     if (!sys)
         return VLC_ENOMEM;
 
-    int ret = D3D11_InitShaders(VLC_OBJECT(vd), &sys->shaders);
+    int ret = D3D_InitShaders(VLC_OBJECT(vd), &sys->shaders);
     if (ret != VLC_SUCCESS)
         goto error;
 
@@ -450,7 +450,7 @@ error:
 
 static void Close(vout_display_t *vd)
 {
-    D3D11_ReleaseShaders(&vd->sys->shaders);
+    D3D_ReleaseShaders(&vd->sys->shaders);
     Direct3D11Close(vd);
 #if !VLC_WINSTORE_APP
     UnhookWindowsSensors(vd->sys->p_sensors);



More information about the vlc-commits mailing list