mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-12-11 14:19:10 +00:00
+
This commit is contained in:
@@ -206,7 +206,8 @@ static void LowerBufferFormatInst(IR::Block& block, IR::Inst& inst, Info& info)
|
|||||||
.swizzle = is_inst_typed
|
.swizzle = is_inst_typed
|
||||||
? AmdGpu::RemapSwizzle(flags.inst_data_fmt.Value(), AmdGpu::IdentityMapping)
|
? AmdGpu::RemapSwizzle(flags.inst_data_fmt.Value(), AmdGpu::IdentityMapping)
|
||||||
: buffer.DstSelect(),
|
: buffer.DstSelect(),
|
||||||
.num_conversion = is_inst_typed ? AmdGpu::MapNumberConversion(flags.inst_num_fmt.Value(), flags.inst_data_fmt.Value())
|
.num_conversion = is_inst_typed
|
||||||
|
? AmdGpu::MapNumberConversion(flags.inst_num_fmt.Value(), flags.inst_data_fmt.Value())
|
||||||
: buffer.GetNumberConversion(),
|
: buffer.GetNumberConversion(),
|
||||||
.num_components = AmdGpu::NumComponents(data_format),
|
.num_components = AmdGpu::NumComponents(data_format),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -84,13 +84,15 @@ inline F32 ApplyWriteNumberConversion(IREmitter& ir, const F32& value,
|
|||||||
const IR::F32 max = ir.Imm32(float(std::numeric_limits<u8>::max()));
|
const IR::F32 max = ir.Imm32(float(std::numeric_limits<u8>::max()));
|
||||||
const IR::F32 mul = ir.FPMul(ir.FPClamp(value, ir.Imm32(-1.f), ir.Imm32(1.f)), max);
|
const IR::F32 mul = ir.FPMul(ir.FPClamp(value, ir.Imm32(-1.f), ir.Imm32(1.f)), max);
|
||||||
const IR::F32 left = ir.FPSub(mul, ir.Imm32(1.f));
|
const IR::F32 left = ir.FPSub(mul, ir.Imm32(1.f));
|
||||||
return ir.BitCast<F32>(U32{ir.FPDiv(left, ir.Imm32(2.f))});
|
const IR::U32 raw = ir.ConvertFToS(32, ir.FPDiv(left, ir.Imm32(2.f)));
|
||||||
|
return ir.BitCast<F32>(raw);
|
||||||
}
|
}
|
||||||
case AmdGpu::NumberConversion::Sint16ToSnormNz: {
|
case AmdGpu::NumberConversion::Sint16ToSnormNz: {
|
||||||
const IR::F32 max = ir.Imm32(float(std::numeric_limits<u16>::max()));
|
const IR::F32 max = ir.Imm32(float(std::numeric_limits<u16>::max()));
|
||||||
const IR::F32 mul = ir.FPMul(ir.FPClamp(value, ir.Imm32(-1.f), ir.Imm32(1.f)), max);
|
const IR::F32 mul = ir.FPMul(ir.FPClamp(value, ir.Imm32(-1.f), ir.Imm32(1.f)), max);
|
||||||
const IR::F32 left = ir.FPSub(mul, ir.Imm32(1.f));
|
const IR::F32 left = ir.FPSub(mul, ir.Imm32(1.f));
|
||||||
return ir.BitCast<F32>(U32{ir.FPDiv(left, ir.Imm32(2.f))});
|
const IR::U32 raw = ir.ConvertFToS(32, ir.FPDiv(left, ir.Imm32(2.f)));
|
||||||
|
return ir.BitCast<F32>(raw);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
|
|||||||
Reference in New Issue
Block a user