Philip Rebohle
3168626f4b
[d3d11] Support mapping multiple image subresources at the same time
...
Fixes #1066 .
2019-05-20 19:27:11 +02:00
Philip Rebohle
8e9e7963a2
[d3d11] Update mapped buffers of staging textures immediately
...
Improves performance in Lords of the Fallen and The Surge.
Closes #1049 .
Co-authored-by: Robin <robin.kertels@outlook.com>
2019-05-17 12:44:36 +02:00
Philip Rebohle
a1feaa6748
[dxvk] Add aspect mask parameter to clearImageView
2019-05-09 09:10:06 +02:00
Philip Rebohle
644f33a82b
[dxvk] Optimize unbound vertex buffer handling
...
We can actually just set the stride to 0 when binding a null
buffer, so that we can avoid all the runtime tracking.
2019-05-08 00:52:30 +02:00
Philip Rebohle
7687db0303
[dxvk] Remove extra pipeline state
...
This can be expressed with specialization constants now.
2019-05-06 00:18:59 +02:00
Philip Rebohle
492b7db07b
[d3d11] Support count buffer in Set|BindDrawBuffers
2019-05-06 00:08:58 +02:00
Philip Rebohle
1cd8749234
[d3d11] Add stub implementation of D3D11DeviceContextExt
2019-05-06 00:08:58 +02:00
Philip Rebohle
bacb1f7c60
[dxvk] Implement indirct draw commands with indirect count
2019-05-06 00:08:57 +02:00
Philip Rebohle
f733d082f4
[d3d11] Implement D3D11DeviceContext::SwapDeviceContextState
2019-05-04 15:57:57 +02:00
Philip Rebohle
f503ba4c8b
[d3d11] Fix counter value offset in DrawAuto
...
According to the newly released D3D11.3 functional specification,
we're supposed to subtract the offset of the slot 0 vertex buffer
binding from the counter value.
2019-05-02 16:03:52 +02:00
Philip Rebohle
f76fd8fa5d
[d3d11] Minor CPU savings
2019-05-01 03:00:23 +02:00
Philip Rebohle
9fc09c843d
[d3d11] Set up unused extra state for the backend correctly
2019-05-01 01:57:34 +02:00
Danylo Piliaiev
4dd68987d6
[d3d11] Check if uav's counter slice is defined in CopyStructureCount
...
Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
2019-04-30 12:34:27 +02:00
Philip Rebohle
4eff83bdee
[d3d11] Disable Predication support
...
Doesn't work at all in the few games that use it.
2019-04-25 11:55:40 +02:00
Philip Rebohle
95bfac84f1
[dxvk] Support image sub-regions for resolve operations
...
Required for legacy graphics APIs.
2019-04-19 11:41:12 +02:00
Philip Rebohle
b44cad4d32
[dxbc] Replace computeResourceSlotId by light-weight alternatives
...
Slightly reduces overhead of D3D11 binding methods.
2019-04-18 10:06:15 +02:00
Philip Rebohle
295d583c1d
[d3d11] Lazily allocate predicate on SetPredication
...
Many games use CreatePredicate to create occlusion queries without
actually using predication, and we don't want to pay any runtime
cost for this when predicates aren't actually being used.
2019-04-02 04:07:05 +02:00
Philip Rebohle
61adaa941d
[d3d11] Implement fast path for binding full constant buffers
...
Saves a few CPU cycles in the most common case where
we don't have to perform any sort of range check.
2019-03-28 14:09:08 +01:00
Philip Rebohle
8f580efa25
[d3d11] Correctly handle out-of-bounds constant buffer ranges
...
Otherwise we pass an invalid offset and length to the backend,
which leads to invalid descriptor set updates in Vulkan.
The D3D11 runtime does not report corrected constant offset
and count parameters to the applicaion in *GetConstantBuffers1.
Reported-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
2019-03-28 13:45:41 +01:00
Philip Rebohle
3a3d7fb378
[d3d11] Properly implement SetPredication
2019-03-28 10:02:11 +01:00
Philip Rebohle
fc3515c16f
[d3d11] Implement depth-stencil uploads in UpdateSubresource1
2019-03-26 18:11:42 +01:00
Philip Rebohle
412d79c8c1
[d3d11] Use new query implementation
2019-03-14 21:16:41 +01:00
Philip Rebohle
2d39be4e72
[d3d11] Check image block alignment in UpdateSubresource1
...
Fixes validation errors in World of Warcraft, which for some reason
tries to update individual pixels of block-compressed textures.
See #964 .
2019-03-14 01:11:39 +01:00
Joshua Ashton
5ea8648cd9
[d3d11, d3d10, dxgi] Handle null ppvObject in QueryInterface. ( #909 )
...
When a null ppvObject is passed into a QueryInterface on any IUnknown, a E_POINTER should be returned as the result (and it should not crash.)
This matches native d3d11/d3d10/dxgi behaviour and the documentation found here https://docs.microsoft.com/en-us/windows/desktop/api/unknwn/nf-unknwn-iunknown-queryinterface(q_) for IUnknown.
2019-02-10 08:01:01 +01:00
Philip Rebohle
3960355d47
[d3d11] Avoid redundant viewport updates in RSSetState
...
Rise of the Tomb Raider changes its rasterizer state very frequently
(once every handful of draws), and the viewport package is very large,
so we should avoid sending it to the CS thread redundantly.
We only need to update when the scissor test state has changed.
2019-01-23 05:36:49 +01:00
Michal Srb
cc38412d04
[d3d11] Fix bad check in DrawInstancedIndirect ( #863 )
2019-01-15 11:12:03 +01:00
Philip Rebohle
79eded9ae2
[d3d11] Only apply viewport and scissor rect if they have changed
...
Resident Evil 2 calls these functions before every single draw
call, so we should avoid emitting redundant viewport updates.
2019-01-12 20:22:08 +01:00
Philip Rebohle
e665d896e3
[d3d11] Fix build errors on MSVC
2019-01-10 18:26:52 +01:00
Philip Rebohle
bbc3b3fb2b
[d3d11] Use multiDrawIndirect for subsequent indirect draw calls
...
Significantly improves performance in AC:Odyssey when CPU bound.
Only has an effect when no state changes between draw calls, and
when the draw parameter buffer is tightly packed.
2019-01-10 17:14:12 +01:00
Philip Rebohle
cf21111401
[d3d11] Implement ID3D11Multithread for D3D11 contexts
2018-11-30 11:38:00 +01:00
Philip Rebohle
08b403f655
[d3d11] Fix potential UAV binding issue
...
When rebinding an already active UAV, we still need to
update the counter unless the app passed a value of -1.
Ref #712 .
2018-11-26 17:18:35 +01:00
Philip Rebohle
ad5688764c
[d3d11] Use single-use submission mode for CS chunks where possible
2018-11-20 10:44:04 +01:00
Philip Rebohle
c61200d35f
[dxvk] Introduce single-use mode for CS chunks
...
This allows us to reset the CS chunk immediately while executing it,
which can reduce the overhead of the reset operation and may lead to
resources being released earlier.
2018-11-20 10:35:23 +01:00
Philip Rebohle
0cfa5b16d3
[d3d11] Support R11G11B10 format in ClearUnorderedAccessViewUint
...
Silences an error message in Shadow of the Tomb Raider. Does not have
any consequences for this game because it initializes the view to 0.
2018-11-10 18:48:44 +01:00
Philip Rebohle
d5481ac013
[d3d11] Remove redundant D3D11Buffer::GetSize method
2018-11-02 15:43:46 +01:00
Philip Rebohle
43ed820be9
[d3d11] Remove state tracking for UAV rendering
...
This scenario is now properly handled by the DXVK state tracker.
2018-10-29 12:12:34 +01:00
Philip Rebohle
5ecfbd8425
[d3d11] Do not use QueryInterface to get query pointers
...
We're not going to implement counters anyway, so this is
unnecessary overhead.
2018-10-17 17:28:47 +02:00
Philip Rebohle
e0e945f724
[d3d11] Show SetPredication message only when the predicate is not NULL
...
Helps determine which games actually use the feature.
2018-10-15 19:35:50 +02:00
Philip Rebohle
406816d17c
[d3d10] Support pOffsets parameter in SOGetTargets
2018-10-10 19:55:42 +02:00
Philip Rebohle
93a851a2fc
[d3d11] Implement DrawAuto method
2018-10-10 19:55:42 +02:00
Philip Rebohle
93753a5ce7
[d3d11] Bind transform feedback buffers in SOSetTargets
2018-10-10 19:55:41 +02:00
Philip Rebohle
781ee00f5c
[dxvk] Refactor indirect draw/dispatch commands
...
Introduces an OpenGL-style bind point for the argument buffer, which
means we can avoid a lot of unnecessary reference tracking in games
that do a lot of indirect draw calls.
Reduces CPU overhead in Assassin's Creed Odyssey.
2018-10-08 10:23:18 +02:00
Philip Rebohle
0b4f1b6d6f
[d3d11] Implement DiscardView and DiscardResource for images
2018-10-01 16:54:34 +02:00
Philip Rebohle
de4c88d5aa
[d3d11] Skip CopyResource when src and dst resource are the same
2018-09-28 19:41:27 +02:00
Philip Rebohle
c9d61e16d9
[d3d11] Skip ResolveSubresource when dst and src resource are the same
...
Fixes black screen issue in Mortal Kombat X (#670 ).
2018-09-28 19:41:16 +02:00
Philip Rebohle
161fb6215a
[d3d11] Optimize UAV binding
...
- UpdateBuffer is faster than ClearBuffer for small updates.
- We shouldn't dispatch *two* CS commands for each UAV, one is enough.
2018-09-27 16:50:34 +02:00
Philip Rebohle
35238ec4d1
[d3d11] Make D3D11 context methods more robust to null pointers
...
Assetto Corsa tries to do some questionable things when reflections
are disabled in the game options. Refs #648 .
2018-09-19 12:33:30 +02:00
Philip Rebohle
d9009efd22
[d3d11] Implement and advertize support for CopyWithOverlap feature
2018-09-18 16:22:47 +02:00
Philip Rebohle
f1b075c0f3
[dxvk] Add CS chunk pool
...
Reduces the number of dynamic memory allocations for CS chunks by
recycling them once they are no longer needed. Also fixes a potential
issue with chunks that are dispatched multiple times.
2018-08-27 16:07:38 +02:00
Philip Rebohle
f75e3ad13f
[d3d11] Fix silly GenerateMips bug
2018-08-16 00:57:16 +02:00
Philip Rebohle
0b1b898be4
[d3d11] Implement ID3D11DeviceContext1::ClearView
...
Required for Feature Level 11_1.
2018-08-15 19:03:26 +02:00
Philip Rebohle
beedd39f7d
[dxvk] Accept VkClearValue in DxvkContext::clearImageView
2018-08-15 19:03:26 +02:00
Philip Rebohle
da21a6db7f
[d3d11] Silence warning about GenerateMips being called on buffers
2018-08-15 19:03:26 +02:00
Philip Rebohle
fe66e668e5
[dxvk] Implement native discardBuffer function in the backend
...
This may be more efficient because it avoids renaming the buffer
in case it can be used without inserting additional barriers.
2018-08-03 11:28:00 +02:00
Philip Rebohle
fb88070888
[d3d11] Implement copy flags for CopySubresourceRegion1 / UpdateSubresource1
2018-08-03 11:22:26 +02:00
Philip Rebohle
3fee20dfec
[d3d11] Implement DiscardResource for buffers
...
We don't suppor this for images, and we don't support DiscardView yet.
Buffers can be invalidated, which may in some cases be beneficial in
order to avoid synchronization on the GPU.
2018-08-03 11:10:40 +02:00
Philip Rebohle
c31e646921
[dxvk] Introduce concept of shader constants
...
Large constant arrays should be moved to a uniform buffer instead
of being baked directly into the shader code.
2018-07-30 20:29:05 +02:00
Philip Rebohle
7f0f7ac048
[d3d11] Refactor shader binding
...
This way we can get rid of an unnecessary template and make future
extensions possible.
2018-07-30 19:37:19 +02:00
Philip Rebohle
c8c6f24b63
[d3d11] Fix log spam when an application uses DiscardView
...
We don't support this method, but we should only issue the warning
once to prevent poor performance.
2018-07-08 15:53:30 +02:00
Philip Rebohle
974db9712b
[dxvk] Remove clear rect parameter from clearRenderTarget
...
With deferred clears and render target-based clears, this was
not properly supported anyway.
2018-07-06 15:01:37 +02:00
Philip Rebohle
432708c15f
[d3d11] Fix image aspect mask for typeless resolve
...
The DXGI format info only stores the aspect mask for views created
with that format, but we're dealing with a raw resource here so we
have to query the aspect mask from the Vulkan format in question.
Fixes validation errors with typeless resolve if the formats of
the two involved images are identical.
2018-06-21 10:17:59 +02:00
Philip Rebohle
a148233b13
[d3d11] Use clearBuffer to initialize UAV counters
2018-06-16 10:22:38 +02:00
Philip Rebohle
7fa26f1c87
[d3d11] Implement render pass spilling for UAV rendering
...
Spilling the render pass should make shader storage buffer/image writes
visible due to how external subpass dependencies are defined. For UAV
rendering, we need to do this when changing the UAVs, even if the render
targets themselves do not change.
2018-06-15 20:49:24 +02:00
Philip Rebohle
dce2f844c0
[d3d11] Add ID3DUserDefinedAnnotation stub
...
We can implement this properly in the future using VK_EXT_debug_utils.
2018-06-11 14:29:47 +02:00
Philip Rebohle
05f24c3c38
[d3d11] Reduce log spam about UAV rendering
2018-06-10 04:19:30 +02:00
Philip Rebohle
a2df1ea4c9
[d3d11] Added warning that UAV rendering might not work as expected
...
We still haven't implemented synchronization for UAV rendering properly.
2018-06-08 12:42:09 +02:00
Philip Rebohle
c716372941
[d3d11] Move GetData implementation to D3D11ImmediateContext
...
It is illegal to call this method on a deferred context, so we should
filter out those calls. This allows the implementation to make use of
features specific to the immediate context.
2018-06-08 12:29:24 +02:00
Philip Rebohle
4a0c81276f
[d3d11] Implement new auto-flush heuristic
2018-06-04 23:31:49 +02:00
Philip Rebohle
8cd97959f2
[d3d11] Chjeck whether input layouts are identical
...
Prevents redundant state changes when a game switches between
identical input layouts. Reduces the the number of Vulkan
calls in Grim Dawn by ~30%.
2018-05-27 01:10:49 +02:00
Philip Rebohle
84a62f795f
Merge branch 'meta-mipgen'
2018-05-25 17:46:41 +02:00
Philip Rebohle
4b37590e14
[dxvk] Use new mip map generator
2018-05-25 17:45:41 +02:00
Philip Rebohle
49bda46a37
[d3d11] Validate and correct scissor rects
...
Fixes Vulkan validation errors in Frostpunk and more closely
emulates Windows behaviour.
2018-05-25 00:08:28 +02:00
Philip Rebohle
26b319b29b
[d3d11] Fallout 4: Force Flush on GetData calls
2018-05-14 02:40:59 +02:00
Philip Rebohle
c17f4e2fc0
[dxvk] Increase update buffer size
...
Helps reduce the number of memory allocations further
when deferred contexts are used for rendering.
2018-05-13 14:45:50 +02:00
Philip Rebohle
9d4654f445
[dxvk] Fix update buffer allocation size
2018-05-13 11:12:54 +02:00
Philip Rebohle
cd92d0b992
[dxvk] Allow binding render targets of different sizes
...
In order to not cause Vulkan validation issues, we have
to reduce the framebuffer size. Fixes a regression in
Bioshock Infinite.
2018-05-07 20:46:20 +02:00
Philip Rebohle
a55bee9554
[d3d11] Validate render targets before setting them up
...
Mimicks what native D3D11 does. Fixes validation errors in
Nier:Automata with multisampling enabled in some situations.
2018-05-05 09:12:36 +02:00
Philip Rebohle
e30a8299e6
[dxvk] Refactor DxvkFramebuffer and DxvkRenderpass
2018-05-02 00:45:10 +02:00
Philip Rebohle
ba53cf92ac
Revert "[dxvk] Refactor DxvkFramebuffer and DxvkRenderpass"
...
This reverts commit 1bbfe77013
.
Breaks Path of Exile.
2018-04-30 18:47:35 +02:00
Philip Rebohle
1bbfe77013
[dxvk] Refactor DxvkFramebuffer and DxvkRenderpass
2018-04-30 15:47:29 +02:00
Philip Rebohle
7cb7e4a944
Merge branch 'master' of https://github.com/doitsujin/dxvk
2018-04-28 14:18:18 +02:00
Philip Rebohle
99813a7778
[d3d11] Use const ref pointer for device parameter
...
Closes #323 .
2018-04-28 14:17:52 +02:00
pchome
4a74cd45d5
[clang-tidy] performance-move-const-arg fix ( #324 )
...
https://clang.llvm.org/extra/clang-tidy/checks/performance-move-const-arg.html
2018-04-28 14:13:23 +02:00
Philip Rebohle
1784b8c44d
[d3d11] Merge interop API
2018-04-26 22:20:09 +02:00
Philip Rebohle
cfcca11fc5
[d3d11] CopySubresourceRegion: Fix block size alignment check
...
The source region size doesn't have to be aligned to the destination
block size. We should be checking whether the destination region is
aligned to the destination block size.
2018-04-22 23:00:31 +02:00
Philip Rebohle
4a71da3a1c
[d3d11] Improved debug output for CopySubresourceRegion
2018-04-22 22:35:10 +02:00
ZeroFault
52f0d853c0
[d3d11] add some resource validation for copying resources ( #305 )
...
* [d3d11] add some resource validation for CopyResource and CopyResourceSubregion
combine if statement
* [d3d11] added copy extents validation for compressed formats
* correct return values
* fix incorrect logic operators
* set valid copy extents when possible
* [d3d11] Clamp copy region in CopySubresourceRegion
* [dxvk] Add helper methods to deal with block-compressed images
* [d3d11] Clean up validation in CopySubresourceRegion
* [d3d11] Improve error reporting and validation in CopyResource
* [d3d11] Fix inconsistent error messages
2018-04-20 23:35:29 +02:00
Philip Rebohle
62b0e34a73
[d3d11] Implement IDXGIVkInteropDevice for D3D11Device
2018-04-20 00:19:03 +02:00
Philip Rebohle
fcdba67b88
[d3d11] Implement 2D<->3D image copies in CopySubresourceRegion
2018-04-17 22:22:49 +02:00
ZeroFault
a248ae985d
[d3d11] nullptr check on Begin and End ( #295 )
2018-04-17 13:57:39 +02:00
Philip Rebohle
d523405a5a
[dxvk] Implement bindRenderTargets method
...
An alternative to manually creating a framebuffer object and binding
it via bindFramebuffer. Future optmizations can use this to bring
down the number of redundant render pass changes.
2018-04-15 01:09:53 +02:00
Philip Rebohle
a6767ebd52
[d3d11] Improved debug output of D3D11DeviceContext methods
2018-04-14 11:45:31 +02:00
Philip Rebohle
56a1433d3f
[d3d11] ClearUnorderedAccessViewUInt: Create temp view if necessary
...
If this method is used to clear a view with a floating point format,
we need to create a compatible view with an integer format in order
to clear the resource with the correct value. Fixes some calls to
this function in Rise of the Tomb Raider and other games.
2018-04-12 23:31:15 +02:00
Philip Rebohle
db541d188f
[dxgi] Added static format mapping table
2018-04-12 17:49:14 +02:00
Philip Rebohle
ef4a3c5bfc
[d3d11] Use meta clear for ClearUnorderedAccessView* methods
2018-04-11 23:39:12 +02:00
Philip Rebohle
e06300d592
[d3d11] Fix multisample format support query for depth images
...
Fixes a crash in World of Warships when reflections are enabled.
2018-04-04 11:24:16 +02:00
Philip Rebohle
2973c18055
[dxgi/d3d11] Remove COM_QUERY_INTERFACE macro, reset pointers
...
May fix some crashes in applications that rely on the returned
pointer being set to nullptr before returning.
2018-04-02 12:52:02 +02:00
Philip Rebohle
b3aff7cd2e
[d3d11] Fix immediate context initialization
...
The old initialization code did not take either CSMT or
Deferred Contexts into account and could lead to illegal
calls to beginRecording.
Fixes a hang encountered in Dishonored 2.
2018-03-22 13:40:45 +01:00
Philip Rebohle
17e981f360
[dxvk] Increase UAV slot count to 64 for the graphics pipeline
...
D3D11 raised this limit from 8 UAVs in the fragment shader to
64 UAVs in all graphics stages combined.
2018-03-21 04:56:33 +01:00
Philip Rebohle
bd71f256e5
[d3d11] Fixed constant buffer binding update
2018-03-21 03:26:31 +01:00