Rémi Bernon : vkd3d: Clamp buffer image copy size to subresource dimensions.

Alexandre Julliard julliard at winehq.org
Sun Oct 27 14:21:21 CDT 2019


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

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Thu Oct 24 21:54:02 2019 +0200

vkd3d: Clamp buffer image copy size to subresource dimensions.

This fixes a vulkan validation error.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d/command.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index 4338cd4..c401349 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -3091,17 +3091,24 @@ static void vk_buffer_image_copy_from_d3d12(VkBufferImageCopy *copy,
     copy->imageOffset.x = dst_x;
     copy->imageOffset.y = dst_y;
     copy->imageOffset.z = dst_z;
+
+    vk_extent_3d_from_d3d12_miplevel(&copy->imageExtent, image_desc,
+            copy->imageSubresource.mipLevel);
+    copy->imageExtent.width -= copy->imageOffset.x;
+    copy->imageExtent.height -= copy->imageOffset.y;
+    copy->imageExtent.depth -= copy->imageOffset.z;
+
     if (src_box)
     {
-        copy->imageExtent.width = src_box->right - src_box->left;
-        copy->imageExtent.height = src_box->bottom - src_box->top;
-        copy->imageExtent.depth = src_box->back - src_box->front;
+        copy->imageExtent.width = min(copy->imageExtent.width, src_box->right - src_box->left);
+        copy->imageExtent.height = min(copy->imageExtent.height, src_box->bottom - src_box->top);
+        copy->imageExtent.depth = min(copy->imageExtent.depth, src_box->back - src_box->front);
     }
     else
     {
-        copy->imageExtent.width = footprint->Footprint.Width;
-        copy->imageExtent.height = footprint->Footprint.Height;
-        copy->imageExtent.depth = footprint->Footprint.Depth;
+        copy->imageExtent.width = min(copy->imageExtent.width, footprint->Footprint.Width);
+        copy->imageExtent.height = min(copy->imageExtent.height, footprint->Footprint.Height);
+        copy->imageExtent.depth = min(copy->imageExtent.depth, footprint->Footprint.Depth);
     }
 }
 




More information about the wine-cvs mailing list