vulkan: Plumb rendering flags through vk_graphics_pipeline_state

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:
Faith Ekstrand
2023-03-30 10:27:27 -05:00
committed by Marge Bot
parent f4b534d50f
commit f3876db1ee
2 changed files with 25 additions and 1 deletions

View File

@@ -976,17 +976,34 @@ vk_render_pass_state_init(struct vk_render_pass_state *rp,
const struct vk_subpass_info *sp_info,
VkGraphicsPipelineLibraryFlagsEXT lib)
{
VkPipelineCreateFlags valid_pipeline_flags = 0;
if (lib & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT) {
valid_pipeline_flags |=
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT;
}
if (lib & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT) {
valid_pipeline_flags |=
VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
}
const VkPipelineCreateFlags pipeline_flags =
vk_get_pipeline_rendering_flags(info) & valid_pipeline_flags;
/* If we already have render pass state and it has attachment info, then
* it's complete and we don't need a new one.
* it's complete and we don't need a new one. The one caveat here is that
* we may need to add in some rendering flags.
*/
if (old_rp != NULL && vk_render_pass_state_is_complete(old_rp)) {
*rp = *old_rp;
rp->pipeline_flags |= pipeline_flags;
return;
}
*rp = (struct vk_render_pass_state) {
.render_pass = info->renderPass,
.subpass = info->subpass,
.pipeline_flags = pipeline_flags,
.depth_attachment_format = VK_FORMAT_UNDEFINED,
.stencil_attachment_format = VK_FORMAT_UNDEFINED,
};

View File

@@ -650,6 +650,13 @@ struct vk_render_pass_state {
/** VkPipelineRenderingCreateInfo::viewMask */
uint32_t view_mask;
/** Render pass flags from VkGraphicsPipelineCreateInfo::flags
*
* For drivers which use vk_render_pass, this will also include flags
* generated based on subpass self-dependencies and fragment density map.
*/
VkPipelineCreateFlags pipeline_flags;
/** VkRenderingSelfDependencyInfoMESA::colorSelfDependencies */
uint8_t color_self_dependencies;