diff options
author | Etaash Mathamsetty <etaash.mathamsetty@gmail.com> | 2023-08-12 22:06:57 +0300 |
---|---|---|
committer | Joshie <joshua@froggi.es> | 2023-08-13 22:34:38 +0300 |
commit | 037669f71545fe766ae2f9a9b0bc2e31aef9113d (patch) | |
tree | cb61a908c54fa45e2e3b2cf17834e2dcf2e71d54 | |
parent | 295a58afdfb1d3debac183776c352e5190a94b65 (diff) |
[dxso] Don't assume 32 registers.
-rw-r--r-- | src/dxso/dxso_compiler.cpp | 3 | ||||
-rw-r--r-- | src/dxso/dxso_compiler.h | 4 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/dxso/dxso_compiler.cpp b/src/dxso/dxso_compiler.cpp index c6ca4fcd..d1d7a68b 100644 --- a/src/dxso/dxso_compiler.cpp +++ b/src/dxso/dxso_compiler.cpp @@ -41,6 +41,7 @@ namespace dxvk { m_usedSamplers = 0; m_usedRTs = 0; + m_rRegs.reserve(DxsoMaxTempRegs); for (uint32_t i = 0; i < m_rRegs.size(); i++) m_rRegs.at(i) = DxsoRegisterPointer{ }; @@ -1043,6 +1044,8 @@ namespace dxvk { const DxsoBaseRegister* relative) { switch (reg.id.type) { case DxsoRegisterType::Temp: { + if (reg.id.num >= m_rRegs.size()) + m_rRegs.resize( reg.id.num + 1, DxsoRegisterPointer { } ); DxsoRegisterPointer& ptr = m_rRegs.at(reg.id.num); if (ptr.id == 0) { std::string name = str::format("r", reg.id.num); diff --git a/src/dxso/dxso_compiler.h b/src/dxso/dxso_compiler.h index b96124f9..05daca70 100644 --- a/src/dxso/dxso_compiler.h +++ b/src/dxso/dxso_compiler.h @@ -272,9 +272,7 @@ namespace dxvk { //////////////////////////////////////////////// // Temporary r# vector registers with immediate // indexing, and x# vector array registers. - std::array< - DxsoRegisterPointer, - DxsoMaxTempRegs> m_rRegs; + std::vector<DxsoRegisterPointer> m_rRegs; //////////////////////////////////////////////// // Predicate registers |