From ba659404be5f8dddd225d324c574c315e45b86eb Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Thu, 8 Jun 2023 16:59:39 -0700 Subject: [PATCH 1/4] [Impeller] add explicit VMA flush to device memory writes. --- impeller/renderer/backend/vulkan/device_buffer_vk.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/impeller/renderer/backend/vulkan/device_buffer_vk.cc b/impeller/renderer/backend/vulkan/device_buffer_vk.cc index e9859ff9390a5..c8cd18dfb3d46 100644 --- a/impeller/renderer/backend/vulkan/device_buffer_vk.cc +++ b/impeller/renderer/backend/vulkan/device_buffer_vk.cc @@ -46,6 +46,7 @@ bool DeviceBufferVK::OnCopyHostBuffer(const uint8_t* source, if (source) { ::memmove(dest + offset, source + source_range.offset, source_range.length); } + ::vmaFlushAllocation(allocator_, allocation_, offset, source_range.length); return true; } From 6045e20a0e9ad9a47734ef126a8a43bc618fe0ce Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Thu, 8 Jun 2023 21:54:41 -0700 Subject: [PATCH 2/4] Update device_buffer_vk.cc --- impeller/renderer/backend/vulkan/device_buffer_vk.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/impeller/renderer/backend/vulkan/device_buffer_vk.cc b/impeller/renderer/backend/vulkan/device_buffer_vk.cc index c8cd18dfb3d46..cb84dcd5eff38 100644 --- a/impeller/renderer/backend/vulkan/device_buffer_vk.cc +++ b/impeller/renderer/backend/vulkan/device_buffer_vk.cc @@ -46,6 +46,8 @@ bool DeviceBufferVK::OnCopyHostBuffer(const uint8_t* source, if (source) { ::memmove(dest + offset, source + source_range.offset, source_range.length); } + // See https://github.com/flutter/flutter/issues/128556 . Some devices do not + // have support for coherent host memory and require an explicit flush. ::vmaFlushAllocation(allocator_, allocation_, offset, source_range.length); return true; From a97f3ad3e68e4b7632161c15badb60985ca14790 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Fri, 9 Jun 2023 08:53:30 -0700 Subject: [PATCH 3/4] ++ --- impeller/renderer/backend/vulkan/allocator_vk.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index 23df6c1688140..6f28eee7727f4 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -175,8 +175,7 @@ static constexpr VkMemoryPropertyFlags ToVKMemoryPropertyFlags( if (is_texture) { return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; } else { - return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | - VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; + return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; } case StorageMode::kDevicePrivate: return VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; From 16563a0cbc8620cd033c34e6c4e1006636c9a0b8 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Fri, 9 Jun 2023 09:24:29 -0700 Subject: [PATCH 4/4] ++ --- impeller/renderer/backend/vulkan/allocator_vk.cc | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index 6f28eee7727f4..1ba4202125b44 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -168,15 +168,12 @@ static constexpr VmaMemoryUsage ToVMAMemoryUsage() { } static constexpr VkMemoryPropertyFlags ToVKMemoryPropertyFlags( - StorageMode mode, - bool is_texture) { + StorageMode mode) { switch (mode) { case StorageMode::kHostVisible: - if (is_texture) { - return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; - } else { - return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; - } + // See https://github.com/flutter/flutter/issues/128556 . Some devices do + // not have support for coherent host memory so we don't request it here. + return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; case StorageMode::kDevicePrivate: return VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; case StorageMode::kDeviceTransient: @@ -235,7 +232,7 @@ class AllocatedTextureSourceVK final : public TextureSourceVK { VmaAllocationCreateInfo alloc_nfo = {}; alloc_nfo.usage = ToVMAMemoryUsage(); - alloc_nfo.preferredFlags = ToVKMemoryPropertyFlags(desc.storage_mode, true); + alloc_nfo.preferredFlags = ToVKMemoryPropertyFlags(desc.storage_mode); alloc_nfo.flags = ToVmaAllocationCreateFlags(desc.storage_mode, true); auto create_info_native = @@ -365,8 +362,7 @@ std::shared_ptr AllocatorVK::OnCreateBuffer( VmaAllocationCreateInfo allocation_info = {}; allocation_info.usage = ToVMAMemoryUsage(); - allocation_info.preferredFlags = - ToVKMemoryPropertyFlags(desc.storage_mode, false); + allocation_info.preferredFlags = ToVKMemoryPropertyFlags(desc.storage_mode); allocation_info.flags = ToVmaAllocationCreateFlags(desc.storage_mode, false); VkBuffer buffer = {};