Skip to content

Releases: baldurk/renderdoc

Version v1.35

27 Sep 17:00
v1.35
8a39401
Compare
Choose a tag to compare

Version v1.35

This release of RenderDoc is primarily a bugfix release, with some small improvements also included.

As always binary builds with installers, zips and tarballs are available on renderdoc.org.

Python API changes

  • No changes to the Python API.

Features/Improvements

  • Allow searching PATH for executables to run instead of requiring an absolute path. Primarily relevant for linux where some environments might need a wrapper script to launch programs.
  • Add support for fetching pixel history on draws using shader objects.
  • Don't require VK_EXT_hdr_metadata as a pure WSI extension to be present on replay.
  • Compile PSOs in parallel on Vulkan and D3D12 during load to improve performance when serial shader compilation dominates load times.
  • Add some newly added D3D12 interfaces including ID3D12GraphicsCommandList10 and ID3D12Device14. Note the new functionality is still unsupported, only the interface queries.
  • Add support for quad overdraw with vulkan multiview, and signpost better that quad overdraw is not supported on Vulkan when MSAA is used (on other APIs it degrades to single-sample rendering).
  • Global variable names in DXIL disassembly are demangled.
  • Add a warning if vkconfig is active when RenderDoc is run in case it causes crashes.
  • Prefer loading a local version of DXC for internal DXIL compiles.

Bugfixes

  • All: Disallow re-docking panels onto main texture tabs in texture viewer.
  • All: Fix a bounds check on loading images for view.
  • Android: Fix case where capture options were not properly propagated.
  • D3D11: Fix a crash opening constant buffers on stages where no shader is currently bound.
  • D3D12: Fix a potential crash with dangling references to deleted items in DXIL editing.
  • D3D12: Fix a crash creating PSOs on D3D12 with an implicitly embedded root signature.
  • D3D12: Fix a crash processing RTV/DSV properties on replay if the RTV/DSV heap was deleted and isn't in the capture.
  • Vulkan: Fix potentially broken captures when using the 'soft memory limit' option.
  • Vulkan: Fix overly-pessimistic calculation of structure padding when the size of a struct needs to be determined from context.
  • Vulkan: Fix a potential crash editing shader object shaders that aren't used in the current event.
  • Vulkan: Fix a crash when using secondary command buffers and indirect-count draws.
  • OpenGL: Fix an invalid GL query for SPIR-V shaders that don't declare a location on bindings.

Version v1.34

05 Aug 13:33
v1.34
323726c
Compare
Choose a tag to compare

Version v1.34

This release contains a number of important fixes and some quality of life improvements and new functionality handling, as well as laying the groundwork and baseline for new features to come in later releases.

NOTE: Recent AMD drivers have a problem that for Vulkan and GL may cause problems creating swapchains. On UE5 this can cause fatal errors on or shortly after startup when using Vulkan, and this may also appear as the use of D3D12 in applications that don't use the API. This is an AMD driver issue which has been reported and is planned to be fixed on the AMD side.

As always binary builds with installers, zips and tarballs are available on renderdoc.org.

Python API changes

  • There are no API changes in this release.
  • The RenderDoc python documentation now includes embedded scripts and details of how to generate stubs for use with VS code auto-complete.

Features/Improvements

  • Added support for a new GLES extension: GL_EXT_clip_control.
  • Store texture data on GLES for sub-rect updates of compressed textures.
  • Active shader viewer bookmarks are listed in the bookmarks menu.
  • The custom more readable and human-friendly DXIL disassembly has had a number of readability improvements made.
  • Add support for Vulkan extensions: VK_KHR_shader_relaxed_extended_instruction and VK_EXT_shader_object
  • Improve the display of entry point interface lists in SPIR-V entry points.
  • Add functionality to allow packing of bitfields even when the declared bitfield straddles the alignment of its base type with #pack(tight_bitfield_packing).
  • Added a UI for managing the ignored PDBs when resolving callstacks.
  • Implemented GPU feedback for detecting dynamic access to arrayed samplers.

Bugfixes

  • All: Fix an error converting an XML/ZIP capture which contains a buffer over 4GB.
  • All: Fix a potential crash viewing the inputs and outputs of texture copy operations in the texture viewer.
  • UI: Fix double-scale factor applied to text editor margins that would cause overly-wide margins on high DPI scaled monitors.
  • UI: Fix backwards use of D3D-style and Vulkan-style terminology for shader stages in resource usage.
  • UI: Fix child processes not being shown properly for remote capture.
  • UI: When opening a constant buffer viewer for a binding that is already open, ensure the UI doesn't continually expand.
  • UI: Don't display a byte offset for specialisation constant buffers as it is not the byte offset in the data blob.
  • Windows: Fix a potential race condition if a DLL is unloaded while it is being processed for injection.
  • Linux: Fix rare crash if user is not fully configured and has no password entry to determine home folder.
  • Image viewer: Fix a potential random crash when opening an image file (DDS, HDR, PNG, etc).
  • D3D11: Fix an incorrect case where a reference to a swapchain backbuffer would be held over resizing causing the resize to fail, which could happen when capturing multiple frames in Unreal engine.
  • D3D11: Fix PS UAV usage missing from D3D11 pixel history if OM targets are also bound.
  • D3D11: Fix incorrect behaviour when opening a resource via the compute shader UAVs.
  • D3D12: Fix a rare potential race condition crash when creating/destroying buffers.
  • D3D12: Fix a crash if a pipeline state is created with no explicit root signature, instead coming from embedded root signature in shader binaries.
  • D3D12: Fix a crash if multiple D3D12 devices are created and destroyed with overlapping lifetimes.
  • D3D12: When editing a shader with builtin dxc handling ensure the command line arguments are properly passed.
  • D3D12: Precompile internal shaders that need dxc to avoid relying on potentially buggy old dxc found at runtime.
  • D3D12: When resolving ambiguous mapping from virtual address to resource use the largest possible valid resource to avoid crashes.
  • D3D12: Fix a crash when applications use new dynamic DLL selection and loading for root signature decoding.
  • D3D12: Fix decoding of partially replayed ExecuteIndirect commands where the arguments include state bindings.
  • D3D12: Fix incorrect duplicate execution of ExecuteIndirect in certain cases.
  • D3D12: Fix reflected byte size of matrices with padding up to float4 per row/column.
  • D3D12: Fix type display for compute shader built-in inputs on DXIL.
  • D3D12: Fix a possible crash running pixel history with multiple queues submitting work.
  • D3D12: Fix incorrect calls to CheckFeatureSupport internally for checking feature bits.
  • D3D12: Handle amplification shaders where the payload is not declared as groupshared.
  • D3D12: Fix mesh or task shader output failing if the root signature used has DENY_*_SHADER_ROOT_ACCESS flags set.
  • Vulkan: Fix a crash when processing shader modules with multiple entry points where one is a mesh shader.
  • Vulkan: Fix a crash when opening shader message viewer to view shader printf results.
  • Vulkan: Fix a case where function points are incorrectly returned from Get*ProcAddr for VK_EXT_acquire_drm_display.
  • Vulkan: Fix storage of backing data for memory only accessed via buffer_device_address that was uploaded before the captured region of work.
  • Vulkan: Fix shader editing failure on Android or other remote capture scenario.
  • Vulkan: Fix crash when push constants are expected by a pipeline but never bound as they are unused in the shader.
  • Vulkan: Fix an error if the PIPELINE_COMPILE_REQUIRED bit is set when building a compute pipeline.
  • Vulkan: Fix an incorrect lookup for vertex attributes which would fail if the attributes are not densely/linearly assigned.
  • Vulkan: Fix incorrect fetch of task shader output when a payload is declared but not used in the emit instruction.
  • Vulkan: Fix broken handling of vkCmdPushDescriptorSetWithTemplateKHR with arrayed descriptors.
  • Vulkan: Fix a potential crash if OpAccessChain has no indices specified.
  • GL: Fix crash when creating textures that are larger than 4GB.
  • GL: Fix a the vertex input attributes for SPIR-V shaders not being displayed correctly.
  • GL: Fix cubemap array shadow samplers not being correctly reflected.

Version v1.33

31 May 19:21
v1.33
cae2893
Compare
Choose a tag to compare

Version v1.33

This release contains a new RenderDoc-specific disassembly view of DXIL, aiming to be more readable and digestible than the default DXIL disassembly. It also has several bugfixes and some quality of life improvements.

NOTE: Recent AMD drivers have a problem that for Vulkan and GL may cause problems creating swapchains. On UE5 this can cause fatal errors on or shortly after startup when using Vulkan, and this may also appear as the use of D3D12 in applications that don't use the API. This is an AMD driver issue which has been reported and is planned to be fixed on the AMD side.

As always binary builds with installers, zips and tarballs are available on renderdoc.org.

Main highlights

  • The default DXIL disassembly type DXBC/DXIL has changed to use a new RenderDoc custom DXIL disassembly view.
    • The goals of the RenderDoc DXIL disassembly view is to make it easier for a human to read and parse the DXIL disassembly.
      • It does not try to be compatible with or emulate the DXC DXIL disassembly output. DXC DXIL disassembly output can be selected using the DXC DXIL option in the Disassembly type drop down.
    • Highlights of the RenderDoc DXIL disassembly view:
      • Leverages C-style syntax, HLSL naming and uses declared type SSA variables.
      • Uses reflection data where possible for resource naming.
      • Custom decoding of DXIL DX specific opcodes i.e. LoadInput, StoreOutput, CBufferLoad, BufferLoad, BufferStore, TextureLoad, TextureStore, Sample*, AtomicBinOp.
      • Where possible uses HLSL intrinsic names for DXIL DX opcodes i.e. sin, cos, tan, isnan, ddx_coarse, etc.
      • Custom decoding of handle creation and annotation to make it easier to link back to the resource.
    • Examples of the new RenderDoc DXIL disassembly output: Vertex Shader, Pixel Shader, Compute Shader
Example Comparisons between DXC DXIL Disassembly and RenderDoc DXIL Disassembly

DXC DXIL Disassembly:

%VSConstants_cbuffer = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false), !dbg !138 ; line:54 col:23  ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
%1 = call float @dx.op.loadInput.f32(i32 4, i32 4, i32 0, i8 0, i32 undef), !dbg !138 ; line:54 col:23  ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
%15 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %VSConstants_cbuffer, i32 0), !dbg !154 ; line:58 col:29  ; CBufferLoadLegacy(handle,regIndex)
%25 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %texDiffuse_texture_2d, %dx.types.Handle %defaultSampler_sampler, float %16, float %17, float undef, float undef, i32 0, i32 0, i32 undef, float undef), !dbg !305 ; line:51 col:28  ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)
%RawBufferLoad1 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %Exposure_texture_structbuf, i32 4, i32 0, i8 1, i32 4), !dbg !214 ; line:82 col:30  ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
call void @dx.op.textureStore.i32(i32 67, %dx.types.Handle %LumaResult_UAV_2d, i32 %1, i32 %2, i32 undef, i32 %73, i32 %73, i32 %73, i32 %73, i8 15), !dbg !230 ; line:85 col:29  ; TextureStore(srv,coord0,coord1,coord2,value0,value1,value2,value3,mask)

RenderDoc DXIL Disassembly:

_dx.types.Handle _VSConstants_cbuffer = VSConstants;
float _1 = <IN>.BITANGENT.x;
_dx.types.CBufRet.f32 _15 = {VSConstants.modelToProjection[0]}; //  cbuffer = VSConstants, byte_offset = 0
_dx.types.ResRet.f32 _25 = texDiffuse.Sample(defaultSampler, _16, _17, Offset = {0, 0});
_dx.types.ResRet.f32 _RawBufferLoad1 = Exposure[4];
LumaResult[_1, _2] = {_73, _73, _73, _73};

Python API changes

  • The API for accessing descriptors and bound resources has been significantly refactored to remain compatible with older APIs like D3D11 and OpenGL but better handle new techniques in D3D12 and Vulkan. See the documentation for a more in-depth explanation of how things work now.
  • This will affect usage of PipeState, any of the API-specific pipeline states such as D3D11PipeState or VulkanPipeState. If you were using the PipeState helpers there will be a fairly direct translation, if you were doing manual examination of bindings then it may be more complex to adapt your scripts - generally speaking it's recommended to look and see if you can use the generic helpers as they will be more robust and stable as an interface.
  • Looking at changes to the test scripts may provide direction on how to adapt your scripts.

Features/Improvements

  • UI: Add the ability to create and jump between bookmarks in the shader viewer, thanks to Louis de Carufel.
  • D3D12 and Vulkan: You can now directly browse the contents of a given descriptor heap or descriptor set.
  • D3D12 and Vulkan: Overlapping descriptor bindings will now properly indicate which binding was used to access which descriptor.
  • D3D12: Added support for new DLL selection API ID3D12DeviceFactory and similar.
  • D3D12: SM6.6 direct heap accesses will now be displayed in the texture viewer.
  • D3D12: Added new RenderDoc-specific DXIL disassembly.
  • Vulkan: Added support for VK_EXT_nested_command_buffer.
  • Linux: Add counter handling for new Intel kernel driver.

Bugfixes

  • UI: Prevent Shader Editor tooltip showing multiple "(F5)"
  • UI: Fix a crash reading a custom formatted buffer with both SoA and AoS data where the SoA format is larger than the buffer itself.
  • UI: Fix some cases where buffers used in indirect draws or dispatches were not properly listed in resource usage.
  • UI: Fix treeview expanders not properly choosing a contrasting colour to the row background.
  • Android: Add potential workaround for broken Android devices.
  • Android: Prevent uses of external images where the format is unknown.
  • D3D: Fix poor sorting of array members in DXBC debug info.
  • D3D: Fix an obscure DXGI query that wouldn't return correctly wrapped interface.
  • D3D11: Fix a case where output merger views could show stale data if unbound after being previously bound.
  • D3D12: Fix a crash that could happen running pixel history on a typeless depth target.
  • D3D12: Fix incorrect clamping of VB or IB sizes when displaying mesh preview.
  • D3D12: Fix a crash if a root signature range specifies a subset of a single binding's registers.
  • Vulkan: Fix some cases where DebugValue would not correctly map source variables to the right SSA value in SPIR-V debug info.
  • Vulkan: Fix a crash when selecting draws in a non-zero subpass.
  • Vulkan: Fix a bug fetching mesh output data if mesh and task shaders did not use the same entry point name (e.g. "main").
  • Vulkan: Fix a case where on capture compatibility it incorrectly reported that the hardware was identical if only the driver is identical.
  • OpenGL: Fix a bug where persistent mapped memory storage would get incorrect results detecting any changed data between first and second usage in a frame.

Version v1.32

05 Apr 15:05
v1.32
6a89135
Compare
Choose a tag to compare

Version v1.32

This version contains support for pixel history on D3D12, support for the slang shader language and tool, and other smaller improvements and bugfixes.

NOTE: Recent AMD drivers have a problem that for Vulkan and GL may cause problems creating swapchains. On UE5 this can cause fatal errors on or shortly after startup when using Vulkan, and this may also appear as the use of D3D12 in applications that don't use the API. This is an AMD driver issue which has been reported and is planned to be fixed on the AMD side.

As always binary builds with installers, zips and tarballs are available on renderdoc.org.

Main highlights

  • Pixel history is now supported on D3D12, many thanks to the contributions by Steve Karolewics and Jovan Ristic.
    Pixel history on a D3D12 capture

Python API changes

  • ReplayController.DebugPixel now takes a structure DebugPixelInputs to determine parameters like sample or primitive, and now allows setting the desired multiview or layered rendering view as well.
  • CaptureContext.ViewPixelHistory takes a new parameter view with the desired multiview or layered rendering view.

Features/Improvements

  • All: Add the ability to right-click and rename a bookmark to give it a custom string name.
  • All: Add the ability to right-click and copy from pipeline state stencil state, and the debug messages view.
  • All: In the pixel history show depth value written even if no pixel shader is bound.
  • All: The pixel history view will show range-scaled colour for integer targets as well as float/normalised targets.
  • D3D12: Added support for pixel history.
  • D3D12: Allow resource naming for queues and command buffers.
  • Vulkan: Added support for the slang tool and shading language.
  • Vulkan: Allow debugging specific pixel shader instance based on the multiview or layered rendering index.
  • Vulkan: If multiple outputs are declared at the same location and have no names, use component in auto-generated name.
  • Vulkan: Add support for extensions:
    • VK_KHR_calibrated_timestamps
    • VK_KHR_index_type_uint8
    • VK_KHR_line_rasterization
    • VK_KHR_load_store_op_none
    • VK_KHR_vertex_attribute_divisor
    • VK_EXT_texture_compression_astc_hdr (was previously implemented but never reported)
  • Android: Improve performance with high-instance count draws when selecting 'show all instances' in mesh viewer.

Bugfixes

  • All: Fix the slice information in pipeline bindings tooltips not properly displaying for sub-sliced views.
  • All: Fix a rare potential crash closing a capture.
  • All: Fix some shader processing tool command lines not properly being replaced when using placeholder arguments.
  • All: Fix a crash if the buffer formatter specifies a recursive struct definition (declaring a member of a struct that is of the struct type itself).
  • Android: Fix a case where 32-bit incapable devices weren't properly detected when launching remote server.
  • Linux: Fix multiple environment modifications when launching programs not properly stacking.
  • OpenGL: Fix display and handling of texture views that target subsets of the mipchain of the original texture.
  • Vulkan: Fix mesh output not properly accounting for dynamic vertex inputs.
  • Vulkan: Fix a potential crash when loading captures with discarding resources.
  • Vulkan: Fix spec-incompatible handling of unknown functions in Get*ProcAddr.
  • Vulkan: Fix an issue where incorrect buffer device addresses would be looked up.
  • Vulkan: Fix misleading pixel history output when some output components are not written by a shader.
  • Vulkan: Fix a case that could crash rebinding descriptor sets depending on pipeline compatibility and descriptor count.
  • Vulkan: Fix inconsistent use of user allocation callbacks.
  • Vulkan: Fix an error where dynamic state would not properly be restored if it were temporarily invalid with the bound pipeline.
  • Vulkan: Fix edge case with vkEnumeratePhysicalDeviceGroups if user passes smaller-than-queried array to enumeration.
  • Vulkan: Fix a race condition if multiple BDA-capable buffers were created or destroyed simultaneously on different threads.
  • Vulkan: Improve checking for OOM during mesh output fetch by checking against device-specific maximum memory allocation size before trying to allocate.
  • Vulkan: Fix cases where pixel history would not properly decode integer data.
  • D3D11: Fix a rare crash capturing with 3D textures reading past the end of mapped data.
  • D3D11: Fix a crash when shader debugging if SampleBias is used with an unbound sampler.
  • D3D12: Fix a case where the arguments buffer for an ExecuteIndirect would be read out of bounds.
  • D3D12: Fix a deadlock if GPU readback is used for mapped memory but the queue being submitted on is blocked by a previous wait.
  • D3D12: Strip some impossible-to-use flags from resources when recreating on replay.
  • D3D12: Work around mixed support where new barriers can be unsupported but indirectly used by new creation functions.
  • D3D12: Properly display depth-stencil target as unbound in pipeline state view if it was previously bound.
  • D3D12: Fix quad overdraw overlay not working if current root signature disallows pixel shader access.
  • D3D12: Fix a rare crash when binding descriptor tables that go out of bounds of the underlying heap.

Version v1.31

29 Jan 12:32
v1.31
04bfedc
Compare
Choose a tag to compare

Version v1.31

This version contains some quality of life fixes and expanded SPIR-V debugging support, as well as a new mesh visualisation feature. There are also some important bugfixes for D3D11 and mesh shader usage, and a workaround for a recent nvidia driver bug.

NOTE: Recent AMD drivers have a problem that for Vulkan and GL may cause problems creating swapchains. On UE5 this can cause fatal errors on or shortly after startup when using Vulkan, and this may also appear as the use of D3D12 in applications that don't use the API. This is an AMD driver issue which has been reported and is planned to be fixed on the AMD side.

As always binary builds with installers, zips and tarballs are available on renderdoc.org.

Main highlights

  • The UI now has a configuration option to set consistent formatting of byte offset and size fields in the UI.

    By default such fields are displayed as decimal numbers up to a threshold value and then larger values are displayed as hexadecimal, but with the configuration option it can be forced to be either always decimal numbers or always hexadecimal.

  • The SPIR-V debugger now supports debugging of shaders using the buffer device address extension.
    Pointers in this fashion are displayed the same way as GPU pointers elsewhere in the UI, with a resource link that jumps to a buffer viewer with the given pointer type.

    image

    image

  • Added a new 'mesh exploder' visualisation feature contributed by Dan Hawson which allows visualisation of mesh topology via a tweakable per-vertex offset. This can show poor or good vertex sharing by revealing vertices which share positions but are distinct.
    285232907-e46f3c24-c9db-4200-8cec-e53c861b7938
    285232945-40b9ffa1-7d40-480c-a0f7-548da8261310

Python API changes

  • SolidShade enum has been renamed to Visualisation, and similarly the solidShadeMode member of MeshDisplay is renamed to visualisationMode.

Features/Improvements

  • UI: Messages suggesting enabling API validation for more error information now direct to Open Capture with Options to discourage permanently enabling validation.
  • UI: Only show byte range for a single subresource when viewing texture as buffer.
  • UI: When switching between mesh shader draws and compute shader dispatches, preserve pipeline state flowchart.
  • Vulkan: Fail instance creation if RenderDoc layer is explicitly enabled.
  • Vulkan: Add support for 64-bit selectors to OpSwitch statements.
  • Vulkan: When 'ref all resources' is enabled, ensure internal buffers aren't included.
  • D3D11: Improve handling and checking for unsupported sparse textures.
  • Android: Add workaround for broken Android devices that don't properly support layers in apks.

Bugfixes

  • UI: Fix re-calculation of current 3D slice when moving up and down mip levels.
  • UI: Fix a crash after a device lost when using mesh shaders.
  • UI: Fix some tool buttons being unavailable in raw buffer viewer.
  • UI: Fix incorrect error about invalid size when opening DDS files.
  • UI: Fix incorrect tooltip on vulkan pipeline state shader save button.
  • UI: Fix a case where the UI layout would corrupt itself if the event browser was closed when starting the program.
  • Vulkan: Fix incorrect results when shader debugging non-float texture lookups.
  • Vulkan: Fix depth/stencil discard patterns being incorrectly shown for aspects that are not discarded.
  • Vulkan: Fix incorrect image layouts being tracked when multiple command buffers are submitted together.
  • Vulkan: Fix a potential crash when using the triangle size overlay.
  • Vulkan: Fix Depth overlay writing to pixels outside of drawcall for shaders exporting depth.
  • Vulkan: Fix task payload readback on mesh shaders for array types.
  • Vulkan: Fix an error fetching mesh output from mesh shaders if specialisation constants are used.
  • Vulkan: Fix handling of mesh shader draws in pixel history.
  • Vulkan: Don't generate invalid SPIR-V and potentially crash when patching shaders that contain debug information.
  • Vulkan: Fix incorrect error debugging SPIR-V when writing to out of bounds Matrix element.
  • Vulkan: Fix loading incorrect data when reading a row major matrix from a buffer.
  • Vulkan: Fix wireframe overlay when drawcall modifies polygonMode dynamic state.
  • Vulkan: Fix an invalid access when using mesh shaders with inline shader created in pipelines.
  • Vulkan: SPIR-V debugger fix for OpBitcast from Vector to Scalar.
  • Vulkan: When creating mesh shader output fetch pipelines, preserve required subgroup size.
  • Vulkan: Fix a pixel history crash when using dynamic rendering and the target texture is bound as a storage image.
  • Vulkan/D3D12: Fix incorrect indirect parameters being used for displaying mesh output data from mesh shaders.
  • D3D: Fix mismatching shader interfaces if a semantic is used alone but with a non-zero index (i.e. COLOR1 with no COLOR0).
  • D3D11: Fix crash in pipeline state viewer when displaying an empty binding after using the depth overlay and loading multiple captures.
  • D3D11: Fix crash when discarding dynamic staging buffers.
  • D3D12: Fix a potential crash showing whole-pass mesh output with mesh shaders.
  • D3D12: Fix depth overlay writing to pixels outside of drawcall for shaders exporting depth.
  • D3D12: Fix a crash when examining a mesh shader draw where an amplification shader is bound but its payload is unused.

Version v1.30

04 Dec 17:18
v1.30
5f95fb9
Compare
Choose a tag to compare

Version v1.30

This version contains support for mesh shaders on both Vulkan and D3D12. In addition there are a number of bugfixes including some crashes and a problem affecting recent NV drivers on UE5, as well as some other general improvements.

NOTE: Recent AMD drivers have a problem that for Vulkan and GL may cause problems creating swapchains. On UE5 this can cause fatal errors on or shortly after startup when using Vulkan, and this may also appear as the use of D3D12 in applications that don't use the API. This is an AMD driver issue which has been reported but it's unclear at this point if a workaround is possible.

As always binary builds with installers, zips and tarballs are available on renderdoc.org.

Main Highlights

Mesh shaders are supported with all existing features like pixel history, pipeline state, shader editing, shader printf on Vulkan, as would be expected.

The mesh viewer has been updated to display the relevant information. For task/amplification shaders it will display both the payload output and dispatched size from each threadgroup. Whether or not they are used, the final output from the mesh shader will be displayed for each meshlet that produced some outputs.

The 3D preview has also been updated to show a new solid shading mode which colourises different meshlets with different colours.

(screenshots courtesy of niagara)

Task & Mesh output with meshlet highlighting

It is also possible to filter all views down to either a single meshlet, or a single task and all meshlets produced.

Task & Meshlet filtering

Python API changes

  • The MeshDataStage.Unknown enum value was removed.

Features/Improvements

  • All: Extend depth test overlay to correctly report pass/fail with shader exported depth.
  • UI: Improve tooltips for settings determining Android SDK/JDK.
  • UI: Improve buffer formatter help and link properly to help documentation from UI.
  • UI: Improve D3D12 line anti-aliasing on AMD.
  • Vulkan: Add support for VK_EXT_extended_dynamic_state3 extension.
  • Vulkan: Improve display of output parameters to strip unnecessary gl_PerVertex noise.
  • Android: Fade logo every 45 minutes to alleviate burn-in if server is left running long term.
  • Android: Add handling of limited devices that only support 64-bit ARM and not also 32-bit ARM.
  • D3D12 & Vulkan: Implement support for mesh shading. Interactions with multiview are not supported, and currently there is no mesh input visualisation option and shader debugging is disabled. NOTE: Currently there are known issues both with mesa radv and with dxc's SPIR-V output which are both being investigated.

Bugfixes

  • UI: When loading a layout, close any existing windows which are not present in the new layout to avoid those windows becoming inaccessible or crashing.
  • Vulkan: Fix incorrect flag being used when creating compiled versions of library pipelines.
  • Vulkan: Fix render area not showing correctly when dynamic rendering is active.
  • Vulkan: Work around a validation error when sampling counters during replay.
  • Vulkan: Fixed current event action not always being displayed correctly when going from Texture Viewer Stencil overlay to None overlay.
  • Vulkan: Fix crash during replay of very large variable sized descriptor sets.
  • Vulkan: Fix source level shader debugging not being available on Android.
  • Vulkan: Fix rare error where garbage structs in pNext chain must be ignored.
  • Vulkan: Fix error with overlay display when displayed texture is type-cast.
  • Vulkan: Fix a crash if a descriptor update template references a layout unused elsewhere.
  • Vulkan: Fix entry points incorrectly being returned from VkG*PA for future core versions not enabled.
  • Vulkan: Fix a potential crash with VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT.
  • Vulkan: Fix a bug looking up matching bindings if vertex input bindings were specified out-of-order.
  • D3D: Fix uint/int texture bindings being swapped in custom visualisation shaders.
  • D3D: Disassemble inner coverage builtins in DXBC bytecode.
  • D3D12: Fix a crash if mesh viewer is opened and closed many times.
  • D3D12: Fix a crash when using new D3D12 barriers and ExecuteIndirect.
  • D3D12: Fix failures when trying to slightly over-allocate on tier 3 descriptor heaps.
  • D3D12: Fix crash when disassembling shaders that use embedded root signatures.
  • D3D12: Fix potential crash with invalid out of bounds GPU addresses, while trying to preserve valid out of bounds GPU addresses.
  • GL: Fixed incorrect replay (and potential driver crash) when using glTexImage* APIs and non-zero UNPACK_ROW_LENGTH.
  • GL: Workaround AMD driver behaviour that creates D3D12 device inside GL swapchains.
  • GL: Don't treat unmaps of persistently mapped read-only buffers incorrectly as writes.

Version v1.29

29 Sep 16:22
v1.29
0202a06
Compare
Choose a tag to compare

Version v1.29

This release includes a number of bugfixes since v1.28, as well as improved handling of non-deterministic ExecuteIndirect calls on D3D12.

As always binary builds with installers, zips and tarballs are available on renderdoc.org.

An extra note for anyone with a fork or local changes to RenderDoc - the version of clang-format used upstream has been updated to 15.0. This may necessitate reformats of pending changes if you intend to upstream them.

Python API changes

  • ShaderProcessingTool.CompileShader has a new parameter spirvVer which can be specified to give the SPIR-V version to use when compiling. If left blank the existing default behaviour will be used. Shader reflection data with a SPIR-V version will have that listed under a new @spirver compile flag.

Features/Improvements

  • Refactored handling of ExecuteIndirect to more reliably replay the application's work even in the face of non-deterministic work. Executes with non-deterministic parameters will still not function properly anywhere that the draw parameters are referenced like the event browser, mesh viewer, etc. But selecting subsequent events in the command buffer will now replay the ExecuteIndirect faithfully.
  • The pixel history events still show background colours in part when the row is selected.
  • When editing SPIR-V shaders and recompiling them, wherever possible the same SPIR-V version will be used to recompile them. This is necessary when using features that target a minimum SPIR-V version.

Bugfixes

  • All: Correctly load 3D textures with mipchains in image viewer.
  • All: Fix memory overwrite when saving a single slice of a texture.
  • All: Fixed error message which sometimes prevented valid DDS files from being opened.
  • All: Prevent crash in capture connection windows during shutdown.
  • All: Try to work around Android devices that take many seconds to enumerate installed programs to reduce the chance of a time out, and don't treat package names as local filenames if the timeout is hit.
  • All: Don't allow shader debugging tooltip to show over the top of a context menu.
  • All: Prevent a potential crash if corrupted data was received over a socket connection.
  • All: Fix a potential crash on startup if file access failed to the config file.
  • All: Fix pixel history 'debug pixel' text being incorrect when listing primitive ID.
  • GL: Improve handling of uniform arrays of size one.
  • GL: Fix thumbnail generation sometimes inverting middle two lines of the capture thumbnail image.
  • GL: Changed resource preview tooltip to be multi-line instead of a single line.
  • GL: Corrected layered depth buffer texture pipeline state tooltip from incorrectly displaying slices.
  • GL: Try to prevent some crashes in cases where the GL driver fails to map a buffer.
  • Vulkan: Fix SPIR-V shader debugger for specialisation constants using OpLogicalNot.
  • Vulkan: Allow override of GPU driver to select software drivers like llvmpipe.
  • Vulkan: Fix SPIR-V parsing of OpExecutionModeId specifying compute threadgroup size.
  • Vulkan: Use up-to-date image layouts for processing pixel history, if images are transitioned immediately before use.
  • Vulkan: Fix a case where pixel history would break if a small number of draws had a large amount of overdraw each.
  • Vulkan: Work around an nvidia driver bug setting dynamic state in between binding identical static pipelines.
  • Vulkan: Handle non-sparsely resident images correctly.
  • Vulkan: Fix some indirect-count draws handling.
  • D3D: Improve hlsl shader source debug stepping when the source shader contains empty filename directives i.e. #line XXX "".
  • D3D: Be more robust in parsing DXBC containers with unexpected data.
  • D3D11: Improve pixel history handling of discarded fragments.
  • D3D11: Fix incorrect pipeline state tooltips for MSAA textures referencing mips that can't exist.
  • D3D11: Prevent overlays from being rendered incorrectly and causing stale data when selecting different events.
  • D3D11: Fix a problem where an application creating too many D3D11 state objects would not be able to release some and retry due to a cache not being cleared.
  • D3D12: Avoid potential crash in nvidia driver when setting 0 UINTs as root constants.
  • D3D12: Remove a spurious validation warning that could appear from internal RenderDoc use.
  • D3D12: Fix an incorrect check when handling new version 2 depth-stencil pipeline chunks.
  • D3D12: Make sure resource usage has the correct EID for trailing barriers in command buffers with no subsequent draws.
  • D3D12: Fix serialisation of GPU addresses being based on buffers, when D3D12 doesn't require or bounds check against buffers for addresses but only uses underlying heaps.
  • D3D12: Fix a potential problem with mapped CPU memory uploads not properly propagating before GPU work.

Version v1.28

31 Jul 14:01
v1.28
Compare
Choose a tag to compare

Version v1.28

This release includes a number of bugfixes since v1.27, and includes a new capture option to aid capturing on Vulkan memory-constrained systems.

As always binary builds with installers, zips and tarballs are available on renderdoc.org.

Python API changes

  • renderdoc.ResultCode.ReplayOutOfMemory and renderdoc.ResultCode.ReplayDeviceLost have been renamed to renderdoc.ResultCode.OutOfMemory and renderdoc.ResultCode.DeviceLost.

Features/Improvements

  • Improved capture writing process for larger captures especially on Vulkan & D3D12 to improve the time taken to write a capture to disk.
  • Added a 'soft memory limit' capture option to reduce the chance of out-of-memory errors during capture, currently implemented only for Vulkan due to Linux and Android being platforms prone to OOM.
  • Tweaked the display of checkboxes with RenderDoc's style to display with an X, for the sake of the low contrast dark theme where checkbox fills were not as clear as the normal light theme.
  • Add support for glCopyImageSubData on GLES copying from uncompressed to compressed textures.
  • Add support for several vulkan extensions:
    • VK_EXT_provoking_vertex
    • VK_EXT_attachment_feedback_loop_dynamic_state
    • VK_EXT_image_2d_view_of_3d

Bugfixes

  • All: Fix potential crash reading configuration file.
  • All: Add better protection against invalid DDS file headers.
  • All: Refuse to open EXR files that are too large (larger than maximum texture dimensions of 16384x16384).
  • All: When opening a file type that is entirely unrecognised, report it as that instead of assuming it is a corrupted capture file.
  • All: Fix generation of buffer format strings for R11G11B10 textures viewed as buffers.
  • Linux: Fix a potential crash & failure of pipeline thumbnails when built against newer Qt versions.
  • Android: Work around driver crash in emulation of glGetTexImage.
  • D3D12: Prevent use of new barriers on older beta SDKs with crashes.
  • D3D12: Fix highlighted vertex/triangle not being properly perspective corrected in the mesh viewer.
  • D3D12: Avoid crash when drawing Texture viewer overlay for an unbound resource.
  • D3D12: Fix incorrect parameter display in ExecuteIndirect calls.
  • D3D12: Avoid crash when indexed draw is called with no index buffer.
  • D3D12: Fix a crash fetching bindless feedback for shaders with only SM6.6 resource accesses.
  • D3D12: Fix a potential crash when Set*Root32BitConstants is called with 0 constants.
  • D3D12: Fix a potential device lost when resetting new barrier layouts.
  • D3D12: Fix root signature elements with registers being displayed without a corresponding shader binding.
  • Vulkan: Fix a crash when going through fallback path in bindless feedback with no BDA support.
  • Vulkan: Fix detection of rendering to mip levels in pixel history.
  • Vulkan: Fix shader debugging handling of arrays of textures.
  • Vulkan: Fix size calculation for non-32-bit values at the end of constant buffers.
  • Vulkan: Fix buffer formatting and shader disassembly of arrays of pointers.
  • Vulkan: Fix a potential crash when fetching mesh output data if primitive restart is used.
  • GL: Fix programs that recreate textures mid-frame.
  • GL: Fix pixel history handling of multidraw draws.
  • GL: Mute/hide any errors generated in DX interop functions.
  • GL: Handle HALF_FLOAT typed values in glClear*.
  • GL: Treat BGRA8 textures imported from DX as RGBA8 since GL doesn't support BGRA8.
  • GL: Fix pixel history having incorrect depth test results reported for multiple overlapping fragments.
  • GLES: Fix pixel history reporting test failures incorrectly.

Version v1.27

02 Jun 17:51
v1.27
35b13a8
Compare
Choose a tag to compare

Version v1.27

This release includes a number of bugfixes since v1.26, as well as support for the latest D3D12 SDK 1.610.1.

As always binary builds with installers, zips and tarballs are available on renderdoc.org.

Python API changes

  • D3D12Sampler.borderColor has been split into D3D12Sampler.borderColorType and D3D12Sampler.borderColorValue, and similarly for VKSampler.borderColor into VKSampler.borderColorType and VKSampler.borderColorValue, to allow for integer border colour types.
  • D3D12RasterizerState.multisampleEnable and D3D12RasterizerState.lineRasterMode have been removed and replaced with D3D12RasterizerState.lineRasterMode of type LineRaster.

Features/Improvements

  • D3D12: Add support for new SDK 1.610.1:
  • New state functionality
  • New sampler creation parameters and PSO chunks
  • New barrier API
  • All: Show explicit dropdown arrow for tool buttons with menus.
  • All: Report Windows 11 separately in analytics.
  • Vulkan & D3D12: Optimisations to capture time overhead and GPU Syncs.
  • D3D11: Disable query for undocumented internal D3D interface in composition API.

Bugfixes

  • All: Fix potential crash when reading large amounts of data from sockets.
  • All: Fix potential crash when serialising strings if length is corrupted.
  • All: Fix potential crashes/fatal errors rendering 0x0 thumbnails.
  • All: Remove fatal errors in XML codec and have error handling for corrupted XML.
  • All: Sanitise strings printed when received from target control/remote server.
  • All: Save any capture changes (renames/bookmarks) to local file when remotely replaying.
  • UI: Fix potential race when destroying windows while command is in flight
  • Linux: Don't open symlinks when opening logfile.
  • Linux: Try to handle processes on linux that fork without exec.
  • Linux: Work around bash overriding getenv/setenv with custom implementation.
  • Android: Make timeouts waiting for process to start just depressingly high.
  • Android: Speculative fix for Android thread race condition.
  • Windows: Ignore windows.storage.dll which spams a huge number of LoadLibrary calls.
  • D3D: Fix shader debugging using wrong operand to look up resources in some gather4 opcodes.
  • D3D11: Fix handling of RestoreDeferredContextState during capture if state isn't restored.
  • D3D12: Add fatal error handling if a map fails during replay.
  • D3D12: Add GPU syncs between potential moves of work across different queues.
  • D3D12: Fix a bug with incorrect forward reference detection in DXIL.
  • D3D12: Fix a discrepancy in DXIL disassembly from dxc.
  • D3D12: Fix crash when D3D12 descriptor table is bound off the end of a heap.
  • D3D12: Handle some unusually formatted DXIL shaders with missing implicit pointer types.
  • OpenGL: Add workaround for Intel bug in pixel history.
  • OpenGL: Don't show stencil for non-final fragments.
  • OpenGL: Fix pixel history being affected by pixel pack/unpack state.
  • OpenGL: Fix pixel history not using full precision depth.
  • OpenGL: Fix pixel history on framebuffers that don't have stencil.
  • OpenGL: Fix reporting of 10:10:10:2 resource formats.
  • OpenGL: Fix some GL pixel history cases where not all events would be replayed correctly.
  • OpenGL: Fix state tracking issues in GL pixel history.
  • OpenGL: Handle drawbuffers when they aren't simple direct 1:1 with attachments
  • OpenGL: Work around nvidia bug with failing GLX query.
  • GLES: Fix requiring some proper GL GLSL extensions on GLES for blit shader.
  • GLES: Fix use of proper GL function that's not available on GLES.
  • GLES: Remove reset notification EGL context attribute preventing context sharing.
  • Vulkan: Add fallback for shader feedback on Intel GPUs without int64 support.
  • Vulkan: Disable buggy vulkan layers.
  • Vulkan: Don't include discard in resource usage until end of renderpass.
  • Vulkan: Fix a bug causing present fence extension to crash.
  • Vulkan: Fix a missing flush for mapped non-coherent memory.
  • Vulkan: Fix a potential GPU timeout on draws with huge number of instances with GS.
  • Vulkan: Fix an incorrect use of GetInstanceProcAddr when initialising vkCreateDevice.
  • Vulkan: Fix crashes for input structures with builtins.
  • Vulkan: Fix depth results for fragments in pixel history.
  • Vulkan: Fix detection of scalar packing from only matrix layout.
  • Vulkan: Fix pixel history on framebuffers that don't have stencil.
  • Vulkan: Fix separate stencil operations being applied properly with dynamic rendering.
  • Vulkan: Fix uint/int bindings being broken in custom shader templates.
  • Vulkan: Manually check and report depth bounds test in vulkan pixel history.
  • Vulkan: Work around further broken Intel occlusion queries in pixel history.

Version v1.26

31 Mar 20:12
v1.26
4524cdd
Compare
Choose a tag to compare

Version v1.26

This release enables the pixel history feature for OpenGL captures, with an implementation contributed by Orson Baines, Zi Ming He, John Kattukudiyil, Ting Cai, and Tony Tascioglu. In addition it contains a number of improvements and bugfixes over v1.25.

As always binary builds with installers, zips and tarballs are available on renderdoc.org.

Python API changes

  • None.

Features/Improvements

  • OpenGL: Pixel history is now supported on OpenGL.
    image
  • Vulkan: Improve the heuristic for when to use a GPU readback for reading mapped memory over CPU reads.
  • D3D12: Enable that same heuristic that was accidentally disabled in a previous release.
  • D3D12: DXIL handling refactored once again, to more closely clone LLVM's codebase and be more reliable at editing/patching.

Bugfixes

  • All: Fix an issue with thumbnails being stale in some situations.
  • All: Fix a crash when a completion modifier like ctrl-space or ctrl-E is used in an edit box with no completion options.
  • All: Speculative fix for a race condition with performance counter viewer windows.
  • All: Fix RGP captures being unable to trigger remotely.
  • All: Fix cumulative calculation of durations for fake profile markers.
  • All: Disable Qt behaviour where typing a key in the buffer viewer would try to 'find' that letter, causing large hangs on very large meshes.
  • All: Fix a crash in rare cases when showing tooltips for some columns in mesh viewer.
  • All: Fix a problem where editing an environment variable modification to have an empty value made it unselectable.
  • All: Fix terminology being reversed between D3D and GL/Vulkan for the shader stages in resource usage.
  • Linux: Create utility GL contexts as explicitly matching the used API, in case GLES is being used.
  • Android: Increase timeout for remote servers starting to 5 seconds because Android is a garbage platform and a tiny program can't start in under a second.
  • D3D: Fix an issue with debugging pixel shaders trying to artificially create matching I/O signatures with preceeding stages when SV_PrimitiveID is used.
  • D3D: Fix an issue where a missing callstack on the first instruction of debugging could cause step-over/step-into to misbehave.
  • D3D12: Fix a crash that can happen when device lost happens during load.
  • D3D12: Stop using dxc type annotations as they are broken.
  • D3D12: Fix several new DXIL formulations or features.
  • D3D12: Don't initialise AMD extensions when AMD driver is detected as loaded, if it's not currently in use.
  • D3D12: Fix a problem capturing when a mapped buffer is not used directly but instead aliased with buffers on the same heap that are then used.
  • D3D12: Fix missing specified colour formats on internal PSO.
  • D3D12: Fix a deadlock if a resource is mapped while a capturing is finishing and cleaning up captured maps.
  • Vulkan: Fix a crash when using extension-only defined queue families.
  • Vulkan: Fix a crash when external/foreign queue families are used.
  • Vulkan: Fix a crash deleting a BDA buffer while another is being created.
  • Vulkan: Fix handling of dynamic rendering shading rate attachments.
  • Vulkan/GL: Fix handling of stencil-only multisampled textures.
  • GLES: Remove unsupported EGL extensions (currently only EGL_KHR_no_config_context) which cannot be supported.
  • GL: Work around driver issue on Intel windows by declaring extra extension in internal shaders
  • GL: Update window size before processing context activation, to fix an issue with incorrect window size on captures of frame 0.