=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: libs/vkd3d: Fix copying descriptors with NULL destination range sizes.

Alexandre Julliard julliard at winehq.org
Wed Apr 11 11:58:36 CDT 2018


Module: vkd3d
Branch: master
Commit: 28e0ab6481713830571347014c491e16680cea71
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=28e0ab6481713830571347014c491e16680cea71

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Wed Apr 11 13:21:39 2018 +0200

libs/vkd3d: Fix copying descriptors with NULL destination range sizes.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d/device.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index 57b94b6..0dc13cb 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -1682,8 +1682,8 @@ static void STDMETHODCALLTYPE d3d12_device_CopyDescriptors(ID3D12Device *iface,
 {
     struct d3d12_device *device = impl_from_ID3D12Device(iface);
     unsigned int dst_range_idx, dst_idx, src_range_idx, src_idx;
+    unsigned int dst_range_size, src_range_size;
     const struct d3d12_desc *src;
-    unsigned int src_range_size;
     struct d3d12_desc *dst;
 
     TRACE("iface %p, dst_descriptor_range_count %u, dst_descriptor_range_offsets %p, "
@@ -1703,21 +1703,23 @@ static void STDMETHODCALLTYPE d3d12_device_CopyDescriptors(ID3D12Device *iface,
 
     dst_range_idx = dst_idx = 0;
     dst = d3d12_desc_from_cpu_handle(dst_descriptor_range_offsets[0]);
+    dst_range_size = dst_descriptor_range_sizes ? dst_descriptor_range_sizes[0] : 1;
     for (src_range_idx = 0; src_range_idx < src_descriptor_range_count; ++src_range_idx)
     {
         src = d3d12_desc_from_cpu_handle(src_descriptor_range_offsets[src_range_idx]);
         src_range_size = src_descriptor_range_sizes ? src_descriptor_range_sizes[src_range_idx] : 1;
         for (src_idx = 0; src_idx < src_range_size; ++src_idx)
         {
-            if (dst_idx >= dst_descriptor_range_sizes[dst_range_idx])
+            if (dst_idx >= dst_range_size)
             {
+                dst_idx = 0;
                 ++dst_range_idx;
                 dst = d3d12_desc_from_cpu_handle(dst_descriptor_range_offsets[dst_range_idx]);
-                dst_idx = 0;
+                dst_range_size = dst_descriptor_range_sizes ? dst_descriptor_range_sizes[dst_range_idx] : 1;
             }
 
             assert(dst_range_idx < dst_descriptor_range_count);
-            assert(dst_idx < dst_descriptor_range_sizes[dst_range_idx]);
+            assert(dst_idx < dst_range_size);
 
             d3d12_desc_copy(dst++, src++, device);
 
@@ -1725,7 +1727,7 @@ static void STDMETHODCALLTYPE d3d12_device_CopyDescriptors(ID3D12Device *iface,
         }
     }
 
-    assert(dst_idx == dst_descriptor_range_sizes[dst_range_idx]);
+    assert(dst_idx == dst_range_size);
     assert(dst_range_idx == dst_descriptor_range_count - 1);
 }
 




More information about the wine-cvs mailing list