Philip Rebohle
713b76bea5
[dxvk] Rework image creation
...
Uses DxvkResourceAllocation to manage image backing storage,
which will allow invalidating images in the future.
2024-09-26 17:37:50 +02:00
Philip Rebohle
d7e1794e29
[dxvk] Add function to import existing Vulkan image
2024-09-26 17:37:50 +02:00
Philip Rebohle
eec4f0fb35
[dxvk] Implement sparse image creation in allocator
2024-09-26 17:37:50 +02:00
Philip Rebohle
bcd12a5b56
[dxvk] Refactor sparse page table initialization for images
2024-09-26 17:37:50 +02:00
Philip Rebohle
0f23a17d8f
[dxvk] Refactor sparse page allocation
...
Uses the new allocator directly.
2024-09-26 17:37:50 +02:00
Philip Rebohle
af4a2f7973
[dxvk] Introduce DxvkResourceMemoryInfo
...
And replace the old sparse thing.
2024-09-26 17:37:50 +02:00
Philip Rebohle
bbd2461c8f
[dxvk] Reimplement sparse buffer support
2024-09-26 17:37:50 +02:00
Philip Rebohle
1ba6b81901
[dxvk] Reimplement imported buffers
2024-09-26 17:37:50 +02:00
Philip Rebohle
5263307c4a
[dxvk] Improve lifetime tracking logic
...
Reduces ref counting overhead on the CS thread a bit.
2024-09-26 17:37:50 +02:00
Philip Rebohle
7ac9918b39
[hud] Add cache statistics to detailed memory item
2024-09-26 17:37:50 +02:00
Philip Rebohle
9cf72b5b19
[dxvk] Implement basic pool balancing for shared allocation cache
...
This makes the entire cache available to all allocation sizes rather than
having fixed-size pools for every allocation size. Improves hit rate in
games that primarily use one constant buffer size.
2024-09-26 17:37:50 +02:00
Philip Rebohle
428b1087a0
[dxvk] Implement shared cache statistics
2024-09-26 17:37:50 +02:00
Philip Rebohle
2722a41675
[dxvk] Implement shared allocation cache
...
Allows refilling local caches in constant time.
2024-09-26 17:37:50 +02:00
Philip Rebohle
9a51849920
[d3d11] Use allocation cache for dynamic buffers
2024-09-26 17:37:50 +02:00
Philip Rebohle
4db0007af3
[dxvk] Implement local allocation cache
2024-09-26 17:37:50 +02:00
Philip Rebohle
93547aec8d
[dxvk] Do not track buffer view objects
...
No longer necessary as they have the same lifetime as the
parent buffer now. Only track the buffers themselves.
2024-09-26 17:37:50 +02:00
Philip Rebohle
088ba404a6
[dxvk] Rework buffer view creation
2024-09-26 17:37:50 +02:00
Philip Rebohle
1fd3c8040d
[dxvk] Remove DxvkBufferAllocation
2024-09-26 17:37:50 +02:00
Philip Rebohle
14990dbb49
[dxvk] Rework buffer slice allocation
...
Temporary solution that hits the allocator on every single invalidation,
which isn't great but will do for now.
2024-09-26 17:37:50 +02:00
Philip Rebohle
ec2f43e5e3
[dxvk] Make DxvkResource manage its own destruction
...
Necessary for actual resource refactors. We want view objects
to use the resource's reference count wehenever possible.
2024-09-26 17:37:50 +02:00
Philip Rebohle
10164fdf4d
[dxvk] Store GPU address for allocated chunk memory
2024-09-26 17:37:50 +02:00
Philip Rebohle
51649f6da6
[dxvk] Add function to create image resource
2024-09-26 17:37:50 +02:00
Philip Rebohle
5813e7c031
[dxvk] Add function to create buffer resource
2024-09-26 17:37:50 +02:00
Philip Rebohle
00f7545d15
[dxvk] Add helper to get memory type mask for buffer usage
2024-09-26 17:37:50 +02:00
Philip Rebohle
e80dd6db5f
[dxvk] Cache memory type mask with global buffer support
2024-09-26 17:37:50 +02:00
Philip Rebohle
3bee390d91
[dxvk] Don't log memory errors prematurely
...
Fallback allocations are a thing.
2024-09-26 17:37:50 +02:00
Philip Rebohle
f36a536288
[dxvk] Use DxvkResourceAllocation internally
...
Changes DxvkMemory to be nothing more than a wrapper.
2024-09-26 17:37:50 +02:00
Philip Rebohle
5dd7a29261
[dxvk] Introduce DxvkResourceAllocation
2024-09-26 17:37:50 +02:00
Philip Rebohle
4064c89e8c
[dxvk] Remove legacy buffer renaming interface
2024-09-26 17:37:50 +02:00
Philip Rebohle
6f6e75b4b8
[d3d9] Use DxvkBufferAllocation where appropriate
2024-09-26 17:37:50 +02:00
Philip Rebohle
8e45a60542
[d3d11] Use DxvkBufferAllocation where appropriate
2024-09-26 17:37:50 +02:00
Philip Rebohle
eae66201f6
[dxvk] Use DxvkBufferAllocation for HUD rendering
2024-09-26 17:37:50 +02:00
Philip Rebohle
75dadf2c1c
[dxvk] Use DxvkBufferAllocation in swap chain blitter
2024-09-26 17:37:50 +02:00
Philip Rebohle
5c2f56c9cc
[dxvk] Introduce DxvkBufferAllocation
...
For now, this is merely a wrapper around the existing buffer slice
struct in order to allow easier refactoring.
2024-09-26 17:37:50 +02:00
Philip Rebohle
d0832f8431
[vulkan] Move stage and access mask definitions to header
2024-09-26 17:37:50 +02:00
Philip Rebohle
7ec75aaf81
[util] Make likely/unlikely less annoying to use
2024-09-26 17:37:50 +02:00
Philip Rebohle
888906a6da
[util] Add some functionality to smart pointer
...
Basically lets us deal with objects that manage their own destruction,
which ideally shold be all of them at some point.
Also adds some missing comparison operators.
2024-09-26 17:37:50 +02:00
Philip Rebohle
06baa48c2b
[dxvk] Align allocation size to create global buffer
2024-09-26 13:13:48 +02:00
Philip Rebohle
401ca41091
[dxvk] Do not always keep an empty chunk around
...
Outdated thinking, we have a 20 second timer on this which should
be more than enough to ensure we're not spamming device memory
allocations.
2024-09-26 13:13:48 +02:00
Philip Rebohle
3cd7e3efb5
[dxvk] Tweak memory allocation behaviour on mapped memory types
2024-09-26 13:13:48 +02:00
Philip Rebohle
5c8728abd2
[hud] Use different colors to highlight mapped or non-mapped allocations
...
Useful on UMA systems or when we have to fall back to system memory.
2024-09-26 13:13:48 +02:00
Philip Rebohle
d00ca261af
[dxvk] Use worker to update adapter's memory statistics
...
Takes a bunch of pointer indirections and atomics off the hot path.
2024-09-26 13:13:48 +02:00
Philip Rebohle
27088beea8
[dxvk] Use worker thread to periodically free unused memory
...
System memory allocations typically peak very high while loading, but
just sit there unused afterwards. This allows us to free them based
on when they have last been used.
Works well in practice since best-fit avoids using empty chunks as much
as possible.
2024-09-26 13:13:48 +02:00
Philip Rebohle
e1fd2bff2c
[dxvk] Rewrite memory allocator
...
Uses a single allocator pair per memory type in order to make memory
allocations on the entire memory pool faster, and further reduce
fragmentation by applying the best fit strategy to the whole memory
pool.
2024-09-26 13:13:48 +02:00
Philip Rebohle
3a4dadb528
[dxvk] Add chunk concept to page allocator
...
This allows the allocator to operate on the entire allocated memory pool.
2024-09-26 13:13:48 +02:00
Philip Rebohle
266b99ad8d
[hud] Add HUD item to visualize memory chunk allocation
2024-09-26 13:13:48 +02:00
Philip Rebohle
f679d7d90f
[dxvk] Add detailed allocation statistics
2024-09-26 13:13:48 +02:00
Philip Rebohle
b46ef2ceff
[dxvk] Move memory statistics from memory types to heaps
2024-09-26 13:13:48 +02:00
Philip Rebohle
35fea6475d
[dxvk] Tune small buffer allocation sizes
...
The pool allocator works on powers of two, so buffers should too.
2024-09-26 13:13:48 +02:00
Philip Rebohle
3faa1a76da
[dxvk] Simplify memory chunk allocation
...
Reduces overall waste of memory by reusing already allocated
chunks more aggressively.
2024-09-26 13:13:48 +02:00