Skip to content

Version v1.10

Choose a tag to compare
@baldurk baldurk released this 18 Sep 16:22
· 2088 commits to v1.x since this release

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 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. When True is passed some of the targets may fail if a pipeline isn't supplied when calling ReplayController.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 with CaptureFile.TimestampBase and CaptureFile.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 and PipeState.GetReadWriteResources have an optional parameter now bool onlyUsed which defaults to False. If set to True not all resources will be returned and only dynamically used resources are guaranteed to be included. Pay attention to the returned BoundResourceArray.firstIndex showing what the first real index is of the first item in the returned array.


  • 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.


  • 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 when VK_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* with VK_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.