diff --git a/src/panfrost/lib/pan_desc.c b/src/panfrost/lib/pan_desc.c index 3e18726f348..bac5186b171 100644 --- a/src/panfrost/lib/pan_desc.c +++ b/src/panfrost/lib/pan_desc.c @@ -823,7 +823,8 @@ GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx, * layer_idx only takes 8-bits, we might use the extra 56-bits we have * in frame_argument to pass other information to the fragment shader at * some point. */ - cfg.internal_layer_index = layer_idx; + assert(layer_idx >= tiler_ctx->valhall.layer_offset); + cfg.internal_layer_index = layer_idx - tiler_ctx->valhall.layer_offset; cfg.frame_argument = layer_idx; #endif } diff --git a/src/panfrost/lib/pan_desc.h b/src/panfrost/lib/pan_desc.h index 895fce48889..175939b24e7 100644 --- a/src/panfrost/lib/pan_desc.h +++ b/src/panfrost/lib/pan_desc.h @@ -72,6 +72,11 @@ struct pan_tiler_context { union { struct { mali_ptr desc; + /* A tiler descriptor can only handle a limited amount of layers. + * If the number of layers is bigger than this, several tiler + * descriptors will be issued, each with a different layer_offset. + */ + uint8_t layer_offset; } valhall; struct { mali_ptr desc;