Rev 4368 | Rev 4403 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4368 | Rev 4397 | ||
---|---|---|---|
Line 2935... | Line 2935... | ||
2935 | void kgem_cleanup_cache(struct kgem *kgem) |
2935 | void kgem_cleanup_cache(struct kgem *kgem) |
2936 | { |
2936 | { |
2937 | unsigned int i; |
2937 | unsigned int i; |
2938 | int n; |
2938 | int n; |
Line 2939... | Line -... | ||
2939 | - | ||
2940 | ENTER(); |
- | |
2941 | 2939 | ||
2942 | /* sync to the most recent request */ |
2940 | /* sync to the most recent request */ |
2943 | for (n = 0; n < ARRAY_SIZE(kgem->requests); n++) { |
2941 | for (n = 0; n < ARRAY_SIZE(kgem->requests); n++) { |
2944 | if (!list_is_empty(&kgem->requests[n])) { |
2942 | if (!list_is_empty(&kgem->requests[n])) { |
2945 | struct kgem_request *rq; |
2943 | struct kgem_request *rq; |
Line 2984... | Line 2982... | ||
2984 | free(bo); |
2982 | free(bo); |
2985 | } |
2983 | } |
Line 2986... | Line 2984... | ||
2986 | 2984 | ||
2987 | kgem->need_purge = false; |
2985 | kgem->need_purge = false; |
2988 | kgem->need_expire = false; |
- | |
2989 | - | ||
2990 | LEAVE(); |
2986 | kgem->need_expire = false; |
Line 2991... | Line 2987... | ||
2991 | } |
2987 | } |
2992 | 2988 | ||
2993 | static struct kgem_bo * |
2989 | static struct kgem_bo * |
Line 5322... | Line 5318... | ||
5322 | } |
5318 | } |
Line 5323... | Line 5319... | ||
5323 | 5319 | ||
5324 | int kgem_init_fb(struct kgem *kgem, struct sna_fb *fb) |
5320 | int kgem_init_fb(struct kgem *kgem, struct sna_fb *fb) |
5325 | { |
5321 | { |
- | 5322 | struct kgem_bo *bo; |
|
- | 5323 | struct drm_gem_open open_arg; |
|
- | 5324 | struct drm_i915_gem_get_tiling get_tiling; |
|
5326 | struct kgem_bo *bo; |
5325 | |
5327 | size_t size; |
5326 | size_t size; |
Line 5328... | Line 5327... | ||
5328 | int ret; |
5327 | int ret; |
5329 | 5328 | ||
5330 | ret = drmIoctl(kgem->fd, SRV_FBINFO, fb); |
5329 | ret = drmIoctl(kgem->fd, SRV_FBINFO, fb); |
Line -... | Line 5330... | ||
- | 5330 | if( ret != 0 ) |
|
- | 5331 | return 0; |
|
- | 5332 | ||
- | 5333 | open_arg.name = fb->name; |
|
- | 5334 | ret = drmIoctl(kgem->fd, DRM_IOCTL_GEM_OPEN, &open_arg); |
|
- | 5335 | if (ret != 0) { |
|
- | 5336 | printf("Couldn't reference %s handle 0x%08x\n", |
|
5331 | if( ret != 0 ) |
5337 | fb->name, fb->name); |
Line 5332... | Line 5338... | ||
5332 | return 0; |
5338 | return NULL; |
5333 | 5339 | } |
|
5334 | size = fb->pitch * fb->height / PAGE_SIZE; |
5340 | size = open_arg.size / PAGE_SIZE; |
5335 | 5341 | ||
Line -... | Line 5342... | ||
- | 5342 | bo = __kgem_bo_alloc(open_arg.handle, size); |
|
- | 5343 | if (!bo) { |
|
- | 5344 | return 0; |
|
- | 5345 | } |
|
- | 5346 | ||
- | 5347 | get_tiling.handle = bo->handle; |
|
- | 5348 | ret = drmIoctl(kgem->fd,DRM_IOCTL_I915_GEM_GET_TILING,&get_tiling); |
|
- | 5349 | if (ret != 0) { |
|
5336 | bo = __kgem_bo_alloc(-2, size); |
5350 | printf("%s: couldn't get tiling for handle %d\n", __FUNCTION__, bo->handle); |
5337 | if (!bo) { |
5351 | // drm_intel_gem_bo_unreference(&bo_gem->bo); |
5338 | return 0; |
5352 | return 0; |
5339 | } |
5353 | } |
5340 | 5354 | ||
5341 | bo->domain = DOMAIN_GTT; |
5355 | bo->domain = DOMAIN_GTT; |
Line 5342... | Line 5356... | ||
5342 | bo->unique_id = kgem_get_unique_id(kgem); |
5356 | bo->unique_id = kgem_get_unique_id(kgem); |
5343 | bo->pitch = fb->pitch; |
5357 | bo->pitch = fb->pitch; |
Line 5344... | Line 5358... | ||
5344 | bo->tiling = I915_TILING_X; |
5358 | bo->tiling = get_tiling.tiling_mode; |
5345 | bo->scanout = 1; |
5359 | bo->scanout = 1; |
Line 5391... | Line 5405... | ||
5391 | 5405 | ||
5392 | 5406 | ||
5393 | void kgem_close_batches(struct kgem *kgem) |
5407 | void kgem_close_batches(struct kgem *kgem) |
5394 | { |
- | |
5395 | int n; |
5408 | { |
5396 | ENTER(); |
5409 | int n; |
5397 | for (n = 0; n < ARRAY_SIZE(kgem->pinned_batches); n++) { |
5410 | for (n = 0; n < ARRAY_SIZE(kgem->pinned_batches); n++) { |
5398 | while (!list_is_empty(&kgem->pinned_batches[n])) |
5411 | while (!list_is_empty(&kgem->pinned_batches[n])) |
5399 | { |
5412 | { |
5400 | struct kgem_bo *bo = |
5413 | struct kgem_bo *bo = |
5401 | list_first_entry(&kgem->pinned_batches[n], |
5414 | list_first_entry(&kgem->pinned_batches[n], |
5402 | struct kgem_bo, list); |
5415 | struct kgem_bo, list); |
5403 | list_del(&bo->list); |
5416 | list_del(&bo->list); |
5404 | kgem_bo_destroy(kgem,bo); |
5417 | kgem_bo_destroy(kgem,bo); |
5405 | } |
- | |
5406 | } |
5418 | } |
Line 5407... | Line 5419... | ||
5407 | LEAVE(); |
5419 | } |
5408 | }; |
5420 | }; |
5409 | 5421 |