* The block index may change between capture and replay, so serialising the
index alone is unstable similar to locations. Program initial states already
serialise by name, but if a capture contains a block binding change mid-frame
this could serialise wrongly.
* We need to copy the external-facing m_RenderState into the partial command
buffer's state for partial replay, in case it was modified externally.
* Also when accessing the render state inside a drawcall callback we need to use
the command buffer's local state, not m_RenderState which isn't updated until
the replay completes.
* This helps catches cases where a discarded image is accidentally used and in
many cases may still have valid data. Particularly on Vulkan this is relevant
for DONT_CARE renderpass load and store ops.
* This is a leftover artifact from before we had general extended type support
and double was the only non-32 bit type we handled. Now we support most type
formats so doubles are just CompType::Float with 8 byte width
* E.g. on D3D12 we can debug DXBC shaders but not DXIL shaders. On vulkan this
will allow us to have the UI work better when encountering shaders with
unsupported capabilities or extensions.
- Separate the pixel history copy pixel shader into two separate
shaders, one for colour copy and one for depth
- Allocate and update descriptor sets on demand
- Add another compute shader for pixel history depth copy
* If we don't do this, the application could create a buffer/memory and use it
then destroy it and create another one in the same capture. The driver could
assign the same opaque capture address to both buffers even though they
"overlap" in the capture because they don't overlap in actual execution.
* Slightly artificially extending the life of the resource to the end of the
capture ensures the driver gives them non-overlapping device addresses.