vkd3d-shader: Implement scanning compute shader thread group size information.

Metal doesn't allow the thread group size to be specified by shaders,
instead requiring it to be specified by the dispatch API.
This commit is contained in:
Henri Verbeet
2025-05-31 19:53:41 +02:00
parent 320c3c9652
commit 5bbd44c063
Notes: Henri Verbeet 2025-08-21 16:34:50 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1674
3 changed files with 105 additions and 0 deletions

View File

@@ -1685,6 +1685,7 @@ static int vsir_program_scan(struct vsir_program *program, const struct vkd3d_sh
struct vsir_program_iterator it = vsir_program_iterator(&program->instructions);
struct vkd3d_shader_scan_combined_resource_sampler_info *combined_sampler_info;
struct vkd3d_shader_scan_hull_shader_tessellation_info *tessellation_info;
struct vkd3d_shader_scan_thread_group_size_info *thread_group_size_info;
struct vkd3d_shader_scan_descriptor_info *descriptor_info;
struct vkd3d_shader_scan_signature_info *signature_info;
struct vkd3d_shader_scan_context context;
@@ -1706,6 +1707,7 @@ static int vsir_program_scan(struct vsir_program *program, const struct vkd3d_sh
}
tessellation_info = vkd3d_find_struct(compile_info->next, SCAN_HULL_SHADER_TESSELLATION_INFO);
thread_group_size_info = vkd3d_find_struct(compile_info->next, SCAN_THREAD_GROUP_SIZE_INFO);
vkd3d_shader_scan_context_init(&context, &program->shader_version, compile_info,
add_descriptor_info ? &program->descriptors : NULL, combined_sampler_info, message_context);
@@ -1758,6 +1760,13 @@ static int vsir_program_scan(struct vsir_program *program, const struct vkd3d_sh
tessellation_info->partitioning = context.partitioning;
}
if (!ret && thread_group_size_info)
{
thread_group_size_info->x = program->thread_group_size.x;
thread_group_size_info->y = program->thread_group_size.y;
thread_group_size_info->z = program->thread_group_size.z;
}
if (ret < 0)
{
if (combined_sampler_info)