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 {