[gtk+] gsk: vulkan: fix image uploading
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] gsk: vulkan: fix image uploading
- Date: Fri, 18 Aug 2017 23:41:47 +0000 (UTC)
commit 48df19287b0a4cc4b3c9d4186f0f8b91dccca4f6
Author: Lionel Landwerlin <lionel g landwerlin intel com>
Date: Fri Aug 18 20:38:54 2017 +0100
gsk: vulkan: fix image uploading
The memory alignment requirements are different from the image layout.
We want the rowPitch to know where to upload the lines.
Signed-off-by: Lionel Landwerlin <lionel g landwerlin intel com>
https://bugzilla.gnome.org/show_bug.cgi?id=786485
gsk/gskvulkanimage.c | 20 +++++++++++---------
1 files changed, 11 insertions(+), 9 deletions(-)
---
diff --git a/gsk/gskvulkanimage.c b/gsk/gskvulkanimage.c
index d1f3701..11411fc 100644
--- a/gsk/gskvulkanimage.c
+++ b/gsk/gskvulkanimage.c
@@ -203,20 +203,22 @@ gsk_vulkan_image_upload_data (GskVulkanImage *self,
gsize height,
gsize data_stride)
{
- VkMemoryRequirements requirements;
+ VkImageSubresource image_res;
+ VkSubresourceLayout image_layout;
gsize mem_stride;
guchar *mem;
+ image_res.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+ image_res.mipLevel = 0;
+ image_res.arrayLayer = 0;
+
mem_stride = width * 4;
- vkGetImageMemoryRequirements (gdk_vulkan_context_get_device (self->vulkan),
- self->vk_image,
- &requirements);
- if (mem_stride % requirements.alignment != 0)
- mem_stride = (mem_stride / requirements.alignment + 1) * requirements.alignment;
+ vkGetImageSubresourceLayout (gdk_vulkan_context_get_device (self->vulkan),
+ self->vk_image, &image_res, &image_layout);
- mem = gsk_vulkan_memory_map (self->memory);
+ mem = gsk_vulkan_memory_map (self->memory) + image_layout.offset;
- if (data_stride == width * 4 && data_stride == mem_stride)
+ if (image_layout.rowPitch == width * 4 && data_stride == mem_stride)
{
memcpy (mem, data, data_stride * height);
}
@@ -224,7 +226,7 @@ gsk_vulkan_image_upload_data (GskVulkanImage *self,
{
for (gsize i = 0; i < height; i++)
{
- memcpy (mem + i * mem_stride, data + i * data_stride, width * 4);
+ memcpy (mem + i * image_layout.rowPitch, data + i * data_stride, width * 4);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]