aboutsummaryrefslogtreecommitdiff
path: root/layers/draw_state.cpp
diff options
context:
space:
mode:
authorTobin Ehlis <tobin@lunarg.com>2015-07-13 13:14:24 -0600
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-07-17 10:05:22 -0600
commita8b2d2b6e13fcb6b0bb1dd6cc2b608607c661319 (patch)
tree53c026e0cfc558cb64b83c15e4bca4b8cd447e2d /layers/draw_state.cpp
parent2d47da9c10ec86be03005ac339562dd0d3562d37 (diff)
downloadusermoji-a8b2d2b6e13fcb6b0bb1dd6cc2b608607c661319.tar.xz
layers: Fix some failing layer validation tests
Correctly set stageCount to 1 for simple VS-only pipelines. Moved some DrawState code so state is only updated in event of no validation ERROR.
Diffstat (limited to 'layers/draw_state.cpp')
-rw-r--r--layers/draw_state.cpp42
1 files changed, 21 insertions, 21 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 7f7d41eb..01a49b3f 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -497,7 +497,7 @@ static PIPELINE_NODE* initPipeline(const VkGraphicsPipelineCreateInfo* pCreateIn
size_t bufferSize = 0;
const VkPipelineVertexInputStateCreateInfo* pVICI = NULL;
- const VkPipelineColorBlendStateCreateInfo* pCBCI = NULL;
+ const VkPipelineColorBlendStateCreateInfo* pCBCI = NULL;
for (uint32_t i = 0; i < pCreateInfo->stageCount; i++) {
const VkPipelineShaderStageCreateInfo *pPSSCI = &pCreateInfo->pStages[i];
@@ -2193,8 +2193,6 @@ VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipe
GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
if (pCB) {
if (pCB->state == CB_UPDATE_ACTIVE) {
- updateCBTracking(cmdBuffer);
- addCmd(pCB, CMD_BINDDESCRIPTORSETS);
if ((VK_PIPELINE_BIND_POINT_COMPUTE == pipelineBindPoint) && (pCB->activeRenderPass)) {
log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_INVALID_RENDERPASS_CMD, "DS",
"Incorrectly binding compute DescriptorSets during active RenderPass (%#" PRIxLEAST64 ")", pCB->activeRenderPass.handle);
@@ -2221,6 +2219,8 @@ VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipe
"Attempt to bind DS %#" PRIxLEAST64 " that doesn't exist!", pDescriptorSets[i].handle);
}
}
+ updateCBTracking(cmdBuffer);
+ addCmd(pCB, CMD_BINDDESCRIPTORSETS);
get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
}
} else {
@@ -2234,14 +2234,14 @@ VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer
GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
if (pCB) {
if (pCB->state == CB_UPDATE_ACTIVE) {
- updateCBTracking(cmdBuffer);
- addCmd(pCB, CMD_BINDINDEXBUFFER);
if (!pCB->activeRenderPass) {
log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS",
"Incorrect call to vkCmdBindIndexBuffer() without an active RenderPass.");
} else {
// TODO : Can be more exact in tracking/validating details for Idx buffer, for now just make sure *something* was bound
pCB->status |= CBSTATUS_INDEX_BUFFER_BOUND;
+ updateCBTracking(cmdBuffer);
+ addCmd(pCB, CMD_BINDINDEXBUFFER);
get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
}
} else {
@@ -2261,14 +2261,14 @@ VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
if (pCB) {
if (pCB->state == CB_UPDATE_ACTIVE) {
/* TODO: Need to track all the vertex buffers, not just last one */
- updateCBTracking(cmdBuffer);
- addCmd(pCB, CMD_BINDVERTEXBUFFER);
if (!pCB->activeRenderPass) {
log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS",
"Incorrect call to vkCmdBindVertexBuffers() without an active RenderPass.");
} else {
pCB->lastVtxBinding = startBinding + bindingCount -1;
if (validateBoundPipeline(cmdBuffer)) {
+ updateCBTracking(cmdBuffer);
+ addCmd(pCB, CMD_BINDVERTEXBUFFER);
get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
}
}
@@ -2284,8 +2284,6 @@ VK_LAYER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex
VkBool32 valid = VK_FALSE;
if (pCB) {
if (pCB->state == CB_UPDATE_ACTIVE) {
- updateCBTracking(cmdBuffer);
- addCmd(pCB, CMD_DRAW);
pCB->drawCount[DRAW]++;
valid = validate_draw_state(pCB, VK_FALSE);
// TODO : Need to pass cmdBuffer as srcObj here
@@ -2293,7 +2291,9 @@ VK_LAYER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex
"vkCmdDraw() call #%lu, reporting DS state:", g_drawCount[DRAW]++);
synchAndPrintDSConfig(cmdBuffer);
if (valid) {
- get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
+ updateCBTracking(cmdBuffer);
+ addCmd(pCB, CMD_DRAW);
+ get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
}
} else {
report_error_no_cb_begin(cmdBuffer, "vkCmdBindIndexBuffer()");
@@ -2307,8 +2307,6 @@ VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firs
VkBool32 valid = VK_FALSE;
if (pCB) {
if (pCB->state == CB_UPDATE_ACTIVE) {
- updateCBTracking(cmdBuffer);
- addCmd(pCB, CMD_DRAWINDEXED);
pCB->drawCount[DRAW_INDEXED]++;
valid = validate_draw_state(pCB, VK_TRUE);
// TODO : Need to pass cmdBuffer as srcObj here
@@ -2316,6 +2314,8 @@ VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firs
"vkCmdDrawIndexed() call #%lu, reporting DS state:", g_drawCount[DRAW_INDEXED]++);
synchAndPrintDSConfig(cmdBuffer);
if (valid) {
+ updateCBTracking(cmdBuffer);
+ addCmd(pCB, CMD_DRAWINDEXED);
get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
}
} else {
@@ -2330,8 +2330,6 @@ VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buf
VkBool32 valid = VK_FALSE;
if (pCB) {
if (pCB->state == CB_UPDATE_ACTIVE) {
- updateCBTracking(cmdBuffer);
- addCmd(pCB, CMD_DRAWINDIRECT);
pCB->drawCount[DRAW_INDIRECT]++;
valid = validate_draw_state(pCB, VK_FALSE);
// TODO : Need to pass cmdBuffer as srcObj here
@@ -2339,6 +2337,8 @@ VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buf
"vkCmdDrawIndirect() call #%lu, reporting DS state:", g_drawCount[DRAW_INDIRECT]++);
synchAndPrintDSConfig(cmdBuffer);
if (valid) {
+ updateCBTracking(cmdBuffer);
+ addCmd(pCB, CMD_DRAWINDIRECT);
get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
}
} else {
@@ -2353,8 +2353,6 @@ VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuf
VkBool32 valid = VK_FALSE;
if (pCB) {
if (pCB->state == CB_UPDATE_ACTIVE) {
- updateCBTracking(cmdBuffer);
- addCmd(pCB, CMD_DRAWINDEXEDINDIRECT);
pCB->drawCount[DRAW_INDEXED_INDIRECT]++;
valid = validate_draw_state(pCB, VK_TRUE);
// TODO : Need to pass cmdBuffer as srcObj here
@@ -2362,7 +2360,9 @@ VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuf
"vkCmdDrawIndexedIndirect() call #%lu, reporting DS state:", g_drawCount[DRAW_INDEXED_INDIRECT]++);
synchAndPrintDSConfig(cmdBuffer);
if (valid) {
- get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
+ updateCBTracking(cmdBuffer);
+ addCmd(pCB, CMD_DRAWINDEXEDINDIRECT);
+ get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
}
} else {
report_error_no_cb_begin(cmdBuffer, "vkCmdBindIndexBuffer()");
@@ -2440,14 +2440,14 @@ VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(VkCmdBuffer cmdBuffer,
GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
if (pCB) {
if (pCB->state == CB_UPDATE_ACTIVE) {
- updateCBTracking(cmdBuffer);
- addCmd(pCB, CMD_BLITIMAGE);
if (pCB->activeRenderPass) {
log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_INVALID_RENDERPASS_CMD, "DS",
"Incorrectly issuing CmdBlitImage during active RenderPass (%#" PRIxLEAST64 ")", pCB->activeRenderPass.handle);
- }
- else
+ } else {
+ updateCBTracking(cmdBuffer);
+ addCmd(pCB, CMD_BLITIMAGE);
get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
+ }
} else {
report_error_no_cb_begin(cmdBuffer, "vkCmdBindIndexBuffer()");
}