Merge "Stretch breaks on wembley" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-03-31 22:50:03 +00:00
committed by Android (Google) Code Review

View File

@@ -58,8 +58,7 @@ static const SkString stretchShader = SkString(R"(
uniform float viewportWidth; // target height in pixels uniform float viewportWidth; // target height in pixels
uniform float viewportHeight; // target width in pixels uniform float viewportHeight; // target width in pixels
void computeOverscrollStart( float computeOverscrollStart(
out float outPos,
float inPos, float inPos,
float overscroll, float overscroll,
float uStretchAffectedDist, float uStretchAffectedDist,
@@ -68,11 +67,10 @@ static const SkString stretchShader = SkString(R"(
float offsetPos = uStretchAffectedDist - inPos; float offsetPos = uStretchAffectedDist - inPos;
float posBasedVariation = smoothstep(0., uStretchAffectedDist, offsetPos); float posBasedVariation = smoothstep(0., uStretchAffectedDist, offsetPos);
float stretchIntensity = overscroll * posBasedVariation; float stretchIntensity = overscroll * posBasedVariation;
outPos = distanceStretched - (offsetPos / (1. + stretchIntensity)); return distanceStretched - (offsetPos / (1. + stretchIntensity));
} }
void computeOverscrollEnd( float computeOverscrollEnd(
out float outPos,
float inPos, float inPos,
float overscroll, float overscroll,
float reverseStretchDist, float reverseStretchDist,
@@ -82,21 +80,23 @@ static const SkString stretchShader = SkString(R"(
float offsetPos = inPos - reverseStretchDist; float offsetPos = inPos - reverseStretchDist;
float posBasedVariation = (smoothstep(0., uStretchAffectedDist, offsetPos)); float posBasedVariation = (smoothstep(0., uStretchAffectedDist, offsetPos));
float stretchIntensity = (-overscroll) * posBasedVariation; float stretchIntensity = (-overscroll) * posBasedVariation;
outPos = 1 - (distanceStretched - (offsetPos / (1. + stretchIntensity))); return 1 - (distanceStretched - (offsetPos / (1. + stretchIntensity)));
} }
void computeOverscroll( // Prefer usage of return values over out parameters as it enables
out float outPos, // SKSL to properly inline method calls and works around potential GPU
// driver issues on Wembly. See b/182566543 for details
float computeOverscroll(
float inPos, float inPos,
float overscroll, float overscroll,
float uStretchAffectedDist, float uStretchAffectedDist,
float distanceStretched, float distanceStretched,
float distanceDiff float distanceDiff
) { ) {
if (overscroll > 0) { float outPos = inPos;
if (overscroll > 0) {
if (inPos <= uStretchAffectedDist) { if (inPos <= uStretchAffectedDist) {
computeOverscrollStart( outPos = computeOverscrollStart(
outPos,
inPos, inPos,
overscroll, overscroll,
uStretchAffectedDist, uStretchAffectedDist,
@@ -109,8 +109,7 @@ static const SkString stretchShader = SkString(R"(
if (overscroll < 0) { if (overscroll < 0) {
float stretchAffectedDist = 1. - uStretchAffectedDist; float stretchAffectedDist = 1. - uStretchAffectedDist;
if (inPos >= stretchAffectedDist) { if (inPos >= stretchAffectedDist) {
computeOverscrollEnd( outPos = computeOverscrollEnd(
outPos,
inPos, inPos,
overscroll, overscroll,
stretchAffectedDist, stretchAffectedDist,
@@ -121,6 +120,7 @@ static const SkString stretchShader = SkString(R"(
outPos = -distanceDiff + inPos; outPos = -distanceDiff + inPos;
} }
} }
return outPos;
} }
vec4 main(vec2 coord) { vec4 main(vec2 coord) {
@@ -135,16 +135,14 @@ static const SkString stretchShader = SkString(R"(
inV += uScrollY; inV += uScrollY;
outU = inU; outU = inU;
outV = inV; outV = inV;
computeOverscroll( outU = computeOverscroll(
outU,
inU, inU,
uOverscrollX, uOverscrollX,
uStretchAffectedDistX, uStretchAffectedDistX,
uDistanceStretchedX, uDistanceStretchedX,
uDistDiffX uDistDiffX
); );
computeOverscroll( outV = computeOverscroll(
outV,
inV, inV,
uOverscrollY, uOverscrollY,
uStretchAffectedDistY, uStretchAffectedDistY,