mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 22:00:39 -06:00
VideoBackends: Move SamplerState to common
This commit is contained in:
@ -4,6 +4,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
|
||||
@ -24,49 +25,21 @@ public:
|
||||
SamplerCache(SamplerCache&&) = delete;
|
||||
SamplerCache& operator=(SamplerCache&&) = delete;
|
||||
|
||||
void SetSamplerState(int stage, const TexMode0& tm0, const TexMode1& tm1, bool custom_tex);
|
||||
void SetSamplerState(u32 stage, const SamplerState& state);
|
||||
void InvalidateBinding(u32 stage);
|
||||
|
||||
void Clear();
|
||||
void BindNearestSampler(int stage);
|
||||
void BindLinearSampler(int stage);
|
||||
|
||||
private:
|
||||
struct Params
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
TexMode0 tm0;
|
||||
TexMode1 tm1;
|
||||
};
|
||||
static void SetParameters(GLuint sampler_id, const SamplerState& params);
|
||||
|
||||
u64 hex;
|
||||
};
|
||||
std::map<SamplerState, GLuint> m_cache;
|
||||
std::array<std::pair<SamplerState, GLuint>, 8> m_active_samplers{};
|
||||
|
||||
Params() : hex() {}
|
||||
Params(const TexMode0& _tm0, const TexMode1& _tm1) : tm0(_tm0), tm1(_tm1)
|
||||
{
|
||||
static_assert(sizeof(Params) == 8, "Assuming I can treat this as a 64bit int.");
|
||||
}
|
||||
|
||||
bool operator<(const Params& other) const { return hex < other.hex; }
|
||||
bool operator!=(const Params& other) const { return hex != other.hex; }
|
||||
};
|
||||
|
||||
struct Value
|
||||
{
|
||||
Value() : sampler_id() {}
|
||||
GLuint sampler_id;
|
||||
};
|
||||
|
||||
void SetParameters(GLuint sampler_id, const Params& params);
|
||||
Value& GetEntry(const Params& params);
|
||||
|
||||
std::map<Params, Value> m_cache;
|
||||
std::pair<Params, Value> m_active_samplers[8];
|
||||
|
||||
int m_last_max_anisotropy;
|
||||
u32 m_sampler_id[2];
|
||||
GLuint m_point_sampler;
|
||||
GLuint m_linear_sampler;
|
||||
};
|
||||
|
||||
extern std::unique_ptr<SamplerCache> g_sampler_cache;
|
||||
|
Reference in New Issue
Block a user