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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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) {
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user