* These resources are destroyed on capture shutdown and possibly out of order
between ASs and ASBs. The ownership tracking is not needed on replay so only
do this during capture.
Added function ShaderObject::Init to initialize VulkanCreationInfo::ShaderObject, and associated shader module.
Co-authored-by: James Sumihiro <james.sumihiro@ntd.nintendo.com>
renderdoc/driver/d3d12/d3d12_dxil_debug.[h,cpp]
Will contain replay helper functions for DXIL debugger including the wrapper for D3D12 API interaction i.e. "DXILDebug::D3D12APIWrapper"
Before, RenderDoc would treat these incomplete pipeline libraries as if
they were complete pipelines, and thus attempt to create pipelines with
incomplete data, producing several validation errors and on some devices
crashes.
For instance, a pipeline library that only contains a vertex or fragment
shader but not input assembly state would use invalid input assembly
state (specifically, VulkanShaderCache::MakeGraphicsPipelineInfo would
use the topology value from VulkanCreationInfo::Pipeline, which is set
to VK_PRIMITIVE_TOPOLOGY_MAX_ENUM (0x7fffffff) if the pipeline has no
input assembly state by VulkanCreationInfo::Pipeline::Init).
Additionally, those pipeline libraries were treated as complete graphics
pipelines, not libraries, as VulkanShaderCache::MakeGraphicsPipelineInfo
removes VK_PIPELINE_CREATE_LIBRARY_BIT_KHR and no
VkGraphicsPipelineLibraryCreateInfoEXT was added to the pNext chain.
RenderDoc already merges the pipeline libraries into complete graphics
pipelines, so there is no reason to recreate the libraries with modified
shaders.
Added logic to return a fake UUID for shader binaries if vkGetShaderBinaryDataEXT is called.
Co-authored-by: James Sumihiro <james.sumihiro@ntd.nintendo.com>
* Most of these - all but a clone - require us to wait for the GPU execution to
finish to get the size of the resulting AS to update our tracking. We issue a
fence from the queue at submission time and then leave the RT manager to check
for updates on each submission to get the latest information.
* This will be needed for copies where the size may not be known on the CPU -
currently for AS builds we know the size directly.
* We also only store the size of an AS not the whole pre-build info since we
don't need the scratch data and it won't be available in full for copies.
DXBC and DXIL Shader Debugger's inherit from "DXBCContainerDebugger : public ShaderDebugger".
"DXBCContainerDebugger" has member variable "isDXIL" to be able to choose if DXIL or DXBC ShaderDebugger is active and allow the correct cast from "ShaderDebugger" to be made.
Added stub of DXILDebug::Debugger in new files "drivers/shaders/dxil/dxil_debug.[h,cpp]"
Default to using DXBC/DXIL disassembly target which shows RD DXIL disassembly
"DXC DXIL" disassembly target shows the DXC style DXIL disassembly which was the default in RenderDoc before the RD DXIL disassembly view existed
Functions that are provided by VK_EXT_shader_object as well as other extensions are declared as an OR of both extensions in the macro.
Added a new feature boolean: m_ShaderObject to WrappedVulkan that can be checked against wherever the dynamic state booleans are used.
Co-authored-by: James Sumihiro <james.sumihiro@ntd.nintendo.com>