diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2022-09-16 17:25:40 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2022-09-16 17:48:49 +0300 |
commit | fafe99a278ead592ef49ebee9f67487474d558ce (patch) | |
tree | 5b2e807a9eec6ca7ed48f7b7e7a8b955a8fd004e | |
parent | e74cc100883ab4f512461ffb21f0c2d7b49e1b2e (diff) |
vkd3d: Add stricter checks for initial resource state and resource flag.
Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
-rw-r--r-- | libs/vkd3d/resource.c | 13 | ||||
-rw-r--r-- | tests/d3d12_resource.c | 2 |
2 files changed, 14 insertions, 1 deletions
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index ee94a97d..90e7ed6c 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -2282,6 +2282,19 @@ static HRESULT d3d12_resource_validate_create_info(const D3D12_RESOURCE_DESC1 *d if (FAILED(hr = d3d12_resource_validate_desc(desc, device))) return hr; + if (initial_state == D3D12_RESOURCE_STATE_RENDER_TARGET && !(desc->Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)) + { + WARN("Creating resource in render target state, but ALLOW_RENDER_TARGET flag is not set.\n"); + return E_INVALIDARG; + } + + if ((initial_state == D3D12_RESOURCE_STATE_DEPTH_WRITE || initial_state == D3D12_RESOURCE_STATE_DEPTH_READ) && + !(desc->Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)) + { + WARN("Creating resource in depth-stencil state, but ALLOW_DEPTH_STENCIL flag is not set.\n"); + return E_INVALIDARG; + } + if (heap_properties) { if (FAILED(hr = d3d12_resource_validate_heap_properties(desc, heap_properties, initial_state))) diff --git a/tests/d3d12_resource.c b/tests/d3d12_resource.c index d1b3f877..d55f365d 100644 --- a/tests/d3d12_resource.c +++ b/tests/d3d12_resource.c @@ -139,7 +139,7 @@ void test_create_committed_resource(void) hr = ID3D12Device_CreateCommittedResource(device, &heap_properties, D3D12_HEAP_FLAG_NONE, &resource_desc, D3D12_RESOURCE_STATE_RENDER_TARGET, NULL, &IID_ID3D12Resource, (void **)&resource); - todo ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr); + ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr); if (SUCCEEDED(hr)) ID3D12Resource_Release(resource); |