mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 11:40:10 +01:00
pan/bi: Add support for gl_DrawID
We simply pass the drawid as a sysval. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Acked-by: Alyssa Rosenzweig <alyssa@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10417>
This commit is contained in:
parent
7cc4c8c5e5
commit
a5ba2e2045
6 changed files with 13 additions and 0 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) \
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue