diff --git a/src/gallium/auxiliary/draw/draw_private.h b/src/gallium/auxiliary/draw/draw_private.h index d29fedd91f2..e6609ee9612 100644 --- a/src/gallium/auxiliary/draw/draw_private.h +++ b/src/gallium/auxiliary/draw/draw_private.h @@ -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]; diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c index b89831ca746..8ee8bd7f655 100644 --- a/src/gallium/auxiliary/draw/draw_pt.c +++ b/src/gallium/auxiliary/draw/draw_pt.c @@ -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) {