From 00d4a7c7fd9900fb685059034bcd74c73c6738a8 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Thu, 7 Dec 2023 15:36:38 +0100 Subject: [PATCH] panfrost: Pass the sample position array through pan_fb_info Part of the attempt to make pan_desc.{c,h} panfrost_device-agnostic. Let the caller pass the sample position array through pan_fb_info instead of extracting it from panfrost_device. Signed-off-by: Boris Brezillon Reviewed-by: Constantine Shablya Reviewed-by: Erik Faye-Lund Part-of: --- src/gallium/drivers/panfrost/pan_cmdstream.c | 7 ++++++- src/panfrost/lib/pan_desc.c | 3 +-- src/panfrost/lib/pan_desc.h | 3 +++ src/panfrost/vulkan/panvk_vX_cmd_buffer.c | 6 +++++- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index e801c8a5477..6971127c338 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -2484,7 +2484,7 @@ emit_tls(struct panfrost_batch *batch) } static void -emit_fbd(struct panfrost_batch *batch, const struct pan_fb_info *fb) +emit_fbd(struct panfrost_batch *batch, struct pan_fb_info *fb) { struct panfrost_device *dev = pan_device(batch->ctx->base.screen); struct panfrost_bo *tls_bo = @@ -2500,6 +2500,11 @@ emit_fbd(struct panfrost_batch *batch, const struct pan_fb_info *fb) }, }; +#if PAN_ARCH >= 6 + fb->sample_positions = + panfrost_sample_positions(dev, pan_sample_pattern(fb->nr_samples)); +#endif + batch->framebuffer.gpu |= GENX(pan_emit_fbd)( dev, fb, &tls, &batch->tiler_ctx, batch->framebuffer.cpu); } diff --git a/src/panfrost/lib/pan_desc.c b/src/panfrost/lib/pan_desc.c index 0c4d6435305..4a5b0e447dc 100644 --- a/src/panfrost/lib/pan_desc.c +++ b/src/panfrost/lib/pan_desc.c @@ -708,8 +708,7 @@ GENX(pan_emit_fbd)(const struct panfrost_device *dev, #if PAN_ARCH >= 6 bool force_clean_write = pan_force_clean_write(fb, tile_size); - cfg.sample_locations = - panfrost_sample_positions(dev, pan_sample_pattern(fb->nr_samples)); + cfg.sample_locations = fb->sample_positions; cfg.pre_frame_0 = pan_fix_frame_shader_mode(fb->bifrost.pre_post.modes[0], force_clean_write); cfg.pre_frame_1 = pan_fix_frame_shader_mode(fb->bifrost.pre_post.modes[1], diff --git a/src/panfrost/lib/pan_desc.h b/src/panfrost/lib/pan_desc.h index 574594e77af..ca08f703f14 100644 --- a/src/panfrost/lib/pan_desc.h +++ b/src/panfrost/lib/pan_desc.h @@ -128,6 +128,9 @@ struct pan_fb_info { /* Optimal tile buffer size. */ unsigned tile_buf_budget; + /* Sample position array. */ + mali_ptr sample_positions; + /* Only used on Valhall */ bool sprite_coord_origin; bool first_provoking_vertex; diff --git a/src/panfrost/vulkan/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/panvk_vX_cmd_buffer.c index c26790c68f8..7241c0a4a28 100644 --- a/src/panfrost/vulkan/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/panvk_vX_cmd_buffer.c @@ -72,7 +72,7 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf) if (!batch) return; - const struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info; + struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info; assert(batch); @@ -132,6 +132,10 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf) GENX(pan_emit_tls)(&batch->tlsinfo, batch->tls.cpu); if (batch->fb.desc.cpu) { + fbinfo->sample_positions = + panfrost_sample_positions(&cmdbuf->device->physical_device->pdev, + pan_sample_pattern(fbinfo->nr_samples)); + batch->fb.desc.gpu |= GENX(pan_emit_fbd)(pdev, &cmdbuf->state.fb.info, &batch->tlsinfo, &batch->tiler.ctx, batch->fb.desc.cpu);