1ad43ddacSmrg
2ad43ddacSmrg#ifndef RADEON_VBO_H
3ad43ddacSmrg#define RADEON_VBO_H
4ad43ddacSmrg
5921a55d8Smrgextern void radeon_vb_no_space(ScrnInfoPtr pScrn, struct radeon_vbo_object *vbo, int vert_size);
6ad43ddacSmrgextern void radeon_vbo_init_lists(ScrnInfoPtr pScrn);
7ad43ddacSmrgextern void radeon_vbo_free_lists(ScrnInfoPtr pScrn);
8ad43ddacSmrgextern void radeon_vbo_flush_bos(ScrnInfoPtr pScrn);
9921a55d8Smrgextern void radeon_vbo_get(ScrnInfoPtr pScrn, struct radeon_vbo_object *vbo);
10921a55d8Smrgextern void radeon_vbo_put(ScrnInfoPtr pScrn, struct radeon_vbo_object *vbo);
11ad43ddacSmrg
12921a55d8Smrgstatic inline void radeon_vbo_check(ScrnInfoPtr pScrn,
13921a55d8Smrg				    struct radeon_vbo_object *vbo,
14921a55d8Smrg				    int vert_size)
15ad43ddacSmrg{
16ad43ddacSmrg
17921a55d8Smrg    if ((vbo->vb_offset + (vbo->verts_per_op * vert_size)) > vbo->vb_total) {
18921a55d8Smrg	radeon_vb_no_space(pScrn, vbo, vert_size);
19ad43ddacSmrg    }
20ad43ddacSmrg}
21ad43ddacSmrg
22ad43ddacSmrgstatic inline void *
23921a55d8Smrgradeon_vbo_space(ScrnInfoPtr pScrn,
24921a55d8Smrg		 struct radeon_vbo_object *vbo,
25921a55d8Smrg		 int vert_size)
26ad43ddacSmrg{
2743df4709Smrg#if defined(XF86DRM_MODE)
2843df4709Smrg    RADEONInfoPtr info = RADEONPTR(pScrn);
2943df4709Smrg#endif
30ad43ddacSmrg    void *vb;
31921a55d8Smrg
32ad43ddacSmrg    /* we've ran out of space in the vertex buffer - need to get a
33ad43ddacSmrg       new one */
34921a55d8Smrg    radeon_vbo_check(pScrn, vbo, vert_size);
350974d292Smrg
36921a55d8Smrg    vbo->vb_op_vert_size = vert_size;
3743df4709Smrg#if defined(XF86DRM_MODE)
3843df4709Smrg    if (info->cs)
3943df4709Smrg	vb = (pointer)((char *)vbo->vb_bo->ptr + vbo->vb_offset);
4043df4709Smrg    else
4143df4709Smrg#endif
4243df4709Smrg	vb = (pointer)((char *)vbo->vb_ptr + vbo->vb_offset);
43ad43ddacSmrg    return vb;
44ad43ddacSmrg}
45ad43ddacSmrg
46921a55d8Smrgstatic inline void radeon_vbo_commit(ScrnInfoPtr pScrn,
47921a55d8Smrg				     struct radeon_vbo_object *vbo)
48ad43ddacSmrg{
49ad43ddacSmrg
50921a55d8Smrg    vbo->vb_offset += vbo->verts_per_op * vbo->vb_op_vert_size;
51ad43ddacSmrg}
52ad43ddacSmrg
53ad43ddacSmrg#endif
54