vulkan-cereal: refactor instance/device filtering
- Separate out instance and device extension filtering
- Use the global VK instance to determine whether to request
external and semaphore capabilities (even on MoltenVK)
- Always request external memory (both guest AHB and Fuchsia
buffer collection required)
- Always request filtered device extensions when available
BUG=235485545
TEST=compile and run
Change-Id: I840107d8c9b5e077054a673fff59d99b3eeb53bc
diff --git a/stream-servers/vulkan/VkCommonOperations.cpp b/stream-servers/vulkan/VkCommonOperations.cpp
index b192bc2..18a7d52 100644
--- a/stream-servers/vulkan/VkCommonOperations.cpp
+++ b/stream-servers/vulkan/VkCommonOperations.cpp
@@ -517,6 +517,10 @@
#endif
};
+ std::vector<const char*> externalSemaphoreInstanceExtNames = {
+ VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME,
+ };
+
uint32_t extCount = 0;
gvk->vkEnumerateInstanceExtensionProperties(nullptr, &extCount, nullptr);
std::vector<VkExtensionProperties>& exts = sVkEmulation->instanceExtensions;
@@ -525,6 +529,8 @@
bool externalMemoryCapabilitiesSupported =
extensionsSupported(exts, externalMemoryInstanceExtNames);
+ bool externalSemaphoreCapabilitiesSupported =
+ extensionsSupported(exts, externalSemaphoreInstanceExtNames);
bool moltenVKSupported =
(vk->vkGetMTLTextureMVK != nullptr) && (vk->vkSetMTLTextureMVK != nullptr);
@@ -633,6 +639,7 @@
sVkEmulation->vulkanInstanceVersion = appInfo.apiVersion;
sVkEmulation->instanceSupportsExternalMemoryCapabilities = externalMemoryCapabilitiesSupported;
+ sVkEmulation->instanceSupportsExternalSemaphoreCapabilities = externalSemaphoreCapabilitiesSupported;
sVkEmulation->instanceSupportsMoltenVK = moltenVKSupported;
if (sVkEmulation->instanceSupportsExternalMemoryCapabilities) {