Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. #include <drmP.h>
  3. #include <drm.h>
  4. #include "radeon_drm.h"
  5. #include "../radeon.h"
  6. #include "../display.h"
  7.  
  8. extern struct radeon_device *main_device;
  9.  
  10. typedef struct
  11. {
  12.     kobj_t   header;
  13.  
  14.     int       width;
  15.     int       height;
  16.     int       stride;
  17.     uint64_t  gaddr;
  18.     void     *uaddr;
  19.     struct radeon_bo  *robj;
  20. }bitmap_t;
  21.  
  22. int create_bitmap(bitmap_t **pbitmap, int width, int height)
  23. {
  24.     size_t size;
  25.     size_t pitch;
  26.     bitmap_t  *bitmap;
  27.     uint64_t  gaddr;
  28.     void     *uaddr;
  29.  
  30.     struct radeon_device *rdev = main_device;
  31.     struct radeon_bo     *sobj = NULL;
  32.  
  33.     int   r;
  34.  
  35.     bitmap = CreateObject(GetPid(), sizeof(bitmap_t));
  36.     if( bitmap == NULL)
  37.     {
  38.         *pbitmap = NULL;
  39.         return -1;
  40.     }
  41.  
  42.     pitch = radeon_align_pitch(rdev, width, 32, false) * 4;
  43.  
  44.     size = pitch * height;
  45.  
  46.     r = radeon_bo_create(rdev, size, PAGE_SIZE, true,
  47.                          RADEON_GEM_DOMAIN_GTT, &sobj);
  48.     if (r) {
  49.         goto fail;
  50.     }
  51.     r = radeon_bo_reserve(sobj, false);
  52.     if (unlikely(r != 0))
  53.         goto fail;
  54.     r = radeon_bo_pin(sobj, RADEON_GEM_DOMAIN_GTT, &gaddr);
  55.     if (r) {
  56.         goto fail;
  57.     }
  58.  
  59.     r = radeon_bo_user_map(sobj, &uaddr);
  60.     if (r) {
  61.         goto fail;
  62.     }
  63.  
  64.     bitmap->width  = width;
  65.     bitmap->height = height;
  66.     bitmap->stride = pitch;
  67.     bitmap->gaddr  = gaddr;
  68.     bitmap->uaddr  = uaddr;
  69.     bitmap->robj   = sobj;
  70.  
  71.     *pbitmap       = bitmap;
  72.     return 0;
  73.  
  74. fail:
  75.  
  76.     DestroyObject(bitmap);
  77.     return -1;
  78.  
  79. };
  80.