mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
We have a number of vsir operations which should take a signed type, but which the DXIL parser currently emits unsigned types for. For example, ISHR. In the SPIR-V backend, we translate ISHR to OpShiftRightArithmetic, which is specified as filling the most-significant bits of the result with the sign bit of the "Base" operand. For an unsigned type, that would technically be 0. In practice, implementations like radv/Mesa seem to fill with the most-significant bit of the "Base" operand for unsigned types, but arguably that could be considered a bug. Alternatively, the wording in the specification is just unfortunate; SPIR-V does generally take the position that signedness of operands should be irrelevant for almost all operations. Either way, it seems best to avoid using OpShiftRightArithmetic with unsigned types. For a target like MSL, allowing ISHR to take an unsigned source operand is just inconvenient; we'd have to introduce bitcasts to achieve the desired behaviour, instead of simply using msl_binop().
468 KiB
468 KiB