[tint][core] Make `texel_buffer` type a handle resource

This ensures that the type manager does not zero-initialize a
`texel_buffer`, avoiding a `TINT_ICE_ON_NO_MATCH` error.

Bug: 443208995
Change-Id: I737e9bc8a34daac6ec24fe53c8a45f8b6f06ffa6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/260659
Reviewed-by: Diego Rodrigues <diejorarr@gmail.com>
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: Diego Rodrigues <diejorarr@gmail.com>
diff --git a/src/tint/lang/core/ir/validator_value_test.cc b/src/tint/lang/core/ir/validator_value_test.cc
index f431f2d..f6804e4 100644
--- a/src/tint/lang/core/ir/validator_value_test.cc
+++ b/src/tint/lang/core/ir/validator_value_test.cc
@@ -746,6 +746,23 @@
 )")) << res.Failure();
 }
 
+TEST_F(IR_ValidatorTest, Var_TexelBuffer_NonHandleAddressSpace) {
+    auto* v =
+        b.Var(ty.ptr(AddressSpace::kPrivate,
+                     ty.texel_buffer(core::TexelFormat::kRgba32Float, core::Access::kRead), read));
+    mod.root_block->Append(v);
+
+    auto res = ir::Validate(mod);
+    ASSERT_NE(res, Success);
+    EXPECT_THAT(
+        res.Failure().reason,
+        testing::HasSubstr(
+            R"(:2:3 error: var: handle types can only be declared in the 'handle' address space
+  %1:ptr<private, texel_buffer<rgba32float, read>, read> = var undef
+  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+)")) << res.Failure();
+}
+
 TEST_F(IR_ValidatorTest, Var_ResourceBinding_NonHandleAddressSpace) {
     auto* v = b.Var(ty.ptr(AddressSpace::kPrivate, ty.resource_binding(), read));
     mod.root_block->Append(v);
diff --git a/src/tint/lang/core/type/texel_buffer_test.cc b/src/tint/lang/core/type/texel_buffer_test.cc
index f859df9..e844209 100644
--- a/src/tint/lang/core/type/texel_buffer_test.cc
+++ b/src/tint/lang/core/type/texel_buffer_test.cc
@@ -85,6 +85,12 @@
     EXPECT_TRUE(a->Type()->Is<F32>());
 }
 
+TEST_F(TexelBufferTest, IsHandle) {
+    Manager ty;
+    auto* a = ty.texel_buffer(core::TexelFormat::kRgba32Float, core::Access::kRead);
+    EXPECT_TRUE(a->IsHandle());
+}
+
 TEST_F(TexelBufferTest, Clone) {
     Manager ty;
     auto* a = ty.texel_buffer(core::TexelFormat::kRgba32Float, core::Access::kReadWrite);
diff --git a/src/tint/lang/core/type/type.cc b/src/tint/lang/core/type/type.cc
index 839748a..dc9b182 100644
--- a/src/tint/lang/core/type/type.cc
+++ b/src/tint/lang/core/type/type.cc
@@ -42,6 +42,7 @@
 #include "src/tint/lang/core/type/resource_binding.h"
 #include "src/tint/lang/core/type/sampler.h"
 #include "src/tint/lang/core/type/struct.h"
+#include "src/tint/lang/core/type/texel_buffer.h"
 #include "src/tint/lang/core/type/texture.h"
 #include "src/tint/lang/core/type/u32.h"
 #include "src/tint/lang/core/type/u64.h"
@@ -167,7 +168,7 @@
 }
 
 bool Type::IsHandle() const {
-    if (IsAnyOf<Sampler, Texture, ResourceBinding>()) {
+    if (IsAnyOf<Sampler, TexelBuffer, Texture, ResourceBinding>()) {
         return true;
     }
     if (auto* binding_array = As<BindingArray>()) {