bug 14537: vkGetPhysicalDeviceImageFormatProperties doesn't express all limitations (WIP)

Use VkSampleCountFlagBits exclusively.  Note that it can be casted to integer.

https://cvs.khronos.org/bugzilla/show_bug.cgi?id=14537
diff --git a/layers/device_limits.cpp b/layers/device_limits.cpp
index 89d5885..257a669 100644
--- a/layers/device_limits.cpp
+++ b/layers/device_limits.cpp
@@ -311,7 +311,7 @@
     get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map)->instance_dispatch_table->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
 }
 
-VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties)
+VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties)
 {
     get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map)->instance_dispatch_table->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
 }
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index fda3b52..c50a23a 100755
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -575,46 +575,46 @@
     my_data->pipelineMap.clear();
 }
 // For given pipeline, return number of MSAA samples, or one if MSAA disabled
-static uint32_t getNumSamples(layer_data* my_data, const VkPipeline pipeline)
+static VkSampleCountFlagBits getNumSamples(layer_data* my_data, const VkPipeline pipeline)
 {
     PIPELINE_NODE* pPipe = my_data->pipelineMap[pipeline];
     if (VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO == pPipe->msStateCI.sType) {
         return pPipe->msStateCI.rasterizationSamples;
     }
-    return 1;
+    return VK_SAMPLE_COUNT_1_BIT;
 }
 // Validate state related to the PSO
 static VkBool32 validatePipelineState(layer_data* my_data, const GLOBAL_CB_NODE* pCB, const VkPipelineBindPoint pipelineBindPoint, const VkPipeline pipeline)
 {
     if (VK_PIPELINE_BIND_POINT_GRAPHICS == pipelineBindPoint) {
         // Verify that any MSAA request in PSO matches sample# in bound FB
-        uint32_t psoNumSamples = getNumSamples(my_data, pipeline);
+        VkSampleCountFlagBits psoNumSamples = getNumSamples(my_data, pipeline);
         if (pCB->activeRenderPass) {
             const VkRenderPassCreateInfo* pRPCI = my_data->renderPassMap[pCB->activeRenderPass];
             const VkSubpassDescription* pSD = &pRPCI->pSubpasses[pCB->activeSubpass];
-            int subpassNumSamples = 0;
+            VkSampleCountFlagBits subpassNumSamples = (VkSampleCountFlagBits) 0;
             uint32_t i;
 
             for (i = 0; i < pSD->colorAttachmentCount; i++) {
-                uint32_t samples;
+                VkSampleCountFlagBits samples;
 
                 if (pSD->pColorAttachments[i].attachment == VK_ATTACHMENT_UNUSED)
                     continue;
 
                 samples = pRPCI->pAttachments[pSD->pColorAttachments[i].attachment].samples;
-                if (subpassNumSamples == 0) {
+                if (subpassNumSamples == (VkSampleCountFlagBits) 0) {
                     subpassNumSamples = samples;
                 } else if (subpassNumSamples != samples) {
-                    subpassNumSamples = -1;
+                    subpassNumSamples = (VkSampleCountFlagBits) -1;
                     break;
                 }
             }
             if (pSD->pDepthStencilAttachment && pSD->pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) {
-                const uint32_t samples = pRPCI->pAttachments[pSD->pDepthStencilAttachment->attachment].samples;
-                if (subpassNumSamples == 0)
+                const VkSampleCountFlagBits samples = pRPCI->pAttachments[pSD->pDepthStencilAttachment->attachment].samples;
+                if (subpassNumSamples == (VkSampleCountFlagBits) 0)
                     subpassNumSamples = samples;
                 else if (subpassNumSamples != samples)
-                    subpassNumSamples = -1;
+                    subpassNumSamples = (VkSampleCountFlagBits) -1;
             }
 
             if (psoNumSamples != subpassNumSamples) {
diff --git a/layers/image.cpp b/layers/image.cpp
index b210d64..0380163 100644
--- a/layers/image.cpp
+++ b/layers/image.cpp
@@ -888,12 +888,12 @@
             skipCall |= log_msg(device_data->report_data, VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER,
                                 (uint64_t)commandBuffer, 0, IMAGE_MISMATCHED_IMAGE_TYPE, "IMAGE", str);
         }
-        if (srcImageEntry->second.samples <= 1) {
+        if (srcImageEntry->second.samples == VK_SAMPLE_COUNT_1_BIT) {
             char const str[] =  "vkCmdResolveImage called with source sample count less than 2.";
             skipCall |= log_msg(device_data->report_data, VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER,
                                 (uint64_t)commandBuffer, 0, IMAGE_INVALID_RESOLVE_SAMPLES,  "IMAGE", str);
         }
-        if (dstImageEntry->second.samples > 1) {
+        if (dstImageEntry->second.samples != VK_SAMPLE_COUNT_1_BIT) {
             char const str[] =  "vkCmdResolveImage called with dest sample count greater than 1.";
             skipCall |= log_msg(device_data->report_data, VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER,
                                 (uint64_t)commandBuffer, 0, IMAGE_INVALID_RESOLVE_SAMPLES, "IMAGE", str);
diff --git a/layers/image.h b/layers/image.h
index dcfb81a..7ff98fe 100644
--- a/layers/image.h
+++ b/layers/image.h
@@ -49,10 +49,10 @@
     uint32_t    mipLevels;
     uint32_t    arraySize;
     VkFormat    format;
-    uint32_t    samples;
+    VkSampleCountFlagBits samples;
     VkImageType imageType;
     VkExtent3D  extent;
-    _IMAGE_STATE():mipLevels(0), arraySize(0), format(VK_FORMAT_UNDEFINED), samples(0), imageType(VK_IMAGE_TYPE_RANGE_SIZE), extent{} {};
+    _IMAGE_STATE():mipLevels(0), arraySize(0), format(VK_FORMAT_UNDEFINED), samples(VK_SAMPLE_COUNT_1_BIT), imageType(VK_IMAGE_TYPE_RANGE_SIZE), extent{} {};
     _IMAGE_STATE(const VkImageCreateInfo* pCreateInfo):
         mipLevels(pCreateInfo->mipLevels),
         arraySize(pCreateInfo->arrayLayers),
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 30d345d..1acb7ba 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -2527,7 +2527,7 @@
     VkPhysicalDevice physicalDevice,
     VkFormat format,
     VkImageType type,
-    uint32_t samples,
+    VkSampleCountFlagBits samples,
     VkImageUsageFlags usage,
     VkImageTiling tiling,
     uint32_t* pNumProperties,
@@ -2582,7 +2582,7 @@
     VkPhysicalDevice physicalDevice,
     VkFormat format,
     VkImageType type,
-    uint32_t samples,
+    VkSampleCountFlagBits samples,
     VkImageUsageFlags usage,
     VkImageTiling tiling,
     uint32_t* pNumProperties,
diff --git a/layers/screenshot.cpp b/layers/screenshot.cpp
index ddd6566..734e719 100644
--- a/layers/screenshot.cpp
+++ b/layers/screenshot.cpp
@@ -158,7 +158,7 @@
         {width, height, 1},
         1,
         1,
-        1,
+        VK_SAMPLE_COUNT_1_BIT,
         VK_IMAGE_TILING_LINEAR,
         (VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_STORAGE_BIT),
     };