[gtk+/wip/matthiasc/glyph-cache] Another attempt, still no-go
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/glyph-cache] Another attempt, still no-go
- Date: Wed, 20 Sep 2017 15:52:41 +0000 (UTC)
commit ec2f0eea0f3da56b9324be2fa1afa557ae0327fd
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Sep 20 11:52:10 2017 -0400
Another attempt, still no-go
gsk/gskvulkanimage.c | 100 +++++++++++++++++++++++++++++--------------------
1 files changed, 59 insertions(+), 41 deletions(-)
---
diff --git a/gsk/gskvulkanimage.c b/gsk/gskvulkanimage.c
index 79f808b..278c253 100644
--- a/gsk/gskvulkanimage.c
+++ b/gsk/gskvulkanimage.c
@@ -659,31 +659,45 @@ gsk_vulkan_image_upload_region (GskVulkanImage *self,
gsize x,
gsize y)
{
- GskVulkanBuffer *staging;
- guchar *mem;
-
- staging = gsk_vulkan_buffer_new_staging (uploader->vulkan, width * height * 4);
- mem = gsk_vulkan_buffer_map (staging);
+/* this is a copy of gsk_vulkan_image_new_from_data_via_staging_image that
+ * needs tweaking to work with a preexisting image
+ * - sadly, I lack the chops to tweak it :-(
+ */
+ GskVulkanImage *staging;
- if (stride == width * 4)
- {
- memcpy (mem, data, stride * height);
- }
- else
- {
- for (gsize i = 0; i < height; i++)
- {
- memcpy (mem + i * width * 4, data + i * stride, width * 4);
- }
- }
+ staging = gsk_vulkan_image_new (uploader->vulkan,
+ width,
+ height,
+ VK_IMAGE_TILING_LINEAR,
+ VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
+ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
- gsk_vulkan_buffer_unmap (staging);
+ gsk_vulkan_image_upload_data (staging, data, width, height, stride);
gsk_vulkan_uploader_add_image_barrier (uploader,
FALSE,
&(VkImageMemoryBarrier) {
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT,
+ .dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT,
+ .oldLayout = VK_IMAGE_LAYOUT_PREINITIALIZED,
+ .newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+ .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
+ .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
+ .image = staging->vk_image,
+ .subresourceRange = {
+ .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+ .baseMipLevel = 0,
+ .levelCount = 1,
+ .baseArrayLayer = 0,
+ .layerCount = 1
+ }
+ });
+ gsk_vulkan_uploader_add_image_barrier (uploader,
+ FALSE,
+ &(VkImageMemoryBarrier) {
+ .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
+ .srcAccessMask = VK_ACCESS_SHADER_READ_BIT,
.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT,
.oldLayout = VK_IMAGE_LAYOUT_PREINITIALIZED,
.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
@@ -699,29 +713,33 @@ gsk_vulkan_image_upload_region (GskVulkanImage *self,
}
});
- vkCmdCopyBufferToImage (gsk_vulkan_uploader_get_copy_buffer (uploader),
- gsk_vulkan_buffer_get_buffer (staging),
- self->vk_image,
- VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
- 1,
- (VkBufferImageCopy[1]) {
- {
- .bufferOffset = 0,
- .imageSubresource = {
- .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
- .mipLevel = 0,
- .baseArrayLayer = 0,
- .layerCount = 1
- },
- .imageOffset = { x, y, 0 },
- .imageExtent = {
- .width = width,
- .height = height,
- .depth = 1
- }
- }
- });
-
+ vkCmdCopyImage (gsk_vulkan_uploader_get_copy_buffer (uploader),
+ staging->vk_image,
+ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+ self->vk_image,
+ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+ 1,
+ &(VkImageCopy) {
+ .srcSubresource = {
+ .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+ .mipLevel = 0,
+ .baseArrayLayer = 0,
+ .layerCount = 1
+ },
+ .srcOffset = { 0, 0, 0 },
+ .dstSubresource = {
+ .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+ .mipLevel = 0,
+ .baseArrayLayer = 0,
+ .layerCount = 1
+ },
+ .dstOffset = { x, y, 0 },
+ .extent = {
+ .width = width,
+ .height = height,
+ .depth = 1
+ }
+ });
gsk_vulkan_uploader_add_image_barrier (uploader,
TRUE,
&(VkImageMemoryBarrier) {
@@ -742,7 +760,7 @@ gsk_vulkan_image_upload_region (GskVulkanImage *self,
}
});
- uploader->staging_buffer_free_list = g_slist_prepend (uploader->staging_buffer_free_list, staging);
+ uploader->staging_image_free_list = g_slist_prepend (uploader->staging_image_free_list, staging);
gsk_vulkan_image_ensure_view (self, VK_FORMAT_B8G8R8A8_UNORM);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]