Skip to content

Releases: baldurk/renderdoc

Version v0.31

13 Sep 17:17
Compare
Choose a tag to compare

The results from last month's survey are now up for anyone interested to see the aggregated results! There are definitely some interesting conclusions to be drawn, and the effects of any change in direction will start to appear in the coming months.

As a result of the survey responses, I will be creating a detailed proposal for both anonymous telemetry and an expanded crash reporter. These will be posted as a request for comments to allow for any tweaking and also a more concrete idea for people to raise specific objections against. As mentioned in the survey, these will still be easily opt-outable and respectful of user privacy.

Thank you once more to everyone who filled this out, I am very appreciative of the time taken to give so many responses, and I hope the results are interesting to you!

Version v0.31

The downloads of this release are now up on the builds page including new linux binaries. These are x64 and might not work for everyone, although hopefully they should have wide compatibility. Right now I've not set up .deb/.rpm packages although that might come in future.

The primary focus of this release is a stepping stone towards further platform compatibility. Although RenderDoc has technically had support for network capture and replay for a while, this release sees a significant polish and tweaking applied to make the process as smooth and easy as possible. While obviously not as powerful as a native UI on non-windows platforms, this will help those targeting those platforms from a windows development machine.

If you're interested in debugging on linux from windows, this release also comes with linux binaries (although of course you can build your own from source) and documentation/instructions on how to do that. As I mentioned, this is an intermediate step - the next being a native Qt UI for non-windows platforms.

There are a couple of small backwards-compatible breaking changes in this version. If you have captures made on older versions of RenderDoc that use deferred command lists in D3D11 and were using the RestoreDeferredContextState == TRUE parameter to ID3D11DeviceContext::FinishCommandList this will no longer replay correctly so results may diverge. You will have to capture again with v0.31 for it to work. Otherwise old captures should continue to work.

Also the python shell core object is now exposed as pyrenderdoc, to make room for renderdoc mapping as a python module to the internal renderdoc C# namespace, allowing creation and referencing of C# types much more easily.

If you run into any problems or have suggestions for improvements, please file an issue or contact me directly to let me know! I'm always happy to help out with whatever I can.

Features/Improvements

  • Retooled the workflow and software support for network capture and replay. The documentation available gives all the details of how to set up and use this feature, and there's also a short video tutorial showing the simple steps visually.

    image

    image

  • Captures now include a coarse machine identifier (such as operating system, CPU architecture and bitness). This is used to prompt users to replay remotely.

    image

  • Added a 'TDR' style timeout to shader debugging. After 100,000 cycles the debugging will prompt the user to abort as this is likely an infinite or very long running loop. If you hit this limit with working shaders, let me know!

  • Heavily refactored handling of deferred contexts in D3D11. Previously there was a lot of ugly code to try and handle replaying separately on the immediate context and on a particular deferred context, now deferred commands are simply flattened into the immediate context at execute time.
    image

    Please report any bugs you run into with handling of deferred contexts, as I have precious few real test cases to verify that everything is working.

  • On vulkan, debug output is now muted by default to prevent applications from firing on false positive validation layer warnings or errors that are added by the capturing.

  • Report only a single queue in the single family in Vulkan (previous releases would still report multiple queues available).

  • Update notes for new versions are now formatted as RTF to allow links/bold/headers.

  • When compiling for linux, support for xlib/xcb optional and can be compiled out to remove any reference to those libraries.

  • Added the ability to specify environment variable modifications when launching a program - operations supported are 'set', 'append' and 'prepend', with append/prepend optionally supporting ; and : separators.

    image

  • Added VK_KHR_display support on Vulkan for direct framebuffer access.

  • Added an option in the settings window to specify a default folder for saving captures.

  • Improved proxying behaviour on GL, to handle BGRA and various some other non-uniform texture formats.

  • On linux renderdoccmd version will print which windowing and rendering APIs were included at compile time.

  • renderdoccmd on linux now will detect if the vulkan layer is registered properly and prompt the user to register it or fix the situation.

  • Shaders can now be saved to disk from the pipeline state. This is most useful for retrieving binary shaders from D3D11/Vulkan for external examination, on OpenGL it concatenates all source files together.

  • The drawcall column on the Event Browser now shows a range of drawcalls, the same as EID, for marker regions.

    image

  • Serialise and display parameters to IDXGISwapChain::Present.

  • Add F3/shift-F3 for searching forward and backwards in event browser.

Bugfixes

  • Fixed a bug that hit a number of people in v0.30 - if multiple mesh viewers were open in the default window layout, the docking toolkit I use would crash on opening.
  • Fixed a common cause of crashes on AMD, if using the DX extensions this would cause a driver crash on replay. Now the DX extensions will be hooked and returned as unavailable/failing to initialise.
  • Fix loading of EXR files, and improve error messages when failing to load images (don't refer to them confusingly as 'logfiles').
  • Save EXR images in ABGR channel order which seems more compatible with viewers.
  • Fix an incorrect saturate on D3D11's fake gamma curve, causing slight clamp of white pixels.
  • Fix a potential crash if GetProcAddress failed on a function that we would in theory be able to hook.
  • Fixed multisampled renderbuffers in GL not displaying correctly.
  • Stopped a leaking capture where glBindSamplers would be recorded even when not mid-frame.
  • Fixed a few cases of invalid GL use in edge-cases.
  • Corrected recording of 'VAO 0' to properly reference the buffers bound to it.
  • Fix pixel highlight boxes being off by one in the pixel context view.
  • Fixed an odd interface-casting bug that lead to ID3D11DeviceContext::GetDevice returning an invalid pointer.
  • Several improvements for control colours under high contrast themes.
  • Fix potential crash if selecting a non-drawcall with empty items enabled in the pipeline state view.
  • Make sure buffer view clamping to 200k max rows, even if a view specifies more than that.
  • Fixed handling of matching source with blank lines when the shader was compiled with old (SPDB) D3D debug format.
  • Speculative fixes for some crashes in texture viewer, by clamping previously selected mip/slice.
  • Fix for reconstructing constant buffer sizes without reflection data.
  • Fix an erroneous failure to capture if a GL frame contained no commands whatsoever.
  • Fixed network capture/replay between mismatched 32-bit and 64-bit executables.
  • Fix a crash when reading off the end of a buffer on D3D11, instead of clamping.
  • Fixed incorrect socket error handling on linux not looking for EAGAIN and EINPROGRESS.
  • Fix incorrect calls of select() on linux.
  • Add a search for a matching X visual ID when creating GLX window.
  • Fix a crash if a barrier event happens not within a drawcall.
  • Fixed vulkan debug texture rendering (used for display or saving texture data) being clipped to 4k accidentally.
  • Some fixes to handling of texture views without trying to copy or save their contents.
  • Fix a crash with vulkan shader edit & replace.
  • Fix a crash in vulkan pipeline state export to html.
  • Fix a possible case where the GL in-application overlay wouldn't render text properly.
  • Fixed inconsistent y-flipping of textures for GL. It's still an inevitable mess, but slightly less of one now.
  • Handle SOSetTargets() being called with a NULL list of buffers and non-zero buffer count, which is apparently valid and means each buffer is NULL.
  • Fixes to cubemap rendering on GL not properly restoring FBO attachments as the right face. Also at the same time fixed some issues with array slices being bound to FBO attachments.
  • On D3D11 only include matching mip/slice events in pixel history, and get the right before and after pixel values.
  • Fixed handling of byte address buffers - name them properly, and detect them when reconstructing stripped reflection info.
  • Handle a crash if StaticExports.GetVersionString() is not present when detecti...
Read more

Version v0.30

01 Aug 16:40
Compare
Choose a tag to compare

NOTE: There's a crash with certain saved UI layouts, if you had multiple mesh views open at once. If v0.30 crashes whenever you open it, delete %APPDATA%\renderdoc\DefaultLayout.config

I started working on RenderDoc in 2012 as a hobby project just working in my spare time. Now since June this year I've been contracting with Valve to focus full-time on RenderDoc, allowing significantly more work and improvement on the tool. I'm thankful to everyone who has helped me get here as I'm very privileged to be in this position.

In order to make sure that I do the best work I can and focus on what is important to people using the tool, I have put together a short survey to find out who is using the tool and why, as well as gather opinion on ways I'd like to improve the tool with better crash reporting and anonymous telemetry.

Please take a few minutes to fill out this anonymous survey

The survey is now complete! The results are now available

It will make a big difference to understand the answers to these questions so please fill it out. There's no personal information or login required, and all of the questions are optional. If you have any questions or concerns about the survey or anything else RenderDoc related, feel free to email me at any time and I'll be glad to help.

Version v0.30

As always downloads of this release are now up on the builds page.

Note that I've decided to retire the beta builds, since for the last several versions they have simply been in lockstep with the stable builds. They may return in a different form in future, but for now I've removed them from the page as they have no historical interest (compared to nightly builds at least), and the <1% of users on beta versions will be automatically prompted to update to the latest stable version if they don't do so manually.

This release brings a bunch of improved functionality to Vulkan, as well as smaller features and bug-fixes across the board including something that's been on the backburner for a while - display of view formats of typeless resources and view parameters like a sub-range of mips or slices. I'm not entirely sure if this implementation is ideal, so please give me feedback on what you think of it!

The in-application API has been updated to v1.1.0. Following semantic versioning this adds new functionality in a backwards compatible way - specifically the returned pointer to a function table contains an extra entry on the end, and since it's not caller allocated it is safely backwards compatible with v1.0.x code.

If you run into any problems, please open an issue or contact me to let me know - I can't fix what I don't know about!

Features/Improvements

  • When a bound resource doesn't just bind the whole resource but a sub-set, or if the resource is bound as a different type than it actually is (format casting, or if the resource itself is typeless and always cast), this is highlighted in the pipeline state and a tooltip shows the difference.
    image
    image
  • The source code has now been formatted by a .clang-format file to make for easier contributions (ie. without me nitpicking style problems).
  • Added Vulkan support for immutable samplers
  • Added Vulkan support for stepping through both multidraw (drawindirect with drawcount > 1) and secondary command buffers.
  • Implement saving multisampled textures to disk in Vulkan.
  • Added support for SPIR-V specialization constants.
  • Implemented mesh picking for Vulkan.
  • Implemented custom display shaders, and shader edit-and-replace for Vulkan.
  • On vulkan, image initial states are kept as buffers in CPU memory to reduce the device memory requirements and lessen the chances of out of memory errors (necessary for capturing DOOM).
  • For the moment on Vulkan, pretend to report only the single most capable queue and suppress the others, so that applications don't use multiple queues (also necessary for DOOM).
  • Added pipeline export to HTML for GL.
  • "Create Debug Device" capture option has been renamed to "API Validation" since it makes more sense cross-API.
  • Return dummy/stub interface for ID3D11Debug the same as for ID3D11InfoQueue
  • Added a button to zoom to 100% so that pixels are 1:1.
  • The 'attach to running instance' dialog now shows running programs much faster rather than checking and waiting on the timeout for all possible programs before showing anything.
  • Dragging an executable into the window anywhere will now pop it into the capture dialog, instead of trying to open it and complaining it's not a recognised capture log.
  • Supported marker colours in the UI, which is used by the D3D11 and Vulkan marker extensions. This can be disabled in the options if e.g. your code passes only one colour for all markers (opaque and transparent black are ignored if all markers have the same colour).
    image
  • Added a mode to show all instances in a draw in the mesh output. Also adjusted the colouring between current instance, other instances, and previous draws to make it clear which mesh is which and avoid changing colours when viewing a single draw or viewing multiple.
  • Add copy-paste support from shader debugger registers.
  • Added support (largely untested though due to lack of samples!) for newer D3D11 (11.3 and 11.4) and DXGI (1.4 and 1.5) versions. If you run into bugs with this please let me know as there is little code using it, but at least this should allow proper capturing without crashes.
  • The buffer viewer should now save its internal layout, so if you rearrange the 3D preview or data panels, it will remember that.
  • Marker regions in the event viewer are now display the range of events they cover, not just the last one.
    image
  • For the separate unstripped shader debug info feature added in v0.28, allow relative paths to be matched up to search paths in the UI.
  • Likewise this feature now supports lz4 compressing blobs, since they are often primarily text (containing source code) so they compress well.
  • The documentation is now generated through reStructuredText and sphinx - thanks @Anteru!
  • Added text file export of the entire event tree, to more easily batch-process.
  • Image barriers are now displayed in the timeline bar, as well as in the resource usage drop-downs. The current image state is shown in a tooltip in the pipeline state view.
  • Show the required size of a constant buffer vs the provided size, and highlight any that don't provide enough data.
  • Better display of multisample count, byte/structured buffer type, and image swizzles in pipeline state.
  • SNORM textures now display in the range [-1, 1] instead of [0, 1] by default.
  • Added support for importing by ordinal on windows, which is needed for D3D12 hooking.
  • Add a menu item to jump from a given pixel history event directly to the matching primitive.
    image
  • The renderdoccmd command line program has been revamped to have a more friendly and intuitive interface, and more useful options for e.g. launching programs specifying capture options or a working directory.
  • Improved underlying technical work behind remote replay and capture, and running on linux in general. The UX still needs work though.
  • Tweaked logging output to stdout/stderr not to include such long line prefixes.
  • Added a SIGINT handler to linux to shut down the remote replay host cleanly.
  • Added a feature to capture N successive frames. This won't necessarily help in some cases where bugs are timing related, as the frames will run very slow during capture. However it can be useful if it's known that a bug happens every second frame or so.
  • Improved float formatting when in exponential notation, as previously it could print a lot of unnecessary trailing 0s.
  • Add a small popup in the TextureViewer to go to a particular pixel. It's accessible in the toolbar, or via CTRL-G
    image
  • The buffer viewer (mesh or raw buffer view) will now try to size columns to fit likely content.
  • When using per-texture settings (the default option), then the visualisation type (RGBA vs RGBM vs custom) and selected custom shader is also saved per-texture.
  • Custom visualisation shaders are provided the selected slice as well as the selected sample from the UI. On GL, they are now also provided with [0, 1] UVs for convenience.

Bugfixes

  • Fix an error where an update could fail if the renderdoc.dll module was injected into a program while the update process is on-going. This would commonly happen if the UI was launched from a program like the Unity or Unreal editor, and then the update was found. It left the UI and core module on inconsistent versions, which lead to crashes/bad behaviour.
  • Fixed a long-standing bug where a Win32Exception could be thrown creating some handles. I still don't know what the problem is or why the fix works, but this seems to be corrected now by simply forcing handles to create at creation time instead of lazily.
  • Several fixes for pixel history on D3D11 - a bug causing all events after the first failed pixel to be dropped, s...
Read more

Version v0.29

08 May 18:01
Compare
Choose a tag to compare

Binary downloads of this release are now up on the builds page.

Version v0.29

Since v0.28 was released a couple of weeks ago, a bug or two cropped up that were just on the border of being serious enough to warrant an urgent bugfix release. To that end v0.29 is a small release primarily aimed at patching those up as a number of people were running into at least one on v0.28 - a fatal error that happened when inspecting a D3D11 compute dispatch that used a structured buffer UAV.

It also brings with it support for the newly release VK_EXT_debug_marker extension for Vulkan, which allows common API debug functionality like naming objects and marking off regions of commands for hierarchical browsing.

There are a few other changes, so even if you're not hitting bugs in v0.28 it's worth updating. As always please get in touch if you run into any problems or have comments or suggestions to improve the tool!

Features/Improvements

  • Support for VK_EXT_debug_marker in Vulkan.
  • Added support for the 'create debug device' capture option in Vulkan. This will force-enable the validation layers, and display any debug messages recorded for the events and API calls in a frame.
  • Object labels in GL applied to shaders, programs and pipelines will be displayed in the pipeline state view.
  • When saving textures, updating the file type dropdown will change the filename (if present) to match the extension, and vice-versa when editing the filename box if the extension is changed it will update the file type dropdown.
  • Some improvements to the new statistics pane added in v0.28.

Bugfixes

  • Fix a fatal error that happened when inspecting a D3D11 compute dispatch that used a structured buffer UAV.
  • Fixed a bug where a failed call to wglCreateContextAttribs (e.g. if requesting a higher version than is supported) would cause subsequent calls not to be hooked.
  • Fixed a mistaken offset calculation when fetching constant buffer data into shader debugging on D3D11.
  • Fix a divide by zero error if average framerate isn't yet calculated by first Present().
  • When capturing manually without a swapchain, ensure that each capture has a frame number incrementing from 1, instead of all being frame 0.
  • Fix a case where the profile mask could be missed when parsing the attribs list when creating a context in GL.
  • Fix input layouts not being marked referenced when bound to the render state - causes them not to be included if they are bound at the start of the frame, but not bound in the frame.
  • Handle VK_WHOLE_SIZE being passed as the memory range size in vkFlushMappedMemoryRanges
  • Filter out unsupported Vulkan extensions before the application sees them.
  • Don't replay with the Vulkan validation layers enabled even if the application enabled them.
  • Ensure the WSI extensions are requested when replaying a Vulkan log even if the application didn't use WSI.
  • Fix some erroneous warnings about descriptor sets not being bound when referenced by a shader.

Version v0.28

25 Apr 23:50
Compare
Choose a tag to compare

Binary downloads of this release are now up on the builds page.

Version v0.28

This release is mostly a collection of bugfixes from the last few months - a large number are Vulkan related, but some are from crash uploads and other bug reports. There are a few new features though!

For those who compile the code or are interested in development there have been some behind the scenes improvements - things like better organisation of build configurations, a new assert macro, extra warning levels enabled and the removal of the crash when no debugger is present if a non-release build fails an assert or hits an error message. If you're curious try building the code and have a poke around - that's the beauty of open source after all!

Features/Improvements

  • A button on the texture viewer to open the texture contents in the buffer viewer for custom raw formatting and inspect. Be careful not to make too many columns (you might be tempted to create texture_width columns) as the .NET control crashes hard 😢.
  • Support for separate unstripped shader debug info - thanks to Arne Schober!
    • This allows a workaround for shaders needing embedded debug info but normal builds not wanting that disk size overhead. Instead you can compile the shaders in debug, save the unstripped blobs somewhere on disk, and then annotate the stripped blob with a file path. Then RenderDoc will know to find the unstripped blobs from elsewhere.
    • You can also specify the file path at runtime with SetPrivateData. For more information see the docs!
  • .cap files can be opened via file->open and drag & drop.
  • A new button to abort the running of a python script.
  • When buffer viewers are opened from an API's pipeline state, any offset or length from the views is applied to the initial layout.
  • A new experimental statistics view - thanks to Michael Vance!
    • Adds a new pane with rudimentary API surface area statistics, such as draw call counts, resource sets, sampler & constant buffer updates, etc.
    • This functionality is currently only supported on DX11.
    • Information is currently presented in a primitive text-based view, but we plan to move to a proper set of UI primitives in the future.
    • API coverage is incomplete but covers the majority of the pipeline.
    • Future work will be centered around completing API coverage, enhancing detection of redundancy, proper UI support, and automation of capture and export of API statistics.
  • Input layouts now pick up names set with SetPrivateData.
  • The pan is kept consistent for textures with an integer multiple of dimensions. So when you're looking at a downsample chain that goes from 256x256 to 128x128 to 64x64, you won't have to re-zoom and re-pan when switching between these textures.

General Bugfixes

  • The installer now packages and runs the appropriate VS2010 redistributable in case you don't already have it.
  • When y-flip was enabled, texture pixel picking co-ordinates were off by one.
  • Fixed some depth textures not displaying as depth and instead just as if they were red-green.
  • When editing and replacing shaders, the pipeline state instantly refreshes, instead of needing you to manually select another drawcall then back to the first.
  • An OpenGL performance regression is fixed - push/pop debug labels were spamming out debug messages to the log file and tanking framerate.
  • When saving logs they're immediately added to the recent files list.
  • Fixed a bug that caused calling glUseProgramStages mid-frame for different stages to not replay correctly.
  • D3D11 input layouts are now dependency tracked instead of all being included in the replay
  • Fixes for calling glBindTexture with ID 0 - on replay the texture would not be correctly unbound.
  • Fixes for separablee shader patching.
  • In the API view glSamplerParameter and similar enum parameters now display as strings.
  • Fix for glShaderSoruce being passed multiple negative lengths - thanks to @olvaffe!
  • Treat baseVertex correctly as signed instead of unsigned, fixing crashes when it was negative
  • Fixes for some OpenGL context creation failures and broken attrib list parsing.
  • Some OpenGL shader compile fixes for intel.
  • Fix for EXT_depth_bounds_test not being available.
  • Some D3D11 constant buffer packing fixes.
  • Fix to allow capturing oculus programs - D3D11 fix to QueryInterface() of IUnknown - thanks to Jamie Hayes!
  • Reduce stack size in log function - previously it was allocating 4kb of stack which could cause pressure on threads with small stacks.
  • Fix an OpenGL crash when using custom shaders in the texture view.
  • A speculative OpenGL fix for a crash when functions like glTextureImage2D was called with no texture bound.
  • Fix a crash copy-pasting in the UI with nothing selected in the pipeline view.
  • Fix a failure when saving really low resolution images as JPG.
  • Several fixes for saving 2-component textures.
  • Minor fixes for quad overdraw ramp decoding on extreme overdraw amounts (>= 64).

Vulkan Bugfixes

  • Fix a crash when passing oldSwapchain to swapchain creation - typically on resize.
  • Fix a random crash exposed by changes in the post-release loader versions around physical device enumeration.
  • Fix the vulkan nag message on the capture screen not working properly with RenderDoc installs on UNC paths.
  • Fixes for sparse descriptor sets where not all bindings are used contiguously.
  • Reduced compute workgroup size for running on older cards with lower limits.
  • Support for an implicit memory unmap before free.
  • Fix a crash if swapchains are created with invisible windows.
  • Some protection against invalid/misconfigured code.
  • Fixes for 32-bit - it just plain didn't work before!
  • Improvements to the API view to show flags/masks as strings.
  • Fix for vkCmdDispatch calls not working when stepping through a frame.
  • Many more code validity improvements.
  • Many improvements and fixes to SPIR-V reflection and disassembly.

Version v0.27

16 Feb 14:02
Compare
Choose a tag to compare

Binary downloads of this release are now up on the builds page.

Version v0.27

It's been about 12 months since I posted that I was adding OpenGL support - and that was 1 year after RenderDoc's release. It's fitting then that just a little before RenderDoc's 2 year anniversary I can happily reveal support for the recently released Vulkan 1.0 API. I've been working since last september on including Vulkan support in RenderDoc at the same time as the launch of the API.

This is the reason why development has been quiet on github recently, as most work was happening behind the scenes. There are some other features and improvements in this release as well, so check the notes below to see them all.

The RenderDoc installer is also shipped in the Vulkan SDK - this is absolutely identical to what you download above or build from code here, just repackaged seamlessly into the SDK.

Side note: The in-application API was bumped to 1.0.1 for a minor bugfix. Going by semantic versioning, this is a backwards-compatible change so any code loading 1.0.0 will get 1.0.1 and everything will work.

Features/Improvements

  • Vulkan 1.0 support!
  • Added a warning if D3D11.1 calls are captured and the replay is not able to run them.
  • If SetResourceName is called on the same resource many times, we de-duplicate and only serialise the last.
  • When viewing a really massive buffer the UI could have trouble displaying enough rows. Instead, we clamp the row count to 200,000 and display a warning to view other sections with the row/byte offset.
  • Support added for displaying and picking S8 textures on GL.
  • GL errors are cleared after operations that might potentially generate them (such as RenderDoc's fetch/apply state vector).
  • GL hooks are added for wglSwapBuffers, wglSwapLayerBuffers and wglSwapMultipleBuffers.
  • When viewing an image rather than a capture, added a retry when reloading the file on change, in case the change is detected while the file is still locked by another program.
  • Picking vertices in the mesh viewer will enable synchronisation between the input and output views.
  • Buffer viewer elements that are NaN/Inf will display properly.
  • Images saved with only one channel visible are saved as greyscale instead.
  • If a custom shader is used to view a texture, then the results of that custom visualisation will be displayed, rather than the source texture.
  • Viewport/scissor overlay should now hopefully be clearer to see.
  • Added support for reverse-z projection matrices in mesh viewer unprojection
  • When StartFrameCapture() is called from the API, if there is a window identified (i.e. it's not just NULL, NULL) then make that window active.
  • The texture viewer input thumbnails now show inputs from all shader stages, not just pixel shader.

Bugfixes

  • Fixed a crash if an update check was ongoing when the main window was closed.
  • Fixed a common crash on shutdown when closing D3D11 captures that began happening, due to a mismanaged refcount on ID3D11DeviceContext.
  • Fix GL crash with glMultiDrawElements.
  • Fix some incorrect GL state setting.
  • Fix IsFrameCapturing API to return true for captures triggered with TriggerCapture().
  • Add mutex around destruction code that could be run on multiple threads at the same time.
  • Possible fix for crash on linux depending on global initialisation order.
  • Fix an edge-case with wglShareLists by avoiding creating any internal GL data for overlay rendering until the last possible minute in SwapBuffers.
  • Stop an erroneous warning firing while shader debugging.
  • Fix find-in-files not properly clearing previous results.
  • Fix a GL crash if buffer orphaning isn't properly detected.
  • Remove queries to GL_TEXTURE_COMPRESSED and decide for ourselves based on the internal format.
  • Improve handling of difficult GL context juggling between threads when capturing.
  • Fixed a case where compute debugging would incorrectly complain that the thread index was out of bounds.
  • When glUseProgramStages is called mid-frame, we now correctly replay it instead of caching it incorrectly.
  • When depth or stencil test is disabled, the overlay now shows all-green instead of what would have happened.
  • Added an overlay 'clear before draw/pass' that shows only the results of the selection on the current RT.
  • Fixed an overly-strict check for compatibility between IA bytecode and VS bytecode input signature.
  • When modifying GLSL, we now handle whitespace better around #version and other directives
  • Changed the shortcut for File -> Exit as it was clashing with File -> Recent Capture Settings
  • Fixed pixel history on depth-stencil targets from going badly wrong.
  • When saving a log, change the window title from the temporary filename.
  • Fixed texture viewer scrollbars being inconsistent and annoying, which caused them not to map properly to the full range of scrolling.
  • Fixed a crash if a find dialog is open when the shader window closes
  • Fixed a possible failure in the version updater when it goes to restart the program.
  • Always return typed component format for images, fixes a potential problem saving e.g. EXR images from typeless formatted textures.
  • Fix a case on GL where FBO attachments of a specific mip wouldn't properly be restored on replay.

Version v0.26

25 Sep 19:53
Compare
Choose a tag to compare

As always, you can find binary downloads of this release on the builds page.

Version v0.26

This is a smaller release but there are a couple of key features included. The main one is that the serialised capture format has changed. The new format should be more flexible and extensible for adding new features (to come in a later release), and it also has built-in compression, so that capture files are smaller on disk with minimal overhead for loading and saving.

This version will be backwards compatible, such that logfiles from older versions (back to v0.20) will load. Captures made in v0.26 will not load in older versions. In the future these old logfiles will not work, but hopefully after this there should be no need to make a backwards-compatible breaking change.

In this version there is a new stable RenderDoc application API, which is designed to be forwards and backwards compatible and is strongly supported. If you were integrating RenderDoc before you will need to update your code before it will work with v0.26.

Features

  • Updated capture file format, to compress the captured data, and support addition of arbitrary data - more details to follow in a future release.
  • Added stable in-application API. See the renderdoc_app.h file - included in all binary distributions.
  • Added a new application updater, that will automatically download and install new versions when detected at the click of a button.
  • IronPython standard library embedding now just distributes a .zip file rather than trying to compile into a .NET dll assembly. This means importing the standard library should be much more reliable.
  • Empty viewports are now highlighted more obviously in the pipeline state view
  • Compute UAV slots now use shader variable name where available.
  • Copy, dispatch and resolve calls now show the relevant inputs and outputs, rather than the current graphics bindings.
  • Add support for some new GL ARB extensions
  • Improved support for many shader source files when debugging - on the left hand side of the shader panel there is now a list of all source files, that you can click to quickly jump to those files. In addition, ctrl-shift-f will open a 'find in all files' window.
  • Shader disassembly now happens lazily, which should mean improvements to log loading and shader creation during capture.
  • Added more fallbacks for detecting position input elements in the mesh view, and made sure that no matter what at least some element will be selected.
  • GL captures should now not be susceptible to results from later in the capture 'leaking' backwards into earlier in the capture, if e.g. a texture is written and read from without ever being cleared at the start of the frame.
  • GL function names in the event browser have been tidied up to be more readable - now only counts and important parameters are displayed, the topology, index width, offsets etc are not displayed.
  • Added a tips dialog, that is accessible via Help -> Show Tips. The tips are also linkable online

Bugfixes

  • Fixed an unfortunate crash that snuck into 0.25, where viewing DDS files caused a 100% crash.
  • Fixed a crash trying to pick a vertex in a drawcall with no vertices.
  • Fixed some cases where function pointers on GL could be called without being verified as present properly.
  • Updated checks for GL on replay - ARB_buffer_storage is required as well as 4.3 + EXT_direct_state_access.
  • Fixed an edge case crash handling nested drawcall markers.
  • Fixed crashes where bad mesh data (inf, NaN, etc) would cause a crash when calculating the bounding box.
  • Fixed a race condition where C++ to C# marshalling could fight on multiple threads.
  • Handle invalid filename characters in shader filenames from debug info
  • Corrected bounds checking of ld_structured_indexable
  • Changed imm_atomic_consume used in ConsumeStructuredBuffers to do a prefix instead of postfix decrement.
  • Corrected behaviour where if a cwd-relative pathname was passed to the in-application API for where to store captures, the UI would not be able to locate it.
  • Create any parent directories in the path specified for captures to be stored.
  • Fixed GL to not crash when RenderDoc is injected after GL has been initialised and used - instead RenderDoc will do nothing and capture nothing, which is consistent with D3D11 behaviour.
  • Fix an incorrect serialise of glCompressedTex_Image3D_() calls
  • Make sure to render GL overlay to the backbuffer.
  • Handle unsized formats better in GL texture calls.
  • Speculative workaround for nvidia driver crash
  • Fix case where a geometry shader with streamout would fail to create if numStrides == 0
  • Fix for a marshalling crash if struct field order wasn't returned in layout order
  • Several crash report bug fixes and speculative fixes.
  • Fixed a case where loading of DDS files failed due to a flag bit being set
  • If a machine doing a renderdoc capture has no D3D11 runtime installed, fall back to using d3dcompiler from the renderdoc installation.
  • Call SetLastError(0) after renderdoc WGL functions to avoid leaking out error codes that shouldn't be there.
  • Protect against crashes or bad behaviour if FinishCommandList is called on an immediate context.

Version v0.25

19 Jul 16:22
Compare
Choose a tag to compare

Binary zips and installers for this release (and others) can be found on the builds page. Both stable and beta builds are up to date with this release, but beta builds can be updated more regularly. You can choose which type of release you want to install and receive updates for.

Version v0.25

This version brings some new features, tweaks to existing functionality and the bugfixes that have happened since v0.24. As always feel free to get in touch with me or post an issue here on github if you encounter a problem, or if you have feedback or a feature request.

Highlights include multiple OpenGL frame capture and dependency tracking, bookmarked events in the replay UI, improvements to the mesh preview window and iteration on pixel history and shader debugging for further accuracy.

OpenGL captures will not be backwards compatible as work has continued on that front, but D3D11 captures are backwards compatible with captures from previous versions.

In the source tree there's progress being made on OpenGL functionality and Linux support - glslang is now compiled into the distribution for compiling GLSL to SPIR-V. It's currently disabled in release builds but this will ultimately be used to support shader debugging on OpenGL. Likewise there is a Qt UI currently being built that will eventually be supported on Linux with the same functionality as the current .NET UI. Potentially in future the .NET UI will be retired, if the Qt version ever reaches parity.

Features

  • You can now make bookmarks in the event browser. Clicking on the bookmark button or Ctrl-B will add a new bookmark at the current event. Then you can either click on the shortcut buttons in the bookmark toolbar, or anywhere in the program you can press Ctrl-1 through Ctrl-0 to jump to the first 10 bookmarks.
  • This allows rapid jumping between interesting drawcalls, particularly useful if you are comparing two drawcalls back and forth.
  • screenshot 2015-07-19 135749
  • OpenGL applications can now capture many frames without needing to restart the application.
  • OpenGL captures now do proper dependency tracking, which means that like D3D11 logs only the resources needed for the captured frame are included in the capture file, not all resources that are live at that point.
  • Several improvements to the pixel history view, which will now show fragments that shader clip in a list of several drawing in one drawcall. You can also run the pixel history on a particular mip or array slice in cases where rendering happens to only one.
  • A bunch of improvements to the user experience in the mesh preview window.
    • The window now uses 4x MSAA by default (since there's barely any pixel work going on, this hopefully should not be a significant performance hit for anyone).
    • The arcball controls are now improved and are based around the bounding box calculated and rendered for each mesh component.
    • You can right click on the mesh to 'pick' vertices and select them in the raw data tables. Note that for when you have several vertices that have the same position but different UVs or normals, the first will be selected.
  • image
  • The log loading progress bar should hopefully now be a bit more representative rather than remaining mostly static and jumping several times.
  • Textures can now be zoomed up to 25600%
  • Constant buffer data can now be exported to a CSV file
  • The RenderDoc in-application API file has been simplified to remove typedefs and STL include, and a couple of new API convenience functions were added.
  • When single-stepping in a shader debugger, if a register tooltip is open it will now live-update instead of becoming stale.
  • Views of resources in D3D11 now have their lifetimes tracked separately. Previously if a resource continually had views created and released they would all be stored and replayed, causing slight overhead on capture and potentially significant slowdown on loading the capture.
  • Registers and constants are now highlighted in the register windows when selected in the disassembly view.
  • screenshot 2015-07-19 150155
  • Ctrl-F3 and Ctrl-Shift-F3 will search for the currently selected word in shader editors.
  • If pixel debugging fails, instead of popping up a dialog saying that the current drawcall doesn't write to that pixel, instead launch the pixel history.
  • When RenderDoc is displaying an image, if the image is changed on the filesystem the data will be reloaded and displayed with the pan and zoom otherwise staying identical. Note that if the image dimensions or format change the results might be unexpected.

Bugfixes

  • Fix QueryInterface for IRenderDoc_uuid returning the wrong pointer and causing problems on Release() (thanks @zao). Also the proper ID3D11Device* pointer is now used for identifying a window, it was wrongly casted.
  • When editing shaders, #include file searching is case insensitive.
  • If cbuffers have identical names, use the order to identify which one is which
  • Fixed a case where the currently active window being removed would mean no window is active.
  • Fixed pixel history on a depth-stencil texture not working properly.
  • Fixed a case where unpack state was inconsistent on loading GL texture data.
  • When an array of shader resources overlaps with a single shader resource in terms of register binding, the single shader resource has priority.
  • Fixed serialising GL program uniforms incorrectly
  • Report ARB_direct_state_access as a supported texture
  • Handle Luminance/Alpha texture formats in glTexStorage functions (kind of crazy that someone would do that, but not hard to support).
  • Hide extra refcounts on D3D11 resources for being bound to the pipeline from the user, as some naughty code would rely on the undefined refcounts and error message.
  • Register renaming for constants now supports arrays properly and structure heirarchies better.
  • Fixed a copy-paste mistake on GL that would cause an undesired dependency on ARB_direct_state_access
  • Right-clicking on auto-fit will re-fit whenever the texture selection changes, even if the event stays the same.
  • A variety of crash fixes both real and speculative from uploaded crash reports.
  • Using the arrow keys to nudge the selected pixel now works when the pixel context view is in focus as well as when the main texture view is in focus.
  • Fixed a memory leak that could happen with buffer orphaning using glBufferData
  • Fixed D3DCompiler register packing insanity when using arrays of float or float2 interpolators.
  • Fixed a case where NaNs in a texture's alpha would cause the texture to display incorrectly even when the alpha channel should not be visible.
  • When changing a value in the range control and deselecting the change is now committed rather than being left at a misleading value.
  • Fixed buffers as resources showing up as 'unbound' instead of using a default image and displaying their name.

Version v0.24

02 May 12:38
Compare
Choose a tag to compare

Binary zips and installers for this release (and others) can be found on the builds page. Both stable and beta builds are up to date with this release, but beta builds will be updated more regularly. You can choose which type of release you want to install and receive updates for.

Version v0.24

This release is by and large a collection of bugfixes both from crash reports that people sent in and other bugs that have been reported. There's not much new functionality as I was busy for most of April moving country for my new job.

OpenGL captures are not backwards compatible and old captures will not load in this version - once GL support is fully completed this will not happen so often. D3D11 captures are backwards compatible, and old captures will open in v0.24.

Features

  • OpenGL contexts that aren't created via CreateContextAttribs will now be disallowed for capturing, as they are very likely to be pre-3.2. RenderDoc will use super-old fixed function GL to display the text overlay, so that even 2.0 or older contexts will work. Contexts created via CreateContextAttribs will be captured, regardless of whether they are compatibility or core profile, to allow more programs to use RenderDoc. This is a bit dubious as RenderDoc still only supports core profile OpenGL, but hopefully this line in the sand will prevent most old programs will allowing through few incompatible programs. (sort of a feature!)
  • A few places in the UI now use a monospaced font, such as mesh output and constant buffer viewer. There is a new option in the general category to display all data everywhere (such as pipeline state viewer, event browser, etc) in a monospaced font.
  • GL draw elements calls will now support passing indices as a direct memory pointer, as a concession to old GL code. Note that all vertex data must still be in vertex buffers in a VAO, direct memory pointers are not supported here.
  • Resources are now tracked by usage in OpenGL, so the timeline bar will correctly indicate reads and writes per resource, as well as the thumbnail right-click menus in the texture viewer.
  • RenderDoc should now handle having multiple APIs alive in a program, which in this case means GL and D3D11. Cycling between active windows will cycle between all APIs alive.
  • Added in-API ways to detect RenderDoc. GL via this extension and D3D11 via querying the device for UUID A7AA6116-9C8D-4BBA-9083-B4D816B71B78.

Bugfixes

  • GL cubemap and array textures weren't properly showing the slice or face for mips above level 0.
  • When invalid indices like 0xcccccccc or 0xbaadf00d etc were used (probably by accident - but this is a debugger after all) for the Post VS mesh data we would stream-out all indices between the minimum e.g. 0 and that value, even if only a small subset were used. This caused out of memory and driver crashes. Instead we now only stream-out the indices used.
  • Fixed a crash when debugging such an invalid index.
  • Fixed a crash if vertex instance rate is 0 for instanced data (which is valid - the first element is used for every vertex).
  • Copy, Resolve and GenerateMips calls will now show up with draw calls in the event browser, to make it more clear where these events happen in the frame.
  • Fixed a crash if the constant buffer viewer is still open when a log is closed.
  • Fixed a crash if for some reason a shader debug trace comes back with no states.
  • Crash fix with CopySubresourceRegion if a box is specified.
  • Fix depth render target being larger than the colour render targets in D3D11 (was detected as invalid, but D3D11 allows this).
  • Fix from @vvuk - Present1() was using the wrong DXGI interface.
  • Fix a crash introduced in previous version, where SetPredication(NULL) would not be replayed and predicates would be left bound - which caused driver crashes.
  • Fixed some crashes if an index buffer wasn't multiple of 4 bytes, and fixed GL unsigned byte indices.
  • Fixed a couple of problems with the "remove empty marker groups" option - a crash if a marker group has an empty group as a child, and fixed calculating timings completely screwing up the drawcall list.
  • ld_structured was incorrectly looking at only UAVs to calculate its stride, instead it should check for the matching resource.
  • A few DX bytecode instructions assign to a scalar destination from a vector source, and these needed a fixup in the debugging to properly handle swizzles.
  • Fixed some crashes and problems with shader editing when the source has multiple files with #includes
  • With the SPDB debug chunk (which is produced by new d3dcompiler versions) #defines that are specified on the command line or to D3DCompile are now used when editing, to recompile the shader.
  • Executing python scripts that Invoke onto the render thread will now catch any python exceptions that are thrown on that thread, instead of crashing with an uncaught exception.
  • Shader debugging variable tooltips now show hex as well as int and float, and the register windows now show the tooltips as well as the source window.
  • Fixed some crashes if ctrl-c is pressed without a log loaded, and added copy-paste handlers to the GL pipeline state view.
  • Fixed a crash with the GL text overlay in-program, if the string is formatted very long and/or the glMap fails.
  • When redeclaring gl_in and gl_out in a GL shader only one of the redeclarations would be added, this is fixed.
  • Fixed shader debugging 'run to' command checking instruction number against trace length - which could be different whenever flow control occurs.
  • Outputting matrices from a shader in GL will now be listed correctly in the mesh output.
  • Clamped mips in textures without mips (but that aren't created immutable) to correctly bind when calculating min/max or histogram.
  • ID3D11Debug interface is wrapped, so that querying for ID3D11InfoQueue via it will return our dummy info queue.
  • The disassembly source window has a custom right-click menu now with relevant controls.
  • Temporary captures from a program connection window are kept around for longer even when saving them to a file. This prevents captures from being lost if a user saves them, then deletes the saved capture, and wants to save the capture again.
  • Fix a crash if an invalid filename is passed to D3DCompile as the source filename.
  • Fixed mesh preview window for geometry & tessellation output.
  • MultiDraw drawcalls now correctly create a nested section in timeline bar.
  • Fixed a crash if glUseProgramStages is called with program=0 to unbind.
  • Fixed an edge case where RenderDoc would incorrectly cause a program to run out of D3D11 state objects by caching them aggressively, if the program creates many temporary objects that are all unique.

Version v0.23 - Bugfix release

03 Mar 13:43
Compare
Choose a tag to compare

Version v0.23 - Bugfix release

Long story short: use v0.23 instead of v0.22, it is almost the same but with a very important bugfix included.
Builds are available in the usual place, both stable and beta updates.

Shortly after v0.22 was released I received a serious bug report that unfortunately hadn't been caught by my testing. It affects any D3D11 application that uses MSAA and can easily cause driver crashes when capturing, so the only realistic option is to make this new release with the bugfix included.

This release is almost identical to v0.22 so for new features & improvements I refer to those release notes. This release is primarily to include the fix for the above crash bug, and a few other fixes for bugs that were either recently reported over the weekend, or were found while verifying that v0.23 is more solid.

Version v0.22

27 Feb 15:52
Compare
Choose a tag to compare

NOTE: A crash bug with D3D11 & MSAA has been found in v0.22. It's recommended that you instead use v0.23 with the fix included.

Binary zips and installers for this release (and others) can be found on the builds page. Both stable and beta builds are up to date with this release, but beta builds will be updated more regularly. You can choose which type of release you want to install and receive updates for.

Version v0.22

Almost exactly 1 year ago from the time this release was posted, RenderDoc was first released to the public. Initially the source code was not included, that came a few months later in early May 2014.

RenderDoc was a hobby project that I had worked on entirely in my spare time for about 18 months, and I had no idea of what kind of reaction to expect. The positive feedback and hearing how the tool has proven useful to people finding and fixing bugs has been very rewarding, and I really appreciate everyone who has taken the time to try it out, use it, as well as to everyone who has given feedback, reported bugs or contributed to the repository.

RenderDoc has come a long way in the last year, and I know that it has a lot farther to go in many respects. I'm looking forward to seeing where it goes in the future, but I wanted to take this opportunity to thank everyone!

OpenGL Support

The big push for release v0.22 has been OpenGL support. While it's not quite at feature parity with D3D11 (and there's no linux UI - yet!) it's definitely at a place where I would encourage everyone to use it in anger and give feedback. I've tested it across many modern GL projects and titles between windows and linux and while it still has work to do, it's in a good shape. Please let me know how you get on with it!

RenderDoc supports OpenGL core profile 3.2-4.5 inclusive, which means it has full support for modern GL techniques like persistent mapped buffers, MultiDrawIndirect, and everything in Core OpenGL 4.5.

multidraw
azdo

Note: Only core profile 3.2-4.5 is supported. This means that any old codebases using older versions of GL or the compatibility profile functionality may not capture and replay. For more details on the exact limitations and requirements at the moment check out the wiki page.

I'd like to give particular thanks to Matías N. Goldberg, who tested RenderDoc's early OpenGL support on Ogre3D's 2.1 modern GL branch. Thank you for your endless patience while I fixed all the broken stuff! 😄

API Changes

While it's not a particularly stable and solid API just yet, RenderDoc does export some functions for use with applications that want to integrate RenderDoc more tightly into their codebases. This is just a warning to those of you who are using this API that there have been some changes since v0.21, and you should be careful to make sure you update properly. I'd recommend always checking RENDERDOC_GetAPIVersion matches RENDERDOC_API_VERSION as this will allow me to bump the version on any breaking API changes. In future when the API is more finalised and 'official', this should not happen often.

In particular this time, the CaptureOptions structure has changed a little, and wchar_t * strings are now expected to be char * UTF-8 strings.

Highlighted Features

I've listed just the highlighted new features. There have been many bugfixes and smaller improvements as well, but I am too lazy to list them all - if you're curious check out the issues or changes.

  • RenderDoc can now act as a simple image viewer. This is a difficult feature to make obvious, but you can now load images as you would logfiles - either via file -> open, or just dragging into the viewer. The texture viewer controls work as normal. RenderDoc supports .dds, .hdr, .exr, .bmp, .jpg, .png, .tga, .gif, and .psd, and the dds file support should include any DXGI format and any number of slices, cubemap faces or mips - things traditional image viewers have a harder time with. The save tool has also been updated to save .exr files.
    imageview
  • The mesh preview window has had several improvements. Selecting instances in an instanced drawcall should now behave correctly in all circumstances, and choosing how the 3D preview will display is much more flexible. You can now right click on any column headers on input or output to choose which one will be used as position data for rendering, and which will be used as 'secondary' data, to optionally be displayed as a solid colour in the preview.
    mesh1
    mesh2
  • When using the pixel history feature, MSAA targets are now fully supported and the sample debugged will be the sample you are currently viewing (if you're viewing the average resolved image, any sample will be chosen). Also when a pixel is overdrawn by several fragments in a single drawcall, you can now select the fragment you want to debug and right click on it to see the result from that fragment, even if it's later overwritten.
    pixhist
  • There is now a very rough and early python scripting interface. You can open either an interactive shell or run a script (loaded from disk or edited live), and there is a simple python object that allows access to most of the raw data and control that renderdoc offers, so you can see all textures in the log, browse the drawcalls, cause the UI to jump to a drawcall or view a texture, etc.
    pythonshell
  • Most overlays now support MSAA targets, so you can see sample-accurate depth-test results etc.
  • Most UI windows now have copy-paste handlers, so e.g. in the constant buffer window you can select any number of constants and hit ctrl-c to copy them to the clipboard.
  • The D3D11 pipeline state can also now export the entire state to HTML (example exported pipeline) - this can be useful for comparing between two logs or two events to see if anything has changed.
  • When capturing an application that spawns child processes (such as a launcher application), the UI in the connection dialog has been improved. It will now show each child process that exists and give you the option to open a new connection to that process instead of the one originally launched. Also if a process only has one child when it exits, the connection will automatically transfer to the child process, in the assumption that it is the one you wish to trace.
  • It is now possible to activate a 'global process hook'. Read the documentation before using this feature as it can be dangerous to use without understanding. It will automatically insert a tiny dll into every new process started on the system, and when the target process that you want to inject is launched, this tiny dll will load renderdoc. This can be useful in extreme cases to capture programs that are launched indirectly or via pipes from another launcher process.
  • When capturing you can now enable an option to verify Map() overruns. This will activate in the captured frame, and insert a marker value at the end of each Map(). If the marker value is modified a message box will appear letting you know and giving you the option to breakpoint in the debugger to trace the problem.
  • While in the application, captured frames now 'decay' from the overlay after a certain length of time. If you're trying to capture some particular frame glitch and you end up with a lot of frame captures that didn't hit it, then this keeps the overlay from having a massive long list of captured frames.
  • Although largely untested since it's very rarely used in the real world, RenderDoc should now support DXGI 1.2/1.3 and DX11.2. The exception being tiled resources in DX11.2 as I couldn't find a single sample or example code that used them - if you have anything let me know so that I can write support against a real program.
  • The pipeline view has had a few tweaks to make better use of space - in particular rarely used sections like UAVs and shader linkage on D3D11 will vanish if there is nothing bound, to make room for the other sections. Also when moving between drawcalls if at all possible the pipeline view will try to avoid scrolling, so that you can more easily compare higher slots between two drawcalls.
  • When running on a system that doesn't have Feature Level 11 hardware, RenderDoc will now fall back to WARP software rendering rather than failing to replay. While slow, for simple cases this might mean it is still usable.
  • When shader debugging, hovering over a register in the disassembly will now show a tooltip with all three possible interpretations of the register. This is mostly useful if a register has mixed float and int data and you want to see them both quickly without needing to form complex watch expressions.
    reghover
  • The texture viewer has had a ...
Read more