diff options
| author | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-09-21 11:44:06 -0600 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-09-23 11:15:00 -0600 |
| commit | d6217bc20873a7d70537921e7cea9be5572bc34c (patch) | |
| tree | 664d46e71fd454671fb7e68f4603da3c841e0745 /layers/draw_state.cpp | |
| parent | 4cbf78b9e52a0e2dd3e13eccc137bb39ba8000c9 (diff) | |
| download | usermoji-d6217bc20873a7d70537921e7cea9be5572bc34c.tar.xz | |
bug 14365: make separate viewport and scissor cmds
Diffstat (limited to 'layers/draw_state.cpp')
| -rw-r--r-- | layers/draw_state.cpp | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index b5035c0f..f6b6a6d2 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -1969,9 +1969,8 @@ VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBi VK_LAYER_EXPORT void VKAPI vkCmdSetViewport( VkCmdBuffer cmdBuffer, - uint32_t viewportAndScissorCount, - const VkViewport* pViewports, - const VkRect2D* pScissors) + uint32_t viewportCount, + const VkViewport* pViewports) { VkBool32 skipCall = VK_FALSE; GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer); @@ -1985,17 +1984,43 @@ VK_LAYER_EXPORT void VKAPI vkCmdSetViewport( } loader_platform_thread_lock_mutex(&globalLock); pCB->status |= CBSTATUS_VIEWPORT_SET; - pCB->viewports.resize(viewportAndScissorCount); - memcpy(pCB->viewports.data(), pViewports, viewportAndScissorCount); - pCB->scissors.resize(viewportAndScissorCount); - memcpy(pCB->scissors.data(), pScissors, viewportAndScissorCount); + pCB->viewports.resize(viewportCount); + memcpy(pCB->viewports.data(), pViewports, viewportCount); loader_platform_thread_unlock_mutex(&globalLock); } else { skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdSetViewport()"); } } if (VK_FALSE == skipCall) - get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportAndScissorCount, pViewports, pScissors); + get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports); +} + +VK_LAYER_EXPORT void VKAPI vkCmdSetScissor( + VkCmdBuffer cmdBuffer, + uint32_t scissorCount, + const VkRect2D* pScissors) +{ + VkBool32 skipCall = VK_FALSE; + GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer); + if (pCB) { + if (pCB->state == CB_UPDATE_ACTIVE) { + updateCBTracking(cmdBuffer); + skipCall |= addCmd(pCB, CMD_SETSCISSORSTATE); + if (!pCB->activeRenderPass) { + skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS", + "Incorrect call to vkCmdSetScissor() without an active RenderPass."); + } + loader_platform_thread_lock_mutex(&globalLock); + pCB->status |= CBSTATUS_SCISSOR_SET; + pCB->scissors.resize(scissorCount); + memcpy(pCB->scissors.data(), pScissors, scissorCount); + loader_platform_thread_unlock_mutex(&globalLock); + } else { + skipCall |= report_error_no_cb_begin(cmdBuffer, "vkCmdSetScissor()"); + } + } + if (VK_FALSE == skipCall) + get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors); } VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth) @@ -2307,6 +2332,7 @@ VK_LAYER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex if (pCB->state == CB_UPDATE_ACTIVE) { pCB->drawCount[DRAW]++; skipCall |= validate_draw_state(pCB, VK_FALSE); + /* TODO: Check that scissor and viewport counts are the same */ // TODO : Need to pass cmdBuffer as srcObj here skipCall |= log_msg(mdd(cmdBuffer), VK_DBG_REPORT_INFO_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, 0, 0, DRAWSTATE_NONE, "DS", "vkCmdDraw() call #%lu, reporting DS state:", g_drawCount[DRAW]++); @@ -3179,6 +3205,8 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice dev, const return (PFN_vkVoidFunction) vkCmdBindPipeline; if (!strcmp(funcName, "vkCmdSetViewport")) return (PFN_vkVoidFunction) vkCmdSetViewport; + if (!strcmp(funcName, "vkCmdSetScissor")) + return (PFN_vkVoidFunction) vkCmdSetScissor; if (!strcmp(funcName, "vkCmdSetLineWidth")) return (PFN_vkVoidFunction) vkCmdSetLineWidth; if (!strcmp(funcName, "vkCmdSetDepthBias")) |
