[vulkan] Clarify configuration macros for external memory and semaphores.
This CL clarifies the macros used by the external memory and semaphore
implementations in the following way:
- Replace SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD with
SWIFTSHADER_EXTERNAL_OPAQUE_FD, and do the same for semaphore.
This is driven by the fact that there is nothing specific to Linux
in the VK_KHR_external_{memory,semaphore}_fd extensions. The fact
that Linux and Android use a memfd-backed region is an implementation
detail (that is now only captured in VkDeviceMemoryExternalLinux.h).
This also opens the door to an OSX implementation of the extension
that would use a Mach-based shared memory regions instead.
- Remove SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT, since the
VK_FUCHSIA_external_semaphore extension is platform-specific, and
replace all checks against VK_USE_PLATFORM_FUCHSIA instead.
NOTE: This shall not change the generated code at all, for any
platform.
Bug: b/143122483
Bug: b/140421726
Change-Id: If3dffef15df2bf3c39b7860ed401af5a0b95e4e9
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/38489
Reviewed-by: Ben Clayton <bclayton@google.com>
Tested-by: David Turner <digit@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Vulkan/VkConfig.h b/src/Vulkan/VkConfig.h
index 5481d7d..f2014c8 100644
--- a/src/Vulkan/VkConfig.h
+++ b/src/Vulkan/VkConfig.h
@@ -84,13 +84,9 @@
}
-#if VK_USE_PLATFORM_XLIB_KHR || VK_USE_PLATFORM_ANDROID_KHR
-#define SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD 1
-#define SWIFTSHADER_EXTERNAL_SEMAPHORE_LINUX_MEMFD 1
-#endif
-
-#if VK_USE_PLATFORM_FUCHSIA
-#define SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT 1
+#if defined(__linux__) || defined(__ANDROID__)
+#define SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD 1
+#define SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD 1
#endif
#endif // VK_CONFIG_HPP_
diff --git a/src/Vulkan/VkDeviceMemory.cpp b/src/Vulkan/VkDeviceMemory.cpp
index ee56500..aeadf15 100644
--- a/src/Vulkan/VkDeviceMemory.cpp
+++ b/src/Vulkan/VkDeviceMemory.cpp
@@ -36,7 +36,7 @@
// A value of 0 corresponds to non-external memory.
virtual VkExternalMemoryHandleTypeFlagBits getFlagBit() const = 0;
-#if SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
virtual VkResult exportFd(int* pFd) const
{
return VK_ERROR_INVALID_EXTERNAL_HANDLE;
@@ -121,8 +121,12 @@
} // namespace vk
-#if SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
-#include "VkDeviceMemoryExternalLinux.hpp"
+#if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
+# if defined(__linux__) || defined(__ANDROID__)
+# include "VkDeviceMemoryExternalLinux.hpp"
+# else
+# error "Missing VK_KHR_external_memory_fd implementation for this platform!"
+# endif
#endif
namespace vk
@@ -131,8 +135,8 @@
static void findTraits(const VkMemoryAllocateInfo* pAllocateInfo,
ExternalMemoryTraits* pTraits)
{
-#if SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
- if (parseCreateInfo<LinuxMemfdExternalMemory>(pAllocateInfo, pTraits))
+#if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
+ if (parseCreateInfo<OpaqueFdExternalMemory>(pAllocateInfo, pTraits))
{
return;
}
@@ -220,7 +224,7 @@
return (supportedHandleTypes & handle_type_bit) != 0;
}
-#if SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
VkResult DeviceMemory::exportFd(int* pFd) const
{
return external->exportFd(pFd);
diff --git a/src/Vulkan/VkDeviceMemory.hpp b/src/Vulkan/VkDeviceMemory.hpp
index e63cb7e..230f0c9 100644
--- a/src/Vulkan/VkDeviceMemory.hpp
+++ b/src/Vulkan/VkDeviceMemory.hpp
@@ -28,7 +28,7 @@
static size_t ComputeRequiredAllocationSize(const VkMemoryAllocateInfo* pCreateInfo);
-#if SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
VkResult exportFd(int* pFd) const;
#endif
diff --git a/src/Vulkan/VkDeviceMemoryExternalLinux.hpp b/src/Vulkan/VkDeviceMemoryExternalLinux.hpp
index 6c4fb5f..620037d 100644
--- a/src/Vulkan/VkDeviceMemoryExternalLinux.hpp
+++ b/src/Vulkan/VkDeviceMemoryExternalLinux.hpp
@@ -19,7 +19,7 @@
#include <string.h>
#include <sys/mman.h>
-class LinuxMemfdExternalMemory : public vk::DeviceMemory::ExternalBase
+class OpaqueFdExternalMemory : public vk::DeviceMemory::ExternalBase
{
public:
// Helper struct to parse the VkMemoryAllocateInfo.pNext chain and
@@ -81,12 +81,12 @@
return info.importFd || info.exportFd;
}
- explicit LinuxMemfdExternalMemory(const VkMemoryAllocateInfo* pAllocateInfo)
+ explicit OpaqueFdExternalMemory(const VkMemoryAllocateInfo* pAllocateInfo)
: allocateInfo(pAllocateInfo)
{
}
- ~LinuxMemfdExternalMemory()
+ ~OpaqueFdExternalMemory()
{
memfd.close();
}
diff --git a/src/Vulkan/VkGetProcAddress.cpp b/src/Vulkan/VkGetProcAddress.cpp
index 991f51f..5613da2 100644
--- a/src/Vulkan/VkGetProcAddress.cpp
+++ b/src/Vulkan/VkGetProcAddress.cpp
@@ -347,7 +347,7 @@
},
#endif
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
// VK_KHR_external_semaphore_fd
{
VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME,
@@ -358,7 +358,7 @@
},
#endif
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT
+#if VK_USE_PLATFORM_FUCHSIA
// VK_FUCHSIA_external_semaphore
{
VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
@@ -369,7 +369,7 @@
},
#endif
-#if SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
// VK_KHR_external_memory_fd
{
VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME,
diff --git a/src/Vulkan/VkPhysicalDevice.cpp b/src/Vulkan/VkPhysicalDevice.cpp
index e968b83..862bc20 100644
--- a/src/Vulkan/VkPhysicalDevice.cpp
+++ b/src/Vulkan/VkPhysicalDevice.cpp
@@ -25,7 +25,7 @@
static void setExternalMemoryProperties(VkExternalMemoryHandleTypeFlagBits handleType, VkExternalMemoryProperties* properties)
{
-#if SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
if (handleType == VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT)
{
properties->compatibleHandleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT;
@@ -384,7 +384,7 @@
void PhysicalDevice::getProperties(const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties) const
{
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
if (pExternalSemaphoreInfo->handleType == VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT)
{
pExternalSemaphoreProperties->compatibleHandleTypes = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT;
@@ -393,7 +393,7 @@
return;
}
#endif
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT
+#if VK_USE_PLATFORM_FUCHSIA
if (pExternalSemaphoreInfo->handleType == VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TEMP_ZIRCON_EVENT_BIT_FUCHSIA)
{
pExternalSemaphoreProperties->compatibleHandleTypes = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TEMP_ZIRCON_EVENT_BIT_FUCHSIA;
diff --git a/src/Vulkan/VkSemaphore.cpp b/src/Vulkan/VkSemaphore.cpp
index b495ebb..bb1878f 100644
--- a/src/Vulkan/VkSemaphore.cpp
+++ b/src/Vulkan/VkSemaphore.cpp
@@ -16,9 +16,13 @@
#include "VkConfig.h"
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_LINUX_MEMFD
-#include "VkSemaphoreExternalLinux.hpp"
-#elif SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT
+#if SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
+# if defined(__linux__) || defined(__ANDROID__)
+# include "VkSemaphoreExternalLinux.hpp"
+# else
+# error "Missing VK_KHR_external_semaphore_fd implementation for this platform!"
+# endif
+#elif VK_USE_PLATFORM_FUCHSIA
#include "VkSemaphoreExternalFuchsia.hpp"
#else
#include "VkSemaphoreExternalNone.hpp"
@@ -196,7 +200,7 @@
impl->signal();
}
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
VkResult Semaphore::importFd(int fd, bool temporaryImport)
{
std::unique_lock<std::mutex> lock(impl->mutex);
@@ -226,9 +230,9 @@
}
return impl->external->exportFd(pFd);
}
-#endif // SWIFTSHADER_EXTERNAL_SEMAPHORE_LINUX_MEMFD
+#endif // SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT
+#if VK_USE_PLATFORM_FUCHSIA
VkResult Semaphore::importHandle(zx_handle_t handle, bool temporaryImport)
{
std::unique_lock<std::mutex> lock(impl->mutex);
@@ -252,6 +256,6 @@
}
return impl->external->exportHandle(pHandle);
}
-#endif // SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT
+#endif // VK_USE_PLATFORM_FUCHSIA
} // namespace vk
diff --git a/src/Vulkan/VkSemaphore.hpp b/src/Vulkan/VkSemaphore.hpp
index c0a8b04..53ad4c2 100644
--- a/src/Vulkan/VkSemaphore.hpp
+++ b/src/Vulkan/VkSemaphore.hpp
@@ -18,7 +18,7 @@
#include "VkConfig.h"
#include "VkObject.hpp"
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT
+#if VK_USE_PLATFORM_FUCHSIA
#include <zircon/types.h>
#endif
@@ -43,12 +43,12 @@
void signal();
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
VkResult importFd(int fd, bool temporaryImport);
VkResult exportFd(int* pFd) const;
#endif
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT
+#if VK_USE_PLATFORM_FUCHSIA
VkResult importHandle(zx_handle_t handle, bool temporaryImport);
VkResult exportHandle(zx_handle_t *pHandle) const;
#endif
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 28ad813..a01f392 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -248,13 +248,13 @@
// (from KHR_swapchain v70) to vkBindImageMemory2.
{ VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME, 7 },
#endif
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
{ VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION },
#endif
-#if SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
{ VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME, VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION },
#endif
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT
+#if VK_USE_PLATFORM_FUCHSIA
{ VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME, VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION },
#endif
{ VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME, VK_EXT_PROVOKING_VERTEX_SPEC_VERSION },
@@ -809,7 +809,7 @@
// This extension controls on which physical devices the memory gets allocated.
// SwiftShader only has a single physical device, so this extension does nothing in this case.
break;
-#if SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
{
auto* importInfo = reinterpret_cast<const VkImportMemoryFdInfoKHR *>(allocationInfo);
@@ -830,7 +830,7 @@
}
break;
}
-#endif
+#endif // SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
default:
WARN("pAllocateInfo->pNext sType = %s", vk::Stringify(allocationInfo->sType).c_str());
break;
@@ -864,7 +864,7 @@
vk::destroy(memory, pAllocator);
}
-#if SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR(VkDevice device, const VkMemoryGetFdInfoKHR* getFdInfo, int* pFd)
{
TRACE("(VkDevice device = %p, const VkMemoryGetFdInfoKHR* getFdInfo = %p, int* pFd = %p",
@@ -902,7 +902,7 @@
return VK_SUCCESS;
}
-#endif // SWIFTSHADER_EXTERNAL_MEMORY_LINUX_MEMFD
+#endif // SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData)
{
@@ -1098,7 +1098,7 @@
vk::destroy(semaphore, pAllocator);
}
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_LINUX_MEMFD
+#if SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd)
{
TRACE("(VkDevice device = %p, const VkSemaphoreGetFdInfoKHR* pGetFdInfo = %p, int* pFd = %p)",
@@ -1125,9 +1125,9 @@
return vk::Cast(pImportSemaphoreInfo->semaphore)->importFd(pImportSemaphoreInfo->fd, temporaryImport);
}
-#endif // SWIFTSHADER_EXTERNAL_SEMAPHORE_LINUX_MEMFD
+#endif // SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
-#if SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT
+#if VK_USE_PLATFORM_FUCHSIA
VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA(
VkDevice device,
const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo)
@@ -1161,7 +1161,7 @@
return vk::Cast(pGetZirconHandleInfo->semaphore)->exportHandle(pZirconHandle);
}
-#endif // SWIFTSHADER_EXTERNAL_SEMAPHORE_ZIRCON_EVENT
+#endif // VK_USE_PLATFORM_FUCHSIA
VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent)
{