diff --git a/src/spirv/spirv_module.cpp b/src/spirv/spirv_module.cpp
index f89729c5..e2579806 100644
--- a/src/spirv/spirv_module.cpp
+++ b/src/spirv/spirv_module.cpp
@@ -2585,6 +2585,23 @@ namespace dxvk {
   }
 
 
+  uint32_t SpirvModule::opReflect(
+          uint32_t                resultType,
+          uint32_t                incident,
+          uint32_t                normal) {
+    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::GLSLstd450Reflect);
+    m_code.putWord(incident);
+    m_code.putWord(normal);
+    return resultId;
+  }
+
+
   uint32_t SpirvModule::opLength(
           uint32_t                resultType,
           uint32_t                operand) {
diff --git a/src/spirv/spirv_module.h b/src/spirv/spirv_module.h
index 81028087..7cdc5998 100644
--- a/src/spirv/spirv_module.h
+++ b/src/spirv/spirv_module.h
@@ -903,6 +903,11 @@ namespace dxvk {
             uint32_t                resultType,
             uint32_t                operand);
 
+    uint32_t opReflect(
+            uint32_t                resultType,
+            uint32_t                incident,
+            uint32_t                normal);
+
     uint32_t opLength(
             uint32_t                resultType,
             uint32_t                operand);