1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-27 04:54:15 +01:00

[d3d11] Don't template methods that restore shader bindings

This was only needed because Bind* methods were also templated.
This commit is contained in:
Philip Rebohle 2025-02-19 13:36:37 +01:00 committed by Philip Rebohle
parent 771f14c466
commit 9d890c75ac
2 changed files with 30 additions and 40 deletions

View File

@ -4880,29 +4880,16 @@ namespace dxvk {
for (uint32_t i = 0; i < m_state.so.targets.size(); i++)
BindXfbBuffer(i, m_state.so.targets[i].buffer.ptr(), ~0u);
RestoreConstantBuffers<DxbcProgramType::VertexShader>();
RestoreConstantBuffers<DxbcProgramType::HullShader>();
RestoreConstantBuffers<DxbcProgramType::DomainShader>();
RestoreConstantBuffers<DxbcProgramType::GeometryShader>();
RestoreConstantBuffers<DxbcProgramType::PixelShader>();
RestoreConstantBuffers<DxbcProgramType::ComputeShader>();
for (uint32_t i = 0; i < uint32_t(DxbcProgramType::Count); i++) {
auto stage = DxbcProgramType(i);
RestoreShaderResources<DxbcProgramType::VertexShader>();
RestoreShaderResources<DxbcProgramType::HullShader>();
RestoreShaderResources<DxbcProgramType::DomainShader>();
RestoreShaderResources<DxbcProgramType::GeometryShader>();
RestoreShaderResources<DxbcProgramType::PixelShader>();
RestoreShaderResources<DxbcProgramType::ComputeShader>();
RestoreConstantBuffers(stage);
RestoreShaderResources(stage);
RestoreSamplers(stage);
}
RestoreUnorderedAccessViews<DxbcProgramType::PixelShader>();
RestoreUnorderedAccessViews<DxbcProgramType::ComputeShader>();
RestoreSamplers<DxbcProgramType::VertexShader>();
RestoreSamplers<DxbcProgramType::HullShader>();
RestoreSamplers<DxbcProgramType::DomainShader>();
RestoreSamplers<DxbcProgramType::GeometryShader>();
RestoreSamplers<DxbcProgramType::PixelShader>();
RestoreSamplers<DxbcProgramType::ComputeShader>();
RestoreUnorderedAccessViews(DxbcProgramType::PixelShader);
RestoreUnorderedAccessViews(DxbcProgramType::ComputeShader);
// Draw buffer bindings aren't persistent at the API level, and
// we can't meaningfully track them. Just reset this state here
@ -4912,9 +4899,10 @@ namespace dxvk {
template<typename ContextType>
template<DxbcProgramType Stage>
void D3D11CommonContext<ContextType>::RestoreConstantBuffers() {
void D3D11CommonContext<ContextType>::RestoreConstantBuffers(
DxbcProgramType Stage) {
const auto& bindings = m_state.cbv[Stage];
for (uint32_t i = 0; i < bindings.maxCount; i++) {
BindConstantBuffer(Stage, i, bindings.buffers[i].buffer.ptr(),
bindings.buffers[i].constantOffset, bindings.buffers[i].constantBound);
@ -4923,26 +4911,28 @@ namespace dxvk {
template<typename ContextType>
template<DxbcProgramType Stage>
void D3D11CommonContext<ContextType>::RestoreSamplers() {
void D3D11CommonContext<ContextType>::RestoreSamplers(
DxbcProgramType Stage) {
const auto& bindings = m_state.samplers[Stage];
for (uint32_t i = 0; i < bindings.maxCount; i++)
BindSampler(Stage, i, bindings.samplers[i]);
}
template<typename ContextType>
template<DxbcProgramType Stage>
void D3D11CommonContext<ContextType>::RestoreShaderResources() {
void D3D11CommonContext<ContextType>::RestoreShaderResources(
DxbcProgramType Stage) {
const auto& bindings = m_state.srv[Stage];
for (uint32_t i = 0; i < bindings.maxCount; i++)
BindShaderResource(Stage, i, bindings.views[i].ptr());
}
template<typename ContextType>
template<DxbcProgramType Stage>
void D3D11CommonContext<ContextType>::RestoreUnorderedAccessViews() {
void D3D11CommonContext<ContextType>::RestoreUnorderedAccessViews(
DxbcProgramType Stage) {
const auto& views = Stage == DxbcProgramType::ComputeShader
? m_state.uav.views
: m_state.om.uavs;

View File

@ -1014,18 +1014,18 @@ namespace dxvk {
void RestoreCommandListState();
template<DxbcProgramType Stage>
void RestoreConstantBuffers();
template<DxbcProgramType Stage>
void RestoreSamplers();
template<DxbcProgramType Stage>
void RestoreShaderResources();
template<DxbcProgramType Stage>
void RestoreUnorderedAccessViews();
void RestoreConstantBuffers(
DxbcProgramType Stage);
void RestoreSamplers(
DxbcProgramType Stage);
void RestoreShaderResources(
DxbcProgramType Stage);
void RestoreUnorderedAccessViews(
DxbcProgramType Stage);
template<DxbcProgramType ShaderStage>
void SetConstantBuffers(
UINT StartSlot,