[dxbc] Implemented vicp for hull shaders

Allows Unigine Heaven to start with tessellation enabled.
This commit is contained in:
Philip Rebohle 2018-03-06 19:19:10 +01:00
parent 9deb73a2a7
commit b7a9c2c751
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
1 changed files with 9 additions and 4 deletions

View File

@ -3920,9 +3920,13 @@ namespace dxvk {
const InputArray array = [&] () -> InputArray { const InputArray array = [&] () -> InputArray {
switch (operand.type) { switch (operand.type) {
case DxbcOperandType::InputControlPoint: 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: 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: default:
return { m_vArray, spv::StorageClassPrivate }; return { m_vArray, spv::StorageClassPrivate };
} }
@ -5337,7 +5341,7 @@ namespace dxvk {
// Fork/join phases. We cannot run this in parallel // Fork/join phases. We cannot run this in parallel
// because synchronizing per-patch outputs does not // because synchronizing per-patch outputs does not
// work. We don't need to synchronize after this. // work. We don't need to synchronize after this.
this->emitHsInvocationBlockBegin(1); // this->emitHsInvocationBlockBegin(1);
for (const auto& phase : m_hs.forkPhases) for (const auto& phase : m_hs.forkPhases)
this->emitHsForkJoinPhase(phase); this->emitHsForkJoinPhase(phase);
@ -5346,8 +5350,9 @@ namespace dxvk {
this->emitHsForkJoinPhase(phase); this->emitHsForkJoinPhase(phase);
// Output setup phase // Output setup phase
this->emitHsPhaseBarrier();
this->emitOutputSetup(); this->emitOutputSetup();
this->emitHsInvocationBlockEnd(); // this->emitHsInvocationBlockEnd();
this->emitMainFunctionEnd(); this->emitMainFunctionEnd();
} }