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 assert(I915_TILING_NONE
== INTEL_TILE_NONE
);
62 assert(I915_TILING_X
== INTEL_TILE_X
);
63 assert(I915_TILING_Y
== INTEL_TILE_Y
);
65 return drm_intel_bo_set_tiling(intel_bo(buffer
), &tile
, stride
);
69 intel_drm_buffer_map(struct intel_winsys
*iws
,
70 struct intel_buffer
*buffer
,
73 struct intel_drm_buffer
*buf
= intel_drm_buffer(buffer
);
74 drm_intel_bo
*bo
= intel_bo(buffer
);
83 ret
= drm_intel_gem_bo_map_gtt(bo
);
85 ret
= drm_intel_bo_map(bo
, write
);
87 buf
->ptr
= bo
->virtual;
99 intel_drm_buffer_unmap(struct intel_winsys
*iws
,
100 struct intel_buffer
*buffer
)
102 struct intel_drm_buffer
*buf
= intel_drm_buffer(buffer
);
104 if (--buf
->map_count
)
108 drm_intel_gem_bo_unmap_gtt(intel_bo(buffer
));
110 drm_intel_bo_unmap(intel_bo(buffer
));
114 intel_drm_buffer_destroy(struct intel_winsys
*iws
,
115 struct intel_buffer
*buffer
)
117 drm_intel_bo_unreference(intel_bo(buffer
));
120 intel_drm_buffer(buffer
)->magic
= 0;
121 intel_drm_buffer(buffer
)->bo
= NULL
;
128 intel_drm_winsys_init_buffer_functions(struct intel_drm_winsys
*idws
)
130 idws
->base
.buffer_create
= intel_drm_buffer_create
;
131 idws
->base
.buffer_set_fence_reg
= intel_drm_buffer_set_fence_reg
;
132 idws
->base
.buffer_map
= intel_drm_buffer_map
;
133 idws
->base
.buffer_unmap
= intel_drm_buffer_unmap
;
134 idws
->base
.buffer_destroy
= intel_drm_buffer_destroy
;