99#include " impeller/entity/contents/filters/gaussian_blur_filter_contents.h"
1010#include " impeller/entity/contents/texture_contents.h"
1111#include " impeller/entity/entity_playground.h"
12+ #include " impeller/geometry/color.h"
1213#include " impeller/geometry/geometry_asserts.h"
1314#include " impeller/renderer/testing/mocks.h"
1415
@@ -51,6 +52,14 @@ fml::StatusOr<float> LowerBoundNewtonianMethod(
5152 return x;
5253}
5354
55+ Scalar GetCoefficient (const Vector4& vec) {
56+ return vec.z ;
57+ }
58+
59+ Vector2 GetUVOffset (const Vector4& vec) {
60+ return vec.xy ();
61+ }
62+
5463fml::StatusOr<Scalar> CalculateSigmaForBlurRadius (
5564 Scalar radius,
5665 const Matrix& effect_transform) {
@@ -508,7 +517,7 @@ TEST(GaussianBlurFilterContentsTest, LerpHackKernelSamplesSimple) {
508517 },
509518 };
510519
511- GaussianBlurPipeline::FragmentShader::BlurInfo blur_info =
520+ GaussianBlurPipeline::FragmentShader::KernelSamples blur_info =
512521 LerpHackKernelSamples (kernel_samples);
513522 EXPECT_EQ (blur_info.sample_count , 3 );
514523
@@ -517,15 +526,15 @@ TEST(GaussianBlurFilterContentsTest, LerpHackKernelSamplesSimple) {
517526 // ////////////////////////////////////////////////////////////////////////////
518527 // Check output kernel.
519528
520- EXPECT_FLOAT_EQ ( blur_info.sample_data [0 ]. x , - 1.3333333 );
521- EXPECT_FLOAT_EQ (blur_info. sample_data [ 0 ]. y , 0 );
522- EXPECT_FLOAT_EQ (blur_info.sample_data [0 ]. z , 0.3 );
523- EXPECT_FLOAT_EQ (blur_info. sample_data [ 1 ]. x , 0 );
524- EXPECT_FLOAT_EQ ( blur_info.sample_data [1 ]. y , 0 );
525- EXPECT_FLOAT_EQ (blur_info.sample_data [1 ]. z , 0.4 );
526- EXPECT_FLOAT_EQ (blur_info. sample_data [ 2 ]. x , 1.3333333 );
527- EXPECT_FLOAT_EQ ( blur_info.sample_data [2 ]. y , 0 );
528- EXPECT_FLOAT_EQ (blur_info.sample_data [2 ]. z , 0.3 );
529+ EXPECT_POINT_NEAR ( GetUVOffset ( blur_info.sample_data [0 ]),
530+ Point (- 1.3333333 , 0 ) );
531+ EXPECT_FLOAT_EQ (GetCoefficient ( blur_info.sample_data [0 ]) , 0.3 );
532+
533+ EXPECT_POINT_NEAR ( GetUVOffset ( blur_info.sample_data [1 ]), Point ( 0 , 0 ) );
534+ EXPECT_FLOAT_EQ (GetCoefficient ( blur_info.sample_data [1 ]) , 0.4 );
535+
536+ EXPECT_POINT_NEAR ( GetUVOffset ( blur_info.sample_data [2 ]), Point ( 1.333333 , 0 ) );
537+ EXPECT_FLOAT_EQ (GetCoefficient ( blur_info.sample_data [2 ]) , 0.3 );
529538
530539 // ////////////////////////////////////////////////////////////////////////////
531540 // Check output of fast kernel versus original kernel.
@@ -546,11 +555,11 @@ TEST(GaussianBlurFilterContentsTest, LerpHackKernelSamplesSimple) {
546555 }
547556 };
548557 Scalar fast_output =
549- /* 1st*/ lerp (blur_info.sample_data [0 ]. xy ( ), data[0 ], data[1 ]) *
550- blur_info.sample_data [0 ]. z +
551- /* 2nd*/ data[2 ] * blur_info.sample_data [1 ]. z +
552- /* 3rd*/ lerp (blur_info.sample_data [2 ]. xy ( ), data[3 ], data[4 ]) *
553- blur_info.sample_data [2 ]. z ;
558+ /* 1st*/ lerp (GetUVOffset ( blur_info.sample_data [0 ]), data[0 ], data[1 ]) *
559+ GetCoefficient ( blur_info.sample_data [0 ]) +
560+ /* 2nd*/ data[2 ] * GetCoefficient ( blur_info.sample_data [1 ]) +
561+ /* 3rd*/ lerp (GetUVOffset ( blur_info.sample_data [2 ]), data[3 ], data[4 ]) *
562+ GetCoefficient ( blur_info.sample_data [2 ]) ;
554563
555564 EXPECT_NEAR (original_output, fast_output, 0.01 );
556565}
@@ -565,7 +574,7 @@ TEST(GaussianBlurFilterContentsTest, LerpHackKernelSamplesComplex) {
565574 .step_size = 1 };
566575 KernelSamples kernel_samples = GenerateBlurInfo (parameters);
567576 EXPECT_EQ (kernel_samples.sample_count , 33 );
568- GaussianBlurPipeline::FragmentShader::BlurInfo fast_kernel_samples =
577+ GaussianBlurPipeline::FragmentShader::KernelSamples fast_kernel_samples =
569578 LerpHackKernelSamples (kernel_samples);
570579 EXPECT_EQ (fast_kernel_samples.sample_count , 17 );
571580 float data[33 ];
@@ -602,8 +611,8 @@ TEST(GaussianBlurFilterContentsTest, LerpHackKernelSamplesComplex) {
602611
603612 Scalar fast_output = 0.0 ;
604613 for (int i = 0 ; i < fast_kernel_samples.sample_count ; i++) {
605- fast_output += fast_kernel_samples.sample_data [i]. z *
606- sampler (fast_kernel_samples.sample_data [i]. xy ( ));
614+ fast_output += GetCoefficient ( fast_kernel_samples.sample_data [i]) *
615+ sampler (GetUVOffset ( fast_kernel_samples.sample_data [i]));
607616 }
608617
609618 EXPECT_NEAR (output, fast_output, 0.1 );
@@ -618,7 +627,7 @@ TEST(GaussianBlurFilterContentsTest, ChopHugeBlurs) {
618627 .blur_radius = blur_radius,
619628 .step_size = 1 };
620629 KernelSamples kernel_samples = GenerateBlurInfo (parameters);
621- GaussianBlurPipeline::FragmentShader::BlurInfo frag_kernel_samples =
630+ GaussianBlurPipeline::FragmentShader::KernelSamples frag_kernel_samples =
622631 LerpHackKernelSamples (kernel_samples);
623632 EXPECT_TRUE (frag_kernel_samples.sample_count <= kGaussianBlurMaxKernelSize );
624633}
0 commit comments