Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/doitsujin/dxvk.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEtaash Mathamsetty <etaash.mathamsetty@gmail.com>2023-08-12 22:06:57 +0300
committerJoshie <joshua@froggi.es>2023-08-13 22:34:38 +0300
commit037669f71545fe766ae2f9a9b0bc2e31aef9113d (patch)
treecb61a908c54fa45e2e3b2cf17834e2dcf2e71d54
parent295a58afdfb1d3debac183776c352e5190a94b65 (diff)
[dxso] Don't assume 32 registers.
-rw-r--r--src/dxso/dxso_compiler.cpp3
-rw-r--r--src/dxso/dxso_compiler.h4
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