1f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie/*
2f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * Copyright 2010 Red Hat Inc.
3f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie *
4f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * Permission is hereby granted, free of charge, to any person obtaining a
5f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * copy of this software and associated documentation files (the "Software"),
6f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * to deal in the Software without restriction, including without limitation
7f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * on the rights to use, copy, modify, merge, publish, distribute, sub
8f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * license, and/or sell copies of the Software, and to permit persons to whom
9f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * the Software is furnished to do so, subject to the following conditions:
10f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie *
11f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * The above copyright notice and this permission notice (including the next
12f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * paragraph) shall be included in all copies or substantial portions of the
13f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * Software.
14f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie *
15f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * USE OR OTHER DEALINGS IN THE SOFTWARE.
22f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie *
23f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie * Authors: Dave Airlie <airlied@redhat.com>
24f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie */
2573a40d1383071fe25599509d218f4c40d049988dMarek Olšák
26330b6c85c961b32f704ce8ec7dbf8cb7fc0b80a8Marek Olšák#include "r600_pipe.h"
278fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch#include "util/u_index_modify.h"
2873a40d1383071fe25599509d218f4c40d049988dMarek Olšák#include "util/u_upload_mgr.h"
29f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie
30f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie
31e4340c1908a6a3b09e1a15d5195f6da7d00494d0Marek Olšákvoid r600_translate_index_buffer(struct r600_context *r600,
32344039d81d3cc079dd73b3b703ff613c344904e0Marek Olšák				 struct pipe_index_buffer *ib,
33344039d81d3cc079dd73b3b703ff613c344904e0Marek Olšák				 unsigned count)
34f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie{
3577900843b42d9672c6b10f49c177a172041f6a8dMarek Olšák	struct pipe_resource *out_buffer = NULL;
3677900843b42d9672c6b10f49c177a172041f6a8dMarek Olšák	unsigned out_offset;
3777900843b42d9672c6b10f49c177a172041f6a8dMarek Olšák	void *ptr;
3877900843b42d9672c6b10f49c177a172041f6a8dMarek Olšák
39344039d81d3cc079dd73b3b703ff613c344904e0Marek Olšák	switch (ib->index_size) {
40f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie	case 1:
41428855eea3e99d94474df6df0cb8dfc4a8819702Marek Olšák		u_upload_alloc(r600->uploader, 0, count * 2,
42f94d390213308d4aca1515c75acc6865ebb45796Marek Olšák			       &out_offset, &out_buffer, &ptr);
4377900843b42d9672c6b10f49c177a172041f6a8dMarek Olšák
4477900843b42d9672c6b10f49c177a172041f6a8dMarek Olšák		util_shorten_ubyte_elts_to_userptr(
45bf469f4edc60bd1c5fd770cb231b8d5ab801427fMarek Olšák				&r600->context, ib, 0, ib->offset, count, ptr);
4677900843b42d9672c6b10f49c177a172041f6a8dMarek Olšák
47344039d81d3cc079dd73b3b703ff613c344904e0Marek Olšák		pipe_resource_reference(&ib->buffer, NULL);
48344039d81d3cc079dd73b3b703ff613c344904e0Marek Olšák		ib->buffer = out_buffer;
49344039d81d3cc079dd73b3b703ff613c344904e0Marek Olšák		ib->offset = out_offset;
50344039d81d3cc079dd73b3b703ff613c344904e0Marek Olšák		ib->index_size = 2;
51f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie		break;
52f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie	}
53f39e6c9c816b603a4ed8fd8cda8569b7e13c1f68Dave Airlie}
54