Files
renderdoc/docs/Vulkan.aml
T
2016-02-09 22:39:22 +01:00

101 lines
5.4 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<topic id="b08af848-7c58-4ff4-9a2a-6bb5cfb0b037" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<para>
This page documents the support of Vulkan in RenderDoc. This gives an overview of
what RenderDoc is capable of, and primarily lists information that is relevant. You might also
be interested in the <link xlink:href="86b8bce7-b7cd-4b10-aa61-706463d14fe0">full list of features</link>.
</para>
<para>
The latest information and up-to-date support is always available on the
<externalLink>
<linkText>GitHub wiki</linkText>
<linkAlternateText>Vulkan wiki page on GitHub</linkAlternateText>
<linkUri>https://github.com/baldurk/renderdoc/wiki/Vulkan</linkUri>
</externalLink>.
</para>
</introduction>
<section address="Layer">
<title>Vulkan capture</title>
<content>
<para>
RenderDoc's Vulkan support uses the sophisticated layering mechanism built into the Vulkan
API. This means that once RenderDoc has registered its capture layers, there is no need
for invasive process hooking - we can simply launch the target process with an environment
variable set.
</para>
<para>
The one requirement of this however is that the layer does need to be registered in an OS
specific way - on windows this is in the registry, on linux this is in an /etc folder. That
way the Vulkan loader can scan and initialise the layer.
</para>
<para>
Usually this will happen for you if you install RenderDoc with a proper installer, or update
from a previous version. However if you are compiling RenderDoc yourself or running a loose
unzipped build, the capture panel will show a warning indicating that the layers need to
be registered. Just click this and the registration will be applied.
</para>
<para><mediaLink><image xlink:href="LayerRegistration"/></mediaLink></para>
</content>
</section>
<section address="Performance">
<title>Performance notes</title>
<content>
<para>
Vulkan is intended as a high-performance low CPU overhead API, and RenderDoc strives to
maintain that performance contract at a reasonable level. While some overhead is inevitable
RenderDoc aims to have no locks on the 'hot path' of command buffer recording, minimal or
no allocation, and in general to have low performance overhead while not capturing.
</para>
<para>
Some patterns of access are more or less conducive to good performance on RenderDoc, so
if you are having trouble with slow capture, large memory/disk overhead or slow replay you
might want to try eliminating use of persistent maps of memory from coherent heaps - you
can use vkFlushMappedMemoryRanges to emulate non-coherent heaps and RenderDoc will take
advantage of that, or you can use non-persistent maps.
</para>
<para>
Likewise try to avoid making very large memory allocations in the range of 1GB and
above. By its nature RenderDoc must save one or mor copies of memory allocations to enable
proper capture, so having allocations limited to only a few 100s of MBs can help gain
granularity of management and limit the memory overhead RenderDoc adds. There may be
optimisation of this in future on RenderDoc's side but there are no easy guarantees.
</para>
</content>
</section>
<section address="Features">
<title>Current support</title>
<content>
<para>
RenderDoc has initial support for Vulkan at the launch of version 1.0, but it contains some
caveats. In addition, not all replay features are currently supported, but this is being
actively worked on.
</para>
<list class="bullet">
<listItem><para>RenderDoc assumes that even if multiple GPUs are present, that only one VkDevice and one
VkQueue will be created and used.</para></listItem>
<listItem><para>RenderDoc captures will in general not be portable between different systems, only currently
supporting capture and replay on the same or similar enough machines.</para></listItem>
<listItem><para>Sparse textures are only supported for non-arrayed 2D textures with no mips.</para></listItem>
<listItem><para>Pixel history is not implemented.</para></listItem>
<listItem><para>Shader debugging is not currently supported.</para></listItem>
<listItem><para>Edit-and-continue of shaders and custom visualisation shaders are not supported.</para></listItem>
<listItem><para>Mesh output of geometry/tessellation shader stages is not available.</para></listItem>
</list>
</content>
</section>
<section address="Linux">
<title>Non-windows platforms</title>
<content>
<para>Linux and other platform support follows naturally when thinking about Vulkan support. Currently
there is full support for capturing and replaying on linux, however the Qt UI is still
heavily work in progress.</para>
</content>
</section>
<relatedTopics>
<link xlink:href="86b8bce7-b7cd-4b10-aa61-706463d14fe0" />
</relatedTopics>
</developerConceptualDocument>
</topic>