aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-02-07 16:55:53 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-02-08 10:25:28 -0700
commitf7d83e98348b7fc8ce707b0252b9b6b408b613b0 (patch)
treedeafd4a22bafd3b27bec1e56458289e178abbfa4 /layers/core_validation.cpp
parentd877854c9146ee17ad18f4be121fbe9ed3d4582b (diff)
downloadusermoji-f7d83e98348b7fc8ce707b0252b9b6b408b613b0.tar.xz
layers: Move MaskBits validation out of CV
Moved ValidateMaskBitsFromLayouts, ValidateMaskBits, and string_VkAccessFlags from CV into the buffer module. Change-Id: Ifaf509c59778c54e733c27e7ac0381ad2cb324c0
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp118
1 files changed, 0 insertions, 118 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index d1a011de..854664f4 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -8492,124 +8492,6 @@ VKAPI_ATTR void VKAPI_CALL CmdResetEvent(VkCommandBuffer commandBuffer, VkEvent
if (!skip_call) dev_data->dispatch_table.CmdResetEvent(commandBuffer, event, stageMask);
}
-// Print readable FlagBits in FlagMask
-static std::string string_VkAccessFlags(VkAccessFlags accessMask) {
- std::string result;
- std::string separator;
-
- if (accessMask == 0) {
- result = "[None]";
- } else {
- result = "[";
- for (auto i = 0; i < 32; i++) {
- if (accessMask & (1 << i)) {
- result = result + separator + string_VkAccessFlagBits((VkAccessFlagBits)(1 << i));
- separator = " | ";
- }
- }
- result = result + "]";
- }
- return result;
-}
-
-// AccessFlags MUST have 'required_bit' set, and may have one or more of 'optional_bits' set.
-// If required_bit is zero, accessMask must have at least one of 'optional_bits' set
-// TODO: Add tracking to ensure that at least one barrier has been set for these layout transitions
-static bool ValidateMaskBits(const layer_data *my_data, VkCommandBuffer cmdBuffer, const VkAccessFlags &accessMask,
- const VkImageLayout &layout, VkAccessFlags required_bit, VkAccessFlags optional_bits,
- const char *type) {
- bool skip_call = false;
-
- if ((accessMask & required_bit) || (!required_bit && (accessMask & optional_bits))) {
- if (accessMask & ~(required_bit | optional_bits)) {
- // TODO: Verify against Valid Use
- skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__,
- DRAWSTATE_INVALID_BARRIER, "DS",
- "Additional bits in %s accessMask 0x%X %s are specified when layout is %s.", type, accessMask,
- string_VkAccessFlags(accessMask).c_str(), string_VkImageLayout(layout));
- }
- } else {
- if (!required_bit) {
- skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__,
- DRAWSTATE_INVALID_BARRIER, "DS",
- "%s AccessMask %d %s must contain at least one of access bits %d "
- "%s when layout is %s, unless the app has previously added a "
- "barrier for this transition.",
- type, accessMask, string_VkAccessFlags(accessMask).c_str(), optional_bits,
- string_VkAccessFlags(optional_bits).c_str(), string_VkImageLayout(layout));
- } else {
- std::string opt_bits;
- if (optional_bits != 0) {
- std::stringstream ss;
- ss << optional_bits;
- opt_bits = "and may have optional bits " + ss.str() + ' ' + string_VkAccessFlags(optional_bits);
- }
- skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__,
- DRAWSTATE_INVALID_BARRIER, "DS",
- "%s AccessMask %d %s must have required access bit %d %s %s when "
- "layout is %s, unless the app has previously added a barrier for "
- "this transition.",
- type, accessMask, string_VkAccessFlags(accessMask).c_str(), required_bit,
- string_VkAccessFlags(required_bit).c_str(), opt_bits.c_str(), string_VkImageLayout(layout));
- }
- }
- return skip_call;
-}
-
-static bool ValidateMaskBitsFromLayouts(const layer_data *my_data, VkCommandBuffer cmdBuffer, const VkAccessFlags &accessMask,
- const VkImageLayout &layout, const char *type) {
- bool skip_call = false;
- switch (layout) {
- case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: {
- skip_call |= ValidateMaskBits(my_data, cmdBuffer, accessMask, layout, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
- VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, type);
- break;
- }
- case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: {
- skip_call |= ValidateMaskBits(my_data, cmdBuffer, accessMask, layout, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
- VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, type);
- break;
- }
- case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: {
- skip_call |= ValidateMaskBits(my_data, cmdBuffer, accessMask, layout, VK_ACCESS_TRANSFER_WRITE_BIT, 0, type);
- break;
- }
- case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: {
- skip_call |= ValidateMaskBits(
- my_data, cmdBuffer, accessMask, layout, 0,
- VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,
- type);
- break;
- }
- case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: {
- skip_call |= ValidateMaskBits(my_data, cmdBuffer, accessMask, layout, 0,
- VK_ACCESS_INPUT_ATTACHMENT_READ_BIT | VK_ACCESS_SHADER_READ_BIT, type);
- break;
- }
- case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: {
- skip_call |= ValidateMaskBits(my_data, cmdBuffer, accessMask, layout, VK_ACCESS_TRANSFER_READ_BIT, 0, type);
- break;
- }
- case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: {
- skip_call |= ValidateMaskBits(my_data, cmdBuffer, accessMask, layout, VK_ACCESS_MEMORY_READ_BIT, 0, type);
- break;
- }
- case VK_IMAGE_LAYOUT_UNDEFINED: {
- if (accessMask != 0) {
- // TODO: Verify against Valid Use section spec
- skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0,
- __LINE__, DRAWSTATE_INVALID_BARRIER, "DS",
- "Additional bits in %s accessMask 0x%X %s are specified when layout is %s.", type, accessMask,
- string_VkAccessFlags(accessMask).c_str(), string_VkImageLayout(layout));
- }
- break;
- }
- case VK_IMAGE_LAYOUT_GENERAL:
- default: { break; }
- }
- return skip_call;
-}
-
static bool ValidateBarriers(const char *funcName, VkCommandBuffer cmdBuffer, uint32_t memBarrierCount,
const VkMemoryBarrier *pMemBarriers, uint32_t bufferBarrierCount,
const VkBufferMemoryBarrier *pBufferMemBarriers, uint32_t imageMemBarrierCount,