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

Senritsu no Stratus missing layer in buffered rendering mode #5151

Closed
daniel229 opened this issue Jan 20, 2014 · 11 comments
Closed

Senritsu no Stratus missing layer in buffered rendering mode #5151

daniel229 opened this issue Jan 20, 2014 · 11 comments

Comments

@daniel229
Copy link
Collaborator

since aaf219d

0.96-340
01

0.96-338
02

0.96-340
03

0.96-338
04

Non-buffered rendering mode layer seems OK
0.96-340
05
06

@dbz400
Copy link
Contributor

dbz400 commented Jan 20, 2014

Non-buffering okay becasue it didn't trigger the depth copy here.

Any savestate can share here?

@daniel229
Copy link
Collaborator Author

that just the beginning,start a new game can get there soon.

@dbz400
Copy link
Contributor

dbz400 commented Jan 20, 2014

I see let me try it out

@dbz400
Copy link
Contributor

dbz400 commented Jan 20, 2014

@hrydgard , looks like ignore copy if size different may break thing here .Just wonder how to do the copy upper left overlapping rect?

@hrydgard
Copy link
Owner

Hm, can you check what the two framebuffer sizes are that don't match?

Anyway, should be a matter of just taking the min() of the two buffer sizes.

@dbz400
Copy link
Contributor

dbz400 commented Jan 20, 2014

Okay now :)

        if (currentRenderVfb_ != NULL && 
            currentRenderVfb_->fbo != NULL && 
            currentRenderVfb_->renderWidth != vfb->renderWidth)
            NOTICE_LOG(HLE,"currentRenderVfb_->renderWidth=%i, vfb->renderWidth=%i", currentRenderVfb_->renderWidth, vfb->renderWidth);

47:04:883 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=958, vfb->renderWidth=510
47:04:883 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=510, vfb->renderWidth=127
47:04:883 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=127, vfb->renderWidth=510
47:04:883 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=510, vfb->renderWidth=958
47:04:915 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=958, vfb->renderWidth=510
47:04:915 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=510, vfb->renderWidth=958
47:04:915 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=958, vfb->renderWidth=510
47:04:915 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=510, vfb->renderWidth=127
47:04:915 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=127, vfb->renderWidth=510
47:04:916 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=510, vfb->renderWidth=958
47:04:949 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=958, vfb->renderWidth=510
47:04:949 user_main N[HLE]: GLES\Framebuffer.cpp:884 currentRenderVfb_->renderWidth=510, vfb->renderWidth=958

@unknownbrackets
Copy link
Collaborator

Probably, the game is doing this:

Buffer A / Depth A
Buffer B / Don't care (same)
Buffer C / Depth A (MUST BE SAME)

This is difficult to preserve with the model I used. Copying a mismatching size will partially solve it but is probably what causes issues in other games.

To clarify, the model I used in the code was the simplist fix to Jeanne d'Arc's problem: copy depth only when switching buffers. So, it's not able to handle the distance between buffer A and buffer C above. Tracking it wholly separately would solve this.

-[Unknown]

@dbz400
Copy link
Contributor

dbz400 commented Jan 22, 2014

I did attempt to adjust the framebuffer guessing and it did fix it .However wondering if we have any methodology can do better framebuffer guessing .

if (fb_stride > 0 && fb_stride < 512) {
    drawing_width = viewport_width;
    drawing_height = viewport_height;   
} else {
    drawing_width = region_width;
    drawing_height = region_height;
}

screen00001

@sum2012
Copy link
Collaborator

sum2012 commented Jan 23, 2014

mark this for myself
http://tieba.baidu.com/p/2823405333

@dbz400
Copy link
Contributor

dbz400 commented Jan 24, 2014

Latest build fixes it .

@daniel229
Copy link
Collaborator Author

Yes,#5197 fixes it.

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

5 participants