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
;
31 } else if (type
== INTEL_NEW_SCANOUT
) {
32 name
= "gallium3d_scanout";
33 pool
= idws
->pools
.gem
;
37 name
= "gallium3d_unknown";
38 pool
= idws
->pools
.gem
;
41 buf
->bo
= drm_intel_bo_alloc(pool
, name
, size
, alignment
);
46 return (struct intel_buffer
*)buf
;
55 intel_drm_buffer_set_fence_reg(struct intel_winsys
*iws
,
56 struct intel_buffer
*buffer
,
58 enum intel_buffer_tile tile
)
60 assert(I915_TILING_NONE
== INTEL_TILE_NONE
);
61 assert(I915_TILING_X
== INTEL_TILE_X
);
62 assert(I915_TILING_Y
== INTEL_TILE_Y
);
64 return drm_intel_bo_set_tiling(intel_bo(buffer
), &tile
, stride
);
68 intel_drm_buffer_map(struct intel_winsys
*iws
,
69 struct intel_buffer
*buffer
,
72 struct intel_drm_buffer
*buf
= intel_drm_buffer(buffer
);
73 drm_intel_bo
*bo
= intel_bo(buffer
);
82 ret
= drm_intel_gem_bo_map_gtt(bo
);
84 ret
= drm_intel_bo_map(bo
, write
);
86 buf
->ptr
= bo
->virtual;
98 intel_drm_buffer_unmap(struct intel_winsys
*iws
,
99 struct intel_buffer
*buffer
)
101 struct intel_drm_buffer
*buf
= intel_drm_buffer(buffer
);
103 if (--buf
->map_count
)
107 drm_intel_gem_bo_unmap_gtt(intel_bo(buffer
));
109 drm_intel_bo_unmap(intel_bo(buffer
));
113 intel_drm_buffer_destroy(struct intel_winsys
*iws
,
114 struct intel_buffer
*buffer
)
116 drm_intel_bo_unreference(intel_bo(buffer
));
119 intel_drm_buffer(buffer
)->magic
= 0;
120 intel_drm_buffer(buffer
)->bo
= NULL
;
127 intel_drm_winsys_init_buffer_functions(struct intel_drm_winsys
*idws
)
129 idws
->base
.buffer_create
= intel_drm_buffer_create
;
130 idws
->base
.buffer_set_fence_reg
= intel_drm_buffer_set_fence_reg
;
131 idws
->base
.buffer_map
= intel_drm_buffer_map
;
132 idws
->base
.buffer_unmap
= intel_drm_buffer_unmap
;
133 idws
->base
.buffer_destroy
= intel_drm_buffer_destroy
;