mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
vulkan/runtime: add an internal flag for independent sets
Shader objects are by definition I think independents. But implementation like Anv would like to optimize dynamic descriptors if possible. It's possible if the sets are not independent. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Acked-by: Alyssa Rosenzweig <alyssa.rosenzweig@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38678>
This commit is contained in:
parent
0ca870c6f3
commit
104206fb0f
3 changed files with 29 additions and 10 deletions
|
|
@ -1215,7 +1215,8 @@ vk_graphics_pipeline_cmd_bind(struct vk_command_buffer *cmd_buffer,
|
|||
|
||||
static VkShaderCreateFlagsEXT
|
||||
vk_pipeline_to_shader_flags(VkPipelineCreateFlags2KHR pipeline_flags,
|
||||
mesa_shader_stage stage)
|
||||
mesa_shader_stage stage,
|
||||
struct vk_pipeline_layout *pipeline_layout)
|
||||
{
|
||||
VkShaderCreateFlagsEXT shader_flags = 0;
|
||||
|
||||
|
|
@ -1241,6 +1242,15 @@ vk_pipeline_to_shader_flags(VkPipelineCreateFlags2KHR pipeline_flags,
|
|||
shader_flags |= VK_SHADER_CREATE_UNALIGNED_DISPATCH_BIT_MESA;
|
||||
}
|
||||
|
||||
/* Independent sets has no impact on compute shaders since there is only
|
||||
* ever one shader in the pipeline.
|
||||
*/
|
||||
if (stage != MESA_SHADER_COMPUTE &&
|
||||
pipeline_layout != NULL &&
|
||||
(pipeline_layout->create_flags &
|
||||
VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT))
|
||||
shader_flags |= VK_SHADER_CREATE_INDEPENDENT_SETS_BIT_MESA;
|
||||
|
||||
return shader_flags;
|
||||
}
|
||||
|
||||
|
|
@ -1528,7 +1538,8 @@ vk_get_graphics_pipeline_compile_info(struct vk_graphics_pipeline_compile_info *
|
|||
sizeof(stage->precomp_key));
|
||||
|
||||
VkShaderCreateFlagsEXT shader_flags =
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, stage->stage);
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, stage->stage,
|
||||
pipeline_layout);
|
||||
_mesa_blake3_update(&blake3_ctx, &shader_flags, sizeof(shader_flags));
|
||||
}
|
||||
|
||||
|
|
@ -1719,7 +1730,8 @@ vk_graphics_pipeline_compile_shaders(struct vk_device *device,
|
|||
struct vk_pipeline_stage *stage = &compile_info->stages[i];
|
||||
|
||||
VkShaderCreateFlagsEXT shader_flags =
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, stage->stage);
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, stage->stage,
|
||||
pipeline_layout);
|
||||
|
||||
if (compile_info->partition[p + 1] - compile_info->partition[p] > 1)
|
||||
shader_flags |= VK_SHADER_CREATE_LINK_STAGE_BIT_EXT;
|
||||
|
|
@ -2313,7 +2325,8 @@ vk_get_compute_pipeline_compile_info(struct vk_pipeline_stage *stage,
|
|||
vk_compute_pipeline_create_flags(pCreateInfo);
|
||||
|
||||
const VkShaderCreateFlagsEXT shader_flags =
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, MESA_SHADER_COMPUTE);
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, MESA_SHADER_COMPUTE,
|
||||
pipeline_layout);
|
||||
|
||||
vk_pipeline_hash_precomp_shader_stage(device, pipeline_flags, pCreateInfo->pNext,
|
||||
&pCreateInfo->stage, stage);
|
||||
|
|
@ -2388,7 +2401,8 @@ vk_pipeline_compile_compute_stage(struct vk_device *device,
|
|||
get_push_range_for_stage(pipeline_layout, MESA_SHADER_COMPUTE);
|
||||
|
||||
VkShaderCreateFlagsEXT shader_flags =
|
||||
vk_pipeline_to_shader_flags(pipeline->base.flags, MESA_SHADER_COMPUTE);
|
||||
vk_pipeline_to_shader_flags(pipeline->base.flags, MESA_SHADER_COMPUTE,
|
||||
pipeline_layout);
|
||||
|
||||
/* vk_device_shader_ops::compile() consumes the NIR regardless of whether
|
||||
* or not it succeeds and only generates shaders on success. Once compile()
|
||||
|
|
@ -2810,7 +2824,8 @@ vk_pipeline_hash_rt_shader(struct vk_device *device,
|
|||
sizeof(stage->stage));
|
||||
|
||||
VkShaderCreateFlagsEXT shader_flags =
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, stage->stage);
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, stage->stage,
|
||||
pipeline_layout);
|
||||
|
||||
hash_rt_parameters(&blake3_ctx, shader_flags,
|
||||
pipeline_flags,
|
||||
|
|
@ -2857,7 +2872,8 @@ vk_pipeline_rehash_rt_linked_shaders(struct vk_device *device,
|
|||
get_push_range_for_stage(pipeline_layout, stages[i].stage);
|
||||
|
||||
VkShaderCreateFlagsEXT shader_flags =
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, stages[i].stage);
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, stages[i].stage,
|
||||
pipeline_layout);
|
||||
|
||||
hash_rt_parameters(&blake3_ctx, shader_flags, pipeline_flags,
|
||||
push_range, pipeline_layout);
|
||||
|
|
@ -3170,7 +3186,8 @@ vk_pipeline_compile_rt_shader(struct vk_device *device,
|
|||
get_push_range_for_stage(pipeline_layout, stage->stage);
|
||||
|
||||
VkShaderCreateFlagsEXT shader_flags =
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, stage->stage);
|
||||
vk_pipeline_to_shader_flags(pipeline_flags, stage->stage,
|
||||
pipeline_layout);
|
||||
|
||||
/* vk_device_shader_ops::compile() consumes the NIR regardless of
|
||||
* whether or not it succeeds and only generates shaders on success.
|
||||
|
|
@ -3288,7 +3305,8 @@ vk_pipeline_compile_rt_shader_group(struct vk_device *device,
|
|||
compile_info[i] = (struct vk_shader_compile_info) {
|
||||
.stage = stages[i].stage,
|
||||
.flags = vk_pipeline_to_shader_flags(pipeline_flags,
|
||||
stages[i].stage),
|
||||
stages[i].stage,
|
||||
pipeline_layout),
|
||||
.rt_flags = pipeline_flags & MESA_VK_PIPELINE_RAY_TRACING_FLAGS,
|
||||
.next_stage_mask = 0,
|
||||
.nir = vk_pipeline_precomp_shader_get_nir(precomp, nir_options),
|
||||
|
|
|
|||
|
|
@ -295,7 +295,7 @@ vk_shader_compile_info_init(struct vk_shader_compile_info *info,
|
|||
|
||||
*info = (struct vk_shader_compile_info) {
|
||||
.stage = nir->info.stage,
|
||||
.flags = vk_info->flags,
|
||||
.flags = vk_info->flags | VK_SHADER_CREATE_INDEPENDENT_SETS_BIT_MESA,
|
||||
.next_stage_mask = vk_info->nextStage,
|
||||
.nir = nir,
|
||||
.robustness = rs,
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ static const VkPipelineCreateFlagBits2
|
|||
|
||||
#define VK_SHADER_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_MESA 0x1000
|
||||
#define VK_SHADER_CREATE_UNALIGNED_DISPATCH_BIT_MESA 0x2000
|
||||
#define VK_SHADER_CREATE_INDEPENDENT_SETS_BIT_MESA 0x4000
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue