mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 02:20:11 +01:00
vulkan: Record pipeline flags in the render pass
This records any rendering pipeline flags in the render pass. This provides much-needed information for the VK_KHR_fragment_shading_rate and VK_EXT_fragment_density_map extensions as well as provides an alternative to VkRenderingSelfDependencyInfoMESA which is based on VK_EXT_attachment_feedback_loop_layout. v2 (Connor): Name something more general v3 (Faith): Also add the FSR flag Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Connor Abbott <cwabbott0@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22191>
This commit is contained in:
parent
9582c1e52a
commit
bd26ae0086
2 changed files with 46 additions and 0 deletions
|
|
@ -600,6 +600,8 @@ vk_common_CreateRenderPass2(VkDevice _device,
|
|||
VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR);
|
||||
subpass->fragment_shading_rate_attachment_texel_size =
|
||||
fsr_att_info->shadingRateAttachmentTexelSize;
|
||||
subpass->pipeline_flags |=
|
||||
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR;
|
||||
}
|
||||
|
||||
/* Figure out any self-dependencies */
|
||||
|
|
@ -618,6 +620,9 @@ vk_common_CreateRenderPass2(VkDevice _device,
|
|||
VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT;
|
||||
subpass->color_attachments[c].layout =
|
||||
VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT;
|
||||
subpass->pipeline_flags |=
|
||||
VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
|
||||
|
||||
color_self_deps |= (1u << c);
|
||||
}
|
||||
}
|
||||
|
|
@ -632,6 +637,8 @@ vk_common_CreateRenderPass2(VkDevice _device,
|
|||
VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT;
|
||||
subpass->depth_stencil_attachment->layout =
|
||||
VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT;
|
||||
subpass->pipeline_flags |=
|
||||
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
|
||||
has_depth_self_dep = true;
|
||||
}
|
||||
if (aspects & VK_IMAGE_ASPECT_STENCIL_BIT) {
|
||||
|
|
@ -639,6 +646,8 @@ vk_common_CreateRenderPass2(VkDevice _device,
|
|||
VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT;
|
||||
subpass->depth_stencil_attachment->stencil_layout =
|
||||
VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT;
|
||||
subpass->pipeline_flags |=
|
||||
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
|
||||
has_stencil_self_dep = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -830,6 +839,22 @@ vk_get_pipeline_rendering_create_info(const VkGraphicsPipelineCreateInfo *info)
|
|||
return vk_find_struct_const(info->pNext, PIPELINE_RENDERING_CREATE_INFO);
|
||||
}
|
||||
|
||||
VkPipelineCreateFlags
|
||||
vk_get_pipeline_rendering_flags(const VkGraphicsPipelineCreateInfo *info)
|
||||
{
|
||||
VkPipelineCreateFlags rendering_flags = info->flags &
|
||||
(VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
|
||||
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
|
||||
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
|
||||
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT);
|
||||
|
||||
VK_FROM_HANDLE(vk_render_pass, render_pass, info->renderPass);
|
||||
if (render_pass != NULL)
|
||||
rendering_flags |= render_pass->subpasses[info->subpass].pipeline_flags;
|
||||
|
||||
return rendering_flags;
|
||||
}
|
||||
|
||||
const VkAttachmentSampleCountInfoAMD *
|
||||
vk_get_pipeline_sample_count_info_amd(const VkGraphicsPipelineCreateInfo *info)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -173,6 +173,9 @@ struct vk_subpass {
|
|||
/** VkFragmentShadingRateAttachmentInfoKHR::shadingRateAttachmentTexelSize */
|
||||
VkExtent2D fragment_shading_rate_attachment_texel_size;
|
||||
|
||||
/** Extra VkPipelineCreateFlags for this subpass */
|
||||
VkPipelineCreateFlagBits pipeline_flags;
|
||||
|
||||
/** VkRenderingSelfDependencyInfoMESA for this subpass
|
||||
*
|
||||
* This is in the pNext chain of pipeline_info and inheritance_info.
|
||||
|
|
@ -329,6 +332,24 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(vk_render_pass, base, VkRenderPass,
|
|||
const VkPipelineRenderingCreateInfo *
|
||||
vk_get_pipeline_rendering_create_info(const VkGraphicsPipelineCreateInfo *info);
|
||||
|
||||
/** Returns any extra VkPipelineCreateFlags from the render pass
|
||||
*
|
||||
* For render-pass-free drivers, this can be used to get any extra pipeline
|
||||
* create flags implied by the render pass. In particular, a render pass may
|
||||
* want to add one or both of the following:
|
||||
*
|
||||
* - VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
|
||||
* - VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
|
||||
* - VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
|
||||
*
|
||||
* If VkGraphicsPipelineCreateInfo::renderPass is VK_NULL_HANDLE, the relevant
|
||||
* flags from VkGraphicsPipelineCreateInfo::flags will be returned.
|
||||
*
|
||||
* @param[in] info One of the pCreateInfos from vkCreateGraphicsPipelines
|
||||
*/
|
||||
VkPipelineCreateFlags
|
||||
vk_get_pipeline_rendering_flags(const VkGraphicsPipelineCreateInfo *info);
|
||||
|
||||
/** Returns the VkAttachmentSampleCountInfoAMD for a graphics pipeline
|
||||
*
|
||||
* For render-pass-free drivers, this can be used in the implementaiton of
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue