[igt-dev] [PATCH 07/10] lib/media_fill/tgl: Implement media_fillfunc for TGL

Lucas De Marchi
2019-07-15T21:51:45Z

From: Katarzyna Dec <katarzyna.dec@intel.com>

Adding gen12p1_media_fillfunc to have media_fill running on TGL.
Media shader was generated using IGA (Intel Graphics Assembler)
based on binary found in lib/media_fill_gen9.c to match the
changes in TGL HW. Main change was made in SEND instructions
and adding SWSB dependencies.

Cc: Antonio Argenziano <antonio.argenziano@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Signed-off-by: Katarzyna Dec <katarzyna.dec@intel.com>
Signed-off-by: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
.../shaders/media/gen12p1_media_kernel.asm | 13 ++++++++++
lib/intel_batchbuffer.c | 4 ++-
lib/media_fill.c | 25 +++++++++++++++++++
lib/media_fill.h | 7 ++++++
4 files changed, 48 insertions(+), 1 deletion(-)
create mode 100644 lib/i915/shaders/media/gen12p1_media_kernel.asm

diff --git a/lib/i915/shaders/media/gen12p1_media_kernel.asm b/lib/i915/shaders/media/gen12p1_media_kernel.asm
new file mode 100644
index 00000000..5be229b2
--- /dev/null
+++ b/lib/i915/shaders/media/gen12p1_media_kernel.asm
@@ -0,0 +1,13 @@
+L0:
+ mov (4|M0) r1.0<1>:ub r1.0<0;1,0>:ub
+ mov (8|M0) r4.0<1>:ud r0.0<8;8,1>:ud
+ mov (8|M0) r4.0<1>:ud r2.0<2;2,1>:ud
+ mov (1|M0) r4.2<1>:ud 0xF000F:ud
+ mov (16|M0) r5.0<1>:ud r1.0<0;1,0>:ud {@4}
+ mov (16|M0) r7.0<1>:ud r1.0<0;1,0>:ud {@5}
+ mov (16|M0) r9.0<1>:ud r1.0<0;1,0>:ud {@6}
+ mov (16|M0) r11.0<1>:ud r1.0<0;1,0>:ud {@7}
+ send.dc1 (16|M0) null r4 null 0x10000000 0x120A8000 {@1, $0} // wr:9h+0, rd:0, Media Block Write msc:0, to #0
+ mov (8|M0) r112.0<1>:ud r0.0<8;8,1>:ud
+ send.ts (16|M0) null r112 null 0x10000000 0x2000010 {EOT, @1} // wr:1+0, rd:0, fc: 0x10
+L176:
diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
index 7fac25b8..ed5e92b8 100644
--- a/lib/intel_batchbuffer.c
+++ b/lib/intel_batchbuffer.c
@@ -861,7 +861,9 @@ igt_fillfunc_t igt_get_media_fillfunc(int devid)
{
igt_fillfunc_t fill = NULL;

- if (IS_GEN9(devid) || IS_GEN10(devid) || IS_GEN11(devid))
+ if (IS_TIGERLAKE(devid))
+ fill = gen12p1_media_fillfunc;
+ else if (IS_GEN9(devid) || IS_GEN10(devid) || IS_GEN11(devid))
fill = gen9_media_fillfunc;
else if (IS_GEN8(devid))
fill = gen8_media_fillfunc;
diff --git a/lib/media_fill.c b/lib/media_fill.c
index 03b5e71e..1a356cba 100644
--- a/lib/media_fill.c
+++ b/lib/media_fill.c
@@ -101,6 +101,20 @@ static const uint32_t gen11_media_vme_kernel[][4] = {
{ 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
};

+static const uint32_t gen12p1_media_kernel[][4] = {
+ { 0x00020061, 0x01050000, 0x00000104, 0x00000000 },
+ { 0x00030061, 0x04050220, 0x00460005, 0x00000000 },
+ { 0x00030061, 0x04050220, 0x00220205, 0x00000000 },
+ { 0x00000061, 0x04454220, 0x00000000, 0x000f000f },
+ { 0x00040461, 0x05050220, 0x00000104, 0x00000000 },
+ { 0x00040561, 0x07050220, 0x00000104, 0x00000000 },
+ { 0x00040661, 0x09050220, 0x00000104, 0x00000000 },
+ { 0x00040761, 0x0b050220, 0x00000104, 0x00000000 },
+ { 0x00049031, 0x00000000, 0xc000044c, 0x12a00000 },
+ { 0x00030061, 0x70050220, 0x00460005, 0x00000000 },
+ { 0x00040131, 0x00000004, 0x7020700c, 0x10000000 },
+};
+
/*
* This sets up the media pipeline,
*
@@ -355,3 +369,14 @@ gen11_media_vme_func(struct intel_batchbuffer *batch,
gen11_media_vme_kernel,
sizeof(gen11_media_vme_kernel));
}
+
+void
+gen12p1_media_fillfunc(struct intel_batchbuffer *batch,
+ const struct igt_buf *dst,
+ unsigned int x, unsigned int y,
+ unsigned int width, unsigned int height,
+ uint8_t color)
+{
+ __gen9_media_fillfunc(batch, dst, x, y, width, height, color,
+ gen12p1_media_kernel, sizeof(gen12p1_media_kernel));
+}
diff --git a/lib/media_fill.h b/lib/media_fill.h
index 1d5c5fa8..a29c4043 100644
--- a/lib/media_fill.h
+++ b/lib/media_fill.h
@@ -55,4 +55,11 @@ gen11_media_vme_func(struct intel_batchbuffer *batch,
unsigned int width, unsigned int height,
const struct igt_buf *dst);

+void
+gen12p1_media_fillfunc(struct intel_batchbuffer *batch,
+ const struct igt_buf *dst,
+ unsigned int x, unsigned int y,
+ unsigned int width, unsigned int height,
+ uint8_t color);
+
#endif /* RENDE_MEDIA_FILL_H */