Conor McCarthy (@cmccarthy) commented about libs/vkd3d-shader/spirv.c:
if (component_type != reg_info->component_type) { - type_id = vkd3d_spirv_get_type_id(builder, component_type, 1); - val_id = vkd3d_spirv_build_op_bitcast(builder, type_id, val_id); + if (component_type == VKD3D_SHADER_COMPONENT_BOOL) + { + type_id = vkd3d_spirv_get_type_id(builder, VKD3D_SHADER_COMPONENT_UINT, 1); + val_id = vkd3d_spirv_build_op_bitcast(builder, type_id, val_id);
This assumes `val_id` is not already `UINT`, which is always true here because it's only used for temps, but if another source of `BOOL` occurs it will fail SPIR-V validation. No-op bitcasts are not a problem but the validator rejects them anyway. -- https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/607#note_59616