diff options
| author | Chia-I Wu <olv@lunarg.com> | 2015-06-26 15:34:39 +0800 |
|---|---|---|
| committer | Chia-I Wu <olv@lunarg.com> | 2015-07-06 10:42:09 +0800 |
| commit | 57b23b4df68eb77e9a87057c396da571e9168a19 (patch) | |
| tree | cb0036edf9d4cd881d64d55c64d1c7d718ab343d | |
| parent | 77be7d98c5b4e0f390b5845a57ec020a4cdbe481 (diff) | |
| download | usermoji-57b23b4df68eb77e9a87057c396da571e9168a19.tar.xz | |
update vulkan.h for multi-level command buffers (V121)
With minimal changes to keep everything building and functioning.
| -rw-r--r-- | demos/cube.c | 6 | ||||
| -rw-r--r-- | demos/tri.c | 6 | ||||
| -rw-r--r-- | icd/nulldrv/nulldrv.c | 11 | ||||
| -rw-r--r-- | include/vkLayer.h | 1 | ||||
| -rw-r--r-- | include/vulkan.h | 43 | ||||
| -rw-r--r-- | layers/draw_state.cpp | 48 | ||||
| -rw-r--r-- | layers/draw_state.h | 1 | ||||
| -rw-r--r-- | layers/param_checker.cpp | 42 | ||||
| -rw-r--r-- | layers/screenshot.cpp | 1 | ||||
| -rw-r--r-- | loader/table_ops.h | 1 | ||||
| -rw-r--r-- | loader/trampoline.c | 13 | ||||
| -rwxr-xr-x | vulkan.py | 6 |
12 files changed, 129 insertions, 50 deletions
diff --git a/demos/cube.c b/demos/cube.c index 04adad6f..a3464008 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -424,6 +424,7 @@ static void demo_set_image_layout( .sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO, .pNext = NULL, .queueNodeIndex = demo->graphics_queue_node_index, + .level = VK_CMD_BUFFER_LEVEL_PRIMARY, .flags = 0, }; @@ -507,6 +508,8 @@ static void demo_draw_build_cmd(struct demo *demo, VkCmdBuffer cmd_buf) VkRenderPassCreateInfo rp_info; VkRenderPassBegin rp_begin; + rp_begin.contents = VK_RENDER_PASS_CONTENTS_INLINE; + memset(&rp_info, 0 , sizeof(rp_info)); err = vkCreateFramebuffer(demo->device, &fb_info, &rp_begin.framebuffer); assert(!err); @@ -558,7 +561,7 @@ static void demo_draw_build_cmd(struct demo *demo, VkCmdBuffer cmd_buf) clear_depth, 0, 1, &clear_range); vkCmdDraw(cmd_buf, 0, 12 * 3, 0, 1); - vkCmdEndRenderPass(cmd_buf, rp_begin.renderPass); + vkCmdEndRenderPass(cmd_buf); err = vkEndCommandBuffer(cmd_buf); assert(!err); @@ -1602,6 +1605,7 @@ static void demo_prepare(struct demo *demo) .sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO, .pNext = NULL, .queueNodeIndex = demo->graphics_queue_node_index, + .level = VK_CMD_BUFFER_LEVEL_PRIMARY, .flags = 0, }; VkResult U_ASSERT_ONLY err; diff --git a/demos/tri.c b/demos/tri.c index 1b6e4a58..6dafe64a 100644 --- a/demos/tri.c +++ b/demos/tri.c @@ -231,6 +231,7 @@ static void demo_set_image_layout( .sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO, .pNext = NULL, .queueNodeIndex = demo->graphics_queue_node_index, + .level = VK_CMD_BUFFER_LEVEL_PRIMARY, .flags = 0, }; @@ -314,6 +315,8 @@ static void demo_draw_build_cmd(struct demo *demo) VkRenderPassCreateInfo rp_info; VkRenderPassBegin rp_begin; + rp_begin.contents = VK_RENDER_PASS_CONTENTS_INLINE; + memset(&rp_info, 0 , sizeof(rp_info)); err = vkCreateFramebuffer(demo->device, &fb_info, &rp_begin.framebuffer); assert(!err); @@ -372,7 +375,7 @@ static void demo_draw_build_cmd(struct demo *demo) clear_depth, 0, 1, &clear_range); vkCmdDraw(demo->draw_cmd, 0, 3, 0, 1); - vkCmdEndRenderPass(demo->draw_cmd, rp_begin.renderPass); + vkCmdEndRenderPass(demo->draw_cmd); err = vkEndCommandBuffer(demo->draw_cmd); assert(!err); @@ -1205,6 +1208,7 @@ static void demo_prepare(struct demo *demo) .sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO, .pNext = NULL, .queueNodeIndex = demo->graphics_queue_node_index, + .level = VK_CMD_BUFFER_LEVEL_PRIMARY, .flags = 0, }; VkResult U_ASSERT_ONLY err; diff --git a/icd/nulldrv/nulldrv.c b/icd/nulldrv/nulldrv.c index 1f99a1d4..749aee4e 100644 --- a/icd/nulldrv/nulldrv.c +++ b/icd/nulldrv/nulldrv.c @@ -2013,8 +2013,15 @@ ICD_EXPORT void VKAPI vkCmdBeginRenderPass( } ICD_EXPORT void VKAPI vkCmdEndRenderPass( - VkCmdBuffer cmdBuffer, - VkRenderPass renderPass) + VkCmdBuffer cmdBuffer) +{ + NULLDRV_LOG_FUNC; +} + +ICD_EXPORT void VKAPI vkCmdExecuteCommands( + VkCmdBuffer cmdBuffer, + uint32_t cmdBuffersCount, + const VkCmdBuffer* pCmdBuffers) { NULLDRV_LOG_FUNC; } diff --git a/include/vkLayer.h b/include/vkLayer.h index a1104db2..64673545 100644 --- a/include/vkLayer.h +++ b/include/vkLayer.h @@ -122,6 +122,7 @@ typedef struct VkLayerDispatchTable_ PFN_vkCreateRenderPass CreateRenderPass; PFN_vkCmdBeginRenderPass CmdBeginRenderPass; PFN_vkCmdEndRenderPass CmdEndRenderPass; + PFN_vkCmdExecuteCommands CmdExecuteCommands; PFN_vkCreateSwapChainWSI CreateSwapChainWSI; PFN_vkDestroySwapChainWSI DestroySwapChainWSI; PFN_vkGetSwapChainInfoWSI GetSwapChainInfoWSI; diff --git a/include/vulkan.h b/include/vulkan.h index 5444b1ff..f4644f5e 100644 --- a/include/vulkan.h +++ b/include/vulkan.h @@ -33,7 +33,7 @@ #include "vk_platform.h" // Vulkan API version supported by this file -#define VK_API_VERSION VK_MAKE_VERSION(0, 120, 0) +#define VK_API_VERSION VK_MAKE_VERSION(0, 121, 0) #ifdef __cplusplus extern "C" @@ -277,6 +277,14 @@ typedef enum VkTimestampType_ VK_ENUM_RANGE(TIMESTAMP_TYPE, TOP, BOTTOM) } VkTimestampType; +typedef enum VkRenderPassContents_ +{ + VK_RENDER_PASS_CONTENTS_INLINE = 0x00000000, + VK_RENDER_PASS_CONTENTS_SECONDARY_CMD_BUFFERS = 0x00000001, + + VK_ENUM_RANGE(RENDER_PASS_CONTENTS, INLINE, SECONDARY_CMD_BUFFERS) +} VkRenderPassContents; + typedef enum VkBorderColor_ { VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0x00000000, @@ -324,6 +332,14 @@ typedef enum VkPrimitiveTopology_ VK_ENUM_RANGE(PRIMITIVE_TOPOLOGY, POINT_LIST, PATCH) } VkPrimitiveTopology; +typedef enum VkCmdBufferLevel_ +{ + VK_CMD_BUFFER_LEVEL_PRIMARY = 0x00000000, + VK_CMD_BUFFER_LEVEL_SECONDARY = 0x00000001, + + VK_ENUM_RANGE(CMD_BUFFER_LEVEL, PRIMARY, SECONDARY) +} VkCmdBufferLevel; + typedef enum VkIndexType_ { VK_INDEX_TYPE_UINT16 = 0x00000000, @@ -760,7 +776,7 @@ typedef enum VkStructureType_ VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 32, VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 33, VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 34, - VK_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO = 35, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 36, VK_STRUCTURE_TYPE_MEMORY_BARRIER = 37, VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 38, @@ -1095,6 +1111,7 @@ typedef enum VkCmdBufferOptimizeFlagBits_ VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT = VK_BIT(1), VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT = VK_BIT(2), VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT = VK_BIT(3), + VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT = 0x00000010, } VkCmdBufferOptimizeFlagBits; // Pipeline statistics flags @@ -1903,6 +1920,7 @@ typedef struct VkCmdBufferCreateInfo_ VkStructureType sType; // Must be VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO const void* pNext; // Pointer to next structure uint32_t queueNodeIndex; + VkCmdBufferLevel level; VkCmdBufferCreateFlags flags; // Command buffer creation flags } VkCmdBufferCreateInfo; @@ -1912,22 +1930,18 @@ typedef struct VkCmdBufferBeginInfo_ const void* pNext; // Pointer to next structure VkCmdBufferOptimizeFlags flags; // Command buffer optimization flags + + VkRenderPass renderPass; + VkFramebuffer framebuffer; } VkCmdBufferBeginInfo; typedef struct VkRenderPassBegin_ { VkRenderPass renderPass; VkFramebuffer framebuffer; + VkRenderPassContents contents; } VkRenderPassBegin; -typedef struct VkCmdBufferGraphicsBeginInfo_ -{ - VkStructureType sType; // Must be VK_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO - const void* pNext; // Pointer to next structure - - VkRenderPassBegin renderPassContinue; // Only needed when a render pass is split across two command buffers -} VkCmdBufferGraphicsBeginInfo; - // Union allowing specification of floating point or raw color data. Actual value selected is based on image being cleared. typedef union VkClearColorValue_ { @@ -2147,7 +2161,8 @@ typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCmdBuffer cmdBuffer, V typedef VkResult (VKAPI *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer); typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass); typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin); -typedef void (VKAPI *PFN_vkCmdEndRenderPass)(VkCmdBuffer cmdBuffer, VkRenderPass renderPass); +typedef void (VKAPI *PFN_vkCmdEndRenderPass)(VkCmdBuffer cmdBuffer); +typedef void (VKAPI *PFN_vkCmdExecuteCommands)(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers); #ifdef VK_PROTOTYPES @@ -2809,8 +2824,12 @@ void VKAPI vkCmdBeginRenderPass( const VkRenderPassBegin* pRenderPassBegin); void VKAPI vkCmdEndRenderPass( + VkCmdBuffer cmdBuffer); + +void VKAPI vkCmdExecuteCommands( VkCmdBuffer cmdBuffer, - VkRenderPass renderPass); + uint32_t cmdBuffersCount, + const VkCmdBuffer* pCmdBuffers); #endif // VK_PROTOTYPES diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 2d05e8db..b99a5b19 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -2036,16 +2036,6 @@ VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const if (CB_NEW != pCB->state) resetCB(cmdBuffer); pCB->state = CB_UPDATE_ACTIVE; - if (pBeginInfo->pNext) { - VkCmdBufferGraphicsBeginInfo* pCbGfxBI = (VkCmdBufferGraphicsBeginInfo*)pBeginInfo->pNext; - if (VK_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO == pCbGfxBI->sType) { - if (pCbGfxBI->renderPassContinue.renderPass) - pCB->activeRenderPass = pCbGfxBI->renderPassContinue.renderPass; - else - log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, DRAWSTATE_INVALID_RENDERPASS, "DS", - "You cannot use a NULL RenderPass object in vkCmdBeginCommandBuffer()"); - } - } } else { log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, cmdBuffer, 0, DRAWSTATE_INVALID_CMD_BUFFER, "DS", "In vkBeginCommandBuffer() and unable to find CmdBuffer Node for CB %p!", (void*)cmdBuffer); @@ -2725,23 +2715,33 @@ VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkR } } -VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass) +VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer) { GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer); if (pCB) { - if (renderPass) { - if (!pCB->activeRenderPass) { - log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS", - "Incorrect call to vkCmdEndRenderPass() without an active RenderPass."); - } else { - updateCBTracking(cmdBuffer); - addCmd(pCB, CMD_ENDRENDERPASS); - pCB->activeRenderPass = 0; - get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer, renderPass); - } + if (!pCB->activeRenderPass) { + log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS", + "Incorrect call to vkCmdEndRenderPass() without an active RenderPass."); } else { - log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, DRAWSTATE_INVALID_RENDERPASS, "DS", - "You cannot use a NULL RenderPass object in vkCmdEndRenderPass()"); + updateCBTracking(cmdBuffer); + addCmd(pCB, CMD_ENDRENDERPASS); + pCB->activeRenderPass = 0; + get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer); + } + } +} + +VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers) +{ + GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer); + if (pCB) { + if (!pCB->activeRenderPass) { + log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS", + "Incorrect call to vkCmdExecuteCommands() without an active RenderPass."); + } else { + updateCBTracking(cmdBuffer); + addCmd(pCB, CMD_EXECUTECOMMANDS); + get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers); } } } @@ -2984,6 +2984,8 @@ VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice dev, const char* funcNa return (void*) vkCmdBeginRenderPass; if (!strcmp(funcName, "vkCmdEndRenderPass")) return (void*) vkCmdEndRenderPass; + if (!strcmp(funcName, "vkCmdExecuteCommands")) + return (void*) vkCmdExecuteCommands; if (!strcmp("drawStateDumpDotFile", funcName)) return (void*) drawStateDumpDotFile; if (!strcmp("drawStateDumpCommandBufferDotFile", funcName)) diff --git a/layers/draw_state.h b/layers/draw_state.h index 6f8f016a..c46a28a5 100644 --- a/layers/draw_state.h +++ b/layers/draw_state.h @@ -211,6 +211,7 @@ typedef enum _CMD_TYPE CMD_SAVEATOMICCOUNTERS, CMD_BEGINRENDERPASS, CMD_ENDRENDERPASS, + CMD_EXECUTECOMMANDS, CMD_DBGMARKERBEGIN, CMD_DBGMARKEREND, } CMD_TYPE; diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index 95710f6a..9b925266 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -9476,8 +9476,7 @@ void PreCmdEndRenderPass( } void PostCmdEndRenderPass( - VkCmdBuffer cmdBuffer, - VkRenderPass renderPass) + VkCmdBuffer cmdBuffer) { if(cmdBuffer == nullptr) { @@ -9485,23 +9484,48 @@ void PostCmdEndRenderPass( "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } +} - if(renderPass == nullptr) +void PreCmdExecuteCommands( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) { log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", - "vkCmdEndRenderPass parameter, VkRenderPass renderPass, is null pointer"); + "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } +} + +void PostCmdExecuteCommands( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } } VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass( - VkCmdBuffer cmdBuffer, - VkRenderPass renderPass) + VkCmdBuffer cmdBuffer) { PreCmdEndRenderPass(cmdBuffer); - get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer, renderPass); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer); + + PostCmdEndRenderPass(cmdBuffer); +} + +VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands( + VkCmdBuffer cmdBuffer, + uint32_t cmdBuffersCount, + const VkCmdBuffer* pCmdBuffers) +{ + PreCmdExecuteCommands(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers); - PostCmdEndRenderPass(cmdBuffer, renderPass); + PostCmdExecuteCommands(cmdBuffer); } VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName) @@ -9694,6 +9718,8 @@ VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* fun return (void*) vkCmdBeginRenderPass; if (!strcmp(funcName, "vkCmdEndRenderPass")) return (void*) vkCmdEndRenderPass; + if (!strcmp(funcName, "vkCmdExecuteCommands")) + return (void*) vkCmdExecuteCommands; if (!strcmp(funcName, "vkGetGlobalExtensionCount")) return (void*) vkGetGlobalExtensionCount; if (!strcmp(funcName, "vkGetGlobalExtensionProperties")) diff --git a/layers/screenshot.cpp b/layers/screenshot.cpp index 313bb729..8a968e66 100644 --- a/layers/screenshot.cpp +++ b/layers/screenshot.cpp @@ -144,6 +144,7 @@ static void writePPM( const char *filename, VkImage image1) VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO, NULL, deviceMap[device]->queueNodeIndex, + VK_CMD_BUFFER_LEVEL_PRIMARY, 0 }; const VkCmdBufferBeginInfo cmdBufferBeginInfo = { diff --git a/loader/table_ops.h b/loader/table_ops.h index 9a523f31..52cb9c12 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -131,6 +131,7 @@ static inline void loader_init_device_dispatch_table(VkLayerDispatchTable *table table->CreateRenderPass = (PFN_vkCreateRenderPass) gpa(dev, "vkCreateRenderPass"); table->CmdBeginRenderPass = (PFN_vkCmdBeginRenderPass) gpa(dev, "vkCmdBeginRenderPass"); table->CmdEndRenderPass = (PFN_vkCmdEndRenderPass) gpa(dev, "vkCmdEndRenderPass"); + table->CmdExecuteCommands = (PFN_vkCmdExecuteCommands) gpa(dev, "vkCmdExecuteCommands"); //TODO move into it's own table //TODO also consider dropping trampoline code for these device level extensions entirely // then don't need loader to know about these at all but then not queryable via GIPA diff --git a/loader/trampoline.c b/loader/trampoline.c index 5a47172f..242f04e0 100644 --- a/loader/trampoline.c +++ b/loader/trampoline.c @@ -1125,11 +1125,20 @@ LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRen disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin); } -LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass) +LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer) { const VkLayerDispatchTable *disp; disp = loader_get_dispatch(cmdBuffer); - disp->CmdEndRenderPass(cmdBuffer, renderPass); + disp->CmdEndRenderPass(cmdBuffer); +} + +LOADER_EXPORT void VKAPI vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers) +{ + const VkLayerDispatchTable *disp; + + disp = loader_get_dispatch(cmdBuffer); + + disp->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers); } @@ -831,8 +831,12 @@ core = Extension( Param("const VkRenderPassBegin*", "pRenderPassBegin")]), Proto("void", "CmdEndRenderPass", + [Param("VkCmdBuffer", "cmdBuffer")]), + + Proto("void", "CmdExecuteCommands", [Param("VkCmdBuffer", "cmdBuffer"), - Param("VkRenderPass", "renderPass")]), + Param("uint32_t", "cmdBuffersCount"), + Param("const VkCmdBuffer*", "pCmdBuffers")]), ], ) |
