From af06b3512598c81c472fdbbeb4994c7eb8621d4c Mon Sep 17 00:00:00 2001 From: skal Date: Sat, 28 Feb 2026 08:36:41 +0100 Subject: refactor(gpu): move SamplerCache impl to .cc, expose single entry point get_or_create() and clear() moved out of the header-only class. SamplerSpec and presets remain inline (trivial, no deps). handoff(Gemini): sampler_cache split into .h/.cc, sampler_cache.cc added to COMMON_GPU_EFFECTS. Co-Authored-By: Claude Sonnet 4.6 --- src/gpu/sampler_cache.cc | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/gpu/sampler_cache.cc (limited to 'src/gpu/sampler_cache.cc') diff --git a/src/gpu/sampler_cache.cc b/src/gpu/sampler_cache.cc new file mode 100644 index 0000000..c61c232 --- /dev/null +++ b/src/gpu/sampler_cache.cc @@ -0,0 +1,32 @@ +// Sampler cache implementation +// See sampler_cache.h +#include "gpu/sampler_cache.h" + +#include "platform/platform.h" +#include "util/fatal_error.h" + +WGPUSampler SamplerCache::get_or_create(WGPUDevice device, + const SamplerSpec& spec) { + HEADLESS_RETURN_VAL_IF_NULL(device, nullptr); + + auto it = cache_.find(spec); + if (it != cache_.end()) + return it->second; + + WGPUSamplerDescriptor desc{}; + desc.addressModeU = spec.u; + desc.addressModeV = spec.v; + desc.magFilter = spec.mag; + desc.minFilter = spec.min; + desc.maxAnisotropy = spec.anisotropy; + WGPUSampler sampler = wgpuDeviceCreateSampler(device, &desc); + cache_[spec] = sampler; + return sampler; +} + +void SamplerCache::clear() { + for (auto& pair : cache_) { + wgpuSamplerRelease(pair.second); + } + cache_.clear(); +} -- cgit v1.2.3