1
2#ifndef RADEON_VBO_H
3#define RADEON_VBO_H
4
5extern void radeon_vb_no_space(ScrnInfoPtr pScrn, struct radeon_vbo_object *vbo, int vert_size);
6extern void radeon_vbo_init_lists(ScrnInfoPtr pScrn);
7extern void radeon_vbo_free_lists(ScrnInfoPtr pScrn);
8extern void radeon_vbo_flush_bos(ScrnInfoPtr pScrn);
9extern void radeon_vbo_get(ScrnInfoPtr pScrn, struct radeon_vbo_object *vbo);
10extern void radeon_vbo_put(ScrnInfoPtr pScrn, struct radeon_vbo_object *vbo);
11
12static inline void radeon_vbo_check(ScrnInfoPtr pScrn,
13				    struct radeon_vbo_object *vbo,
14				    int vert_size)
15{
16
17    if ((vbo->vb_offset + (vbo->verts_per_op * vert_size)) > vbo->vb_total) {
18	radeon_vb_no_space(pScrn, vbo, vert_size);
19    }
20}
21
22static inline void *
23radeon_vbo_space(ScrnInfoPtr pScrn,
24		 struct radeon_vbo_object *vbo,
25		 int vert_size)
26{
27#if defined(XF86DRM_MODE)
28    RADEONInfoPtr info = RADEONPTR(pScrn);
29#endif
30    void *vb;
31
32    /* we've ran out of space in the vertex buffer - need to get a
33       new one */
34    radeon_vbo_check(pScrn, vbo, vert_size);
35
36    vbo->vb_op_vert_size = vert_size;
37#if defined(XF86DRM_MODE)
38    if (info->cs)
39	vb = (pointer)((char *)vbo->vb_bo->ptr + vbo->vb_offset);
40    else
41#endif
42	vb = (pointer)((char *)vbo->vb_ptr + vbo->vb_offset);
43    return vb;
44}
45
46static inline void radeon_vbo_commit(ScrnInfoPtr pScrn,
47				     struct radeon_vbo_object *vbo)
48{
49
50    vbo->vb_offset += vbo->verts_per_op * vbo->vb_op_vert_size;
51}
52
53#endif
54