Clean up .gitignore files
[mesa.git] / src / gallium / winsys / i915 / sw / i915_sw_buffer.c
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 }