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
Add support for bindless textures from storage buffer on Vulkan #6721
Conversation
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.
Looks good, does fix those issues in superstars, and I imagine it'll help get crazier cases of using bindless textures working at a bare minimum.
This triggers every frame in clubhouse games (guest pass) with pool sizes of 4352 and 2304, but I can't see any visual difference. Same with Mario Party Superstars with similar pool sizes... I guess there's something that needs it, but I can't see it. Obviously superstars does need it when it's drawing shadows in some minigames, so maybe it's just something that runs all the time.
This could result in higher memory and CPU usage for these games, so it might be worth looking into reducing it to just use the handles on the storage buffer in future. Might not be feasible if they're written from GPU... I was a bit worried about resolution scale resets forcing the game to 1x resolution, but I didn't see any when playing a bunch of minigames.
MacOS in particular has huge performance issues in Mario Party Superstars now in most scenes. I imagine MoltenVK isn't happy with hundreds of potential bindings for each draw.
Just tried Super Mario Party on Vulkan but it crashes now post the Pad select screen. Log attached. Error: Works fine on OGL but obviously missing shadows in many games. Tried vsync on/off and Memory mode=software/fast, clearing all caches but always crashes at that spot. Config: |
@legend800 this is completely unrelated to this PR, see #6478 |
This has two changes. First, it has the change on #5936:
And the second changes enables "full bindless" to also work when the handle comes from a storage buffer. Note that this still uses the code path where it loads all textures on the pool, rather than something that only loads the handles on the storage buffer.
This fixes some of the remaining issues that was originally fixed on the "full bindless" PR.
Castle Crashers Remastered.
Before:
After:
Mario Party Superstars.
Before:
After:
I tested this on the games that had massive performance regression when I enabled "full bindless" for everything, and none of them had performance regression with this change. Regardless, wider testing on UE4 games is welcome, since the number of games that I tested is low.