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

Super Robot Taisen OE graphic issue #4025

Closed
daniel229 opened this issue Oct 2, 2013 · 36 comments
Closed

Super Robot Taisen OE graphic issue #4025

daniel229 opened this issue Oct 2, 2013 · 36 comments

Comments

@daniel229
Copy link
Collaborator

After video played,the screen sometime will mix the last frame of the video,like this
01

Looking into the GE debugger, It's something wrong with the texture address 400000.
02

Skip that texture address seem to fix the issue.
03

@dbz400
Copy link
Contributor

dbz400 commented Oct 2, 2013

Looks like it is related to DoBlockTransfer(); comment out fix the issue .I'm wondering we need some check before start the block transfer.

@dbz400
Copy link
Contributor

dbz400 commented Oct 2, 2013

It seems to be overlapped with one of the framebuffer . Isn't it ?

22:56:680 CRI Server M I[SCEGE]: GLES\Framebuffer.cpp:1357 Destroying FBO for 00000000 : 480 x 272 x 1

33:13:199 user_main I[HLE]: GLES\GLES_GPU.cpp:1445 Block transfer: 04000000/8 -> 08400000/40, 8x60x2 (0,0)->(0,0)
33:13:199 user_main I[HLE]: GLES\GLES_GPU.cpp:1445 Block transfer: 04000400/8 -> 08400010/40, 8x60x2 (0,0)->(0,0)
33:13:199 user_main I[HLE]: GLES\GLES_GPU.cpp:1445 Block transfer: 04000800/8 -> 08400020/40, 8x60x2 (0,0)->(0,0)
33:13:199 user_main I[HLE]: GLES\GLES_GPU.cpp:1445 Block transfer: 04000c00/8 -> 08400030/40, 8x60x2 (0,0)->(0,0)
33:13:199 user_main I[HLE]: GLES\GLES_GPU.cpp:1445 Block transfer: 04001000/8 -> 08400040/40, 8x60x2 (0,0)->(0,0)

@hrydgard
Copy link
Owner

hrydgard commented Oct 2, 2013

certainly looks like it, and we should handle it by copying the corresponding regions to the destination texture or invalidating it, and if the source is in a render target, we need to read it back. But those are some strange copy dimensions, 8x60?

@dbz400
Copy link
Contributor

dbz400 commented Oct 2, 2013

I think the 8x60 is the background logo displayed during in the battle in this game.

@daniel229
Copy link
Collaborator Author

Another,this time I don't know how to remove the error.
01

@daniel229
Copy link
Collaborator Author

On PSP
02

@dbz400
Copy link
Contributor

dbz400 commented Oct 3, 2013

If comment out doblocktransfer(), correct background reappears?

@daniel229
Copy link
Collaborator Author

That makes the video not showing,and only black in this scene.

@dbz400
Copy link
Contributor

dbz400 commented Oct 3, 2013

I see.

@dbz400
Copy link
Contributor

dbz400 commented Oct 3, 2013

I just remember the above logo artifact happened in both non-buffered and buffered mode but not framebuffer to memory mode .Is it the case for the video background abovE?

or try the original one hack

       if (!Memory::IsValidAddress(srcBasePtr) || Memory::IsVRAMAddress(srcBasePtr)) {
           ERROR_LOG_REPORT(G3D, "BlockTransfer: Bad source transfer address %08x!", srcBasePtr); 

@daniel229
Copy link
Collaborator Author

Yes,the background is a video above.That hack work for in battle,but not work for this case.

@dbz400
Copy link
Contributor

dbz400 commented Oct 3, 2013

Even framebuffer to memory mode also cannot render the video correcttly?

@daniel229
Copy link
Collaborator Author

framebuffer to memory mode,not render video.

@dbz400
Copy link
Contributor

dbz400 commented Oct 3, 2013

I see. pretty bad.

@daniel229
Copy link
Collaborator Author

Text refresh is too slow.
http://www.youtube.com/watch?v=SBi_0v6VLco

Partly revert unknownbrackets@4bc7752

    const int LARGEST_TEXTURE_SIZE = 512 * 512 * 4;
    u64 startKey = addr - LARGEST_TEXTURE_SIZE;
    u64 endKey = addr + size + LARGEST_TEXTURE_SIZE;
    for (TexCache::iterator iter = cache.lower_bound(startKey), end = cache.upper_bound(endKey); iter != end; ++iter) {

to

for (TexCache::iterator iter = cache.begin(), end = cache.end(); iter != end; ++iter) {

seems to fix it.

http://www.youtube.com/watch?v=pfF7f1WTHdA

@dbz400
Copy link
Contributor

dbz400 commented Oct 4, 2013

Interestingly , i rememeber it somehow happen in some other games as well .

I'm wondering if the intra-frame issue above is related to this texture invalidation .

@daniel229
Copy link
Collaborator Author

Try the build 0.81-163 which not merged that commit yet,still have intra-frame issue.

@unknownbrackets
Copy link
Collaborator

@daniel229 if you only do that, it just means it's not invalidating textures at all, since you're basically disabling the functionality by making it look at the wrong range. This may mean it's simply invalidating textures too often.

Are you saying that changing that fixes the bad graphics?

-[Unknown]

@daniel229
Copy link
Collaborator Author

It does not fix bad graphics.

@daniel229
Copy link
Collaborator Author

Half speed if move cursor to a unit compared to move out of the uint.Do not if someone can optimze it,It's one of the slowest game.
01
02

move cursor to a unit
03

move cursor out of the uint
04

@daniel229
Copy link
Collaborator Author

Either multithreaded or nVidia threaded optimzation does not help speed in this case.

@unknownbrackets
Copy link
Collaborator

Hmm, might help to eat cycles in some of the most called functions or something. Not sure.

-[Unknown]

@unknownbrackets
Copy link
Collaborator

Has this improved at all? Especially with the texture speedups off?

-[Unknown]

@dbz400
Copy link
Contributor

dbz400 commented Jan 15, 2014

It is still happened with this artifact

screen00333

@daniel229
Copy link
Collaborator Author

And speed is still slow.

@dbz400
Copy link
Contributor

dbz400 commented Jan 16, 2014

This one uses BlockTransfer() .It disable it , artifact disappear.

@unknownbrackets
Copy link
Collaborator

Is the source of the block transfer an FBO?

-[Unknown]

@dbz400
Copy link
Contributor

dbz400 commented Jan 16, 2014

Let me check . (I'm wondering do we have check for overlapping FBO or texture before doing block transfer)

@unknownbrackets
Copy link
Collaborator

Well, from a texture is totally fine, but from an FBO will just get whatever was in that memory before. That said, "Read Framebuffers to Memory" should make that something useful ish, usually. It certainly wouldn't help the speed problem.

-[Unknown]

@dbz400
Copy link
Contributor

dbz400 commented Jan 16, 2014

I think this is from an FBO ? (04000000)

42:21:451 user_main I[G3D]: GLES\GLES_GPU.cpp:1534 Block transfer: 04000000/8 -> 08400000/40, 8x60x2 (0,0)->(0,0)
42:21:451 user_main I[G3D]: GLES\GLES_GPU.cpp:1534 Block transfer: 04000400/8 -> 08400010/40, 8x60x2 (0,0)->(0,0)
42:21:451 user_main I[G3D]: GLES\GLES_GPU.cpp:1534 Block transfer: 04000800/8 -> 08400020/40, 8x60x2 (0,0)->(0,0)
42:21:451 user_main I[G3D]: GLES\GLES_GPU.cpp:1534 Block transfer: 04000c00/8 -> 08400030/40, 8x60x2 (0,0)->(0,0)
42:21:451 user_main I[G3D]: GLES\GLES_GPU.cpp:1534 Block transfer: 04001000/8 -> 08400040/40, 8x60x2 (0,0)->(0,0)
42:21:451 user_main I[G3D]: GLES\GLES_GPU.cpp:1534 Block transfer: 04001400/8 -> 08400050/40, 8x60x2 (0,0)->(0,0)
42:21:451 user_main I[G3D]: GLES\GLES_GPU.cpp:1534 Block transfer: 04001800/8 -> 08400060/40, 8x60x2 (0,0)->(0,0)

@dbz400
Copy link
Contributor

dbz400 commented Jan 16, 2014

It is not happening in 'Read framebuffer to memory" mode.

@daniel229
Copy link
Collaborator Author

Read framebuffer to memory is missing video
01

@dbz400
Copy link
Contributor

dbz400 commented Jan 16, 2014

This srcBasePtr definitely the FBO address .Any check we can apply here to avoid them to do blocktransfer here?

@unknownbrackets
Copy link
Collaborator

This looks like the line by line copies in Grand Knights History, and might work better now.

-[Unknown]

@daniel229
Copy link
Collaborator Author

The graphics have been fixed with Simulate Block Transfer,

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

No branches or pull requests

4 participants