mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-18 09:00:31 +01:00
aco/tests: add a bunch more building helpers
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14810>
This commit is contained in:
parent
1410d150e7
commit
e86b88f85b
2 changed files with 87 additions and 9 deletions
|
|
@ -262,17 +262,86 @@ void writeout(unsigned i, Operand op0, Operand op1)
|
|||
bld.pseudo(aco_opcode::p_unit_test, Operand::c32(i), op0, op1);
|
||||
}
|
||||
|
||||
Temp fneg(Temp src)
|
||||
Temp fneg(Temp src, Builder b)
|
||||
{
|
||||
return bld.vop2(aco_opcode::v_mul_f32, bld.def(v1), Operand::c32(0xbf800000u), src);
|
||||
if (src.bytes() == 2)
|
||||
return b.vop2(aco_opcode::v_mul_f16, b.def(v2b), Operand::c16(0xbc00u), src);
|
||||
else
|
||||
return b.vop2(aco_opcode::v_mul_f32, b.def(v1), Operand::c32(0xbf800000u), src);
|
||||
}
|
||||
|
||||
Temp fabs(Temp src)
|
||||
Temp fabs(Temp src, Builder b)
|
||||
{
|
||||
Builder::Result res =
|
||||
bld.vop2_e64(aco_opcode::v_mul_f32, bld.def(v1), Operand::c32(0x3f800000u), src);
|
||||
res.instr->vop3().abs[1] = true;
|
||||
return res;
|
||||
if (src.bytes() == 2) {
|
||||
Builder::Result res = b.vop2_e64(aco_opcode::v_mul_f16, b.def(v2b), Operand::c16(0x3c00), src);
|
||||
res.instr->vop3().abs[1] = true;
|
||||
return res;
|
||||
} else {
|
||||
Builder::Result res = b.vop2_e64(aco_opcode::v_mul_f32, b.def(v1), Operand::c32(0x3f800000u), src);
|
||||
res.instr->vop3().abs[1] = true;
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
Temp f2f32(Temp src, Builder b)
|
||||
{
|
||||
return b.vop1(aco_opcode::v_cvt_f32_f16, b.def(v1), src);
|
||||
}
|
||||
|
||||
Temp f2f16(Temp src, Builder b)
|
||||
{
|
||||
return b.vop1(aco_opcode::v_cvt_f16_f32, b.def(v2b), src);
|
||||
}
|
||||
|
||||
Temp u2u16(Temp src, Builder b)
|
||||
{
|
||||
return b.pseudo(aco_opcode::p_extract_vector, b.def(v2b), src, Operand::zero());
|
||||
}
|
||||
|
||||
Temp fadd(Temp src0, Temp src1, Builder b)
|
||||
{
|
||||
if (src0.bytes() == 2)
|
||||
return b.vop2(aco_opcode::v_add_f16, b.def(v2b), src0, src1);
|
||||
else
|
||||
return b.vop2(aco_opcode::v_add_f32, b.def(v1), src0, src1);
|
||||
}
|
||||
|
||||
Temp fmul(Temp src0, Temp src1, Builder b)
|
||||
{
|
||||
if (src0.bytes() == 2)
|
||||
return b.vop2(aco_opcode::v_mul_f16, b.def(v2b), src0, src1);
|
||||
else
|
||||
return b.vop2(aco_opcode::v_mul_f32, b.def(v1), src0, src1);
|
||||
}
|
||||
|
||||
Temp fma(Temp src0, Temp src1, Temp src2, Builder b)
|
||||
{
|
||||
if (src0.bytes() == 2)
|
||||
return b.vop3(aco_opcode::v_fma_f16, b.def(v2b), src0, src1, src2);
|
||||
else
|
||||
return b.vop3(aco_opcode::v_fma_f32, b.def(v1), src0, src1, src2);
|
||||
}
|
||||
|
||||
Temp fsat(Temp src, Builder b)
|
||||
{
|
||||
if (src.bytes() == 2)
|
||||
return b.vop3(aco_opcode::v_med3_f16, b.def(v2b), Operand::c16(0u),
|
||||
Operand::c16(0x3c00u), src);
|
||||
else
|
||||
return b.vop3(aco_opcode::v_med3_f32, b.def(v1), Operand::zero(),
|
||||
Operand::c32(0x3f800000u), src);
|
||||
}
|
||||
|
||||
Temp ext_ushort(Temp src, unsigned idx, Builder b)
|
||||
{
|
||||
return b.pseudo(aco_opcode::p_extract, b.def(v1), src, Operand::c32(idx), Operand::c32(16u),
|
||||
Operand::c32(false));
|
||||
}
|
||||
|
||||
Temp ext_ubyte(Temp src, unsigned idx, Builder b)
|
||||
{
|
||||
return b.pseudo(aco_opcode::p_extract, b.def(v1), src, Operand::c32(idx), Operand::c32(8u),
|
||||
Operand::c32(false));
|
||||
}
|
||||
|
||||
VkDevice get_vk_device(enum chip_class chip_class)
|
||||
|
|
|
|||
|
|
@ -91,8 +91,17 @@ void writeout(unsigned i, aco::Builder::Result res);
|
|||
void writeout(unsigned i, aco::Operand op);
|
||||
void writeout(unsigned i, aco::Operand op0, aco::Operand op1);
|
||||
|
||||
aco::Temp fneg(aco::Temp src);
|
||||
aco::Temp fabs(aco::Temp src);
|
||||
aco::Temp fneg(aco::Temp src, aco::Builder b=bld);
|
||||
aco::Temp fabs(aco::Temp src, aco::Builder b=bld);
|
||||
aco::Temp f2f32(aco::Temp src, aco::Builder b=bld);
|
||||
aco::Temp f2f16(aco::Temp src, aco::Builder b=bld);
|
||||
aco::Temp u2u16(aco::Temp src, aco::Builder b=bld);
|
||||
aco::Temp fadd(aco::Temp src0, aco::Temp src1, aco::Builder b=bld);
|
||||
aco::Temp fmul(aco::Temp src0, aco::Temp src1, aco::Builder b=bld);
|
||||
aco::Temp fma(aco::Temp src0, aco::Temp src1, aco::Temp src2, aco::Builder b=bld);
|
||||
aco::Temp fsat(aco::Temp src, aco::Builder b=bld);
|
||||
aco::Temp ext_ushort(aco::Temp src, unsigned idx, aco::Builder b=bld);
|
||||
aco::Temp ext_ubyte(aco::Temp src, unsigned idx, aco::Builder b=bld);
|
||||
|
||||
/* vulkan helpers */
|
||||
VkDevice get_vk_device(enum chip_class chip_class);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue