mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-17 00:47:13 +00:00
sem::Matrix: Pass the column type to the constructor
It's common to want this when indexing matrices. Change-Id: Ic60a3a8d05873119d78a3cb0860d129e33ac3525 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/49880 Reviewed-by: James Price <jrprice@google.com> Commit-Queue: Ben Clayton <bclayton@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
b432f232b5
commit
6c1cf6569e
@@ -347,8 +347,9 @@ const sem::Type* Resolver::Type(const ast::Type* ty) {
|
||||
}
|
||||
if (auto* t = ty->As<ast::Matrix>()) {
|
||||
if (auto* el = Type(t->type())) {
|
||||
return builder_->create<sem::Matrix>(const_cast<sem::Type*>(el),
|
||||
t->rows(), t->columns());
|
||||
auto* column_type = builder_->create<sem::Vector>(
|
||||
const_cast<sem::Type*>(el), t->rows());
|
||||
return builder_->create<sem::Matrix>(column_type, t->columns());
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
@@ -1958,8 +1959,10 @@ bool Resolver::Binary(ast::BinaryExpression* expr) {
|
||||
auto* rhs_vec = rhs_type->As<sem::Vector>();
|
||||
const sem::Type* result_type = nullptr;
|
||||
if (lhs_mat && rhs_mat) {
|
||||
result_type = builder_->create<sem::Matrix>(
|
||||
lhs_mat->type(), lhs_mat->rows(), rhs_mat->columns());
|
||||
auto* column_type =
|
||||
builder_->create<sem::Vector>(lhs_mat->type(), lhs_mat->rows());
|
||||
result_type =
|
||||
builder_->create<sem::Matrix>(column_type, rhs_mat->columns());
|
||||
} else if (lhs_mat && rhs_vec) {
|
||||
result_type =
|
||||
builder_->create<sem::Vector>(lhs_mat->type(), lhs_mat->rows());
|
||||
@@ -2886,9 +2889,9 @@ const sem::Type* Resolver::Canonical(const sem::Type* type) {
|
||||
const_cast<sem::Type*>(make_canonical(v->type())), v->size());
|
||||
}
|
||||
if (auto* m = ct->As<Matrix>()) {
|
||||
return builder_->create<Matrix>(
|
||||
const_cast<sem::Type*>(make_canonical(m->type())), m->rows(),
|
||||
m->columns());
|
||||
auto* column_type =
|
||||
builder_->create<sem::Vector>(make_canonical(m->type()), m->rows());
|
||||
return builder_->create<Matrix>(column_type, m->columns());
|
||||
}
|
||||
if (auto* ac = ct->As<AccessControl>()) {
|
||||
return builder_->create<AccessControl>(ac->access_control(),
|
||||
|
||||
@@ -239,17 +239,20 @@ sem::Type* sem_vec4(const ProgramBuilder::TypesBuilder& ty) {
|
||||
|
||||
template <create_sem_type_func_ptr create_type>
|
||||
sem::Type* sem_mat2x2(const ProgramBuilder::TypesBuilder& ty) {
|
||||
return ty.builder->create<sem::Matrix>(create_type(ty), 2, 2);
|
||||
auto* column_type = ty.builder->create<sem::Vector>(create_type(ty), 2u);
|
||||
return ty.builder->create<sem::Matrix>(column_type, 2u);
|
||||
}
|
||||
|
||||
template <create_sem_type_func_ptr create_type>
|
||||
sem::Type* sem_mat3x3(const ProgramBuilder::TypesBuilder& ty) {
|
||||
return ty.builder->create<sem::Matrix>(create_type(ty), 3, 3);
|
||||
auto* column_type = ty.builder->create<sem::Vector>(create_type(ty), 3u);
|
||||
return ty.builder->create<sem::Matrix>(column_type, 3u);
|
||||
}
|
||||
|
||||
template <create_sem_type_func_ptr create_type>
|
||||
sem::Type* sem_mat4x4(const ProgramBuilder::TypesBuilder& ty) {
|
||||
return ty.builder->create<sem::Matrix>(create_type(ty), 4, 4);
|
||||
auto* column_type = ty.builder->create<sem::Vector>(create_type(ty), 4u);
|
||||
return ty.builder->create<sem::Matrix>(column_type, 4u);
|
||||
}
|
||||
|
||||
template <create_sem_type_func_ptr create_type>
|
||||
|
||||
Reference in New Issue
Block a user