Version v1.10
Version v1.10
This release is primarily focussed on some optimisation and speed improvements, mostly during capture time while idle in the background but also applying to capturing in some cases and some improvements to replay speed. The amount of speedup you'll see will depend on your application's usage and API, but the worst cases before should be significantly improved. There are still some cases that remain to be improved in future.
Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.
Main Highlights
- Reduced idle overhead while injected into programs, while not actively capturing a frame.
- All APIs have seen improvements, though some will see greater savings than others especially depending on API usage patterns. Modern APIs (D3D12/Vulkan) with high frequency API calls and command buffer recording will likely see bigger savings.
- Improved speed of capturing a frame on Vulkan when GPU-local host-visible uncached memory is mapped.
- Improved application startup time from cold.
- Improved replay time for switching events for Vulkan captures with large numbers of descriptors bound with few actually used (i.e. 'bindless' type workflows).
Python API changes
ReplayController.GetDisassemblyTargets
now takes a single bool parameter, indicating whether to include disassembly targets that must be used with a pipeline. WhenTrue
is passed some of the targets may fail if a pipeline isn't supplied when callingReplayController.DisassembleShader
.CaptureFile.SetMetadata
has been updated to take two new parameters, the timestamp base and timestamp frequency (divisor). If converting from another file, these can be obtained withCaptureFile.TimestampBase
andCaptureFile.TimestampFrequency
. If specifying data purely synthetically, it is simplest to set the base to 0 and the frequency to 1.0 to indicate no conversion should happen, and provide all timestamps and durations in microseconds already. Otherwise timestamps will have the base subtracted from them, and timestamps and durations will be divided by the frequency to convert to microseconds.PipeState.GetReadOnlyResources
andPipeState.GetReadWriteResources
have an optional parameter nowbool onlyUsed
which defaults toFalse
. If set toTrue
not all resources will be returned and only dynamically used resources are guaranteed to be included. Pay attention to the returnedBoundResourceArray.firstIndex
showing what the first real index is of the first item in the returned array.
Features/Improvements
- UI: Work around GNOME bug that could lose default file extension on saving files.
- UI: When a non-active texture viewer tab is closed don't switch active tab.
- UI: Don't display shader disassembly views that require a pipeline if the shader viewer was opened without a pipeline.
- Vulkan: Optimise readback of mapped device-local memory on discrete GPUs (PCI-express window heap).
- Vulkan: Implemented some optimisations while in the background (not actively capturing a frame) in captured programs.
- Vulkan: When memory behind opaque tiled images is mapped, ignore replaying any detected writes which may cause GPU hangs.
- Vulkan: Add support for
VK_ANDROID_external_memory_android_hardware_buffer
. - OpenGL: Show float casting if
glVertexAttribFormat
is used with an integer format without normalisation enabled. - OpenGL: Add support for
GL_INTEL_performance_query
on windows. - OpenGL ES: Enabled use of
GL_OES_surfaceless_context
extension.
Bugfixes
- UI: Fix a bug where some platforms allowed closing progress dialogs which could break tracking.
- UI: Fix texture viewer settings being unmodifiable.
- UI: Fix truncation of long resource names in UTF-8.
- UI: Fix a case where the resource inspector would rename the wrong resource if a new resource is selected while a rename is in progress.
- UI: Allow python scripts run on the command line to call
sys.exit
to prevent the UI from displaying at all. - UI: Fix arrays of constant buffers not displaying properly in vulkan pipeline state view.
- All: Fix tracking of multiple swapchains when swapchains resize.
- All: Fix diagnostic log being left behind if the UI is closed before an application writing to it.
- All: Fix a potential crash if an index buffer is insufficiently sized and 32-bit indices are in use.
- All: Fixed a memory leak when converting zip.xml to rdc.
- Vulkan: Fix a crash when debugging vulkan SPIR-V shaders that contain line information in function variable declarations.
- Vulkan: Fix a crash with vulkan where no viewports are bound at a drawcall.
- Vulkan: Fix false-positive validation layer message that could appear when mis-aligned coherent mapped memory writes are detected.
- Vulkan: Fix loading captures that used
VK_EXT_debug_utils
for replay whenVK_EXT_debug_utils
isn't supported by anything on replay. - Vulkan: Fix memory being mapped with an offset.
- Vulkan: Fix handling of debug report enums in naming objects.
- Vulkan: Fix a crash when calling
vkDestroy*
/vkFree*
withVK_NULL_HANDLE
. - Vulkan: Fix a device loss if a frame capture resets a query pool after copying from it, leading subsequent replays to refer to an invalid query.
- Vulkan: Fix a crash if a device with multiple queues is destroyed and then a new one is created.
- Vulkan: Fix handling of CONCURRENT image sharing mode on swapchains.
- Vulkan: Fix indirect multidraws accidentally replaying draws twice when selected.
- Vulkan: Fix handling of variable-count last descriptors from
VK_EXT_descriptor_indexing
. - Vulkan: Fix API events associated with indirect-count vulkan draws breaking subsequent command buffers in the capture.
- OpenGL: Fix a case where texture state could be changed accidentally on the first present call on a new context.
- OpenGL: Fix restoring texture buffer bindings when
glTextureBufferRange
is available. - OpenGL: Fix multidraw commands breaking when selecting individual draws.
- OpenGL: Fix typo in
glClearFramebufferfv
and variants that would should RGBB instead of RGBA for clear color. - OpenGL: Fix a crash if
glFrameTerminatorGREMEDY
is called in a frame. - OpenGL: Fix saving cubemaps to disk only saving first face.
- OpenGL: Fix incorrect context parameters being serialised in implicit context thread switch.
- OpenGL: Handle replaying on GL drivers without ARB_transform_feedback2.
- OpenGL: Add missing fetch/serialise/apply of texture anisotropy state.
- OpenGL ES: Fix shader compilation for discard patterns shader.
- OpenGL ES: Fix call to glBindFragDataLocation that's not available on GLES.
- D3D: Fix disassembly of relative addressing DXBC bytecode when the variable is ambiguous.
- D3D11: Fix a crash on subsequent captures (not the first) when multiple contexts map the same buffer.
- D3D12: Fix a potential race condition when resources are mapped on one thread while another thread is submitting command buffers during capture.
- D3D12: Fix a case where descriptor copies of RTVs or DSVs mid-frame wouldn't properly reflect in subsequent command buffer bindings.
- D3D12: Fix D3D11On12 using semi-documented
ID3D12CompatibilityDevice
functions. - D3D12: Fix shader debugging query for resource dimensions on SRVs/UAVs created with NULL descriptor struct.
- D3D12: Fix CreateCommandList1 not handling command lists being created without implicit reset.
- D3D12: Fix shader debugging of vertex shaders using pixel shader access to root signature bindings, possibly leading to incorrect samplers or textures being used.
- Windows: Fix callstacks not displaying offset when no symbols are available for a module.
- Linux: Fix some programs not launching for capture correctly due to part of the ELF remapping not being accounted for.
- Linux: Fixed some issues that showed up with new Qt versions.