#include "pipe/p_context.h"
#include "pipe/internal/p_winsys_screen.h"
#include "pipe/p_inlines.h"
+#include "util/u_prim.h"
#include "sp_context.h"
#include "sp_state.h"
size);
}
+
static void
softpipe_unmap_constant_buffers(struct softpipe_context *sp)
{
}
-static unsigned reduced_prim[PIPE_PRIM_POLYGON + 1] = {
- PIPE_PRIM_POINTS,
- PIPE_PRIM_LINES,
- PIPE_PRIM_LINES,
- PIPE_PRIM_LINES,
- PIPE_PRIM_TRIANGLES,
- PIPE_PRIM_TRIANGLES,
- PIPE_PRIM_TRIANGLES,
- PIPE_PRIM_TRIANGLES,
- PIPE_PRIM_TRIANGLES,
- PIPE_PRIM_TRIANGLES
-};
-
-
boolean
softpipe_draw_arrays(struct pipe_context *pipe, unsigned mode,
unsigned start, unsigned count)
}
-
/**
* Draw vertex arrays, with optional indexing.
* Basically, map the vertex buffers (and drawing surfaces), then hand off
* the drawing to the 'draw' module.
- *
- * XXX should the element buffer be specified/bound with a separate function?
*/
-
boolean
softpipe_draw_range_elements(struct pipe_context *pipe,
struct pipe_buffer *indexBuffer,
struct draw_context *draw = sp->draw;
unsigned i;
- sp->reduced_api_prim = reduced_prim[mode];
+ sp->reduced_api_prim = u_reduced_prim(mode);
if (sp->dirty)
softpipe_update_derived( sp );
- softpipe_map_surfaces(sp);
+ softpipe_map_transfers(sp);
softpipe_map_constant_buffers(sp);
/*
PIPE_BUFFER_USAGE_CPU_READ);
draw_set_mapped_vertex_buffer(draw, i, buf);
}
+
/* Map index buffer, if present */
if (indexBuffer) {
void *mapped_indexes
}
else {
/* no index/element buffer */
- draw_set_mapped_element_buffer_range(draw, 0, start, start + count - 1, NULL);
+ draw_set_mapped_element_buffer_range(draw, 0, start,
+ start + count - 1, NULL);
}
-
/* draw! */
draw_arrays(draw, mode, start, count);
/* Note: leave drawing surfaces mapped */
softpipe_unmap_constant_buffers(sp);
+ sp->dirty_render_cache = TRUE;
+
return TRUE;
}
+
boolean
softpipe_draw_elements(struct pipe_context *pipe,
struct pipe_buffer *indexBuffer,
}
-
void
softpipe_set_edgeflags(struct pipe_context *pipe, const unsigned *edgeflags)
{
struct softpipe_context *sp = softpipe_context(pipe);
draw_set_edgeflags(sp->draw, edgeflags);
}
-