diff options
-rw-r--r-- | lib/i915/shaders/media/gen12_media_kernel.asm | 13 | ||||
-rw-r--r-- | lib/intel_batchbuffer.c | 4 | ||||
-rw-r--r-- | lib/media_fill.c | 25 | ||||
-rw-r--r-- | lib/media_fill.h | 7 |
4 files changed, 48 insertions, 1 deletions
diff --git a/lib/i915/shaders/media/gen12_media_kernel.asm b/lib/i915/shaders/media/gen12_media_kernel.asm new file mode 100644 index 00000000..5be229b2 --- /dev/null +++ b/lib/i915/shaders/media/gen12_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 4740355d..3828ba75 100644 --- a/lib/intel_batchbuffer.c +++ b/lib/intel_batchbuffer.c @@ -863,7 +863,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_GEN12(devid)) + fill = gen12_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..b7d7f68c 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 gen12_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 +gen12_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, + gen12_media_kernel, sizeof(gen12_media_kernel)); +} diff --git a/lib/media_fill.h b/lib/media_fill.h index 1d5c5fa8..a001482e 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 +gen12_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 */ |