aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorPetr Kraus <petr_kraus@email.cz>2017-05-18 03:38:41 +0200
committerMark Lobodzinski <mark@lunarg.com>2017-05-19 10:01:26 -0600
commit042c18c2721c33e94759f6a26cb61c5d92e76484 (patch)
tree23171de11aa4f29fc0bcfed42a7f68fc51db707e /layers/core_validation.cpp
parent8b9e5bc87ef528df943b1eacbdc2af54b06ecee0 (diff)
downloadusermoji-042c18c2721c33e94759f6a26cb61c5d92e76484.tar.xz
layers: GH1752, Update ImageSubrange checks
- fix #1752 - handle possible overflow of `level`+`count` - include correct err code in msges - update and add some tests
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp23
1 files changed, 3 insertions, 20 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 32905c3b..ea68017a 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -7766,29 +7766,12 @@ static bool ValidateBarriers(const char *funcName, VkCommandBuffer cmdBuffer, ui
funcName);
}
if (image_data) {
- skip |= ValidateImageSubrangeLevelLayerCounts(dev_data, mem_barrier->subresourceRange, funcName);
auto aspect_mask = mem_barrier->subresourceRange.aspectMask;
skip |= ValidateImageAspectMask(dev_data, image_data->image, image_data->createInfo.format, aspect_mask, funcName);
- uint32_t layer_count = ResolveRemainingLayers(&mem_barrier->subresourceRange, image_data->createInfo.arrayLayers);
- if ((mem_barrier->subresourceRange.baseArrayLayer + layer_count) > image_data->createInfo.arrayLayers) {
- skip |= log_msg(
- dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
- HandleToUint64(cmdBuffer), __LINE__, DRAWSTATE_INVALID_BARRIER, "DS",
- "%s: Subresource must have the sum of the baseArrayLayer (%d) and layerCount (%d) be less "
- "than or equal to the total number of layers (%d).",
- funcName, mem_barrier->subresourceRange.baseArrayLayer, layer_count, image_data->createInfo.arrayLayers);
- }
-
- uint32_t level_count = ResolveRemainingLevels(&mem_barrier->subresourceRange, image_data->createInfo.mipLevels);
- if ((mem_barrier->subresourceRange.baseMipLevel + level_count) > image_data->createInfo.mipLevels) {
- skip |= log_msg(
- dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
- HandleToUint64(cmdBuffer), __LINE__, DRAWSTATE_INVALID_BARRIER, "DS",
- "%s: Subresource must have the sum of the baseMipLevel (%d) and levelCount (%d) be less than or equal to "
- "the total number of levels (%d).",
- funcName, mem_barrier->subresourceRange.baseMipLevel, level_count, image_data->createInfo.mipLevels);
- }
+ std::string param_name = "pImageMemoryBarriers[" + std::to_string(i) + "].subresourceRange";
+ skip |= ValidateImageSubresourceRange(dev_data, image_data, nullptr, mem_barrier->subresourceRange, funcName,
+ param_name.c_str());
}
}