diff --git a/guest/vulkan_enc/ResourceTracker.cpp b/guest/vulkan_enc/ResourceTracker.cpp
index 228c70b..1460933 100644
--- a/guest/vulkan_enc/ResourceTracker.cpp
+++ b/guest/vulkan_enc/ResourceTracker.cpp
@@ -5291,6 +5291,7 @@
                                                const VkSemaphoreCreateInfo* pCreateInfo,
                                                const VkAllocationCallbacks* pAllocator,
                                                VkSemaphore* pSemaphore) {
+    (void)input_result;
     VkEncoder* enc = (VkEncoder*)context;
 
     VkSemaphoreCreateInfo finalCreateInfo = *pCreateInfo;
@@ -6242,6 +6243,10 @@
     VkEncoder* enc = (VkEncoder*)context;
     (void)input_result;
 
+    uint32_t supportedHandleType = 0;
+    VkExternalImageFormatProperties* ext_img_properties =
+        vk_find_struct<VkExternalImageFormatProperties>(pImageFormatProperties);
+
 #ifdef VK_USE_PLATFORM_FUCHSIA
 
     constexpr VkFormat kExternalImageSupportedFormats[] = {
@@ -6256,8 +6261,6 @@
         VK_FORMAT_R8G8_SSCALED,   VK_FORMAT_R8G8_SRGB,
     };
 
-    VkExternalImageFormatProperties* ext_img_properties =
-        vk_find_struct<VkExternalImageFormatProperties>(pImageFormatProperties);
 
     if (ext_img_properties) {
         if (std::find(std::begin(kExternalImageSupportedFormats),
@@ -6266,12 +6269,23 @@
             return VK_ERROR_FORMAT_NOT_SUPPORTED;
         }
     }
+    supportedHandleType |= VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VM_BIT_FUCHSIA;
 #endif
 
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
     VkAndroidHardwareBufferUsageANDROID* output_ahw_usage =
         vk_find_struct<VkAndroidHardwareBufferUsageANDROID>(pImageFormatProperties);
+    supportedHandleType |= VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT |
+        VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID;
 #endif
+    const VkPhysicalDeviceExternalImageFormatInfo* ext_img_info =
+        vk_find_struct<VkPhysicalDeviceExternalImageFormatInfo>(pImageFormatInfo);
+    if (supportedHandleType && ext_img_info) {
+        // 0 is a valid handleType so we don't check against 0
+        if (ext_img_info->handleType != (ext_img_info->handleType & supportedHandleType)) {
+            return VK_ERROR_FORMAT_NOT_SUPPORTED;
+        }
+    }
 
     VkResult hostRes;
 
@@ -6287,8 +6301,6 @@
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
     if (ext_img_properties) {
-        const VkPhysicalDeviceExternalImageFormatInfo* ext_img_info =
-            vk_find_struct<VkPhysicalDeviceExternalImageFormatInfo>(pImageFormatInfo);
         if (ext_img_info) {
             if (static_cast<uint32_t>(ext_img_info->handleType) ==
                 VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA) {
@@ -6310,7 +6322,9 @@
             pImageFormatInfo->flags, pImageFormatInfo->usage);
     }
 #endif
-
+    if (ext_img_properties) {
+        transformImpl_VkExternalMemoryProperties_fromhost(&ext_img_properties->externalMemoryProperties, 0);
+    }
     return hostRes;
 }
 
@@ -6332,6 +6346,57 @@
         pImageFormatProperties);
 }
 
+void ResourceTracker::on_vkGetPhysicalDeviceExternalBufferProperties_common(
+    bool isKhr, void* context, VkPhysicalDevice physicalDevice,
+    const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
+    VkExternalBufferProperties* pExternalBufferProperties) {
+    VkEncoder* enc = (VkEncoder*)context;
+
+    uint32_t supportedHandleType = 0;
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    supportedHandleType |= VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VM_BIT_FUCHSIA;
+#endif
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    supportedHandleType |= VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT |
+            VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID;
+#endif
+    if (supportedHandleType) {
+        // 0 is a valid handleType so we can't check against 0
+        if (pExternalBufferInfo->handleType != (pExternalBufferInfo->handleType & supportedHandleType)) {
+            return;
+        }
+    }
+
+    if (isKhr) {
+        enc->vkGetPhysicalDeviceExternalBufferPropertiesKHR(
+            physicalDevice, pExternalBufferInfo, pExternalBufferProperties, true /* do lock */);
+    } else {
+        enc->vkGetPhysicalDeviceExternalBufferProperties(
+            physicalDevice, pExternalBufferInfo, pExternalBufferProperties, true /* do lock */);
+    }
+    transformImpl_VkExternalMemoryProperties_fromhost(&pExternalBufferProperties->externalMemoryProperties, 0);
+}
+
+void ResourceTracker::on_vkGetPhysicalDeviceExternalBufferProperties(
+    void* context, VkPhysicalDevice physicalDevice,
+    const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
+    VkExternalBufferProperties* pExternalBufferProperties) {
+    return on_vkGetPhysicalDeviceExternalBufferProperties_common(
+        false /* not KHR */, context, physicalDevice, pExternalBufferInfo,
+        pExternalBufferProperties
+    );
+}
+
+void ResourceTracker::on_vkGetPhysicalDeviceExternalBufferPropertiesKHR(
+    void* context, VkPhysicalDevice physicalDevice,
+    const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo,
+    VkExternalBufferPropertiesKHR* pExternalBufferProperties) {
+    return on_vkGetPhysicalDeviceExternalBufferProperties_common(
+        true /* is KHR */, context, physicalDevice, pExternalBufferInfo,
+        pExternalBufferProperties
+    );
+}
+
 void ResourceTracker::on_vkGetPhysicalDeviceExternalSemaphoreProperties(
     void*, VkPhysicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
     VkExternalSemaphoreProperties* pExternalSemaphoreProperties) {
