This release continues the plan of shipping a stable release every other month. As well as the usual batch of bugfixes and minor improvements there is one big ticket feature added:
Thanks to Steve Karolewics who has been working hard over the last 6 months, D3D12 now has the same shader debugging support that D3D11 has had for many years. This includes every feature already present, as well as support for the new SM5.1 bytecode format that's D3D12-exclusive.
It is accessed and used in exactly the same way as D3D11, vertices can be debugged from the mesh viewer and pixels from the texture viewer. Compute threads in dispatches can be debugged from the pipeline state, though note that the same proviso exists that only one compute thread is simulated when being debugged.
Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.
- As mentioned above, D3D12 shader debugging is now fully supported, including support for the new SM5.1 and resource array indexing:
- If RenderDoc is associated with DDS files in windows explorer it will now generate and display thumbnails for them. This supports compressed block formats using AMD Compressonator:
- Vulkan capture and replay performance should be improved, especially for applications with large amounts of memory in use.
Python breaking changes
- Some settings from the
PersistantConfigclass have been removed and moved to a new centralised settings system shared with the core module and so available at all times rather than just in the UI program. These are:
ShaderViewer_FriendlyNaming- moved to
Android_SDKPath- moved to
Android_JDKPath- moved to
Android_MaxConnectTimeout- moved to
ExternalTool_RGPIntegration- moved to
ConfigSettings- removed aside from
shader.debug.searchPathswhich was moved to
- The D3D12 pipeline state representation has been refactored to be root-signature centric and contain bindings and tables off root signature entries, compared to the previous layout that unpacked everything into register spaces and registers.
- To be more python friendly, texture swizzles in pipeline states are moved from a C array which didn't bind well to python into a struct that contains
SigParameternow has a
varTypeinstead of a
compTypeto allow more flexible representation of signature elements.
- UI: Buffer viewer row offset can be used to skip through pages (10,000 rows per page) as well as scroll within a page.
- UI: Scroll to selected texel in buffer viewer when opening a texture from the texture viewer.
- UI: Improve the display of edited shaders to reference the original resource instead of displaying the unknown internal ID of the replacement.
- UI: Show the specific subresource used in a copy in the texture viewer, for both input and output.
- UI: Unreasonably long resource names are truncated when displayed outside of the resource inspector.
- UI: In the shader debugger, a new panel tracks accessed resource bindings.
- UI: Handle opengl dvec/dmat types in buffer formatter.
- UI: When using goto pixel option in texture viewer, centre the view on the selected pixel if possible.
- UI: Add keyboard shortcuts for accessing remote host menu.
- UI: Tweak auto-generated marker regions to ignore command buffer boundaries.
- All: Reduce memory overhead when reading captures with large buffers.
- All: Added a configuration system for configuring debug/beta flags (similar to about:config in browsers).
- All: Update RGA support to 2.3.1 including support for Navi 14.
- Vulkan: Improve replay load-time performance for very large resource arrays.
- Vulkan: Improve handling of indirect-count draws with very large max draw count.
- D3D12: Improve handling of 'bindless' large resource arrays.
- D3D12: Add support for more interfaces in D3D12's OpenSharedHandle.
- Image Viewer: Add support for more legacy type DDS format headers.
- Android: List system packages as hidden folders when browsing for packages.
- All: Fix handling of texture overlays when rendering to mip levels other than 0.
- All: Fix an edge case where after more than 2 billion function calls a capture would fail to create.
- All: Fix a problem where if GPU enumeration crashes, the crash reporter would also crash trying to enumerate GPUs.
- All: Fix a referenced tracking issue where writes to a resource could be lost leading to the replay treating it as read-only even if it's modified in the capture.
- All: Fix a crash selecting a new draw, after previously selecting a draw which generates too much vertex data.
- All: Fix shader debugging failure over remote proxy connection.
- UI: Fix issues with paging in the buffer viewer.
- UI: Fix potential crash with hovering over treeview while data is changed.
- UI: Disallow entering invalid paths into texture save dialog.
- UI: Fix clamping on extreme out-of-bounds values for offsets/vertex counts in mesh viewer.
- UI: Fix display of secondary data with less than 3 components in mesh viewer.
- UI: Fix use of packed uintten/unormten formats in raw buffer viewer.
- UI: Fix export from buffer viewer when pagination is in use.
- UI: Fix display of column-major matrices in buffer viewer.
- UI: Fix crash if a capture is made immediately before capture connection is closed.
- UI: Fix the search direction not respecting the find previous/find next buttons.
- UI: Fix handling of row_major on struct member types.
- UI: Fix missing padding for rectangular matrices on some generated buffer formats.
- UI: Fix wrong buffer register being generated for HLSL editing stubs.
- UI: Fix connecting to remote servers (including android device) sometimes incorrectly saying they were already in use.
- UI: Add progress dialog and cancel button while shader viewer is running debug in the background.
- D3D: Don't trample an input file with #line statements in shader debug info.
- D3D: Fix handling of FXC produced debug info with invalid array type data.
- D3D: Fix some cases of shader linkage between VS and PS failing when debugging pixel shaders.
- D3D: Fix incorrect calculation of SV_VertexID in mesh output and shader debugging when using index/vertex offsets.
- D3D: Fix incorrect handling of empty structs in cbuffers.
- D3D: Fix incorrect handling of struct array strides not including padding in cbuffers.
- D3D11: Fix a crash if stream-out is unbound by calling
- D3D11: Fix an off-by-one issue with the instruction pointer when debugging flow control constructs.
- Vulkan: Don't load
VK_KHR_driver_propertieson replay if it's not available.
- Vulkan: Improve memory type selection, increasing capture performance.
- Vulkan: Fix race condition if memory is unmapped while referenced in a queue submission happening on a different thread.
- Vulkan: Fix crashes with indirect-count draws in secondary command buffers.
- Vulkan: Fix an overflow crash when looking up buffer contents for buffers bound with a positive offset and
- Vulkan: Fix invalid code having multiple queries of the same type active at once when initially resetting a query pool.
- Vulkan: Fix a potential crash when replaying captures with very large query pools.
- Vulkan: Fix framebuffer clears not properly applying when selecting vkCmdBeginRenderPass.
- Vulkan: Fix crash if dynamic descriptor access indexes out of bounds. The dynamic feedback of which descriptors are used may still be invalid but it won't crash.
- Vulkan: Remove dangling SPIR-V references when patching for mesh-output fetching.
- Vulkan: Fix issues with KHR performance query counters storing time.
- Vulkan: Fix vertex output processing not properly handling push constant ranges that cover both vertex and another shader stage.
- Vulkan: Allow
NULLas an object name string in vulkan, to comply with new spec update.
- Vulkan: Fix crash when serialising pipeline state with dynamic viewport/scissor state and garbage viewport/scissor pointers which should be ignored.
- Vulkan: Fix an edge case where rendering meshes could fail if the attribute offset was folded into the vertex binding offset.
- Vulkan: Fix mesh output data not being correct for component-packed outputs.
- Vulkan: Fix disassembly of vector shuffles.
- Vulkan: Add fallback to remove global queue priorities if device creation fails due to lack of privilege.
- Vulkan: Don't reflect subpass input data as storage type images.
- Vulkan: Add support for khronos validation layer when enabling API validation.
- Vulkan: Don't add VkPhysicalDeviceVulkan12Features to device creation chain, causing invalid combinations of feature structs.
- Vulkan: Verify that device limits aren't exceeded when patching descriptor sets, for drivers that have quite low descriptor limits.
- Vulkan: Fix usage being listed for bound compute pipelines in drawcalls, and vice-versa bound graphics pipelines in dispatches.
- Vulkan: Serialise VkDeviceCreateInfo before patching for capture/replay, to avoid polluting with features enabled only for RenderDoc.
- OpenGL: Hide any debug messages from the driver generated while restoring.
- OpenGL: Ensure that shader editing programs used in program pipelines can't be overridden.
- OpenGL: Fix an issue where filling in missing mips in a legacy-allocated texture could use an incompatible type hint on legacy unsized textures.
- OpenGL: Handle invalid draw-indirect calls better by zero-initialising parameters.
- GLES: Create shaders as version 300 if replaying on GLES 3.0.
- GLES: Add an emulation path for blitting GL_RGB format textures, as some devices don't allow them to be attached to framebuffers.
- GLES: Fix a crash when calling
eglGetDisplay(EGL_DEFAULT_DISPLAY)on Linux. Doing this may disable keyboard input, unless the default X connection can be used.
- GLES: Add workaround
glFlushcall for ARM Mali bug with copying images in initial contents.
- D3D12: Fixed incorrect results reading >16MB at once from a buffer.
- D3D12: Don't serialise maps of READBACK resources on D3D12.
- D3D12: Properly report tiled resources as unsupported on D3D12.
- D3D12: Fix crash with D3D12 overlays if no viewport has been set.
- D3D12: Fix incorrect wait/signal replay which would allow multiqueue work that was properly synchronised to overlap.
- D3D12: Clear resources created mid-frame to a sensible default state so results from later in the frame don't bleed into earlier points.
- D3D12: Fix handling of ResourceMinLODClamp on cubemap textures.
- D3D12: Fix a crash with graphics pipeline state object if stream out strides are invalid when stream out is disabled (no entries).
- D3D12: Optimised loading captures with many resources that don't change state.
- D3D12: General optimisations to handling of 'bindless' scenarios.
- Image Viewer: Add bounds checking for invalid data in DDS headers.
- Image Viewer: Fix handling of block-compressed textures with sizes that aren't multiples of 4.
- Linux: Fix callstack handling for non-PIE executables.
- Linux: Fix registration of vulkan layer on linux with missing parameter to command line.
- Linux: Fix captures not being saved if a relative path is specified via the RenderDoc API, and the target directory is not created.
- Android: Fix a case where the library can be unloaded causing connection issues when using new Android 10+ layering.
- Android: Fix launching adb on windows when both windows and linux SDKs are installed to the same location.
- Android: Fix proxy display of textures failing for some formats.
- Android: Work around presumed qualcomm driver bug displaying multisampled RGBA16F textures.