Logo Search packages:      
Sourcecode: xserver-xorg-video-ati version File versions  Download package

radeon_vbo.h

#ifndef RADEON_VBO_H
#define RADEON_VBO_H

extern void r600_vb_no_space(ScrnInfoPtr pScrn, int vert_size);
extern void radeon_vbo_init_lists(ScrnInfoPtr pScrn);
extern void radeon_vbo_free_lists(ScrnInfoPtr pScrn);
extern void radeon_vbo_flush_bos(ScrnInfoPtr pScrn);
extern void radeon_vbo_get(ScrnInfoPtr pScrn);
extern void radeon_vbo_put(ScrnInfoPtr pScrn);

static inline void radeon_vbo_check(ScrnInfoPtr pScrn, int vert_size)
{
    RADEONInfoPtr info = RADEONPTR(pScrn);
    struct radeon_accel_state *accel_state = info->accel_state;

    if ((accel_state->vb_offset + (3 * vert_size)) > accel_state->vb_total) {
      r600_vb_no_space(pScrn, vert_size);
    }
}

static inline void *
radeon_vbo_space(ScrnInfoPtr pScrn, int vert_size)
{
    RADEONInfoPtr info = RADEONPTR(pScrn);
    struct radeon_accel_state *accel_state = info->accel_state;
    void *vb;
    
    /* we've ran out of space in the vertex buffer - need to get a
       new one */
    if ((accel_state->vb_offset + (3 * vert_size)) > accel_state->vb_total) {
      r600_vb_no_space(pScrn, vert_size);
    }
    accel_state->vb_op_vert_size = vert_size;
#if defined(XF86DRM_MODE)
    if (info->cs) {
      int ret;
      struct radeon_bo *bo = accel_state->vb_bo;

      if (!bo->ptr) {
          ret = radeon_bo_map(bo, 1);
          if (ret) {
            FatalError("Failed to map vb %d\n", ret);
            return NULL;
          }
      }
      vb = (pointer)((char *)bo->ptr + accel_state->vb_offset);
    } else
#endif
      vb = (pointer)((char *)accel_state->vb_ptr + accel_state->vb_offset);
    return vb;
}

static inline void radeon_vbo_commit(ScrnInfoPtr pScrn)
{
    RADEONInfoPtr info = RADEONPTR(pScrn);
    struct radeon_accel_state *accel_state = info->accel_state;

    accel_state->vb_offset += 3 * accel_state->vb_op_vert_size;
}

#endif

Generated by  Doxygen 1.6.0   Back to index