Repository navigation
fix: encode sRGB in the shader when the surface format isn't sRGB - #31
Merged
Merged
Conversation
Some GLES screens offer no sRGB format, so the renderer drew to an Rgba8Unorm surface, which stores what it's given: linear colour, shown too dark. A pipeline constant, ENCODE_SRGB, now has the fragment shader encode its output for the unorm formats without the sRGB suffix. Float formats hold linear colour and are left as they were. On an Android emulator whose GLES screen has no sRGB format, a photo drew at a mean brightness of 163 against 193 on Vulkan; with this it draws at 193 on both.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Some GLES screens offer no sRGB surface format, so the renderer drew to an
Rgba8Unormsurface, which stores linear colour as it is. Wallpapers came out too dark.A pipeline constant,
ENCODE_SRGB, now has the fragment shader encode its output forRgba8Unorm,Bgra8UnormandRgb10a2Unorm. sRGB formats are encoded by the GPU as before, and float formats such asRgba16Floathold linear colour, so both are unchanged.Tested in the Android app on an emulator whose GLES screen has no sRGB format. A photo's mean brightness:
Rgba8UnormSrgb)Rgba8Unorm)cargo test -p shiftpaper-renderpasses, with a test of which formats get the encoding.