Lines Matching full:info
75 batch_next(struct intel_info *info)
77 info->cur = info->batch;
79 if (info->batch_ibo)
80 drm_intel_bo_unreference(info->batch_ibo);
82 info->batch_ibo = drm_intel_bo_alloc(info->bufmgr,
83 "gralloc-batchbuffer", info->size, 4096);
85 return (info->batch_ibo) ? 0 : -ENOMEM;
89 batch_count(struct intel_info *info)
91 return info->cur - info->batch;
95 batch_dword(struct intel_info *info, uint32_t dword)
97 *info->cur++ = dword;
101 batch_reloc(struct intel_info *info, struct gralloc_drm_bo_t *bo,
105 uint32_t offset = (info->cur - info->batch) * sizeof(info->batch[0]);
108 ret = drm_intel_bo_emit_reloc(info->batch_ibo, offset,
111 batch_dword(info, target->ibo->offset);
117 batch_flush(struct intel_info *info)
121 batch_dword(info, MI_BATCH_BUFFER_END);
122 size = batch_count(info);
124 batch_dword(info, MI_NOOP);
125 size = batch_count(info);
128 size *= sizeof(info->batch[0]);
129 ret = drm_intel_bo_subdata(info->batch_ibo, 0, size, info->batch);
134 ret = drm_intel_bo_mrb_exec(info->batch_ibo, size,
135 NULL, 0, 0, info->exec_blt);
141 return batch_next(info);
144 info->cur = info->batch;
150 batch_reserve(struct intel_info *info, int count)
154 if (batch_count(info) + count > info->capacity)
155 ret = batch_flush(info);
161 batch_destroy(struct intel_info *info)
163 if (info->batch_ibo) {
164 drm_intel_bo_unreference(info->batch_ibo);
165 info->batch_ibo = NULL;
168 if (info->batch) {
169 free(info->batch);
170 info->batch = NULL;
175 batch_init(struct intel_info *info)
179 info->capacity = 512;
180 info->size = (info->capacity + 16) * sizeof(info->batch[0]);
182 info->batch = malloc(info->size);
183 if (!info->batch)
186 ret = batch_next(info);
188 free(info->batch);
189 info->batch = NULL;
241 static drm_intel_bo *alloc_ibo(struct intel_info *info,
266 if (info->gen < 50)
268 if (info->gen < 40)
285 ibo = drm_intel_bo_alloc_tiled(info->bufmgr, name,
330 ibo = drm_intel_bo_alloc_tiled(info->bufmgr, name,
341 struct intel_info *info = (struct intel_info *) drv;
351 ib->ibo = drm_intel_bo_gem_create_from_name(info->bufmgr,
370 ib->ibo = alloc_ibo(info, handle, &ib->tiling, &stride);
438 static void gen_init(struct intel_info *info)
446 if (drmCommandWriteRead(info->fd, DRM_I915_GETPARAM, &gp, sizeof(gp)))
452 if (drmCommandWriteRead(info->fd, DRM_I915_GETPARAM, &gp, sizeof(gp)))
454 info->exec_blt = has_blt ? I915_EXEC_BLT : 0;
459 info->gen = 70;
461 info->gen = 60;
463 info->gen = 50;
465 info->gen = 40;
468 info->gen = 30;
474 struct intel_info *info = (struct intel_info *) drv;
476 batch_destroy(info);
477 drm_intel_bufmgr_destroy(info->bufmgr);
478 free(info);
483 struct intel_info *info;
485 info = calloc(1, sizeof(*info));
486 if (!info) {
487 ALOGE("failed to allocate driver info");
491 info->fd = fd;
492 info->bufmgr = drm_intel_bufmgr_gem_init(info->fd, 16 * 1024);
493 if (!info->bufmgr) {
495 free(info);
499 batch_init(info);
500 gen_init(info);
502 info->base.destroy = intel_destroy;
503 info->base.alloc = intel_alloc;
504 info->base.free = intel_free;
505 info->base.map = intel_map;
506 info->base.unmap = intel_unmap;
507 info->base.resolve_format = intel_resolve_format;
509 return &info->base;