This release contains a number of improvements for writing python UI extensions. To show what can be accomplished and perhaps inspire you, I've written an extension called "Where is my draw?".
This extension attempts to do some simple analysis and uses RenderDoc's features to figure out why a drawcall is not rendering - a common problem when starting up on graphics programming. In particular it's aimed at new graphics programmers or users new to RenderDoc, as it explains the different checks it does to try and narrow down the problem. It's not perfect and it hasn't been tested on any real-world cases, but feedback is very welcome!
Because it's an extension it's not distributed directly with RenderDoc, but is instead available in a separate repository where you are welcome to submit your own extensions as well. The hope is that more useful extensions will appear here for features that are either not fully-fledged or not directly appropriate to be a native feature of RenderDoc.
To get started writing an extension consult the documentation on registering and integrating extensions as well as beginning to write one. You can also look at the source code of the extension above to see how I've written mine!
Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.
- Qt version used in binary builds on windows and linux (both stable releases like this and nightly builds) has been updated to Qt 5.15.2. It's unlikely this will change further in future as this is the final official Qt5 release and currently there are no plans to refactor/rewrite to Qt6.
The main improvement from this that should be noticed is fixes around Qt's behaviour with high DPI displays, including some bugs like difficulty moving/resizing windows on high DPI multi-monitor displays, as well as a bit better layout for fractional high DPI. In this case the UI should mostly be rendered at the next lower integer factor, with fonts only scaled up to match. There will likely still be some issues with fractional DPI scaling, but it should be improved.
- Python docstrings have been improved to help integration with type hinting stub generators in IDEs like PyCharm. More information is available in the documentation describing how to set this up and how to get started writing python code using RenderDoc's libraries, including specifically UI extensions.
Python API changes
ShaderVariableDescriptorhave been renamed to
ShaderConstantDescriptorbecause they are only used with
ShaderConstantand not with
- UI: Add a shortcut ctrl-enter in the capture dialog when any of the text boxes are highlighted, to launch the program for capture.
- UI: Allow python scripts to implement the
CaptureViewerinterface and register as capture viewer instances.
- UI: Added a number of new helpers for creating Qt UIs from python scripts.
- UI: Display CPU writes as write usage in timeline bar.
- UI: Text labels with
@12345are linked to events, the same as they are in capture comments.
- UI: When a resource is used in many barriers (e.g. one per subresource) only display one entry in resource usage list.
- UI: Improve handling of shortcuts to expand/collapse nodes in the event browser when horizontal scrollbar is active.
- UI: Improve layout handling for capture dialog when it hasn't been made visible, it could cause the overall window to be less flexible on resizing than necessary.
- UI: If an image is open instead of a capture and the image is changed on disk, the changes will be reflected in the UI. Note that this doesn't support changes in dimension or format, only contents.
- UI: Performance counter units are listed in the table headers rather than each cell.
- UI: The texture viewer thumbnails no longer shows buffers, unless it's a buffer bound to the currently-followed slot.
- UI: Slightly optimised the case where large descriptor arrays are visible to all shader stages including those not in use (e.g. tessellation/geometry).
- Documentation: Python documentation is more separated and better organised.
- Python: Docstrings are typed according to PEP484 to allow better stubs to be generated.
- Vulkan: Allow debugging of shaders with
- Vulkan: Improve handling of shader modules with multiple entry points.
- Vulkan: Optimisations for applications with very high frequency descriptor updates.
- D3D12: Check for available cap bits as well as COM interfaces for optional features. When used trivially (e.g. disabling a feature that's not avaiable) these will be skipped and not block capture loading.
- D3D12: Optimise some cases with large descriptor ranges in shaders.
- OpenGL: Suppress warning about invalid vertex setup on GL draws that are degenerate and so don't read any vertices.
- Android: Fix an issue with installation on latest Android versions.
- All: Fix rare crash with use-after-free when capturing.
- All: Fix issue displaying mesh previews for vertex stages that output less than 4 components for position.
- All: Fixed issues with displaying 3D textures, when the zoom level was below 100% slices would incorrectly blend together in the display.
- UI: Fix copy-pasting text with resource links.
- UI: Fix array-of-struct display in buffer viewer.
- UI: Fix mismatched background colours being displayed when not using checkerboard background in texture viewer.
- UI: Fix buffer paging controls not appearing properly in buffer viewer.
- UI: Fix buffer viewer clamping not clamping to correct length when byte offset is used.
- UI: Fix pipeline state on D3D12 showing extra resources in some cases.
- UI: Fix aspect ratio display in mesh output view when inverse viewport height is in use.
- UI: Fix an off-by-one lag updating the currently selected texture in the texture viewer.
- UI: Fix a potential crash when changing events.
- Image: Fix a crash if a memory allocation fails while opening a large EXR file.
- Vulkan: Fix SPIR-V debugging issue with accesses in function calls made multiple times.
- Vulkan: Fix a crash on vulkan with dedicated memory for buffers.
- Vulkan: Fix issue selecting indirect draw when only one draw is specified.
- Vulkan: Fix API validation option enabling layer that caused instance creation failures in new loader.
- Vulkan: Fix overlays not rendering if framebuffer dimensions are smaller than the attachment dimensions.
- Vulkan: Fix crash when selecting non-drawcall event.
- Vulkan: Fix handling of OpModuleProcessed in SPIR-V modules.
- Vulkan: Fix crash fetching mesh output when shader uses variable pointers.
- Vulkan: Fix incorrect renderpass being used when getting bindless shader feedback.
- Vulkan: Add workaround for Qualcomm driver bug selecting compute dispatches.
- Vulkan: Fix an issue showing the whole pass in mesh output view, when some but not all draws are using inverse viewport height.
- Vulkan: Fix "run to NaN/inf" not working properly in shader debugger.
- D3D: Fix an issue where D3D shader debugging would see wrong UAV contents from after the draw/dispatch.
- D3D: Fix handling of shader debugging fetching from unbound views.
- D3D: Fix handling of new separate debug info which behaves inconsistently between fxc and dxc.
- D3D: Fix a crash if an application doesn't release all references to a swapchain before resizing it.
- D3D: Allow querying swapchains for
- D3D11: Fix scissor wrongly being applied in overlays when disabled.
- D3D11: Fix case where resources could be double deleted if they are deleted and then the same pointer is recreated immediately after.
- D3D12: Fix typeless R16 depth targets not being displayed correctly.
- D3D12: Fix display of root constants selecting wrong source data when multiple root constant elements are present.
- D3D12: Fix GPU hang fetching mesh output on very large instanced draws using geometry and/or tessellation shaders.
- D3D12: Set correct initial resource state resources created mid-capture.
- D3D12: Fix a crash when stride values PSO stream-out descriptor are garbage but should be ignored.
- D3D12: Fix memory leak of descriptor data on every capture.
- D3D12: Fix a crash if IHV extensions are enabled for DXIL shaders.
- OpenGL: Fix overlays breaking when pixel unpack buffer is bound.
- OpenGL: Fix overlay handling of unsized formats for depth-stencil texture.
- OpenGL: Fix primitive restart not always being correctly listed as enabled.
- OpenGL: Fix a potential crash when an application specifies invalid dimensions for textures.
- OpenGL: Fix a crash when buffers are resized mid-capture.
- OpenGL: Fix an issue when fetching IHV counters if the capture uses transform feedback.
- OpenGL ES: Work around driver bug creating shared contexts.
- Linux: Fix memory corruption with AMD hardware counters on linux.