From b92772ac93fed696b7928fea42f10a5c99554766 Mon Sep 17 00:00:00 2001 From: Ivan Chikish Date: Sun, 2 Jul 2023 17:41:15 +0300 Subject: [PATCH] [amdgpu/shader] Implement V_FLOOR_F32, V_SIN_F32, V_COS_F32 --- hw/amdgpu/shader/src/Fragment.cpp | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/hw/amdgpu/shader/src/Fragment.cpp b/hw/amdgpu/shader/src/Fragment.cpp index 5271dcacc..23a650c67 100644 --- a/hw/amdgpu/shader/src/Fragment.cpp +++ b/hw/amdgpu/shader/src/Fragment.cpp @@ -3585,6 +3585,42 @@ void convertVop1(Fragment &fragment, Vop1 inst) { fragment.setVectorOperand(inst.vdst, {resultType, result}); break; } + case Vop1::Op::V_FLOOR_F32: { + auto src = spirv::cast( + fragment.getScalarOperand(inst.src0, TypeId::Float32).value); + auto floatT = fragment.context->getFloat32Type(); + + auto glslStd450 = fragment.context->getGlslStd450(); + auto result = fragment.builder.createExtInst(floatT, glslStd450, + GLSLstd450Floor, {{src}}); + + fragment.setVectorOperand(inst.vdst, {floatT, result}); + break; + } + case Vop1::Op::V_SIN_F32: { + auto src = spirv::cast( + fragment.getScalarOperand(inst.src0, TypeId::Float32).value); + auto floatT = fragment.context->getFloat32Type(); + + auto glslStd450 = fragment.context->getGlslStd450(); + auto result = fragment.builder.createExtInst(floatT, glslStd450, + GLSLstd450Sin, {{src}}); + + fragment.setVectorOperand(inst.vdst, {floatT, result}); + break; + } + case Vop1::Op::V_COS_F32: { + auto src = spirv::cast( + fragment.getScalarOperand(inst.src0, TypeId::Float32).value); + auto floatT = fragment.context->getFloat32Type(); + + auto glslStd450 = fragment.context->getGlslStd450(); + auto result = fragment.builder.createExtInst(floatT, glslStd450, + GLSLstd450Cos, {{src}}); + + fragment.setVectorOperand(inst.vdst, {floatT, result}); + break; + } default: inst.dump();