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.
- 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.AddThumbnailnow takes two new parameters
int sliceto control the mip and slice being displayed in the thumbnail.
PipeState.GetShaderExtensionhas been removed and
ReplayController.BuildCustomShadernow accepts a
bytesinstead of just source text. This previously returned
glslfor OpenGL and Vulkan, and
hlslfor D3D. It's now recommended to check
GetCustomShaderEncodings()and allow any high level language that can be compiled to a supported encoding.
BecomeRemoteServerhas been removed, as has
GetDefaultRemoteServerPort. Only the default connection port is supported.
ReplayController.GetCBufferVariableContentsnow take a
pipelineparameter. This may be empty/Null on APIs without pipeline state objects.
CaptureContext.LoadCapturenow take a
ReplayOptionsparameter to control the replay. You can construct a default instance of
ReplayOptionsand the behaviour will be as it was before.
EditShaderhas a new signature, to allow for different file encoding.
- The access to
RemoteHosts in the UI has changed - there is now a function
PersistantConfigthat returns the current list, and
GetRemoteHost()takes a hostname, to look up a host by name if it exists - if it doesn't an invalid
RemoteHostwill be returned. Access to
RemoteHostproperties is now via member functions rather than direct member data access.
- Add support for a number of Vulkan extensions:
- Add support for some OpenGL extensions and whitelist GLES extensions that were already supported:
- 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_debugextension 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
CreatePipelineStateon D3D12, if an application doesn't correclty check for DXIL support and tries to upload it anyway without it being supported.
KHR_driver_propertiesand 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_2Disn't the same as slot 0
TEXTURE_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 (
- 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_accesson 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
- 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
- Handle situations in D3D12 mesh output fetch where too much data is generated by a drawcall.
- Textures with
A8_UNORMformat are now reported as
A8instead of being remapped to
- 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_POINTSisn't listed as
- 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_ALPHAas a base format, though it is invalid.
- Don't load
libEGL.dllfrom the global
PATHon 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.
- 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.
adbbug 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
Unmaphappening on multiple threads.
- Fix error mapping buffers persistently with
GL_UNSYNCHRONIZED_BITwhich are incompatible with the implicit
GL_READ_BITthat 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
nonCoherentAtomSizefor flushes and invalidates on Vulkan.
- Fix the timezone on timestamps in the capture connection panel.
- Fix broken serialisation of
D3D12_WRITEBUFFERIMMEDIATE_PARAMETERthat 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
glShaderSourcenot 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
- Fix a problem where resources that are deleted mid-frame aren't properly recorded in the capture.
glUniformBlockBindingnot 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.
DrawAuto()not getting the right stream-out values when
ClearState()is called after doing the stream-out.
- Fix querying for
ID3D12Pageableon supported interfaces.
- Workaround unknown GUIDs being queried via
EnumAdaptercalls 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
- 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
- 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
GetProcAddresson windows with a
- 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
- Fix viewport overlay when using negative viewport height with
- 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 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
- 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
UAVStartSlotabove 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.
NULLin 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
EINTRin blocking send/recv calls to retry, instead of assuming the timeout has been hit and failing.
- Fix vulkan handling of
- Fix case where GL buffer maps would fail due to missing
- Fix display of R10G10B10A2_UNORM buffer values in UI.
- Ignore sampler updates in
vkUpdateDescriptorSetsif 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.