Renderdoc Versions Save

RenderDoc is a stand-alone graphics debugging tool.

v1.22

1 year ago

Version v1.22

This release contains some support for a few new vulkan extensions as well as bug fixes.

As always binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.

Python API changes

  • The KnownShaderTool has moved from the qrenderdoc module to the renderdoc module.
  • CaptureContext.EditShader takes an additional parameter KnownShaderTool knownTool which indicates the tool that should be preferred for compilation by default, if known.
  • PipeState.IsStripRestartEnabled and PipeState.GetStripRestartIndex have been renamed to IsRestartEnabled and GetRestartIndex and the SupportsRestart helper has been removed, since primitive restart is supported on non-strip topologies on many APIs and will now be reported through it being enabled or not.
  • ShaderDebugState no longer contains a list of sourceVars, this is now available as a per-instruction list in the instInfo which is renamed from lineInfo in the ShaderDebugTrace. Similarly LineColumnInfo has been renamed to InstructionSourceInfo.

Features/Improvements

  • UI: Improved the highlighting of changed variables when stepping/running in the shader debugger.
  • OpenGL: When capture is unsupported on a running program, display the reason why in the connection window as well as in the overlay text.
  • OpenGL: Show bicubic filtering functions in pipeline state viewer.
  • OpenGL: Replay multisampled backbuffers on OpenGL ES.
  • D3D: Display magic quality values better in texture viewer status bar.
  • D3D12: Improve performance for adding patterns into discarded resources.
  • Vulkan: On fastest replay optimisation level don't override renderpass load ops.
  • Vulkan: Optimise contiguous bindings of sparse pages in buffers before passing to the driver.
  • Vulkan: Add support for extensions:
    • VK_EXT_attachment_feedback_loop_layout
    • VK_EXT_primitive_topology_list_restart
    • VK_EXT_primitives_generated_query
    • VK_EXT_depth_clip_control
    • VK_EXT_multisampled_render_to_single_sampled

Bugfixes

  • All: Calculate index buffer size accurately accounting for byte offset.
  • All: Fix the summation of event durations for fake added marker regions.
  • All: Fix a potential crash when opening corrupted captures.
  • UI: When displaying textures as buffers don't add [[row_major]] for non-matrix formats.
  • UI: Fix buffer viewer not properly showing fixed (non-repeating) data over 10kB.
  • UI: Fix buffer viewer export not being limited to the specified range but exporting the whole size of the buffer.
  • D3D: Fix shader debugging with integer texture sampling operations.
  • D3D12: Fix a crash if descriptor indexing accessed an out of bounds descriptor.
  • D3D12: Fix problem identifying bindings in 'arrays' in pipeline state.
  • D3D12: Fix a crash when using resolve attachments in render passes.
  • D3D12: Report AMD's UAVBindSlot feature as supported in AGS.
  • Vulkan: Fix shader source not being visible if no filename was provided.
  • Vulkan: Fix a potential crash when the memory backing BDA buffers is freed without the buffer being destroyed.
  • Vulkan: Fix duplicate vkQueueSubmit2 events being displayed when no command buffers are submitted.
  • Vulkan: Fix a bug with arrayed descriptors of dynamic buffers not counting the number of dynamic offsets correctly.
  • Vulkan: Handle extended dynamic state extensions that were implicitly promoted in 1.3.
  • Vulkan: Fix a crash parsing IDs after longer entry point names.
  • Vulkan: Fix a problem where shader debugging would be wrong if an OpAccessChain only dereferenced a global binding array.
  • Vulkan: Fix a case where shader debugging would display unknown pointers after stepping backwards.
  • Vulkan: Fix a case where resources that are fully overwritten after being referenced in a descriptor set would not properly have their contents replayed.
  • Vulkan: Fix sparse buffers not correctly having contents saved and restored.
  • Vulkan: Fix a bug where promoted extensions wouldn't properly be considered enabled if only a core version were used and zero extensions were enabled.
  • OpenGL: Fix a crash on Intel drivers when capturing GL programs.
  • Android: Work around an Android OS bug causing invalid library loads.

v1.21

1 year ago

Version v1.21

This release is primarily maintenance and bug fixing, as well as some small quality of life improvements.

As always binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.

Python API changes

  • No breaking changes.

Features/Improvements

  • UI: Highlight the current event in the texture viewer context menu that shows resource usage.
  • UI: Improve handling of source-level shader debugging breakpoints.
  • All: Show status in mesh viewer when geometry data is not available, e.g. when using multiview and geometry/tessellation on vulkan.
  • All: Tweaked the in-program overlay to be more readable and better organised, especially around multiple windows.
  • All: Handle applications that don't create any graphics-compatible queues on Vulkan or D3D12 to still be able to capture and replay correctly.
  • Vulkan: Improve the clarity of error messages for incompatible captures, showing the reason for the incompatibility and what device was captured on and replayed on.
  • Vulkan: Implemented tracking of printf statements from geometry shaders.
  • Vulkan: Allow buffer format re-interpreting of push constants.
  • OpenGL: Display the 'intuitive' state of face culling winding, rather than strictly following enums (e.g. when clip origin is non-default, GL_CCW frontface means that clockwise wound polygons are front-facing).

Bugfixes

  • UI: When exporting events from event browser, fix column alignment of event column.
  • UI: Fix an issue locating cbuffer values in the shader debugger when they are used without cbuffer namespace.
  • UI: Ignore whitespace in variable expressions (e.g. struct_var . member) for showing variable tooltips.
  • UI: Fix incorrect data being shown for pages after the first in large buffers.
  • UI: Fix calculation of mip-map co-ordinates for small mips of NPOT textures.
  • UI: Fix panning in arcball controls in mesh view.
  • Windows: Don't allow enabling global hook if short paths are disabled on a given drive.
  • Vulkan: Don't generate an empty source file when an OpSource is encountered with no source, only a language (and/or filename).
  • Vulkan: Fix shader debugging being wrong when constant offsets are provided to image load or sample operations.
  • Vulkan: Fix editing compute shaders not properly remapping entry point name if it changes.
  • Vulkan: Fix a potential error if a command pool is reset while a command buffer is mid-record, and the command buffer is then subsequently recorded again.
  • Vulkan: Fix an issue incorrectly inheriting state from the wrong libraries when using EXT_graphics_pipeline_library.
  • Vulkan: Fix a problem where dynamic rendering state was applied incorrectly in overlays and fetching geometry output.
  • Vulkan: Fix incorrect shader debugging when using arrays of uniform buffer objects.
  • Vulkan: Fix a problem where all features of EXT_extended_dynamic_state would be used if any of them are enabled/supported.
  • Vulkan: Add workaround for Intel windows issue where occlusion queries would not work when used in the pixel history, leading to missing entries.
  • Vulkan: Fix handling of dynamic rasterizer discard not properly ignoring pipeline state set value.
  • Vulkan: Fix incorrect reading of 64-bit values when fetching vertex output data.
  • Vulkan: Fix shader debugging not handling bitcasts between vector and scalar.
  • Vulkan: Use the correct load/store action for stencil with dynamic rendering.
  • Vulkan: Fix Vulkan crash when viewing NV12 in TextureViewer.
  • Vulkan: Fix reflection of multi-dimensional arrays of matrices.
  • Vulkan: Fix detection of buffer packing rules for tightly-packed float3 arrays, which is not valid std430.
  • Vulkan: Handle state changes on the very first event in a command buffer.
  • Vulkan: Fix a bug when using dynamic rendering within secondary command buffers.
  • Vulkan: Fix some issues with buffer formatting of GPU pointers.
  • OpenGL: Fix a potential problem when loading a GLES capture on windows where the wrong set of extensions would be queried.
  • OpenGL: Ensure depth bounds state does not affect overlay rendering.
  • OpenGL: Fix incorrect handling of GL shader include strings.
  • D3D12: Fix a problem where DENY_SHADER_RESOURCE flag was not removed from all possible ways of creating resources.
  • D3D12: Handle renderpass resolve actions properly.
  • D3D12: Make the error message for fetching counters without enabling the artificial "developer mode" more clear.
  • D3D11: Work around an nvidia driver bug copying from >2GB buffers by treating this case as out-of-memory.
  • D3D11: Use bytes generated rather than primitives generated for DrawAuto implementation.

v1.20

1 year ago

Version v1.20

In this release the main improvement is a refresh and update to the buffer viewer, particularly in how it handles fixed (SoA) and repeating (AoS) data and improvements to how you specify custom formats of buffer data. In addition there are a number of bugfixes including some crashes using VK_KHR_dynamic_rendering.

As always binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.

Main Highlights

  • Views of buffers, either storage/raw buffers or constant buffers, have been refactored and improved.

    Fixed variables now display their offsets within the buffer range and (optionally) padding: image

    Vulkan and OpenGL buffers which contain some fixed data before a trailing repeating array of structs (AoS) can now both be displayed at once: image

    Packing rules can be specified to significantly reduce or eliminate the need for manual or automatic 'padding' declarations: image image

    Constant buffers now generate a complete automatic format: image

    The format specifier now supports binary interpretation, enums, and bitfields, for better display of data: image

    These formats can also be saved and loaded to presets, and these persist globally across all captures. For more information see the documentation on configuring these formats.

  • Most complex error messages (particularly those that reference some error replaying or problem with the API like a fatal error) now contain better explanations of what problem has happened. image image

Python API changes

  • The renderdoc.ReplayStatus enumeration has renamed to renderdoc.ResultCode. The enum value names are the same as before.
  • Any functions that returned a renderdoc.ReplayStatus previously now return renderdoc.ResultDetails. This contains both the result code and a string with any further information, but it can be directly compared to a result code enumeration for backwards compatibility.
  • Similarly the renderdoc.ExecuteResult no longer has a member status of type renderdoc.ReplayStatus, it now has result of type renderdoc.ResultDetails. Functions that used to return a Tuple[ReplayStatus, ...] now return Tuple[ResultDetails, ...].
  • Some functions used to return a simple bool success or failure, now also return a renderdoc.ResultDetails.
    • renderdoc.ReplayOutput.AddThumbnail
    • renderdoc.ReplayOutput.SetPixelContext
    • renderdoc.ReplayController.SaveTexture
    • renderdoc.CaptureAccess.WriteSection
    • renderdoc.CaptureAccess.InitResolver
    • renderdoc.CaptureFile.CopyFileTo
    • renderdoc.RemoteServer.Ping
    • renderdoc.StartGlobalHook
  • renderdoc.CaptureFile.ErrorString has been removed as it is no longer necessary - any functions with errors will return the error string in the renderdoc.ResultDetails.
  • qrenderdoc.ExtensionManager.LoadExtension returns a string with any errors, or an empty string for success, instead of a bool.
  • Shader variable representation has changed:
    • Structs now have an explicit renderdoc.VarType.Struct type which will be reported for structs whether or not they have any members.
    • Flag members like renderdoc.ShaderVariable.displayAsHex, renderdoc.ShaderVariable.rowMajor, renderdoc.ShaderVariable.isStruct, have been combined into renderdoc.ShaderVariable.flags.
    • renderdoc.ShaderConstantDescriptor has been removed, and its members inlined into renderdoc.ShaderConstantType, with the exception of the flag members as above renderdoc.ShaderConstantDescriptor.displayAsHex, renderdoc.ShaderConstantDescriptor.displayAsRGB, renderdoc.ShaderConstantDescriptor.rowMajorStorage, which have been combined into renderdoc.ShaderConstantType.flags. renderdoc.ShaderConstantDescriptor.type has been renamed to renderdoc.ShaderConstantType.baseType.
  • renderdoc.VKPipeline.pipelineLayoutResourceId has been removed to support VK_EXT_graphics_pipeline_library. In its place are renderdoc.VKPipeline.pipelineComputeLayoutResourceId, renderdoc.VKPipeline.pipelinePreRastLayoutResourceId, and renderdoc.VKPipeline.pipelineFragmentLayoutResourceId. In cases not using the extension these values may be identical.
  • qrenderdoc.PersistantConfig.BufferFormatter_ShowHelp has been removed.
  • qrenderdoc.IConstantBufferPreviewer has been removed. qrenderdoc.CaptureContext.ViewConstantBuffer now returns a qrenderdoc.IBufferViewer.

Features/Improvements

  • UI: Tweak behaviour around closing all captures on shutdown to be more consistent.
  • D3D12: Support the encoded color in obfuscated PIX-style markers.
  • ARM: Update hardware counter library.
  • Vulkan: Add support for some extensions:
    • VK_KHR_pipeline_library
    • VK_EXT_graphics_pipeline_library
    • VK_QCOM_render_pass_store_ops
    • VK_GOOGLE_surfaceless_query

Bugfixes

  • UI: Fix a crash when a corrupted/unusual window layout is loaded.
  • UI: Include resource usage from events in command buffers with no subsequent actions, e.g. a command buffer with only pipeline barriers.
  • UI: Fix variable tooltips for sampler variables in shader debugger.
  • UI: Fix backwards stepping in shader debugging not working consistently around inlined functions.
  • UI: Fix a potential crash in the shader debugger when debug info maps variables to non-existent registers.
  • UI: Fix the display of underlying registers for matrix variables.
  • Windows: Fix a potential crash capturing programs with reduced default thread stack size.
  • Vulkan: Fix a crash when a draw using dynamic rendering needs bindless feedback.
  • Vulkan: Fix an issue where descriptor sets bound before a pipeline could be lost when a discard pattern is filled in between (renderpass or image layout transition discard).
  • Vulkan: Fix a crash when using dynamic rendering and geometry shaders.
  • Vulkan: Fix a crash debugging shaders using arrayed resource binds.
  • Vulkan: Display conservative rasterization state properly in pipeline state viewer.
  • Vulkan: Fix problems with fossilize pipeline export.
  • Vulkan: Fix a potential crash with misaligned copies capturing MSAA images.
  • Vulkan: Fix a crash with vkCmdSetEvent2 that could crash for image & memory barriers.
  • Vulkan: Fix a potential crash selecting an event region with an indirect-count draw inside.
  • Vulkan: Fix a crash when rarely-modified memory is freed mid-capture.
  • Vulkan: Fix an issue using the wrong queue family command buffers for mapped memory GPU readback.
  • D3D: Fix an issue binding small mip tails of sparse images or small buffers.
  • D3D: Fix a crash debugging shaders with debug information that use matrix variables.
  • D3D: Fix a problem using the new custom shader templates where macros wouldn't be defined on D3D.
  • D3D11: Fix a crash using 'verify buffer access' with mapped textures.
  • OpenGL: Fix a use-after-delete when bound textures are deleted, or when a renderbuffer is deleted.
  • OpenGL: Fix a potential crash when applications use unsupported functions.
  • Linux: Fix potential crash with applications that use libEGL.so instead of libGL.so.

v1.19

2 years ago

Version v1.19

This release has a few new quality of life features as well as a number of bug reports following up from release v1.18.

Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.

Main Highlights

  • Custom visualisation shaders have been refactored to be more portable and re-usable between APIs. Existing custom shaders will continue to work without modification, however it's recommended that you consult the documentation and/or new custom shader templates, to see how macros are now used to abstract around different binding models. This means a newly written HLSL custom shader should work both for D3D11/D3D12 as well as HLSL on Vulkan without modification.

  • The location breadcrumbs in the event browser now has an edit button to edit the 'path' as a text string. This can also be copy-pasted like a URL to jump to a known location in a new capture, or share a location with someone else making captures without needing to share a capture containing bookmarks. image

    image

    image

  • GL programs that use unsupported functions will now be explicitly disabled from capture. This also applies to unsupported extensions, as it seems to be common among GL programs to not correctly check for which extensions are supported when running.

    This only applies to if these functions are called at all. If they are queried but never called, this restriction will not apply.

    image

Python API changes

  • renderdoc.BecomeRemoteServer now accepts a port parameter, which can be set to 0 to listen on the default port.

Features/Improvements

  • UI: Display KHR_depth_stencil_resolve attachment in vulkan pipeline state viewer.
  • UI: When right clicking on captures in the connection panel show an option to rename the capture.
  • UI: When connecting to an existing instance of a captured program, don't display captures which have been deleted since they were made.
  • All: The shader debugger now allows displaying watch variables with a colour swatch showing the colour for floating point values. Watch variables may now refer to structs and other complex types, and when some struct members are not available at the current step they will show the previous known values.
  • All: On remote host replay, only fetch multisampled texture samples lazily when needed to display. Thumbnails display only sample 0 instead of all samples resolved.
  • All: Remote host servers can now specify a custom port to listen on, which is specified in the UI with hostname:12345, which allows multiple independent replays on a single host.
  • D3D12: Added support for SM6.6 direct heap access display in the pipeline state view. Since minimal debug information exists for these accesses, only raw heap indices are shown for the resources.
  • Windows: When LaunchReplayUI is called from the in-application API, the UI process will no longer inherit handles from the captured process.
  • Windows: Use _NT_SYMBOL_PATH where available as search path for callstacks.
  • Linux: Fatal errors during startup such as e.g. running under wayland are printed to stderr.
  • Vulkan: In shader printf statements show the view index as part of the location.
  • Vulkan: Add support for VK_KHR_fragment_shading_rate, VK_QCOM_render_pass_shader_resolve and VK_QCOM_fragment_density_map_offset.
  • Vulkan: Implement support for separate shader debug blobs from magic value tags.
  • Vulkan: Add support for multiple presents at once in one call to vkQueuePresentKHR
  • Vulkan: Optimised readback of MSAA textures on some mobile GPUs.

Bugfixes

  • All: Fix an issue where the pixel context view would be incorrect when using custom display shaders.
  • All: Fix issues with pipeline-based disassembly information not updating when shaders are edited.
  • All: Fix a case where fatal errors like device lost or out of memory would not be properly reported when first loading a capture.
  • All: Fix a potential crash on device lost if it happened in early initialisation.
  • UI: Fix some issues with scrollbars being inconsistent with zoom and pan in texture viewer.
  • UI: Don't reset focus when changing values in the compute debug thread selector.
  • UI: Fix multiple shader debug search paths being lost when closing the UI.
  • UI: Fix a crash in the UI when Qt accessibility features are enabled.
  • UI: Fix an out-of-order error that caused the texture viewer histogram to lag behind until refreshed when using custom shaders.
  • Vulkan: Fix fatal error detection and handling.
  • Vulkan: Treat failed memory maps as fatal errors.
  • Vulkan: Fix an object leak when displaying textures with custom display shaders.
  • Vulkan: Demote reported driver version for 1.3 vulkan drivers that don't support bufferDeviceAddressCaptureReplay.
  • Vulkan: Fix core version check on physical devices, which could potentially cause a crash on 1.3 drivers when application doesn't use 1.3.
  • Vulkan: Fix handling of non-32bit types in shader debugging and data display. In particular this affected half types.
  • Vulkan: Fix a potential driver/GPU timeout applying discard patterns to very large textures.
  • Vulkan: Fix a number of validation issues identified.
  • Vulkan: Fix VkCommandBufferInheritanceRenderingInfo::flags being incorrectly serialised.
  • Vulkan: Handle KHR_dynamic_rendering inheritance into secondary command buffers.
  • Vulkan: Fix dynamic vertex inputs from VK_EXT_vertex_input_dynamic_state not being propagated properly.
  • Vulkan: Fix a crash when using VK_KHR_dynamic_rendering_info with DONT_CARE load ops.
  • D3D: Fix debugging of shaders with multiple switch statements
  • D3D: Fix recursion check when hooking creation functions to be thread-local instead of global. Caused multithreaded D3D device creation to sometimes fail to hook properly.
  • D3D11: When no sampler object is bound to a used sampler state, show correct default values in pipeline state.
  • D3D12: Fix debugging shaders where the root signature denies access to pixel shaders.
  • D3D12: Disable dxil.dll validator entirely as it crashes on valid code (previously it was only on for debug-only builds).
  • D3D12: Fix handling of empty structs in DXIL editing.
  • D3D12: Fix a race condition with threads evicting resources while RenderDoc is working on them.
  • D3D12: Handle unspec'd difference in behaviour from mesa's DXIL emitter.
  • D3D12: Fix large sampler heaps corrupting the filter parameter in the 'resource initialisation parameters' view.
  • GL: Fix handling of extension function hooks in EGL.
  • GL: Add hooked implementation of wglMakeContextCurrentARB
  • GL: When bound objects like buffers or VAOs are deleted, don't leave dangling pointers.

v1.18

2 years ago

Version v1.18

This release only has a small number of changes, and primarily adds support for the just-released Vulkan 1.3 including full support for everything in the Roadmap 2022 profile.

Please note: Upon installing a Vulkan 1.3 driver and creating a 1.3 Vulkan instance older versions of RenderDoc will be disabled automatically by the Vulkan loader, to prevent incompatibility problems. This release or newer will be required to debug Vulkan 1.3 applications, applications initialising Vulkan 1.2 or older can still be debugged by older versions of RenderDoc.

Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.

Main Highlights

  • Full support for Vulkan 1.3 as well as the Roadmap 2022 profile including the new VK_KHR_global_priority promoted extension.

  • The primary font used in the UI can now be customised, as well as the secondary monospaced font.

    RenderDoc with the font customised to Comic Sans MS

Python API changes

  • No backwards-incompatible API changes.

Features/Improvements

  • UI: When multiple capture connections are open and the program is closed, clicking 'No to all' will ask the user if they want to close all capture connections and discard all captures.
  • API: The in-application API now has a new function ShowReplayUI which acts similarly to LaunchReplayUI but instead it will try to re-use an existing UI provided an active connection is currently open between an instance of the UI and the application. Together with IsTargetControlConnected this can be used for repeated captures to open the UI if needed, but not open multiple copies.
  • Vulkan: Allow introspection of DONT_CARE storing renderpasses even on fastest replay mode.
  • Vulkan: Allow debugging SPIR-V 1.6 modules.
  • Vulkan: Add support for some extensions:
    • VK_EXT_4444_formats
    • VK_EXT_texture_compression_astc_hdr
    • VK_KHR_global_priority

Bugfixes

  • All: Don't treat out-of-memory as a fatal error in the specific case when we're fetching mesh output data, as this is deliberately handled gracefully.
  • All: When replaying remotely such as on an android device, fix shader editing not properly updating shader reflection.
  • Vulkan: Fix an issue with automatic layout transitions in renderpasses not properly specifying IGNORED queue families.
  • Vulkan: Fix problems with separate load and store ops for depth and stencil aspects.
  • Vulkan: Fixed handling of stencil-only textures.
  • Vulkan: Fix a case where replay would fail if the application specified VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT and the compile was skipped at capture time due to a duplicate PSO.
  • Vulkan: Fix a crash handling unused attachments with VK_KHR_dynamic_rendering.
  • Vulkan: Fix tracking of event IDs in debug messages to more closely match up to the event with out-of-order command buffer recording.
  • Vulkan: Fix calculation of memory alignment requirements for externally imported memory.
  • Vulkan: Fix a crash debugging SPIR-V 1.3+ shaders when KHR_buffer_device_address is available.
  • Vulkan: Fix a crash if descriptors are copied from and then deleted mid-capture.
  • Vulkan: Fix a crash on subsequent captures after the first if a KHR_buffer_device_address buffer is bound to memory.
  • Vulkan: Fix a hang if replaying KHR_synchronization2 queue submissions with semaphore waits.
  • Vulkan: Fix a crash querying for KHR_buffer_device_address buffer addresses before memory binds when using vkBindBufferMemory2.
  • Vulkan: Protect against write-after-write hazards when applying initial states to overlapping resources.
  • Vulkan: Fix shader messages not being propagated when replaying remotely, such as on an android device.
  • D3D: Fix packing when UAV buffers don't require 16-byte alignment of structs.
  • D3D: Allow passing a NULL device handle into IDXGIOutput::FindClosestMatchingMode.
  • D3D12: Query the driver for supported shader model and then further clamp, rather than clamping only ourselves and potentially reporting higher support than the driver has.
  • D3D12: Fix a crash patching very simple/small DXIL shaders.
  • OpenGL: Fix handling of glBindProgramPipeline with a pipeline of 0, which could cause application-visible errors in glGetError.
  • OpenGL: Fix a memory leak exporting structured data.

v1.17

2 years ago

Version v1.17

This is RenderDoc's last release of the year and focusses mostly on some quality of life improvements and expanded Vulkan extension support.

Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.

Main Highlights

  • Support for the new Vulkan extension VK_KHR_dynamic_rendering which allows dynamic renderpasses to be recorded at command record time across command buffers without needing to create renderpass or framebuffer objects up-front.

  • The resource inspector has some sorting options now - you can sort by alphabetical (the previous default), creation order (in terms of their original creation in the application), or by recently viewed. When sorted by recently viewed, the resources at the top are the most recently viewed in the resource inspector itself and will be resorted as resources are viewed.

    image

    image

    image

  • Compute shader debugging can now be launched either by split workgroup & thread ID, or by global thread ID.

    image

  • The mesh viewer now allows you to select the axis convention of input vertex data for e.g. Z-up instead of Y-up or left/right-handed.

    image

    image

Python API changes

  • ReplayController.GetCBufferVariableContents now takes a ShaderStage parameter after the pipeline and shader, to allow disambiguation on APIs like vulkan where a single shader object can have multiple shader stages with the same entry point name.
  • D3D12RootSignatureRange.rootElement has been renamed to D3D12RootSignatureRange.rootSignatureIndex to make it more clear that this refers to the original element and to distinguish from the split-by-range elements in the pipeline state.

Features/Improvements

  • UI: The performance counter viewer now displays only visible events when synced with the event browser, respecting the current filter.
  • UI: Custom visualisation shaders can now access the selected min/max range.
  • UI: Add functionality to reset an edited shader to original. Also it's easier to explicitly toggle between edited and original version being active without removing code changes.
  • All: Handle B8G8R8A8_UNORM legacy non-DXGI format case when loading DDS files.
  • OpenGL: Allow readback of 2D array and 3D textures for initial contents of textures from previous frames.
  • OpenGL: Add support for 3D ASTC compressed textures.
  • Vulkan: Add an option to export the current vulkan pipeline state & dependencies to a fossilize database. This is likely primarily useful for driver developers extracting out a pipeline, but could also be useful for minimising and sharing repro cases.
  • Vulkan: Remove VK_KHR_win32_keyed_mutex extension with other external memory extensions on replay as it's not required and may improve capture portability.
  • Vulkan: Support bool parameters in shader debug printf.
  • Vulkan: On oculus allow loading the bundled validation layers in the OS.
  • Vulkan: Don't list source debugging as available unless source debug information is present.
  • Vulkan: Add support for a number of new extensions:
    • VK_KHR_dynamic_rendering
    • VK_KHR_format_feature_flags2
    • VK_KHR_maintenance4
    • VK_KHR_present_id
    • VK_KHR_present_wait
    • VK_KHR_shader_integer_dot_product
    • VK_KHR_shader_subgroup_uniform_control_flow
    • VK_EXT_color_write_enable
    • VK_EXT_extended_dynamic_state2
    • VK_EXT_fragment_density_map2
    • VK_EXT_global_priority_query
    • VK_EXT_load_store_op_none
    • VK_EXT_rgba10x6_formats
    • VK_EXT_shader_atomic_float2
    • VK_EXT_vertex_input_dynamic_state
    • VK_EXT_ycbcr_2plane_444_formats

Bugfixes

  • UI: Fix texture viewer scrollbars not properly updating when zoom level changes.
  • UI: Fix potentially misleading root signature index listed in D3D12 pipeline state view.
  • UI: Fix internal formatting tags being exported or put on the clipboard from the event browser.
  • UI: Fix pipeline state viewer HTML export crashes.
  • UI: Internal/hidden properties in resource inspector creation calls are no longer displayed.
  • UI: Fix mesh picking for unusual or reverse-depth perspective projection.
  • UI: Prevent shader messages from previously opened captures showing up in later unrelated captures.
  • Linux: Fix a potential crash/hang when invoking shader editing tools.
  • Vulkan: Fix assignment of 64-bit array/matrix input values to locations.
  • Vulkan: Use shader stage to disambiguate entry points with the same entry point name in a SPIR-V module.
  • Vulkan: Fix texel read/write to respect format conversion when debugging shaders
  • Vulkan: Improve event browser summary of vkCreateRenderPass2.
  • Vulkan: Fix a crash writing to an offset within inline UBOs.
  • Vulkan: Fix a crash when using SUBSAMPLED images with the fragment density map extension.
  • Vulkan: Fix behaviour around skipping invalid padding descriptors when using overflowing descriptor update behaviour.
  • Vulkan & GL: single basic element buffers without a surrounding struct are handled correctly. In particular this is relevant for matrices that may require per-row/column padding.
  • Vulkan: Fix heavy memory use when specialisation constant IDs are very high.
  • Vulkan: Fix a potential crash patching SPIR-V modules with multiple pixel shader entry points.
  • Vulkan: Fix invalid SPIR-V being generated for vertex shaders that use subgroup operations.
  • GL: Add workaround to qualcomm driver bug reading cubemap faces as corrupt data.
  • GL: Fix a crash when fetching counter values over multidraw GL draws.
  • GL: Try to fetch necessary data for capture when multiple threads are emitting GL commands. Note that generally this is not supported or recommended.
  • GL: Fix texture type recorded for texture views of glCreate'd textures that are never bound directly.
  • GL: Correctly serialise query-to-buffer copies that happen via glGet functions.
  • GL: Add missing alias handling of EXT_map_buffer_range functions.
  • D3D11: Remove some resource MISC flags from shared resources that cause problems on replay.
  • D3D11: Snapshot contents of shared resources that are imported mid-frame.
  • D3D11: Fix pipeline state statistics counters.
  • D3D12: Fix a crash when ExecuteIndirect is called on a compute only command buffer.
  • D3D12: Fix quad overdraw not working when a drawcall's vertex shader outputs don't write to position as the first element.
  • D3D12: Fix a case where DXIL fails to patch correctly.
  • D3D12: Fix a bug where placed resources with freed heaps would cause crashes.
  • D3D12: Fix a crash fetching timestamps for events on copy queues.

v1.16

2 years ago

Version v1.16

This release is primarily a follow-up to v1.15, with the bindless feedback expanded now to support DXIL SM6.x shaders via shader patching.

One thing to note, the event browser refactor added in v1.15 had an unfortunate bug. If RenderDoc hadn't previously been used on a system and v1.15 was the first install, such that there was no configuration settings saved, the event browser would not start up with the default $action() filter to mimic the filtering from previous versions, and wouldn't have any sample filters added. v1.16 and forwards will now address this only if no filters have been configured, such that users who have started to use the filters won't see any changes but those who didn't use any filters will have the bug fixed and will see the same thing as someone who updated from before v1.15.

Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.

Main Highlights

  • The bindless feedback for D3D12 which was added in v1.15 now supports DXIL SM6.x shaders, via DXIL patching. This does not require the presence of dxcompiler.dll or dxil.dll from DXC on the system as the patching and hashing is all done within RenderDoc's code.

    Note this does not yet support the new SM6.6 heap-indexed binding access, this only applies to arrayed descriptor binding access.

  • The API backends have been hardened to handle the majority of cases where an API fatal error happens during replay while analysing a capture - device lost/TDR, out of GPU memory, or when using remote-replay if the remote server crashes or disconnects.

    When this happens the backend is unloaded and a null backend is loaded in its place, so the UI will continue to function but most panels will be non-functional - pipeline state will be empty, resource contents will not be displayed and any texture/buffer views will be empty. The capture can still be saved (unless the remote server has been disconnected) and a prompt will be given to report a potential bug. Note that on some APIs and GPU drivers, the process may be considered 'corrupt' and unable to load further captures.

    image

    Since these bugs aren't a traditional CPU crash, any bug reported from this is required to include the capture as otherwise it's not useful. If you don't want to share the capture you can still email me directly. If the crash was caused by a remote server disconnecting and the capture isn't saved locally, the bug can't be reported until that happens.

    Note that a fatal error like this during capture is not handled and in the vast majority of cases cannot be captured.

Python API changes

  • No breaking API changes.

Features/Improvements

  • UI: Don't clear the find text when closing the find bar, or when switching between captures in the event browser.
  • UI: When using the find bar in the event browser, jump to the nearest visible result respecting the current filter.
  • UI: In the mesh viewer if no draw is selected, display that information as well as indicating which event is considered selected (which may be non-obvious if a marker region is selected).
  • UI: On linux the 'send error report' button was disabled incorrectly, although crash reports aren't supported on linux it was intended to allow manually submitting reports and attaching captures. This will only be allowed for builds with proper git commit hashes.
  • UI: Use the correct entry point when disassembling shaders in spirv-cross.
  • D3D12: Add counter support for some calls like copies, clears, and ExecuteIndirect.
  • D3D12: Improve worst-case time to load capture with very large ExecuteIndirect() calls with few actually executed commands.
  • OpenGL: Manually emulate bad vertex-casting behaviour on GL. This is when glVertexAttribPointer is used to specify an integer formatted component and the shader reads an input. This is invalid, but most drivers cast int -> float, then the float bits are read as int (e.g. 0x3f800000) so we emulate that.
  • AMD: Shader disassembly targets have been updated to include RDNA2 targets, and some legacy devices which may not be supported by AMD have been removed.

Bugfixes

  • General: The installer will be more correct about checking if the required VC redist is installed, to prevent false positives on older incompatible versions.
  • UI: Fix a crash when opening the event browser after a capture is loaded.
  • UI: Fix a race condition with the crash handler that could lead to crashes itself during early startup.
  • UI: Display fake added markers in timeline bar.
  • UI: Ignore W component for mesh input 3D visualisation in mesh viewer.
  • UI: Respect the current filter when using find in the event browser.
  • UI: Fix a vertex-picking crash when right clicking in the mesh viewer with an empty draw.
  • UI: Tweak the event browser so that when selecting a marker region it won't implicitly select the marker pop event, but the last 'real' event.
  • UI: Improve some workflow oddities when managing captures between a capture connection window and the main window itself.
  • UI: Don't include NaN/inf durations when summing action durations in event browser.
  • UI: Fix a problem where RGP captures wouldn't save properly when made from the UI.
  • UI: Fix a crash displaying an error message for a mis-formed $action() filter.
  • Android: Fix a crash on Quest and potentially other android devices when creating internal vulkan instance.
  • Android: Ignore any com.android activities which show up in some packages.
  • Vulkan: Fix problems selecting events after indirect-count drawcalls.
  • Vulkan: Fix a case where storage images/buffers could be missing contents if they are overwritten later in the capture after being read.
  • Vulkan: Fix handling of degenerate/empty dedicated allocation extension structures.
  • Vulkan: Ignore clear calls for unused attachments in vkCmdClearAttachments.
  • Vulkan: Fix a potential deadlock when a driver crashes.
  • Vulkan: Fix a validation warning possibly generated when using imageless framebuffer and image view usage extensions.
  • Vulkan: Fix a crash when debugging shader modules that have multiple entry points.
  • Vulkan: Fix a problem where shader printf results would not be accurate when the shader isn't pure (has side-effects that affects its execution).
  • Vulkan: Fix the API call summary of vkCmdSetScissorWithCountEXT in the event browser including internal serialised data.
  • Vulkan: Fix missing mapped writes to memory when it's only used in submissions via bufferDeviceAddress.
  • Vulkan: Fix a crash when the mesh viewer tries to display invalid indexed draws with no index buffer bound.
  • Vulkan: Remove optimisations around memory maps where applications that call vkFlushMappedMemoryRanges are trusted to annotate all writes even to coherent memory, to prevent the need to check for changes. Now applications will be accurately captured even if calls to that functions on coherent memory are badly placed.
  • D3D11: Fix some cases where the pipeline state for input assembly would be wrong if no input layout was bound.
  • D3D11: Fix debug messages being off-by-one with the listed event.
  • D3D12: Fix arrays of resources in DXIL being marked as entirely unused.
  • D3D12: Fix cases where binds would be hidden depending on their ordering in the root signature.
  • D3D12: Handle MakeResident/Evict being refcounted to allow multiple calls, as well as handling placed resources residency being from the underlying heap.
  • D3D12: Fix some problems with fetching geometry output in the mesh viewer.
  • D3D12: Fix a race condition where mapped memory updates could be lost if one thread is writing to one part of the buffer while it's being serialised on another thread.
  • D3D12: Display ByteAddressBuffer s in the pipeline state viewer based on the shader binding, not the flag on descriptors which may not be present.
  • OpenGL: Fix depth texture data from previous frames not being correctly present on GLES.
  • OpenGL: Fix the API call summary of glDispatchCompute in the event browser including internal serialised data.
  • OpenGL: Fix a case where GL context tracking would break and result in failed a captures and corrupted GL state.
  • OpenGL: Fix crash serialising glVertexArrayVertexBuffers with NULL buffer array.

v1.15

2 years ago

Version v1.15

This release comes with a significant revamp to the event browser, to make it easier to customise the view of which events are displayed and how, as well as to format them for display. As part of this RenderDoc now uses the term 'action' to refer to what was loosely called a drawcall before - anything on the GPU timeline that visibly changes resource contents, such as draws and dispatches but also clears, copies, resolves, etc.

There are also improvements to how bindless resources are displayed on D3D12 when using SM5.1 DXBC shaders. Your shaders are now patched to annotate resource usage at runtime and this data is used to determine which resources to show - only those actually referenced by the given action. This significantly reduces the number of resources shown and makes it easier to find what is relevant. This feature is planned to come to SM6.0 DXIL shaders, but that will be in a future release given how difficult DXIL is to work with.

Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.

Main Highlights

  • The Event Browser has been significantly refactored. By default the display is almost identical to what it was before, with the exception that 'API Calls' placeholder entries are no longer visible and any marker regions only containing state setting or other non-action events will be invisible. The new functionality means these are no longer necessary.

    The events visible by default shows only actions (the new term used for drawcalls), the same as previous versions, with a default filter of $action(). However the filter is now customisable and acts as a simple search query type filter. For example if you wanted to see Barriers in addition to normal actions you could add a Barrier term:

    Filtered event browser showing barriers as well as actions

    Or if you wanted to hide copies and clears you could remove those with -Copy -Clear:

    Filtered event browser showing actions except copies and clears

    Filters can also have functions that query on properties of actions, for example showing draws with more than 10,000 vertices/indices:

    Filtered event browser showing only draws over 10,000 indices

    The filter can be modified to include or exclude whichever events you wish, and a blank filter allows viewing all API calls in sequence with no omissions, including state setting:

    Unfiltered event browser showing all API calls

    The filters can be customised and saved, and an interactive configuration panel can be used to interactively build filters and see the documentation on the fly:

    Filter configuration panel

    For more information on how to use filters see the documentation on filtering events.

  • In addition to filtering which events are shown, the configuration panel shown above also allows you to show parameter names as well as values, show all parameters to function calls, or disable 'custom formatted' action names such as renderpass begin or end which shows the load and store ops. By default only the most relevant parameters are shown.

    Events in the event browser listing parameter names Events in the event browser showing all parameters

  • The new Event Browser includes a simple 'breadcrumbs' display showing where in the marker hierarchy the current event is. Each node has a dropdown that can select sibling markers at the same level: image

  • Bindless feedback is available on D3D12 for DXBC shaders (SM5.1). This feature has existed for a while on Vulkan but is now implemented on D3D12. Note that because patching shaders on D3D12 is inherently unreliable, please report any issues you find either with resources being wrongly excluded or included.

    Before: many resources bound, so many displayed

    After: only a few resources used, so few displayed

Python API changes

  • Some places have renamed drawcallaction to be consistent with the new terminology:
    • DrawcallDescriptionActionDescription - see below for some notes.
    • DrawFlagsActionFlags.
    • DrawFlags.APICalls was removed as API calls actions no longer exist.
    • CaptureOptions.captureCallstacksOnlyDrawsCaptureOptions.captureCallstacksOnlyActions
  • The EventBrowser_HideEmpty and EventBrowser_HideAPICalls members of qrenderdoc.PersistentConfig have been removed as these settings are no longer relevant.
  • Several members of CaptureContext have been renamed as above:
    • CaptureContext.CurSelectedDrawcallCaptureContext.CurSelectedAction
    • CaptureContext.CurDrawcallCaptureContext.CurAction
    • CaptureContext.GetFirstDrawcallCaptureContext.GetFirstAction
    • CaptureContext.GetLastDrawcallCaptureContext.GetLastAction
    • CaptureContext.CurDrawcallsCaptureContext.CurRootActions
    • CaptureContext.GetDrawcallCaptureContext.GetAction As above, these return renderdoc.ActionDescription renamed from renderdoc.DrawcallDescription.

In particular note that for the new ActionDescription struct the per-action name member has been removed. There is a customName member but for most actions this will be empty. The name for an action can be determined by looking up its chunk in the structured data, as given by the last API event in its list of events.

The name for the action is the name of the chunk, and optionally you can format the parameters. A new helper method exists GetName to format the action name without parameters, and it takes the structured file as a parameter. This will generate a name like DrawIndexed() and not DrawIndexed(123, 45). You may want to only include parameters that are marked with SDTypeFlags.Important, which is a hint to which parameters are most relevant to a user.

Features/Improvements

  • UI: Event browser is significantly refactored to allow custom filtering and display of events.
  • UI: Breadcrumbs view added to event browser to navigate the frame.
  • UI: In the pipeline state viewer when the depth test is disabled show that explicitly for any sub-states which are ignored, like depth writes or depth function.
  • UI: Improve the find and find-all dialog in shader viewer, with double click on results to jump to them.
  • UI: When shader debugging with source, stepping now allows for 'step into' which was the previous default and will enter any function calls, as well as 'step over' and 'step out' which will respectively try to stay in the same callstack frame (not entering any new ones) or leave the current function. All stepping and running options are now available both forwards and backwards.
  • UI: Show better window titles for edited shaders.
  • UI: Web links in validation messages are made clickable.
  • UI: Added multi-selection for copy-paste and export options to the shader message viewer.
  • UI: Improve the sorting on shader messages, to sort properly by order of invocation.
  • UI: Clarify some error message dialog text.
  • UI: Fix buffer export title always showing the same instead of varying by the format being exported.
  • UI: Recognise debugPrintfEXT in glsl syntax highlighting.
  • UI: Add some optimisations for large number of API events for a single action, and for large numbers of resources bound in Vulkan or D3D12.
  • UI: Fix the text being hard to read on dark theme when a row is highlighted for having more details in the pipeline state view.
  • OpenGL: glClear is always listed as an action even if colour isn't cleared.
  • D3D12: DXBC shaders (SM5.1) now have bindless feedback so large arrays of descriptors only display those resources that are used.
  • D3D12: Display the read-only state flags on depth-stencil views.
  • D3D12: Added signature validation on D3D12Core.dll embedded in captures.
  • D3D12: Serialise explicitly any Unmaps which indicate that there is no written data.
  • Docs: Reorganised and clarified docs on how to annotate/markup sections of a capture.

Bugfixes

  • UI: Fix a crash if a user tries to toggle a bookmark in the event browser with no capture loaded.
  • UI: Fix some cases where text like param@5 was incorrectly interpreted as a reference to EID 5.
  • OpenGL: Fix a crash when queueing a capture of frame 0 of an application.
  • OpenGL: Fix a problem with use of texture views on android.
  • OpenGL: Fix a problem where unmapping a persistent mapped resource would fail a frame capture unnecessarily.
  • Vulkan: Fix a crash when push constants are provided insufficient data.
  • Vulkan: Disable use of KHR_buffer_device_address on Qualcomm as it causes crashes.
  • Vulkan: Disable use of KHR_buffer_device_address on Intel on non-latest drivers.
  • Vulkan: Fix a crash if NULL vertex buffers are bound using VK_EXT_robustness2.
  • Vulkan: Fix potential fatal errors if invalid printf strings are specified in shaders.
  • Vulkan: Fix a crash if 0xFFFFFFFF is used as a component in OpVectorShuffle.
  • Vulkan: Fix a crash where code would temporarily do a no-op write to potentially const pNext structures.
  • Vulkan: Fixed hardware ISA and other pipeline-based disassemblies not generating correctly when editing shaders.
  • Vulkan: Fix a potential deadlock when capturing and detecting coherent mapped memory writes.
  • D3D12: Fix a potential crash when constant buffers with no corresponding root signature element are viewed in the pipeline state view.
  • D3D12: Fix reference counting that could lead to devices leaking.
  • D3D12: Fix a crash that could happen if multiple devices are alive and have resources allocated at once.
  • D3D12: Fix an error shader debugging typed resource loads where expansion fills in components - reading float4 from RGB should set 1.0 in the alpha column.
  • Linux: Fix problems capturing child processes depending how they fork and exec.
  • Android: Fix config settings not propagating properly to android on some android versions.
  • Android: Fix a potential timeout if a very large capture is opened.
  • Android: Fix an issue where many command buffers were generated unnecessarily during capture load that could cause crashes on some drivers.
  • Android: Fix a crash when generating discard patterns for ASTC textures.

v1.14

2 years ago

Version v1.14

This release includes UI support for Vulkan's shader printf, which can be used for wide debugging across a whole set of shader invocations as well as for highlighting particular problems with unexpected paths or results by printing a message with data.

Also in this release is support for the new D3D12 runtime which can be shipped with applications - upon capture the relevant runtime DLLs are bundled into the capture and written to a temporary file to be selected at replay time.

Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.

Main Highlights

  • RenderDoc can now display print statements from shaders in Vulkan. Since this feature requires API support it's not supported elsewhere, but if it is added there it will function in the same way.

    When a drawcall is selected any printf statements are evaluated and the event browser & pipeline state show how many messages have been made. Clicking these opens a window to display the messages themselves, and from there the particular shader invocation can be debugged.

    Shader messages visible in event browser

    Shader messages from pixel shader

    Debugging the shader itself

    These print statements do not need to be in the original shaders, they can be edited in at runtime while analysing a capture using the normal shader edit system. However NOTE: At the time of writing dxc has some known crash bugs with printf statements, and spirv-tools has a recently fixed bug that broke printf statements with parameters. Ensure you're using an up to date compiler if you have any problems.

    For more information, see the documentation on this new panel.

  • The pipeline state view will now show thumbnail previews of textures on hover to help quickly identify which texture is bound to a given slot, which can be particularly useful if reflection information has not been included. In addition right clicking on any resource binding in the pipeline state viewer will show the resource usage context menu which allows you to switch to any other event that has been tracked to use the resource. A texture preview being shown on hover The texture's usage in a context menu

    This feature is not available when the replay is running remotely such as on an Android device, to avoid costly image transfers by accident when moving the mouse over many bindings.

Python API changes

  • VKSpecializationConstant has been removed. Specialization constants are now available by reading the bytes out of VKShader.specializationData with the offset given by the relevant byteOffset in the shader constant. Note this date is unrelated to the actual bytes passed to the pipeline create, it is a 'virtual' buffer where the bytes of specialisation constants (whether default or specialised) are available at the offset based on their ID.
  • ShaderViewer.ToggleBreakpoint has been renamed to ShaderViewer.ToggleBreakpointOnInstruction. There's a new function ShaderViewer.ToggleBreakpointOnDisassemblyLine.
  • CaptureContext.RegisterReplacement now takes arguments for both old (replaced) and new (replacement) resource IDs, rather than just the replaced.

Features/Improvements

  • UI: The constant buffer previewer can now apply custom formats to most non-buffer-backed constants, such as push constants on vulkan, and root values on D3D12. This is not possible for bare GL uniforms.
  • UI: OpenGL programs running unsupported legacy GL are no longer shown as captureable in the connection window.
  • UI: Pre-populate selected text in shader find dialog when pressing ctrl-f.
  • UI: Add support for #include directives referencing files on disk in custom shaders.
  • UI: Process injection is no longer available by default, as too many new users were getting confused and using it instead of launching their process through RenderDoc, which often broke. Since it is almost never the right method, it is now disabled by default and can be enabled in the settings the same way as global hooking.
  • D3D12: Add support for new D3D12 runtime. The D3D12Core.dll is copied into the .rdc file at capture time, and limited function hooking is used on replay to allow the D3D12 loader to load from a dynamic temporary file.
  • D3D12: Also force ref-all-resources for new SM6.6 bindless root signatures. Note that no bindings will be visible in the pipeline state viewer.
  • Vulkan: Refactored mesh output fetch to use buffer device addresses when available, to avoid any need to patch descriptor sets. This allows the mesh output to work on low-end drivers where update-after-bind descriptor sets are more flexible than normal descriptor sets, preventing any descriptor set patching.

Bugfixes

  • UI: Thumbnails for empty-but-used textures are displayed instead of being hidden in the texture viewer.
  • UI: Fix bad painting of hover-highlight on pipeline state resource lists.
  • UI: Apply global font scale to fixed width fonts as well as normal fonts.
  • UI: Fix line number column in shader viewer being wrongly scaled when font scaling is in use.
  • UI: Fix a rare crash when dragging and docking windows.
  • UI: Fix the sorting of texture columns in texture list.
  • UI: Clamp vertex output data to sensible out-of-bounds behaviour to avoid crashes on extremely large draws.
  • UI: Fix crash on 32-bit index buffers that are less than 4 bytes in size.
  • UI: Fix background color selection button getting out of sync.
  • UI: Fix sorting in the GL pipeline state viewer that lead to read/write image and SSBO bindings being displayed wrongly.
  • UI: Fix a crash when the copy keyboard shortcut is invoked on a table with no selection.
  • All: Fix padding of non-block-aligned compressed textures when writing to DDS.
  • Vulkan: Fix cases where shaders with multiple entry points with the same name are incorrectly aliased in SPIR-V.
  • Vulkan: Fix dynamic offsets not being properly recorded if the same descriptor set is bound twice with two different dynamic offsets.
  • Vulkan: Patch imageless framebuffer pre-declared image usage to match patched image usage.
  • Vulkan: Fix behaviour of descriptor update rollover between descriptors when slots are sparse.
  • Vulkan: Fix pixel history to work with imageless framebuffers.
  • Vulkan: Fix reporting of depth test failures with no depth attachment.
  • Vulkan: Fix mistaken incompatibility reported when loading captures with sparse textures.
  • Vulkan: Fix shader debugging with input attachments.
  • Vulkan: Fix spec ambiguity around binding non-sparse-block aligned subresources.
  • Vulkan: Fix a crash if VK_WHOLE_SIZE is used to flush mapped memory that is also used for GPU-visible tiled resources.
  • Vulkan: Fix discard patterns where renderpass discards content and also transitions to presentable layout.
  • Vulkan: Fix a case where masked writes to mapped GPU-local memory regions could overrun bounds.
  • Vulkan: Fix incorrect readback of indirect command parameters inside renderpass2 RPs.
  • Vulkan: Fix crash with triangle size (pass) overlay and multiple subpasses.
  • Vulkan: Fix handling of SPIR-V 1.4+ modules that require all accessed global variables to be listed in entry point interface.
  • Vulkan: Fix conversion of vertex input attributes that don't match in size (e.g. short to full uint) in shader debugging.
  • Vulkan: Fix a crash when running pixel history on a texel modified by a secondary command buffer executed outside of a renderpass.
  • OpenGL: Ignore Location decorations in SPIR-V shaders where they shouldn't be present.
  • OpenGL: Handle calling glRenderBufferMultisampledStorage with a sample count of 0 to create a non-multisampled renderbuffer, as well as cases where the real number of samples was different from the number requested.
  • OpenGL: Don't leak readback texture if renderbuffers are re-initialised.
  • OpenGL: Calculate texture byte size as 4GB to avoid overflow for extremely large textures.
  • OpenGL: Fix texture data readback from renderbuffers.
  • D3D12: Fix a crash when AGS CreateDevice() extension is called.
  • D3D12: Fix AMD vendor UAV not being correctly identified with SM6.x shaders.
  • D3D12: Fix a crash when accessing internal descriptors patched onto the end of a heap when root signature range is unbounded.
  • D3D12: Fix a crash with the quad overdraw overlay when the depth texture is multisampled and typeless.
  • D3D12: Fix a crash if a command allocator is deleted before capture the completes.
  • D3D12: Fix an issue where dxc would break compilation unless a precisely matching dxil.dll was used. This could happen if the dxc found was in the vulkan SDK which doesn't ship with dxil.dll.
  • D3D12: Fix a crash when applying discard patterns to UINT multisampled textures.
  • D3D12: Fix a crash when using a (Pass) overlay with API events selected.

v1.13

3 years ago

Version v1.13

This is primarily a maintenance release, fixing a number of bugs. This release also adds support for sparse resources on both Vulkan and D3D12. These features are now reported as supported when queried for and should function correctly. Note that it's expected that sparse uses are primarily used for defragmentation and manual virtual memory management, not for "megatexture" like uses where significant amounts of the texture are unmapped. The cost for capturing will be proportional to the total size of the texture whether mapped or not.

Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.

Python API changes

  • Primitive topology topology and index byte width indexByteWidth are no longer stored per-drawcall in DrawcallDescription. These now come from the pipeline state consistently, even on GL where these parameters are specified per-draw in the API.
  • Removed callstack member in APIEvent. The callstack is available by looking up the structured chunk via chunkIndex and examining the chunk's metadata.

Features/Improvements

  • UI: Some tweaks to the dark theme.
  • UI: Don't display empty draws with numInstances = 0 even if they have valid state for an instance.
  • UI: Added a quick bookmark toggle to the context menu in the event browser.
  • Linux: Properly implemented 'hook child processes' such that children do not get hooked when this isn't enabled, and children will always consistently get hooked if it is.
  • D3D12: Display variable rate shading state in pipeline state viewer.
  • D3D12: Add support for nvapi wrapped/hooked PSO creation functions.
  • OpenGL: Add handling for ARB_clip_control when displaying in mesh viewer and texture viewer.
  • Vulkan: Ignore platform-specific external resource extensions when loading captures.
  • Vulkan: Add support for new extensions
    • VK_KHR_zero_initialize_workgroup_memory
    • VK_KHR_workgroup_memory_explicit_layout (not currently supported in shader debugging)
    • VK_KHR_synchronization2

Bugfixes

  • All: Add remapping code to allow displaying block-compressed 3D DDS files on linux.
  • UI: Fix an issue where the vulkan layer registration warning wouldn't display properly on high DPI screens.
  • UI: Correctly clamp current event to always be on screen in the timeline bar.
  • UI: Fix calculation of nested buffer offsets in buffer format strings.
  • UI: Fix calculation of byte length in raw buffer viewer when using offsets - length is relative to the offset not the buffer start.
  • UI: Fix display of double data in mesh viewer.
  • D3D: Allow any UUID to be queried from IDXGISwapchain::GetBuffer as long as it's compatible with the D3D11/D3D12 resource interface.
  • D3D: Fix incorrect application of constant buffer alignment rules to structured buffers.
  • D3D: Fix debugging of typed buffer loads with non-32-bit wide elements.
  • D3D: Fix an issue with nvapi extensions on SM5.0 shaders.
  • D3D12: Fix a crash parsing DXIL which contained a self-referential phi node.
  • D3D12: Fix incorrectly generated default cbuffer definition when reflection is stripped from DXIL shader.
  • D3D12: Fix potential device removal when opening very large captures with many command lists.
  • D3D12: Fix a crash calling RSSetShadingRateImage.
  • D3D12: Fix variable shading rate state not being properly applied when selecting a draw.
  • D3D12: Fix reflection in some cases on DXIL causing incorrect buffer strides.
  • D3D12: Handle empty AS/MS shader subobjects in pipeline create.
  • D3D12: Fix a crash when replaying ExecuteIndirect with MaxCommandCount == 0.
  • D3D12: Fix a crash when a root signature specifies multiple UAVs in different space at register 0.
  • Vulkan: Fix serialisation of very small descriptor sets where insufficient space was reserved in the output file.
  • Vulkan: Fix event counting when trailing events in a command buffer existed, that could lead to crashes selecting draws.
  • Vulkan: Fix an issue with incorrect SPIR-V being generated when shader inputs are declared as 16-bit types.
  • Vulkan: Fix VkImageFormatListCreateInfo not being properly respected when mutating formats for MSAA textures.
  • Vulkan: Fix an interaction between the clear-before-X overlays and bindless shader feedback, causing the overlay to break when first selecting draws with arrayed resources.
  • Vulkan: Fix a device lost error on vulkan implementations where some memory types cannot be bound to buffers.
  • Vulkan: Fix a crash when variable descriptor count arrays are used to shrink a descriptor array size.
  • Vulkan: Fix issue with vkBindBufferMemory2 causing memory contents not to be properly recorded.
  • Vulkan: Fix invalid specialisation constants when patching compute pipelines (for bindless feedback or shader editing).
  • Vulkan: Fix a crash reading invalid sampler data when updating descriptor sets with immutable samplers.
  • Vulkan: Fix some cases that could transition resources from UNDEFINED incorrectly.
  • Vulkan: Fix invalid SPIR-V being generated when patching some shaders.
  • Vulkan: Fix an infinite loop when disassembling SPIR-V that contains an empty infinite loop.
  • Vulkan: Fix a crash when using null descriptors from EXT_robustness2 in push descriptors.
  • OpenGL: Fix a crash when structured exporting a capture containing multisampled textures.
  • OpenGL: Properly list stencil-only framebuffer attachments.
  • OpenGL: Fix a crash when programs are linked with no valid shaders.
  • OpenGL: Fix errors on drivers that don't support anisotropy.
  • OpenGL: Fix handling of multisampled renderbuffers not working in histogram & min/max features.
  • Linux: Fix a problem when injected processes would think they are being debugged and terminate on error messages.
  • Linux: Fix missing hooking of glXCreateNewContext.