layers: Fix image layer format mutability validation
authorMark Lobodzinski <mark@lunarg.com>
Mon, 11 Jan 2016 23:50:30 +0000 (16:50 -0700)
committerMark Lobodzinski <mark@lunarg.com>
Tue, 12 Jan 2016 15:18:17 +0000 (08:18 -0700)
layers/image.cpp
layers/image.h

index 658b5a1..6da2f40 100644 (file)
@@ -506,12 +506,13 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(VkDevice device
             skipCall |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, IMAGE_VIEW_CREATE_ERROR, "IMAGE", "%s", ss.str().c_str());
         }
 
+        VkImageCreateFlags imageFlags  = imageEntry->second.flags;
         VkFormat           imageFormat = imageEntry->second.format;
         VkFormat           ivciFormat  = pCreateInfo->format;
         VkImageAspectFlags aspectMask  = pCreateInfo->subresourceRange.aspectMask;
 
         // Validate VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT state
-        if (pCreateInfo->flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) {
+        if (imageFlags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) {
             // Format MUST be compatible (in the same format compatibility class) as the format the image was created with
             if (vk_format_get_compatibility_class(imageFormat) != vk_format_get_compatibility_class(ivciFormat)) {
                 std::stringstream ss;
index 21e06ff..a8c7a5c 100644 (file)
@@ -51,20 +51,22 @@ typedef enum _IMAGE_ERROR
 
 typedef struct _IMAGE_STATE
 {
-    uint32_t    mipLevels;
-    uint32_t    arraySize;
-    VkFormat    format;
+    uint32_t              mipLevels;
+    uint32_t              arraySize;
+    VkFormat              format;
     VkSampleCountFlagBits samples;
-    VkImageType imageType;
-    VkExtent3D  extent;
-    _IMAGE_STATE():mipLevels(0), arraySize(0), format(VK_FORMAT_UNDEFINED), samples(VK_SAMPLE_COUNT_1_BIT), imageType(VK_IMAGE_TYPE_RANGE_SIZE), extent{} {};
+    VkImageType           imageType;
+    VkExtent3D            extent;
+    VkImageCreateFlags    flags;
+    _IMAGE_STATE():mipLevels(0), arraySize(0), format(VK_FORMAT_UNDEFINED), samples(VK_SAMPLE_COUNT_1_BIT), imageType(VK_IMAGE_TYPE_RANGE_SIZE), extent{}, flags(0) {};
     _IMAGE_STATE(const VkImageCreateInfo* pCreateInfo):
         mipLevels(pCreateInfo->mipLevels),
         arraySize(pCreateInfo->arrayLayers),
         format(pCreateInfo->format),
         samples(pCreateInfo->samples),
         imageType(pCreateInfo->imageType),
-        extent(pCreateInfo->extent)
+        extent(pCreateInfo->extent),
+        flags(pCreateInfo->flags)
         {};
 } IMAGE_STATE;