Unravel Engine C++ Reference
Loading...
Searching...
No Matches
evictable.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4
5namespace gfx
6{
7
9enum class evict_state : std::uint8_t
10{
11 resident,
12 evicted,
13};
14
16enum class evict_class : std::uint8_t
17{
19 evictable,
20};
21
22namespace detail
23{
26extern std::uint64_t g_eviction_frame;
27} // namespace detail
28
30
39{
40public:
41 ievictable() = default;
42 ievictable(const ievictable&) = delete;
43 auto operator=(const ievictable&) -> ievictable& = delete;
45 auto operator=(ievictable&&) -> ievictable& = delete;
46 virtual ~ievictable() = default;
47
49 virtual auto on_evict() -> std::uint64_t = 0;
50
52 virtual auto on_restore() -> bool = 0;
53
55 [[nodiscard]] virtual auto gpu_size() const -> std::uint64_t = 0;
56
57 [[nodiscard]] auto get_evict_class() const -> evict_class
58 {
59 return evict_class_;
60 }
61
62 [[nodiscard]] auto get_evict_state() const -> evict_state
63 {
64 return evict_state_;
65 }
66
67 [[nodiscard]] auto get_last_use_frame() const -> std::uint64_t
68 {
69 return last_use_frame_;
70 }
71
72 [[nodiscard]] auto get_use_count() const -> std::uint64_t
73 {
74 return use_count_;
75 }
76
80 void touch() const noexcept
81 {
83 ++use_count_;
84 }
85
86protected:
88 mutable std::uint64_t last_use_frame_{0};
90 mutable std::uint64_t use_count_{0};
95
96private:
98 std::uint32_t evict_slot_{UINT32_MAX};
100 std::uint64_t evict_frame_{0};
101
102 friend class eviction_registry;
103};
104
105} // namespace gfx
ievictable(ievictable &&)=delete
virtual auto gpu_size() const -> std::uint64_t=0
Approximate GPU footprint of the resource in bytes.
auto operator=(const ievictable &) -> ievictable &=delete
auto get_evict_class() const -> evict_class
Definition evictable.h:57
virtual auto on_restore() -> bool=0
Recreate the GPU handle from the CPU backing. Returns true on success.
evict_class evict_class_
Eligibility class. Set once when the resource opts into eviction.
Definition evictable.h:94
std::uint64_t last_use_frame_
Frame the resource was last used on (heuristic, written from touch).
Definition evictable.h:88
virtual auto on_evict() -> std::uint64_t=0
Release the GPU handle. Returns the number of GPU bytes freed. Must be idempotent.
void touch() const noexcept
Definition evictable.h:80
evict_state evict_state_
Current residency state. Written by the owning resource during evict/restore.
Definition evictable.h:92
std::uint64_t use_count_
Number of times the resource was used (heuristic, written from touch).
Definition evictable.h:90
ievictable(const ievictable &)=delete
auto operator=(ievictable &&) -> ievictable &=delete
auto get_evict_state() const -> evict_state
Definition evictable.h:62
auto get_use_count() const -> std::uint64_t
Definition evictable.h:72
ievictable()=default
virtual ~ievictable()=default
auto get_last_use_frame() const -> std::uint64_t
Definition evictable.h:67
std::uint64_t g_eviction_frame
Definition eviction.cpp:18
evict_class
Eviction eligibility of a tracked resource.
Definition evictable.h:17
@ non_evictable
No CPU backing (render targets, uniforms, ...). Never registered.
@ evictable
May be evicted by a sweep.
evict_state
Residency state of a GPU resource tracked by the eviction system.
Definition evictable.h:10
@ evicted
GPU handle was destroyed; a CPU-side backing is retained for restore.
@ resident
GPU handle is live and usable.
Hash specialization for batch_key to enable use in std::unordered_map.