Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 07d8b8f

Browse files
committed
all that is left is cleaning up
1 parent 047d4ea commit 07d8b8f

File tree

8 files changed

+91
-36
lines changed

8 files changed

+91
-36
lines changed

flutter_vma/flutter_skia_vma.cc

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,33 @@ sk_sp<skgpu::VulkanMemoryAllocator> FlutterSkiaVulkanMemoryAllocator::Make(
2424
return nullptr;
2525
}
2626

27-
// clang-format off
27+
#define PROVIDE_PROC(tbl, proc, provider) tbl.vk##proc = provider->proc;
28+
2829
VmaVulkanFunctions proc_table = {};
2930
proc_table.vkGetInstanceProcAddr = vk->NativeGetInstanceProcAddr();
30-
proc_table.vkGetDeviceProcAddr = vk->GetDeviceProcAddr;
31-
proc_table.vkGetPhysicalDeviceProperties = vk->GetPhysicalDeviceProperties;
32-
proc_table.vkGetPhysicalDeviceMemoryProperties = vk->GetPhysicalDeviceMemoryProperties;
33-
proc_table.vkAllocateMemory = vk->AllocateMemory;
34-
proc_table.vkFreeMemory = vk->FreeMemory;
35-
proc_table.vkMapMemory = vk->MapMemory;
36-
proc_table.vkUnmapMemory = vk->UnmapMemory;
37-
proc_table.vkFlushMappedMemoryRanges = vk->FlushMappedMemoryRanges;
38-
proc_table.vkInvalidateMappedMemoryRanges = vk->InvalidateMappedMemoryRanges;
39-
proc_table.vkBindBufferMemory = vk->BindBufferMemory;
40-
proc_table.vkBindImageMemory = vk->BindImageMemory;
41-
proc_table.vkGetBufferMemoryRequirements = vk->GetBufferMemoryRequirements;
42-
proc_table.vkGetImageMemoryRequirements = vk->GetImageMemoryRequirements;
43-
proc_table.vkCreateBuffer = vk->CreateBuffer;
44-
proc_table.vkDestroyBuffer = vk->DestroyBuffer;
45-
proc_table.vkCreateImage = vk->CreateImage;
46-
proc_table.vkDestroyImage = vk->DestroyImage;
47-
proc_table.vkCmdCopyBuffer = vk->CmdCopyBuffer;
48-
proc_table.vkGetBufferMemoryRequirements2KHR = vk->GetBufferMemoryRequirements2KHR;
49-
proc_table.vkGetImageMemoryRequirements2KHR = vk->GetImageMemoryRequirements2KHR;
50-
proc_table.vkBindBufferMemory2KHR = vk->BindBufferMemory2KHR;
51-
proc_table.vkBindImageMemory2KHR = vk->BindImageMemory2KHR;
52-
proc_table.vkGetPhysicalDeviceMemoryProperties2KHR = vk->GetPhysicalDeviceMemoryProperties2KHR;
53-
// clang-format on
31+
PROVIDE_PROC(proc_table, GetDeviceProcAddr, vk);
32+
PROVIDE_PROC(proc_table, GetPhysicalDeviceProperties, vk);
33+
PROVIDE_PROC(proc_table, GetPhysicalDeviceMemoryProperties, vk);
34+
PROVIDE_PROC(proc_table, AllocateMemory, vk);
35+
PROVIDE_PROC(proc_table, FreeMemory, vk);
36+
PROVIDE_PROC(proc_table, MapMemory, vk);
37+
PROVIDE_PROC(proc_table, UnmapMemory, vk);
38+
PROVIDE_PROC(proc_table, FlushMappedMemoryRanges, vk);
39+
PROVIDE_PROC(proc_table, InvalidateMappedMemoryRanges, vk);
40+
PROVIDE_PROC(proc_table, BindBufferMemory, vk);
41+
PROVIDE_PROC(proc_table, BindImageMemory, vk);
42+
PROVIDE_PROC(proc_table, GetBufferMemoryRequirements, vk);
43+
PROVIDE_PROC(proc_table, GetImageMemoryRequirements, vk);
44+
PROVIDE_PROC(proc_table, CreateBuffer, vk);
45+
PROVIDE_PROC(proc_table, DestroyBuffer, vk);
46+
PROVIDE_PROC(proc_table, CreateImage, vk);
47+
PROVIDE_PROC(proc_table, DestroyImage, vk);
48+
PROVIDE_PROC(proc_table, CmdCopyBuffer, vk);
49+
PROVIDE_PROC(proc_table, GetBufferMemoryRequirements2KHR, vk);
50+
PROVIDE_PROC(proc_table, GetImageMemoryRequirements2KHR, vk);
51+
PROVIDE_PROC(proc_table, BindBufferMemory2KHR, vk);
52+
PROVIDE_PROC(proc_table, BindImageMemory2KHR, vk);
53+
PROVIDE_PROC(proc_table, GetPhysicalDeviceMemoryProperties2KHR, vk);
5454

5555
VmaAllocatorCreateInfo allocator_info = {};
5656
allocator_info.vulkanApiVersion = vulkan_api_version;

impeller/renderer/backend/vulkan/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ impeller_component("vulkan") {
5858
"../../../blobcat:blobcat_lib",
5959
"//flutter/flutter_vma",
6060
"//flutter/fml",
61+
"//flutter/vulkan/procs",
6162
"//third_party/vulkan-deps/vulkan-headers/src:vulkan_headers",
6263
"//third_party/vulkan_memory_allocator",
6364
]

impeller/renderer/backend/vulkan/allocator_vk.cc

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
#include <memory>
88

9+
#include "flutter/fml/memory/ref_ptr.h"
10+
#include "flutter/vulkan/procs/vulkan_handle.h"
11+
#include "flutter/vulkan/procs/vulkan_proc_table.h"
912
#include "impeller/renderer/backend/vulkan/device_buffer_vk.h"
1013
#include "impeller/renderer/backend/vulkan/formats_vk.h"
1114
#include "impeller/renderer/backend/vulkan/texture_vk.h"
@@ -20,10 +23,46 @@ AllocatorVK::AllocatorVK(ContextVK& context,
2023
PFN_vkGetInstanceProcAddr get_instance_proc_address,
2124
PFN_vkGetDeviceProcAddr get_device_proc_address)
2225
: context_(context), device_(logical_device) {
26+
vk_ = fml::MakeRefCounted<vulkan::VulkanProcTable>(get_instance_proc_address);
27+
28+
auto instance_handle = vulkan::VulkanHandle<VkInstance>(instance);
29+
FML_CHECK(vk_->SetupInstanceProcAddresses(instance_handle));
30+
31+
auto device_handle = vulkan::VulkanHandle<VkDevice>(logical_device);
32+
FML_CHECK(vk_->SetupDeviceProcAddresses(device_handle));
33+
2334
VmaVulkanFunctions proc_table = {};
2435
proc_table.vkGetInstanceProcAddr = get_instance_proc_address;
2536
proc_table.vkGetDeviceProcAddr = get_device_proc_address;
2637

38+
#define PROVIDE_PROC(tbl, proc, provider) tbl.vk##proc = provider->proc;
39+
PROVIDE_PROC(proc_table, GetPhysicalDeviceProperties, vk_);
40+
PROVIDE_PROC(proc_table, GetPhysicalDeviceMemoryProperties, vk_);
41+
PROVIDE_PROC(proc_table, AllocateMemory, vk_);
42+
PROVIDE_PROC(proc_table, FreeMemory, vk_);
43+
PROVIDE_PROC(proc_table, MapMemory, vk_);
44+
PROVIDE_PROC(proc_table, UnmapMemory, vk_);
45+
PROVIDE_PROC(proc_table, FlushMappedMemoryRanges, vk_);
46+
PROVIDE_PROC(proc_table, InvalidateMappedMemoryRanges, vk_);
47+
PROVIDE_PROC(proc_table, BindBufferMemory, vk_);
48+
PROVIDE_PROC(proc_table, BindImageMemory, vk_);
49+
PROVIDE_PROC(proc_table, GetBufferMemoryRequirements, vk_);
50+
PROVIDE_PROC(proc_table, GetImageMemoryRequirements, vk_);
51+
PROVIDE_PROC(proc_table, CreateBuffer, vk_);
52+
PROVIDE_PROC(proc_table, DestroyBuffer, vk_);
53+
PROVIDE_PROC(proc_table, CreateImage, vk_);
54+
PROVIDE_PROC(proc_table, DestroyImage, vk_);
55+
PROVIDE_PROC(proc_table, CmdCopyBuffer, vk_);
56+
57+
// clang-format off
58+
// See: https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/issues/203
59+
proc_table.vkGetBufferMemoryRequirements2KHR = vk_->GetBufferMemoryRequirements2;
60+
proc_table.vkGetImageMemoryRequirements2KHR = vk_->GetImageMemoryRequirements2;
61+
proc_table.vkBindBufferMemory2KHR = vk_->BindBufferMemory2;
62+
proc_table.vkBindImageMemory2KHR = vk_->BindImageMemory2;
63+
proc_table.vkGetPhysicalDeviceMemoryProperties2KHR = vk_->GetPhysicalDeviceMemoryProperties2;
64+
// clang-format on
65+
2766
VmaAllocatorCreateInfo allocator_info = {};
2867
allocator_info.vulkanApiVersion = vulkan_api_version;
2968
allocator_info.physicalDevice = physical_device;

impeller/renderer/backend/vulkan/allocator_vk.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#pragma once
66

77
#include "flutter/fml/macros.h"
8+
#include "flutter/vulkan/procs/vulkan_proc_table.h"
9+
#include "fml/memory/ref_ptr.h"
810
#include "impeller/renderer/allocator.h"
911
#include "impeller/renderer/backend/vulkan/context_vk.h"
1012
#include "impeller/renderer/backend/vulkan/vk.h"
@@ -21,6 +23,7 @@ class AllocatorVK final : public Allocator {
2123
private:
2224
friend class ContextVK;
2325

26+
fml::RefPtr<vulkan::VulkanProcTable> vk_;
2427
VmaAllocator allocator_ = {};
2528
ContextVK& context_;
2629
vk::Device device_;

impeller/renderer/backend/vulkan/vk.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#define VULKAN_HPP_NAMESPACE impeller::vk
2020
#define VULKAN_HPP_ASSERT_ON_RESULT(ignored) \
2121
{ [[maybe_unused]] auto res = (ignored); }
22-
#define VULKAN_HPP_NO_EXCEPTIONS
2322
#include "vulkan/vulkan.hpp"
2423

2524
static_assert(VK_HEADER_VERSION >= 215,

vulkan/procs/vulkan_interface.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,6 @@
2424
#endif // VK_USE_PLATFORM_FUCHSIA
2525
#endif // OS_FUCHSIA
2626

27-
#if !VULKAN_LINK_STATICALLY
28-
#define VK_NO_PROTOTYPES 1
29-
#endif // !VULKAN_LINK_STATICALLY
30-
3127
// TODO(dnfield): vulkan_metal.h has some unguarded availability checks for
3228
// macOS 10.13. We can remove this if we bump to 10.14 or if that gets fixed
3329
// upstream, but fixing it upstream will take some time to flow through to

vulkan/procs/vulkan_proc_table.cc

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@
1414
return false; \
1515
}
1616

17+
#define ACQUIRE_PROC_EITHER(name, name2, context) \
18+
if (!(name = AcquireProc("vk" #name, context)) && \
19+
!(name2 = AcquireProc("vk" #name2, context))) { \
20+
FML_LOG(ERROR) << "Could not acquire proc: vk" << #name << ", or proc: vk" \
21+
<< #name2; \
22+
return false; \
23+
}
24+
1725
namespace vulkan {
1826

1927
VulkanProcTable::VulkanProcTable() : VulkanProcTable("libvulkan.so"){};
@@ -107,6 +115,8 @@ bool VulkanProcTable::SetupInstanceProcAddresses(
107115
ACQUIRE_PROC(GetPhysicalDeviceQueueFamilyProperties, handle);
108116
ACQUIRE_PROC(GetPhysicalDeviceProperties, handle);
109117
ACQUIRE_PROC(GetPhysicalDeviceMemoryProperties, handle);
118+
ACQUIRE_PROC_EITHER(GetPhysicalDeviceMemoryProperties2,
119+
GetPhysicalDeviceMemoryProperties2KHR, handle);
110120

111121
#if FML_OS_ANDROID
112122
ACQUIRE_PROC(GetPhysicalDeviceSurfaceCapabilitiesKHR, handle);
@@ -168,11 +178,12 @@ bool VulkanProcTable::SetupDeviceProcAddresses(
168178
ACQUIRE_PROC(DestroyBuffer, handle);
169179
ACQUIRE_PROC(CmdCopyBuffer, handle);
170180

171-
ACQUIRE_PROC(GetBufferMemoryRequirements2KHR, handle);
172-
ACQUIRE_PROC(GetImageMemoryRequirements2KHR, handle);
173-
ACQUIRE_PROC(BindBufferMemory2KHR, handle);
174-
ACQUIRE_PROC(BindImageMemory2KHR, handle);
175-
ACQUIRE_PROC(GetPhysicalDeviceMemoryProperties2KHR, handle);
181+
ACQUIRE_PROC_EITHER(GetBufferMemoryRequirements2,
182+
GetBufferMemoryRequirements2KHR, handle);
183+
ACQUIRE_PROC_EITHER(GetImageMemoryRequirements2,
184+
GetImageMemoryRequirements2KHR, handle);
185+
ACQUIRE_PROC_EITHER(BindBufferMemory2, BindBufferMemory2KHR, handle);
186+
ACQUIRE_PROC_EITHER(BindImageMemory2, BindImageMemory2KHR, handle);
176187

177188
#ifndef TEST_VULKAN_PROCS
178189
#if FML_OS_ANDROID

vulkan/procs/vulkan_proc_table.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,17 @@ class VulkanProcTable : public fml::RefCountedThreadSafe<VulkanProcTable> {
119119
DEFINE_PROC(DestroyBuffer);
120120
DEFINE_PROC(CmdCopyBuffer);
121121

122+
DEFINE_PROC(GetPhysicalDeviceMemoryProperties2);
123+
DEFINE_PROC(GetPhysicalDeviceMemoryProperties2KHR);
124+
125+
DEFINE_PROC(GetBufferMemoryRequirements2);
122126
DEFINE_PROC(GetBufferMemoryRequirements2KHR);
127+
DEFINE_PROC(GetImageMemoryRequirements2);
123128
DEFINE_PROC(GetImageMemoryRequirements2KHR);
129+
DEFINE_PROC(BindBufferMemory2);
124130
DEFINE_PROC(BindBufferMemory2KHR);
131+
DEFINE_PROC(BindImageMemory2);
125132
DEFINE_PROC(BindImageMemory2KHR);
126-
DEFINE_PROC(GetPhysicalDeviceMemoryProperties2KHR);
127133

128134
#ifndef TEST_VULKAN_PROCS
129135
#if FML_OS_ANDROID

0 commit comments

Comments
 (0)