* For some reason in RDAT the strings are deduplicated, but in PSV they are not.
Similarly in RDAT the index array packing prefixes each array with its length
but in PSV the index array is entirely loose and deduplication can happen
effectively anywhere.
* Only tested so far on round-trip behaviour, not with modifications. By default
we don't make any changes yet but the DXIL program editor may in future
automatically decode and encode the RDAT so it can stay in sync if resources
are added.
In order to unify the input structs between host and device builds, the AS API uses addresses rather than VkBuffer handles, but there's no way of retrieving a handle from an address so we have to track all VkBuffer binds to map their addresses back to the owning handle. This is done is in TrackInputBuffer(..) and UntrackInputBuffer(..), the latter for when the resource is destroyed. A complexity here is that when doing the lookup, users are allowed to manipulate the BDA so we have to find the buffer the address lies in and return the offset too.
* Since GL doesn't have sets, use the fixedBindSetOrSpace to namespace bindings
with locations (that need to be queried) from bindings without locations
(which have a fixed bind). Prior to the descriptor refactor this was indiated
with negative binds.
Add shader object helper to debug manager
Add shader objects to shader cache and vulkan pixel history callback
Add shader objects to occlusion, color and stencil, tests failed, per fragment, and discarded fragments callbacks
Fix errors due to the new template-id-cdtor warning, e.g.:
renderdoc/renderdoc/driver/vulkan/vk_serialise.cpp:201:58: error: template-id not allowed for constructor in C++20 [-Werror=template-id-cdtor]
201 | OptionalResources<Serialiser<SerialiserMode::Writing>>(Serialiser<SerialiserMode::Writing> &ser)
|
Change matches comments in code but wasn't implemented.
Before this change struct A size would be larger than struct B (which is struct with an extra member)
struct Nested
{
float a;
};
struct A
{
Nested child[16];
};
struct B
{
Nested child[16];
float f;
};
RD uses getprop to emulate geting env vars configured from the host, and it uses Process::LaunchProcess to do this that in turn uses fork/execve to launch getprop. But execve doesn't use the env's shell lookup mechanism for exes - this resulted in the getprop call failing and the capture options using default values.
This fix is to switch to using execvpe.
The ResourceId being passed to GetSize_InitialState() to set the chunk size was the ID of the resource triggering the flush NOT the ID of the resource being flushed.
* Unclear on if this is valid or not but it is likely considered to be a
degenerate case, where a payload is declared and referenced by the entry point
then not used in the emit. The contents in the mesh shader are presumably
undefined but if they're similarly unused that's fine?