Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ValveSoftware/vkd3d.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Bernon <rbernon@codeweavers.com>2019-10-24 22:54:02 +0300
committerAlexandre Julliard <julliard@winehq.org>2019-10-27 21:20:27 +0300
commit832f47edd3be8a4dc5acaf9f05f52fa1713ce89e (patch)
tree80fbc3847bbaeed337051a0497fa573924b0d127
parent1eb7eca411f71d8dec7cfae5c58c1dff9626a7e0 (diff)
vkd3d: Clamp buffer image copy size to subresource dimensions.
This fixes a vulkan validation error. Signed-off-by: Rémi Bernon <rbernon@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
-rw-r--r--libs/vkd3d/command.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index 4338cd4e..c401349b 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);
}
}