diff options
author | Jason Ekstrand <[email protected]> | 2014-10-29 12:42:54 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2015-01-15 07:19:00 -0800 |
commit | 49911cf4dbf85e9c20c8069cbc0aaa6deb757df1 (patch) | |
tree | 6a061dd0cb6d2bd3aeb23ec05161b2d0c8eec010 /src/glsl/nir/nir.h | |
parent | ea1eefe13f2390981e37c22fd3791a042ef5f3e0 (diff) |
nir: Add a basic metadata management system
Reviewed-by: Connor Abbott <[email protected]>
Diffstat (limited to 'src/glsl/nir/nir.h')
-rw-r--r-- | src/glsl/nir/nir.h | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index 5c303edb4c0..9d059340ee7 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -33,6 +33,7 @@ #include "GL/gl.h" /* GLenum */ #include "util/ralloc.h" #include "main/mtypes.h" +#include "main/bitset.h" #include "nir_types.h" #include <stdio.h> @@ -45,6 +46,7 @@ extern "C" { struct nir_function_overload; struct nir_function; +struct nir_shader; /** @@ -1037,6 +1039,16 @@ typedef struct { #define nir_loop_last_cf_node(loop) \ exec_node_data(nir_cf_node, exec_list_get_tail(&(loop)->body), node) +/** + * Various bits of metadata that can may be created or required by + * optimization and analysis passes + */ +typedef enum { + nir_metadata_none = 0x0, + nir_metadata_block_index = 0x1, + nir_metadata_dominance = 0x2, +} nir_metadata; + typedef struct { nir_cf_node cf_node; @@ -1069,8 +1081,7 @@ typedef struct { /* total number of basic blocks, only valid when block_index_dirty = false */ unsigned num_blocks; - bool block_index_dirty; - bool dominance_dirty; + nir_metadata valid_metadata; } nir_function_impl; #define nir_cf_node_next(_node) \ @@ -1126,6 +1137,7 @@ typedef struct nir_function { struct exec_list overload_list; const char *name; + struct nir_shader *shader; } nir_function; #define nir_function_first_overload(func) \ @@ -1209,6 +1221,11 @@ void nir_cf_node_insert_end(struct exec_list *list, nir_cf_node *node); /** removes a control flow node, doing any cleanup necessary */ void nir_cf_node_remove(nir_cf_node *node); +/** requests that the given pieces of metadata be generated */ +void nir_metadata_require(nir_function_impl *impl, nir_metadata required); +/** dirties all but the preserved metadata */ +void nir_metadata_dirty(nir_function_impl *impl, nir_metadata preserved); + /** creates an instruction with default swizzle/writemask/etc. with NULL registers */ nir_alu_instr *nir_alu_instr_create(void *mem_ctx, nir_op op); |