From f1a8e02e0fd57c5da880ab5135af729426001e22 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Tue, 26 Mar 2019 23:13:36 +0000 Subject: [PATCH] [spirv] Implement opPow --- src/spirv/spirv_module.cpp | 17 ++++++++++++++++- src/spirv/spirv_module.h | 5 +++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/spirv/spirv_module.cpp b/src/spirv/spirv_module.cpp index 8aad4f52..90212ee4 100644 --- a/src/spirv/spirv_module.cpp +++ b/src/spirv/spirv_module.cpp @@ -2364,7 +2364,22 @@ namespace dxvk { m_code.putWord(operand); return resultId; } - + + uint32_t SpirvModule::opPow( + uint32_t resultType, + uint32_t base, + uint32_t exponent) { + uint32_t resultId = this->allocateId(); + + m_code.putIns(spv::OpExtInst, 7); + m_code.putWord(resultType); + m_code.putWord(resultId); + m_code.putWord(m_instExtGlsl450); + m_code.putWord(spv::GLSLstd450Pow); + m_code.putWord(base); + m_code.putWord(exponent); + return resultId; + } uint32_t SpirvModule::opFract( uint32_t resultType, diff --git a/src/spirv/spirv_module.h b/src/spirv/spirv_module.h index 0569030c..08df5d21 100644 --- a/src/spirv/spirv_module.h +++ b/src/spirv/spirv_module.h @@ -832,6 +832,11 @@ namespace dxvk { uint32_t opLog2( uint32_t resultType, uint32_t operand); + + uint32_t opPow( + uint32_t resultType, + uint32_t base, + uint32_t exponent); uint32_t opFract( uint32_t resultType,