[spirv-writer] Generate sampler type
Change-Id: I587cf7430711d8009becf76f7630091f32ed3490
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/27840
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 8e68e83..193584c 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -1927,6 +1927,8 @@
if (!GenerateTextureType(type->AsTexture(), result)) {
return 0;
}
+ } else if (type->IsSampler()) {
+ push_type(spv::Op::OpTypeSampler, {result});
} else {
error_ = "unable to convert type: " + type->type_name();
return 0;
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 769843f..48a5652 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -28,6 +28,7 @@
#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/sampler_type.h"
#include "src/ast/type/storage_texture_type.h"
#include "src/ast/type/struct_type.h"
#include "src/ast/type/texture_type.h"
@@ -1162,6 +1163,30 @@
ast::type::ImageFormat::kR8Snorm,
ast::type::ImageFormat::kR8Unorm));
+TEST_F(BuilderTest_Type, Sampler) {
+ ast::type::SamplerType sampler(ast::type::SamplerKind::kSampler);
+
+ ast::Module mod;
+ Builder b(&mod);
+ EXPECT_EQ(b.GenerateTypeIfNeeded(&sampler), 1u);
+ EXPECT_EQ(b.GenerateTypeIfNeeded(&sampler), 1u);
+ ASSERT_FALSE(b.has_error()) << b.error();
+
+ EXPECT_EQ(DumpInstructions(b.types()), "%1 = OpTypeSampler\n");
+}
+
+TEST_F(BuilderTest_Type, ComparisonSampler) {
+ ast::type::SamplerType sampler(ast::type::SamplerKind::kComparisonSampler);
+
+ ast::Module mod;
+ Builder b(&mod);
+ EXPECT_EQ(b.GenerateTypeIfNeeded(&sampler), 1u);
+ EXPECT_EQ(b.GenerateTypeIfNeeded(&sampler), 1u);
+ ASSERT_FALSE(b.has_error()) << b.error();
+
+ EXPECT_EQ(DumpInstructions(b.types()), "%1 = OpTypeSampler\n");
+}
+
} // namespace
} // namespace spirv
} // namespace writer