shader: implement RDNA2 frexp mantissa

This commit is contained in:
nmzik
2026-08-17 07:58:56 +02:00
parent 1be9568a02
commit 330889e50b
7 changed files with 61 additions and 16 deletions
@@ -567,6 +567,7 @@ std::string OpcodeToString(Opcode opcode) {
case Opcode::VCvtRpiI32F32: return "v_cvt_rpi_i32_f32";
case Opcode::VCvtFlrI32F32: return "v_cvt_flr_i32_f32";
case Opcode::VFrexpExpI32F32: return "v_frexp_exp_i32_f32";
case Opcode::VFrexpMantF32: return "v_frexp_mant_f32";
case Opcode::VCvtOffF32I4: return "v_cvt_off_f32_i4";
case Opcode::VCvtF32Ubyte0: return "v_cvt_f32_ubyte0";
case Opcode::VCvtF32Ubyte1: return "v_cvt_f32_ubyte1";
@@ -152,6 +152,7 @@ enum class Opcode {
VCvtRpiI32F32,
VCvtFlrI32F32,
VFrexpExpI32F32,
VFrexpMantF32,
VCvtOffF32I4,
VCvtF32Ubyte0,
VCvtF32Ubyte1,
@@ -121,6 +121,7 @@ constexpr OpcodeMap VOP1_OPCODE_LIST[] = {
{0x39u, Opcode::VFfbhU32},
{0x3au, Opcode::VFfblB32},
{0x3fu, Opcode::VFrexpExpI32F32},
{0x40u, Opcode::VFrexpMantF32},
{0x42u, Opcode::VMovreldB32},
{0x43u, Opcode::VMovrelsB32},
{0x50u, Opcode::VCvtF16U16},
@@ -170,6 +171,7 @@ constexpr OpcodeMap VOP3_ENCODED_VOP1_OPCODE_LIST[] = {
{0x39u, Opcode::VFfbhU32},
{0x3au, Opcode::VFfblB32},
{0x3fu, Opcode::VFrexpExpI32F32},
{0x40u, Opcode::VFrexpMantF32},
{0x42u, Opcode::VMovreldB32},
{0x43u, Opcode::VMovrelsB32},
{0x50u, Opcode::VCvtF16U16},
@@ -413,6 +415,7 @@ bool IsVop1FloatSourceOpcode(Opcode opcode) {
case Opcode::VCvtRpiI32F32:
case Opcode::VCvtFlrI32F32:
case Opcode::VFrexpExpI32F32:
case Opcode::VFrexpMantF32:
case Opcode::VCvtF16F32:
case Opcode::VRcpF32:
case Opcode::VRcpIflagF32:
@@ -767,6 +770,7 @@ bool IsVop1FloatResultOpcode(Opcode opcode) {
case Opcode::VCeilF32:
case Opcode::VRndneF32:
case Opcode::VFloorF32:
case Opcode::VFrexpMantF32:
case Opcode::VExpF32:
case Opcode::VLogF32:
case Opcode::VRsqF32: