vkd3d: Introduce vkd3d_format_get_data_offset().

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Henri Verbeet 2019-10-18 17:28:56 +03:30 committed by Alexandre Julliard
parent 7ec32ebfc5
commit 769dd2b68c
3 changed files with 17 additions and 15 deletions

View File

@ -3065,9 +3065,8 @@ static void vk_buffer_image_copy_from_d3d12(VkBufferImageCopy *copy,
if (src_box)
{
VkDeviceSize row_count = footprint->Footprint.Height / format->block_height;
copy->bufferOffset += src_box->left / format->block_width * format->byte_count * format->block_byte_count;
copy->bufferOffset += src_box->top / format->block_height * footprint->Footprint.RowPitch;
copy->bufferOffset += src_box->front * footprint->Footprint.RowPitch * row_count;
copy->bufferOffset += vkd3d_format_get_data_offset(format, footprint->Footprint.RowPitch,
row_count * footprint->Footprint.RowPitch, src_box->left, src_box->top, src_box->front);
}
copy->bufferRowLength = footprint->Footprint.RowPitch /
(format->byte_count * format->block_byte_count) * format->block_width;
@ -3098,10 +3097,8 @@ static void vk_image_buffer_copy_from_d3d12(VkBufferImageCopy *copy,
{
VkDeviceSize row_count = footprint->Footprint.Height / format->block_height;
copy->bufferOffset = footprint->Offset;
copy->bufferOffset += dst_x / format->block_width * format->byte_count * format->block_byte_count;
copy->bufferOffset += dst_y / format->block_height * footprint->Footprint.RowPitch;
copy->bufferOffset += dst_z * footprint->Footprint.RowPitch * row_count;
copy->bufferOffset = footprint->Offset + vkd3d_format_get_data_offset(format,
footprint->Footprint.RowPitch, row_count * footprint->Footprint.RowPitch, dst_x, dst_y, dst_z);
copy->bufferRowLength = footprint->Footprint.RowPitch /
(format->byte_count * format->block_byte_count) * format->block_width;
copy->bufferImageHeight = footprint->Footprint.Height;

View File

@ -1376,10 +1376,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_resource_WriteToSubresource(ID3D12Resourc
return hr;
}
dst_data += vk_layout.offset;
dst_data += dst_box->left / format->block_width * format->byte_count * format->block_byte_count;
dst_data += dst_box->top / format->block_height * vk_layout.rowPitch;
dst_data += dst_box->front * vk_layout.depthPitch;
dst_data += vk_layout.offset + vkd3d_format_get_data_offset(format, vk_layout.rowPitch,
vk_layout.depthPitch, dst_box->left, dst_box->top, dst_box->front);
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,
@ -1470,10 +1468,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_resource_ReadFromSubresource(ID3D12Resour
return hr;
}
src_data += vk_layout.offset;
src_data += src_box->left / format->block_width * format->byte_count * format->block_byte_count;
src_data += src_box->top / format->block_height * vk_layout.rowPitch;
src_data += src_box->front * vk_layout.depthPitch;
src_data += vk_layout.offset + vkd3d_format_get_data_offset(format, vk_layout.rowPitch,
vk_layout.depthPitch, src_box->left, src_box->top, src_box->front);
vkd3d_format_copy_data(format, src_data, vk_layout.rowPitch, vk_layout.depthPitch,
dst_data, dst_row_pitch, dst_slice_pitch, src_box->right - src_box->left,

View File

@ -1150,6 +1150,15 @@ struct vkd3d_format
bool is_emulated;
};
static inline size_t vkd3d_format_get_data_offset(const struct vkd3d_format *format,
unsigned int row_pitch, unsigned int slice_pitch,
unsigned int x, unsigned int y, unsigned int z)
{
return z * slice_pitch
+ (y / format->block_height) * row_pitch
+ (x / format->block_width) * format->byte_count * format->block_byte_count;
}
static inline bool vkd3d_format_is_compressed(const struct vkd3d_format *format)
{
return format->block_byte_count != 1;