From b6b5f80830969c54342f82d5f53a8e17bf6fa941 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Wed, 28 Jun 2023 12:52:54 -0700 Subject: [PATCH 01/12] [Impeller] allocate fewer textures in dedicated memory. --- .../renderer/backend/vulkan/allocator_vk.cc | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index be0674f82a9ec..6611d35cc5894 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -15,6 +15,11 @@ namespace impeller { +// Maximum size to use VMA image suballocation. Any allocation greater than or +// equal to this value will use a dedicated VkDeviceMemory. +constexpr size_t kImageSizeThresholdForDedicatedMemoryAllocation = + 4 * 1024 * 1024; + AllocatorVK::AllocatorVK(std::weak_ptr context, uint32_t vulkan_api_version, const vk::PhysicalDevice& physical_device, @@ -184,19 +189,25 @@ static constexpr VkMemoryPropertyFlags ToVKMemoryPropertyFlags( } static VmaAllocationCreateFlags ToVmaAllocationCreateFlags(StorageMode mode, - bool is_texture) { + bool is_texture, + size_t size) { VmaAllocationCreateFlags flags = 0; switch (mode) { case StorageMode::kHostVisible: if (is_texture) { - flags |= {}; + if (size >= kImageSizeThresholdForDedicatedMemoryAllocation) { + flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT; + } else { + flags |= {}; + } } else { flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT; flags |= VMA_ALLOCATION_CREATE_MAPPED_BIT; } return flags; case StorageMode::kDevicePrivate: - if (is_texture) { + if (is_texture && + size >= kImageSizeThresholdForDedicatedMemoryAllocation) { flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT; } return flags; @@ -234,7 +245,8 @@ class AllocatedTextureSourceVK final : public TextureSourceVK { alloc_nfo.usage = ToVMAMemoryUsage(); alloc_nfo.preferredFlags = ToVKMemoryPropertyFlags(desc.storage_mode); - alloc_nfo.flags = ToVmaAllocationCreateFlags(desc.storage_mode, true); + alloc_nfo.flags = ToVmaAllocationCreateFlags( + desc.storage_mode, true, desc.GetByteSizeOfBaseMipLevel()); auto create_info_native = static_cast(image_info); @@ -366,7 +378,8 @@ std::shared_ptr AllocatorVK::OnCreateBuffer( VmaAllocationCreateInfo allocation_info = {}; allocation_info.usage = ToVMAMemoryUsage(); allocation_info.preferredFlags = ToVKMemoryPropertyFlags(desc.storage_mode); - allocation_info.flags = ToVmaAllocationCreateFlags(desc.storage_mode, false); + allocation_info.flags = ToVmaAllocationCreateFlags( + desc.storage_mode, /*is_texture=*/false, desc.size); VkBuffer buffer = {}; VmaAllocation buffer_allocation = {}; From 0798fe19ff38cacda010f38b785152dadd7bf119 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Wed, 28 Jun 2023 12:55:00 -0700 Subject: [PATCH 02/12] Update allocator_vk.cc --- impeller/renderer/backend/vulkan/allocator_vk.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index 6611d35cc5894..5e1030e35a75c 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -246,7 +246,7 @@ class AllocatedTextureSourceVK final : public TextureSourceVK { alloc_nfo.usage = ToVMAMemoryUsage(); alloc_nfo.preferredFlags = ToVKMemoryPropertyFlags(desc.storage_mode); alloc_nfo.flags = ToVmaAllocationCreateFlags( - desc.storage_mode, true, desc.GetByteSizeOfBaseMipLevel()); + desc.storage_mode, /*is_texture=*/true, desc.GetByteSizeOfBaseMipLevel()); auto create_info_native = static_cast(image_info); From 4826724fda7e369faffb1a272a02d4d3662de3b7 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Wed, 28 Jun 2023 12:55:33 -0700 Subject: [PATCH 03/12] format --- impeller/renderer/backend/vulkan/allocator_vk.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index 5e1030e35a75c..63567f928e75e 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -245,8 +245,9 @@ class AllocatedTextureSourceVK final : public TextureSourceVK { alloc_nfo.usage = ToVMAMemoryUsage(); alloc_nfo.preferredFlags = ToVKMemoryPropertyFlags(desc.storage_mode); - alloc_nfo.flags = ToVmaAllocationCreateFlags( - desc.storage_mode, /*is_texture=*/true, desc.GetByteSizeOfBaseMipLevel()); + alloc_nfo.flags = + ToVmaAllocationCreateFlags(desc.storage_mode, /*is_texture=*/true, + desc.GetByteSizeOfBaseMipLevel()); auto create_info_native = static_cast(image_info); From 9c652d1037f3d033b540877a2d3202f91b2145c8 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Thu, 29 Jun 2023 09:08:24 -0700 Subject: [PATCH 04/12] move to limits.vk --- impeller/renderer/backend/vulkan/BUILD.gn | 1 + impeller/renderer/backend/vulkan/allocator_vk.cc | 6 +----- impeller/renderer/backend/vulkan/limits_vk.h | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 impeller/renderer/backend/vulkan/limits_vk.h diff --git a/impeller/renderer/backend/vulkan/BUILD.gn b/impeller/renderer/backend/vulkan/BUILD.gn index 4e451c4a233a7..1d21955728e65 100644 --- a/impeller/renderer/backend/vulkan/BUILD.gn +++ b/impeller/renderer/backend/vulkan/BUILD.gn @@ -52,6 +52,7 @@ impeller_component("vulkan") { "fence_waiter_vk.h", "formats_vk.cc", "formats_vk.h", + "limits_vk.h", "pass_bindings_cache.cc", "pass_bindings_cache.h", "pipeline_cache_vk.cc", diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index 63567f928e75e..1d1fd4bf96ce6 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -11,15 +11,11 @@ #include "impeller/core/formats.h" #include "impeller/renderer/backend/vulkan/device_buffer_vk.h" #include "impeller/renderer/backend/vulkan/formats_vk.h" +#include "impeller/renderer/backend/vulkan/limits_vk.h" #include "impeller/renderer/backend/vulkan/texture_vk.h" namespace impeller { -// Maximum size to use VMA image suballocation. Any allocation greater than or -// equal to this value will use a dedicated VkDeviceMemory. -constexpr size_t kImageSizeThresholdForDedicatedMemoryAllocation = - 4 * 1024 * 1024; - AllocatorVK::AllocatorVK(std::weak_ptr context, uint32_t vulkan_api_version, const vk::PhysicalDevice& physical_device, diff --git a/impeller/renderer/backend/vulkan/limits_vk.h b/impeller/renderer/backend/vulkan/limits_vk.h new file mode 100644 index 0000000000000..14e2dce906e49 --- /dev/null +++ b/impeller/renderer/backend/vulkan/limits_vk.h @@ -0,0 +1,14 @@ +#pragma once + +#include + +namespace impeller { + +// Maximum size to use VMA image suballocation. Any allocation greater than or +// equal to this value will use a dedicated VkDeviceMemory. +// +// This value was taken from ANGLE. +constexpr size_t kImageSizeThresholdForDedicatedMemoryAllocation = + 4 * 1024 * 1024; + +} // namespace impeller From 0eeccc9c1d0f02ed81139ed996677771fc7d0cf8 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Thu, 29 Jun 2023 09:10:37 -0700 Subject: [PATCH 05/12] ++ --- ci/licenses_golden/licenses_flutter | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index d57b461954b05..9cb6faf5d7be2 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1521,6 +1521,7 @@ ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/fence_waiter_vk.cc + . ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/fence_waiter_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/formats_vk.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/formats_vk.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/limits_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pass_bindings_cache.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pass_bindings_cache.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pipeline_cache_vk.cc + ../../../flutter/LICENSE @@ -4200,6 +4201,7 @@ FILE: ../../../flutter/impeller/renderer/backend/vulkan/fence_waiter_vk.cc FILE: ../../../flutter/impeller/renderer/backend/vulkan/fence_waiter_vk.h FILE: ../../../flutter/impeller/renderer/backend/vulkan/formats_vk.cc FILE: ../../../flutter/impeller/renderer/backend/vulkan/formats_vk.h +FILE: ../../../flutter/impeller/renderer/backend/vulkan/limits_vk.h FILE: ../../../flutter/impeller/renderer/backend/vulkan/pass_bindings_cache.cc FILE: ../../../flutter/impeller/renderer/backend/vulkan/pass_bindings_cache.h FILE: ../../../flutter/impeller/renderer/backend/vulkan/pipeline_cache_vk.cc From 83aac9e9b83ea2a9df7561d6b61b35b94941b4da Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Fri, 30 Jun 2023 12:40:27 -0700 Subject: [PATCH 06/12] add sequential access. --- impeller/renderer/backend/vulkan/allocator_vk.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index 72a48f3077119..a598e258d084f 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -223,6 +223,7 @@ static VmaAllocationCreateFlags ToVmaAllocationCreateFlags(StorageMode mode, flags |= {}; } } else { + flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT; flags |= VMA_ALLOCATION_CREATE_MAPPED_BIT; } return flags; From 4c7ea58af24125b01ca2d03082bc4c3dc596a014 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Fri, 30 Jun 2023 12:52:26 -0700 Subject: [PATCH 07/12] Update licenses_flutter --- ci/licenses_golden/licenses_flutter | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index e4e881570c01d..401fa8ce570c2 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1521,7 +1521,6 @@ ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/fence_waiter_vk.cc + . ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/fence_waiter_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/formats_vk.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/formats_vk.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/limits_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pass_bindings_cache.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pass_bindings_cache.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pipeline_cache_vk.cc + ../../../flutter/LICENSE From 03c6d7aba3e952bb483dd17dab3efa68bb04984d Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Fri, 30 Jun 2023 15:57:50 -0700 Subject: [PATCH 08/12] Revert "Update licenses_flutter" This reverts commit 4c7ea58af24125b01ca2d03082bc4c3dc596a014. --- ci/licenses_golden/licenses_flutter | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 401fa8ce570c2..e4e881570c01d 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1521,6 +1521,7 @@ ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/fence_waiter_vk.cc + . ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/fence_waiter_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/formats_vk.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/formats_vk.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/limits_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pass_bindings_cache.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pass_bindings_cache.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pipeline_cache_vk.cc + ../../../flutter/LICENSE From 549d82eaebae2357da4b15fb30c14b51ed04af61 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Fri, 30 Jun 2023 15:57:57 -0700 Subject: [PATCH 09/12] Revert "add sequential access." This reverts commit 83aac9e9b83ea2a9df7561d6b61b35b94941b4da. --- impeller/renderer/backend/vulkan/allocator_vk.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index a598e258d084f..72a48f3077119 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -223,7 +223,6 @@ static VmaAllocationCreateFlags ToVmaAllocationCreateFlags(StorageMode mode, flags |= {}; } } else { - flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT; flags |= VMA_ALLOCATION_CREATE_MAPPED_BIT; } return flags; From 0091faa74ac592b26f5dc3b94da4a29fecc96f69 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Fri, 30 Jun 2023 16:05:08 -0700 Subject: [PATCH 10/12] back to preferred flags. --- impeller/renderer/backend/vulkan/allocator_vk.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index 72a48f3077119..8fb578ff5d69b 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -405,7 +405,7 @@ std::shared_ptr AllocatorVK::OnCreateBuffer( VmaAllocationCreateInfo allocation_info = {}; allocation_info.usage = ToVMAMemoryUsage(); - allocation_info.requiredFlags = + allocation_info.preferredFlags = ToVKBufferMemoryPropertyFlags(desc.storage_mode); allocation_info.flags = ToVmaAllocationCreateFlags( desc.storage_mode, /*is_texture=*/false, desc.size); From 3d5b5bade7c307c5ed9e504eda99572fe6dd5314 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Fri, 30 Jun 2023 16:11:04 -0700 Subject: [PATCH 11/12] ++ --- impeller/renderer/backend/vulkan/allocator_vk.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index 8fb578ff5d69b..36a53d2ce04e1 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -223,6 +223,7 @@ static VmaAllocationCreateFlags ToVmaAllocationCreateFlags(StorageMode mode, flags |= {}; } } else { + flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT; flags |= VMA_ALLOCATION_CREATE_MAPPED_BIT; } return flags; From b14537b937bc3a79e2543c149245bbb38959c490 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Fri, 30 Jun 2023 16:11:39 -0700 Subject: [PATCH 12/12] Update licenses_flutter --- ci/licenses_golden/licenses_flutter | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index e4e881570c01d..401fa8ce570c2 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1521,7 +1521,6 @@ ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/fence_waiter_vk.cc + . ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/fence_waiter_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/formats_vk.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/formats_vk.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/limits_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pass_bindings_cache.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pass_bindings_cache.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/pipeline_cache_vk.cc + ../../../flutter/LICENSE