diff options
Diffstat (limited to 'Source/Core/VideoBackends/D3D/D3DState.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/D3DState.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/D3D/D3DState.cpp b/Source/Core/VideoBackends/D3D/D3DState.cpp index 33310c9957..d4d98e35b8 100644 --- a/Source/Core/VideoBackends/D3D/D3DState.cpp +++ b/Source/Core/VideoBackends/D3D/D3DState.cpp @@ -199,6 +199,33 @@ void StateManager::Apply() m_dirtyFlags = 0; } +u32 StateManager::UnsetTexture(ID3D11ShaderResourceView* srv) +{ + u32 mask = 0; + + for (u32 index = 0; index < 8; ++index) + { + if (m_current.textures[index] == srv) + { + SetTexture(index, nullptr); + mask |= 1 << index; + } + } + + return mask; +} + +void StateManager::SetTextureByMask(u32 textureSlotMask, ID3D11ShaderResourceView* srv) +{ + while (textureSlotMask) + { + unsigned long index; + _BitScanForward(&index, textureSlotMask); + SetTexture(index, srv); + textureSlotMask &= ~(1 << index); + } +} + } // namespace D3D ID3D11SamplerState* StateCache::Get(SamplerState state) |
