[wgsl-reader] Adding texture_sampler_types to type_decl

Bug: tint:147
Change-Id: Ib806d5c434e98632a83ad8802a3a0aeea609c8c2
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/28125
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
This commit is contained in:
Tomek Ponitka 2020-09-15 18:35:43 +00:00 committed by Commit Bot service account
parent 3af512046e
commit 43759bff1c
2 changed files with 40 additions and 0 deletions

View File

@ -1119,6 +1119,7 @@ ast::type::AliasType* ParserImpl::type_alias() {
// | MAT4x2 LESS_THAN type_decl GREATER_THAN
// | MAT4x3 LESS_THAN type_decl GREATER_THAN
// | MAT4x4 LESS_THAN type_decl GREATER_THAN
// | texture_sampler_types
ast::type::Type* ParserImpl::type_decl() {
auto t = peek();
if (t.IsIdentifier()) {
@ -1172,6 +1173,15 @@ ast::type::Type* ParserImpl::type_decl() {
t.IsMat4x4()) {
return type_decl_matrix(t);
}
auto* texture_or_sampler = texture_sampler_types();
if (has_error()) {
return nullptr;
}
if (texture_or_sampler != nullptr) {
return texture_or_sampler;
}
return nullptr;
}

View File

@ -20,6 +20,8 @@
#include "src/ast/type/i32_type.h"
#include "src/ast/type/matrix_type.h"
#include "src/ast/type/pointer_type.h"
#include "src/ast/type/sampled_texture_type.h"
#include "src/ast/type/sampler_type.h"
#include "src/ast/type/struct_type.h"
#include "src/ast/type/u32_type.h"
#include "src/ast/type/vector_type.h"
@ -741,6 +743,34 @@ INSTANTIATE_TEST_SUITE_P(ParserImplTest,
MatrixData{"mat4x3<>", 4, 3},
MatrixData{"mat4x4<>", 4, 4}));
TEST_F(ParserImplTest, TypeDecl_Sampler) {
auto* p = parser("sampler");
auto* type = tm()->Get(std::make_unique<ast::type::SamplerType>(
ast::type::SamplerKind::kSampler));
auto* t = p->type_decl();
ASSERT_NE(t, nullptr);
EXPECT_EQ(t, type);
ASSERT_TRUE(t->IsSampler());
ASSERT_FALSE(t->AsSampler()->IsComparison());
}
TEST_F(ParserImplTest, TypeDecl_Texture) {
auto* p = parser("texture_sampled_cube<f32>");
ast::type::F32Type f32;
auto* type = tm()->Get(std::make_unique<ast::type::SampledTextureType>(
ast::type::TextureDimension::kCube, &f32));
auto* t = p->type_decl();
ASSERT_NE(t, nullptr);
EXPECT_EQ(t, type);
ASSERT_TRUE(t->IsTexture());
ASSERT_TRUE(t->AsTexture()->IsSampled());
ASSERT_TRUE(t->AsTexture()->AsSampled()->type()->IsF32());
}
} // namespace
} // namespace wgsl
} // namespace reader