summaryrefslogtreecommitdiff
path: root/libs/gui/SurfaceComposerClient.cpp
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2017-05-26 17:57:05 -0700
committer Romain Guy <romainguy@google.com> 2017-05-31 12:04:29 -0700
commit88d37ddac876c75dd5d2e39d33787dbcbf833641 (patch)
tree4066beab471fc110d15d6d62bafadbe2be9be29e /libs/gui/SurfaceComposerClient.cpp
parent177759a90584489b1b77cdaf3818ebdb79b1b9bf (diff)
Various fixes for wide color gamut rendering
This CL addresses multiple issues: - A logic issue where the wide gamut color mode was not set at the right time - The presence of scRGB surfaces was not detected - The sRGB to Display P3 matrix was transposed - The color matrix was applied in gamma space instead of linear space* - The GPU code path was doing a division by w for each pixel when a color transform is set, which shouldn't be necessary (the code now checks that the matrix has the expected form) - Incorrect comment - Dead code in Description.cpp (mDirtyUniforms was never used) - Screenshots were taken using the last render engine configuration, the configuration is now properly set every time * This can in theory cause a discrepancy when we switch to/from hardware composer mode. I was not able to create a visible discrepancy in practice using Night Light, color blindness compensation modes and color inversion. More importantly, how/where the hardware composer applies the color transform is not specified: it could be gamma or linear space, before or after the hardware color LUT. We'll address this in a future CL if needed. In addition, this code assumes that fp16 surfaces are encoded in non-linear space (scRGB-nl instead of scRGB) but we do not have EGL/Vulkan extensions to specify this behavior. We need to address this as well This CL also fixes potential divides by 0 in the GPU code path. Bug: 29940137 Test: CtsUiRenderingTestsCases, CtsGraphicsTestCases Change-Id: I9ae15850f8b9d48c39ebc2724ca3da202be9b008
Diffstat (limited to 'libs/gui/SurfaceComposerClient.cpp')
-rw-r--r--libs/gui/SurfaceComposerClient.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 8c8384399c..7ae2672249 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -1080,5 +1080,9 @@ size_t ScreenshotClient::getSize() const {
return mBuffer.stride * mBuffer.height * bytesPerPixel(mBuffer.format);
}
+android_dataspace ScreenshotClient::getDataSpace() const {
+ return mBuffer.dataSpace;
+}
+
// ----------------------------------------------------------------------------
}; // namespace android