draw: add view_mask rendering support

This loops the draws per-view above the instance rendering

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9399>
This commit is contained in:
Dave Airlie 2021-03-04 13:56:52 +10:00 committed by Marge Bot
parent b10b55f3d3
commit 03cbb7b104
2 changed files with 9 additions and 2 deletions

View File

@ -198,6 +198,7 @@ struct draw_context
unsigned min_index;
unsigned max_index;
unsigned drawid;
unsigned viewid;
/** vertex arrays */
struct draw_vertex_buffer vbuffer[PIPE_MAX_ATTRIBS];

View File

@ -540,7 +540,7 @@ draw_vbo(struct draw_context *draw,
draw->pt.user.max_index = info->index_bounds_valid ? info->max_index : ~0;
draw->pt.user.eltSize = info->index_size ? draw->pt.user.eltSizeIB : 0;
draw->pt.user.drawid = info->drawid;
draw->pt.user.viewid = 0;
draw->pt.vertices_per_patch = info->vertices_per_patch;
if (0)
@ -604,7 +604,13 @@ draw_vbo(struct draw_context *draw,
* the min_index/max_index hints given by gallium frontends.
*/
draw_instances(draw, info, draws, count);
if (info->view_mask) {
u_foreach_bit(i, info->view_mask) {
draw->pt.user.viewid = i;
draw_instances(draw, info, draws, count);
}
} else
draw_instances(draw, info, draws, count);
/* If requested emit the pipeline statistics for this run */
if (draw->collect_statistics) {