Skip to content

Commit

Permalink
fuchsia: Use buffer_collection_x extension (flutter#28683)
Browse files Browse the repository at this point in the history
  • Loading branch information
arbreng authored Sep 17, 2021
1 parent b77bce1 commit 47b4527
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 37 deletions.
6 changes: 3 additions & 3 deletions DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ allowed_hosts = [
]

deps = {
'src': 'https://github.com/flutter/buildroot.git' + '@' + 'bd712c9a76385678918c9579a418a088696079bc',
'src': 'https://github.com/flutter/buildroot.git' + '@' + '35c9dfd7d0950ab540ec98fadb1036e122ee3d38',

# Fuchsia compatibility
#
Expand Down Expand Up @@ -400,9 +400,9 @@ deps = {
'src/third_party/vulkan':
Var('github_git') + '/KhronosGroup/Vulkan-Docs.git' + '@' + 'v1.1.91',

# Downstream Fuchsia Vulkan Headers (v1.2.148)
# Downstream Fuchsia Vulkan Headers (v1.2.174)
'src/third_party/fuchsia-vulkan':
Var('fuchsia_git') + '/third_party/Vulkan-Headers.git' + '@' + '651810b2fb877d819feaa00273035bfa16dec94b',
Var('fuchsia_git') + '/third_party/Vulkan-Headers.git' + '@' + '0255987d2457576907f046c6d52b89bc6131981d',

'src/third_party/swiftshader':
Var('swiftshader_git') + '/SwiftShader.git' + '@' + '5d1e8540407c138f47028d64684f3da599430aa4',
Expand Down
3 changes: 2 additions & 1 deletion ci/licenses_golden/licenses_third_party
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Signature: fff91ef4b79a15646bca0874e4085bc7
Signature: 904b3d12afb40151bd28972e9cbbd671

UNUSED LICENSES:

Expand Down Expand Up @@ -1214,6 +1214,7 @@ FILE: ../../../third_party/fuchsia-vulkan/include/vulkan/vulkan_ggp.h
FILE: ../../../third_party/fuchsia-vulkan/include/vulkan/vulkan_ios.h
FILE: ../../../third_party/fuchsia-vulkan/include/vulkan/vulkan_macos.h
FILE: ../../../third_party/fuchsia-vulkan/include/vulkan/vulkan_metal.h
FILE: ../../../third_party/fuchsia-vulkan/include/vulkan/vulkan_screen.h
FILE: ../../../third_party/fuchsia-vulkan/include/vulkan/vulkan_vi.h
FILE: ../../../third_party/fuchsia-vulkan/include/vulkan/vulkan_wayland.h
FILE: ../../../third_party/fuchsia-vulkan/include/vulkan/vulkan_win32.h
Expand Down
37 changes: 19 additions & 18 deletions shell/platform/fuchsia/flutter/vulkan_surface.cc
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ bool VulkanSurface::CreateVulkanImage(vulkan::VulkanProvider& vulkan_provider,
FML_CHECK(out_vulkan_image != nullptr);

out_vulkan_image->vk_collection_image_create_info = {
.sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA,
.sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIAX,
.pNext = nullptr,
.collection = collection_,
.index = 0,
Expand All @@ -71,7 +71,7 @@ bool VulkanSurface::CreateVulkanImage(vulkan::VulkanProvider& vulkan_provider,
};

if (VK_CALL_LOG_ERROR(
vulkan_provider.vk().SetBufferCollectionConstraintsFUCHSIA(
vulkan_provider.vk().SetBufferCollectionConstraintsFUCHSIAX(
vulkan_provider.vk_device(), collection_,
&out_vulkan_image->vk_image_create_info)) != VK_SUCCESS) {
return false;
Expand Down Expand Up @@ -186,13 +186,11 @@ vulkan::VulkanHandle<VkSemaphore> VulkanSurface::SemaphoreFromEvent(
}

VkImportSemaphoreZirconHandleInfoFUCHSIA import_info = {
.sType =
VK_STRUCTURE_TYPE_TEMP_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA,
.sType = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA,
.pNext = nullptr,
.semaphore = semaphore,
.handleType =
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TEMP_ZIRCON_EVENT_BIT_FUCHSIA,
.handle = static_cast<uint32_t>(semaphore_event.release())};
.handleType = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA,
.zirconHandle = static_cast<uint32_t>(semaphore_event.release())};

result = VK_CALL_LOG_ERROR(
vulkan_provider_.vk().ImportSemaphoreZirconHandleFUCHSIA(
Expand Down Expand Up @@ -280,18 +278,21 @@ bool VulkanSurface::AllocateDeviceMemory(
});
}

VkBufferCollectionCreateInfoFUCHSIA import_info;
import_info.collectionToken = vulkan_token.Unbind().TakeChannel().release();
VkBufferCollectionFUCHSIA collection;
if (VK_CALL_LOG_ERROR(vulkan_provider_.vk().CreateBufferCollectionFUCHSIA(
VkBufferCollectionCreateInfoFUCHSIAX import_info{
.sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIAX,
.pNext = nullptr,
.collectionToken = vulkan_token.Unbind().TakeChannel().release(),
};
VkBufferCollectionFUCHSIAX collection;
if (VK_CALL_LOG_ERROR(vulkan_provider_.vk().CreateBufferCollectionFUCHSIAX(
vulkan_provider_.vk_device(), &import_info, nullptr, &collection)) !=
VK_SUCCESS) {
return false;
}

collection_ = {collection, [&vulkan_provider = vulkan_provider_](
VkBufferCollectionFUCHSIA collection) {
vulkan_provider.vk().DestroyBufferCollectionFUCHSIA(
VkBufferCollectionFUCHSIAX collection) {
vulkan_provider.vk().DestroyBufferCollectionFUCHSIAX(
vulkan_provider.vk_device(), collection, nullptr);
}};

Expand All @@ -304,17 +305,17 @@ bool VulkanSurface::AllocateDeviceMemory(
vulkan_image_.vk_memory_requirements;
VkImageCreateInfo& image_create_info = vulkan_image_.vk_image_create_info;

VkBufferCollectionPropertiesFUCHSIA properties = {
.sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA};
VkBufferCollectionPropertiesFUCHSIAX properties{
.sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIAX};
if (VK_CALL_LOG_ERROR(
vulkan_provider_.vk().GetBufferCollectionPropertiesFUCHSIA(
vulkan_provider_.vk().GetBufferCollectionPropertiesFUCHSIAX(
vulkan_provider_.vk_device(), collection_, &properties)) !=
VK_SUCCESS) {
return false;
}

VkImportMemoryBufferCollectionFUCHSIA import_memory_info = {
.sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA,
VkImportMemoryBufferCollectionFUCHSIAX import_memory_info = {
.sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIAX,
.pNext = nullptr,
.collection = collection_,
.index = 0,
Expand Down
4 changes: 2 additions & 2 deletions shell/platform/fuchsia/flutter/vulkan_surface.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ struct VulkanImage {
VulkanImage(VulkanImage&&) = default;
VulkanImage& operator=(VulkanImage&&) = default;

VkBufferCollectionImageCreateInfoFUCHSIA vk_collection_image_create_info;
VkBufferCollectionImageCreateInfoFUCHSIAX vk_collection_image_create_info;
VkImageCreateInfo vk_image_create_info;
VkMemoryRequirements vk_memory_requirements;
vulkan::VulkanHandle<VkImage> vk_image;
Expand Down Expand Up @@ -169,7 +169,7 @@ class VulkanSurface final : public SurfaceProducerSurface {
uint32_t buffer_id_ = 0;
fuchsia::ui::composition::BufferCollectionImportToken import_token_;
uint32_t image_id_ = 0;
vulkan::VulkanHandle<VkBufferCollectionFUCHSIA> collection_;
vulkan::VulkanHandle<VkBufferCollectionFUCHSIAX> collection_;
zx::event acquire_event_;
vulkan::VulkanHandle<VkSemaphore> acquire_semaphore_;
std::unique_ptr<vulkan::VulkanCommandBuffer> command_buffer_;
Expand Down
6 changes: 3 additions & 3 deletions vulkan/vulkan_device.cc
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,11 @@ VulkanDevice::VulkanDevice(VulkanProcTable& p_vk,
#endif
#if OS_FUCHSIA
VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME,
VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME,
VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME,
VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME,
VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME,
VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
VK_FUCHSIA_BUFFER_COLLECTION_X_EXTENSION_NAME,
#endif
};

Expand Down
11 changes: 6 additions & 5 deletions vulkan/vulkan_proc_table.cc
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,13 @@ bool VulkanProcTable::SetupDeviceProcAddresses(
ACQUIRE_PROC(QueuePresentKHR, handle);
#endif // OS_ANDROID
#if OS_FUCHSIA
ACQUIRE_PROC(CreateBufferCollectionFUCHSIA, handle);
ACQUIRE_PROC(DestroyBufferCollectionFUCHSIA, handle);
ACQUIRE_PROC(GetMemoryZirconHandleFUCHSIA, handle);
ACQUIRE_PROC(ImportSemaphoreZirconHandleFUCHSIA, handle);
ACQUIRE_PROC(SetBufferCollectionConstraintsFUCHSIA, handle);
ACQUIRE_PROC(GetBufferCollectionPropertiesFUCHSIA, handle);
ACQUIRE_PROC(GetSemaphoreZirconHandleFUCHSIA, handle);
ACQUIRE_PROC(GetMemoryZirconHandleFUCHSIA, handle);
ACQUIRE_PROC(CreateBufferCollectionFUCHSIAX, handle);
ACQUIRE_PROC(DestroyBufferCollectionFUCHSIAX, handle);
ACQUIRE_PROC(SetBufferCollectionConstraintsFUCHSIAX, handle);
ACQUIRE_PROC(GetBufferCollectionPropertiesFUCHSIAX, handle);
#endif // OS_FUCHSIA
device_ = {handle, nullptr};
return true;
Expand Down
11 changes: 6 additions & 5 deletions vulkan/vulkan_proc_table.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,13 @@ class VulkanProcTable : public fml::RefCountedThreadSafe<VulkanProcTable> {
DEFINE_PROC(CreateAndroidSurfaceKHR);
#endif // OS_ANDROID
#if OS_FUCHSIA
DEFINE_PROC(CreateBufferCollectionFUCHSIA);
DEFINE_PROC(DestroyBufferCollectionFUCHSIA);
DEFINE_PROC(GetMemoryZirconHandleFUCHSIA);
DEFINE_PROC(ImportSemaphoreZirconHandleFUCHSIA);
DEFINE_PROC(SetBufferCollectionConstraintsFUCHSIA);
DEFINE_PROC(GetBufferCollectionPropertiesFUCHSIA);
DEFINE_PROC(GetSemaphoreZirconHandleFUCHSIA);
DEFINE_PROC(GetMemoryZirconHandleFUCHSIA);
DEFINE_PROC(CreateBufferCollectionFUCHSIAX);
DEFINE_PROC(DestroyBufferCollectionFUCHSIAX);
DEFINE_PROC(SetBufferCollectionConstraintsFUCHSIAX);
DEFINE_PROC(GetBufferCollectionPropertiesFUCHSIAX);
#endif // OS_FUCHSIA

#undef DEFINE_PROC
Expand Down

0 comments on commit 47b4527

Please sign in to comment.