Giovanni Mascellani (@giomasce) commented about libs/vkd3d-shader/dxil.c:
ins->handler_idx = VKD3DSIH_NOP;
}
+static enum vkd3d_shader_opcode sm6_dx_map_ma_op(enum dx_intrinsic_opcode op, const struct sm6_type *type) +{
- switch (op)
- {
case DX_FMA:
case DX_FMAD:
return (type->u.width == 64) ? VKD3DSIH_DFMA : VKD3DSIH_MAD;
case DX_IMAD:
case DX_UMAD:
return VKD3DSIH_IMAD;
Mmh, given your earlier patch I guess those are meant to be the signed and unsigned version and then the backend is expected to extract the right sign from the operand type. However, it seems that DXIL always emits unsigned integers, doesn't it? So the typing information here is lost anyway.
To be honest I don't even understand why here signed vs unsigned is important, given that we're truncating to the lower bits anyway. Do you have an idea of what is meant to happen here?