[ir][spirv-writer] Handle textureNumSamples

This just maps to OpImageQuerySamples without any changes.

Bug: tint:1906
Change-Id: I38a90687f47fdb256ec2785be7b6aa3328a8ce95
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/142025
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Auto-Submit: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir.cc b/src/tint/writer/spirv/ir/generator_impl_ir.cc
index 2982f33..96596d07 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir.cc
@@ -1335,6 +1335,10 @@
             module_.PushCapability(SpvCapabilityImageQuery);
             op = spv::Op::OpImageQueryLevels;
             break;
+        case builtin::Function::kTextureNumSamples:
+            module_.PushCapability(SpvCapabilityImageQuery);
+            op = spv::Op::OpImageQuerySamples;
+            break;
         case builtin::Function::kTranspose:
             op = spv::Op::OpTranspose;
             break;
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_texture_builtin_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_texture_builtin_test.cc
index 13e49f4..9b27b6f 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_texture_builtin_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_texture_builtin_test.cc
@@ -1843,5 +1843,33 @@
                              }),
                          PrintCase);
 
+////////////////////////////////////////////////////////////////
+//// textureNumSamples
+////////////////////////////////////////////////////////////////
+using TextureNumSamples = TextureBuiltinTest;
+TEST_P(TextureNumSamples, Emit) {
+    Run(builtin::Function::kTextureNumSamples, kNoSampler);
+}
+INSTANTIATE_TEST_SUITE_P(SpvGeneratorImplTest,
+                         TextureNumSamples,
+                         testing::Values(
+                             TextureBuiltinTestCase{
+                                 kMultisampledTexture,
+                                 type::TextureDimension::k2d,
+                                 /* texel type */ kF32,
+                                 {},
+                                 {"result", 1, kU32},
+                                 {"%result = OpImageQuerySamples %uint %t"},
+                             },
+                             TextureBuiltinTestCase{
+                                 kDepthMultisampledTexture,
+                                 type::TextureDimension::k2d,
+                                 /* texel type */ kF32,
+                                 {},
+                                 {"result", 1, kU32},
+                                 {"%result = OpImageQuerySamples %uint %t"},
+                             }),
+                         PrintCase);
+
 }  // namespace
 }  // namespace tint::writer::spirv