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.
-
Captures now include a coarse machine identifier (such as operating system, CPU architecture and bitness). This is used to prompt users to replay remotely.
-
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.
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. -
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.
-
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 detecting mismatched UI and dll versions. - Fixed handling of implicit render-pass image transitions between (and into/out of) subpasses.
- Export more GLX functions just as dummy pass-through to handle libraries like glfw that query for a lot from our library, expecting it to be libGL.so.
- Fix some crashes/mismatches between
Window
s andGLXWindow
s. - Fix cases where a NULL array wasn't handled in GL multi-bind functions.
- Remove a 500ms sleep that was doing nothing in the global hook shim dll.
- Fixed a case where Unmap() data could get lost in certain circumstances.
- Output from the python shell now automatically scrolls to the bottom.