diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index 03f8911f9..073527e35 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -1246,8 +1246,19 @@ namespace dxvk { ID3D11HullShader* pHullShader, ID3D11ClassInstance* const* ppClassInstances, UINT NumClassInstances) { - if (m_state.hs.shader.ptr() != pHullShader) - Logger::err("D3D11DeviceContext::HSSetShader: Not implemented"); + auto shader = static_cast(pHullShader); + + if (NumClassInstances != 0) + Logger::err("D3D11DeviceContext::HSSetShader: Class instances not supported"); + + if (m_state.hs.shader != shader) { + m_state.hs.shader = shader; + + EmitCs([cShader = shader != nullptr ? shader->GetShader() : nullptr] + (DxvkContext* ctx) { + ctx->bindShader(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, cShader); + }); + } } @@ -1330,8 +1341,19 @@ namespace dxvk { ID3D11DomainShader* pDomainShader, ID3D11ClassInstance* const* ppClassInstances, UINT NumClassInstances) { - if (m_state.ds.shader.ptr() != pDomainShader) - Logger::err("D3D11DeviceContext::DSSetShader: Not implemented"); + auto shader = static_cast(pDomainShader); + + if (NumClassInstances != 0) + Logger::err("D3D11DeviceContext::DSSetShader: Class instances not supported"); + + if (m_state.ds.shader != shader) { + m_state.ds.shader = shader; + + EmitCs([cShader = shader != nullptr ? shader->GetShader() : nullptr] + (DxvkContext* ctx) { + ctx->bindShader(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, cShader); + }); + } } diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index a6908d24d..20b9ea5bb 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -945,9 +945,10 @@ namespace dxvk { ID3D11HullShader** ppHullShader) { D3D11ShaderModule module; - if (FAILED(this->CreateShaderModule(&module, - pShaderBytecode, BytecodeLength, pClassLinkage))) - return E_INVALIDARG; + Logger::warn("D3D11: CreateHullShader: Tessellation shaders not yet supported"); +// if (FAILED(this->CreateShaderModule(&module, +// pShaderBytecode, BytecodeLength, pClassLinkage))) +// return E_INVALIDARG; if (ppHullShader == nullptr) return S_FALSE; @@ -965,9 +966,10 @@ namespace dxvk { ID3D11DomainShader** ppDomainShader) { D3D11ShaderModule module; - if (FAILED(this->CreateShaderModule(&module, - pShaderBytecode, BytecodeLength, pClassLinkage))) - return E_INVALIDARG; + Logger::warn("D3D11: CreateDomainShader: Tessellation shaders not yet supported"); +// if (FAILED(this->CreateShaderModule(&module, +// pShaderBytecode, BytecodeLength, pClassLinkage))) +// return E_INVALIDARG; if (ppDomainShader == nullptr) return S_FALSE;