Initial commit of existing code.

* All renderdoc code up to this point was written by me, history is available by request
This commit is contained in:
baldurk
2014-05-02 08:14:55 +01:00
parent 04b1549c0f
commit c38affcded
695 changed files with 230316 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<topic id="D78CE10E-0206-4DFC-B5CA-29F98D448235" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<autoOutline />
<para>Although not the most complex part of the RenderDoc's UI, this page details
the features and functionality of the API Inspector.</para>
</introduction>
<section address="elems">
<title>UI Elements</title>
<content>
<para>The API Inspector is divided into two sections - the top section is the most common,
detailing all of the API calls leading up to and including the current drawcall.
The special case for this is the end of the frame where there may not be a final drawcall
but the API Inspector lists the API calls that preceded the final flip of the backbuffer
that marks the end of RenderDoc's captured frame.</para>
<para>The bottom section is less common but shows the callstack from user code into the
API entry point, if such a callstack is available and the symbols are resolved. For more
information check out the page on <link xlink:href="14048aef-0053-4e38-98cd-541f4d15d12e" />.</para>
</content>
</section>
<section address="api">
<title>API Calls</title>
<content>
<para>This section lists the series of API calls made between the preceding drawcall
and the currently selected drawcall. The current drawcall is always the last element
in this list and is highlighted in bold. By default it is also the selected element.</para>
<para>Each API call can be expanded to see the parameters that were passed to it, in the
form that they were serialised out to the log file.</para>
<mediaLink>
<caption placement="after" lead="API Calls">A list of API calls made up to the current draw.</caption>
<image xlink:href="APIList"/>
</mediaLink>
</content>
</section>
<section address="callstack">
<title>Callstack</title>
<content>
<para>The callstack section can be expanded by double clicking on the separator and
collapsed in the same way. Once open its size can be adjusted by clicking and dragging
on the separator.</para>
<para>This section will either show "No callstack available" or "Need to resolve symbols"
as appropriate when the callstacks aren't ready for display.</para>
<para>The callstack follows the currently selected API call in the other section, and will
update both as that selected call change and as the current event changes (as this implicitly
changes the API call selected to whichever the current drawcall is).</para>
<para>For more information see <link xlink:href="14048aef-0053-4e38-98cd-541f4d15d12e" /></para>
<mediaLink>
<caption placement="after" lead="Callstack">The callstack in user code where this API call was made.</caption>
<image xlink:href="CallstackPanel"/>
</mediaLink>
</content>
</section>
</developerConceptualDocument>
</topic>
+122
View File
@@ -0,0 +1,122 @@
<?xml version="1.0" encoding="utf-8"?>
<topic id="C48DED3E-3303-4A82-8F58-3D39766C48E7" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<para>The buffer viewer has two reasonably distinct modes - the first rather
specialised to show meshes and mesh data as it passes through the pipeline.
The other shows a raw arbitrary buffer with a custom (and arbitrary) formatting.</para>
</introduction>
<section address="mesh">
<title>Mesh Viewer</title>
<content>
<para>The Mesh Viewer shows both the mesh data as well as a visual representation
of the mesh at different stages - pre VS, post VS, etc.</para>
<para>Each distinct point has a display that shows the mesh data, the format of which
is pulled from the relevant stage of the pipeline - shader input or output, or input
layout. You can choose to sync these views <mediaLinkInline><image xlink:href="arrow_join"/></mediaLinkInline>
as well as specify an offset which will stay consistent, so that you can see the same
row as you move between different events.</para>
<para>Below this is a 3D view which will show one stage at any given time, and can be
switched with the tabs above it. There are two control schemes for viewing the 3D mesh -
Arcball which is the default for pre-transform (VS in), and WASD controls which is the
default for post-transform (VS out). You can switch between these at any time with
the dropdown on the toolbar above the mesh view.</para>
<alert class="note">
<para>When tessellation is active, VS out behaves similarly to VS in as they are both
considered input data (rather than post-transform data).</para>
</alert>
<para>You can reset the camera to its default location with the reset button
<mediaLinkInline><image xlink:href="arrow_undo"/></mediaLinkInline>. For VS Input this
resets to an arcball at some radius from the object. For VS Output this resets to a view
from the projected eye.</para>
<para>You can also auto-fit the camera to the mesh for the VS Input mesh. The auto-fit
button <mediaLinkInline><image xlink:href="wand"/></mediaLinkInline> will fit the
camera to the axis-aligned bounding box of the mesh.</para>
<para>To be able to view the post-transform mesh in view-space, RenderDoc attempts to
guess the projection matrix and unprojects the output data.</para>
<para>By default the projection matrix is guessed as a standard perspective matrix.
Using the post-projection w and z values and the aspect ratio of the output targets
a reasonable approximation can be estimated. The FOV must be specified though - the
default is 90 but this can be refined by opening the options.</para>
<para>Opening the options <mediaLinkInline><image xlink:href="cog"/></mediaLinkInline>
you can specify the FOV used in the projection matrix. If you used an orthographic
matrix instead you can specify this - although this requires manual tuning of the
matrix parameters.</para>
<mediaLink>
<caption placement="after" lead="Options">The options pop-out of the buffer viewer.</caption>
<image xlink:href="BufferOptions"/>
</mediaLink>
<para>Also available in the options is a simple speed multiplier for the WASD controls,
to fine-tune how fast it moves to the dimensions of the mesh.</para>
<para>In the vertex input preview, you have the option to display the mesh with some solid
shading modes, not just as a wireframe mesh. When solid shading you can toggle the wireframe
on and off.</para>
<list class="bullet">
<listItem><para>Solid Colour simply displays a solid colour for each triangle.</para></listItem>
<listItem><para>Flat Shaded will perform basic flat lighting calculations based on triangle normals to give a better idea of the topology of the mesh.</para></listItem>
<listItem><para>TEXCOORD0 and COLOR0 will display the relevant input element, if detected in the mesh.</para></listItem>
</list>
<mediaLink>
<caption placement="after" lead="Preview">Previewing the uv co-ordinates as colour on the mesh.</caption>
<image xlink:href="SolidPreview"/>
</mediaLink>
</content>
</section>
<section address="buff">
<title>Raw Buffer Viewer</title>
<content>
<para>When opening a buffer as a raw display, sometimes a default layout will be specified
e.g. if available from shader reflection data. If not, the layout will default to 4
32bit unsigned integers.</para>
<para>This format can be refined and customised by entering a structure-like definition
into the text box at the bottom of the window. The given types are listed below, and
can be combined in hlsl-like fashion specifying n-wide vector elements.</para>
<para>In addition to this, you can specify a row offset which is useful in remaining
at the same row while watching the change in a buffer between different events, as well
as a byte offset to shift the data along from the start of the buffer (e.g. if what you
are interested in starts only part-way through the buffer but is not aligned along the
data stride you enter).</para>
<mediaLink>
<caption placement="after" lead="Buffer specification">Specifying a custom buffer format.</caption>
<image xlink:href="RawBuffer"/>
</mediaLink>
<para>Below are listed the basic types. You can append a number to each of these to make an N-wide
vector (e.g. ushort4 or float3). You can also specify matrices as float3x4. By default matrices
are column major, but you can change this by prepending row_major as you would in hlsl.</para>
<list class="bullet">
<listItem><para>uint - unsigned 32bit integer</para></listItem>
<listItem><para>bool - unsigned 32bit integer (this is the format for hlsl bools)</para></listItem>
<listItem><para>int - signed 32bit integer</para></listItem>
<listItem><para>ushort - unsigned 16bit integer</para></listItem>
<listItem><para>short - signed 16bit integer</para></listItem>
<listItem><para>ubyte - unsigned 8bit integer</para></listItem>
<listItem><para>byte - signed 8bit integer</para></listItem>
<listItem><para>double - 64bit floating point</para></listItem>
<listItem><para>float - 32bit floating point</para></listItem>
<listItem><para>half - 16bit floating point</para></listItem>
</list>
<para>There are also some non-hlsl types for displaying other formats which don't have a corresponding native
hlsl type</para>
<list class="bullet">
<listItem><para>unormb - 8bit unsigned normalised value</para></listItem>
<listItem><para>unormh - 16bit unsigned normalised value</para></listItem>
<listItem><para>unormf - 32bit unsigned normalised value</para></listItem>
<listItem><para>snormb - 8bit signed normalised value</para></listItem>
<listItem><para>snormh - 16bit signed normalised value</para></listItem>
<listItem><para>snormf - 32bit signed normalised value</para></listItem>
<listItem><para>uintten - 4 component unsigned integer format, packed as 10:10:10:2</para></listItem>
<listItem><para>unormten - 4 component unsigned normalised format, packed as 10:10:10:2</para></listItem>
</list>
</content>
</section>
</developerConceptualDocument>
</topic>
+219
View File
@@ -0,0 +1,219 @@
<?xml version="1.0" encoding="utf-8"?>
<topic id="D1612D25-C8BA-4349-9CE2-1E57D60F98C5" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<autoOutline />
<para>The Capture Dialog (which doubles as the attach-to-process dialog) is the
single point where programs are launched and logfiles are captured to disk.</para>
<para>After launching a capture a connection dialog will open to allow you to manage
and open any captures you take. See <link xlink:href="6f4dad92-3db3-448f-9f1a-79af65f74492" /> for more details.</para>
<alert class="note">
<para>NOTE: The Load Settings and Save Settings buttons on this dialog refer to loading and saving the set
of settings and options configured on this dialog. They do <legacyItalic>not</legacyItalic> refer to loading
and saving the logs produced from capturing - that is done from the File menu.</para>
</alert>
</introduction>
<section address="capturing">
<title>Capturing</title>
<content>
<para>To capture a program you simply need to provide the details of the application
to be launched.</para>
<para>The Program section of the dialog prompts for the executable to be launched,
the working directory, and any command-line arguments to be passed to the program.</para>
<mediaLink>
<caption placement="after" lead="Program Capture">Configuring and launching an exe directly from RenderDoc.</caption>
<image xlink:href="CapturePathCmdline"/>
</mediaLink>
<para>The "..." buttons next to the executable path and working directory can be used to
browse through the file system. By default if the working directory box is left empty
then the directory containing the executable will be used as the working directory.</para>
<para>When you are ready to capture simply click the <command>Capture</command> button in the bottom right.</para>
<para>If you wish to save these particular settings you can click <command>Save</command> to save them to a .cap file.
This .cap file can either be loaded in manually, accessed through the <command>Recent Captures</command> menu.
The .cap file can be associated with RenderDoc, and if so launching RenderDoc from this file will automatically load
the capture settings. If "Auto start" is checked then double clicking on the .cap file will immediately trigger
a capture with the given settings.</para>
<alert class="note">
<para>The process will be launched with the same permissions and by the same user as RenderDoc was launched.
If your process requires specific permissions (such as administrator permissions) you will need to
launch RenderDoc with these permissions.</para>
</alert>
</content>
</section>
<section address="attaching">
<title>Inject into Process</title>
<content>
<para>When invoked through <command>Inject into Process</command> the capture dialog modifies itself
to give a list of processes running on the target system.</para>
<para>A list of processes is fetched once when the dialog is opened, but this can be refreshed
by clicking on the refresh button below the list. Select the process you would like to attach to
and click Attach.</para>
<mediaLink>
<caption placement="after" lead="Attaching">Attaching to an already-running process via RenderDoc.</caption>
<image xlink:href="Attaching"/>
</mediaLink>
<alert class="caution">
<para>The process <legacyBold>must not</legacyBold> have invoked or initialised the API to be used,
as this will be too late for RenderDoc to hook and capture it. At best RenderDoc will not capture, at worst
it may cause crashes or undefined behaviour. Only attach to processes you can guarantee are early
enough in their initialisation that they have not used the graphics API.</para>
</alert>
</content>
</section>
<section address="options">
<title>Capture Options</title>
<content>
<para>Several capture options are available to configure how RenderDoc works while injected into
the target application, as well as affecting the resultant captures. Most of these will work
fine with the defaults, but some may need to be configured to your tastes.</para>
<para>Some of these options are API-specific and will not apply when using other APIs than
they are intended, although most are generic in some fashion - the exact implementation may
vary by API.</para>
<table>
<tableHeader>
<row>
<entry><para>Name</para></entry>
<entry><para>Explanation</para></entry>
<entry><para>Default Setting</para></entry>
</row>
</tableHeader>
<row>
<entry><para>Allow Fullscreen</para></entry>
<entry><para>Allow Fullscreen simply means that RenderDoc will not interfere with any attempt
by the application to switch into an exclusive fullscreen video mode. While debugging sometimes
this can be awkward as you may wish to quickly switch to your debugger or another program.</para>
<para>If this option is unchecked, RenderDoc will attempt to modify any such attempt to an equivalent
windowed mode.</para></entry>
<entry><para>Enabled</para></entry>
</row>
<row>
<entry><para>Allow VSync</para></entry>
<entry><para>Allow VSync functions very similarly to Allow Fullscreen. When disabled, RenderDoc
will prevent any attempt to VSync by the application. This can be useful given that there is a
certain degree of inevitable overhead from running with RenderDoc and VSync can amplify that.</para></entry>
<entry><para>Enabled</para></entry>
</row>
<row>
<entry><para>Seconds Delay</para></entry>
<entry><para>This option causes RenderDoc to stall for a defined number of seconds immediately after
launching the process. Most commonly this is used so that you can launch a program in RenderDoc
and immediately attach a traditional debugger before any significant code is executed.</para>
<para>This can be useful e.g. when early initialisation needs to be debugged.</para></entry>
<entry><para>0 Seconds (Disabled)</para></entry>
</row>
<row>
<entry><para>Collect Callstacks</para></entry>
<entry><para>This option will cause RenderDoc to save a callstack from user code into the API at every
API call during the frame being captured. This can then be resolved later and used to determine where
the application is calling each API call. More details can be found in:
<link xlink:href="14048aef-0053-4e38-98cd-541f4d15d12e" />.</para></entry>
<entry><para>Disabled</para></entry>
</row>
<row>
<entry><para>Only Drawcall Callstacks</para></entry>
<entry><para>This option modifies the above capturing of callstacks to only be saved for drawcall-type
API calls. This can reduce the CPU load, as well as file-size and memory overhead of capturing callstacks
for every API call which may not be desired. Only valid if Collect Callstacks is enabled.</para></entry>
<entry><para>Disabled</para></entry>
</row>
<row>
<entry><para>Create Debug Device</para></entry>
<entry><para>Create Debug Device causes RenderDoc to enable the API's built-in debugging, and where
possible serialise this out and include it in the logfile for later inspection. e.g. on D3D11 this will
activate the D3D debug layer and save out any messages, which can later be viewed in the
<link xlink:href="1f098896-0e60-485a-b879-900a4a320b80" /> window.
The overhead from enabling this option is largely the same as the overhead of enabling the
debug device without RenderDoc involved.</para></entry>
<entry><para>Disabled</para></entry>
</row>
<row>
<entry><para>Cache State Objects</para></entry>
<entry><para>In D3D11 creating a state object with the same descriptor as one that already exists
will simply return a pointer to the existing state object, with a reference count added. Given that
creation and destruction in RenderDoc has a certain overhead, when this option is enabled RenderDoc will
hold onto a reference to freed state objects in case they are likely to be re-allocated soon after.</para>
<para>This will reduce churn and overhead with minimal impact to the application, and it's recommended to
leave this enabled unless you have specific problems or want to remove this optimisation.</para></entry>
<entry><para>Enabled</para></entry>
</row>
<row>
<entry><para>Hook into Children</para></entry>
<entry><para>This option causes RenderDoc to hook into CreateProcess and intercept any calls to it from
the target application. When this option is enabled those child processes will be injected with RenderDoc
in the same way as the parent - which can be useful if you must launch your program through a launcher
or level of indirection and still wish to use RenderDoc with one of the child processes.</para></entry>
<entry><para>Disabled</para></entry>
</row>
<row>
<entry><para>Save All Initials</para></entry>
<entry><para>RenderDoc will attempt to save overhead and particularly logfile size by omitting the initial
contents of 2D textures that it believes will be unnecessary. Typically these textures are render targets
or depth buffers that will be written to and fully covered in the course of the frame before they are
ever read, and so saving their initial contents is unnecessary.</para>
<para>In some cases this detection will be wrong, such as targets that are partially written such as pools,
or if a target is accumulated to via blend modes. When this is the case, enabling Save All Initials will
force RenderDoc to save these textures regardless of any auto-detection.</para>
<alert class="note">
<para>Multisampled textures will not have their initial contents saved regardless of the value of
this option.</para>
</alert>
</entry>
<entry><para>Disabled</para></entry>
</row>
<row>
<entry><para>Ref All Resources</para></entry>
<entry><para>One method RenderDoc uses to keep logfile sizes down is to only include the referenced
dependencies of a frame within a capture. This means that even if 100 textures are allocated and present,
if 50 of them are never bound to the pipeline or otherwise referenced then they will not be included
in the logfile. Enabling this option will cause RenderDoc to include all live resources at the time of
capture regardless of whether they are used or not.</para></entry>
<entry><para>Disabled</para></entry>
</row>
<row>
<entry><para>Capture All Cmd Lists</para></entry>
<entry><para>By default RenderDoc only begins capturing when you hit the capture key - any commands issued
before this point are not available and so if a deferred command list was created before you hit capture
and replayed after, it would not be available and RenderDoc would have to fall back and capture again in the
hopes that next frame everything will be available.</para>
<para>If the application creates a command list early and replays it indefinitely without recreating it,
RenderDoc will essentially have missed its chance to capture it by the time you hit the capture key. Enabling
this option will cause RenderDoc to pre-emptively capture all command lists just in case they are used.</para>
<alert class="caution">
<para>This may have a significant performance hit.</para>
</alert>
</entry>
<entry><para>Disabled</para></entry>
</row>
<row>
<entry><para>Auto start</para></entry>
<entry><para>This option is slightly different from the others in that it doesn't change anything for an
immediate capture. When a .cap settings file is saved with the details of a particular capture, if this
option is enabled then loading a .cap file from the command line (i.e. most commonly from a file association)
will trigger a capture as soon as RenderDoc loads. This is useful for saving a common capture setting and
running it with just one click.</para></entry>
<entry><para>Disabled</para></entry>
</row>
<row>
<entry><para>Queue Capture of Frame</para></entry>
<entry><para>This option allows you to queue up a precise capture of a given frame number after the program has started.</para></entry>
<entry><para>Disabled</para></entry>
</row>
</table>
</content>
</section>
<relatedTopics>
<link xlink:href="f2f4fbfa-6127-4831-84e7-07309bd85908" />
<link xlink:href="14048aef-0053-4e38-98cd-541f4d15d12e" />
</relatedTopics>
</developerConceptualDocument>
</topic>
+28
View File
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<topic id="1f098896-0e60-485a-b879-900a4a320b80" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<para>The Debug Messages window shows messages from the API including warnings about performance
issues or concerns about potential hazards, as well as errors on invalid use of the API.</para>
</introduction>
<section address="capture">
<title>Capturing with debug messages included</title>
<content>
<para>To include these debug messages in a log, check on the "Create Debug Device" option in
the capture options. For more information see <link xlink:href="D1612D25-C8BA-4349-9CE2-1E57D60F98C5" />.</para>
</content>
</section>
<section address="window">
<title>Debug Messages</title>
<content>
<para>This window is fairly simple. Each message retrieved from the api will be listed on
its own row showing the event ID that triggered the message, along with a severity and category.</para>
<para>Double clicking on any row will take you to the corresponding event ID in the event browser.</para>
<mediaLink>
<caption placement="after" lead="Debug Messages">The Debug Messages window showing some API messages.</caption>
<image xlink:href="DebugMessages"/>
</mediaLink>
</content>
</section>
</developerConceptualDocument>
</topic>
+129
View File
@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<topic id="16D2B42E-65B0-40D1-AB91-AD2B156F5DA0" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<para>The Event Browser is the primary method of browsing the frame and selecting
different drawcalls. It displays the user-annotated hierarchical display of
sections.</para>
</introduction>
<section address="annotation">
<title>Annotating your frame</title>
<content>
<para>The Event Browser becomes most useful when the application has user-defined
annotations of sections and subsections of the frames, to allow for a more logical
and ordered browsing of the frame.</para>
<para>Doing this is API and platform specific. Example code for D3D11 is included
below, using the D3DPERF library that is defined in d3d9.lib, which can still be used
in D3D11. (The newer ID3DUserDefinedAnnotation API is also supported).</para>
<code language="cpp">
D3DPERF_BeginEvent(0xffffffff, L"Start of example");
D3DPERF_BeginEvent(0xff00ff00, L"Sub section");
// events inside the subsection
D3DPERF_EndEvent();
// events outside the subsection
D3DPERF_EndEvent();
</code>
<para>This will generate a section of the frame with a subsection that includes some events,
and then some further events that are siblings of the subsection.</para>
</content>
</section>
<section address="columns">
<title>Selecting available columns</title>
<content>
<para>By default, the columns in the event browser are EID and Name. Name cannot be removed as
it contains the tree, but otherwise the columns can be customised both to hide/display or
reorder and resize.</para>
<para>To select which columns should be visible, right click the header or click the
<mediaLinkInline><image xlink:href="timeline_marker"/></mediaLinkInline> select columns button.</para>
<para>To rearrange the columns simply click and drag on the header.</para>
<alert class="note">
<para>Note that when timing drawcalls the duration column will automatically be added to display the data.</para>
</alert>
</content>
</section>
<section address="columns">
<title>Timing drawcalls</title>
<content>
<para>To time the GPU duration of each drawcall, click the timer button <mediaLinkInline><image xlink:href="time"/></mediaLinkInline></para>
<para>This will automatically run a process to get the time of each drawcall and display it in the duration column,
which will be added if necessary.</para>
<para>You can configure which time unit is used for the duration column on the fly in the
<link xlink:href="B1826EEE-2ED1-44E4-8202-37CD8B3FEEB5" /></para>
</content>
</section>
<section address="browsing">
<title>Browsing the frame</title>
<content>
<para>The event browser is primarily intended as a tool to browse through the frame. Events
are listed as entries in the browser and the hierarchical labels mentioned above become
tree nodes.</para>
<para>The currently selected event is highlighted and indicated with a green flag
<mediaLinkInline><image xlink:href="GreenFlag"/></mediaLinkInline>. This is the event
that RenderDoc is inspecting and is reflected in all the other windows of the UI.</para>
<mediaLink>
<caption placement="after" lead="Current Event">The Event browser showing several sections and the current event.</caption>
<image xlink:href="QuickStart4"/>
</mediaLink>
<para>The EID column indicates the event ID of the drawcall listed. Event IDs are
assigned starting from 1 and increase every time an API call is made - for this
reason drawcall EIDs are not necessarily contiguous.</para>
<para>Simply clicking on a different event will select it as current, and selecting
a parent node with some child events will act as if the final child is selected -
in other words selecting a node with several children will show the results of all
children having happened.</para>
<para>You can also use keyboard shortcuts to browse through the frame. Pressing up or
down arrow key will move up and down through the visible elements, skipping over any
sections which are collapsed. These keys will move into and out of a sub-section into
the next sibling afterwards - essentially going straight up and down as if there is
not a tree and it is a straight list.</para>
<para>The left and right arrows go into and out of hierarchy levels. When within a level
pressing left will jump to the parent node of the current level. Pressing left again
will collapse that node, and so on. Pressing right will (if on a node with children)
expand that node.</para>
</content>
</section>
<section address="searching">
<title>Searching and Jumping</title>
<content>
<para>There are two other controls available in the Event Browser to aid in navigating
the frame.</para>
<para>Pressing <command>Ctrl-F</command> will open the find-event toolbar
<mediaLinkInline><image xlink:href="find"/></mediaLinkInline>. This toolbar
allows you to type in a partial text filter that will be matched against both labels
and drawcall events. The find will be executed when you press enter, although you can then
adjust the text and re-search if you wish.</para>
<para>If the event found lies inside an unexpanded section, the sections will be
expanded until the matching event is visible.</para>
<para>Matching events will be highlighted with a find icon
<mediaLinkInline><image xlink:href="find"/></mediaLinkInline>, and pressing
enter repeatedly will jump between matching events.</para>
<para>The find toolbar isn't dismissed until you press escape in the text box, or click the close button
<mediaLinkInline><image xlink:href="cross"/></mediaLinkInline>.</para>
<para>You can also jump up and down between find results with the
previous <mediaLinkInline><image xlink:href="stepprev"/></mediaLinkInline>
and next <mediaLinkInline><image xlink:href="stepnext"/></mediaLinkInline>
buttons.</para>
<mediaLink>
<caption placement="after" lead="Highlighted Results">The results of a find are highlighted with an icon.</caption>
<image xlink:href="FindResults"/>
</mediaLink>
<para>Pressing <command>Ctrl-G</command> will open the jump to EID toolbar. This allows
you to type in an EID and jump straight there, expanding nodes as necessary. If the EID
typed doesn't exist in the list of drawcalls, the closest matching EID will be jumped
to.</para>
<para>When you hit enter to jump to an EID, the toolbar closes and if you wish to jump again
you must press <command>Ctrl-G</command> again</para>
<mediaLink>
<caption placement="after" lead="Jumping around">The jump-to-EID toolbar prompting for an event.</caption>
<image xlink:href="JumpEID"/>
</mediaLink>
</content>
</section>
</developerConceptualDocument>
</topic>
+108
View File
@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="utf-8"?>
<topic id="6f4dad92-3db3-448f-9f1a-79af65f74492" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<autoOutline />
<para>The Live capture window opens up when you launch a capture of a program, as well as when
you attach to an existing program.</para>
</introduction>
<section address="attaching">
<title>Attaching to an existing instance</title>
<content>
<para>
After you've launched a program through RenderDoc and its hooks are added you can freely disconnect
(by closing the live capture window) or close the main UI. You can then connect to this again later,
either from the same computer or another computer connecting over the network.
</para>
<para>
To connect to an existing hooked program, select Attach to Running Instance from the File menu. This opens up
the attach window that allows you to select a remote host to connect to. By default localhost is already
in the list, but you can add and remove other hosts.
</para>
<alert class="caution">
<para>Please note that none of the connections RenderDoc makes or uses are encrypted or protected, so if this is a
concern you should look into securing the connections by hand.</para>
</alert>
<mediaLink>
<caption placement="after" lead="Remote Hosts">Attaching to a running instance either locally or remotely.</caption>
<image xlink:href="AttachInstance"/>
</mediaLink>
<para>
When the window opens, when you add a new host or when you click refresh then the hosts will be queried
across the network to see if a connection exists. While this is in progress the host will be listed in
italics and with a busy icon.
</para>
<para>
Once a host has been scanned, if any instances are found then that host can be expanded to see the list, and
details are listed about each instance. The name is OS-dependent but is usually the executable name. The API
name is listed, as well as the username of any user that is already connected.
</para>
<para>
When you click connect, a live capture window will be opened up - just the same as the window that is automatically
opened when you start a program. Any captures that have already been made before you connect will then populate.
</para>
<alert class="note">
<para>If you connect to a running instance, any existing user will be kicked off. Just seeing the instances running on
a host will not.</para>
</alert>
</content>
</section>
<section address="multicap">
<title>Capture Connection window</title>
<content>
<para>
When a capture is launched (or attached to) the connection window is opened in the main UI. If you
end up only taking one capture and closing the program afterwards the connection window will automatically
close - likewise if you take no captures at all. These cases don't need the management options the connection
window provides.
</para>
<para>
In addition to managing captures that have been taken, you can also trigger a capture (optionally with a
countdown timer).
</para>
<mediaLink>
<caption placement="after" lead="Connection Window">Viewing multiple captures taken in a program.</caption>
<image xlink:href="MultipleCaptures"/>
</mediaLink>
<para>
In this example we have a connection window open to the CascadedShadowMaps11 sample from the DirectX SDK.
Two captures have been made and we can see their thumbnails to help distinguish between them. This is visible
at any point, regardless of whether you have close the program or not - you can simply switch back to RenderDoc
while it's running.
</para>
<alert class="note">
<para>Note, if you have remotely connected you will need to wait while the captures copy across the network
to your PC, after which point everything behaves the same as a local capture.</para>
</alert>
<para>
From here you can save these captures out - as currently they are only temporary copies that will be
cleaned up on close. You can also manually delete any capture you wish to discard.
</para>
<para>
Double clicking on any capture will close any current open capture in the RenderDoc UI, and open up that
capture for inspection. You may also right click or use the drop-down menu on the open button to
launch a new instance of RenderDoc for viewing the log. This is mostly useful if you want to compare two
captures side-by-side easily.
</para>
<mediaLink>
<caption placement="after" lead="New instance">Launch new RenderDoc instance to open this capture.</caption>
<image xlink:href="OpenCapNewInstance"/>
</mediaLink>
</content>
</section>
</developerConceptualDocument>
</topic>
+173
View File
@@ -0,0 +1,173 @@
<?xml version="1.0" encoding="utf-8"?>
<topic id="B1826EEE-2ED1-44E4-8202-37CD8B3FEEB5" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<autoOutline />
<para>The options window contains various advanced or niche settings that configure
the analysis UI.</para>
</introduction>
<section address="options">
<title>Options</title>
<content>
<para>Below each tab of the options window is detailed with explanations of the
given settings.</para>
<para>Some settings may not be saved until the application is closed, although
most will come into immediate effect.</para>
<para>The settings are contained in <codeInline>%APPDATA%\RenderDoc\UI.config</codeInline> if you wish to
back up or reset these settings.</para>
</content>
</section>
<section address="general">
<title>General options</title>
<content>
<table>
<tableHeader>
<row>
<entry><para>Name</para></entry>
<entry><para>Explanation</para></entry>
<entry><para>Default Setting</para></entry>
</row>
</tableHeader>
<row>
<entry><para>Associate .rdc with RenderDoc</para></entry>
<entry><para>This button will elevate RenderDoc to administrator privileges temporarily, and
associate the .rdc file extension with RenderDoc. After doing this double clicking any .rdc file
will open it in a new instance of RenderDoc.</para></entry>
<entry><para></para></entry>
</row>
<row>
<entry><para>Associate .cap with RenderDoc</para></entry>
<entry><para>This button will elevate RenderDoc to administrator privileges temporarily, and
associate the .cap file extension with RenderDoc. After doing this double clicking any .cap file
will open a new instance of RenderDoc and show the capture dialog with the settings contained inside.</para>
<para>If the setting "Auto Start" is enabled, RenderDoc will then immediately trigger a capture of
the target executable.</para></entry>
<entry><para></para></entry>
</row>
<row>
<entry><para>Minimum decimal places on float values</para></entry>
<entry><para>Defines the smallest number of decimal places to display on a float, padding with
0s.</para>
<para>Examples:</para>
<para>With a value of 2, <codeInline>0.1234f</codeInline> will be displayed as <math>0.1234</math></para>
<para>With a value of 2, <codeInline>1.0f</codeInline> will be displayed as <math>1.00</math></para>
<para>With a value of 6, <codeInline>0.1234f</codeInline> will be displayed as <math>0.123400</math></para>
<para>With a value of 6, <codeInline>1.0f</codeInline> will be displayed as <math>1.000000</math></para></entry>
<entry><para>2</para></entry>
</row>
<row>
<entry><para>Maximum significant figures on decimals</para></entry>
<entry><para>Defines the most significant figures to display after the decimal place on
floating point numbers.</para>
<para>Examples:</para>
<para>With a value of 5, <codeInline>0.123456789f</codeInline> will be displayed as <math>0.12345</math></para>
<para>With a value of 5, <codeInline>1.0f</codeInline> will be displayed as <math>1.00</math></para>
<para>With a value of 10, <codeInline>0.123456789f</codeInline> will be displayed as <math>0.123456789</math></para>
<para>With a value of 10, <codeInline>1.0f</codeInline> will be displayed as <math>1.00</math></para></entry>
<entry><para>5</para></entry>
</row>
<row>
<entry><para>Negative exponential cutoff value</para></entry>
<entry><para>Any floating point numbers that are below <math>E-v</math> for this value <math>v</math>
will be displayed in scientific notation rather than as a fixed point decimal.</para>
<para>Examples:</para>
<para>With a value of 5, <codeInline>0.1234f</codeInline> will be displayed as <math>0.1234</math></para>
<para>With a value of 5, <codeInline>0.000001f</codeInline> will be displayed as <math>1.0E-6</math></para>
<para>With a value of 10, <codeInline>0.1234f</codeInline> will be displayed as <math>0.1234</math></para>
<para>With a value of 10, <codeInline>0.000001f</codeInline> will be displayed as <math>0.000001</math></para></entry>
<entry><para>5</para></entry>
</row>
<row>
<entry><para>Positive exponential cutoff value</para></entry>
<entry><para>Any floating point numbers that are larger than <math>E+v</math> for this value <math>v</math>
will be displayed in scientific notation rather than as a fixed point decimal.</para>
<para>Examples:</para>
<para>With a value of 7, <codeInline>8000.5f</codeInline> will be displayed as <math>8005.5</math></para>
<para>With a value of 7, <codeInline>123456789.0f</codeInline> will be displayed as <math>1.2345E8</math></para>
<para>With a value of 2, <codeInline>8000.5f</codeInline> will be displayed as <math>8.0055E3</math></para>
<para>With a value of 2, <codeInline>123456789.0f</codeInline> will be displayed as <math>1.2345E8</math></para></entry>
<entry><para>7</para></entry>
</row>
<row>
<entry><para>Allow periodic anonymous update checks</para></entry>
<entry><para>Every couple of days RenderDoc will send a single web request to a server to see if a new version
is available and let you know about it. The only information transmitted is the version of RenderDoc that is running.</para>
<para>If you would prefer RenderDoc does not ever contact an external server, disable this checkbox. If you do this it's
recommended that you manually check for updates as new versions will be made available regularly with bugfixes.</para></entry>
<entry><para>Enabled</para></entry>
</row>
</table>
</content>
</section>
<section address="texture">
<title>Texture Viewer options</title>
<content>
<table>
<tableHeader>
<row>
<entry><para>Name</para></entry>
<entry><para>Explanation</para></entry>
<entry><para>Default Setting</para></entry>
</row>
</tableHeader>
<row>
<entry><para>Reset Range on changing selection</para></entry>
<entry><para>When changing texture from one to another, when this option is enabled the range
control will reset itself to [0, 1]. This will happen between any two textures, and going back
and forth between two textures will also reset the range.</para></entry>
<entry><para>Disabled</para></entry>
</row>
</table>
</content>
</section>
<section address="shader">
<title>Shader Viewer options</title>
<content>
<table>
<tableHeader>
<row>
<entry><para>Name</para></entry>
<entry><para>Explanation</para></entry>
<entry><para>Default Setting</para></entry>
</row>
</tableHeader>
<row>
<entry><para>Rename disassembly registers</para></entry>
<entry><para>This option tries to make the disassembly of shaders easier to read by substituting
variable names where available in for constant register names.</para></entry>
<entry><para>Enabled</para></entry>
</row>
</table>
</content>
</section>
<section address="shader">
<title>Event Browser options</title>
<content>
<table>
<tableHeader>
<row>
<entry><para>Name</para></entry>
<entry><para>Explanation</para></entry>
<entry><para>Default Setting</para></entry>
</row>
</tableHeader>
<row>
<entry><para>Time unit used for event browser timings</para></entry>
<entry><para>This option allows you to select the unit that will be shown in the duration column
in the event browser when you time individual drawcalls.</para>
<para>Seconds through to nanoseconds are supported.</para></entry>
<entry><para>Enabled</para></entry>
</row>
<row>
<entry><para>Hide empty marker sections</para></entry>
<entry><para>Marker sections that contain no API calls or drawcalls will be completely removed.
This also applies to the Timeline Bar.</para>
<para>This option only applies itself the next time you load a log.</para></entry>
<entry><para>Disabled</para></entry>
</row>
</table>
</content>
</section>
</developerConceptualDocument>
</topic>
+55
View File
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<topic id="A44E2304-6C11-451D-89C4-0A7397F5D1C6" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<para>The Pipeline Viewer is an information dense but simple window
in RenderDoc. It shows all of the stateful settings of the graphics pipeline, including
bound resources, rasterizer settings, etc.</para>
</introduction>
<section address="pipeline">
<title>Pipeline flowchart</title>
<content>
<para>At the top of the Pipeline Viewer is the pipeline flowchart - this shows the
high-level block level diagram of the graphics pipeline.</para>
<para>Each block is a separate page which contains the relevant state and contents
for that piece of the graphics pipeline, with specific details varying by API
and the type of data to be displayed.</para>
<para>The currently selected block is outlined with red, and the page in view reflects
the contents of that section of the pipeline. Light grey parts of the pipeline are
those which are currently active and participating in this drawcall. Dark grey parts
of the pipeline are not present and can be considered pass-through/do-nothing.</para>
<mediaLink>
<caption placement="after" lead="Pipeline">Pictured here, the high-level parts of the D3D11 Pipeline.</caption>
<image xlink:href="PipelineBar"/>
</mediaLink>
<alert class="note">
<para>In D3D11, the Stream-Out stage is available under the Geometry Shader block, with the buffers
being used for stream-out shown.</para>
</alert>
</content>
</section>
<section address="display">
<title>Pipeline Section Display</title>
<content>
<para>The pipeline state viewer always displays the state of the pipeline after the execution of the
drawcall, as with the other viewers in RenderDoc.</para>
<para>Any resources that are bound to the pipeline can be opened in more detailed viewers, such as
vertex buffers, constant buffers and textures. More details of this process can be found in the page
<link xlink:href="7A620DF5-332E-44CA-8FD5-9E47A9C4CC3E" />.</para>
<para>The pipeline view attempts to only show what is relevant, and not all possible stateful data.
To do this (when available) it uses shader reflection data to only display slots which are actually
in use by the shaders, and omit any that are unused. This can be overridden with the Show Disabled
Items <mediaLinkInline><image xlink:href="page_white_delete"/></mediaLinkInline> button.</para>
<para>Likewise it will omit any slots which are completely empty (and also unused), and this behaviour
can be overridden with the Show Empty Items <mediaLinkInline><image xlink:href="page_white_database"/></mediaLinkInline> button.</para>
<para>When showing disabled or empty entries, they will either be in <legacyItalic>italics</legacyItalic>
or on a dark red background respectively.</para>
</content>
</section>
<relatedTopics>
<link xlink:href="7A620DF5-332E-44CA-8FD5-9E47A9C4CC3E" />
</relatedTopics>
</developerConceptualDocument>
</topic>
+337
View File
@@ -0,0 +1,337 @@
<?xml version="1.0" encoding="utf-8"?>
<topic id="2c540574-0b81-4a40-8119-ba0283fddf41" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<autoOutline />
<para>The texture viewer is likely the most intuitive window in RenderDoc and commonly
the most regularly used. It displays the contents of any texture in its current state
at the given event, as well as providing controls to adjust and inspect it in different
ways.</para>
</introduction>
<section address="overview">
<title>Overview</title>
<content>
<para>The texture viewer consists of a couple of different sections, which will be
outlined here.</para>
<para>Several specific techniques or features used within the texture viewer have their
own separate pages that go into more detail. You might find more useful information there
if they cover what you are looking for:
<link xlink:href="32C47E20-0FA2-4F52-B33A-4440EBCCBCE4" />,
<link xlink:href="F1C1E449-55ED-46FE-BBFD-11D1A0511501" />,
<link xlink:href="a00964a1-733f-4288-a79e-c28238bc6018" />
</para>
<mediaLink>
<caption placement="after" lead="Texture Viewer">A labelled diagram showing the different parts of the texture viewer.</caption>
<image xlink:href="LabelledTexViewer"/>
</mediaLink>
</content>
</section>
<section address="main">
<title>Main Texture Display</title>
<content>
<para>The main texture display takes up the largest portion of the window, and is simply a container for the
textures to display.</para>
<para>It is a tabbed control and although one tab is always present showing the currently followed texture
bound to the pipeline, other locked tabs can be opened up showing a single resource. More details are available
on the page <link xlink:href="32C47E20-0FA2-4F52-B33A-4440EBCCBCE4" />.</para>
<para>The mouse wheel can be used to zoom in and out of the texture. When zoomed in, holding the left mouse
button and dragging will pan the image from side to side.</para>
<para>While over the image the status bar will show the current pixel that the mouse
is over. Clicking or holding the right mouse button will pick this pixel and show its information in the status
bar. More information is available on the page <link xlink:href="F1C1E449-55ED-46FE-BBFD-11D1A0511501" />.</para>
</content>
</section>
<section address="status">
<title>Information Status Bar</title>
<content>
<para>The status bar below the main texture display contains information on the currently visible texture.</para>
<list class="bullet">
<listItem><para>The name (if available - if not a default name will be used).</para></listItem>
<listItem><para>Dimensions - Width, height, depth and array size as applicable.</para></listItem>
<listItem><para>Mip Count.</para></listItem>
<listItem><para>MSAA sample count and quality, if applicable.</para></listItem>
<listItem><para>Format - e.g. RGB8. The exact phrasing of this will vary by API.</para></listItem>
</list>
<para>After this information there are a few displays that are pixel-based. The pixel that is under the cursor
is displayed as a colour swatch, followed by its co-ordinates. Then any
<link xlink:href="F1C1E449-55ED-46FE-BBFD-11D1A0511501">picked pixel</link> is displayed afterwards with its
numeric value displayed.</para>
<mediaLink>
<caption placement="after" lead="Picked Pixels">Detailed information about the current pixel.</caption>
<image xlink:href="RMBStatus"/>
</mediaLink>
</content>
</section>
<section address="thumbs">
<title>Thumbnail Strips</title>
<content>
<para>There are several thumbnail strip panels available, by default they are docked in the same
location such that they are tabbed together, but they can be displayed side by side.</para>
<para>These strips display thumbnails of the resources bound to their respective parts of the
pipeline, to give some context and allow quick preview without having to switch the main
display between these textures.</para>
<para>The texture that the following tab is currently displaying is highlighted in red, and
each thumbnail shows both the slot number and the name of the texture bound at that point.
To follow a given slot simply left click on it.
If the currently followed texture slot is empty (i.e. it was following a texture and then
that slot was unbound) it will show up simply named "Unbound" and with no name or slot number.</para>
<para>Each thumbnail has a context menu available via right click. This menu allows you to open
a locked tab (<link xlink:href="32C47E20-0FA2-4F52-B33A-4440EBCCBCE4">More information</link>),
as well as containing a list of all the uses of this texture - as read-only resource and writable
output. This is similar to the resource display strip on the <link xlink:href="745E3EB5-EB29-4010-BBAB-B11282F4380C" />.
Clicking on any of these entries will jump to the first of the events in the event range listed.</para>
<mediaLink>
<caption placement="after" lead="Thumbnail Menu">Thumbnail context menu with several options.</caption>
<image xlink:href="OpenLockedTab"/>
</mediaLink>
<para>There are also two general options - show disabled and show empty. These behave the same as the
options in the <link xlink:href="A44E2304-6C11-451D-89C4-0A7397F5D1C6" /> window - temporarily overriding
the default behaviour in RenderDoc to only show texture slots that are referenced in the shader.</para>
</content>
</section>
<section address="context">
<title>Pixel Context Display</title>
<content>
<para>The Pixel context display is a small panel by default in the bottom right of the texture viewer.</para>
<para>Whenever a pixel is picked small area of the texture around it is rendered at maximum zoom to this
panel. This gives you some context for the pixels nearby to the one you're picking and allows fine refinement
without needing to zoom in and lose your place in the overall image.</para>
<mediaLink>
<caption placement="after" lead="Pixel context">Pixel context displaying the surrounds of the picked pixel.</caption>
<image xlink:href="PixelContext"/>
</mediaLink>
</content>
</section>
<section address="range">
<title>Visible Range Control</title>
<content>
<para>The visible range or range adaption control is very useful in easing display and inspection of
images with a very narrow range of values, and is necessary for viewing any HDR images as it can be
used to map a larger range down to LDR for display.</para>
<mediaLink>
<caption placement="after" lead="Range control">The range control narrowing the visible range mapped to [0,1] on output.</caption>
<image xlink:href="RangeControl"/>
</mediaLink>
<para>The primary controls are the black point and white point. These are shown in two text boxes at
either side of the main range control. These are the current absolute black and white values - these values
in the input texture are mapped to 0 and 1 respectively on output.</para>
<para>The range control itself has a black point and a white point that can be adjusted simply by clicking and
dragging. These allow finer and more interactive adjustments. These handle only allow you to adjust the extremes
within the range defined by the absolute black and white points in the text box.</para>
<para>There are four other buttons available for control of the range:</para>
<list class="bullet">
<listItem><para><mediaLinkInline><image xlink:href="zoom"/></mediaLinkInline> <ui>Zoom in</ui> -
This button will zoom the extreme values in to whichever fine values have been selected by the draggable handles.</para>
<para>This is primarily useful when starting from some large range and using the handles to drag down to a more reasonable
range, you can click zoom to then reduce the range down to just the one selected, so you can again get fine control.</para>
<mediaLink>
<caption placement="after" lead="Before">The range control before zooming.</caption>
<image xlink:href="BeforeRangeZoom"/>
</mediaLink>
<mediaLink>
<caption placement="after" lead="After">The range control after zooming.</caption>
<image xlink:href="AfterRangeZoom"/>
</mediaLink>
</listItem>
<listItem><para><mediaLinkInline><image xlink:href="wand"/></mediaLinkInline> <ui>Autofit</ui> -
This button automatically fits the range control to the min and max values in any visible channels in the texture.
Oftentimes this is a good starting point for a range, although with some extreme textures it may adjust badly.</para>
<para>Right clicking on this button will cause it to always auto-fit until you disable this. ie. when you move
to another event or another texture, the range will be auto-fit again. This is useful if jumping between events
or textures where the visible ranges are very different.</para></listItem>
<listItem><para><mediaLinkInline><image xlink:href="UndoArrow"/></mediaLinkInline> <ui>Reset</ui> -
Simply resets the range back to the default of [0, 1] - useful for resetting after changing to a new texture where the
range settings aren't applicable.</para></listItem>
<listItem><para><mediaLinkInline><image xlink:href="chart_curve"/></mediaLinkInline> <ui>Histogram</ui> -
This is a toggle switch. When enabled it will change the thin bar of the range control into a thicker bar
that contains a range-value histogram, showing the distribution of values.</para>
<para>The histogram is based on the straight numerical mean of all visible channels, and will update as the
white and black points move.</para>
<mediaLink>
<caption placement="after" lead="Values Histogram">A histogram showing the range distribution of values in the image.</caption>
<image xlink:href="RangeHistogram"/>
</mediaLink></listItem>
</list>
</content>
</section>
<section address="toolbar">
<title>Toolbar</title>
<content>
<para>The toolbar contains most of the tools for selecting which mip, slice, face of
a texture to view as well as how to display it and if any transformations or overlays
should be applied.</para>
<alert class="note">
<para>The visible range/range adaption control is detailed in the section above and will not be covered here.</para>
</alert>
<table>
<tableHeader>
<row>
<entry><para>Control</para></entry>
<entry><para>Explanation</para></entry>
</row>
</tableHeader>
<row>
<entry>
<para><mediaLinkInline><image xlink:href="RGBAChannels"/></mediaLinkInline> Channels selector</para>
<para><mediaLinkInline><image xlink:href="RGBMChannels"/></mediaLinkInline> RGBM mode</para>
<para>
<mediaLinkInline><image xlink:href="CustomDisplay"/></mediaLinkInline>
<mediaLinkInline><image xlink:href="add"/></mediaLinkInline>
<mediaLinkInline><image xlink:href="page_white_edit"/></mediaLinkInline>
<mediaLinkInline><image xlink:href="delete"/></mediaLinkInline>
<link xlink:href="a00964a1-733f-4288-a79e-c28238bc6018">Custom Shader</link></para>
</entry>
<entry><para>This selector switches between displaying standard RGBA channels, RGBM encoding with a custom
multiplier and using a custom visualiser shader.</para>
<para>When in <ui>RGBA</ui> mode, by default only the RGB channels are displayed and alpha is forced to fully opaque.
Each of the channels can be toggled off independently and any combination can be used. Any RGB channel which
is disabled is forced to fully black in the output. When Alpha is enabled, the background will be rendered
with a solid colour or checkerboard pattern to indicate semi-transparent areas.</para>
<para>Also note that when a single channel is displayed solo, the image is rendered as grayscale in that channel
rather than displaying a monochromatic coloured image.</para>
<alert class="tip">
<para>Right clicking on one of the channel buttons in the texture viewer
(R, G, B, A) will either select only that channel, or if it's already the only one
selected it will select all of the others. This is useful e.g. to toggle between viewing
RGB and alpha, or for looking at individual channels in a packed texture or render target.</para>
</alert>
<para>When <ui>RGBM</ui> is selected, the RGB value will be multiplied by the specified multiplier and then by
the alpha value. This is a common encoding used to pack a larger range into an 8-bit RGB image.</para>
<para>With <ui>Custom</ui> selected a dropdown will be populated with any .hlsl files in the
<codeInline>%APPDATA%\renderdoc</codeInline> folder. When choosing a custom shader the raw image will be
passed through this shader before being displayed with the usual controls on the main display.</para>
<para>You can create a new custom shader with the <mediaLinkInline><image xlink:href="add"/></mediaLinkInline> button,
edit a shader with the <mediaLinkInline><image xlink:href="page_white_edit"/></mediaLinkInline> button,
and delete an one with the <mediaLinkInline><image xlink:href="delete"/></mediaLinkInline> button.</para>
</entry>
</row>
<row>
<entry>
<para><mediaLinkInline><image xlink:href="color_wheel"/></mediaLinkInline>
<mediaLinkInline><image xlink:href="crosshatch"/></mediaLinkInline>
Alpha Background
</para>
</entry>
<entry><para>When displaying a texture with alpha channel, the background of the main display changes to make
the semi-transparent sections more obvious. With these two controls you can either choose a checkerboard pattern
<mediaLinkInline><image xlink:href="crosshatch"/></mediaLinkInline> or open a colour picker to choose a solid
colour <mediaLinkInline><image xlink:href="color_wheel"/></mediaLinkInline>.</para>
</entry>
<para>The currently enabled mode will be highlighted.</para>
</row>
<row>
<entry>
<para>Subresource selection <mediaLinkInline><image xlink:href="SubresourceSelect"/></mediaLinkInline></para>
</entry>
<entry><para>The main display of the texture viewer can only display at most a single 2D image at once.</para>
<para>For textures with mip-maps this control allows you to select the mip level to display - the overall size
of the image will remain the same but will be point sampled from the given mip level.</para>
<para>For 3D textures and 2D arrays you can select the slice to display here from the drop-down, and for cubemaps
you can select the face. For cubemap arrays these two controls are combined to show a list of the faces for the first
cubemap, then the second, etc.</para>
</entry>
</row>
<row>
<entry>
<para><mediaLinkInline><image xlink:href="save"/></mediaLinkInline> Save Texture</para>
</entry>
<entry><para>This allows you to save the currently visible texture. Currently only .dds format is supported, and
there are some limitations in the formats that can be saved - e.g. there is no standard way to support multisampled
dds files, so this will fail. Most common formats can be saved to disk in this way.</para>
</entry>
</row>
<row>
<entry>
<para><mediaLinkInline><image xlink:href="wrench"/></mediaLinkInline> Debug a Pixel</para>
</entry>
<entry><para>This button is only enabled after a
<link xlink:href="8a7568ca-6b2c-4873-b8eb-d1ad2aff9629">pixel has been picked</link>.</para>
<para>This will do exactly the same as the button underneath the pixel context display - it will
launch a pixel debugger for the currently picked pixel.</para>
</entry>
</row>
<row>
<entry>
<para><mediaLinkInline><image xlink:href="page_white_link"/></mediaLinkInline> Open Texture List</para>
</entry>
<entry><para>This button opens the texture list of all textures present in the capture. More details can
be seen in <link xlink:href="32C47E20-0FA2-4F52-B33A-4440EBCCBCE4" /></para>
</entry>
</row>
<row>
<entry>
<para>Zoom controls <mediaLinkInline><image xlink:href="ZoomControls"/></mediaLinkInline></para>
</entry>
<entry><para>The zoom controls are fairly self explanatory - a pre-existing zoom value can be chosen
from the drop down or a custom value (clamped to the minimum and maximum zoom) can be entered as a
percentage.</para>
<para>To automatically fit the texture to the space available in the window, regardless of its
dimensions, you can click the <mediaLinkInline><image xlink:href="fit_window"/></mediaLinkInline> Fit
button.</para>
<alert class="note">
<para>As noted above, the mouse scroll wheel in the main display also changes the zoom level.</para>
</alert>
</entry>
</row>
<row>
<entry>
<para>Render Overlay <mediaLinkInline><image xlink:href="OverlaySelect"/></mediaLinkInline></para>
</entry>
<entry><para>This is a powerful tool for quickly diagnosing issues and can be very useful for locating
what you're looking for. Several overlays are available that can be rendered over any texture, although
most of them are only meaningful for currently bound render targets.</para>
<list class="bullet">
<listItem><para><command>Highlight Drawcall</command> will do pretty much as it says. It darkens everything except
the current drawcall which is highlighted in flat colour. This makes whatever is being drawn stand out and can be useful
for seeing where the current object is on screen, especially if rapidly browsing through the frame.</para></listItem>
<listItem><para><command>Wireframe Mesh</command> will render a wireframe mesh of the current drawcall
over the top of the image.</para></listItem>
<listItem><para><command>Depth Test</command> will render an overlay over the drawcall, with red sections covering
any part of the drawcall that never passed the depth test, and green sections covering areas that did pass the
depth test. Note that if the drawcall overdraws itself then as long as at least one pass over a pixel passes the depth test
then that pixel will be green.</para></listItem>
<listItem><para><command>Stencil Test</command> performs similarly to the depth test, but for the stencil test.</para></listItem>
<listItem><para><command>Viewport/Scissor</command> shows a coloured overlay on the image that corresponds to the viewport
and scissor regions.</para></listItem>
<listItem><para><command>NaN/Inf/-ve display</command> will render the image in grayscale (using the typical luminance
calculation - <codeInline>dot(col.xyz, float3(0.2126, 0.7152, 0.0722)).xxx</codeInline>) with red pixels highlighting any
NaNs found, green pixels highlighting any infinities, and blue pixels for any negative values. Note that in any case
where only one or some channels in a multi-channel texture pass, that pixel will still be highlighted (so
<codeInline>{0.5, -1.0, 0.0}</codeInline> would highlight blue).</para></listItem>
<listItem><para><command>Clipping</command> will simply highlight in red any values that are below the current
black point (as defined by the range control - see above), and in green any values above the white point. This can
be useful in identifying invalid ranges if the range control is adjusted correctly, or in combination with a custom
shader visualiser.</para></listItem>
</list>
<alert class="note">
<para>These overlays are all rendered after most image controls are applied. For this reason the range control,
channel controls and custom shaders do not affect the overlays.</para>
</alert>
</entry>
</row>
</table>
</content>
</section>
<relatedTopics>
<link xlink:href="32C47E20-0FA2-4F52-B33A-4440EBCCBCE4" />
<link xlink:href="F1C1E449-55ED-46FE-BBFD-11D1A0511501" />
<link xlink:href="a00964a1-733f-4288-a79e-c28238bc6018" />
</relatedTopics>
</developerConceptualDocument>
</topic>
+81
View File
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<topic id="745E3EB5-EB29-4010-BBAB-B11282F4380C" revisionNumber="1">
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
<introduction>
<autoOutline />
<para>The timeline bar shows an alternate view of the scene to the
<link xlink:href="16D2B42E-65B0-40D1-AB91-AD2B156F5DA0" />. Displaying the scene with
time running as the horizontal axis, although it does not show each section in size
relative to its timing.</para>
</introduction>
<section address="intro">
<title>Introduction</title>
<content>
<para>The timeline bar shows the scene horizontally with the hierarchical frame
markers being expandable from top to bottom.</para>
<para>This alternate view can be a useful way to get an overview of the whole frame,
allowing you to jump around very different parts of the frame.</para>
<para>Given that the timeline bar shows the whole frame it also provides a secondary
function of showing dependencies in a global way. For whichever texture is currently
selected in the texture viewer, the timeline bar shows reads and writes to that texture
throughout the frame. This can be especially useful for render targets that are used
in both ways, as well as simply to see where a given texture is used in a frame
without laboriously searching.</para>
<mediaLink>
<caption placement="after" lead="Timeline Bar">The timeline bar showing a birds-eye view of a typical application.</caption>
<image xlink:href="TimelineBar"/>
</mediaLink>
</content>
</section>
<section address="display">
<title>Timeline Display</title>
<content>
<para>By default the timeline bar views the whole frame, but with the mouse wheel
you can zoom in and out. When zoomed in, you can scroll through the frame with
the horizontal scroll bar.</para>
<para>The timeline bar sizes the sections that it contains to try and make the
frame markers as visible as possible. This attempts to keep the frame browsable
for as long as possible, such that small sections (in time or number of events)
are still visible rather than being crushed to tiny bars.</para>
<para>For this reason the timeline can resize itself when bars are expanded,
as this can reveal new sections which must be allocated enough room. When there
is slack space to be allocated it is given to the sections which have more events
than others.</para>
<para>Underneath expanded sections, a blue pip is rendered for each drawcall-type
event. The currently selected event is shown as a green pip, as well as there being
a light grey vertical line to indicate the current position, such that this is visible
even when the relevant section is not expanded.</para>
<para>Clicking on any section will toggle it between expanded and unexpanded, and
any sections underneath a section which is collapsed will remain in their previous state
but will not be visible.</para>
<para>Left clicking on the timeline will jump to the event underneath that point
on the horizontal display.</para>
</content>
</section>
<section address="usage">
<title>Resource usage Display</title>
<content>
<para>The timeline bar also shows the usage of the currently displayed texture.</para>
<para>Whichever texture is currently displayed in the <link xlink:href="2c540574-0b81-4a40-8119-ba0283fddf41" />
(whether that be a currently bound texture, or a locked tab) will have its usage
laid out across the frame on the timeline bar.</para>
<para>If your textures have their names annotated you will see which texture is being
inspected in the label for the usage bar.</para>
<para>A green arrow will be drawn under each pip that reads from the texture. If the pips
are too close together to resolve the arrow, the arrows will stay distinct and lose the
1:1 association with event pips.</para>
<para>Similarly, a purple arrow will be drawn under pips where the event writes to the
texture. In the case that a resource is bound such that it can be read or written,
the arrow will be half-green, half-purple.</para>
<para>Clear calls will be shown with a light grey.</para>
<para>In cases where the arrows are too close together to show distinctly, they
will not all draw. To see exactly what usage is happening you can zoom into the context
around that area of the frame.</para>
<mediaLink>
<caption placement="after" lead="Resource Usage">The usage bar showing reads and writes to a texture.</caption>
<image xlink:href="ResourceUsage"/>
</mediaLink>
</content>
</section>
</developerConceptualDocument>
</topic>