mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
vulkan/runtime: use a pipeline flag for unaligned dispatches
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:
parent
f4808ea46f
commit
ed471927e5
4 changed files with 13 additions and 3 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue