From eff562a86ffe1451d64fbf32bfdd190d5fb8903f Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Mon, 11 Jan 2016 16:50:30 -0700 Subject: [PATCH] layers: Fix image layer format mutability validation --- layers/image.cpp | 3 ++- layers/image.h | 16 +++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/layers/image.cpp b/layers/image.cpp index 658b5a1..6da2f40 100644 --- a/layers/image.cpp +++ b/layers/image.cpp @@ -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; diff --git a/layers/image.h b/layers/image.h index 21e06ff..a8c7a5c 100644 --- a/layers/image.h +++ b/layers/image.h @@ -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; -- 2.7.4