9
9
#include " impeller/entity/contents/filters/gaussian_blur_filter_contents.h"
10
10
#include " impeller/entity/contents/texture_contents.h"
11
11
#include " impeller/entity/entity_playground.h"
12
+ #include " impeller/geometry/color.h"
12
13
#include " impeller/geometry/geometry_asserts.h"
13
14
#include " impeller/renderer/testing/mocks.h"
14
15
@@ -51,6 +52,14 @@ fml::StatusOr<float> LowerBoundNewtonianMethod(
51
52
return x;
52
53
}
53
54
55
+ Scalar GetCoefficient (const Vector4& vec) {
56
+ return vec.z ;
57
+ }
58
+
59
+ Vector2 GetUVOffset (const Vector4& vec) {
60
+ return vec.xy ();
61
+ }
62
+
54
63
fml::StatusOr<Scalar> CalculateSigmaForBlurRadius (
55
64
Scalar radius,
56
65
const Matrix& effect_transform) {
@@ -508,7 +517,7 @@ TEST(GaussianBlurFilterContentsTest, LerpHackKernelSamplesSimple) {
508
517
},
509
518
};
510
519
511
- GaussianBlurPipeline::FragmentShader::BlurInfo blur_info =
520
+ GaussianBlurPipeline::FragmentShader::KernelSamples blur_info =
512
521
LerpHackKernelSamples (kernel_samples);
513
522
EXPECT_EQ (blur_info.sample_count , 3 );
514
523
@@ -517,15 +526,15 @@ TEST(GaussianBlurFilterContentsTest, LerpHackKernelSamplesSimple) {
517
526
// ////////////////////////////////////////////////////////////////////////////
518
527
// Check output kernel.
519
528
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 );
529
538
530
539
// ////////////////////////////////////////////////////////////////////////////
531
540
// Check output of fast kernel versus original kernel.
@@ -546,11 +555,11 @@ TEST(GaussianBlurFilterContentsTest, LerpHackKernelSamplesSimple) {
546
555
}
547
556
};
548
557
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 ]) ;
554
563
555
564
EXPECT_NEAR (original_output, fast_output, 0.01 );
556
565
}
@@ -565,7 +574,7 @@ TEST(GaussianBlurFilterContentsTest, LerpHackKernelSamplesComplex) {
565
574
.step_size = 1 };
566
575
KernelSamples kernel_samples = GenerateBlurInfo (parameters);
567
576
EXPECT_EQ (kernel_samples.sample_count , 33 );
568
- GaussianBlurPipeline::FragmentShader::BlurInfo fast_kernel_samples =
577
+ GaussianBlurPipeline::FragmentShader::KernelSamples fast_kernel_samples =
569
578
LerpHackKernelSamples (kernel_samples);
570
579
EXPECT_EQ (fast_kernel_samples.sample_count , 17 );
571
580
float data[33 ];
@@ -602,8 +611,8 @@ TEST(GaussianBlurFilterContentsTest, LerpHackKernelSamplesComplex) {
602
611
603
612
Scalar fast_output = 0.0 ;
604
613
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]));
607
616
}
608
617
609
618
EXPECT_NEAR (output, fast_output, 0.1 );
@@ -618,7 +627,7 @@ TEST(GaussianBlurFilterContentsTest, ChopHugeBlurs) {
618
627
.blur_radius = blur_radius,
619
628
.step_size = 1 };
620
629
KernelSamples kernel_samples = GenerateBlurInfo (parameters);
621
- GaussianBlurPipeline::FragmentShader::BlurInfo frag_kernel_samples =
630
+ GaussianBlurPipeline::FragmentShader::KernelSamples frag_kernel_samples =
622
631
LerpHackKernelSamples (kernel_samples);
623
632
EXPECT_TRUE (frag_kernel_samples.sample_count <= kGaussianBlurMaxKernelSize );
624
633
}
0 commit comments