diff options
| author | bunnei <bunneidev@gmail.com> | 2020-06-13 13:48:27 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-13 13:48:27 -0400 |
| commit | c2ea1e1bcb88f8e307e54cf588829a516b40258e (patch) | |
| tree | 3975cb756ef9d289cc13f3f6dc2a302dacc2c758 /src/video_core/shader/registry.cpp | |
| parent | 563388756951e06a2eeb4fa1e8c806993f34f4a9 (diff) | |
| parent | 5b2b6d594c6cfa77c3fb92faee63ad524bfe7204 (diff) | |
Merge pull request #4049 from ReinUsesLisp/separate-samplers
shader/texture: Join separate image and sampler pairs offline
Diffstat (limited to 'src/video_core/shader/registry.cpp')
| -rw-r--r-- | src/video_core/shader/registry.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/video_core/shader/registry.cpp b/src/video_core/shader/registry.cpp index af70b3f35..cdf274e54 100644 --- a/src/video_core/shader/registry.cpp +++ b/src/video_core/shader/registry.cpp @@ -93,6 +93,26 @@ std::optional<SamplerDescriptor> Registry::ObtainBoundSampler(u32 offset) { return value; } +std::optional<Tegra::Engines::SamplerDescriptor> Registry::ObtainSeparateSampler( + std::pair<u32, u32> buffers, std::pair<u32, u32> offsets) { + SeparateSamplerKey key; + key.buffers = buffers; + key.offsets = offsets; + const auto iter = separate_samplers.find(key); + if (iter != separate_samplers.end()) { + return iter->second; + } + if (!engine) { + return std::nullopt; + } + + const u32 handle_1 = engine->AccessConstBuffer32(stage, key.buffers.first, key.offsets.first); + const u32 handle_2 = engine->AccessConstBuffer32(stage, key.buffers.second, key.offsets.second); + const SamplerDescriptor value = engine->AccessSampler(handle_1 | handle_2); + separate_samplers.emplace(key, value); + return value; +} + std::optional<Tegra::Engines::SamplerDescriptor> Registry::ObtainBindlessSampler(u32 buffer, u32 offset) { const std::pair key = {buffer, offset}; |
