}
device->master_fd = master_fd;
+ device->engine_info = anv_gem_get_engine_info(fd);
anv_physical_device_init_queue_families(device);
result = anv_init_wsi(device);
if (result != VK_SUCCESS)
- goto fail_disk_cache;
+ goto fail_engine_info;
device->perf = anv_get_perf(&device->info, fd);
return VK_SUCCESS;
-fail_disk_cache:
+fail_engine_info:
+ free(device->engine_info);
anv_physical_device_free_disk_cache(device);
fail_compiler:
ralloc_free(device->compiler);
anv_physical_device_destroy(struct anv_physical_device *device)
{
anv_finish_wsi(device);
+ free(device->engine_info);
anv_physical_device_free_disk_cache(device);
ralloc_free(device->compiler);
ralloc_free(device->perf);
*buffer_len = item.length;
return ret;
}
+
+struct drm_i915_query_engine_info *
+anv_gem_get_engine_info(int fd)
+{
+ int32_t length = 0;
+ int ret = anv_i915_query(fd, DRM_I915_QUERY_ENGINE_INFO, NULL, &length);
+ assert(ret == 0);
+
+ if (ret == -1 && errno == EINVAL)
+ return NULL;
+
+ struct drm_i915_query_engine_info *info = calloc(1, length);
+ ret = anv_i915_query(fd, DRM_I915_QUERY_ENGINE_INFO, info, &length);
+ assert(ret == 0);
+
+ if (ret != 0) {
+ free(info);
+ return NULL;
+ }
+
+ return info;
+}
unreachable("Unused");
}
+struct drm_i915_query_engine_info *
+anv_gem_get_engine_info(int fd)
+{
+ unreachable("Unused");
+}
+
int
anv_gem_syncobj_wait(struct anv_device *device,
const uint32_t *handles, uint32_t num_handles,
struct wsi_device wsi_device;
int local_fd;
int master_fd;
+ struct drm_i915_query_engine_info * engine_info;
};
struct anv_app_info {
uint32_t num_items);
int anv_i915_query(int fd, uint64_t query_id, void *buffer,
int32_t *buffer_len);
+struct drm_i915_query_engine_info *anv_gem_get_engine_info(int fd);
uint64_t anv_vma_alloc(struct anv_device *device,
uint64_t size, uint64_t align,