radeon_vbo.h revision ad43ddac
1ad43ddacSmrg 2ad43ddacSmrg#ifndef RADEON_VBO_H 3ad43ddacSmrg#define RADEON_VBO_H 4ad43ddacSmrg 5ad43ddacSmrgextern void r600_vb_no_space(ScrnInfoPtr pScrn, 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); 9ad43ddacSmrgextern void radeon_vbo_get(ScrnInfoPtr pScrn); 10ad43ddacSmrgextern void radeon_vbo_put(ScrnInfoPtr pScrn); 11ad43ddacSmrg 12ad43ddacSmrgstatic inline void radeon_vbo_check(ScrnInfoPtr pScrn, int vert_size) 13ad43ddacSmrg{ 14ad43ddacSmrg RADEONInfoPtr info = RADEONPTR(pScrn); 15ad43ddacSmrg struct radeon_accel_state *accel_state = info->accel_state; 16ad43ddacSmrg 17ad43ddacSmrg if ((accel_state->vb_offset + (3 * vert_size)) > accel_state->vb_total) { 18ad43ddacSmrg r600_vb_no_space(pScrn, vert_size); 19ad43ddacSmrg } 20ad43ddacSmrg} 21ad43ddacSmrg 22ad43ddacSmrgstatic inline void * 23ad43ddacSmrgradeon_vbo_space(ScrnInfoPtr pScrn, int vert_size) 24ad43ddacSmrg{ 25ad43ddacSmrg RADEONInfoPtr info = RADEONPTR(pScrn); 26ad43ddacSmrg struct radeon_accel_state *accel_state = info->accel_state; 27ad43ddacSmrg void *vb; 28ad43ddacSmrg 29ad43ddacSmrg /* we've ran out of space in the vertex buffer - need to get a 30ad43ddacSmrg new one */ 31ad43ddacSmrg if ((accel_state->vb_offset + (3 * vert_size)) > accel_state->vb_total) { 32ad43ddacSmrg r600_vb_no_space(pScrn, vert_size); 33ad43ddacSmrg } 34ad43ddacSmrg accel_state->vb_op_vert_size = vert_size; 35ad43ddacSmrg#if defined(XF86DRM_MODE) 36ad43ddacSmrg if (info->cs) { 37ad43ddacSmrg int ret; 38ad43ddacSmrg struct radeon_bo *bo = accel_state->vb_bo; 39ad43ddacSmrg 40ad43ddacSmrg if (!bo->ptr) { 41ad43ddacSmrg ret = radeon_bo_map(bo, 1); 42ad43ddacSmrg if (ret) { 43ad43ddacSmrg FatalError("Failed to map vb %d\n", ret); 44ad43ddacSmrg return NULL; 45ad43ddacSmrg } 46ad43ddacSmrg } 47ad43ddacSmrg vb = (pointer)((char *)bo->ptr + accel_state->vb_offset); 48ad43ddacSmrg } else 49ad43ddacSmrg#endif 50ad43ddacSmrg vb = (pointer)((char *)accel_state->vb_ptr + accel_state->vb_offset); 51ad43ddacSmrg return vb; 52ad43ddacSmrg} 53ad43ddacSmrg 54ad43ddacSmrgstatic inline void radeon_vbo_commit(ScrnInfoPtr pScrn) 55ad43ddacSmrg{ 56ad43ddacSmrg RADEONInfoPtr info = RADEONPTR(pScrn); 57ad43ddacSmrg struct radeon_accel_state *accel_state = info->accel_state; 58ad43ddacSmrg 59ad43ddacSmrg accel_state->vb_offset += 3 * accel_state->vb_op_vert_size; 60ad43ddacSmrg} 61ad43ddacSmrg 62ad43ddacSmrg#endif 63