diff options
author | Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> | 2021-01-12 11:32:45 -0500 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2021-01-13 15:17:32 +0000 |
commit | 7a6a5f3fe1532414ece15f227e89b0c39ba5a626 (patch) | |
tree | 1a0500dbb9e4f52a3fb16334fb668eba8d9752db /src | |
parent | afad13700a1b487bbe788a103a00ad9547b08e52 (diff) |
panfrost: Handle explicit primitive restart
Don't fall back. Passes piglit ./bin/primitive-restart on Bifrost.
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8447>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/panfrost/pan_context.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 2df59a8230d..03988f05d3f 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -330,6 +330,14 @@ panfrost_emit_primitive_size(struct panfrost_context *ctx, } } +static bool +panfrost_is_implicit_prim_restart(const struct pipe_draw_info *info) +{ + unsigned implicit_index = (1 << (info->index_size * 8)) - 1; + bool implicit = info->restart_index == implicit_index; + return info->primitive_restart && implicit; +} + static void panfrost_draw_emit_tiler(struct panfrost_batch *batch, const struct pipe_draw_info *info, @@ -369,8 +377,13 @@ panfrost_draw_emit_tiler(struct panfrost_batch *batch, else cfg.first_provoking_vertex = rast->flatshade_first; - if (info->primitive_restart) + if (panfrost_is_implicit_prim_restart(info)) { cfg.primitive_restart = MALI_PRIMITIVE_RESTART_IMPLICIT; + } else if (info->primitive_restart) { + cfg.primitive_restart = MALI_PRIMITIVE_RESTART_EXPLICIT; + cfg.primitive_restart_index = info->restart_index; + } + cfg.job_task_split = 6; if (info->index_size) { @@ -486,15 +499,6 @@ panfrost_draw_vbo( int mode = info->mode; - /* Fallback unsupported restart index */ - unsigned primitive_index = (1 << (info->index_size * 8)) - 1; - - if (info->primitive_restart && info->index_size - && info->restart_index != primitive_index) { - util_draw_vbo_without_prim_restart(pipe, info, indirect, &draws[0]); - return; - } - /* Fallback for unsupported modes */ assert(ctx->rasterizer != NULL); |