public inbox for igt-dev@lists.freedesktop.org
 help / color / mirror / Atom feed
From: "Kalamarz, Lukasz" <lukasz.kalamarz@intel.com>
To: "Dec, Katarzyna" <katarzyna.dec@intel.com>,
	"igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>
Subject: Re: [igt-dev] [PATCH i-g-t 1/2] shaders: Add assembler instructions and update README for shaders
Date: Tue, 2 Oct 2018 13:57:57 +0000	[thread overview]
Message-ID: <1538488606.7230.3.camel@intel.com> (raw)
In-Reply-To: <20181002134933.20526-2-katarzyna.dec@intel.com>

On Tue, 2018-10-02 at 15:49 +0200, Katarzyna Dec wrote:
> We're not planning to work on assembler in igt anymore, since we can
> reuse an existing project (IGA) that will do this work for us. The
> only extra thing we need to do is convert the result binary to C-
> array,
> simple python script.
> 
> v2: Moved converter to single file. Fixed README for shaders.
> 
> Signed-off-by: Katarzyna Dec <katarzyna.dec@intel.com>
> Cc: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
> Cc: Petri Latvala <petri.latvala@intel.com>
> Cc: Kalamarz Lukasz <lukasz.kalamarz@intel.com>
> Cc: Antonio Argenziano <antonio.argenziano@intel.com>
> ---
>  shaders/README                    | 19 +++++++++++++++++++
>  shaders/converter.py              | 24 ++++++++++++++++++++++++
>  shaders/gpgpu/README              | 11 +++++++++++
>  shaders/gpgpu/gpgpu_fill_gen8.asm | 10 ++++++++++
>  shaders/gpgpu/gpgpu_fill_gen9.asm | 10 ++++++++++
>  shaders/media/README              |  9 +++++++++
>  shaders/media/media_fill_gen8.asm | 11 +++++++++++
>  shaders/ps/README                 |  8 ++++++++
>  shaders/ps/blit_gen8.asm          |  7 +++++++
>  shaders/ps/neg1_gen8.asm          |  9 +++++++++
>  10 files changed, 118 insertions(+)
>  create mode 100644 shaders/README
>  create mode 100644 shaders/converter.py
>  create mode 100644 shaders/gpgpu/gpgpu_fill_gen8.asm
>  create mode 100644 shaders/gpgpu/gpgpu_fill_gen9.asm
>  create mode 100644 shaders/media/media_fill_gen8.asm
>  create mode 100644 shaders/ps/blit_gen8.asm
>  create mode 100644 shaders/ps/neg1_gen8.asm
> 
> diff --git a/shaders/README b/shaders/README
> new file mode 100644
> index 00000000..3365a209
> --- /dev/null
> +++ b/shaders/README
> @@ -0,0 +1,19 @@
> +This directory is for shaders used in media_fill, gpgpu_fill,
> rendercopy
> +and media_spin libraries.
> +
> +Till Gen8 shaders were generated using intel-gen4asm script
> (implementation in
> +assembler/ directory). From Gen8 it is possible to use Intel
> Graphics Assembler
> +to generate binary from asm instructions.
> +https://github.com/intel/intel-graphics-compiler
> +    1. Clone IGC project
> +    2. Go to igc/visa/iga
> +    3. Build iga
> +        cmake . && make
> +
> +For maintaining compatibility with our tests there is a bin to hex
> converter
> +written in python:
> +    $>converter.py input_file > output_file
> +e.g.$>python converter.py gen9_iga_output > gen9_hex_array
> +
> +Instructions how to build media, gpgpu or ps shaders included in
> their
> +subdirectories.
> diff --git a/shaders/converter.py b/shaders/converter.py
> new file mode 100644
> index 00000000..a50ac96c
> --- /dev/null
> +++ b/shaders/converter.py
> @@ -0,0 +1,24 @@
> +#!/usr/bin/env python2
> +import struct
> +import sys
> +import argparse
> +
> +parser = argparse.ArgumentParser(description='Script for converting
> shaders in binary to hex.')
> +args = parser.parse_args()
> +
> +print "static const uint32_t kernel[][4] = {"
> +
> +with open(sys.argv[1], 'r') as f:
> +    fmt = '<LLLL'
> +    step = struct.calcsize(fmt)
> +    while True:
> +        buf = f.read(step)
> +        if not buf:
> +            break
> +        elif len(buf) < step:
> +            buf += '\x00' * (step - len(buf))
> +
> +        val = struct.unpack('<LLLL', buf)
> +        print "\t{{ 0x{:08x}, 0x{:08x}, 0x{:08x}, 0x{:08x}
> }},".format(*val)
> +
> +print "};"
> \ No newline at end of file

Please add newline

> diff --git a/shaders/gpgpu/README b/shaders/gpgpu/README
> index 3bf328ad..91aca7e8 100644
> --- a/shaders/gpgpu/README
> +++ b/shaders/gpgpu/README
> @@ -1,4 +1,15 @@
> +These files are here for reference only.
>  
>  Commands used to generate the shader on gen7
>  $> m4 gpgpu_fill.gxa > gpgpu_fill.gxm
>  $> intel-gen4asm -g 7 -o <output> gpgpu_fill.gxm
> +
> +From gen8 we can use Intel Graphics Assember to generate binary from
> asm
> +instructions
> +https://github.com/intel/intel-graphics-
> compiler/tree/master/visa/iga.

I don't think dot is necessary at the end of a link

> +
> +
> +How to get binary from .asm (e.g. when ISA instructions has
> changed):
> +        $> iga64 gpgpu_fill.asm -p=8 -a -o gpgpu_fill_gen8.bin
> +        $> Use converter from shaders/README to have hex array used
> in libs
> +        $> Copy output to proper lib
> diff --git a/shaders/gpgpu/gpgpu_fill_gen8.asm
> b/shaders/gpgpu/gpgpu_fill_gen8.asm
> new file mode 100644
> index 00000000..448e0256
> --- /dev/null
> +++ b/shaders/gpgpu/gpgpu_fill_gen8.asm
> @@ -0,0 +1,10 @@
> +         mov (4|M0)               r1.0<1>:ub    r1.0<0;1,0>:ub
> +         mul
> (1|M0)               r2.0<1>:ud    r0.1<0;1,0>:ud    0x10:ud
> +         mov (1|M0)               r2.1<1>:ud    r0.6<0;1,0>:ud
> +         mov (8|M0)               r4.0<1>:ud    r0.0<8;8,1>:ud
> +         mov (2|M0)               r4.0<1>:ud    r2.0<2;2,1>:ud
> +         mov (1|M0)               r4.2<1>:ud    0xF:ud
> +         mov (16|M0)   (eq)f0.0   r5.0<1>:ud    r1.0<0;1,0>:ud
> +         send
> (16|M0)             acc0.0:uw  r4:d  0xC       0x060A8000
> //  DP_DC1  wr:3h, rd:0, fc: 0x28000
> +         mov (8|M0)               r112.0<1>:ud  r0.0<8;8,1>:ud
> +         send
> (16|M0)             null:uw  r112:d  0x27      0x02000010 {EOT}
> //  SPAWNER  wr:1, rd:0, fc: 0x10
> diff --git a/shaders/gpgpu/gpgpu_fill_gen9.asm
> b/shaders/gpgpu/gpgpu_fill_gen9.asm
> new file mode 100644
> index 00000000..6f948935
> --- /dev/null
> +++ b/shaders/gpgpu/gpgpu_fill_gen9.asm
> @@ -0,0 +1,10 @@
> +         mov (4|M0)  r1.0<1>:ub    r1.0<0;1,0>:ub
> +         mul (1|M0)  r2.0<1>:ud    r0.1<0;1,0>:ud    0x10:ud
> +         mov (1|M0)  r2.1<1>:ud    r0.6<0;1,0>:ud
> +         mov (8|M0)  r4.0<1>:ud    r0.0<8;8,1>:ud
> +         mov (2|M0)  r4.0<1>:ud    r2.0<2;2,1>:ud
> +         mov (1|M0)  r4.2<1>:ud    0xF:ud
> +         mov (16|M0) r5.0<1>:ud    r1.0<0;1,0>:ud
> +         send (16|M0)  acc0.0:uw  r4:d  0xC       0x060A8000
> //  DP_DC1  wr:3h, rd:0, fc: 0x28000
> +         mov (8|M0)  r112.0<1>:ud  r0.0<8;8,1>:ud
> +         send (16|M0)  null:uw  r112:d  0x27      0x02000010 {EOT}
> //  SPAWNER  wr:1, rd:0, fc: 0x10
> diff --git a/shaders/media/README b/shaders/media/README
> index 9f296010..dff53bd0 100644
> --- a/shaders/media/README
> +++ b/shaders/media/README
> @@ -3,3 +3,12 @@ These files are here for reference only.
>  Commands used to generate the shader on gen8
>  $> m4 media_fill.gxa > media_fill.gxm
>  $> intel-gen4asm -g 8 -o <output> media_fill.gxm
> +
> +From gen8 we can use Intel Graphics Assember to generate binary from
> asm
> +instructions https://github.com/intel/intel-graphics-
> compiler/tree/master/visa/iga.

Same as above.

Everything else LGTM.
------
Lukasz

> +
> +How to get binary from .asm (e.g. when ISA instructions has
> changed):
> +        $> iga64 media_fill_gen8.asm -p=8 -a -o media_fill_gen8.bin
> +        $> Use converter from shaders/README to have hex array used
> in libs
> +        $> Copy output to proper lib
> +
> diff --git a/shaders/media/media_fill_gen8.asm
> b/shaders/media/media_fill_gen8.asm
> new file mode 100644
> index 00000000..4b6eb84b
> --- /dev/null
> +++ b/shaders/media/media_fill_gen8.asm
> @@ -0,0 +1,11 @@
> +        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 (2|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
> +        mov (16|M0) r7.0<1>:ud    r1.0<0;1,0>:ud
> +        mov (16|M0) r9.0<1>:ud    r1.0<0;1,0>:ud
> +        mov (16|M0) r11.0<1>:ud   r1.0<0;1,0>:ud
> +        send (16|M0) acc0.0:uw  r4:d  0x1000000C  0x120A8000
> //  DP_DC1  wr:9h, rd:0, fc: 0x28000
> +        mov (8|M0) r112.0<1>:ud  r0.0<8;8,1>:ud
> +        send (16|M0) null:uw  r112:d  0x10000027  0x02000010 {EOT}
> //  SPAWNER  wr:1, rd:0, fc: 0x10
> diff --git a/shaders/ps/README b/shaders/ps/README
> index b196d025..a4be135d 100644
> --- a/shaders/ps/README
> +++ b/shaders/ps/README
> @@ -1 +1,9 @@
>  These files are here for reference only.
> +
> +From gen8 we can use Intel Graphics Assember to generate binary from
> asm
> +instructions https://github.com/intel/intel-graphics-compiler/tree/m
> aster/visa/iga.
> +
> +How to get binary from .asm?
> +        $> iga64 blit_gen8.asm -p=8 -a -o blit_gen8.bin
> +        $> Use converter from shaders/README to have hex array used
> in libs
> +        $> Copy output to proper lib
> diff --git a/shaders/ps/blit_gen8.asm b/shaders/ps/blit_gen8.asm
> new file mode 100644
> index 00000000..c35b70a1
> --- /dev/null
> +++ b/shaders/ps/blit_gen8.asm
> @@ -0,0 +1,7 @@
> + pln (8|M0) r10.0<1>:f r6.0<0;1,0>:f r2.0<8;8,1>:f
> + pln (8|M0) r11.0<1>:f r6.0<0;1,0>:f r4.0<8;8,1>:f
> + pln (8|M0) r12.0<1>:f r6.4<0;1,0>:f r2.0<8;8,1>:f
> + pln (8|M0) 13.0<1>:f r6.4<0;1,0>:f r4.0<8;8,1>:f
> + send (16|M0) r112:f r10:ub 0x10000002 0x08840001 // SAMPLER wr:4,
> rd:8, fc: 0x40001
> + send (16|M0) null:f r112:ub 0x10000025 0x10031000 {EOT} // DP_RC
> wr:8, rd:0, Render Target Write msc:16, to #0
> +
> diff --git a/shaders/ps/neg1_gen8.asm b/shaders/ps/neg1_gen8.asm
> new file mode 100644
> index 00000000..582375b5
> --- /dev/null
> +++ b/shaders/ps/neg1_gen8.asm
> @@ -0,0 +1,9 @@
> +mov(8) r112:ud 0x3f800000:ud
> +mov(8) r113:ud 0x3f800000:ud
> +mov(8) r114:ud 0x3f800000:ud
> +mov(8) r115:ud 0x3f800000:ud
> +mov(8) r116:ud 0x3f800000:ud
> +mov(8) r117:ud 0x3f800000:ud
> +mov(8) r118:ud 0x3f800000:ud
> +mov(8) r119:ud 0x3f800000:ud
> +send(16) null r112  0x25 0x10031000 { EOT }
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

  reply	other threads:[~2018-10-02 13:58 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-02 13:49 [igt-dev] [PATCH i-g-t 0/2] Shaders documentation RESENDING Katarzyna Dec
2018-10-02 13:49 ` [igt-dev] [PATCH i-g-t 1/2] shaders: Add assembler instructions and update README for shaders Katarzyna Dec
2018-10-02 13:57   ` Kalamarz, Lukasz [this message]
2018-10-03  5:47   ` Katarzyna Dec
2018-10-03 11:02     ` Petri Latvala
2018-10-03 13:51       ` Katarzyna Dec
2018-10-03 11:05   ` Arkadiusz Hiler
2018-10-03 13:50     ` Katarzyna Dec
2018-10-02 13:49 ` [igt-dev] [PATCH i-g-t 2/2] lib/i915: Move shaders directory Katarzyna Dec
2018-10-03 11:00   ` Petri Latvala
2018-10-03 13:52     ` Katarzyna Dec
2018-10-02 14:55 ` [igt-dev] ✓ Fi.CI.BAT: success for Shaders documentation RESENDING Patchwork
2018-10-03  6:14 ` [igt-dev] ✓ Fi.CI.BAT: success for Shaders documentation RESENDING (rev2) Patchwork
2018-10-03  6:53 ` [igt-dev] ✗ Fi.CI.IGT: failure for Shaders documentation RESENDING Patchwork
2018-10-03 10:14 ` [igt-dev] ✓ Fi.CI.IGT: success for Shaders documentation RESENDING (rev2) 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=1538488606.7230.3.camel@intel.com \
    --to=lukasz.kalamarz@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=katarzyna.dec@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox