[GH-ISSUE #5068] Star Wars Force Unleashed character model regression due to revision 9.6.340 #2129

Closed
opened 2026-03-18 07:37:16 +03:00 by kerem · 22 comments
Owner

Originally created by @psennermann on GitHub (Jan 10, 2014).
Original GitHub issue: https://github.com/hrydgard/ppsspp/issues/5068

In Star Wars Force Unleahed starting with PPSSPP 9.6.340 sometimes sprites partially disappear as you can see here:

screen00004

Here's instead the correct behaviour of 9.6.338:

screen00000

Originally created by @psennermann on GitHub (Jan 10, 2014). Original GitHub issue: https://github.com/hrydgard/ppsspp/issues/5068 In Star Wars Force Unleahed starting with PPSSPP 9.6.340 sometimes sprites partially disappear as you can see here: ![screen00004](https://f.cloud.github.com/assets/6342467/1889299/246906da-7a19-11e3-9872-f5897eb86998.jpg) Here's instead the correct behaviour of 9.6.338: ![screen00000](https://f.cloud.github.com/assets/6342467/1889317/6f92268c-7a19-11e3-91e6-0168829edc5f.jpg)
kerem closed this issue 2026-03-18 07:37:22 +03:00
Author
Owner

@psennermann commented on GitHub (Jan 10, 2014):

Forgot to write that it's on Windows XP 32-bit - Amd Hd4850

<!-- gh-comment-id:32046887 --> @psennermann commented on GitHub (Jan 10, 2014): Forgot to write that it's on Windows XP 32-bit - Amd Hd4850
Author
Owner

@dbz400 commented on GitHub (Jan 10, 2014):

Confirm on my NV system as well .

screen00264

<!-- gh-comment-id:32059399 --> @dbz400 commented on GitHub (Jan 10, 2014): Confirm on my NV system as well . ![screen00264](https://f.cloud.github.com/assets/3000282/1890647/7db3a4a4-7a30-11e3-824a-774a186739b3.jpg)
Author
Owner

@dbz400 commented on GitHub (Jan 24, 2014):

Just tested .It is still happening

<!-- gh-comment-id:33221155 --> @dbz400 commented on GitHub (Jan 24, 2014): Just tested .It is still happening
Author
Owner

@hrydgard commented on GitHub (Jan 24, 2014):

Hm, those aren't sprites, those are 3D models as far as I can tell. Looks weird though, the shadow is properly occluded but still the rest isn't drawn right... Some bizarre depth or transparency problem.

<!-- gh-comment-id:33228613 --> @hrydgard commented on GitHub (Jan 24, 2014): Hm, those aren't sprites, those are 3D models as far as I can tell. Looks weird though, the shadow is properly occluded but still the rest isn't drawn right... Some bizarre depth or transparency problem.
Author
Owner

@unknownbrackets commented on GitHub (Jan 24, 2014):

What are the buffers it's copying depth between? Just want to know their addresses and sizes. Can log them write where it does the blit.

-[Unknown]

<!-- gh-comment-id:33238579 --> @unknownbrackets commented on GitHub (Jan 24, 2014): What are the buffers it's copying depth between? Just want to know their addresses and sizes. Can log them write where it does the blit. -[Unknown]
Author
Owner

@psennermann commented on GitHub (Jan 24, 2014):

You mean this?

20:49:984 idle0 I[SCEGE]: GLES\Framebuffer.cpp:1597 Decimating FBO for 00164000 (128 x 128 x 0), age 6
20:50:687 System_GameT I[G3D]: GLES\ShaderManager.cpp:146 Linked shader: vs 70 fs 121
20:51:500 System_GameT I[SCEGE]: GLES\Framebuffer.cpp:794 Creating FBO for 00164000 : 128 x 128 x 0
20:51:500 System_GameT W[SCEGE]: GLES\Framebuffer.cpp:814 FBO reusing depthbuffer, 00164000/00110000 and 00000000/00110000

<!-- gh-comment-id:33249422 --> @psennermann commented on GitHub (Jan 24, 2014): You mean this? 20:49:984 idle0 I[SCEGE]: GLES\Framebuffer.cpp:1597 Decimating FBO for 00164000 (128 x 128 x 0), age 6 20:50:687 System_GameT I[G3D]: GLES\ShaderManager.cpp:146 Linked shader: vs 70 fs 121 20:51:500 System_GameT I[SCEGE]: GLES\Framebuffer.cpp:794 Creating FBO for 00164000 : 128 x 128 x 0 20:51:500 System_GameT W[SCEGE]: GLES\Framebuffer.cpp:814 FBO reusing depthbuffer, 00164000/00110000 and 00000000/00110000
Author
Owner

@dbz400 commented on GitHub (Feb 5, 2014):

@unknownbrackets here it is

INFO_LOG(HLE,"source = %08x with size %i x %i , target = %08x with size %i x %i ", 
    sourceframebuffer->z_address, sourceframebuffer->renderWidth, sourceframebuffer->renderHeight , 
    targetframebuffer->z_address, targetframebuffer->renderWidth, targetframebuffer->renderHeight);

22:37:998 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 951 x 544 , target = 00110000 with size 253 x 256
22:37:998 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 253 x 256 , target = 00110000 with size 951 x 544
22:37:999 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 951 x 544 , target = 00110000 with size 253 x 256
22:37:999 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 253 x 256 , target = 00110000 with size 951 x 544
22:37:999 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 951 x 544 , target = 00110000 with size 253 x 256
22:37:999 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 253 x 256 , target = 00110000 with size 951 x 544
22:37:999 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 951 x 544 , target = 00110000 with size 253 x 256
22:38:000 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 253 x 256 , target = 00110000 with size 951 x 544

<!-- gh-comment-id:34128593 --> @dbz400 commented on GitHub (Feb 5, 2014): @unknownbrackets here it is ``` INFO_LOG(HLE,"source = %08x with size %i x %i , target = %08x with size %i x %i ", sourceframebuffer->z_address, sourceframebuffer->renderWidth, sourceframebuffer->renderHeight , targetframebuffer->z_address, targetframebuffer->renderWidth, targetframebuffer->renderHeight); ``` 22:37:998 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 951 x 544 , target = 00110000 with size 253 x 256 22:37:998 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 253 x 256 , target = 00110000 with size 951 x 544 22:37:999 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 951 x 544 , target = 00110000 with size 253 x 256 22:37:999 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 253 x 256 , target = 00110000 with size 951 x 544 22:37:999 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 951 x 544 , target = 00110000 with size 253 x 256 22:37:999 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 253 x 256 , target = 00110000 with size 951 x 544 22:37:999 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 951 x 544 , target = 00110000 with size 253 x 256 22:38:000 System_GameT I[HLE]: GLES\Framebuffer.cpp:922 source = 00110000 with size 253 x 256 , target = 00110000 with size 951 x 544
Author
Owner

@unknownbrackets commented on GitHub (Feb 5, 2014):

I thought it didn't blit when the sizes were different? So theoretically, it should not blit between any of those.

-[Unknown]

<!-- gh-comment-id:34129081 --> @unknownbrackets commented on GitHub (Feb 5, 2014): I thought it didn't blit when the sizes were different? So theoretically, it should not blit between any of those. -[Unknown]
Author
Owner

@dbz400 commented on GitHub (Feb 5, 2014):

Looks like the video is also stretched/duplicated somehow
screen00426

<!-- gh-comment-id:34129089 --> @dbz400 commented on GitHub (Feb 5, 2014): Looks like the video is also stretched/duplicated somehow ![screen00426](https://f.cloud.github.com/assets/3000282/2083550/1f4b039c-8e05-11e3-978b-13ae9749802c.jpg)
Author
Owner

@dbz400 commented on GitHub (Feb 5, 2014):

If remove linesize != 512 check fix it .This issue happened in other games as well .

screen00427

<!-- gh-comment-id:34129153 --> @dbz400 commented on GitHub (Feb 5, 2014): If remove linesize != 512 check fix it .This issue happened in other games as well . ![screen00427](https://f.cloud.github.com/assets/3000282/2083551/4b2b4440-8e05-11e3-8423-6f9b313eb7dc.jpg)
Author
Owner

@psennermann commented on GitHub (Mar 15, 2014):

If I may, i have a "simple" question: usually when it doesn't get found the exact revision that caused an issue, it is very difficult to find the origin of the problem, but in this case the revision that caused the issue has been spotted, so I wanted to ask if there is a particular reason why it is so complicated/takes so much time to fix this regression?
Thank you

<!-- gh-comment-id:37724814 --> @psennermann commented on GitHub (Mar 15, 2014): If I may, i have a "simple" question: usually when it doesn't get found the exact revision that caused an issue, it is very difficult to find the origin of the problem, but in this case the revision that caused the issue has been spotted, so I wanted to ask if there is a particular reason why it is so complicated/takes so much time to fix this regression? Thank you
Author
Owner

@psennermann commented on GitHub (Apr 28, 2014):

Strange, I found out that just changing resolution on the fly fixes the "3d models diseappering" problem of the buffered rendering...

<!-- gh-comment-id:41577366 --> @psennermann commented on GitHub (Apr 28, 2014): Strange, I found out that just changing resolution on the fly fixes the "3d models diseappering" problem of the buffered rendering...
Author
Owner

@dbz400 commented on GitHub (Apr 29, 2014):

Originally i expect the video issue to be fixed as well that like Prince of Persia but apparently not

@psennermann , we can fix it but we know it break others at the same time.Probably need more testing and investigation before we can propertly fix it here.

<!-- gh-comment-id:41634896 --> @dbz400 commented on GitHub (Apr 29, 2014): Originally i expect the video issue to be fixed as well that like Prince of Persia but apparently not @psennermann , we can fix it but we know it break others at the same time.Probably need more testing and investigation before we can propertly fix it here.
Author
Owner

@unknownbrackets commented on GitHub (Apr 29, 2014):

Is there another FBO that is created right before the video starts, but then isn't rendered to?

-[Unknown]

<!-- gh-comment-id:41637092 --> @unknownbrackets commented on GitHub (Apr 29, 2014): Is there another FBO that is created right before the video starts, but then isn't rendered to? -[Unknown]
Author
Owner

@dbz400 commented on GitHub (May 1, 2014):

@unknownbrackets , there are only two FBO created before the video start .

56:03:740 System_GameT I[SCEGE]: GLES\Framebuffer.cpp:824 Creating FBO for 00154000 : 256 x 128 x 3
56:03:740 System_GameT W[SCEGE]: GLES\Framebuffer.cpp:844 FBO reusing depthbuffer, 00154000/00110000 and 00000000/00110000
56:03:780 System_GameT I[SCEGE]: GLES\Framebuffer.cpp:824 Creating FBO for 00164000 : 256 x 128 x 0
56:03:780 System_GameT W[SCEGE]: GLES\Framebuffer.cpp:844 FBO reusing depthbuffer, 00164000/00110000 and 00000000/00110000

<!-- gh-comment-id:41885665 --> @dbz400 commented on GitHub (May 1, 2014): @unknownbrackets , there are only two FBO created before the video start . 56:03:740 System_GameT I[SCEGE]: GLES\Framebuffer.cpp:824 Creating FBO for 00154000 : 256 x 128 x 3 56:03:740 System_GameT W[SCEGE]: GLES\Framebuffer.cpp:844 FBO reusing depthbuffer, 00154000/00110000 and 00000000/00110000 56:03:780 System_GameT I[SCEGE]: GLES\Framebuffer.cpp:824 Creating FBO for 00164000 : 256 x 128 x 0 56:03:780 System_GameT W[SCEGE]: GLES\Framebuffer.cpp:844 FBO reusing depthbuffer, 00164000/00110000 and 00000000/00110000
Author
Owner

@unknownbrackets commented on GitHub (May 1, 2014):

Well, they are both 256. So if it is writing the video buffer directly to either of those addresses, then it would probably assume the wrong width.

I guess we can change it to more specifically send the width of the framebuffer, from at least psmfplayer.

-[Unknown]

<!-- gh-comment-id:41885768 --> @unknownbrackets commented on GitHub (May 1, 2014): Well, they are both 256. So if it is writing the video buffer directly to either of those addresses, then it would probably assume the wrong width. I guess we can change it to more specifically send the width of the framebuffer, from at least psmfplayer. -[Unknown]
Author
Owner

@dbz400 commented on GitHub (May 1, 2014):

One interesting thing , if switching resolution let say from 2x -> 3x , the video will be correct .

ulus10345_00003

<!-- gh-comment-id:41887182 --> @dbz400 commented on GitHub (May 1, 2014): One interesting thing , if switching resolution let say from 2x -> 3x , the video will be correct . ![ulus10345_00003](https://cloud.githubusercontent.com/assets/3000282/2850554/9c7b8f3c-d101-11e3-9a3d-001ab6c19723.jpg)
Author
Owner

@unknownbrackets commented on GitHub (May 1, 2014):

Switching resolution forces framebuffers to be deleted and recreated (it also makes the screen flicker.) Since nothing is recreating it, in this case, that makes it go away. But deleting it will cause problems for games that render e.g. subtitles on top of the video.

-[Unknown]

<!-- gh-comment-id:41887304 --> @unknownbrackets commented on GitHub (May 1, 2014): Switching resolution forces framebuffers to be deleted and recreated (it also makes the screen flicker.) Since nothing is recreating it, in this case, that makes it go away. But deleting it will cause problems for games that render e.g. subtitles on top of the video. -[Unknown]
Author
Owner

@dbz400 commented on GitHub (May 1, 2014):

Probably it is the vfb->stride get wrong when used in UpdateMemory()

     DrawPixels(Memory::GetPointer(addr | 0x04000000), vfb->format, vfb->fb_stride);
<!-- gh-comment-id:41887434 --> @dbz400 commented on GitHub (May 1, 2014): Probably it is the vfb->stride get wrong when used in UpdateMemory() ``` DrawPixels(Memory::GetPointer(addr | 0x04000000), vfb->format, vfb->fb_stride); ```
Author
Owner

@dbz400 commented on GitHub (May 1, 2014):

Force vfb->fb_stride to 512 fixed the video here therefore obviously it is the wrong width passing by

<!-- gh-comment-id:41887476 --> @dbz400 commented on GitHub (May 1, 2014): Force vfb->fb_stride to 512 fixed the video here therefore obviously it is the wrong width passing by
Author
Owner

@unknownbrackets commented on GitHub (May 1, 2014):

That's what I said an hour ago.

-[Unknown]

<!-- gh-comment-id:41888083 --> @unknownbrackets commented on GitHub (May 1, 2014): That's what I said an hour ago. -[Unknown]
Author
Owner

@dbz400 commented on GitHub (May 1, 2014):

Yep , i also checked videoData->frameWidth is 512 (psmf)

<!-- gh-comment-id:41888124 --> @dbz400 commented on GitHub (May 1, 2014): Yep , i also checked videoData->frameWidth is 512 (psmf)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/ppsspp#2129
No description provided.