Compare commits

...

7 Commits

Author SHA1 Message Date
TheLastRar
407c989860 Vif: Fixes to non-volatile SSE backup and restore logic 2025-02-09 12:28:04 -05:00
lightningterror
9b4b112a97 GS/HW: Adjust max valid tex size.
Account for index 0.
2025-02-08 23:56:42 +01:00
PCSX2 Bot
865b75bcbb [ci skip] Qt: Update Base Translation. 2025-02-07 19:04:10 -05:00
Ty
795b0813cc Debugger: Only validate memory search value when needed 2025-02-07 13:40:13 -05:00
Ty
3e1f2b8b9d Debugger: Support 'unknown initial value' search types 2025-02-07 13:40:13 -05:00
Ty
1f0d6f0ac7 VMManager: Avoid use-after-move conditions 2025-02-05 10:25:24 -05:00
JordanTheToaster
4ab4f4a67c GameDB: Various fixes 2025-02-04 14:58:40 -05:00
8 changed files with 237 additions and 105 deletions

View File

@@ -1481,6 +1481,7 @@ SCAJ-20041:
name: "Energy Airforce - Aim Strike!"
region: "NTSC-Unk"
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SCAJ-20043:
name: "Chain Dive"
@@ -14697,6 +14698,10 @@ SLES-50396:
SLES-50397:
name: "Prisoner of War"
region: "PAL-M5"
speedHacks:
instantVU1: 0 # Fixes NPCs getting stuck in place.
gsHWFixes:
recommendedBlendingLevel: 5 # Fixes shading and shadow definition.
SLES-50398:
name: "UEFA Champions League"
region: "PAL-M5"
@@ -16553,6 +16558,7 @@ SLES-51203:
- EETimingHack # Fixes various VIF errors.
gsHWFixes:
minimumBlendingLevel: 2 # Improves banding.
recommendedBlendingLevel: 4 # Fixes missing text brightness.
SLES-51208:
name: "Rocky"
region: "PAL-M5"
@@ -17970,7 +17976,8 @@ SLES-51824:
name: "Colin McRae Rally '04"
region: "PAL-M5"
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
halfPixelOffset: 4 # Fixes vertical lines and depth lines.
autoFlush: 2 # Fixes sun intensity.
SLES-51825:
name: "Pop Idol"
region: "PAL-E"
@@ -18281,6 +18288,7 @@ SLES-51918:
gsHWFixes:
autoFlush: 2 # Reduces post-processing misalignment.
halfPixelOffset: 4 # Reduces post-processing misalignment.
nativeScaling: 2 # Fixes post effects.
SLES-51924:
name: "World War Zero - Ironstorm"
region: "PAL-M5"
@@ -18987,16 +18995,19 @@ SLES-52265:
name: "Energy Airforce - Aim Strike!"
region: "PAL-E"
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SLES-52266:
name: "Energy Airforce - Aim Strike!"
region: "PAL-F"
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SLES-52267:
name: "Energy Airforce - Aim Strike!"
region: "PAL-I"
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SLES-52275:
name: "Way of the Samurai 2"
@@ -19263,6 +19274,7 @@ SLES-52372:
name: "Spider-Man 2"
region: "PAL-M5"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -19446,6 +19458,7 @@ SLES-52447:
name: "Spider-Man 2"
region: "PAL-I"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -19563,6 +19576,7 @@ SLES-52493:
name: "Spider-Man 2"
region: "PAL-E"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -22626,6 +22640,7 @@ SLES-53523:
minimumBlendingLevel: 3 # Fixes broken light and shadow rendering.
halfPixelOffset: 2 # Fixes misaligned bloom and character shadows.
autoFlush: 1 # Fixes missing bloom intensity and alignment.
nativeScaling: 2 # Helps fix offset blur and bloom on shadows and the UI.
SLES-53524:
name: "Mortal Kombat - Shaolin Monks"
region: "PAL-M5"
@@ -23172,6 +23187,7 @@ SLES-53647:
minimumBlendingLevel: 3 # Fixes broken light and shadow rendering.
halfPixelOffset: 2 # Fixes misaligned bloom and character shadows.
autoFlush: 1 # Fixes missing bloom intensity and alignment.
nativeScaling: 2 # Helps fix offset blur and bloom on shadows and the UI.
SLES-53651:
name: "WWII - Soldier"
region: "PAL-E"
@@ -24613,13 +24629,13 @@ SLES-54159:
region: "PAL-M5"
gsHWFixes:
halfPixelOffset: 2 # Fixes post processing misalignment.
recommendedBlendingLevel: 3 # Improves reflection quality.
recommendedBlendingLevel: 4 # Improves reflection quality and terrain lighting.
SLES-54160:
name: "Eragon"
region: "PAL-R"
gsHWFixes:
halfPixelOffset: 2 # Fixes post processing misalignment.
recommendedBlendingLevel: 3 # Improves reflection quality.
recommendedBlendingLevel: 4 # Improves reflection quality and terrain lighting.
SLES-54161:
name: "Super Dragon Ball Z"
region: "PAL-E"
@@ -25933,6 +25949,9 @@ SLES-54590:
name: "Hard Knock High"
region: "PAL-E"
compat: 5
gsHWFixes:
halfPixelOffset: 4 # Aligns post effects.
nativeScaling: 1 # Fixes post effects.
SLES-54591:
name: "Special Forces"
region: "PAL-E"
@@ -25976,8 +25995,11 @@ SLES-54615:
SLES-54616:
name: "Fantastic Four - Rise of the Silver Surfer"
region: "PAL-M5"
speedHacks:
eeCycleRate: 1 # Helps alleviate FPS drops during FMVs.
gsHWFixes:
roundSprite: 2 # Fixes edge depth bleeding during power attacks and misaligned bloom.
nativeScaling: 1 # Fixes Post effect.
SLES-54617:
name: "Action Man A.T.O.M. - Alpha Teens on Machines"
region: "PAL-M9"
@@ -26497,8 +26519,11 @@ SLES-54774:
SLES-54776:
name: "Fantastic Four - Rise of the Silver Surfer"
region: "PAL-E-I"
speedHacks:
eeCycleRate: 1 # Helps alleviate FPS drops during FMVs.
gsHWFixes:
roundSprite: 2 # Fixes edge depth bleeding during power attacks and misaligned bloom.
nativeScaling: 1 # Fixes Post effect.
SLES-54778:
name: "Harry Potter and the Order of the Phoenix"
region: "PAL-E"
@@ -28177,6 +28202,9 @@ SLES-55345:
name: "007 - Quantum of Solace"
region: "PAL-M5"
compat: 5
gsHWFixes:
halfPixelOffset: 2 # Reduces bloom misalignment and fixes depth lines.
nativeScaling: 2 # Fixes bloom intensity.
SLES-55346:
name: "Rugby League 2 - World Cup Edition"
region: "PAL-E"
@@ -29580,6 +29608,7 @@ SLKA-25032:
- EETimingHack # Fixes various VIF errors.
gsHWFixes:
minimumBlendingLevel: 2 # Improves banding.
recommendedBlendingLevel: 4 # Fixes missing text brightness.
SLKA-25033:
name: "Gregory Horror Show"
region: "NTSC-K"
@@ -30147,9 +30176,10 @@ SLKA-25180:
halfPixelOffset: 4 # Aligns post effects.
nativeScaling: 2 # Fixes post effects.
SLKA-25181:
name: "Energy Airforce Aim Strike"
name: "Energy Airforce Aim Strike!"
region: "NTSC-K"
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SLKA-25182:
name: "Hajime no Ippo2 Victorious Road"
@@ -31310,6 +31340,9 @@ SLKA-25441:
SLKA-25442:
name: "007 - Quantum of Solace"
region: "NTSC-K"
gsHWFixes:
halfPixelOffset: 2 # Reduces bloom misalignment and fixes depth lines.
nativeScaling: 2 # Fixes bloom intensity.
SLKA-25443:
name: "Musou Orochi Maou Sairin"
region: "NTSC-K"
@@ -32278,6 +32311,9 @@ SLPM-55148:
name-sort: "007 なぐさめのほうしゅう"
name-en: "007 - Nagusame no Houshuu"
region: "NTSC-J"
gsHWFixes:
halfPixelOffset: 2 # Reduces bloom misalignment and fixes depth lines.
nativeScaling: 2 # Fixes bloom intensity.
SLPM-55149:
name: "ラブルートゼロ KissKiss☆ラビリンス [通常版]"
name-sort: "らぶるーとぜろ きすきすらびりんす [つうじょうばん]"
@@ -40879,6 +40915,7 @@ SLPM-65374:
instantVU1: 0 # Fixes hanging while going ingame.
mtvu: 0
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SLPM-65375:
name: "真・三國無双3 & 真・三國無双3 猛将伝 [ディスク 1] [プレミアムパック]"
@@ -42473,6 +42510,7 @@ SLPM-65662:
name-en: "Spider-Man 2"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -45210,6 +45248,7 @@ SLPM-66121:
name: "Spider-Man 2 [TAITO BEST]"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -54171,6 +54210,9 @@ SLPS-20474:
name-sort: "しんぷる2000しりーず Vol.107 THE ほのおのかくとうばんちょう"
name-en: "Simple 2000 Series Vol. 107 - The Honoo no Kakutou Banchou"
region: "NTSC-J"
gsHWFixes:
halfPixelOffset: 4 # Aligns post effects.
nativeScaling: 1 # Fixes post effects.
SLPS-20475:
name: "山佐DigiワールドSP ジャイアントパルサー"
name-sort: "やまさでじわーるどSP じゃいあんとぱるさー"
@@ -55863,6 +55905,7 @@ SLPS-25254:
- EETimingHack # Fixes various VIF errors.
gsHWFixes:
minimumBlendingLevel: 2 # Improves banding.
recommendedBlendingLevel: 4 # Fixes missing text brightness.
SLPS-25255:
name: "サイドワインダーV フライトBOX [特別限定版]"
name-sort: "さいどわいんだーV ふらいとBOX [とくべつげんていばん]"
@@ -63150,6 +63193,7 @@ SLUS-20454:
- EETimingHack # Fixes various VIF errors.
gsHWFixes:
minimumBlendingLevel: 2 # Improves banding.
recommendedBlendingLevel: 4 # Fixes missing text brightness.
SLUS-20455:
name: "F1 2002"
region: "NTSC-U"
@@ -64887,6 +64931,7 @@ SLUS-20776:
region: "NTSC-U"
compat: 5
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -66978,6 +67023,7 @@ SLUS-21139:
minimumBlendingLevel: 3 # Fixes broken light and shadow rendering.
halfPixelOffset: 2 # Fixes misaligned bloom and character shadows.
autoFlush: 1 # Fixes missing bloom intensity and alignment.
nativeScaling: 2 # Helps fix offset blur and bloom on shadows and the UI.
SLUS-21140:
name: "Mobile Suit Gundam Seed - Never Ending Tomorrow"
region: "NTSC-U"
@@ -68207,7 +68253,7 @@ SLUS-21322:
vuClampMode: 3 # Fixes SPS and spawn issues.
gsHWFixes:
halfPixelOffset: 2 # Fixes post processing misalignment.
recommendedBlendingLevel: 3 # Improves reflection quality.
recommendedBlendingLevel: 4 # Improves reflection quality and terrain lighting.
SLUS-21323:
name: "Rampage - Total Destruction"
region: "NTSC-U"
@@ -69433,8 +69479,11 @@ SLUS-21544:
name: "Fantastic 4 - Rise of Silver Surfer"
region: "NTSC-U"
compat: 5
speedHacks:
eeCycleRate: 1 # Helps alleviate FPS drops during FMVs.
gsHWFixes:
roundSprite: 2 # Fixes edge depth bleeding during power attacks and misaligned bloom.
nativeScaling: 1 # Fixes Post effect.
SLUS-21545:
name: "Pirates of the Caribbean - At World's End"
region: "NTSC-U"
@@ -70933,6 +70982,9 @@ SLUS-21813:
name: "007 - Quantum of Solace"
region: "NTSC-U"
compat: 5
gsHWFixes:
halfPixelOffset: 2 # Reduces bloom misalignment and fixes depth lines.
nativeScaling: 2 # Fixes bloom intensity.
SLUS-21814:
name: "Disney - Think Fast"
region: "NTSC-U"
@@ -72724,6 +72776,17 @@ TCPS-10068:
name-sort: "でんしゃでごー りょじょうへん [こんとろーらどうこんせっと]"
name-en: "Densha de Go! Ryojou-hen [with Controller]"
region: "NTSC-J"
TCPS-10073:
name: "エナジーエアフォース エイムストライク!"
name-sort: "えなじーえあふぉーす えいむすとらいく!"
name-en: "Energy Airforce - Aim Strike! [TAITO 2002]"
region: "NTSC-J"
speedHacks:
instantVU1: 0 # Fixes hanging while going ingame.
mtvu: 0
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
TCPS-10074:
name: "スペースインベーダー アニバーサリー [筐体型コントローラ同梱セット]"
name-sort: "すぺーすいんべーだー あにばーさりー [きょうたいけいこんとろーらどうこんせっと]"
@@ -72760,6 +72823,7 @@ TCPS-10092:
name-en: "Spider-Man 2"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -72835,6 +72899,7 @@ TCPS-10127:
name: "Spider-Man 2 [TAITO BEST]"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.

View File

@@ -40,6 +40,7 @@ MemorySearchWidget::MemorySearchWidget(QWidget* parent)
connect(m_ui.listSearchResults->verticalScrollBar(), &QScrollBar::valueChanged, this, &MemorySearchWidget::onSearchResultsListScroll);
connect(m_ui.listSearchResults, &QListView::customContextMenuRequested, this, &MemorySearchWidget::onListSearchResultsContextMenu);
connect(m_ui.cmbSearchType, &QComboBox::currentIndexChanged, this, &MemorySearchWidget::onSearchTypeChanged);
connect(m_ui.cmbSearchComparison, &QComboBox::currentIndexChanged, this, &MemorySearchWidget::onSearchComparisonChanged);
// Ensures we don't retrigger the load results function unintentionally
m_resultsLoadTimer.setInterval(100);
@@ -249,7 +250,6 @@ bool handleSearchComparison(SearchComparison searchComparison, u32 searchAddress
}
case SearchComparison::IncreasedBy:
{
const T priorValue = priorResult->getValue<T>();
const T expectedIncrease = searchValue + priorValue;
return memoryValueComparator(SearchComparison::Equals, readValue, expectedIncrease);
@@ -282,6 +282,10 @@ bool handleSearchComparison(SearchComparison searchComparison, u32 searchAddress
const T expectedDecrease = priorValue - searchValue;
return memoryValueComparator(SearchComparison::Equals, readValue, expectedIncrease) || memoryValueComparator(SearchComparison::Equals, readValue, expectedDecrease);
}
case SearchComparison::UnknownValue:
{
return true;
}
default:
Console.Error("Debugger: Unknown type when doing memory search!");
return false;
@@ -506,63 +510,69 @@ void MemorySearchWidget::onSearchButtonClicked()
const bool isFilterSearch = sender() == m_ui.btnFilterSearch;
unsigned long long value;
switch (searchType)
if(searchComparison != SearchComparison::UnknownValue)
{
case SearchType::ByteType:
case SearchType::Int16Type:
case SearchType::Int32Type:
case SearchType::Int64Type:
value = searchValue.toULongLong(&ok, searchHex ? 16 : 10);
break;
case SearchType::FloatType:
case SearchType::DoubleType:
searchValue.toDouble(&ok);
break;
case SearchType::StringType:
ok = !searchValue.isEmpty();
break;
case SearchType::ArrayType:
ok = !searchValue.trimmed().isEmpty();
break;
}
if(doesSearchComparisonTakeInput(searchComparison))
{
switch (searchType)
{
case SearchType::ByteType:
case SearchType::Int16Type:
case SearchType::Int32Type:
case SearchType::Int64Type:
value = searchValue.toULongLong(&ok, searchHex ? 16 : 10);
break;
case SearchType::FloatType:
case SearchType::DoubleType:
searchValue.toDouble(&ok);
break;
case SearchType::StringType:
ok = !searchValue.isEmpty();
break;
case SearchType::ArrayType:
ok = !searchValue.trimmed().isEmpty();
break;
}
if (!ok)
{
QMessageBox::critical(this, tr("Debugger"), tr("Invalid search value"));
return;
}
if (!ok)
{
QMessageBox::critical(this, tr("Debugger"), tr("Invalid search value"));
return;
}
switch (searchType)
{
case SearchType::ArrayType:
case SearchType::StringType:
case SearchType::DoubleType:
case SearchType::FloatType:
break;
case SearchType::Int64Type:
if (value <= std::numeric_limits<unsigned long long>::max())
break;
case SearchType::Int32Type:
if (value <= std::numeric_limits<unsigned long>::max())
break;
case SearchType::Int16Type:
if (value <= std::numeric_limits<unsigned short>::max())
break;
case SearchType::ByteType:
if (value <= std::numeric_limits<unsigned char>::max())
break;
default:
QMessageBox::critical(this, tr("Debugger"), tr("Value is larger than type"));
switch (searchType)
{
case SearchType::ArrayType:
case SearchType::StringType:
case SearchType::DoubleType:
case SearchType::FloatType:
break;
case SearchType::Int64Type:
if (value <= std::numeric_limits<unsigned long long>::max())
break;
case SearchType::Int32Type:
if (value <= std::numeric_limits<unsigned long>::max())
break;
case SearchType::Int16Type:
if (value <= std::numeric_limits<unsigned short>::max())
break;
case SearchType::ByteType:
if (value <= std::numeric_limits<unsigned char>::max())
break;
default:
QMessageBox::critical(this, tr("Debugger"), tr("Value is larger than type"));
return;
}
}
if (!isFilterSearch && (searchComparison == SearchComparison::Changed || searchComparison == SearchComparison::ChangedBy
|| searchComparison == SearchComparison::Decreased || searchComparison == SearchComparison::DecreasedBy
|| searchComparison == SearchComparison::Increased || searchComparison == SearchComparison::IncreasedBy
|| searchComparison == SearchComparison::NotChanged))
{
QMessageBox::critical(this, tr("Debugger"), tr("This search comparison can only be used with filter searches."));
return;
}
if (!isFilterSearch && (searchComparison == SearchComparison::Changed || searchComparison == SearchComparison::ChangedBy
|| searchComparison == SearchComparison::Decreased || searchComparison == SearchComparison::DecreasedBy
|| searchComparison == SearchComparison::Increased || searchComparison == SearchComparison::IncreasedBy
|| searchComparison == SearchComparison::NotChanged))
{
QMessageBox::critical(this, tr("Debugger"), tr("This search comparison can only be used with filter searches."));
return;
}
}
QFutureWatcher<std::vector<SearchResult>>* workerWatcher = new QFutureWatcher<std::vector<SearchResult>>();
@@ -637,6 +647,23 @@ SearchComparison MemorySearchWidget::getCurrentSearchComparison()
return m_searchComparisonLabelMap.labelToEnum(m_ui.cmbSearchComparison->currentText());
}
bool MemorySearchWidget::doesSearchComparisonTakeInput(const SearchComparison comparison)
{
switch (comparison) {
case SearchComparison::Equals:
case SearchComparison::NotEquals:
case SearchComparison::GreaterThan:
case SearchComparison::GreaterThanOrEqual:
case SearchComparison::LessThan:
case SearchComparison::LessThanOrEqual:
case SearchComparison::IncreasedBy:
case SearchComparison::DecreasedBy:
return true;
default:
return false;
}
}
void MemorySearchWidget::onSearchTypeChanged(int newIndex)
{
if (newIndex < 4)
@@ -654,6 +681,11 @@ void MemorySearchWidget::onSearchTypeChanged(int newIndex)
updateSearchComparisonSelections();
}
void MemorySearchWidget::onSearchComparisonChanged(int newValue)
{
m_ui.txtSearchValue->setEnabled(getCurrentSearchComparison() != SearchComparison::UnknownValue);
}
void MemorySearchWidget::updateSearchComparisonSelections()
{
const QString selectedComparisonLabel = m_ui.cmbSearchComparison->currentText();
@@ -704,5 +736,11 @@ std::vector<SearchComparison> MemorySearchWidget::getValidSearchComparisonsForSt
comparisons.push_back(SearchComparison::ChangedBy);
comparisons.push_back(SearchComparison::NotChanged);
}
if(!hasResults)
{
comparisons.push_back(SearchComparison::UnknownValue);
}
return comparisons;
}

View File

@@ -48,6 +48,7 @@ public:
Changed,
ChangedBy,
NotChanged,
UnknownValue,
Invalid
};
@@ -69,6 +70,7 @@ public:
insert(SearchComparison::Changed, tr("Changed"));
insert(SearchComparison::ChangedBy, tr("Changed By"));
insert(SearchComparison::NotChanged, tr("Not Changed"));
insert(SearchComparison::UnknownValue, tr("Unknown Initial Value"));
insert(SearchComparison::Invalid, "");
}
SearchComparison labelToEnum(QString comparisonLabel)
@@ -120,6 +122,7 @@ public slots:
void onSearchButtonClicked();
void onSearchResultsListScroll(u32 value);
void onSearchTypeChanged(int newIndex);
void onSearchComparisonChanged(int newIndex);
void loadSearchResults();
void contextSearchResultGoToDisassembly();
void contextRemoveSearchResult();
@@ -146,4 +149,5 @@ private:
std::vector<SearchComparison> getValidSearchComparisonsForState(SearchType type, std::vector<SearchResult> &existingResults);
SearchType getCurrentSearchType();
SearchComparison getCurrentSearchComparison();
bool doesSearchComparisonTakeInput(SearchComparison comparison);
};

View File

@@ -148,6 +148,11 @@
<string>Less Than Or Equal</string>
</property>
</item>
<item>
<property name="text">
<string>Unknown Initial Value</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">

View File

@@ -17162,162 +17162,168 @@ This action cannot be reversed, and you will lose any saves on the card.</source
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="123"/>
<location filename="../Debugger/MemorySearchWidget.h" line="59"/>
<location filename="../Debugger/MemorySearchWidget.h" line="60"/>
<source>Equals</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="128"/>
<location filename="../Debugger/MemorySearchWidget.h" line="60"/>
<location filename="../Debugger/MemorySearchWidget.h" line="61"/>
<source>Not Equals</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="133"/>
<location filename="../Debugger/MemorySearchWidget.h" line="61"/>
<location filename="../Debugger/MemorySearchWidget.h" line="62"/>
<source>Greater Than</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="138"/>
<location filename="../Debugger/MemorySearchWidget.h" line="62"/>
<location filename="../Debugger/MemorySearchWidget.h" line="63"/>
<source>Greater Than Or Equal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="143"/>
<location filename="../Debugger/MemorySearchWidget.h" line="63"/>
<location filename="../Debugger/MemorySearchWidget.h" line="64"/>
<source>Less Than</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="148"/>
<location filename="../Debugger/MemorySearchWidget.h" line="64"/>
<location filename="../Debugger/MemorySearchWidget.h" line="65"/>
<source>Less Than Or Equal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="156"/>
<location filename="../Debugger/MemorySearchWidget.ui" line="153"/>
<location filename="../Debugger/MemorySearchWidget.h" line="73"/>
<source>Unknown Initial Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="161"/>
<source>Comparison</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="167"/>
<location filename="../Debugger/MemorySearchWidget.ui" line="172"/>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="181"/>
<location filename="../Debugger/MemorySearchWidget.ui" line="186"/>
<source>End</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="94"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="95"/>
<source>Search Results List Context Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="100"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="101"/>
<source>Copy Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="104"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="105"/>
<source>Go to in Disassembly</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="108"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="109"/>
<source>Add to Saved Memory Addresses</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="115"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="116"/>
<source>Remove Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="486"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="494"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="500"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="531"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="555"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="564"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="490"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="498"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="504"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="539"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="563"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="573"/>
<source>Debugger</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="486"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="490"/>
<source>Invalid start address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="494"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="498"/>
<source>Invalid end address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="500"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="504"/>
<source>Start address can&apos;t be equal to or greater than the end address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="531"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="539"/>
<source>Invalid search value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="555"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="563"/>
<source>Value is larger than type</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="564"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="573"/>
<source>This search comparison can only be used with filter searches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="577"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="587"/>
<source>%0 results found</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="594"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="604"/>
<source>Searching...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="65"/>
<location filename="../Debugger/MemorySearchWidget.h" line="66"/>
<source>Increased</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="66"/>
<location filename="../Debugger/MemorySearchWidget.h" line="67"/>
<source>Increased By</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="67"/>
<location filename="../Debugger/MemorySearchWidget.h" line="68"/>
<source>Decreased</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="68"/>
<location filename="../Debugger/MemorySearchWidget.h" line="69"/>
<source>Decreased By</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="69"/>
<location filename="../Debugger/MemorySearchWidget.h" line="70"/>
<source>Changed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="70"/>
<location filename="../Debugger/MemorySearchWidget.h" line="71"/>
<source>Changed By</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="71"/>
<location filename="../Debugger/MemorySearchWidget.h" line="72"/>
<source>Not Changed</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -952,7 +952,7 @@ GSVector2i GSRendererHW::GetValidSize(const GSTextureCache::Source* tex)
// Make sure sizes are within max limit of 2048,
// this shouldn't happen but if it does it needs to be addressed,
// clamp the size so at least it doesn't cause a crash.
constexpr int valid_max_size = 2048;
constexpr int valid_max_size = 2047;
if ((width > valid_max_size) || (height > valid_max_size))
{
Console.Warning("Warning: GetValidSize out of bounds, X:%d Y:%d", width, height);

View File

@@ -1851,7 +1851,7 @@ bool VMManager::DoSaveState(const char* filename, s32 slot_for_message, bool zip
Console.WriteLn(fmt::format("Creating save state backup {}...", backup_filename));
if (!FileSystem::RenamePath(filename, backup_filename.c_str()))
{
Host::AddIconOSDMessage(std::move(osd_key), ICON_FA_EXCLAMATION_TRIANGLE,
Host::AddIconOSDMessage(osd_key, ICON_FA_EXCLAMATION_TRIANGLE,
fmt::format(
TRANSLATE_FS("VMManager", "Failed to back up old save state {}."), Path::GetFileName(filename)),
Host::OSD_ERROR_DURATION);
@@ -2234,7 +2234,7 @@ bool VMManager::ChangeDisc(CDVD_SourceType source, std::string path)
CDVDsys_ChangeSource(source);
if (!path.empty())
CDVDsys_SetFile(source, std::move(path));
CDVDsys_SetFile(source, path);
Error error;
const bool result = DoCDVDopen(&error);

View File

@@ -39,6 +39,13 @@ __fi void makeMergeMask(u32& x)
x = ((x & 0x40) >> 6) | ((x & 0x10) >> 3) | (x & 4) | ((x & 1) << 3);
}
#ifdef _WIN32
__fi void makeMergeMaskAllColumns(u32& x)
{
x = ((x & 0x40404040) >> 6) | ((x & 0x10101010) >> 3) | (x & 0x04040404) | ((x & 0x01010101) << 3);
}
#endif
__fi void VifUnpackSSE_Dynarec::SetMasks(int cS) const
{
const int idx = v.idx;
@@ -260,11 +267,8 @@ void VifUnpackSSE_Dynarec::CompileRoutine()
#ifdef _WIN32
// See SetMasks()
const u32 m0 = vB.mask;
const u32 m3 = ((m0 & 0xaaaaaaaa) >> 1) & ~m0;
const u32 m2 = (m0 & 0x55555555) & (~m0 >> 1);
// see doMaskWrite()
const u32 m4 = (m0 & ~((m3 << 1) | m2)) & 0x55555555;
const u32 m5 = ~(m2 | m3 | m4) & 0x0f0f0f0f;
u32 m3 = ((m0 & 0xaaaaaaaa) >> 1) & ~m0;
u32 m2 = (m0 & 0x55555555) & (~m0 >> 1);
int regsUsed = 2;
// Allocate column registers
@@ -287,26 +291,36 @@ void VifUnpackSSE_Dynarec::CompileRoutine()
// Allocate row register
if ((doMask && m2) || doMode)
{
rowReg = xRegisterSSE(regsUsed);
if (regsUsed - 6 >= 0)
nonVolatileRegs[regsUsed - 6] = rowReg;
rowReg = xRegisterSSE(regsUsed++);
regsUsed++;
}
// see doMaskWrite()
u32 m4 = (m0 & ~((m3 << 1) | m2)) & 0x55555555;
makeMergeMaskAllColumns(m2);
makeMergeMaskAllColumns(m3);
makeMergeMaskAllColumns(m4);
const u32 m5 = ~(m2 | m3 | m4) & 0x0f0f0f0f;
// Allocate temp register
if (doMode && (doMode != 3) &&
doMask && m5 != 0x0f0f0f0f)
{
tmpReg = xRegisterSSE(regsUsed);
if (regsUsed - 6 >= 0)
nonVolatileRegs[regsUsed - 6] = tmpReg;
tmpReg = xRegisterSSE(regsUsed++);
regsUsed++;
}
// Allocate zero register
if (needXmmZero)
{
zeroReg = xRegisterSSE(regsUsed);
if (regsUsed - 6 >= 0)
nonVolatileRegs[regsUsed - 6] = zeroReg;
zeroReg = xRegisterSSE(regsUsed++);
regsUsed++;
}
regsUsed -= 6;