mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
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:
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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user