hrydgard / ppsspp

A PSP emulator for Android, Windows, Mac and Linux, written in C++. Want to contribute? Join us on Discord at https://discord.gg/5NJB6dD or just send pull requests / issues. For discussion use the forums at forums.ppsspp.org.
https://www.ppsspp.org
Other
11.01k stars 2.15k forks source link

PPSSPP: Linear Texture Filtering broken in Tekken 6 since v0.9.1-2045-ga3f2fcf #4405

Open solarmystic opened 10 years ago

solarmystic commented 10 years ago

Issue is as stated above. Responsible commit is https://github.com/hrydgard/ppsspp/commit/4567acaf928b3660a1aa67100635d9e27ece1290 by @DanyalZia merged into master with v0.9.1-2045-ga3f2fcf https://github.com/hrydgard/ppsspp/commit/a3f2fcfd8f7897d1543e213f68096ecfd8d3a2c4 by @hrydgard

Setting texture filtering to Linear or Linear on FMV doesn't work anymore for Tekken 6 since then, both ingame and during FMVs:

(click on the screenshots to observe the issue clearly)

FMV (pixellated even after Linear Filtering is forced in the graphics menu): screen00192

Ingame menu (letters remain pixellated even when Linear Filtering is forced in the Graphics menu): linfail2045

Last working revision is v0.9.1-2043-g99d4ef1 https://github.com/hrydgard/ppsspp/commit/99d4ef1e0679f2f89fa4160269f15bf2eaa36983

FMV (smoothed out as expected): screen00193

Ingame menu (letters are smoothed out as expected with Linear Filtering) works2043

I suspect other games may be affected by this commit too. Will add them into the issue report if and when I find them.

Tested on the following machine:

sysspec

solarmystic commented 10 years ago

Soul Calibur is also affected by this issue it seems.

(Observe the text in the red box)

Working as expected with v0.9.1-2043-g99d4ef1 https://github.com/hrydgard/ppsspp/commit/99d4ef1e0679f2f89fa4160269f15bf2eaa36983 (smoothed letters when Linear Filtering is selected) scworks

Broken in v0.9.1-2045-ga3f2fcf https://github.com/hrydgard/ppsspp/commit/a3f2fcfd8f7897d1543e213f68096ecfd8d3a2c4 (pixellated letters even with Linear Texture Filtering selected): scfail

unknownbrackets commented 10 years ago

Why would the game use alpha testing for video? Well, it might be "enabled" but not really doing anything. I guess we could try harder to detect those cases.

Or just give up and let filtering break things at 2x.... which ain't great.

-[Unknown]

hrydgard commented 10 years ago

That would probably be the same reason as always - alpha testing and color testing are free on the PSP so games sometimes just leave them on by accident, probably just forgetting to disable the state, as there's no harm anyway if you draw things that don't match the test criterion.

But yeah there are more checks we can do to rule out effects of these, and use the result of those checks for the linear filter enabling...

Antonio1994 commented 10 years ago

It broke MGS PW too. Changing texture filter doesn't make any difference....

hrydgard commented 10 years ago

Broke the filtering in MGS PW or broke the game? That's some ambiguous wording.

Antonio1994 commented 10 years ago

Uh....sorry...I meant it broke the filtering....my mistake! :)

unknownbrackets commented 10 years ago

How's the status of this? I recall there were related changes recently.

-[Unknown]

solarmystic commented 10 years ago

The filtering works in FMVs now, but forcing Linear Filtering still does nothing for the pixelated ingame fonts. Same thing for Soul Calibur Broken Destiny.

Antonio1994 commented 10 years ago

I dont know have you guys tryed it, but in MGS when I get in-game and exit fullscreen and enter fullscreen again the filtering works.....

unknownbrackets commented 10 years ago

Does using something more like this help?

    if (g_Config.iTexFiltering == LINEARFMV && g_iNumVideos > 0 && (entry.dim & 0xF) >= 9) {
        magFilt |= 1;
        minFilt |= 1;
    }
    if (g_Config.iTexFiltering == LINEAR && !gstate.isColorTestEnabled()) {
        if (!gstate.isAlphaTestEnabled() || entry.GetAlphaStatus() == TexCacheEntry::STATUS_ALPHA_FULL || !gstate.isTextureAlphaUsed()) {
            magFilt |= 1;
            minFilt |= 1;
        }
    }

-[Unknown]

solarmystic commented 10 years ago

@unknownbrackets Just adding those lines in? Or do I have to replace any prior lines with these ones?

In any case, appending those lines to the current master version of the file does not resolve the issue. Lnear Texture Filtering is still broken for the ingame fonts in Tekken 6.

unknownbrackets commented 10 years ago

Replacing the if block that starts with g_Config.iTexFiltering == LINEAR with those. But, these should apply separately anyway. That means we can't safely force linear filtering because it's inventing pixels that may have other alpha values than the game expects.

Or we could make it ignore that and people will complain about the green outlines around characters or etc. in some games again.

-[Unknown]

solarmystic commented 10 years ago

@unknownbrackets Unfortunately, https://github.com/hrydgard/ppsspp/issues/6088 doesn't resolve the issue in Tekken 6 for the pixelated fonts. Setting it to Linear still causes it to be pixelated.

ulus10466_00009

Again, a reminder of what it used to look like with Linear Filtering set:-

ulus10466_00010

Seems to be the only straggler though. Other games have functioning Linear Filtering now when forced in the options.. (like Crisis Core etc.)

unknownbrackets commented 10 years ago

Well, I think that means it's using alpha test in a way that we can't know that we can safely ignore.

-[Unknown]

ppmeis commented 9 years ago

Testing with latest build. Same status: tekken6linearfilter

unknownbrackets commented 5 years ago

So, thinking about this, I guess what we could do is use sampler objects (GL3.3+ / GLES3) to bind the texture in two slots, and then do BOTH nearest and linear.

That way, we could do color and alpha testing based on the nearest value, but still output the linear value. I think that's more or less staying true to the goals of higher render resolutions.

We could take this further, and when upscaling (not not texture replacements? not sure...), we could bind the original texture to the second slot. This would again allow for using nearest which would give us better chances of color tests and alpha tests working correctly.

-[Unknown]

hrydgard commented 5 years ago

Yeah, that's definitely a possibility, although the mix between smooth filtering inside the solid regions coupled with the hard edges against the surroundings might look odd. Also, if the test is done against an ugly color it would still be able to bleed into the solid region.

ghost commented 2 years ago

Auto Max Quality possible help this?