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.
|
* for advanced_blend in sysmem mode if a feedback loop is detected.
|
||||||
*/
|
*/
|
||||||
if (builder->graphics_state.rp->pipeline_flags &
|
if (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 |
|
||||||
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT)) {
|
VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT)) {
|
||||||
sysmem_prim_mode = FLUSH_PER_OVERLAP_AND_OVERWRITE;
|
sysmem_prim_mode = FLUSH_PER_OVERLAP_AND_OVERWRITE;
|
||||||
pipeline->prim_order.sysmem_single_prim_mode = true;
|
pipeline->prim_order.sysmem_single_prim_mode = true;
|
||||||
}
|
}
|
||||||
@@ -3967,10 +3967,10 @@ tu_pipeline_builder_build(struct tu_pipeline_builder *builder,
|
|||||||
&builder->graphics_state);
|
&builder->graphics_state);
|
||||||
gfx_pipeline->feedback_loop_color =
|
gfx_pipeline->feedback_loop_color =
|
||||||
(builder->graphics_state.rp->pipeline_flags &
|
(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 =
|
gfx_pipeline->feedback_loop_ds =
|
||||||
(builder->graphics_state.rp->pipeline_flags &
|
(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_may_involve_textures =
|
||||||
(gfx_pipeline->feedback_loop_color ||
|
(gfx_pipeline->feedback_loop_color ||
|
||||||
gfx_pipeline->feedback_loop_ds) &&
|
gfx_pipeline->feedback_loop_ds) &&
|
||||||
@@ -4137,17 +4137,17 @@ tu_pipeline_builder_init_graphics(
|
|||||||
|
|
||||||
if (subpass->feedback_loop_color) {
|
if (subpass->feedback_loop_color) {
|
||||||
rp_state.pipeline_flags |=
|
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) {
|
if (subpass->feedback_loop_ds) {
|
||||||
rp_state.pipeline_flags |=
|
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) {
|
if (pass->fragment_density_map.attachment != VK_ATTACHMENT_UNUSED) {
|
||||||
rp_state.pipeline_flags |=
|
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;
|
builder->unscaled_input_fragcoord = 0;
|
||||||
@@ -4172,7 +4172,7 @@ tu_pipeline_builder_init_graphics(
|
|||||||
|
|
||||||
if (builder->graphics_state.rp) {
|
if (builder->graphics_state.rp) {
|
||||||
builder->fragment_density_map = (builder->graphics_state.rp->pipeline_flags &
|
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);
|
TU_DEBUG(FDM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1487,7 +1487,7 @@ static bool
|
|||||||
rp_has_ds_self_dep(const struct vk_render_pass_state *rp)
|
rp_has_ds_self_dep(const struct vk_render_pass_state *rp)
|
||||||
{
|
{
|
||||||
return rp->pipeline_flags &
|
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
|
static void
|
||||||
|
|||||||
@@ -1038,18 +1038,18 @@ vk_render_pass_state_init(struct vk_render_pass_state *rp,
|
|||||||
const VkGraphicsPipelineCreateInfo *info,
|
const VkGraphicsPipelineCreateInfo *info,
|
||||||
VkGraphicsPipelineLibraryFlagsEXT lib)
|
VkGraphicsPipelineLibraryFlagsEXT lib)
|
||||||
{
|
{
|
||||||
VkPipelineCreateFlags valid_pipeline_flags = 0;
|
VkPipelineCreateFlags2KHR valid_pipeline_flags = 0;
|
||||||
if (lib & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT) {
|
if (lib & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT) {
|
||||||
valid_pipeline_flags |=
|
valid_pipeline_flags |=
|
||||||
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
|
VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
|
||||||
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT;
|
VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT;
|
||||||
}
|
}
|
||||||
if (lib & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT) {
|
if (lib & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT) {
|
||||||
valid_pipeline_flags |=
|
valid_pipeline_flags |=
|
||||||
VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
|
VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
|
||||||
VK_PIPELINE_CREATE_DEPTH_STENCIL_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 :
|
(driver_rp ? driver_rp->pipeline_flags :
|
||||||
vk_get_pipeline_rendering_flags(info)) & valid_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
|
* For drivers which use vk_render_pass, this will also include flags
|
||||||
* generated based on subpass self-dependencies and fragment density map.
|
* 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. */
|
/* True if any feedback loops only involve input attachments. */
|
||||||
bool feedback_loop_input_only;
|
bool feedback_loop_input_only;
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include "vk_format.h"
|
#include "vk_format.h"
|
||||||
#include "vk_framebuffer.h"
|
#include "vk_framebuffer.h"
|
||||||
#include "vk_image.h"
|
#include "vk_image.h"
|
||||||
|
#include "vk_pipeline.h"
|
||||||
#include "vk_util.h"
|
#include "vk_util.h"
|
||||||
|
|
||||||
#include "util/log.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);
|
return vk_find_struct_const(info->pNext, PIPELINE_RENDERING_CREATE_INFO);
|
||||||
}
|
}
|
||||||
|
|
||||||
VkPipelineCreateFlags
|
VkPipelineCreateFlags2KHR
|
||||||
vk_get_pipeline_rendering_flags(const VkGraphicsPipelineCreateInfo *info)
|
vk_get_pipeline_rendering_flags(const VkGraphicsPipelineCreateInfo *info)
|
||||||
{
|
{
|
||||||
VkPipelineCreateFlags rendering_flags = info->flags &
|
VkPipelineCreateFlags2KHR rendering_flags =
|
||||||
(VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
|
vk_graphics_pipeline_create_flags(info) &
|
||||||
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
|
(VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
|
||||||
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
|
VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
|
||||||
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);
|
||||||
|
|
||||||
VK_FROM_HANDLE(vk_render_pass, render_pass, info->renderPass);
|
VK_FROM_HANDLE(vk_render_pass, render_pass, info->renderPass);
|
||||||
if (render_pass != NULL) {
|
if (render_pass != NULL) {
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ struct vk_subpass {
|
|||||||
VkExtent2D fragment_shading_rate_attachment_texel_size;
|
VkExtent2D fragment_shading_rate_attachment_texel_size;
|
||||||
|
|
||||||
/** Extra VkPipelineCreateFlags for this subpass */
|
/** Extra VkPipelineCreateFlags for this subpass */
|
||||||
VkPipelineCreateFlagBits pipeline_flags;
|
VkPipelineCreateFlagBits2KHR pipeline_flags;
|
||||||
|
|
||||||
/** VkAttachmentSampleCountInfoAMD for this subpass
|
/** 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
|
* :param info: |in| One of the pCreateInfos from vkCreateGraphicsPipelines
|
||||||
*/
|
*/
|
||||||
VkPipelineCreateFlags
|
VkPipelineCreateFlags2KHR
|
||||||
vk_get_pipeline_rendering_flags(const VkGraphicsPipelineCreateInfo *info);
|
vk_get_pipeline_rendering_flags(const VkGraphicsPipelineCreateInfo *info);
|
||||||
|
|
||||||
/** Returns the VkAttachmentSampleCountInfoAMD for a graphics pipeline
|
/** Returns the VkAttachmentSampleCountInfoAMD for a graphics pipeline
|
||||||
|
|||||||
Reference in New Issue
Block a user