use dynamic rendering instead of render passes
This commit is contained in:
parent
c9aca769b2
commit
2f8929d5fb
@ -831,22 +831,41 @@ BeginRendering()
|
||||
{ color: { float32: g_vk.depth_clear } },
|
||||
];
|
||||
|
||||
VkRenderPassBeginInfo pass_info = {
|
||||
sType: VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
|
||||
renderPass: g_vk.render_pass,
|
||||
framebuffer: g_vk.framebuffer,
|
||||
VkRenderingAttachmentInfo[2] attach_descriptions = [
|
||||
{
|
||||
sType: VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
||||
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: {
|
||||
offset: { x: 0, y: 0 },
|
||||
extent: {
|
||||
width: g_vk.swapchain_extent.width,
|
||||
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]
|
||||
@ -883,7 +902,7 @@ CopyToPresentImage(Descriptor* descriptor, UVec2 extent)
|
||||
void
|
||||
FinishRendering()
|
||||
{
|
||||
vkCmdEndRenderPass(g_vk.cmd);
|
||||
vkCmdEndRendering(g_vk.cmd);
|
||||
}
|
||||
|
||||
void
|
||||
@ -3105,9 +3124,15 @@ Init(VulkanBuildInfo build_info, u64 permanent_mem, u64 frame_mem)
|
||||
count += 1;
|
||||
}
|
||||
|
||||
VkPhysicalDeviceDynamicRenderingFeaturesKHR dynamic_rendering = {
|
||||
sType: VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES,
|
||||
pNext: null,
|
||||
dynamicRendering: VK_TRUE,
|
||||
};
|
||||
|
||||
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state = {
|
||||
sType: VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT,
|
||||
pNext: null,
|
||||
pNext: &dynamic_rendering,
|
||||
extendedDynamicState: VK_TRUE,
|
||||
};
|
||||
|
||||
|
||||
@ -125,11 +125,15 @@ PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT;
|
||||
PFN_vkCmdSetStencilReference vkCmdSetStencilReference;
|
||||
PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask;
|
||||
PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask;
|
||||
PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
|
||||
PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
|
||||
|
||||
alias vkQueueSubmit2 = vkQueueSubmit2KHR;
|
||||
alias vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR;
|
||||
alias vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT;
|
||||
alias vkCmdSetStencilOp = vkCmdSetStencilOpEXT;
|
||||
alias vkCmdBeginRendering = vkCmdBeginRenderingKHR;
|
||||
alias vkCmdEndRendering = vkCmdEndRenderingKHR;
|
||||
|
||||
static string
|
||||
LoadDeviceFunc(alias fn)()
|
||||
@ -228,6 +232,8 @@ LoadDeviceFunctions()
|
||||
mixin(LoadDeviceFunc!(vkCmdSetStencilReference));
|
||||
mixin(LoadDeviceFunc!(vkCmdSetStencilCompareMask));
|
||||
mixin(LoadDeviceFunc!(vkCmdSetStencilWriteMask));
|
||||
mixin(LoadDeviceFunc!(vkCmdBeginRenderingKHR));
|
||||
mixin(LoadDeviceFunc!(vkCmdEndRenderingKHR));
|
||||
|
||||
version(AMD_GPU) version(VULKAN_DEBUG)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user