summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/D3D/D3DState.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoBackends/D3D/D3DState.cpp')
-rw-r--r--Source/Core/VideoBackends/D3D/D3DState.cpp27
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)