#ifndef RADEON_VBO_H #define RADEON_VBO_H extern void radeon_vb_no_space(struct radeon *radeon, struct radeon_vbo_object *vbo, int vert_size); extern void radeon_vbo_init_lists(struct radeon *radeon); extern void radeon_vbo_free_lists(struct radeon *radeon); extern void radeon_vbo_flush_bos(struct radeon *radeon); extern void radeon_vbo_get(struct radeon *radeon, struct radeon_vbo_object *vbo); extern void radeon_vbo_put(struct radeon *radeon, struct radeon_vbo_object *vbo); static inline void radeon_vbo_check(struct radeon *radeon, struct radeon_vbo_object *vbo, int vert_size) { if ((vbo->vb_offset + (vbo->verts_per_op * vert_size)) > vbo->vb_total) { radeon_vb_no_space(radeon, vbo, vert_size); } } static inline void * radeon_vbo_space(struct radeon *radeon, struct radeon_vbo_object *vbo, int vert_size) { void *vb; /* we've ran out of space in the vertex buffer - need to get a new one */ radeon_vbo_check(radeon, vbo, vert_size); vbo->vb_op_vert_size = vert_size; vb = (void*)((char *)vbo->vb_bo->ptr + vbo->vb_offset); return vb; } static inline void radeon_vbo_commit(struct radeon *radeon, struct radeon_vbo_object *vbo) { vbo->vb_offset += vbo->verts_per_op * vbo->vb_op_vert_size; } #endif