From 5b6b9923abb078cfd00cfaaf8a5387a36d83868a Mon Sep 17 00:00:00 2001 From: Philip Rebohle <philip.rebohle@tu-dortmund.de> Date: Fri, 16 Sep 2022 17:10:01 +0200 Subject: [PATCH] [dxbc] Write point size in vertex shaders Silences some validation errors when point rendering is enabled. --- src/dxbc/dxbc_compiler.cpp | 14 ++++++++++++++ src/dxbc/dxbc_compiler.h | 8 ++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index b0e59edea..5d31f9431 100644 --- a/src/dxbc/dxbc_compiler.cpp +++ b/src/dxbc/dxbc_compiler.cpp @@ -6634,6 +6634,19 @@ namespace dxvk { } + void DxbcCompiler::emitPointSizeStore() { + if (!m_pointSizeOut) { + m_pointSizeOut = emitNewBuiltinVariable(DxbcRegisterInfo { + { DxbcScalarType::Float32, 1, 0 }, + spv::StorageClassOutput }, + spv::BuiltInPointSize, + "point_size"); + } + + m_module.opStore(m_pointSizeOut, m_module.constf32(1.0f)); + } + + void DxbcCompiler::emitInit() { // Set up common capabilities for all shaders m_module.enableCapability(spv::CapabilityShader); @@ -6873,6 +6886,7 @@ namespace dxvk { this->emitOutputSetup(); this->emitClipCullStore(DxbcSystemValue::ClipDistance, m_clipDistances); this->emitClipCullStore(DxbcSystemValue::CullDistance, m_cullDistances); + this->emitPointSizeStore(); this->emitFunctionEnd(); } diff --git a/src/dxbc/dxbc_compiler.h b/src/dxbc/dxbc_compiler.h index 961219247..03ddf7ad6 100644 --- a/src/dxbc/dxbc_compiler.h +++ b/src/dxbc/dxbc_compiler.h @@ -484,7 +484,9 @@ namespace dxvk { uint32_t m_primitiveIdIn = 0; uint32_t m_primitiveIdOut = 0; - + + uint32_t m_pointSizeOut = 0; + ////////////////////////////////////////////////// // Immediate constant buffer. If defined, this is // an array of four-component uint32 vectors. @@ -1077,7 +1079,9 @@ namespace dxvk { void emitClipCullLoad( DxbcSystemValue sv, uint32_t srcArray); - + + void emitPointSizeStore(); + ////////////////////////////////////// // Common function definition methods void emitInit();