Module: vkd3d Branch: master Commit: 1c61776c189fb2b8f5cd2f4547a61976b7288306 URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/1c61776c189fb2b8f5cd2f4547a619...
Author: Conor McCarthy cmccarthy@codeweavers.com Date: Wed Apr 3 13:40:55 2024 +1000
vkd3d-shader/spirv: Handle uint2 to double bitcast in spirv_compiler_emit_mov().
Necessary for MakeDouble if the dst is SSA.
---
libs/vkd3d-shader/spirv.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index b70bc30e..78c95bde 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -7283,8 +7283,12 @@ static void spirv_compiler_emit_mov(struct spirv_compiler *compiler, }
general_implementation: - write_mask = (src->reg.type == VKD3DSPR_IMMCONST64 && !data_type_is_64_bit(dst->reg.data_type)) - ? vsir_write_mask_64_from_32(dst->write_mask) : dst->write_mask; + write_mask = dst->write_mask; + if (src->reg.type == VKD3DSPR_IMMCONST64 && !data_type_is_64_bit(dst->reg.data_type)) + write_mask = vsir_write_mask_64_from_32(write_mask); + else if (!data_type_is_64_bit(src->reg.data_type) && data_type_is_64_bit(dst->reg.data_type)) + write_mask = vsir_write_mask_32_from_64(write_mask); + val_id = spirv_compiler_emit_load_src(compiler, src, write_mask); if (dst->reg.data_type != src->reg.data_type) {