[vlc-commits] d3d9_fmt: no need to keep the whole D3DPRESENT_PARAMETERS

Steve Lhomme git at videolan.org
Tue Jun 25 13:50:23 CEST 2019


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Thu Jun 13 11:16:59 2019 +0200| [687cee5f6dd94e8832d11b2fdf0800d6f580eaff] | committer: Steve Lhomme

d3d9_fmt: no need to keep the whole D3DPRESENT_PARAMETERS

We only need the BackBufferFormat

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

 modules/video_chroma/d3d9_fmt.c        | 22 +++++++++++++---------
 modules/video_chroma/d3d9_fmt.h        |  4 ++--
 modules/video_output/win32/direct3d9.c | 16 +++++++++-------
 3 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/modules/video_chroma/d3d9_fmt.c b/modules/video_chroma/d3d9_fmt.c
index 63b550164f..5a7d842a72 100644
--- a/modules/video_chroma/d3d9_fmt.c
+++ b/modules/video_chroma/d3d9_fmt.c
@@ -83,7 +83,8 @@ HRESULT D3D9_CreateDevice(vlc_object_t *o, d3d9_handle_t *hd3d, HWND hwnd,
     out->adapterId = AdapterToUse;
     out->hwnd      = hwnd;
     /* TODO only create a device for the decoder dimensions */
-    if (D3D9_FillPresentationParameters(hd3d, source, out))
+    D3DPRESENT_PARAMETERS d3dpp;
+    if (D3D9_FillPresentationParameters(hd3d, source, out, &d3dpp))
     {
         msg_Err(o, "Could not presentation parameters");
         return E_INVALIDARG;
@@ -113,14 +114,15 @@ HRESULT D3D9_CreateDevice(vlc_object_t *o, d3d9_handle_t *hd3d, HWND hwnd,
                 hr = IDirect3D9Ex_CreateDeviceEx(hd3d->objex, AdapterToUse,
                                                  DeviceType, hwnd,
                                                  creationFlags,
-                                                 &out->pp, NULL, &out->devex);
+                                                 &d3dpp, NULL, &out->devex);
             else
                 hr = IDirect3D9_CreateDevice(hd3d->obj, AdapterToUse,
                                              DeviceType, hwnd,
                                              creationFlags,
-                                             &out->pp, &out->dev);
+                                             &d3dpp, &out->dev);
             if (SUCCEEDED(hr))
             {
+                out->BufferFormat = d3dpp.BackBufferFormat;
                 out->owner = true;
                 return hr;
             }
@@ -147,11 +149,12 @@ HRESULT D3D9_CreateDeviceExternal(IDirect3DDevice9 *dev, d3d9_handle_t *hd3d, HW
     hr = IDirect3D9_GetDeviceCaps(hd3d->obj, out->adapterId, params.DeviceType, &out->caps);
     if (FAILED(hr))
        return hr;
-    if (D3D9_FillPresentationParameters(hd3d, source, out))
-    {
-        return E_FAIL;
-    }
+    D3DDISPLAYMODE d3ddm;
+    hr = IDirect3D9_GetAdapterDisplayMode(hd3d->obj, out->adapterId, &d3ddm);
+    if (FAILED(hr))
+        return hr;
     IDirect3DDevice9_AddRef(out->dev);
+    out->BufferFormat = d3ddm.Format;
     return S_OK;
 }
 
@@ -169,7 +172,9 @@ void D3D9_ReleaseDevice(d3d9_device_t *d3d_dev)
  * from the default adapter.
  */
 int D3D9_FillPresentationParameters(d3d9_handle_t *hd3d,
-                                    const video_format_t *source, d3d9_device_t *out)
+                                    const video_format_t *source,
+                                    const d3d9_device_t *out,
+                                    D3DPRESENT_PARAMETERS *d3dpp)
 {
     /*
     ** Get the current desktop display mode, so we can set up a back
@@ -181,7 +186,6 @@ int D3D9_FillPresentationParameters(d3d9_handle_t *hd3d,
         return VLC_EGENERIC;
 
     /* Set up the structure used to create the D3DDevice. */
-    D3DPRESENT_PARAMETERS *d3dpp = &out->pp;
     ZeroMemory(d3dpp, sizeof(D3DPRESENT_PARAMETERS));
     d3dpp->Flags                  = D3DPRESENTFLAG_VIDEO;
     d3dpp->Windowed               = TRUE;
diff --git a/modules/video_chroma/d3d9_fmt.h b/modules/video_chroma/d3d9_fmt.h
index 739ff0b9e7..db371a3108 100644
--- a/modules/video_chroma/d3d9_fmt.h
+++ b/modules/video_chroma/d3d9_fmt.h
@@ -61,7 +61,7 @@ typedef struct
     bool                    owner;
 
     /* creation parameters */
-    D3DPRESENT_PARAMETERS   pp;
+    D3DFORMAT               BufferFormat;
     UINT                    adapterId;
     HWND                    hwnd;
     D3DCAPS9                caps;
@@ -97,6 +97,6 @@ int D3D9_CreateExternal(vlc_object_t *, d3d9_handle_t *, IDirect3DDevice9 *);
 
 void D3D9_Destroy(d3d9_handle_t *);
 
-int D3D9_FillPresentationParameters(d3d9_handle_t *, const video_format_t *, d3d9_device_t *);
+int D3D9_FillPresentationParameters(d3d9_handle_t *, const video_format_t *, const d3d9_device_t *, D3DPRESENT_PARAMETERS *);
 
 #endif /* VLC_VIDEOCHROMA_D3D9_FMT_H_ */
diff --git a/modules/video_output/win32/direct3d9.c b/modules/video_output/win32/direct3d9.c
index b0220e5ef7..5637ab3fb9 100644
--- a/modules/video_output/win32/direct3d9.c
+++ b/modules/video_output/win32/direct3d9.c
@@ -653,7 +653,7 @@ static int Direct3D9CreateScene(vout_display_t *vd, const video_format_t *fmt)
                                         height,
                                         1,
                                         D3DUSAGE_RENDERTARGET,
-                                        p_d3d9_dev->pp.BackBufferFormat,
+                                        p_d3d9_dev->BufferFormat,
                                         D3DPOOL_DEFAULT,
                                         &sys->sceneTexture,
                                         NULL);
@@ -917,7 +917,7 @@ static int Direct3D9CreateResources(vout_display_t *vd, video_format_t *fmt)
         if (SUCCEEDED(IDirect3D9_CheckDeviceFormat(sys->hd3d.obj,
                                                    D3DADAPTER_DEFAULT,
                                                    D3DDEVTYPE_HAL,
-                                                   sys->d3d_dev.pp.BackBufferFormat,
+                                                   sys->d3d_dev.BufferFormat,
                                                    D3DUSAGE_DYNAMIC,
                                                    D3DRTYPE_TEXTURE,
                                                    dfmt))) {
@@ -952,7 +952,8 @@ static int Direct3D9Reset(vout_display_t *vd, video_format_t *fmtp)
     vout_display_sys_t *sys = vd->sys;
     d3d9_device_t *p_d3d9_dev = &sys->d3d_dev;
 
-    if (D3D9_FillPresentationParameters(&sys->hd3d, &vd->source, p_d3d9_dev))
+    D3DPRESENT_PARAMETERS d3dpp;
+    if (D3D9_FillPresentationParameters(&sys->hd3d, &vd->source, p_d3d9_dev, &d3dpp))
     {
         msg_Err(vd, "Could not presentation parameters to reset device");
         return VLC_EGENERIC;
@@ -964,14 +965,15 @@ static int Direct3D9Reset(vout_display_t *vd, video_format_t *fmtp)
     /* */
     HRESULT hr;
     if (sys->hd3d.use_ex){
-        hr = IDirect3DDevice9Ex_ResetEx(p_d3d9_dev->devex, &p_d3d9_dev->pp, NULL);
+        hr = IDirect3DDevice9Ex_ResetEx(p_d3d9_dev->devex, &d3dpp, NULL);
     } else {
-        hr = IDirect3DDevice9_Reset(p_d3d9_dev->dev, &p_d3d9_dev->pp);
+        hr = IDirect3DDevice9_Reset(p_d3d9_dev->dev, &d3dpp);
     }
     if (FAILED(hr)) {
         msg_Err(vd, "IDirect3DDevice9_Reset failed! (hr=0x%lX)", hr);
         return VLC_EGENERIC;
     }
+    p_d3d9_dev->BufferFormat = d3dpp.BackBufferFormat;
 
     /* re-create them */
     if (Direct3D9CreateResources(vd, fmtp)) {
@@ -1536,7 +1538,7 @@ static int Direct3D9Open(vout_display_t *vd, video_format_t *fmt,
     /* Find the appropriate D3DFORMAT for the render chroma, the format will be the closest to
      * the requested chroma which is usable by the hardware in an offscreen surface, as they
      * typically support more formats than textures */
-    const d3d9_format_t *d3dfmt = Direct3DFindFormat(vd, fmt, p_d3d9_dev->pp.BackBufferFormat);
+    const d3d9_format_t *d3dfmt = Direct3DFindFormat(vd, fmt, p_d3d9_dev->BufferFormat);
     if (!d3dfmt) {
         msg_Err(vd, "surface pixel format is not supported.");
         goto error;
@@ -1644,7 +1646,7 @@ static bool LocalSwapchainSetupDevice( void **opaque, const libvlc_video_direct3
 static bool LocalSwapchainUpdateOutput( void *opaque, const libvlc_video_direct3d_cfg_t *cfg, libvlc_video_output_cfg_t *out )
 {
     vout_display_t *vd = opaque;
-    out->surface_format = vd->sys->d3d_dev.pp.BackBufferFormat;
+    out->surface_format = vd->sys->d3d_dev.BufferFormat;
     return true;
 }
 



More information about the vlc-commits mailing list