diff --git a/src/SharpEmu.Libs/Agc/Gen5ShaderTranslator.cs b/src/SharpEmu.Libs/Agc/Gen5ShaderTranslator.cs index d52cad2..cfb4c7e 100644 --- a/src/SharpEmu.Libs/Agc/Gen5ShaderTranslator.cs +++ b/src/SharpEmu.Libs/Agc/Gen5ShaderTranslator.cs @@ -718,7 +718,7 @@ internal static class Gen5ShaderTranslator } var src0 = word & 0x1FF; - sizeDwords = opcode is 0x20 or 0x21 || src0 is 0xF9 or 0xFA or 0xFF ? 2u : 1u; + sizeDwords = opcode is 0x20 or 0x21 or 0x2C or 0x2D || src0 is 0xF9 or 0xFA or 0xFF ? 2u : 1u; error = string.Empty; name = opcode switch { @@ -757,7 +757,9 @@ internal static class Gen5ShaderTranslator 0x28 => "VAddcU32", 0x29 => "VSubbU32", 0x2A => "VSubbrevU32", - 0x2B => "VLdexpF32", + 0x2B => "VFmacF32", + 0x2C => "VFmamkF32", + 0x2D => "VFmaakF32", 0x2F => "VCvtPkrtzF16F32", 0x30 => "VCvtPkU16U32", 0x31 => "VCvtPkI16I32", @@ -870,6 +872,7 @@ internal static class Gen5ShaderTranslator 0x10F => "VMinF32", 0x110 => "VMaxF32", 0x11F => "VMacF32", + 0x12B => "VFmacF32", 0x12F => "VCvtPkrtzF16F32", 0x141 => "VMadF32", 0x143 => "VMadU32U24", @@ -1379,7 +1382,7 @@ internal static class Gen5ShaderTranslator Gen5Operand.Source(word & 0x1FF, literal), Gen5Operand.Vector((word >> 9) & 0xFF), ]; - if (opcode == "VMadMkF32" && literal.HasValue) + if (opcode is "VMadMkF32" or "VFmamkF32" && literal.HasValue) { sources = [ @@ -1388,7 +1391,7 @@ internal static class Gen5ShaderTranslator sources[1], ]; } - else if (opcode == "VMadAkF32" && literal.HasValue) + else if (opcode is "VMadAkF32" or "VFmaakF32" && literal.HasValue) { sources = [ diff --git a/src/SharpEmu.Libs/Agc/Gen5SpirvTranslator.Alu.cs b/src/SharpEmu.Libs/Agc/Gen5SpirvTranslator.Alu.cs index 5c01072..9df8d40 100644 --- a/src/SharpEmu.Libs/Agc/Gen5SpirvTranslator.Alu.cs +++ b/src/SharpEmu.Libs/Agc/Gen5SpirvTranslator.Alu.cs @@ -255,6 +255,8 @@ internal static partial class Gen5SpirvTranslator case "VFmaF32": case "VMadMkF32": case "VMadAkF32": + case "VFmamkF32": + case "VFmaakF32": result = EmitFloatResult( instruction, Ext( @@ -265,6 +267,7 @@ internal static partial class Gen5SpirvTranslator GetFloatSource(instruction, 2))); break; case "VMacF32": + case "VFmacF32": { var addend = Bitcast(_floatType, LoadV(destination)); result = EmitFloatResult(