From e5835aa6b3e634a8cfea50b07cc79d18156ff1ce Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 8 May 2018 15:08:49 +0100 Subject: [PATCH] Add documentation for shader viewer and ISA disassembly views --- docs/imgs/Screenshots/ShaderDisassembly.png | Bin 0 -> 29110 bytes docs/imgs/Screenshots/ShaderViewer.png | Bin 0 -> 41235 bytes docs/renderdoc.hhk | 4 +++ docs/window/index.rst | 1 + docs/window/settings_window.rst | 2 ++ docs/window/shader_viewer.rst | 27 ++++++++++++++++++++ 6 files changed, 34 insertions(+) create mode 100644 docs/imgs/Screenshots/ShaderDisassembly.png create mode 100644 docs/imgs/Screenshots/ShaderViewer.png create mode 100644 docs/window/shader_viewer.rst diff --git a/docs/imgs/Screenshots/ShaderDisassembly.png b/docs/imgs/Screenshots/ShaderDisassembly.png new file mode 100644 index 0000000000000000000000000000000000000000..4afde128dad8405b3b3e9ee9f9923b6d3becf5e7 GIT binary patch literal 29110 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 N!(>%tN~DbZ{|yPL!fF5j literal 0 HcmV?d00001 diff --git a/docs/imgs/Screenshots/ShaderViewer.png b/docs/imgs/Screenshots/ShaderViewer.png new file mode 100644 index 0000000000000000000000000000000000000000..209ddfa5c166d75ed855060357ef5b485a96745e GIT binary patch literal 41235 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 a{a+Y8CR=zHykw}5e*y_h3zZ3Id;eebq;Wa` literal 0 HcmV?d00001 diff --git a/docs/renderdoc.hhk b/docs/renderdoc.hhk index 95ee1c95d..a1dd87bfe 100644 --- a/docs/renderdoc.hhk +++ b/docs/renderdoc.hhk @@ -362,6 +362,10 @@ +
  • + + +
  • diff --git a/docs/window/index.rst b/docs/window/index.rst index 6459d08eb..00a610335 100644 --- a/docs/window/index.rst +++ b/docs/window/index.rst @@ -9,6 +9,7 @@ Window reference event_browser settings_window pipeline_state + shader_viewer timeline_bar capture_connection debug_messages diff --git a/docs/window/settings_window.rst b/docs/window/settings_window.rst index 679f6e179..b30ecc732 100644 --- a/docs/window/settings_window.rst +++ b/docs/window/settings_window.rst @@ -181,6 +181,8 @@ This option tries to make the disassembly of shaders easier to read by substitut | :guilabel:`Vulkan Disassemblers` +.. _vulkan-disassem: + Here you can configure external tools that disassemble binary SPIR-V into a human-readable representation. Some built-in tools are supported such as SPIRV-Cross and spirv-dis, for these tools if they can be auto-detected they will already be present, and they may be distributed with RenderDoc builds in case a version isn't installed on the system. diff --git a/docs/window/shader_viewer.rst b/docs/window/shader_viewer.rst new file mode 100644 index 000000000..b7d043e52 --- /dev/null +++ b/docs/window/shader_viewer.rst @@ -0,0 +1,27 @@ +Shader Viewer +============= + +The Shader Viewer is used for displaying, editing, and debugging shaders. + +Information about editing shaders can be found in other documents such as :doc:`../how/how_edit_shader` and :doc:`../how/how_custom_visualisation`. + +Debugging shaders is documented in :doc:`../how/how_debug_shader`. + +Overview +-------- + +.. figure:: ../imgs/Screenshots/ShaderViewer.png + + The shader viewer displaying a D3D11 shader + +When opened from the :doc:`pipeline_state` for a given shader stage, the shader viewer display the shader itself as well as the input and output signatures. These signatures form the interface between this shader stage and the previous and next parts of the rendering pipeline. For example a vertex shader will list the fixed function vertex inputs, and the interpolated values that are passed to the next stage. + +The shader viewer displays the source code in the formats that are available. When debugging information has embedded it there will be tabs for each original source file. For APIs using a bytecode IR the disassembly of that bytecode will also be displayed in a separate tab. + +Several different disassembly forms are possible, depending on the API and available plugins and hardware support. Above the disassembly tab will be a drop-down listing the possible representations including hardware specific ISA formats like AMD GCN. + +For Vulkan SPIR-V shaders, you can configure custom disassemblers :ref:`in the settings window ` which allows for various customised disassemblers such as SPIRV-Cross and spirv-dis. + +.. figure:: ../imgs/Screenshots/ShaderDisassembly.png + + The disassembly options for a Vulkan SPIR-V shader