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

[d3d11] Skip unnecessary iterations when binding graphics UAVs

Some games will unconditionally use a high index for UAVStartSlot.
This commit is contained in:
Philip Rebohle 2025-02-20 17:26:02 +01:00 committed by Philip Rebohle
parent 9f9d51d52c
commit 20dc389ab7
2 changed files with 7 additions and 2 deletions

View File

@ -5275,10 +5275,14 @@ namespace dxvk {
if (unlikely(NumUAVs || m_state.om.maxUav)) { if (unlikely(NumUAVs || m_state.om.maxUav)) {
if (likely(NumUAVs != D3D11_KEEP_UNORDERED_ACCESS_VIEWS)) { if (likely(NumUAVs != D3D11_KEEP_UNORDERED_ACCESS_VIEWS)) {
uint32_t newMaxUav = NumUAVs ? UAVStartSlot + NumUAVs : 0; uint32_t newMinUav = NumUAVs ? UAVStartSlot : D3D11_1_UAV_SLOT_COUNT;
uint32_t newMaxUav = NumUAVs ? UAVStartSlot + NumUAVs : 0u;
uint32_t oldMinUav = std::exchange(m_state.om.minUav, newMinUav);
uint32_t oldMaxUav = std::exchange(m_state.om.maxUav, newMaxUav); uint32_t oldMaxUav = std::exchange(m_state.om.maxUav, newMaxUav);
for (uint32_t i = 0; i < std::max(oldMaxUav, newMaxUav); i++) { for (uint32_t i = std::min(oldMinUav, newMinUav);
i < std::max(oldMaxUav, newMaxUav); i++) {
D3D11UnorderedAccessView* uav = nullptr; D3D11UnorderedAccessView* uav = nullptr;
uint32_t ctr = ~0u; uint32_t ctr = ~0u;

View File

@ -199,6 +199,7 @@ namespace dxvk {
UINT stencilRef = D3D11_DEFAULT_STENCIL_REFERENCE; UINT stencilRef = D3D11_DEFAULT_STENCIL_REFERENCE;
UINT maxRtv = 0u; UINT maxRtv = 0u;
UINT minUav = 0u;
UINT maxUav = 0u; UINT maxUav = 0u;
void reset() { void reset() {