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

Commit 1b78057

Browse files
committed
everythign except vulkan functions pass
1 parent 8372c0d commit 1b78057

File tree

8 files changed

+48
-17
lines changed

8 files changed

+48
-17
lines changed

flutter_vma/flutter_skia_vma.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ sk_sp<skgpu::VulkanMemoryAllocator> FlutterSkiaVulkanMemoryAllocator::Make(
4545
proc_table.vkCreateImage = vk->CreateImage;
4646
proc_table.vkDestroyImage = vk->DestroyImage;
4747
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;
4853
// clang-format on
4954

5055
VmaAllocatorCreateInfo allocator_info = {};

shell/common/shell_test_platform_view_vulkan.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <utility>
88

99
#include "flutter/common/graphics/persistent_cache.h"
10+
#include "flutter/flutter_vma/flutter_skia_vma.h"
1011
#include "flutter/shell/common/context_options.h"
1112
#include "flutter/vulkan/vulkan_skia_proc_table.h"
1213
#include "flutter/vulkan/vulkan_utilities.h"
@@ -112,6 +113,11 @@ ShellTestPlatformViewVulkan::OffScreenSurface::OffScreenSurface(
112113
return;
113114
}
114115

116+
memory_allocator_ = FlutterSkiaVulkanMemoryAllocator::Make(
117+
application_->GetAPIVersion(), application_->GetInstance(),
118+
logical_device_->GetPhysicalDeviceHandle(), logical_device_->GetHandle(),
119+
vk_, true);
120+
115121
// Create the Skia GrContext.
116122
if (!CreateSkiaGrContext()) {
117123
FML_DLOG(ERROR) << "Could not create Skia context.";
@@ -172,6 +178,8 @@ bool ShellTestPlatformViewVulkan::OffScreenSurface::CreateSkiaBackendContext(
172178
context->fFeatures = skia_features;
173179
context->fGetProc = std::move(getProc);
174180
context->fOwnsInstanceAndDevice = false;
181+
context->fMemoryAllocator = memory_allocator_;
182+
175183
return true;
176184
}
177185

shell/common/shell_test_platform_view_vulkan.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "flutter/shell/gpu/gpu_surface_vulkan_delegate.h"
1111
#include "flutter/vulkan/vulkan_application.h"
1212
#include "flutter/vulkan/vulkan_device.h"
13+
#include "flutter/vulkan/vulkan_skia_proc_table.h"
1314

1415
namespace flutter {
1516
namespace testing {
@@ -54,6 +55,7 @@ class ShellTestPlatformViewVulkan : public ShellTestPlatformView {
5455
shell_test_external_view_embedder_;
5556
std::unique_ptr<vulkan::VulkanApplication> application_;
5657
std::unique_ptr<vulkan::VulkanDevice> logical_device_;
58+
sk_sp<skgpu::VulkanMemoryAllocator> memory_allocator_;
5759
sk_sp<GrDirectContext> context_;
5860

5961
bool CreateSkiaGrContext();

shell/platform/embedder/embedder.cc

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -556,8 +556,13 @@ InferVulkanPlatformViewCreationCallback(
556556
return ptr(user_data, &image_desc);
557557
};
558558

559+
auto vk_instance = static_cast<VkInstance>(config->vulkan.instance);
560+
auto proc_addr =
561+
vulkan_get_instance_proc_address(vk_instance, "GetInstanceProcAddr");
562+
559563
flutter::EmbedderSurfaceVulkan::VulkanDispatchTable vulkan_dispatch_table = {
560-
.get_instance_proc_address = vulkan_get_instance_proc_address,
564+
.get_instance_proc_address =
565+
reinterpret_cast<PFN_vkGetInstanceProcAddr>(proc_addr),
561566
.get_next_image = vulkan_get_next_image,
562567
.present_image = vulkan_present_image_callback,
563568
};
@@ -567,8 +572,7 @@ InferVulkanPlatformViewCreationCallback(
567572

568573
std::unique_ptr<flutter::EmbedderSurfaceVulkan> embedder_surface =
569574
std::make_unique<flutter::EmbedderSurfaceVulkan>(
570-
config->vulkan.version,
571-
static_cast<VkInstance>(config->vulkan.instance),
575+
config->vulkan.version, vk_instance,
572576
config->vulkan.enabled_instance_extension_count,
573577
config->vulkan.enabled_instance_extensions,
574578
config->vulkan.enabled_device_extension_count,

shell/platform/embedder/embedder_surface_vulkan.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ class EmbedderSurfaceVulkan final : public EmbedderSurface,
2020
public GPUSurfaceVulkanDelegate {
2121
public:
2222
struct VulkanDispatchTable {
23-
std::function<void*(VkInstance, const char*)>
24-
get_instance_proc_address; // required
23+
PFN_vkGetInstanceProcAddr get_instance_proc_address; // required
2524
std::function<FlutterVulkanImage(const SkISize& frame_size)>
2625
get_next_image; // required
2726
std::function<bool(VkImage image, VkFormat format)>

shell/platform/embedder/tests/embedder_config_builder.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -510,9 +510,9 @@ void EmbedderConfigBuilder::InitializeVulkanRendererConfig() {
510510
vulkan_renderer_config_.get_instance_proc_address_callback =
511511
[](void* context, FlutterVulkanInstanceHandle instance,
512512
const char* name) -> void* {
513-
return reinterpret_cast<EmbedderTestContextVulkan*>(context)
514-
->vulkan_context_->vk_->GetInstanceProcAddr(
515-
reinterpret_cast<VkInstance>(instance), name);
513+
auto proc_addr = reinterpret_cast<EmbedderTestContextVulkan*>(context)
514+
->vulkan_context_->vk_->GetInstanceProcAddr;
515+
return reinterpret_cast<void*>(proc_addr);
516516
};
517517
vulkan_renderer_config_.get_next_image_callback =
518518
[](void* context,

vulkan/procs/vulkan_proc_table.cc

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ VulkanProcTable::VulkanProcTable(const char* so_path)
2626
}
2727

2828
VulkanProcTable::VulkanProcTable(
29-
std::function<void*(VkInstance, const char*)> get_instance_proc_addr)
29+
PFN_vkGetInstanceProcAddr get_instance_proc_addr)
3030
: handle_(nullptr), acquired_mandatory_proc_addresses_(false) {
31-
GetInstanceProcAddr = std::move(get_instance_proc_addr);
31+
GetInstanceProcAddr = get_instance_proc_addr;
3232
acquired_mandatory_proc_addresses_ = SetupLoaderProcAddresses();
3333
}
3434

@@ -60,8 +60,7 @@ bool VulkanProcTable::SetupGetInstanceProcAddress() {
6060

6161
FML_LOG(ERROR) << "SetupGetInstanceProcAddress: handle_ is non-null";
6262

63-
GetInstanceProcAddr = reinterpret_cast<void* (*)(VkInstance, const char*)>(
64-
NativeGetInstanceProcAddr());
63+
GetInstanceProcAddr = NativeGetInstanceProcAddr();
6564
if (!GetInstanceProcAddr) {
6665
FML_DLOG(WARNING) << "Could not acquire vkGetInstanceProcAddr.";
6766
return false;
@@ -71,8 +70,9 @@ bool VulkanProcTable::SetupGetInstanceProcAddress() {
7170
}
7271

7372
PFN_vkGetInstanceProcAddr VulkanProcTable::NativeGetInstanceProcAddr() const {
74-
FML_LOG(ERROR) << this << " - " << handle_.get()
75-
<< " : NativeGetInstanceProcAddr";
73+
if (GetInstanceProcAddr) {
74+
return GetInstanceProcAddr;
75+
}
7676

7777
#if VULKAN_LINK_STATICALLY
7878
return &vkGetInstanceProcAddr;
@@ -167,6 +167,13 @@ bool VulkanProcTable::SetupDeviceProcAddresses(
167167
ACQUIRE_PROC(CreateBuffer, handle);
168168
ACQUIRE_PROC(DestroyBuffer, handle);
169169
ACQUIRE_PROC(CmdCopyBuffer, handle);
170+
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);
176+
170177
#ifndef TEST_VULKAN_PROCS
171178
#if FML_OS_ANDROID
172179
ACQUIRE_PROC(AcquireNextImageKHR, handle);

vulkan/procs/vulkan_proc_table.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ class VulkanProcTable : public fml::RefCountedThreadSafe<VulkanProcTable> {
4747

4848
VulkanProcTable();
4949
explicit VulkanProcTable(const char* so_path);
50-
explicit VulkanProcTable(
51-
std::function<void*(VkInstance, const char*)> get_instance_proc_addr);
50+
explicit VulkanProcTable(PFN_vkGetInstanceProcAddr get_instance_proc_addr);
5251
~VulkanProcTable();
5352

5453
bool HasAcquiredMandatoryProcAddresses() const;
@@ -63,7 +62,7 @@ class VulkanProcTable : public fml::RefCountedThreadSafe<VulkanProcTable> {
6362

6463
bool SetupDeviceProcAddresses(const VulkanHandle<VkDevice>& device);
6564

66-
std::function<void*(VkInstance, const char*)> GetInstanceProcAddr = nullptr;
65+
PFN_vkGetInstanceProcAddr GetInstanceProcAddr = nullptr;
6766

6867
#define DEFINE_PROC(name) Proc<PFN_vk##name> name;
6968

@@ -119,6 +118,13 @@ class VulkanProcTable : public fml::RefCountedThreadSafe<VulkanProcTable> {
119118
DEFINE_PROC(CreateBuffer);
120119
DEFINE_PROC(DestroyBuffer);
121120
DEFINE_PROC(CmdCopyBuffer);
121+
122+
DEFINE_PROC(GetBufferMemoryRequirements2KHR);
123+
DEFINE_PROC(GetImageMemoryRequirements2KHR);
124+
DEFINE_PROC(BindBufferMemory2KHR);
125+
DEFINE_PROC(BindImageMemory2KHR);
126+
DEFINE_PROC(GetPhysicalDeviceMemoryProperties2KHR);
127+
122128
#ifndef TEST_VULKAN_PROCS
123129
#if FML_OS_ANDROID
124130
DEFINE_PROC(GetPhysicalDeviceSurfaceCapabilitiesKHR);

0 commit comments

Comments
 (0)