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 */
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);
}
}
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) {
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;
}
}
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)
{
/** 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.
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