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; } }
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; } }