baldurk 801f47a31a Fix crashes with redundant changes or 0 refcount binds. Refs #23, #503
* Two potential crashes here - one from the previous fix to #503, we
  would double-release a refcount on an object that was set for write.
  First we'd decrement the refcount when it was 'unbound', then again
  trying to unbind it for write because the slot wasn't NULL'd. This was
  just plain broken.
* The second more obscure one was when binding for read. If the external
  object had no other refcount than the one in the binding slot, then
  changing its binding would implicitly destroy it. However if the code
  was setting the same object back again (ie. with the pointer they had
  not reference to) then the refcount would drop to 0 then should be
  incremented again to 1 when it's re-bound. However because the count
  bounces off 0, the object is destroyed between being unbound and
  re-bound causing pure virtual calls and other crashes when we try to
  access it.
* The fix is first to check if we're binding something to its own slot
  and skip it. Second we need to keep the new objects ref'd at all times
  during the binding (in case we are e.g. performing an array bind which
  moves the 1-refcount object from slot 2 to slot 3. It would be unbound
  when processing slot 2, hit refcount 0, and then be added again when
  processing slot 3).
2017-02-02 12:28:34 +00:00
2016-05-22 19:41:50 +02:00
2017-01-25 20:53:03 +00:00

RenderDoc

Travis CI AppVeyor Coverity Scan MIT licensed

RenderDoc - a graphics debugger, currently available for Vulkan, D3D11, D3D12, and OpenGL development on windows.

If you have any questions, suggestions or problems or you can create an issue here on github, email me directly or come into IRC to discuss it.

Screenshots

Texture view Pixel history & shader debug
Mesh viewer Pipeline viewer & constants

API Support

Status Windows Linux
D3D11 Well supported, all features. ✔️ ✖️
OpenGL 3.2 core+ Well supported, most features.* ✔️ ✔️ WIP UI**
Vulkan Well supported, most features. ✔️ ✔️ WIP UI**
D3D12 Well supported, most features. ✔️ ✖️
OpenGL Compatibility, GLES No immediate plans ✖️ ✖️
D3D9 & 10 No immediate plans ✖️ ✖️
Metal No immediate plans ✖️ ✖️
  • D3D11 has full feature support and is stable & tested. Feature Level 11 hardware is assumed - Radeon 4000/5000+, GeForce 400+, Intel Ivy Bridge, falling back to WARP software emulation if this hardware isn't present.
  • *OpenGL is only explicitly supported for the core profile 3.2+ subset of features, check the OpenGL wiki page for details.
  • **A Qt UI is in progress, with some implementation notes on the wiki and a TODO list of remaining work.

Downloads

There are binary releases available, built from the release targets. If you just want to use the program and you ended up here, this is what you want :).

It's recommended that if you're new you start with the stable builds. Nightly builds are available every day from master branch here if you need it, but correspondingly may be less stable.

Documentation

The text documentation is available online for the latest stable version, as well as in renderdoc.chm in any build. It's built from restructured text with sphinx.

As mentioned above there are some youtube videos showing the use of some basic features and an introduction/overview.

There is also a great presentation by @Icetigris which goes into some details of how RenderDoc can be used in real world situations: slides are up here.

License

RenderDoc is released under the MIT license, see LICENSE.md for full text as well as 3rd party library acknowledgements.

Contributing & Development

Building RenderDoc is fairly straight forward. See CONTRIBUTING.md for more details.

I've added some notes on how to contribute, as well as where to get started looking through the code in CONTRIBUTING.md.

Languages
C++ 79.3%
C 16.6%
Python 2.8%
Objective-C++ 0.4%
HLSL 0.2%
Other 0.6%