diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn index 6eff6a8f39..99d7c9148a 100644 --- a/src/tint/BUILD.gn +++ b/src/tint/BUILD.gn @@ -260,8 +260,6 @@ libtint_source_set("libtint_syntax_tree_src") { "ast/const.h", "ast/const_assert.h", "ast/continue_statement.h", - "ast/depth_multisampled_texture.h", - "ast/depth_texture.h", "ast/diagnostic_attribute.h", "ast/diagnostic_control.h", "ast/diagnostic_directive.h", @@ -586,10 +584,6 @@ libtint_source_set("libtint_ast_src") { "ast/const_assert.h", "ast/continue_statement.cc", "ast/continue_statement.h", - "ast/depth_multisampled_texture.cc", - "ast/depth_multisampled_texture.h", - "ast/depth_texture.cc", - "ast/depth_texture.h", "ast/diagnostic_attribute.cc", "ast/diagnostic_attribute.h", "ast/diagnostic_control.cc", diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt index e146ff8d01..d3d3097b67 100644 --- a/src/tint/CMakeLists.txt +++ b/src/tint/CMakeLists.txt @@ -124,10 +124,6 @@ list(APPEND TINT_LIB_SRCS ast/const_assert.h ast/continue_statement.cc ast/continue_statement.h - ast/depth_multisampled_texture.cc - ast/depth_multisampled_texture.h - ast/depth_texture.cc - ast/depth_texture.h ast/diagnostic_attribute.cc ast/diagnostic_attribute.h ast/diagnostic_control.cc @@ -832,8 +828,6 @@ if(TINT_BUILD_TESTS) ast/compound_assignment_statement_test.cc ast/const_assert_test.cc ast/continue_statement_test.cc - ast/depth_multisampled_texture_test.cc - ast/depth_texture_test.cc ast/diagnostic_attribute_test.cc ast/diagnostic_control_test.cc ast/diagnostic_directive_test.cc diff --git a/src/tint/ast/depth_multisampled_texture.cc b/src/tint/ast/depth_multisampled_texture.cc deleted file mode 100644 index 2ab3e8af66..0000000000 --- a/src/tint/ast/depth_multisampled_texture.cc +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2021 The Tint Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "src/tint/ast/depth_multisampled_texture.h" - -#include "src/tint/program_builder.h" - -TINT_INSTANTIATE_TYPEINFO(tint::ast::DepthMultisampledTexture); - -namespace tint::ast { -namespace { - -bool IsValidDepthDimension(type::TextureDimension dim) { - return dim == type::TextureDimension::k2d; -} - -} // namespace - -DepthMultisampledTexture::DepthMultisampledTexture(ProgramID pid, - NodeID nid, - const Source& src, - type::TextureDimension d) - : Base(pid, nid, src, d) { - TINT_ASSERT(AST, IsValidDepthDimension(dim)); -} - -DepthMultisampledTexture::DepthMultisampledTexture(DepthMultisampledTexture&&) = default; - -DepthMultisampledTexture::~DepthMultisampledTexture() = default; - -std::string DepthMultisampledTexture::FriendlyName(const SymbolTable&) const { - std::ostringstream out; - out << "texture_depth_multisampled_" << dim; - return out.str(); -} - -const DepthMultisampledTexture* DepthMultisampledTexture::Clone(CloneContext* ctx) const { - auto src = ctx->Clone(source); - return ctx->dst->create(src, dim); -} - -} // namespace tint::ast diff --git a/src/tint/ast/depth_multisampled_texture.h b/src/tint/ast/depth_multisampled_texture.h deleted file mode 100644 index 8986d493fd..0000000000 --- a/src/tint/ast/depth_multisampled_texture.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2021 The Tint Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SRC_TINT_AST_DEPTH_MULTISAMPLED_TEXTURE_H_ -#define SRC_TINT_AST_DEPTH_MULTISAMPLED_TEXTURE_H_ - -#include - -#include "src/tint/ast/texture.h" -#include "src/tint/type/texture_dimension.h" - -namespace tint::ast { - -/// A multisampled depth texture type. -class DepthMultisampledTexture final : public Castable { - public: - /// Constructor - /// @param pid the identifier of the program that owns this node - /// @param nid the unique node identifier - /// @param src the source of this node - /// @param dim the dimensionality of the texture - DepthMultisampledTexture(ProgramID pid, - NodeID nid, - const Source& src, - type::TextureDimension dim); - /// Move constructor - DepthMultisampledTexture(DepthMultisampledTexture&&); - ~DepthMultisampledTexture() override; - - /// @param symbols the program's symbol table - /// @returns the name for this type that closely resembles how it would be - /// declared in WGSL. - std::string FriendlyName(const SymbolTable& symbols) const override; - - /// Clones this type and all transitive types using the `CloneContext` `ctx`. - /// @param ctx the clone context - /// @return the newly cloned type - const DepthMultisampledTexture* Clone(CloneContext* ctx) const override; -}; - -} // namespace tint::ast - -#endif // SRC_TINT_AST_DEPTH_MULTISAMPLED_TEXTURE_H_ diff --git a/src/tint/ast/depth_multisampled_texture_test.cc b/src/tint/ast/depth_multisampled_texture_test.cc deleted file mode 100644 index 675e672675..0000000000 --- a/src/tint/ast/depth_multisampled_texture_test.cc +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2021 The Tint Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "src/tint/ast/depth_multisampled_texture.h" - -#include "src/tint/ast/test_helper.h" - -namespace tint::ast { -namespace { - -using AstDepthMultisampledTextureTest = TestHelper; - -TEST_F(AstDepthMultisampledTextureTest, Dim) { - auto* d = create(type::TextureDimension::k2d); - EXPECT_EQ(d->dim, type::TextureDimension::k2d); -} - -TEST_F(AstDepthMultisampledTextureTest, FriendlyName) { - auto* d = create(type::TextureDimension::k2d); - EXPECT_EQ(d->FriendlyName(Symbols()), "texture_depth_multisampled_2d"); -} - -} // namespace -} // namespace tint::ast diff --git a/src/tint/ast/depth_texture.cc b/src/tint/ast/depth_texture.cc deleted file mode 100644 index 199c0dab8a..0000000000 --- a/src/tint/ast/depth_texture.cc +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2020 The Tint Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "src/tint/ast/depth_texture.h" - -#include "src/tint/program_builder.h" - -TINT_INSTANTIATE_TYPEINFO(tint::ast::DepthTexture); - -namespace tint::ast { -namespace { - -bool IsValidDepthDimension(type::TextureDimension dim) { - return dim == type::TextureDimension::k2d || dim == type::TextureDimension::k2dArray || - dim == type::TextureDimension::kCube || dim == type::TextureDimension::kCubeArray; -} - -} // namespace - -DepthTexture::DepthTexture(ProgramID pid, NodeID nid, const Source& src, type::TextureDimension d) - : Base(pid, nid, src, d) { - TINT_ASSERT(AST, IsValidDepthDimension(dim)); -} - -DepthTexture::DepthTexture(DepthTexture&&) = default; - -DepthTexture::~DepthTexture() = default; - -std::string DepthTexture::FriendlyName(const SymbolTable&) const { - std::ostringstream out; - out << "texture_depth_" << dim; - return out.str(); -} - -const DepthTexture* DepthTexture::Clone(CloneContext* ctx) const { - auto src = ctx->Clone(source); - return ctx->dst->create(src, dim); -} - -} // namespace tint::ast diff --git a/src/tint/ast/depth_texture.h b/src/tint/ast/depth_texture.h deleted file mode 100644 index e687612413..0000000000 --- a/src/tint/ast/depth_texture.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2020 The Tint Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SRC_TINT_AST_DEPTH_TEXTURE_H_ -#define SRC_TINT_AST_DEPTH_TEXTURE_H_ - -#include - -#include "src/tint/ast/texture.h" -#include "src/tint/type/texture_dimension.h" - -namespace tint::ast { - -/// A depth texture type. -class DepthTexture final : public Castable { - public: - /// Constructor - /// @param pid the identifier of the program that owns this node - /// @param nid the unique node identifier - /// @param src the source of this node - /// @param dim the dimensionality of the texture - DepthTexture(ProgramID pid, NodeID nid, const Source& src, type::TextureDimension dim); - /// Move constructor - DepthTexture(DepthTexture&&); - ~DepthTexture() override; - - /// @param symbols the program's symbol table - /// @returns the name for this type that closely resembles how it would be - /// declared in WGSL. - std::string FriendlyName(const SymbolTable& symbols) const override; - - /// Clones this type and all transitive types using the `CloneContext` `ctx`. - /// @param ctx the clone context - /// @return the newly cloned type - const DepthTexture* Clone(CloneContext* ctx) const override; -}; - -} // namespace tint::ast - -#endif // SRC_TINT_AST_DEPTH_TEXTURE_H_ diff --git a/src/tint/ast/depth_texture_test.cc b/src/tint/ast/depth_texture_test.cc deleted file mode 100644 index e2a7b0ef5d..0000000000 --- a/src/tint/ast/depth_texture_test.cc +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2020 The Tint Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "src/tint/ast/depth_texture.h" - -#include "src/tint/ast/test_helper.h" - -namespace tint::ast { -namespace { - -using AstDepthTextureTest = TestHelper; - -TEST_F(AstDepthTextureTest, IsTexture) { - Texture* ty = create(type::TextureDimension::kCube); - EXPECT_TRUE(ty->Is()); - EXPECT_FALSE(ty->Is()); - EXPECT_FALSE(ty->Is()); -} - -TEST_F(AstDepthTextureTest, Dim) { - auto* d = create(type::TextureDimension::kCube); - EXPECT_EQ(d->dim, type::TextureDimension::kCube); -} - -TEST_F(AstDepthTextureTest, FriendlyName) { - auto* d = create(type::TextureDimension::kCube); - EXPECT_EQ(d->FriendlyName(Symbols()), "texture_depth_cube"); -} - -} // namespace -} // namespace tint::ast diff --git a/src/tint/ast/multisampled_texture_test.cc b/src/tint/ast/multisampled_texture_test.cc index adcb79088d..2b81a0a29d 100644 --- a/src/tint/ast/multisampled_texture_test.cc +++ b/src/tint/ast/multisampled_texture_test.cc @@ -16,7 +16,6 @@ #include "src/tint/ast/alias.h" #include "src/tint/ast/array.h" -#include "src/tint/ast/depth_texture.h" #include "src/tint/ast/matrix.h" #include "src/tint/ast/pointer.h" #include "src/tint/ast/sampled_texture.h" @@ -34,7 +33,6 @@ using AstMultisampledTextureTest = TestHelper; TEST_F(AstMultisampledTextureTest, IsTexture) { Texture* t = create(type::TextureDimension::kCube, ty.f32()); - EXPECT_FALSE(t->Is()); EXPECT_TRUE(t->Is()); EXPECT_FALSE(t->Is()); EXPECT_FALSE(t->Is()); diff --git a/src/tint/ast/sampled_texture_test.cc b/src/tint/ast/sampled_texture_test.cc index f377d68c23..506b259e3d 100644 --- a/src/tint/ast/sampled_texture_test.cc +++ b/src/tint/ast/sampled_texture_test.cc @@ -23,7 +23,6 @@ using AstSampledTextureTest = TestHelper; TEST_F(AstSampledTextureTest, IsTexture) { Texture* t = create(type::TextureDimension::kCube, ty.f32()); - EXPECT_FALSE(t->Is()); EXPECT_TRUE(t->Is()); EXPECT_FALSE(t->Is()); } diff --git a/src/tint/ast/storage_texture_test.cc b/src/tint/ast/storage_texture_test.cc index 1183fd9996..e03c4b328f 100644 --- a/src/tint/ast/storage_texture_test.cc +++ b/src/tint/ast/storage_texture_test.cc @@ -26,7 +26,6 @@ TEST_F(AstStorageTextureTest, IsTexture) { Texture* ty = create(type::TextureDimension::k2dArray, type::TexelFormat::kRgba32Float, subtype, type::Access::kRead); - EXPECT_FALSE(ty->Is()); EXPECT_FALSE(ty->Is()); EXPECT_TRUE(ty->Is()); } diff --git a/src/tint/intrinsics.def b/src/tint/intrinsics.def index 633aeb4283..db589a1961 100644 --- a/src/tint/intrinsics.def +++ b/src/tint/intrinsics.def @@ -170,6 +170,12 @@ enum builtin_type { // https://www.w3.org/TR/WGSL/#sampler-type sampler sampler_comparison + // https://www.w3.org/TR/WGSL/#texture-depth + texture_depth_2d + texture_depth_2d_array + texture_depth_cube + texture_depth_cube_array + texture_depth_multisampled_2d // https://www.w3.org/TR/WGSL/#external-texture-type texture_external } diff --git a/src/tint/program_builder.h b/src/tint/program_builder.h index 77995f3be5..c24dc25cb6 100644 --- a/src/tint/program_builder.h +++ b/src/tint/program_builder.h @@ -38,8 +38,6 @@ #include "src/tint/ast/const.h" #include "src/tint/ast/const_assert.h" #include "src/tint/ast/continue_statement.h" -#include "src/tint/ast/depth_multisampled_texture.h" -#include "src/tint/ast/depth_texture.h" #include "src/tint/ast/diagnostic_attribute.h" #include "src/tint/ast/diagnostic_control.h" #include "src/tint/ast/diagnostic_directive.h" @@ -980,33 +978,50 @@ class ProgramBuilder { } /// @param dims the dimensionality of the texture - /// @returns the depth texture - const ast::DepthTexture* depth_texture(type::TextureDimension dims) const { - return builder->create(dims); + /// @returns the depth texture typename + const ast::TypeName* depth_texture(type::TextureDimension dims) const { + return depth_texture(builder->source_, dims); } /// @param source the Source of the node /// @param dims the dimensionality of the texture - /// @returns the depth texture - const ast::DepthTexture* depth_texture(const Source& source, - type::TextureDimension dims) const { - return builder->create(source, dims); + /// @returns the depth texture typename + const ast::TypeName* depth_texture(const Source& source, + type::TextureDimension dims) const { + switch (dims) { + case type::TextureDimension::k2d: + return (*this)(source, "texture_depth_2d"); + case type::TextureDimension::k2dArray: + return (*this)(source, "texture_depth_2d_array"); + case type::TextureDimension::kCube: + return (*this)(source, "texture_depth_cube"); + case type::TextureDimension::kCubeArray: + return (*this)(source, "texture_depth_cube_array"); + default: + break; + } + TINT_ICE(ProgramBuilder, builder->Diagnostics()) + << "invalid depth_texture dimensions: " << dims; + return nullptr; } /// @param dims the dimensionality of the texture - /// @returns the multisampled depth texture - const ast::DepthMultisampledTexture* depth_multisampled_texture( - type::TextureDimension dims) const { - return builder->create(dims); + /// @returns the multisampled depth texture typename + const ast::TypeName* depth_multisampled_texture(type::TextureDimension dims) const { + return depth_multisampled_texture(builder->source_, dims); } /// @param source the Source of the node /// @param dims the dimensionality of the texture - /// @returns the multisampled depth texture - const ast::DepthMultisampledTexture* depth_multisampled_texture( - const Source& source, - type::TextureDimension dims) const { - return builder->create(source, dims); + /// @returns the multisampled depth texture typename + const ast::TypeName* depth_multisampled_texture(const Source& source, + type::TextureDimension dims) const { + if (dims == type::TextureDimension::k2d) { + return (*this)(source, "texture_depth_multisampled_2d"); + } + TINT_ICE(ProgramBuilder, builder->Diagnostics()) + << "invalid depth_multisampled_texture dimensions: " << dims; + return nullptr; } /// @param dims the dimensionality of the texture diff --git a/src/tint/reader/wgsl/parser_impl_depth_texture_test.cc b/src/tint/reader/wgsl/parser_impl_depth_texture_test.cc index dc8ddbf3bd..e04bed3305 100644 --- a/src/tint/reader/wgsl/parser_impl_depth_texture_test.cc +++ b/src/tint/reader/wgsl/parser_impl_depth_texture_test.cc @@ -33,9 +33,8 @@ TEST_F(ParserImplTest, DepthTextureType_2d) { EXPECT_TRUE(t.matched); EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); - ASSERT_TRUE(t->Is()); - ASSERT_TRUE(t->Is()); - EXPECT_EQ(t->As()->dim, type::TextureDimension::k2d); + EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As()->name->symbol), + "texture_depth_2d"); EXPECT_FALSE(p->has_error()); EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 17u}})); } @@ -46,9 +45,8 @@ TEST_F(ParserImplTest, DepthTextureType_2dArray) { EXPECT_TRUE(t.matched); EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); - ASSERT_TRUE(t->Is()); - ASSERT_TRUE(t->Is()); - EXPECT_EQ(t->As()->dim, type::TextureDimension::k2dArray); + EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As()->name->symbol), + "texture_depth_2d_array"); EXPECT_FALSE(p->has_error()); EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 23u}})); } @@ -59,9 +57,8 @@ TEST_F(ParserImplTest, DepthTextureType_Cube) { EXPECT_TRUE(t.matched); EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); - ASSERT_TRUE(t->Is()); - ASSERT_TRUE(t->Is()); - EXPECT_EQ(t->As()->dim, type::TextureDimension::kCube); + EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As()->name->symbol), + "texture_depth_cube"); EXPECT_FALSE(p->has_error()); EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 19u}})); } @@ -72,9 +69,8 @@ TEST_F(ParserImplTest, DepthTextureType_CubeArray) { EXPECT_TRUE(t.matched); EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); - ASSERT_TRUE(t->Is()); - ASSERT_TRUE(t->Is()); - EXPECT_EQ(t->As()->dim, type::TextureDimension::kCubeArray); + EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As()->name->symbol), + "texture_depth_cube_array"); EXPECT_FALSE(p->has_error()); EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 25u}})); } @@ -85,9 +81,8 @@ TEST_F(ParserImplTest, DepthTextureType_Multisampled2d) { EXPECT_TRUE(t.matched); EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); - ASSERT_TRUE(t->Is()); - ASSERT_TRUE(t->Is()); - EXPECT_EQ(t->As()->dim, type::TextureDimension::k2d); + EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As()->name->symbol), + "texture_depth_multisampled_2d"); EXPECT_FALSE(p->has_error()); EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 30u}})); } diff --git a/src/tint/reader/wgsl/parser_impl_texture_sampler_test.cc b/src/tint/reader/wgsl/parser_impl_texture_sampler_test.cc index 90a2516c73..29d62c58b6 100644 --- a/src/tint/reader/wgsl/parser_impl_texture_sampler_test.cc +++ b/src/tint/reader/wgsl/parser_impl_texture_sampler_test.cc @@ -61,9 +61,8 @@ TEST_F(ParserImplTest, TextureSamplerTypes_DepthTexture) { EXPECT_TRUE(t.matched); EXPECT_FALSE(t.errored); ASSERT_NE(t.value, nullptr); - ASSERT_TRUE(t->Is()); - ASSERT_TRUE(t->Is()); - EXPECT_EQ(t->As()->dim, type::TextureDimension::k2d); + EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As()->name->symbol), + "texture_depth_2d"); EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 17u}})); } diff --git a/src/tint/resolver/dependency_graph.cc b/src/tint/resolver/dependency_graph.cc index 53f928bb8b..9358335a6e 100644 --- a/src/tint/resolver/dependency_graph.cc +++ b/src/tint/resolver/dependency_graph.cc @@ -29,8 +29,6 @@ #include "src/tint/ast/compound_assignment_statement.h" #include "src/tint/ast/const.h" #include "src/tint/ast/continue_statement.h" -#include "src/tint/ast/depth_multisampled_texture.h" -#include "src/tint/ast/depth_texture.h" #include "src/tint/ast/diagnostic_attribute.h" #include "src/tint/ast/discard_statement.h" #include "src/tint/ast/for_loop_statement.h" @@ -403,11 +401,7 @@ class DependencyScanner { [&](const ast::StorageTexture* tex) { // TraverseType(tex->type); }, - [&](Default) { - if (!ty->IsAnyOf()) { - UnhandledNode(diagnostics_, ty); - } - }); + [&](Default) { UnhandledNode(diagnostics_, ty); }); } /// Traverses the attribute list, performing symbol resolution and diff --git a/src/tint/resolver/resolver.cc b/src/tint/resolver/resolver.cc index 39f63e209f..9d6f54c9b6 100644 --- a/src/tint/resolver/resolver.cc +++ b/src/tint/resolver/resolver.cc @@ -28,7 +28,6 @@ #include "src/tint/ast/break_statement.h" #include "src/tint/ast/call_statement.h" #include "src/tint/ast/continue_statement.h" -#include "src/tint/ast/depth_texture.h" #include "src/tint/ast/disable_validation_attribute.h" #include "src/tint/ast/discard_statement.h" #include "src/tint/ast/for_loop_statement.h" @@ -309,10 +308,6 @@ type::Type* Resolver::Type(const ast::Type* ty) { } return nullptr; }, - [&](const ast::DepthTexture* t) { return builder_->create(t->dim); }, - [&](const ast::DepthMultisampledTexture* t) { - return builder_->create(t->dim); - }, [&](const ast::StorageTexture* t) -> type::StorageTexture* { if (auto* el = Type(t->type)) { if (!validator_.StorageTexture(t)) { @@ -2527,6 +2522,16 @@ type::Type* Resolver::BuiltinType(type::Builtin builtin_ty, const ast::Identifie return builder_->create(type::SamplerKind::kSampler); case type::Builtin::kSamplerComparison: return builder_->create(type::SamplerKind::kComparisonSampler); + case type::Builtin::kTextureDepth2D: + return builder_->create(type::TextureDimension::k2d); + case type::Builtin::kTextureDepth2DArray: + return builder_->create(type::TextureDimension::k2dArray); + case type::Builtin::kTextureDepthCube: + return builder_->create(type::TextureDimension::kCube); + case type::Builtin::kTextureDepthCubeArray: + return builder_->create(type::TextureDimension::kCubeArray); + case type::Builtin::kTextureDepthMultisampled2D: + return builder_->create(type::TextureDimension::k2d); case type::Builtin::kTextureExternal: return builder_->create(); case type::Builtin::kUndefined: diff --git a/src/tint/resolver/validator.cc b/src/tint/resolver/validator.cc index 0da542d807..24a2bd7b87 100644 --- a/src/tint/resolver/validator.cc +++ b/src/tint/resolver/validator.cc @@ -25,7 +25,6 @@ #include "src/tint/ast/break_statement.h" #include "src/tint/ast/call_statement.h" #include "src/tint/ast/continue_statement.h" -#include "src/tint/ast/depth_texture.h" #include "src/tint/ast/disable_validation_attribute.h" #include "src/tint/ast/discard_statement.h" #include "src/tint/ast/for_loop_statement.h" diff --git a/src/tint/transform/transform.cc b/src/tint/transform/transform.cc index 2947b90ac3..1b5b345db4 100644 --- a/src/tint/transform/transform.cc +++ b/src/tint/transform/transform.cc @@ -147,10 +147,10 @@ const ast::Type* Transform::CreateASTTypeFor(CloneContext& ctx, const type::Type return ctx.dst->create(CreateASTTypeFor(ctx, a->Type())); } if (auto* t = ty->As()) { - return ctx.dst->create(t->dim()); + return ctx.dst->ty.depth_texture(t->dim()); } if (auto* t = ty->As()) { - return ctx.dst->create(t->dim()); + return ctx.dst->ty.depth_multisampled_texture(t->dim()); } if (ty->Is()) { return ctx.dst->ty.external_texture(); diff --git a/src/tint/type/builtin.cc b/src/tint/type/builtin.cc index 595a510d6c..e8bf4675bb 100644 --- a/src/tint/type/builtin.cc +++ b/src/tint/type/builtin.cc @@ -100,6 +100,21 @@ Builtin ParseBuiltin(std::string_view str) { if (str == "sampler_comparison") { return Builtin::kSamplerComparison; } + if (str == "texture_depth_2d") { + return Builtin::kTextureDepth2D; + } + if (str == "texture_depth_2d_array") { + return Builtin::kTextureDepth2DArray; + } + if (str == "texture_depth_cube") { + return Builtin::kTextureDepthCube; + } + if (str == "texture_depth_cube_array") { + return Builtin::kTextureDepthCubeArray; + } + if (str == "texture_depth_multisampled_2d") { + return Builtin::kTextureDepthMultisampled2D; + } if (str == "texture_external") { return Builtin::kTextureExternal; } @@ -197,6 +212,16 @@ std::ostream& operator<<(std::ostream& out, Builtin value) { return out << "sampler"; case Builtin::kSamplerComparison: return out << "sampler_comparison"; + case Builtin::kTextureDepth2D: + return out << "texture_depth_2d"; + case Builtin::kTextureDepth2DArray: + return out << "texture_depth_2d_array"; + case Builtin::kTextureDepthCube: + return out << "texture_depth_cube"; + case Builtin::kTextureDepthCubeArray: + return out << "texture_depth_cube_array"; + case Builtin::kTextureDepthMultisampled2D: + return out << "texture_depth_multisampled_2d"; case Builtin::kTextureExternal: return out << "texture_external"; case Builtin::kU32: diff --git a/src/tint/type/builtin.h b/src/tint/type/builtin.h index a996a72968..8b73461f33 100644 --- a/src/tint/type/builtin.h +++ b/src/tint/type/builtin.h @@ -54,6 +54,11 @@ enum class Builtin { kMat4X4H, kSampler, kSamplerComparison, + kTextureDepth2D, + kTextureDepth2DArray, + kTextureDepthCube, + kTextureDepthCubeArray, + kTextureDepthMultisampled2D, kTextureExternal, kU32, kVec2F, @@ -105,6 +110,11 @@ constexpr const char* kBuiltinStrings[] = { "mat4x4h", "sampler", "sampler_comparison", + "texture_depth_2d", + "texture_depth_2d_array", + "texture_depth_cube", + "texture_depth_cube_array", + "texture_depth_multisampled_2d", "texture_external", "u32", "vec2f", diff --git a/src/tint/type/builtin_bench.cc b/src/tint/type/builtin_bench.cc index 123012dff5..31fa29aa3f 100644 --- a/src/tint/type/builtin_bench.cc +++ b/src/tint/type/builtin_bench.cc @@ -199,104 +199,139 @@ void BuiltinParser(::benchmark::State& state) { "samplpLL_comparisI", "smplerfomparison", "sYmpURDr_comprison", - "texturh_external", - "teqtureuIIextnal", - "texture_externaH", + "texturh_depth_2d", + "teqtureuIIdep_2d", + "texture_depth_2H", + "texture_depth_2d", + "texre_depth_2Qvv", + "te66ue_depeh_2d", + "textue_d7pOh_2d", + "textureDDde0th_255_array", + "texture_IIepth_Hd_array", + "txture_depth_2d_array", + "texture_depth_2d_array", + "txture_depth_2r_array", + "tlxture_depth_2d_array", + "ttexturGdeth_2d_arrJJy", + "yexture_depth_cbe", + "texturedepth_cube", + "texture_IIeptBB_cube", + "texture_depth_cube", + "textKre_depth_c83TTe", + "texSnnYUUure_depth_cube", + "textuxe_5eptCCdZube", + "texturekkdepth_cube_arraq", + "exture_dppt00iicube5array", + "texIIurenndepth_cube_array", + "texture_depth_cube_array", + "ccextue_depth_cube_aKWa", + "texture_epth_cube_raKK", + "texture_depth_cube_a66ray", + "textEPPeKKdept_multisampled_2", + "texture_depth_mutisampledxx2d", + "texture_depth_qultisampled_2d", + "texture_depth_multisampled_2d", + "textureyydMMptr_mutisampleSS_2d", + "txture_depth_muluisampled2d", + "texSure_ept_mutisampled_2d", + "textu5e_externFFl", + "text44rrr_exterzal", + "texue_eWWtenal", "texture_external", - "texre_externaQvv", - "te66ue_external", - "textue_e7tOrnal", - "550DD", - "II3H", - "u3", + "textuXe_ZZxtJJrnal", + "textuPPe_eternal", + "texturc_external", + "ull62", + "93yy", + "u3KK", "u32", - "r2", - "u3l", - "uGt", - "ey2f", + "x_", + "K", + "kVz", + "veKSf", "vc2f", - "IIeBB2f", + "ec2VV", "vec2f", - "TTec338", - "veUUSS2nnd", - "vZx5CC", - "kkec2q", - "v005ih", - "vnIIc2h", - "vec2h", - "cceW", - "cKK", - "vec66h", - "vePPK", - "vexxi", - "qec2i", - "vec2i", - "veSyMMr", - "v2u", - "ec", - "5eFF2u", - "rrecz44", - "vWW", - "vec2u", - "XJecCZZ", - "vePP2", - "vec2c", - "ve6ll3f", - "vcyy99", - "Jec3KK", - "vec3f", - "_ex3", - "Ky3", - "zek3f", - "veKSh", - "vc3h", - "ec3VV", - "vec3h", - "IAAc3h", + "IAAc2f", "jbR", "veY4", - "ec3i", + "ec2h", "vc911", - "mmcci", - "vec3i", - "vJJci", + "mmcch", + "vec2h", + "vJJch", "lDDcUfC", - "vec3g", + "vec2g", "CCe", - "ec3u", - "vIc__u", - "vec3u", + "ec2i", + "vIc__i", + "vec2i", "ePPtt", - "v3dc3u", - "vcyyu", - "u4", - "v03nnf", + "v3dc2i", + "vcyyi", + "u2", + "v03nnu", "Cuuecnv", - "vec4f", - "vX4ll", - "vocppf", - "vwwc4", + "vec2u", + "vX2ll", + "vocppu", + "vwwc2", "veuug", "vaac", - "TRZccch", - "vec4h", - "vTc4O8", - "vem04h", - "meBB4h", - "Mpp4", - "OOe4i", - "veG4G", - "vec4i", - "11eHH4i", + "TRZcccf", + "vec3f", + "vTc3O8", + "vem03f", + "meBB3f", + "Mpp3", + "OOe3h", + "veG3G", + "vec3h", + "11eHH3h", "veFFe6", - "ve4", - "vKii4l", - "ec4u", - "v994IIv", + "ve3", + "vKii3l", + "ec3i", + "v993IIv", + "vec3i", + "veci", + "vechi", + "vczllPi", + "u", + "vffqq3", + "vJdd3u", + "vec3u", + "vecXX", + "ve32", + "Nyyc3u", + "vO4", + "PEruZ", + "vlc2edd", + "vec4f", + "ec9f", + "ve1II", + "veb4f", + "vi7", + "oec4ii", + "ec4", + "vec4h", + "veci", + "22ec", + "vGc4C", + "ffec48", + "c4i", + "JJecSSi", + "vec4i", + "94i", + "vbbJJ4TT", + "e66i", + "u664u", + "vW4u", + "v4u", "vec4u", "vecu", - "vechu", - "vczllPu", + "rec4u", + "2ec4B", }; for (auto _ : state) { for (auto* str : kStrings) { diff --git a/src/tint/type/builtin_test.cc b/src/tint/type/builtin_test.cc index 18b5cc73dc..97f3164fb0 100644 --- a/src/tint/type/builtin_test.cc +++ b/src/tint/type/builtin_test.cc @@ -67,6 +67,11 @@ static constexpr Case kValidCases[] = { {"mat4x4h", Builtin::kMat4X4H}, {"sampler", Builtin::kSampler}, {"sampler_comparison", Builtin::kSamplerComparison}, + {"texture_depth_2d", Builtin::kTextureDepth2D}, + {"texture_depth_2d_array", Builtin::kTextureDepth2DArray}, + {"texture_depth_cube", Builtin::kTextureDepthCube}, + {"texture_depth_cube_array", Builtin::kTextureDepthCubeArray}, + {"texture_depth_multisampled_2d", Builtin::kTextureDepthMultisampled2D}, {"texture_external", Builtin::kTextureExternal}, {"u32", Builtin::kU32}, {"vec2f", Builtin::kVec2F}, @@ -156,48 +161,63 @@ static constexpr Case kInvalidCases[] = { {"sWWpleq_compari44on", Builtin::kUndefined}, {"sampler_compaisoOO", Builtin::kUndefined}, {"smpeoo_coYparison", Builtin::kUndefined}, - {"eture_eternal", Builtin::kUndefined}, - {"texture_exeFnal", Builtin::kUndefined}, - {"textureewternal", Builtin::kUndefined}, - {"Gf", Builtin::kUndefined}, - {"KK3q", Builtin::kUndefined}, - {"umm2", Builtin::kUndefined}, - {"vecf", Builtin::kUndefined}, - {"qc2f", Builtin::kUndefined}, - {"vecbb", Builtin::kUndefined}, - {"iic2", Builtin::kUndefined}, - {"vqOOh", Builtin::kUndefined}, - {"vevvTTh", Builtin::kUndefined}, - {"veFF2i", Builtin::kUndefined}, - {"00PfQ", Builtin::kUndefined}, - {"vec2P", Builtin::kUndefined}, - {"vec77s", Builtin::kUndefined}, - {"vecbbCu", Builtin::kUndefined}, - {"vecXXu", Builtin::kUndefined}, - {"CCOOec3", Builtin::kUndefined}, - {"vs3u", Builtin::kUndefined}, - {"Xec3f", Builtin::kUndefined}, - {"ve3h", Builtin::kUndefined}, - {"qq3", Builtin::kUndefined}, - {"vec322", Builtin::kUndefined}, + {"eture_dpth_2d", Builtin::kUndefined}, + {"texture_detF_2d", Builtin::kUndefined}, + {"texturedwpth_2d", Builtin::kUndefined}, + {"teKuffe_Gepth_2d_arry", Builtin::kUndefined}, + {"texture_dKKptq_2d_array", Builtin::kUndefined}, + {"texture_depmmh32d_arraF", Builtin::kUndefined}, + {"textur_depth_cube", Builtin::kUndefined}, + {"texure_depqh_cube", Builtin::kUndefined}, + {"texture_debth_cube", Builtin::kUndefined}, + {"txture_deptii_cube_arry", Builtin::kUndefined}, + {"textureqdepth_OOube_arry", Builtin::kUndefined}, + {"texture_deTvvth_cube_array", Builtin::kUndefined}, + {"texture_depth_multiFFampled_2d", Builtin::kUndefined}, + {"textue_depthPmfl00isampled_Qd", Builtin::kUndefined}, + {"textuPe_depth_multisampled_2d", Builtin::kUndefined}, + {"texture_exernss77", Builtin::kUndefined}, + {"texture_bbxternRRl", Builtin::kUndefined}, + {"textureXXexternal", Builtin::kUndefined}, + {"qOOO2", Builtin::kUndefined}, + {"us", Builtin::kUndefined}, + {"u3X", Builtin::kUndefined}, + {"ve2f", Builtin::kUndefined}, + {"qq2", Builtin::kUndefined}, + {"vec222", Builtin::kUndefined}, {"vezzXy", Builtin::kUndefined}, {"ieVVP", Builtin::kUndefined}, - {"venCi", Builtin::kUndefined}, - {"vHc3Aq", Builtin::kUndefined}, - {"ve3u", Builtin::kUndefined}, + {"venCh", Builtin::kUndefined}, + {"vHc2Aq", Builtin::kUndefined}, + {"ve2i", Builtin::kUndefined}, {"vefK", Builtin::kUndefined}, - {"vgg4", Builtin::kUndefined}, - {"vecf", Builtin::kUndefined}, - {"4TNc4f", Builtin::kUndefined}, + {"vgg2", Builtin::kUndefined}, + {"vecu", Builtin::kUndefined}, + {"4TNc2u", Builtin::kUndefined}, {"ppec7l", Builtin::kUndefined}, - {"zNe4h", Builtin::kUndefined}, - {"uXXb4h", Builtin::kUndefined}, - {"vec4", Builtin::kUndefined}, - {"884K", Builtin::kUndefined}, - {"vq9i", Builtin::kUndefined}, - {"vec411", Builtin::kUndefined}, - {"22ciiu", Builtin::kUndefined}, - {"ec77u", Builtin::kUndefined}, + {"zNe3f", Builtin::kUndefined}, + {"uXXb3f", Builtin::kUndefined}, + {"vec3", Builtin::kUndefined}, + {"883K", Builtin::kUndefined}, + {"vq9h", Builtin::kUndefined}, + {"vec311", Builtin::kUndefined}, + {"22ciii", Builtin::kUndefined}, + {"ec77i", Builtin::kUndefined}, + {"NN23u", Builtin::kUndefined}, + {"vVVc3u", Builtin::kUndefined}, + {"WW11w3u", Builtin::kUndefined}, + {"vcwwf", Builtin::kUndefined}, + {"vDc4f", Builtin::kUndefined}, + {"vecK", Builtin::kUndefined}, + {"f11r4PP", Builtin::kUndefined}, + {"ve4h", Builtin::kUndefined}, + {"vec4YY", Builtin::kUndefined}, + {"vkktHH", Builtin::kUndefined}, + {"rrec4i", Builtin::kUndefined}, + {"vWWssi", Builtin::kUndefined}, + {"veYu", Builtin::kUndefined}, + {"eq4f", Builtin::kUndefined}, + {"u22ec4u", Builtin::kUndefined}, }; using BuiltinParseTest = testing::TestWithParam; diff --git a/src/tint/writer/wgsl/generator_impl.cc b/src/tint/writer/wgsl/generator_impl.cc index 353e200b71..d99ecde15a 100644 --- a/src/tint/writer/wgsl/generator_impl.cc +++ b/src/tint/writer/wgsl/generator_impl.cc @@ -21,7 +21,6 @@ #include "src/tint/ast/atomic.h" #include "src/tint/ast/bool_literal_expression.h" #include "src/tint/ast/call_statement.h" -#include "src/tint/ast/depth_texture.h" #include "src/tint/ast/float_literal_expression.h" #include "src/tint/ast/id_attribute.h" #include "src/tint/ast/internal_attribute.h" @@ -455,14 +454,6 @@ bool GeneratorImpl::EmitType(std::ostream& out, const ast::Type* ty) { out << "texture_"; bool ok = Switch( texture, - [&](const ast::DepthTexture*) { // - out << "depth_"; - return true; - }, - [&](const ast::DepthMultisampledTexture*) { // - out << "depth_multisampled_"; - return true; - }, [&](const ast::SampledTexture*) { // /* nothing to emit */ return true;