All posts/opinions/views my own :)
🟥🟩🟦 Give us the sub-pixels!!! 🟥🟩🟦
🟥🟩🟦 Give us the sub-pixels!!! 🟥🟩🟦
Part of the message I'm trying to send here is that this isn't too hard to do. I'd love for people to have a go with their own implementations and share improvements if they can! 🧡
Part of the message I'm trying to send here is that this isn't too hard to do. I'd love for people to have a go with their own implementations and share improvements if they can! 🧡
The high-res stuff is in the post anyway, like this one with a bunch of different fonts rendered at high res straight out of the test app I was running this on:
osor.io/text/lorem_i...
The high-res stuff is in the post anyway, like this one with a bunch of different fonts rendered at high res straight out of the test app I was running this on:
osor.io/text/lorem_i...
This topic gets way more coverage but I've never seen it done/presented like this, so trying to make my contribution 🙏
This topic gets way more coverage but I've never seen it done/presented like this, so trying to make my contribution 🙏
🧨🧨🧨🧨🧨🧨🧨
🧨🧨🧨🧨🧨🧨🧨
Unfortunately it was a one-off build since I don’t have much time these days for this kind of project 😔
I would encourage people to attempt their own custom builds though. Or look for custom controller/arcade-stick builders directly since there’s some already out there 🙏
Unfortunately it was a one-off build since I don’t have much time these days for this kind of project 😔
I would encourage people to attempt their own custom builds though. Or look for custom controller/arcade-stick builders directly since there’s some already out there 🙏
The local offset within the wave comes from WavePrefixCountBits, since it's just the count of how many threads with a lower index are also writing one element.
The local offset within the wave comes from WavePrefixCountBits, since it's just the count of how many threads with a lower index are also writing one element.
WaveReadLaneFirst/WavePrefixCountBits sorts you out, here is how it'd look:
WaveReadLaneFirst/WavePrefixCountBits sorts you out, here is how it'd look:
It's a good idea to minimize this by doing the global write once per wave or group.
A neat trick is to also scalarize on the shader/draw for when a wave sees different values there 🙃
It's a good idea to minimize this by doing the global write once per wave or group.
A neat trick is to also scalarize on the shader/draw for when a wave sees different values there 🙃
(Prepare for the bsky video butchering though)
(Prepare for the bsky video butchering though)
Some of the other tile-based approaches I tried struggled with this, since they'd need to dispatch multiple resolve tiles per tile on-screen.
Some of the other tile-based approaches I tried struggled with this, since they'd need to dispatch multiple resolve tiles per tile on-screen.
If a pixel is not seeing any local lights, you can dispatch a version of the resolve shader that has all the local light code compiled out. Or if a pixel is fully in shadow from directional light, nuke all that code too, etc...
If a pixel is not seeing any local lights, you can dispatch a version of the resolve shader that has all the local light code compiled out. Or if a pixel is fully in shadow from directional light, nuke all that code too, etc...
With this you can do software VRS easily, both spatially and temporally, which is super cool! You can just write any logic to decide how the visibility buffer values map to a sample to resolve.
With this you can do software VRS easily, both spatially and temporally, which is super cool! You can just write any logic to decide how the visibility buffer values map to a sample to resolve.
This is as good as it can be anyway, if those waves weren't going to shade another draw, they would have been inactive in a "wave-perfect" resolve anyway.
This is as good as it can be anyway, if those waves weren't going to shade another draw, they would have been inactive in a "wave-perfect" resolve anyway.