Commit Graph

3727 Commits

Author SHA1 Message Date
Joshua Ashton f9034007ac [util] Fix indexing of non-float vectors 2021-07-05 18:58:55 +02:00
Connor Abbott 9579132942
[d3d9] Remove extra spaces in def file
wrc is pickier about this than windres and refuses to accept it.
2021-07-03 14:28:28 +02:00
Connor Abbott aae0e57a46
Don't add def file as an object
This is unnecessary even on mingw, and leads to duplicating the .def
file on the linking command line which winegcc complains about.
2021-07-03 14:28:28 +02:00
Connor Abbott 2988875e93
[dxgi] Call QueryPerformanceCounter directly
dxvk::high_resolution_clock is meant to be a wrapper around the C++ time
library, and getCounter() is (AFAIK) an internal thing so calling it
directly is odd. On winelib this redirects to the host's implementation,
which means this fails to compile. Since this is a Windows API and not
for internal usage just call the Windows API function directly.
2021-07-03 14:28:28 +02:00
Connor Abbott b9135ca0cd
Do not try to load libraries natively under __WINE__
This was only half-implemented (e.g. OpenXR was still calling
GetModuleHandle), broke compilation with Vulkan due to mismatched ABI,
and wouldn't have worked anyways with winelib builds because we still
need access to wine's implementation of the Vulkan win32 winsys
integration. Perhaps this is still useful for dxvk-native but if so it
should be re-added under a DXVK_NATIVE flag.
2021-07-03 14:28:28 +02:00
Philip Rebohle c8a9308c37
[dxvk] Enable disableMsaa option for World of Final Fantasy
Fixes #1216.
Fixes #2136.
2021-07-02 16:11:24 +02:00
Philip Rebohle 3b857d93b5
[d3d11] Add d3d11.disableMsaa option to disable multisampling
Aims to be mostly transparent to the application, although breakage
can still happen if shaders query the sample count and do not handle
a sample count of 1.
2021-07-02 05:52:05 +02:00
Philip Rebohle e379f472f6
[dxbc] Implement hack to treat multisampled textures as normal textures 2021-07-02 05:52:05 +02:00
Paul Gofman 8b6ac527b4 [d3d11] Initialize buffer flags in D3D11UnorderedAccessView::GetDescFromResource(). 2021-07-01 15:20:07 +02:00
Robin Kertels 309284e7dc [d3d9] Respect 4 byte pitch when reading back texture 2021-07-01 05:47:44 -07:00
Robin Kertels c43618d19f [d3d9] Fix texture dirty box clearing
- Fix interleaved locks with evictManagedOnUnlock
We need to make sure there are no other subresources of a texture locked
before clearing the dirty box. Otherwise the data for those other subresources
won't get copied into VRAM.

- Clear dirty box regardless of texture pool
Otherwise we keep repacking and copying the whole texture
for every single lock. This causes performance problems
in Star Wars: The Old Republic.
2021-07-01 05:47:44 -07:00
Philip Rebohle 2ff8b42fff [d3d9] Enable robustBufferAccess2 feature if available
Tightens some out-of-bound rules around vertex attributes.
2021-06-29 18:35:47 -07:00
Philip Rebohle 96f5641a7e [d3d9] Ensure that the bound UP vertex buffer region is large enough
If the buffer size is less than (vertexCount * stride), the last vertex
may be considered out-of-bounds, even if all attributes are included in
the vertex.

Fixes #2131.
2021-06-29 18:35:47 -07:00
Philip Rebohle 45a6d5fb5b
[dxvk] Fix potential undesired host-visible buffer invalidation
We cannot invalidate mapped buffers in the backend because the frontend
may cache the mapped slice from its own invalidations, which would then
become invalid. Very unlikely to be an issue in practice.
2021-06-29 13:58:52 +02:00
Philip Rebohle cd8a2bcfcd [dxvk] Use custom sync primitives 2021-06-29 00:51:20 +02:00
Philip Rebohle 7305da6951 [util] Implement custom sync primitives 2021-06-29 00:51:20 +02:00
Tobias Langendorf ca6d8c6ce9
[util] Use FIFO_RELAXED present mode Earth Defense Force 5 (#2127)
The game constantly switches between SyncInterval 0 and 1, possibly in an attempt to implement adaptive Vsync, which causes performance issues because it forces us to recreate the Vulkan swap chain every couple of frames. Instead, enable the Vulkan equivalent of adaptive Vsync if possible.
2021-06-28 18:30:03 +02:00
Philip Rebohle 08a6b42458
[d3d11] Fix box validation in CopySubresourceRegion1 2021-06-24 21:07:48 +02:00
Philip Rebohle 9f80d9f8b2
[d3d11] Remove functions to update mapped buffers
No longer relevant since staging images will no longer be backed
by actual Vulkan images and dynamic images are not GPU-writable.
2021-06-24 21:07:48 +02:00
Philip Rebohle 7d76262c52
[d3d11] Use D3D11_COMMON_TEXTURE_MAP_MODE_STAGING if possible 2021-06-24 21:07:48 +02:00
Philip Rebohle 450c42444f
[d3d11] Use UpdateImage in D3D11DeferredContext::MapImage 2021-06-24 21:07:48 +02:00
Philip Rebohle fd66f44561
[d3d11] Use UpdateImage in D3D11ImmediateContext::UnmapImage 2021-06-24 21:07:48 +02:00
Philip Rebohle 6ba1746d46
[d3d11] Introduce UpdateImage 2021-06-24 21:07:48 +02:00
Philip Rebohle 5e4ed2d929
[d3d11] Introduce CopyImage 2021-06-24 21:07:48 +02:00
Philip Rebohle cd17301236
[d3d11] Introduce CopyBuffer
Generalizes some copy code.
2021-06-24 21:07:48 +02:00
Philip Rebohle 1a6f4456d8
[d3d11] Introduce ComputeMappedOffset for image resources
Modifies GetSubresourceLayout slightly in case only a partial aspect
mask is being passed to the function. This way we can conveniently
compute the offset of a given pixel within the mapped buffer of an
image subresource.
2021-06-24 21:07:48 +02:00
Philip Rebohle 7c0ee272c3
[d3d11] Add texel buffer usage to staging buffer
Needed for staging image updates.
2021-06-24 21:07:48 +02:00
Philip Rebohle 7160b85924
[d3d11] Add texel buffer usage flags to mapped subresource buffers 2021-06-24 21:07:48 +02:00
Philip Rebohle 731e88b196
[d3d11] Handle MAP_MODE_STAGING in initializer
Otherwise, we'll crash if no real image is present.
2021-06-24 21:07:48 +02:00
Philip Rebohle 596f65f75f
[d3d11] Handle MAP_MODE_STAGING when mapping images on the immediate context 2021-06-24 21:07:48 +02:00
Philip Rebohle 9e15831a2d
[d3d11] Store packed format info in D3D11CommonTexture 2021-06-24 21:07:48 +02:00
Philip Rebohle f155b8a8b9
[d3d11] Introduce DiscardSlice and GetMappedSlice for image resources
These do the same as they do for buffer resources, but for a mapped
image subresource instead.
2021-06-24 21:07:48 +02:00
Philip Rebohle 11aa2a703a
[d3d11] Introduce D3D11_COMMON_TEXTURE_MAP_MODE_STAGING
This map mode can be used when no Vulkan image is needed to back a
staging resource, which can save a significant amount of memory.
2021-06-24 21:07:48 +02:00
Philip Rebohle b384f5372e
[d3d11] Zero-initialize mapped buffers for images correctly 2021-06-24 21:07:48 +02:00
Philip Rebohle f50c5234dc
[dxvk] Add source offset/extent to copyPackedBufferToDepthStencilImage 2021-06-24 21:07:48 +02:00
Philip Rebohle a14884c652
[dxvk] Add destination offset/extent to copyDepthStencilImageToPackedBuffer
Needed to support partial copies between buffers and depth-stencil images.
2021-06-24 21:07:47 +02:00
Philip Rebohle ba9d670157
[dxvk] Introduce copyPackedBufferImage 2021-06-24 21:07:47 +02:00
Philip Rebohle 27155539b6
[dxvk] Add meta copy pipeline for packed buffer image copies 2021-06-24 21:07:47 +02:00
Philip Rebohle 9f7a5a077f
[dxvk] Fix broken row/slice alignment in buffer<->image copies
If the specified row or slice alignment matches the row size exactly
but is not a power of two, we could accidentally screw up the alignment.
2021-06-24 21:07:47 +02:00
Philip Rebohle ba4938e201
[dxvk] Add slice alignment to copyImageToBuffer 2021-06-24 21:07:47 +02:00
Philip Rebohle 4840cdaf8c
[dxvk] Add slice alignment to copyBufferToImage 2021-06-24 21:07:45 +02:00
Philip Rebohle 87d32a234d
[dxvk] Handle discard aspects correctly when performing clears
Should fix an Nvidia driver crash, see #2118.
2021-06-24 17:15:52 +02:00
Robin Kertels 8a93bbd8fa [d3d9] Make sure clear extent does not exceed rt size 2021-06-19 16:11:11 -07:00
Robin Kertels 7dd443802c [util] Report Nvidia GPU to Far Cry 1 2021-06-19 10:43:31 -07:00
Robin Kertels d7c4afbeba [d3d9] Pass correct element size to texture converter 2021-06-19 10:43:31 -07:00
Philip Rebohle 81664fce44
[dxbc] Remove atomic counter workaround for ancient Mesa versions
No one should be using Mesa 19.0 at this point.
2021-06-18 15:44:58 +02:00
Philip Rebohle 7beb344f6f
[dxbc] Remove dxvk.useEarlyDiscard option
No longer relevant on drivers that support DemoteToHelperInvocation.
Closes #2109.
2021-06-18 15:44:27 +02:00
Georg Lehmann 6b8ab4fd38 [d3d11] Remove mingw-w64 < 6 workarounds 2021-06-15 20:41:34 +02:00
Philip Rebohle dca63464b4
[meta] Release 1.9 2021-06-15 15:32:19 +02:00
Georg Lehmann 7a688bd74c [util] force 60fps for Demon Stone 2021-06-15 02:54:14 -07:00
Samuel Pitoiset dba539471d [dxso] Remove old RADV/LLVM workaround for early discard
This workaround has been removed for DXBC few weeks ago. Note that
RADV/ACO is no longer a thing with latest Mesa git anyways.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
2021-06-15 01:07:35 -07:00
Philip Rebohle de05728c8c
[dxvk] Check view format as well when deferring clears
Otherwise, we may accidentally clear to an incorrect value.
Fixes #2100.
2021-06-14 16:41:31 +02:00
Philip Rebohle 30a1a29aa6 [util] Add DXVK_FRAME_RATE environment variable to limit frame rate 2021-06-12 13:50:08 +02:00
Philip Rebohle 12c51f1c3d [util] Enable frame rate limiter for Nier Replicant
The game does not run properly at frame rates above 60 and uses the sync
interval in a weird way that sometimes leads to the game being stuck at
31 FPS, and in the menus it displays content at weird refresh rates that
it was clearly not designed to run at.
2021-06-12 13:50:08 +02:00
Philip Rebohle 6044e63eb0 [dxgi] Notify presenter about display mode changes 2021-06-12 13:50:08 +02:00
Philip Rebohle e281eee795 [dxgi] Add NotifyModeChange method to IDXGIVkSwapChain 2021-06-12 13:50:08 +02:00
Philip Rebohle 8b67ef724e [d3d11] Add frame rate limiter and dxgi.maxFrameRate option 2021-06-12 13:50:08 +02:00
Philip Rebohle 4f5f85925b [d3d9] Add frame rate limiter and d3d9.maxFrameRate option 2021-06-12 13:50:08 +02:00
Philip Rebohle b537f19a3c [vulkan] Add frame rate limiter to Vulkan presenter 2021-06-12 13:50:08 +02:00
Philip Rebohle a16c861358 [util] Implement frame rate limiter
This tries to be sophisticated and disables itself when it notices
that the frame rate is going to be limited by presentation anyway.
2021-06-12 13:50:08 +02:00
Robin Kertels 6f468ec5e0 [d3d9] Fix texture converter 2021-06-12 03:48:01 -07:00
Philip Rebohle 9eeaedeeb7
[util] Remove FFXIV workaround
Looks like whatever caused this in Mesa got fixed quite a while ago.
2021-06-11 01:59:56 +02:00
Thomas Crider 63fd2b9d32 [util] Enable d3d9.deferSurfaceCreation for Ninja Gaiden Sigma/Sigma 2
Co-authored-by: Georg Lehmann <49841484+DadSchoorse@users.noreply.github.com>
2021-06-10 01:35:48 -07:00
Joshua Ashton f1a9d72d38 [d3d9] Don't scale z to [0, 1] for POSITIONT
I originally thought the depth clipping region was always [0, 1] when I first implemented this nearly 2 years ago.

The depth clipping region is already in the viewport's depth range, so just don't do anything here if we are z-testing.

( We still need to keep the flattening around for when ztest is disabled though :( )

Fixes: #2056
2021-06-06 09:31:01 -07:00
Philip Rebohle fe00919d5f [util] Handle upper-case file extensions correctly 2021-06-06 03:57:15 -07:00
Joshua Ashton f4cbc9ae9d [util] Enable emulateUMA for GTA IV
This game thinks we are on Intel, so report memory like they do.
2021-06-01 19:26:41 +02:00
Joshua Ashton 15e0594ec4 [dxgi] Add emulateUMA option
Some games think we are on Intel given a lack of NVAPI or AGS/atiadlxx support. Report our device memory as shared memory, and some small amount for a "carveout".
2021-06-01 19:26:41 +02:00
Joshua Ashton fe0dc2d579 [dxvk] Move isUnifiedMemoryArchitecture to adapter 2021-06-01 19:26:41 +02:00
Joshua Ashton e624cfa0b4 [util] Return custom device description for Crazy Machines 3
Otherwise the game decides it wants to crash.
2021-06-01 19:26:41 +02:00
Joshua Ashton 1d4c540b21 [dxgi] Add custom device description option 2021-06-01 19:26:41 +02:00
Joshua Ashton 747834e9b0 [d3d9] Bump frame id before presentation 2021-06-01 18:31:29 +02:00
Joshua Ashton e64a8ee61a [d3d11] Bump frame id before presentation 2021-06-01 18:31:29 +02:00
Joshua Ashton fcb7639106 [d3d9] Synchronize frame latency on latency change 2021-06-01 18:16:35 +02:00
Joshua Ashton 787de33022 [d3d9] Sync frame latency after presentation 2021-06-01 18:16:35 +02:00
Joshua Ashton f98a45b305 [d3d11] Sync frame latency after presentation 2021-06-01 18:16:35 +02:00
Philip Rebohle 0fe8f2e40c
[vulkan] Acquire next image immediately after presentation
vkAcquireNextImageKHR is a blocking call, so doing this immediately after
presentation may reduce the amount of time that passes between the application
requesing presentation and presentation actually happening on the Vulkan device.

Idea based on PR #2075.
2021-06-01 04:52:09 +02:00
Philip Rebohle 0b88d0deab
[vulkan] Remove getSyncSemaphores from presenter
Instead, return the semaphores in acquireNextImage.
2021-06-01 04:32:50 +02:00
Philip Rebohle 253884a8c7
[vulkan] Remove fence from presenter
We don't use these anywhere.
2021-06-01 03:51:16 +02:00
Philip Rebohle 0af7229b8e
[util] Restore display modes of all monitors in RestoreMonitorDisplayMode
Fixes #2064.
2021-06-01 01:48:12 +02:00
Philip Rebohle 383cde2051
[d3d11] Allow creation of render target views for planar images 2021-05-30 19:42:44 +02:00
Philip Rebohle 01051bac99
[d3d11] Allow creation of unordered access views for planar images 2021-05-30 19:42:44 +02:00
Philip Rebohle 6d72bc94f4
[d3d11] Allow creation of shader resource views for planar images 2021-05-30 19:42:44 +02:00
Philip Rebohle 2740030fca
[d3d11] Support video processor output views in ClearView 2021-05-30 19:42:44 +02:00
Philip Rebohle b04721f9a2
[d3d11] Use staging buffer for MapImage on deferred contexts 2021-05-30 19:42:44 +02:00
Philip Rebohle ff9d6e3226
[d3d11] Use staging buffer and copyBufferToImage for UpdateSubresource
Reduces number of copies and also fixes problems with multi-plane formats.
2021-05-30 19:42:44 +02:00
Philip Rebohle e749a4a4ac
[d3d11] Create shadow copy of video input images if sampled bit is not set
This can happen with RGB input views since not having any bind flags set
is legal for video input views, and SHADER_RESOURCE is actually explicitly
disallowed, but we don't always want to set sampled bit for those resources.
2021-05-30 19:42:44 +02:00
Philip Rebohle 3c22f4066b
[d3d11] Lock context in video context entry points 2021-05-30 19:42:44 +02:00
Philip Rebohle 25607a0692
[d3d11] Report video processor capabilities for image formats 2021-05-30 19:42:44 +02:00
Philip Rebohle 6d9da5a8d7
[d3d11] Don't use MAP_MODE_DIRECT for multi-plane images 2021-05-30 19:42:44 +02:00
Philip Rebohle 01236fbd84
[d3d11] Use correct method to clear multi-plane images 2021-05-30 19:42:44 +02:00
Philip Rebohle ee30acf120
[d3d11] Use new packImageData for initializing mapped image buffers 2021-05-30 19:42:44 +02:00
Philip Rebohle 7184b75f8f
[d3d11] Use GetSubresourceLayout for image maps on the immediate context 2021-05-30 19:42:44 +02:00
Philip Rebohle 1b296f8338
[d3d11] Introduce GetSubresourceLayout 2021-05-30 19:42:44 +02:00
Philip Rebohle e87aa08fd2
[d3d11] Implement basic video processor blitting 2021-05-30 19:42:43 +02:00
Philip Rebohle 969ac59667
[d3d11] Add ID3D11VideoContext stub 2021-05-30 19:42:43 +02:00
Philip Rebohle 1df26a3605
[d3d11] Implement video processor views 2021-05-30 19:42:43 +02:00
Philip Rebohle 09cf2cd11e
[d3d11] Add ID3D11VideoProcessor stub 2021-05-30 19:42:43 +02:00
Philip Rebohle bdb7eef874
[d3d11] Add ID3D11VideoProcessorEnumerator stub 2021-05-30 19:42:43 +02:00
Philip Rebohle 1eaf2545c3
[d3d11] Add ID3D11VideoDevice stub 2021-05-30 19:42:43 +02:00
Philip Rebohle e988895e51
[d3d11] Set mutable and extended usage bits for multi-plane images 2021-05-30 19:42:43 +02:00
Philip Rebohle 2764f4abb5
[dxgi] Add format mapping for DXGI_FORMAT_AYUV 2021-05-30 19:42:43 +02:00
Philip Rebohle d859361a37
[dxgi] Add format mapping for DXGI_FORMAT_YUY2
And fix some existing 422 mappings.
2021-05-30 19:42:43 +02:00
Philip Rebohle 9b236078c2
[dxgi] Add format mapping for DXGI_FORMAT_NV12 and DXGI_FORMAT_420_OPAQUE 2021-05-30 19:42:43 +02:00
Philip Rebohle 8116927ec6
[dxvk] Introduce new version of packImageData 2021-05-30 19:42:43 +02:00
Philip Rebohle 4630bbc427
[dxvk] Support multi-plane formats in updateImage 2021-05-30 19:42:43 +02:00
Philip Rebohle 55a67988b2
[dxvk] Support multi-plane formats in computeImageSize 2021-05-30 19:42:43 +02:00
Philip Rebohle 6462174c13
[dxvk] Support multi-plane formats in copyImageToBuffer 2021-05-30 19:42:43 +02:00
Philip Rebohle a660b35f6e
[dxvk] Support multi-plane formats in clearCompressedColorImage 2021-05-30 19:42:43 +02:00
Philip Rebohle ed57019e13
[dxvk] Support multi-plane formats in copyImage 2021-05-30 19:42:43 +02:00
Philip Rebohle 41e28cb280
[dxvk] Support multi-plane formats in uploadImage 2021-05-30 19:42:43 +02:00
Philip Rebohle 86542248df
[dxvk] Support multi-plane formats in copyBufferToImage 2021-05-30 19:42:43 +02:00
Philip Rebohle cd2ea98670
[dxvk] Add helper functions to deal with plane aspects 2021-05-30 19:42:43 +02:00
Philip Rebohle 1d6da6f83e
[dxvk] Add format definition for VK_FORMAT_G8_B8R8_2PLANE_420_UNORM 2021-05-30 19:42:43 +02:00
Philip Rebohle 0f5e126735
[dxvk] Introduce flushSharedImages
Fixes problems with images not being cleared prior to presentation
if the clear is the last command issued in the frame.
2021-05-30 19:42:43 +02:00
Philip Rebohle a1f3f6c971
[dxbc] Remove old RADV/LLVM workaround for early discard
We have Demote now, and ACO is the default.
2021-05-27 00:40:59 +02:00
Philip Rebohle 94674ac45e [dxvk] Skip CPU adapters if GPUs are present
Because some games try (and fail) to run on Lavapipe despite it already
being the lowest priority device in the list.
2021-05-21 22:55:54 +02:00
Joshua Ashton c51080068e [dxgi] Handle DXGI_PRESENT_TEST and failures in GetFrameStatistics 2021-05-20 23:02:07 +01:00
Philip Rebohle 401edc53fe [dxgi] Show warning in DxgiOutput::GetFrameStatistics 2021-05-20 22:27:36 +01:00
Philip Rebohle db3654a07f [dxgi] Implement present count and frame statistics for swap chains 2021-05-20 22:27:36 +01:00
Joshua Ashton 0520ce9448
[d3d9] Treat largest element in Stream 0 as vertex decl size
Closes #2059
2021-05-13 01:32:56 +01:00
orbea b84a03b4d4 [util] Enable d3d9.deferSurfaceCreation for Nights of Azure 2021-05-07 22:15:58 +01:00
Joshua Ashton f0c1e89443 [d3d9] Handle zero-sized draws
These return S_OK, because ofc they do.
2021-05-05 19:25:46 +01:00
Joshua Ashton 0f52c85d21 [d3d9] Account for vertex declaration size for UP draws
The stride may not give us the full picture here as the stride
may not encompass the vertex declaration entirely.

Consider a vertex declaration of size 20, and a stride of 12,
we may not have covered the whole range of space the draw wants with
VertexCount * Stride.

Some games such as FF13 Lightning Returns have two float3s in the vertex decl
and draw two triangles with the last float being out of bounds. This causes
the whole vertex element to be set to 0 on NVIDIA which breaks their fullscreen passes.

Instead, take (VertexCount - 1) * Stride + VertexDeclSize for the buffer size
and pad with 0s outside of the VertexCount * Stride range.

Closes: #2046
Closes: #1908
2021-05-05 19:25:46 +01:00
Joshua Ashton 4a4b96611d
[d3d9] Only log WaitForVBlank stub once 2021-04-30 19:33:24 +01:00
Joshua Ashton a980282ebe
[util] Increase constants for TrackMania Forever
Bump this to 256.

Fixes rendering issues.

Closes: #1910
2021-04-30 18:51:09 +01:00
Joshua Ashton 54d3ad1295
[util] Enable d3d9.memoryTrackTest for Kohan II
Closes: #2030
2021-04-30 18:49:39 +01:00
Robin Kertels 525fd53bbc [d3d9] Fix FlushBuffer
Use stored mapped slice and use correct dst offset.
2021-04-23 18:06:29 +01:00
Robin Kertels da23771df4 [d3d9] Remove unused variable 2021-04-23 18:06:29 +01:00
Robin Kertels 13f53531e5 [d3d9] Fix offset in UpdateSurface 2021-04-22 20:18:50 +01:00
Robin Kertels 0bc8b0b33a [d3d9] Align pitch to 4 2021-04-22 17:44:58 +01:00
Robin Kertels 2ba433bbd8 [d3d9+util] Remove option to disable implicit discard 2021-04-22 17:44:58 +01:00
Robin Kertels 03f5893011 [d3d9] Remove implicit discard 2021-04-22 17:44:58 +01:00
Robin Kertels b9512a4063 [d3d9] Only copy dirty parts of managed/sysmem resources 2021-04-22 17:44:58 +01:00
Robin Kertels 4261ff6ec1 [d3d9] Use staging buffer for managed copies 2021-04-22 17:44:58 +01:00
Robin Kertels bb11d7dee8 [d3d9] Refactor AllocUpBuffer so it can be used for managed uploads 2021-04-22 17:44:58 +01:00
Robin Kertels 8cc0c9a0f1 [d3d9] Clamp dirty buffer range
And always maintain dirty range.
2021-04-22 17:44:58 +01:00
Philip Rebohle 4eb884303a
[util] Enable d3d9.deferSurfaceCreation for even more Atelier games 2021-04-22 15:37:40 +02:00
Philip Rebohle cb7adeef08
[d3d11] Add range checking to GetShaderResources 2021-04-22 12:56:11 +02:00
Philip Rebohle 65655ce37c
[d3d11] Add range checking to GetSamplers 2021-04-22 12:56:11 +02:00
Philip Rebohle ef9ad29b7f
[d3d11] Add range checking to GetConstantBuffers 2021-04-22 12:56:11 +02:00
Philip Rebohle 2d9c229eaa
[d3d11] Add range checking to SOGetTargets 2021-04-22 12:56:11 +02:00
Philip Rebohle 11a02831a9
[d3d11] Add range checking to UAV and render target methods 2021-04-22 12:56:11 +02:00
Philip Rebohle b51fd4d06c
[d3d11] Add range checking to IAGetVertexBuffers 2021-04-22 12:56:11 +02:00
Philip Rebohle a13dad07cc
[d3d11] Add some missing STDMETHODCALLTYPE declarations 2021-04-22 12:56:11 +02:00
Philip Rebohle 65cc03a707
[util] Add app profile for Dal Segno
Fixes #2022.
2021-04-22 12:55:04 +02:00
Andrew Sheldon 6339c8ec17 [util] Enable apitraceMode for a couple of CryEngine games
Kingdom Come: Deliverance and Sniper Ghost Warrior Contracts
2021-04-16 10:49:14 +02:00
Georg Lehmann 18466d4ae4 [util] remove some movs in matrix add/sub assignment 2021-04-15 22:25:11 +01:00
Georg Lehmann 77d80acf75 [d3d9] respect Vector4 alignment in UpdateStateConstants 2021-04-15 22:25:11 +01:00
Georg Lehmann 1ed6edf096 [d3d9] respect Vector4 alignment in GetShaderConstants 2021-04-15 22:25:11 +01:00
Georg Lehmann d682ab0402 [util] static assert size of Vector4 and Matrix4 2021-04-15 22:25:11 +01:00
Georg Lehmann 5d3b130ec8 [d3d9] respect Matrix4 alignment in ConvertMatrix 2021-04-15 22:25:11 +01:00
Georg Lehmann 02eebb8595 [util] introduce a raw constructor for Matrix4 2021-04-15 22:25:11 +01:00
Georg Lehmann c7271d94c1 [util] move Matrix4 constructors to header 2021-04-15 22:25:11 +01:00
Liam Middlebrook fb0b11903b [d3d11] Implement D3D11UserDefinedAnnotation
Reviewed-by: Oleg Kuznetsov <okouznetsov@nvidia.com>
2021-04-08 14:25:02 +02:00
Liam Middlebrook 5ce5999232 [dxvk] Add support for debug utils labels
Reviewed-by: Oleg Kuznetsov <okouznetsov@nvidia.com>
2021-04-08 14:25:02 +02:00
Liam Middlebrook c89b274325 [dxvk] Track enabled instance extensions
Reviewed-by: Oleg Kuznetsov <okouznetsov@nvidia.com>
2021-04-08 14:25:02 +02:00
Philip Rebohle c3feea2bce [dxvk] Make samplerAnisotropy feature optional 2021-04-04 20:01:30 +01:00
Philip Rebohle 0a787683b6 [dxvk] Don't require shaderStorageImageExtendedFormats
No real reason to, not sure why we did this in the first place.
2021-04-04 20:01:30 +01:00
Robin Kertels 9d0c46b9c6 [d3d9] FF: use correct vector type when dealing with tex coords 2021-04-04 16:31:39 +01:00
Robin Kertels 8e352d0260 [util] Enable memory track test for Dragon Nest 2021-04-04 15:45:24 +01:00
Joshua Ashton a690210eae [dxgi] Implement swapchain dispatcher
Some overlays and hooks check if the vtable funcs reside in the dxgi.dll module.

Fixes: #1996
2021-03-30 17:48:10 +02:00
Rémi Bernon 9e646a3415 [util] Override default thread stack reserve size.
Some applications (Dragon Quest Builder 2 for instance) use an oversized
default thread stack reserve size (2G in this case), which cause every
DXVK thread to allocate as much memory, quickly exhausting system memory.
2021-03-29 17:59:06 +01:00
Robin Kertels d17f62902d [d3d9+util] Remove AllowLockFlagReadonly option 2021-03-22 17:43:07 +00:00
Robin Kertels dba7525954 [d3d9] Mark non default resources as dirty by default 2021-03-22 17:43:07 +00:00
Robin Kertels 8159e87331 [d3d9] Fix some issues with dirty box handling
- The dst texture in UpdateSurface must be in D3DPOOL_DEFAULT
  which doesn't do dirty tracking. So we don't need to
  call AddDirtyBox there.
- Clear DirtyBox when we flush managed textures with EvictManagedOnUnlock.
- Do nothing in AddDirtyBox for D3DPOOL_DEFAULT textures
2021-03-22 17:43:07 +00:00
Robin Kertels cb5f8aa392 [d3d9] Properly scale dirty box 2021-03-22 17:43:07 +00:00
Robin Kertels 3f57a3a8cc [d3d9] Use buffer DirtyRange to track managed uploads 2021-03-22 17:43:07 +00:00
Robin Kertels 4f45e74d96 [d3d9] Improve naming of texture dirty flag and dirty boxes 2021-03-22 17:43:07 +00:00
Robin Kertels 6f139791d2 [d3d9] Improve naming of buffer flags and ranges 2021-03-22 17:43:07 +00:00
Philip Rebohle cf4ff820be
[dxbc] Handle shaders without refactoringAllowed flag 2021-03-18 17:46:45 +01:00
Philip Rebohle 38649372bf
[dxvk] Allow different but matching views in findAttachment as well
Allows us to merge clears in some further edge cases.
2021-03-18 16:06:21 +01:00
Philip Rebohle 8be777b8e2
[dxvk] Move inline clears out of performClear
It is easier to reason about this code when there is no way for
performClear to be called within an active render pass instance.
2021-03-18 16:06:21 +01:00
Philip Rebohle b9360bacc2
[dxvk] Do not clear read-only aspects inside render pass
Instead, end the render pass as necessary and clear outside of it.
May fix validation errors in some very rare scenarios where the game
performs a clear and then uses a read-only depth-stencil view.
2021-03-18 16:06:18 +01:00
Georg Lehmann f48e3f596f [vulkan] relax warning about exclusive fullscreen
Only warn if it's actually available.
2021-03-16 12:23:32 +01:00
Philip Rebohle 2f553b5b16
[d3d11] Implement conservative rasterization
Needed for Nvidia ShadowLibs in Final Fantasy XV.
2021-03-13 20:22:32 +01:00
Philip Rebohle e3b92bcfac
[dxvk] Add conservative rasterization mode to rasterizer state 2021-03-13 20:22:32 +01:00
Philip Rebohle a77c80f08a
[dxvk] Enable VK_EXT_conservative_rasterization if available 2021-03-13 20:22:32 +01:00
Philip Rebohle 787297ee4e
[dxvk] Fix wrong aspect mask for clear copies 2021-03-07 16:29:21 +01:00
Philip Rebohle a520c5160e
[dxvk] Pack vertex binding divisor into reserved 14-bit field
Technically an illegal optimization since it limits the maximum
divisor to 16383, but there are no known applications relying
on very large divisors. Reduces state vector size by 128 bytes,
or roughly 20%.

This also bumps the state cache version to v10.
2021-03-06 16:59:12 +01:00
Philip Rebohle 95740eb78c
[dxvk] Use clears to impelemnt image copies if possible
Optimizes away a large amount of redundant depth-stencil clear+copy
madness in Final Fantasy XIV for a small performance improvement.
2021-03-06 02:43:28 +01:00
Philip Rebohle 8a4beefd3a
[dxvk] Store new image view when deferring clear/discard with matching subresources
Otherwise, if the view used for the second clear has a different format than
the first one, we'll end up clearing to the wrong colur. Assumes that images
with more than one aspect never have views with mismatching formats.

Also potentially improves logic around render pass clears depending on usage
patterns.
2021-03-06 02:37:02 +01:00
Philip Rebohle b579b03047
[dxvk] Spill render pass when clearing overlapping views
Since we're flushing all pending clears, we need to make sure
that all images are in the correct layout. Found by inspection.
2021-03-06 01:31:55 +01:00
Philip Rebohle 5f0f90f8d4
[dxvk] Merge clears with different views but identical subresources 2021-03-05 19:50:11 +01:00
Liam Middlebrook 1c2edabbcb [dxvk] Disable NVIDIA HVV bug workaround on fixed drivers
Reviewed-by: Arthur Huillet <ahuillet@nvidia.com>
2021-03-05 11:21:50 +01:00
Liam Middlebrook b25d6ba615 [dxvk] Add option to disable workaround for NVIDIA HVV bug
Adds a new dxvk.halveNvidiaHVVHeap option.

Reviewed-by: Arthur Huillet <ahuillet@nvidia.com>
2021-03-05 11:21:50 +01:00
Philip Rebohle 3acdf6e22a
[d3d11] Perform bound-checking in GetBufferSlice
Ensures that we don't pass invalid buffer slices to the backend.
2021-03-04 17:37:13 +01:00
Philip Rebohle 049fda9218
[d3d11] Revert index buffer optimization
This causes some problems when the app uses a combination of index
buffer offset and StartIndexLocation that overflows 32-bit integers.

In my testing, there haven't been many games benefitting from this
optimization anyway, so just reverting it should not have tangible
effects on performance.
2021-03-04 15:47:39 +01:00
DadSchoorse e44a1e614b [dxvk] preserve order of devices with the same type 2021-03-03 23:17:44 +01:00
Philip Rebohle 94049c0c90
[dxvk] Fix incorrect barrier for fragment shader resolve 2021-03-03 23:16:25 +01:00
Joshua Ashton 0367bf95c4 [build] MSVC check cleanup 2021-03-03 18:57:42 +01:00
Rémi Bernon 1589f516c9 [d3d9] Convert window position relative to its parent. 2021-03-03 15:49:52 +00:00
Philip Rebohle 5083b8474c
[meta] Release 1.8.1 2021-03-01 16:49:02 +01:00
Philip Rebohle 9bdc491cb7
[dxvk] Fix potential iterator invalidation in deferClear/Discard
flushClears clears the deferred clear list, so we need to
break out of the loop on that code path.
2021-03-01 16:49:02 +01:00
Joshua Ashton 31063252eb
[d3d9] Don't implicit discard if read locked 2021-02-28 15:06:23 +00:00
Joshua Ashton 741070785a
[d3d9] Allow implicit discard for all backed buffers 2021-02-28 13:01:00 +00:00
Joshua Ashton 572315567c
[util] Add custom vendor id for Warhammer Online 2021-02-28 09:54:33 +00:00
Joshua Ashton 375f8323e2
[dxso] Don't warn about Phase opcode 2021-02-27 21:17:01 +00:00
Joshua Ashton 6bb271b299
[d3d9] Cleanup options code 2021-02-27 20:35:37 +00:00
Joshua Ashton c7bebe8267
[util] Add config for Warhammer Online 2021-02-27 20:31:13 +00:00
Joshua Ashton 8c2ec5d9c9
[d3d9] Clean up resource locking code 2021-02-27 20:15:39 +00:00
Joshua Ashton e8fc7ea23a
[d3d9] Add d3d9.allowImplicitDiscard option 2021-02-27 20:08:57 +00:00
Joshua Ashton 50d223e614
[d3d9] Add option to use device local memory for constant buffers
Useful for testing performance.
2021-02-27 19:29:52 +00:00
Robin Kertels eec4481ca0 [d3d9] Fix various issues in UpdateTexture
- Skip copies for empty or invalid rects
- align up the extent
- use util functions to slightly clean up the code
2021-02-27 17:31:15 +00:00
Philip Rebohle 12693b17f9 [d3d9] Use DxvkSwapchainBlitter for presentation 2021-02-27 14:54:14 +00:00
Philip Rebohle 148272fbce [d3d11] Use DxvkSwapchainBlitter for presentation 2021-02-27 14:54:14 +00:00
Philip Rebohle 49f2b4c4a6 [dxvk] Introduce DxvkSwapchainBlitter and new presentation shaders
This is meant to provide a common rendering code for D3D9 and D3D11 presentation.
2021-02-27 14:54:14 +00:00
Philip Rebohle 277a4f0206 [hud] Explicitly set up viewport state 2021-02-27 14:54:14 +00:00
Joshua Ashton d51562fc9a [dxvk] Only pass needed amount of clear values when binding a framebuffer
Works around a Renderdoc bug and should hopefully make more sense.

The views are compacted in a framebuffer so it should be fine to do this.
2021-02-26 18:43:45 +01:00
Philip Rebohle db69ade7e7
[dxvk] Include fragment shader stage in render pass barrier as necessary
If we have readable depth, we need to make sure that the fragment shader
can actually, well, read the image.
2021-02-26 12:59:12 +01:00
Paul Gofman 71ffffb832
[vr] Use registry key to get OpenVR extensions list if available. 2021-02-26 12:46:22 +01:00
Philip Rebohle dcf4599c98 [d3d9] Use ATTACHMENT_OPTIMAL layout for render targets
Significantly improves GPU-bound performance on RADV in a number of games.
2021-02-26 05:02:32 +00:00
Philip Rebohle 1b97ca253f [dxvk] Actually transition source image in fragment shader blits
All meta ops should transition all involved images to the correct
image layout.
2021-02-26 05:02:32 +00:00
Philip Rebohle 9c6d3a2bf6
[d3d11] Fix RSGetViewports and RSGetScissorRects
If the output array is non-null, these functons always return the
number of valid viewports or scissors actually written to the array.

Fixes a wine test failure.
2021-02-26 03:35:57 +01:00
Philip Rebohle d118d35820
[d3d11] Fix IAGetIndexBuffer with optimized index buffers 2021-02-26 02:39:14 +01:00
Joshua Ashton 5ac9c45f65
[util] Add config for Mafia 2
https://gitlab.freedesktop.org/mesa/mesa/-/issues/1325
2021-02-25 15:09:00 +00:00
Philip Rebohle 5e55ced8b2
[dxvk] Fix deferred clear logic for overlapping image views
If we clear the same image subresources twice with different views
and then start rendering to one view, we may end up clearing to
the wrong clear value.
2021-02-21 14:53:03 +01:00
Philip Rebohle 96e1079526
[dxbc] Set usesDerivatives for gather and LOD query operations as well
Because these do implicitly use derivatives.
2021-02-21 14:24:54 +01:00
Philip Rebohle 5643bf47fe
[d3d11] Use discardImageView in DiscardView1 2021-02-21 02:51:59 +01:00
Philip Rebohle 5d4d32c613
[d3d11] Remove explicit spec constant for gamma texture
No longer needed.
2021-02-21 02:20:14 +01:00
Philip Rebohle 7168cc160f
[dxvk] Remove layout transition hack for presentable images 2021-02-21 02:19:44 +01:00
Philip Rebohle ab3de5e94b
[d3d11] Manually discard swap chain image view on present 2021-02-21 02:19:23 +01:00
Philip Rebohle 73a06aea72
[d3d9] Manually discard swap chain image view on present 2021-02-21 02:18:55 +01:00
Philip Rebohle e46bf78f31
[dxvk] Implement discardImageView
Built on top of the deferred clear logic.
2021-02-21 01:56:52 +01:00
Philip Rebohle 0ba3e693c9
[dxbc] Clean up some texture handling code 2021-02-20 23:39:15 +01:00
Joshua Ashton 80049c360e [dxvk] Fix resource tracking in attachment transitions
Fixes a crash in Portal 2 on DXVK native in which an old depth stencil is used after free after a device reset.
2021-02-20 19:34:49 +01:00
Joshua Ashton e9c91daba7
[dxvk] Fix out of bounds read when uploading HUD texture
The width + height does not add up to the size of the global array.
2021-02-20 14:37:00 +01:00
Philip Rebohle 5fc83a6075
[dxvk] Add missing trackImage to changeImageLayout 2021-02-20 14:35:57 +01:00
Philip Rebohle 1a1cc32b11
[dxvk] Store VkImage in barrier set rather than DxvkImage*
Avoids some accidental ref counting.
2021-02-20 14:35:22 +01:00
Philip Rebohle d66ecf4a94
[meta] Release 1.8 2021-02-19 05:29:50 +01:00
Joshua Ashton 59816a71b9
Revert "[d3d9] Don't minimise in WM_ACTIVATEAPP"
Not needed as this was an FSHack bug.

This reverts commit d87200c4d9.
2021-02-19 03:14:56 +00:00
Philip Rebohle fe5e215dfc [dxgi] Support multiple outputs per adapter 2021-02-18 14:19:55 +01:00
Joshua Ashton d87200c4d9
[d3d9] Don't minimise in WM_ACTIVATEAPP
Sometimes mode-setting jank can occur and technically we'd need to re-set the mode on the next present if the game gets actually minimised.
2021-02-15 17:29:45 +00:00
Philip Rebohle df76a5252a
[dxvk] Use default layout for depth-stencil image descriptors
Apparently the image layout matching rules were relaxed at some point,
so just using DEPTH_STENCIL_READ_ONLY_OPTIMAL for descriptors is legal
even if the image is in DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL or
DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL in the current render pass.
2021-02-15 17:00:35 +01:00
Robin Kertels ec5c324643 [d3d9] Mark generated mip maps as dirty 2021-02-14 23:55:00 +00:00
Robin Kertels 021ffe7350 [d3d9] Regenerate auto mip gen textures in UpdateTexture
.. instead of copying them
2021-02-14 23:55:00 +00:00
Robin Kertels 338f6dfb0e [d3d9] Track dirty regions for UpdateTexture 2021-02-14 23:55:00 +00:00
Philip Rebohle a0cf5926d8
[dxvk] Add parameter to prepareImage to ignore clears
Otherwise we may flush clears while clearing a render target,
which is silly and undoes the layout optimizations.
2021-02-14 04:22:52 +01:00
Philip Rebohle 2b401725dc [dxvk] Do not transition non-shared images at the end of the command buffer
Currently, if the frontend flushes the command list, we always transition
render targets to their default layout. This may lead to some arbitrary
GPU performance issues if the transitions are not free.

Instead, keep all images that are only used internally in their attachment
layout across command list boundaries, until they are unbound.
2021-02-14 04:00:02 +01:00
Philip Rebohle bce80b523f [d3d11] Mark images as shared if necessary 2021-02-14 04:00:02 +01:00
Philip Rebohle 4f184b3424 [d3d9] Mark images as shared if necessary 2021-02-14 04:00:02 +01:00
Philip Rebohle 6564895a32 [dxvk] Add shared flag to images
Indicates that images can be accessed by more than one context
internally, or through the interop interfaces without explicit
image layout transitions.
2021-02-14 04:00:02 +01:00
Philip Rebohle 6efc2588f8 [dxvk] Remove checkFramebufferBarrier
No longer serves any practical purpose.
2021-02-14 04:00:02 +01:00
Philip Rebohle 95676bf1e6 [dxvk] Always prepare images not bound to the current FB when clearing
Fixes a potential bug when clearing a render target after the
last render pass using it gets suspended.

Also, for some reason we were checking for <1 instead of <0.
2021-02-14 04:00:02 +01:00
Christopher Egert 594d09ae3a [util] Spoof a nvidia card for DIRT 5 2021-02-14 03:54:14 +01:00
Philip Rebohle 0c18a86090
[dxvk] Fix render target clears if attachments are not tightly packed
We do actually need to use the color target indices here rather than
the attachment index, since the repacking happens inside DxvkRenderPass.
Clear values still need to be tightly packed.
2021-02-12 03:13:11 +01:00
Philip Rebohle 436820d233
[dxvk] Add method to query color attachment index from attachment index 2021-02-12 03:13:11 +01:00
Philip Rebohle 0956050db6
[dxvk] Fix actual render target layout transitions for 3D images
Also, only emit transitions if the layouts differ.
2021-02-12 03:13:11 +01:00
Philip Rebohle bd87c12138
[dxvk] Make suspend parameter of spillRenderPass not optional 2021-02-12 03:13:11 +01:00
Philip Rebohle aa0296b7ca
[dxvk] Suspend render pass for most image operations
We can big brain this and only explicitly transition the render targets
that are used within the copy operation, if any, and leave the rest intact.
2021-02-12 03:13:11 +01:00
Philip Rebohle 96dfac7fea
[dxvk] Suspend render pass for certain render target clears 2021-02-12 03:13:11 +01:00