44
44
unsigned index_size,
45
45
u_generate_func generate,
46
struct pipe_buffer **out_buf )
46
struct pipe_resource **out_buf )
48
struct pipe_screen *screen = hwtnl->svga->pipe.screen;
48
struct pipe_context *pipe = &hwtnl->svga->pipe;
49
struct pipe_transfer *transfer;
49
50
unsigned size = index_size * nr;
50
struct pipe_buffer *dst = NULL;
51
struct pipe_resource *dst = NULL;
51
52
void *dst_map = NULL;
53
dst = screen->buffer_create( screen, 32,
54
PIPE_BUFFER_USAGE_INDEX |
55
PIPE_BUFFER_USAGE_CPU_WRITE |
56
PIPE_BUFFER_USAGE_GPU_READ,
54
dst = pipe_buffer_create( pipe->screen,
55
PIPE_BIND_INDEX_BUFFER,
61
dst_map = pipe_buffer_map( screen, dst, PIPE_BUFFER_USAGE_CPU_WRITE );
60
dst_map = pipe_buffer_map( pipe, dst, PIPE_TRANSFER_WRITE,
62
62
if (dst_map == NULL)
68
pipe_buffer_unmap( screen, dst );
68
pipe_buffer_unmap( pipe, dst, transfer );
75
screen->buffer_unmap( screen, dst );
75
pipe_buffer_unmap( pipe, dst, transfer );
78
screen->buffer_destroy( dst );
78
pipe->screen->resource_destroy( pipe->screen, dst );
80
80
return PIPE_ERROR_OUT_OF_MEMORY;
98
98
u_generate_func generate,
99
struct pipe_buffer **out_buf )
99
struct pipe_resource **out_buf )
101
101
enum pipe_error ret = PIPE_OK;
108
108
if (compare(hwtnl->index_cache[prim][i].gen_nr, gen_nr, gen_type))
110
pipe_buffer_reference( out_buf,
110
pipe_resource_reference( out_buf,
111
111
hwtnl->index_cache[prim][i].buffer );
172
172
hwtnl->index_cache[prim][i].generate = generate;
173
173
hwtnl->index_cache[prim][i].gen_nr = gen_nr;
174
pipe_buffer_reference( &hwtnl->index_cache[prim][i].buffer,
174
pipe_resource_reference( &hwtnl->index_cache[prim][i].buffer,
259
259
return simple_draw_arrays( hwtnl, gen_prim, start, count );
262
struct pipe_buffer *gen_buf = NULL;
262
struct pipe_resource *gen_buf = NULL;
264
264
/* Need to draw as indexed primitive.
265
265
* Potentially need to run the gen func to build an index buffer.
277
277
ret = svga_hwtnl_simple_draw_range_elements( hwtnl,
291
pipe_buffer_reference( &gen_buf, NULL );
292
pipe_resource_reference( &gen_buf, NULL );