diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-28 08:36:41 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-28 08:36:41 +0100 |
| commit | af06b3512598c81c472fdbbeb4994c7eb8621d4c (patch) | |
| tree | ca6f56996470913262748e6d9b1a10ac1670ef8f /src/gpu/sampler_cache.cc | |
| parent | 514b8d7141d1346c48c9e301d2b89fd5e5f42cc9 (diff) | |
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 <noreply@anthropic.com>
Diffstat (limited to 'src/gpu/sampler_cache.cc')
| -rw-r--r-- | src/gpu/sampler_cache.cc | 32 |
1 files changed, 32 insertions, 0 deletions
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(); +} |
