From 5b31395fbfffabdd1cc9b452eb12d9dd63110a6d Mon Sep 17 00:00:00 2001 From: skal Date: Tue, 10 Feb 2026 21:23:47 +0100 Subject: fix: Use ClampToEdge sampler for CNN to avoid edge wrapping PyTorch Conv2d uses zero-padding; shader was using Repeat mode which wraps edges. ClampToEdge better approximates zero-padding behavior. Co-Authored-By: Claude Sonnet 4.5 --- src/gpu/effects/cnn_effect.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gpu/effects/cnn_effect.cc b/src/gpu/effects/cnn_effect.cc index d74187c..e12c26f 100644 --- a/src/gpu/effects/cnn_effect.cc +++ b/src/gpu/effects/cnn_effect.cc @@ -97,7 +97,8 @@ void CNNEffect::update_bind_group(WGPUTextureView input_view) { wgpuBindGroupRelease(bind_group_); WGPUBindGroupLayout bgl = wgpuRenderPipelineGetBindGroupLayout(pipeline_, 0); - WGPUSampler sampler = SamplerCache::Get().get_or_create(ctx_.device, SamplerCache::linear()); + // Use clamp (not repeat) to match PyTorch Conv2d zero-padding behavior + WGPUSampler sampler = SamplerCache::Get().get_or_create(ctx_.device, SamplerCache::clamp()); bind_group_ = BindGroupBuilder() .sampler(0, sampler) -- cgit v1.2.3