Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit cac3b87

Browse files
[Impeller] use spec constant for gaussian shader, rename, and reuse vertex sources. (#52361)
Reduces shader count slightly, and reduces duplication of source code for vertex stages that are identical. Part of flutter/flutter#143540
1 parent 88fc864 commit cac3b87

17 files changed

+753
-1869
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40378,24 +40378,19 @@ ORIGIN: ../../../flutter/impeller/entity/shaders/blending/framebuffer_blend.vert
4037840378
ORIGIN: ../../../flutter/impeller/entity/shaders/blending/porter_duff_blend.frag + ../../../flutter/LICENSE
4037940379
ORIGIN: ../../../flutter/impeller/entity/shaders/blending/porter_duff_blend.vert + ../../../flutter/LICENSE
4038040380
ORIGIN: ../../../flutter/impeller/entity/shaders/blending/vertices_uber.frag + ../../../flutter/LICENSE
40381-
ORIGIN: ../../../flutter/impeller/entity/shaders/blending/vertices_uber.vert + ../../../flutter/LICENSE
40382-
ORIGIN: ../../../flutter/impeller/entity/shaders/border_mask_blur.frag + ../../../flutter/LICENSE
40383-
ORIGIN: ../../../flutter/impeller/entity/shaders/border_mask_blur.vert + ../../../flutter/LICENSE
4038440381
ORIGIN: ../../../flutter/impeller/entity/shaders/clip.frag + ../../../flutter/LICENSE
4038540382
ORIGIN: ../../../flutter/impeller/entity/shaders/clip.vert + ../../../flutter/LICENSE
4038640383
ORIGIN: ../../../flutter/impeller/entity/shaders/debug/checkerboard.frag + ../../../flutter/LICENSE
4038740384
ORIGIN: ../../../flutter/impeller/entity/shaders/debug/checkerboard.vert + ../../../flutter/LICENSE
40385+
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/border_mask_blur.frag + ../../../flutter/LICENSE
4038840386
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/color_matrix_color_filter.frag + ../../../flutter/LICENSE
40389-
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/filter.vert + ../../../flutter/LICENSE
40387+
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/filter_position.vert + ../../../flutter/LICENSE
40388+
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/filter_position_uv.vert + ../../../flutter/LICENSE
40389+
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/gaussian.frag + ../../../flutter/LICENSE
4039040390
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/linear_to_srgb_filter.frag + ../../../flutter/LICENSE
4039140391
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/morphology_filter.frag + ../../../flutter/LICENSE
40392-
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/morphology_filter.vert + ../../../flutter/LICENSE
4039340392
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/srgb_to_linear_filter.frag + ../../../flutter/LICENSE
4039440393
ORIGIN: ../../../flutter/impeller/entity/shaders/filters/yuv_to_rgb_filter.frag + ../../../flutter/LICENSE
40395-
ORIGIN: ../../../flutter/impeller/entity/shaders/gaussian_blur/kernel.glsl + ../../../flutter/LICENSE
40396-
ORIGIN: ../../../flutter/impeller/entity/shaders/gaussian_blur/kernel.vert + ../../../flutter/LICENSE
40397-
ORIGIN: ../../../flutter/impeller/entity/shaders/gaussian_blur/kernel_decal.frag + ../../../flutter/LICENSE
40398-
ORIGIN: ../../../flutter/impeller/entity/shaders/gaussian_blur/kernel_nodecal.frag + ../../../flutter/LICENSE
4039940394
ORIGIN: ../../../flutter/impeller/entity/shaders/glyph_atlas.frag + ../../../flutter/LICENSE
4040040395
ORIGIN: ../../../flutter/impeller/entity/shaders/glyph_atlas.vert + ../../../flutter/LICENSE
4040140396
ORIGIN: ../../../flutter/impeller/entity/shaders/glyph_atlas_color.frag + ../../../flutter/LICENSE
@@ -43259,24 +43254,19 @@ FILE: ../../../flutter/impeller/entity/shaders/blending/framebuffer_blend.vert
4325943254
FILE: ../../../flutter/impeller/entity/shaders/blending/porter_duff_blend.frag
4326043255
FILE: ../../../flutter/impeller/entity/shaders/blending/porter_duff_blend.vert
4326143256
FILE: ../../../flutter/impeller/entity/shaders/blending/vertices_uber.frag
43262-
FILE: ../../../flutter/impeller/entity/shaders/blending/vertices_uber.vert
43263-
FILE: ../../../flutter/impeller/entity/shaders/border_mask_blur.frag
43264-
FILE: ../../../flutter/impeller/entity/shaders/border_mask_blur.vert
4326543257
FILE: ../../../flutter/impeller/entity/shaders/clip.frag
4326643258
FILE: ../../../flutter/impeller/entity/shaders/clip.vert
4326743259
FILE: ../../../flutter/impeller/entity/shaders/debug/checkerboard.frag
4326843260
FILE: ../../../flutter/impeller/entity/shaders/debug/checkerboard.vert
43261+
FILE: ../../../flutter/impeller/entity/shaders/filters/border_mask_blur.frag
4326943262
FILE: ../../../flutter/impeller/entity/shaders/filters/color_matrix_color_filter.frag
43270-
FILE: ../../../flutter/impeller/entity/shaders/filters/filter.vert
43263+
FILE: ../../../flutter/impeller/entity/shaders/filters/filter_position.vert
43264+
FILE: ../../../flutter/impeller/entity/shaders/filters/filter_position_uv.vert
43265+
FILE: ../../../flutter/impeller/entity/shaders/filters/gaussian.frag
4327143266
FILE: ../../../flutter/impeller/entity/shaders/filters/linear_to_srgb_filter.frag
4327243267
FILE: ../../../flutter/impeller/entity/shaders/filters/morphology_filter.frag
43273-
FILE: ../../../flutter/impeller/entity/shaders/filters/morphology_filter.vert
4327443268
FILE: ../../../flutter/impeller/entity/shaders/filters/srgb_to_linear_filter.frag
4327543269
FILE: ../../../flutter/impeller/entity/shaders/filters/yuv_to_rgb_filter.frag
43276-
FILE: ../../../flutter/impeller/entity/shaders/gaussian_blur/kernel.glsl
43277-
FILE: ../../../flutter/impeller/entity/shaders/gaussian_blur/kernel.vert
43278-
FILE: ../../../flutter/impeller/entity/shaders/gaussian_blur/kernel_decal.frag
43279-
FILE: ../../../flutter/impeller/entity/shaders/gaussian_blur/kernel_nodecal.frag
4328043270
FILE: ../../../flutter/impeller/entity/shaders/glyph_atlas.frag
4328143271
FILE: ../../../flutter/impeller/entity/shaders/glyph_atlas.vert
4328243272
FILE: ../../../flutter/impeller/entity/shaders/glyph_atlas_color.frag

impeller/entity/BUILD.gn

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,9 @@ impeller_shaders("entity_shaders") {
1616
shaders = [
1717
"shaders/blending/advanced_blend.vert",
1818
"shaders/blending/advanced_blend.frag",
19-
"shaders/border_mask_blur.frag",
20-
"shaders/border_mask_blur.vert",
2119
"shaders/clip.frag",
2220
"shaders/clip.vert",
2321
"shaders/gradients/conical_gradient_fill.frag",
24-
"shaders/gaussian_blur/kernel_decal.frag",
25-
"shaders/gaussian_blur/kernel_nodecal.frag",
26-
"shaders/gaussian_blur/kernel.vert",
2722
"shaders/glyph_atlas.frag",
2823
"shaders/glyph_atlas_color.frag",
2924
"shaders/glyph_atlas.vert",
@@ -46,15 +41,16 @@ impeller_shaders("entity_shaders") {
4641
"shaders/vertices.frag",
4742
"shaders/blending/porter_duff_blend.frag",
4843
"shaders/blending/porter_duff_blend.vert",
44+
"shaders/filters/border_mask_blur.frag",
4945
"shaders/filters/color_matrix_color_filter.frag",
50-
"shaders/filters/filter.vert",
46+
"shaders/filters/filter_position.vert",
47+
"shaders/filters/filter_position_uv.vert",
48+
"shaders/filters/gaussian.frag",
5149
"shaders/filters/yuv_to_rgb_filter.frag",
5250
"shaders/filters/srgb_to_linear_filter.frag",
5351
"shaders/filters/linear_to_srgb_filter.frag",
5452
"shaders/filters/morphology_filter.frag",
55-
"shaders/filters/morphology_filter.vert",
5653
"shaders/blending/vertices_uber.frag",
57-
"shaders/blending/vertices_uber.vert",
5854
]
5955

6056
if (impeller_debug) {

impeller/entity/contents/content_context.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,8 +422,8 @@ ContentContext::ContentContext(
422422
rrect_blur_pipelines_.CreateDefault(*context_, options_trianglestrip);
423423
texture_strict_src_pipelines_.CreateDefault(*context_, options);
424424
tiled_texture_pipelines_.CreateDefault(*context_, options, {supports_decal});
425-
kernel_decal_pipelines_.CreateDefault(*context_, options_trianglestrip);
426-
kernel_nodecal_pipelines_.CreateDefault(*context_, options_trianglestrip);
425+
gaussian_blur_pipelines_.CreateDefault(*context_, options_trianglestrip,
426+
{supports_decal});
427427
border_mask_blur_pipelines_.CreateDefault(*context_, options_trianglestrip);
428428
morphology_filter_pipelines_.CreateDefault(*context_, options_trianglestrip,
429429
{supports_decal});

impeller/entity/contents/content_context.h

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,23 @@
3030
#endif // IMPELLER_DEBUG
3131

3232
#include "impeller/entity/border_mask_blur.frag.h"
33-
#include "impeller/entity/border_mask_blur.vert.h"
3433
#include "impeller/entity/clip.frag.h"
3534
#include "impeller/entity/clip.vert.h"
3635
#include "impeller/entity/color_matrix_color_filter.frag.h"
3736
#include "impeller/entity/conical_gradient_fill.frag.h"
38-
#include "impeller/entity/filter.vert.h"
37+
#include "impeller/entity/filter_position.vert.h"
38+
#include "impeller/entity/filter_position_uv.vert.h"
39+
#include "impeller/entity/gaussian.frag.h"
3940
#include "impeller/entity/glyph_atlas.frag.h"
4041
#include "impeller/entity/glyph_atlas.vert.h"
4142
#include "impeller/entity/glyph_atlas_color.frag.h"
4243
#include "impeller/entity/gradient_fill.vert.h"
4344
#include "impeller/entity/linear_gradient_fill.frag.h"
4445
#include "impeller/entity/linear_to_srgb_filter.frag.h"
4546
#include "impeller/entity/morphology_filter.frag.h"
46-
#include "impeller/entity/morphology_filter.vert.h"
4747
#include "impeller/entity/porter_duff_blend.frag.h"
4848
#include "impeller/entity/porter_duff_blend.vert.h"
49+
#include "impeller/entity/position_color.vert.h"
4950
#include "impeller/entity/radial_gradient_fill.frag.h"
5051
#include "impeller/entity/rrect_blur.frag.h"
5152
#include "impeller/entity/rrect_blur.vert.h"
@@ -61,12 +62,6 @@
6162
#include "impeller/entity/vertices.frag.h"
6263
#include "impeller/entity/yuv_to_rgb_filter.frag.h"
6364

64-
#include "impeller/entity/kernel.vert.h"
65-
#include "impeller/entity/kernel_decal.frag.h"
66-
#include "impeller/entity/kernel_nodecal.frag.h"
67-
68-
#include "impeller/entity/position_color.vert.h"
69-
7065
#include "impeller/typographer/glyph_atlas.h"
7166

7267
#include "impeller/entity/conical_gradient_ssbo_fill.frag.h"
@@ -81,7 +76,6 @@
8176
#include "impeller/entity/framebuffer_blend.vert.h"
8277

8378
#include "impeller/entity/vertices_uber.frag.h"
84-
#include "impeller/entity/vertices_uber.vert.h"
8579

8680
#ifdef IMPELLER_ENABLE_OPENGLES
8781
#include "impeller/entity/tiled_texture_fill_external.frag.h"
@@ -134,23 +128,27 @@ using TextureStrictSrcPipeline =
134128
using TiledTexturePipeline =
135129
RenderPipelineHandle<TextureUvFillVertexShader,
136130
TiledTextureFillFragmentShader>;
137-
using KernelDecalPipeline =
138-
RenderPipelineHandle<KernelVertexShader, KernelDecalFragmentShader>;
139-
using KernelPipeline =
140-
RenderPipelineHandle<KernelVertexShader, KernelNodecalFragmentShader>;
131+
using GaussianBlurPipeline =
132+
RenderPipelineHandle<FilterPositionUvVertexShader, GaussianFragmentShader>;
141133
using BorderMaskBlurPipeline =
142-
RenderPipelineHandle<BorderMaskBlurVertexShader,
134+
RenderPipelineHandle<FilterPositionUvVertexShader,
143135
BorderMaskBlurFragmentShader>;
144136
using MorphologyFilterPipeline =
145-
RenderPipelineHandle<MorphologyFilterVertexShader,
137+
RenderPipelineHandle<FilterPositionUvVertexShader,
146138
MorphologyFilterFragmentShader>;
147139
using ColorMatrixColorFilterPipeline =
148-
RenderPipelineHandle<FilterVertexShader,
140+
RenderPipelineHandle<FilterPositionVertexShader,
149141
ColorMatrixColorFilterFragmentShader>;
150142
using LinearToSrgbFilterPipeline =
151-
RenderPipelineHandle<FilterVertexShader, LinearToSrgbFilterFragmentShader>;
143+
RenderPipelineHandle<FilterPositionVertexShader,
144+
LinearToSrgbFilterFragmentShader>;
152145
using SrgbToLinearFilterPipeline =
153-
RenderPipelineHandle<FilterVertexShader, SrgbToLinearFilterFragmentShader>;
146+
RenderPipelineHandle<FilterPositionVertexShader,
147+
SrgbToLinearFilterFragmentShader>;
148+
using YUVToRGBFilterPipeline =
149+
RenderPipelineHandle<FilterPositionVertexShader,
150+
YuvToRgbFilterFragmentShader>;
151+
154152
using GlyphAtlasPipeline =
155153
RenderPipelineHandle<GlyphAtlasVertexShader, GlyphAtlasFragmentShader>;
156154
using GlyphAtlasColorPipeline =
@@ -162,8 +160,6 @@ using ClipPipeline = RenderPipelineHandle<ClipVertexShader, ClipFragmentShader>;
162160

163161
using GeometryColorPipeline =
164162
RenderPipelineHandle<PositionColorVertexShader, VerticesFragmentShader>;
165-
using YUVToRGBFilterPipeline =
166-
RenderPipelineHandle<FilterVertexShader, YuvToRgbFilterFragmentShader>;
167163

168164
// Advanced blends
169165
using BlendColorPipeline = RenderPipelineHandle<AdvancedBlendVertexShader,
@@ -252,8 +248,8 @@ using FramebufferBlendSoftLightPipeline =
252248
FramebufferBlendFragmentShader>;
253249

254250
/// Draw Vertices/Atlas Uber Shader
255-
using VerticesUberShader =
256-
RenderPipelineHandle<VerticesUberVertexShader, VerticesUberFragmentShader>;
251+
using VerticesUberShader = RenderPipelineHandle<PorterDuffBlendVertexShader,
252+
VerticesUberFragmentShader>;
257253

258254
#ifdef IMPELLER_ENABLE_OPENGLES
259255
using TiledTextureExternalPipeline =
@@ -477,14 +473,9 @@ class ContentContext {
477473
return GetPipeline(tiled_texture_pipelines_, opts);
478474
}
479475

480-
std::shared_ptr<Pipeline<PipelineDescriptor>> GetKernelDecalPipeline(
481-
ContentContextOptions opts) const {
482-
return GetPipeline(kernel_decal_pipelines_, opts);
483-
}
484-
485-
std::shared_ptr<Pipeline<PipelineDescriptor>> GetKernelPipeline(
476+
std::shared_ptr<Pipeline<PipelineDescriptor>> GetGaussianBlurPipeline(
486477
ContentContextOptions opts) const {
487-
return GetPipeline(kernel_nodecal_pipelines_, opts);
478+
return GetPipeline(gaussian_blur_pipelines_, opts);
488479
}
489480

490481
std::shared_ptr<Pipeline<PipelineDescriptor>> GetBorderMaskBlurPipeline(
@@ -915,8 +906,7 @@ class ContentContext {
915906
tiled_texture_external_pipelines_;
916907
#endif // IMPELLER_ENABLE_OPENGLES
917908
mutable Variants<TiledTexturePipeline> tiled_texture_pipelines_;
918-
mutable Variants<KernelDecalPipeline> kernel_decal_pipelines_;
919-
mutable Variants<KernelPipeline> kernel_nodecal_pipelines_;
909+
mutable Variants<GaussianBlurPipeline> gaussian_blur_pipelines_;
920910
mutable Variants<BorderMaskBlurPipeline> border_mask_blur_pipelines_;
921911
mutable Variants<MorphologyFilterPipeline> morphology_filter_pipelines_;
922912
mutable Variants<ColorMatrixColorFilterPipeline>

impeller/entity/contents/filters/gaussian_blur_filter_contents.cc

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,22 @@
88

99
#include "flutter/fml/make_copyable.h"
1010
#include "impeller/entity/contents/clip_contents.h"
11-
#include "impeller/entity/contents/color_source_contents.h"
1211
#include "impeller/entity/contents/content_context.h"
1312
#include "impeller/entity/texture_fill.frag.h"
1413
#include "impeller/entity/texture_fill.vert.h"
15-
#include "impeller/renderer/command.h"
1614
#include "impeller/renderer/render_pass.h"
17-
#include "impeller/renderer/texture_mipmap.h"
1815
#include "impeller/renderer/vertex_buffer_builder.h"
1916

2017
namespace impeller {
2118

22-
using GaussianBlurVertexShader = KernelPipeline::VertexShader;
23-
using GaussianBlurFragmentShader = KernelPipeline::FragmentShader;
19+
using GaussianBlurVertexShader = GaussianBlurPipeline::VertexShader;
20+
using GaussianBlurFragmentShader = GaussianBlurPipeline::FragmentShader;
2421

2522
const int32_t GaussianBlurFilterContents::kBlurFilterRequiredMipCount = 4;
2623

2724
namespace {
2825

29-
// 48 comes from kernel.glsl.
26+
// 48 comes from gaussian.frag.
3027
const int32_t kMaxKernelSize = 48;
3128

3229
SamplerDescriptor MakeSamplerDescriptor(MinMagFilter filter,
@@ -155,14 +152,7 @@ fml::StatusOr<RenderTarget> MakeBlurSubpass(
155152

156153
ContentContextOptions options = OptionsFromPass(pass);
157154
options.primitive_type = PrimitiveType::kTriangleStrip;
158-
159-
if (tile_mode == Entity::TileMode::kDecal &&
160-
!renderer.GetDeviceCapabilities()
161-
.SupportsDecalSamplerAddressMode()) {
162-
pass.SetPipeline(renderer.GetKernelDecalPipeline(options));
163-
} else {
164-
pass.SetPipeline(renderer.GetKernelPipeline(options));
165-
}
155+
pass.SetPipeline(renderer.GetGaussianBlurPipeline(options));
166156

167157
BindVertices<GaussianBlurVertexShader>(pass, host_buffer,
168158
{
@@ -181,7 +171,7 @@ fml::StatusOr<RenderTarget> MakeBlurSubpass(
181171
linear_sampler_descriptor));
182172
GaussianBlurVertexShader::BindFrameInfo(
183173
pass, host_buffer.EmplaceUniform(frame_info));
184-
KernelPipeline::FragmentShader::KernelSamples kernel_samples =
174+
GaussianBlurPipeline::FragmentShader::KernelSamples kernel_samples =
185175
LerpHackKernelSamples(GenerateBlurInfo(blur_info));
186176
FML_CHECK(kernel_samples.sample_count < kMaxKernelSize);
187177
GaussianBlurFragmentShader::BindKernelSamples(
@@ -600,9 +590,9 @@ Scalar GaussianBlurFilterContents::ScaleSigma(Scalar sigma) {
600590
return clamped * scalar;
601591
}
602592

603-
KernelPipeline::FragmentShader::KernelSamples GenerateBlurInfo(
593+
GaussianBlurPipeline::FragmentShader::KernelSamples GenerateBlurInfo(
604594
BlurParameters parameters) {
605-
KernelPipeline::FragmentShader::KernelSamples result;
595+
GaussianBlurPipeline::FragmentShader::KernelSamples result;
606596
result.sample_count =
607597
((2 * parameters.blur_radius) / parameters.step_size) + 1;
608598

@@ -617,7 +607,7 @@ KernelPipeline::FragmentShader::KernelSamples GenerateBlurInfo(
617607
Scalar tally = 0.0f;
618608
for (int i = 0; i < result.sample_count; ++i) {
619609
int x = x_offset + (i * parameters.step_size) - parameters.blur_radius;
620-
result.samples[i] = KernelPipeline::FragmentShader::KernelSample{
610+
result.samples[i] = GaussianBlurPipeline::FragmentShader::KernelSample{
621611
.uv_offset = parameters.blur_uv_offset * x,
622612
.coefficient = expf(-0.5f * (x * x) /
623613
(parameters.blur_sigma * parameters.blur_sigma)) /
@@ -636,20 +626,21 @@ KernelPipeline::FragmentShader::KernelSamples GenerateBlurInfo(
636626

637627
// This works by shrinking the kernel size by 2 and relying on lerp to read
638628
// between the samples.
639-
KernelPipeline::FragmentShader::KernelSamples LerpHackKernelSamples(
640-
KernelPipeline::FragmentShader::KernelSamples parameters) {
641-
KernelPipeline::FragmentShader::KernelSamples result;
629+
GaussianBlurPipeline::FragmentShader::KernelSamples LerpHackKernelSamples(
630+
GaussianBlurPipeline::FragmentShader::KernelSamples parameters) {
631+
GaussianBlurPipeline::FragmentShader::KernelSamples result;
642632
result.sample_count = ((parameters.sample_count - 1) / 2) + 1;
643633
int32_t middle = result.sample_count / 2;
644634
int32_t j = 0;
645635
for (int i = 0; i < result.sample_count; i++) {
646636
if (i == middle) {
647637
result.samples[i] = parameters.samples[j++];
648638
} else {
649-
KernelPipeline::FragmentShader::KernelSample left = parameters.samples[j];
650-
KernelPipeline::FragmentShader::KernelSample right =
639+
GaussianBlurPipeline::FragmentShader::KernelSample left =
640+
parameters.samples[j];
641+
GaussianBlurPipeline::FragmentShader::KernelSample right =
651642
parameters.samples[j + 1];
652-
result.samples[i] = KernelPipeline::FragmentShader::KernelSample{
643+
result.samples[i] = GaussianBlurPipeline::FragmentShader::KernelSample{
653644
.uv_offset = (left.uv_offset * left.coefficient +
654645
right.uv_offset * right.coefficient) /
655646
(left.coefficient + right.coefficient),

impeller/entity/contents/filters/gaussian_blur_filter_contents.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ struct BlurParameters {
1919
int step_size;
2020
};
2121

22-
KernelPipeline::FragmentShader::KernelSamples GenerateBlurInfo(
22+
GaussianBlurPipeline::FragmentShader::KernelSamples GenerateBlurInfo(
2323
BlurParameters parameters);
2424

2525
/// This will shrink the size of a kernel by roughly half by sampling between
2626
/// samples and relying on linear interpolation between the samples.
27-
KernelPipeline::FragmentShader::KernelSamples LerpHackKernelSamples(
28-
KernelPipeline::FragmentShader::KernelSamples samples);
27+
GaussianBlurPipeline::FragmentShader::KernelSamples LerpHackKernelSamples(
28+
GaussianBlurPipeline::FragmentShader::KernelSamples samples);
2929

3030
/// Performs a bidirectional Gaussian blur.
3131
///

0 commit comments

Comments
 (0)