summaryrefslogtreecommitdiff
path: root/src/glsl/nir/docs/source/metadata.rst
diff options
context:
space:
mode:
Diffstat (limited to 'src/glsl/nir/docs/source/metadata.rst')
-rw-r--r--src/glsl/nir/docs/source/metadata.rst34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/glsl/nir/docs/source/metadata.rst b/src/glsl/nir/docs/source/metadata.rst
new file mode 100644
index 0000000000..9dc1b8700c
--- /dev/null
+++ b/src/glsl/nir/docs/source/metadata.rst
@@ -0,0 +1,34 @@
+Metadata
+========
+
+Many of the optimization/lowering passes in NIR require different bits of
+metadata that are provided by different analysis passes. Currently, this
+metadata includes:
+
+* dominance information
+* SSA value liveness
+* source-order block indices
+
+and it's expected that there will be more in the future. The metadata itself
+is currently directly embedded inside the IR datastructures (for example, each
+basic block contains information about its parent and children in the
+dominance tree), but we still need a way to calculate the metadata only when
+actually required. In order to do this, there's a simple API made of two
+functions:
+
+* ``nir_metadata_require()``: Declares that the given metadata (an OR of enum
+ values) is required. The function automatically calls all of the required
+ analysis passes for you and, upon its return, the requested metadata is
+ available and current.
+* ``nir_metadata_preserve()``: Called to declare what metadata (if any) was
+ preserved by the given pass. If the pass didn't touch anything, it doesn't
+ need to call this function. However, if it adds/removes instructions or
+ modifies the CFG in any way, it needs to call ``nir_metadata_preserve()``.
+ The ``nir_metadata_preserve()`` function takes an OR of all of the bits of
+ metadata that are preserved. That way as new metadata gets added, we don't
+ have to update every optimization pass to dirty it.
+
+Unfortunately, there's no way to guarantee that you actually call
+``nir_metadata_preserve()`` if you change the shader, so if you don't...
+shame on you.
+