sp: Implement draw_elements_instanced().
This commit is contained in:
parent
5007e39f76
commit
bccdb239c7
|
@ -239,6 +239,7 @@ softpipe_create( struct pipe_screen *screen )
|
|||
softpipe->pipe.draw_elements = softpipe_draw_elements;
|
||||
softpipe->pipe.draw_range_elements = softpipe_draw_range_elements;
|
||||
softpipe->pipe.draw_arrays_instanced = softpipe_draw_arrays_instanced;
|
||||
softpipe->pipe.draw_elements_instanced = softpipe_draw_elements_instanced;
|
||||
|
||||
softpipe->pipe.clear = softpipe_clear;
|
||||
softpipe->pipe.flush = softpipe_flush;
|
||||
|
|
|
@ -192,6 +192,26 @@ softpipe_draw_arrays_instanced(struct pipe_context *pipe,
|
|||
unsigned count,
|
||||
unsigned startInstance,
|
||||
unsigned instanceCount)
|
||||
{
|
||||
return softpipe_draw_elements_instanced(pipe,
|
||||
NULL,
|
||||
0,
|
||||
mode,
|
||||
start,
|
||||
count,
|
||||
startInstance,
|
||||
instanceCount);
|
||||
}
|
||||
|
||||
boolean
|
||||
softpipe_draw_elements_instanced(struct pipe_context *pipe,
|
||||
struct pipe_buffer *indexBuffer,
|
||||
unsigned indexSize,
|
||||
unsigned mode,
|
||||
unsigned start,
|
||||
unsigned count,
|
||||
unsigned startInstance,
|
||||
unsigned instanceCount)
|
||||
{
|
||||
struct softpipe_context *sp = softpipe_context(pipe);
|
||||
struct draw_context *draw = sp->draw;
|
||||
|
@ -216,8 +236,26 @@ softpipe_draw_arrays_instanced(struct pipe_context *pipe,
|
|||
draw_set_mapped_vertex_buffer(draw, i, buf);
|
||||
}
|
||||
|
||||
draw_set_mapped_element_buffer_range(draw, 0, start,
|
||||
start + count - 1, NULL);
|
||||
/* Map index buffer, if present */
|
||||
if (indexBuffer) {
|
||||
void *mapped_indexes;
|
||||
|
||||
mapped_indexes = pipe_buffer_map(pipe->screen,
|
||||
indexBuffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_element_buffer_range(draw,
|
||||
indexSize,
|
||||
0,
|
||||
0xffffffff,
|
||||
mapped_indexes);
|
||||
} else {
|
||||
/* no index/element buffer */
|
||||
draw_set_mapped_element_buffer_range(draw,
|
||||
0,
|
||||
start,
|
||||
start + count - 1,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/* draw! */
|
||||
draw_arrays_instanced(draw, mode, start, count, startInstance, instanceCount);
|
||||
|
@ -227,6 +265,10 @@ softpipe_draw_arrays_instanced(struct pipe_context *pipe,
|
|||
draw_set_mapped_vertex_buffer(draw, i, NULL);
|
||||
pipe_buffer_unmap(pipe->screen, sp->vertex_buffer[i].buffer);
|
||||
}
|
||||
if (indexBuffer) {
|
||||
draw_set_mapped_element_buffer(draw, 0, NULL);
|
||||
pipe_buffer_unmap(pipe->screen, indexBuffer);
|
||||
}
|
||||
|
||||
/* Note: leave drawing surfaces mapped */
|
||||
softpipe_unmap_constant_buffers(sp);
|
||||
|
|
|
@ -197,6 +197,16 @@ softpipe_draw_arrays_instanced(struct pipe_context *pipe,
|
|||
unsigned startInstance,
|
||||
unsigned instanceCount);
|
||||
|
||||
boolean
|
||||
softpipe_draw_elements_instanced(struct pipe_context *pipe,
|
||||
struct pipe_buffer *indexBuffer,
|
||||
unsigned indexSize,
|
||||
unsigned mode,
|
||||
unsigned start,
|
||||
unsigned count,
|
||||
unsigned startInstance,
|
||||
unsigned instanceCount);
|
||||
|
||||
void
|
||||
softpipe_map_transfers(struct softpipe_context *sp);
|
||||
|
||||
|
|
Loading…
Reference in New Issue