Lines Matching defs:device
49 tu_device_get_cache_uuid(struct tu_physical_device *device, void *uuid)
56 * device.
58 uint64_t driver_flags = device->instance->debug_flags & TU_DEBUG_NOMULTIPOS;
59 uint16_t family = fd_dev_gpu_id(&device->dev_id);
116 get_device_extensions(const struct tu_physical_device *device,
120 .KHR_16bit_storage = device->info->a6xx.storage_16bit,
145 .KHR_performance_query = device->instance->debug_flags & TU_DEBUG_PERFC,
179 .EXT_sample_locations = device->info->a6xx.has_sample_locations,
191 .EXT_filter_cubic = device->info->a6xx.has_tex_filter_cubic,
224 .IMG_filter_cubic = device->info->a6xx.has_tex_filter_cubic,
238 tu_physical_device_init(struct tu_physical_device *device,
243 const char *fd_name = fd_dev_name(&device->dev_id);
245 device->name = vk_asprintf(&instance->vk.alloc,
249 device->name = vk_strdup(&instance->vk.alloc, fd_name,
253 if (!device->name) {
255 "device name alloc fail");
258 const struct fd_dev_info *info = fd_dev_info(&device->dev_id);
261 "device %s is unsupported", device->name);
264 switch (fd_dev_gen(&device->dev_id)) {
266 device->info = info;
267 device->ccu_offset_bypass = device->info->num_ccu * A6XX_CCU_DEPTH_SIZE;
268 device->ccu_offset_gmem = (device->gmem_size -
269 device->info->num_ccu * A6XX_CCU_GMEM_COLOR_SIZE);
273 "device %s is unsupported", device->name);
276 if (tu_device_get_cache_uuid(device, device->cache_uuid)) {
282 fd_get_driver_uuid(device->driver_uuid);
283 fd_get_device_uuid(device->device_uuid, &device->dev_id);
286 get_device_extensions(device, &supported_extensions);
294 result = vk_physical_device_init(&device->vk, &instance->vk,
300 device->vk.supported_sync_types = device->sync_types;
303 result = tu_wsi_init(device);
306 vk_physical_device_finish(&device->vk);
315 disk_cache_format_hex_id(buf, device->cache_uuid, VK_UUID_SIZE * 2);
316 device->vk.disk_cache = disk_cache_create(device->name, buf, 0);
318 device->vk.pipeline_cache_import_ops = cache_import_ops;
323 vk_free(&instance->vk.alloc, (void *)device->name);
328 tu_physical_device_finish(struct tu_physical_device *device)
331 tu_wsi_finish(device);
334 close(device->local_fd);
335 if (device->master_fd != -1)
336 close(device->master_fd);
338 vk_free(&device->instance->vk.alloc, (void *)device->name);
340 vk_physical_device_finish(&device->vk);
1472 tu_queue_init(struct tu_device *device,
1491 VkResult result = vk_queue_init(&queue->vk, &device->vk, create_info, idx);
1495 queue->device = device;
1500 int ret = tu_drm_submitqueue_new(device, priority, &queue->msm_queue_id);
1502 return vk_startup_errorf(device->instance, VK_ERROR_INITIALIZATION_FAILED,
1516 tu_drm_submitqueue_close(queue->device, queue->msm_queue_id);
1532 struct tu_device *device =
1536 tu_bo_init_new(device, &bo, size, false);
1544 struct tu_device *device =
1548 tu_bo_finish(device, bo);
1569 struct tu_device *device =
1576 tu_device_wait_u_trace(device, submission_data->syncobj);
1579 if (tu_bo_map(device, bo) != VK_SUCCESS) {
1589 return tu_device_ticks_to_ns(device, ts[idx]);
1595 struct tu_device *device =
1599 tu_u_trace_submission_data_finish(device, submission_data);
1653 *cs = vk_zalloc(&cmdbuf->device->vk.alloc, sizeof(struct tu_cs), 8,
1660 tu_cs_init(*cs, cmdbuf->device, TU_CS_MODE_GROW,
1668 *trace_copy = vk_zalloc(&cmdbuf->device->vk.alloc, sizeof(struct u_trace), 8,
1690 struct tu_device *device,
1696 vk_zalloc(&device->vk.alloc,
1701 return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
1707 vk_zalloc(&device->vk.alloc,
1749 tu_u_trace_submission_data_finish(device, data);
1752 return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
1757 struct tu_device *device,
1765 vk_free(&device->vk.alloc, cmd_data->timestamp_copy_cs);
1768 vk_free(&device->vk.alloc, cmd_data->trace);
1772 vk_free(&device->vk.alloc, submission_data->cmd_trace_data);
1773 vk_free(&device->vk.alloc, submission_data->syncobj);
1774 vk_free(&device->vk.alloc, submission_data);
1785 struct tu_device *device;
1816 device = vk_zalloc2(&physical_device->instance->vk.alloc, pAllocator,
1817 sizeof(*device), 8, VK_SYSTEM_ALLOCATION_SCOPE_DEVICE);
1818 if (!device)
1827 result = vk_device_init(&device->vk, &physical_device->vk,
1830 vk_free(&device->vk.alloc, device);
1835 device->instance = physical_device->instance;
1836 device->physical_device = physical_device;
1837 device->fd = physical_device->local_fd;
1838 device->vk.check_status = tu_device_check_status;
1840 mtx_init(&device->bo_mutex, mtx_plain);
1841 mtx_init(&device->pipeline_mutex, mtx_plain);
1842 mtx_init(&device->autotune_mutex, mtx_plain);
1843 u_rwlock_init(&device->dma_bo_lock);
1844 pthread_mutex_init(&device->submit_mutex, NULL);
1847 vk_device_set_drm_fd(&device->vk, device->fd);
1854 device->queues[qfi] = vk_alloc(
1855 &device->vk.alloc, queue_create->queueCount * sizeof(struct tu_queue),
1857 if (!device->queues[qfi]) {
1864 memset(device->queues[qfi], 0,
1867 device->queue_count[qfi] = queue_create->queueCount;
1870 result = tu_queue_init(device, &device->queues[qfi][q], q,
1877 device->compiler =
1884 if (!device->compiler) {
1892 util_sparse_array_init(&device->bo_map, sizeof(struct tu_bo), 512);
1895 device->vsc_draw_strm_pitch = 0x1000 + VSC_PAD;
1896 device->vsc_prim_strm_pitch = 0x4000 + VSC_PAD;
1902 tu_bo_suballocator_init(&device->pipeline_suballoc, device,
1904 tu_bo_suballocator_init(&device->autotune_suballoc, device,
1907 result = tu_bo_init_new(device, &device->global_bo, global_size,
1910 vk_startup_errorf(device->instance, result, "BO init");
1914 result = tu_bo_map(device, device->global_bo);
1916 vk_startup_errorf(device->instance, result, "BO map");
1920 struct tu6_global *global = device->global_bo->map;
1921 tu_init_clear_blit_shaders(device);
1936 BITSET_ONES(device->custom_border_color);
1938 result = tu_init_dynamic_rendering(device);
1940 vk_startup_errorf(device->instance, result, "dynamic rendering");
1945 device->mem_cache = vk_pipeline_cache_create(&device->vk, &pcc_info,
1947 if (!device->mem_cache) {
1949 vk_startup_errorf(device->instance, result, "create pipeline cache failed");
1960 if (!(device->perfcntrs_pass_cs = calloc(1, sizeof(struct tu_cs)))) {
1961 result = vk_startup_errorf(device->instance,
1966 device->perfcntrs_pass_cs_entries = calloc(32, sizeof(struct tu_cs_entry));
1967 if (!device->perfcntrs_pass_cs_entries) {
1968 result = vk_startup_errorf(device->instance,
1973 cs = device->perfcntrs_pass_cs;
1974 tu_cs_init(cs, device, TU_CS_MODE_SUB_STREAM, 96);
1981 vk_startup_errorf(device->instance, result,
1989 device->perfcntrs_pass_cs_entries[i] = tu_cs_end_sub_stream(cs, &sub_cs);
2008 if (pthread_cond_init(&device->timeline_cond, &condattr) != 0) {
2017 result = tu_autotune_init(&device->autotune, device);
2022 for (unsigned i = 0; i < ARRAY_SIZE(device->scratch_bos); i++)
2023 mtx_init(&device->scratch_bos[i].construct_mtx, mtx_plain);
2025 mtx_init(&device->mutex, mtx_plain);
2027 device->use_z24uint_s8uint =
2033 device->submit_count = 0;
2034 u_trace_context_init(&device->trace_context, device,
2041 tu_breadcrumbs_init(device);
2043 *pDevice = tu_device_to_handle(device);
2048 free(device->perfcntrs_pass_cs_entries);
2049 tu_cs_finish(device->perfcntrs_pass_cs);
2051 free(device->perfcntrs_pass_cs);
2053 vk_pipeline_cache_destroy(device->mem_cache, &device->vk.alloc);
2055 tu_destroy_dynamic_rendering(device);
2057 tu_destroy_clear_blit_shaders(device);
2059 tu_bo_finish(device, device->global_bo);
2060 vk_free(&device->vk.alloc, device->bo_list);
2062 ir3_compiler_destroy(device->compiler);
2063 util_sparse_array_finish(&device->bo_map);
2067 for (unsigned q = 0; q < device->queue_count[i]; q++)
2068 tu_queue_finish(&device->queues[i][q]);
2069 if (device->queue_count[i])
2070 vk_free(&device->vk.alloc, device->queues[i]);
2073 u_rwlock_destroy(&device->dma_bo_lock);
2074 vk_device_finish(&device->vk);
2075 vk_free(&device->vk.alloc, device);
2082 TU_FROM_HANDLE(tu_device, device, _device);
2084 if (!device)
2087 tu_breadcrumbs_finish(device);
2089 u_trace_context_fini(&device->trace_context);
2092 for (unsigned q = 0; q < device->queue_count[i]; q++)
2093 tu_queue_finish(&device->queues[i][q]);
2094 if (device->queue_count[i])
2095 vk_free(&device->vk.alloc, device->queues[i]);
2098 for (unsigned i = 0; i < ARRAY_SIZE(device->scratch_bos); i++) {
2099 if (device->scratch_bos[i].initialized)
2100 tu_bo_finish(device, device->scratch_bos[i].bo);
2103 tu_destroy_clear_blit_shaders(device);
2105 tu_destroy_dynamic_rendering(device);
2107 ir3_compiler_destroy(device->compiler);
2109 vk_pipeline_cache_destroy(device->mem_cache, &device->vk.alloc);
2111 if (device->perfcntrs_pass_cs) {
2112 free(device->perfcntrs_pass_cs_entries);
2113 tu_cs_finish(device->perfcntrs_pass_cs);
2114 free(device->perfcntrs_pass_cs);
2117 tu_autotune_fini(&device->autotune, device);
2119 tu_bo_suballocator_finish(&device->pipeline_suballoc);
2120 tu_bo_suballocator_finish(&device->autotune_suballoc);
2122 util_sparse_array_finish(&device->bo_map);
2123 u_rwlock_destroy(&device->dma_bo_lock);
2125 pthread_cond_destroy(&device->timeline_cond);
2126 vk_free(&device->vk.alloc, device->bo_list);
2127 vk_device_finish(&device->vk);
2128 vk_free(&device->vk.alloc, device);
2192 if (vk_device_is_lost(&queue->device->vk))
2204 /* TODO: otherwise set device lost ? */
2271 TU_FROM_HANDLE(tu_device, device, _device);
2283 struct tu_memory_heap *mem_heap = &device->physical_device->heap;
2286 return vk_error(device, VK_ERROR_OUT_OF_DEVICE_MEMORY);
2288 mem = vk_object_alloc(&device->vk, pAllocator, sizeof(*mem),
2291 return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
2309 result = tu_bo_init_dmabuf(device, &mem->bo,
2317 tu_bo_init_new(device, &mem->bo, pAllocateInfo->allocationSize,
2326 tu_bo_finish(device, mem->bo);
2327 result = vk_errorf(device, VK_ERROR_OUT_OF_DEVICE_MEMORY,
2333 vk_object_free(&device->vk, pAllocator, mem);
2337 /* Track in the device whether our BO list contains any implicit-sync BOs, so
2343 mtx_lock(&device->bo_mutex);
2346 device->implicit_sync_bo_count++;
2348 mtx_unlock(&device->bo_mutex);
2361 TU_FROM_HANDLE(tu_device, device, _device);
2367 p_atomic_add(&device->physical_device->heap.used, -mem->bo->size);
2368 tu_bo_finish(device, mem->bo);
2369 vk_object_free(&device->vk, pAllocator, mem);
2380 TU_FROM_HANDLE(tu_device, device, _device);
2390 result = tu_bo_map(device, mem->bo);
2448 VkDevice device,
2459 VkDevice device,
2467 tu_GetDeviceMemoryCommitment(VkDevice device,
2475 tu_BindBufferMemory2(VkDevice device,
2494 tu_BindImageMemory2(VkDevice device,
2529 TU_FROM_HANDLE(tu_device, device, _device);
2532 vk_object_alloc(&device->vk, pAllocator, sizeof(*event),
2535 return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
2537 VkResult result = tu_bo_init_new(device, &event->bo, 0x1000,
2542 result = tu_bo_map(device, event->bo);
2551 tu_bo_finish(device, event->bo);
2553 vk_object_free(&device->vk, pAllocator, event);
2554 return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
2562 TU_FROM_HANDLE(tu_device, device, _device);
2568 tu_bo_finish(device, event->bo);
2569 vk_object_free(&device->vk, pAllocator, event);
2606 TU_FROM_HANDLE(tu_device, device, _device);
2611 buffer = vk_object_alloc(&device->vk, pAllocator, sizeof(*buffer),
2614 return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
2630 TU_FROM_HANDLE(tu_device, device, _device);
2636 vk_object_free(&device->vk, pAllocator, buffer);
2645 TU_FROM_HANDLE(tu_device, device, _device);
2647 if (unlikely(device->instance->debug_flags & TU_DEBUG_DYNAMIC))
2661 framebuffer = vk_object_alloc(&device->vk, pAllocator, size,
2664 return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
2679 tu_framebuffer_tiling_config(framebuffer, device, pass);
2699 tu_framebuffer_tiling_config(framebuffer, cmd_buffer->device, pass);
2707 TU_FROM_HANDLE(tu_device, device, _device);
2709 if (unlikely(device->instance->debug_flags & TU_DEBUG_DYNAMIC)) {
2719 vk_object_free(&device->vk, pAllocator, fb);
2723 tu_init_sampler(struct tu_device *device,
2740 mtx_lock(&device->mutex);
2741 border_color = BITSET_FFS(device->custom_border_color) - 1;
2743 BITSET_CLEAR(device->custom_border_color, border_color);
2744 mtx_unlock(&device->mutex);
2749 device->use_z24uint_s8uint) {
2759 tu6_pack_border_color(device->global_bo->map + gb_offset(bcolor[border_color]),
2814 TU_FROM_HANDLE(tu_device, device, _device);
2819 sampler = vk_object_alloc(&device->vk, pAllocator, sizeof(*sampler),
2822 return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
2824 tu_init_sampler(device, sampler, pCreateInfo);
2835 TU_FROM_HANDLE(tu_device, device, _device);
2846 mtx_lock(&device->mutex);
2847 assert(!BITSET_TEST(device->custom_border_color, border_color));
2848 BITSET_SET(device->custom_border_color, border_color);
2849 mtx_unlock(&device->mutex);
2852 vk_object_free(&device->vk, pAllocator, sampler);
2914 TU_FROM_HANDLE(tu_device, device, _device);
2925 int prime_fd = tu_bo_export_dmabuf(device, memory->bo);
2927 return vk_error(device, VK_ERROR_OUT_OF_DEVICE_MEMORY);
2957 VkDevice device,
2995 VkDevice device,
3003 VkDevice device,