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),
};