From 83614d6a16e069c3ac3d0e7add4832b0dfe59079 Mon Sep 17 00:00:00 2001 From: Mike Stroyan Date: Mon, 22 Feb 2016 09:15:19 -0700 Subject: layers: draw_state VK_WHOLE_SIZE in barriers Allow use of VK_WHOLE_SIZE in barriers validation. --- layers/draw_state.cpp | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index b67e9964..ffe239b2 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -6335,19 +6335,31 @@ VkBool32 ValidateBarriers(VkCommandBuffer cmdBuffer, uint32_t memBarrierCount, ? reinterpret_cast( buffer_data->second.create_info->size) : 0; - if (buffer_data != dev_data->bufferMap.end() && - mem_barrier->offset + mem_barrier->size > buffer_size) { - skip_call |= - log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, - (VkDebugReportObjectTypeEXT)0, 0, __LINE__, - DRAWSTATE_INVALID_BARRIER, "DS", - "Buffer Barrier 0x%" PRIx64 " has offset %" PRIu64 - " and size %" PRIu64 - " whose sum is greater than total size %" PRIu64 ".", - reinterpret_cast(mem_barrier->buffer), - reinterpret_cast(mem_barrier->offset), - reinterpret_cast(mem_barrier->size), - buffer_size); + if (buffer_data != dev_data->bufferMap.end()) { + if (mem_barrier->offset >= buffer_size) { + skip_call |= + log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, + (VkDebugReportObjectTypeEXT)0, 0, __LINE__, + DRAWSTATE_INVALID_BARRIER, "DS", + "Buffer Barrier 0x%" PRIx64 " has offset %" PRIu64 + " whose sum is not less than total size %" PRIu64 ".", + reinterpret_cast(mem_barrier->buffer), + reinterpret_cast(mem_barrier->offset), + buffer_size); + } else if (mem_barrier->size != VK_WHOLE_SIZE && + (mem_barrier->offset + mem_barrier->size > buffer_size)) { + skip_call |= + log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, + (VkDebugReportObjectTypeEXT)0, 0, __LINE__, + DRAWSTATE_INVALID_BARRIER, "DS", + "Buffer Barrier 0x%" PRIx64 " has offset %" PRIu64 + " and size %" PRIu64 + " whose sum is greater than total size %" PRIu64 ".", + reinterpret_cast(mem_barrier->buffer), + reinterpret_cast(mem_barrier->offset), + reinterpret_cast(mem_barrier->size), + buffer_size); + } } } return skip_call; -- cgit v1.2.3