diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index 593068d2..034aa7d5 100644 --- a/src/dxbc/dxbc_compiler.cpp +++ b/src/dxbc/dxbc_compiler.cpp @@ -4337,6 +4337,16 @@ namespace dxvk { return result; } break; + case DxbcSystemValue::SampleIndex: { + DxbcRegisterPointer ptrIn; + ptrIn.type.ctype = DxbcScalarType::Uint32; + ptrIn.type.ccount = 1; + ptrIn.id = m_ps.builtinSampleId; + + return emitRegisterExtract( + emitValueLoad(ptrIn), mask); + } break; + default: throw DxvkError(str::format( "DxbcCompiler: Unhandled PS SV input: ", sv)); @@ -4445,6 +4455,12 @@ namespace dxvk { spv::StorageClassInput }, spv::BuiltInFrontFacing, "ps_is_front_face"); + + m_ps.builtinSampleId = emitNewBuiltinVariable({ + { DxbcScalarType::Uint32, 1, 0 }, + spv::StorageClassInput }, + spv::BuiltInSampleId, + "ps_sample_id"); } diff --git a/src/dxbc/dxbc_compiler.h b/src/dxbc/dxbc_compiler.h index 05789bd6..b4b58025 100644 --- a/src/dxbc/dxbc_compiler.h +++ b/src/dxbc/dxbc_compiler.h @@ -128,6 +128,7 @@ namespace dxvk { uint32_t builtinFragCoord = 0; uint32_t builtinDepth = 0; uint32_t builtinIsFrontFace = 0; + uint32_t builtinSampleId = 0; std::array oTypes; };