vulkan: stop passing vk_device to vk_set_subgroup_size()

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40481>
This commit is contained in:
Samuel Pitoiset 2026-03-16 11:08:09 +01:00 committed by Marge Bot
parent 6e39982b32
commit 59883a5cb6
4 changed files with 26 additions and 18 deletions

View file

@ -363,7 +363,10 @@ radv_shader_choose_subgroup_size(struct radv_device *device, nir_shader *nir,
if (pdev->cache_key.no_implicit_varying_subgroup_size)
spirv_version = 0x10000;
vk_set_subgroup_size(&device->vk, nir, spirv_version, rss_info.requiredSubgroupSize ? &rss_info : NULL,
struct vk_properties *properties = &device->vk.physical->properties;
vk_set_subgroup_size(nir, properties->subgroupSize, properties->minSubgroupSize, properties->maxSubgroupSize,
spirv_version, rss_info.requiredSubgroupSize ? &rss_info : NULL,
stage_key->subgroup_allow_varying, stage_key->subgroup_require_full);
nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir));

View file

@ -121,14 +121,15 @@ get_required_subgroup_size(const void *info_pNext)
}
void
vk_set_subgroup_size(struct vk_device *device,
nir_shader *shader,
vk_set_subgroup_size(nir_shader *shader,
uint32_t subgroup_size,
uint32_t min_subgroup_size,
uint32_t max_subgroup_size,
uint32_t spirv_version,
const void *info_pNext,
bool allow_varying,
bool require_full)
{
struct vk_properties *properties = &device->physical->properties;
uint32_t req_subgroup_size = get_required_subgroup_size(info_pNext);
if (req_subgroup_size) {
assert(util_is_power_of_two_nonzero(req_subgroup_size));
@ -138,23 +139,23 @@ vk_set_subgroup_size(struct vk_device *device,
shader->info.min_subgroup_size = req_subgroup_size;
} else if (allow_varying || spirv_version >= 0x10600) {
/* Starting with SPIR-V 1.6, varying subgroup size is the default */
} else if (properties->subgroupSize) {
shader->info.api_subgroup_size = properties->subgroupSize;
shader->info.max_subgroup_size = properties->subgroupSize;
} else if (subgroup_size) {
shader->info.api_subgroup_size = subgroup_size;
shader->info.max_subgroup_size = subgroup_size;
if (require_full) {
assert(shader->info.stage == MESA_SHADER_COMPUTE ||
shader->info.stage == MESA_SHADER_MESH ||
shader->info.stage == MESA_SHADER_TASK);
shader->info.min_subgroup_size = properties->subgroupSize;
shader->info.min_subgroup_size = subgroup_size;
}
}
if (properties->maxSubgroupSize) {
assert(properties->minSubgroupSize);
if (max_subgroup_size) {
assert(min_subgroup_size);
shader->info.max_subgroup_size =
MIN2(shader->info.max_subgroup_size, properties->maxSubgroupSize);
MIN2(shader->info.max_subgroup_size, max_subgroup_size);
shader->info.min_subgroup_size =
MAX2(shader->info.min_subgroup_size, properties->minSubgroupSize);
MAX2(shader->info.min_subgroup_size, min_subgroup_size);
}
assert(shader->info.max_subgroup_size >= shader->info.min_subgroup_size);
@ -169,6 +170,7 @@ vk_pipeline_shader_stage_to_nir(struct vk_device *device,
void *mem_ctx, nir_shader **nir_out)
{
VK_FROM_HANDLE(vk_shader_module, module, info->module);
const struct vk_properties *properties = &device->physical->properties;
const mesa_shader_stage stage = vk_to_mesa_shader_stage(info->stage);
assert(info->sType == VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO);
@ -214,8 +216,8 @@ vk_pipeline_shader_stage_to_nir(struct vk_device *device,
return vk_errorf(device, VK_ERROR_UNKNOWN, "spirv_to_nir failed");
vk_set_subgroup_size(
device, nir,
vk_spirv_version(spirv_data, spirv_size),
nir, properties->subgroupSize, properties->minSubgroupSize,
properties->maxSubgroupSize, vk_spirv_version(spirv_data, spirv_size),
info->pNext,
info->flags & VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT,
info->flags & VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT);

View file

@ -57,8 +57,10 @@ vk_pipeline_shader_stage_to_nir(struct vk_device *device,
typedef struct nir_shader nir_shader;
void
vk_set_subgroup_size(struct vk_device *device,
nir_shader *shader,
vk_set_subgroup_size(nir_shader *shader,
uint32_t subgroup_size,
uint32_t min_subgroup_size,
uint32_t max_subgroup_size,
uint32_t spirv_version,
const void *info_pNext,
bool allow_varying,

View file

@ -248,6 +248,7 @@ vk_shader_to_nir(struct vk_device *device,
const struct vk_pipeline_robustness_state *rs)
{
const struct vk_device_shader_ops *ops = device->shader_ops;
const struct vk_properties *properties = &device->physical->properties;
const mesa_shader_stage stage = vk_to_mesa_shader_stage(info->stage);
const nir_shader_compiler_options *nir_options =
@ -265,8 +266,8 @@ vk_shader_to_nir(struct vk_device *device,
return NULL;
vk_set_subgroup_size(
device, nir,
vk_spirv_version(info->pCode, info->codeSize),
nir, properties->subgroupSize, properties->minSubgroupSize,
properties->maxSubgroupSize, vk_spirv_version(info->pCode, info->codeSize),
info->pNext,
info->flags & VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT,
info->flags & VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT);