2 #include "intel_drm_winsys.h"
3 #include "util/u_memory.h"
7 static struct intel_buffer
*
8 intel_drm_buffer_create(struct intel_winsys
*iws
,
9 unsigned size
, unsigned alignment
,
10 enum intel_buffer_type type
)
12 struct intel_drm_buffer
*buf
= CALLOC_STRUCT(intel_drm_buffer
);
13 struct intel_drm_winsys
*idws
= intel_drm_winsys(iws
);
14 drm_intel_bufmgr
*pool
;
20 buf
->magic
= 0xDEAD1337;
25 if (type
== INTEL_NEW_TEXTURE
) {
26 name
= "gallium3d_texture";
27 pool
= idws
->pools
.gem
;
28 } else if (type
== INTEL_NEW_VERTEX
) {
29 name
= "gallium3d_vertex";
30 pool
= idws
->pools
.gem
;
32 } else if (type
== INTEL_NEW_SCANOUT
) {
33 name
= "gallium3d_scanout";
34 pool
= idws
->pools
.gem
;
38 name
= "gallium3d_unknown";
39 pool
= idws
->pools
.gem
;
42 buf
->bo
= drm_intel_bo_alloc(pool
, name
, size
, alignment
);
47 return (struct intel_buffer
*)buf
;
56 intel_drm_buffer_set_fence_reg(struct intel_winsys
*iws
,
57 struct intel_buffer
*buffer
,
59 enum intel_buffer_tile tile
)
61 struct intel_drm_buffer
*buf
= intel_drm_buffer(buffer
);
62 assert(I915_TILING_NONE
== INTEL_TILE_NONE
);
63 assert(I915_TILING_X
== INTEL_TILE_X
);
64 assert(I915_TILING_Y
== INTEL_TILE_Y
);
66 if (tile
!= INTEL_TILE_NONE
) {
67 assert(buf
->map_count
== 0);
71 return drm_intel_bo_set_tiling(buf
->bo
, &tile
, stride
);
75 intel_drm_buffer_map(struct intel_winsys
*iws
,
76 struct intel_buffer
*buffer
,
79 struct intel_drm_buffer
*buf
= intel_drm_buffer(buffer
);
80 drm_intel_bo
*bo
= intel_bo(buffer
);
89 ret
= drm_intel_gem_bo_map_gtt(bo
);
91 ret
= drm_intel_bo_map(bo
, write
);
93 buf
->ptr
= bo
->virtual;
105 intel_drm_buffer_unmap(struct intel_winsys
*iws
,
106 struct intel_buffer
*buffer
)
108 struct intel_drm_buffer
*buf
= intel_drm_buffer(buffer
);
110 if (--buf
->map_count
)
114 drm_intel_gem_bo_unmap_gtt(intel_bo(buffer
));
116 drm_intel_bo_unmap(intel_bo(buffer
));
120 intel_drm_buffer_write(struct intel_winsys
*iws
,
121 struct intel_buffer
*buffer
,
126 struct intel_drm_buffer
*buf
= intel_drm_buffer(buffer
);
128 return drm_intel_bo_subdata(buf
->bo
, offset
, size
, (void*)data
);
132 intel_drm_buffer_destroy(struct intel_winsys
*iws
,
133 struct intel_buffer
*buffer
)
135 drm_intel_bo_unreference(intel_bo(buffer
));
138 intel_drm_buffer(buffer
)->magic
= 0;
139 intel_drm_buffer(buffer
)->bo
= NULL
;
146 intel_drm_winsys_init_buffer_functions(struct intel_drm_winsys
*idws
)
148 idws
->base
.buffer_create
= intel_drm_buffer_create
;
149 idws
->base
.buffer_set_fence_reg
= intel_drm_buffer_set_fence_reg
;
150 idws
->base
.buffer_map
= intel_drm_buffer_map
;
151 idws
->base
.buffer_unmap
= intel_drm_buffer_unmap
;
152 idws
->base
.buffer_write
= intel_drm_buffer_write
;
153 idws
->base
.buffer_destroy
= intel_drm_buffer_destroy
;