vk/graphics_state: Support VK_KHR_maintenance5

Switch to using VkPipelineCreateFlags2KHR, and use the new common helper
to get the right flags.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25436>
This commit is contained in:
Connor Abbott
2023-09-28 12:41:58 +02:00
committed by Marge Bot
parent e6f5d7222c
commit 2b62d90158
6 changed files with 26 additions and 24 deletions

View File

@@ -3775,8 +3775,8 @@ tu_pipeline_builder_parse_rasterization_order(
* for advanced_blend in sysmem mode if a feedback loop is detected.
*/
if (builder->graphics_state.rp->pipeline_flags &
(VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT)) {
(VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT)) {
sysmem_prim_mode = FLUSH_PER_OVERLAP_AND_OVERWRITE;
pipeline->prim_order.sysmem_single_prim_mode = true;
}
@@ -3967,10 +3967,10 @@ tu_pipeline_builder_build(struct tu_pipeline_builder *builder,
&builder->graphics_state);
gfx_pipeline->feedback_loop_color =
(builder->graphics_state.rp->pipeline_flags &
VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT);
VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT);
gfx_pipeline->feedback_loop_ds =
(builder->graphics_state.rp->pipeline_flags &
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT);
VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT);
gfx_pipeline->feedback_loop_may_involve_textures =
(gfx_pipeline->feedback_loop_color ||
gfx_pipeline->feedback_loop_ds) &&
@@ -4137,17 +4137,17 @@ tu_pipeline_builder_init_graphics(
if (subpass->feedback_loop_color) {
rp_state.pipeline_flags |=
VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
}
if (subpass->feedback_loop_ds) {
rp_state.pipeline_flags |=
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
}
if (pass->fragment_density_map.attachment != VK_ATTACHMENT_UNUSED) {
rp_state.pipeline_flags |=
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT;
VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT;
}
builder->unscaled_input_fragcoord = 0;
@@ -4172,7 +4172,7 @@ tu_pipeline_builder_init_graphics(
if (builder->graphics_state.rp) {
builder->fragment_density_map = (builder->graphics_state.rp->pipeline_flags &
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT) ||
VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT) ||
TU_DEBUG(FDM);
}
}

View File

@@ -1487,7 +1487,7 @@ static bool
rp_has_ds_self_dep(const struct vk_render_pass_state *rp)
{
return rp->pipeline_flags &
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
}
static void

View File

@@ -1038,18 +1038,18 @@ vk_render_pass_state_init(struct vk_render_pass_state *rp,
const VkGraphicsPipelineCreateInfo *info,
VkGraphicsPipelineLibraryFlagsEXT lib)
{
VkPipelineCreateFlags valid_pipeline_flags = 0;
VkPipelineCreateFlags2KHR 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;
VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
VK_PIPELINE_CREATE_2_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;
VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT;
}
const VkPipelineCreateFlags pipeline_flags =
const VkPipelineCreateFlags2KHR pipeline_flags =
(driver_rp ? driver_rp->pipeline_flags :
vk_get_pipeline_rendering_flags(info)) & valid_pipeline_flags;

View File

@@ -680,7 +680,7 @@ struct vk_render_pass_state {
* 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;
VkPipelineCreateFlags2KHR pipeline_flags;
/* True if any feedback loops only involve input attachments. */
bool feedback_loop_input_only;

View File

@@ -30,6 +30,7 @@
#include "vk_format.h"
#include "vk_framebuffer.h"
#include "vk_image.h"
#include "vk_pipeline.h"
#include "vk_util.h"
#include "util/log.h"
@@ -838,14 +839,15 @@ vk_get_pipeline_rendering_create_info(const VkGraphicsPipelineCreateInfo *info)
return vk_find_struct_const(info->pNext, PIPELINE_RENDERING_CREATE_INFO);
}
VkPipelineCreateFlags
VkPipelineCreateFlags2KHR
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);
VkPipelineCreateFlags2KHR rendering_flags =
vk_graphics_pipeline_create_flags(info) &
(VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT);
VK_FROM_HANDLE(vk_render_pass, render_pass, info->renderPass);
if (render_pass != NULL) {

View File

@@ -155,7 +155,7 @@ struct vk_subpass {
VkExtent2D fragment_shading_rate_attachment_texel_size;
/** Extra VkPipelineCreateFlags for this subpass */
VkPipelineCreateFlagBits pipeline_flags;
VkPipelineCreateFlagBits2KHR pipeline_flags;
/** VkAttachmentSampleCountInfoAMD for this subpass
*
@@ -329,7 +329,7 @@ vk_get_pipeline_rendering_create_info(const VkGraphicsPipelineCreateInfo *info);
*
* :param info: |in| One of the pCreateInfos from vkCreateGraphicsPipelines
*/
VkPipelineCreateFlags
VkPipelineCreateFlags2KHR
vk_get_pipeline_rendering_flags(const VkGraphicsPipelineCreateInfo *info);
/** Returns the VkAttachmentSampleCountInfoAMD for a graphics pipeline