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_elements = softpipe_draw_elements;
|
||||||
softpipe->pipe.draw_range_elements = softpipe_draw_range_elements;
|
softpipe->pipe.draw_range_elements = softpipe_draw_range_elements;
|
||||||
softpipe->pipe.draw_arrays_instanced = softpipe_draw_arrays_instanced;
|
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.clear = softpipe_clear;
|
||||||
softpipe->pipe.flush = softpipe_flush;
|
softpipe->pipe.flush = softpipe_flush;
|
||||||
|
|
|
@ -192,6 +192,26 @@ softpipe_draw_arrays_instanced(struct pipe_context *pipe,
|
||||||
unsigned count,
|
unsigned count,
|
||||||
unsigned startInstance,
|
unsigned startInstance,
|
||||||
unsigned instanceCount)
|
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 softpipe_context *sp = softpipe_context(pipe);
|
||||||
struct draw_context *draw = sp->draw;
|
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_vertex_buffer(draw, i, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_set_mapped_element_buffer_range(draw, 0, start,
|
/* Map index buffer, if present */
|
||||||
start + count - 1, NULL);
|
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! */
|
||||||
draw_arrays_instanced(draw, mode, start, count, startInstance, instanceCount);
|
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);
|
draw_set_mapped_vertex_buffer(draw, i, NULL);
|
||||||
pipe_buffer_unmap(pipe->screen, sp->vertex_buffer[i].buffer);
|
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 */
|
/* Note: leave drawing surfaces mapped */
|
||||||
softpipe_unmap_constant_buffers(sp);
|
softpipe_unmap_constant_buffers(sp);
|
||||||
|
|
|
@ -197,6 +197,16 @@ softpipe_draw_arrays_instanced(struct pipe_context *pipe,
|
||||||
unsigned startInstance,
|
unsigned startInstance,
|
||||||
unsigned instanceCount);
|
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
|
void
|
||||||
softpipe_map_transfers(struct softpipe_context *sp);
|
softpipe_map_transfers(struct softpipe_context *sp);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue