pan/genxml: Define RUN_FRAGMENT staging registers in an enum
This makes it more clear what is what. It will also reduce the pain of migration on newer gen. Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Benjamin Lee <benjamin.lee@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33736>
This commit is contained in:
committed by
Marge Bot
parent
c8882d83fd
commit
bbecaacc3f
@@ -142,16 +142,20 @@ csf_oom_handler_init(struct panfrost_context *ctx)
|
||||
cs_load32_to(&b, counter, tiler_oom_ctx, FIELD_OFFSET(counter));
|
||||
cs_wait_slot(&b, 0, false);
|
||||
cs_if(&b, MALI_CS_CONDITION_GREATER, counter) {
|
||||
cs_load64_to(&b, cs_reg64(&b, 40), tiler_oom_ctx, FBD_OFFSET(MIDDLE));
|
||||
cs_load64_to(&b, cs_reg64(&b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
tiler_oom_ctx, FBD_OFFSET(MIDDLE));
|
||||
}
|
||||
cs_else(&b) {
|
||||
cs_load64_to(&b, cs_reg64(&b, 40), tiler_oom_ctx, FBD_OFFSET(FIRST));
|
||||
cs_load64_to(&b, cs_reg64(&b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
tiler_oom_ctx, FBD_OFFSET(FIRST));
|
||||
}
|
||||
|
||||
cs_load32_to(&b, cs_reg32(&b, 42), tiler_oom_ctx, FIELD_OFFSET(bbox_min));
|
||||
cs_load32_to(&b, cs_reg32(&b, 43), tiler_oom_ctx, FIELD_OFFSET(bbox_max));
|
||||
cs_move64_to(&b, cs_reg64(&b, 44), 0);
|
||||
cs_move32_to(&b, cs_reg32(&b, 46), 0);
|
||||
cs_load32_to(&b, cs_reg32(&b, MALI_FRAGMENT_SR_BBOX_MIN), tiler_oom_ctx,
|
||||
FIELD_OFFSET(bbox_min));
|
||||
cs_load32_to(&b, cs_reg32(&b, MALI_FRAGMENT_SR_BBOX_MAX), tiler_oom_ctx,
|
||||
FIELD_OFFSET(bbox_max));
|
||||
cs_move64_to(&b, cs_reg64(&b, MALI_FRAGMENT_SR_TEM_POINTER), 0);
|
||||
cs_move32_to(&b, cs_reg32(&b, MALI_FRAGMENT_SR_TEM_ROW_STRIDE), 0);
|
||||
cs_wait_slot(&b, 0, false);
|
||||
|
||||
/* Run the fragment job and wait */
|
||||
@@ -809,12 +813,14 @@ GENX(csf_emit_fragment_job)(struct panfrost_batch *batch,
|
||||
}
|
||||
|
||||
/* Set up the fragment job */
|
||||
cs_move64_to(b, cs_reg64(b, 40), batch->framebuffer.gpu);
|
||||
cs_move32_to(b, cs_reg32(b, 42), (batch->miny << 16) | batch->minx);
|
||||
cs_move32_to(b, cs_reg32(b, 43),
|
||||
cs_move64_to(b, cs_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
batch->framebuffer.gpu);
|
||||
cs_move32_to(b, cs_reg32(b, MALI_FRAGMENT_SR_BBOX_MIN),
|
||||
(batch->miny << 16) | batch->minx);
|
||||
cs_move32_to(b, cs_reg32(b, MALI_FRAGMENT_SR_BBOX_MAX),
|
||||
((batch->maxy - 1) << 16) | (batch->maxx - 1));
|
||||
cs_move64_to(b, cs_reg64(b, 44), 0);
|
||||
cs_move32_to(b, cs_reg32(b, 46), 0);
|
||||
cs_move64_to(b, cs_reg64(b, MALI_FRAGMENT_SR_TEM_POINTER), 0);
|
||||
cs_move32_to(b, cs_reg32(b, MALI_FRAGMENT_SR_TEM_ROW_STRIDE), 0);
|
||||
|
||||
/* Use different framebuffer descriptor if incremental rendering was
|
||||
* triggered while tiling */
|
||||
@@ -823,7 +829,8 @@ GENX(csf_emit_fragment_job)(struct panfrost_batch *batch,
|
||||
cs_load32_to(b, counter, cs_reg64(b, TILER_OOM_CTX_REG), 0);
|
||||
cs_wait_slot(b, 0, false);
|
||||
cs_if(b, MALI_CS_CONDITION_GREATER, counter) {
|
||||
cs_move64_to(b, cs_reg64(b, 40), GET_FBD(oom_ctx, LAST).gpu);
|
||||
cs_move64_to(b, cs_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
GET_FBD(oom_ctx, LAST).gpu);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -770,11 +770,12 @@ pandecode_run_fragment(struct pandecode_context *ctx, FILE *fp,
|
||||
|
||||
ctx->indent++;
|
||||
|
||||
DUMP_CL(ctx, SCISSOR, &qctx->regs[42], "Scissor\n");
|
||||
DUMP_CL(ctx, SCISSOR, &qctx->regs[MALI_FRAGMENT_SR_BBOX_MIN], "Scissor\n");
|
||||
|
||||
/* TODO: Tile enable map */
|
||||
GENX(pandecode_fbd)
|
||||
(ctx, cs_get_u64(qctx, 40) & ~0x3full, true, qctx->gpu_id);
|
||||
(ctx, cs_get_u64(qctx, MALI_FRAGMENT_SR_FBD_POINTER) & ~0x3full, true,
|
||||
qctx->gpu_id);
|
||||
|
||||
ctx->indent--;
|
||||
}
|
||||
|
||||
@@ -907,6 +907,14 @@
|
||||
<value name="PRIMITIVE_SIZE" value="60"/>
|
||||
</enum>
|
||||
|
||||
<enum name="FRAGMENT SR">
|
||||
<value name="FBD_POINTER" value="40"/>
|
||||
<value name="BBOX_MIN" value="42"/>
|
||||
<value name="BBOX_MAX" value="43"/>
|
||||
<value name="TEM_POINTER" value="44"/>
|
||||
<value name="TEM_ROW_STRIDE" value="46"/>
|
||||
</enum>
|
||||
|
||||
<struct name="Attribute" size="8" align="32">
|
||||
<field name="Type" size="4" start="0:0" type="Descriptor Type" default="Attribute"/>
|
||||
<field name="Attribute type" size="4" start="0:4" type="Attribute Type"/>
|
||||
|
||||
@@ -1061,7 +1061,8 @@ get_fb_descs(struct panvk_cmd_buffer *cmdbuf)
|
||||
|
||||
if (copy_fbds) {
|
||||
struct cs_index cur_tiler = cs_sr_reg64(b, 38);
|
||||
struct cs_index dst_fbd_ptr = cs_sr_reg64(b, 40);
|
||||
struct cs_index dst_fbd_ptr =
|
||||
cs_sr_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER);
|
||||
struct cs_index layer_count = cs_sr_reg32(b, 47);
|
||||
struct cs_index src_fbd_ptr = cs_sr_reg64(b, 48);
|
||||
struct cs_index remaining_layers_in_td = cs_sr_reg32(b, 50);
|
||||
@@ -1144,7 +1145,8 @@ get_fb_descs(struct panvk_cmd_buffer *cmdbuf)
|
||||
}
|
||||
} else {
|
||||
cs_update_frag_ctx(b) {
|
||||
cs_move64_to(b, cs_sr_reg64(b, 40), fbds.gpu | fbd_flags);
|
||||
cs_move64_to(b, cs_sr_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
fbds.gpu | fbd_flags);
|
||||
cs_move64_to(b, cs_sr_reg64(b, 38), cmdbuf->state.gfx.render.tiler);
|
||||
}
|
||||
}
|
||||
@@ -2268,17 +2270,17 @@ setup_tiler_oom_ctx(struct panvk_cmd_buffer *cmdbuf)
|
||||
TILER_OOM_CTX_FIELD_OFFSET(counter));
|
||||
|
||||
struct cs_index fbd_first = cs_scratch_reg64(b, 2);
|
||||
cs_add64(b, fbd_first, cs_sr_reg64(b, 40),
|
||||
cs_add64(b, fbd_first, cs_sr_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
(1 + PANVK_IR_FIRST_PASS) * fbd_ir_pass_offset);
|
||||
cs_store64(b, fbd_first, cs_subqueue_ctx_reg(b),
|
||||
TILER_OOM_CTX_FBDPTR_OFFSET(FIRST));
|
||||
struct cs_index fbd_middle = cs_scratch_reg64(b, 4);
|
||||
cs_add64(b, fbd_middle, cs_sr_reg64(b, 40),
|
||||
cs_add64(b, fbd_middle, cs_sr_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
(1 + PANVK_IR_MIDDLE_PASS) * fbd_ir_pass_offset);
|
||||
cs_store64(b, fbd_middle, cs_subqueue_ctx_reg(b),
|
||||
TILER_OOM_CTX_FBDPTR_OFFSET(MIDDLE));
|
||||
struct cs_index fbd_last = cs_scratch_reg64(b, 6);
|
||||
cs_add64(b, fbd_last, cs_sr_reg64(b, 40),
|
||||
cs_add64(b, fbd_last, cs_sr_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
(1 + PANVK_IR_LAST_PASS) * fbd_ir_pass_offset);
|
||||
cs_store64(b, fbd_last, cs_subqueue_ctx_reg(b),
|
||||
TILER_OOM_CTX_FBDPTR_OFFSET(LAST));
|
||||
@@ -2382,7 +2384,8 @@ issue_fragment_jobs(struct panvk_cmd_buffer *cmdbuf)
|
||||
cs_wait_slot(b, SB_ID(LS), false);
|
||||
cs_if(b, MALI_CS_CONDITION_GREATER, counter)
|
||||
cs_update_frag_ctx(b)
|
||||
cs_add64(b, cs_sr_reg64(b, 40), cs_sr_reg64(b, 40),
|
||||
cs_add64(b, cs_sr_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
cs_sr_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
(1 + PANVK_IR_LAST_PASS) * fbd_ir_pass_offset);
|
||||
|
||||
/* Applications tend to forget to describe subpass dependencies, especially
|
||||
@@ -2408,7 +2411,8 @@ issue_fragment_jobs(struct panvk_cmd_buffer *cmdbuf)
|
||||
|
||||
cs_add32(b, layer_count, layer_count, -1);
|
||||
cs_update_frag_ctx(b)
|
||||
cs_add64(b, cs_sr_reg64(b, 40), cs_sr_reg64(b, 40), fbd_sz);
|
||||
cs_add64(b, cs_sr_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER),
|
||||
cs_sr_reg64(b, MALI_FRAGMENT_SR_FBD_POINTER), fbd_sz);
|
||||
}
|
||||
} else {
|
||||
cs_trace_run_fragment(b, tracing_ctx, cs_scratch_reg_tuple(b, 0, 4),
|
||||
|
||||
@@ -66,7 +66,7 @@ generate_tiler_oom_handler(struct cs_buffer handler_mem, bool has_zs_ext,
|
||||
|
||||
/* The tiler pointer is pre-filled. */
|
||||
struct cs_index tiler_ptr = cs_sr_reg64(&b, 38);
|
||||
struct cs_index fbd_ptr = cs_sr_reg64(&b, 40);
|
||||
struct cs_index fbd_ptr = cs_sr_reg64(&b, MALI_FRAGMENT_SR_FBD_POINTER);
|
||||
|
||||
/* Use different framebuffer descriptor depending on whether incremental
|
||||
* rendering has already been triggered */
|
||||
|
||||
Reference in New Issue
Block a user