1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2023 Intel Corporation
3*61046927SAndroid Build Coastguard Worker *
4*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker *
11*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker * Software.
14*61046927SAndroid Build Coastguard Worker *
15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*61046927SAndroid Build Coastguard Worker * IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker */
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard Worker #include <errno.h>
25*61046927SAndroid Build Coastguard Worker #include <fcntl.h>
26*61046927SAndroid Build Coastguard Worker #include <stdio.h>
27*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
28*61046927SAndroid Build Coastguard Worker #include "anv_private.h"
29*61046927SAndroid Build Coastguard Worker
30*61046927SAndroid Build Coastguard Worker static VkResult
capture_trace(VkQueue _queue)31*61046927SAndroid Build Coastguard Worker capture_trace(VkQueue _queue)
32*61046927SAndroid Build Coastguard Worker {
33*61046927SAndroid Build Coastguard Worker ANV_FROM_HANDLE(anv_queue, queue, _queue);
34*61046927SAndroid Build Coastguard Worker
35*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&queue->device->vk.memory_trace_data.token_mtx);
36*61046927SAndroid Build Coastguard Worker vk_dump_rmv_capture(&queue->device->vk.memory_trace_data);
37*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&queue->device->vk.memory_trace_data.token_mtx);
38*61046927SAndroid Build Coastguard Worker
39*61046927SAndroid Build Coastguard Worker return VK_SUCCESS;
40*61046927SAndroid Build Coastguard Worker }
41*61046927SAndroid Build Coastguard Worker
42*61046927SAndroid Build Coastguard Worker void
anv_memory_trace_init(struct anv_device * device)43*61046927SAndroid Build Coastguard Worker anv_memory_trace_init(struct anv_device *device)
44*61046927SAndroid Build Coastguard Worker {
45*61046927SAndroid Build Coastguard Worker struct vk_rmv_device_info info;
46*61046927SAndroid Build Coastguard Worker memset(&info, 0, sizeof(info));
47*61046927SAndroid Build Coastguard Worker anv_rmv_fill_device_info(device->physical, &info);
48*61046927SAndroid Build Coastguard Worker vk_memory_trace_init(&device->vk, &info);
49*61046927SAndroid Build Coastguard Worker
50*61046927SAndroid Build Coastguard Worker if (!device->vk.memory_trace_data.is_enabled)
51*61046927SAndroid Build Coastguard Worker return;
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker device->vk.capture_trace = capture_trace;
54*61046927SAndroid Build Coastguard Worker }
55*61046927SAndroid Build Coastguard Worker
56*61046927SAndroid Build Coastguard Worker static void
fill_memory_info(const struct anv_physical_device * device,struct vk_rmv_memory_info * out_info,int32_t index)57*61046927SAndroid Build Coastguard Worker fill_memory_info(const struct anv_physical_device *device,
58*61046927SAndroid Build Coastguard Worker struct vk_rmv_memory_info *out_info,
59*61046927SAndroid Build Coastguard Worker int32_t index)
60*61046927SAndroid Build Coastguard Worker {
61*61046927SAndroid Build Coastguard Worker switch (index) {
62*61046927SAndroid Build Coastguard Worker case VK_RMV_MEMORY_LOCATION_DEVICE:
63*61046927SAndroid Build Coastguard Worker out_info->physical_base_address = 0;
64*61046927SAndroid Build Coastguard Worker out_info->size = device->memory.heaps[0].size;
65*61046927SAndroid Build Coastguard Worker break;
66*61046927SAndroid Build Coastguard Worker case VK_RMV_MEMORY_LOCATION_DEVICE_INVISIBLE:
67*61046927SAndroid Build Coastguard Worker out_info->physical_base_address = device->memory.heaps[0].size;
68*61046927SAndroid Build Coastguard Worker out_info->size = device->vram_non_mappable.size;
69*61046927SAndroid Build Coastguard Worker break;
70*61046927SAndroid Build Coastguard Worker case VK_RMV_MEMORY_LOCATION_HOST:
71*61046927SAndroid Build Coastguard Worker out_info->physical_base_address = 0;
72*61046927SAndroid Build Coastguard Worker out_info->size = device->memory.heaps[1].size;
73*61046927SAndroid Build Coastguard Worker break;
74*61046927SAndroid Build Coastguard Worker default:
75*61046927SAndroid Build Coastguard Worker unreachable("invalid memory index");
76*61046927SAndroid Build Coastguard Worker }
77*61046927SAndroid Build Coastguard Worker }
78*61046927SAndroid Build Coastguard Worker
79*61046927SAndroid Build Coastguard Worker void
anv_rmv_fill_device_info(const struct anv_physical_device * device,struct vk_rmv_device_info * info)80*61046927SAndroid Build Coastguard Worker anv_rmv_fill_device_info(const struct anv_physical_device *device,
81*61046927SAndroid Build Coastguard Worker struct vk_rmv_device_info *info)
82*61046927SAndroid Build Coastguard Worker {
83*61046927SAndroid Build Coastguard Worker for (int32_t i = 0; i < VK_RMV_MEMORY_LOCATION_COUNT; ++i)
84*61046927SAndroid Build Coastguard Worker fill_memory_info(device, &info->memory_infos[i], i);
85*61046927SAndroid Build Coastguard Worker
86*61046927SAndroid Build Coastguard Worker strncpy(info->device_name, device->info.name, sizeof(info->device_name) - 1);
87*61046927SAndroid Build Coastguard Worker info->pcie_revision_id = device->info.pci_revision_id;
88*61046927SAndroid Build Coastguard Worker info->pcie_device_id = device->info.pci_device_id;
89*61046927SAndroid Build Coastguard Worker /* TODO: */
90*61046927SAndroid Build Coastguard Worker info->pcie_family_id = 0;
91*61046927SAndroid Build Coastguard Worker info->minimum_shader_clock = 0;
92*61046927SAndroid Build Coastguard Worker info->maximum_shader_clock = 1 * 1024 * 1024 * 1024;
93*61046927SAndroid Build Coastguard Worker info->vram_type = VK_RMV_MEMORY_TYPE_DDR4;
94*61046927SAndroid Build Coastguard Worker info->vram_bus_width = 256;
95*61046927SAndroid Build Coastguard Worker info->vram_operations_per_clock = 1;
96*61046927SAndroid Build Coastguard Worker info->minimum_memory_clock = 0;
97*61046927SAndroid Build Coastguard Worker info->maximum_memory_clock = 1;
98*61046927SAndroid Build Coastguard Worker info->vram_bandwidth = 256;
99*61046927SAndroid Build Coastguard Worker }
100*61046927SAndroid Build Coastguard Worker
101*61046927SAndroid Build Coastguard Worker void
anv_memory_trace_finish(struct anv_device * device)102*61046927SAndroid Build Coastguard Worker anv_memory_trace_finish(struct anv_device *device)
103*61046927SAndroid Build Coastguard Worker {
104*61046927SAndroid Build Coastguard Worker }
105*61046927SAndroid Build Coastguard Worker
106*61046927SAndroid Build Coastguard Worker static uint32_t
resource_id_locked(struct anv_device * device,const void * obj)107*61046927SAndroid Build Coastguard Worker resource_id_locked(struct anv_device *device, const void *obj)
108*61046927SAndroid Build Coastguard Worker {
109*61046927SAndroid Build Coastguard Worker return vk_rmv_get_resource_id_locked(&device->vk, (uint64_t)(uintptr_t)obj);
110*61046927SAndroid Build Coastguard Worker }
111*61046927SAndroid Build Coastguard Worker
112*61046927SAndroid Build Coastguard Worker static void
resource_destroy_locked(struct anv_device * device,const void * obj)113*61046927SAndroid Build Coastguard Worker resource_destroy_locked(struct anv_device *device, const void *obj)
114*61046927SAndroid Build Coastguard Worker {
115*61046927SAndroid Build Coastguard Worker vk_rmv_destroy_resource_id_locked(&device->vk, (uint64_t)(uintptr_t)obj);
116*61046927SAndroid Build Coastguard Worker }
117*61046927SAndroid Build Coastguard Worker
118*61046927SAndroid Build Coastguard Worker /* The token lock must be held when entering _locked functions */
119*61046927SAndroid Build Coastguard Worker static void
log_resource_bind_locked(struct anv_device * device,uint64_t resource_id,struct anv_bo * bo,uint64_t offset,uint64_t size)120*61046927SAndroid Build Coastguard Worker log_resource_bind_locked(struct anv_device *device, uint64_t resource_id,
121*61046927SAndroid Build Coastguard Worker struct anv_bo *bo, uint64_t offset,
122*61046927SAndroid Build Coastguard Worker uint64_t size)
123*61046927SAndroid Build Coastguard Worker {
124*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_bind_token token = {
125*61046927SAndroid Build Coastguard Worker .resource_id = resource_id,
126*61046927SAndroid Build Coastguard Worker .is_system_memory = bo ? (bo->alloc_flags & ANV_BO_ALLOC_NO_LOCAL_MEM) : 0,
127*61046927SAndroid Build Coastguard Worker .address = (bo ? bo->offset : 0) + offset,
128*61046927SAndroid Build Coastguard Worker .size = size,
129*61046927SAndroid Build Coastguard Worker };
130*61046927SAndroid Build Coastguard Worker
131*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_BIND, &token);
132*61046927SAndroid Build Coastguard Worker }
133*61046927SAndroid Build Coastguard Worker
134*61046927SAndroid Build Coastguard Worker static void
log_state_pool_bind_locked(struct anv_device * device,uint64_t resource_id,struct anv_state_pool * pool,struct anv_state * state)135*61046927SAndroid Build Coastguard Worker log_state_pool_bind_locked(struct anv_device *device, uint64_t resource_id,
136*61046927SAndroid Build Coastguard Worker struct anv_state_pool *pool, struct anv_state *state)
137*61046927SAndroid Build Coastguard Worker {
138*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_bind_token token = {
139*61046927SAndroid Build Coastguard Worker .resource_id = resource_id,
140*61046927SAndroid Build Coastguard Worker .is_system_memory = (pool->block_pool.bo_alloc_flags &
141*61046927SAndroid Build Coastguard Worker ANV_BO_ALLOC_NO_LOCAL_MEM) != 0,
142*61046927SAndroid Build Coastguard Worker .address = anv_address_physical(
143*61046927SAndroid Build Coastguard Worker anv_state_pool_state_address(pool, *state)),
144*61046927SAndroid Build Coastguard Worker .size = state->alloc_size,
145*61046927SAndroid Build Coastguard Worker };
146*61046927SAndroid Build Coastguard Worker
147*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_BIND, &token);
148*61046927SAndroid Build Coastguard Worker }
149*61046927SAndroid Build Coastguard Worker
150*61046927SAndroid Build Coastguard Worker static enum vk_rmv_memory_location
anv_heap_index_to_memory_location(struct anv_device * device,unsigned heap_index)151*61046927SAndroid Build Coastguard Worker anv_heap_index_to_memory_location(struct anv_device *device,
152*61046927SAndroid Build Coastguard Worker unsigned heap_index)
153*61046927SAndroid Build Coastguard Worker {
154*61046927SAndroid Build Coastguard Worker if (heap_index == 0)
155*61046927SAndroid Build Coastguard Worker return device->physical->vram_non_mappable.size != 0 ?
156*61046927SAndroid Build Coastguard Worker VK_RMV_MEMORY_LOCATION_DEVICE_INVISIBLE :
157*61046927SAndroid Build Coastguard Worker VK_RMV_MEMORY_LOCATION_DEVICE;
158*61046927SAndroid Build Coastguard Worker else if (heap_index == 1)
159*61046927SAndroid Build Coastguard Worker return VK_RMV_MEMORY_LOCATION_HOST;
160*61046927SAndroid Build Coastguard Worker else
161*61046927SAndroid Build Coastguard Worker return VK_RMV_MEMORY_LOCATION_DEVICE;
162*61046927SAndroid Build Coastguard Worker }
163*61046927SAndroid Build Coastguard Worker
164*61046927SAndroid Build Coastguard Worker static void
anv_rmv_log_bo_gtt_unmap_locked(struct anv_device * device,struct anv_bo * bo)165*61046927SAndroid Build Coastguard Worker anv_rmv_log_bo_gtt_unmap_locked(struct anv_device *device,
166*61046927SAndroid Build Coastguard Worker struct anv_bo *bo)
167*61046927SAndroid Build Coastguard Worker {
168*61046927SAndroid Build Coastguard Worker if (!bo->gtt_mapped)
169*61046927SAndroid Build Coastguard Worker return;
170*61046927SAndroid Build Coastguard Worker
171*61046927SAndroid Build Coastguard Worker struct vk_rmv_token token = {
172*61046927SAndroid Build Coastguard Worker .type = VK_RMV_TOKEN_TYPE_PAGE_TABLE_UPDATE,
173*61046927SAndroid Build Coastguard Worker .timestamp = (uint64_t)os_time_get_nano(),
174*61046927SAndroid Build Coastguard Worker .data = {
175*61046927SAndroid Build Coastguard Worker .page_table_update = {
176*61046927SAndroid Build Coastguard Worker .type = VK_RMV_PAGE_TABLE_UPDATE_TYPE_UPDATE,
177*61046927SAndroid Build Coastguard Worker .page_size = device->info->mem_alignment,
178*61046927SAndroid Build Coastguard Worker .page_count = DIV_ROUND_UP(bo->size,
179*61046927SAndroid Build Coastguard Worker device->info->mem_alignment),
180*61046927SAndroid Build Coastguard Worker .pid = getpid(),
181*61046927SAndroid Build Coastguard Worker .virtual_address = bo->offset,
182*61046927SAndroid Build Coastguard Worker .physical_address = bo->offset,
183*61046927SAndroid Build Coastguard Worker .is_unmap = true,
184*61046927SAndroid Build Coastguard Worker },
185*61046927SAndroid Build Coastguard Worker },
186*61046927SAndroid Build Coastguard Worker };
187*61046927SAndroid Build Coastguard Worker util_dynarray_append(&device->vk.memory_trace_data.tokens,
188*61046927SAndroid Build Coastguard Worker struct vk_rmv_token, token);
189*61046927SAndroid Build Coastguard Worker
190*61046927SAndroid Build Coastguard Worker bo->gtt_mapped = false;
191*61046927SAndroid Build Coastguard Worker }
192*61046927SAndroid Build Coastguard Worker
193*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_bo_gtt_unmap(struct anv_device * device,struct anv_bo * bo)194*61046927SAndroid Build Coastguard Worker anv_rmv_log_bo_gtt_unmap(struct anv_device *device,
195*61046927SAndroid Build Coastguard Worker struct anv_bo *bo)
196*61046927SAndroid Build Coastguard Worker {
197*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
198*61046927SAndroid Build Coastguard Worker anv_rmv_log_bo_gtt_unmap_locked(device, bo);
199*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
200*61046927SAndroid Build Coastguard Worker }
201*61046927SAndroid Build Coastguard Worker
202*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_bo_gtt_map(struct anv_device * device,struct anv_bo * bo)203*61046927SAndroid Build Coastguard Worker anv_rmv_log_bo_gtt_map(struct anv_device *device,
204*61046927SAndroid Build Coastguard Worker struct anv_bo *bo)
205*61046927SAndroid Build Coastguard Worker {
206*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
207*61046927SAndroid Build Coastguard Worker struct vk_rmv_token token = {
208*61046927SAndroid Build Coastguard Worker .type = VK_RMV_TOKEN_TYPE_PAGE_TABLE_UPDATE,
209*61046927SAndroid Build Coastguard Worker .timestamp = (uint64_t)os_time_get_nano(),
210*61046927SAndroid Build Coastguard Worker .data = {
211*61046927SAndroid Build Coastguard Worker .page_table_update = {
212*61046927SAndroid Build Coastguard Worker .type = VK_RMV_PAGE_TABLE_UPDATE_TYPE_UPDATE,
213*61046927SAndroid Build Coastguard Worker .page_size = device->info->mem_alignment,
214*61046927SAndroid Build Coastguard Worker .page_count = DIV_ROUND_UP(bo->size,
215*61046927SAndroid Build Coastguard Worker device->info->mem_alignment),
216*61046927SAndroid Build Coastguard Worker .pid = getpid(),
217*61046927SAndroid Build Coastguard Worker .virtual_address = bo->offset,
218*61046927SAndroid Build Coastguard Worker .physical_address = bo->offset,
219*61046927SAndroid Build Coastguard Worker .is_unmap = false,
220*61046927SAndroid Build Coastguard Worker },
221*61046927SAndroid Build Coastguard Worker },
222*61046927SAndroid Build Coastguard Worker };
223*61046927SAndroid Build Coastguard Worker util_dynarray_append(&device->vk.memory_trace_data.tokens,
224*61046927SAndroid Build Coastguard Worker struct vk_rmv_token, token);
225*61046927SAndroid Build Coastguard Worker
226*61046927SAndroid Build Coastguard Worker bo->gtt_mapped = true;
227*61046927SAndroid Build Coastguard Worker
228*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
229*61046927SAndroid Build Coastguard Worker }
230*61046927SAndroid Build Coastguard Worker
231*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_bos_gtt_map(struct anv_device * device,struct anv_bo ** bos,uint32_t bo_count)232*61046927SAndroid Build Coastguard Worker anv_rmv_log_bos_gtt_map(struct anv_device *device,
233*61046927SAndroid Build Coastguard Worker struct anv_bo **bos,
234*61046927SAndroid Build Coastguard Worker uint32_t bo_count)
235*61046927SAndroid Build Coastguard Worker {
236*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
237*61046927SAndroid Build Coastguard Worker for (uint32_t i = 0; i < bo_count; i++) {
238*61046927SAndroid Build Coastguard Worker struct anv_bo *bo = bos[i];
239*61046927SAndroid Build Coastguard Worker
240*61046927SAndroid Build Coastguard Worker if (bo->gtt_mapped)
241*61046927SAndroid Build Coastguard Worker continue;
242*61046927SAndroid Build Coastguard Worker
243*61046927SAndroid Build Coastguard Worker struct vk_rmv_token token = {
244*61046927SAndroid Build Coastguard Worker .type = VK_RMV_TOKEN_TYPE_PAGE_TABLE_UPDATE,
245*61046927SAndroid Build Coastguard Worker .timestamp = (uint64_t)os_time_get_nano(),
246*61046927SAndroid Build Coastguard Worker .data = {
247*61046927SAndroid Build Coastguard Worker .page_table_update = {
248*61046927SAndroid Build Coastguard Worker .type = VK_RMV_PAGE_TABLE_UPDATE_TYPE_UPDATE,
249*61046927SAndroid Build Coastguard Worker .page_size = device->info->mem_alignment,
250*61046927SAndroid Build Coastguard Worker .page_count = DIV_ROUND_UP(bo->size,
251*61046927SAndroid Build Coastguard Worker device->info->mem_alignment),
252*61046927SAndroid Build Coastguard Worker .pid = getpid(),
253*61046927SAndroid Build Coastguard Worker .virtual_address = bo->offset,
254*61046927SAndroid Build Coastguard Worker .physical_address = bo->offset,
255*61046927SAndroid Build Coastguard Worker .is_unmap = false,
256*61046927SAndroid Build Coastguard Worker },
257*61046927SAndroid Build Coastguard Worker },
258*61046927SAndroid Build Coastguard Worker };
259*61046927SAndroid Build Coastguard Worker util_dynarray_append(&device->vk.memory_trace_data.tokens,
260*61046927SAndroid Build Coastguard Worker struct vk_rmv_token, token);
261*61046927SAndroid Build Coastguard Worker
262*61046927SAndroid Build Coastguard Worker bo->gtt_mapped = true;
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
anv_rmv_log_vm_binds(struct anv_device * device,struct anv_vm_bind * binds,uint32_t bind_count)268*61046927SAndroid Build Coastguard Worker anv_rmv_log_vm_binds(struct anv_device *device,
269*61046927SAndroid Build Coastguard Worker struct anv_vm_bind *binds,
270*61046927SAndroid Build Coastguard Worker uint32_t bind_count)
271*61046927SAndroid Build Coastguard Worker {
272*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
273*61046927SAndroid Build Coastguard Worker for (uint32_t i = 0; i < bind_count; i++) {
274*61046927SAndroid Build Coastguard Worker
275*61046927SAndroid Build Coastguard Worker struct vk_rmv_token token = {
276*61046927SAndroid Build Coastguard Worker .type = VK_RMV_TOKEN_TYPE_PAGE_TABLE_UPDATE,
277*61046927SAndroid Build Coastguard Worker .timestamp = (uint64_t)os_time_get_nano(),
278*61046927SAndroid Build Coastguard Worker .data = {
279*61046927SAndroid Build Coastguard Worker .page_table_update = {
280*61046927SAndroid Build Coastguard Worker .type = VK_RMV_PAGE_TABLE_UPDATE_TYPE_UPDATE,
281*61046927SAndroid Build Coastguard Worker .page_size = device->info->mem_alignment,
282*61046927SAndroid Build Coastguard Worker .page_count = DIV_ROUND_UP(binds[i].size,
283*61046927SAndroid Build Coastguard Worker device->info->mem_alignment),
284*61046927SAndroid Build Coastguard Worker .pid = getpid(),
285*61046927SAndroid Build Coastguard Worker .virtual_address = binds[i].address,
286*61046927SAndroid Build Coastguard Worker .physical_address = binds[i].bo_offset,
287*61046927SAndroid Build Coastguard Worker .is_unmap = binds[i].op == ANV_VM_UNBIND,
288*61046927SAndroid Build Coastguard Worker },
289*61046927SAndroid Build Coastguard Worker },
290*61046927SAndroid Build Coastguard Worker };
291*61046927SAndroid Build Coastguard Worker util_dynarray_append(&device->vk.memory_trace_data.tokens,
292*61046927SAndroid Build Coastguard Worker struct vk_rmv_token, token);
293*61046927SAndroid Build Coastguard Worker }
294*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
295*61046927SAndroid Build Coastguard Worker }
296*61046927SAndroid Build Coastguard Worker
297*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_heap_create(struct anv_device * device,struct anv_device_memory * memory,bool is_internal,VkMemoryAllocateFlags alloc_flags)298*61046927SAndroid Build Coastguard Worker anv_rmv_log_heap_create(struct anv_device *device,
299*61046927SAndroid Build Coastguard Worker struct anv_device_memory *memory,
300*61046927SAndroid Build Coastguard Worker bool is_internal,
301*61046927SAndroid Build Coastguard Worker VkMemoryAllocateFlags alloc_flags)
302*61046927SAndroid Build Coastguard Worker {
303*61046927SAndroid Build Coastguard Worker /* Do not log zero-sized device memory objects. */
304*61046927SAndroid Build Coastguard Worker if (!memory->vk.size)
305*61046927SAndroid Build Coastguard Worker return;
306*61046927SAndroid Build Coastguard Worker
307*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
308*61046927SAndroid Build Coastguard Worker
309*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
310*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_HEAP,
311*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, memory),
312*61046927SAndroid Build Coastguard Worker .is_driver_internal = is_internal,
313*61046927SAndroid Build Coastguard Worker .heap = {
314*61046927SAndroid Build Coastguard Worker .alignment = device->info->mem_alignment,
315*61046927SAndroid Build Coastguard Worker .size = memory->vk.size,
316*61046927SAndroid Build Coastguard Worker .heap_index = anv_heap_index_to_memory_location(device,
317*61046927SAndroid Build Coastguard Worker memory->type->heapIndex),
318*61046927SAndroid Build Coastguard Worker .alloc_flags = alloc_flags,
319*61046927SAndroid Build Coastguard Worker },
320*61046927SAndroid Build Coastguard Worker };
321*61046927SAndroid Build Coastguard Worker
322*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
323*61046927SAndroid Build Coastguard Worker log_resource_bind_locked(device, token.resource_id, memory->bo, 0, memory->vk.size);
324*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
325*61046927SAndroid Build Coastguard Worker }
326*61046927SAndroid Build Coastguard Worker
327*61046927SAndroid Build Coastguard Worker static void
anv_rmv_log_vma_locked(struct anv_device * device,uint64_t address,uint64_t size,bool internal,bool vram,bool in_invisible_vram)328*61046927SAndroid Build Coastguard Worker anv_rmv_log_vma_locked(struct anv_device *device, uint64_t address, uint64_t size,
329*61046927SAndroid Build Coastguard Worker bool internal, bool vram, bool in_invisible_vram)
330*61046927SAndroid Build Coastguard Worker {
331*61046927SAndroid Build Coastguard Worker struct vk_rmv_virtual_allocate_token token = {
332*61046927SAndroid Build Coastguard Worker .address = address,
333*61046927SAndroid Build Coastguard Worker /* If all VRAM is visible, no bo will be in invisible memory. */
334*61046927SAndroid Build Coastguard Worker .is_in_invisible_vram = in_invisible_vram,
335*61046927SAndroid Build Coastguard Worker .preferred_domains = (vram ?
336*61046927SAndroid Build Coastguard Worker VK_RMV_KERNEL_MEMORY_DOMAIN_VRAM :
337*61046927SAndroid Build Coastguard Worker VK_RMV_KERNEL_MEMORY_DOMAIN_GTT),
338*61046927SAndroid Build Coastguard Worker .is_driver_internal = internal,
339*61046927SAndroid Build Coastguard Worker .page_count = DIV_ROUND_UP(size, 4096),
340*61046927SAndroid Build Coastguard Worker };
341*61046927SAndroid Build Coastguard Worker
342*61046927SAndroid Build Coastguard Worker
343*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_VIRTUAL_ALLOCATE, &token);
344*61046927SAndroid Build Coastguard Worker }
345*61046927SAndroid Build Coastguard Worker
346*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_bo_allocate(struct anv_device * device,struct anv_bo * bo)347*61046927SAndroid Build Coastguard Worker anv_rmv_log_bo_allocate(struct anv_device *device,
348*61046927SAndroid Build Coastguard Worker struct anv_bo *bo)
349*61046927SAndroid Build Coastguard Worker {
350*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
351*61046927SAndroid Build Coastguard Worker anv_rmv_log_vma_locked(device, bo->offset, bo->size,
352*61046927SAndroid Build Coastguard Worker bo->alloc_flags & ANV_BO_ALLOC_INTERNAL,
353*61046927SAndroid Build Coastguard Worker (bo->alloc_flags & ANV_BO_ALLOC_NO_LOCAL_MEM) == 0,
354*61046927SAndroid Build Coastguard Worker device->physical->vram_non_mappable.size != 0 &&
355*61046927SAndroid Build Coastguard Worker (bo->alloc_flags & (ANV_BO_ALLOC_MAPPED |
356*61046927SAndroid Build Coastguard Worker ANV_BO_ALLOC_HOST_CACHED_COHERENT |
357*61046927SAndroid Build Coastguard Worker ANV_BO_ALLOC_LOCAL_MEM_CPU_VISIBLE |
358*61046927SAndroid Build Coastguard Worker ANV_BO_ALLOC_NO_LOCAL_MEM)) == 0);
359*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
360*61046927SAndroid Build Coastguard Worker
361*61046927SAndroid Build Coastguard Worker if (bo->alloc_flags & ANV_BO_ALLOC_MAPPED)
362*61046927SAndroid Build Coastguard Worker vk_rmv_log_cpu_map(&device->vk, bo->offset, false);
363*61046927SAndroid Build Coastguard Worker }
364*61046927SAndroid Build Coastguard Worker
365*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_bo_destroy(struct anv_device * device,struct anv_bo * bo)366*61046927SAndroid Build Coastguard Worker anv_rmv_log_bo_destroy(struct anv_device *device, struct anv_bo *bo)
367*61046927SAndroid Build Coastguard Worker {
368*61046927SAndroid Build Coastguard Worker struct vk_rmv_virtual_free_token token = {
369*61046927SAndroid Build Coastguard Worker .address = bo->offset,
370*61046927SAndroid Build Coastguard Worker };
371*61046927SAndroid Build Coastguard Worker
372*61046927SAndroid Build Coastguard Worker if (bo->alloc_flags & ANV_BO_ALLOC_MAPPED)
373*61046927SAndroid Build Coastguard Worker vk_rmv_log_cpu_map(&device->vk, bo->offset, true);
374*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
375*61046927SAndroid Build Coastguard Worker anv_rmv_log_bo_gtt_unmap_locked(device, bo);
376*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_VIRTUAL_FREE, &token);
377*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
378*61046927SAndroid Build Coastguard Worker }
379*61046927SAndroid Build Coastguard Worker
380*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_buffer_create(struct anv_device * device,bool is_internal,struct anv_buffer * buffer)381*61046927SAndroid Build Coastguard Worker anv_rmv_log_buffer_create(struct anv_device *device,
382*61046927SAndroid Build Coastguard Worker bool is_internal,
383*61046927SAndroid Build Coastguard Worker struct anv_buffer *buffer)
384*61046927SAndroid Build Coastguard Worker {
385*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
386*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
387*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_BUFFER,
388*61046927SAndroid Build Coastguard Worker .is_driver_internal = is_internal,
389*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, buffer),
390*61046927SAndroid Build Coastguard Worker .buffer = {
391*61046927SAndroid Build Coastguard Worker .create_flags = buffer->vk.create_flags,
392*61046927SAndroid Build Coastguard Worker .size = buffer->vk.size,
393*61046927SAndroid Build Coastguard Worker .usage_flags = buffer->vk.usage,
394*61046927SAndroid Build Coastguard Worker },
395*61046927SAndroid Build Coastguard Worker };
396*61046927SAndroid Build Coastguard Worker
397*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
398*61046927SAndroid Build Coastguard Worker if (buffer->vk.create_flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) {
399*61046927SAndroid Build Coastguard Worker assert(buffer->sparse_data.size != 0);
400*61046927SAndroid Build Coastguard Worker anv_rmv_log_vma_locked(device,
401*61046927SAndroid Build Coastguard Worker buffer->sparse_data.address,
402*61046927SAndroid Build Coastguard Worker buffer->sparse_data.size,
403*61046927SAndroid Build Coastguard Worker false /* internal */, true /* TODO: vram */,
404*61046927SAndroid Build Coastguard Worker true /* in_invisible_vram */);
405*61046927SAndroid Build Coastguard Worker log_resource_bind_locked(device,
406*61046927SAndroid Build Coastguard Worker resource_id_locked(device, buffer),
407*61046927SAndroid Build Coastguard Worker NULL,
408*61046927SAndroid Build Coastguard Worker buffer->sparse_data.address,
409*61046927SAndroid Build Coastguard Worker buffer->sparse_data.size);
410*61046927SAndroid Build Coastguard Worker }
411*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
412*61046927SAndroid Build Coastguard Worker
413*61046927SAndroid Build Coastguard Worker }
414*61046927SAndroid Build Coastguard Worker
415*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_buffer_destroy(struct anv_device * device,struct anv_buffer * buffer)416*61046927SAndroid Build Coastguard Worker anv_rmv_log_buffer_destroy(struct anv_device *device,
417*61046927SAndroid Build Coastguard Worker struct anv_buffer *buffer)
418*61046927SAndroid Build Coastguard Worker {
419*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
420*61046927SAndroid Build Coastguard Worker if (buffer->vk.create_flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) {
421*61046927SAndroid Build Coastguard Worker struct vk_rmv_virtual_free_token token = {
422*61046927SAndroid Build Coastguard Worker .address = buffer->sparse_data.address,
423*61046927SAndroid Build Coastguard Worker };
424*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_VIRTUAL_FREE, &token);
425*61046927SAndroid Build Coastguard Worker }
426*61046927SAndroid Build Coastguard Worker resource_destroy_locked(device, buffer);
427*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
428*61046927SAndroid Build Coastguard Worker
429*61046927SAndroid Build Coastguard Worker }
430*61046927SAndroid Build Coastguard Worker
431*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_buffer_bind(struct anv_device * device,struct anv_buffer * buffer)432*61046927SAndroid Build Coastguard Worker anv_rmv_log_buffer_bind(struct anv_device *device, struct anv_buffer *buffer)
433*61046927SAndroid Build Coastguard Worker {
434*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
435*61046927SAndroid Build Coastguard Worker log_resource_bind_locked(device,
436*61046927SAndroid Build Coastguard Worker resource_id_locked(device, buffer),
437*61046927SAndroid Build Coastguard Worker buffer->address.bo,
438*61046927SAndroid Build Coastguard Worker buffer->address.offset, buffer->vk.size);
439*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
440*61046927SAndroid Build Coastguard Worker }
441*61046927SAndroid Build Coastguard Worker
442*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_image_create(struct anv_device * device,bool is_internal,struct anv_image * image)443*61046927SAndroid Build Coastguard Worker anv_rmv_log_image_create(struct anv_device *device,
444*61046927SAndroid Build Coastguard Worker bool is_internal,
445*61046927SAndroid Build Coastguard Worker struct anv_image *image)
446*61046927SAndroid Build Coastguard Worker {
447*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
448*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token token = {
449*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_IMAGE,
450*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, image),
451*61046927SAndroid Build Coastguard Worker .is_driver_internal = is_internal,
452*61046927SAndroid Build Coastguard Worker .image = {
453*61046927SAndroid Build Coastguard Worker .create_flags = image->vk.create_flags,
454*61046927SAndroid Build Coastguard Worker .usage_flags = image->vk.usage,
455*61046927SAndroid Build Coastguard Worker .type = image->vk.image_type,
456*61046927SAndroid Build Coastguard Worker .extent = image->vk.extent,
457*61046927SAndroid Build Coastguard Worker .format = image->vk.format,
458*61046927SAndroid Build Coastguard Worker .num_mips = image->vk.mip_levels,
459*61046927SAndroid Build Coastguard Worker .num_slices = image->vk.array_layers,
460*61046927SAndroid Build Coastguard Worker .tiling = image->vk.tiling,
461*61046927SAndroid Build Coastguard Worker .alignment_log2 = util_logbase2(
462*61046927SAndroid Build Coastguard Worker image->bindings[ANV_IMAGE_MEMORY_BINDING_MAIN].memory_range.alignment),
463*61046927SAndroid Build Coastguard Worker .log2_samples = util_logbase2(image->vk.samples),
464*61046927SAndroid Build Coastguard Worker .metadata_alignment_log2 = util_logbase2(
465*61046927SAndroid Build Coastguard Worker image->planes[0].aux_surface.isl.alignment_B),
466*61046927SAndroid Build Coastguard Worker .image_alignment_log2 = util_logbase2(
467*61046927SAndroid Build Coastguard Worker image->planes[0].primary_surface.isl.alignment_B),
468*61046927SAndroid Build Coastguard Worker .size = image->planes[0].primary_surface.memory_range.size,
469*61046927SAndroid Build Coastguard Worker .metadata_size = image->planes[0].aux_surface.memory_range.size,
470*61046927SAndroid Build Coastguard Worker .metadata_header_size = 0,
471*61046927SAndroid Build Coastguard Worker .metadata_offset = image->planes[0].aux_surface.memory_range.offset,
472*61046927SAndroid Build Coastguard Worker .metadata_header_offset = image->planes[0].aux_surface.memory_range.offset,
473*61046927SAndroid Build Coastguard Worker .presentable = (image->planes[0].primary_surface.isl.usage &
474*61046927SAndroid Build Coastguard Worker ISL_SURF_USAGE_DISPLAY_BIT) != 0,
475*61046927SAndroid Build Coastguard Worker },
476*61046927SAndroid Build Coastguard Worker };
477*61046927SAndroid Build Coastguard Worker
478*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &token);
479*61046927SAndroid Build Coastguard Worker if (image->vk.create_flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT) {
480*61046927SAndroid Build Coastguard Worker for (uint32_t b = 0; b < ARRAY_SIZE(image->bindings); b++) {
481*61046927SAndroid Build Coastguard Worker if (image->bindings[b].sparse_data.size != 0) {
482*61046927SAndroid Build Coastguard Worker anv_rmv_log_vma_locked(device,
483*61046927SAndroid Build Coastguard Worker image->bindings[b].sparse_data.address,
484*61046927SAndroid Build Coastguard Worker image->bindings[b].sparse_data.size,
485*61046927SAndroid Build Coastguard Worker false /* internal */, true /* TODO: vram */,
486*61046927SAndroid Build Coastguard Worker true /* in_invisible_vram */);
487*61046927SAndroid Build Coastguard Worker log_resource_bind_locked(device,
488*61046927SAndroid Build Coastguard Worker resource_id_locked(device, image),
489*61046927SAndroid Build Coastguard Worker NULL,
490*61046927SAndroid Build Coastguard Worker image->bindings[b].sparse_data.address,
491*61046927SAndroid Build Coastguard Worker image->bindings[b].sparse_data.size);
492*61046927SAndroid Build Coastguard Worker }
493*61046927SAndroid Build Coastguard Worker }
494*61046927SAndroid Build Coastguard Worker }
495*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
496*61046927SAndroid Build Coastguard Worker }
497*61046927SAndroid Build Coastguard Worker
498*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_image_destroy(struct anv_device * device,struct anv_image * image)499*61046927SAndroid Build Coastguard Worker anv_rmv_log_image_destroy(struct anv_device *device,
500*61046927SAndroid Build Coastguard Worker struct anv_image *image)
501*61046927SAndroid Build Coastguard Worker {
502*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
503*61046927SAndroid Build Coastguard Worker if (image->vk.create_flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT) {
504*61046927SAndroid Build Coastguard Worker for (uint32_t b = 0; b < ARRAY_SIZE(image->bindings); b++) {
505*61046927SAndroid Build Coastguard Worker if (image->bindings[b].sparse_data.size != 0) {
506*61046927SAndroid Build Coastguard Worker struct vk_rmv_virtual_free_token token = {
507*61046927SAndroid Build Coastguard Worker .address = image->bindings[b].sparse_data.address,
508*61046927SAndroid Build Coastguard Worker };
509*61046927SAndroid Build Coastguard Worker
510*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_VIRTUAL_FREE, &token);
511*61046927SAndroid Build Coastguard Worker }
512*61046927SAndroid Build Coastguard Worker }
513*61046927SAndroid Build Coastguard Worker }
514*61046927SAndroid Build Coastguard Worker resource_destroy_locked(device, image);
515*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
516*61046927SAndroid Build Coastguard Worker }
517*61046927SAndroid Build Coastguard Worker
518*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_image_bind(struct anv_device * device,struct anv_image * image,enum anv_image_memory_binding binding)519*61046927SAndroid Build Coastguard Worker anv_rmv_log_image_bind(struct anv_device *device,
520*61046927SAndroid Build Coastguard Worker struct anv_image *image,
521*61046927SAndroid Build Coastguard Worker enum anv_image_memory_binding binding)
522*61046927SAndroid Build Coastguard Worker {
523*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
524*61046927SAndroid Build Coastguard Worker log_resource_bind_locked(device,
525*61046927SAndroid Build Coastguard Worker resource_id_locked(device, image),
526*61046927SAndroid Build Coastguard Worker image->bindings[binding].address.bo,
527*61046927SAndroid Build Coastguard Worker image->bindings[binding].address.offset,
528*61046927SAndroid Build Coastguard Worker image->bindings[binding].memory_range.size);
529*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
530*61046927SAndroid Build Coastguard Worker }
531*61046927SAndroid Build Coastguard Worker
532*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_query_pool_create(struct anv_device * device,struct anv_query_pool * pool,bool is_internal)533*61046927SAndroid Build Coastguard Worker anv_rmv_log_query_pool_create(struct anv_device *device,
534*61046927SAndroid Build Coastguard Worker struct anv_query_pool *pool,
535*61046927SAndroid Build Coastguard Worker bool is_internal)
536*61046927SAndroid Build Coastguard Worker {
537*61046927SAndroid Build Coastguard Worker if (pool->vk.query_type != VK_QUERY_TYPE_OCCLUSION &&
538*61046927SAndroid Build Coastguard Worker pool->vk.query_type != VK_QUERY_TYPE_PIPELINE_STATISTICS &&
539*61046927SAndroid Build Coastguard Worker pool->vk.query_type != VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT)
540*61046927SAndroid Build Coastguard Worker return;
541*61046927SAndroid Build Coastguard Worker
542*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
543*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token create_token = {
544*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_QUERY_HEAP,
545*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, pool),
546*61046927SAndroid Build Coastguard Worker .is_driver_internal = is_internal,
547*61046927SAndroid Build Coastguard Worker .query_pool = {
548*61046927SAndroid Build Coastguard Worker .type = pool->vk.query_type,
549*61046927SAndroid Build Coastguard Worker .has_cpu_access = true,
550*61046927SAndroid Build Coastguard Worker },
551*61046927SAndroid Build Coastguard Worker };
552*61046927SAndroid Build Coastguard Worker
553*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
554*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &create_token);
555*61046927SAndroid Build Coastguard Worker log_resource_bind_locked(device, create_token.resource_id,
556*61046927SAndroid Build Coastguard Worker pool->bo, 0, pool->bo->size);
557*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
558*61046927SAndroid Build Coastguard Worker }
559*61046927SAndroid Build Coastguard Worker
560*61046927SAndroid Build Coastguard Worker static void
bind_cmd_buffer_state_stream_locked(struct anv_device * device,uint64_t resource_id,struct anv_state_stream * stream)561*61046927SAndroid Build Coastguard Worker bind_cmd_buffer_state_stream_locked(struct anv_device *device,
562*61046927SAndroid Build Coastguard Worker uint64_t resource_id,
563*61046927SAndroid Build Coastguard Worker struct anv_state_stream *stream)
564*61046927SAndroid Build Coastguard Worker {
565*61046927SAndroid Build Coastguard Worker util_dynarray_foreach(&stream->all_blocks, struct anv_state, block)
566*61046927SAndroid Build Coastguard Worker log_state_pool_bind_locked(device, resource_id, stream->state_pool, block);
567*61046927SAndroid Build Coastguard Worker }
568*61046927SAndroid Build Coastguard Worker
569*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_cmd_buffer_create(struct anv_device * device,struct anv_cmd_buffer * cmd_buffer)570*61046927SAndroid Build Coastguard Worker anv_rmv_log_cmd_buffer_create(struct anv_device *device,
571*61046927SAndroid Build Coastguard Worker struct anv_cmd_buffer *cmd_buffer)
572*61046927SAndroid Build Coastguard Worker {
573*61046927SAndroid Build Coastguard Worker uint64_t data_size =
574*61046927SAndroid Build Coastguard Worker cmd_buffer->surface_state_stream.total_size +
575*61046927SAndroid Build Coastguard Worker cmd_buffer->dynamic_state_stream.total_size +
576*61046927SAndroid Build Coastguard Worker cmd_buffer->general_state_stream.total_size +
577*61046927SAndroid Build Coastguard Worker cmd_buffer->indirect_push_descriptor_stream.total_size;
578*61046927SAndroid Build Coastguard Worker
579*61046927SAndroid Build Coastguard Worker uint64_t executable_size = 0;
580*61046927SAndroid Build Coastguard Worker list_for_each_entry(struct anv_batch_bo, bbo, &cmd_buffer->batch_bos, link)
581*61046927SAndroid Build Coastguard Worker executable_size += bbo->length;
582*61046927SAndroid Build Coastguard Worker
583*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
584*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token create_token = {
585*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_COMMAND_ALLOCATOR,
586*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, cmd_buffer),
587*61046927SAndroid Build Coastguard Worker .is_driver_internal = true,
588*61046927SAndroid Build Coastguard Worker .command_buffer = {
589*61046927SAndroid Build Coastguard Worker .preferred_domain = VK_RMV_KERNEL_MEMORY_DOMAIN_GTT /* TODO */,
590*61046927SAndroid Build Coastguard Worker .executable_size = executable_size,
591*61046927SAndroid Build Coastguard Worker .app_available_executable_size = executable_size,
592*61046927SAndroid Build Coastguard Worker .embedded_data_size = data_size,
593*61046927SAndroid Build Coastguard Worker .app_available_embedded_data_size = data_size,
594*61046927SAndroid Build Coastguard Worker .scratch_size = 0,
595*61046927SAndroid Build Coastguard Worker .app_available_scratch_size = 0,
596*61046927SAndroid Build Coastguard Worker },
597*61046927SAndroid Build Coastguard Worker };
598*61046927SAndroid Build Coastguard Worker
599*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
600*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE,
601*61046927SAndroid Build Coastguard Worker &create_token);
602*61046927SAndroid Build Coastguard Worker list_for_each_entry(struct anv_batch_bo, bbo, &cmd_buffer->batch_bos, link) {
603*61046927SAndroid Build Coastguard Worker log_resource_bind_locked(device, create_token.resource_id,
604*61046927SAndroid Build Coastguard Worker bbo->bo, 0, bbo->length);
605*61046927SAndroid Build Coastguard Worker }
606*61046927SAndroid Build Coastguard Worker bind_cmd_buffer_state_stream_locked(device, create_token.resource_id,
607*61046927SAndroid Build Coastguard Worker &cmd_buffer->surface_state_stream);
608*61046927SAndroid Build Coastguard Worker bind_cmd_buffer_state_stream_locked(device, create_token.resource_id,
609*61046927SAndroid Build Coastguard Worker &cmd_buffer->dynamic_state_stream);
610*61046927SAndroid Build Coastguard Worker bind_cmd_buffer_state_stream_locked(device, create_token.resource_id,
611*61046927SAndroid Build Coastguard Worker &cmd_buffer->general_state_stream);
612*61046927SAndroid Build Coastguard Worker bind_cmd_buffer_state_stream_locked(device, create_token.resource_id,
613*61046927SAndroid Build Coastguard Worker &cmd_buffer->indirect_push_descriptor_stream);
614*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
615*61046927SAndroid Build Coastguard Worker }
616*61046927SAndroid Build Coastguard Worker
617*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_cmd_buffer_destroy(struct anv_device * device,struct anv_cmd_buffer * cmd_buffer)618*61046927SAndroid Build Coastguard Worker anv_rmv_log_cmd_buffer_destroy(struct anv_device *device,
619*61046927SAndroid Build Coastguard Worker struct anv_cmd_buffer *cmd_buffer)
620*61046927SAndroid Build Coastguard Worker {
621*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
622*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_destroy_token destroy_token = {
623*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, cmd_buffer),
624*61046927SAndroid Build Coastguard Worker };
625*61046927SAndroid Build Coastguard Worker
626*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
627*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_DESTROY, &destroy_token);
628*61046927SAndroid Build Coastguard Worker resource_destroy_locked(device, cmd_buffer);
629*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
630*61046927SAndroid Build Coastguard Worker }
631*61046927SAndroid Build Coastguard Worker
632*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_sparse_add_residency(struct anv_device * device,struct anv_bo * src_bo,uint64_t offset)633*61046927SAndroid Build Coastguard Worker anv_rmv_log_sparse_add_residency(struct anv_device *device,
634*61046927SAndroid Build Coastguard Worker struct anv_bo *src_bo,
635*61046927SAndroid Build Coastguard Worker uint64_t offset)
636*61046927SAndroid Build Coastguard Worker {
637*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_reference_token token = {
638*61046927SAndroid Build Coastguard Worker .virtual_address = src_bo->offset + offset,
639*61046927SAndroid Build Coastguard Worker .residency_removed = false,
640*61046927SAndroid Build Coastguard Worker };
641*61046927SAndroid Build Coastguard Worker
642*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
643*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
644*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_REFERENCE, &token);
645*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
646*61046927SAndroid Build Coastguard Worker }
647*61046927SAndroid Build Coastguard Worker
648*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_sparse_remove_residency(struct anv_device * device,struct anv_bo * src_bo,uint64_t offset)649*61046927SAndroid Build Coastguard Worker anv_rmv_log_sparse_remove_residency(struct anv_device *device,
650*61046927SAndroid Build Coastguard Worker struct anv_bo *src_bo,
651*61046927SAndroid Build Coastguard Worker uint64_t offset)
652*61046927SAndroid Build Coastguard Worker {
653*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_reference_token token = {
654*61046927SAndroid Build Coastguard Worker .virtual_address = src_bo->offset + offset,
655*61046927SAndroid Build Coastguard Worker .residency_removed = true,
656*61046927SAndroid Build Coastguard Worker };
657*61046927SAndroid Build Coastguard Worker
658*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
659*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
660*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_REFERENCE, &token);
661*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
662*61046927SAndroid Build Coastguard Worker }
663*61046927SAndroid Build Coastguard Worker
664*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_descriptor_pool_create(struct anv_device * device,const VkDescriptorPoolCreateInfo * create_info,struct anv_descriptor_pool * pool,bool is_internal)665*61046927SAndroid Build Coastguard Worker anv_rmv_log_descriptor_pool_create(struct anv_device *device,
666*61046927SAndroid Build Coastguard Worker const VkDescriptorPoolCreateInfo *create_info,
667*61046927SAndroid Build Coastguard Worker struct anv_descriptor_pool *pool,
668*61046927SAndroid Build Coastguard Worker bool is_internal)
669*61046927SAndroid Build Coastguard Worker {
670*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
671*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token create_token = {
672*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_DESCRIPTOR_POOL,
673*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, pool),
674*61046927SAndroid Build Coastguard Worker .is_driver_internal = false,
675*61046927SAndroid Build Coastguard Worker .descriptor_pool = {
676*61046927SAndroid Build Coastguard Worker .max_sets = create_info->maxSets,
677*61046927SAndroid Build Coastguard Worker .pool_size_count = create_info->poolSizeCount,
678*61046927SAndroid Build Coastguard Worker /* Using vk_rmv_token_pool_alloc frees the allocation automatically
679*61046927SAndroid Build Coastguard Worker * when the trace is done. */
680*61046927SAndroid Build Coastguard Worker .pool_sizes = malloc(create_info->poolSizeCount *
681*61046927SAndroid Build Coastguard Worker sizeof(VkDescriptorPoolSize)),
682*61046927SAndroid Build Coastguard Worker },
683*61046927SAndroid Build Coastguard Worker };
684*61046927SAndroid Build Coastguard Worker
685*61046927SAndroid Build Coastguard Worker if (!create_token.descriptor_pool.pool_sizes) {
686*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
687*61046927SAndroid Build Coastguard Worker return;
688*61046927SAndroid Build Coastguard Worker }
689*61046927SAndroid Build Coastguard Worker
690*61046927SAndroid Build Coastguard Worker memcpy(create_token.descriptor_pool.pool_sizes, create_info->pPoolSizes,
691*61046927SAndroid Build Coastguard Worker create_info->poolSizeCount * sizeof(VkDescriptorPoolSize));
692*61046927SAndroid Build Coastguard Worker
693*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data,
694*61046927SAndroid Build Coastguard Worker VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &create_token);
695*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
696*61046927SAndroid Build Coastguard Worker
697*61046927SAndroid Build Coastguard Worker if (pool->surfaces.bo) {
698*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_bind_token bind_token = {
699*61046927SAndroid Build Coastguard Worker .resource_id = create_token.resource_id,
700*61046927SAndroid Build Coastguard Worker .is_system_memory = false,
701*61046927SAndroid Build Coastguard Worker .address = pool->surfaces.bo->offset,
702*61046927SAndroid Build Coastguard Worker .size = pool->surfaces.bo->size,
703*61046927SAndroid Build Coastguard Worker };
704*61046927SAndroid Build Coastguard Worker
705*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
706*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_BIND, &bind_token);
707*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
708*61046927SAndroid Build Coastguard Worker }
709*61046927SAndroid Build Coastguard Worker if (pool->samplers.bo) {
710*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_bind_token bind_token = {
711*61046927SAndroid Build Coastguard Worker .resource_id = create_token.resource_id,
712*61046927SAndroid Build Coastguard Worker .is_system_memory = false,
713*61046927SAndroid Build Coastguard Worker .address = pool->samplers.bo->offset,
714*61046927SAndroid Build Coastguard Worker .size = pool->samplers.bo->size,
715*61046927SAndroid Build Coastguard Worker };
716*61046927SAndroid Build Coastguard Worker
717*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
718*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_BIND, &bind_token);
719*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
720*61046927SAndroid Build Coastguard Worker }
721*61046927SAndroid Build Coastguard Worker }
722*61046927SAndroid Build Coastguard Worker
723*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_graphics_pipeline_create(struct anv_device * device,struct anv_graphics_pipeline * pipeline,bool is_internal)724*61046927SAndroid Build Coastguard Worker anv_rmv_log_graphics_pipeline_create(struct anv_device *device,
725*61046927SAndroid Build Coastguard Worker struct anv_graphics_pipeline *pipeline,
726*61046927SAndroid Build Coastguard Worker bool is_internal)
727*61046927SAndroid Build Coastguard Worker {
728*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token create_token = {
729*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_PIPELINE,
730*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, pipeline),
731*61046927SAndroid Build Coastguard Worker .is_driver_internal = is_internal,
732*61046927SAndroid Build Coastguard Worker .pipeline = {
733*61046927SAndroid Build Coastguard Worker .is_internal = is_internal,
734*61046927SAndroid Build Coastguard Worker .hash_lo = 0,/* TODO pipeline->pipeline_hash; */
735*61046927SAndroid Build Coastguard Worker .shader_stages = pipeline->base.base.active_stages,
736*61046927SAndroid Build Coastguard Worker },
737*61046927SAndroid Build Coastguard Worker };
738*61046927SAndroid Build Coastguard Worker
739*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
740*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &create_token);
741*61046927SAndroid Build Coastguard Worker for (unsigned s = 0; s < ARRAY_SIZE(pipeline->base.shaders); s++) {
742*61046927SAndroid Build Coastguard Worker struct anv_shader_bin *shader = pipeline->base.shaders[s];
743*61046927SAndroid Build Coastguard Worker
744*61046927SAndroid Build Coastguard Worker if (!shader)
745*61046927SAndroid Build Coastguard Worker continue;
746*61046927SAndroid Build Coastguard Worker
747*61046927SAndroid Build Coastguard Worker log_state_pool_bind_locked(device, create_token.resource_id,
748*61046927SAndroid Build Coastguard Worker &device->instruction_state_pool,
749*61046927SAndroid Build Coastguard Worker &shader->kernel);
750*61046927SAndroid Build Coastguard Worker }
751*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
752*61046927SAndroid Build Coastguard Worker }
753*61046927SAndroid Build Coastguard Worker
754*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_compute_pipeline_create(struct anv_device * device,struct anv_compute_pipeline * pipeline,bool is_internal)755*61046927SAndroid Build Coastguard Worker anv_rmv_log_compute_pipeline_create(struct anv_device *device,
756*61046927SAndroid Build Coastguard Worker struct anv_compute_pipeline *pipeline,
757*61046927SAndroid Build Coastguard Worker bool is_internal)
758*61046927SAndroid Build Coastguard Worker {
759*61046927SAndroid Build Coastguard Worker VkShaderStageFlagBits active_stages =
760*61046927SAndroid Build Coastguard Worker pipeline->base.type == ANV_PIPELINE_COMPUTE ?
761*61046927SAndroid Build Coastguard Worker VK_SHADER_STAGE_COMPUTE_BIT : VK_SHADER_STAGE_RAYGEN_BIT_KHR;
762*61046927SAndroid Build Coastguard Worker
763*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
764*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token create_token = {
765*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_PIPELINE,
766*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, pipeline),
767*61046927SAndroid Build Coastguard Worker .is_driver_internal = is_internal,
768*61046927SAndroid Build Coastguard Worker .pipeline = {
769*61046927SAndroid Build Coastguard Worker .is_internal = is_internal,
770*61046927SAndroid Build Coastguard Worker .hash_lo = 0,/* TODO pipeline->pipeline_hash; */
771*61046927SAndroid Build Coastguard Worker .shader_stages = active_stages,
772*61046927SAndroid Build Coastguard Worker },
773*61046927SAndroid Build Coastguard Worker };
774*61046927SAndroid Build Coastguard Worker
775*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &create_token);
776*61046927SAndroid Build Coastguard Worker struct anv_shader_bin *shader = pipeline->cs;
777*61046927SAndroid Build Coastguard Worker log_state_pool_bind_locked(device, create_token.resource_id,
778*61046927SAndroid Build Coastguard Worker &device->instruction_state_pool,
779*61046927SAndroid Build Coastguard Worker &shader->kernel);
780*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
781*61046927SAndroid Build Coastguard Worker }
782*61046927SAndroid Build Coastguard Worker
783*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_rt_pipeline_create(struct anv_device * device,struct anv_ray_tracing_pipeline * pipeline,bool is_internal)784*61046927SAndroid Build Coastguard Worker anv_rmv_log_rt_pipeline_create(struct anv_device *device,
785*61046927SAndroid Build Coastguard Worker struct anv_ray_tracing_pipeline *pipeline,
786*61046927SAndroid Build Coastguard Worker bool is_internal)
787*61046927SAndroid Build Coastguard Worker {
788*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
789*61046927SAndroid Build Coastguard Worker
790*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token create_token = {
791*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, pipeline),
792*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_PIPELINE,
793*61046927SAndroid Build Coastguard Worker .is_driver_internal = is_internal,
794*61046927SAndroid Build Coastguard Worker .pipeline = {
795*61046927SAndroid Build Coastguard Worker .is_internal = is_internal,
796*61046927SAndroid Build Coastguard Worker .hash_lo = 0, /* TODO */
797*61046927SAndroid Build Coastguard Worker .shader_stages = pipeline->base.active_stages,
798*61046927SAndroid Build Coastguard Worker },
799*61046927SAndroid Build Coastguard Worker };
800*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &create_token);
801*61046927SAndroid Build Coastguard Worker
802*61046927SAndroid Build Coastguard Worker struct anv_state_pool *state_pool = &device->instruction_state_pool;
803*61046927SAndroid Build Coastguard Worker for (uint32_t i = 0; i < pipeline->group_count; i++) {
804*61046927SAndroid Build Coastguard Worker struct anv_rt_shader_group *group = &pipeline->groups[i];
805*61046927SAndroid Build Coastguard Worker
806*61046927SAndroid Build Coastguard Worker if (group->imported)
807*61046927SAndroid Build Coastguard Worker continue;
808*61046927SAndroid Build Coastguard Worker
809*61046927SAndroid Build Coastguard Worker if (group->general) {
810*61046927SAndroid Build Coastguard Worker log_state_pool_bind_locked(device, create_token.resource_id, state_pool,
811*61046927SAndroid Build Coastguard Worker &group->general->kernel);
812*61046927SAndroid Build Coastguard Worker }
813*61046927SAndroid Build Coastguard Worker if (group->closest_hit) {
814*61046927SAndroid Build Coastguard Worker log_state_pool_bind_locked(device, create_token.resource_id, state_pool,
815*61046927SAndroid Build Coastguard Worker &group->closest_hit->kernel);
816*61046927SAndroid Build Coastguard Worker }
817*61046927SAndroid Build Coastguard Worker if (group->any_hit) {
818*61046927SAndroid Build Coastguard Worker log_state_pool_bind_locked(device, create_token.resource_id, state_pool,
819*61046927SAndroid Build Coastguard Worker &group->any_hit->kernel);
820*61046927SAndroid Build Coastguard Worker }
821*61046927SAndroid Build Coastguard Worker if (group->intersection) {
822*61046927SAndroid Build Coastguard Worker log_state_pool_bind_locked(device, create_token.resource_id, state_pool,
823*61046927SAndroid Build Coastguard Worker &group->intersection->kernel);
824*61046927SAndroid Build Coastguard Worker }
825*61046927SAndroid Build Coastguard Worker }
826*61046927SAndroid Build Coastguard Worker
827*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
828*61046927SAndroid Build Coastguard Worker }
829*61046927SAndroid Build Coastguard Worker
830*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_event_create(struct anv_device * device,struct anv_event * event,VkEventCreateFlags flags,bool is_internal)831*61046927SAndroid Build Coastguard Worker anv_rmv_log_event_create(struct anv_device *device,
832*61046927SAndroid Build Coastguard Worker struct anv_event *event,
833*61046927SAndroid Build Coastguard Worker VkEventCreateFlags flags,
834*61046927SAndroid Build Coastguard Worker bool is_internal)
835*61046927SAndroid Build Coastguard Worker {
836*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
837*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_create_token create_token = {
838*61046927SAndroid Build Coastguard Worker .type = VK_RMV_RESOURCE_TYPE_GPU_EVENT,
839*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, event),
840*61046927SAndroid Build Coastguard Worker .is_driver_internal = is_internal,
841*61046927SAndroid Build Coastguard Worker .event = {
842*61046927SAndroid Build Coastguard Worker .flags = flags,
843*61046927SAndroid Build Coastguard Worker },
844*61046927SAndroid Build Coastguard Worker };
845*61046927SAndroid Build Coastguard Worker
846*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_CREATE, &create_token);
847*61046927SAndroid Build Coastguard Worker log_state_pool_bind_locked(device, create_token.resource_id,
848*61046927SAndroid Build Coastguard Worker &device->dynamic_state_pool,
849*61046927SAndroid Build Coastguard Worker &event->state);
850*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
851*61046927SAndroid Build Coastguard Worker }
852*61046927SAndroid Build Coastguard Worker
853*61046927SAndroid Build Coastguard Worker void
anv_rmv_log_resource_destroy(struct anv_device * device,const void * obj)854*61046927SAndroid Build Coastguard Worker anv_rmv_log_resource_destroy(struct anv_device *device, const void *obj)
855*61046927SAndroid Build Coastguard Worker {
856*61046927SAndroid Build Coastguard Worker simple_mtx_lock(&device->vk.memory_trace_data.token_mtx);
857*61046927SAndroid Build Coastguard Worker struct vk_rmv_resource_destroy_token token = {
858*61046927SAndroid Build Coastguard Worker .resource_id = resource_id_locked(device, obj),
859*61046927SAndroid Build Coastguard Worker };
860*61046927SAndroid Build Coastguard Worker
861*61046927SAndroid Build Coastguard Worker vk_rmv_emit_token(&device->vk.memory_trace_data, VK_RMV_TOKEN_TYPE_RESOURCE_DESTROY, &token);
862*61046927SAndroid Build Coastguard Worker resource_destroy_locked(device, obj);
863*61046927SAndroid Build Coastguard Worker simple_mtx_unlock(&device->vk.memory_trace_data.token_mtx);
864*61046927SAndroid Build Coastguard Worker }
865