diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index 2d97f5b79..2a566682c 100644 --- a/src/dxbc/dxbc_compiler.cpp +++ b/src/dxbc/dxbc_compiler.cpp @@ -421,6 +421,15 @@ namespace dxvk { "vThreadIndexInGroup"); } break; + case DxbcOperandType::OutputCoverageMask: { + m_module.enableCapability(spv::CapabilitySampleRateShading); + m_ps.builtinSampleMaskOut = emitNewBuiltinVariable({ + { DxbcScalarType::Uint32, 1, 0 }, + spv::StorageClassOutput }, + spv::BuiltInSampleMask, + "oDepth"); + } break; + case DxbcOperandType::OutputDepth: { m_module.setExecutionMode(m_entryPointId, spv::ExecutionModeDepthReplacing); @@ -3656,6 +3665,11 @@ namespace dxvk { { DxbcScalarType::Uint32, 1 }, m_cs.builtinLocalInvocationIndex }; + case DxbcOperandType::OutputCoverageMask: + return DxbcRegisterPointer { + { DxbcScalarType::Uint32, 1 }, + m_ps.builtinSampleMaskOut }; + case DxbcOperandType::OutputDepth: return DxbcRegisterPointer { { DxbcScalarType::Float32, 1 }, diff --git a/src/dxbc/dxbc_compiler.h b/src/dxbc/dxbc_compiler.h index de517d647..103f9643f 100644 --- a/src/dxbc/dxbc_compiler.h +++ b/src/dxbc/dxbc_compiler.h @@ -125,10 +125,12 @@ namespace dxvk { struct DxbcCompilerPsPart { uint32_t functionId = 0; - uint32_t builtinFragCoord = 0; - uint32_t builtinDepth = 0; - uint32_t builtinIsFrontFace = 0; - uint32_t builtinSampleId = 0; + uint32_t builtinFragCoord = 0; + uint32_t builtinDepth = 0; + uint32_t builtinIsFrontFace = 0; + uint32_t builtinSampleId = 0; + uint32_t builtinSampleMaskIn = 0; + uint32_t builtinSampleMaskOut = 0; std::array oTypes; };