[vlc-devel] [PATCH 11/14] direct3d9: remove the intermediate d3dctx from the openGL module

Steve Lhomme robux4 at videolabs.io
Sat Nov 18 14:26:44 CET 2017


---
 modules/video_output/win32/direct3d9.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/modules/video_output/win32/direct3d9.c b/modules/video_output/win32/direct3d9.c
index 393be60651..88e40a07c0 100644
--- a/modules/video_output/win32/direct3d9.c
+++ b/modules/video_output/win32/direct3d9.c
@@ -174,7 +174,7 @@ static const d3d_format_t *Direct3DFindFormat(vout_display_t *vd, vlc_fourcc_t c
 
 static int  Open(vlc_object_t *);
 
-static picture_pool_t *Direct3D9CreatePicturePool  (vlc_object_t *, struct d3dctx *,
+static picture_pool_t *Direct3D9CreatePicturePool  (vlc_object_t *, d3d9_device_t *,
      const d3d_format_t *, const video_format_t *, unsigned);
 
 static void           Prepare(vout_display_t *, picture_t *, subpicture_t *subpicture);
@@ -403,7 +403,7 @@ static void Direct3D9UnlockSurface(picture_t *picture)
 
 /* */
 static picture_pool_t *Direct3D9CreatePicturePool(vlc_object_t *o,
-    struct d3dctx *d3dctx, const d3d_format_t *default_d3dfmt, const video_format_t *fmt, unsigned count)
+    d3d9_device_t *p_d3d9_dev, const d3d_format_t *default_d3dfmt, const video_format_t *fmt, unsigned count)
 {
     picture_pool_t*   pool = NULL;
     picture_t**       pictures = NULL;
@@ -435,7 +435,7 @@ static picture_pool_t *Direct3D9CreatePicturePool(vlc_object_t *o,
         if (unlikely(picsys == NULL))
             goto error;
 
-        HRESULT hr = IDirect3DDevice9_CreateOffscreenPlainSurface(d3dctx->d3d_dev.dev,
+        HRESULT hr = IDirect3DDevice9_CreateOffscreenPlainSurface(p_d3d9_dev->dev,
                                                           fmt->i_width,
                                                           fmt->i_height,
                                                           format,
@@ -487,7 +487,7 @@ static picture_pool_t *DisplayPool(vout_display_t *vd, unsigned count)
 {
     if ( vd->sys->sys.pool != NULL )
         return vd->sys->sys.pool;
-    vd->sys->sys.pool = Direct3D9CreatePicturePool(VLC_OBJECT(vd), &vd->sys->d3dctx,
+    vd->sys->sys.pool = Direct3D9CreatePicturePool(VLC_OBJECT(vd), &vd->sys->d3dctx.d3d_dev,
         vd->sys->d3dtexture_format, &vd->fmt, count);
     return vd->sys->sys.pool;
 }
@@ -1799,7 +1799,8 @@ struct wgl_vt {
 struct glpriv
 {
     struct wgl_vt vt;
-    struct d3dctx d3dctx;
+    d3d9_handle_t hd3d;
+    d3d9_device_t d3d_dev;
     HANDLE gl_handle_d3d;
     HANDLE gl_render;
     IDirect3DSurface9 *dx_render;
@@ -1830,7 +1831,7 @@ GLConvUpdate(const opengl_tex_converter_t *tc, GLuint *textures,
         .right = pic->format.i_visible_width,
         .bottom = pic->format.i_visible_height
     };
-    hr = IDirect3DDevice9Ex_StretchRect(priv->d3dctx.d3d_dev.devex, picsys->surface,
+    hr = IDirect3DDevice9Ex_StretchRect(priv->d3d_dev.devex, picsys->surface,
                                         &rect, priv->dx_render, NULL, D3DTEXF_NONE);
     if (FAILED(hr))
     {
@@ -1851,7 +1852,7 @@ static picture_pool_t *
 GLConvGetPool(const opengl_tex_converter_t *tc, unsigned requested_count)
 {
     struct glpriv *priv = tc->priv;
-    return Direct3D9CreatePicturePool(VLC_OBJECT(tc->gl), &priv->d3dctx, NULL,
+    return Direct3D9CreatePicturePool(VLC_OBJECT(tc->gl), &priv->d3d_dev, NULL,
                                       &tc->fmt, requested_count);
 }
 
@@ -1910,8 +1911,8 @@ GLConvClose(vlc_object_t *obj)
     if (priv->dx_render)
         IDirect3DSurface9_Release(priv->dx_render);
 
-    D3D9_ReleaseDevice(&priv->d3dctx.d3d_dev);
-    D3D9_Destroy(&priv->d3dctx.hd3d);
+    D3D9_ReleaseDevice(&priv->d3d_dev);
+    D3D9_Destroy(&priv->hd3d);
     free(tc->priv);
 }
 
@@ -1955,23 +1956,22 @@ GLConvOpen(vlc_object_t *obj)
     tc->priv = priv;
     priv->vt = vt;
 
-    priv->d3dctx = (struct d3dctx) { 0 };
-    if (D3D9_Create(obj, &priv->d3dctx.hd3d) != VLC_SUCCESS)
+    if (D3D9_Create(obj, &priv->hd3d) != VLC_SUCCESS)
         goto error;
 
-    if (!priv->d3dctx.hd3d.use_ex)
+    if (!priv->hd3d.use_ex)
     {
         msg_Warn(obj, "DX/GL interrop only working on d3d9x");
         goto error;
     }
 
-    if (FAILED(D3D9_CreateDevice(obj, &priv->d3dctx.hd3d, tc->gl->surface->handle.hwnd,
-                                 &tc->fmt, &priv->d3dctx.d3d_dev)))
+    if (FAILED(D3D9_CreateDevice(obj, &priv->hd3d, tc->gl->surface->handle.hwnd,
+                                 &tc->fmt, &priv->d3d_dev)))
         goto error;
 
     HRESULT hr;
     HANDLE shared_handle = NULL;
-    hr = IDirect3DDevice9Ex_CreateRenderTarget(priv->d3dctx.d3d_dev.devex,
+    hr = IDirect3DDevice9Ex_CreateRenderTarget(priv->d3d_dev.devex,
                                                tc->fmt.i_visible_width,
                                                tc->fmt.i_visible_height,
                                                D3DFMT_X8R8G8B8,
@@ -1986,7 +1986,7 @@ GLConvOpen(vlc_object_t *obj)
    if (shared_handle)
         priv->vt.DXSetResourceShareHandleNV(priv->dx_render, shared_handle);
 
-    priv->gl_handle_d3d = priv->vt.DXOpenDeviceNV(priv->d3dctx.d3d_dev.dev);
+    priv->gl_handle_d3d = priv->vt.DXOpenDeviceNV(priv->d3d_dev.dev);
     if (!priv->gl_handle_d3d)
     {
         msg_Warn(obj, "DXOpenDeviceNV failed: %lu", GetLastError());
-- 
2.14.2



More information about the vlc-devel mailing list