ProgramBuilder: Add more helpers for Members / Arrays
Add overloads of TypesBuilder::array() that take a stride parameter.
Add overload of ProgramBuilder:Member() that has an offset
Change-Id: If8337e410e73eade504432599a9798bbc511382e
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/40600
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/program_builder.h b/src/program_builder.h
index a993063..14758e4 100644
--- a/src/program_builder.h
+++ b/src/program_builder.h
@@ -29,6 +29,7 @@
#include "src/ast/module.h"
#include "src/ast/scalar_constructor_expression.h"
#include "src/ast/sint_literal.h"
+#include "src/ast/stride_decoration.h"
#include "src/ast/struct.h"
#include "src/ast/struct_member.h"
#include "src/ast/struct_member_offset_decoration.h"
@@ -418,12 +419,30 @@
ast::ArrayDecorationList{});
}
+ /// @param subtype the array element type
+ /// @param n the array size. 0 represents a runtime-array.
+ /// @param stride the array stride.
+ /// @return the tint AST type for a array of size `n` of type `T`
+ type::Array* array(type::Type* subtype, uint32_t n, uint32_t stride) const {
+ return builder->create<type::Array>(
+ subtype, n,
+ ast::ArrayDecorationList{
+ builder->create<ast::StrideDecoration>(stride),
+ });
+ }
+
/// @return the tint AST type for an array of size `N` of type `T`
template <typename T, int N = 0>
type::Array* array() const {
return array(Of<T>(), N);
}
+ /// @param stride the array stride
+ /// @return the tint AST type for an array of size `N` of type `T`
+ template <typename T, int N = 0>
+ type::Array* array(uint32_t stride) const {
+ return array(Of<T>(), N, stride);
+ }
/// Creates an alias type
/// @param name the alias name
/// @param type the alias type
@@ -954,6 +973,21 @@
decorations);
}
+ /// Creates a ast::StructMember with the given byte offset
+ /// @param offset the offset to use in the StructMemberOffsetDecoration
+ /// @param name the struct member name
+ /// @param type the struct member type
+ /// @returns the struct member pointer
+ ast::StructMember* Member(uint32_t offset,
+ const std::string& name,
+ type::Type* type) {
+ return create<ast::StructMember>(
+ source_, Symbols().Register(name), type,
+ ast::StructMemberDecorationList{
+ create<ast::StructMemberOffsetDecoration>(offset),
+ });
+ }
+
/// Sets the current builder source to `src`
/// @param src the Source used for future create() calls
void SetSource(const Source& src) {