From: "Grzegorzek, Dominik" <dominik.grzegorzek@intel.com>
To: "igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>,
"Hajda, Andrzej" <andrzej.hajda@intel.com>
Cc: "Kempczynski, Zbigniew" <zbigniew.kempczynski@intel.com>,
"Mun, Gwan-gyeong" <gwan-gyeong.mun@intel.com>,
"Manszewski, Christoph" <christoph.manszewski@intel.com>,
"kamil.konieczny@linux.intel.com"
<kamil.konieczny@linux.intel.com>
Subject: Re: [PATCH v3 4/4] lib/gpgpu_shader: add support for Xe3 platforms
Date: Fri, 22 Nov 2024 14:11:28 +0000 [thread overview]
Message-ID: <f52bb270341789ee54eee040c7783719d7990ed8.camel@intel.com> (raw)
In-Reply-To: <20241121-gpgpu_send_rework-v3-4-0b6aa48ab006@intel.com>
On Thu, 2024-11-21 at 18:12 +0100, Andrzej Hajda wrote:
> Xe3 platforms disallow indirect load/store addressing. Surface descriptor
> must be passed in 2DBlock payload. Use for it inline data passed from
> thread dispatcher.
>
> Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com>
> ---
> lib/gpgpu_shader.c | 20 +++++++++++++-------
> lib/iga64_generated_codes.c | 13 ++++++++-----
> lib/iga64_macros.h | 37 +++++++++++++++++++++++++++++++++----
> 3 files changed, 54 insertions(+), 16 deletions(-)
>
> diff --git a/lib/gpgpu_shader.c b/lib/gpgpu_shader.c
> index 518423158880..27e8be6b37e2 100644
> --- a/lib/gpgpu_shader.c
> +++ b/lib/gpgpu_shader.c
> @@ -210,6 +210,17 @@ __xehp_gpgpu_execfunc(struct intel_bb *ibb,
> engine | I915_EXEC_NO_RELOC, false);
> }
>
> +static void gpgpu_alloc_gpu_addr(int fd, struct intel_buf *target)
> +{
> + uint64_t ahnd;
> +
> + ahnd = intel_allocator_open_full(fd, 0, 0, 0, INTEL_ALLOCATOR_SIMPLE,
> + ALLOC_STRATEGY_LOW_TO_HIGH, 0);
> + target->addr.offset = intel_allocator_alloc(ahnd, target->handle,
> + target->surface[0].size, 0);
> + intel_allocator_close(ahnd);
> +}
> +
> /**
> * gpgpu_shader_exec:
> * @ibb: pointer to initialized intel_bb
> @@ -231,17 +242,12 @@ void gpgpu_shader_exec(struct intel_bb *ibb,
> struct gpgpu_shader *sip,
> uint64_t ring, bool explicit_engine)
> {
> - uint64_t ahnd;
> -
> igt_require(shdr->gen_ver >= SUPPORTED_GEN_VER);
> igt_assert(ibb->size >= PAGE_SIZE);
> igt_assert(ibb->ptr == ibb->batch);
>
> - ahnd = intel_allocator_open_full(ibb->fd, 0, 0, 0, INTEL_ALLOCATOR_SIMPLE,
> - ALLOC_STRATEGY_LOW_TO_HIGH, 0);
> - target->addr.offset = intel_allocator_alloc(ahnd, target->handle,
> - target->surface[0].size, 0);
> - intel_allocator_close(ahnd);
> + if (target->addr.offset == INTEL_BUF_INVALID_ADDRESS)
> + gpgpu_alloc_gpu_addr(ibb->fd, target);
You could define gpgpu_alloc_gpu_addr in a previous patch.
>
> if (shdr->gen_ver >= 1250)
> __xehp_gpgpu_execfunc(ibb, target, x_dim, y_dim, shdr, sip,
> diff --git a/lib/iga64_generated_codes.c b/lib/iga64_generated_codes.c
> index 04015b0b6d29..a12135e7dbfd 100644
> --- a/lib/iga64_generated_codes.c
> +++ b/lib/iga64_generated_codes.c
> @@ -3,7 +3,7 @@
>
> #include "gpgpu_shader.h"
>
> -#define MD5_SUM_IGA64_ASMS da66be3cf9bec819a61429de75943011
> +#define MD5_SUM_IGA64_ASMS 7b1db60d1de46cf35666f2a7f51e8fc2
>
> struct iga64_template const iga64_code_gpgpu_fill[] = {
> { .gen_ver = 2000, .size = 44, .code = (const uint32_t []) {
> @@ -80,10 +80,11 @@ struct iga64_template const iga64_code_gpgpu_fill[] = {
> };
>
> struct iga64_template const iga64_code_end_system_routine_step_if_eq[] = {
> - { .gen_ver = 2000, .size = 44, .code = (const uint32_t []) {
> + { .gen_ver = 2000, .size = 48, .code = (const uint32_t []) {
> 0x80000966, 0x80018220, 0x02008000, 0x00008000,
> 0x80000965, 0x80118220, 0x02008010, 0xc0ded000,
> 0x800c0961, 0x1e054220, 0x00000000, 0x00000000,
> + 0x80000061, 0x1e554220, 0x00000000, 0x00000000,
> 0x80000061, 0x1e654220, 0x00000000, 0xc0ded000,
> 0x80000061, 0x1e754220, 0x00000000, 0x00000003,
> 0x80032031, 0x1f0c0000, 0xd0061e8c, 0x04000000,
> @@ -484,13 +485,14 @@ struct iga64_template const iga64_code_media_block_write_aip[] = {
> };
>
> struct iga64_template const iga64_code_common_target_write[] = {
> - { .gen_ver = 2000, .size = 48, .code = (const uint32_t []) {
> + { .gen_ver = 2000, .size = 52, .code = (const uint32_t []) {
> 0x80100061, 0x1f054220, 0x00000000, 0x00000000,
> 0x80000061, 0x1f054220, 0x00000000, 0xc0ded001,
> 0x80000061, 0x1f154220, 0x00000000, 0xc0ded002,
> 0x80000061, 0x1f254220, 0x00000000, 0xc0ded003,
> 0x80000061, 0x1f354220, 0x00000000, 0xc0ded004,
> 0x800c0061, 0x1e054220, 0x00000000, 0x00000000,
> + 0x80000061, 0x1e554220, 0x00000000, 0x00000000,
> 0x80000061, 0x1e654220, 0x00000000, 0xc0ded000,
> 0x80000061, 0x1e754220, 0x00000000, 0x0000000f,
> 0x80032031, 0x00000000, 0xd00e1e94, 0x04000000,
> @@ -612,14 +614,15 @@ struct iga64_template const iga64_code_clear_r40[] = {
> };
>
> struct iga64_template const iga64_code_jump_dw_neq[] = {
> - { .gen_ver = 2000, .size = 32, .code = (const uint32_t []) {
> + { .gen_ver = 2000, .size = 36, .code = (const uint32_t []) {
> 0x800c0061, 0x1e054220, 0x00000000, 0x00000000,
> + 0x80000061, 0x1e554220, 0x00000000, 0x00000000,
> 0x80000061, 0x1e654220, 0x00000000, 0xc0ded000,
> 0x80000061, 0x1e754220, 0x00000000, 0x00000003,
> 0x80032031, 0x1f0c0000, 0xd0061e8c, 0x04000000,
> 0x80000061, 0x30014220, 0x00000000, 0x00000000,
> 0x80008070, 0x00018220, 0x22001f04, 0xc0ded001,
> - 0x84000020, 0x00004000, 0x00000000, 0xffffffa0,
> + 0x84000020, 0x00004000, 0x00000000, 0xffffff90,
> 0x80000901, 0x00010000, 0x00000000, 0x00000000,
> }},
> { .gen_ver = 1270, .size = 40, .code = (const uint32_t []) {
> diff --git a/lib/iga64_macros.h b/lib/iga64_macros.h
> index 40b6338928e1..f82785610207 100644
> --- a/lib/iga64_macros.h
> +++ b/lib/iga64_macros.h
> @@ -21,6 +21,13 @@
> #define R0_TGIDY r0.6<0;1,0>:ud
> #define R0_FFTID r0.5<0;1,0>:ud
>
> +/* Inline data from COMPUTE_WALKER*, Bspec: 47203, 73584
> + * Filled by __xe*_gpgpu_execfunc.
> + */
> +#define R1_TGT_ADDRESS r1.0<0;1,0>:uq
> +#define R1_TGT_WIDTH r1.2<0;1,0>:ud
> +#define R1_TGT_HEIGHT r1.3<0;1,0>:ud
> +
> #define SET_SHARED_MEDIA_BLOCK_MSG_HDR(dst, y, width) \
> (W) mov (8) dst.0<1>:ud 0x0:ud ;\
> (W) mov (1) dst.1<1>:ud y ;\
> @@ -35,28 +42,50 @@
> (W) mov (1) dst.2<1>:ud (width - 1):ud ;\
> (W) mov (1) dst.4<1>:ud R0_FFTID
>
> +#if GEN_VER < 3000
> +#define SET_SURFACE_DESC(dst) \
> +(W) mov (8) dst.0<1>:ud 0x0:ud
> +#else
> +#define SET_SURFACE_DESC(dst) \
> +(W) mov (1) dst.0<1>:uq R1_TGT_ADDRESS ;\
> +(W) add (1) dst.2<1>:ud R1_TGT_WIDTH -1:d ;\
> +(W) add (1) dst.3<1>:ud R1_TGT_HEIGHT -1:d ;\
> +(W) add (1) dst.4<1>:ud R1_TGT_WIDTH -1:d
> +#endif
> +
> #define SET_SHARED_MEDIA_A2DBLOCK_PAYLOAD(dst, y, width) \
> -(W) mov (8) dst.0<1>:ud 0x0:ud ;\
> -(W) mov (1) dst.6<1>:ud y ;\
> + SET_SURFACE_DESC(dst) ;\
> +(W) mov (1) dst.5<1>:ud 0x0:ud ;\
> +(W) mov (1) dst.6<1>:ud y ;\
> (W) mov (1) dst.7<1>:ud (width - 1):ud
>
> -#define SET_THREAD_MEDIA_A2DBLOCK_PAYLOAD(dst, x, y, width) \
> -(W) mov (8) dst.0<1>:ud 0x0:ud ;\
> +#define SET_THREAD_MEDIA_A2DBLOCK_PAYLOAD(dst, x, y, width) \
> + SET_SURFACE_DESC(dst) ;\
> (W) shl (1) dst.5<1>:ud R0_TGIDX 0x2:ud ;\
> (W) add (1) dst.5<1>:ud dst.5<0;1,0>:ud x:ud ;\
> (W) add (1) dst.6<1>:ud R0_TGIDY y ;\
> (W) mov (1) dst.7<1>:ud (width - 1):ud ;\
>
> #if GEN_VER < 2000
> +
> #define SET_SHARED_SPACE_ADDR(dst, y, width) SET_SHARED_MEDIA_BLOCK_MSG_HDR(dst, y, width)
> #define SET_THREAD_SPACE_ADDR(dst, x, y, width) SET_THREAD_MEDIA_BLOCK_MSG_HDR(dst, x, y, width)
> #define LOAD_SPACE_DW(dst, src) send.dc1 (1) dst src src1_null 0x0 0x2190000
> #define STORE_SPACE_DW(dst, src) send.dc1 (1) null dst null 0x0 0x40A8000
> +
> #else
> +
> #define SET_SHARED_SPACE_ADDR(dst, y, width) SET_SHARED_MEDIA_A2DBLOCK_PAYLOAD(dst, y, width)
> #define SET_THREAD_SPACE_ADDR(dst, x, y, width) SET_THREAD_MEDIA_A2DBLOCK_PAYLOAD(dst, x, y, width)
> +
> +#if GEN_VER < 3000
> #define LOAD_SPACE_DW(dst, src) send.tgm (1) dst src null:0 0x0 0x62100003
> #define STORE_SPACE_DW(dst, src) send.tgm (1) null dst null:0 0x0 0x64000007
> +#else
> +#define LOAD_SPACE_DW(dst, src) send.ugm (1) dst src null:0 0x0 0x2120003
> +#define STORE_SPACE_DW(dst, src) send.ugm (1) null dst src:1 0x0 0x2020007
> +#endif
> +
> #endif
>
> #endif
>
next prev parent reply other threads:[~2024-11-22 14:11 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-21 17:12 [PATCH v3 0/4] lib/gpgpu_shader: simplify load/store shaders and add Xe3 support Andrzej Hajda
2024-11-21 17:12 ` [PATCH v3 1/4] scripts/generate_iga64_codes: add iga64_macros.h to checksum calculation Andrzej Hajda
2024-11-21 17:12 ` [PATCH v3 2/4] lib/gpgpu_shader: simplify load/store shaders Andrzej Hajda
2024-11-22 14:05 ` Grzegorzek, Dominik
2024-11-22 14:22 ` Hajda, Andrzej
2024-11-22 14:28 ` Grzegorzek, Dominik
2024-11-21 17:12 ` [PATCH v3 3/4] lib/gpgpu_shader: pass surface desription to shaders via inline data Andrzej Hajda
2024-11-22 14:27 ` Grzegorzek, Dominik
2024-11-21 17:12 ` [PATCH v3 4/4] lib/gpgpu_shader: add support for Xe3 platforms Andrzej Hajda
2024-11-22 14:11 ` Grzegorzek, Dominik [this message]
2024-11-22 14:24 ` Hajda, Andrzej
2024-11-21 22:40 ` ✓ Xe.CI.BAT: success for lib/gpgpu_shader: simplify load/store shaders and add Xe3 support Patchwork
2024-11-21 22:46 ` ✓ i915.CI.BAT: " Patchwork
2024-11-22 12:34 ` ✗ Xe.CI.Full: failure " Patchwork
2024-11-24 13:14 ` ✗ i915.CI.Full: " 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=f52bb270341789ee54eee040c7783719d7990ed8.camel@intel.com \
--to=dominik.grzegorzek@intel.com \
--cc=andrzej.hajda@intel.com \
--cc=christoph.manszewski@intel.com \
--cc=gwan-gyeong.mun@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=kamil.konieczny@linux.intel.com \
--cc=zbigniew.kempczynski@intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.