Replace TextureType::(Is|As)Multisampled with Castable
Change-Id: I9a0e2ba4c6b0950134cef4b291cd1ba5cae1198c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34277
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/ast/function.cc b/src/ast/function.cc
index 09a554f..08a2869 100644
--- a/src/ast/function.cc
+++ b/src/ast/function.cc
@@ -18,6 +18,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/texture_type.h"
#include "src/ast/workgroup_decoration.h"
@@ -315,7 +316,7 @@
}
if ((multisampled &&
- !unwrapped_type->As<ast::type::TextureType>()->IsMultisampled()) ||
+ !unwrapped_type->Is<ast::type::MultisampledTextureType>()) ||
(!multisampled &&
!unwrapped_type->As<ast::type::TextureType>()->IsSampled())) {
continue;
diff --git a/src/ast/type/multisampled_texture_type.cc b/src/ast/type/multisampled_texture_type.cc
index 7de7dc5..bcca076 100644
--- a/src/ast/type/multisampled_texture_type.cc
+++ b/src/ast/type/multisampled_texture_type.cc
@@ -32,9 +32,6 @@
MultisampledTextureType::~MultisampledTextureType() = default;
-bool MultisampledTextureType::IsMultisampled() const {
- return true;
-}
std::string MultisampledTextureType::type_name() const {
std::ostringstream out;
diff --git a/src/ast/type/multisampled_texture_type.h b/src/ast/type/multisampled_texture_type.h
index 4c68c56..2cebe1f 100644
--- a/src/ast/type/multisampled_texture_type.h
+++ b/src/ast/type/multisampled_texture_type.h
@@ -35,9 +35,6 @@
MultisampledTextureType(MultisampledTextureType&&);
~MultisampledTextureType() override;
- /// @returns true if the type is a sampled texture type
- bool IsMultisampled() const override;
-
/// @returns the subtype of the sampled texture
Type* type() const { return type_; }
diff --git a/src/ast/type/multisampled_texture_type_test.cc b/src/ast/type/multisampled_texture_type_test.cc
index 108acb2..10cf1d2 100644
--- a/src/ast/type/multisampled_texture_type_test.cc
+++ b/src/ast/type/multisampled_texture_type_test.cc
@@ -58,7 +58,7 @@
MultisampledTextureType s(TextureDimension::kCube, &f32);
TextureType* ty = &s;
EXPECT_FALSE(ty->Is<DepthTextureType>());
- EXPECT_TRUE(ty->IsMultisampled());
+ EXPECT_TRUE(ty->Is<MultisampledTextureType>());
EXPECT_FALSE(ty->IsSampled());
EXPECT_FALSE(ty->IsStorage());
}
diff --git a/src/ast/type/texture_type.cc b/src/ast/type/texture_type.cc
index 2e986f4..18ea61a 100644
--- a/src/ast/type/texture_type.cc
+++ b/src/ast/type/texture_type.cc
@@ -60,9 +60,6 @@
TextureType::~TextureType() = default;
-bool TextureType::IsMultisampled() const {
- return false;
-}
bool TextureType::IsStorage() const {
return false;
}
@@ -70,11 +67,6 @@
return false;
}
-const MultisampledTextureType* TextureType::AsMultisampled() const {
- assert(IsMultisampled());
- return static_cast<const MultisampledTextureType*>(this);
-}
-
const SampledTextureType* TextureType::AsSampled() const {
assert(IsSampled());
return static_cast<const SampledTextureType*>(this);
@@ -85,11 +77,6 @@
return static_cast<const StorageTextureType*>(this);
}
-MultisampledTextureType* TextureType::AsMultisampled() {
- assert(IsMultisampled());
- return static_cast<MultisampledTextureType*>(this);
-}
-
SampledTextureType* TextureType::AsSampled() {
assert(IsSampled());
return static_cast<SampledTextureType*>(this);
diff --git a/src/ast/type/texture_type.h b/src/ast/type/texture_type.h
index b2eba82..a2139b8 100644
--- a/src/ast/type/texture_type.h
+++ b/src/ast/type/texture_type.h
@@ -24,8 +24,6 @@
namespace ast {
namespace type {
-class DepthTextureType;
-class MultisampledTextureType;
class SampledTextureType;
class StorageTextureType;
@@ -63,22 +61,16 @@
/// @returns the texture dimension
TextureDimension dim() const { return dim_; }
- /// @returns ture if this is a multisampled texture
- virtual bool IsMultisampled() const;
/// @returns true if this is a storage texture
virtual bool IsStorage() const;
/// @returns true if this is a sampled texture
virtual bool IsSampled() const;
- /// @returns the texture as a multisampled texture
- const MultisampledTextureType* AsMultisampled() const;
/// @returns the texture as a sampled texture
const SampledTextureType* AsSampled() const;
/// @returns the texture as a storage texture
const StorageTextureType* AsStorage() const;
- /// @returns the texture as a multisampled texture
- MultisampledTextureType* AsMultisampled();
/// @returns the texture as a sampled texture
SampledTextureType* AsSampled();
/// @returns the texture as a storage texture
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index 678b1f6..5cacc0f 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -382,7 +382,9 @@
ast::type::Type* base_type = nullptr;
if (multisampled_only) {
- base_type = texture_type->AsMultisampled()->type()->UnwrapIfNeeded();
+ base_type = texture_type->As<ast::type::MultisampledTextureType>()
+ ->type()
+ ->UnwrapIfNeeded();
} else {
base_type = texture_type->AsSampled()->type()->UnwrapIfNeeded();
}
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 23869a4..13aab4f 100644
--- a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
+++ b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
@@ -263,9 +263,8 @@
EXPECT_FALSE(t.errored);
ASSERT_NE(t.value, nullptr);
ASSERT_TRUE(t->Is<ast::type::TextureType>());
- ASSERT_TRUE(t->As<ast::type::TextureType>()->IsMultisampled());
- ASSERT_TRUE(t->As<ast::type::TextureType>()
- ->AsMultisampled()
+ ASSERT_TRUE(t->Is<ast::type::MultisampledTextureType>());
+ ASSERT_TRUE(t->As<ast::type::MultisampledTextureType>()
->type()
->Is<ast::type::I32Type>());
EXPECT_EQ(t->As<ast::type::TextureType>()->dim(),
diff --git a/src/type_determiner.cc b/src/type_determiner.cc
index 9d75b84..5a423ab 100644
--- a/src/type_determiner.cc
+++ b/src/type_determiner.cc
@@ -672,7 +672,8 @@
}
if (!texture->IsStorage() &&
- !(texture->IsSampled() || texture->IsMultisampled())) {
+ !(texture->IsSampled() ||
+ texture->Is<ast::type::MultisampledTextureType>())) {
set_error(expr->source(), "invalid texture for " + ident->name());
return false;
}
@@ -682,8 +683,8 @@
type = texture->AsStorage()->type();
} else if (texture->IsSampled()) {
type = texture->AsSampled()->type();
- } else if (texture->IsMultisampled()) {
- type = texture->AsMultisampled()->type();
+ } else if (texture->Is<ast::type::MultisampledTextureType>()) {
+ type = texture->As<ast::type::MultisampledTextureType>()->type();
} else {
set_error(expr->source(), "unknown texture type for texture sampling");
return false;
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index 41795e2..19de1c0 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -1874,7 +1874,7 @@
error_ = "Invalid texture dimensions";
return false;
}
- if (tex->IsMultisampled()) {
+ if (tex->Is<ast::type::MultisampledTextureType>()) {
out_ << "_ms";
}
out_ << "<";
@@ -1894,8 +1894,9 @@
error_ = "Invalid access control for storage texture";
return false;
}
- } else if (tex->IsMultisampled()) {
- if (!EmitType(tex->AsMultisampled()->type(), "")) {
+ } else if (tex->Is<ast::type::MultisampledTextureType>()) {
+ if (!EmitType(tex->As<ast::type::MultisampledTextureType>()->type(),
+ "")) {
return false;
}
out_ << ", access::sample";
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index f7b28a8..0602006 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -1972,7 +1972,7 @@
// TODO(dsinclair): Remove the LOD param from textureLoad on storage
// textures when https://github.com/gpuweb/gpuweb/pull/1032 gets merged.
if (pidx.level != kNotUsed) {
- if (texture_type->IsMultisampled()) {
+ if (texture_type->Is<ast::type::MultisampledTextureType>()) {
spirv_operand_mask |= SpvImageOperandsSampleMask;
} else {
spirv_operand_mask |= SpvImageOperandsLodMask;
@@ -2516,7 +2516,7 @@
}
uint32_t ms_literal = 0u;
- if (texture->IsMultisampled()) {
+ if (texture->Is<ast::type::MultisampledTextureType>()) {
ms_literal = 1u;
}
@@ -2526,8 +2526,8 @@
}
uint32_t sampled_literal = 2u;
- if (texture->IsMultisampled() || texture->IsSampled() ||
- texture->Is<ast::type::DepthTextureType>()) {
+ if (texture->Is<ast::type::MultisampledTextureType>() ||
+ texture->IsSampled() || texture->Is<ast::type::DepthTextureType>()) {
sampled_literal = 1u;
}
@@ -2543,8 +2543,9 @@
type_id = GenerateTypeIfNeeded(&f32);
} else if (texture->IsSampled()) {
type_id = GenerateTypeIfNeeded(texture->AsSampled()->type());
- } else if (texture->IsMultisampled()) {
- type_id = GenerateTypeIfNeeded(texture->AsMultisampled()->type());
+ } else if (texture->Is<ast::type::MultisampledTextureType>()) {
+ type_id = GenerateTypeIfNeeded(
+ texture->As<ast::type::MultisampledTextureType>()->type());
} else if (texture->IsStorage()) {
if (texture->AsStorage()->access() == ast::AccessControl::kWriteOnly) {
ast::type::VoidType void_type;
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index 7e53242..7f0b7d0 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -474,7 +474,7 @@
out_ << "depth_";
} else if (texture->IsSampled()) {
/* nothing to emit */
- } else if (texture->IsMultisampled()) {
+ } else if (texture->Is<ast::type::MultisampledTextureType>()) {
out_ << "multisampled_";
} else if (texture->IsStorage()) {
out_ << "storage_";
@@ -528,8 +528,8 @@
return false;
}
out_ << ">";
- } else if (texture->IsMultisampled()) {
- auto* sampled = texture->AsMultisampled();
+ } else if (texture->Is<ast::type::MultisampledTextureType>()) {
+ auto* sampled = texture->As<ast::type::MultisampledTextureType>();
out_ << "<";
if (!EmitType(sampled->type())) {