use dynamic rendering instead of render passes

This commit is contained in:
Matthew 2026-06-14 15:37:47 +10:00
parent c9aca769b2
commit 2f8929d5fb
2 changed files with 92 additions and 61 deletions

View File

@ -831,22 +831,41 @@ BeginRendering()
{ color: { float32: g_vk.depth_clear } }, { color: { float32: g_vk.depth_clear } },
]; ];
VkRenderPassBeginInfo pass_info = { VkRenderingAttachmentInfo[2] attach_descriptions = [
sType: VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, {
renderPass: g_vk.render_pass, sType: VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
framebuffer: g_vk.framebuffer, imageView: g_vk.draw_image.image.view,
imageLayout: VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
loadOp: VK_ATTACHMENT_LOAD_OP_CLEAR,
storeOp: VK_ATTACHMENT_STORE_OP_STORE,
clearValue: { color: { float32: g_vk.color_clear } },
},
{
sType: VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
imageView: g_vk.depth_image.image.view,
imageLayout: VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
loadOp: VK_ATTACHMENT_LOAD_OP_CLEAR,
storeOp: VK_ATTACHMENT_STORE_OP_STORE,
clearValue: { color: { float32: g_vk.depth_clear } },
},
];
VkRenderingInfo render_info = {
sType: VK_STRUCTURE_TYPE_RENDERING_INFO,
layerCount: 1,
colorAttachmentCount: 1,
pColorAttachments: &attach_descriptions[0],
pDepthAttachment: &attach_descriptions[1],
renderArea: { renderArea: {
offset: { x: 0, y: 0 }, offset: { x: 0, y: 0 },
extent: { extent: {
width: g_vk.swapchain_extent.width, width: g_vk.swapchain_extent.width,
height: g_vk.swapchain_extent.height, height: g_vk.swapchain_extent.height,
}, },
}, }
clearValueCount: cast(u32)clear_color.length,
pClearValues: clear_color.ptr,
}; };
vkCmdBeginRenderPass(g_vk.cmd, &pass_info, VK_SUBPASS_CONTENTS_INLINE); vkCmdBeginRendering(g_vk.cmd, &render_info);
} }
u32[2] u32[2]
@ -883,7 +902,7 @@ CopyToPresentImage(Descriptor* descriptor, UVec2 extent)
void void
FinishRendering() FinishRendering()
{ {
vkCmdEndRenderPass(g_vk.cmd); vkCmdEndRendering(g_vk.cmd);
} }
void void
@ -3105,9 +3124,15 @@ Init(VulkanBuildInfo build_info, u64 permanent_mem, u64 frame_mem)
count += 1; count += 1;
} }
VkPhysicalDeviceDynamicRenderingFeaturesKHR dynamic_rendering = {
sType: VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES,
pNext: null,
dynamicRendering: VK_TRUE,
};
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state = { VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state = {
sType: VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, sType: VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT,
pNext: null, pNext: &dynamic_rendering,
extendedDynamicState: VK_TRUE, extendedDynamicState: VK_TRUE,
}; };

View File

@ -125,11 +125,15 @@ PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT;
PFN_vkCmdSetStencilReference vkCmdSetStencilReference; PFN_vkCmdSetStencilReference vkCmdSetStencilReference;
PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask;
PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask;
PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
alias vkQueueSubmit2 = vkQueueSubmit2KHR; alias vkQueueSubmit2 = vkQueueSubmit2KHR;
alias vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR; alias vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR;
alias vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT; alias vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT;
alias vkCmdSetStencilOp = vkCmdSetStencilOpEXT; alias vkCmdSetStencilOp = vkCmdSetStencilOpEXT;
alias vkCmdBeginRendering = vkCmdBeginRenderingKHR;
alias vkCmdEndRendering = vkCmdEndRenderingKHR;
static string static string
LoadDeviceFunc(alias fn)() LoadDeviceFunc(alias fn)()
@ -228,6 +232,8 @@ LoadDeviceFunctions()
mixin(LoadDeviceFunc!(vkCmdSetStencilReference)); mixin(LoadDeviceFunc!(vkCmdSetStencilReference));
mixin(LoadDeviceFunc!(vkCmdSetStencilCompareMask)); mixin(LoadDeviceFunc!(vkCmdSetStencilCompareMask));
mixin(LoadDeviceFunc!(vkCmdSetStencilWriteMask)); mixin(LoadDeviceFunc!(vkCmdSetStencilWriteMask));
mixin(LoadDeviceFunc!(vkCmdBeginRenderingKHR));
mixin(LoadDeviceFunc!(vkCmdEndRenderingKHR));
version(AMD_GPU) version(VULKAN_DEBUG) version(AMD_GPU) version(VULKAN_DEBUG)
{ {