From b7a9c2c751c4bd1c355090c89485af09ff7cca41 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 6 Mar 2018 19:19:10 +0100 Subject: [PATCH] [dxbc] Implemented vicp for hull shaders Allows Unigine Heaven to start with tessellation enabled. --- src/dxbc/dxbc_compiler.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index 8395206b..40f8c461 100644 --- a/src/dxbc/dxbc_compiler.cpp +++ b/src/dxbc/dxbc_compiler.cpp @@ -3920,9 +3920,13 @@ namespace dxvk { const InputArray array = [&] () -> InputArray { switch (operand.type) { case DxbcOperandType::InputControlPoint: - return { m_ds.inputPerVertex, spv::StorageClassInput }; + return m_version.type() == DxbcProgramType::HullShader + ? InputArray { m_hs.outputPerVertex, spv::StorageClassOutput } + : InputArray { m_ds.inputPerVertex, spv::StorageClassInput }; case DxbcOperandType::InputPatchConstant: - return { m_ds.inputPerPatch, spv::StorageClassInput }; + return m_version.type() == DxbcProgramType::HullShader + ? InputArray { m_hs.outputPerPatch, spv::StorageClassOutput } + : InputArray { m_ds.inputPerPatch, spv::StorageClassInput }; default: return { m_vArray, spv::StorageClassPrivate }; } @@ -5337,7 +5341,7 @@ namespace dxvk { // Fork/join phases. We cannot run this in parallel // because synchronizing per-patch outputs does not // work. We don't need to synchronize after this. - this->emitHsInvocationBlockBegin(1); +// this->emitHsInvocationBlockBegin(1); for (const auto& phase : m_hs.forkPhases) this->emitHsForkJoinPhase(phase); @@ -5346,8 +5350,9 @@ namespace dxvk { this->emitHsForkJoinPhase(phase); // Output setup phase + this->emitHsPhaseBarrier(); this->emitOutputSetup(); - this->emitHsInvocationBlockEnd(); +// this->emitHsInvocationBlockEnd(); this->emitMainFunctionEnd(); }