From 1438ff56375e173332ed82261e9abae7a6810bb9 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Tue, 3 May 2022 14:49:18 +0200 Subject: [PATCH] vkd3d: Allow different but compatible global root signature objects. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/raytracing_pipeline.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/libs/vkd3d/raytracing_pipeline.c b/libs/vkd3d/raytracing_pipeline.c index bbb66ad0..c344f386 100644 --- a/libs/vkd3d/raytracing_pipeline.c +++ b/libs/vkd3d/raytracing_pipeline.c @@ -448,13 +448,21 @@ static HRESULT d3d12_state_object_parse_subobjects(struct d3d12_state_object *ob case D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE: { const D3D12_GLOBAL_ROOT_SIGNATURE *rs = obj->pDesc; - if (data->global_root_signature) + struct d3d12_root_signature *new_rs; + struct d3d12_root_signature *old_rs; + + new_rs = impl_from_ID3D12RootSignature(rs->pGlobalRootSignature); + old_rs = impl_from_ID3D12RootSignature(data->global_root_signature); + + if (new_rs && old_rs && new_rs->compatibility_hash != old_rs->compatibility_hash) { /* Simplicity for now. */ - FIXME("More than one global root signature is used.\n"); + FIXME("More than one unique global root signature is used.\n"); return E_INVALIDARG; } - data->global_root_signature = rs->pGlobalRootSignature; + + if (!data->global_root_signature) + data->global_root_signature = rs->pGlobalRootSignature; break; }