* This removes the dependency on the serialisers/deserialisers provided by
D3D12.dll or the D3D12Core.dlls
* It also allows us to easily decode root signatures that don't have DXBC
containers, such as those in embedded subobjects.
* Since the serialised format is mostly memcpy'd we don't aim for complete
coverage but just edge cases like empty lists, all different types of
descriptors and flags, and all root signature versions.
* This is slightly less efficient but this isn't high-performance code, and it
makes settings like shader debug SearchDirPaths safe to access on multiple
threads.
Moved DXBCDebug::GatherPSDataForIntialValues() to DXDebug namespace and altered the input parameters.
Moved DXBCDebug::PSInputElement to DXDebug namespace
Added DXBCDebug::GetInterpolationModeForInputParams()
Added DXILDebug::GetInterpolationModeForInputParams()
Saves having to do repeated string comparisons for function calls to identify if the instruction is a DXOp call or an LLVM Dbg call.
The LLVM Dbg calls are unique and the specific llvm dbg operation is stored in the DXIL::Function
The DXOp calls are not unique and the zero'th argument of the CALL Instruction is used to determine the DXOp opcode.
* 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.