diff options
author | Jason Ekstrand <[email protected]> | 2017-06-29 10:33:36 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2017-07-05 15:26:54 -0700 |
commit | ad4519696d07953c16fcc023220a913cf25d3645 (patch) | |
tree | 053a5c60e39661d82dbfb501052229a350e35dd0 /src/compiler | |
parent | 55da2cfba230f7d9680090bbc754333a53a9bb03 (diff) |
nir/spirv: Compact vtn_type
Use an anonymous union of structs to help keep the structure small and
better organized.
Reviewed-by: Connor Abbott <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/spirv/spirv_to_nir.c | 1 | ||||
-rw-r--r-- | src/compiler/spirv/vtn_private.h | 64 |
2 files changed, 39 insertions, 26 deletions
diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index c69cb8c8a8d..58e316dcd45 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -728,7 +728,6 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode, struct vtn_value *val = vtn_push_value(b, w[1], vtn_value_type_type); val->type = rzalloc(b, struct vtn_type); - val->type->is_builtin = false; val->type->val = val; switch (opcode) { diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h index 84d5f51906f..3c048fa327d 100644 --- a/src/compiler/spirv/vtn_private.h +++ b/src/compiler/spirv/vtn_private.h @@ -202,42 +202,56 @@ struct vtn_type { /* The value that declares this type. Used for finding decorations */ struct vtn_value *val; - /* for matrices, whether the matrix is stored row-major */ - bool row_major; + union { + /* Members for scalar, vector, and array-like types */ + struct { + /* for arrays, the vtn_type for the elements of the array */ + struct vtn_type *array_element; - /* for structs, the offset of each member */ - unsigned *offsets; + /* for arrays and matrices, the array stride */ + unsigned stride; - /* for structs, whether it was decorated as a "non-SSBO-like" block */ - bool block; + /* for matrices, whether the matrix is stored row-major */ + bool row_major:1; - /* for structs, whether it was decorated as an "SSBO-like" block */ - bool buffer_block; + /* Whether this type, or a parent type, has been decorated as a + * builtin + */ + bool is_builtin:1; - /* for structs with block == true, whether this is a builtin block (i.e. a - * block that contains only builtins). - */ - bool builtin_block; + /* Which built-in to use */ + SpvBuiltIn builtin; + }; - /* Image format for image_load_store type images */ - unsigned image_format; + /* Members for struct types */ + struct { + /* for structures, the vtn_type for each member */ + struct vtn_type **members; - /* Access qualifier for storage images */ - SpvAccessQualifier access_qualifier; + /* for structs, the offset of each member */ + unsigned *offsets; - /* for arrays and matrices, the array stride */ - unsigned stride; + /* for structs, whether it was decorated as a "non-SSBO-like" block */ + bool block:1; - /* for arrays, the vtn_type for the elements of the array */ - struct vtn_type *array_element; + /* for structs, whether it was decorated as an "SSBO-like" block */ + bool buffer_block:1; - /* for structures, the vtn_type for each member */ - struct vtn_type **members; + /* for structs with block == true, whether this is a builtin block + * (i.e. a block that contains only builtins). + */ + bool builtin_block:1; + }; - /* Whether this type, or a parent type, has been decorated as a builtin */ - bool is_builtin; + /* Members for image types */ + struct { + /* Image format for image_load_store type images */ + unsigned image_format; - SpvBuiltIn builtin; + /* Access qualifier for storage images */ + SpvAccessQualifier access_qualifier; + }; + }; }; struct vtn_variable; |