Exemple #1
0
void si_translate_index_buffer(struct si_context *sctx,
			       struct pipe_index_buffer *ib,
			       unsigned count)
{
	struct pipe_resource *out_buffer = NULL;
	unsigned out_offset;
	void *ptr;

	switch (ib->index_size) {
	case 1:
		u_upload_alloc(sctx->b.uploader, 0, count * 2,
			       &out_offset, &out_buffer, &ptr);

		util_shorten_ubyte_elts_to_userptr(
				&sctx->b.b, ib, 0, ib->offset, count, ptr);

		pipe_resource_reference(&ib->buffer, NULL);
		ib->buffer = out_buffer;
		ib->offset = out_offset;
		ib->index_size = 2;
		break;
	}
}
Exemple #2
0
void r600_translate_index_buffer(struct r600_pipe_context *r600,
				 struct pipe_index_buffer *ib,
				 unsigned count)
{
	struct pipe_resource *out_buffer = NULL;
	unsigned out_offset;
	void *ptr;
	boolean flushed;

	switch (ib->index_size) {
	case 1:
		u_upload_alloc(r600->vbuf_mgr->uploader, 0, count * 2,
			       &out_offset, &out_buffer, &flushed, &ptr);

		util_shorten_ubyte_elts_to_userptr(
				&r600->context, ib->buffer, 0, ib->offset, count, ptr);

		pipe_resource_reference(&ib->buffer, NULL);
		ib->buffer = out_buffer;
		ib->offset = out_offset;
		ib->index_size = 2;
		break;
	}
}