aco/gfx8: fix 16bit nir_op_ffma

aco uses the GFX9 opcode names, and GFX8 only has the legacy 16bit fma
that zeros the high register half.

Fixes: 570bfe1ee0 ("ac: handle new float multadd opcodes")
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41837>
This commit is contained in:
Georg Lehmann 2026-05-27 19:04:02 +02:00 committed by Marge Bot
parent 6564b70498
commit 38c4461c78
2 changed files with 4 additions and 110 deletions

View file

@ -48,112 +48,3 @@ dEQP-VK.spirv_assembly.instruction.compute.opfma.fp64.vec3.rte.denorm_flush.dire
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp64.vec3.rte.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp64.vec4.rte.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp64.vec4.rte.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rte.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rte.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rte.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rte.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rte.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rte.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rte.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rte.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rte.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rtz.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rtz.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rtz.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rtz.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rtz.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rtz.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rtz.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rtz.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.rtz.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.undef.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.undef.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.undef.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.undef.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.undef.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.undef.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.undef.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.undef.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.scalar.undef.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rte.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rte.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rte.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rte.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rte.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rte.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rte.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rte.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rte.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rtz.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rtz.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rtz.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rtz.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rtz.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rtz.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rtz.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rtz.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.rtz.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.undef.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.undef.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.undef.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.undef.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.undef.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.undef.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.undef.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.undef.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec2.undef.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rte.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rte.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rte.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rte.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rte.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rte.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rte.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rte.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rte.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rtz.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rtz.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rtz.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rtz.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rtz.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rtz.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rtz.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rtz.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.rtz.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.undef.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.undef.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.undef.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.undef.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.undef.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.undef.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.undef.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.undef.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec3.undef.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rte.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rte.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rte.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rte.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rte.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rte.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rte.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rte.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rte.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rtz.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rtz.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rtz.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rtz.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rtz.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rtz.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rtz.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rtz.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.rtz.denorm_preserve.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.undef.denorm_flush.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.undef.denorm_flush.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.undef.denorm_flush.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.undef.denorm_none.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.undef.denorm_none.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.undef.denorm_none.random,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.undef.denorm_preserve.directed,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.undef.denorm_preserve.float_controls,Fail
dEQP-VK.spirv_assembly.instruction.compute.opfma.fp16.vec4.undef.denorm_preserve.random,Fail

View file

@ -1927,7 +1927,10 @@ visit_alu_instr(isel_context* ctx, nir_alu_instr* instr)
}
case nir_op_ffma: {
if (dst.regClass() == v2b) {
emit_vop3a_instruction(ctx, instr, aco_opcode::v_fma_f16, dst, false, 3);
if (ctx->options->gfx_level >= GFX9)
emit_vop3a_instruction(ctx, instr, aco_opcode::v_fma_f16, dst, false, 3);
else
emit_vop3a_instruction(ctx, instr, aco_opcode::v_fma_legacy_f16, dst, false, 3);
} else if (dst.regClass() == v1 && instr->def.bit_size == 16) {
assert(instr->def.num_components == 2);