diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2022-10-04 17:44:38 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2022-10-14 15:05:19 +0300 |
commit | c9d2e79ce7bea1d106ad0609fe6c2597a7170f85 (patch) | |
tree | c6ffce61c651f670d9c3e7ed86b13c2ced0d9927 | |
parent | 2ac53b60485448252ea2ad1228d43d0c65f37bdd (diff) |
vkd3d: Add basic validation of initial placed resource usage.
Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
-rw-r--r-- | libs/vkd3d/command.c | 20 | ||||
-rw-r--r-- | libs/vkd3d/resource.c | 6 | ||||
-rw-r--r-- | libs/vkd3d/vkd3d_private.h | 3 |
3 files changed, 29 insertions, 0 deletions
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index 6fef3bd3..afe99ff1 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -12543,6 +12543,26 @@ static void d3d12_command_queue_transition_pool_add_barrier(struct d3d12_command VkImageMemoryBarrier *barrier; assert(d3d12_resource_is_texture(resource)); +#ifdef VKD3D_ENABLE_BREADCRUMBS + if (resource->initial_layout_transition_validate_only) + { + if (d3d12_resource_get_sub_resource_count(resource) == 1) + { + ERR("Application uses placed resource (1 subresource) (cookie %"PRIu64", fmt: %s, flags: #%x)" + " that must be initialized explicitly.\n", + resource->res.cookie, debug_dxgi_format(resource->desc.Format), resource->desc.Flags); + } + else + { + WARN("Application uses placed resource (>1 subresources) (cookie %"PRIu64", fmt: %s, flags: #%x)" + " that must be initialized explicitly. " + "This warning may be a false positive due to lack of sub-resource level tracking.\n", + resource->res.cookie, debug_dxgi_format(resource->desc.Format), resource->desc.Flags); + } + return; + } +#endif + if (!vkd3d_array_reserve((void**)&pool->barriers, &pool->barriers_size, pool->barriers_count + 1, sizeof(*pool->barriers))) { diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index 11f5ff30..41c29b51 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -3023,7 +3023,13 @@ HRESULT d3d12_resource_create_placed(struct d3d12_device *device, const D3D12_RE * For details, see: * https://docs.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12device-createplacedresource#notes-on-the-required-resource-initialization. */ if (desc->Flags & (D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)) + { +#ifdef VKD3D_ENABLE_BREADCRUMBS + object->initial_layout_transition_validate_only = true; +#else object->initial_layout_transition = 0; +#endif + } *resource = object; return S_OK; diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index d22b5c7c..e83b13f8 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -909,6 +909,9 @@ struct d3d12_resource VkImageLayout common_layout; D3D12_RESOURCE_STATES initial_state; uint32_t initial_layout_transition; +#ifdef VKD3D_ENABLE_BREADCRUMBS + bool initial_layout_transition_validate_only; +#endif struct d3d12_sparse_info sparse; struct vkd3d_view_map view_map; |