diff --git a/src/dxbc/dxbc_analysis.cpp b/src/dxbc/dxbc_analysis.cpp index c9c98017..a230da97 100644 --- a/src/dxbc/dxbc_analysis.cpp +++ b/src/dxbc/dxbc_analysis.cpp @@ -34,7 +34,17 @@ namespace dxvk { m_analysis->uavInfos[registerId].accessAtomicOp = true; } } break; - + + case DxbcInstClass::TextureSample: + case DxbcInstClass::VectorDeriv: { + m_analysis->usesDerivatives = true; + } break; + + case DxbcInstClass::ControlFlow: { + if (ins.op == DxbcOpcode::Discard) + m_analysis->usesKill = true; + } break; + case DxbcInstClass::TypedUavLoad: { const uint32_t registerId = ins.src[1].idx[0].offset; m_analysis->uavInfos[registerId].accessTypedLoad = true; diff --git a/src/dxbc/dxbc_analysis.h b/src/dxbc/dxbc_analysis.h index d51ede59..5059ae84 100644 --- a/src/dxbc/dxbc_analysis.h +++ b/src/dxbc/dxbc_analysis.h @@ -37,6 +37,9 @@ namespace dxvk { DxbcClipCullInfo clipCullIn; DxbcClipCullInfo clipCullOut; + + bool usesDerivatives = false; + bool usesKill = false; }; /**