From 4576236199769eacadc6de49e03d05df999f9181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Thu, 31 Oct 2019 16:37:03 +0330 Subject: vkd3d: Do not report a root signature version higher than requested. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes Shadow of the Tomb Raider crashing because of NULL root signatures being passed since c002aee119b638d30eeb7cdc91099449ccafeafc. Signed-off-by: RĂ©mi Bernon Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- libs/vkd3d/device.c | 3 ++- tests/d3d12.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 4d6f7c9b..13ebc70a 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -2665,7 +2665,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CheckFeatureSupport(ID3D12Device * return E_INVALIDARG; } - data->HighestVersion = D3D_ROOT_SIGNATURE_VERSION_1_1; + TRACE("Root signature requested %#x.\n", data->HighestVersion); + data->HighestVersion = min(data->HighestVersion, D3D_ROOT_SIGNATURE_VERSION_1_1); TRACE("Root signature version %#x.\n", data->HighestVersion); return S_OK; diff --git a/tests/d3d12.c b/tests/d3d12.c index 6e0617d8..858cf991 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -1039,6 +1039,7 @@ static void test_check_feature_support(void) { D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT gpu_virtual_address; D3D12_FEATURE_DATA_FEATURE_LEVELS feature_levels; + D3D12_FEATURE_DATA_ROOT_SIGNATURE root_signature; D3D_FEATURE_LEVEL max_supported_feature_level; D3D12_FEATURE_DATA_ARCHITECTURE architecture; D3D12_FEATURE_DATA_FORMAT_INFO format_info; @@ -1229,6 +1230,21 @@ static void test_check_feature_support(void) trace("GPU virtual address bits per process: %u.\n", gpu_virtual_address.MaxGPUVirtualAddressBitsPerProcess); + root_signature.HighestVersion = D3D_ROOT_SIGNATURE_VERSION_1_0; + hr = ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_ROOT_SIGNATURE, + &root_signature, sizeof(root_signature)); + ok(hr == S_OK, "Failed to get root signature feature support, hr %#x.\n", hr); + ok(root_signature.HighestVersion == D3D_ROOT_SIGNATURE_VERSION_1_0, + "Got unexpected root signature feature version %#x.\n", root_signature.HighestVersion); + + root_signature.HighestVersion = D3D_ROOT_SIGNATURE_VERSION_1_1; + hr = ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_ROOT_SIGNATURE, + &root_signature, sizeof(root_signature)); + ok(hr == S_OK, "Failed to get root signature feature support, hr %#x.\n", hr); + ok(root_signature.HighestVersion == D3D_ROOT_SIGNATURE_VERSION_1_0 + || root_signature.HighestVersion == D3D_ROOT_SIGNATURE_VERSION_1_1, + "Got unexpected root signature feature version %#x.\n", root_signature.HighestVersion); + refcount = ID3D12Device_Release(device); ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount); } -- cgit v1.2.3