Handle root signatures that alias our own

* We deduplicate on capture, but out root signatures are created before the
  replay so we use a replacement to handle that.
This commit is contained in:
baldurk
2026-03-16 11:49:41 +00:00
parent b157bd509d
commit 507a34d0fb
+13 -9
View File
@@ -1210,26 +1210,30 @@ bool WrappedID3D12Device::Serialise_CreateRootSignature(SerialiserType &ser, UIN
}
else
{
// we deduplicated during capture but this could alias one of ours in theory
if(GetResourceManager()->HasWrapper(ret))
{
ret->Release();
ret = (ID3D12RootSignature *)GetResourceManager()->GetWrapper(ret);
ret->AddRef();
GetResourceManager()->ReplaceResource(pRootSignature, GetResID(ret));
}
else
{
ret = new WrappedID3D12RootSignature(pRootSignature, ret, this);
WrappedID3D12RootSignature *wrapped = (WrappedID3D12RootSignature *)ret;
wrapped->sig = DecodeRootSig(pBlobWithRootSignature, (size_t)blobLengthInBytes);
if(wrapped->sig.Flags & D3D12_ROOT_SIGNATURE_FLAG_LOCAL_ROOT_SIGNATURE)
wrapped->localRootSigIdx =
GetResourceManager()->GetRTManager()->RegisterLocalRootSig(wrapped->sig);
}
WrappedID3D12RootSignature *wrapped = (WrappedID3D12RootSignature *)ret;
wrapped->sig = DecodeRootSig(pBlobWithRootSignature, (size_t)blobLengthInBytes);
if(wrapped->sig.Flags & D3D12_ROOT_SIGNATURE_FLAG_LOCAL_ROOT_SIGNATURE)
wrapped->localRootSigIdx =
GetResourceManager()->GetRTManager()->RegisterLocalRootSig(wrapped->sig);
{
WrappedID3D12RootSignature *wrapped = (WrappedID3D12RootSignature *)ret;
StructuredSerialiser structuriser(ser.GetStructuredFile().chunks.back(), &GetChunkName);
structuriser.SetUserData(GetResourceManager());