[PATCH 3/3] d3d11: Forward CopySubresourceRegion to CopySubresourceRegion1.

Pablo Martin pmart-wine at riseup.net
Fri May 18 09:08:47 CDT 2018


Signed-off-by: Pablo Martin <pmart-wine at riseup.net>
---
This 3rd patch in the series is optional, it forwards the call as otherwise results in some duplicated code that can be avoided this way.

If you prefer to avoid the forwarding as hinted by Józef Kucia and keep direct calls from both CopySubresourceRegion methods you can just reject/ignore this patch.

Also note this way it does result in lots of similar traces (3) for d3d11_immediate_context_CopySubresourceRegion calls, and I believe at least the one in d3d11_immediate_context_CopySubresourceRegion could be safely removed, but I'm not sure about what other people would think so I have kept it.

 dlls/d3d11/device.c | 48 ++++++++++++++++++------------------------------
 1 file changed, 18 insertions(+), 30 deletions(-)

diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index d2eb96e4bc..4ab615a2ce 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -1000,18 +1000,18 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetScissorRects(ID3D11De
     wined3d_mutex_unlock();
 }
 
-static void STDMETHODCALLTYPE d3d11_immediate_context_CopySubresourceRegion(ID3D11DeviceContext1 *iface,
+static void STDMETHODCALLTYPE d3d11_immediate_context_CopySubresourceRegion1(ID3D11DeviceContext1 *iface,
         ID3D11Resource *dst_resource, UINT dst_subresource_idx, UINT dst_x, UINT dst_y, UINT dst_z,
-        ID3D11Resource *src_resource, UINT src_subresource_idx, const D3D11_BOX *src_box)
+        ID3D11Resource *src_resource, UINT src_subresource_idx, const D3D11_BOX *src_box, UINT flags)
 {
     struct d3d_device *device = device_from_immediate_ID3D11DeviceContext1(iface);
     struct wined3d_resource *wined3d_dst_resource, *wined3d_src_resource;
     struct wined3d_box wined3d_src_box;
 
     TRACE("iface %p, dst_resource %p, dst_subresource_idx %u, dst_x %u, dst_y %u, dst_z %u, "
-            "src_resource %p, src_subresource_idx %u, src_box %p.\n",
+            "src_resource %p, src_subresource_idx %u, src_box %p, flags %#x.\n",
             iface, dst_resource, dst_subresource_idx, dst_x, dst_y, dst_z,
-            src_resource, src_subresource_idx, src_box);
+            src_resource, src_subresource_idx, src_box, flags);
 
     if (src_box)
         wined3d_box_set(&wined3d_src_box, src_box->left, src_box->top,
@@ -1021,10 +1021,23 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_CopySubresourceRegion(ID3D
     wined3d_src_resource = wined3d_resource_from_d3d11_resource(src_resource);
     wined3d_mutex_lock();
     wined3d_device_copy_sub_resource_region(device->wined3d_device, wined3d_dst_resource, dst_subresource_idx,
-            dst_x, dst_y, dst_z, wined3d_src_resource, src_subresource_idx, src_box ? &wined3d_src_box : NULL, 0);
+            dst_x, dst_y, dst_z, wined3d_src_resource, src_subresource_idx, src_box ? &wined3d_src_box : NULL, flags);
     wined3d_mutex_unlock();
 }
 
+static void STDMETHODCALLTYPE d3d11_immediate_context_CopySubresourceRegion(ID3D11DeviceContext1 *iface,
+        ID3D11Resource *dst_resource, UINT dst_subresource_idx, UINT dst_x, UINT dst_y, UINT dst_z,
+        ID3D11Resource *src_resource, UINT src_subresource_idx, const D3D11_BOX *src_box)
+{
+    TRACE("iface %p, dst_resource %p, dst_subresource_idx %u, dst_x %u, dst_y %u, dst_z %u, "
+            "src_resource %p, src_subresource_idx %u, src_box %p.\n",
+            iface, dst_resource, dst_subresource_idx, dst_x, dst_y, dst_z,
+            src_resource, src_subresource_idx, src_box);
+
+    d3d11_immediate_context_CopySubresourceRegion1(iface, dst_resource, dst_subresource_idx, dst_x, dst_y,
+            dst_z, src_resource, src_subresource_idx, src_box, 0);
+}
+
 static void STDMETHODCALLTYPE d3d11_immediate_context_CopyResource(ID3D11DeviceContext1 *iface,
         ID3D11Resource *dst_resource, ID3D11Resource *src_resource)
 {
@@ -2605,31 +2618,6 @@ static HRESULT STDMETHODCALLTYPE d3d11_immediate_context_FinishCommandList(ID3D1
     return E_NOTIMPL;
 }
 
-static void STDMETHODCALLTYPE d3d11_immediate_context_CopySubresourceRegion1(ID3D11DeviceContext1 *iface,
-        ID3D11Resource *dst_resource, UINT dst_subresource_idx, UINT dst_x, UINT dst_y, UINT dst_z,
-        ID3D11Resource *src_resource, UINT src_subresource_idx, const D3D11_BOX *src_box, UINT flags)
-{
-    struct d3d_device *device = device_from_immediate_ID3D11DeviceContext1(iface);
-    struct wined3d_resource *wined3d_dst_resource, *wined3d_src_resource;
-    struct wined3d_box wined3d_src_box;
-
-    TRACE("iface %p, dst_resource %p, dst_subresource_idx %u, dst_x %u, dst_y %u, dst_z %u, "
-            "src_resource %p, src_subresource_idx %u, src_box %p, flags %#x.\n",
-            iface, dst_resource, dst_subresource_idx, dst_x, dst_y, dst_z,
-            src_resource, src_subresource_idx, src_box, flags);
-
-    if (src_box)
-        wined3d_box_set(&wined3d_src_box, src_box->left, src_box->top,
-                src_box->right, src_box->bottom, src_box->front, src_box->back);
-
-    wined3d_dst_resource = wined3d_resource_from_d3d11_resource(dst_resource);
-    wined3d_src_resource = wined3d_resource_from_d3d11_resource(src_resource);
-    wined3d_mutex_lock();
-    wined3d_device_copy_sub_resource_region(device->wined3d_device, wined3d_dst_resource, dst_subresource_idx,
-            dst_x, dst_y, dst_z, wined3d_src_resource, src_subresource_idx, src_box ? &wined3d_src_box : NULL, flags);
-    wined3d_mutex_unlock();
-}
-
 static void STDMETHODCALLTYPE d3d11_immediate_context_UpdateSubresource1(ID3D11DeviceContext1 *iface,
         ID3D11Resource *resource, UINT subresource_idx, const D3D11_BOX *box, const void *data,
         UINT row_pitch, UINT depth_pitch, UINT flags)
-- 
2.14.1




More information about the wine-devel mailing list