[vulkan] Fix missing macros/definitions on guest side
bug: 122080810
- Takes codegen for AHardwareBuffer entry points
- Need vk.xml change to get Fuchsia external memory entry points
- Adjust Fuchsia external memory definitions in ResourceTracker.cpp
to fit with what will be generated
Change-Id: Ib59951770158745f8d9a52dc1c2e6f9a30dbdac8
diff --git a/system/vulkan/func_table.cpp b/system/vulkan/func_table.cpp
index 3ce65a1..970b642 100644
--- a/system/vulkan/func_table.cpp
+++ b/system/vulkan/func_table.cpp
@@ -36,7 +36,6 @@
// required extensions, but the approach will be to
// implement them completely on the guest side.
#undef VK_KHR_android_surface
-#undef VK_ANDROID_external_memory_android_hardware_buffer
namespace goldfish_vk {
@@ -3503,7 +3502,8 @@
AEMU_SCOPED_TRACE("vkGetAndroidHardwareBufferPropertiesANDROID");
auto vkEnc = HostConnection::get()->vkEncoder();
VkResult vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = (VkResult)0;
- vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = vkEnc->vkGetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties);
+ auto resources = ResourceTracker::get();
+ vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = resources->on_vkGetAndroidHardwareBufferPropertiesANDROID(vkEnc, VK_SUCCESS, device, buffer, pProperties);
return vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return;
}
static VkResult entry_vkGetMemoryAndroidHardwareBufferANDROID(
@@ -3514,7 +3514,8 @@
AEMU_SCOPED_TRACE("vkGetMemoryAndroidHardwareBufferANDROID");
auto vkEnc = HostConnection::get()->vkEncoder();
VkResult vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return = (VkResult)0;
- vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return = vkEnc->vkGetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer);
+ auto resources = ResourceTracker::get();
+ vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return = resources->on_vkGetMemoryAndroidHardwareBufferANDROID(vkEnc, VK_SUCCESS, device, pInfo, pBuffer);
return vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return;
}
#endif
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index f55f577..a93a5df 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -948,6 +948,7 @@
#ifdef VK_USE_PLATFORM_ANDROID_KHR
VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID(
+ void*, VkResult,
VkDevice device,
const AHardwareBuffer* buffer,
VkAndroidHardwareBufferPropertiesANDROID* pProperties) {
@@ -957,6 +958,7 @@
}
VkResult on_vkGetMemoryAndroidHardwareBufferANDROID(
+ void*, VkResult,
VkDevice device,
const VkMemoryGetAndroidHardwareBufferInfoANDROID *pInfo,
struct AHardwareBuffer** pBuffer) {
@@ -993,6 +995,7 @@
#ifdef VK_USE_PLATFORM_FUCHSIA
VkResult on_vkGetMemoryFuchsiaHandleKHR(
+ void*, VkResult,
VkDevice device,
const VkMemoryGetFuchsiaHandleInfoKHR* pInfo,
uint32_t* pHandle) {
@@ -1027,6 +1030,7 @@
}
VkResult on_vkGetMemoryFuchsiaHandlePropertiesKHR(
+ void*, VkResult,
VkDevice device,
VkExternalMemoryHandleTypeFlagBitsKHR handleType,
uint32_t handle,
@@ -1036,6 +1040,7 @@
}
VkResult on_vkImportSemaphoreFuchsiaHandleKHR(
+ void*, VkResult,
VkDevice device,
const VkImportSemaphoreFuchsiaHandleInfoKHR* pInfo) {
@@ -1067,6 +1072,7 @@
}
VkResult on_vkGetSemaphoreFuchsiaHandleKHR(
+ void*, VkResult,
VkDevice device,
const VkSemaphoreGetFuchsiaHandleInfoKHR* pInfo,
uint32_t* pHandle) {
@@ -2423,23 +2429,59 @@
#ifdef VK_USE_PLATFORM_FUCHSIA
VkResult ResourceTracker::on_vkGetMemoryFuchsiaHandleKHR(
+ void* context, VkResult input_result,
VkDevice device,
const VkMemoryGetFuchsiaHandleInfoKHR* pInfo,
uint32_t* pHandle) {
- return mImpl->on_vkGetMemoryFuchsiaHandleKHR(device, pInfo, pHandle);
+ return mImpl->on_vkGetMemoryFuchsiaHandleKHR(
+ context, input_result, device, pInfo, pHandle);
+}
+
+VkResult on_vkGetMemoryFuchsiaHandlePropertiesKHR(
+ void* context, VkResult input_result,
+ VkDevice device,
+ VkExternalMemoryHandleTypeFlagBitsKHR handleType,
+ uint32_t handle,
+ VkMemoryFuchsiaHandlePropertiesKHR* pProperties) {
+ return mImpl->on_vkGetMemoryFuchsiaHandlePropertiesKHR(
+ context, input_result, device, handleType, handle, pProperties);
}
VkResult ResourceTracker::on_vkGetSemaphoreFuchsiaHandleKHR(
+ void* context, VkResult input_result,
VkDevice device,
const VkSemaphoreGetFuchsiaHandleInfoKHR* pInfo,
uint32_t* pHandle) {
- return mImpl->on_vkGetSemaphoreFuchsiaHandleKHR(device, pInfo, pHandle);
+ return mImpl->on_vkGetSemaphoreFuchsiaHandleKHR(
+ context, input_result, device, pInfo, pHandle);
}
VkResult ResourceTracker::on_vkImportSemaphoreFuchsiaHandleKHR(
+ void* context, VkResult input_result,
VkDevice device,
const VkImportSemaphoreFuchsiaHandleInfoKHR* pInfo) {
- return mImpl->on_vkImportSemaphoreFuchsiaHandleKHR(device, pInfo);
+ return mImpl->on_vkImportSemaphoreFuchsiaHandleKHR(
+ context, input_result, device, pInfo);
+}
+#endif
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+VkResult ResourceTracker::on_vkGetAndroidHardwareBufferPropertiesANDROID(
+ void* context, VkResult input_result,
+ VkDevice device,
+ const AHardwareBuffer* buffer,
+ VkAndroidHardwareBufferPropertiesANDROID* pProperties) {
+ return mImpl->on_vkGetAndroidHardwareBufferPropertiesANDROID(
+ context, input_result, device, buffer, pProperties);
+}
+VkResult ResourceTracker::on_vkGetMemoryAndroidHardwareBufferANDROID(
+ void* context, VkResult input_result,
+ VkDevice device,
+ const VkMemoryGetAndroidHardwareBufferInfoANDROID *pInfo,
+ struct AHardwareBuffer** pBuffer) {
+ return mImpl->on_vkGetMemoryAndroidHardwareBufferANDROID(
+ context, input_result,
+ device, pInfo, pBuffer);
}
#endif
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index 1f4d420..aca9ad4 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -209,18 +209,40 @@
#ifdef VK_USE_PLATFORM_FUCHSIA
VkResult on_vkGetMemoryFuchsiaHandleKHR(
+ void* context, VkResult input_result,
VkDevice device,
const VkMemoryGetFuchsiaHandleInfoKHR* pInfo,
uint32_t* pHandle);
+ VkResult on_vkGetMemoryFuchsiaHandlePropertiesKHR(
+ void* context, VkResult input_result,
+ VkDevice device,
+ VkExternalMemoryHandleTypeFlagBitsKHR handleType,
+ uint32_t handle,
+ VkMemoryFuchsiaHandlePropertiesKHR* pProperties);
VkResult on_vkGetSemaphoreFuchsiaHandleKHR(
+ void* context, VkResult input_result,
VkDevice device,
const VkSemaphoreGetFuchsiaHandleInfoKHR* pInfo,
uint32_t* pHandle);
VkResult on_vkImportSemaphoreFuchsiaHandleKHR(
+ void* context, VkResult input_result,
VkDevice device,
const VkImportSemaphoreFuchsiaHandleInfoKHR* pInfo);
#endif
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+ VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID(
+ void* context, VkResult input_result,
+ VkDevice device,
+ const AHardwareBuffer* buffer,
+ VkAndroidHardwareBufferPropertiesANDROID* pProperties);
+ VkResult on_vkGetMemoryAndroidHardwareBufferANDROID(
+ void* context, VkResult input_result,
+ VkDevice device,
+ const VkMemoryGetAndroidHardwareBufferInfoANDROID *pInfo,
+ struct AHardwareBuffer** pBuffer);
+#endif
+
VkResult on_vkMapMemoryIntoAddressSpaceGOOGLE_pre(
void* context,
VkResult input_result,
diff --git a/system/vulkan_enc/goldfish_vk_private_defs.h b/system/vulkan_enc/goldfish_vk_private_defs.h
index 77510d5..0b4777b 100644
--- a/system/vulkan_enc/goldfish_vk_private_defs.h
+++ b/system/vulkan_enc/goldfish_vk_private_defs.h
@@ -114,6 +114,11 @@
typedef VkResult (VKAPI_PTR *PFN_vkRegisterImageColorBufferGOOGLE)(VkDevice device, VkImage image, uint32_t colorBuffer);
typedef VkResult (VKAPI_PTR *PFN_vkRegisterBufferColorBufferGOOGLE)(VkDevice device, VkBuffer image, uint32_t colorBuffer);
+#define VK_ANDROID_external_memory_android_hardware_buffer 1
+struct AHardwareBuffer;
+struct VkAndroidHardwareBufferPropertiesANDROID;
+struct VkMemoryGetAndroidHardwareBufferInfoANDROID;
+
#ifdef __cplusplus
} // extern "C"
#endif