• Home
  • Raw
  • Download

Lines Matching refs:device

82    struct anv_device *device = (struct anv_device *)data;  in compiler_debug_log()  local
83 struct anv_instance *instance = device->physical->instance; in compiler_debug_log()
137 anv_physical_device_init_heaps(struct anv_physical_device *device, int fd) in anv_physical_device_init_heaps() argument
140 &device->gtt_size) == -1) { in anv_physical_device_init_heaps()
147 if (gen_get_aperture_size(fd, &device->gtt_size) == -1) { in anv_physical_device_init_heaps()
148 return vk_errorfi(device->instance, NULL, in anv_physical_device_init_heaps()
157 device->supports_48bit_addresses = (device->info.gen >= 8) && in anv_physical_device_init_heaps()
158 device->has_softpin && in anv_physical_device_init_heaps()
159 device->gtt_size > (4ULL << 30 /* GiB */); in anv_physical_device_init_heaps()
161 uint64_t heap_size = anv_compute_heap_size(fd, device->gtt_size); in anv_physical_device_init_heaps()
163 if (heap_size > (2ull << 30) && !device->supports_48bit_addresses) { in anv_physical_device_init_heaps()
175 device->memory.heap_count = 1; in anv_physical_device_init_heaps()
176 device->memory.heaps[0] = (struct anv_memory_heap) { in anv_physical_device_init_heaps()
182 for (uint32_t heap = 0; heap < device->memory.heap_count; heap++) { in anv_physical_device_init_heaps()
183 if (device->info.has_llc) { in anv_physical_device_init_heaps()
187 device->memory.types[type_count++] = (struct anv_memory_type) { in anv_physical_device_init_heaps()
200 device->memory.types[type_count++] = (struct anv_memory_type) { in anv_physical_device_init_heaps()
206 device->memory.types[type_count++] = (struct anv_memory_type) { in anv_physical_device_init_heaps()
214 device->memory.type_count = type_count; in anv_physical_device_init_heaps()
220 anv_physical_device_init_uuids(struct anv_physical_device *device) in anv_physical_device_init_uuids() argument
225 return vk_errorfi(device->instance, NULL, in anv_physical_device_init_uuids()
232 return vk_errorfi(device->instance, NULL, in anv_physical_device_init_uuids()
237 memcpy(device->driver_build_sha1, build_id_data(note), 20); in anv_physical_device_init_uuids()
248 _mesa_sha1_update(&sha1_ctx, &device->info.chipset_id, in anv_physical_device_init_uuids()
249 sizeof(device->info.chipset_id)); in anv_physical_device_init_uuids()
250 _mesa_sha1_update(&sha1_ctx, &device->always_use_bindless, in anv_physical_device_init_uuids()
251 sizeof(device->always_use_bindless)); in anv_physical_device_init_uuids()
252 _mesa_sha1_update(&sha1_ctx, &device->has_a64_buffer_access, in anv_physical_device_init_uuids()
253 sizeof(device->has_a64_buffer_access)); in anv_physical_device_init_uuids()
254 _mesa_sha1_update(&sha1_ctx, &device->has_bindless_images, in anv_physical_device_init_uuids()
255 sizeof(device->has_bindless_images)); in anv_physical_device_init_uuids()
256 _mesa_sha1_update(&sha1_ctx, &device->has_bindless_samplers, in anv_physical_device_init_uuids()
257 sizeof(device->has_bindless_samplers)); in anv_physical_device_init_uuids()
259 memcpy(device->pipeline_cache_uuid, sha1, VK_UUID_SIZE); in anv_physical_device_init_uuids()
261 gen_uuid_compute_driver_id(device->driver_uuid, &device->info, VK_UUID_SIZE); in anv_physical_device_init_uuids()
262 gen_uuid_compute_device_id(device->device_uuid, &device->isl_dev, VK_UUID_SIZE); in anv_physical_device_init_uuids()
268 anv_physical_device_init_disk_cache(struct anv_physical_device *device) in anv_physical_device_init_disk_cache() argument
273 device->info.chipset_id); in anv_physical_device_init_disk_cache()
277 _mesa_sha1_format(timestamp, device->driver_build_sha1); in anv_physical_device_init_disk_cache()
280 brw_get_compiler_config_value(device->compiler); in anv_physical_device_init_disk_cache()
281 device->disk_cache = disk_cache_create(renderer, timestamp, driver_flags); in anv_physical_device_init_disk_cache()
283 device->disk_cache = NULL; in anv_physical_device_init_disk_cache()
288 anv_physical_device_free_disk_cache(struct anv_physical_device *device) in anv_physical_device_free_disk_cache() argument
291 if (device->disk_cache) in anv_physical_device_free_disk_cache()
292 disk_cache_destroy(device->disk_cache); in anv_physical_device_free_disk_cache()
294 assert(device->disk_cache == NULL); in anv_physical_device_free_disk_cache()
343 struct anv_physical_device *device = in anv_physical_device_try_create() local
344 vk_alloc(&instance->alloc, sizeof(*device), 8, in anv_physical_device_try_create()
346 if (device == NULL) { in anv_physical_device_try_create()
351 vk_object_base_init(NULL, &device->base, VK_OBJECT_TYPE_PHYSICAL_DEVICE); in anv_physical_device_try_create()
352 device->instance = instance; in anv_physical_device_try_create()
354 assert(strlen(path) < ARRAY_SIZE(device->path)); in anv_physical_device_try_create()
355 snprintf(device->path, ARRAY_SIZE(device->path), "%s", path); in anv_physical_device_try_create()
357 device->info = devinfo; in anv_physical_device_try_create()
358 device->name = device_name; in anv_physical_device_try_create()
360 device->no_hw = device->info.no_hw; in anv_physical_device_try_create()
362 device->no_hw = true; in anv_physical_device_try_create()
364 device->pci_info.domain = drm_device->businfo.pci->domain; in anv_physical_device_try_create()
365 device->pci_info.bus = drm_device->businfo.pci->bus; in anv_physical_device_try_create()
366 device->pci_info.device = drm_device->businfo.pci->dev; in anv_physical_device_try_create()
367 device->pci_info.function = drm_device->businfo.pci->func; in anv_physical_device_try_create()
369 device->cmd_parser_version = -1; in anv_physical_device_try_create()
370 if (device->info.gen == 7) { in anv_physical_device_try_create()
371 device->cmd_parser_version = in anv_physical_device_try_create()
373 if (device->cmd_parser_version == -1) { in anv_physical_device_try_create()
374 result = vk_errorfi(device->instance, NULL, in anv_physical_device_try_create()
382 result = vk_errorfi(device->instance, NULL, in anv_physical_device_try_create()
389 result = vk_errorfi(device->instance, NULL, in anv_physical_device_try_create()
395 if (!device->info.has_llc && in anv_physical_device_try_create()
397 result = vk_errorfi(device->instance, NULL, in anv_physical_device_try_create()
403 device->has_softpin = anv_gem_get_param(fd, I915_PARAM_HAS_EXEC_SOFTPIN); in anv_physical_device_try_create()
404 device->has_exec_async = anv_gem_get_param(fd, I915_PARAM_HAS_EXEC_ASYNC); in anv_physical_device_try_create()
405 device->has_exec_capture = anv_gem_get_param(fd, I915_PARAM_HAS_EXEC_CAPTURE); in anv_physical_device_try_create()
406 device->has_exec_fence = anv_gem_get_param(fd, I915_PARAM_HAS_EXEC_FENCE); in anv_physical_device_try_create()
407 device->has_syncobj = anv_gem_get_param(fd, I915_PARAM_HAS_EXEC_FENCE_ARRAY); in anv_physical_device_try_create()
408 device->has_syncobj_wait = device->has_syncobj && in anv_physical_device_try_create()
410 device->has_syncobj_wait_available = in anv_physical_device_try_create()
413 device->has_context_priority = anv_gem_has_context_priority(fd); in anv_physical_device_try_create()
415 result = anv_physical_device_init_heaps(device, fd); in anv_physical_device_try_create()
419 device->use_softpin = device->has_softpin && in anv_physical_device_try_create()
420 device->supports_48bit_addresses; in anv_physical_device_try_create()
422 device->has_context_isolation = in anv_physical_device_try_create()
425 device->has_exec_timeline = in anv_physical_device_try_create()
428 device->has_exec_timeline = false; in anv_physical_device_try_create()
430 device->has_thread_submit = in anv_physical_device_try_create()
431 device->has_syncobj_wait_available && device->has_exec_timeline; in anv_physical_device_try_create()
433 device->always_use_bindless = in anv_physical_device_try_create()
436 device->use_call_secondary = in anv_physical_device_try_create()
437 device->use_softpin && in anv_physical_device_try_create()
443 device->has_a64_buffer_access = device->info.gen >= 8 && in anv_physical_device_try_create()
444 device->use_softpin; in anv_physical_device_try_create()
449 device->has_bindless_images = device->info.gen >= 9 && in anv_physical_device_try_create()
450 device->use_softpin; in anv_physical_device_try_create()
457 device->has_bindless_samplers = device->info.gen >= 8; in anv_physical_device_try_create()
459 device->has_implicit_ccs = device->info.has_aux_map; in anv_physical_device_try_create()
463 device->has_reg_timestamp = anv_gem_reg_read(fd, TIMESTAMP | I915_REG_READ_8B_WA, in anv_physical_device_try_create()
467 device->has_mem_available = os_get_available_system_memory(&avail_mem); in anv_physical_device_try_create()
469 device->always_flush_cache = in anv_physical_device_try_create()
472 device->has_mmap_offset = in anv_physical_device_try_create()
476 if (device->info.gen >= 8) { in anv_physical_device_try_create()
477 device->subslice_total = anv_gem_get_param(fd, I915_PARAM_SUBSLICE_TOTAL); in anv_physical_device_try_create()
478 device->eu_total = anv_gem_get_param(fd, I915_PARAM_EU_TOTAL); in anv_physical_device_try_create()
484 if (device->subslice_total < 1 || device->eu_total < 1) { in anv_physical_device_try_create()
487 } else if (device->info.gen == 7) { in anv_physical_device_try_create()
488 device->subslice_total = 1 << (device->info.gt - 1); in anv_physical_device_try_create()
491 if (device->info.is_cherryview && in anv_physical_device_try_create()
492 device->subslice_total > 0 && device->eu_total > 0) { in anv_physical_device_try_create()
495 device->eu_total / device->subslice_total * device->info.num_thread_per_eu; in anv_physical_device_try_create()
498 if (max_cs_threads > device->info.max_cs_threads) in anv_physical_device_try_create()
499 device->info.max_cs_threads = max_cs_threads; in anv_physical_device_try_create()
502 device->compiler = brw_compiler_create(NULL, &device->info); in anv_physical_device_try_create()
503 if (device->compiler == NULL) { in anv_physical_device_try_create()
507 device->compiler->shader_debug_log = compiler_debug_log; in anv_physical_device_try_create()
508 device->compiler->shader_perf_log = compiler_perf_log; in anv_physical_device_try_create()
509 device->compiler->supports_pull_constants = false; in anv_physical_device_try_create()
510 device->compiler->constant_buffer_0_is_relative = in anv_physical_device_try_create()
511 device->info.gen < 8 || !device->has_context_isolation; in anv_physical_device_try_create()
512 device->compiler->supports_shader_constants = true; in anv_physical_device_try_create()
513 device->compiler->compact_params = false; in anv_physical_device_try_create()
514 device->compiler->indirect_ubos_use_sampler = device->info.gen < 12; in anv_physical_device_try_create()
528 device->info.gen < 8 && anv_gem_get_bit6_swizzle(fd, I915_TILING_X); in anv_physical_device_try_create()
530 isl_device_init(&device->isl_dev, &device->info, swizzled); in anv_physical_device_try_create()
532 result = anv_physical_device_init_uuids(device); in anv_physical_device_try_create()
536 anv_physical_device_init_disk_cache(device); in anv_physical_device_try_create()
550 device->master_fd = master_fd; in anv_physical_device_try_create()
552 result = anv_init_wsi(device); in anv_physical_device_try_create()
556 device->perf = anv_get_perf(&device->info, fd); in anv_physical_device_try_create()
558 anv_physical_device_get_supported_extensions(device, in anv_physical_device_try_create()
559 &device->supported_extensions); in anv_physical_device_try_create()
562 device->local_fd = fd; in anv_physical_device_try_create()
564 *device_out = device; in anv_physical_device_try_create()
569 anv_physical_device_free_disk_cache(device); in anv_physical_device_try_create()
571 ralloc_free(device->compiler); in anv_physical_device_try_create()
573 vk_free(&instance->alloc, device); in anv_physical_device_try_create()
582 anv_physical_device_destroy(struct anv_physical_device *device) in anv_physical_device_destroy() argument
584 anv_finish_wsi(device); in anv_physical_device_destroy()
585 anv_physical_device_free_disk_cache(device); in anv_physical_device_destroy()
586 ralloc_free(device->compiler); in anv_physical_device_destroy()
587 ralloc_free(device->perf); in anv_physical_device_destroy()
588 close(device->local_fd); in anv_physical_device_destroy()
589 if (device->master_fd >= 0) in anv_physical_device_destroy()
590 close(device->master_fd); in anv_physical_device_destroy()
591 vk_object_base_finish(&device->base); in anv_physical_device_destroy()
592 vk_free(&device->instance->alloc, device); in anv_physical_device_destroy()
1977 properties->pciDevice = pdevice->pci_info.device; in anv_GetPhysicalDeviceProperties2()
2234 ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); in anv_get_memory_budget()
2241 for (size_t i = 0; i < device->memory.heap_count; i++) in anv_get_memory_budget()
2242 total_heaps_size += device->memory.heaps[i].size; in anv_get_memory_budget()
2244 for (size_t i = 0; i < device->memory.heap_count; i++) { in anv_get_memory_budget()
2245 VkDeviceSize heap_size = device->memory.heaps[i].size; in anv_get_memory_budget()
2246 VkDeviceSize heap_used = device->memory.heaps[i].used; in anv_get_memory_budget()
2278 for (uint32_t i = device->memory.heap_count; i < VK_MAX_MEMORY_HEAPS; i++) { in anv_get_memory_budget()
2305 VkDevice device, in anv_GetDeviceGroupPeerMemoryFeatures() argument
2385 ANV_FROM_HANDLE(anv_device, device, _device); in anv_GetDeviceProcAddr()
2387 if (!device || !pName) in anv_GetDeviceProcAddr()
2394 return device->dispatch.entrypoints[idx]; in anv_GetDeviceProcAddr()
2471 anv_device_init_border_colors(struct anv_device *device) in anv_device_init_border_colors() argument
2473 if (device->info.is_haswell) { in anv_device_init_border_colors()
2483 device->border_colors = in anv_device_init_border_colors()
2484 anv_state_pool_emit_data(&device->dynamic_state_pool, in anv_device_init_border_colors()
2496 device->border_colors = in anv_device_init_border_colors()
2497 anv_state_pool_emit_data(&device->dynamic_state_pool, in anv_device_init_border_colors()
2503 anv_device_init_trivial_batch(struct anv_device *device) in anv_device_init_trivial_batch() argument
2505 VkResult result = anv_device_alloc_bo(device, 4096, in anv_device_init_trivial_batch()
2508 &device->trivial_batch_bo); in anv_device_init_trivial_batch()
2513 .start = device->trivial_batch_bo->map, in anv_device_init_trivial_batch()
2514 .next = device->trivial_batch_bo->map, in anv_device_init_trivial_batch()
2515 .end = device->trivial_batch_bo->map + 4096, in anv_device_init_trivial_batch()
2521 if (!device->info.has_llc) in anv_device_init_trivial_batch()
2533 ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); in anv_EnumerateDeviceExtensionProperties()
2537 if (device->supported_extensions.extensions[i]) { in anv_EnumerateDeviceExtensionProperties()
2565 anv_device_init_hiz_clear_value_bo(struct anv_device *device) in anv_device_init_hiz_clear_value_bo() argument
2567 VkResult result = anv_device_alloc_bo(device, 4096, in anv_device_init_hiz_clear_value_bo()
2570 &device->hiz_clear_bo); in anv_device_init_hiz_clear_value_bo()
2577 memcpy(device->hiz_clear_bo->map, hiz_clear.u32, sizeof(hiz_clear.u32)); in anv_device_init_hiz_clear_value_bo()
2579 if (!device->info.has_llc) in anv_device_init_hiz_clear_value_bo()
2580 gen_clflush_range(device->hiz_clear_bo->map, sizeof(hiz_clear.u32)); in anv_device_init_hiz_clear_value_bo()
2608 struct anv_device *device = v_batch; in decode_get_bo() local
2613 if (get_bo_from_pool(&ret_bo, &device->dynamic_state_pool.block_pool, address)) in decode_get_bo()
2615 if (get_bo_from_pool(&ret_bo, &device->instruction_state_pool.block_pool, address)) in decode_get_bo()
2617 if (get_bo_from_pool(&ret_bo, &device->binding_table_pool.block_pool, address)) in decode_get_bo()
2619 if (get_bo_from_pool(&ret_bo, &device->surface_state_pool.block_pool, address)) in decode_get_bo()
2622 if (!device->cmd_buffer_being_decoded) in decode_get_bo()
2627 u_vector_foreach(bo, &device->cmd_buffer_being_decoded->seen_bbos) { in decode_get_bo()
2655 struct anv_device *device = (struct anv_device*)driver_ctx; in gen_aux_map_buffer_alloc() local
2656 assert(device->physical->supports_48bit_addresses && in gen_aux_map_buffer_alloc()
2657 device->physical->use_softpin); in gen_aux_map_buffer_alloc()
2659 struct anv_state_pool *pool = &device->dynamic_state_pool; in gen_aux_map_buffer_alloc()
2673 struct anv_device *device = (struct anv_device*)driver_ctx; in gen_aux_map_buffer_free() local
2674 struct anv_state_pool *pool = &device->dynamic_state_pool; in gen_aux_map_buffer_free()
2709 struct anv_device *device; in anv_CreateDevice() local
2781 device = vk_alloc2(&physical_device->instance->alloc, pAllocator, in anv_CreateDevice()
2782 sizeof(*device), 8, in anv_CreateDevice()
2784 if (!device) in anv_CreateDevice()
2787 vk_device_init(&device->vk, pCreateInfo, in anv_CreateDevice()
2797 gen_batch_decode_ctx_init(&device->decoder_ctx, in anv_CreateDevice()
2800 decode_get_bo, NULL, device); in anv_CreateDevice()
2803 device->physical = physical_device; in anv_CreateDevice()
2804 device->no_hw = physical_device->no_hw; in anv_CreateDevice()
2805 device->_lost = false; in anv_CreateDevice()
2808 device->fd = open(physical_device->path, O_RDWR | O_CLOEXEC); in anv_CreateDevice()
2809 if (device->fd == -1) { in anv_CreateDevice()
2814 device->context_id = anv_gem_create_context(device); in anv_CreateDevice()
2815 if (device->context_id == -1) { in anv_CreateDevice()
2820 device->has_thread_submit = physical_device->has_thread_submit; in anv_CreateDevice()
2822 result = anv_queue_init(device, &device->queue); in anv_CreateDevice()
2827 if (pthread_mutex_init(&device->vma_mutex, NULL) != 0) { in anv_CreateDevice()
2833 util_vma_heap_init(&device->vma_lo, in anv_CreateDevice()
2836 util_vma_heap_init(&device->vma_cva, CLIENT_VISIBLE_HEAP_MIN_ADDRESS, in anv_CreateDevice()
2843 util_vma_heap_init(&device->vma_hi, HIGH_HEAP_MIN_ADDRESS, in anv_CreateDevice()
2848 list_inithead(&device->memory_objects); in anv_CreateDevice()
2856 int err = anv_gem_set_context_param(device->fd, device->context_id, in anv_CreateDevice()
2865 device->info = physical_device->info; in anv_CreateDevice()
2866 device->isl_dev = physical_device->isl_dev; in anv_CreateDevice()
2873 device->can_chain_batches = device->info.gen >= 8; in anv_CreateDevice()
2875 device->robust_buffer_access = robust_buffer_access; in anv_CreateDevice()
2876 device->enabled_extensions = enabled_extensions; in anv_CreateDevice()
2879 for (unsigned i = 0; i < ARRAY_SIZE(device->dispatch.entrypoints); i++) { in anv_CreateDevice()
2885 &device->enabled_extensions)) { in anv_CreateDevice()
2886 device->dispatch.entrypoints[i] = NULL; in anv_CreateDevice()
2888 device->dispatch.entrypoints[i] = in anv_CreateDevice()
2889 anv_resolve_device_entrypoint(&device->info, i); in anv_CreateDevice()
2893 if (pthread_mutex_init(&device->mutex, NULL) != 0) { in anv_CreateDevice()
2908 if (pthread_cond_init(&device->queue_submit, &condattr) != 0) { in anv_CreateDevice()
2915 result = anv_bo_cache_init(&device->bo_cache); in anv_CreateDevice()
2919 anv_bo_pool_init(&device->batch_bo_pool, device); in anv_CreateDevice()
2921 result = anv_state_pool_init(&device->dynamic_state_pool, device, in anv_CreateDevice()
2926 if (device->info.gen >= 8) { in anv_CreateDevice()
2933 anv_state_reserved_pool_init(&device->custom_border_colors, in anv_CreateDevice()
2934 &device->dynamic_state_pool, in anv_CreateDevice()
2939 result = anv_state_pool_init(&device->instruction_state_pool, device, in anv_CreateDevice()
2944 result = anv_state_pool_init(&device->surface_state_pool, device, in anv_CreateDevice()
2953 result = anv_state_pool_init(&device->binding_table_pool, device, in anv_CreateDevice()
2960 if (device->info.has_aux_map) { in anv_CreateDevice()
2961 device->aux_map_ctx = gen_aux_map_init(device, &aux_map_allocator, in anv_CreateDevice()
2963 if (!device->aux_map_ctx) in anv_CreateDevice()
2967 result = anv_device_alloc_bo(device, 4096, in anv_CreateDevice()
2970 &device->workaround_bo); in anv_CreateDevice()
2974 device->workaround_address = (struct anv_address) { in anv_CreateDevice()
2975 .bo = device->workaround_bo, in anv_CreateDevice()
2977 intel_debug_write_identifiers(device->workaround_bo->map, in anv_CreateDevice()
2978 device->workaround_bo->size, in anv_CreateDevice()
2982 device->debug_frame_desc = in anv_CreateDevice()
2983 intel_debug_get_identifier_block(device->workaround_bo->map, in anv_CreateDevice()
2984 device->workaround_bo->size, in anv_CreateDevice()
2987 result = anv_device_init_trivial_batch(device); in anv_CreateDevice()
2995 device->null_surface_state = in anv_CreateDevice()
2996 anv_state_pool_alloc(&device->surface_state_pool, in anv_CreateDevice()
2997 device->isl_dev.ss.size, in anv_CreateDevice()
2998 device->isl_dev.ss.align); in anv_CreateDevice()
2999 isl_null_fill_state(&device->isl_dev, device->null_surface_state.map, in anv_CreateDevice()
3001 assert(device->null_surface_state.offset == 0); in anv_CreateDevice()
3003 if (device->info.gen >= 10) { in anv_CreateDevice()
3004 result = anv_device_init_hiz_clear_value_bo(device); in anv_CreateDevice()
3009 anv_scratch_pool_init(device, &device->scratch_pool); in anv_CreateDevice()
3011 switch (device->info.gen) { in anv_CreateDevice()
3013 if (!device->info.is_haswell) in anv_CreateDevice()
3014 result = gen7_init_device_state(device); in anv_CreateDevice()
3016 result = gen75_init_device_state(device); in anv_CreateDevice()
3019 result = gen8_init_device_state(device); in anv_CreateDevice()
3022 result = gen9_init_device_state(device); in anv_CreateDevice()
3025 result = gen11_init_device_state(device); in anv_CreateDevice()
3028 result = gen12_init_device_state(device); in anv_CreateDevice()
3038 anv_pipeline_cache_init(&device->default_pipeline_cache, device, in anv_CreateDevice()
3041 anv_device_init_blorp(device); in anv_CreateDevice()
3043 anv_device_init_border_colors(device); in anv_CreateDevice()
3045 anv_device_perf_init(device); in anv_CreateDevice()
3047 *pDevice = anv_device_to_handle(device); in anv_CreateDevice()
3052 if (device->info.gen >= 10) in anv_CreateDevice()
3053 anv_device_release_bo(device, device->hiz_clear_bo); in anv_CreateDevice()
3054 anv_scratch_pool_finish(device, &device->scratch_pool); in anv_CreateDevice()
3056 anv_device_release_bo(device, device->trivial_batch_bo); in anv_CreateDevice()
3058 anv_device_release_bo(device, device->workaround_bo); in anv_CreateDevice()
3060 if (device->info.has_aux_map) { in anv_CreateDevice()
3061 gen_aux_map_finish(device->aux_map_ctx); in anv_CreateDevice()
3062 device->aux_map_ctx = NULL; in anv_CreateDevice()
3066 anv_state_pool_finish(&device->binding_table_pool); in anv_CreateDevice()
3068 anv_state_pool_finish(&device->surface_state_pool); in anv_CreateDevice()
3070 anv_state_pool_finish(&device->instruction_state_pool); in anv_CreateDevice()
3072 if (device->info.gen >= 8) in anv_CreateDevice()
3073 anv_state_reserved_pool_finish(&device->custom_border_colors); in anv_CreateDevice()
3074 anv_state_pool_finish(&device->dynamic_state_pool); in anv_CreateDevice()
3076 anv_bo_pool_finish(&device->batch_bo_pool); in anv_CreateDevice()
3077 anv_bo_cache_finish(&device->bo_cache); in anv_CreateDevice()
3079 pthread_cond_destroy(&device->queue_submit); in anv_CreateDevice()
3081 pthread_mutex_destroy(&device->mutex); in anv_CreateDevice()
3084 util_vma_heap_finish(&device->vma_hi); in anv_CreateDevice()
3085 util_vma_heap_finish(&device->vma_cva); in anv_CreateDevice()
3086 util_vma_heap_finish(&device->vma_lo); in anv_CreateDevice()
3089 anv_queue_finish(&device->queue); in anv_CreateDevice()
3091 anv_gem_destroy_context(device, device->context_id); in anv_CreateDevice()
3093 close(device->fd); in anv_CreateDevice()
3095 vk_free(&device->vk.alloc, device); in anv_CreateDevice()
3104 ANV_FROM_HANDLE(anv_device, device, _device); in anv_DestroyDevice()
3106 if (!device) in anv_DestroyDevice()
3109 anv_queue_finish(&device->queue); in anv_DestroyDevice()
3111 anv_device_finish_blorp(device); in anv_DestroyDevice()
3113 anv_pipeline_cache_finish(&device->default_pipeline_cache); in anv_DestroyDevice()
3119 if (device->info.gen >= 8) in anv_DestroyDevice()
3120 anv_state_reserved_pool_finish(&device->custom_border_colors); in anv_DestroyDevice()
3121 anv_state_pool_free(&device->dynamic_state_pool, device->border_colors); in anv_DestroyDevice()
3122 anv_state_pool_free(&device->dynamic_state_pool, device->slice_hash); in anv_DestroyDevice()
3125 anv_scratch_pool_finish(device, &device->scratch_pool); in anv_DestroyDevice()
3127 anv_device_release_bo(device, device->workaround_bo); in anv_DestroyDevice()
3128 anv_device_release_bo(device, device->trivial_batch_bo); in anv_DestroyDevice()
3129 if (device->info.gen >= 10) in anv_DestroyDevice()
3130 anv_device_release_bo(device, device->hiz_clear_bo); in anv_DestroyDevice()
3132 if (device->info.has_aux_map) { in anv_DestroyDevice()
3133 gen_aux_map_finish(device->aux_map_ctx); in anv_DestroyDevice()
3134 device->aux_map_ctx = NULL; in anv_DestroyDevice()
3137 if (device->physical->use_softpin) in anv_DestroyDevice()
3138 anv_state_pool_finish(&device->binding_table_pool); in anv_DestroyDevice()
3139 anv_state_pool_finish(&device->surface_state_pool); in anv_DestroyDevice()
3140 anv_state_pool_finish(&device->instruction_state_pool); in anv_DestroyDevice()
3141 anv_state_pool_finish(&device->dynamic_state_pool); in anv_DestroyDevice()
3143 anv_bo_pool_finish(&device->batch_bo_pool); in anv_DestroyDevice()
3145 anv_bo_cache_finish(&device->bo_cache); in anv_DestroyDevice()
3147 if (device->physical->use_softpin) { in anv_DestroyDevice()
3148 util_vma_heap_finish(&device->vma_hi); in anv_DestroyDevice()
3149 util_vma_heap_finish(&device->vma_cva); in anv_DestroyDevice()
3150 util_vma_heap_finish(&device->vma_lo); in anv_DestroyDevice()
3153 pthread_cond_destroy(&device->queue_submit); in anv_DestroyDevice()
3154 pthread_mutex_destroy(&device->mutex); in anv_DestroyDevice()
3156 anv_gem_destroy_context(device, device->context_id); in anv_DestroyDevice()
3159 gen_batch_decode_ctx_finish(&device->decoder_ctx); in anv_DestroyDevice()
3161 close(device->fd); in anv_DestroyDevice()
3163 vk_device_finish(&device->vk); in anv_DestroyDevice()
3164 vk_free(&device->vk.alloc, device); in anv_DestroyDevice()
3216 ANV_FROM_HANDLE(anv_device, device, _device); in anv_GetDeviceQueue2()
3220 if (pQueueInfo->flags == device->queue.flags) in anv_GetDeviceQueue2()
3221 *pQueue = anv_queue_to_handle(&device->queue); in anv_GetDeviceQueue2()
3227 _anv_device_report_lost(struct anv_device *device) in _anv_device_report_lost() argument
3229 assert(p_atomic_read(&device->_lost) > 0); in _anv_device_report_lost()
3231 device->lost_reported = true; in _anv_device_report_lost()
3233 struct anv_queue *queue = &device->queue; in _anv_device_report_lost()
3235 __vk_errorf(device->physical->instance, device, in _anv_device_report_lost()
3243 _anv_device_set_lost(struct anv_device *device, in _anv_device_set_lost() argument
3250 if (p_atomic_read(&device->_lost) > 0) in _anv_device_set_lost()
3253 p_atomic_inc(&device->_lost); in _anv_device_set_lost()
3254 device->lost_reported = true; in _anv_device_set_lost()
3257 err = __vk_errorv(device->physical->instance, device, in _anv_device_set_lost()
3287 p_atomic_inc(&queue->device->_lost); in _anv_queue_set_lost()
3296 anv_device_query_status(struct anv_device *device) in anv_device_query_status() argument
3302 if (anv_device_is_lost(device)) in anv_device_query_status()
3306 int ret = anv_gem_gpu_get_reset_stats(device, &active, &pending); in anv_device_query_status()
3309 return anv_device_set_lost(device, "get_reset_stats failed: %m"); in anv_device_query_status()
3313 return anv_device_set_lost(device, "GPU hung on one of our command buffers"); in anv_device_query_status()
3315 return anv_device_set_lost(device, "GPU hung with commands in-flight"); in anv_device_query_status()
3322 anv_device_bo_busy(struct anv_device *device, struct anv_bo *bo) in anv_device_bo_busy() argument
3328 int ret = anv_gem_busy(device, bo->gem_handle); in anv_device_bo_busy()
3333 return anv_device_set_lost(device, "gem wait failed: %m"); in anv_device_bo_busy()
3342 return anv_device_query_status(device); in anv_device_bo_busy()
3346 anv_device_wait(struct anv_device *device, struct anv_bo *bo, in anv_device_wait() argument
3349 int ret = anv_gem_wait(device, bo->gem_handle, &timeout); in anv_device_wait()
3354 return anv_device_set_lost(device, "gem wait failed: %m"); in anv_device_wait()
3362 return anv_device_query_status(device); in anv_device_wait()
3368 ANV_FROM_HANDLE(anv_device, device, _device); in anv_DeviceWaitIdle()
3370 if (anv_device_is_lost(device)) in anv_DeviceWaitIdle()
3373 return anv_queue_submit_simple_batch(&device->queue, NULL); in anv_DeviceWaitIdle()
3377 anv_vma_alloc(struct anv_device *device, in anv_vma_alloc() argument
3382 pthread_mutex_lock(&device->vma_mutex); in anv_vma_alloc()
3388 if (util_vma_heap_alloc_addr(&device->vma_cva, in anv_vma_alloc()
3393 addr = util_vma_heap_alloc(&device->vma_cva, size, align); in anv_vma_alloc()
3402 addr = util_vma_heap_alloc(&device->vma_hi, size, align); in anv_vma_alloc()
3405 addr = util_vma_heap_alloc(&device->vma_lo, size, align); in anv_vma_alloc()
3408 pthread_mutex_unlock(&device->vma_mutex); in anv_vma_alloc()
3415 anv_vma_free(struct anv_device *device, in anv_vma_free() argument
3420 pthread_mutex_lock(&device->vma_mutex); in anv_vma_free()
3424 util_vma_heap_free(&device->vma_lo, addr_48b, size); in anv_vma_free()
3427 util_vma_heap_free(&device->vma_cva, addr_48b, size); in anv_vma_free()
3430 util_vma_heap_free(&device->vma_hi, addr_48b, size); in anv_vma_free()
3433 pthread_mutex_unlock(&device->vma_mutex); in anv_vma_free()
3442 ANV_FROM_HANDLE(anv_device, device, _device); in anv_AllocateMemory()
3443 struct anv_physical_device *pdevice = device->physical; in anv_AllocateMemory()
3469 mem = vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*mem), 8, in anv_AllocateMemory()
3475 vk_object_base_init(&device->vk, &mem->base, VK_OBJECT_TYPE_DEVICE_MEMORY); in anv_AllocateMemory()
3534 if (device->physical->has_implicit_ccs) in anv_AllocateMemory()
3550 if (device->info.has_aux_map) in anv_AllocateMemory()
3593 result = anv_device_import_bo(device, fd_info->fd, alloc_flags, in anv_AllocateMemory()
3607 result = vk_errorf(device, device, VK_ERROR_INVALID_EXTERNAL_HANDLE, in anv_AllocateMemory()
3612 anv_device_release_bo(device, mem->bo); in anv_AllocateMemory()
3639 result = anv_device_import_bo_from_host_ptr(device, in anv_AllocateMemory()
3654 result = anv_device_alloc_bo(device, pAllocateInfo->allocationSize, in anv_AllocateMemory()
3668 int ret = anv_gem_set_tiling(device, mem->bo->gem_handle, in anv_AllocateMemory()
3672 anv_device_release_bo(device, mem->bo); in anv_AllocateMemory()
3673 result = vk_errorf(device, device, VK_ERROR_OUT_OF_DEVICE_MEMORY, in anv_AllocateMemory()
3684 anv_device_release_bo(device, mem->bo); in anv_AllocateMemory()
3685 result = vk_errorf(device, device, VK_ERROR_OUT_OF_DEVICE_MEMORY, in anv_AllocateMemory()
3690 pthread_mutex_lock(&device->mutex); in anv_AllocateMemory()
3691 list_addtail(&mem->link, &device->memory_objects); in anv_AllocateMemory()
3692 pthread_mutex_unlock(&device->mutex); in anv_AllocateMemory()
3699 vk_free2(&device->vk.alloc, pAllocator, mem); in anv_AllocateMemory()
3726 ANV_FROM_HANDLE(anv_device, device, _device); in anv_GetMemoryFdPropertiesKHR()
3732 (1 << device->physical->memory.type_count) - 1; in anv_GetMemoryFdPropertiesKHR()
3753 ANV_FROM_HANDLE(anv_device, device, _device); in anv_GetMemoryHostPointerPropertiesEXT()
3762 (1ull << device->physical->memory.type_count) - 1; in anv_GetMemoryHostPointerPropertiesEXT()
3776 ANV_FROM_HANDLE(anv_device, device, _device); in anv_FreeMemory()
3782 pthread_mutex_lock(&device->mutex); in anv_FreeMemory()
3784 pthread_mutex_unlock(&device->mutex); in anv_FreeMemory()
3789 p_atomic_add(&device->physical->memory.heaps[mem->type->heapIndex].used, in anv_FreeMemory()
3792 anv_device_release_bo(device, mem->bo); in anv_FreeMemory()
3800 vk_free2(&device->vk.alloc, pAllocator, mem); in anv_FreeMemory()
3811 ANV_FROM_HANDLE(anv_device, device, _device); in anv_MapMemory()
3845 if (!device->info.has_llc && in anv_MapMemory()
3851 if (!device->physical->has_mmap_offset) in anv_MapMemory()
3861 void *map = anv_gem_mmap(device, mem->bo->gem_handle, in anv_MapMemory()
3878 ANV_FROM_HANDLE(anv_device, device, _device); in anv_UnmapMemory()
3884 anv_gem_munmap(device, mem->map, mem->map_size); in anv_UnmapMemory()
3891 clflush_mapped_ranges(struct anv_device *device, in clflush_mapped_ranges() argument
3910 ANV_FROM_HANDLE(anv_device, device, _device); in anv_FlushMappedMemoryRanges()
3912 if (device->info.has_llc) in anv_FlushMappedMemoryRanges()
3918 clflush_mapped_ranges(device, memoryRangeCount, pMemoryRanges); in anv_FlushMappedMemoryRanges()
3928 ANV_FROM_HANDLE(anv_device, device, _device); in anv_InvalidateMappedMemoryRanges()
3930 if (device->info.has_llc) in anv_InvalidateMappedMemoryRanges()
3933 clflush_mapped_ranges(device, memoryRangeCount, pMemoryRanges); in anv_InvalidateMappedMemoryRanges()
3947 ANV_FROM_HANDLE(anv_device, device, _device); in anv_GetBufferMemoryRequirements()
3956 uint32_t memory_types = (1ull << device->physical->memory.type_count) - 1; in anv_GetBufferMemoryRequirements()
3972 if (device->robust_buffer_access && in anv_GetBufferMemoryRequirements()
4010 ANV_FROM_HANDLE(anv_device, device, _device); in anv_GetImageMemoryRequirements()
4021 uint32_t memory_types = (1ull << device->physical->memory.type_count) - 1; in anv_GetImageMemoryRequirements()
4033 ANV_FROM_HANDLE(anv_device, device, _device); in anv_GetImageMemoryRequirements2()
4060 (1ull << device->physical->memory.type_count) - 1; in anv_GetImageMemoryRequirements2()
4101 VkDevice device, in anv_GetImageSparseMemoryRequirements() argument
4110 VkDevice device, in anv_GetImageSparseMemoryRequirements2() argument
4119 VkDevice device, in anv_GetDeviceMemoryCommitment() argument
4145 VkDevice device, in anv_BindBufferMemory() argument
4162 VkDevice device, in anv_BindBufferMemory2() argument
4179 if (anv_device_is_lost(queue->device)) in anv_QueueBindSparse()
4193 ANV_FROM_HANDLE(anv_device, device, _device); in anv_CreateEvent()
4198 event = vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*event), 8, in anv_CreateEvent()
4203 vk_object_base_init(&device->vk, &event->base, VK_OBJECT_TYPE_EVENT); in anv_CreateEvent()
4204 event->state = anv_state_pool_alloc(&device->dynamic_state_pool, in anv_CreateEvent()
4218 ANV_FROM_HANDLE(anv_device, device, _device); in anv_DestroyEvent()
4224 anv_state_pool_free(&device->dynamic_state_pool, event->state); in anv_DestroyEvent()
4227 vk_free2(&device->vk.alloc, pAllocator, event); in anv_DestroyEvent()
4234 ANV_FROM_HANDLE(anv_device, device, _device); in anv_GetEventStatus()
4237 if (anv_device_is_lost(device)) in anv_GetEventStatus()
4273 ANV_FROM_HANDLE(anv_device, device, _device); in anv_CreateBuffer()
4281 if (pCreateInfo->size > device->physical->gtt_size) in anv_CreateBuffer()
4286 buffer = vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*buffer), 8, in anv_CreateBuffer()
4291 vk_object_base_init(&device->vk, &buffer->base, VK_OBJECT_TYPE_BUFFER); in anv_CreateBuffer()
4306 ANV_FROM_HANDLE(anv_device, device, _device); in anv_DestroyBuffer()
4313 vk_free2(&device->vk.alloc, pAllocator, buffer); in anv_DestroyBuffer()
4317 VkDevice device, in anv_GetBufferDeviceAddress() argument
4329 VkDevice device, in anv_GetBufferOpaqueCaptureAddress() argument
4336 VkDevice device, in anv_GetDeviceMemoryOpaqueCaptureAddress() argument
4348 anv_fill_buffer_surface_state(struct anv_device *device, struct anv_state state, in anv_fill_buffer_surface_state() argument
4354 isl_buffer_fill_state(&device->isl_dev, state.map, in anv_fill_buffer_surface_state()
4356 .mocs = isl_mocs(&device->isl_dev, usage), in anv_fill_buffer_surface_state()
4368 ANV_FROM_HANDLE(anv_device, device, _device); in anv_DestroySampler()
4375 anv_state_pool_free(&device->dynamic_state_pool, in anv_DestroySampler()
4380 anv_state_reserved_pool_free(&device->custom_border_colors, in anv_DestroySampler()
4385 vk_free2(&device->vk.alloc, pAllocator, sampler); in anv_DestroySampler()
4394 ANV_FROM_HANDLE(anv_device, device, _device); in anv_CreateFramebuffer()
4408 framebuffer = vk_alloc2(&device->vk.alloc, pAllocator, size, 8, in anv_CreateFramebuffer()
4419 framebuffer = vk_alloc2(&device->vk.alloc, pAllocator, size, 8, in anv_CreateFramebuffer()
4427 vk_object_base_init(&device->vk, &framebuffer->base, in anv_CreateFramebuffer()
4444 ANV_FROM_HANDLE(anv_device, device, _device); in anv_DestroyFramebuffer()
4451 vk_free2(&device->vk.alloc, pAllocator, fb); in anv_DestroyFramebuffer()
4503 ANV_FROM_HANDLE(anv_device, device, _device); in anv_GetCalibratedTimestampsEXT()
4504 uint64_t timestamp_frequency = device->info.timestamp_frequency; in anv_GetCalibratedTimestampsEXT()
4519 ret = anv_gem_reg_read(device->fd, TIMESTAMP | I915_REG_READ_8B_WA, in anv_GetCalibratedTimestampsEXT()
4523 return anv_device_set_lost(device, "Failed to read the TIMESTAMP " in anv_GetCalibratedTimestampsEXT()
4646 ANV_FROM_HANDLE(anv_device, device, _device); in anv_CreatePrivateDataSlotEXT()
4647 return vk_private_data_slot_create(&device->vk, pCreateInfo, pAllocator, in anv_CreatePrivateDataSlotEXT()
4656 ANV_FROM_HANDLE(anv_device, device, _device); in anv_DestroyPrivateDataSlotEXT()
4657 vk_private_data_slot_destroy(&device->vk, privateDataSlot, pAllocator); in anv_DestroyPrivateDataSlotEXT()
4667 ANV_FROM_HANDLE(anv_device, device, _device); in anv_SetPrivateDataEXT()
4668 return vk_object_base_set_private_data(&device->vk, in anv_SetPrivateDataEXT()
4680 ANV_FROM_HANDLE(anv_device, device, _device); in anv_GetPrivateDataEXT()
4681 vk_object_base_get_private_data(&device->vk, in anv_GetPrivateDataEXT()