Conor McCarthy : vkd3d-shader/spirv: Bitcast if necessary in the spirv_compiler_emit_mov() general implementation.
Module: vkd3d Branch: master Commit: 2037daae3221de0713c0c049d3c6fbbe53216340 URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/2037daae3221de0713c0c049d3c6fb... Author: Conor McCarthy <cmccarthy(a)codeweavers.com> Date: Tue Dec 5 14:36:22 2023 +1000 vkd3d-shader/spirv: Bitcast if necessary in the spirv_compiler_emit_mov() general implementation. In SM 6, this is needed when storing an asfloat() or asuint() result in an indexable temp, because dxc performs the bitcast by casting the destination pointer. --- libs/vkd3d-shader/spirv.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index 4624def6..a60246fd 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -6926,6 +6926,11 @@ static void spirv_compiler_emit_mov(struct spirv_compiler *compiler, general_implementation: val_id = spirv_compiler_emit_load_src(compiler, src, dst->write_mask); + if (dst->reg.data_type != src->reg.data_type) + { + val_id = vkd3d_spirv_build_op_bitcast(builder, vkd3d_spirv_get_type_id_for_data_type(builder, + dst->reg.data_type, vkd3d_write_mask_component_count(dst->write_mask)), val_id); + } spirv_compiler_emit_store_dst(compiler, dst, val_id); }
participants (1)
-
Alexandre Julliard