From 60d6416e5f8200d5340f75d2655a1478b1472330 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 26 Mar 2018 23:32:07 +0200 Subject: [PATCH] [dxbc] Implemnted SV_ViewportArrayIndex for geometry shaders Required by Final Fantasy XIV. --- src/dxbc/dxbc_compiler.cpp | 19 +++++++++++++++++++ src/dxbc/dxbc_compiler.h | 1 + 2 files changed, 20 insertions(+) diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index 94f67d9d..cbe47837 100644 --- a/src/dxbc/dxbc_compiler.cpp +++ b/src/dxbc/dxbc_compiler.cpp @@ -5175,6 +5175,25 @@ namespace dxvk { DxbcRegMask(true, false, false, false)); } break; + case DxbcSystemValue::ViewportId: { + if (m_gs.builtinViewportId == 0) { + m_gs.builtinViewportId = emitNewBuiltinVariable({ + { DxbcScalarType::Uint32, 1, 0 }, + spv::StorageClassOutput }, + spv::BuiltInViewportIndex, + "gs_viewport_id"); + } + + DxbcRegisterPointer ptr; + ptr.type.ctype = DxbcScalarType::Uint32; + ptr.type.ccount = 1; + ptr.id = m_gs.builtinViewportId; + + emitValueStore( + ptr, emitRegisterExtract(value, mask), + DxbcRegMask(true, false, false, false)); + } break; + default: Logger::warn(str::format( "DxbcCompiler: Unhandled GS SV output: ", sv)); diff --git a/src/dxbc/dxbc_compiler.h b/src/dxbc/dxbc_compiler.h index 6f50b37c..83145891 100644 --- a/src/dxbc/dxbc_compiler.h +++ b/src/dxbc/dxbc_compiler.h @@ -119,6 +119,7 @@ namespace dxvk { uint32_t functionId = 0; uint32_t builtinLayer = 0; + uint32_t builtinViewportId = 0; };