vulkan.h: Remove vkGetFormatInfo, add features/limits (#12827, v125)

NOTES:

1/ Some layers impact from vkGetFormatInfo ->
vkGetPhysicalDeviceFormatInfo; some checks are currently disabled in
ParamChecker pending discussion on the best way to do this. Similar
checks in Image layer implemented via additional layer_data member
to link back from VkDevice -> VkPhysicalDevice.

2/ VkPhysicalDeviceFeatures, VkPhysicalDeviceLimits members all zero
for now; also some further churn to be done to the contents of these
structures.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
diff --git a/include/vulkan.h b/include/vulkan.h
index bb40adf..131d36f 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -554,14 +554,6 @@
     VK_ENUM_RANGE(EXTENSION_INFO_TYPE, COUNT, PROPERTIES)
 } VkExtensionInfoType;
 
-typedef enum VkFormatInfoType_
-{
-    // Info type for vkGetFormatInfo()
-    VK_FORMAT_INFO_TYPE_PROPERTIES                          = 0x00000000,
-
-    VK_ENUM_RANGE(FORMAT_INFO_TYPE, PROPERTIES, PROPERTIES)
-} VkFormatInfoType;
-
 typedef enum VkSubresourceInfoType_
 {
     // Info type for vkGetImageSubresourceInfo()
@@ -1223,6 +1215,49 @@
     uint32_t                                    maxColorAttachments;            // at least 8?
 } VkPhysicalDeviceProperties;
 
+typedef struct VkPhysicalDeviceFeatures_
+{
+    // GFL_32 features
+    bool32_t                                    supportsGeometryShader;
+    bool32_t                                    supportsTessellationShader;
+    bool32_t                                    supportsSampleRateShading;
+    bool32_t                                    supportsFragmentSideEffects;
+    bool32_t                                    supportsConstantStorageBufferArrayIdexing;
+    bool32_t                                    supportsConstantStorageImageArrayIndexing;
+    bool32_t                                    supportsConstantUniformBufferArrayIndexing;
+    bool32_t                                    supportsDynamicSampledImageArrayIndexing;
+    // GFL_45 features
+    bool32_t                                    supportsBlendSrc1;
+    bool32_t                                    supportsClipAndCullDistance;
+    bool32_t                                    supportsLogicOp;
+    bool32_t                                    supportsInstancedDrawIndirect;
+    bool32_t                                    supportsDepthClip;
+    bool32_t                                    supportsFillMode;
+    bool32_t                                    supportsStorageImageExtendedFormats;
+    bool32_t                                    supportsStorageImageMultisample;
+    bool32_t                                    supportsPipelineStatisticsQuery;
+    bool32_t                                    supportsVTGSideEffects;
+    bool32_t                                    supportsDynamicUniformBufferArrayIndexing;
+    // optional features
+    bool32_t                                    supportsDynamicStorageBufferArrayIndexing;
+    bool32_t                                    supportsDynamicStorageImageArrayIndexing;
+    bool32_t                                    supportsShaderFloat64;
+    bool32_t                                    supportsDepthBounds;
+    bool32_t                                    supportsWideLines;
+    bool32_t                                    supportsTextureCompressionETC2;
+    bool32_t                                    supportsTextureCompressionASTC_LDR;
+    bool32_t                                    supportsTextureCompressionBC;
+} VkPhysicalDeviceFeatures;
+
+typedef struct VkPhysicalDeviceLimits_
+{
+    uint32_t           maxImageDimensions;
+    uint32_t           maxImageDepth;
+    uint32_t           maxImageArrayLayers;
+    // <lots more>
+} VkPhysicalDeviceLimits;
+
+
 typedef struct VkPhysicalDevicePerformance_
 {
     float                                       maxDeviceClock;
@@ -1282,6 +1317,7 @@
     const VkDeviceQueueCreateInfo*              pRequestedQueues;
     uint32_t                                    extensionCount;
     const VkExtensionProperties*                pEnabledExtensions;         // Indicate extensions to enable by index value
+    const VkPhysicalDeviceFeatures*             pEnabledFeatures;
     VkDeviceCreateFlags                         flags;                      // Device creation flags
 } VkDeviceCreateInfo;
 
@@ -2009,6 +2045,9 @@
 typedef VkResult (VKAPI *PFN_vkDestroyInstance)(VkInstance instance);
 typedef VkResult (VKAPI *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
 typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceInfo)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceInfoType infoType, size_t* pDataSize, void* pData);
+typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceFormatInfo)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties *pFormatInfo);
+typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceLimits)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceLimits* pLimits);
 typedef void *   (VKAPI *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char * pName);
 typedef void *   (VKAPI *PFN_vkGetDeviceProcAddr)(VkDevice device, const char * pName);
 typedef VkResult (VKAPI *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice);
@@ -2043,7 +2082,6 @@
 typedef VkResult (VKAPI *PFN_vkResetEvent)(VkDevice device, VkEvent event);
 typedef VkResult (VKAPI *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool);
 typedef VkResult (VKAPI *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags);
-typedef VkResult (VKAPI *PFN_vkGetFormatInfo)(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData);
 typedef VkResult (VKAPI *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer);
 typedef VkResult (VKAPI *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView);
 typedef VkResult (VKAPI *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage);
@@ -2133,6 +2171,20 @@
     size_t*                                     pDataSize,
     void*                                       pData);
 
+VkResult VKAPI vkGetPhysicalDeviceFeatures(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceFeatures*                   pFeatures);
+
+VkResult VKAPI vkGetPhysicalDeviceFormatInfo(
+    VkPhysicalDevice                            physicalDevice,
+    VkFormat                                    format,
+    VkFormatProperties*                         pFormatInfo);
+
+VkResult VKAPI vkGetPhysicalDeviceLimits(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceLimits*                     pLimits);
+
+
 void * VKAPI vkGetInstanceProcAddr(
     VkInstance                                  instance,
     const char*                                 pName);
@@ -2330,15 +2382,6 @@
     void*                                       pData,
     VkQueryResultFlags                          flags);
 
-// Format capabilities
-
-VkResult VKAPI vkGetFormatInfo(
-    VkDevice                                    device,
-    VkFormat                                    format,
-    VkFormatInfoType                            infoType,
-    size_t*                                     pDataSize,
-    void*                                       pData);
-
 // Buffer functions
 
 VkResult VKAPI vkCreateBuffer(