Skip to content

Releases: baldurk/renderdoc

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

Version v1.10

18 Sep 16:22
v1.10
381fdbe
Compare
Choose a tag to compare

Version v1.10

This release is primarily focussed on some optimisation and speed improvements, mostly during capture time while idle in the background but also applying to capturing in some cases and some improvements to replay speed. The amount of speedup you'll see will depend on your application's usage and API, but the worst cases before should be significantly improved. There are still some cases that remain to be improved in future.

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

Main Highlights

  • Reduced idle overhead while injected into programs, while not actively capturing a frame.
    • All APIs have seen improvements, though some will see greater savings than others especially depending on API usage patterns. Modern APIs (D3D12/Vulkan) with high frequency API calls and command buffer recording will likely see bigger savings.
  • Improved speed of capturing a frame on Vulkan when GPU-local host-visible uncached memory is mapped.
  • Improved application startup time from cold.
  • Improved replay time for switching events for Vulkan captures with large numbers of descriptors bound with few actually used (i.e. 'bindless' type workflows).

Python API changes

  • ReplayController.GetDisassemblyTargets now takes a single bool parameter, indicating whether to include disassembly targets that must be used with a pipeline. When True is passed some of the targets may fail if a pipeline isn't supplied when calling ReplayController.DisassembleShader.
  • CaptureFile.SetMetadata has been updated to take two new parameters, the timestamp base and timestamp frequency (divisor). If converting from another file, these can be obtained with CaptureFile.TimestampBase and CaptureFile.TimestampFrequency. If specifying data purely synthetically, it is simplest to set the base to 0 and the frequency to 1.0 to indicate no conversion should happen, and provide all timestamps and durations in microseconds already. Otherwise timestamps will have the base subtracted from them, and timestamps and durations will be divided by the frequency to convert to microseconds.
  • PipeState.GetReadOnlyResources and PipeState.GetReadWriteResources have an optional parameter now bool onlyUsed which defaults to False. If set to True not all resources will be returned and only dynamically used resources are guaranteed to be included. Pay attention to the returned BoundResourceArray.firstIndex showing what the first real index is of the first item in the returned array.

Features/Improvements

  • UI: Work around GNOME bug that could lose default file extension on saving files.
  • UI: When a non-active texture viewer tab is closed don't switch active tab.
  • UI: Don't display shader disassembly views that require a pipeline if the shader viewer was opened without a pipeline.
  • Vulkan: Optimise readback of mapped device-local memory on discrete GPUs (PCI-express window heap).
  • Vulkan: Implemented some optimisations while in the background (not actively capturing a frame) in captured programs.
  • Vulkan: When memory behind opaque tiled images is mapped, ignore replaying any detected writes which may cause GPU hangs.
  • Vulkan: Add support for VK_ANDROID_external_memory_android_hardware_buffer.
  • OpenGL: Show float casting if glVertexAttribFormat is used with an integer format without normalisation enabled.
  • OpenGL: Add support for GL_INTEL_performance_query on windows.
  • OpenGL ES: Enabled use of GL_OES_surfaceless_context extension.

Bugfixes

  • UI: Fix a bug where some platforms allowed closing progress dialogs which could break tracking.
  • UI: Fix texture viewer settings being unmodifiable.
  • UI: Fix truncation of long resource names in UTF-8.
  • UI: Fix a case where the resource inspector would rename the wrong resource if a new resource is selected while a rename is in progress.
  • UI: Allow python scripts run on the command line to call sys.exit to prevent the UI from displaying at all.
  • UI: Fix arrays of constant buffers not displaying properly in vulkan pipeline state view.
  • All: Fix tracking of multiple swapchains when swapchains resize.
  • All: Fix diagnostic log being left behind if the UI is closed before an application writing to it.
  • All: Fix a potential crash if an index buffer is insufficiently sized and 32-bit indices are in use.
  • All: Fixed a memory leak when converting zip.xml to rdc.
  • Vulkan: Fix a crash when debugging vulkan SPIR-V shaders that contain line information in function variable declarations.
  • Vulkan: Fix a crash with vulkan where no viewports are bound at a drawcall.
  • Vulkan: Fix false-positive validation layer message that could appear when mis-aligned coherent mapped memory writes are detected.
  • Vulkan: Fix loading captures that used VK_EXT_debug_utils for replay when VK_EXT_debug_utils isn't supported by anything on replay.
  • Vulkan: Fix memory being mapped with an offset.
  • Vulkan: Fix handling of debug report enums in naming objects.
  • Vulkan: Fix a crash when calling vkDestroy*/vkFree* with VK_NULL_HANDLE.
  • Vulkan: Fix a device loss if a frame capture resets a query pool after copying from it, leading subsequent replays to refer to an invalid query.
  • Vulkan: Fix a crash if a device with multiple queues is destroyed and then a new one is created.
  • Vulkan: Fix handling of CONCURRENT image sharing mode on swapchains.
  • Vulkan: Fix indirect multidraws accidentally replaying draws twice when selected.
  • Vulkan: Fix handling of variable-count last descriptors from VK_EXT_descriptor_indexing.
  • Vulkan: Fix API events associated with indirect-count vulkan draws breaking subsequent command buffers in the capture.
  • OpenGL: Fix a case where texture state could be changed accidentally on the first present call on a new context.
  • OpenGL: Fix restoring texture buffer bindings when glTextureBufferRange is available.
  • OpenGL: Fix multidraw commands breaking when selecting individual draws.
  • OpenGL: Fix typo in glClearFramebufferfv and variants that would should RGBB instead of RGBA for clear color.
  • OpenGL: Fix a crash if glFrameTerminatorGREMEDY is called in a frame.
  • OpenGL: Fix saving cubemaps to disk only saving first face.
  • OpenGL: Fix incorrect context parameters being serialised in implicit context thread switch.
  • OpenGL: Handle replaying on GL drivers without ARB_transform_feedback2.
  • OpenGL: Add missing fetch/serialise/apply of texture anisotropy state.
  • OpenGL ES: Fix shader compilation for discard patterns shader.
  • OpenGL ES: Fix call to glBindFragDataLocation that's not available on GLES.
  • D3D: Fix disassembly of relative addressing DXBC bytecode when the variable is ambiguous.
  • D3D11: Fix a crash on subsequent captures (not the first) when multiple contexts map the same buffer.
  • D3D12: Fix a potential race condition when resources are mapped on one thread while another thread is submitting command buffers during capture.
  • D3D12: Fix a case where descriptor copies of RTVs or DSVs mid-frame wouldn't properly reflect in subsequent command buffer bindings.
  • D3D12: Fix D3D11On12 using semi-documented ID3D12CompatibilityDevice functions.
  • D3D12: Fix shader debugging query for resource dimensions on SRVs/UAVs created with NULL descriptor struct.
  • D3D12: Fix CreateCommandList1 not handling command lists being created without implicit reset.
  • D3D12: Fix shader debugging of vertex shaders using pixel shader access to root signature bindings, possibly leading to incorrect samplers or textures being used.
  • Windows: Fix callstacks not displaying offset when no symbols are available for a module.
  • Linux: Fix some programs not launching for capture correctly due to part of the ELF remapping not being accounted for.
  • Linux: Fixed some issues that showed up with new Qt versions.

Version v1.9

22 Jul 17:46
v1.9
22dbb18
Compare
Choose a tag to compare

Version v1.9

This version comes with two useful features for Vulkan users, pixel history and shader debugging, as well as a number of other feature improvements and bugfixes. More details on all of those are listed below.

Please ensure you have the latest graphics drivers installed for your system, as a number of bugs have been fixed recently that are relevant to these new features.

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

PLEASE NOTE: I've added a new flag to the existing analytics system to track how many people use DXIL shaders on D3D12. This flag works the same as other analytic flags, in that it only stores a single bit of whether or not (per month) you have ever loaded a capture that uses DXIL shaders. It doesn't track anything to do with the shader contents, their version, shader stage, or anything like that.

If you are already opted out of the analytics this will not change anything for you. If you would like to opt out of the analytics after this change you can do so in the main settings page, under 'Anonymous Analytics'.

Main Highlights

  • Vulkan supports shader debugging of SPIR-V shaders at vertex, fragment and compute stages.

    image

    To debug a vertex, use the mesh viewer to select the vertex and instance you want and then right click to debug that particular vertex. Fragment shaders can be debugged either from pixel history (see below) or else with the 'debug' button under the texture viewer, when you have the desired drawcall and pixel selected. Note that if the current draw overdraws the pixel then it's not defined which instance of the pixel shader will be debugged, so you can use the pixel history to select a particular fragment. To debug a compute shader there are new controls on the pipeline state viewer to select the group and thread you wish to debug.

    Currently the shader debugging is at the SPIR-V level. No special setup is required, however if the shader is built with debug information such as embedded source code and OpLine mapping that can be used to switch between source and SPIR-V, and where possible real names will be used for variables.

    Please ensure you have the latest graphics drivers installed for your system, as a number of bugs have been fixed recently that are relevant to these new features.

    At the moment there is limited support for extended types such as float16 and int16, as well as extensions and features added after vulkan 1.0. Currently subgroups and subgroup operations are not supported, so only one thread of any given shader will be debugged at a time. A tracking issue exists to follow the status of those limitations.

  • Vulkan now also supports fetching pixel history thanks to contributions from Aliya Pazylbekova at Google.

    Within the texture viewer you can select a pixel in a given texture and click the 'history' button below the zoomed in context view to fetch a list of all modifications to that pixel up to that point in the capture. In particular for drawcalls this will show which drawcall and where possible which primitive covers the pixel, as well as showing if a drawcall fails a given rasterization test before modifying the pixel.

    image

    There are a few known limitations such as surrounding the use of secondary command buffers and render passes with multiple subpasses, as well as if command buffers are submitted multiple times in a frame. A tracking issue exists to follow the status of those limitations.

  • When a resource is discarded it will now be filled with a recognisable pattern, both to make it clear what has happened as well as to debug any cases where that data is then read inadvertently. This feature is disabled when captures are opened with the 'Fastest' replay optimisation level, which can either be done as a one-off with FileOpen Capture with Options or changed in the settings menu as a default.

    Buffers are filled with a repeating 0xD15CAD3D pattern. Textures are filled with a pattern depending on how they were discarded:

    This happens explicitly on OpenGL when calling glInvalidate*.
    image

    On D3D11/D3D12 this happens explicitly too with Discard* calls.
    image

    On Vulkan this can happen implicitly when transitioning an image from UNDEFINED to any layout.
    image

    Also when using a render-pass attachment with LOAD_DONT_CARE or STORE_DONT_CARE.
    image image

  • Programs using DXIL (SM6.x) bytecode can now be captured and replayed. All existing features except for shader debugging are supported. NOTE: As mentioned above, I've added a simple flag to the existing analytics system to track how many people use DXIL shaders. See above for more information.

Python breaking changes

  • byteStride has been moved from VKVertexBinding to VKVertexBuffer.
  • CompType.Double has been removed. Double are now represented the same way as other non-32-bit values, with CompType.Float as the base component type and the associated byte width set to 8. Everywhere that already used CompType.Double already has a byte width that can be examined.

Features/Improvements

  • UI: Add a configurable set of folders to search for custom visualisation shaders for the texture viewer.
  • UI: Add support for navigating within buffers that are larger than 2GB.
  • UI: Improve the copy-paste behaviour for tree views.
  • UI: Add expand/collapse all to all tree views in the UI (previously it was inconsistently available).
  • UI: Disable rasterizer-based shader stages from pipeline flowchart if rasterizer discard is enabled.
  • UI: When an application crashes or otherwise disconnects mid-capture, hide the capture progress bar.
  • UI: Show error dialog when vulkan layer registration as root fails.
  • UI: Fix display of actions within a package on android when packages contain many actions.
  • UI: Fix deadlock when running run command for remote server.
  • UI: Show the image view in vulkan pipeline state viewer when the view is non-trivial.
  • UI: Show slices in opengl pipeline state viewer when only some slices of an image are bound.
  • UI: Resource inspector now shows an entry for discard uses of a resource.
  • UI: Alpha-only textures default to showing the alpha channel instead of RGB like other textures.
  • All: Made texture overlays behave more consistent with interaction with viewport and scissor, and added a pass/fail red/green drawcall overlay for showing scissor test failure.
  • D3D: Add support for new MS way for separate debug info in shaders.
  • Vulkan: Defer preparing initial states of resources that are not modified in several seconds to reduce memory overhead.
  • Vulkan: Entirely omit initial contents for images that are always fully initialised within any command buffer that uses them, to reduce memory overhead.
  • Vulkan: Include the draw count for indirect draws.
  • Vulkan: Improve the handling of unknown pNext structures, and allow linux builds to support windows-only pNext structs such as those from VK_EXT_full_screen_exclusive.
  • Vulkan: When negative viewport height is in use, account for that when unprojecting mesh data for display in mesh viewer.
  • Vulkan: Add support for extensions:
    • VK_EXT_inline_uniform_block
    • VK_EXT_custom_border_color
    • VK_EXT_robustness2
    • VK_EXT_pipeline_creation_cache_control
    • VK_EXT_private_data
    • VK_EXT_extended_dynamic_state
  • OpenGL: Removed some spurious serialised buffer binding calls when client side arrays are potentially in use on GL.
  • OpenGL: Don't emit redundant warnings about unbound vertex buffers.
  • OpenGL: Clear calls consistently show in the event browser as drawcall type events.
  • GLES: Support added for ARM counters on OpenGL ES.
  • Linux: Implement proper support for capturing child processes, and populate them immediately in the capture connection panel. This fixes capture of apitrace as well as e.g. launching a program through a wrapper script.
  • Linux: Implement 'debugger delay' option to wait for the debugger after launching a child process.
  • Android: Added support for upcoming Android 11 breakage of storage locations.

Bugfixes

  • All: Handle buffer truncation and zero-sized buffers correctly.
  • UI: Fix generation of padding bytes between struct members in raw buffer viewer.
  • UI: Fix handling of nested structs in raw buffer viewer.
  • UI: Fix paging buttons in raw buffer viewer.
  • UI: Fix combined image/sampler descriptors not displaying properly.
  • UI: Fix an off-by-one error that would display too many or duplicated thumbnails for D3D12 resources.
  • UI: Fix an issue that could cause device crashes with a particular race between an HWND resizing and creating a swapchain.
  • UI: Fix a bug generating HLSL edit stubs.
  • UI: Fix handling of matrix padding in raw buffer viewer.
  • UI: Fix calculation of index buffer offset.
  • UI: Fix a crash when opening a constant buffer which is not buffer backed (e.g. push/root constants) and is not used by the current pipeline.
  • D3D11...
Read more

Version v1.8

20 May 14:36
v1.8
8b491e1
Compare
Choose a tag to compare

Version v1.8

This release continues the plan of shipping a stable release every other month. As well as the usual batch of bugfixes and minor improvements there is one big ticket feature added:

Thanks to Steve Karolewics who has been working hard over the last 6 months, D3D12 now has the same shader debugging support that D3D11 has had for many years. This includes every feature already present, as well as support for the new SM5.1 bytecode format that's D3D12-exclusive.

It is accessed and used in exactly the same way as D3D11, vertices can be debugged from the mesh viewer and pixels from the texture viewer. Compute threads in dispatches can be debugged from the pipeline state, though note that the same proviso exists that only one compute thread is simulated when being debugged.

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

Main Highlights

  • As mentioned above, D3D12 shader debugging is now fully supported, including support for the new SM5.1 and resource array indexing:
    image
  • If RenderDoc is associated with DDS files in windows explorer it will now generate and display thumbnails for them. This supports compressed block formats using AMD Compressonator:
    image
  • Vulkan capture and replay performance should be improved, especially for applications with large amounts of memory in use.

Python breaking changes

  • Some settings from the PersistantConfig class have been removed and moved to a new centralised settings system shared with the core module and so available at all times rather than just in the UI program. These are:
    • ShaderViewer_FriendlyNaming - moved to DXBC.Disassembly.FriendlyNaming
    • Android_SDKPath - moved to Android.SDKDirPath
    • Android_JDKPath - moved to Android.JDKDirPath
    • Android_MaxConnectTimeout - moved to Android.MaxConnectTimeout
    • ExternalTool_RGPIntegration - moved to AMD.RGP.Enable
    • ConfigSettings - removed aside from shader.debug.searchPaths which was moved to DXBC.Debug.SearchDirPaths.
  • The D3D12 pipeline state representation has been refactored to be root-signature centric and contain bindings and tables off root signature entries, compared to the previous layout that unpacked everything into register spaces and registers.
  • To be more python friendly, texture swizzles in pipeline states are moved from a C array which didn't bind well to python into a struct that contains red, green, blue, and alpha members.
  • SigParameter now has a VarType member varType instead of a CompType member compType to allow more flexible representation of signature elements.

Features/Improvements

  • UI: Buffer viewer row offset can be used to skip through pages (10,000 rows per page) as well as scroll within a page.
  • UI: Scroll to selected texel in buffer viewer when opening a texture from the texture viewer.
  • UI: Improve the display of edited shaders to reference the original resource instead of displaying the unknown internal ID of the replacement.
  • UI: Show the specific subresource used in a copy in the texture viewer, for both input and output.
  • UI: Unreasonably long resource names are truncated when displayed outside of the resource inspector.
  • UI: In the shader debugger, a new panel tracks accessed resource bindings.
  • UI: Handle opengl dvec/dmat types in buffer formatter.
  • UI: When using goto pixel option in texture viewer, centre the view on the selected pixel if possible.
  • UI: Add keyboard shortcuts for accessing remote host menu.
  • UI: Tweak auto-generated marker regions to ignore command buffer boundaries.
  • All: Reduce memory overhead when reading captures with large buffers.
  • All: Added a configuration system for configuring debug/beta flags (similar to about:config in browsers).
  • All: Update RGA support to 2.3.1 including support for Navi 14.
  • Vulkan: Improve replay load-time performance for very large resource arrays.
  • Vulkan: Improve handling of indirect-count draws with very large max draw count.
  • D3D12: Improve handling of 'bindless' large resource arrays.
  • D3D12: Add support for more interfaces in D3D12's OpenSharedHandle.
  • Image Viewer: Add support for more legacy type DDS format headers.
  • Android: List system packages as hidden folders when browsing for packages.

Bugfixes

  • All: Fix handling of texture overlays when rendering to mip levels other than 0.
  • All: Fix an edge case where after more than 2 billion function calls a capture would fail to create.
  • All: Fix a problem where if GPU enumeration crashes, the crash reporter would also crash trying to enumerate GPUs.
  • All: Fix a referenced tracking issue where writes to a resource could be lost leading to the replay treating it as read-only even if it's modified in the capture.
  • All: Fix a crash selecting a new draw, after previously selecting a draw which generates too much vertex data.
  • All: Fix shader debugging failure over remote proxy connection.
  • UI: Fix issues with paging in the buffer viewer.
  • UI: Fix potential crash with hovering over treeview while data is changed.
  • UI: Disallow entering invalid paths into texture save dialog.
  • UI: Fix clamping on extreme out-of-bounds values for offsets/vertex counts in mesh viewer.
  • UI: Fix display of secondary data with less than 3 components in mesh viewer.
  • UI: Fix use of packed uintten/unormten formats in raw buffer viewer.
  • UI: Fix export from buffer viewer when pagination is in use.
  • UI: Fix display of column-major matrices in buffer viewer.
  • UI: Fix crash if a capture is made immediately before capture connection is closed.
  • UI: Fix the search direction not respecting the find previous/find next buttons.
  • UI: Fix handling of row_major on struct member types.
  • UI: Fix missing padding for rectangular matrices on some generated buffer formats.
  • UI: Fix wrong buffer register being generated for HLSL editing stubs.
  • UI: Fix connecting to remote servers (including android device) sometimes incorrectly saying they were already in use.
  • UI: Add progress dialog and cancel button while shader viewer is running debug in the background.
  • D3D: Don't trample an input file with #line statements in shader debug info.
  • D3D: Fix handling of FXC produced debug info with invalid array type data.
  • D3D: Fix some cases of shader linkage between VS and PS failing when debugging pixel shaders.
  • D3D: Fix incorrect calculation of SV_VertexID in mesh output and shader debugging when using index/vertex offsets.
  • D3D: Fix incorrect handling of empty structs in cbuffers.
  • D3D: Fix incorrect handling of struct array strides not including padding in cbuffers.
  • D3D11: Fix a crash if stream-out is unbound by calling ClearState()
  • D3D11: Fix an off-by-one issue with the instruction pointer when debugging flow control constructs.
  • Vulkan: Don't load VK_KHR_driver_properties on replay if it's not available.
  • Vulkan: Improve memory type selection, increasing capture performance.
  • Vulkan: Fix race condition if memory is unmapped while referenced in a queue submission happening on a different thread.
  • Vulkan: Fix crashes with indirect-count draws in secondary command buffers.
  • Vulkan: Fix an overflow crash when looking up buffer contents for buffers bound with a positive offset and VK_WHOLE_SIZE size.
  • Vulkan: Fix invalid code having multiple queries of the same type active at once when initially resetting a query pool.
  • Vulkan: Fix a potential crash when replaying captures with very large query pools.
  • Vulkan: Fix framebuffer clears not properly applying when selecting vkCmdBeginRenderPass.
  • Vulkan: Fix crash if dynamic descriptor access indexes out of bounds. The dynamic feedback of which descriptors are used may still be invalid but it won't crash.
  • Vulkan: Remove dangling SPIR-V references when patching for mesh-output fetching.
  • Vulkan: Fix issues with KHR performance query counters storing time.
  • Vulkan: Fix vertex output processing not properly handling push constant ranges that cover both vertex and another shader stage.
  • Vulkan: Allow NULL as an object name string in vulkan, to comply with new spec update.
  • Vulkan: Fix crash when serialising pipeline state with dynamic viewport/scissor state and garbage viewport/scissor pointers which should be ignored.
  • Vulkan: Fix an edge case where rendering meshes could fail if the attribute offset was folded into the vertex binding offset.
  • Vulkan: Fix mesh output data not being correct for component-packed outputs.
  • Vulkan: Fix disassembly of vector shuffles.
  • Vulkan: Add fallback to remove global queue priorities if device creation fails due to lack of privilege.
  • Vulkan: Don't reflect subpass input data as storage type images.
  • Vulkan: Add support for khronos validation layer when enabling API validation.
  • Vulkan: Don't add VkPhysicalDeviceVulkan12Features to device creation chain, causing invalid combinations of feature structs.
  • Vulkan: Verify that device limits aren't exceeded when patching descriptor sets, for drivers that have quite low descriptor limits.
  • Vulkan: Fix usage being listed for bound compute pipelines in drawcalls, and vice-versa bound graphics pipelines in dispatches.
  • Vulkan: Serialise VkDeviceCreateInfo before patching for capture/replay, to avoid polluting with features enabled only for RenderDoc.
  • OpenGL: Hide any debug messages from the driver generated while restoring.
  • OpenGL: Ensure that shader editing programs used in program pipelines can't be overridden.
  • OpenGL: Fix an issue where filling in missing mips in a legacy-alloc...
Read more

Version v1.7

10 Mar 15:33
v1.7
a56af58
Compare
Choose a tag to compare

Version v1.7

Here we are with v1.7, a release containing a number of bugfixes and other improvements.

This release is aimed at starting a new cadence of updates roughly every other month. The aim is to reduce the time between a bug being reported and fixed, and that fix making it into a stable release. Nightly builds always have the latest fixes but for good reason most users prefer to stay on stable releases.

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

Python breaking changes

  • All python scripts that use the replay API must now explicitly initialise and shut down RenderDoc replay API use. The InitialiseReplay function must be called before any other use of the API, and once all API use is done then ShutdownReplay must be called. These functions can only be called once, it's not possible to initialise and shutdown multiple times. Failing to shutdown correctly may lead to memory leaks, and failing to initialise properly could lead to undefined behaviour or crashes.

  • ReplayOutput.PickVertex no longer takes an event ID parameter, it implicitly uses the current event ID.

  • ReplayController.GetCBufferVariableContents takes an extra size parameter to optionally clamp the source range of the buffer. This can be set to 0 for the previous whole-buffer behaviour.

  • ReplayController.DebugVertex no longer takes instance or vertex offset parameters, these are automatically populated from the drawcall data.

  • SigParameter.arrayIndex has been removed.

  • The API for debugging shaders has been heavily refactored. ReplayController.DebugVertex, ReplayController.DebugPixel etc still return a ShaderDebugTrace but it doesn't contain a list of states. Instead the trace can be passed to ReplayController.ContinueDebug to return a list of ShaderVariableState.

    Each state contains per-step information like the step number, instruction, etc, as well as a list of ShaderVariableChange. Each change indicates either a debug variable (e.g. a register) changing, coming into scope (indicated by an uninitialised before value), or going out of scope (with an uninitialised after value).

    Since the changes are bi-directional this allows stepping forward and backwards, accumulating changes.

    For more information consult the relevant documentation.

Features/Improvements

  • Improved performance for capturing D3D12 programs that bind very large descriptor tables (bindless style).
  • When loading textures in the image viewer the sRGB interpretation is no longer stuck on and can be toggled off.
  • Improve handling of queue ownership transfer barriers in Vulkan.
  • Treat vkCmdFillBuffer the same as other clears, as a drawcall listed in the event browser with a resource usage entry.
  • Add resource usage entries for CPU writes to resources.
  • Added a global font scale for the user interface.
  • In capture connection window, captures will have the file size listed to more easily detect degenerate/empty captures.
  • Add support for VK_KHR_shader_non_semantic_info.
  • The find/replace dialogue has changed from a "search direction" and then find next to having find previous/next buttons.
  • For viewing very large buffers there's a paging system to jump through 10,000 rows at once.

Bugfixes

  • Fix MSAA mismatch on D3D12 leading to corrupt mesh viewer rendering on NV GPUs.
  • Fix precision loss when saving non-uniform texture formats (e.g. depth-stencil or RGB9E5) to HDR/EXR.
  • Fix crash calling ID3D12DebugCommandList::AssertResourceState.
  • Fix handling for SAMPLER descriptor writes on vulkan.
  • Fix broken pixel history on D3D11 when the target texture is BGRA8 viewed as sRGB.
  • Fix array specifiers in buffer viewer format always displaying first element for all columns.
  • Fix component display in texture viewer status bar when opening special formats (e.g. block compressed textures) in standalone image viewer.
  • Fix pixel picking when using custom visualisation shaders in image viewer.
  • Fix buffer viewer not rendering correctly in D3D12 on windows 7
  • Fix custom shaders being applied to mips incorrectly.
  • Fix a crash when mapping textures on deferred contexts on D3D11.
  • Fix near and far plane specifiers being backwards in mesh view.
  • Fix camera properties being reset intermittently in mesh view.
  • Fix support for fetching postvs from vertex shaders using subgroups.
  • Fix errors loading captures that enable VK_EXT_tooling_info.
  • Fix problems with D3D12 overlays on high MSAA levels.
  • Prevent race condition if multiple threads create identical D3D12 object.
  • Fix handling of promoted extensions around Vulkan 1.2.
  • Fix resource usage being incorrect after indirect draws.
  • Respect byte range when binding constant buffers on different APIs, instead of always allowing reading out of bounds data in the constant viewer.
  • Only enable bufferDeviceAddressCaptureReplay in VK1.2 feature struct when bufferDeviceAddress is supported.
  • Fix crash in vkCmdBindTransformFeedbackBuffersEXT if pSizes parameter is NULL.
  • Fix global hook on windows.
  • Fix GL capture when no valid context can be made current.
  • Improve handling of multi-dimensional array input/outputs from SPIR-V shaders.
  • Ensure that queue used in vkQueuePresentKHR is included in the capture.
  • Handle multiple push constant ranges properly when fetching vertex output on vulkan.
  • Fix a memory leak on D3D12 if many queues are created.
  • Fix a use-after-free problem on D3D12 if a buffer is used and destroyed mid frame.
  • Fix crash if image views in imageless framebuffer are garbage.
  • Fix rendering for VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM textures.
  • Fix a crash loading a completely empty capture on D3D11.
  • Fix crash on D3D12 when triangle size overlay is selected for a point/line rendering draw.
  • Fix problems on Vulkan when no graphics queue is fetched by the application, even if we reserved one.
  • Fix launching android applications which customise their process name.
  • Fix wrong debugging when loading from multisampled textures.
  • Fix interpolation mode on PS inputs not being respected when debugging pixels.
  • Don't clear compressed textures on vulkan when resetting frame data.
  • Fix certain cases where depth texture MSAA <-> Array copies would fail on D3D12.
  • Fix handling of EXT_debug_marker/KHR_debug inconsistency.
  • Fix python exception handling in python UI extensions.
  • Fix crash when using overlay on D3D11 MSAA depth textures with Quality != 0.
  • Fix extreme edge case where JDWP packets from android come back out-of-order.
  • Add additional error handling when GPUPerfAPI initialisation fails.
  • Handle gl_BaseVertex/gl_BaseInstance and gl_DrawID as built-in inputs correctly.
  • Fix fetching of mesh output data in multi-draw cases on GL.
  • Fix loading captures with ID3D12Device::OpenExistingHeapFromAddress on devices with tier 1 heap capability.
  • Don't report duplicate GL extensions with those we support even if the driver doesn't.
  • Fix replaying captures with VkPhysicalDeviceVulkan12Features wrongly enabling unsupported bufferDeviceAddress feature.
  • Fix case where pixel history could run dispatches multiple times and generate unwanted side-effects.
  • Fix the behaviour for fetching out-of-bounds vertex buffer inputs (if part of a vector goes out of bounds, the whole vector is replaced with 0,0,0,1).
  • Fix conversion of nanosecond counters on vulkan.
  • Fix type mismatch in counter results on vulkan.
  • Fix crash if error occurs importing files in UI.
  • Fix crash if no drawcall is selected when exporting pipeline state to HTML.
  • Fix RTVs not being included in capture when using RTsSingleHandleToDescriptorRange.

Version v1.6

05 Feb 17:56
v1.6
0e7f772
Compare
Choose a tag to compare

Version v1.6

It's a new year and a new release of RenderDoc! This release includes support for the hot-off-the-presses Vulkan 1.2. It also contains many bugfixes and improvements in general.

For the few people running v1.3 still, please see the previous release notes for v1.4 to ensure you kill any runaway crash handler processes before upgrading. This won't be mentioned in future release notes as the number of reported users on v1.3 is extremely small by this point.

Binary releases are available in the usual place with zip and installer for Windows and binary tarball for linux.

Main highlights

  • Add support for newly released Vulkan 1.2. This includes all of the component extensions wrapped up in that release as well as the new compacted feature structs and an updated layer for 1.2 instances.
  • Add UI support for typed GPU pointers in buffers - see VK_KHR_buffer_device_address.
    Pointers in constant buffers
    Pointers in buffers
  • On OpenGL RenderDoc will check for texture completeness and mark incomplete textures as 'empty' in the pipeline state view:
    OpenGL incomplete texture checking

Python breaking changes

  • typeHint members in various structs (BoundResource, TextureDisplay, TextureSave) and functions (ReplayOutput.AddThumbnail, ReplayOutput.PixelHistory) have been renamed to typeCast.
  • PickPixel, GetHistogram and GetMinMax are now provided from ReplayController without the need to create a headless ReplayOutput. Any implicit parameter previously pulled from the ReplayOutput are now explicit function parameters.
  • API functions have been updated to not directly take a mip level, array layer, sample, etc. Now any time a subresource needs to be specified a Subresource object is passed which specifies the mip, array layer, and sample.
  • The CaptureAccess.InitResolver function takes an additional boolean parameter to indicate if resolving symbols should be interactive (e.g. prompting the user to locate symbol files) or non-interactive.

Features/Improvements

  • Add support for a number of Vulkan extensions:
    • VK_KHR_buffer_device_address
    • VK_KHR_shader_clock
    • VK_KHR_spirv_1_4
    • VK_KHR_timeline_semaphore
    • VK_KHR_performance_query
    • VK_KHR_separate_depth_stencil_layouts
    • VK_EXT_buffer_device_address
    • VK_EXT_tooling_info
  • Whitelist some already-supported GLES extensions:
    • GL_EXT_blend_func_extended
    • GL_EXT_clear_texture
    • GL_EXT_clip_control
    • GL_EXT_conservative_depth
    • GL_EXT_depth_clamp
    • GL_EXT_draw_transform_feedback
    • GL_EXT_float_blend
    • GL_EXT_frag_depth
    • GL_EXT_instanced_arrays
    • GL_EXT_map_buffer_range
    • GL_EXT_multi_draw_indirect
    • GL_EXT_multisample_compatibility
    • GL_EXT_multisampled_render_to_texture2
    • GL_EXT_occlusion_query_boolean
    • GL_EXT_render_snorm
    • GL_EXT_texture_mirror_clamp_to_edge
    • GL_EXT_texture_query_lod
    • GL_EXT_texture_shadow_lod
    • GL_OES_blend_equation_separate
    • GL_OES_blend_func_separate
    • GL_OES_blend_subtract
    • GL_OES_element_index_uint
    • GL_OES_framebuffer_object
    • GL_OES_texture_cube_map
    • GL_OES_texture_mirrored_repeat
  • Also whitelist GL_EXT_texture_shadow_lod on GL
  • Improve calculation and display of range histogram to be more intuitive.
  • Add support of EGL with OpenGL on linux.
  • Improve default buffer format string for very small (less than 16 byte) buffers.
  • Improved handling of vulkan layer registration on linux in different scenarios.
  • Don't use full filename as texture name in image viewer.
  • Fall back to EGL for GL replay if GLX can't be initialised and EGL is compiled & supports GL hack.
  • Add support for DXGI desktop duplication API.
  • Add a 'sync views' option for the performance counter viewer, to always scroll to the selected event when it changes.
  • Implement OpenSharedResource1 and ResourceByName on D3D11.
  • Add support for shared fence imports on D3D11 and D3D12.
  • Add an error if android intent arguments are obviously badly formatted.
  • Reduce timeout time if an android program fails to start.
  • Remove legacy assumptions that 1 capture is 1 frame. Present() calls are serialised properly instead of being implicitly added at the end of the frame, and if a capture is API triggered it won't refer to frame numbers.
  • Add support for serialising framebuffer invalidate calls in GL.
  • Support typeless textures in D3D APIs when replaying on a GL proxy.
  • Serialise initial contents of multisampled textures on GL.
  • If buffer formatter help text is hidden, save that state and don't show it again until it's toggled on.
  • Add 'expand all' menu item to resource inspector window.
  • Add fake expanded root signature elements in structured data (visible in resource inspector window), to allow browsing the unpacked blob.
  • Allow inspecting hidden UAV counters at any time via a faked separate 4-byte buffer.
  • Export float-sized texture formats to full floats in EXR files.
  • Serialise ClearState() calls in D3D12 command lists.
  • Refactor camera controls in buffer viewer slightly, instead of explicitly being named 'WASD' they are now 'flycam', and should work regardless of keyboard layout.
  • Add sensible default parameters for mesh replay API structures.
  • The 'clear before X' overlays now clear the depth output if it's selected, as well as just the colour outputs. This is only possible if the test is 'directional' - equal/not equal and always/never depth functions cannot be cleared.
  • When selecting a vkBeginCommandBuffer event, nothing inside the command buffer is replayed.
  • Improve replay performance of vulkan captures with very large texture arrays that are potentially split per-subresource for layout tracking.

Bugfixes

  • Remove temporary capture files from recent files list.
  • Fix a crash if the event browser is closed when opening a capture.
  • Fix a bug that could corrupt data in ExecuteIndirect parameters.
  • Fix fetching of driver disassembly for Vulkan and D3D12.
  • Fix some painting not reacting to different fonts correctly.
  • Fix handling of ZIP files failing with >65535 files.
  • Fix incorrect display of sample mask in D3D12 pipeline state.
  • Don't display typed buffers as structured in D3D11 pipeline state.
  • Fix bug with structured buffer loads on D3D11 shader debugging.
  • Fix crash if capture is queued for frame 0 on D3D12 but no window presentation happens.
  • Fix calculation of dataSize and using wrong pitch in WriteToSubresource.
  • Don't crash if vertex buffer stride is 0 when picking vertices.
  • Don't crash when an unsupported Android device is connected.
  • Fix error when loading validation layers in vulkan replay.
  • Fix incorrect bounds check when looking up D3D12 constant buffer in higher spaces.
  • Fix byte-addressed 4-component loads in shader debugging.
  • Don't register debug callback on GL when structured-exporting.
  • Fix case where D3D shader debug data didn't find correct filenames due to / and \ mismatches.
  • Fix status bar display of A8 textures.
  • Fix fetching of view parameters for MSAA array textures on D3D11.
  • Don't serialise vkGetFenceStatus and similar each time if called in a rapid loop.
  • Fix calculation of array byte stride for structs with padding in DXBC.
  • Only read pImmutableSamplers pointer for sampler descriptors.
  • Add support for some legacy aliases of formats in DDS reader.
  • Fix crash if static instanced data is out of bounds when vertex debugging.
  • Fix a few issues with 1D array textures on GL.
  • Fix crash with backbuffers in GL that are 0 width or height.
  • Fix capture and replay of D3D12 render passes.
  • Fix double-preprocess of GLSL shaders removing fallback path for when ARB_gpu_shader5 is unsupported.
  • Correctly filter the list of supported formats in renderdoccmd convert.
  • Fix crash dereferencing image attachments when using imageless framebuffer in vulkan.
  • Fix crash on shutdown if adb needs to be shut down.
  • Disable compute support on GL if the reported version is less than 4.2, even if the extension is reported.
  • Fix potential crashes if UI windows are closed while render work is ongoing.
  • Avoid pixel unpack state messing with proxy texture data upload.
  • Fix GL proxying of some texture formats.
  • Fix a bug saving out mips in D3D12.
  • Fix QueryInterface for ID3D12Device..
  • Handle D3D12 devices being singleton-per-adapter.
  • Fix a bug capturing if a D3D12 queue is destroyed before the end of a capture.
  • Fix a number of texture-related bugs on all APIs.
  • Fix packing of single component input registers in shader debugging.
  • Fix D3D12_FEATURE_DATA_D3D12_OPTIONS5 being partially uninitialised.
  • Ensure we set all wrapping modes to clamp when displaying textures in GL.
  • Fix serialisation of CreateCommittedResource1 that failed wrongly.
  • Fix layouts for vulkan image contents initialization.
  • Ensure that depth/stencil aspects are always transitioned together on vulkan.
  • Ensure we prepare initial states for late-created programs with glCreateShaderProgramv.
  • When a capture is loaded in the API inspector, populate the events.
  • Fix cases where shader debugging values would get wrongly denormal-flushed.
  • Don't flush parameters to bufinfo/resinfo opcodes in D3D11.
  • Fix cases where invalid vkMapMemory calls could be made for empty regions.
  • Fix generated HLSL edit stubs not using correct binding numbers.
  • Fix errors in internal GL texture creation if pixel packing buffers are bound.
  • Fix a crash if an ExecuteIndirect argum...
Read more