Merge "[vulkan] Use new external memory/semaphore extensions on fuchsia." am: d0b2af95c0 am: f21aa6600c
am: e48a38d6a3
Change-Id: I51ff62af508b0017a8de2d3d3d1f62ae8571512c
diff --git a/system/vulkan/goldfish_vulkan.cpp b/system/vulkan/goldfish_vulkan.cpp
index 2ba1511..1fb6fc9 100644
--- a/system/vulkan/goldfish_vulkan.cpp
+++ b/system/vulkan/goldfish_vulkan.cpp
@@ -105,24 +105,24 @@
#ifdef VK_USE_PLATFORM_FUCHSIA
VkResult
-GetMemoryFuchsiaHandleKHR(VkDevice /*device*/,
- const VkMemoryGetFuchsiaHandleInfoKHR* /*pInfo*/,
- uint32_t* pHandle) {
- *pHandle = 0;
- return VK_SUCCESS;
-}
-
-VkResult
-GetSemaphoreFuchsiaHandleKHR(VkDevice /*device*/,
- const VkSemaphoreGetFuchsiaHandleInfoKHR* /*pInfo*/,
+GetMemoryZirconHandleFUCHSIA(VkDevice /*device*/,
+ const VkMemoryGetZirconHandleInfoFUCHSIA* /*pInfo*/,
uint32_t* pHandle) {
*pHandle = 0;
return VK_SUCCESS;
}
VkResult
-ImportSemaphoreFuchsiaHandleKHR(VkDevice /*device*/,
- const VkImportSemaphoreFuchsiaHandleInfoKHR* /*pInfo*/) {
+GetSemaphoreZirconHandleFUCHSIA(VkDevice /*device*/,
+ const VkSemaphoreGetZirconHandleInfoFUCHSIA* /*pInfo*/,
+ uint32_t* pHandle) {
+ *pHandle = 0;
+ return VK_SUCCESS;
+}
+
+VkResult
+ImportSemaphoreZirconHandleFUCHSIA(VkDevice /*device*/,
+ const VkImportSemaphoreZirconHandleInfoFUCHSIA* /*pInfo*/) {
return VK_SUCCESS;
}
@@ -165,12 +165,12 @@
if (strcmp(name, "vkGetInstanceProcAddr") == 0)
return reinterpret_cast<PFN_vkVoidFunction>(GetInstanceProcAddr);
#ifdef VK_USE_PLATFORM_FUCHSIA
- if (strcmp(name, "vkGetMemoryFuchsiaHandleKHR") == 0)
- return reinterpret_cast<PFN_vkVoidFunction>(GetMemoryFuchsiaHandleKHR);
- if (strcmp(name, "vkGetSemaphoreFuchsiaHandleKHR") == 0)
- return reinterpret_cast<PFN_vkVoidFunction>(GetSemaphoreFuchsiaHandleKHR);
- if (strcmp(name, "vkImportSemaphoreFuchsiaHandleKHR") == 0)
- return reinterpret_cast<PFN_vkVoidFunction>(ImportSemaphoreFuchsiaHandleKHR);
+ if (strcmp(name, "vkGetMemoryZirconHandleFUCHSIA") == 0)
+ return reinterpret_cast<PFN_vkVoidFunction>(GetMemoryZirconHandleFUCHSIA);
+ if (strcmp(name, "vkGetSemaphoreZirconHandleFUCHSIA") == 0)
+ return reinterpret_cast<PFN_vkVoidFunction>(GetSemaphoreZirconHandleFUCHSIA);
+ if (strcmp(name, "vkImportSemaphoreZirconHandleFUCHSIA") == 0)
+ return reinterpret_cast<PFN_vkVoidFunction>(ImportSemaphoreZirconHandleFUCHSIA);
if (strcmp(name, "vkCreateBufferCollectionFUCHSIA") == 0)
return reinterpret_cast<PFN_vkVoidFunction>(CreateBufferCollectionFUCHSIA);
if (strcmp(name, "vkDestroyBufferCollectionFUCHSIA") == 0)
@@ -278,20 +278,20 @@
#ifdef VK_USE_PLATFORM_FUCHSIA
VKAPI_ATTR
-VkResult GetMemoryFuchsiaHandleKHR(
+VkResult GetMemoryZirconHandleFUCHSIA(
VkDevice device,
- const VkMemoryGetFuchsiaHandleInfoKHR* pInfo,
+ const VkMemoryGetZirconHandleInfoFUCHSIA* pInfo,
uint32_t* pHandle) {
- AEMU_SCOPED_TRACE("goldfish_vulkan::GetMemoryFuchsiaHandleKHR");
+ AEMU_SCOPED_TRACE("goldfish_vulkan::GetMemoryZirconHandleFUCHSIA");
VK_HOST_CONNECTION(VK_ERROR_DEVICE_LOST)
if (!hostSupportsVulkan) {
- return vkstubhal::GetMemoryFuchsiaHandleKHR(device, pInfo, pHandle);
+ return vkstubhal::GetMemoryZirconHandleFUCHSIA(device, pInfo, pHandle);
}
VkResult res = goldfish_vk::ResourceTracker::get()->
- on_vkGetMemoryFuchsiaHandleKHR(
+ on_vkGetMemoryZirconHandleFUCHSIA(
vkEnc, VK_SUCCESS,
device, pInfo, pHandle);
@@ -299,39 +299,39 @@
}
VKAPI_ATTR
-VkResult GetSemaphoreFuchsiaHandleKHR(
+VkResult GetSemaphoreZirconHandleFUCHSIA(
VkDevice device,
- const VkSemaphoreGetFuchsiaHandleInfoKHR* pInfo,
+ const VkSemaphoreGetZirconHandleInfoFUCHSIA* pInfo,
uint32_t* pHandle) {
- AEMU_SCOPED_TRACE("goldfish_vulkan::GetSemaphoreFuchsiaHandleKHR");
+ AEMU_SCOPED_TRACE("goldfish_vulkan::GetSemaphoreZirconHandleFUCHSIA");
VK_HOST_CONNECTION(VK_ERROR_DEVICE_LOST)
if (!hostSupportsVulkan) {
- return vkstubhal::GetSemaphoreFuchsiaHandleKHR(device, pInfo, pHandle);
+ return vkstubhal::GetSemaphoreZirconHandleFUCHSIA(device, pInfo, pHandle);
}
VkResult res = goldfish_vk::ResourceTracker::get()->
- on_vkGetSemaphoreFuchsiaHandleKHR(
+ on_vkGetSemaphoreZirconHandleFUCHSIA(
vkEnc, VK_SUCCESS, device, pInfo, pHandle);
return res;
}
VKAPI_ATTR
-VkResult ImportSemaphoreFuchsiaHandleKHR(
+VkResult ImportSemaphoreZirconHandleFUCHSIA(
VkDevice device,
- const VkImportSemaphoreFuchsiaHandleInfoKHR* pInfo) {
- AEMU_SCOPED_TRACE("goldfish_vulkan::ImportSemaphoreFuchsiaHandleKHR");
+ const VkImportSemaphoreZirconHandleInfoFUCHSIA* pInfo) {
+ AEMU_SCOPED_TRACE("goldfish_vulkan::ImportSemaphoreZirconHandleFUCHSIA");
VK_HOST_CONNECTION(VK_ERROR_DEVICE_LOST)
if (!hostSupportsVulkan) {
- return vkstubhal::ImportSemaphoreFuchsiaHandleKHR(device, pInfo);
+ return vkstubhal::ImportSemaphoreZirconHandleFUCHSIA(device, pInfo);
}
VkResult res = goldfish_vk::ResourceTracker::get()->
- on_vkImportSemaphoreFuchsiaHandleKHR(
+ on_vkImportSemaphoreZirconHandleFUCHSIA(
vkEnc, VK_SUCCESS, device, pInfo);
return res;
@@ -408,14 +408,14 @@
}
#ifdef VK_USE_PLATFORM_FUCHSIA
- if (!strcmp(name, "vkGetMemoryFuchsiaHandleKHR")) {
- return (PFN_vkVoidFunction)GetMemoryFuchsiaHandleKHR;
+ if (!strcmp(name, "vkGetMemoryZirconHandleFUCHSIA")) {
+ return (PFN_vkVoidFunction)GetMemoryZirconHandleFUCHSIA;
}
- if (!strcmp(name, "vkGetSemaphoreFuchsiaHandleKHR")) {
- return (PFN_vkVoidFunction)GetSemaphoreFuchsiaHandleKHR;
+ if (!strcmp(name, "vkGetSemaphoreZirconHandleFUCHSIA")) {
+ return (PFN_vkVoidFunction)GetSemaphoreZirconHandleFUCHSIA;
}
- if (!strcmp(name, "vkImportSemaphoreFuchsiaHandleKHR")) {
- return (PFN_vkVoidFunction)ImportSemaphoreFuchsiaHandleKHR;
+ if (!strcmp(name, "vkImportSemaphoreZirconHandleFUCHSIA")) {
+ return (PFN_vkVoidFunction)ImportSemaphoreZirconHandleFUCHSIA;
}
if (!strcmp(name, "vkCreateBufferCollectionFUCHSIA")) {
return (PFN_vkVoidFunction)CreateBufferCollectionFUCHSIA;
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index c02d5f4..d000112 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -33,11 +33,11 @@
uint32_t handle;
} VkImportMemoryFuchsiaHandleInfoKHR;
-#define VK_STRUCTURE_TYPE_IMPORT_MEMORY_FUCHSIA_HANDLE_INFO_KHR \
+#define VK_STRUCTURE_TYPE_TEMP_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA \
((VkStructureType)1001000000)
-#define VK_EXTERNAL_MEMORY_HANDLE_TYPE_FUCHSIA_VMO_BIT_KHR \
+#define VK_EXTERNAL_MEMORY_HANDLE_TYPE_TEMP_ZIRCON_VMO_BIT_FUCHSIA \
((VkStructureType)0x00000800)
-#define VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FUCHSIA_FENCE_BIT_KHR \
+#define VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TEMP_ZIRCON_EVENT_BIT_FUCHSIA \
((VkStructureType)0x00000020)
#include "AndroidHardwareBuffer.h"
@@ -65,6 +65,12 @@
native_handle_t *AHardwareBuffer_getNativeHandle(AHardwareBuffer*) { return NULL; }
+uint64_t getAndroidHardwareBufferUsageFromVkUsage(
+ const VkImageCreateFlags vk_create,
+ const VkImageUsageFlags vk_usage) {
+ return AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;
+}
+
VkResult importAndroidHardwareBuffer(
const VkImportAndroidHardwareBufferInfoANDROID* info,
struct AHardwareBuffer **importOut) {
@@ -862,9 +868,8 @@
#endif
#ifdef VK_USE_PLATFORM_FUCHSIA
{ "VK_KHR_external_memory", 1 },
- { "VK_KHR_external_memory_fuchsia", 1 },
{ "VK_KHR_external_semaphore", 1 },
- { "VK_KHR_external_semaphore_fuchsia", 1 },
+ { "VK_FUCHSIA_external_semaphore", 1 },
{ "VK_FUCHSIA_buffer_collection", 1 },
#endif
};
@@ -895,6 +900,11 @@
"VK_ANDROID_external_memory_android_hardware_buffer", 7
});
#endif
+#ifdef VK_USE_PLATFORM_FUCHSIA
+ filteredExts.push_back({
+ "VK_FUCHSIA_external_memory", 1
+ });
+#endif
}
if (pPropertyCount) {
@@ -1122,10 +1132,10 @@
}
#ifdef VK_USE_PLATFORM_FUCHSIA
- VkResult on_vkGetMemoryFuchsiaHandleKHR(
+ VkResult on_vkGetMemoryZirconHandleFUCHSIA(
void*, VkResult,
VkDevice device,
- const VkMemoryGetFuchsiaHandleInfoKHR* pInfo,
+ const VkMemoryGetZirconHandleInfoFUCHSIA* pInfo,
uint32_t* pHandle) {
if (!pInfo) return VK_ERROR_INITIALIZATION_FAILED;
@@ -1167,10 +1177,10 @@
return VK_ERROR_INITIALIZATION_FAILED;
}
- VkResult on_vkImportSemaphoreFuchsiaHandleKHR(
+ VkResult on_vkImportSemaphoreZirconHandleFUCHSIA(
void*, VkResult,
VkDevice device,
- const VkImportSemaphoreFuchsiaHandleInfoKHR* pInfo) {
+ const VkImportSemaphoreZirconHandleInfoFUCHSIA* pInfo) {
if (!pInfo) return VK_ERROR_INITIALIZATION_FAILED;
if (!pInfo->semaphore) return VK_ERROR_INITIALIZATION_FAILED;
@@ -1199,10 +1209,10 @@
return VK_SUCCESS;
}
- VkResult on_vkGetSemaphoreFuchsiaHandleKHR(
+ VkResult on_vkGetSemaphoreZirconHandleFUCHSIA(
void*, VkResult,
VkDevice device,
- const VkSemaphoreGetFuchsiaHandleInfoKHR* pInfo,
+ const VkSemaphoreGetZirconHandleInfoFUCHSIA* pInfo,
uint32_t* pHandle) {
if (!pInfo) return VK_ERROR_INITIALIZATION_FAILED;
@@ -1468,7 +1478,7 @@
VkImportMemoryFuchsiaHandleInfoKHR* importPhysAddrInfoPtr =
(VkImportMemoryFuchsiaHandleInfoKHR*)vk_find_struct((vk_struct_common*)pAllocateInfo,
- VK_STRUCTURE_TYPE_IMPORT_MEMORY_FUCHSIA_HANDLE_INFO_KHR);
+ VK_STRUCTURE_TYPE_TEMP_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA);
VkMemoryDedicatedAllocateInfo* dedicatedAllocInfoPtr =
(VkMemoryDedicatedAllocateInfo*)vk_find_struct((vk_struct_common*)pAllocateInfo,
@@ -1530,7 +1540,7 @@
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID;
exportPhysAddr =
exportAllocateInfoPtr->handleTypes &
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_FUCHSIA_VMO_BIT_KHR;
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_TEMP_ZIRCON_VMO_BIT_FUCHSIA;
} else if (importAhbInfoPtr) {
importAhb = true;
} else if (importPhysAddrInfoPtr) {
@@ -2430,7 +2440,7 @@
if (exportSemaphoreInfoPtr) {
exportFence =
exportSemaphoreInfoPtr->handleTypes &
- VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FUCHSIA_FENCE_BIT_KHR;
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TEMP_ZIRCON_EVENT_BIT_FUCHSIA;
// TODO: add host side export struct info.
}
@@ -3483,12 +3493,12 @@
}
#ifdef VK_USE_PLATFORM_FUCHSIA
-VkResult ResourceTracker::on_vkGetMemoryFuchsiaHandleKHR(
+VkResult ResourceTracker::on_vkGetMemoryZirconHandleFUCHSIA(
void* context, VkResult input_result,
VkDevice device,
- const VkMemoryGetFuchsiaHandleInfoKHR* pInfo,
+ const VkMemoryGetZirconHandleInfoFUCHSIA* pInfo,
uint32_t* pHandle) {
- return mImpl->on_vkGetMemoryFuchsiaHandleKHR(
+ return mImpl->on_vkGetMemoryZirconHandleFUCHSIA(
context, input_result, device, pInfo, pHandle);
}
@@ -3502,20 +3512,20 @@
context, input_result, device, handleType, handle, pProperties);
}
-VkResult ResourceTracker::on_vkGetSemaphoreFuchsiaHandleKHR(
+VkResult ResourceTracker::on_vkGetSemaphoreZirconHandleFUCHSIA(
void* context, VkResult input_result,
VkDevice device,
- const VkSemaphoreGetFuchsiaHandleInfoKHR* pInfo,
+ const VkSemaphoreGetZirconHandleInfoFUCHSIA* pInfo,
uint32_t* pHandle) {
- return mImpl->on_vkGetSemaphoreFuchsiaHandleKHR(
+ return mImpl->on_vkGetSemaphoreZirconHandleFUCHSIA(
context, input_result, device, pInfo, pHandle);
}
-VkResult ResourceTracker::on_vkImportSemaphoreFuchsiaHandleKHR(
+VkResult ResourceTracker::on_vkImportSemaphoreZirconHandleFUCHSIA(
void* context, VkResult input_result,
VkDevice device,
- const VkImportSemaphoreFuchsiaHandleInfoKHR* pInfo) {
- return mImpl->on_vkImportSemaphoreFuchsiaHandleKHR(
+ const VkImportSemaphoreZirconHandleInfoFUCHSIA* pInfo) {
+ return mImpl->on_vkImportSemaphoreZirconHandleFUCHSIA(
context, input_result, device, pInfo);
}
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index 3a7177b..a194e9f 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -213,10 +213,10 @@
void unwrap_vkAcquireImageANDROID_nativeFenceFd(int fd, int* fd_out);
#ifdef VK_USE_PLATFORM_FUCHSIA
- VkResult on_vkGetMemoryFuchsiaHandleKHR(
+ VkResult on_vkGetMemoryZirconHandleFUCHSIA(
void* context, VkResult input_result,
VkDevice device,
- const VkMemoryGetFuchsiaHandleInfoKHR* pInfo,
+ const VkMemoryGetZirconHandleInfoFUCHSIA* pInfo,
uint32_t* pHandle);
VkResult on_vkGetMemoryFuchsiaHandlePropertiesKHR(
void* context, VkResult input_result,
@@ -224,15 +224,15 @@
VkExternalMemoryHandleTypeFlagBitsKHR handleType,
uint32_t handle,
VkMemoryFuchsiaHandlePropertiesKHR* pProperties);
- VkResult on_vkGetSemaphoreFuchsiaHandleKHR(
+ VkResult on_vkGetSemaphoreZirconHandleFUCHSIA(
void* context, VkResult input_result,
VkDevice device,
- const VkSemaphoreGetFuchsiaHandleInfoKHR* pInfo,
+ const VkSemaphoreGetZirconHandleInfoFUCHSIA* pInfo,
uint32_t* pHandle);
- VkResult on_vkImportSemaphoreFuchsiaHandleKHR(
+ VkResult on_vkImportSemaphoreZirconHandleFUCHSIA(
void* context, VkResult input_result,
VkDevice device,
- const VkImportSemaphoreFuchsiaHandleInfoKHR* pInfo);
+ const VkImportSemaphoreZirconHandleInfoFUCHSIA* pInfo);
VkResult on_vkCreateBufferCollectionFUCHSIA(
void* context, VkResult input_result,
VkDevice device,