Compare commits

...

15 Commits

Author SHA1 Message Date
lightningterror
d915a0b945 GS/Shaders: Try to fix Warning X4000: FxaaPixelShader potentially uninitialized variable. 2025-04-26 21:39:53 +02:00
Mrlinkwii
ac9c5eaae9 issues/Github : remove unused links
[skip-ci]
2025-04-26 21:36:16 +02:00
lightningterror
0891da303c GS/HW: Unlink source texture from old target before deletion.
DT Racer hits this path and causes a crash when RT in RT is disabled, so let's make sure source and target texture isn't linked/shared before deleting the target.
2025-04-26 09:37:36 +02:00
refractionpcsx2
55e9b51faa GS/HW: Only reuse dirty targets that were recently accessed 2025-04-26 09:36:57 +02:00
PCSX2 Bot
55dc0ade47 [ci skip] Qt: Update Base Translation. 2025-04-25 20:24:43 -04:00
Sean
2cf7083718 Debugger: Add breakpoint description label (#12534) 2025-04-25 18:08:09 -04:00
refractionpcsx2
15df532d68 GS: Improve TrianglesAreQuads check to make sure 2 edges match a previous triangle 2025-04-25 14:26:03 +02:00
refractionpcsx2
884d2302a9 GS/HW: Fix up some regressions from RT in RT 2025-04-25 14:26:03 +02:00
KamFretoZ
bacdfd6018 FSUI/BPM: Fix icon 2025-04-25 11:29:59 +02:00
PCSX2 Bot
dc7a3bbbd3 [ci skip] Qt: Update Base Translation. 2025-04-25 11:29:41 +02:00
chaoticgd
ff0d791783 Debugger: Use a consistent context string when translating layout names 2025-04-24 19:45:46 -04:00
chaoticgd
a3d8a0dde0 Debugger: Add dummy actions to the Tools and Windows menus 2025-04-24 19:44:45 -04:00
PCSX2 Bot
a8c908d113 [ci skip] Qt: Update Base Translation. 2025-04-24 02:07:06 +02:00
Filoppi
01849d5305 GS: Allow for widescreen and ultrawide patches to specify their target aspect ratio.
This allows users with monitors of any aspect ratios to use patches made for any other aspect ratio.
For example, if on 32:9 one uses a 21:9 patch, pcsx2 will automatically size the presentation to 21:9 within 32:9.
This also removes some ugly or hardcoded stuff from the code :).
It also opens the door to add a "Custom" user aspect ratio, without the patch needing to specify the aspect ratio, so users could stretch the image to any AR they'd like, but for now there's no need to add that.

(cherry picked from commit 3ae2520aa19efe32d8d0c12b2b174dcd3d3bc745)
2025-04-22 21:36:50 -04:00
PCSX2 Bot
23968d3e2b [ci skip] Qt: Update Base Translation. 2025-04-22 20:02:33 -04:00
62 changed files with 491 additions and 240 deletions

View File

@@ -66,10 +66,6 @@ body:
Performance issues as a result of not meeting our hardware requirements are not valid.
Please read our known issues pages for AMD and Intel drivers.
- [Intel Drivers](https://github.com/PCSX2/pcsx2/wiki/OpenGL-and-Intel-GPUs-All-you-need-to-know).
- [AMD Drivers](https://github.com/PCSX2/pcsx2/wiki/OpenGL-and-AMD-GPUs---All-you-need-to-know).
We are **not** accepting issues related to the **libretro** core. The libretro core is being maintained separately at this time
- type: input
id: rev

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

View File

@@ -160,10 +160,7 @@ float FxaaLuma(float4 rgba)
float4 FxaaPixelShader(float2 pos, FxaaTex tex, float2 fxaaRcpFrame, float fxaaSubpix, float fxaaEdgeThreshold, float fxaaEdgeThresholdMin)
{
float2 posM;
posM.x = pos.x;
posM.y = pos.y;
float2 posM = pos;
float4 rgbyM = FxaaTexTop(tex, posM);
rgbyM.w = RGBLuminance(rgbyM.xyz);
#define lumaM rgbyM.w
@@ -186,9 +183,10 @@ float4 FxaaPixelShader(float2 pos, FxaaTex tex, float2 fxaaRcpFrame, float fxaaS
float rangeMaxScaled = rangeMax * fxaaEdgeThreshold;
float rangeMaxClamped = max(fxaaEdgeThresholdMin, rangeMaxScaled);
bool earlyExit = range < rangeMaxClamped;
#if (FxaaEarlyExit == 1)
if(earlyExit) { return rgbyM; }
// Potential optimization, early exit.
if (range < rangeMaxClamped)
return rgbyM;
#endif
float lumaNW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1,-1), fxaaRcpFrame.xy));

View File

@@ -42,6 +42,7 @@ BreakpointDialog::BreakpointDialog(QWidget* parent, DebugInterface* cpu, Breakpo
m_ui.rdoExecute->setChecked(true);
m_ui.chkEnable->setChecked(bp->enabled);
m_ui.txtAddress->setText(QtUtils::FilledQStringFromValue(bp->addr, 16));
m_ui.txtDescription->setText(QString::fromStdString(bp->description));
if (bp->hasCond)
m_ui.txtCondition->setText(QString::fromStdString(bp->cond.expressionString));
@@ -53,6 +54,8 @@ BreakpointDialog::BreakpointDialog(QWidget* parent, DebugInterface* cpu, Breakpo
m_ui.txtAddress->setText(QtUtils::FilledQStringFromValue(mc->start, 16));
m_ui.txtSize->setText(QtUtils::FilledQStringFromValue(mc->end - mc->start, 16));
m_ui.txtDescription->setText(QString::fromStdString(mc->description));
m_ui.chkRead->setChecked(mc->memCond & MEMCHECK_READ);
m_ui.chkWrite->setChecked(mc->memCond & MEMCHECK_WRITE);
m_ui.chkChange->setChecked(mc->memCond & MEMCHECK_WRITE_ONCHANGE);
@@ -102,6 +105,7 @@ void BreakpointDialog::accept()
}
bp->addr = address;
bp->description = m_ui.txtDescription->text().toStdString();
bp->enabled = m_ui.chkEnable->isChecked();
@@ -138,6 +142,7 @@ void BreakpointDialog::accept()
mc->start = startAddress;
mc->end = startAddress + size;
mc->description = m_ui.txtDescription->text().toStdString();
if (!m_ui.txtCondition->text().isEmpty())
{

View File

@@ -10,7 +10,7 @@
<x>0</x>
<y>0</y>
<width>375</width>
<height>250</height>
<height>300</height>
</rect>
</property>
<property name="sizePolicy">
@@ -22,19 +22,19 @@
<property name="minimumSize">
<size>
<width>375</width>
<height>250</height>
<height>300</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>375</width>
<height>250</height>
<height>300</height>
</size>
</property>
<property name="baseSize">
<size>
<width>375</width>
<height>250</height>
<height>300</height>
</size>
</property>
<property name="windowTitle">
@@ -44,7 +44,7 @@
<property name="geometry">
<rect>
<x>20</x>
<y>210</y>
<y>260</y>
<width>341</width>
<height>32</height>
</rect>
@@ -102,14 +102,17 @@
<rect>
<x>110</x>
<y>10</y>
<width>251</width>
<height>41</height>
<width>250</width>
<height>79</height>
</rect>
</property>
<property name="title">
<string/>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="formAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
@@ -139,6 +142,29 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Description</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="txtDescription">
<property name="minimumSize">
<size>
<width>0</width>
<height>19</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>19</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QGroupBox" name="grpMemory">
@@ -148,7 +174,7 @@
<property name="geometry">
<rect>
<x>110</x>
<y>50</y>
<y>100</y>
<width>251</width>
<height>91</height>
</rect>
@@ -224,13 +250,13 @@
<property name="geometry">
<rect>
<x>110</x>
<y>140</y>
<y>190</y>
<width>251</width>
<height>61</height>
</rect>
</property>
<property name="title">
<string></string>
<string/>
</property>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0">

View File

@@ -72,11 +72,13 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
switch (index.column())
{
case BreakpointColumns::ENABLED:
return "";
return (bp->enabled) ? tr("Enabled") : tr("Disabled");
case BreakpointColumns::TYPE:
return tr("Execute");
case BreakpointColumns::OFFSET:
return QtUtils::FilledQStringFromValue(bp->addr, 16);
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(bp->description);
case BreakpointColumns::SIZE_LABEL:
return QString::fromStdString(m_cpu.GetSymbolGuardian().FunctionStartingAtAddress(bp->addr).name);
case BreakpointColumns::OPCODE:
@@ -105,6 +107,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
}
case BreakpointColumns::OFFSET:
return QtUtils::FilledQStringFromValue(mc->start, 16);
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(mc->description);
case BreakpointColumns::SIZE_LABEL:
return QString::number(mc->end - mc->start, 16);
case BreakpointColumns::OPCODE:
@@ -116,6 +120,29 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
}
}
}
else if (role == Qt::EditRole)
{
if (const auto* bp = std::get_if<BreakPoint>(&bp_mc))
{
switch (index.column())
{
case BreakpointColumns::CONDITION:
return bp->hasCond ? QString::fromStdString(bp->cond.expressionString) : "";
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(bp->description);
}
}
else if (const auto* mc = std::get_if<MemCheck>(&bp_mc))
{
switch (index.column())
{
case BreakpointColumns::CONDITION:
return mc->hasCond ? QString::fromStdString(mc->cond.expressionString) : "";
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(mc->description);
}
}
}
else if (role == BreakpointModel::DataRole)
{
if (const auto* bp = std::get_if<BreakPoint>(&bp_mc))
@@ -128,6 +155,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
return MEMCHECK_INVALID;
case BreakpointColumns::OFFSET:
return bp->addr;
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(bp->description);
case BreakpointColumns::SIZE_LABEL:
return QString::fromStdString(m_cpu.GetSymbolGuardian().FunctionStartingAtAddress(bp->addr).name);
case BreakpointColumns::OPCODE:
@@ -149,6 +178,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
return mc->memCond;
case BreakpointColumns::OFFSET:
return mc->start;
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(mc->description);
case BreakpointColumns::SIZE_LABEL:
return mc->end - mc->start;
case BreakpointColumns::OPCODE:
@@ -172,6 +203,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
return MEMCHECK_INVALID;
case BreakpointColumns::OFFSET:
return QtUtils::FilledQStringFromValue(bp->addr, 16);
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(bp->description);
case BreakpointColumns::SIZE_LABEL:
return QString::fromStdString(m_cpu.GetSymbolGuardian().FunctionStartingAtAddress(bp->addr).name);
case BreakpointColumns::OPCODE:
@@ -191,6 +224,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
return mc->memCond;
case BreakpointColumns::OFFSET:
return QtUtils::FilledQStringFromValue(mc->start, 16);
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(mc->description);
case BreakpointColumns::SIZE_LABEL:
return mc->end - mc->start;
case BreakpointColumns::OPCODE:
@@ -233,6 +268,8 @@ QVariant BreakpointModel::headerData(int section, Qt::Orientation orientation, i
case BreakpointColumns::OFFSET:
//: Warning: limited space available. Abbreviate if needed.
return tr("OFFSET");
case BreakpointColumns::DESCRIPTION:
return "DESCRIPTION";
case BreakpointColumns::SIZE_LABEL:
//: Warning: limited space available. Abbreviate if needed.
return tr("SIZE / LABEL");
@@ -260,6 +297,8 @@ QVariant BreakpointModel::headerData(int section, Qt::Orientation orientation, i
return "TYPE";
case BreakpointColumns::OFFSET:
return "OFFSET";
case BreakpointColumns::DESCRIPTION:
return "DESCRIPTION";
case BreakpointColumns::SIZE_LABEL:
return "SIZE / LABEL";
case BreakpointColumns::OPCODE:
@@ -282,6 +321,7 @@ Qt::ItemFlags BreakpointModel::flags(const QModelIndex& index) const
switch (index.column())
{
case BreakpointColumns::CONDITION:
case BreakpointColumns::DESCRIPTION:
return Qt::ItemFlag::ItemIsEnabled | Qt::ItemFlag::ItemIsSelectable | Qt::ItemFlag::ItemIsEditable;
case BreakpointColumns::TYPE:
case BreakpointColumns::OPCODE:
@@ -395,6 +435,27 @@ bool BreakpointModel::setData(const QModelIndex& index, const QVariant& value, i
emit dataChanged(index, index);
return true;
}
else if (role == Qt::EditRole && index.column() == BreakpointColumns::DESCRIPTION)
{
// Update BreakPoint description
if (auto* bp = std::get_if<BreakPoint>(&bp_mc))
{
const QString descValue = value.toString();
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), bp, descValue] {
CBreakPoints::ChangeBreakPointDescription(cpu, bp->addr, descValue.toStdString());
});
}
// Update MemCheck description
else if (auto* mc = std::get_if<MemCheck>(&bp_mc))
{
const QString descValue = value.toString();
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), mc, descValue] {
CBreakPoints::ChangeMemCheckDescription(cpu, mc->start, mc->end, descValue.toStdString());
});
}
emit dataChanged(index, index);
return true;
}
return false;
}
@@ -451,7 +512,7 @@ bool BreakpointModel::insertBreakpointRows(int row, int count, std::vector<Break
{
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), bp = *bp] {
CBreakPoints::AddBreakPoint(cpu, bp.addr, false, bp.enabled);
CBreakPoints::ChangeBreakPointDescription(cpu, bp.addr, bp.description);
if (bp.hasCond)
{
CBreakPoints::ChangeBreakPointAddCond(cpu, bp.addr, bp.cond);
@@ -462,6 +523,7 @@ bool BreakpointModel::insertBreakpointRows(int row, int count, std::vector<Break
{
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), mc = *mc] {
CBreakPoints::AddMemCheck(cpu, mc.start, mc.end, mc.memCond, mc.result);
CBreakPoints::ChangeMemCheckDescription(cpu, mc.start, mc.end, mc.description);
if (mc.hasCond)
{
CBreakPoints::ChangeMemCheckAddCond(cpu, mc.start, mc.end, mc.cond);
@@ -548,6 +610,12 @@ void BreakpointModel::loadBreakpointFromFieldList(QStringList fields)
return;
}
// Description
if (!fields[BreakpointColumns::DESCRIPTION].isEmpty())
{
bp.description = fields[BreakpointColumns::DESCRIPTION].toStdString();
}
insertBreakpointRows(0, 1, {bp});
}
else
@@ -608,6 +676,12 @@ void BreakpointModel::loadBreakpointFromFieldList(QStringList fields)
}
mc.result = static_cast<MemCheckResult>(result);
// Description
if (!fields[BreakpointColumns::DESCRIPTION].isEmpty())
{
mc.description = fields[BreakpointColumns::DESCRIPTION].toStdString();
}
insertBreakpointRows(0, 1, {mc});
}
}

View File

@@ -21,6 +21,7 @@ public:
ENABLED = 0,
TYPE,
OFFSET,
DESCRIPTION,
SIZE_LABEL,
OPCODE,
CONDITION,
@@ -38,6 +39,7 @@ public:
QHeaderView::ResizeMode::ResizeToContents,
QHeaderView::ResizeMode::ResizeToContents,
QHeaderView::ResizeMode::ResizeToContents,
QHeaderView::ResizeMode::ResizeToContents,
QHeaderView::ResizeMode::Stretch,
QHeaderView::ResizeMode::Stretch,
QHeaderView::ResizeMode::ResizeToContents,

View File

@@ -21,11 +21,7 @@ BreakpointView::BreakpointView(const DebuggerViewParameters& parameters)
connect(m_ui.breakpointList, &QTableView::doubleClicked, this, &BreakpointView::onDoubleClicked);
m_ui.breakpointList->setModel(m_model);
for (std::size_t i = 0; auto mode : BreakpointModel::HeaderResizeModes)
{
m_ui.breakpointList->horizontalHeader()->setSectionResizeMode(i, mode);
i++;
}
this->resizeColumns();
}
void BreakpointView::onDoubleClicked(const QModelIndex& index)
@@ -124,6 +120,7 @@ void BreakpointView::contextDelete()
void BreakpointView::contextNew()
{
BreakpointDialog* bpDialog = new BreakpointDialog(this, &cpu(), *m_model);
connect(bpDialog, &QDialog::accepted, this, &BreakpointView::resizeColumns);
bpDialog->setAttribute(Qt::WA_DeleteOnClose);
bpDialog->show();
}
@@ -140,6 +137,7 @@ void BreakpointView::contextEdit()
auto bpObject = m_model->at(selectedRow);
BreakpointDialog* bpDialog = new BreakpointDialog(this, &cpu(), *m_model, bpObject, selectedRow);
connect(bpDialog, &QDialog::accepted, this, &BreakpointView::resizeColumns);
bpDialog->setAttribute(Qt::WA_DeleteOnClose);
bpDialog->show();
}
@@ -172,3 +170,12 @@ void BreakpointView::saveBreakpointsToDebuggerSettings()
{
DebuggerSettingsManager::saveGameSettings(m_model);
}
void BreakpointView::resizeColumns()
{
for (std::size_t i = 0; auto mode : BreakpointModel::HeaderResizeModes)
{
m_ui.breakpointList->horizontalHeader()->setSectionResizeMode(i, mode);
i++;
}
}

View File

@@ -32,6 +32,8 @@ public:
void contextEdit();
void contextPasteCSV();
void resizeColumns();
void saveBreakpointsToDebuggerSettings();
private:

View File

@@ -12,7 +12,7 @@
#include "VMManager.h"
std::mutex DebuggerSettingsManager::writeLock;
const QString DebuggerSettingsManager::settingsFileVersion = "0.00";
const QString DebuggerSettingsManager::settingsFileVersion = "0.01";
QJsonObject DebuggerSettingsManager::loadGameSettingsJSON()
{
@@ -62,6 +62,17 @@ void DebuggerSettingsManager::loadGameSettings(BreakpointModel* bpModel)
return;
}
// Breakpoint descriptions were added at debugger settings file version 0.01. If loading
// saved breakpoints from a previous version (only 0.00 existed prior), the breakpoints will be
// missing a description. This code will add in an empty description so that the previous
// version, 0.00, is compatible with 0.01.
bool isMissingDescription = false;
const QJsonValue savedVersionValue = loadGameSettingsJSON().value("Version");
if (!savedVersionValue.isUndefined())
{
isMissingDescription = savedVersionValue.toString().toStdString() == "0.00";
}
const QJsonArray breakpointsArray = breakpointsValue.toArray();
for (u32 row = 0; row < breakpointsArray.size(); row++)
{
@@ -71,7 +82,13 @@ void DebuggerSettingsManager::loadGameSettings(BreakpointModel* bpModel)
Console.WriteLn("Debugger Settings Manager: Failed to load invalid Breakpoint object.");
continue;
}
const QJsonObject rowObject = rowValue.toObject();
QJsonObject rowObject = rowValue.toObject();
// Add empty description for saved breakpoints from debugger settings versions prior to 0.01
if (isMissingDescription)
{
rowObject.insert(QString("DESCRIPTION"), QJsonValue(""));
}
QStringList fields;
u32 col = 0;

View File

@@ -24,7 +24,7 @@
<x>0</x>
<y>0</y>
<width>1000</width>
<height>20</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@@ -50,6 +50,7 @@
<property name="title">
<string>Windows</string>
</property>
<addaction name="actionWindowsDummy"/>
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
@@ -72,6 +73,7 @@
<property name="title">
<string>Tools</string>
</property>
<addaction name="actionToolsDummy"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuView"/>
@@ -318,6 +320,16 @@
<enum>QAction::NoRole</enum>
</property>
</action>
<action name="actionToolsDummy">
<property name="text">
<string/>
</property>
</action>
<action name="actionWindowsDummy">
<property name="text">
<string/>
</property>
</action>
</widget>
<resources/>
<connections/>

View File

@@ -298,7 +298,10 @@ void DockManager::resetAllLayouts()
m_layouts.clear();
for (const DockTables::DefaultDockLayout& layout : DockTables::DEFAULT_DOCK_LAYOUTS)
createLayout(tr(layout.name.c_str()), layout.cpu, true, layout.name);
{
QString name = QCoreApplication::translate("DebuggerLayout", layout.name.c_str());
createLayout(name, layout.cpu, true, layout.name);
}
switchToLayout(0);
updateLayoutSwitcher();
@@ -313,7 +316,10 @@ void DockManager::resetDefaultLayouts()
m_layouts = std::vector<DockLayout>();
for (const DockTables::DefaultDockLayout& layout : DockTables::DEFAULT_DOCK_LAYOUTS)
createLayout(tr(layout.name.c_str()), layout.cpu, true, layout.name);
{
QString name = QCoreApplication::translate("DebuggerLayout", layout.name.c_str());
createLayout(name, layout.cpu, true, layout.name);
}
for (DockLayout& layout : old_layouts)
if (!layout.isDefault())

View File

@@ -502,7 +502,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
dialog->registerWidgetHelp(m_ui.aspectRatio, tr("Aspect Ratio"), tr("Auto Standard (4:3/3:2 Progressive)"),
tr("Changes the aspect ratio used to display the console's output to the screen. The default is Auto Standard (4:3/3:2 "
"Progressive) which automatically adjusts the aspect ratio to match how a game would be shown on a typical TV of the era."));
"Progressive) which automatically adjusts the aspect ratio to match how a game would be shown on a typical TV of the era, and adapts to widescreen/ultrawide game patches."));
dialog->registerWidgetHelp(m_ui.interlacing, tr("Deinterlacing"), tr("Automatic (Default)"), tr("Determines the deinterlacing method to be used on the interlaced screen of the emulated console. Automatic should be able to correctly deinterlace most games, but if you see visibly shaky graphics, try one of the available options."));

View File

@@ -106,7 +106,7 @@
</item>
<item>
<property name="text">
<string>Native (10:7)</string>
<string>Native/Full (10:7)</string>
</property>
</item>
</widget>
@@ -142,7 +142,7 @@
</item>
<item>
<property name="text">
<string>Native (10:7)</string>
<string>Native/Full (10:7)</string>
</property>
</item>
</widget>

View File

@@ -2137,74 +2137,79 @@ Leaderboard Position: {1} of {2}</source>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="91"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="157"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="183"/>
<source>Memory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="116"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="119"/>
<source>Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="138"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="141"/>
<source>0</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="165"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="148"/>
<source>Description</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="191"/>
<source>Read</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="175"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="201"/>
<source>Write</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="185"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="211"/>
<source>Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="196"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="222"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="215"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="241"/>
<source>1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="239"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="265"/>
<source>Condition</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="267"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="293"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="277"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.ui" line="303"/>
<source>Enable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.cpp" line="100"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.cpp" line="128"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.cpp" line="103"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.cpp" line="132"/>
<source>Invalid Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.cpp" line="115"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.cpp" line="150"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.cpp" line="119"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.cpp" line="155"/>
<source>Invalid Condition</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointDialog.cpp" line="135"/>
<location filename="../Debugger/Breakpoints/BreakpointDialog.cpp" line="139"/>
<source>Invalid Size</source>
<translation type="unfinished"></translation>
</message>
@@ -2217,75 +2222,77 @@ Leaderboard Position: {1} of {2}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="88"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="111"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="90"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="115"/>
<source>--</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="96"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="75"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="98"/>
<source>Enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="96"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="75"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="98"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="100"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="102"/>
<source>Read</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="103"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="105"/>
<source>Write(C)</source>
<extracomment>(C) = changes, as in &quot;look for changes&quot;.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="103"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="105"/>
<source>Write</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="232"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="267"/>
<source>TYPE</source>
<extracomment>Warning: limited space available. Abbreviate if needed.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="235"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="270"/>
<source>OFFSET</source>
<extracomment>Warning: limited space available. Abbreviate if needed.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="238"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="275"/>
<source>SIZE / LABEL</source>
<extracomment>Warning: limited space available. Abbreviate if needed.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="241"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="278"/>
<source>INSTRUCTION</source>
<extracomment>Warning: limited space available. Abbreviate if needed.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="244"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="281"/>
<source>CONDITION</source>
<extracomment>Warning: limited space available. Abbreviate if needed.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="247"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="284"/>
<source>HITS</source>
<extracomment>Warning: limited space available. Abbreviate if needed.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="250"/>
<location filename="../Debugger/Breakpoints/BreakpointModel.cpp" line="287"/>
<source>X</source>
<extracomment>Warning: limited space available. Abbreviate if needed.</extracomment>
<translation type="unfinished"></translation>
@@ -2299,42 +2306,42 @@ Leaderboard Position: {1} of {2}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="44"/>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="40"/>
<source>New</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="51"/>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="47"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="56"/>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="52"/>
<source>Copy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="60"/>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="56"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="68"/>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="64"/>
<source>Copy all as CSV</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="78"/>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="74"/>
<source>Paste from CSV</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="83"/>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="79"/>
<source>Load from Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="89"/>
<location filename="../Debugger/Breakpoints/BreakpointView.cpp" line="85"/>
<source>Save to Settings</source>
<translation type="unfinished"></translation>
</message>
@@ -2393,7 +2400,7 @@ Leaderboard Position: {1} of {2}</source>
</message>
<message>
<location filename="../../pcsx2/CDVD/ThreadedFileReader.cpp" line="278"/>
<source>Not enough free memory available for precaching, ({}GB) required.</source>
<source>Not enough memory available for precaching ({:.2f} GB required).</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5031,13 +5038,13 @@ Do you want to overwrite?</source>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="32"/>
<location filename="../Debugger/DebuggerWindow.ui" line="103"/>
<location filename="../Debugger/DebuggerWindow.ui" line="105"/>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="42"/>
<location filename="../Debugger/DebuggerWindow.ui" line="85"/>
<location filename="../Debugger/DebuggerWindow.ui" line="87"/>
<source>Debug</source>
<translation type="unfinished"></translation>
</message>
@@ -5047,134 +5054,134 @@ Do you want to overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="56"/>
<location filename="../Debugger/DebuggerWindow.ui" line="136"/>
<location filename="../Debugger/DebuggerWindow.ui" line="57"/>
<location filename="../Debugger/DebuggerWindow.ui" line="138"/>
<source>View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="66"/>
<location filename="../Debugger/DebuggerWindow.ui" line="67"/>
<source>Layouts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="73"/>
<location filename="../Debugger/DebuggerWindow.ui" line="74"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="120"/>
<location filename="../Debugger/DebuggerWindow.ui" line="122"/>
<source>System</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="157"/>
<location filename="../Debugger/DebuggerWindow.ui" line="159"/>
<location filename="../Debugger/DebuggerWindow.cpp" line="319"/>
<source>Run</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="165"/>
<location filename="../Debugger/DebuggerWindow.ui" line="167"/>
<source>Step Into</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="168"/>
<location filename="../Debugger/DebuggerWindow.ui" line="170"/>
<source>F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="176"/>
<location filename="../Debugger/DebuggerWindow.ui" line="178"/>
<source>Step Over</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="179"/>
<location filename="../Debugger/DebuggerWindow.ui" line="181"/>
<source>F10</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="187"/>
<location filename="../Debugger/DebuggerWindow.ui" line="189"/>
<source>Step Out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="190"/>
<location filename="../Debugger/DebuggerWindow.ui" line="192"/>
<source>Shift+F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="201"/>
<location filename="../Debugger/DebuggerWindow.ui" line="203"/>
<source>Always On Top</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="204"/>
<location filename="../Debugger/DebuggerWindow.ui" line="206"/>
<source>Show this window on top</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="212"/>
<location filename="../Debugger/DebuggerWindow.ui" line="214"/>
<source>Analyze</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="217"/>
<location filename="../Debugger/DebuggerWindow.ui" line="219"/>
<source>Reset All Layouts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="222"/>
<location filename="../Debugger/DebuggerWindow.ui" line="224"/>
<source>Reset Default Layouts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="227"/>
<location filename="../Debugger/DebuggerWindow.ui" line="229"/>
<source>Reset Splitter Positions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="235"/>
<location filename="../Debugger/DebuggerWindow.ui" line="237"/>
<source>Shut Down</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="246"/>
<location filename="../Debugger/DebuggerWindow.ui" line="248"/>
<source>Reset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="257"/>
<location filename="../Debugger/DebuggerWindow.ui" line="259"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="268"/>
<location filename="../Debugger/DebuggerWindow.ui" line="270"/>
<source>Increase Font Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="279"/>
<location filename="../Debugger/DebuggerWindow.ui" line="281"/>
<source>Decrease Font Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="282"/>
<location filename="../Debugger/DebuggerWindow.ui" line="284"/>
<source>Ctrl+-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="293"/>
<location filename="../Debugger/DebuggerWindow.ui" line="295"/>
<source>Reset Font Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="304"/>
<location filename="../Debugger/DebuggerWindow.ui" line="306"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DebuggerWindow.ui" line="315"/>
<location filename="../Debugger/DebuggerWindow.ui" line="317"/>
<source>Game Settings</source>
<translation type="unfinished"></translation>
</message>
@@ -5410,38 +5417,38 @@ Do you want to overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Docking/DockManager.cpp" line="360"/>
<location filename="../Debugger/Docking/DockManager.cpp" line="366"/>
<source>Add Another...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Docking/DockManager.cpp" line="574"/>
<location filename="../Debugger/Docking/DockManager.cpp" line="580"/>
<source>Edit Layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Docking/DockManager.cpp" line="579"/>
<location filename="../Debugger/Docking/DockManager.cpp" line="585"/>
<source>Reset Layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Docking/DockManager.cpp" line="629"/>
<location filename="../Debugger/Docking/DockManager.cpp" line="635"/>
<source>Are you sure you want to reset layout &apos;%1&apos;?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Docking/DockManager.cpp" line="630"/>
<location filename="../Debugger/Docking/DockManager.cpp" line="653"/>
<location filename="../Debugger/Docking/DockManager.cpp" line="636"/>
<location filename="../Debugger/Docking/DockManager.cpp" line="659"/>
<source>Confirmation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Docking/DockManager.cpp" line="585"/>
<location filename="../Debugger/Docking/DockManager.cpp" line="591"/>
<source>Delete Layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/Docking/DockManager.cpp" line="652"/>
<location filename="../Debugger/Docking/DockManager.cpp" line="658"/>
<source>Are you sure you want to delete layout &apos;%1&apos;?</source>
<translation type="unfinished"></translation>
</message>
@@ -10799,67 +10806,67 @@ Do you want to load this save and continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="432"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="452"/>
<source>Saving screenshot to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="444"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="464"/>
<source>Saved screenshot to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="451"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="471"/>
<source>Failed to save screenshot to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="522"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="542"/>
<source>Host GPU device encountered an error and was recovered. This may have broken rendering.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="627"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="647"/>
<source>CAS is not available, your graphics driver does not support the required functionality.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="682"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="702"/>
<source>with no compression</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="689"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="709"/>
<source>with LZMA compression</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="696"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="716"/>
<source>with Zstandard compression</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="702"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="722"/>
<source>Saving {0} GS dump {1} to &apos;{2}&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="703"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="723"/>
<source>single frame</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="703"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="723"/>
<source>multi-frame</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="723"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="743"/>
<source>Failed to render/download screenshot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="734"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="754"/>
<source>Saved GS dump to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
@@ -12235,6 +12242,12 @@ Scanning recursively takes more time, but will identify files in subdirectories.
<source>Widescreen (16:9)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/GraphicsSettingsWidget.ui" line="109"/>
<location filename="../Settings/GraphicsSettingsWidget.ui" line="145"/>
<source>Native/Full (10:7)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/GraphicsSettingsWidget.ui" line="117"/>
<source>FMV Aspect Ratio Override:</source>
@@ -13042,12 +13055,6 @@ Percentage sign that will appear next to a number. Add a space or whatever is ne
<source>Load Textures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/GraphicsSettingsWidget.ui" line="109"/>
<location filename="../Settings/GraphicsSettingsWidget.ui" line="145"/>
<source>Native (10:7)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/GraphicsSettingsWidget.ui" line="417"/>
<source>Apply Widescreen Patches</source>
@@ -13793,6 +13800,11 @@ Swap chain: see Microsoft&apos;s Terminology Portal.</extracomment>
<source>Overrides the full-motion video (FMV) aspect ratio. If disabled, the FMV Aspect Ratio will match the same value as the general Aspect Ratio setting.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/GraphicsSettingsWidget.cpp" line="504"/>
<source>Changes the aspect ratio used to display the console&apos;s output to the screen. The default is Auto Standard (4:3/3:2 Progressive) which automatically adjusts the aspect ratio to match how a game would be shown on a typical TV of the era, and adapts to widescreen/ultrawide game patches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/GraphicsSettingsWidget.cpp" line="516"/>
<source>90%</source>
@@ -14254,11 +14266,6 @@ Swap chain: see Microsoft&apos;s Terminology Portal.</extracomment>
<source>Auto Standard (4:3/3:2 Progressive)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/GraphicsSettingsWidget.cpp" line="504"/>
<source>Changes the aspect ratio used to display the console&apos;s output to the screen. The default is Auto Standard (4:3/3:2 Progressive) which automatically adjusts the aspect ratio to match how a game would be shown on a typical TV of the era.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/GraphicsSettingsWidget.cpp" line="507"/>
<source>Deinterlacing</source>
@@ -22558,42 +22565,42 @@ Xbox 360 turntables require a 256x multiplier, most other turntables can use the
<context>
<name>VMManager</name>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1856"/>
<location filename="../../pcsx2/VMManager.cpp" line="1858"/>
<source>Failed to back up old save state {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1841"/>
<location filename="../../pcsx2/VMManager.cpp" line="1843"/>
<source>Failed to save save state: {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1026"/>
<location filename="../../pcsx2/VMManager.cpp" line="1028"/>
<source>PS2 BIOS ({})</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1087"/>
<location filename="../../pcsx2/VMManager.cpp" line="1089"/>
<source>Unknown Game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1250"/>
<location filename="../../pcsx2/VMManager.cpp" line="1252"/>
<source>CDVD precaching was cancelled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1256"/>
<location filename="../../pcsx2/VMManager.cpp" line="1258"/>
<source>CDVD precaching failed: {}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1349"/>
<location filename="../../pcsx2/VMManager.cpp" line="1351"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1350"/>
<location filename="../../pcsx2/VMManager.cpp" line="1352"/>
<source>PCSX2 requires a PS2 BIOS in order to run.
For legal reasons, you *must* obtain a BIOS from an actual PS2 unit that you own (borrowing doesn&apos;t count).
@@ -22604,275 +22611,275 @@ Please consult the FAQs and Guides for further instructions.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1441"/>
<location filename="../../pcsx2/VMManager.cpp" line="1443"/>
<source>Resuming state</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1446"/>
<location filename="../../pcsx2/VMManager.cpp" line="1448"/>
<source>Boot and Debug</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1814"/>
<location filename="../../pcsx2/VMManager.cpp" line="1816"/>
<source>Failed to load save state</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1889"/>
<location filename="../../pcsx2/VMManager.cpp" line="1891"/>
<source>State saved to slot {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1896"/>
<location filename="../../pcsx2/VMManager.cpp" line="1898"/>
<source>Failed to save save state to slot {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1964"/>
<location filename="../../pcsx2/VMManager.cpp" line="2001"/>
<location filename="../../pcsx2/VMManager.cpp" line="1966"/>
<location filename="../../pcsx2/VMManager.cpp" line="2003"/>
<source>Loading state</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1975"/>
<location filename="../../pcsx2/VMManager.cpp" line="1977"/>
<source>Failed to load state (Memory card is busy)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1994"/>
<location filename="../../pcsx2/VMManager.cpp" line="1996"/>
<source>There is no save state in slot {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2012"/>
<location filename="../../pcsx2/VMManager.cpp" line="2014"/>
<source>Failed to load state from slot {} (Memory card is busy)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2018"/>
<location filename="../../pcsx2/VMManager.cpp" line="2020"/>
<source>Loading state from slot {}...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2027"/>
<location filename="../../pcsx2/VMManager.cpp" line="2029"/>
<source>Failed to save state (Memory card is busy)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2044"/>
<location filename="../../pcsx2/VMManager.cpp" line="2046"/>
<source>Failed to save state to slot {} (Memory card is busy)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2051"/>
<location filename="../../pcsx2/VMManager.cpp" line="2053"/>
<source>Saving state to slot {}...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2217"/>
<location filename="../../pcsx2/VMManager.cpp" line="2219"/>
<source>Frame advancing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2245"/>
<location filename="../../pcsx2/VMManager.cpp" line="2247"/>
<source>Disc removed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2251"/>
<location filename="../../pcsx2/VMManager.cpp" line="2253"/>
<source>Disc changed to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2260"/>
<location filename="../../pcsx2/VMManager.cpp" line="2262"/>
<source>Failed to open new disc image &apos;{}&apos;. Reverting to old image.
Error was: {}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2269"/>
<location filename="../../pcsx2/VMManager.cpp" line="2271"/>
<source>Failed to switch back to old disc image. Removing disc.
Error was: {}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3069"/>
<location filename="../../pcsx2/VMManager.cpp" line="3073"/>
<source>Cheats have been disabled due to achievements hardcore mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3122"/>
<location filename="../../pcsx2/VMManager.cpp" line="3126"/>
<source>Fast CDVD is enabled, this may break games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3126"/>
<location filename="../../pcsx2/VMManager.cpp" line="3130"/>
<source>Cycle rate/skip is not at default, this may crash or make games run too slow.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3136"/>
<location filename="../../pcsx2/VMManager.cpp" line="3140"/>
<source>Upscale multiplier is below native, this will break rendering.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3176"/>
<location filename="../../pcsx2/VMManager.cpp" line="3180"/>
<source>Mipmapping is disabled. This may break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3181"/>
<location filename="../../pcsx2/VMManager.cpp" line="3185"/>
<source>Debug device is enabled. This will massively reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3190"/>
<location filename="../../pcsx2/VMManager.cpp" line="3194"/>
<source>Renderer is not set to Automatic. This may cause performance problems and graphical issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3196"/>
<location filename="../../pcsx2/VMManager.cpp" line="3200"/>
<source>Texture filtering is not set to Bilinear (PS2). This will break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3659"/>
<location filename="../../pcsx2/VMManager.cpp" line="3663"/>
<source>No Game Running</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3141"/>
<location filename="../../pcsx2/VMManager.cpp" line="3145"/>
<source>Trilinear filtering is not set to automatic. This may break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3146"/>
<location filename="../../pcsx2/VMManager.cpp" line="3150"/>
<source>Blending Accuracy is below Basic, this may break effects in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3151"/>
<location filename="../../pcsx2/VMManager.cpp" line="3155"/>
<source>Hardware Download Mode is not set to Accurate, this may break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3202"/>
<location filename="../../pcsx2/VMManager.cpp" line="3206"/>
<source>EE FPU Round Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3208"/>
<location filename="../../pcsx2/VMManager.cpp" line="3212"/>
<source>EE FPU Clamp Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3213"/>
<location filename="../../pcsx2/VMManager.cpp" line="3217"/>
<source>VU0 Round Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3218"/>
<location filename="../../pcsx2/VMManager.cpp" line="3222"/>
<source>VU1 Round Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3225"/>
<location filename="../../pcsx2/VMManager.cpp" line="3229"/>
<source>VU Clamp Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3230"/>
<location filename="../../pcsx2/VMManager.cpp" line="3234"/>
<source>128MB RAM is enabled. Compatibility with some games may be affected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3235"/>
<location filename="../../pcsx2/VMManager.cpp" line="3239"/>
<source>Game Fixes are not enabled. Compatibility with some games may be affected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3240"/>
<location filename="../../pcsx2/VMManager.cpp" line="3244"/>
<source>Compatibility Patches are not enabled. Compatibility with some games may be affected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3244"/>
<location filename="../../pcsx2/VMManager.cpp" line="3248"/>
<source>Frame rate for NTSC is not default. This may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3246"/>
<location filename="../../pcsx2/VMManager.cpp" line="3250"/>
<source>Frame rate for PAL is not default. This may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3265"/>
<location filename="../../pcsx2/VMManager.cpp" line="3269"/>
<source>EE Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3270"/>
<location filename="../../pcsx2/VMManager.cpp" line="3274"/>
<source>VU0 Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3275"/>
<location filename="../../pcsx2/VMManager.cpp" line="3279"/>
<source>VU1 Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3280"/>
<location filename="../../pcsx2/VMManager.cpp" line="3284"/>
<source>IOP Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3285"/>
<location filename="../../pcsx2/VMManager.cpp" line="3289"/>
<source>EE Cache is enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3290"/>
<location filename="../../pcsx2/VMManager.cpp" line="3294"/>
<source>EE Wait Loop Detection is not enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3295"/>
<location filename="../../pcsx2/VMManager.cpp" line="3299"/>
<source>INTC Spin Detection is not enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3298"/>
<location filename="../../pcsx2/VMManager.cpp" line="3302"/>
<source>Fastmem is not enabled, this will reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3302"/>
<location filename="../../pcsx2/VMManager.cpp" line="3306"/>
<source>Instant VU1 is disabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3307"/>
<location filename="../../pcsx2/VMManager.cpp" line="3311"/>
<source>mVU Flag Hack is not enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3156"/>
<location filename="../../pcsx2/VMManager.cpp" line="3160"/>
<source>GPU Palette Conversion is enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3161"/>
<location filename="../../pcsx2/VMManager.cpp" line="3165"/>
<source>Texture Preloading is not Full, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3166"/>
<location filename="../../pcsx2/VMManager.cpp" line="3170"/>
<source>Estimate texture region is enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3171"/>
<location filename="../../pcsx2/VMManager.cpp" line="3175"/>
<source>Texture dumping is enabled, this will continually dump textures to disk.</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -223,8 +223,8 @@ enum class DebugFunctionScanMode
enum class AspectRatioType : u8
{
Stretch,
RAuto4_3_3_2,
Stretch, // Stretches to the whole window/display size
RAuto4_3_3_2, // Automatically scales to the target aspect ratio if there's a widescreen patch
R4_3,
R16_9,
R10_7,
@@ -233,7 +233,7 @@ enum class AspectRatioType : u8
enum class FMVAspectRatioSwitchType : u8
{
Off,
Off, // Falls back on the selected generic aspect ratio type
RAuto4_3_3_2,
R4_3,
R16_9,
@@ -1324,6 +1324,8 @@ struct Pcsx2Config
std::string CurrentIRX;
std::string CurrentGameArgs;
AspectRatioType CurrentAspectRatio = AspectRatioType::RAuto4_3_3_2;
// Fall back aspect ratio for games that have patches (when AspectRatioType::RAuto4_3_3_2) is active.
float CurrentCustomAspectRatio = 0.f;
bool IsPortableMode = false;
Pcsx2Config();

View File

@@ -285,6 +285,16 @@ BreakPointCond* CBreakPoints::GetBreakPointCondition(BreakPointCpu cpu, u32 addr
return NULL;
}
void CBreakPoints::ChangeBreakPointDescription(BreakPointCpu cpu, u32 addr, const std::string& description)
{
const size_t bp = FindBreakpoint(cpu, addr, true, false);
if (bp != INVALID_BREAKPOINT)
{
breakPoints_[bp].description = description;
Update();
}
}
void CBreakPoints::AddMemCheck(BreakPointCpu cpu, u32 start, u32 end, MemCheckCondition cond, MemCheckResult result)
{
// This will ruin any pending memchecks.
@@ -356,6 +366,16 @@ void CBreakPoints::ChangeMemCheckAddCond(BreakPointCpu cpu, u32 start, u32 end,
}
}
void CBreakPoints::ChangeMemCheckDescription(BreakPointCpu cpu, u32 start, u32 end, const std::string& description)
{
const size_t mc = FindMemCheck(cpu, start, end);
if (mc != INVALID_MEMCHECK)
{
memChecks_[mc].description = description;
Update(cpu);
}
}
void CBreakPoints::ClearAllMemChecks()
{
// This will ruin any pending memchecks.

View File

@@ -37,6 +37,8 @@ struct BreakPoint
BreakPointCond cond;
BreakPointCpu cpu;
std::string description;
bool operator==(const BreakPoint& other) const
{
return addr == other.addr;
@@ -78,6 +80,8 @@ struct MemCheck
MemCheckResult result;
BreakPointCpu cpu;
std::string description;
u32 numHits;
u32 lastPC;
@@ -119,12 +123,14 @@ public:
static void ChangeBreakPointAddCond(BreakPointCpu cpu, u32 addr, const BreakPointCond& cond);
static void ChangeBreakPointRemoveCond(BreakPointCpu cpu, u32 addr);
static BreakPointCond* GetBreakPointCondition(BreakPointCpu cpu, u32 addr);
static void ChangeBreakPointDescription(BreakPointCpu cpu, u32 addr, const std::string& description);
static void AddMemCheck(BreakPointCpu cpu, u32 start, u32 end, MemCheckCondition cond, MemCheckResult result);
static void RemoveMemCheck(BreakPointCpu cpu, u32 start, u32 end);
static void ChangeMemCheck(BreakPointCpu cpu, u32 start, u32 end, MemCheckCondition cond, MemCheckResult result);
static void ChangeMemCheckRemoveCond(BreakPointCpu cpu, u32 start, u32 end);
static void ChangeMemCheckAddCond(BreakPointCpu cpu, u32 start, u32 end, const BreakPointCond& cond);
static void ChangeMemCheckDescription(BreakPointCpu cpu, u32 start, u32 end, const std::string& description);
static void ClearAllMemChecks();
static void SetSkipFirst(BreakPointCpu cpu, u32 pc);

View File

@@ -2899,17 +2899,24 @@ bool GSState::TrianglesAreQuads(bool shuffle_check)
if (idx > 0)
{
const u16* const prev_tri= m_index.buff + (idx - 3);
GIFRegXYZ vert = v[i[0]].XYZ;
GIFRegXYZ last_vert = v[i[2]].XYZ;
GIFRegXYZ new_verts[3] = {v[i[0]].XYZ, v[i[1]].XYZ, v[i[2]].XYZ};
if (shuffle_check)
{
vert.X -= 8 << 4;
last_vert.X -= 8 << 4;
new_verts[0].X -= 8 << 4;
new_verts[1].X -= 8 << 4;
new_verts[2].X -= 8 << 4;
}
u32 match_vert_count = 0;
if (vert != m_vertex.buff[prev_tri[0]].XYZ && vert != m_vertex.buff[prev_tri[1]].XYZ && vert != m_vertex.buff[prev_tri[2]].XYZ &&
last_vert != m_vertex.buff[prev_tri[0]].XYZ && last_vert != m_vertex.buff[prev_tri[1]].XYZ && last_vert != m_vertex.buff[prev_tri[2]].XYZ)
if (!(new_verts[0] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[0] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[0] != m_vertex.buff[prev_tri[2]].XYZ))
match_vert_count++;
if (!(new_verts[1] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[1] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[1] != m_vertex.buff[prev_tri[2]].XYZ))
match_vert_count++;
if (!(new_verts[2] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[2] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[2] != m_vertex.buff[prev_tri[2]].XYZ))
match_vert_count++;
if (match_vert_count != 2)
return false;
}
// Degenerate triangles should've been culled already, so we can check indices.

View File

@@ -268,8 +268,25 @@ float GSRenderer::GetModXYOffset()
static float GetCurrentAspectRatioFloat(bool is_progressive)
{
static constexpr std::array<float, static_cast<size_t>(AspectRatioType::MaxCount) + 1> ars = {{4.0f / 3.0f, 4.0f / 3.0f, 4.0f / 3.0f, 16.0f / 9.0f, 10.0f / 7.0f, 3.0f / 2.0f}};
return ars[static_cast<u32>(GSConfig.AspectRatio) + (3u * (is_progressive && GSConfig.AspectRatio == AspectRatioType::RAuto4_3_3_2))];
switch (GSConfig.AspectRatio)
{
default:
// We don't know the AR of the display here, nor we care about it
case AspectRatioType::Stretch:
case AspectRatioType::RAuto4_3_3_2:
if (EmuConfig.CurrentCustomAspectRatio > 0.f)
return EmuConfig.CurrentCustomAspectRatio;
else if (is_progressive)
return 3.0f / 2.0f;
else
return 4.0f / 3.0f;
case AspectRatioType::R4_3:
return 4.0f / 3.0f;
case AspectRatioType::R16_9:
return 16.0f / 9.0f;
case AspectRatioType::R10_7:
return 10.0f / 7.0f;
}
}
static GSVector4 CalculateDrawDstRect(s32 window_width, s32 window_height, const GSVector4i& src_rect, const GSVector2i& src_size, GSDisplayAlignment alignment, bool flip_y, bool is_progressive)
@@ -285,6 +302,9 @@ static GSVector4 CalculateDrawDstRect(s32 window_width, s32 window_height, const
targetAr = 3.0f / 2.0f;
else
targetAr = 4.0f / 3.0f;
// Fall back on the custom aspect ratio set by patches (e.g. 16:9, 21:9)
if (EmuConfig.CurrentCustomAspectRatio > 0.f)
targetAr = EmuConfig.CurrentCustomAspectRatio;
}
else if (EmuConfig.CurrentAspectRatio == AspectRatioType::R4_3)
{

View File

@@ -2482,7 +2482,7 @@ void GSRendererHW::Draw()
// | 0.5,2.25 | 1-1 | 1 |
// | 0.5,2.5 | 1-2 | 2 |
// --------------------------------------
m_r = GSVector4i(m_vt.m_min.p.upld(m_vt.m_max.p) + GSVector4::cxpr(0.5f));
m_r = GSVector4i((m_vt.m_min.p.upld(m_vt.m_max.p) + GSVector4::cxpr(0.4f)).round<Round_NearestInt>());
m_r = m_r.blend8(m_r + GSVector4i::cxpr(0, 0, 1, 1), (m_r.xyxy() == m_r.zwzw()));
m_r_no_scissor = m_r;
m_r = m_r.rintersect(context->scissor.in);
@@ -6492,8 +6492,9 @@ __ri void GSRendererHW::HandleTextureHazards(const GSTextureCache::Target* rt, c
// Can't use box filtering on depth (yet), or fractional scales.
if (src_target->m_texture->IsDepthStencil() || std::floor(src_target->GetScale()) != src_target->GetScale())
{
const GSVector4 dst_rect = GSVector4(GSVector4i::loadh(src_unscaled_size));
g_gs_device->StretchRect(src_target->m_texture, GSVector4::cxpr(0.0f, 0.0f, 1.0f, 1.0f), src_copy.get(), dst_rect,
GSVector4 src_rect = GSVector4(tmm.coverage) / GSVector4(GSVector4i::loadh(src_unscaled_size).zwzw());
const GSVector4 dst_rect = GSVector4(tmm.coverage);
g_gs_device->StretchRect(src_target->m_texture, src_rect, src_copy.get(), dst_rect,
src_target->m_texture->IsDepthStencil() ? ShaderConvert::DEPTH_COPY : ShaderConvert::COPY, false);
}
else

View File

@@ -1530,7 +1530,8 @@ GSTextureCache::Source* GSTextureCache::LookupSource(const bool is_color, const
GL_CACHE("TC: Attempt to repopulate RGB for target [%x] on source lookup", t->m_TEX0.TBP0);
for (Target* dst_match : m_dst[DepthStencil])
{
if (dst_match->m_TEX0.TBP0 != t->m_TEX0.TBP0 || !dst_match->m_valid_rgb)
// Be careful of dirty overlap on the targets, we don't really want dirty data.
if (dst_match->m_TEX0.TBP0 != t->m_TEX0.TBP0 || !dst_match->m_valid_rgb ||(!dst_match->m_dirty.empty() && !dst_match->m_dirty.GetTotalRect(dst_match->m_TEX0, dst_match->m_unscaled_size).rintersect(block_boundary_rect).rempty()))
continue;
if (!CopyRGBFromDepthToColor(t, dst_match))
@@ -2147,7 +2148,23 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(GIFRegTEX0 TEX0, const GSVe
// 2. Preserved data will be in the correct place (in most cases)
// 3. Less deleting sources/targets
// 4. We can basically do clears in hardware, if they aren't insane ones
if (can_use && ((!is_shuffle && t->m_dirty.size() >= 1) || (is_shuffle && src && GSLocalMemory::m_psm[src->m_TEX0.PSM].bpp == 8 && GSLocalMemory::m_psm[t->m_TEX0.PSM].bpp == 16)) && ((preserve_alpha && preserve_rgb) || (draw_rect.w > GSLocalMemory::m_psm[t->m_TEX0.PSM].pgs.y && !possible_clear)) && TEX0.TBW != t->m_TEX0.TBW)
bool dirtied_area = t->m_dirty.size() >= 1;
// Check it covers the whole area of the new draw
if (!is_shuffle && dirtied_area)
{
const u32 draw_start = GSLocalMemory::GetStartBlockAddress(TEX0.TBP0, TEX0.TBW, TEX0.PSM, draw_rect);
const u32 draw_end = GSLocalMemory::GetEndBlockAddress(TEX0.TBP0, TEX0.TBW, TEX0.PSM, draw_rect);
const GSVector4i dirty_rect = t->m_dirty.GetTotalRect(t->m_TEX0, t->m_unscaled_size);
const u32 dirty_start = GSLocalMemory::GetStartBlockAddress(t->m_TEX0.TBP0, t->m_TEX0.TBW, t->m_TEX0.PSM, dirty_rect);
const u32 dirty_end = GSLocalMemory::GetEndBlockAddress(t->m_TEX0.TBP0, t->m_TEX0.TBW, t->m_TEX0.PSM, dirty_rect);
if (dirty_end < draw_end || dirty_start > draw_start)
dirtied_area = false;
}
if (can_use && ((!is_shuffle && dirtied_area) || (is_shuffle && src && GSLocalMemory::m_psm[src->m_TEX0.PSM].bpp == 8 && GSLocalMemory::m_psm[t->m_TEX0.PSM].bpp == 16)) && ((preserve_alpha && preserve_rgb) || (draw_rect.w > GSLocalMemory::m_psm[t->m_TEX0.PSM].pgs.y && !possible_clear)) && TEX0.TBW != t->m_TEX0.TBW)
{
can_use = false;
}
@@ -2206,7 +2223,8 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(GIFRegTEX0 TEX0, const GSVe
continue;
}
else if (t->m_dirty.empty() || (t->m_TEX0.TBP0 <= bp && t->m_dirty.GetTotalRect(t->m_TEX0, t->m_unscaled_size).rintersect(GSVector4i(0, 0, 0, 0) .max_i32(TranslateAlignedRectByPage(t, TEX0.TBP0, TEX0.PSM, TEX0.TBW, min_rect))).rempty()))
else if (t->m_dirty.empty() || (t->m_TEX0.TBP0 <= bp && t->m_last_draw >= (GSState::s_n - 1) &&
t->m_dirty.GetTotalRect(t->m_TEX0, t->m_unscaled_size).rintersect(GSVector4i(0, 0, 0, 0).max_i32(TranslateAlignedRectByPage(t, TEX0.TBP0, TEX0.PSM, TEX0.TBW, min_rect))).rempty()))
{
if (TEX0.TBW == t->m_TEX0.TBW && !is_shuffle && widthpage_offset == 0 && ((min_rect.w + 63)/ 64) > 1)
{
@@ -2677,6 +2695,15 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(GIFRegTEX0 TEX0, const GSVe
// Probably an old target, get rid of it.
if (remove_target)
{
// DT Racer hits this path and causes a crash when RT in RT is disabled,
// so let's make sure source and target texture isn't linked/shared before deleting the target.
if (src && src->m_target && src->m_from_target == t && src->m_target_direct)
{
src->m_target_direct = false;
src->m_shared_texture = false;
t->m_texture = nullptr;
}
InvalidateSourcesFromTarget(t);
i = rev_list.erase(i);
delete t;

View File

@@ -1054,7 +1054,7 @@ bool FullscreenUI::LoadResources()
for (u32 i = static_cast<u32>(GameDatabaseSchema::Compatibility::Nothing);
i <= static_cast<u32>(GameDatabaseSchema::Compatibility::Perfect); i++)
{
s_game_compatibility_textures[i - 1] = LoadTexture(fmt::format("icons/star-{}.png", i - 1).c_str());
s_game_compatibility_textures[i - 1] = LoadTexture(fmt::format("fullscreenui/star-{}.png", i - 1).c_str());
}
return true;
@@ -6499,7 +6499,7 @@ void FullscreenUI::DrawGameList(const ImVec2& heading_size)
// region
{
std::string flag_texture(fmt::format("icons/flags/{}.png", GameList::RegionToString(selected_entry->region)));
std::string flag_texture(fmt::format("fullscreenui/flags/{}.png", GameList::RegionToString(selected_entry->region)));
ImGui::TextUnformatted(FSUI_CSTR("Region: "));
ImGui::SameLine();
ImGui::Image(reinterpret_cast<ImTextureID>(GetCachedTextureAsync(flag_texture.c_str())->GetNativeHandle()), LayoutScale(23.0f, 16.0f));

View File

@@ -111,7 +111,7 @@ namespace Patch
struct PatchGroup
{
std::string name;
std::optional<AspectRatioType> override_aspect_ratio;
std::optional<float> override_aspect_ratio;
std::optional<GSInterlaceMode> override_interlace_mode;
std::vector<PatchCommand> patches;
std::vector<DynamicPatch> dpatches;
@@ -186,7 +186,7 @@ namespace Patch
static EnablePatchList s_just_enabled_cheats;
static EnablePatchList s_just_enabled_patches;
static u32 s_patches_crc;
static std::optional<AspectRatioType> s_override_aspect_ratio;
static std::optional<float> s_override_aspect_ratio;
static std::optional<GSInterlaceMode> s_override_interlace_mode;
static const PatchTextTable s_patch_commands[] = {
@@ -797,17 +797,13 @@ void Patch::UpdateActivePatches(bool reload_enabled_list, bool verbose, bool ver
void Patch::ApplyPatchSettingOverrides()
{
// Switch to 16:9 if widescreen patches are enabled, and AR is auto.
// Switch to 16:9 (or any custom aspect ratio) if widescreen patches are enabled, and AR is auto.
if (s_override_aspect_ratio.has_value() && EmuConfig.GS.AspectRatio == AspectRatioType::RAuto4_3_3_2)
{
// Don't change when reloading settings in the middle of a FMV with switch.
if (EmuConfig.CurrentAspectRatio == EmuConfig.GS.AspectRatio)
EmuConfig.CurrentAspectRatio = s_override_aspect_ratio.value();
EmuConfig.CurrentCustomAspectRatio = s_override_aspect_ratio.value();
Console.WriteLn(Color_Gray,
fmt::format("Patch: Setting aspect ratio to {} by patch request.",
Pcsx2Config::GSOptions::AspectRatioNames[static_cast<int>(s_override_aspect_ratio.value())]));
EmuConfig.GS.AspectRatio = s_override_aspect_ratio.value();
fmt::format("Patch: Setting aspect ratio to {} by patch request.", s_override_aspect_ratio.value()));
}
// Disable interlacing in GS if active.
@@ -821,9 +817,13 @@ void Patch::ApplyPatchSettingOverrides()
bool Patch::ReloadPatchAffectingOptions()
{
// Restore the aspect ratio + interlacing setting the user had set before reloading the patch,
// as the custom patch settings only apply if the "Auto" settings are selected.
const AspectRatioType current_ar = EmuConfig.GS.AspectRatio;
const GSInterlaceMode current_interlace = EmuConfig.GS.InterlaceMode;
const float custom_aspect_ratio = EmuConfig.CurrentCustomAspectRatio;
// This is pretty gross, but we're not using a config layer, so...
AspectRatioType new_ar = Pcsx2Config::GSOptions::DEFAULT_ASPECT_RATIO;
const std::string ar_value = Host::GetStringSettingValue("EmuCore/GS", "AspectRatio",
@@ -836,15 +836,14 @@ bool Patch::ReloadPatchAffectingOptions()
break;
}
}
if (EmuConfig.CurrentAspectRatio == EmuConfig.GS.AspectRatio)
EmuConfig.CurrentAspectRatio = new_ar;
EmuConfig.GS.AspectRatio = new_ar;
EmuConfig.GS.InterlaceMode = static_cast<GSInterlaceMode>(Host::GetIntSettingValue(
"EmuCore/GS", "deinterlace_mode", static_cast<int>(Pcsx2Config::GSOptions::DEFAULT_INTERLACE_MODE)));
ApplyPatchSettingOverrides();
return (current_ar != EmuConfig.GS.AspectRatio || current_interlace != EmuConfig.GS.InterlaceMode);
// Return true if any config setting changed
return current_ar != EmuConfig.GS.AspectRatio || custom_aspect_ratio != EmuConfig.CurrentCustomAspectRatio || current_interlace != EmuConfig.GS.InterlaceMode;
}
void Patch::UnloadPatches()
@@ -941,13 +940,22 @@ void Patch::PatchFunc::patch(PatchGroup* group, const std::string_view cmd, cons
void Patch::PatchFunc::gsaspectratio(PatchGroup* group, const std::string_view cmd, const std::string_view param)
{
for (u32 i = 0; i < static_cast<u32>(AspectRatioType::MaxCount); i++)
std::string str(param);
std::istringstream ss(str);
uint dividend, divisor;
char delimiter;
float aspect_ratio = 0.f;
ss >> dividend >> delimiter >> divisor;
if (!ss.fail() && delimiter == ':' && divisor != 0)
{
if (param == Pcsx2Config::GSOptions::AspectRatioNames[i])
{
group->override_aspect_ratio = static_cast<AspectRatioType>(i);
return;
}
aspect_ratio = static_cast<float>(dividend) / static_cast<float>(divisor);
}
if (aspect_ratio > 0.f)
{
group->override_aspect_ratio = aspect_ratio;
return;
}
Console.Error(fmt::format("Patch error: {} is an unknown aspect ratio.", param));

View File

@@ -636,7 +636,7 @@ void Pcsx2Config::CpuOptions::LoadSave(SettingsWrapper& wrap)
Recompiler.LoadSave(wrap);
}
const char* Pcsx2Config::GSOptions::AspectRatioNames[] = {
const char* Pcsx2Config::GSOptions::AspectRatioNames[(size_t)AspectRatioType::MaxCount + 1] = {
"Stretch",
"Auto 4:3/3:2",
"4:3",
@@ -644,7 +644,7 @@ const char* Pcsx2Config::GSOptions::AspectRatioNames[] = {
"10:7",
nullptr};
const char* Pcsx2Config::GSOptions::FMVAspectRatioSwitchNames[] = {
const char* Pcsx2Config::GSOptions::FMVAspectRatioSwitchNames[(size_t)FMVAspectRatioSwitchType::MaxCount + 1] = {
"Off",
"Auto 4:3/3:2",
"4:3",
@@ -1983,7 +1983,12 @@ void Pcsx2Config::LoadSaveCore(SettingsWrapper& wrap)
if (wrap.IsLoading())
{
// Patches will get re-applied after loading the state so this doesn't matter too much
CurrentAspectRatio = GS.AspectRatio;
if (CurrentAspectRatio == AspectRatioType::RAuto4_3_3_2)
{
CurrentCustomAspectRatio = 0.f;
}
}
}
@@ -2035,6 +2040,7 @@ void Pcsx2Config::CopyRuntimeConfig(Pcsx2Config& cfg)
CurrentIRX = std::move(cfg.CurrentIRX);
CurrentGameArgs = std::move(cfg.CurrentGameArgs);
CurrentAspectRatio = cfg.CurrentAspectRatio;
CurrentCustomAspectRatio = cfg.CurrentCustomAspectRatio;
IsPortableMode = cfg.IsPortableMode;
for (u32 i = 0; i < sizeof(Mcd) / sizeof(Mcd[0]); i++)

View File

@@ -3,4 +3,4 @@
/// Version number for GS and other shaders. Increment whenever any of the contents of the
/// shaders change, to invalidate the cache.
static constexpr u32 SHADER_CACHE_VERSION = 63;
static constexpr u32 SHADER_CACHE_VERSION = 64;

View File

@@ -876,7 +876,9 @@ void VMManager::RequestDisplaySize(float scale /*= 0.0f*/)
switch (GSConfig.AspectRatio)
{
case AspectRatioType::RAuto4_3_3_2:
if (GSgetDisplayMode() == GSVideoMode::SDTV_480P)
if (EmuConfig.CurrentCustomAspectRatio > 0.f)
x_scale = EmuConfig.CurrentCustomAspectRatio / (static_cast<float>(iwidth) / static_cast<float>(iheight));
else if (GSgetDisplayMode() == GSVideoMode::SDTV_480P)
x_scale = (3.0f / 2.0f) / (static_cast<float>(iwidth) / static_cast<float>(iheight));
else
x_scale = (4.0f / 3.0f) / (static_cast<float>(iwidth) / static_cast<float>(iheight));