@baldurk baldurk released this Jul 25, 2018 · 655 commits to v1.x since this release

Assets 3

Version v1.1

It's been a quiet summer since v1.0 came out. This release focusses primarily on improving support across the board - newer versions of APIs, OS compatibility, and general bugfixes.

As always binaries for this release are up on the downloads page for Windows and x64 linux as a binary tarball.

Analytics

Just a reminder, the results of the analytics added in RenderDoc v1.0 are up for all to see publicly: https://renderdoc.org/analytics

If you're curious about how many people use RenderDoc or with what APIs and platforms, that's the place to check it out!

Main highlights

  • Expanded API support:
    • Vulkan 1.1 including all extensions promoted to core, as well as a number of additional extensions. As always you should make sure to enumerate extensions properly before using them, as RenderDoc will hide any unsupported extensions.
    • Vulkan multi-queue. This means if your application wants to use async compute queues, or transfer queues, this should now be captured and replayed correctly.
    • OpenGL 4.6 - most of this was already present in extensions, the main new supported extension is GL_ARB_gl_spirv.
    • OpenGL non-sharing contexts. Specifically this means that contexts which don't share with each other won't cause aliasing and problems leading to crashes or bad replay. RenderDoc should now fully support several distinct context share-groups.
    • DXGI1.6, D3D11.4, and D3D12.3 - this includes new interfaces defined in newer versions of windows 10.
  • Shaders in D3D11 can now be debugged at the HLSL level. Providing the shader was compiled with debug information embedded, you can switch to the HLSL view and step through and set breakpoints as normal in the HLSL code. Similarly, HLSL local variables will be shown while they are in scope as well as the register they map to and the value.
    • image
    • TIP: If you compile with D3DCOMPILE_SKIP_OPTIMIZATION RenderDoc will default to HLSL debugging, if any optimization was present it will still default to assembly debugging as in earlier versions. As long as the debug information is present though you can always toggle between assembly and HLSL debugging at any time.
  • Added integration with AMD's Radeon GPU Profiler. This allows RGP profiles to be taken from AMD hardware, which will be embedded in the capture and can be opened later. When opened this way, RGP and RenderDoc synchronise and a drawcall can be selected in one tool from the other, and vice-versa.
    • image
  • In the pipeline state window, each group can be collapsed to give more space to other groups.
    • collapse
  • OpenGL ES is now supported on windows, either through extensions to the normal GL driver as well as with GLES emulators such as ANGLE. Note that with this release ANGLE doesn't currently implement enough of GLES 3 to support replay.
    • If you want to capture the underlying API use (D3D11, or GL if using a GLES-on-GL emulator) run the target program with the environment variable RENDERDOC_HOOK_EGL set to 0.

Python changes

Aside from some compatible changes adding new functionality and data, there are a few minor breaking or incompatible changes in the Python APIs:

  • conservativeRasterization in D3D11 and D3D12 pipeline states is now an enum, not a bool. Check for ConservativeRaster.Disabled.
  • CaptureOptions.saveAllInitials was removed, see below for a longer explanation.
  • GPUCounter.SamplesWritten was renamed to GPUCounter.SamplesPassed.
  • DrawFlags.UseIBuffer was renamed to DrawFlags.Indexed.
  • qrenderdoc.CommonPipelineState moved into renderdoc.PipeState module.
  • DrawcallDescription.parent, DrawcallDescription.previous, and DrawcallDescription.next are now references to the DrawcallDescription objects themselves similar to a linked-list, they don't contain the EID of those objects. This makes it easier to walk the draw tree.

Along with these changes are a number of other improvements, there are now some simple examples of using the Python APIs in the documentation pages which can provide a starting point to get to grips.

Features/Improvements

  • The 'save all initials' capture option has been removed. This was an optimisation only applied on D3D11 which would skip the initial contents of any large texture that looked like it would be cleared and overwritten in the frame. Since the savings are lesser today with capture compression as well as the difficulty of diagnosing bugs caused by this, it's been removed.
  • Add support with Android 6.0 devices
  • Added support for VR end-of-frame markers that can be used to delineate frame boundaries when no explicit swapping is happening. Similarly use the markers to select which thread is rendering and ignore other threads doing compositor work.
  • Handle None better in python scripting, so that e.g. many common python objects can be compared to None (they are never equal) and None can be passed similarly to NULL when a QWidget is expected.
  • Support specifying 'intent arguments' when launching Android applications.
  • Implement queue-level markers on D3D12.
  • On D3D12 use driver disassembly to get hardware ISA, where a supported driver is present.
  • The panels in the resource inspector can now be resized and docked within the window, as with other windows like the shader, buffer, or texture viewers.
  • SPDB debug info parsing has been refactored to include recently released PDB information from Microsoft.
  • Added support for nvidia NvPerfKit for counters. The library license forbids distribution, so you can have to download NvPerfKit yourself. To use it, put the NvPmApi.Core.dll in plugins/nv/counters/x64 for 64-bit RenderDoc builds and plugins/nv/counters/x86 for 32-bit RenderDoc builds.
  • Add support for IDXGraphicsAnalysis query via DXGIGetDebugInterface1.
  • Display format for Vulkan texel buffer views.
  • Some performance improvements on D3D12 while in the background and not capturing.
  • Include resource usage items in Vulkan for usage in secondary command buffers.
  • Support double precision outputs in GL mesh output fetch.
  • ResourceId is now hashable in Python scripting.
  • Restore right-click menu on texture viewer tabs to quickly close other tabs.
  • Add simple pass-through support for nvenc - ensuring it won't crash when RenderDoc is active.
  • Improve python wrapping of WindowingData objects.
  • Unsized formats in GL are now serialised as-is, without first converting to a sized format. It will still be displayed in the UI as the sized format the implementation chose.
  • Enumerating the list of PIDs on the system has been optimised to be much faster when window titles are not needed.
  • When launching a process on windows environment variable changes are applied before launching the process as well as on injection, to allow modifying variables such as PATH that must be changed before the process starts.
  • Add support for selecting which multiview view to show mesh output for.
  • Save the last directory chosen in file dialogs, to provide a reasonable default for new dialogs.
  • Change pips in timeline bar to color-blind friendly palette.
  • Buffer barriers are included in resource usage lists.
  • Add support for EvaluateAttribute* intrinsics in shader debugging by caching all possible evaluations up front. This can be expensive if a dynamic offset is used.

Bugfixes

  • Fix a crash on OpenGL if reflection data failed to generate for a shader.
  • Fixed crashes on Vulkan if vertex buffers used formats that were not supported as texel buffers.
  • Fix a crash if a refresh was ongoing in the remote manager when it was closed.
  • On Android devices that don't support ps -A fall back to just ps.
  • Try to better handle inconsistent error output from adb on Android devices.
  • Fix a crash reflecting data out of DXBC shaders if the last binding is an array.
  • Fix mixed-up display of logic/blend enabled state in D3D11 and D3D12 pipeline state viewers.
  • Handle NULL being passed to SetPrivateData/SetName in D3D, instead of crashing it unsets any previous name.
  • Fix some mistaken GL binding points after sorting for current binding information.
  • Fix issues with renderdocui stub not launching correctly.
  • Fix serialisation of data updates in WGL_NV_DX_interop.
  • Fix some drawcall text in event browser being misformatted.
  • Fix an issue with the crash reporter generating a 4GB logfile if it failed to read the log.
  • Handle OMSetRenderTargetsAndUnorderedAccessViews being called with an overlap between the RTVs and UAVs when only binding one and preserving the other.
  • Don't consume ctrl-left or ctrl-right as shortcuts to change event when in a text editing field.
  • Fix an issue where widget painting could be requested faster than the paint happens, leading to laggy or locked-up UI.
  • Handle 'slice' apks where many apks are present in the install on an Android device.
  • Fix buffer readback on vulkan not advancing source offset for copies. Would break any display or save of buffer data over 16MB, including remote replay with the remote host running Vulkan.
  • Fix exporting a single slice of a texture to DDS.
  • Fix an inconsistent icon in the status bar when running on a high-DPI display.
  • Fix a crash processing vertex buffers with an invalid byte stride.
  • Fix compilation with non-ASCII system character sets, and with checkout paths containing spaces.
  • Don't allow launching an application with the no executable specified.
  • Remove a stale cache key when highlighting vertices.
  • Fix resource names containing HTML characters not displaying correctly.
  • Fix display of UAVs in D3D12 pipeline state.
  • When picking vertices or syncing input/output views in mesh viewer, preserve horizontal scroll.
  • Be more robust where possible if an indirect draw mistakenly generates invalid vertex/instance counts.
  • If vulkan descriptor pools overflow on replay, make sure to gracefully fallback to a new descriptor pool allocation instead of crashing.
  • Disable debug/pixel history buttons on APIs when they're not supported.
  • Improve source-level patching of GL shaders to make them separable compatible.
  • Fix a case allocating a buffer for a vulkan memory object which doesn't support buffers.
  • Fix problems getting shader interpolators when floats and ints should be packed together.
  • Fix incorrect resource dimension fetched for SPIR-V textures.
  • Fix android server continually re-installing every time.
  • Fix a potential mismatch on replay if physical devices don't match capture.
  • Don't change selected instance to 0 when vertex picking on inputs.
  • Fix vertex picking to be able to pick current instance.
  • When calling QueryInterface on ID3D11Debug forward to the main device instead of returning E_NOINTERFACE.
  • Delete replay outputs from correct thread to avoid issues on OpenGL with context problems.
  • Fix interpretation of glBindFramebuffer(GL_FRAMEBUFFER) to set both read and draw framebuffers.
  • Fix automatic specification of formats with renderdoccmd convert.
  • Fix potential resource leak with D3D11 deferred contexts with dangling references left to render/depth targets.
  • Fetch min/max lod and lod bias from sampler objects on GL.
  • Fix a use-after-free problem with remote replay of OpenGL, where shader reflection must be cached per-event due to continual resource binding re-sorting.
  • Fix invalid vulkan image barrier that should always refer to depth and stencil aspects together.
  • Fix display of RTVs and DSVs in D3D12 pipeline state viewer.
  • Work around nvidia driver bug by setting GL_DEBUG_OUTPUT_SYNCHRONOUS to ensure state queries are up to date.
  • Fix a crash if a vulkan instance is destroyed and then another is created in the same program.
  • Fix incorrect handling of GL texture unpack state.
  • Fix a crash where vulkan command buffers that were recording after a captured frame would be accidentally pulled into the captured frame too early.
  • Fix potential crashes in AMD's counter library if it doesn't correctly detect that no compatible hardware is present. Now the counter library will only be initialised if an AMD GPU is explicitly detected by RenderDoc.
  • Support JDWP connections where the ID sizes are not identical for all types.
  • Fix potential race conditions with resources in D3D12 being mapped on multiple threads.
  • Fix a crash capturing D2D applications where SwapDeviceContextState didn't properly refcount.
  • Fixed crashes on EGL where context attributes were incorrectly parsed.
  • Work around a Qt bug where itemview text that covered multiple lines was cut off after the first line, instead of separately having ... on each line where it was truncated.
  • Fix a crash when processing texel buffers in GL that aren't fully initialised.
  • Fix a crash in D3D12 texture overlay rendering.
  • Fix a bug where the Android JDWP connection would miss out on Application.app.onCreate() being hit due to a mistaken event filter.
  • Fix potential use-after-free issues with callbacks deferred to other threads firing after their parent window has been closed. Callbacks are now associated with a window and will be discarded if the window no longer exists.
  • Fix a resource leak on OpenGL that would lead to resources being allocated but not freed.
  • Fix handling of 'CPU' descriptors on D3D12, these descriptors are read immediately in function calls.
  • Ensure vulkan descriptor arrays that are partially valid are still partially updated instead of being completely discarded.
  • Stop Resource inspector from losing focus when selecting resources.
  • Fix a crash with empty D3D12 descriptor heaps.
  • Handle NULL structs being passed to initialise D3D12 descriptors.
  • Specify the correct primitive when debugging pixels selected in the pixel history.
  • If a hook fails on android using interceptor-lib, fall back to hooking via PLT patching.
  • Fix a crash if picking vertices with a vertex buffer that has stride 0.
  • Handle D3D12 PSOs created with a NULL pointer for bytecode but with a non-0 bytecode length.
  • Fix crash in IDXGIDevice::ReclaimResources / IDXGIDevice::OfferResources.
  • Gracefully handle a failure to create a vulkan device, and check for physical device features.
  • Export unsupported GL functions from library to satisfy programs looking via dlsym.
  • Support a NULL root signature creating D3D12 pipeline states, if the root signature is embedded in shader blobs.
  • Fix exporting mesh output when indices vary between fetched vertex output data and provided vertex input data.
  • Fetch enough data to handle slightly out-of-bounds vertex buffer access.
  • Fix broken stream-out on D3D12 for small draws.
  • Fix shader output values being displayed in the wrong places in pixel history instead of pre-/post- modification values.
  • Fix a potential race condition in Vulkan when capturing.
  • Renamed 'samples written' generic counter to 'samples passed' to more accurately reflect the value being counted.
  • Fix an issue with D3D12 descriptors where a stale descriptor referring to an old deleted resource now points to a new incompatible resource would fail to create and fail the replay, instead of being ignored.
  • Fix readback of compressed cubemaps on OpenGL ES.
  • Fixed a number of extension handling issues on OpenGL ES, either checking for the right version or emulating potentially unsupported bits of functionality.
  • Fix a stale GL array texture readback cache.
  • Fix incorrect serialisation of GL uniforms as doubles instead of floats and vice-versa.
  • Fix potential multi-threaded memory corruption when probing remote hosts.
  • Fix a crash in renderdocui with an incorrect string allocation.
  • Fixed sample_info/sample_pos instructions when specifying the rasterizer.
  • Fix a crash when UAVs are bound in D3D11.1 with UAVStartSlot being above the maximum number of RTVs.
  • Fix support for alpha/intensity/luminance textures that only supported basic unsigned byte normalised types.
  • Fix crash if texture tabs were open when restoring state.
  • When searching in event browser, start at selected event not current event. This means that selecting a marker region then searching will search inside it before searching after it.
  • Fix display calculation overflowing for large scrollbars.
  • Fix a possible race condition when loading a capture.
  • Remove memory leak on D3D12 by resetting command allocators each replay.