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
Implement partial multicore rendering #8481
Conversation
0f110af
to
d2f2090
Compare
What shall happen to this PR? It seems to work well with OpenGL not a lot with the Software renderer but very noticable on debug builds. |
6fc3c8e
to
bc79430
Compare
I guess the time has come to drop older versions then |
Damn, what did they drop it for? |
6e44334 should probably change these to 10.12 now There are some more instances of |
e43e921
to
560fcb1
Compare
560fcb1
to
dcaef6c
Compare
4393a27
to
5243e49
Compare
Builds cleanly, but segfaults on macOS soon after starting:
|
... which We could bump the API to 10.12... but that would support a mere 75% of worldwide users. Alternatively, can't you use unique locks? PR |
I'm not sure if the issue is the mutex, have a look at the build logs. Thats the mysterious part here. |
7596f1e
to
e5b7339
Compare
I've disabled the whole thing for mac to preserve my sanity. If anyone feels like giving this a shot feel free, I'm done trying. |
You mean this error? This is indeed the mutex... can’t shared-lock a non-shared mutex. Can only use unique lock here. |
d35d4ed
to
71ea5fd
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OpenRCT2/src/openrct2/paint/tile_element/Paint.LargeScenery.cpp
Lines 100 to 120 in 71ea5fd
static const utf8* large_scenery_sign_fit_text(const utf8* str, rct_large_scenery_text* text, bool height) | |
{ | |
static utf8 fitStr[32]; | |
utf8* fitStrEnd = fitStr; | |
safe_strcpy(fitStr, str, sizeof(fitStr)); | |
int32_t w = 0; | |
uint32_t codepoint; | |
while (w <= text->max_width && (codepoint = utf8_get_next(fitStrEnd, (const utf8**)&fitStrEnd)) != 0) | |
{ | |
if (height) | |
{ | |
w += large_scenery_sign_get_glyph(text, codepoint)->height; | |
} | |
else | |
{ | |
w += large_scenery_sign_get_glyph(text, codepoint)->width; | |
} | |
} | |
*fitStrEnd = 0; | |
return fitStr; | |
} |
fitStr
needs some locking or refactoring. This should be the last change required.
Done, made it pass a buffer to be filled rather than returning static one. |
Could you add a line to the changelog as well? |
Good? |
Gave it a quick spin. Not noticing much of a difference on my old Linux pc, but all seems to work fine. Quick benchmark:
On macOS, the same benchmark:
|
Sadly its not too noticable without the OpenGL renderer but the gfxbenchmark is also not that good since theres nothing rendered really. |
93f3303
to
313117f
Compare
Should perhaps mention, this gives debug builds some nice performance under any renderer. |
- Feature: [#485] Rides can now be simulated with ghost trains during construction. - Feature: [#1260] Option for making giant screenshots have a transparent background. - Feature: [#2339] Find local servers automatically when fetching servers. - Feature: [#7296] Allow assigning a keyboard shortcut for the scenery picker. - Feature: [#8029] Add the Hungarian Forint (HUF) to the list of available currencies. - Feature: [#8481] Multi-threaded rendering. - Feature: [#8558] Guest debugging tab. - Feature: [#8659] Banner and sign texts are now shown in tooltips. - Feature: [#8687] New multiplayer toolbar icon showing network status with reconnect option. - Feature: [#8791] Improved tile element flag manipulation in Tile Inspector. - Feature: [#8919] Allow setting ride price from console. - Feature: [#8963] Add missing Czech letters to sprite font, use sprite font for Czech. - Feature: [#9154] Change map toolbar icon with current viewport rotation. - Change: [#7877] Files are now sorted in logical rather than dictionary order. - Change: [#8427] Ghost elements now show up as white on the mini-map. - Change: [#8688] Move common actions from debug menu into cheats menu. - Change: [#9428] Increase maximum height of the Hypercoaster to RCT1 limits. - Fix: [#2294] Clients crashing the server with invalid object selection. - Fix: [#4568, #5896] Incorrect fences removed when building a tracked ride through - Fix: [#5103] OpenGL: ride track preview not rendered. - Fix: [#5889] Giant screenshot does not work while using OpenGL renderer. - Fix: [#5579] Network desync immediately after connecting. - Fix: [#5893] Looking at guest window tabs other than the main tab eventually causes assertion. - Fix: [#5905] Urban Park merry-go-round has entrance and exit swapped (original bug). - Fix: [#6006] Objects higher than 6 metres are considered trees (original bug). - Fix: [#7039] Map window not rendering properly when using OpenGL. - Fix: [#7045] Theme window's colour pickers not drawn properly on OpenGL. - Fix: [#7323] Tunnel entrances not rendering in 'highlight path issues' mode if they have benches inside. - Fix: [#7729] Money Input Prompt breaks on certain values. - Fix: [#7884] Unfinished preserved rides can be demolished with quick demolish. - Fix: [#7913] RCT1/RCT2 title sequence timing is off. - Fix: [#7700, #8079, #8969] Crash when unloading buggy custom rides. - Fix: [#7829] Rotated information kiosk can cause 'unreachable' messages. - Fix: [#7878] Scroll shortcut keys ignore SHIFT/CTRL/ALT modifiers. - Fix: [#8219] Faulty folder recreation in "save" folder. - Fix: [#8480, #8535] Crash when mirroring track design. - Fix: [#8507] Incorrect change in vehicle rolling direction. - Fix: [#8537] Imported RCT1 rides/shops are all numbered 1. - Fix: [#8553] Scenery removal tool removes fences and paths while paused. - Fix: [#8598] Taking screenshots fails with some park names. - Fix: [#8602] Wall piece collision detection deviates from vanilla - Fix: [#8649] Setting date does not work in multiplayer. - Fix: [#8873] Potential crash when placing footpaths. - Fix: [#8882] Submarine Ride does not count as indoors (original bug). - Fix: [#8900] Peep tracking is not synchronized. - Fix: [#8909] Potential crash when invoking game actions as server. - Fix: [#8947] Detection of AVX2 support. - Fix: [#8988] Character sprite lookup noticeably slows down drawing. - Fix: [#9000] Show correct error message if not enough money available. - Fix: [#9067] Land/water tools show prices when money is disabled. - Fix: [#9124] Disconnected clients can crash the server. - Fix: [#9132] System file browser cannot open SV4 files. - Fix: [#9152] Spectators can modify ride colours. - Fix: [#9202] Artefacts show when changing ride type as client or using in-game console. - Fix: [#9240] Crash when passing directory instead of save file. - Fix: [#9245] Headless servers apply Discord Rich Presence. - Fix: [#9293] Issue with the native load/save dialog. - Fix: [#9322] Peep crashing the game trying to find a ride to look at. - Fix: [#9324] Crash trying to remove invalid footpath scenery. - Fix: [#9402] Ad campaigns disappear when you save and load the game. - Fix: [#9411] Ad campaigns end too soon. - Fix: [#9476] Running `simulate` command on park yields `Completed: (null)`. - Fix: [#9520] Time Twister object artdec29 conversion problem. - Fix: Guests eating popcorn are drawn as if they're eating pizza. - Fix: The arbitrary ride type and vehicle dropdown lists are ordered case-sensitively. - Improved: [#6116] Expose colour scheme for track elements in the tile inspector. - Improved: Allow the use of numpad enter key for console and chat.
This takes multithreading into account as well
This takes multithreading into account as well
This takes multithreading into account as well
Thank you so much for working on this project and keeping the childhood dream alive! I think you did a really great job with this feature. I get about 90% more FPS. It really helps for large parks. On that note, I curiously looked through #10664 and noticed that the maximum values will be increased and I think that will create more lag. Therefore, I was wondering if this multicore rendering only makes use of one additional core or if it can use more? Looking through the code I noticed this: JobPool(size_t maxThreads = 255) I hope that this is just a tiny bit useful. Once again thank you so much for working on this project, you have done an amazing job! (I wonder why the sprite limits are only increased about 6.5 times since I can imagine that this will be the easiest limitation to reach, especially considering the fact that the other limits being raised allows one to easier reach that limit). |
It will not use 255 threads unless your CPU has actually 255 cores, the value is clamped. See: OpenRCT2/src/openrct2/core/JobPool.hpp Line 51 in 9860f1e
Its just defaulted so you don`t have to manually pass the correct amount from a implementation perspective. |
@KKLD Currently, not many people hit the sprite limit, so a 6.5 times increase should be sufficient. It also means that sprite IDs will continue to fit in 16-bit unsigned integers, which saves a lot of refactoring. (If you have more questions about the save format, please ask them on Gitter, so we keep this PR clean of off-topic discussions.) |
…nRCT2#9590) * Fix OpenRCT2#9559: benchspritesort is broken after OpenRCT2#8481 This takes multithreading into account as well * Apply review fixes * Fix detection of newer Google Benchmark (>= 1.5.0) * Review fix
For testing purpose, perhaps a feature at some point.