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