Let sceMpeg LLE override the ForceHLEPsmf compat flag

Our psmf and psmfPlayer HLE plays video by calling our sceMpeg HLE, so it has
nothing to talk to when the real mpeg.prx is running. The flag now gives way
when sceMpeg is LLE.

Moved below the force-enable and unavailable masks so it tests what sceMpeg
actually ended up as rather than what was asked for.

Also remove a bad assert.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Henrik Rydgård
2026-09-18 15:15:45 -06:00
co-authored by Claude Opus 5
parent 094d28d451
commit 19bac4894c
2 changed files with 11 additions and 5 deletions
+11 -4
View File
@@ -257,13 +257,20 @@ static DisableHLEFlags ComputeDisableHLEFlags() {
if (PSP_CoreParameter().compat.flags().DisableHLESceFont) {
flags |= DisableHLEFlags::sceFont;
}
if (PSP_CoreParameter().compat.flags().ForceHLEPsmf) {
flags &= ~(DisableHLEFlags::scePsmf | DisableHLEFlags::scePsmfPlayer);
}
flags &= ~(DisableHLEFlags)g_Config.iForceEnableHLE;
// Anything whose firmware module isn't actually present stays HLE'd.
flags &= ~g_unavailableDisableFlags;
// Our psmf and psmfPlayer HLE plays video by calling our sceMpeg HLE, so it has nothing to talk
// to when the real mpeg.prx is running: the player sits in "not yet playing" forever and no
// frame ever comes out. The two have to be on the same side, and since sceMpeg is the one we
// now run for real by default, this compat flag gives way to it.
//
// Last, so it sees what sceMpeg actually ended up as rather than what was asked for - without a
// module to run, sceMpeg is back on HLE and the flag means what it always did.
if (PSP_CoreParameter().compat.flags().ForceHLEPsmf && !(flags & DisableHLEFlags::sceMpeg)) {
flags &= ~(DisableHLEFlags::scePsmf | DisableHLEFlags::scePsmfPlayer);
}
return flags;
}
-1
View File
@@ -527,7 +527,6 @@ TextureApplyResult TextureCacheCommon::ApplyTexture(bool doBind) {
level = std::max(0, gstate.getTexLevelOffset16() / 16);
}
const u32 texaddr = gstate.getTextureAddress(level);
_dbg_assert_(texaddr != 0);
if (!Memory::IsValidTextureAddress(texaddr)) {
// Bind a null texture and return.
Unbind();