vulkan/runtime: use a pipeline flag for unaligned dispatches
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

The problem with the current flag is that it seems to belong to
VkShaderCreateFlagsEXT, not VkPipelineShaderStageCreateFlagBits.

Also it is completely skipped by the vk_pipeline.c code.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: 7b634ebb63 ("vulkan/runtime: Add VK_SHADER_CREATE_UNALIGNED_DISPATCH_BIT_MESA flag")
Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36828>
This commit is contained in:
Lionel Landwerlin 2025-08-17 14:06:26 +03:00 committed by Marge Bot
parent f4808ea46f
commit ed471927e5
4 changed files with 13 additions and 3 deletions

View file

@ -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;

View file

@ -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,

View file

@ -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;

View file

@ -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;