diff options
author | Rob Clark <[email protected]> | 2020-02-23 11:53:32 -0800 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-02-24 21:31:53 +0000 |
commit | 2275343ba346b04ebf8bafbaedfcd707702f9c06 (patch) | |
tree | 1d1899d5cfc2ffdaeb6e16a8831bcdee0c46c06a /src/freedreno/computerator/README.rst | |
parent | 568e948d1fda10d825cf99f3cb05609c4ff248bd (diff) |
freedreno/computerator: add computerator
A standalone tool to compile and run compute shaders from ir3 assembly.
Mostly to have an easy way to experiment with instructions.
Signed-off-by: Rob Clark <[email protected]>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3926>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3926>
Diffstat (limited to 'src/freedreno/computerator/README.rst')
-rw-r--r-- | src/freedreno/computerator/README.rst | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/freedreno/computerator/README.rst b/src/freedreno/computerator/README.rst new file mode 100644 index 00000000000..4e5f81c5b73 --- /dev/null +++ b/src/freedreno/computerator/README.rst @@ -0,0 +1,54 @@ +Overview +======== + +Computerator is a tool to launch compute shaders, written in assembly. +The main purpose is to have an easy way to experiment with instructions +without dealing with the entire compiler stack (which makes controlling +the order of instructions, the registers chosen, etc, difficult). The +choice of compute shaders is simply because there is far less state +setup required. + +Headers +------- + +The shader assembly can be prefixed with headers to control state setup: + +* ``@localsize X, Y, Z`` - configures local workgroup size +* ``@buf SZ`` - configures an SSBO of the specified size (in dwords). + The order of the ``@buf`` headers determines the index, ie the first + ``@buf`` header is ``g[0]``, the second ``g[1]``, and so on +* ``@const(cN.c)`` configures a const vec4 starting at specified + const register, ie ``@const(c1.x) 1.0, 2.0, 3.0, 4.0`` will populate + ``c1.xyzw`` with ``vec4(1.0, 2.0, 3.0, 4.0)`` +* ``@invocationid(rN.c)`` will populate a vec3 starting at the specified + register with the local invocation-id +* ``@wgid(rN.c)`` will populate a vec3 starting at the specified register + with the workgroup-id (must be a high-reg, ie. ``r48.x`` and above) +* ``@numwg(cN.c)`` will populate a vec3 starting at the specified const + register + +Example +------- + +``` +@localsize 32, 1, 1 +@buf 32 ; g[0] +@const(c0.x) 0.0, 0.0, 0.0, 0.0 +@const(c1.x) 1.0, 2.0, 3.0, 4.0 +@wgid(r48.x) ; r48.xyz +@invocationid(r0.x) ; r0.xyz +@numwg(c2.x) ; c2.xyz +mov.u32u32 r0.y, r0.x +(rpt5)nop +stib.untyped.1d.u32.1 g[0] + r0.y, r0.x +end +nop +``` + +Usage +----- + +``` +cat myshader.asm | ./computerator --disasm --groups=4,4,4 +``` + |