mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-14 22:29:15 +01:00
[dxso] Count max constants after we pull out pre-defines
This commit is contained in:
parent
c77a9e3bfe
commit
b4666ac044
@ -857,8 +857,29 @@ namespace dxvk {
|
|||||||
case DxsoRegisterType::Const:
|
case DxsoRegisterType::Const:
|
||||||
result.type = { DxsoScalarType::Float32, 4 };
|
result.type = { DxsoScalarType::Float32, 4 };
|
||||||
|
|
||||||
if (!relative) {
|
if (!relative)
|
||||||
result.id = m_cFloat.at(reg.id.num);
|
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::max(m_meta.maxConstIndexF, reg.id.num + 1);
|
||||||
m_meta.maxConstIndexF = std::min(m_meta.maxConstIndexF, m_layout->floatCount);
|
m_meta.maxConstIndexF = std::min(m_meta.maxConstIndexF, m_layout->floatCount);
|
||||||
} else {
|
} else {
|
||||||
@ -869,15 +890,11 @@ namespace dxvk {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DxsoRegisterType::ConstInt:
|
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::max(m_meta.maxConstIndexI, reg.id.num + 1);
|
||||||
m_meta.maxConstIndexI = std::min(m_meta.maxConstIndexI, m_layout->intCount);
|
m_meta.maxConstIndexI = std::min(m_meta.maxConstIndexI, m_layout->intCount);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DxsoRegisterType::ConstBool:
|
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::max(m_meta.maxConstIndexB, reg.id.num + 1);
|
||||||
m_meta.maxConstIndexB = std::min(m_meta.maxConstIndexB, m_layout->boolCount);
|
m_meta.maxConstIndexB = std::min(m_meta.maxConstIndexB, m_layout->boolCount);
|
||||||
break;
|
break;
|
||||||
@ -885,9 +902,6 @@ namespace dxvk {
|
|||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.id)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
uint32_t relativeIdx = this->emitArrayIndex(reg.id.num, relative);
|
uint32_t relativeIdx = this->emitArrayIndex(reg.id.num, relative);
|
||||||
|
|
||||||
if (reg.id.type != DxsoRegisterType::ConstBool) {
|
if (reg.id.type != DxsoRegisterType::ConstBool) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user