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

Change: reduce register consumption for spritelayouts #306

Merged
merged 1 commit into from
Jul 9, 2024

Conversation

glx22
Copy link
Contributor

@glx22 glx22 commented Sep 29, 2023

Spritelayouts can consume a huge amount of registers, especially with stations as all the spritelayouts are merged into a single action 0.

https://gist.github.com/glx22/19446d63c287f050719c54cb099c4f8f is a station using 40 spritelayouts and requiring 136 registers (I had to increase the nml reserved range to make it compile).
As can be seen in the "Station Layout@registers" varact2 most of the registers are set to the same values, that was not an issue for non station spritelayouts but it's a huge waste of registers for stations.

With this PR, a new register is used only for when it's really needed.
https://gist.github.com/glx22/e749d7f074cb5eb53b4228fd8340e48a is the same station as in the previous gist, but it requires 8 registers only

WenSimEHRP added a commit to OpenTTD-China-Set/china-set-stations that referenced this pull request Apr 30, 2024
@WenSimEHRP
Copy link

This PR is necessary for station sets with complexed station tiles that requires a large amount of registers. This PR should be merged into trunk.

https://github.com/openttd-china-set/china-set-stations and https://github.com/WenSimEHRP/jppluswins requires this PR to compile

@PeterN
Copy link
Member

PeterN commented Jul 9, 2024

People are using this patch in the wild, might need to be updated given the waiting statuses.

@PeterN
Copy link
Member

PeterN commented Jul 9, 2024

Can there be a summary comment of what the LayoutRegisters class is doing?

It's a bit black-magic to me, but I think it is working out if a value already exists in a register and then reusing it, instead of just creating a new register?

@glx22
Copy link
Contributor Author

glx22 commented Jul 9, 2024

Yes the idea is to map values to registers, so if a value is used multiple times it doesn't create a new register on each use.

PeterN
PeterN previously approved these changes Jul 9, 2024
@glx22 glx22 merged commit dcbfdc7 into OpenTTD:master Jul 9, 2024
21 checks passed
@glx22 glx22 deleted the layout_registers branch July 9, 2024 23:49
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

Successfully merging this pull request may close these issues.

3 participants