mesa,gallium: rework of draw interfaces and multi draw support in gallium, touches all drivers
This MR is a prerequisite for unification of draw interfaces between core Mesa and Gallium. (using
pipe_draw_info in core Mesa)
It's also a massive redesign of
draw_vbo to support multi draws and pass indirect draw info differently. It's also a cleanup of core Mesa draw code.
Core Mesa Changes:
Driver.DrawTransformFeedbackto get this out of Driver.Draw
unsigned restart_indexinto Driver.Draw (for display lists to disable it trivially and to match gallium)
- Many cleanups
void draw_vbo(struct pipe_context *ctx, struct pipe_draw_info *info, struct pipe_draw_indirect_info *indirect, struct pipe_draw_start_count *draws, unsigned num_draws);
bool pipe_draw_info::increment_draw_idto choose between glMultiDraw behavior and internal multi draw behavior
PIPE_CAP_MULTI_DRAWfor direct multi draws
- Small improvements to
radeonsi receives full direct multi draw support.
Note that gallium multi draws are not generated by OpenGL yet. That will be enabled by the next MR after this.
Gallium multi draws don't support the following (this may be addressed in a future MR, but it's not certain):
- different base vertex per draw
- different primitive type per draw
- arbitrary draw ID per draw (not just constant or incrementing)
- specification of line stipple reset state per draw (same as