renderengine: clamp XYZ to [0.0, 1.0] in shaders
texture2D can return strange negative values for some YUV textures.
That should be a driver bug. But with scRGB and floating-point
formats, we cannot be sure that colors will always stay non-negative
after conversion to XYZ. We need to clamp XYZ to [0.0, 1.0] such
that the following color processing behaves as expected.
Bug: 116864006
Test: manual
Change-Id: I8f432c63b800edc11ce3d86536192a5547144ca5
Merged-In: I8f432c63b800edc11ce3d86536192a5547144ca5
diff --git a/services/surfaceflinger/RenderEngine/ProgramCache.cpp b/services/surfaceflinger/RenderEngine/ProgramCache.cpp
index 796901a..cfb0ea1 100644
--- a/services/surfaceflinger/RenderEngine/ProgramCache.cpp
+++ b/services/surfaceflinger/RenderEngine/ProgramCache.cpp
@@ -577,7 +577,7 @@
fs << "uniform mat4 inputTransformMatrix;";
fs << R"__SHADER__(
highp vec3 InputTransform(const highp vec3 color) {
- return vec3(inputTransformMatrix * vec4(color, 1.0));
+ return clamp(vec3(inputTransformMatrix * vec4(color, 1.0)), 0.0, 1.0);
}
)__SHADER__";
} else {