vkd3d: Add more breadcrumb tracing around RTV/DSV/Indirect usage.

Report resource cookies so that it's easier to track down aliasing
issues.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2022-06-30 12:19:25 +02:00
parent 2c42c0da93
commit 876447f254
3 changed files with 60 additions and 0 deletions

View File

@ -82,6 +82,22 @@ static const char *vkd3d_breadcrumb_command_type_to_str(enum vkd3d_breadcrumb_co
return "root_desc";
case VKD3D_BREADCRUMB_COMMAND_ROOT_CONST:
return "root_const";
case VKD3D_BREADCRUMB_COMMAND_BIND_RTV:
return "bind_rtv";
case VKD3D_BREADCRUMB_COMMAND_BIND_DSV:
return "bind_dsv";
case VKD3D_BREADCRUMB_COMMAND_COOKIE:
return "cookie";
case VKD3D_BREADCRUMB_COMMAND_CLEAR_UAV_FLOAT:
return "clear_uav_float";
case VKD3D_BREADCRUMB_COMMAND_CLEAR_UAV_UINT:
return "clear_uav_uint";
case VKD3D_BREADCRUMB_COMMAND_CLEAR_UAV_FALLBACK:
return "clear_uav_fallback";
case VKD3D_BREADCRUMB_COMMAND_CLEAR_RTV:
return "clear_rtv";
case VKD3D_BREADCRUMB_COMMAND_CLEAR_DSV:
return "clear_dsv";
default:
return "?";
@ -306,6 +322,10 @@ static void vkd3d_breadcrumb_tracer_report_command_list(
{
ERR(" Set arg: %"PRIu64" (#%"PRIx64")\n", cmd->word_64bit, cmd->word_64bit);
}
else if (cmd->type == VKD3D_BREADCRUMB_COMMAND_COOKIE)
{
ERR(" Set resource cookie: %"PRIu64"\n", cmd->word_64bit);
}
else
{
ERR(" Command: %s\n", vkd3d_breadcrumb_command_type_to_str(cmd->type));

View File

@ -8173,6 +8173,10 @@ static void STDMETHODCALLTYPE d3d12_command_list_OMSetRenderTargets(d3d12_comman
rtv_desc = d3d12_rtv_desc_from_cpu_handle(render_target_descriptors[i]);
}
VKD3D_BREADCRUMB_COOKIE(rtv_desc && rtv_desc->resource ? rtv_desc->resource->res.cookie : 0);
VKD3D_BREADCRUMB_AUX32(i);
VKD3D_BREADCRUMB_COMMAND_STATE(BIND_RTV);
if (!rtv_desc || !rtv_desc->resource)
{
WARN("RTV descriptor %u is not initialized.\n", i);
@ -8204,6 +8208,9 @@ static void STDMETHODCALLTYPE d3d12_command_list_OMSetRenderTargets(d3d12_comman
{
WARN("DSV descriptor is not initialized.\n");
}
VKD3D_BREADCRUMB_COOKIE(rtv_desc && rtv_desc->resource ? rtv_desc->resource->res.cookie : 0);
VKD3D_BREADCRUMB_COMMAND_STATE(BIND_DSV);
}
if (d3d12_pipeline_state_is_graphics(list->state))
@ -8301,6 +8308,9 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearDepthStencilView(d3d12_com
d3d12_command_list_clear_attachment(list, dsv_desc->resource, dsv_desc->view,
clear_aspects, &clear_value, rect_count, rects);
VKD3D_BREADCRUMB_COOKIE(dsv_desc->resource->res.cookie);
VKD3D_BREADCRUMB_COMMAND(CLEAR_DSV);
}
static void STDMETHODCALLTYPE d3d12_command_list_ClearRenderTargetView(d3d12_command_list_iface *iface,
@ -8339,6 +8349,9 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearRenderTargetView(d3d12_com
d3d12_command_list_clear_attachment(list, rtv_desc->resource, rtv_desc->view,
VK_IMAGE_ASPECT_COLOR_BIT, &clear_value, rect_count, rects);
VKD3D_BREADCRUMB_COOKIE(rtv_desc->resource->res.cookie);
VKD3D_BREADCRUMB_COMMAND(CLEAR_RTV);
}
struct vkd3d_clear_uav_info
@ -8931,6 +8944,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewUint(d3
{
d3d12_command_list_clear_uav_with_copy(list, &d, resource_impl,
&args, &color, uint_format, rect_count, rects);
VKD3D_BREADCRUMB_COMMAND(CLEAR_UAV_FALLBACK);
return;
}
}
@ -8968,6 +8982,8 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewUint(d3
d3d12_command_allocator_add_view(list->allocator, inline_view);
vkd3d_view_decref(inline_view, list->device);
}
VKD3D_BREADCRUMB_COMMAND(CLEAR_UAV_UINT);
}
static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewFloat(d3d12_command_list_iface *iface,
@ -8994,6 +9010,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewFloat(d
color = vkd3d_fixup_clear_uav_swizzle(list->device, d.view->info.view->format->dxgi_format, color);
d3d12_command_list_clear_uav(list, &d, resource_impl, &args, &color, rect_count, rects);
VKD3D_BREADCRUMB_COMMAND(CLEAR_UAV_FLOAT);
}
static void STDMETHODCALLTYPE d3d12_command_list_DiscardResource(d3d12_command_list_iface *iface,
@ -9879,6 +9896,11 @@ static void STDMETHODCALLTYPE d3d12_command_list_ExecuteIndirect(d3d12_command_l
if (!max_command_count)
return;
VKD3D_BREADCRUMB_COOKIE(arg_impl ? arg_impl->res.cookie : 0);
VKD3D_BREADCRUMB_AUX64(arg_buffer_offset);
VKD3D_BREADCRUMB_COOKIE(count_impl ? count_impl->res.cookie : 0);
VKD3D_BREADCRUMB_AUX64(count_buffer_offset);
if ((count_buffer || list->predicate_va) && !list->device->vk_info.KHR_draw_indirect_count)
{
FIXME("Count buffers not supported by Vulkan implementation.\n");

View File

@ -2572,6 +2572,14 @@ enum vkd3d_breadcrumb_command_type
VKD3D_BREADCRUMB_COMMAND_IBO,
VKD3D_BREADCRUMB_COMMAND_ROOT_DESC,
VKD3D_BREADCRUMB_COMMAND_ROOT_CONST,
VKD3D_BREADCRUMB_COMMAND_BIND_RTV,
VKD3D_BREADCRUMB_COMMAND_BIND_DSV,
VKD3D_BREADCRUMB_COMMAND_COOKIE,
VKD3D_BREADCRUMB_COMMAND_CLEAR_UAV_FLOAT,
VKD3D_BREADCRUMB_COMMAND_CLEAR_UAV_UINT,
VKD3D_BREADCRUMB_COMMAND_CLEAR_UAV_FALLBACK,
VKD3D_BREADCRUMB_COMMAND_CLEAR_RTV,
VKD3D_BREADCRUMB_COMMAND_CLEAR_DSV,
};
#ifdef VKD3D_ENABLE_BREADCRUMBS
@ -2682,6 +2690,15 @@ void vkd3d_breadcrumb_tracer_unregister_placed_resource(struct d3d12_heap *heap,
} \
} while(0)
#define VKD3D_BREADCRUMB_COOKIE(v) do { \
if (vkd3d_config_flags & VKD3D_CONFIG_FLAG_BREADCRUMBS) { \
struct vkd3d_breadcrumb_command breadcrumb_cmd; \
breadcrumb_cmd.type = VKD3D_BREADCRUMB_COMMAND_COOKIE; \
breadcrumb_cmd.word_64bit = v; \
vkd3d_breadcrumb_tracer_add_command(list, &breadcrumb_cmd); \
} \
} while(0)
/* Remember to kick debug ring as well. */
#define VKD3D_DEVICE_REPORT_BREADCRUMB_IF(device, cond) do { \
if ((vkd3d_config_flags & VKD3D_CONFIG_FLAG_BREADCRUMBS) && (cond)) { \
@ -2694,6 +2711,7 @@ void vkd3d_breadcrumb_tracer_unregister_placed_resource(struct d3d12_heap *heap,
#define VKD3D_BREADCRUMB_COMMAND_STATE(type) ((void)(VKD3D_BREADCRUMB_COMMAND_##type))
#define VKD3D_BREADCRUMB_AUX32(v) ((void)(v))
#define VKD3D_BREADCRUMB_AUX64(v) ((void)(v))
#define VKD3D_BREADCRUMB_COOKIE(v) ((void)(v))
#define VKD3D_DEVICE_REPORT_BREADCRUMB_IF(device, cond) ((void)(device), (void)(cond))
#endif /* VKD3D_ENABLE_BREADCRUMBS */