* In a previous update in 2021 many copyright ranges were truncated
accidentally, and some files have been copy-pasted with wrong years. These
dates have been fixed based on git history and original copyright messages.
* For our purposes we can trivially treat this as equal to OpExtInst since we
mostly don't care about forward references and don't use the debug information
where forward references are likely to be generated (class member function
type information).
Added function ShaderObject::Init to initialize VulkanCreationInfo::ShaderObject, and associated shader module.
Co-authored-by: James Sumihiro <james.sumihiro@ntd.nintendo.com>
* This supports capture and replay of mesh draws, shader editing with printf
support, overlays, and pixel shader debugging.
* Not supported yet include the mesh viewer and shader debugging.
* The enums are given after compute, to preserve indices for the normal vertex
pipeline.
* Mesh dispatches are considered a new action type, rather than being bundled
into the `Drawcall` type. This will allow them to be distinguished by API
backends as needed. The UI treats them as drawcalls
* We apply this universally even though it's not relevant to D3D11/GL. It means
a couple of empty array entries but it should not cause any significant
issues.
* Shader messages will be identified by group and thread as with compute
shaders. For mesh shaders there is an additional subdivision to identify them
by task group, since each task group can submit a grid of mesh groups.
* If we don't have BDA support we patch bindings to get our output buffer, but
we need to be sure to always patch all shaders - if some stages can't be
patched properly due to lacking store support, we need to still patch the
bindings.
* We don't change very much, we use uvec2 instead of uint64 for passing the
address in on KHR_BDA, and then do manual carry'd additions for address
offsets.
* Previously with shader feedback being fetched separately we may have had to
replay multiple times to ensure clean results. If we do it as part of the
initial replay on selecting the event this issue goes away and we remove the
extra redundant replay.
* E.g. if a draw is off-screen, the PS might not be invoked. If that's the only
place we expect to see dynamic resources accessed we won't get our valid
marker but the results should still be considered correct.
* We can't debug geometry shaders but we can scroll to them, as long as we have
the primitive. We can't differentiate instances currently without passing that
data through from the VS (and through tessellation, if it exists).
* This also disables the debug and goto buttons for printfs from shader stages
that don't support those operations.
* For draws/dispatches that aren't pure - i.e. modify state that they read from
- we need to be sure we don't replay the action before running it to fetch
feedback. For that reason we need to replay up to the action first, then fetch
feedback.
* We check for errors to try to catch them as soon as possible, and early-out
return even in the middle of functions. The idea being even if this leaves us
in a weird state we won't get called again as the replay controller will
detect the error and substitute out a dummy driver.