github baldurk/renderdoc v1.33
Version v1.33

28 days ago

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.

Don't miss a new renderdoc release

NewReleases is sending notifications on new releases.