Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/HansKristian-Work/vkd3d-proton.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2022-10-04 17:44:38 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2022-10-14 15:05:19 +0300
commitc9d2e79ce7bea1d106ad0609fe6c2597a7170f85 (patch)
treec6ffce61c651f670d9c3e7ed86b13c2ced0d9927
parent2ac53b60485448252ea2ad1228d43d0c65f37bdd (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.c20
-rw-r--r--libs/vkd3d/resource.c6
-rw-r--r--libs/vkd3d/vkd3d_private.h3
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;