1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2024 Igalia S.L.
3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker */
5*61046927SAndroid Build Coastguard Worker
6*61046927SAndroid Build Coastguard Worker #include "tu_rmv.h"
7*61046927SAndroid Build Coastguard Worker
8*61046927SAndroid Build Coastguard Worker #include "tu_buffer.h"
9*61046927SAndroid Build Coastguard Worker #include "tu_cmd_buffer.h"
10*61046927SAndroid Build Coastguard Worker #include "tu_cs.h"
11*61046927SAndroid Build Coastguard Worker #include "tu_device.h"
12*61046927SAndroid Build Coastguard Worker #include "tu_event.h"
13*61046927SAndroid Build Coastguard Worker #include "tu_image.h"
14*61046927SAndroid Build Coastguard Worker #include "tu_query_pool.h"
15*61046927SAndroid Build Coastguard Worker
16*61046927SAndroid Build Coastguard Worker #include <cstdio>
17*61046927SAndroid Build Coastguard Worker
18*61046927SAndroid Build Coastguard Worker static VkResult
capture_trace(VkQueue _queue)19*61046927SAndroid Build Coastguard Worker capture_trace(VkQueue _queue)
20*61046927SAndroid Build Coastguard Worker {
21*61046927SAndroid Build Coastguard Worker VK_FROM_HANDLE(tu_queue, queue, _queue);
22*61046927SAndroid Build Coastguard Worker struct tu_device *device = queue->device;
23*61046927SAndroid Build Coastguard Worker assert(device->vk.memory_trace_data.is_enabled);
24*61046927SAndroid Build Coastguard Worker
25*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
26*61046927SAndroid Build Coastguard Worker
27*61046927SAndroid Build Coastguard Worker vk_dump_rmv_capture(&queue->device->vk.memory_trace_data);
28*61046927SAndroid Build Coastguard Worker
29*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
30*61046927SAndroid Build Coastguard Worker return VK_SUCCESS;
31*61046927SAndroid Build Coastguard Worker }
32*61046927SAndroid Build Coastguard Worker
33*61046927SAndroid Build Coastguard Worker static void
tu_rmv_fill_device_info(struct tu_device * device,struct vk_rmv_device_info * info)34*61046927SAndroid Build Coastguard Worker tu_rmv_fill_device_info(struct tu_device *device,
35*61046927SAndroid Build Coastguard Worker struct vk_rmv_device_info *info)
36*61046927SAndroid Build Coastguard Worker {
37*61046927SAndroid Build Coastguard Worker struct tu_physical_device *physical_device = device->physical_device;
38*61046927SAndroid Build Coastguard Worker
39*61046927SAndroid Build Coastguard Worker /* Turnip backends only set up a single device-local heap. When available,
40*61046927SAndroid Build Coastguard Worker * the kernel-provided VA range is used, otherwise we fall back to that
41*61046927SAndroid Build Coastguard Worker * heap's calculated size.
42*61046927SAndroid Build Coastguard Worker */
43*61046927SAndroid Build Coastguard Worker struct vk_rmv_memory_info *device_local_memory_info =
44*61046927SAndroid Build Coastguard Worker &info->memory_infos[VK_RMV_MEMORY_LOCATION_DEVICE];
45*61046927SAndroid Build Coastguard Worker if (physical_device->has_set_iova) {
46*61046927SAndroid Build Coastguard Worker *device_local_memory_info = {
47*61046927SAndroid Build Coastguard Worker .size = physical_device->va_size,
48*61046927SAndroid Build Coastguard Worker .physical_base_address = physical_device->va_start,
49*61046927SAndroid Build Coastguard Worker };
50*61046927SAndroid Build Coastguard Worker } else {
51*61046927SAndroid Build Coastguard Worker *device_local_memory_info = {
52*61046927SAndroid Build Coastguard Worker .size = physical_device->heap.size, .physical_base_address = 0,
53*61046927SAndroid Build Coastguard Worker };
54*61046927SAndroid Build Coastguard Worker }
55*61046927SAndroid Build Coastguard Worker
56*61046927SAndroid Build Coastguard Worker info->memory_infos[VK_RMV_MEMORY_LOCATION_DEVICE_INVISIBLE] = {
57*61046927SAndroid Build Coastguard Worker .size = 0, .physical_base_address = 0,
58*61046927SAndroid Build Coastguard Worker };
59*61046927SAndroid Build Coastguard Worker info->memory_infos[VK_RMV_MEMORY_LOCATION_HOST] = {
60*61046927SAndroid Build Coastguard Worker .size = 0, .physical_base_address = 0,
61*61046927SAndroid Build Coastguard Worker };
62*61046927SAndroid Build Coastguard Worker
63*61046927SAndroid Build Coastguard Worker /* No PCI-e information to provide. Instead, we can include the device's
64*61046927SAndroid Build Coastguard Worker * chip ID in the device name string.
65*61046927SAndroid Build Coastguard Worker */
66*61046927SAndroid Build Coastguard Worker snprintf(info->device_name, sizeof(info->device_name), "%s (0x%" PRIx64 ")",
67*61046927SAndroid Build Coastguard Worker physical_device->name, physical_device->dev_id.chip_id);
68*61046927SAndroid Build Coastguard Worker info->pcie_family_id = info->pcie_revision_id = info->pcie_device_id = 0;
69*61046927SAndroid Build Coastguard Worker
70*61046927SAndroid Build Coastguard Worker /* TODO: provide relevant information here. */
71*61046927SAndroid Build Coastguard Worker info->vram_type = VK_RMV_MEMORY_TYPE_LPDDR5;
72*61046927SAndroid Build Coastguard Worker info->vram_operations_per_clock = info->vram_bus_width = info->vram_bandwidth = 1;
73*61046927SAndroid Build Coastguard Worker info->minimum_shader_clock = info->minimum_memory_clock = 0;
74*61046927SAndroid Build Coastguard Worker info->maximum_shader_clock = info->maximum_memory_clock = 1;
75*61046927SAndroid Build Coastguard Worker }
76*61046927SAndroid Build Coastguard Worker
77*61046927SAndroid Build Coastguard Worker void
tu_memory_trace_init(struct tu_device * device)78*61046927SAndroid Build Coastguard Worker tu_memory_trace_init(struct tu_device *device)
79*61046927SAndroid Build Coastguard Worker {
80*61046927SAndroid Build Coastguard Worker struct vk_rmv_device_info info;
81*61046927SAndroid Build Coastguard Worker memset(&info, 0, sizeof(info));
82*61046927SAndroid Build Coastguard Worker tu_rmv_fill_device_info(device, &info);
83*61046927SAndroid Build Coastguard Worker
84*61046927SAndroid Build Coastguard Worker vk_memory_trace_init(&device->vk, &info);
85*61046927SAndroid Build Coastguard Worker if (!device->vk.memory_trace_data.is_enabled)
86*61046927SAndroid Build Coastguard Worker return;
87*61046927SAndroid Build Coastguard Worker
88*61046927SAndroid Build Coastguard Worker device->vk.capture_trace = capture_trace;
89*61046927SAndroid Build Coastguard Worker }
90*61046927SAndroid Build Coastguard Worker
91*61046927SAndroid Build Coastguard Worker void
tu_memory_trace_finish(struct tu_device * device)92*61046927SAndroid Build Coastguard Worker tu_memory_trace_finish(struct tu_device *device)
93*61046927SAndroid Build Coastguard Worker {
94*61046927SAndroid Build Coastguard Worker vk_memory_trace_finish(&device->vk);
95*61046927SAndroid Build Coastguard Worker }
96*61046927SAndroid Build Coastguard Worker
97*61046927SAndroid Build Coastguard Worker static inline uint32_t
tu_rmv_get_resource_id_locked(struct tu_device * device,const void * resource)98*61046927SAndroid Build Coastguard Worker tu_rmv_get_resource_id_locked(struct tu_device *device, const void *resource)
99*61046927SAndroid Build Coastguard Worker {
100*61046927SAndroid Build Coastguard Worker return vk_rmv_get_resource_id_locked(&device->vk, (uint64_t) resource);
101*61046927SAndroid Build Coastguard Worker }
102*61046927SAndroid Build Coastguard Worker
103*61046927SAndroid Build Coastguard Worker static inline void
tu_rmv_destroy_resource_id_locked(struct tu_device * device,const void * resource)104*61046927SAndroid Build Coastguard Worker tu_rmv_destroy_resource_id_locked(struct tu_device *device,
105*61046927SAndroid Build Coastguard Worker const void *resource)
106*61046927SAndroid Build Coastguard Worker {
107*61046927SAndroid Build Coastguard Worker vk_rmv_destroy_resource_id_locked(&device->vk, (uint64_t) resource);
108*61046927SAndroid Build Coastguard Worker }
109*61046927SAndroid Build Coastguard Worker
110*61046927SAndroid Build Coastguard Worker static inline void
tu_rmv_emit_resource_bind_locked(struct tu_device * device,uint32_t resource_id,uint64_t address,uint64_t size)111*61046927SAndroid Build Coastguard Worker tu_rmv_emit_resource_bind_locked(struct tu_device *device, uint32_t resource_id,
112*61046927SAndroid Build Coastguard Worker uint64_t address, uint64_t size)
113*61046927SAndroid Build Coastguard Worker {
114*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_bind_token token = {
115*61046927SAndroid Build Coastguard Worker .address = address,
116*61046927SAndroid Build Coastguard Worker .size = size,
117*61046927SAndroid Build Coastguard Worker .is_system_memory = false,
118*61046927SAndroid Build Coastguard Worker .resource_id = resource_id,
119*61046927SAndroid Build Coastguard Worker };
120*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
121*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_BIND, &token);
122*61046927SAndroid Build Coastguard Worker }
123*61046927SAndroid Build Coastguard Worker
124*61046927SAndroid Build Coastguard Worker static inline void
tu_rmv_emit_cpu_map_locked(struct tu_device * device,uint64_t address,bool unmapped)125*61046927SAndroid Build Coastguard Worker tu_rmv_emit_cpu_map_locked(struct tu_device *device, uint64_t address,
126*61046927SAndroid Build Coastguard Worker bool unmapped)
127*61046927SAndroid Build Coastguard Worker {
128*61046927SAndroid Build Coastguard Worker struct vk_rmv_cpu_map_token token = {
129*61046927SAndroid Build Coastguard Worker .address = address,
130*61046927SAndroid Build Coastguard Worker .unmapped = unmapped,
131*61046927SAndroid Build Coastguard Worker };
132*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
133*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_CPU_MAP, &token);
134*61046927SAndroid Build Coastguard Worker }
135*61046927SAndroid Build Coastguard Worker
136*61046927SAndroid Build Coastguard Worker static inline void
tu_rmv_emit_page_table_update_locked(struct tu_device * device,struct tu_bo * bo,bool is_unmap)137*61046927SAndroid Build Coastguard Worker tu_rmv_emit_page_table_update_locked(struct tu_device *device, struct tu_bo *bo,
138*61046927SAndroid Build Coastguard Worker bool is_unmap)
139*61046927SAndroid Build Coastguard Worker {
140*61046927SAndroid Build Coastguard Worker /* These tokens are mainly useful for RMV to properly associate buffer
141*61046927SAndroid Build Coastguard Worker * allocations and deallocations to a specific memory domain.
142*61046927SAndroid Build Coastguard Worker */
143*61046927SAndroid Build Coastguard Worker struct vk_rmv_page_table_update_token token = {
144*61046927SAndroid Build Coastguard Worker .virtual_address = bo->iova,
145*61046927SAndroid Build Coastguard Worker .physical_address = bo->iova,
146*61046927SAndroid Build Coastguard Worker .page_count = DIV_ROUND_UP(bo->size, 4096),
147*61046927SAndroid Build Coastguard Worker .page_size = 4096,
148*61046927SAndroid Build Coastguard Worker .pid = 0,
149*61046927SAndroid Build Coastguard Worker .is_unmap = is_unmap,
150*61046927SAndroid Build Coastguard Worker .type = VK_RMV_PAGE_TABLE_UPDATE_TYPE_UPDATE,
151*61046927SAndroid Build Coastguard Worker };
152*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
153*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_PAGE_TABLE_UPDATE, &token);
154*61046927SAndroid Build Coastguard Worker }
155*61046927SAndroid Build Coastguard Worker
156*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_heap_create(struct tu_device * device,const VkMemoryAllocateInfo * allocate_info,struct tu_device_memory * device_memory)157*61046927SAndroid Build Coastguard Worker tu_rmv_log_heap_create(struct tu_device *device,
158*61046927SAndroid Build Coastguard Worker const VkMemoryAllocateInfo *allocate_info,
159*61046927SAndroid Build Coastguard Worker struct tu_device_memory *device_memory)
160*61046927SAndroid Build Coastguard Worker {
161*61046927SAndroid Build Coastguard Worker const VkMemoryAllocateFlagsInfo *flags_info = vk_find_struct_const(
162*61046927SAndroid Build Coastguard Worker allocate_info->pNext, MEMORY_ALLOCATE_FLAGS_INFO);
163*61046927SAndroid Build Coastguard Worker
164*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
165*61046927SAndroid Build Coastguard Worker
166*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
167*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, device_memory),
168*61046927SAndroid Build Coastguard Worker .is_driver_internal = false,
169*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_HEAP,
170*61046927SAndroid Build Coastguard Worker .heap = {
171*61046927SAndroid Build Coastguard Worker .alloc_flags = flags_info ? flags_info->flags : 0,
172*61046927SAndroid Build Coastguard Worker .size = device_memory->bo->size,
173*61046927SAndroid Build Coastguard Worker .alignment = 4096,
174*61046927SAndroid Build Coastguard Worker .heap_index = VK_RMV_MEMORY_LOCATION_DEVICE,
175*61046927SAndroid Build Coastguard Worker },
176*61046927SAndroid Build Coastguard Worker };
177*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
178*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
179*61046927SAndroid Build Coastguard Worker
180*61046927SAndroid Build Coastguard Worker tu_rmv_emit_resource_bind_locked(device, token.resource_id,
181*61046927SAndroid Build Coastguard Worker device_memory->bo->iova,
182*61046927SAndroid Build Coastguard Worker device_memory->bo->size);
183*61046927SAndroid Build Coastguard Worker
184*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
185*61046927SAndroid Build Coastguard Worker }
186*61046927SAndroid Build Coastguard Worker
187*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_bo_allocate(struct tu_device * device,struct tu_bo * bo)188*61046927SAndroid Build Coastguard Worker tu_rmv_log_bo_allocate(struct tu_device *device, struct tu_bo *bo)
189*61046927SAndroid Build Coastguard Worker {
190*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
191*61046927SAndroid Build Coastguard Worker
192*61046927SAndroid Build Coastguard Worker tu_rmv_emit_page_table_update_locked(device, bo, false);
193*61046927SAndroid Build Coastguard Worker
194*61046927SAndroid Build Coastguard Worker struct vk_rmv_virtual_allocate_token virtual_allocate_token = {
195*61046927SAndroid Build Coastguard Worker .page_count = DIV_ROUND_UP(bo->size, 4096),
196*61046927SAndroid Build Coastguard Worker .is_driver_internal = false,
197*61046927SAndroid Build Coastguard Worker .is_in_invisible_vram = false,
198*61046927SAndroid Build Coastguard Worker .address = bo->iova,
199*61046927SAndroid Build Coastguard Worker .preferred_domains = VK_RMV_KERNEL_MEMORY_DOMAIN_VRAM,
200*61046927SAndroid Build Coastguard Worker };
201*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
202*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_VIRTUAL_ALLOCATE,
203*61046927SAndroid Build Coastguard Worker &virtual_allocate_token);
204*61046927SAndroid Build Coastguard Worker
205*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
206*61046927SAndroid Build Coastguard Worker }
207*61046927SAndroid Build Coastguard Worker
208*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_bo_destroy(struct tu_device * device,struct tu_bo * bo)209*61046927SAndroid Build Coastguard Worker tu_rmv_log_bo_destroy(struct tu_device *device, struct tu_bo *bo)
210*61046927SAndroid Build Coastguard Worker {
211*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
212*61046927SAndroid Build Coastguard Worker
213*61046927SAndroid Build Coastguard Worker struct vk_rmv_virtual_free_token virtual_free_token = {
214*61046927SAndroid Build Coastguard Worker .address = bo->iova,
215*61046927SAndroid Build Coastguard Worker };
216*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
217*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_VIRTUAL_FREE, &virtual_free_token);
218*61046927SAndroid Build Coastguard Worker
219*61046927SAndroid Build Coastguard Worker tu_rmv_emit_page_table_update_locked(device, bo, true);
220*61046927SAndroid Build Coastguard Worker
221*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
222*61046927SAndroid Build Coastguard Worker }
223*61046927SAndroid Build Coastguard Worker
224*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_bo_map(struct tu_device * device,struct tu_bo * bo)225*61046927SAndroid Build Coastguard Worker tu_rmv_log_bo_map(struct tu_device *device, struct tu_bo *bo)
226*61046927SAndroid Build Coastguard Worker {
227*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
228*61046927SAndroid Build Coastguard Worker
229*61046927SAndroid Build Coastguard Worker tu_rmv_emit_cpu_map_locked(device, bo->iova, false);
230*61046927SAndroid Build Coastguard Worker
231*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
232*61046927SAndroid Build Coastguard Worker }
233*61046927SAndroid Build Coastguard Worker
234*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_bo_unmap(struct tu_device * device,struct tu_bo * bo)235*61046927SAndroid Build Coastguard Worker tu_rmv_log_bo_unmap(struct tu_device *device, struct tu_bo *bo)
236*61046927SAndroid Build Coastguard Worker {
237*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
238*61046927SAndroid Build Coastguard Worker
239*61046927SAndroid Build Coastguard Worker tu_rmv_emit_cpu_map_locked(device, bo->iova, true);
240*61046927SAndroid Build Coastguard Worker
241*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
242*61046927SAndroid Build Coastguard Worker }
243*61046927SAndroid Build Coastguard Worker
244*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_buffer_create(struct tu_device * device,struct tu_buffer * buffer)245*61046927SAndroid Build Coastguard Worker tu_rmv_log_buffer_create(struct tu_device *device, struct tu_buffer *buffer)
246*61046927SAndroid Build Coastguard Worker {
247*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
248*61046927SAndroid Build Coastguard Worker
249*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
250*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, buffer),
251*61046927SAndroid Build Coastguard Worker .is_driver_internal = false,
252*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_BUFFER,
253*61046927SAndroid Build Coastguard Worker .buffer = {
254*61046927SAndroid Build Coastguard Worker .create_flags = buffer->vk.create_flags,
255*61046927SAndroid Build Coastguard Worker .usage_flags = buffer->vk.usage,
256*61046927SAndroid Build Coastguard Worker .size = buffer->vk.size,
257*61046927SAndroid Build Coastguard Worker },
258*61046927SAndroid Build Coastguard Worker };
259*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
260*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
261*61046927SAndroid Build Coastguard Worker
262*61046927SAndroid Build Coastguard Worker /* Any sparse data would also be reported here, if supported. */
263*61046927SAndroid Build Coastguard Worker
264*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
265*61046927SAndroid Build Coastguard Worker }
266*61046927SAndroid Build Coastguard Worker
267*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_buffer_destroy(struct tu_device * device,struct tu_buffer * buffer)268*61046927SAndroid Build Coastguard Worker tu_rmv_log_buffer_destroy(struct tu_device *device, struct tu_buffer *buffer)
269*61046927SAndroid Build Coastguard Worker {
270*61046927SAndroid Build Coastguard Worker /* Any sparse data would also be reported here, if supported. */
271*61046927SAndroid Build Coastguard Worker tu_rmv_log_resource_destroy(device, buffer);
272*61046927SAndroid Build Coastguard Worker }
273*61046927SAndroid Build Coastguard Worker
274*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_buffer_bind(struct tu_device * device,struct tu_buffer * buffer)275*61046927SAndroid Build Coastguard Worker tu_rmv_log_buffer_bind(struct tu_device *device, struct tu_buffer *buffer)
276*61046927SAndroid Build Coastguard Worker {
277*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
278*61046927SAndroid Build Coastguard Worker
279*61046927SAndroid Build Coastguard Worker tu_rmv_emit_resource_bind_locked(device,
280*61046927SAndroid Build Coastguard Worker tu_rmv_get_resource_id_locked(device, buffer),
281*61046927SAndroid Build Coastguard Worker buffer->bo ? buffer->iova : 0,
282*61046927SAndroid Build Coastguard Worker buffer->vk.size);
283*61046927SAndroid Build Coastguard Worker
284*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
285*61046927SAndroid Build Coastguard Worker }
286*61046927SAndroid Build Coastguard Worker
287*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_image_create(struct tu_device * device,struct tu_image * image)288*61046927SAndroid Build Coastguard Worker tu_rmv_log_image_create(struct tu_device *device, struct tu_image *image)
289*61046927SAndroid Build Coastguard Worker {
290*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
291*61046927SAndroid Build Coastguard Worker
292*61046927SAndroid Build Coastguard Worker /* TODO: provide the image metadata information */
293*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
294*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, image),
295*61046927SAndroid Build Coastguard Worker .is_driver_internal = false,
296*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_IMAGE,
297*61046927SAndroid Build Coastguard Worker .image = {
298*61046927SAndroid Build Coastguard Worker .create_flags = image->vk.create_flags,
299*61046927SAndroid Build Coastguard Worker .usage_flags = image->vk.usage,
300*61046927SAndroid Build Coastguard Worker .type = image->vk.image_type,
301*61046927SAndroid Build Coastguard Worker .extent = image->vk.extent,
302*61046927SAndroid Build Coastguard Worker .format = image->vk.format,
303*61046927SAndroid Build Coastguard Worker .num_mips = image->vk.mip_levels,
304*61046927SAndroid Build Coastguard Worker .num_slices = image->vk.array_layers,
305*61046927SAndroid Build Coastguard Worker .tiling = image->vk.tiling,
306*61046927SAndroid Build Coastguard Worker .log2_samples = util_logbase2(image->vk.samples),
307*61046927SAndroid Build Coastguard Worker .log2_storage_samples = util_logbase2(image->vk.samples),
308*61046927SAndroid Build Coastguard Worker /* any bound memory should have alignment of 4096 */
309*61046927SAndroid Build Coastguard Worker .alignment_log2 = util_logbase2(4096),
310*61046927SAndroid Build Coastguard Worker .metadata_alignment_log2 = 0,
311*61046927SAndroid Build Coastguard Worker .image_alignment_log2 = util_logbase2(image->layout[0].base_align),
312*61046927SAndroid Build Coastguard Worker .size = image->total_size,
313*61046927SAndroid Build Coastguard Worker .metadata_size = 0,
314*61046927SAndroid Build Coastguard Worker .metadata_header_size = 0,
315*61046927SAndroid Build Coastguard Worker .metadata_offset = 0,
316*61046927SAndroid Build Coastguard Worker .metadata_header_offset = 0,
317*61046927SAndroid Build Coastguard Worker /* TODO: find a better way to determine if an image is presentable */
318*61046927SAndroid Build Coastguard Worker .presentable = image->vk.usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
319*61046927SAndroid Build Coastguard Worker },
320*61046927SAndroid Build Coastguard Worker };
321*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
322*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
323*61046927SAndroid Build Coastguard Worker
324*61046927SAndroid Build Coastguard Worker /* Any sparse data would also be reported here, if supported. */
325*61046927SAndroid Build Coastguard Worker
326*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
327*61046927SAndroid Build Coastguard Worker }
328*61046927SAndroid Build Coastguard Worker
329*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_image_destroy(struct tu_device * device,struct tu_image * image)330*61046927SAndroid Build Coastguard Worker tu_rmv_log_image_destroy(struct tu_device *device, struct tu_image *image)
331*61046927SAndroid Build Coastguard Worker {
332*61046927SAndroid Build Coastguard Worker /* Any sparse data would also be reported here, if supported. */
333*61046927SAndroid Build Coastguard Worker tu_rmv_log_resource_destroy(device, image);
334*61046927SAndroid Build Coastguard Worker }
335*61046927SAndroid Build Coastguard Worker
336*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_image_bind(struct tu_device * device,struct tu_image * image)337*61046927SAndroid Build Coastguard Worker tu_rmv_log_image_bind(struct tu_device *device, struct tu_image *image)
338*61046927SAndroid Build Coastguard Worker {
339*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
340*61046927SAndroid Build Coastguard Worker
341*61046927SAndroid Build Coastguard Worker uint64_t address = image->bo ? image->iova : 0;
342*61046927SAndroid Build Coastguard Worker uint64_t size = image->bo ? image->total_size : 0;
343*61046927SAndroid Build Coastguard Worker tu_rmv_emit_resource_bind_locked(device,
344*61046927SAndroid Build Coastguard Worker tu_rmv_get_resource_id_locked(device, image),
345*61046927SAndroid Build Coastguard Worker address, size);
346*61046927SAndroid Build Coastguard Worker
347*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
348*61046927SAndroid Build Coastguard Worker }
349*61046927SAndroid Build Coastguard Worker
350*61046927SAndroid Build Coastguard Worker static inline void
tu_rmv_log_command_allocator_create(struct tu_device * device,void * bo,uint64_t address,uint64_t size)351*61046927SAndroid Build Coastguard Worker tu_rmv_log_command_allocator_create(struct tu_device *device, void *bo,
352*61046927SAndroid Build Coastguard Worker uint64_t address, uint64_t size)
353*61046927SAndroid Build Coastguard Worker {
354*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
355*61046927SAndroid Build Coastguard Worker
356*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
357*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, bo),
358*61046927SAndroid Build Coastguard Worker .is_driver_internal = true,
359*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_COMMAND_ALLOCATOR,
360*61046927SAndroid Build Coastguard Worker .command_buffer = {
361*61046927SAndroid Build Coastguard Worker .preferred_domain = VK_RMV_KERNEL_MEMORY_DOMAIN_VRAM,
362*61046927SAndroid Build Coastguard Worker .executable_size = size,
363*61046927SAndroid Build Coastguard Worker .app_available_executable_size = size,
364*61046927SAndroid Build Coastguard Worker .embedded_data_size = 0,
365*61046927SAndroid Build Coastguard Worker .app_available_embedded_data_size = 0,
366*61046927SAndroid Build Coastguard Worker .scratch_size = 0,
367*61046927SAndroid Build Coastguard Worker .app_available_scratch_size = 0,
368*61046927SAndroid Build Coastguard Worker },
369*61046927SAndroid Build Coastguard Worker };
370*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
371*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
372*61046927SAndroid Build Coastguard Worker
373*61046927SAndroid Build Coastguard Worker tu_rmv_emit_resource_bind_locked(device, token.resource_id, address, size);
374*61046927SAndroid Build Coastguard Worker
375*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
376*61046927SAndroid Build Coastguard Worker }
377*61046927SAndroid Build Coastguard Worker
378*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_cmd_buffer_bo_create(struct tu_device * device,struct tu_bo * bo)379*61046927SAndroid Build Coastguard Worker tu_rmv_log_cmd_buffer_bo_create(struct tu_device *device,
380*61046927SAndroid Build Coastguard Worker struct tu_bo *bo)
381*61046927SAndroid Build Coastguard Worker {
382*61046927SAndroid Build Coastguard Worker tu_rmv_log_command_allocator_create(device, bo, bo->iova, bo->size);
383*61046927SAndroid Build Coastguard Worker }
384*61046927SAndroid Build Coastguard Worker
385*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_cmd_buffer_suballoc_bo_create(struct tu_device * device,struct tu_suballoc_bo * suballoc_bo)386*61046927SAndroid Build Coastguard Worker tu_rmv_log_cmd_buffer_suballoc_bo_create(struct tu_device *device,
387*61046927SAndroid Build Coastguard Worker struct tu_suballoc_bo *suballoc_bo)
388*61046927SAndroid Build Coastguard Worker {
389*61046927SAndroid Build Coastguard Worker tu_rmv_log_command_allocator_create(device, suballoc_bo,
390*61046927SAndroid Build Coastguard Worker suballoc_bo->iova, suballoc_bo->size);
391*61046927SAndroid Build Coastguard Worker }
392*61046927SAndroid Build Coastguard Worker
393*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_query_pool_create(struct tu_device * device,struct tu_query_pool * query_pool)394*61046927SAndroid Build Coastguard Worker tu_rmv_log_query_pool_create(struct tu_device *device,
395*61046927SAndroid Build Coastguard Worker struct tu_query_pool *query_pool)
396*61046927SAndroid Build Coastguard Worker {
397*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
398*61046927SAndroid Build Coastguard Worker
399*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
400*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, query_pool),
401*61046927SAndroid Build Coastguard Worker .is_driver_internal = false,
402*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_QUERY_HEAP,
403*61046927SAndroid Build Coastguard Worker .query_pool = {
404*61046927SAndroid Build Coastguard Worker .type = query_pool->vk.query_type,
405*61046927SAndroid Build Coastguard Worker .has_cpu_access = true,
406*61046927SAndroid Build Coastguard Worker },
407*61046927SAndroid Build Coastguard Worker };
408*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
409*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
410*61046927SAndroid Build Coastguard Worker
411*61046927SAndroid Build Coastguard Worker tu_rmv_emit_resource_bind_locked(device, token.resource_id,
412*61046927SAndroid Build Coastguard Worker query_pool->bo->iova, query_pool->bo->size);
413*61046927SAndroid Build Coastguard Worker
414*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
415*61046927SAndroid Build Coastguard Worker }
416*61046927SAndroid Build Coastguard Worker
417*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_descriptor_pool_create(struct tu_device * device,const VkDescriptorPoolCreateInfo * create_info,struct tu_descriptor_pool * descriptor_pool)418*61046927SAndroid Build Coastguard Worker tu_rmv_log_descriptor_pool_create(struct tu_device *device,
419*61046927SAndroid Build Coastguard Worker const VkDescriptorPoolCreateInfo *create_info,
420*61046927SAndroid Build Coastguard Worker struct tu_descriptor_pool *descriptor_pool)
421*61046927SAndroid Build Coastguard Worker {
422*61046927SAndroid Build Coastguard Worker size_t pool_sizes_size =
423*61046927SAndroid Build Coastguard Worker create_info->poolSizeCount * sizeof(VkDescriptorPoolSize);
424*61046927SAndroid Build Coastguard Worker VkDescriptorPoolSize *pool_sizes =
425*61046927SAndroid Build Coastguard Worker (VkDescriptorPoolSize *) malloc(pool_sizes_size);
426*61046927SAndroid Build Coastguard Worker if (!pool_sizes)
427*61046927SAndroid Build Coastguard Worker return;
428*61046927SAndroid Build Coastguard Worker
429*61046927SAndroid Build Coastguard Worker memcpy(pool_sizes, create_info->pPoolSizes, pool_sizes_size);
430*61046927SAndroid Build Coastguard Worker
431*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
432*61046927SAndroid Build Coastguard Worker
433*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
434*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, descriptor_pool),
435*61046927SAndroid Build Coastguard Worker .is_driver_internal = false,
436*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_DESCRIPTOR_POOL,
437*61046927SAndroid Build Coastguard Worker .descriptor_pool = {
438*61046927SAndroid Build Coastguard Worker .max_sets = create_info->maxSets,
439*61046927SAndroid Build Coastguard Worker .pool_size_count = create_info->poolSizeCount,
440*61046927SAndroid Build Coastguard Worker .pool_sizes = pool_sizes,
441*61046927SAndroid Build Coastguard Worker },
442*61046927SAndroid Build Coastguard Worker };
443*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
444*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
445*61046927SAndroid Build Coastguard Worker
446*61046927SAndroid Build Coastguard Worker if (descriptor_pool->bo) {
447*61046927SAndroid Build Coastguard Worker tu_rmv_emit_resource_bind_locked(device, token.resource_id,
448*61046927SAndroid Build Coastguard Worker descriptor_pool->bo->iova,
449*61046927SAndroid Build Coastguard Worker descriptor_pool->bo->size);
450*61046927SAndroid Build Coastguard Worker }
451*61046927SAndroid Build Coastguard Worker
452*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
453*61046927SAndroid Build Coastguard Worker }
454*61046927SAndroid Build Coastguard Worker
455*61046927SAndroid Build Coastguard Worker static inline void
tu_rmv_log_pipeline_create(struct tu_device * device,struct tu_pipeline * pipeline)456*61046927SAndroid Build Coastguard Worker tu_rmv_log_pipeline_create(struct tu_device *device,
457*61046927SAndroid Build Coastguard Worker struct tu_pipeline *pipeline)
458*61046927SAndroid Build Coastguard Worker {
459*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
460*61046927SAndroid Build Coastguard Worker
461*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
462*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, pipeline),
463*61046927SAndroid Build Coastguard Worker .is_driver_internal = false,
464*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_PIPELINE,
465*61046927SAndroid Build Coastguard Worker .pipeline = {
466*61046927SAndroid Build Coastguard Worker .is_internal = false,
467*61046927SAndroid Build Coastguard Worker /* TODO: provide pipeline hash data when available. */
468*61046927SAndroid Build Coastguard Worker .hash_lo = 0, .hash_hi = 0,
469*61046927SAndroid Build Coastguard Worker .shader_stages = pipeline->active_stages,
470*61046927SAndroid Build Coastguard Worker .is_ngg = false,
471*61046927SAndroid Build Coastguard Worker },
472*61046927SAndroid Build Coastguard Worker };
473*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
474*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
475*61046927SAndroid Build Coastguard Worker
476*61046927SAndroid Build Coastguard Worker if (pipeline->bo.bo) {
477*61046927SAndroid Build Coastguard Worker tu_rmv_emit_resource_bind_locked(device, token.resource_id,
478*61046927SAndroid Build Coastguard Worker pipeline->bo.iova, pipeline->bo.size);
479*61046927SAndroid Build Coastguard Worker }
480*61046927SAndroid Build Coastguard Worker
481*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
482*61046927SAndroid Build Coastguard Worker }
483*61046927SAndroid Build Coastguard Worker
484*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_graphics_pipeline_create(struct tu_device * device,struct tu_graphics_pipeline * graphics_pipeline)485*61046927SAndroid Build Coastguard Worker tu_rmv_log_graphics_pipeline_create(struct tu_device *device,
486*61046927SAndroid Build Coastguard Worker struct tu_graphics_pipeline *graphics_pipeline)
487*61046927SAndroid Build Coastguard Worker {
488*61046927SAndroid Build Coastguard Worker tu_rmv_log_pipeline_create(device, &graphics_pipeline->base);
489*61046927SAndroid Build Coastguard Worker }
490*61046927SAndroid Build Coastguard Worker
491*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_compute_pipeline_create(struct tu_device * device,struct tu_compute_pipeline * compute_pipeline)492*61046927SAndroid Build Coastguard Worker tu_rmv_log_compute_pipeline_create(struct tu_device *device,
493*61046927SAndroid Build Coastguard Worker struct tu_compute_pipeline *compute_pipeline)
494*61046927SAndroid Build Coastguard Worker {
495*61046927SAndroid Build Coastguard Worker tu_rmv_log_pipeline_create(device, &compute_pipeline->base);
496*61046927SAndroid Build Coastguard Worker }
497*61046927SAndroid Build Coastguard Worker
498*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_event_create(struct tu_device * device,const VkEventCreateInfo * create_info,struct tu_event * event)499*61046927SAndroid Build Coastguard Worker tu_rmv_log_event_create(struct tu_device *device,
500*61046927SAndroid Build Coastguard Worker const VkEventCreateInfo *create_info,
501*61046927SAndroid Build Coastguard Worker struct tu_event *event)
502*61046927SAndroid Build Coastguard Worker {
503*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
504*61046927SAndroid Build Coastguard Worker
505*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
506*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, event),
507*61046927SAndroid Build Coastguard Worker .is_driver_internal = false,
508*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_GPU_EVENT,
509*61046927SAndroid Build Coastguard Worker .event = {
510*61046927SAndroid Build Coastguard Worker .flags = create_info->flags,
511*61046927SAndroid Build Coastguard Worker },
512*61046927SAndroid Build Coastguard Worker };
513*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
514*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
515*61046927SAndroid Build Coastguard Worker
516*61046927SAndroid Build Coastguard Worker if (event->bo) {
517*61046927SAndroid Build Coastguard Worker tu_rmv_emit_resource_bind_locked(device, token.resource_id,
518*61046927SAndroid Build Coastguard Worker event->bo->iova, event->bo->size);
519*61046927SAndroid Build Coastguard Worker }
520*61046927SAndroid Build Coastguard Worker
521*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
522*61046927SAndroid Build Coastguard Worker }
523*61046927SAndroid Build Coastguard Worker
524*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_internal_resource_create(struct tu_device * device,struct tu_bo * bo)525*61046927SAndroid Build Coastguard Worker tu_rmv_log_internal_resource_create(struct tu_device *device, struct tu_bo *bo)
526*61046927SAndroid Build Coastguard Worker {
527*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
528*61046927SAndroid Build Coastguard Worker
529*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
530*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, bo),
531*61046927SAndroid Build Coastguard Worker .is_driver_internal = true,
532*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_MISC_INTERNAL,
533*61046927SAndroid Build Coastguard Worker .misc_internal = {
534*61046927SAndroid Build Coastguard Worker .type = VK_RMV_MISC_INTERNAL_TYPE_PADDING,
535*61046927SAndroid Build Coastguard Worker },
536*61046927SAndroid Build Coastguard Worker };
537*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
538*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
539*61046927SAndroid Build Coastguard Worker
540*61046927SAndroid Build Coastguard Worker tu_rmv_emit_resource_bind_locked(device, token.resource_id,
541*61046927SAndroid Build Coastguard Worker bo->iova, bo->size);
542*61046927SAndroid Build Coastguard Worker
543*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
544*61046927SAndroid Build Coastguard Worker }
545*61046927SAndroid Build Coastguard Worker
546*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_resource_name(struct tu_device * device,const void * resource,const char * resource_name)547*61046927SAndroid Build Coastguard Worker tu_rmv_log_resource_name(struct tu_device *device, const void *resource,
548*61046927SAndroid Build Coastguard Worker const char *resource_name)
549*61046927SAndroid Build Coastguard Worker {
550*61046927SAndroid Build Coastguard Worker size_t name_len = MIN2(strlen(resource_name) + 1, 128);
551*61046927SAndroid Build Coastguard Worker char *name_buf = (char *) malloc(name_len);
552*61046927SAndroid Build Coastguard Worker if (!name_buf)
553*61046927SAndroid Build Coastguard Worker return;
554*61046927SAndroid Build Coastguard Worker
555*61046927SAndroid Build Coastguard Worker strncpy(name_buf, resource_name, name_len);
556*61046927SAndroid Build Coastguard Worker name_buf[name_len - 1] = '\0';
557*61046927SAndroid Build Coastguard Worker
558*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
559*61046927SAndroid Build Coastguard Worker
560*61046927SAndroid Build Coastguard Worker struct vk_rmv_userdata_token token = {
561*61046927SAndroid Build Coastguard Worker .name = name_buf,
562*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, resource)
563*61046927SAndroid Build Coastguard Worker };
564*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
565*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_USERDATA, &token);
566*61046927SAndroid Build Coastguard Worker
567*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
568*61046927SAndroid Build Coastguard Worker }
569*61046927SAndroid Build Coastguard Worker
570*61046927SAndroid Build Coastguard Worker void
tu_rmv_log_resource_destroy(struct tu_device * device,const void * resource)571*61046927SAndroid Build Coastguard Worker tu_rmv_log_resource_destroy(struct tu_device *device, const void *resource)
572*61046927SAndroid Build Coastguard Worker {
573*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
574*61046927SAndroid Build Coastguard Worker
575*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_destroy_token token = {
576*61046927SAndroid Build Coastguard Worker .resource_id = tu_rmv_get_resource_id_locked(device, resource),
577*61046927SAndroid Build Coastguard Worker };
578*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
579*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_DESTROY, &token);
580*61046927SAndroid Build Coastguard Worker
581*61046927SAndroid Build Coastguard Worker tu_rmv_destroy_resource_id_locked(device, resource);
582*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
583*61046927SAndroid Build Coastguard Worker }
584*61046927SAndroid Build Coastguard Worker
585