From 59883a5cb688a882091c311b0683f29e1b6665c2 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 16 Mar 2026 11:08:09 +0100 Subject: [PATCH] vulkan: stop passing vk_device to vk_set_subgroup_size() Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_shader.c | 5 ++++- src/vulkan/runtime/vk_pipeline.c | 28 +++++++++++++++------------- src/vulkan/runtime/vk_pipeline.h | 6 ++++-- src/vulkan/runtime/vk_shader.c | 5 +++-- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 1134be65ae1..7f3a3ff49ad 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -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)); diff --git a/src/vulkan/runtime/vk_pipeline.c b/src/vulkan/runtime/vk_pipeline.c index ad887c7ce34..259041e58b4 100644 --- a/src/vulkan/runtime/vk_pipeline.c +++ b/src/vulkan/runtime/vk_pipeline.c @@ -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); diff --git a/src/vulkan/runtime/vk_pipeline.h b/src/vulkan/runtime/vk_pipeline.h index b0405368efc..10a4d814f77 100644 --- a/src/vulkan/runtime/vk_pipeline.h +++ b/src/vulkan/runtime/vk_pipeline.h @@ -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, diff --git a/src/vulkan/runtime/vk_shader.c b/src/vulkan/runtime/vk_shader.c index 80431a5c046..935b2c5439c 100644 --- a/src/vulkan/runtime/vk_shader.c +++ b/src/vulkan/runtime/vk_shader.c @@ -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);