4 #include <ThirdParty/Vulkan/Include/vulkan/vulkan.h> 5 #include <ThirdParty/EASTL-master/include/EASTL/vector.h> 12 float robustBufferAccess;
13 float fullDrawIndexUint32;
15 float independentBlend;
17 float tessellationShader;
18 float sampleRateShading;
21 float multiDrawIndirect;
22 float drawIndirectFirstInstance;
25 float fillModeNonSolid;
31 float samplerAnisotropy;
32 float textureCompressionETC2;
33 float textureCompressionASTC_LDR;
34 float textureCompressionBC;
35 float occlusionQueryPrecise;
36 float pipelineStatisticsQuery;
37 float vertexPipelineStoresAndAtomics;
38 float fragmentStoresAndAtomics;
39 float shaderTessellationAndGeometryPointSize;
40 float shaderImageGatherExtended;
41 float shaderStorageImageExtendedFormats;
42 float shaderStorageImageMultisample;
43 float shaderStorageImageReadWithoutFormat;
44 float shaderStorageImageWriteWithoutFormat;
45 float shaderUniformBufferArrayDynamicIndexing;
46 float shaderSampledImageArrayDynamicIndexing;
47 float shaderStorageBufferArrayDynamicIndexing;
48 float shaderStorageImageArrayDynamicIndexing;
49 float shaderClipDistance;
50 float shaderCullDistance;
54 float shaderResourceResidency;
55 float shaderResourceMinLod;
57 float sparseResidencyBuffer;
58 float sparseResidencyImage2D;
59 float sparseResidencyImage3D;
60 float sparseResidency2Samples;
61 float sparseResidency4Samples;
62 float sparseResidency8Samples;
63 float sparseResidency16Samples;
64 float sparseResidencyAliased;
65 float variableMultisampleRate;
66 float inheritedQueries;
67 }VulkanDeviceFeatures_t;
75 }VulkanDeviceQueueRequestedFamilies_t;
81 int sparseBinding = -1;
83 }VulkanDeviceQueueFamilies_t;
86 VkSurfaceCapabilitiesKHR capabilities;
87 eastl::vector<VkSurfaceFormatKHR> formats;
88 eastl::vector<VkPresentModeKHR> presentModes;
89 }VulkanSwapChainSupportDetails_t;
91 class VulkanPhysicalDevice
94 static VulkanPhysicalDevice* GetBestPhysicalDevice(VulkanInstance* instance, VkSurfaceKHR surface, eastl::vector<const char*> requiredExtensions,
95 VulkanDeviceFeatures_t requiredFeatures = {}, VulkanDeviceFeatures_t optionalFeatures = {}, VulkanDeviceQueueRequestedFamilies_t requestedQueueFamilies = {},
97 static eastl::vector<VulkanPhysicalDevice*> GetAllPhysicalDevices(VulkanInstance* instance, VkSurfaceKHR surface);
99 VkPhysicalDevice GetPhysicalDevice() {
return device; };
100 VulkanDeviceQueueFamilies_t GetQueueFamilies();
101 VulkanSwapChainSupportDetails_t GetSwapChainSupportDetails();
102 VulkanSwapChainSupportDetails_t ReloadSwapChainSupportDetails();
104 VkSurfaceFormatKHR ChooseSwapSurfaceFormat(
const eastl::vector<VkSurfaceFormatKHR>& availableFormats);
105 VkPresentModeKHR ChooseSwapPresentMode(
const eastl::vector<VkPresentModeKHR> availablePresentModes);
106 VkExtent2D ChooseSwapExtent(
const VkSurfaceCapabilitiesKHR& capabilities,
int width,
int height);
108 ~VulkanPhysicalDevice();
111 VulkanPhysicalDevice(VkPhysicalDevice device, VkSurfaceKHR surface);
113 VkPhysicalDevice device;
114 VulkanDeviceQueueFamilies_t QueueFamilies;
115 VulkanSwapChainSupportDetails_t details;
116 VkSurfaceKHR surface;
117 bool queueFamiliesFound;
118 bool swapChainDetailsFound;
123 #endif // USING_VULKAN