From b4666ac0441f758a6c30262452ebb22fdb290829 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Sun, 26 Jan 2020 17:17:22 +0000 Subject: [PATCH] [dxso] Count max constants after we pull out pre-defines --- src/dxso/dxso_compiler.cpp | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/dxso/dxso_compiler.cpp b/src/dxso/dxso_compiler.cpp index eef3b4ef..9af7806a 100644 --- a/src/dxso/dxso_compiler.cpp +++ b/src/dxso/dxso_compiler.cpp @@ -857,8 +857,29 @@ namespace dxvk { case DxsoRegisterType::Const: result.type = { DxsoScalarType::Float32, 4 }; - if (!relative) { + if (!relative) result.id = m_cFloat.at(reg.id.num); + break; + + case DxsoRegisterType::ConstInt: + result.type = { DxsoScalarType::Sint32, 4 }; + result.id = m_cInt.at(reg.id.num); + break; + + case DxsoRegisterType::ConstBool: + result.type = { DxsoScalarType::Bool, 1 }; + result.id = m_cBool.at(reg.id.num); + break; + + default: break; + } + + if (result.id) + return result; + + switch (reg.id.type) { + case DxsoRegisterType::Const: + if (!relative) { m_meta.maxConstIndexF = std::max(m_meta.maxConstIndexF, reg.id.num + 1); m_meta.maxConstIndexF = std::min(m_meta.maxConstIndexF, m_layout->floatCount); } else { @@ -869,15 +890,11 @@ namespace dxvk { break; case DxsoRegisterType::ConstInt: - result.type = { DxsoScalarType::Sint32, 4 }; - result.id = m_cInt.at(reg.id.num); m_meta.maxConstIndexI = std::max(m_meta.maxConstIndexI, reg.id.num + 1); m_meta.maxConstIndexI = std::min(m_meta.maxConstIndexI, m_layout->intCount); break; case DxsoRegisterType::ConstBool: - result.type = { DxsoScalarType::Bool, 1 }; - result.id = m_cBool.at(reg.id.num); m_meta.maxConstIndexB = std::max(m_meta.maxConstIndexB, reg.id.num + 1); m_meta.maxConstIndexB = std::min(m_meta.maxConstIndexB, m_layout->boolCount); break; @@ -885,9 +902,6 @@ namespace dxvk { default: break; } - if (result.id) - return result; - uint32_t relativeIdx = this->emitArrayIndex(reg.id.num, relative); if (reg.id.type != DxsoRegisterType::ConstBool) {