message: Support NULL pRootSignature when creating pipelines. Closes
  * Seemingly if NULL, the embedded blob is used in the shaders (which must be
  present in at least one shader, and must match exactly if present in multiple
  shaders).
diff: @@ -367,6 +367,7 @@ bool WrappedID3D12Device::Serialise_CreateGraphicsPipelineState(
  };
  AddResource(pPipelineState, ResourceType::PipelineState, "Graphics Pipeline State");
  + if(Descriptor.pRootSignature)
  DerivedResource(Descriptor.pRootSignature, pPipelineState);
  for(size_t i = 0; i < ARRAY_COUNT(shaders); i++)
  @@ -467,6 +468,7 @@ HRESULT WrappedID3D12Device::CreateGraphicsPipelineState(const D3D12_GRAPHICS_PI
  record->Length = 0;
  wrapped->SetResourceRecord(record);
  + if(pDesc->pRootSignature)
  record->AddParent(GetRecord(pDesc->pRootSignature));
  record->AddChunk(scope.Get());
  @@ -575,6 +577,7 @@ bool WrappedID3D12Device::Serialise_CreateComputePipelineState(
  AddResourceCurChunk(entry->GetResourceID());
  AddResource(pPipelineState, ResourceType::PipelineState, "Compute Pipeline State");
  + if(Descriptor.pRootSignature)
  DerivedResource(Descriptor.pRootSignature, pPipelineState);
  DerivedResource(entry->GetResourceID(), pPipelineState);
  @@ -620,6 +623,7 @@ HRESULT WrappedID3D12Device::CreateComputePipelineState(const D3D12_COMPUTE_PIPE
  record->Length = 0;
  wrapped->SetResourceRecord(record);
  + if(pDesc->pRootSignature)
  record->AddParent(GetRecord(pDesc->pRootSignature));
  record->AddChunk(scope.Get());
  