bug 14537: Improve VkImageFormatProperties
diff --git a/include/vulkan.h b/include/vulkan.h
index 092a086..bea31ac 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -2096,7 +2096,7 @@
 typedef VkResult (VKAPI *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
 typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
 typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageFormatProperties* pImageFormatProperties);
+typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
 typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
 typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
 typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
@@ -2274,6 +2274,7 @@
     VkImageType                                 type,
     VkImageTiling                               tiling,
     VkImageUsageFlags                           usage,
+    VkImageCreateFlags                          flags,
     VkImageFormatProperties*                    pImageFormatProperties);
 
 VkResult VKAPI vkGetPhysicalDeviceProperties(
diff --git a/layers/device_limits.cpp b/layers/device_limits.cpp
index 49f5103..c8ff7fc 100644
--- a/layers/device_limits.cpp
+++ b/layers/device_limits.cpp
@@ -228,9 +228,9 @@
     return result;
 }
 
-VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageFormatProperties* pImageFormatProperties)
+VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties)
 {
-    VkResult result = get_dispatch_table(device_limits_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
+    VkResult result = get_dispatch_table(device_limits_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
     return result;
 }
 
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 308f983..f943ad3 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -2067,6 +2067,7 @@
     VkImageType type,
     VkImageTiling tiling,
     VkImageUsageFlags usage,
+    VkImageCreateFlags flags,
     VkImageFormatProperties* pImageFormatProperties,
     VkResult result)
 {
@@ -2116,11 +2117,12 @@
     VkImageType type,
     VkImageTiling tiling,
     VkImageUsageFlags usage,
+    VkImageCreateFlags flags,
     VkImageFormatProperties* pImageFormatProperties)
 {
-    VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
+    VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
 
-    PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties, result);
+    PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
 
     return result;
 }
diff --git a/loader/loader.c b/loader/loader.c
index a434b59..db15fbc 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -2872,6 +2872,7 @@
         VkImageType                             type,
         VkImageTiling                           tiling,
         VkImageUsageFlags                       usage,
+        VkImageCreateFlags                      flags,
         VkImageFormatProperties*                pImageFormatProperties)
 {
     uint32_t gpu_index;
@@ -2880,7 +2881,7 @@
 
     if (icd->GetPhysicalDeviceImageFormatProperties)
         res = icd->GetPhysicalDeviceImageFormatProperties(physicalDevice, format,
-                                type, tiling, usage, pImageFormatProperties);
+                                type, tiling, usage, flags, pImageFormatProperties);
 
     return res;
 }
diff --git a/loader/loader.h b/loader/loader.h
index 67fa20e..19711d9 100644
--- a/loader/loader.h
+++ b/loader/loader.h
@@ -287,12 +287,12 @@
         VkFormat                                format,
         VkFormatProperties*                     pFormatInfo);
 
-VkResult VKAPI loader_GetPhysicalDeviceImageFormatProperties(
-        VkPhysicalDevice                        physicalDevice,
+VkResult VKAPI loader_GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice                        physicalDevice,
         VkFormat                                format,
         VkImageType                             type,
         VkImageTiling                           tiling,
         VkImageUsageFlags                       usage,
+        VkImageCreateFlags                      flags,
         VkImageFormatProperties*                pImageFormatProperties);
 
 VkResult VKAPI loader_GetPhysicalDeviceSparseImageFormatProperties(
diff --git a/loader/trampoline.c b/loader/trampoline.c
index 6a9e25b..0d13e66 100644
--- a/loader/trampoline.c
+++ b/loader/trampoline.c
@@ -242,13 +242,13 @@
     return res;
 }
 
-LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageFormatProperties* pImageFormatProperties)
+LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties)
 {
     const VkLayerInstanceDispatchTable *disp;
     VkResult res;
 
     disp = loader_get_instance_dispatch(physicalDevice);
-    res = disp->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
+    res = disp->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
     return res;
 }
 
diff --git a/vulkan.py b/vulkan.py
index 2c06d30..4f16ac0 100755
--- a/vulkan.py
+++ b/vulkan.py
@@ -244,6 +244,7 @@
              Param("VkImageType", "type"),
              Param("VkImageTiling", "tiling"),
              Param("VkImageUsageFlags", "usage"),
+             Param("VkImageCreateFlags", "flags"),
              Param("VkImageFormatProperties*", "pImageFormatProperties")]),
 
         Proto("PFN_vkVoidFunction", "GetInstanceProcAddr",