From d0db88ee6262088377cc010822db85760462147e Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 1 Mar 2018 07:00:54 +0100 Subject: [PATCH] [dxbc] Implemnted some HS/DS stubs --- src/dxbc/dxbc_compiler.cpp | 34 ++++++++++++++++++++++++++++++++-- src/dxbc/dxbc_compiler.h | 2 ++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index 00c74793..89752602 100644 --- a/src/dxbc/dxbc_compiler.cpp +++ b/src/dxbc/dxbc_compiler.cpp @@ -162,10 +162,11 @@ namespace dxvk { // and write back the output registers. switch (m_version.type()) { case DxbcProgramType::VertexShader: this->emitVsFinalize(); break; + case DxbcProgramType::HullShader: this->emitHsFinalize(); break; + case DxbcProgramType::DomainShader: this->emitDsFinalize(); break; case DxbcProgramType::GeometryShader: this->emitGsFinalize(); break; case DxbcProgramType::PixelShader: this->emitPsFinalize(); break; case DxbcProgramType::ComputeShader: this->emitCsFinalize(); break; - default: throw DxvkError("DxbcCompiler: Unsupported program type"); } // End main function @@ -4769,10 +4770,11 @@ namespace dxvk { // etc. Each shader type has its own peculiarities. switch (m_version.type()) { case DxbcProgramType::VertexShader: emitVsInit(); break; + case DxbcProgramType::HullShader: emitHsInit(); break; + case DxbcProgramType::DomainShader: emitDsInit(); break; case DxbcProgramType::GeometryShader: emitGsInit(); break; case DxbcProgramType::PixelShader: emitPsInit(); break; case DxbcProgramType::ComputeShader: emitCsInit(); break; - default: throw DxvkError("DxbcCompiler: Unsupported program type"); } } @@ -4812,6 +4814,24 @@ namespace dxvk { } + void DxbcCompiler::emitHsInit() { + m_module.enableCapability(spv::CapabilityTessellation); + m_module.enableCapability(spv::CapabilityClipDistance); + m_module.enableCapability(spv::CapabilityCullDistance); + + // TODO implement + } + + + void DxbcCompiler::emitDsInit() { + m_module.enableCapability(spv::CapabilityTessellation); + m_module.enableCapability(spv::CapabilityClipDistance); + m_module.enableCapability(spv::CapabilityCullDistance); + + // TODO implement + } + + void DxbcCompiler::emitGsInit() { m_module.enableCapability(spv::CapabilityGeometry); m_module.enableCapability(spv::CapabilityClipDistance); @@ -4915,6 +4935,16 @@ namespace dxvk { } + void DxbcCompiler::emitHsFinalize() { + // TODO implement + } + + + void DxbcCompiler::emitDsFinalize() { + // TODO implement + } + + void DxbcCompiler::emitGsFinalize() { this->emitInputSetup( primitiveVertexCount(m_gs.inputPrimitive)); diff --git a/src/dxbc/dxbc_compiler.h b/src/dxbc/dxbc_compiler.h index ca146154..9b801b49 100644 --- a/src/dxbc/dxbc_compiler.h +++ b/src/dxbc/dxbc_compiler.h @@ -810,6 +810,7 @@ namespace dxvk { void emitVsInit(); void emitHsInit(); + void emitDsInit(); void emitGsInit(); void emitPsInit(); void emitCsInit(); @@ -818,6 +819,7 @@ namespace dxvk { // Shader finalization methods void emitVsFinalize(); void emitHsFinalize(); + void emitDsFinalize(); void emitGsFinalize(); void emitPsFinalize(); void emitCsFinalize();