Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1.  
  2. #include "i915_sw_winsys.h"
  3. #include "util/u_memory.h"
  4.  
  5. static struct i915_winsys_buffer *
  6. i915_sw_buffer_create(struct i915_winsys *iws,
  7.                       unsigned size,
  8.                       enum i915_winsys_buffer_type type)
  9. {
  10.    struct i915_sw_buffer *buf = CALLOC_STRUCT(i915_sw_buffer);
  11.  
  12.    if (!buf)
  13.       return NULL;
  14.  
  15.    buf->magic = 0xDEAD1337;
  16.    buf->type = type;
  17.    buf->ptr = CALLOC(size, 1);
  18.  
  19.    if (!buf->ptr)
  20.       goto err;
  21.  
  22.    return (struct i915_winsys_buffer *)buf;
  23.  
  24. err:
  25.    assert(0);
  26.    FREE(buf);
  27.    return NULL;
  28. }
  29.  
  30. static struct i915_winsys_buffer *
  31. i915_sw_buffer_create_tiled(struct i915_winsys *iws,
  32.                       unsigned *stride, unsigned height,
  33.                       enum i915_winsys_buffer_tile *tiling,
  34.                       enum i915_winsys_buffer_type type)
  35. {
  36.    struct i915_sw_buffer *buf = CALLOC_STRUCT(i915_sw_buffer);
  37.  
  38.    if (!buf)
  39.       return NULL;
  40.  
  41.    buf->magic = 0xDEAD1337;
  42.    buf->type = type;
  43.    buf->ptr = CALLOC(*stride * height, 1);
  44.    buf->tiling = *tiling;
  45.    buf->stride = *stride;
  46.  
  47.    if (!buf->ptr)
  48.       goto err;
  49.  
  50.    return (struct i915_winsys_buffer *)buf;
  51.  
  52. err:
  53.    assert(0);
  54.    FREE(buf);
  55.    return NULL;
  56. }
  57.  
  58. static void *
  59. i915_sw_buffer_map(struct i915_winsys *iws,
  60.                    struct i915_winsys_buffer *buffer,
  61.                    boolean write)
  62. {
  63.    struct i915_sw_buffer *buf = i915_sw_buffer(buffer);
  64.  
  65.    buf->map_count += 1;
  66.    return buf->ptr;
  67. }
  68.  
  69. static void
  70. i915_sw_buffer_unmap(struct i915_winsys *iws,
  71.                      struct i915_winsys_buffer *buffer)
  72. {
  73.    struct i915_sw_buffer *buf = i915_sw_buffer(buffer);
  74.  
  75.    buf->map_count -= 1;
  76. }
  77.  
  78. static int
  79. i915_sw_buffer_write(struct i915_winsys *iws,
  80.                      struct i915_winsys_buffer *buffer,
  81.                      size_t offset,
  82.                      size_t size,
  83.                      const void *data)
  84. {
  85.    struct i915_sw_buffer *buf = i915_sw_buffer(buffer);
  86.  
  87.    memcpy((char*)buf->ptr + offset, data, size);
  88.    return 0;
  89. }
  90.  
  91. static void
  92. i915_sw_buffer_destroy(struct i915_winsys *iws,
  93.                        struct i915_winsys_buffer *buffer)
  94. {
  95.    struct i915_sw_buffer *buf = i915_sw_buffer(buffer);
  96.  
  97. #ifdef DEBUG
  98.    buf->magic = 0;
  99. #endif
  100.  
  101.    FREE(buf->ptr);
  102.    FREE(buf);
  103. }
  104.  
  105. void
  106. i915_sw_winsys_init_buffer_functions(struct i915_sw_winsys *isws)
  107. {
  108.    isws->base.buffer_create = i915_sw_buffer_create;
  109.    isws->base.buffer_create_tiled = i915_sw_buffer_create_tiled;
  110.    isws->base.buffer_map = i915_sw_buffer_map;
  111.    isws->base.buffer_unmap = i915_sw_buffer_unmap;
  112.    isws->base.buffer_write = i915_sw_buffer_write;
  113.    isws->base.buffer_destroy = i915_sw_buffer_destroy;
  114. }
  115.