diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index feddf08a7b0..bc034a38d3e 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -2646,7 +2646,7 @@ anv_pipeline_compile_cs(struct anv_compute_pipeline *pipeline, int64_t pipeline_start = os_time_get_nano(); const bool lower_unaligned_dispatch = - (sinfo->flags & VK_SHADER_CREATE_UNALIGNED_DISPATCH_BIT_MESA) != 0; + (pipeline->base.flags & VK_PIPELINE_CREATE_2_UNALIGNED_DISPATCH_BIT_MESA) != 0; struct anv_device *device = pipeline->base.device; const struct brw_compiler *compiler = device->physical->compiler; diff --git a/src/vulkan/runtime/vk_acceleration_structure.c b/src/vulkan/runtime/vk_acceleration_structure.c index 7620da916fa..d466c50533e 100644 --- a/src/vulkan/runtime/vk_acceleration_structure.c +++ b/src/vulkan/runtime/vk_acceleration_structure.c @@ -29,6 +29,7 @@ #include "vk_device.h" #include "vk_command_buffer.h" #include "vk_log.h" +#include "vk_pipeline.h" #include "vk_meta.h" #include "vk_shader.h" @@ -350,8 +351,6 @@ vk_get_bvh_build_pipeline_spv(struct vk_device *device, struct vk_meta_device *m }; uint32_t shader_flags = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT; - if (unaligned_dispatch) - shader_flags |= VK_SHADER_CREATE_UNALIGNED_DISPATCH_BIT_MESA; VkPipelineShaderStageCreateInfo shader_stage = { .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, @@ -362,8 +361,14 @@ vk_get_bvh_build_pipeline_spv(struct vk_device *device, struct vk_meta_device *m .pSpecializationInfo = &spec_info, }; + VkPipelineCreateFlags2CreateInfo pipeline_flags_info = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO, + .flags = unaligned_dispatch ? VK_PIPELINE_CREATE_2_UNALIGNED_DISPATCH_BIT_MESA : 0, + }; + VkComputePipelineCreateInfo pipeline_info = { .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, + .pNext = &pipeline_flags_info, .stage = shader_stage, .flags = 0, .layout = layout, diff --git a/src/vulkan/runtime/vk_pipeline.c b/src/vulkan/runtime/vk_pipeline.c index 99d2b0a1eca..ff05fd7b813 100644 --- a/src/vulkan/runtime/vk_pipeline.c +++ b/src/vulkan/runtime/vk_pipeline.c @@ -1108,6 +1108,9 @@ vk_pipeline_to_shader_flags(VkPipelineCreateFlags2KHR pipeline_flags, if (stage == MESA_SHADER_COMPUTE) { if (pipeline_flags & VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHR) shader_flags |= VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT; + + if (pipeline_flags & VK_PIPELINE_CREATE_2_UNALIGNED_DISPATCH_BIT_MESA) + shader_flags |= VK_SHADER_CREATE_UNALIGNED_DISPATCH_BIT_MESA; } return shader_flags; diff --git a/src/vulkan/runtime/vk_pipeline.h b/src/vulkan/runtime/vk_pipeline.h index 8ebaacf5ab0..a24db14ac30 100644 --- a/src/vulkan/runtime/vk_pipeline.h +++ b/src/vulkan/runtime/vk_pipeline.h @@ -45,6 +45,8 @@ extern "C" { #define VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NIR_CREATE_INFO_MESA_cast \ VkPipelineShaderStageNirCreateInfoMESA +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_UNALIGNED_DISPATCH_BIT_MESA = 0x20000000000ull; + typedef struct VkPipelineShaderStageNirCreateInfoMESA { VkStructureType sType; const void *pNext;