From 8c4d94b570785d40df252ebfb63654742060a3c5 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 29 Jan 2018 10:54:36 +0100 Subject: [PATCH] [dxbc] Implemented OutputCoverageMask --- src/dxbc/dxbc_compiler.cpp | 14 ++++++++++++++ src/dxbc/dxbc_compiler.h | 10 ++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index 2d97f5b7..2a566682 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 de517d64..103f9643 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; };