From: Conor McCarthy cmccarthy@codeweavers.com
--- libs/vkd3d/resource.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index b65ab34e..8ca45c01 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -1365,6 +1365,7 @@ static HRESULT STDMETHODCALLTYPE d3d12_resource_WriteToSubresource(ID3D12Resourc { struct d3d12_resource *resource = impl_from_ID3D12Resource(iface); const struct vkd3d_vk_device_procs *vk_procs; + uint64_t written_offset, written_size; VkImageSubresource vk_sub_resource; const struct vkd3d_format *format; VkSubresourceLayout vk_layout; @@ -1435,14 +1436,18 @@ static HRESULT STDMETHODCALLTYPE d3d12_resource_WriteToSubresource(ID3D12Resourc return hr; }
- dst_data += vk_layout.offset + vkd3d_format_get_data_offset(format, vk_layout.rowPitch, + written_offset = vkd3d_format_get_data_offset(format, vk_layout.rowPitch, vk_layout.depthPitch, dst_box->left, dst_box->top, dst_box->front); + written_size = vkd3d_format_get_data_offset(format, vk_layout.rowPitch, + vk_layout.depthPitch, dst_box->right, dst_box->bottom, dst_box->back) - written_offset; + written_offset += vk_layout.offset; + dst_data += written_offset;
vkd3d_format_copy_data(format, src_data, src_row_pitch, src_slice_pitch, dst_data, vk_layout.rowPitch, vk_layout.depthPitch, dst_box->right - dst_box->left, dst_box->bottom - dst_box->top, dst_box->back - dst_box->front);
- d3d12_heap_unmap(resource->heap, 0, 0, resource); + d3d12_heap_unmap(resource->heap, written_offset, written_size, resource);
return S_OK; }