Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ULES-00516 MOH Heroes Vulkan bad vshader cached #16612

Closed
5 tasks done
ppmeis opened this issue Dec 17, 2022 · 6 comments
Closed
5 tasks done

ULES-00516 MOH Heroes Vulkan bad vshader cached #16612

ppmeis opened this issue Dec 17, 2022 · 6 comments
Labels
Milestone

Comments

@ppmeis
Copy link
Contributor

ppmeis commented Dec 17, 2022

Game or games this happens in

ULES-00561 - Medal of Honor Heroes

What area of the game / PPSSPP

After title screen emulator prompt Vulkan vshader cached error.

What should happen

No vshader error.

Logs

image

DebugLog.zip

Platform

Windows

Mobile phone model or graphics card

NVIDIA Geforce RTX 3070

PPSSPP version affected

v1.14-37-g4942ab7d8

Last working version

v1.12.3-1469-gcc197415b

Graphics backend (3D API)

Vulkan

Checklist

  • Test in the latest git build in case it's already fixed.
  • Search for other reports of the same issue.
  • Try resetting settings or older versions and include if the issue is related.
  • Try without any cheats and without loading any save states.
  • Include logs or screenshots of issue.
@ghost
Copy link

ghost commented Dec 18, 2022

Can't reproduce this on my phone might be a windows issue only.

@hrydgard hrydgard added this to the v1.14.1 milestone Dec 18, 2022
@hrydgard
Copy link
Owner

Thanks for reporting this one!

No, we just ignore the error on Android (debug asserts aren't on there by default) but it's still a bug, even though there might not be any big graphical consequence. Will look into it.

@hrydgard
Copy link
Owner

hrydgard commented Dec 18, 2022

We hit the case where the game uses GE_PRIM_KEEP_PREVIOUS where prevPrim_ == GE_PRIM_INVALID. Think this might later somehow confuse CanUseHardwareTransform(prim) leading us to generate a different useHwTransform flag, for what should be the same inputs to the shader cache ID generators. Haven't quite understood this yet. Hm, yeah, we end up calling CanUseHardwareTransform(GE_PRIM_INVALID) which can't be good..

I think maybe we shouldn't set prevPrim_ to GE_PRIM_INVALID in Flush, btw... not doing that is enough to fix this.

@unknownbrackets
Copy link
Collaborator

That sounds right to me. It seems like CanUseHardwareTransform(GE_PRIM_INVALID) would only mean DoFlush() had prevPrim_ set to GE_PRIM_INVALID, unless it's a curve.... but then how does it get there? SubmitPrim() looks like it should always set prevPrim_.

-[Unknown]

unknownbrackets added a commit to unknownbrackets/ppsspp that referenced this issue Dec 18, 2022
For continuing previous verts, see hrydgard#16612.  We still don't handle these
quite accurately (outside software rendering), but this should be better.
@unknownbrackets
Copy link
Collaborator

Okay, I saw it so opened up #16614. We were never setting prevPrim_ if it was GE_PRIM_INVALID, I changed it to use points in that unlikely case (can only happen now on very first draw.)

-[Unknown]

@hrydgard
Copy link
Owner

#16614 fixes this, closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants