Replace TextureType::(Is|As)Sampled with Castable Change-Id: Id997f118a8ce9f4f7c42bed306368d3f204b6607 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34279 Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/ast/function.cc b/src/ast/function.cc index 08a2869..0d20fc1 100644 --- a/src/ast/function.cc +++ b/src/ast/function.cc
@@ -19,6 +19,7 @@ #include "src/ast/decorated_variable.h" #include "src/ast/stage_decoration.h" #include "src/ast/type/multisampled_texture_type.h" +#include "src/ast/type/sampled_texture_type.h" #include "src/ast/type/texture_type.h" #include "src/ast/workgroup_decoration.h" @@ -318,7 +319,7 @@ if ((multisampled && !unwrapped_type->Is<ast::type::MultisampledTextureType>()) || (!multisampled && - !unwrapped_type->As<ast::type::TextureType>()->IsSampled())) { + !unwrapped_type->Is<ast::type::SampledTextureType>())) { continue; }
diff --git a/src/ast/type/depth_texture_type_test.cc b/src/ast/type/depth_texture_type_test.cc index 867c2a1..4b39585 100644 --- a/src/ast/type/depth_texture_type_test.cc +++ b/src/ast/type/depth_texture_type_test.cc
@@ -23,6 +23,7 @@ #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/storage_texture_type.h" #include "src/ast/type/struct_type.h" #include "src/ast/type/u32_type.h" @@ -55,9 +56,9 @@ TEST_F(DepthTextureTypeTest, IsTextureType) { DepthTextureType d(TextureDimension::kCube); - TextureType*ty = &d; + TextureType* ty = &d; EXPECT_TRUE(ty->Is<DepthTextureType>()); - EXPECT_FALSE(ty->IsSampled()); + EXPECT_FALSE(ty->Is<SampledTextureType>()); EXPECT_FALSE(ty->Is<StorageTextureType>()); }
diff --git a/src/ast/type/multisampled_texture_type_test.cc b/src/ast/type/multisampled_texture_type_test.cc index 1d987e6..8b1aa21 100644 --- a/src/ast/type/multisampled_texture_type_test.cc +++ b/src/ast/type/multisampled_texture_type_test.cc
@@ -23,6 +23,7 @@ #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/storage_texture_type.h" #include "src/ast/type/struct_type.h" #include "src/ast/type/u32_type.h" @@ -60,7 +61,7 @@ TextureType* ty = &s; EXPECT_FALSE(ty->Is<DepthTextureType>()); EXPECT_TRUE(ty->Is<MultisampledTextureType>()); - EXPECT_FALSE(ty->IsSampled()); + EXPECT_FALSE(ty->Is<SampledTextureType>()); EXPECT_FALSE(ty->Is<StorageTextureType>()); }
diff --git a/src/ast/type/sampled_texture_type.cc b/src/ast/type/sampled_texture_type.cc index 78576b7..dc03beb 100644 --- a/src/ast/type/sampled_texture_type.cc +++ b/src/ast/type/sampled_texture_type.cc
@@ -30,10 +30,6 @@ SampledTextureType::~SampledTextureType() = default; -bool SampledTextureType::IsSampled() const { - return true; -} - std::string SampledTextureType::type_name() const { std::ostringstream out; out << "__sampled_texture_" << dim() << type_->type_name();
diff --git a/src/ast/type/sampled_texture_type.h b/src/ast/type/sampled_texture_type.h index 3b1fb3f..a270a95 100644 --- a/src/ast/type/sampled_texture_type.h +++ b/src/ast/type/sampled_texture_type.h
@@ -34,9 +34,6 @@ SampledTextureType(SampledTextureType&&); ~SampledTextureType() override; - /// @returns true if the type is a sampled texture type - bool IsSampled() const override; - /// @returns the subtype of the sampled texture Type* type() const { return type_; }
diff --git a/src/ast/type/sampled_texture_type_test.cc b/src/ast/type/sampled_texture_type_test.cc index ed6344f..f0049a4 100644 --- a/src/ast/type/sampled_texture_type_test.cc +++ b/src/ast/type/sampled_texture_type_test.cc
@@ -59,7 +59,7 @@ SampledTextureType s(TextureDimension::kCube, &f32); TextureType* ty = &s; EXPECT_FALSE(ty->Is<DepthTextureType>()); - EXPECT_TRUE(ty->IsSampled()); + EXPECT_TRUE(ty->Is<SampledTextureType>()); EXPECT_FALSE(ty->Is<StorageTextureType>()); }
diff --git a/src/ast/type/storage_texture_type_test.cc b/src/ast/type/storage_texture_type_test.cc index 9062d7d..0f29099 100644 --- a/src/ast/type/storage_texture_type_test.cc +++ b/src/ast/type/storage_texture_type_test.cc
@@ -26,6 +26,7 @@ #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/struct_type.h" #include "src/ast/type/u32_type.h" #include "src/ast/type/vector_type.h" @@ -62,7 +63,7 @@ ImageFormat::kRgba32Float); TextureType* ty = &s; EXPECT_FALSE(ty->Is<DepthTextureType>()); - EXPECT_FALSE(ty->IsSampled()); + EXPECT_FALSE(ty->Is<SampledTextureType>()); EXPECT_TRUE(ty->Is<StorageTextureType>()); }
diff --git a/src/ast/type/texture_type.cc b/src/ast/type/texture_type.cc index 14c698e..453dcd0 100644 --- a/src/ast/type/texture_type.cc +++ b/src/ast/type/texture_type.cc
@@ -59,20 +59,6 @@ TextureType::~TextureType() = default; -bool TextureType::IsSampled() const { - return false; -} - -const SampledTextureType* TextureType::AsSampled() const { - assert(IsSampled()); - return static_cast<const SampledTextureType*>(this); -} - -SampledTextureType* TextureType::AsSampled() { - assert(IsSampled()); - return static_cast<SampledTextureType*>(this); -} - } // namespace type } // namespace ast } // namespace tint
diff --git a/src/ast/type/texture_type.h b/src/ast/type/texture_type.h index f3047df..aa8db9f 100644 --- a/src/ast/type/texture_type.h +++ b/src/ast/type/texture_type.h
@@ -24,8 +24,6 @@ namespace ast { namespace type { -class SampledTextureType; - /// The dimensionality of the texture enum class TextureDimension { /// Invalid texture @@ -60,15 +58,6 @@ /// @returns the texture dimension TextureDimension dim() const { return dim_; } - /// @returns true if this is a sampled texture - virtual bool IsSampled() const; - - /// @returns the texture as a sampled texture - const SampledTextureType* AsSampled() const; - - /// @returns the texture as a sampled texture - SampledTextureType* AsSampled(); - private: TextureDimension dim_ = TextureDimension::k1d; };
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc index 5cacc0f..7a62f3f 100644 --- a/src/inspector/inspector.cc +++ b/src/inspector/inspector.cc
@@ -386,7 +386,9 @@ ->type() ->UnwrapIfNeeded(); } else { - base_type = texture_type->AsSampled()->type()->UnwrapIfNeeded(); + base_type = texture_type->As<ast::type::SampledTextureType>() + ->type() + ->UnwrapIfNeeded(); } if (base_type->Is<ast::type::ArrayType>()) {
diff --git a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc index 4dcb422..1827766 100644 --- a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc +++ b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
@@ -80,11 +80,9 @@ EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); ASSERT_TRUE(t->Is<ast::type::TextureType>()); - ASSERT_TRUE(t->As<ast::type::TextureType>()->IsSampled()); - ASSERT_TRUE(t->As<ast::type::TextureType>() - ->AsSampled() - ->type() - ->Is<ast::type::F32Type>()); + ASSERT_TRUE(t->Is<ast::type::SampledTextureType>()); + ASSERT_TRUE( + t->As<ast::type::SampledTextureType>()->type()->Is<ast::type::F32Type>()); EXPECT_EQ(t->As<ast::type::TextureType>()->dim(), ast::type::TextureDimension::k1d); } @@ -97,11 +95,9 @@ EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); ASSERT_TRUE(t->Is<ast::type::TextureType>()); - ASSERT_TRUE(t->As<ast::type::TextureType>()->IsSampled()); - ASSERT_TRUE(t->As<ast::type::TextureType>() - ->AsSampled() - ->type() - ->Is<ast::type::I32Type>()); + ASSERT_TRUE(t->Is<ast::type::SampledTextureType>()); + ASSERT_TRUE( + t->As<ast::type::SampledTextureType>()->type()->Is<ast::type::I32Type>()); EXPECT_EQ(t->As<ast::type::TextureType>()->dim(), ast::type::TextureDimension::k2d); } @@ -114,11 +110,9 @@ EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); ASSERT_TRUE(t->Is<ast::type::TextureType>()); - ASSERT_TRUE(t->As<ast::type::TextureType>()->IsSampled()); - ASSERT_TRUE(t->As<ast::type::TextureType>() - ->AsSampled() - ->type() - ->Is<ast::type::U32Type>()); + ASSERT_TRUE(t->Is<ast::type::SampledTextureType>()); + ASSERT_TRUE( + t->As<ast::type::SampledTextureType>()->type()->Is<ast::type::U32Type>()); EXPECT_EQ(t->As<ast::type::TextureType>()->dim(), ast::type::TextureDimension::k3d); } @@ -172,11 +166,9 @@ EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); ASSERT_TRUE(t->Is<ast::type::TextureType>()); - ASSERT_TRUE(t->As<ast::type::TextureType>()->IsSampled()); - ASSERT_TRUE(t->As<ast::type::TextureType>() - ->AsSampled() - ->type() - ->Is<ast::type::F32Type>()); + ASSERT_TRUE(t->Is<ast::type::SampledTextureType>()); + ASSERT_TRUE( + t->As<ast::type::SampledTextureType>()->type()->Is<ast::type::F32Type>()); EXPECT_EQ(t->As<ast::type::TextureType>()->dim(), ast::type::TextureDimension::k1d); } @@ -189,11 +181,9 @@ EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); ASSERT_TRUE(t->Is<ast::type::TextureType>()); - ASSERT_TRUE(t->As<ast::type::TextureType>()->IsSampled()); - ASSERT_TRUE(t->As<ast::type::TextureType>() - ->AsSampled() - ->type() - ->Is<ast::type::I32Type>()); + ASSERT_TRUE(t->Is<ast::type::SampledTextureType>()); + ASSERT_TRUE( + t->As<ast::type::SampledTextureType>()->type()->Is<ast::type::I32Type>()); EXPECT_EQ(t->As<ast::type::TextureType>()->dim(), ast::type::TextureDimension::k2d); } @@ -206,11 +196,9 @@ EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); ASSERT_TRUE(t->Is<ast::type::TextureType>()); - ASSERT_TRUE(t->As<ast::type::TextureType>()->IsSampled()); - ASSERT_TRUE(t->As<ast::type::TextureType>() - ->AsSampled() - ->type() - ->Is<ast::type::U32Type>()); + ASSERT_TRUE(t->Is<ast::type::SampledTextureType>()); + ASSERT_TRUE( + t->As<ast::type::SampledTextureType>()->type()->Is<ast::type::U32Type>()); EXPECT_EQ(t->As<ast::type::TextureType>()->dim(), ast::type::TextureDimension::k3d); }
diff --git a/src/reader/wgsl/parser_impl_type_decl_test.cc b/src/reader/wgsl/parser_impl_type_decl_test.cc index 24ac3cd..29c509c 100644 --- a/src/reader/wgsl/parser_impl_type_decl_test.cc +++ b/src/reader/wgsl/parser_impl_type_decl_test.cc
@@ -765,11 +765,9 @@ ASSERT_NE(t.value, nullptr) << p->error(); EXPECT_EQ(t.value, type); ASSERT_TRUE(t->Is<ast::type::TextureType>()); - ASSERT_TRUE(t->As<ast::type::TextureType>()->IsSampled()); - ASSERT_TRUE(t->As<ast::type::TextureType>() - ->AsSampled() - ->type() - ->Is<ast::type::F32Type>()); + ASSERT_TRUE(t->Is<ast::type::SampledTextureType>()); + ASSERT_TRUE( + t->As<ast::type::SampledTextureType>()->type()->Is<ast::type::F32Type>()); } TEST_F(ParserImplTest, TypeDecl_Texture) { @@ -786,11 +784,9 @@ ASSERT_NE(t.value, nullptr); EXPECT_EQ(t.value, type); ASSERT_TRUE(t->Is<ast::type::TextureType>()); - ASSERT_TRUE(t->As<ast::type::TextureType>()->IsSampled()); - ASSERT_TRUE(t->As<ast::type::TextureType>() - ->AsSampled() - ->type() - ->Is<ast::type::F32Type>()); + ASSERT_TRUE(t->Is<ast::type::SampledTextureType>()); + ASSERT_TRUE( + t->As<ast::type::SampledTextureType>()->type()->Is<ast::type::F32Type>()); } } // namespace
diff --git a/src/type_determiner.cc b/src/type_determiner.cc index ffe72d0..40f55a7 100644 --- a/src/type_determiner.cc +++ b/src/type_determiner.cc
@@ -672,7 +672,7 @@ } if (!texture->Is<ast::type::StorageTextureType>() && - !(texture->IsSampled() || + !(texture->Is<ast::type::SampledTextureType>() || texture->Is<ast::type::MultisampledTextureType>())) { set_error(expr->source(), "invalid texture for " + ident->name()); return false; @@ -681,8 +681,8 @@ ast::type::Type* type = nullptr; if (texture->Is<ast::type::StorageTextureType>()) { type = texture->As<ast::type::StorageTextureType>()->type(); - } else if (texture->IsSampled()) { - type = texture->AsSampled()->type(); + } else if (texture->Is<ast::type::SampledTextureType>()) { + type = texture->As<ast::type::SampledTextureType>()->type(); } else if (texture->Is<ast::type::MultisampledTextureType>()) { type = texture->As<ast::type::MultisampledTextureType>()->type(); } else {
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc index 6205aa8..0bd9116 100644 --- a/src/writer/msl/generator_impl.cc +++ b/src/writer/msl/generator_impl.cc
@@ -1900,8 +1900,8 @@ return false; } out_ << ", access::sample"; - } else if (tex->IsSampled()) { - if (!EmitType(tex->AsSampled()->type(), "")) { + } else if (tex->Is<ast::type::SampledTextureType>()) { + if (!EmitType(tex->As<ast::type::SampledTextureType>()->type(), "")) { return false; } out_ << ", access::sample";
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc index bff08f4..8a56827 100644 --- a/src/writer/spirv/builder.cc +++ b/src/writer/spirv/builder.cc
@@ -2501,7 +2501,7 @@ if (dim == ast::type::TextureDimension::k1dArray || dim == ast::type::TextureDimension::k1d) { dim_literal = SpvDim1D; - if (texture->IsSampled()) { + if (texture->Is<ast::type::SampledTextureType>()) { push_capability(SpvCapabilitySampled1D); } else { assert(texture->Is<ast::type::StorageTextureType>()); @@ -2528,12 +2528,14 @@ uint32_t sampled_literal = 2u; if (texture->Is<ast::type::MultisampledTextureType>() || - texture->IsSampled() || texture->Is<ast::type::DepthTextureType>()) { + texture->Is<ast::type::SampledTextureType>() || + texture->Is<ast::type::DepthTextureType>()) { sampled_literal = 1u; } if (dim == ast::type::TextureDimension::kCubeArray) { - if (texture->IsSampled() || texture->Is<ast::type::DepthTextureType>()) { + if (texture->Is<ast::type::SampledTextureType>() || + texture->Is<ast::type::DepthTextureType>()) { push_capability(SpvCapabilitySampledCubeArray); } } @@ -2542,8 +2544,9 @@ if (texture->Is<ast::type::DepthTextureType>()) { ast::type::F32Type f32; type_id = GenerateTypeIfNeeded(&f32); - } else if (texture->IsSampled()) { - type_id = GenerateTypeIfNeeded(texture->AsSampled()->type()); + } else if (texture->Is<ast::type::SampledTextureType>()) { + type_id = GenerateTypeIfNeeded( + texture->As<ast::type::SampledTextureType>()->type()); } else if (texture->Is<ast::type::MultisampledTextureType>()) { type_id = GenerateTypeIfNeeded( texture->As<ast::type::MultisampledTextureType>()->type());
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc index f5f6015..2428187 100644 --- a/src/writer/wgsl/generator_impl.cc +++ b/src/writer/wgsl/generator_impl.cc
@@ -472,7 +472,7 @@ out_ << "texture_"; if (texture->Is<ast::type::DepthTextureType>()) { out_ << "depth_"; - } else if (texture->IsSampled()) { + } else if (texture->Is<ast::type::SampledTextureType>()) { /* nothing to emit */ } else if (texture->Is<ast::type::MultisampledTextureType>()) { out_ << "multisampled_"; @@ -520,8 +520,8 @@ return false; } - if (texture->IsSampled()) { - auto* sampled = texture->AsSampled(); + if (texture->Is<ast::type::SampledTextureType>()) { + auto* sampled = texture->As<ast::type::SampledTextureType>(); out_ << "<"; if (!EmitType(sampled->type())) {