zink: use spir-v 1.6 local-size when needed
The WorkgroupSize built-in is deprecated in SPIR-V 1.6, so let's switch to using LocalSizeId instead, like the spec recommends. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18274>
This commit is contained in:

committed by
Marge Bot

parent
da895596da
commit
99bd1eaf3d
@@ -4653,10 +4653,19 @@ nir_to_spirv(struct nir_shader *s, const struct zink_shader_info *sinfo, uint32_
|
||||
spirv_builder_emit_specid(&ctx.builder, sizes[i], ids[i]);
|
||||
spirv_builder_emit_name(&ctx.builder, sizes[i], names[i]);
|
||||
}
|
||||
SpvId var_type = get_uvec_type(&ctx, 32, 3);
|
||||
ctx.local_group_size_var = spirv_builder_spec_const_composite(&ctx.builder, var_type, sizes, 3);
|
||||
spirv_builder_emit_name(&ctx.builder, ctx.local_group_size_var, "gl_LocalGroupSize");
|
||||
spirv_builder_emit_builtin(&ctx.builder, ctx.local_group_size_var, SpvBuiltInWorkgroupSize);
|
||||
|
||||
/* WorkgroupSize is deprecated in SPIR-V 1.6 */
|
||||
if (spirv_version >= SPIRV_VERSION(1, 6)) {
|
||||
uint32_t sizes32[] = { sizes[0], sizes[1], sizes[2] };
|
||||
spirv_builder_emit_exec_mode_literal3(&ctx.builder, entry_point,
|
||||
SpvExecutionModeLocalSizeId,
|
||||
sizes32);
|
||||
} else {
|
||||
SpvId var_type = get_uvec_type(&ctx, 32, 3);
|
||||
ctx.local_group_size_var = spirv_builder_spec_const_composite(&ctx.builder, var_type, sizes, 3);
|
||||
spirv_builder_emit_name(&ctx.builder, ctx.local_group_size_var, "gl_LocalGroupSize");
|
||||
spirv_builder_emit_builtin(&ctx.builder, ctx.local_group_size_var, SpvBuiltInWorkgroupSize);
|
||||
}
|
||||
}
|
||||
if (s->info.cs.derivative_group) {
|
||||
SpvCapability caps[] = { 0, SpvCapabilityComputeDerivativeGroupQuadsNV, SpvCapabilityComputeDerivativeGroupLinearNV };
|
||||
|
Reference in New Issue
Block a user