layers: Warn in DrawState if DescriptorSet bound that was never updated.
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 543ecbe..fb125f0 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -2182,7 +2182,8 @@
"Incorrectly binding graphics DescriptorSets without an active RenderPass");
} else if (validateBoundPipeline(cmdBuffer)) {
for (uint32_t i=0; i<setCount; i++) {
- if (getSetNode(pDescriptorSets[i])) {
+ SET_NODE* pSet = getSetNode(pDescriptorSets[i]);
+ if (pSet) {
loader_platform_thread_lock_mutex(&globalLock);
pCB->lastBoundDescriptorSet = pDescriptorSets[i];
pCB->lastBoundPipelineLayout = layout;
@@ -2191,6 +2192,9 @@
loader_platform_thread_unlock_mutex(&globalLock);
log_msg(mdd(cmdBuffer), VK_DBG_REPORT_INFO_BIT, VK_OBJECT_TYPE_DESCRIPTOR_SET, pDescriptorSets[i], 0, DRAWSTATE_NONE, "DS",
"DS %p bound on pipeline %s", (void*)pDescriptorSets[i], string_VkPipelineBindPoint(pipelineBindPoint));
+ if (!pSet->pUpdateStructs)
+ log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, VK_OBJECT_TYPE_DESCRIPTOR_SET, pDescriptorSets[i], 0, DRAWSTATE_DESCRIPTOR_SET_NOT_UPDATED, "DS",
+ "DS %p bound but it was never updated. You may want to either update it or not bind it.", (void*)pDescriptorSets[i]);
} else {
log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DESCRIPTOR_SET, pDescriptorSets[i], 0, DRAWSTATE_INVALID_SET, "DS",
"Attempt to bind DS %p that doesn't exist!", (void*)pDescriptorSets[i]);