mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02:00
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:
parent
6e39982b32
commit
59883a5cb6
4 changed files with 26 additions and 18 deletions
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue