Module: Mesa Branch: main Commit: a5ba2e20457bb52b04b379f701dc8783dfdcfd4a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a5ba2e20457bb52b04b379f701dc8783dfdcfd4a
Author: Boris Brezillon <boris.brezil...@collabora.com> Date: Tue May 11 12:21:52 2021 +0200 pan/bi: Add support for gl_DrawID We simply pass the drawid as a sysval. Signed-off-by: Boris Brezillon <boris.brezil...@collabora.com> Acked-by: Alyssa Rosenzweig <aly...@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10417> --- src/gallium/drivers/panfrost/pan_cmdstream.c | 3 +++ src/gallium/drivers/panfrost/pan_context.c | 2 ++ src/gallium/drivers/panfrost/pan_context.h | 1 + src/panfrost/bifrost/bifrost_compile.c | 4 ++++ src/panfrost/util/pan_ir.h | 1 + src/panfrost/util/pan_sysval.c | 2 ++ 6 files changed, 13 insertions(+) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 930d37e7bfe..b7ed0442248 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -1092,6 +1092,9 @@ panfrost_upload_sysvals(struct panfrost_batch *batch, uniforms[i].u[1] = batch->ctx->base_vertex; uniforms[i].u[2] = batch->ctx->base_instance; break; + case PAN_SYSVAL_DRAWID: + uniforms[i].u[0] = batch->ctx->drawid; + break; default: assert(0); } diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index fe06b5adab4..04e9452ed4b 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -453,6 +453,7 @@ panfrost_direct_draw(struct panfrost_context *ctx, ctx->base_vertex = info->index_size ? draw->index_bias : 0; ctx->base_instance = info->start_instance; ctx->active_prim = info->mode; + ctx->drawid = drawid_offset; struct panfrost_ptr tiler = pan_is_bifrost(device) ? @@ -565,6 +566,7 @@ panfrost_indirect_draw(struct panfrost_context *ctx, assert(ctx->draw_modes & (1 << info->mode)); ctx->active_prim = info->mode; + ctx->drawid = drawid_offset; ctx->indirect_draw = true; struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx); diff --git a/src/gallium/drivers/panfrost/pan_context.h b/src/gallium/drivers/panfrost/pan_context.h index b825b13c677..b7eb0b0d8ad 100644 --- a/src/gallium/drivers/panfrost/pan_context.h +++ b/src/gallium/drivers/panfrost/pan_context.h @@ -134,6 +134,7 @@ struct panfrost_context { struct panfrost_query *occlusion_query; bool indirect_draw; + unsigned drawid; unsigned vertex_count; unsigned instance_count; unsigned offset_start; diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c index 98fd1d34f3e..d73987d9168 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -1166,6 +1166,10 @@ bi_emit_intrinsic(bi_builder *b, nir_intrinsic_instr *instr) bi_load_sysval_nir(b, instr, 1, 8); break; + case nir_intrinsic_load_draw_id: + bi_load_sysval_nir(b, instr, 1, 0); + break; + case nir_intrinsic_get_ssbo_size: bi_load_sysval_nir(b, instr, 1, 8); break; diff --git a/src/panfrost/util/pan_ir.h b/src/panfrost/util/pan_ir.h index 1d7df3cca68..dc8bb95ea90 100644 --- a/src/panfrost/util/pan_ir.h +++ b/src/panfrost/util/pan_ir.h @@ -57,6 +57,7 @@ enum { PAN_SYSVAL_MULTISAMPLED = 12, PAN_SYSVAL_RT_CONVERSION = 13, PAN_SYSVAL_VERTEX_INSTANCE_OFFSETS = 14, + PAN_SYSVAL_DRAWID = 15, }; #define PAN_TXS_SYSVAL_ID(texidx, dim, is_array) \ diff --git a/src/panfrost/util/pan_sysval.c b/src/panfrost/util/pan_sysval.c index 128183a1b0a..fd261a89d41 100644 --- a/src/panfrost/util/pan_sysval.c +++ b/src/panfrost/util/pan_sysval.c @@ -82,6 +82,8 @@ panfrost_nir_sysval_for_intrinsic(nir_intrinsic_instr *instr) case nir_intrinsic_load_base_vertex: case nir_intrinsic_load_base_instance: return PAN_SYSVAL_VERTEX_INSTANCE_OFFSETS; + case nir_intrinsic_load_draw_id: + return PAN_SYSVAL_DRAWID; case nir_intrinsic_load_ssbo_address: case nir_intrinsic_get_ssbo_size: return panfrost_sysval_for_ssbo(instr); _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit