[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>()) {