From df7f52b673ac1c1d51d2f32dac7e8dd78190a96f Mon Sep 17 00:00:00 2001 From: Ivan Chikish Date: Fri, 28 Jul 2023 00:45:04 +0300 Subject: [PATCH] Fragment: fix sin/cos --- hw/amdgpu/shader/src/Fragment.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/amdgpu/shader/src/Fragment.cpp b/hw/amdgpu/shader/src/Fragment.cpp index 3d1523afe..fea40aa52 100644 --- a/hw/amdgpu/shader/src/Fragment.cpp +++ b/hw/amdgpu/shader/src/Fragment.cpp @@ -10,6 +10,7 @@ #include #include +#include using namespace amdgpu::shader; @@ -3831,6 +3832,9 @@ void convertVop1(Fragment &fragment, Vop1 inst) { auto src = spirv::cast( fragment.getScalarOperand(inst.src0, TypeId::Float32).value); auto floatT = fragment.context->getFloat32Type(); + auto constant = spirv::cast( + fragment.getScalarOperand(248, TypeId::Float32).value); // 2pi + src = fragment.builder.createFMul(floatT, src, constant); auto glslStd450 = fragment.context->getGlslStd450(); auto result = fragment.builder.createExtInst(floatT, glslStd450, @@ -3843,6 +3847,9 @@ void convertVop1(Fragment &fragment, Vop1 inst) { auto src = spirv::cast( fragment.getScalarOperand(inst.src0, TypeId::Float32).value); auto floatT = fragment.context->getFloat32Type(); + auto constant = spirv::cast( + fragment.getScalarOperand(248, TypeId::Float32).value); // 2pi + src = fragment.builder.createFMul(floatT, src, constant); auto glslStd450 = fragment.context->getGlslStd450(); auto result = fragment.builder.createExtInst(floatT, glslStd450, @@ -5620,6 +5627,8 @@ Value amdgpu::shader::Fragment::getRegister(RegisterId id) { return {context->getFloat32Type(), context->getFloat32(4.0f)}; case 247: return {context->getFloat32Type(), context->getFloat32(-4.0f)}; + case 248: + return {context->getFloat32Type(), context->getFloat32(M_PI * 2)}; case 255: { context->dependencies->map(registers->pc, registers->pc + sizeof(std::uint32_t));