aboutsummaryrefslogtreecommitdiffstats
path: root/src/freedreno/computerator/README.rst
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2020-02-23 11:53:32 -0800
committerMarge Bot <[email protected]>2020-02-24 21:31:53 +0000
commit2275343ba346b04ebf8bafbaedfcd707702f9c06 (patch)
tree1d1899d5cfc2ffdaeb6e16a8831bcdee0c46c06a /src/freedreno/computerator/README.rst
parent568e948d1fda10d825cf99f3cb05609c4ff248bd (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.rst54
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
+```
+