[dxbc] Added support for SV_RenderTargetID in pixel shaders

This commit is contained in:
Philip Rebohle 2018-02-15 18:07:40 +01:00
parent 746c90e860
commit 8ebffc1018
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
2 changed files with 20 additions and 3 deletions

View File

@ -4570,8 +4570,24 @@ namespace dxvk {
ptrIn.type.ccount = 1;
ptrIn.id = m_ps.builtinSampleId;
return emitRegisterExtract(
emitValueLoad(ptrIn), mask);
return emitValueLoad(ptrIn);
} break;
case DxbcSystemValue::RenderTargetId: {
if (m_ps.builtinLayer == 0) {
m_ps.builtinLayer = emitNewBuiltinVariable({
{ DxbcScalarType::Uint32, 1, 0 },
spv::StorageClassInput },
spv::BuiltInLayer,
"ps_layer");
}
DxbcRegisterPointer ptr;
ptr.type.ctype = DxbcScalarType::Uint32;
ptr.type.ccount = 1;
ptr.id = m_ps.builtinLayer;
return emitValueLoad(ptr);
} break;
default:

View File

@ -117,7 +117,7 @@ namespace dxvk {
uint32_t outputVertexCount = 0;
uint32_t functionId = 0;
uint32_t builtinLayer = 0;
uint32_t builtinLayer = 0;
};
@ -133,6 +133,7 @@ namespace dxvk {
uint32_t builtinSampleId = 0;
uint32_t builtinSampleMaskIn = 0;
uint32_t builtinSampleMaskOut = 0;
uint32_t builtinLayer = 0;
std::array<DxbcVectorType, DxbcMaxInterfaceRegs> oTypes;
};