Skip to content

Releases: baldurk/renderdoc

Version v1.20

27 May 16:10
v1.20
70676a5
Compare
Choose a tag to compare

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.

Version v1.19

31 Mar 16:46
v1.19
eb1e625
Compare
Choose a tag to compare

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.

Version v1.18

25 Jan 15:16
v1.18
3996d03
Compare
Choose a tag to compare

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.

Version v1.17

26 Nov 17:38
v1.17
22d4dc4
Compare
Choose a tag to compare

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.

Version v1.16

30 Sep 16:26
v1.16
5486bf0
Compare
Choose a tag to compare

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.

Version v1.15

28 Jul 16:12
v1.15
a490606
Compare
Choose a tag to compare

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.
  • V...
Read more

Version v1.14

28 May 16:13
v1.14
50b2cec
Compare
Choose a tag to compare

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.

Version v1.13

29 Mar 16:03
v1.13
cc05b28
Compare
Choose a tag to compare

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.

Version v1.12

27 Jan 19:21
v1.12
40b86b6
Compare
Choose a tag to compare

Version v1.12

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!

Animation showing how the extension works

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.

Main Highlights

  • 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

  • ShaderVariableType and ShaderVariableDescriptor have been renamed to ShaderConstantType and ShaderConstantDescriptor because they are only used with ShaderConstant and not with ShaderVariable.

Features/Improvements

  • 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 CaptureViewer interface 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 @12345 are 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 SPV_GOOGLE_user_type.
  • 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.

Bugfixes

  • 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 IUnknown and IDXGIObject.
  • 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.

Version v1.11

27 Nov 17:30
v1.11
c5480aa
Compare
Choose a tag to compare

Version v1.11

This version has a number of important bugfixes, including a common crash on closing captures on D3D12 as well as a crash with optional swapchain types on D3D11 that affected UE4 users. There are also some useful feature improvements and quality of life fixes to improve workflows around sharing captures with other people.

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

Main Highlights

  • The texture list in the texture viewer now has columns showing the different common texture properties, and allows sorting and filtering by these:
    image
  • Edited shaders are now considered a modification to the capture in the same way as bookmarks, resource renames and capture notes. This means you get prompted when there are unsaved changes:
    image
    As well as when you do choose to save them, the edits come back when the capture is reloaded. When this happens the edits are not "applied" until you explicitly choose to do so, but the shader editor windows do appear.
  • Capture comments have been enhanced to allow linking to specific events with "@1234" syntax. This can be useful when sharing a capture with someone, specially in combination with the "Show capture comments on load" option which defaults to on. You can describe the issue and link to a particular event:
    image
  • Vulkan shader debugging now supports non-32-bit types, including 8-bit, 16-bit, and 64-bit integers as well as half floats and doubles.
  • The UI side qrenderdoc python API has had a number of improvements to support UI extensions. Many of the built-in windows now have better programmatic controls exposed, and there is a new interface MiniQtHelper to build simple UIs without needing to depend on PySide which may or may not be distributed with the renderdoc build.

Python API changes

  • The SDObjectData struct has been refactored so the list of children is no longer directly accessible. New interface functions in SDObject are available for accessing children: GetChild(idx), RemoveChild(idx), as well as the existing FindChild(name), NumChildren(), DeleteChildren(). There is also a direct GetParent() accessor now to get the parent of an SDObject.
  • The numChildren member has been removed from SDObjectPODData. This was redundant and the number of children in an object can be accessed through the above interface.
  • ReplayController.DebugVertex now takes a parameter view to specify the multiview to debug, which can be set to 0 if multiview is not in use.
  • SaveCallback and CloseCallback in use by ShaderViewer have a changed signature to account for new parameters ResourceId id, ShaderStage stage in SaveCallback and ShaderViewer viewer, ResourceId id in CloseCallback.

Features/Improvements

  • UI: When cancelling a long-running shader debug session, display the partial trace instead of nothing.
  • UI: Display stencil values in binary and decimal in tooltips, in texture viewer status bar and pipeline state viewer.
  • UI: Optimised the pipeline state viewer when displaying large numbers of resources.
  • UI: Resource inspector now generates 'pages' of 250 elements for large arrays in any listed initialisation chunks.
  • UI: When displaying FP16 textures with no type hint, default to float rather than unsigned normalised interpretation.
  • UI: Opening textures from the pipeline state view rather than using the texture viewer thumbnails will inherit the typecast from the bound texture view, if one exists.
  • D3D11 & D3D12: Add support for nvapi and AGS shader extensions, including shader debugging support for 64-bit atomics.
  • D3D12: Add support for new D3D12.?? interfaces. No new features are enabled still.
  • Vulkan & D3D12: Optimise memory & CPU use while loading captures with very large descriptor sets/heaps.
  • Vulkan: Fix some extra memory being unnecessarily allocated during capture time.
  • Vulkan: When shader debugging improve the case where multiple aliased pointers write to an object, and only some of the pointers show the change.
  • Vulkan: When showing unused bindings within an array where some are used, display them in italics the same as unused single bindings.
  • Vulkan: Add support for properly debugging vertices in non-zero views when using multiview.
  • Vulkan: Optimised work when working with very large indirect count drawcalls.
  • Vulkan: Implement support for several extensions:
    • VK_KHR_copy_commands2
    • VK_KHR_shader_terminate_invocation
    • VK_EXT_image_robustness
    • VK_EXT_shader_atomic_float
    • VK_EXT_shader_image_atomic_int64

Bugfixes

  • All: Restore workaround for D3D11 nvidia driver bug that was accidentally removed that could cause crashes immediately when the UI starts and enumerates available GPUs.
  • All: Work around a rare deadlock on shutdown by skipping winsock cleanup.
  • All: Fix issues with quad overdraw on MSAA targets (works on all APIs but vulkan).
  • All: Fix potential crash or deadlock when shutting down remote server connection.
  • UI: Fix a crash on shutdown (or more rarely immediately) on D3D12 captures after looking at resources in the resource inspector.
  • UI: Fix a crash when opening a texture in buffer viewer.
  • UI: Fix incorrect application of dynamic bindless feedback to bound resources when the resources used aren't in a contiguous range.
  • UI: Fix UAV slot numbers in D3D11 pipeline state viewer.
  • UI: Fix an issue where some texture viewer panels could get closed accidentally. This should no longer be possible and the panels will be re-opened next time if they are closed.
  • UI: Fix the mesh viewer incorrectly considering attributes out of bounds if the vertex buffer stride itself is 0. This is a special case that allows the attributes to be fetched from their base offset.
  • D3D11: Fix a crash when creating SWAP_EFFECT_FLIP_DISCARD swapchains.
  • D3D11: Fix 'resource usage' showing usage from bound graphics shader stages on compute dispatches and vice-versa.
  • D3D11: Tiled resources are reported as unsupported.
  • D3D11: Fix an issue where source debugging would break if a shader contained a #line statement with an explicit empty filename "".
  • D3D12: Properly track and handle residency around the use of the new CREATE_NOT_RESIDENT heap flag.
  • D3D12: Fix handling of ViewInstancing structure inside D3D12_PIPELINE_STATE_STREAM_DESC.
  • D3D12: Fix some crashes serialising DXIL shaders with large numbers of constants.
  • D3D12: Fix crash in overlays when no scissor regions are bound at drawcall.
  • D3D12: Fix failure in pixel shader debugging if the root signature has DENY_PIXEL_SHADER_ROOT_ACCESS.
  • D3D12: Fix a crash if a root signature is created that's an exact duplicate of an internal renderdoc root signature.
  • D3D12: Fix wrong slice being displayed for multisampled RTVs/DSVs.
  • D3D12: Fix display of typeless textures that are cast to UINT.
  • D3D12: Fix a crash if a root signature range specifies more descriptors than exist in the resulting bound descriptor heap.
  • D3D12: Fix wrong disassembly of DXIL shader where constants contain forward references.
  • D3D12: Fix crashes related to caching/pooling serialised command buffer commands.
  • D3D12: Fix error with internal descriptors being treated as static, when they are volatile.
  • D3D12: Fix a race condition if command buffer memory was reset after frame capture stopped but before commands were saved to disk.
  • D3D12: Fix a possible deadlock between queue submissions and a capture starting or finishing on different threads.
  • Vulkan: Fix a crash if vkBind*Memory2 was used to bind multiple resources at once, but only some of the resources are included in the capture.
  • Vulkan: Fix shader debugging bounds checking on array access being off by 1 allowing access out of bounds potentially crashing.
  • Vulkan: Fix crash if VkDeviceGroupDeviceCreateInfo is used (redundantly since we don't support device groups) at device creation time.
  • Vulkan: Fix a crash when writing inline uniform block data.
  • Vulkan: Fix a case where discard patterns weren't properly applied for LOAD_OP_LOAD renderpass attachments with UNDEFINED initial layout.
  • Vulkan: Disable use of KHR_buffer_device_address on AMD on windows for now due to driver issues.
  • Vulkan: Add new capture compatibility check to look for memory allocations that come from non-existant types.
  • Vulkan: Ensure drawcall ID shader builtin is correct when replaying partial indirect multidraws.
  • Vulkan: Fix a case in the pixel history where fragment depth output values were incorrect.
  • Vulkan: Fix a crash when dynamic state is not properly bound at the start of a partially-replayed command buffer.
  • Vulkan: Fix incorrect array layer being used when debugging shaders that sample from cubemap arrays.
  • Vulkan: Fix the text overlay breaking if frame 0 is captured.
  • Vulkan: Fix issues with registering headless or display plane surfaces.
  • Vulkan: Fix a problem where depending on the bound memory regions, mapped memory updates to opaque tiled resources could get replayed leading to driver hangs.
  • Vulkan: Fix picking vertices in the mesh viewer when inverse viewport height is in use.
  • Vulkan: Fix vertex offset not being applied to VertexIndex shader builtin when fetching mesh output.
  • Vulkan: Fix an issue in shader debugging where incremental access chains could reach the wrong offset in SSBO accesses.
  • Vulkan: Fix baseVertex being stored incorrectly for indirect indexed draws.
  • Vulkan: Fix crashes with overlays when rasterizer discard is enabl...
Read more