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:
parent
2c42c0da93
commit
876447f254
|
@ -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));
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
Loading…
Reference in New Issue