Compare commits

...

11 Commits

Author SHA1 Message Date
RedPanda4552
35a3d0027e Memcard: Apply filtering when checking all possible memcard options
Prevents log being flooded with warnings when large folder memcards exceed 8 MB size
2025-02-24 16:08:00 +01:00
refractionpcsx2
02789ebd86 GS/HW: Increase Merge Sprite paving sensitivity to avoid mismerges 2025-02-23 03:33:39 +00:00
JordanTheToaster
dfd1846b93 GameDB: Various fixes 2025-02-23 01:12:43 +00:00
refractionpcsx2
872205abc6 GS/HW: Maintain scale on subsequent downscale draws 2025-02-23 01:12:07 +00:00
PCSX2 Bot
c52cebd20a [ci skip] Qt: Update Base Translation. 2025-02-22 01:04:56 +01:00
GovanifY
f449b54f87 CI: enable wayland by default 2025-02-21 12:28:28 +01:00
GovanifY
ffcb6e2f6f QT/MainWindow: disable native window rendering in wayland
This is a workaround for QTBUG-133919
2025-02-21 12:28:28 +01:00
PCSX2 Bot
5daa1aa115 [ci skip] Qt: Update Base Translation. 2025-02-21 01:09:05 +01:00
GovanifY
1dc009f752 pcsx2/SIO: correctly detect whether format status of folder mcd 2025-02-20 16:00:40 +01:00
GovanifY
009b4ff5e7 QT/Settings: ensure that a memory card is formatted before conversion 2025-02-20 16:00:40 +01:00
PCSX2 Bot
f1a947af92 [ci skip] Qt: Update Base Translation. 2025-02-19 21:00:23 -05:00
11 changed files with 392 additions and 280 deletions

View File

@@ -187,17 +187,6 @@ echo "Generating AppStream metainfo..."
mkdir -p "$OUTDIR/usr/share/metainfo"
"$SCRIPTDIR/generate-metainfo.sh" "$OUTDIR/usr/share/metainfo/net.pcsx2.PCSX2.appdata.xml"
# Copy in AppRun hooks.
# Unfortunately linuxdeploy is a bit lame and doesn't let us provide our own AppRun hooks, instead
# they have to come from plugins.. and screw writing one of those just to disable Wayland.
echo "Copying AppRun hooks..."
mkdir -p "$OUTDIR/apprun-hooks"
for hookpath in "$SCRIPTDIR/apprun-hooks"/*; do
hookname=$(basename "$hookpath")
cp -v "$hookpath" "$OUTDIR/apprun-hooks/$hookname"
sed -i -e 's/exec /source "$this_dir"\/apprun-hooks\/"'"$hookname"'"\nexec /' "$OUTDIR/AppRun"
done
echo "Generating AppImage..."
GIT_VERSION=$(git tag --points-at HEAD)

View File

@@ -1,9 +0,0 @@
if [[ -z "$I_WANT_A_BROKEN_WAYLAND_UI" ]]; then
echo "Forcing X11 instead of Wayland, due to various protocol limitations"
echo "and Qt issues. If you want to use Wayland, launch PCSX2 with"
echo "I_WANT_A_BROKEN_WAYLAND_UI=YES set."
export QT_QPA_PLATFORM=xcb
else
echo "Wayland is not being disabled. Do not complain when things break."
fi

View File

@@ -19,10 +19,10 @@
"--device=all",
"--share=network",
"--share=ipc",
"--socket=x11",
"--socket=wayland",
"--socket=fallback-x11",
"--socket=pulseaudio",
"--talk-name=org.freedesktop.ScreenSaver",
"--env=QT_QPA_PLATFORM=xcb"
"--talk-name=org.freedesktop.ScreenSaver"
],
"modules": [
"modules/10-libpcap.json",

View File

@@ -2015,7 +2015,6 @@ SCAJ-20132:
eeClampMode: 2 # Fixes wrong color on some characters and breakable objects.
gsHWFixes:
halfPixelOffset: 1 # Fixes ghosting characters.
mergeSprite: 1 # Align sprite fixes FMVs but not garbage in-game, so needs merge sprite instead.
texturePreloading: 1 # Performs better with partial preload because it is slow on locations outside gameplay foremost.
SCAJ-20133:
name: "Kagero 2 - Dark Illusion"
@@ -13630,7 +13629,7 @@ SLED-53954:
cpuSpriteRenderBW: 2 # Fixes some bad textures.
cpuCLUTRender: 1 # Fixes the rest of the bad textures.
roundSprite: 1 # Reduces misaligned bloom.
mergeSprite: 1 # Removes bloom explosion around electrical lights and other light sources such as moon/sun.
nativeScaling: 1 # Fixes post processing smoothness and position.
SLED-53977:
name: "Dragon Quest - The Journey of the Cursed King"
region: "PAL-E"
@@ -15351,7 +15350,6 @@ SLES-50723:
name: "TOCA Race Driver"
region: "PAL-M3"
gsHWFixes:
mergeSprite: 1 # Fixes lighting.
halfPixelOffset: 1 # Fixes vertical lines
SLES-50725:
name: "V-Rally 3"
@@ -15449,7 +15447,6 @@ SLES-50767:
name: "V8 Supercars Australia - Race Driver"
region: "PAL-A"
gsHWFixes:
mergeSprite: 1 # Fixes lighting.
halfPixelOffset: 1 # Fixes vertical lines
SLES-50768:
name: "Rally Championship"
@@ -15616,13 +15613,11 @@ SLES-50816:
region: "PAL-M3"
compat: 5
gsHWFixes:
mergeSprite: 1 # Fixes lighting.
halfPixelOffset: 1 # Fixes vertical lines
SLES-50818:
name: "Pro Race Driver"
region: "PAL-I"
gsHWFixes:
mergeSprite: 1 # Fixes lighting.
halfPixelOffset: 1 # Fixes vertical lines
SLES-50820:
name: "Micro Machines"
@@ -18283,7 +18278,7 @@ SLES-51914:
- "SLES-51914"
gsHWFixes:
halfPixelOffset: 4 # Mostly aligns post processing.
nativeScaling: 2 # Fixes post processing smoothness and position.
nativeScaling: 1 # Fixes post processing smoothness and position.
disablePartialInvalidation: 1 # Fixes textureless graphics ingame.
bilinearUpscale: 2 # Gets rid of center vertical line when upscaling.
SLES-51915:
@@ -22913,7 +22908,7 @@ SLES-53556:
cpuSpriteRenderBW: 2 # Fixes some bad textures.
cpuCLUTRender: 1 # Fixes the rest of the bad textures.
roundSprite: 1 # Reduces misaligned bloom.
mergeSprite: 1 # Removes bloom explosion around electrical lights and other light sources such as moon/sun.
nativeScaling: 1 # Fixes post processing smoothness and position.
SLES-53557:
name: "Need for Speed - Most Wanted"
region: "PAL-E"
@@ -23703,7 +23698,6 @@ SLES-53794:
gsHWFixes:
halfPixelOffset: 4 # Fix effects upscaling.
nativeScaling: 2 # Fixes post effects.
mergeSprite: 1 # Align sprite fixes FMVs but not garbage in-game, so needs merge sprite instead.
texturePreloading: 1 # Performs better with partial preload because it is slow on locations outside gameplay foremost.
SLES-53796:
name: "FIFA Street 2"
@@ -24385,7 +24379,7 @@ SLES-54027:
cpuSpriteRenderBW: 2 # Fixes some bad textures.
cpuCLUTRender: 1 # Fixes the rest of the bad textures.
roundSprite: 1 # Reduces misaligned bloom.
mergeSprite: 1 # Removes bloom explosion around electrical lights and other light sources such as moon/sun.
nativeScaling: 1 # Fixes post processing smoothness and position.
SLES-54030:
name: "Black"
region: "PAL-E"
@@ -25141,7 +25135,7 @@ SLES-54317:
region: "PAL-M5"
compat: 5
gsHWFixes:
mergeSprite: 1 # Fixes alignment on fire effects.
halfPixelOffset: 4 # Fixes alignment on fire effects.
SLES-54319:
name: "Biker Mice from Mars"
region: "PAL-M5"
@@ -25713,7 +25707,6 @@ SLES-54483:
compat: 5
gsHWFixes:
recommendedBlendingLevel: 4 # Fixes car reflections.
mergeSprite: 1 # Fixes bluriness.
halfPixelOffset: 4 # Fixes bluriness.
nativeScaling: 2 # Fixes post lighting.
autoFlush: 1 # Fixes post alignment.
@@ -29913,7 +29906,7 @@ SLKA-25093:
- "SLKA-25093"
gsHWFixes:
halfPixelOffset: 4 # Mostly aligns post processing.
nativeScaling: 2 # Fixes post processing smoothness and position.
nativeScaling: 1 # Fixes post processing smoothness and position.
disablePartialInvalidation: 1 # Fixes textureless graphics ingame.
bilinearUpscale: 2 # Gets rid of center vertical line when upscaling.
SLKA-25095:
@@ -30986,7 +30979,7 @@ SLKA-25341:
cpuSpriteRenderBW: 2 # Fixes some bad textures.
cpuCLUTRender: 1 # Fixes the rest of the bad textures.
roundSprite: 1 # Reduces misaligned bloom.
mergeSprite: 1 # Removes bloom explosion around electrical lights and other light sources such as moon/sun.
nativeScaling: 1 # Fixes post processing smoothness and position.
SLKA-25342:
name: "Ryu ga Gotoku"
region: "NTSC-K"
@@ -32048,7 +32041,6 @@ SLPM-55081:
eeClampMode: 2 # Fixes wrong color on some characters and breakable objects.
gsHWFixes:
halfPixelOffset: 1 # Fixes ghosting characters.
mergeSprite: 1 # Align sprite fixes FMVs but not garbage in-game, so needs merge sprite instead.
texturePreloading: 1 # Performs better with partial preload because it is slow on locations outside gameplay foremost.
SLPM-55082:
name: "真・三國無双5 Special [ディスク 1]"
@@ -34510,7 +34502,6 @@ SLPM-61120:
eeClampMode: 2 # Fixes wrong color on some characters and breakable objects.
gsHWFixes:
halfPixelOffset: 1 # Fixes ghosting characters.
mergeSprite: 1 # Align sprite fixes FMVs but not garbage in-game, so needs merge sprite instead.
texturePreloading: 1 # Performs better with partial preload because it is slow on locations outside gameplay foremost.
SLPM-61121:
name: "KAIDO ~峠の伝説~ [体験版]"
@@ -41214,7 +41205,7 @@ SLPM-65413:
- "SLPM-65413"
gsHWFixes:
halfPixelOffset: 4 # Mostly aligns post processing.
nativeScaling: 2 # Fixes post processing smoothness and position.
nativeScaling: 1 # Fixes post processing smoothness and position.
disablePartialInvalidation: 1 # Fixes textureless graphics ingame.
bilinearUpscale: 2 # Gets rid of center vertical line when upscaling.
SLPM-65414:
@@ -44547,7 +44538,6 @@ SLPM-65999:
eeClampMode: 2 # Fixes wrong color on some characters and breakable objects.
gsHWFixes:
halfPixelOffset: 1 # Fixes ghosting characters.
mergeSprite: 1 # Align sprite fixes FMVs but not garbage in-game, so needs merge sprite instead.
texturePreloading: 1 # Performs better with partial preload because it is slow on locations outside gameplay foremost.
SLPM-66000:
name: "コンフリクトデルタⅡ 湾岸戦争1991"
@@ -48135,7 +48125,7 @@ SLPM-66567:
cpuSpriteRenderBW: 2 # Fixes some bad textures.
cpuCLUTRender: 1 # Fixes the rest of the bad textures.
roundSprite: 1 # Reduces misaligned bloom.
mergeSprite: 1 # Removes bloom explosion around electrical lights and other light sources such as moon/sun.
nativeScaling: 1 # Fixes post processing smoothness and position.
SLPM-66568:
name: "ブラザー イン アームズ ロード トゥ ヒル サーティ [UBISOFT BEST]"
name-sort: "ぶらざー いん あーむず ろーど とぅ ひる さーてぃ [UBISOFT BEST]"
@@ -62650,7 +62640,6 @@ SLUS-20329:
region: "NTSC-U"
compat: 5
gsHWFixes:
mergeSprite: 1 # Fixes lighting.
halfPixelOffset: 1 # Fixes vertical lines
SLUS-20330:
name: "NBA 2K2 - Sega Sports"
@@ -64556,7 +64545,7 @@ SLUS-20694:
- "SLUS-20710"
gsHWFixes:
halfPixelOffset: 4 # Mostly aligns post processing.
nativeScaling: 2 # Fixes post processing smoothness and position.
nativeScaling: 1 # Fixes post processing smoothness and position.
disablePartialInvalidation: 1 # Fixes textureless graphics ingame.
bilinearUpscale: 2 # Gets rid of center vertical line when upscaling.
SLUS-20695:
@@ -67988,7 +67977,7 @@ SLUS-21271:
cpuSpriteRenderBW: 2 # Fixes some bad textures.
cpuCLUTRender: 1 # Fixes the rest of the bad textures.
roundSprite: 1 # Reduces misaligned bloom.
mergeSprite: 1 # Removes bloom explosion around electrical lights and other light sources such as moon/sun.
nativeScaling: 1 # Fixes post processing smoothness and position.
SLUS-21272:
name: "Super Monkey Ball Adventure"
region: "NTSC-U"
@@ -68244,7 +68233,7 @@ SLUS-21306:
region: "NTSC-U"
compat: 5
gsHWFixes:
mergeSprite: 1 # Fixes alignment on fire effects.
halfPixelOffset: 4 # Fixes alignment on fire effects.
SLUS-21307:
name: "Ice Age 2 - The Meltdown"
region: "NTSC-U"
@@ -68706,7 +68695,6 @@ SLUS-21373:
gsHWFixes:
halfPixelOffset: 4 # Fix effects upscaling.
nativeScaling: 2 # Fixes post effects.
mergeSprite: 1 # Align sprite fixes FMVs but not garbage in-game, so needs merge sprite instead.
texturePreloading: 1 # Performs better with partial preload because it is slow on locations outside gameplay foremost.
SLUS-21374:
name: "Marvel - Ultimate Alliance"
@@ -68886,7 +68874,7 @@ SLUS-21399:
cpuSpriteRenderBW: 2 # Fixes some bad textures.
cpuCLUTRender: 1 # Fixes the rest of the bad textures.
roundSprite: 1 # Reduces misaligned bloom.
mergeSprite: 1 # Removes bloom explosion around electrical lights and other light sources such as moon/sun.
nativeScaling: 1 # Fixes post processing smoothness and position.
SLUS-21400:
name: "Monster House"
region: "NTSC-U"
@@ -69212,7 +69200,6 @@ SLUS-21449:
compat: 5
gsHWFixes:
recommendedBlendingLevel: 4 # Fixes car reflections.
mergeSprite: 1 # Fixes bluriness.
halfPixelOffset: 4 # Fixes bluriness.
nativeScaling: 2 # Fixes post lighting.
autoFlush: 1 # Fixes post alignment.
@@ -72687,7 +72674,7 @@ SLUS-29185:
cpuSpriteRenderBW: 2 # Fixes some bad textures.
cpuCLUTRender: 1 # Fixes the rest of the bad textures.
roundSprite: 1 # Reduces misaligned bloom.
mergeSprite: 1 # Removes bloom explosion around electrical lights and other light sources such as moon/sun.
nativeScaling: 1 # Fixes post processing smoothness and position.
SLUS-29188:
name: "Steambot Chronicles [Regular Demo]"
region: "NTSC-U"

View File

@@ -104,6 +104,15 @@ MainWindow::MainWindow()
pxAssert(!g_main_window);
g_main_window = this;
// Native window rendering is broken in wayland.
// Let's work around it by disabling it for every widget besides
// DisplayWidget.
// Additionally, alien widget rendering is much more performant, so we
// should have a nice responsiveness boost in our UI :)
// QTBUG-133919, reported upstream by govanify
QGuiApplication::setAttribute(Qt::AA_NativeWindows, false);
QGuiApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
#if !defined(_WIN32) && !defined(__APPLE__)
s_use_central_widget = DisplayContainer::isRunningOnWayland();
#endif

View File

@@ -183,6 +183,14 @@ QString MemoryCardSettingsWidget::getSelectedCard() const
return ret;
}
bool MemoryCardSettingsWidget::isSelectedCardFormatted() const
{
const QList<QTreeWidgetItem*> selection(m_ui.cardList->selectedItems());
if (!selection.empty())
return selection[0]->data(0, Qt::UserRole).toBool();
return false;
}
void MemoryCardSettingsWidget::updateCardActions()
{
QString selectedCard = getSelectedCard();
@@ -263,6 +271,12 @@ void MemoryCardSettingsWidget::convertCard()
if (selectedCard.isEmpty())
return;
if (!isSelectedCardFormatted())
{
QMessageBox::critical(this, tr("Error"), tr("Cannot convert an unformatted memory card."));
return;
}
MemoryCardConvertDialog dialog(QtUtils::GetRootWidget(this), selectedCard);
if (dialog.IsSetup() && dialog.exec() == QDialog::Accepted)
@@ -442,6 +456,10 @@ void MemoryCardListWidget::refresh(SettingsWindow* dialog)
item->setText(1, getSizeSummary(mcd));
item->setText(2, mcd.formatted ? tr("Yes") : tr("No"));
item->setText(3, mtime.toString(QLocale::system().dateTimeFormat(QLocale::ShortFormat)));
// store formatted metadata
item->setData(0, Qt::UserRole, mcd.formatted);
addTopLevelItem(item);
}
}

View File

@@ -97,6 +97,7 @@ private:
void createCard();
QString getSelectedCard() const;
bool isSelectedCardFormatted() const;
void updateCardActions();
void deleteCard();
void renameCard();

File diff suppressed because it is too large Load Diff

View File

@@ -826,20 +826,34 @@ void GSRendererHW::MergeSprite(GSTextureCache::Source* tex)
// Tested on Tekken 5.
const GSVertex* v = &m_vertex.buff[0];
bool is_paving = true;
bool is_paving_h = true;
bool is_paving_v = true;
// SSE optimization: shuffle m[1] to have (4*32 bits) X, Y, U, V
const int first_dpX = v[1].XYZ.X - v[0].XYZ.X;
const int first_dpU = v[1].U - v[0].U;
const int first_dpY = v[1].XYZ.Y - v[0].XYZ.Y;
const int first_dpV = v[1].V - v[0].V;
for (u32 i = 0; i < m_vertex.next; i += 2)
{
const int dpX = v[i + 1].XYZ.X - v[i].XYZ.X;
const int dpU = v[i + 1].U - v[i].U;
const int dpY = v[i + 1].XYZ.Y - v[i].XYZ.Y;
const int dpV = v[i + 1].V - v[i].V;
if (dpX != first_dpX || dpU != first_dpU)
{
is_paving = false;
break;
is_paving_h = false;
}
}
if (dpY != first_dpY || dpV != first_dpV)
{
is_paving_v = false;
}
if (!is_paving_h && !is_paving_v)
break;
}
is_paving = is_paving_h || is_paving_v;
#if 0
const GSVector4 delta_p = m_vt.m_max.p - m_vt.m_min.p;
const GSVector4 delta_t = m_vt.m_max.t - m_vt.m_min.t;
@@ -850,20 +864,92 @@ void GSRendererHW::MergeSprite(GSTextureCache::Source* tex)
if (is_paving)
{
// Replace all sprite with a single fullscreen sprite.
u32 unique_verts = 2;
GSVertex* s = &m_vertex.buff[0];
if (is_paving_h)
{
s[0].XYZ.X = static_cast<u16>((16.0f * m_vt.m_min.p.x) + m_context->XYOFFSET.OFX);
s[1].XYZ.X = static_cast<u16>((16.0f * m_vt.m_max.p.x) + m_context->XYOFFSET.OFX);
s[0].XYZ.X = static_cast<u16>((16.0f * m_vt.m_min.p.x) + m_context->XYOFFSET.OFX);
s[1].XYZ.X = static_cast<u16>((16.0f * m_vt.m_max.p.x) + m_context->XYOFFSET.OFX);
s[0].XYZ.Y = static_cast<u16>((16.0f * m_vt.m_min.p.y) + m_context->XYOFFSET.OFY);
s[1].XYZ.Y = static_cast<u16>((16.0f * m_vt.m_max.p.y) + m_context->XYOFFSET.OFY);
s[0].U = static_cast<u16>(16.0f * m_vt.m_min.t.x);
s[1].U = static_cast<u16>(16.0f * m_vt.m_max.t.x);
}
else
{
for (u32 i = 2; i < (m_vertex.tail & ~1); i++)
{
bool unique_found = false;
s[0].U = static_cast<u16>(16.0f * m_vt.m_min.t.x);
s[0].V = static_cast<u16>(16.0f * m_vt.m_min.t.y);
s[1].U = static_cast<u16>(16.0f * m_vt.m_max.t.x);
s[1].V = static_cast<u16>(16.0f * m_vt.m_max.t.y);
for (u32 j = i & 1; j < unique_verts; i += 2)
{
if (s[i].XYZ.X != s[j].XYZ.X)
{
unique_found = true;
break;
}
}
if (unique_found)
{
unique_verts += 2;
s[unique_verts - 2].XYZ.X = s[i & ~1].XYZ.X;
s[unique_verts - 1].XYZ.X = s[i | 1].XYZ.X;
s[unique_verts - 2].U = s[i & ~1].U;
s[unique_verts - 1].U = s[i | 1].U;
m_vertex.head = m_vertex.tail = m_vertex.next = 2;
m_index.tail = 2;
s[unique_verts - 2].XYZ.Y = static_cast<u16>((16.0f * m_vt.m_min.p.y) + m_context->XYOFFSET.OFY);
s[unique_verts - 1].XYZ.Y = static_cast<u16>((16.0f * m_vt.m_max.p.y) + m_context->XYOFFSET.OFY);
s[unique_verts - 2].V = static_cast<u16>(16.0f * m_vt.m_min.t.y);
s[unique_verts - 1].V = static_cast<u16>(16.0f * m_vt.m_max.t.y);
i |= 1;
}
}
}
if (is_paving_v)
{
s[0].XYZ.Y = static_cast<u16>((16.0f * m_vt.m_min.p.y) + m_context->XYOFFSET.OFY);
s[1].XYZ.Y = static_cast<u16>((16.0f * m_vt.m_max.p.y) + m_context->XYOFFSET.OFY);
s[0].V = static_cast<u16>(16.0f * m_vt.m_min.t.y);
s[1].V = static_cast<u16>(16.0f * m_vt.m_max.t.y);
}
else
{
for (u32 i = 2; i < (m_vertex.tail & ~1); i++)
{
bool unique_found = false;
for (u32 j = i & 1; j < unique_verts; i+=2)
{
if (s[i].XYZ.Y != s[j].XYZ.Y)
{
unique_found = true;
break;
}
}
if (unique_found)
{
unique_verts += 2;
s[unique_verts - 2].XYZ.Y = s[i & ~1].XYZ.Y;
s[unique_verts - 1].XYZ.Y = s[i | 1].XYZ.Y;
s[unique_verts - 2].V = s[i & ~1].V;
s[unique_verts - 1].V = s[i | 1].V;
s[unique_verts - 2].XYZ.X = static_cast<u16>((16.0f * m_vt.m_min.p.x) + m_context->XYOFFSET.OFX);
s[unique_verts - 1].XYZ.X = static_cast<u16>((16.0f * m_vt.m_max.p.x) + m_context->XYOFFSET.OFX);
s[unique_verts - 2].U = static_cast<u16>(16.0f * m_vt.m_min.t.x);
s[unique_verts - 1].U = static_cast<u16>(16.0f * m_vt.m_max.t.x);
i |= 1;
}
}
}
m_vertex.head = m_vertex.tail = m_vertex.next = unique_verts;
m_index.tail = unique_verts;
}
}
}
@@ -2750,7 +2836,7 @@ void GSRendererHW::Draw()
// Preserve downscaled target when copying directly from a downscaled target, or it's a normal draw using a downscaled target. Clears that are drawing to the target can also preserve size.
// Of course if this size is different (in width) or this is a shuffle happening, this will be bypassed.
const bool preserve_downscale_draw = scale_draw < 0 || (scale_draw == 0 && ((src && src->m_from_target && src->m_from_target->m_downscaled) || is_possible_mem_clear == ClearType::ClearWithDraw));
const bool preserve_downscale_draw = std::abs(scale_draw) == 1 || (scale_draw == 0 && ((src && src->m_from_target && src->m_from_target->m_downscaled) || is_possible_mem_clear == ClearType::ClearWithDraw));
rt = g_texture_cache->LookupTarget(FRAME_TEX0, t_size, ((src && src->m_scale != 1) && GSConfig.UserHacks_NativeScaling == GSNativeScaling::Normal && !possible_shuffle) ? GetTextureScaleFactor() : target_scale, GSTextureCache::RenderTarget, true,
fm, false, force_preload, preserve_rt_rgb, preserve_rt_alpha, unclamped_draw_rect, possible_shuffle, is_possible_mem_clear && FRAME_TEX0.TBP0 != m_cached_ctx.ZBUF.Block(), GSConfig.UserHacks_NativeScaling != GSNativeScaling::Off && preserve_downscale_draw && is_possible_mem_clear != ClearType::NormalClear);

View File

@@ -865,8 +865,15 @@ std::vector<AvailableMcdInfo> FileMcd_GetAvailableCards(bool include_in_use_card
if (!IsMemoryCardFolder(fd.FileName))
continue;
FolderMemoryCard sourceFolderMemoryCard;
Pcsx2Config::McdOptions config;
config.Enabled = true;
config.Type = MemoryCardType::Folder;
sourceFolderMemoryCard.Open(fd.FileName, config, (8 * 1024 * 1024) / FolderMemoryCard::ClusterSize, EmuConfig.McdFolderAutoManage, "");
mcds.push_back({std::move(basename), std::move(fd.FileName), fd.ModificationTime,
MemoryCardType::Folder, MemoryCardFileType::Unknown, 0u, true});
MemoryCardType::Folder, MemoryCardFileType::Unknown, 0u, sourceFolderMemoryCard.IsFormatted()});
sourceFolderMemoryCard.Close(false);
}
else
{

View File

@@ -318,6 +318,8 @@ public:
void Open(std::string fullPath, const Pcsx2Config::McdOptions& mcdOptions, const u32 sizeInClusters, const bool enableFiltering, std::string filter, bool simulateFileWrites = false);
// Close the memory card and flush changes to the file system. Set flush to false to not store changes.
void Close(bool flush = true);
// Checks whether the Memory Card is formatted.
bool IsFormatted() const;
// Closes and reopens card with given filter options if they differ from the current ones (returns true),
// or does nothing if they match already (returns false).
@@ -363,8 +365,6 @@ protected:
// initializes memory card data, as if it was fresh from the factory
void InitializeInternalData();
bool IsFormatted() const;
// returns the in-memory address of data the given memory card adr corresponds to
// returns nullptr if adr corresponds to a folder or file entry
u8* GetSystemBlockPointer(const u32 adr);
@@ -558,4 +558,4 @@ public:
u64 GetCRC(uint slot);
void NextFrame(uint slot);
bool ReIndex(uint slot, const bool enableFiltering, const std::string& filter);
};
};