2 #include "i915_sw_winsys.h"
3 #include "util/u_memory.h"
5 static struct i915_winsys_buffer
*
6 i915_sw_buffer_create(struct i915_winsys
*iws
,
8 enum i915_winsys_buffer_type type
)
10 struct i915_sw_buffer
*buf
= CALLOC_STRUCT(i915_sw_buffer
);
15 buf
->magic
= 0xDEAD1337;
17 buf
->ptr
= CALLOC(size
, 1);
22 return (struct i915_winsys_buffer
*)buf
;
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
)
36 struct i915_sw_buffer
*buf
= CALLOC_STRUCT(i915_sw_buffer
);
41 buf
->magic
= 0xDEAD1337;
43 buf
->ptr
= CALLOC(*stride
* height
, 1);
44 buf
->tiling
= *tiling
;
45 buf
->stride
= *stride
;
50 return (struct i915_winsys_buffer
*)buf
;
59 i915_sw_buffer_set_fence_reg(struct i915_winsys
*iws
,
60 struct i915_winsys_buffer
*buffer
,
62 enum i915_winsys_buffer_tile tile
)
64 struct i915_sw_buffer
*buf
= i915_sw_buffer(buffer
);
66 if (tile
!= I915_TILE_NONE
) {
67 assert(buf
->map_count
== 0);
76 i915_sw_buffer_map(struct i915_winsys
*iws
,
77 struct i915_winsys_buffer
*buffer
,
80 struct i915_sw_buffer
*buf
= i915_sw_buffer(buffer
);
87 i915_sw_buffer_unmap(struct i915_winsys
*iws
,
88 struct i915_winsys_buffer
*buffer
)
90 struct i915_sw_buffer
*buf
= i915_sw_buffer(buffer
);
96 i915_sw_buffer_write(struct i915_winsys
*iws
,
97 struct i915_winsys_buffer
*buffer
,
102 struct i915_sw_buffer
*buf
= i915_sw_buffer(buffer
);
104 memcpy(buf
->ptr
+ offset
, data
, size
);
109 i915_sw_buffer_destroy(struct i915_winsys
*iws
,
110 struct i915_winsys_buffer
*buffer
)
112 struct i915_sw_buffer
*buf
= i915_sw_buffer(buffer
);
123 i915_sw_winsys_init_buffer_functions(struct i915_sw_winsys
*isws
)
125 isws
->base
.buffer_create
= i915_sw_buffer_create
;
126 isws
->base
.buffer_create_tiled
= i915_sw_buffer_create_tiled
;
127 isws
->base
.buffer_set_fence_reg
= i915_sw_buffer_set_fence_reg
;
128 isws
->base
.buffer_map
= i915_sw_buffer_map
;
129 isws
->base
.buffer_unmap
= i915_sw_buffer_unmap
;
130 isws
->base
.buffer_write
= i915_sw_buffer_write
;
131 isws
->base
.buffer_destroy
= i915_sw_buffer_destroy
;