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
,
7 unsigned size
, unsigned alignment
,
8 enum i915_winsys_buffer_type type
)
10 struct i915_sw_buffer
*buf
= CALLOC_STRUCT(i915_sw_buffer
);
16 if (type
== I915_NEW_TEXTURE
) {
17 name
= "gallium3d_texture";
18 } else if (type
== I915_NEW_VERTEX
) {
19 name
= "gallium3d_vertex";
20 } else if (type
== I915_NEW_SCANOUT
) {
21 name
= "gallium3d_scanout";
24 name
= "gallium3d_unknown";
27 buf
->magic
= 0xDEAD1337;
30 buf
->ptr
= CALLOC(size
, 1);
35 return (struct i915_winsys_buffer
*)buf
;
44 i915_sw_buffer_set_fence_reg(struct i915_winsys
*iws
,
45 struct i915_winsys_buffer
*buffer
,
47 enum i915_winsys_buffer_tile tile
)
49 struct i915_sw_buffer
*buf
= i915_sw_buffer(buffer
);
51 if (tile
!= I915_TILE_NONE
) {
52 assert(buf
->map_count
== 0);
61 i915_sw_buffer_map(struct i915_winsys
*iws
,
62 struct i915_winsys_buffer
*buffer
,
65 struct i915_sw_buffer
*buf
= i915_sw_buffer(buffer
);
72 i915_sw_buffer_unmap(struct i915_winsys
*iws
,
73 struct i915_winsys_buffer
*buffer
)
75 struct i915_sw_buffer
*buf
= i915_sw_buffer(buffer
);
81 i915_sw_buffer_write(struct i915_winsys
*iws
,
82 struct i915_winsys_buffer
*buffer
,
87 struct i915_sw_buffer
*buf
= i915_sw_buffer(buffer
);
89 memcpy(buf
->ptr
+ offset
, data
, size
);
94 i915_sw_buffer_destroy(struct i915_winsys
*iws
,
95 struct i915_winsys_buffer
*buffer
)
97 struct i915_sw_buffer
*buf
= i915_sw_buffer(buffer
);
108 i915_sw_winsys_init_buffer_functions(struct i915_sw_winsys
*isws
)
110 isws
->base
.buffer_create
= i915_sw_buffer_create
;
111 isws
->base
.buffer_set_fence_reg
= i915_sw_buffer_set_fence_reg
;
112 isws
->base
.buffer_map
= i915_sw_buffer_map
;
113 isws
->base
.buffer_unmap
= i915_sw_buffer_unmap
;
114 isws
->base
.buffer_write
= i915_sw_buffer_write
;
115 isws
->base
.buffer_destroy
= i915_sw_buffer_destroy
;