示例#1
0
static void emit_tex_vector( GLcontext *ctx,
			     struct radeon_dma_region *rvb,
			     char *data,
			     int size,
			     int stride,
			     int count )
{
   radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
   int emitsize;

   if (RADEON_DEBUG & DEBUG_VERTS)
      fprintf(stderr, "%s %d/%d\n", __FUNCTION__, count, size);

   assert (!rvb->buf);

   switch (size) {
   case 4: emitsize = 3; break;
   default: emitsize = 2; break;
   }


   if (stride == 0) {
      radeonAllocDmaRegion( rmesa, rvb, 4 * emitsize, 4 );
      count = 1;
      rvb->aos_start = GET_START(rvb);
      rvb->aos_stride = 0;
      rvb->aos_size = emitsize;
   }
   else {
      radeonAllocDmaRegion( rmesa, rvb, 4 * emitsize * count, 4 );
      rvb->aos_start = GET_START(rvb);
      rvb->aos_stride = emitsize;
      rvb->aos_size = emitsize;
   }


   /* Emit the data
    */
   switch (size) {
   case 1:
      emit_s0_vec( ctx, rvb, data, stride, count ); 
      break;
   case 2:
      emit_vec8( ctx, rvb, data, stride, count );
      break;
   case 3:
      emit_vec8( ctx, rvb, data, stride, count );
      break;
   case 4:
      emit_stq_vec( ctx, rvb, data, stride, count );
      break;
   default:
      assert(0);
      exit(1);
      break;
   }
}
示例#2
0
static void emit_vector( GLcontext *ctx,
                         struct r200_dma_region *rvb,
                         char *data,
                         int size,
                         int stride,
                         int count )
{
    r200ContextPtr rmesa = R200_CONTEXT(ctx);

    if (R200_DEBUG & DEBUG_VERTS)
        fprintf(stderr, "%s count %d size %d stride %d\n",
                __FUNCTION__, count, size, stride);

    assert (!rvb->buf);

    if (stride == 0) {
        r200AllocDmaRegion( rmesa, rvb, size * 4, 4 );
        count = 1;
        rvb->aos_start = GET_START(rvb);
        rvb->aos_stride = 0;
        rvb->aos_size = size;
    }
    else {
        r200AllocDmaRegion( rmesa, rvb, size * count * 4, 4 );	/* alignment? */
        rvb->aos_start = GET_START(rvb);
        rvb->aos_stride = size;
        rvb->aos_size = size;
    }

    /* Emit the data
     */
    switch (size) {
    case 1:
        emit_vec4( ctx, rvb, data, stride, count );
        break;
    case 2:
        emit_vec8( ctx, rvb, data, stride, count );
        break;
    case 3:
        emit_vec12( ctx, rvb, data, stride, count );
        break;
    case 4:
        emit_vec16( ctx, rvb, data, stride, count );
        break;
    default:
        assert(0);
        exit(1);
        break;
    }

}