aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChia-I Wu <olv@lunarg.com>2015-06-26 15:34:39 +0800
committerChia-I Wu <olv@lunarg.com>2015-07-06 10:42:09 +0800
commit57b23b4df68eb77e9a87057c396da571e9168a19 (patch)
treecb0036edf9d4cd881d64d55c64d1c7d718ab343d
parent77be7d98c5b4e0f390b5845a57ec020a4cdbe481 (diff)
downloadusermoji-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.c6
-rw-r--r--demos/tri.c6
-rw-r--r--icd/nulldrv/nulldrv.c11
-rw-r--r--include/vkLayer.h1
-rw-r--r--include/vulkan.h43
-rw-r--r--layers/draw_state.cpp48
-rw-r--r--layers/draw_state.h1
-rw-r--r--layers/param_checker.cpp42
-rw-r--r--layers/screenshot.cpp1
-rw-r--r--loader/table_ops.h1
-rw-r--r--loader/trampoline.c13
-rwxr-xr-xvulkan.py6
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);
}
diff --git a/vulkan.py b/vulkan.py
index 5f468563..95ad639e 100755
--- a/vulkan.py
+++ b/vulkan.py
@@ -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")]),
],
)