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,