VarAction2: Consider industry tile vars 0x60 to 0x62 to be expensive

This commit is contained in:
Jonathan G Rennison
2022-06-06 21:10:40 +01:00
parent 3a5902ff77
commit 4b7288902d

View File

@@ -5681,6 +5681,19 @@ static bool IsExpensiveVehicleVariable(uint16 variable)
}
}
static bool IsExpensiveIndustryTileVariable(uint16 variable)
{
switch (variable) {
case 0x60:
case 0x61:
case 0x62:
return true;
default:
return false;
}
}
static bool IsFeatureUsableForDSE(GrfSpecFeature feature)
{
return (feature != GSF_STATIONS);
@@ -5804,6 +5817,7 @@ static void OptimiseVarAction2Adjust(VarAction2OptimiseState &state, const GrfSp
}
if ((feature >= GSF_TRAINS && feature <= GSF_AIRCRAFT) && IsExpensiveVehicleVariable(adjust.variable)) state.check_expensive_vars = true;
if (feature == GSF_INDUSTRYTILES && group->var_scope == VSG_SCOPE_SELF && IsExpensiveIndustryTileVariable(adjust.variable)) state.check_expensive_vars = true;
auto get_prev_single_load = [&]() -> const DeterministicSpriteGroupAdjust* {
for (int i = (int)group->adjusts.size() - 2; i >= 0; i--) {
@@ -6414,6 +6428,8 @@ static bool OptimiseVarAction2DeterministicSpriteGroupExpensiveVarsInner(const G
if (adjust.parameter < 0x100) usable_vars.set(adjust.parameter, false);
} else if ((feature >= GSF_TRAINS && feature <= GSF_AIRCRAFT) && IsExpensiveVehicleVariable(adjust.variable)) {
seen_expensive_variables[(((uint64)adjust.variable) << 32) | adjust.parameter]++;
} else if (feature == GSF_INDUSTRYTILES && group->var_scope == VSG_SCOPE_SELF && IsExpensiveIndustryTileVariable(adjust.variable)) {
seen_expensive_variables[(((uint64)adjust.variable) << 32) | adjust.parameter]++;
}
if (adjust.variable == 0x7E || (adjust.operation == DSGA_OP_STO && adjust.and_mask >= 0x100) || (adjust.operation == DSGA_OP_STO_NC && adjust.add_val >= 0x100)) {
/* Can't cross this barrier, stop here */