| // | |
| // Copyright 2019 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| // VulkanExternalHelper.h : Helper for allocating & managing vulkan external objects. | |
| #ifndef ANGLE_TESTS_TESTUTILS_VULKANEXTERNALHELPER_H_ | |
| #define ANGLE_TESTS_TESTUTILS_VULKANEXTERNALHELPER_H_ | |
| #include <vulkan/vulkan.h> | |
| namespace angle | |
| { | |
| class VulkanExternalHelper | |
| { | |
| public: | |
| VulkanExternalHelper(); | |
| ~VulkanExternalHelper(); | |
| void initialize(); | |
| VkInstance getInstance() const { return mInstance; } | |
| VkPhysicalDevice getPhysicalDevice() const { return mPhysicalDevice; } | |
| VkDevice getDevice() const { return mDevice; } | |
| VkQueue getGraphicsQueue() const { return mGraphicsQueue; } | |
| // VK_KHR_external_memory_fd | |
| bool canCreateImageOpaqueFd(VkFormat format, VkImageType type, VkImageTiling tiling) const; | |
| VkResult createImage2DOpaqueFd(VkFormat format, | |
| VkExtent3D extent, | |
| VkImage *imageOut, | |
| VkDeviceMemory *deviceMemoryOut, | |
| VkDeviceSize *deviceMemorySizeOut); | |
| VkResult exportMemoryOpaqueFd(VkDeviceMemory deviceMemory, int *fd); | |
| // VK_KHR_external_semaphore_fd | |
| bool canCreateSemaphoreOpaqueFd() const; | |
| VkResult createSemaphoreOpaqueFd(VkSemaphore *semaphore); | |
| VkResult exportSemaphoreOpaqueFd(VkSemaphore semaphore, int *fd); | |
| private: | |
| VkInstance mInstance = VK_NULL_HANDLE; | |
| VkPhysicalDevice mPhysicalDevice = VK_NULL_HANDLE; | |
| VkDevice mDevice = VK_NULL_HANDLE; | |
| VkQueue mGraphicsQueue = VK_NULL_HANDLE; | |
| VkPhysicalDeviceMemoryProperties mMemoryProperties = {}; | |
| uint32_t mGraphicsQueueFamilyIndex = UINT32_MAX; | |
| bool mHasExternalMemoryFd = false; | |
| bool mHasExternalSemaphoreFd = false; | |
| PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2 = | |
| nullptr; | |
| PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR = nullptr; | |
| PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR = nullptr; | |
| PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR | |
| vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = nullptr; | |
| }; | |
| } // namespace angle | |
| #endif // ANGLE_TESTS_TESTUTILS_VULKANEXTERNALHELPER_H_ |