Skip to content

@baldurk baldurk released this Oct 9, 2019 · 144 commits to v1.x since this release

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.
    image
  • 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 parameters int mip and int slice to control the mip and slice being displayed in the thumbnail.
  • PipeState.GetShaderExtension has been removed and ReplayController.BuildCustomShader now accepts a ShaderEncoding and bytes instead of just source text. This previously returned glsl for OpenGL and Vulkan, and hlsl for D3D. It's now recommended to check GetCustomShaderEncodings() and allow any high level language that can be compiled to a supported encoding.
  • The port parameter on CreateRemoteServerConnection and BecomeRemoteServer has been removed, as has GetDefaultRemoteServerPort. Only the default connection port is supported.
  • ReplayController.GetShader and ReplayController.GetCBufferVariableContents now take a pipeline parameter. This may be empty/Null on APIs without pipeline state objects.
  • RemoteServer.OpenCapture, CaptureFile.OpenCapture, and CaptureContext.LoadCapture now take a ReplayOptions parameter to control the replay. You can construct a default instance of ReplayOptions and the behaviour will be as it was before.
  • SaveCallback used in EditShader has a new signature, to allow for different file encoding.
  • The access to RemoteHosts in the UI has changed - there is now a function GetRemoteHosts() in PersistantConfig that 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 RemoteHost will be returned. Access to RemoteHost 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 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 (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 as A8 instead of being remapped to R8.
  • 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 as GL_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 and GL_SRGB_ALPHA as a base format, though it is invalid.
  • Don't load libEGL.dll from the global PATH 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 or GL_UNSYNCHRONIZED_BIT which are incompatible with the implicit GL_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 when ClearState() 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 a NULL 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 handling GL_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 being NULL 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.
Assets 4
You can’t perform that action at this time.