/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrVkDefines_DEFINED #define GrVkDefines_DEFINED #include "SkTypes.h" #ifdef SK_VULKAN #ifdef SK_VULKAN_HEADER #include SK_VULKAN_HEADER // IWYU pragma: export #else // This is deprecated and all clients should define their own custum header shim that sets up // defines and includes the vulkan.h header. Then they should define SK_VULKAN_HEADER or set the // skia_vulkan_header in gn to point to their custom header. # if defined(SK_BUILD_FOR_WIN) # if !defined(VK_USE_PLATFORM_WIN32_KHR) # define VK_USE_PLATFORM_WIN32_KHR # endif # elif defined(SK_BUILD_FOR_ANDROID) # if !defined(VK_USE_PLATFORM_ANDROID_KHR) # define VK_USE_PLATFORM_ANDROID_KHR # endif # elif defined(SK_BUILD_FOR_UNIX) # if defined(__Fuchsia__) # if !defined(VK_USE_PLATFORM_MAGMA_KHR) # define VK_USE_PLATFORM_MAGMA_KHR # endif # else # if !defined(VK_USE_PLATFORM_XCB_KHR) # define VK_USE_PLATFORM_XCB_KHR # endif # endif # endif // We create our own function table and never directly call any functions via vk*(). So no need to // include the prototype functions. # if !defined(VK_NO_PROTOTYPES) && !defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) # define VK_NO_PROTOTYPES # endif # include // IWYU pragma: export #endif // SK_VULKAN_HEADER #define SKIA_REQUIRED_VULKAN_HEADER_VERSION 17 #if VK_HEADER_VERSION < SKIA_REQUIRED_VULKAN_HEADER_VERSION #error "Vulkan header version is too low" #endif // The AMD VulkanMemoryAllocator needs the objects from this extension to be declared. #ifndef VK_KHR_get_memory_requirements2 #define VK_KHR_get_memory_requirements2 1 #define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1 #define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2" typedef struct VkBufferMemoryRequirementsInfo2KHR { VkStructureType sType; const void* pNext; VkBuffer buffer; } VkBufferMemoryRequirementsInfo2KHR; typedef struct VkImageMemoryRequirementsInfo2KHR { VkStructureType sType; const void* pNext; VkImage image; } VkImageMemoryRequirementsInfo2KHR; typedef struct VkImageSparseMemoryRequirementsInfo2KHR { VkStructureType sType; const void* pNext; VkImage image; } VkImageSparseMemoryRequirementsInfo2KHR; typedef struct VkMemoryRequirements2KHR { VkStructureType sType; void* pNext; VkMemoryRequirements memoryRequirements; } VkMemoryRequirements2KHR; typedef struct VkSparseImageMemoryRequirements2KHR { VkStructureType sType; void* pNext; VkSparseImageMemoryRequirements memoryRequirements; } VkSparseImageMemoryRequirements2KHR; typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements); static constexpr VkStructureType VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = (VkStructureType) 1000146000; static constexpr VkStructureType VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = (VkStructureType) 1000146001; static constexpr VkStructureType VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = (VkStructureType) 1000146002; static constexpr VkStructureType VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = (VkStructureType) 1000146003; static constexpr VkStructureType VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = (VkStructureType) 1000146004; #endif // VK_KHR_get_memory_requirements2 // Also needed for VulkanMemoryAllocator #ifndef VK_KHR_dedicated_allocation #define VK_KHR_dedicated_allocation 1 #define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3 #define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation" typedef struct VkMemoryDedicatedRequirementsKHR { VkStructureType sType; void* pNext; VkBool32 prefersDedicatedAllocation; VkBool32 requiresDedicatedAllocation; } VkMemoryDedicatedRequirementsKHR; typedef struct VkMemoryDedicatedAllocateInfoKHR { VkStructureType sType; const void* pNext; VkImage image; VkBuffer buffer; } VkMemoryDedicatedAllocateInfoKHR; static constexpr VkStructureType VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = (VkStructureType) 1000127000; static constexpr VkStructureType VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = (VkStructureType) 1000127001; #endif // VK_KHR_dedicated_allocation #endif #endif