Compare commits

...

6 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
14 changed files with 239 additions and 69 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

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

@@ -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>

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

@@ -2223,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)
{
@@ -2694,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

@@ -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;