From: Ville Syrjala <ville.syrjala@linux.intel.com>
To: igt-dev@lists.freedesktop.org
Subject: [PATCH i-g-t 5/6] lib/rendercopy: Always setup clear color for TGL
Date: Tue, 25 Jun 2024 20:40:31 +0300 [thread overview]
Message-ID: <20240625174032.10398-6-ville.syrjala@linux.intel.com> (raw)
In-Reply-To: <20240625174032.10398-1-ville.syrjala@linux.intel.com>
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
TGL apparently automagically converts regular output to fast
clears when the output matches the configured clear color.
And if we don't enable the clear color packet at all then we
just get some rainbow gibberish on all black parts of the
output.
To avoid always set up the clear color packet when using
using a non-clear color modifier. We'll just stick a bunch
of NaNs into the clear value so it'll never match any
legitimate output, and thus automagic fast clear should not
happen.
TODO: Hide this better inside rendercopy_gen9.c without
requring extra allocation in the FB BO
TODO: Figure out if other platforms need this sort stuff
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
lib/igt_fb.c | 24 ++++++++++++++++++++++++
lib/intel_bufops.h | 1 +
lib/rendercopy_gen9.c | 14 +++++++++++---
3 files changed, 36 insertions(+), 3 deletions(-)
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 9d7808ba8312..857ffb6547a3 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -963,6 +963,16 @@ void igt_calc_fb_size(struct igt_fb *fb)
size += calc_plane_size(fb, plane);
}
+ /*
+ * We always need a clear color on TGL, make some extra
+ * room for one it if it's not explicit in the modifier.
+ *
+ * TODO: probably better to allocate this as part of the
+ * batch instead so the fb size doesn't need to change...
+ */
+ if (fb->modifier == I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS)
+ size = ALIGN(size + 64, 64);
+
if (is_xe_device(fb->fd))
size = ALIGN(size, xe_get_default_alignment(fb->fd));
@@ -2661,6 +2671,20 @@ igt_fb_create_intel_buf(int fd, struct buf_ops *bops,
if (fb->modifier == I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC)
buf->cc.offset = fb->offsets[1];
+ /*
+ * TGL appears to do automagic fast clear when rendering
+ * black and the clear color isn't specified, or when the
+ * output matches the specified clear color. Force a
+ * non-sensical clear color to prevent it from doing this
+ * when using a non-clear color modifier.
+ *
+ * TODO: figure out if other platforms are affected...
+ */
+ if (fb->modifier == I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS) {
+ buf->cc.disable = true;
+ buf->cc.offset = fb->size - 64;
+ }
+
return buf;
}
diff --git a/lib/intel_bufops.h b/lib/intel_bufops.h
index 84e71d41a2c2..06e72ba4ba93 100644
--- a/lib/intel_bufops.h
+++ b/lib/intel_bufops.h
@@ -38,6 +38,7 @@ struct intel_buf {
} ccs[2];
struct {
uint32_t offset;
+ bool disable;
} cc;
struct {
uint64_t offset;
diff --git a/lib/rendercopy_gen9.c b/lib/rendercopy_gen9.c
index 9b2d1ff688de..04ec7ec99d9a 100644
--- a/lib/rendercopy_gen9.c
+++ b/lib/rendercopy_gen9.c
@@ -1130,15 +1130,23 @@ void _gen9_render_op(struct intel_bb *ibb,
gen12_emit_aux_pgtable_state(ibb, aux_pgtable_state, true);
- if (fast_clear) {
+ if (fast_clear || dst->cc.disable) {
for (int i = 0; i < 4; i++) {
intel_bb_out(ibb, MI_STORE_DWORD_IMM_GEN4);
intel_bb_emit_reloc(ibb, dst->handle,
I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
dst->cc.offset + i*sizeof(float),
dst->addr.offset);
- intel_bb_out(ibb, *(uint32_t*)&clear_color[i]);
- }
+ if (fast_clear) {
+ intel_bb_out(ibb, *(uint32_t*)&clear_color[i]);
+ } else {
+ /*
+ * Emit NaN so it'll match nothing and thus prevent
+ * TGL from doing its automagic fast clear tricks.
+ */
+ intel_bb_out(ibb, 0xffffffff);
+ }
+ }
}
--
2.44.2
next prev parent reply other threads:[~2024-06-25 17:40 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-25 17:40 [PATCH i-g-t 0/6] lib: igt_fb/rendercopy fixes/cleanups Ville Syrjala
2024-06-25 17:40 ` [PATCH i-g-t 1/6] lib/rendercopy: Add deltas to all surface relocs Ville Syrjala
2024-06-27 11:22 ` [PATCH i-g-t v2 " Ville Syrjala
2024-07-02 5:49 ` Zbigniew Kempczyński
2024-07-02 22:53 ` Ville Syrjälä
2024-06-25 17:40 ` [PATCH i-g-t 2/6] tests/kms_big_fb: Use igt_fb_create_intel_buf() Ville Syrjala
2024-07-02 5:57 ` Zbigniew Kempczyński
2024-06-25 17:40 ` [PATCH i-g-t 3/6] tests/kms_frontbuffer_tracking: Use igt_create_fb() Ville Syrjala
2024-06-25 17:40 ` [PATCH i-g-t 4/6] lib/igt_fb: Make igt_calc_fb_size() somewhat usable Ville Syrjala
2024-06-25 17:40 ` Ville Syrjala [this message]
2024-06-25 17:40 ` [PATCH i-g-t 6/6] lib/rendercopy: Enable clear color consistently Ville Syrjala
2024-07-02 17:20 ` Ville Syrjälä
2024-06-25 18:52 ` ✓ CI.xeBAT: success for lib: igt_fb/rendercopy fixes/cleanups Patchwork
2024-06-25 18:55 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-06-25 22:35 ` ✗ CI.xeFULL: " Patchwork
2024-06-26 11:22 ` ✗ Fi.CI.BAT: failure for lib: igt_fb/rendercopy fixes/cleanups (rev2) Patchwork
2024-06-26 11:41 ` ✓ CI.xeBAT: success " Patchwork
2024-06-26 15:24 ` ✗ CI.xeFULL: failure " Patchwork
2024-06-28 12:03 ` ✓ CI.xeBAT: success for lib: igt_fb/rendercopy fixes/cleanups (rev3) Patchwork
2024-06-28 12:11 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-06-28 13:33 ` ✓ CI.xeFULL: success " Patchwork
2024-06-29 13:53 ` ✓ CI.xeBAT: success for lib: igt_fb/rendercopy fixes/cleanups (rev4) Patchwork
2024-06-29 14:02 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-06-29 14:54 ` ✓ CI.xeFULL: success " Patchwork
2024-07-02 19:37 ` ✓ CI.xeBAT: success for lib: igt_fb/rendercopy fixes/cleanups (rev5) Patchwork
2024-07-02 19:46 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-07-02 20:36 ` ✓ CI.xeFULL: success " Patchwork
2024-07-03 12:30 ` ✓ Fi.CI.BAT: success for lib: igt_fb/rendercopy fixes/cleanups (rev6) Patchwork
2024-07-03 12:33 ` ✓ CI.xeBAT: " Patchwork
2024-07-03 14:40 ` ✓ CI.xeFULL: " Patchwork
2024-07-04 0:09 ` ✗ Fi.CI.IGT: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240625174032.10398-6-ville.syrjala@linux.intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=igt-dev@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox