Commit Graph

6070 Commits

Author SHA1 Message Date
Benson Joeris cc8aa679e9 Optimize Apply_InitialState for VkDeviceMemory resources
This change reduces the amount of data copied into VkDeviceMemory resources in
`Apply_InitialState`; this uses the new (interval-based) reference tracking.

On a large capture from a recent game, this change reduces the amount of copied
data from 2.2GB to 720MB (plus 100MB cleared to 0). This reduces the time spent
in `ApplyInitialContents` from 1800ms to 1500ms.

Ranges of memory are initialized/reset by either clearing to 0, or copying in
the initial state data, according to the `FrameRefType`, as follows:
- Read-only (`eFrameRef_Read`) regions of memory are initialized by copying
  once, before the first replay.
- Read-before-write (`eFrameRef_ReadBeforeWrite`) regions of memory are reset by
  copying before each replay.
- Write-only (`eFrameRef_PartialWrite` and `eFrameRef_CompleteWrite`) regions of
  memory are cleared to 0 before each replay. This is intended to avoid possible
  user confusion when inspecting these regions of memory, as they might
  otherwise show data written later in the frame.
- Unused (`eFrameRef_None`) regions of memory are cleared to 0 once, before the
  first replay.
2019-03-02 08:24:12 +00:00
Benson Joeris 3abab3bbb9 Fix Attachment FrameRefType
Attachments might be read and/or written. Pessimistically assume attachments are
read and then overwritten. Further analysis should be able to refine this access
type in some cases.
2019-03-02 08:24:12 +00:00
Benson Joeris f39ae770e4 Fix Descriptor FrameRefType.
Storage resources can be read and/or written by the shader. We must
pessimistically assume that the shade reads, and then modifies these resources.
2019-03-02 08:24:12 +00:00
baldurk 8903c8c1fa Search for Android SDK in common locations on macOS
* Environment variables still take priority, but it can be common for them not
  to be set so we need to look here.
2019-03-01 17:47:23 +00:00
baldurk c73f045241 Add packaging/buildscript support for macOS
* Add realpath.sh for emulating readlink -f on macOS
  MIT licensed from https://github.com/mkropat/sh-realpath
2019-03-01 17:47:10 +00:00
baldurk 8dae3437c5 Make sure to stop looking once we find the python library 2019-03-01 16:59:42 +00:00
baldurk 4327f32667 Deserialise arrays of complex structures 2019-03-01 15:46:49 +00:00
baldurk db4cb2d1ea Fully initialise members in PhysicalDeviceData 2019-03-01 15:46:37 +00:00
baldurk be36556c0c Delete images array used for calling vkGetSwapchainImagesKHR 2019-03-01 13:53:50 +00:00
baldurk 3f7d5b7882 Delete VkSubmitInfo::pWaitDstStageMask in Deserialise 2019-03-01 13:53:27 +00:00
baldurk ed6d0523cd Delete pbuffers allocated in glx_platform for offscreen contexts 2019-03-01 13:26:12 +00:00
baldurk 41a1358bb2 Remove allocated initial state blobs that are no longer used 2019-03-01 12:47:43 +00:00
baldurk 2a0a663367 Delete TLS objects on GL driver shutdown 2019-03-01 12:44:02 +00:00
baldurk e23974e2bf Initialise variables that might not be set otherwise before first use 2019-03-01 11:33:05 +00:00
baldurk a53dbe40b6 Remove no longer used UBO 2019-03-01 11:31:32 +00:00
baldurk 7541dc6bc7 Add cmake compile options for enabling address/thread sanitizer
* Currently tsan doesn't work well in Qt because it doesn't recognise QMutex
2019-02-28 17:48:30 +00:00
Julian Meder bf17650ace Keep DX12 descriptor heaps alive until deferred copy/write flush. 2019-02-28 16:45:33 +00:00
tuxerr c6edcf9a38 add support for VK_EXT_fragment_density_map 2019-02-28 00:10:03 +00:00
baldurk d80c5973dd Only print nvapi disabled warnings a few times before silencing 2019-02-27 20:49:20 +00:00
baldurk 2cda7f8af0 Fix access to Qt containers that need int indexes 2019-02-27 14:50:27 +00:00
Denis Rutkov 8d8538a068 Fix another issue with MSAA depth buffer copying during D3D12 replay 2019-02-27 14:39:57 +00:00
baldurk 45a9fc97ae Fix int32_t/size_t type matching in rdcarray functions 2019-02-27 14:38:34 +00:00
Denis Rutkov 5fb59defcb Fix reading initial state for upload heap buffers. 2019-02-27 13:51:27 +00:00
dendron2000 4846221794 Fix copying depth data from depth stencil with MSAA in DX12. 2019-02-27 13:51:27 +00:00
dendron2000 0c1b6439c4 Fix reading back initial buffer/texture states in D3D12. 2019-02-27 13:51:27 +00:00
dendron2000 9bf50e124a Fix compiling without global optimization. 2019-02-27 13:51:27 +00:00
baldurk f70de276e6 Use size_t in rdcarray
* This means that allocating >2GB in a bytebuf doesn't crash. There was no good
  reason for the int32_t - that dates back to the earliest interop structs
  defined for communication with .NET
2019-02-27 13:50:05 +00:00
baldurk 64062ec2c6 Apply luminance/alpha emulation to glTextureView 2019-02-27 13:50:05 +00:00
baldurk f3593c970f Don't crash or bind invalid vertex buffers in GL mesh render
* This can happen after clearing the PostVS cache, when editing a shader
2019-02-27 13:50:05 +00:00
baldurk 308474091a Follow-up to previous fix, for WrappedID3D12Device::CreateHeap1 2019-02-27 13:50:05 +00:00
baldurk 829e494e5e Silently skip out of bounds declared vertex buffers. Closes #1287
* We assume that these vertex buffers are unused in any actual declared inputs
  so they can safely be treated as empty.
2019-02-27 13:50:05 +00:00
Julian Meder 5878787daf Fix WrappedID3D12Device::CreateHeap worngly returning E_NOINTERFACE. 2019-02-26 17:00:15 +00:00
baldurk 793ea24f9d Clear dlerror for code that's aggressive with error checks. Close #1279 2019-02-25 21:04:09 +00:00
baldurk 8ae9ccdd7f Check descriptor writes for validity before updating in PostVS fetch
* This can happen for push descriptors that are declared but never used.
2019-02-25 15:31:43 +00:00
baldurk 2dc37ac232 Handle creating backbuffer views with non-NULL non-typed descriptor
* We already handle the case where e.g. D3D12_RENDER_TARGET_VIEW_DESC is NULL
  and we need to substitute in a typed descriptor for backbuffers. We didn't
  handle the case where
2019-02-25 15:31:43 +00:00
tabi.katalin 2507532623 Fix GLES shader compile errors
Detected two shader compile errors while replaying GLES apps:
1. „#extension directive must occur before any non-preprocessor token” -  Fix the order of precisions and extensions in the shader code.
2. „extension 'GL_OES_texture_cube_map_array' is not supported”  - Do not add extensions if they are actually not supported. TEXTURE_CUBE_MAP_ARRAY was added to GLES 3.2 so   GL_OES_texture_cube_map_array and GL_EXT_texture_cube_map_array are no longer used.
2019-02-25 11:30:25 +00:00
baldurk e9e1d91b34 linux compile fix 2019-02-22 22:40:33 +00:00
baldurk a1d1ccea62 Update glslang to a51d3d9f223361165127ded3cd2e59d81e22d91f 2019-02-22 13:56:37 +00:00
baldurk 73d51637c4 Handle querying for ID3D11Texture2D1 and ID3D12Resource1. Closes #1276 2019-02-22 13:49:58 +00:00
baldurk 95570e5a28 Don't allocate empty memory if no index buffer is bound 2019-02-22 13:49:58 +00:00
Benson Joeris 47b351c566 Refactor GetByteSize and GetPlaneByteSize using GetBlockShape
This eliminates a substantial amount duplicate code between `GetByteSize` and
`GetBlockShape`.

Also added explicit tests of `GetPlateByteSize` independent of `GetByteSize`.
2019-02-21 21:58:26 +00:00
baldurk 0f1e1faf48 Erase elements that should not be serialised to avoid crashes 2019-02-20 13:53:41 +00:00
baldurk 98b8ff1dd7 Don't use GPUCounter directly in public interface for python
* Python throws an error when enums don't have a pre-existing value, which can
  happen for GPUCounter due to hardware specific counters. Instead just declare
  as int and allow casting back and forth for values that are pre-existing.
2019-02-20 13:53:20 +00:00
baldurk e01bc4c734 Implement untested support for D3D12.3/D3D12.4 interfaces. Closes #1268
* Most of the interfaces are not supported - protected sessions, raytracing,
  etc.
* We also split apart the 1/2/3/4 wrapped implementations to avoid uber files.
2019-02-19 17:54:53 +00:00
baldurk 24abd885ab Fix UUID check for ID3D12Fence1 2019-02-19 17:54:53 +00:00
baldurk b14e3f2ef9 Fix valgrind issues found running unit tests
* GLContextTLSData default constructor should be initialised.
* Add some missing deletes in shader reflection
* Call freeaddrinfo after getaddrinfo
* Don't leak if we're reserving 0 bytes in rdcstr over the top of an already
  empty rdcstr
2019-02-19 17:54:53 +00:00
Benson Joeris cb26815570 Fix bug in Intervals<T>::update()
When the interval being updated went all the way to the end of the last
interval (UINT64_MAX), `update` would call `mergeLeft` on the `end()` interval.
This would cause `mergeLeft` to dereference an invalid iterator.

Also added a quick return for updating empty intervals, and unit tests to verify
correct handling of empty intervals, which were run both with and without this
optimization.

Also removed some unnecessary asserts that likely called many times. These
asserts could only fail if there was a bug in the `Intervals<T>` implementation,
which should be caught by the unit tests.
2019-02-19 17:54:41 +00:00
Benson Joeris a7b21ae2d2 More precise memory tracking for vkCmdCopyImageToBuffer
This change tracks the exact memory regions of the buffer accessed in
`vkCmdCopyBufferToImage` and `vkCmdCopyImageToBuffer`. In the case of
`vkCmdCopyImageToBuffer`, using the exact memory regions allows the buffer write
to be treated as a `CompleteWrite` (instead of `PartialWrite`).
2019-02-19 15:56:57 +00:00
Benson Joeris d6b706b132 Add GetTexelShape to compute image format texel info
This returns the width and height of the texel blocks, and the number of bytes
per texel block.
2019-02-19 15:56:57 +00:00
baldurk d1e0d7f88f Fix segfault if allocatedPrograms vector is deleted before shutdown 2019-02-18 20:43:00 +00:00