Commit Graph

4294 Commits

Author SHA1 Message Date
Philip Rebohle b5078a7ec0
[dxvk] Reduce context staging buffer size to 4 MiB
Same idea as before, just create a temporary buffer for larger resources.

This can avoid frequent Vulkan memory allocations and deallocations since
many small buffers are more likely to fit into a single memory chunk than
a small number of large buffers, thus reducing the overall memory footprint.
2022-02-14 01:01:34 +01:00
Philip Rebohle 08ecd49c66
[dxvk] Don't suballocate large staging buffer allocations
Otherwise we'll risk wasting almost half the staging buffer memory.
Creating a temporary buffer is cheap enough, so just do that.
2022-02-14 01:00:48 +01:00
Philip Rebohle b9201db554
[dxvk] Remove unused trimStagingBuffers method 2022-02-13 02:08:20 +01:00
Philip Rebohle 95b7e6c030
[dxvk] Rework HUD font texture initialization
We really shouldn't need a separate context for this.
2022-02-13 02:08:20 +01:00
Philip Rebohle 425fce9200
[dxvk] Introduce transient memory flag for staging buffers
Potentially reduces fragmentation by putting short-lived staging buffers
and sysmem resources created by the application into different memory pools.
2022-02-13 02:08:20 +01:00
Philip Rebohle 9d4be00fa7
[dxvk] Allow large sysmem allocations on 64-bit platforms again
Since we frequently discard staging buffers now, having larger chunks
is actually beneficial again.
2022-02-13 02:08:20 +01:00
Philip Rebohle d262bebd90
[dxvk] Remove DxvkStagingDataAlloc
Unused and overly clunky.
2022-02-13 02:08:20 +01:00
Philip Rebohle 8518572d13
[dxvk] Use DxvkStagingBuffer in DxvkContext 2022-02-13 02:08:20 +01:00
Philip Rebohle 1b88bc624a
[dxvk] Remove unused updateImage function 2022-02-13 02:08:20 +01:00
Philip Rebohle 3b833988fe
[dxvk] Use staging buffer for gamma ramp uploads 2022-02-13 02:08:19 +01:00
Philip Rebohle 80c5b61e26
[d3d11] Use DxvkStagingBuffer in D3D11DeviceContext 2022-02-13 02:08:19 +01:00
Philip Rebohle 0bc19472e8
[dxvk] Introduce DxvkStagingBuffer 2022-02-13 02:08:19 +01:00
Philip Rebohle 82518de4b4
[dxvk] Discard buffer slice in copyBuffer if possible 2022-02-13 02:08:19 +01:00
Philip Rebohle 5e763853e5
[dxvk] Introduce tryInvalidateDeviceLocalBuffer 2022-02-13 02:08:19 +01:00
Philip Rebohle 6a3de28f94
[dxvk] Repurpose updateBuffer
Only allow it for very small updates where scheduling a copy command would
likely be slower. Some drivers have special paths for tiny updates.
2022-02-13 02:08:19 +01:00
Philip Rebohle a03c038f03
[d3d9] Exit early in ProcessVertices if the vertex count is 0
We don't want to pass a zero-sized copy to the backend.
2022-02-13 02:08:19 +01:00
Philip Rebohle 26381fd5df
[d3d11] Only use updateBuffer for very small buffer updates
Otherwise we may end up with significant copy overhead on the CS thread.
2022-02-13 02:08:19 +01:00
Philip Rebohle ac9ed96457
[hud] Add HUD item to show CS thread stats 2022-02-13 02:07:48 +01:00
Philip Rebohle b02496a8f4
[dxvk] Add CS thread stat counters 2022-02-13 02:07:48 +01:00
Philip Rebohle d96c5a1076
[dxvk] Store DXVK device inside DxvkCsThread object 2022-02-13 02:07:48 +01:00
Philip Rebohle 52666a33c6
[dxvk] Expose a way to increment stat counters
In case the counters come from external sources.
2022-02-13 02:07:45 +01:00
Philip Rebohle b6121c84aa
[d3d11] Avoid GPU synchronization on mapping images when possible 2022-02-11 18:17:35 +01:00
Philip Rebohle 3f16de157b
[d3d11] Avoid GPU synchronization on mapping buffers when possible 2022-02-11 18:17:35 +01:00
Philip Rebohle c82b504e52
[d3d11] Further simplify D3D11DeferredContextMapEntry
And no longer create a strong reference to the given resource.
2022-02-11 18:17:35 +01:00
Philip Rebohle 2dcdd20517
[d3d11] Change D3D11ResourceRef constructor to be more useful 2022-02-11 18:17:35 +01:00
Philip Rebohle 0364a79eb0
[d3d11] Optimize Unmap on immediate contexts 2022-02-11 18:17:35 +01:00
Philip Rebohle 5a6711ed1d
[d3d11] Synchronize only to given sequence number in WaitForResources
Avoids costly thread synchronization when mapping staging resources
for reading, as well as some other scenarios.
2022-02-11 18:17:35 +01:00
Philip Rebohle afe1840c74
[d3d11] Track resources when dispatching Cubin shaders as well 2022-02-11 18:17:35 +01:00
Philip Rebohle bb16734a43
[d3d11] Implement sequence number tracking on deferred contexts 2022-02-11 18:17:35 +01:00
Philip Rebohle 2eeb7295c8
[d3d11] Increment sequence number when submitting command lists
This does not do any tracking on deferred contexts just yet.
2022-02-11 18:17:35 +01:00
Philip Rebohle d33dac569c
[d3d11] Track last staging resource usage with a sequence number 2022-02-11 18:17:35 +01:00
Philip Rebohle 55a6b80919
[d3d11] Add method to query D3D11 resource dimension from texture 2022-02-11 18:17:35 +01:00
Philip Rebohle d870b6ff38
[d3d11] Store ID3D11Resource interface in D3D11CommonTexture
Going full circle here, but it's actually useful now.
2022-02-11 18:17:35 +01:00
Philip Rebohle 9c32beccdc
[d3d11] Store buffer map mode in D3D11Buffer
Matches what we do for textures, and makes it so that we don't
have to dereference the resource pointer to figure this out.
2022-02-11 18:17:35 +01:00
Philip Rebohle 2db56fa160
[d3d11] Add D3D11ResourceRef
Implements private ref counting for arbitrary resource types.
2022-02-11 18:17:35 +01:00
Philip Rebohle 391c9e13ca
[d3d11] Add ResourceAddRef/ReleasePrivate with known resource type 2022-02-11 18:17:35 +01:00
Philip Rebohle 6b91b87dba
[dxvk] Reorganize DxvkBuffer data structure
Should hopefully reduce CPU cache conflicts.
2022-02-11 18:17:34 +01:00
Philip Rebohle 37f3d9208b
[dxvk] Introduce sequence numbers for CS submissions 2022-02-11 18:17:34 +01:00
Philip Rebohle bc137fdf37
[util] Enable apitrace mode for AoE2 Definitive Edition
Fixes #2491.
2022-02-11 18:15:46 +01:00
Georg Lehmann 939040b178 [build] Avoid meson warning.
WARNING: You should add the boolean check kwarg to the run_command call.
         It currently defaults to false,
         but it will default to true in future releases of meson.

Stupid change, stupid warning, stupid fix.
2022-02-10 15:18:25 +01:00
Krzysztof Bogacki 4f3bb3df12 [build] Use MSBuild backend on Windows CI
Also merge Prepare and Build steps to prevent environment variable leaks and apply some minor formatting changes.
2022-02-09 13:29:24 +01:00
Philip Rebohle 6c862b63a2
[d3d11] Optimize UpdateSubresource for small buffer updates
Some games use UpdateSubresource to upload constant buffers in
between draws, so this path should be as fast as possible.

Also fixes a potential issue when using D3D11_COPY_NO_OVERWRITE
on deferred contexts, since the Map requirements don't hold here.
2022-02-07 16:14:02 +01:00
Philip Rebohle b746e1352b
[d3d11] Implement suballocation from staging buffer for small updates 2022-02-07 16:14:01 +01:00
Philip Rebohle 7cf78a2c75
[d3d11] Fix confusing code in deferred context Map
This did work, but we shouldn't use an object that was already moved.
2022-02-07 16:14:01 +01:00
Philip Rebohle e4dbd1e337
[d3d11] Remove unused parameters from deferred context Map functions 2022-02-07 16:13:58 +01:00
Krzysztof Bogacki b5d7b42e65 [d3d11] Add D3D11On12CreateDevice stub 2022-02-07 03:21:43 +01:00
Philip Rebohle 2673d74270
[dxvk] Add version fixup for proprietary Intel drivers 2022-02-02 14:56:59 +01:00
Philip Rebohle badc53b1bb
[dxvk] Rework driver version fixup to use driver ID instead of vendor ID 2022-02-02 14:56:55 +01:00
Georg Lehmann 58909e4582 [dxvk] Fix MSVC build. 2022-02-01 18:50:00 +00:00
Krzysztof Bogacki c50a650b13 [build] MSVC CI 2022-02-01 18:50:00 +00:00