2e655f73b8
* rasterizer_cache: Switch to template * Eliminates all opengl references in the rasterizer cache headers thus completing the backend abstraction * rasterizer_cache: Switch to page table * Surface storage isn't particularly interval sensitive so we can use a page table to make it faster * rasterizer_cache: Move sampler management out of rasterizer cache * rasterizer_cache: Remove shared_ptr usage * Switches to yuzu's slot vector for improved memory locality. * rasterizer_cache: Rework reinterpretation lookup * citra_qt: Per game texture filter * rasterizer_cache: Log additional settings * gl_texture_runtime: Resolve shadow map comment * rasterizer_cache: Don't use float for viewport * gl_texture_runtime: Fix custom allocation recycling * rasterizer_cache: Minor cleanups * Cleanup texture cubes when all the faces have been unregistered from the cache * custom_tex_manager: Allow multiple hash mappings per texture * code: Move slot vector to common * rasterizer_cache: Prevent texture cube crashes * rasterizer_cache: Improve mipmap validation * CanSubRect now works properly when validating multi-level surfaces, for example Dark Moon validates a 4 level surface from a 3 level one and it works * gl_blit_handler: Unbind sampler on reinterpretation
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
// Copyright 2023 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <compare>
|
|
#include "common/hash.h"
|
|
#include "video_core/regs_texturing.h"
|
|
|
|
namespace VideoCore {
|
|
|
|
struct SamplerParams {
|
|
using TextureConfig = Pica::TexturingRegs::TextureConfig;
|
|
TextureConfig::TextureFilter mag_filter;
|
|
TextureConfig::TextureFilter min_filter;
|
|
TextureConfig::TextureFilter mip_filter;
|
|
TextureConfig::WrapMode wrap_s;
|
|
TextureConfig::WrapMode wrap_t;
|
|
u32 border_color = 0;
|
|
u32 lod_min = 0;
|
|
u32 lod_max = 0;
|
|
s32 lod_bias = 0;
|
|
|
|
auto operator<=>(const SamplerParams&) const noexcept = default;
|
|
|
|
const u64 Hash() const {
|
|
return Common::ComputeHash64(this, sizeof(SamplerParams));
|
|
}
|
|
};
|
|
static_assert(std::has_unique_object_representations_v<SamplerParams>,
|
|
"SamplerParams is not suitable for hashing");
|
|
|
|
} // namespace VideoCore
|
|
|
|
namespace std {
|
|
template <>
|
|
struct hash<VideoCore::SamplerParams> {
|
|
std::size_t operator()(const VideoCore::SamplerParams& params) const noexcept {
|
|
return params.Hash();
|
|
}
|
|
};
|
|
} // namespace std
|