vulkan/rmv,radv: Use common trace trigger
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20573>
This commit is contained in:

committed by
Marge Bot

parent
e0641ed59f
commit
b0beca8c7a
@@ -39,11 +39,6 @@ rmv_QueuePresentKHR(VkQueue _queue, const VkPresentInfoKHR *pPresentInfo)
|
||||
|
||||
vk_rmv_log_misc_token(&device->vk, VK_RMV_MISC_EVENT_TYPE_PRESENT);
|
||||
|
||||
simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
|
||||
radv_rmv_collect_trace_events(device);
|
||||
vk_rmv_handle_present_locked(&device->vk);
|
||||
simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
|
@@ -561,7 +561,7 @@ init_dispatch_tables(struct radv_device *device, struct radv_physical_device *ph
|
||||
add_entrypoints(&b, &rra_device_entrypoints, RADV_RRA_DISPATCH_TABLE);
|
||||
|
||||
#ifndef _WIN32
|
||||
if (vk_memory_trace_enabled())
|
||||
if (physical_device->instance->vk.trace_mode & VK_TRACE_MODE_RMV)
|
||||
add_entrypoints(&b, &rmv_device_entrypoints, RADV_RMV_DISPATCH_TABLE);
|
||||
#endif
|
||||
|
||||
@@ -626,6 +626,13 @@ capture_trace(VkQueue _queue)
|
||||
}
|
||||
}
|
||||
|
||||
if (queue->device->vk.memory_trace_data.is_enabled) {
|
||||
simple_mtx_lock(&queue->device->vk.memory_trace_data.token_mtx);
|
||||
radv_rmv_collect_trace_events(queue->device);
|
||||
vk_dump_rmv_capture(&queue->device->vk.memory_trace_data);
|
||||
simple_mtx_unlock(&queue->device->vk.memory_trace_data.token_mtx);
|
||||
}
|
||||
|
||||
if (queue->device->instance->vk.trace_mode & RADV_TRACE_MODE_RGP)
|
||||
queue->device->sqtt_triggered = true;
|
||||
|
||||
@@ -963,7 +970,7 @@ radv_CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCr
|
||||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
if (vk_memory_trace_enabled()) {
|
||||
if (physical_device->instance->vk.trace_mode & VK_TRACE_MODE_RMV) {
|
||||
struct vk_rmv_device_info info;
|
||||
memset(&info, 0, sizeof(struct vk_rmv_device_info));
|
||||
radv_rmv_fill_device_info(physical_device, &info);
|
||||
|
@@ -2490,7 +2490,7 @@ radv_GetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice, uint32_t *
|
||||
tool_count++;
|
||||
|
||||
/* RMV */
|
||||
rmv_enabled = vk_memory_trace_enabled();
|
||||
rmv_enabled = pdevice->instance->vk.trace_mode & VK_TRACE_MODE_RMV;
|
||||
if (rmv_enabled)
|
||||
tool_count++;
|
||||
|
||||
|
@@ -33,10 +33,6 @@ vk_memory_trace_init(struct vk_device *device, const struct vk_rmv_device_info *
|
||||
util_dynarray_init(&device->memory_trace_data.tokens, NULL);
|
||||
simple_mtx_init(&device->memory_trace_data.token_mtx, mtx_plain);
|
||||
|
||||
device->memory_trace_data.trace_frame_idx = vk_memory_trace_frame();
|
||||
device->memory_trace_data.trigger_file_name = vk_memory_trace_trigger_file();
|
||||
|
||||
device->memory_trace_data.cur_frame_idx = 0;
|
||||
device->memory_trace_data.next_resource_id = 1;
|
||||
device->memory_trace_data.handle_table = _mesa_hash_table_u64_create(NULL);
|
||||
}
|
||||
@@ -70,36 +66,6 @@ vk_memory_trace_finish(struct vk_device *device)
|
||||
device->memory_trace_data.is_enabled = false;
|
||||
}
|
||||
|
||||
void
|
||||
vk_rmv_handle_present_locked(struct vk_device *device)
|
||||
{
|
||||
struct vk_memory_trace_data *trace_data = &device->memory_trace_data;
|
||||
|
||||
if (!trace_data->is_enabled)
|
||||
return;
|
||||
bool frame_trigger = false;
|
||||
bool file_trigger = false;
|
||||
|
||||
#ifndef _WIN32
|
||||
if (trace_data->trigger_file_name && access(trace_data->trigger_file_name, W_OK) == 0) {
|
||||
if (unlink(trace_data->trigger_file_name) == 0)
|
||||
file_trigger = true;
|
||||
else
|
||||
/* Do not enable tracing if we cannot remove the file,
|
||||
* because by then we'll trace every frame ... */
|
||||
fprintf(stderr, "mesa: could not remove memory trace trigger "
|
||||
"file, ignoring\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
frame_trigger = trace_data->cur_frame_idx == trace_data->trace_frame_idx;
|
||||
if (trace_data->cur_frame_idx <= trace_data->trace_frame_idx)
|
||||
trace_data->cur_frame_idx++;
|
||||
|
||||
if (file_trigger || frame_trigger)
|
||||
vk_dump_rmv_capture(trace_data);
|
||||
}
|
||||
|
||||
void
|
||||
vk_rmv_emit_token(struct vk_memory_trace_data *data, enum vk_rmv_token_type type, void *token_data)
|
||||
{
|
||||
|
@@ -106,10 +106,6 @@ struct vk_memory_trace_data {
|
||||
struct util_dynarray tokens;
|
||||
simple_mtx_t token_mtx;
|
||||
|
||||
int32_t cur_frame_idx;
|
||||
int32_t trace_frame_idx;
|
||||
const char *trigger_file_name;
|
||||
|
||||
bool is_enabled;
|
||||
|
||||
struct vk_rmv_device_info device_info;
|
||||
@@ -120,31 +116,10 @@ struct vk_memory_trace_data {
|
||||
|
||||
struct vk_device;
|
||||
|
||||
static inline int
|
||||
vk_memory_trace_frame()
|
||||
{
|
||||
return (int)debug_get_num_option("MESA_VK_MEMORY_TRACE", -1);
|
||||
}
|
||||
|
||||
static inline const char *
|
||||
vk_memory_trace_trigger_file()
|
||||
{
|
||||
return getenv("MESA_VK_MEMORY_TRACE_TRIGGER");
|
||||
}
|
||||
|
||||
static inline bool
|
||||
vk_memory_trace_enabled()
|
||||
{
|
||||
return vk_memory_trace_frame() != -1 || vk_memory_trace_trigger_file();
|
||||
}
|
||||
|
||||
void vk_memory_trace_init(struct vk_device *device, const struct vk_rmv_device_info *device_info);
|
||||
|
||||
void vk_memory_trace_finish(struct vk_device *device);
|
||||
|
||||
/* The memory trace mutex should be locked when entering this function. */
|
||||
void vk_rmv_handle_present_locked(struct vk_device *device);
|
||||
|
||||
int vk_dump_rmv_capture(struct vk_memory_trace_data *data);
|
||||
|
||||
void vk_rmv_emit_token(struct vk_memory_trace_data *data, enum vk_rmv_token_type type,
|
||||
|
@@ -39,6 +39,7 @@
|
||||
(VK_API_VERSION_MAJOR(version) == 1 && VK_API_VERSION_MINOR(version) == 0)
|
||||
|
||||
static const struct debug_control trace_options[] = {
|
||||
{"rmv", VK_TRACE_MODE_RMV},
|
||||
{NULL, 0},
|
||||
};
|
||||
|
||||
|
@@ -60,8 +60,11 @@ struct _drmDevice;
|
||||
struct vk_physical_device;
|
||||
|
||||
enum vk_trace_mode {
|
||||
/** Radeon Memory Visualizer */
|
||||
VK_TRACE_MODE_RMV = 1 << 0,
|
||||
|
||||
/** Number of common trace modes. */
|
||||
VK_TRACE_MODE_COUNT = 0,
|
||||
VK_TRACE_MODE_COUNT = 1,
|
||||
};
|
||||
|
||||
/** Base struct for all `VkInstance` implementations
|
||||
|
Reference in New Issue
Block a user