Added Android Hardware Buffer Extension Support

Added support for the VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER
device extension on Android
*Created necessary hooks for vkGetAndroidHardwareBufferPropertiesANDROID
and vkGetMemoryAndroidHardwareBufferANDROID
This commit is contained in:
Omar El Sheikh
2020-09-14 15:19:51 +01:00
committed by Baldur Karlsson
parent 1286f4b272
commit f5786077e5
4 changed files with 54 additions and 5 deletions
+20
View File
@@ -50,6 +50,26 @@ VkResult WrappedVulkan::vkCreateAndroidSurfaceKHR(VkInstance instance,
return ret;
}
// VK_ANDROID_external_memory_android_hardware_buffer
VkResult WrappedVulkan::vkGetAndroidHardwareBufferPropertiesANDROID(
VkDevice device, const struct AHardwareBuffer *buffer,
VkAndroidHardwareBufferPropertiesANDROID *pProperties)
{
return ObjDisp(device)->GetAndroidHardwareBufferPropertiesANDROID(Unwrap(device), buffer,
pProperties);
}
// VK_ANDROID_external_memory_android_hardware_buffer
VkResult WrappedVulkan::vkGetMemoryAndroidHardwareBufferANDROID(
VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID *pInfo,
struct AHardwareBuffer **pBuffer)
{
VkMemoryGetAndroidHardwareBufferInfoANDROID unwrappedInfo = *pInfo;
unwrappedInfo.memory = Unwrap(unwrappedInfo.memory);
return ObjDisp(device)->GetMemoryAndroidHardwareBufferANDROID(Unwrap(device), &unwrappedInfo,
pBuffer);
}
void VulkanReplay::OutputWindow::SetWindowHandle(WindowingData window)
{
RDCASSERT(window.system == WindowingSystem::Android, window.system);
+6
View File
@@ -748,6 +748,12 @@ static const VkExtensionProperties supportedExtensions[] = {
{
VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME, VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION,
},
#ifdef VK_ANDROID_external_memory_android_hardware_buffer
{
VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME,
VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION,
},
#endif
#ifdef VK_EXT_acquire_xlib_display
{
VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME, VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION,
+10
View File
@@ -1776,6 +1776,16 @@ public:
VkResult vkCreateAndroidSurfaceKHR(VkInstance instance,
const VkAndroidSurfaceCreateInfoKHR *pCreateInfo,
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
// VK_ANDROID_external_memory_android_hardware_buffer
VkResult vkGetAndroidHardwareBufferPropertiesANDROID(
VkDevice device, const struct AHardwareBuffer *buffer,
VkAndroidHardwareBufferPropertiesANDROID *pProperties);
// VK_ANDROID_external_memory_android_hardware_buffer
VkResult vkGetMemoryAndroidHardwareBufferANDROID(
VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID *pInfo,
struct AHardwareBuffer **pBuffer);
#endif
#if defined(VK_USE_PLATFORM_MACOS_MVK)
+18 -5
View File
@@ -144,20 +144,33 @@
#define HookInitExtension_Instance_Android() \
HookInitExtension(VK_KHR_android_surface, CreateAndroidSurfaceKHR);
#define HookDefine_Android() \
HookDefine4(VkResult, vkCreateAndroidSurfaceKHR, VkInstance, instance, \
const VkAndroidSurfaceCreateInfoKHR *, pCreateInfo, const VkAllocationCallbacks *, \
pAllocator, VkSurfaceKHR *, pSurface);
#define HookInitExtension_Device_Android() \
HookInitExtension(VK_ANDROID_external_memory_android_hardware_buffer, \
GetMemoryAndroidHardwareBufferANDROID); \
HookInitExtension(VK_ANDROID_external_memory_android_hardware_buffer, \
GetAndroidHardwareBufferPropertiesANDROID);
#define HookDefine_Android() \
HookDefine4(VkResult, vkCreateAndroidSurfaceKHR, VkInstance, instance, \
const VkAndroidSurfaceCreateInfoKHR *, pCreateInfo, const VkAllocationCallbacks *, \
pAllocator, VkSurfaceKHR *, pSurface); \
HookDefine3(VkResult, vkGetAndroidHardwareBufferPropertiesANDROID, VkDevice, device, \
const struct AHardwareBuffer *, buffer, VkAndroidHardwareBufferPropertiesANDROID *, \
pProperties); \
HookDefine3(VkResult, vkGetMemoryAndroidHardwareBufferANDROID, VkDevice, device, \
const VkMemoryGetAndroidHardwareBufferInfoANDROID *, pInfo, \
struct AHardwareBuffer **, pBuffer);
#else // defined(VK_USE_PLATFORM_ANDROID_KHR)
#define HookInitExtension_Instance_Android()
#define HookInitExtension_Device_Android()
#define HookDefine_Android()
#endif // defined(VK_USE_PLATFORM_ANDROID_KHR)
#define HookInitExtension_PhysDev_Android()
#define HookInitExtension_Device_Android()
#if defined(VK_USE_PLATFORM_GGP)