Skip to content

Commit 21e3fb9

Browse files
committed
Fix missing render pass event in Vulkan for secondary command buffer with dynamic rendering
1 parent ff27378 commit 21e3fb9

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

source/vulkan/vulkan_hooks_cmd.cpp

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ static void invoke_begin_render_pass_event(const reshade::vulkan::device_impl *d
2424
const VkImageView *attachments = nullptr;
2525

2626
// Attachments may optionally be provided directly, rather than through the framebuffer object, when VK_KHR_imageless_framebuffer is used
27-
if (const auto attachment_begin_info = find_in_structure_chain<VkRenderPassAttachmentBeginInfo>(begin_info, VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO))
27+
if (const auto attachment_begin_info =
28+
find_in_structure_chain<VkRenderPassAttachmentBeginInfo>(
29+
begin_info, VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO))
2830
{
2931
attachments = attachment_begin_info->pAttachments;
3032
assert(subpass.num_color_attachments <= attachment_begin_info->attachmentCount);
@@ -257,6 +259,14 @@ VkResult VKAPI_CALL vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const Vk
257259
reshade::invoke_addon_event<reshade::addon_event::begin_render_pass>(cmd_impl, 0, nullptr, nullptr);
258260
}
259261
}
262+
else if (const auto rendering_info =
263+
find_in_structure_chain<VkCommandBufferInheritanceRenderingInfo>(
264+
inheritance_info.pNext, VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO))
265+
{
266+
cmd_impl->_is_in_render_pass = true;
267+
268+
reshade::invoke_addon_event<reshade::addon_event::begin_render_pass>(cmd_impl, 0, nullptr, nullptr);
269+
}
260270
}
261271
#endif
262272

@@ -938,6 +948,8 @@ void VKAPI_CALL vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t at
938948
{
939949
const auto cmd_impl = device_impl->get_private_data_for_object<VK_OBJECT_TYPE_COMMAND_BUFFER>(commandBuffer);
940950

951+
assert(cmd_impl->_is_in_render_pass);
952+
941953
temp_mem<reshade::api::rect> rect_data(rectCount);
942954
for (uint32_t i = 0; i < rectCount; ++i)
943955
{
@@ -1193,6 +1205,7 @@ void VKAPI_CALL vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRend
11931205
#if RESHADE_ADDON
11941206
const auto cmd_impl = device_impl->get_private_data_for_object<VK_OBJECT_TYPE_COMMAND_BUFFER>(commandBuffer);
11951207

1208+
assert(!cmd_impl->_is_in_render_pass);
11961209
assert(cmd_impl->current_render_pass == VK_NULL_HANDLE);
11971210

11981211
cmd_impl->current_subpass = 0;
@@ -1214,6 +1227,7 @@ void VKAPI_CALL vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContent
12141227
#if RESHADE_ADDON
12151228
const auto cmd_impl = device_impl->get_private_data_for_object<VK_OBJECT_TYPE_COMMAND_BUFFER>(commandBuffer);
12161229

1230+
assert(cmd_impl->_is_in_render_pass);
12171231
assert(cmd_impl->current_render_pass != VK_NULL_HANDLE);
12181232

12191233
reshade::invoke_addon_event<reshade::addon_event::end_render_pass>(cmd_impl);
@@ -1233,6 +1247,7 @@ void VKAPI_CALL vkCmdEndRenderPass(VkCommandBuffer commandBuffer)
12331247
#if RESHADE_ADDON
12341248
const auto cmd_impl = device_impl->get_private_data_for_object<VK_OBJECT_TYPE_COMMAND_BUFFER>(commandBuffer);
12351249

1250+
assert(cmd_impl->_is_in_render_pass);
12361251
assert(cmd_impl->current_render_pass != VK_NULL_HANDLE);
12371252

12381253
reshade::invoke_addon_event<reshade::addon_event::end_render_pass>(cmd_impl);
@@ -1309,6 +1324,7 @@ void VKAPI_CALL vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer, const VkRen
13091324
#if RESHADE_ADDON
13101325
const auto cmd_impl = device_impl->get_private_data_for_object<VK_OBJECT_TYPE_COMMAND_BUFFER>(commandBuffer);
13111326

1327+
assert(!cmd_impl->_is_in_render_pass);
13121328
assert(cmd_impl->current_render_pass == VK_NULL_HANDLE);
13131329

13141330
cmd_impl->current_subpass = 0;
@@ -1330,6 +1346,7 @@ void VKAPI_CALL vkCmdNextSubpass2(VkCommandBuffer commandBuffer, const VkSubpass
13301346
#if RESHADE_ADDON
13311347
const auto cmd_impl = device_impl->get_private_data_for_object<VK_OBJECT_TYPE_COMMAND_BUFFER>(commandBuffer);
13321348

1349+
assert(cmd_impl->_is_in_render_pass);
13331350
assert(cmd_impl->current_render_pass != VK_NULL_HANDLE);
13341351

13351352
reshade::invoke_addon_event<reshade::addon_event::end_render_pass>(cmd_impl);
@@ -1349,6 +1366,7 @@ void VKAPI_CALL vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, const VkSubpa
13491366
#if RESHADE_ADDON
13501367
const auto cmd_impl = device_impl->get_private_data_for_object<VK_OBJECT_TYPE_COMMAND_BUFFER>(commandBuffer);
13511368

1369+
assert(cmd_impl->_is_in_render_pass);
13521370
assert(cmd_impl->current_render_pass != VK_NULL_HANDLE);
13531371

13541372
reshade::invoke_addon_event<reshade::addon_event::end_render_pass>(cmd_impl);
@@ -1702,6 +1720,8 @@ void VKAPI_CALL vkCmdBeginRendering(VkCommandBuffer commandBuffer, const VkRende
17021720
#if RESHADE_ADDON
17031721
const auto cmd_impl = device_impl->get_private_data_for_object<VK_OBJECT_TYPE_COMMAND_BUFFER>(commandBuffer);
17041722

1723+
assert(!cmd_impl->_is_in_render_pass);
1724+
17051725
invoke_begin_render_pass_event(cmd_impl, pRenderingInfo);
17061726

17071727
cmd_impl->_is_in_render_pass = true;
@@ -1717,6 +1737,8 @@ void VKAPI_CALL vkCmdEndRendering(VkCommandBuffer commandBuffer)
17171737
#if RESHADE_ADDON
17181738
const auto cmd_impl = device_impl->get_private_data_for_object<VK_OBJECT_TYPE_COMMAND_BUFFER>(commandBuffer);
17191739

1740+
assert(cmd_impl->_is_in_render_pass);
1741+
17201742
reshade::invoke_addon_event<reshade::addon_event::end_render_pass>(cmd_impl);
17211743

17221744
std::memset(cmd_impl->current_color_attachments, 0, sizeof(cmd_impl->current_color_attachments));
@@ -1813,7 +1835,9 @@ void VKAPI_CALL vkCmdPushDescriptorSetKHR(VkCommandBuffer commandBuffer, VkPipel
18131835
update.descriptors = write.pBufferInfo;
18141836
break;
18151837
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR:
1816-
if (const auto write_acceleration_structure = find_in_structure_chain<VkWriteDescriptorSetAccelerationStructureKHR>(write.pNext, VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR))
1838+
if (const auto write_acceleration_structure =
1839+
find_in_structure_chain<VkWriteDescriptorSetAccelerationStructureKHR>(
1840+
write.pNext, VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR))
18171841
{
18181842
assert(update.count == write_acceleration_structure->accelerationStructureCount);
18191843
update.descriptors = write_acceleration_structure->pAccelerationStructures;

0 commit comments

Comments
 (0)