Version v1.5
Another release is ready! This is a further incremental advance with optimisations, quality of life improvements, and of course plenty of bug fixes.
For anyone running v1.3 still, please see the previous release notes for v1.4 to ensure you kill any runaway crash handler processes before upgrading.
As always binaries for this release are up on the downloads page for Windows as zip and installers, and x64 Linux as a binary tarball. Note that linux binary releases no longer static link libstdc++
due to incompatibilities on some distros, so you will need to have libstdc++
from GCC 5.x or newer available on your system. If you get errors about missing GLIBCXX
then you need a newer libstdc++
. In general it is strongly recommended that you prefer distribution packages where possible, or compiling RenderDoc from source yourself, to ensure a stable build - the binary builds cannot be guaranteed to be perfectly compatible with all distributions on linux.
I'd also like to take this opportunity to remind everyone that RenderDoc is only intended for debugging your own programs. Use of RenderDoc for injecting into copyrighted programs which you do not own the copyright to is not supported or endorsed and I will not help with any problems as a result. In particular this means injecting into Google Chrome to capture WebGL webpages, which is being used regularly for extracting copyrighted content.
Main highlights
- The replay of a capture can now be configured, both on a one-off basis and globally. In the file menu there's a new option to open a capture with options, which apply only for that session. In the settings window there is a replay section.
These options allow overriding the default GPU selection where possible (every API except OpenGL) to force the use of a particular GPU. This could be useful to open the same capture on different drivers, or to force WARP on D3D. Note that not all captures may be cross-GPU compatible.
You can also force on the use of API validation layers at replay time, to validate the commands even if they weren't validated at capture time. Due to changes in the replay between capture and replay these may include false positives and you will incur the penalty for API validation while active, so it's still recommended to capture validation layer messages at capture time.
- The SPIR-V reflection and disassembly has been refactored to be more reliable and is based on the publicly available grammar json. This means SPIR-V up to the latest 1.5 version is supported with all instructions having basic disassembly support. The disassembly is more literal now, so if a 'high-level language' style disassembly is desired then it's recommended to use SPIRV-Cross.
In addition the reflection now accounts for the same shader being compiled with different specialization constants, so that things like array sizes in constant buffers are correctly sized for the pipeline's specialization constants. - Vulkan has a new replay-time optimisation which takes advantage of the above replay options dialog. Resources which are not modified in a frame are no longer redundantly reset when a new event is selected. Also on higher optimisation levels the reset will become more streamlined, e.g. resetting resources with a clear when the previous contents are completely overwritten or cleared again within the frame.
- OpenGL has a low-memory optimisation to defer copying initial contents of textures and buffers that are rarely modified. This should reduce the memory spike overhead at capture time which is particularly useful for Android devices.
- Optimisations to the program startup, replay of captures with large numbers of events, and of construction and passing around serialised strings. In particular compile-time strings like member, enum value, and type names are now moved around as static pointers instead of having storage allocated. In captures with huge number of serialised resources (typically descriptors in Vulkan/D3D12) this vastly improves capture load and close time.
Python breaking changes
ReplayOutput.AddThumbnail
now takes two new parametersint mip
andint slice
to control the mip and slice being displayed in the thumbnail.PipeState.GetShaderExtension
has been removed andReplayController.BuildCustomShader
now accepts aShaderEncoding
andbytes
instead of just source text. This previously returnedglsl
for OpenGL and Vulkan, andhlsl
for D3D. It's now recommended to checkGetCustomShaderEncodings()
and allow any high level language that can be compiled to a supported encoding.- The
port
parameter onCreateRemoteServerConnection
andBecomeRemoteServer
has been removed, as hasGetDefaultRemoteServerPort
. Only the default connection port is supported. ReplayController.GetShader
andReplayController.GetCBufferVariableContents
now take apipeline
parameter. This may be empty/Null on APIs without pipeline state objects.RemoteServer.OpenCapture
,CaptureFile.OpenCapture
, andCaptureContext.LoadCapture
now take aReplayOptions
parameter to control the replay. You can construct a default instance ofReplayOptions
and the behaviour will be as it was before.SaveCallback
used inEditShader
has a new signature, to allow for different file encoding.- The access to
RemoteHost
s in the UI has changed - there is now a functionGetRemoteHosts()
inPersistantConfig
that returns the current list, andGetRemoteHost()
takes a hostname, to look up a host by name if it exists - if it doesn't an invalidRemoteHost
will be returned. Access toRemoteHost
properties is now via member functions rather than direct member data access.
Features/Improvements
- Add support for a number of Vulkan extensions:
VK_KHR_imageless_framebuffer
VK_KHR_pipeline_executable_properties
VK_KHR_shader_subgroup_extended_types
VK_KHR_surface_protected_capabilities
VK_KHR_uniform_buffer_standard_layout
VK_EXT_filter_cubic
VK_EXT_fragment_shader_interlock
VK_EXT_full_screen_exclusive
VK_EXT_hdr_metadata
VK_EXT_headless_surface
VK_EXT_index_type_uint8
VK_EXT_line_rasterization
VK_EXT_metal_surface
VK_EXT_shader_demote_to_helper_invocation
VK_EXT_subgroup_size_control
VK_EXT_texel_buffer_alignment
VK_AMD_device_coherent_memory
VK_AMD_display_native
VK_IMG_filter_cubic
VK_GOOGLE_display_timing
VK_GOOGLE_user_type
- Add support for some OpenGL extensions and whitelist GLES extensions that were already supported:
GL_ARB_ES3_2_compatibility
GL_EXT_texture_compression_s3tc_srgb
GL_EXT_polygon_offset
GL_EXT_draw_instanced
GL_EXT_multi_draw_arrays
GL_EXT_polygon_offset_clamp
GL_EXT_post_depth_coverage
GL_EXT_raster_multisample
GL_EXT_semaphore
GL_EXT_texture_compression_bptc
GL_EXT_texture_compression_rgtc
GL_EXT_texture_lod_bias
GL_EXT_win32_keyed_mutex
GL_KHR_parallel_shader_compile
GL_KHR_robustness
- Add support for D3D12.6 (???) - ID3D12GraphicsCommandList5 and ID3D12Device6.
- Add support for D3D12On7, both for capture and replay.
- Linux builds no longer static link
libstdc++
due to incompatibilities on some distributions. As above this may mean added incompatibilities on other distributions - distro packages or building from source is still recommended on linux. - Added software emulation of
KHR_debug
extension so that it can be used for labelling objects and adding debug markers even if the driver doesn't support the extension for reporting errors. - Thumbnails in the texture viewer now use the first mip/slice bound to the view to determine which mip and slice to show, instead of always showing the top mip of the first slice.
- Add support for shader processing tools within custom visualisation shaders. This also fixes an issue with Vulkan custom shaders not compiling as they expected SPIR-V directly instead of GLSL.
- Add detection of invalid shader code being passed to
CreatePipelineState
on D3D12, if an application doesn't correclty check for DXIL support and tries to upload it anyway without it being supported. - Use
KHR_driver_properties
and versions to better match physical devices on Vulkan. - In GL the texture binding state is per-type as well as per-slot, so slot 0
TEXTURE_2D
isn't the same as slot 0TEXTURE_3D
. This is now handled when multiple textures are bound to the same slot and the implicit texture referred to isn't the most recent one bound to that slot. - If the user updates a RenderDoc install outside of the normal updater, the update check will now clear the pending update on start of a new version.
- Add support for serialised function calls with more than 4GB of data.
- Add support for stencil-only backbuffers in OpenGL.
- The 'show disabled' button has been renamed to 'show unused' to better convey what's actually being shown or hidden.
- Show texture wrapping modes using GL-style terminology on GL captures. This means e.g. "Repeat" instead of "Wrap".
- Improved the handling of SPIR-V on GL to fix several features and not rely on driver reflection which may not be valid or may have been stripped away from the SPIR-V.
- Show the object in GL's sampler state view in the pipeline state viewer.
- Add support for new layering system in Android 10, to allow Android apps to be captured without using the JDWP debugger to inject code.
- Handle shader debugging when one source line maps to many instructions (i.e. inlining).
- Mark RenderDoc's internal book-keeping calls explicitly as internal in the API/resource inspector.
- When viewing mesh attributes as position, don't unproject attributes in the vertex output view that aren't explicitly exporting position data to the rasterizer (
SV_Position
/gl_Position
). - The "Clear before X" overlays now use the texture viewer background color instead of always clearing to black.
- When picking pixel values in the texture viewer only valid components get displayed - so if the texture only has two components then only two components will be displayed, instead of four with 0s for the last ones.
- Display mesh bounding box information in the mesh view control panel.
- Add detection of dxc as a known shader processing tool.
- Always emulate
EXT_direct_state_access
on replay to get around driver bugs with implementation of the extension. - Add the ability to choose a specific Android activity when launching an app.
- Improve the display of Vulkan image layouts to show the original layout even if it has been patched to something else for correct replay.
- Handle returning a dummy
IDXGIInfoQueue
when requested. - Update AMD shader disassembly to RGA 2.2, including Navi RDNA support.
- Updated AMD counter library to GPA 3.4.1, including Navi support.
- Improve serialisation of Vulkan driver versions to display unpacked
apiVersion
. - Handle situations in D3D12 mesh output fetch where too much data is generated by a drawcall.
- Textures with
A8_UNORM
format are now reported asA8
instead of being remapped toR8
. - DXBC disassembly now displays precise qualifiers in the disassembly.
- Add a filterable/searchable view of the diagnostic log in the UI itself instead of relying on an external editor.
- Add pass-through hooking of EGL 1.5 to ensure applications needing new entry points can capture correctly.
- Non-windows builds no longer rely on awk or sed.
- Handle new StorageBuffer SPIR-V class in SPIR-V 1.3 for reflection.
- Add support for wide-char WKPDID_D3DDebugObjectNameW method of setting resource names.
- Clarify overlay message when GL compatibility contexts are in used, since if the profile mask is completely omitted the spec says you may get a core context.
- In GL drawcalls serialise the topology specially so that
GL_POINTS
isn't listed asGL_NONE
. - Check view type hint for auto fit range button in texture viewer.
- Improved/added support for obscure GL formats like GL_RGB565 or GL_RGBA2.
- Add an additional fallback path to try and successfully get XFB from a vertex shader.
- Add handling of
GL_SRGB
andGL_SRGB_ALPHA
as a base format, though it is invalid. - Don't load
libEGL.dll
from the globalPATH
on windows, since too many programs using ANGLE drop an unusable dll in and prevent using driver-provided GLES support where available. - Improved the language in the crash reporter dialog to clarify the kind of crash - in the injected application (which cannot easily be determined to be either renderdoc or the application without human triage), in the replay application (which is very likely renderdoc's fault) or a manual reported crash.
- Implement support for one-way serialisation of MSAA textures on Vulkan when storage to MSAA textures is not supported.
- Add implicit resolve usage for renderpasses.
Bugfixes
- Refactored checks for remote hosts to remove potential race conditions or lifetime mismanagement.
- Workaround broken Skia library that's shipping as part of Android.
- Fix D3D11 shader debugging support for flushing denorms to try and match the spec and what GPUs do.
- Fix D3D11 shader debugging of typed UAV load/store from formats that aren't 32-bit DWORD sized.
- Workaround
adb
bug that causes port forwarded connections to randomly drop. - Fix GL & Vulkan slice selection in texture viewer not working.
- Fix GL initial states breaking when not all contexts share with each other.
- Fix editing shaders on GL where if locations of uniforms change the remapping isn't properly accounted for.
- Fix editing of shaders on GL, Vulkan and D3D12 (where there are derived resources like pipelines) where repeatedly editing and restoring shaders could get into a bad state and crash.
- Fix a race condition when handling D3D12 resource
Map
/Unmap
happening on multiple threads. - Fix error mapping buffers persistently with
GL_INVALIDATE_BIT
orGL_UNSYNCHRONIZED_BIT
which are incompatible with the implicitGL_READ_BIT
that RenderDoc adds. - Fix initial states for Vulkan objects potentially being lost.
- Fix an issue if some unused push descriptors aren't updated on Vulkan.
- Handle applications loading from
dlsym(RTLD_NEXT)
without ever loading libGL (which doesn't seem legal but who knows). - Fix internal memory mapping not respecting
nonCoherentAtomSize
for flushes and invalidates on Vulkan. - Fix the timezone on timestamps in the capture connection panel.
- Fix broken serialisation of
D3D12_WRITEBUFFERIMMEDIATE_PARAMETER
that would crash. - Add handling for some legacy formats like GL_LUMINANCE/GL_ALPHA.
- Don't write into NULL pointer if glMapBuffer() fails.
- Fix leaking process pipes on linux when launching
adb
. - Fix
glShaderSource
not properly accounting for the provided shader lengths. - Fix check for available GL extensions on legacy (GL 2.1) contexts.
- Fix check for GLES to handle GLES 1.x.
- Add workaround for Qualcomm driver bug with glCopyImageSubData.
- Fix problem with reading invalid texture data if texture unpack state is customised.
- Fix generated vertex buffer strings when padding bytes are necessary.
- Fix issues with local rendering of mesh data from a remote Vulkan capture.
- Fix handling of D3D11 fences.
- Don't allow buffers to be resized smaller mid-capture in GL.
- Fix a case where VAO state isn't reset properly when it's changed across the course of a frame.
- Fix applying program pipeline initial states.
- Silence complaints about no texture being bound when using
GL_PROXY_TEXTURE_...
targets. - Fix a problem where resources that are deleted mid-frame aren't properly recorded in the capture.
- Fix
glUniformBlockBinding
not being recorded correctly if it's called mid-capture to modify a program. - Fix a crash with empty specified SSBOs on GL.
- Fix handling of pbuffer surfaces in GLX.
- Fix rebinding of command buffer state in secondary command buffers on Vulkan.
- Fix a rare crash when closing panels with tree widgets.
- Fix handling of matrix outputs in Vulkan GS/Tess mesh output.
- Fix handling of doubles in GL transform feedback.
- Fix comparison of vertex input semantics on D3D APIs.
- Fix crash if a dialog is open when a capture connection closes and the capture starts getting opened in the background.
- Fix some cases where layout remapping in vulkan could cause validation layer errors on replay.
- Fix errors in D3D11 functions to copy between MSAA and Array textures.
- Fix an issue with empty descriptors (
descriptorCount == 0
) on Vulkan. - Fix handling of 'Ref All Resources' on Vulkan where an image with no memory bound is included in the capture.
- Fix tracking of rarely used capture features in analytics. No new data is stored or transmitted, it just fixes the feature flags to be correctly 'sticky'.
- Fix queued frame captures not being correctly run when injecting into a program.
- Fix
DrawAuto()
not getting the right stream-out values whenClearState()
is called after doing the stream-out. - Fix querying for
ID3D12Pageable
on supported interfaces. - Workaround unknown GUIDs being queried via
EnumAdapter
calls on DXGI factories. - Fix potential driver crash on GL if bound vertex buffers are completely empty (i.e. have been created as 0 bytes).
- Fix race condition with threading within commands on capture connection window.
- Fix patching of Android manifest when patching debuggability.
- Fix bindless feedback patching on SPIR-V function calls.
- Fix handling of integer vector uniforms in GL program bindings.
- Don't crash if PSO compilation fails when fetching Vulkan mesh output.
- Fix missing image contents on Vulkan if the image is linear and only modified by writing directly into the underlying memory.
- Fix errors saving MSAA textures on D3D12 that have the
DENY_SHADER_RESOURCE
flag set. - Fix a bug when shader debugging that would read incorrect UAV data.
- Fix crash selecting a drawcall due to incorrect copying of vulkan pipeline state.
- Fix crash displaying line or point topology meshes with solid or lit shading.
- Fix GL state polution if pixel unpack or query buffers are bound.
- Fix bad cursor behaviour when editing text in capture comments viewer.
- Fix support for arrays-of-struct vertex outputs.
- Fix checks for extensions in GL counters.
- Fix reading wrong counter value for PSInvocations on vulkan.
- Fix display of selected cubemap slices.
- Fix crash with constant buffer previewer trying to close itself.
- Fix crash when using multiple D3D11 devices on different threads in an application.
- Fix divide by 0 crash if instanced attributes have a step rate of 0.
- Fix code not handling GL query for uniform buffers returning a byte range of 0.
- Fix check for windows predefined macros in
renderdoc_app.h
. - Fix crash with uninitialised struct in Vulkan if no graphics and compute queue is requested.
- Fix structure stride calculation for arrayed interpolator inputs in shader debugging.
- Fix calls to
GetProcAddress
on windows with aNULL
module. - Don't discard alpha when exporting to PNG/TGA regardless of what options say.
- Fix row pitch calculation for display of YUV textures over a remote host connection.
- Fix newline problems when saving scripts from the python shell.
- Fix potential crash in
vkCreateDescriptorUpdateTemplate
. - Fix viewport overlay when using negative viewport height with
VK_KHR_maintenance1
. - Fix a crash with the 32-bit Vulkan layer.
- Fix logic for saving the last path where a capture was opened.
- Fix a few cases where mesh output on GL would fail, depending on driver reflection and program linking.
- Fix a rare race condition in WGL functions.
- Fix some cases on Vulkan where unused/unbound descriptor sets in a pipeline would crash if the previously bound descriptor set was incompatible.
- Fix a crash if the shader editing window is closed while a compile is still going on.
- Fix
glCopyImageSubData
not handlingGL_RENDERBUFFER
correctly. - Fix calculation of ETC2 texture size on Vulkan.
- Fix UI issue where all errors/warnings are hidden and they then can't be shown again.
- Fix display of 64-bit integer values in buffer viewers.
- Fix an incorrect count being used for partial replay of
glMultiDraw*IndirectCount
. - Fix a case where secondary command buffer executes were not properly replayed when selecting draws in later primary command buffers, after the primary that executed them.
- Fix handling of
UAVStartSlot
above max RTV count. - Fix use of 'ref all resources' on Vulkan where not all resources have memory bound to them.
- Harden the crash handler against some unexpected error conditions and races.
- Handle
pViews
parameter beingNULL
in D3D12 with e.g.IASetVertexBuffers
, to implicitly unbind all buffers. - Fix out of bounds access on invalid SPDB inline data.
- Fix crash if ignored pipeline structures in Vulkan PSO creation are garbage pointers.
- Fix a potential crash if the docking layout incorrectly creates split windows above the maximum nesting depth.
- Fix shader debugging of byte address buffer access.
- Fix handling of
EINTR
in blocking send/recv calls to retry, instead of assuming the timeout has been hit and failing. - Fix vulkan handling of
ETC2_EAC_RGBA8
. - Fix case where GL buffer maps would fail due to missing
READ
bit. - Fix display of R10G10B10A2_UNORM buffer values in UI.
- Ignore sampler updates in
vkUpdateDescriptorSets
if immutable samplers are in use. - Account for index buffer binding in GL not being independent of VAO.
- Highlight combined image/samplers in vulkan that are omitted for brevity.
- Fix deadlock when grabbing capture screenshot in D3D12.
- Fix saving 3D textures in D3D12.