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

Fixes #3083

Merged
merged 7 commits into from
Jul 27, 2017
Merged

Fixes #3083

merged 7 commits into from
Jul 27, 2017

Conversation

kd-11
Copy link
Contributor

@kd-11 kd-11 commented Jul 24, 2017

  • Reimplements the weak vertex cache using unordered_map for faster search performance
  • Reimplements the texture cache also using unordered_map for faster search as well
  • Properly synchronize the texture cache to avoid random rsx lockup
  • Reimplements timing in the SPU concurrency watchdog code. It is now possible to set a hint number of threads with little performance loss, e.g it is now possible to set 'preferred threads' to something like 2 and set a penalty of 0 to significantly improve smoothness if running a low end CPU. Note that games which run better with low 'preferred threads' values still need a delay penalty greater than 0 (leave it at 3)
  • Also added an option to disable the vertex cache in case it causes problems
  • Implements a weak vertex cache for opengl as well
  • Restore 'Strict mode rendering' checkbox as it is needed for some games

With these changes and 4 SPU threads + 0 delay penaly, demon's souls runs without the spiky framerates on an i3. Its still not a locked 30 fps but it feels much much better now.

@zminhquanz
Copy link

Impressive , my CPU is Intel Core 2 Quad Q6600 , is improve perfomance and FPS , less stutter sound . Great Job

@zminhquanz
Copy link

It's improve in Catherine , Dragon's Crown

else
{
//Slight pause if function is overburdened
thread_ctrl::wait();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This may freeze forever if a thread doesn't receive a signal...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. That actually explains a seemingly spurious lockup I was getting if the emulator ran for a few hours

@@ -890,8 +889,8 @@ namespace vk
range_reset = true;
}

// Upgrade to writer lock
lock.upgrade();
//Warning: Will deadlock if a double fault occurs and we enter here from 'flush' method
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reader lock is not recursive and still can deadlock. You should make sure that the flush cannot trigger a page fault then.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We never acquire a writer lock when handling any type of page fault so it should unwind ok for now. I'll have to find a better way of predetermining all adjacent blocks that will interfere with one another first, then handle protection outside the flush itself.

ui->scrictModeRendering->setToolTip(json_gpu_main["scrictModeRendering"].toString());

xemu_settings->EnhanceCheckBox(ui->disableVertexCache, emu_settings::DisableVertexCache);
ui->scrictModeRendering->setToolTip(json_gpu_main["disableVertexCache"].toString());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think should be

ui->disableVertexCache->setToolTip(json_gpu_main["disableVertexCache"].toString());

- Also enable SPU loop detection by default while were at it
@kd-11 kd-11 force-pushed the rsx_volatile branch 2 times, most recently from 3593641 to 1775624 Compare July 27, 2017 11:11
- More accurate pauses may slightly reduce performance but makes it more viable
  to allow more threads to participate without stuttering
- TODO: Ensure no page faults occur within a page-fault handler!
… disable the vertex cache

- Also, updates json tooltips for some options
…ution

- Should fix games with strange scaling artifacts due to upscaling from lower resolutions
@kd-11 kd-11 merged commit f613901 into RPCS3:master Jul 27, 2017
@Deathscythe432
Copy link

this made persona 5 run at a solid 30fps on a core I5 4690k @ 4.7ghz just got to find a way to stop the game from freezing in between cleaning my room and meeting Igor

@AlonTavor
Copy link

Did the exact opposite for me, on an i5-4460 @ 3.2 ghz, trying all options. Barely runs if i select anything than 1 thread, and even then performs worse than the binaries in the blog post.
Also this build freezes a little after launch with a framelimiter set to something other than auto.

@AniLeo
Copy link
Member

AniLeo commented Jul 27, 2017

Of course, you need LLE GCM for the game not to freeze. No regression.

@Deathscythe432
Copy link

has LLE GCM been finished up yet? or is Jarves still working on it?

@AniLeo
Copy link
Member

AniLeo commented Jul 28, 2017

Don't spam old PRs with unrelated stuff. There's an opened ongoing PR for LLE-GCM.

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

Successfully merging this pull request may close these issues.

None yet

7 participants