Compare commits

..
Author SHA1 Message Date
TellowKrinkleandlightningterror 523785d3df Qt: Remove m_pending_window_*
m_last_window_* is pretty much the same, and that way we won't forget to update one like we did in DisplaySurface::getWindowInfo
2026-07-29 21:35:02 +02:00
PCSX2 Botandlightningterror 4a92f1c472 [ci skip] Qt: Update Base Translation. 2026-07-29 02:27:59 +02:00
lightningterror 053b42d36c GameDB: Add missing tex in rt for some GITS regions. 2026-07-28 22:49:08 +02:00
Mrlinkwiiandlightningterror cf5dce2657 GameDB: add missing games and memcardFilters 2026-07-28 21:59:20 +02:00
lightningterror 645a37ad58 GS/VK: Fix crash when no device is created and vk is the selected renderer. 2026-07-28 16:50:08 +02:00
8 changed files with 275 additions and 297 deletions
+10 -1
View File
@@ -185,6 +185,7 @@ PAPX-90020:
estimateTextureRegion: 1 # Improves performance and reduces hash cache size.
halfPixelOffset: 2 # Aligns post effects.
nativeScaling: 1 # Fixes post effects.
textureInsideRT: 1 # Fixes post shuffles.
PAPX-90201:
name: "ファンタビジョン [体験版]"
name-sort: "ふぁんたびじょん [たいけんばん]"
@@ -9111,6 +9112,7 @@ SCPS-15064:
estimateTextureRegion: 1 # Improves performance and reduces hash cache size.
halfPixelOffset: 2 # Aligns post effects.
nativeScaling: 1 # Fixes post effects.
textureInsideRT: 1 # Fixes post shuffles.
patches:
A5768F53:
content: |-
@@ -32427,6 +32429,10 @@ SLKA-25255:
name-sort: "Mobile Suit Gundam Seed - Kkeunnaji Anneun Naeillo"
name-en: "Mobile Suit Gundam Seed - Never Ending Tomorrow"
region: "NTSC-K"
SLKA-25256:
name: "UEFA 챔피언스 리그 2006-2007"
name-en: "UEFA Champions League 2006-2007"
region: "NTSC-K"
SLKA-25257:
name: "풍운 막말전" # Undumped on ReDump as of 2025-08-28
name-en: "Fu-un Bakumatsu-den"
@@ -32656,7 +32662,7 @@ SLKA-25299:
SLKA-25300:
name: "디지털 데빌 사가: 아바탈 튜너 [Special Package]"
name-en: "Digital Devil Saga - Avatar Tuner [Special Package]"
region: "NTSC-J-K"
region: "NTSC-K"
compat: 5
gameFixes:
- EETimingHack
@@ -64189,6 +64195,9 @@ SLPS-73270:
name-sort: "すーぱーろぼっとたいせんZ [PlayStation2 the Best]"
name-en: "Super Robot Taisen Z [PlayStation2 the Best]"
region: "NTSC-J"
memcardFilters:
- "SLPS-73270"
- "SLPS-25887"
SLPS-73401:
name: "はじめの一歩 VICTORIOUS BOXERS CHAMPIONSHIP VERSION [PlayStation2 the Best]"
name-sort: "はじめのいっぽ VICTORIOUS BOXERS CHAMPIONSHIP VERSION [PlayStation2 the Best]"
+1 -5
View File
@@ -284,7 +284,7 @@ void DisplaySurface::handleKeyInputEvent(QEvent* event)
void DisplaySurface::onResizeDebounceTimer()
{
emit windowResizedEvent(m_pending_window_width, m_pending_window_height, m_pending_window_scale);
emit windowResizedEvent(m_last_window_width, m_last_window_height, m_last_window_scale);
}
bool DisplaySurface::event(QEvent* event)
@@ -397,10 +397,6 @@ bool DisplaySurface::event(QEvent* event)
// avoid spamming resize events for paint events (sent on move on windows)
if (m_last_window_width != scaled_width || m_last_window_height != scaled_height || m_last_window_scale != dpr)
{
m_pending_window_width = scaled_width;
m_pending_window_height = scaled_height;
m_pending_window_scale = dpr;
m_last_window_width = scaled_width;
m_last_window_height = scaled_height;
m_last_window_scale = dpr;
-4
View File
@@ -70,9 +70,5 @@ private:
float m_last_window_scale = 1.0f;
QTimer* m_resize_debounce_timer = nullptr;
u32 m_pending_window_width = 0;
u32 m_pending_window_height = 0;
float m_pending_window_scale = 1.0f;
QWidget* m_container = nullptr;
};
File diff suppressed because it is too large Load Diff
+2 -6
View File
@@ -9827,12 +9827,8 @@ bool GSRendererHW::CanUseSwPrimRender(bool no_rt, bool no_ds, bool draw_sprite_t
return false;
}
}
const u32 frame_mask = GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].fmsk;
const u32 alpha_mask = ((m_cached_ctx.FRAME.FBMSK & frame_mask) & 0xFF000000);
const u32 rgb_mask = ((m_cached_ctx.FRAME.FBMSK & frame_mask) & 0x00FFFFFF);
const bool difficult_fbmsk = m_cached_ctx.FRAME.FBMSK != 0 && (GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].bpp == 16 || (alpha_mask != 0 && alpha_mask != (GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].fmsk & 0xFF000000)) ||
(rgb_mask != 0 && rgb_mask != (GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].fmsk & 0x00FFFFFF)));
if (difficult_fbmsk || (PRIM->ABE && m_vt.m_eq.rgba == 0xffff && !m_context->ALPHA.IsOpaque(GetAlphaMinMax().min, GetAlphaMinMax().max)))
if (PRIM->ABE && m_vt.m_eq.rgba == 0xffff && !m_context->ALPHA.IsOpaque(GetAlphaMinMax().min, GetAlphaMinMax().max))
{
GSTextureCache::Target* rt = g_texture_cache->GetTargetWithSharedBits(m_cached_ctx.FRAME.Block(), m_cached_ctx.FRAME.PSM);
+1 -13
View File
@@ -545,19 +545,7 @@ bool GSRendererHWFunctions::SwPrimRender(GSRendererHW& hw, bool invalidate_tc, b
static_cast<GSSingleRasterizer*>(hw.m_sw_rasterizer.get())->Draw(data);
if (invalidate_tc)
{
GSOffset frame_offs = context->offset.fb;
if (GSLocalMemory::m_psm[context->FRAME.PSM].trbpp == 32 && context->FRAME.FBMSK)
{
if (context->FRAME.FBMSK == 0xFF000000)
frame_offs = GSRendererHW::GetInstance()->m_mem.GetOffset(context->FRAME.Block(), context->FRAME.FBW, PSMCT24);
else if (context->FRAME.FBMSK == 0x00FFFFFF)
frame_offs = GSRendererHW::GetInstance()->m_mem.GetOffset(context->FRAME.Block(), context->FRAME.FBW, PSMT8H);
}
g_texture_cache->InvalidateVideoMem(frame_offs, bbox);
}
g_texture_cache->InvalidateVideoMem(context->offset.fb, bbox);
// Jak does sw prim render, then draws to the same target, and it needs to be uploaded.
if (add_ee_transfer)
+4 -14
View File
@@ -1734,11 +1734,6 @@ GSTextureCache::Source* GSTextureCache::LookupSource(const bool is_color, const
if (found_t && (bw != t->m_TEX0.TBW || t->m_TEX0.PSM != psm))
match = false;
// Situations where font has been uploaded to the alpha channel and they use a different buffer width, this can't currently be translated correctly.
GSLocalMemory::psm_t req_psm = GSLocalMemory::m_psm[psm];
if (!possible_shuffle && req_psm.trbpp <= 8 && req_psm.bpp == 32 && t->m_TEX0.TBW != bw && (bw * 64) != t->m_valid.z && r.w > req_psm.pgs.y)
match = false;
// Different swizzle, different width, and dirty, so probably not what we want.
// DevCon.Warning("Expected %x Got %x shuffle %d draw %d", psm, t_psm, possible_shuffle, GSState::s_n);
if (match)
@@ -7278,9 +7273,6 @@ GSTexture* GSTextureCache::LookupPaletteSource(u32 CBP, u32 CPSM, u32 CBW, GSVec
else if (GSConfig.UserHacks_GPUTargetCLUTMode == GSGPUTargetCLUTMode::InsideTarget &&
t->m_TEX0.TBP0 < CBP && t->m_end_block >= CBP)
{
// If it's more than one group of 4 blocks, it's probably going to fail, horribly.
if ((size.x > GSLocalMemory::m_psm[CPSM].bs.x || size.y > GSLocalMemory::m_psm[CPSM].bs.y) && (CBP & 0x3) != (t->m_TEX0.TBP0 & 0x3))
continue;
// Somewhere within this target, can we find it?
const GSVector4i rc(0, 0, size.x, size.y);
SurfaceOffset so = ComputeSurfaceOffset(CBP, std::max<u32>(CBW, 0), CPSM, rc, t);
@@ -7293,7 +7285,7 @@ GSTexture* GSTextureCache::LookupPaletteSource(u32 CBP, u32 CPSM, u32 CBW, GSVec
}
else
{
// Not inside this target or not aligned, skip.
// Not inside this target, skip.
continue;
}
@@ -7961,9 +7953,7 @@ void GSTextureCache::Target::Update(bool cannot_scale)
alloca(sizeof(GSDevice::MultiStretchRect) * static_cast<u32>(m_dirty.size())));
u32 ndrects = 0;
// There are cases where the alpha gets populated with font data, and the target has previously been PSMCT32 (or will be) so we need to make sure it gets filled in.
const u32 psm = (m_TEX0.PSM == PSMCT24) ? PSMCT32 : m_TEX0.PSM;
const GSOffset off(g_gs_renderer->m_mem.GetOffset(m_TEX0.TBP0, m_TEX0.TBW, psm));
const GSOffset off(g_gs_renderer->m_mem.GetOffset(m_TEX0.TBP0, m_TEX0.TBW, m_TEX0.PSM));
const u32 bpp = GSLocalMemory::m_psm[m_TEX0.PSM].bpp;
std::pair<u8, u8> alpha_minmax = {255, 0};
@@ -7986,7 +7976,7 @@ void GSTextureCache::Target::Update(bool cannot_scale)
const GSVector4i t_r(read_r - t_offset);
if (mapped)
{
if (((m_TEX0.PSM & 0xf) != PSMCT24 || m_valid_alpha_high || m_valid_alpha_low) && m_dirty[i].rgba.c.a && bpp >= 16)
if ((m_TEX0.PSM & 0xf) != PSMCT24 && m_dirty[i].rgba.c.a && bpp >= 16)
{
// TODO: Only read once in 32bit and copy to the mapped texture. Bit out of scope of this PR and not a huge impact.
const int pitch = VectorAlign(read_r.width() * sizeof(u32));
@@ -8005,7 +7995,7 @@ void GSTextureCache::Target::Update(bool cannot_scale)
const int pitch = VectorAlign(read_r.width() * sizeof(u32));
g_gs_renderer->m_mem.ReadTexture(off, read_r, s_unswizzle_buffer, pitch, TEXA);
if (((m_TEX0.PSM & 0xf) != PSMCT24 || m_valid_alpha_high || m_valid_alpha_low) &&m_dirty[i].rgba.c.a && bpp >= 16)
if ((m_TEX0.PSM & 0xf) != PSMCT24 && m_dirty[i].rgba.c.a && bpp >= 16)
{
std::pair<u8, u8> new_alpha_minmax = GSGetRGBA8AlphaMinMax(s_unswizzle_buffer, read_r.width(), read_r.height(), pitch);
alpha_minmax.first = std::min(alpha_minmax.first, new_alpha_minmax.first);
+5 -2
View File
@@ -2254,8 +2254,11 @@ void GSDeviceVK::Destroy()
m_swap_chain.reset();
DestroySpinResources();
DestroyResources();
if (m_device != VK_NULL_HANDLE)
{
DestroySpinResources();
DestroyResources();
}
VKShaderCache::Destroy();