llvmpipe: fix gl_NumSubgroups

this is (x * y * z) / subgroup_size, not num_x_loops

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15354>
This commit is contained in:
Mike Blumenkrantz 2022-03-11 11:10:56 -05:00 committed by Marge Bot
parent 7f1050f207
commit f33399aa9e
1 changed files with 6 additions and 2 deletions

View File

@ -373,8 +373,12 @@ generate_compute(struct llvmpipe_context *lp,
system_values.work_dim = work_dim_arg;
system_values.subgroup_id = coro_idx;
system_values.num_subgroups = LLVMBuildMul(builder, num_x_loop,
LLVMBuildMul(builder, block_y_size_arg, block_z_size_arg, ""), "");
LLVMValueRef num_subgroups = LLVMBuildUDiv(builder,
LLVMBuildMul(builder, block_x_size_arg,
LLVMBuildMul(builder, block_y_size_arg, block_z_size_arg, ""), ""),
vec_length, "");
LLVMValueRef subgroup_cmp = LLVMBuildICmp(gallivm->builder, LLVMIntEQ, num_subgroups, lp_build_const_int32(gallivm, 0), "");
system_values.num_subgroups = LLVMBuildSelect(builder, subgroup_cmp, lp_build_const_int32(gallivm, 1), num_subgroups, "");
LLVMValueRef bsize[3] = { block_x_size_arg, block_y_size_arg, block_z_size_arg };
system_values.block_size = LLVMGetUndef(LLVMVectorType(int32_type, 3));