Need to recreate the EI command signature using the same root signature that is is bound i.e. the modified root signature which includes the resources for the shader feedback analysis
This only needs to be done if the EI command signature modifies the root arguments i.e. setting root constants, updating bindings
Set the specific constant data from the EI args instead of replacing all the constant data with the EI arg data i.e. EI arg sets Constants 2,3 : should leave Constants 0, 1, 4, 5 with the values set directly i.e. SetGraphicsRoot32BitConstants()
Change colour of triangle based on root constant values set by direct API not by indirect API.
This allows verification that RenderDoc replay of indirect root constants does not alter values set by the direct API
* This was caught by mac CI. Technically this is a backwards compatibility
breaking change but in practice there will be no captures, and certainly none
on 32-bit
* This is the only way we can handle the potential for creating descriptors for
swapchain images as there is no way otherwise to fetch and replay the opaque
descriptor data on the image that would be needed. We add an extra
interception step and let the application write to a 'real' image that we
allocate, prevent it from going into the present layout, and on present do a
copy & fixup.
* We mark to ourselves that the reserved descriptor range has been grabbed and
don't try to re-create it, instead sharing/re-using it between different
versions.
* We previously had to special case this because there was no way to fetch this
data from the generic replay layer via GetBufferData, but since the descriptor
factor we special case descriptor sets to be queryable as-if they are buffers
and so the normal flow works fine for this.
* This will need to be handled separately by post-patching usage in at submit
time using versioned copies of the descriptor buffer (hopefully only one)
* The idea here is to directly extract a pointer and/or size and do few lookups
(hopefully only one) to verify that we have recognised the descriptor. We
still have the trie lookup as backup.
* For palettised image/sampler descriptors this includes initialising the
palette with the opaque data, and for regular image descriptors this means
recording the address range of images. Buffers we already have their addresses
which is all we need.
* This should really have been considered a property, it's unlikely drivers do
anything different, but we want to be able to count on it being present.
* ASs and samplers can only have one descriptor ever - we automatically fetch
this at creation time when descriptor buffers are enabled. We also fetch all
possible NULL descriptors at device creation and do not re-serialise them
afterwards.
* Image views may have either 1 descriptor (if layouts are ignored) or N (one
per layout). Buffers have N per offset/size and optionally format. These are
tracked for uniqueness in the corresponding resource record to ensure we don't
serialise infinite descriptors over time.
* For combined image/samplers since they are in a known format we serialise
these as-if they are image view descriptors only (with some extra data that we
ignore). The whole descriptor must still replay bitwise identical but we will
only use the image view part of it.
* This applies to all ASs, images, image views, buffers and samplers. Buffer
views are not used with this extension. We enable this globally even if there
are resources which wouldn't be possible to put in a descriptor (e.g. transfer
only) or if they are internal allocations. The ordering rules are poorly
written - as the letter of the spec goes it would be impossible to ever omit
this flag during capture since we can't put all capture/replay creates before
all non-capture/replay creates. On replay in theory we could, but we also
don't know how well drivers will implement these rules anyway.
* This will be optional in many cases but for some situations might be required
when type information is not implicitly available in the descriptor store.
Generally it should always be available unless the descriptor store is being
viewed 'blank' purely from its contents with no other context.
* We already enable this during replay, for descriptor buffer we will have to
have it match but in general it's a good idea to match environments between
capture and replay.